Skip to content

Commit d9125ec

Browse files
authored
Merge branch 'main' into staging
2 parents 62165df + 345a0ea commit d9125ec

22 files changed

Lines changed: 209 additions & 322 deletions

File tree

.github/workflows/ai-pr-review.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ jobs:
3838
CLOUDFLARE_GATEWAY_ID: ${{ secrets.CLOUDFLARE_AI_GATEWAY_ID }}
3939
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_AI_GATEWAY_TOKEN }}
4040
with:
41+
oidc_base_url: https://ask-bonk.cloudflare-exponent.workers.dev/auth
4142
model: 'cloudflare-ai-gateway/workers-ai/@cf/zai-org/glm-5.2'
4243
forks: 'false'
4344
permissions: write

docs/llm.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ Use `bun run dev:browser` for local browser-console inspection and `bun run depl
116116
### **Running Locally**
117117

118118
**Prerequisites:**
119-
- Node.js 18+
119+
- Node.js 22+
120120
- Cloudflare account (for D1, Durable Objects)
121121
- API keys: OpenAI, Anthropic, Google AI Studio
122122

@@ -4258,7 +4258,7 @@ Audit log for all authentication attempts.
42584258

42594259
### **verificationOtps Table**
42604260

4261-
Email verification codes (currently not actively used as users are auto-verified).
4261+
Email verification codes. The email-OTP verification flow has been removed (users are auto-verified on registration), so nothing reads or writes this table; the table is retained only to avoid a destructive migration.
42624262

42634263
**Fields:** email, otp (hashed), used, expiresAt (15 min)
42644264

docs/setup.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ Current generated-app previews use SpaceDO, a Worker Loader binding, and Dynamic
1111
Before getting started, make sure you have:
1212

1313
### Required
14-
- **Node.js** (v18 or later)
14+
- **Node.js** (v22 or later)
1515
- **Cloudflare account** with API access
1616
- **Cloudflare API Token** with appropriate permissions
1717

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
"private": true,
44
"version": "1.5.0",
55
"type": "module",
6+
"engines": {
7+
"node": ">=22"
8+
},
69
"workspaces": [
710
"space"
811
],

scripts/setup.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2119,7 +2119,12 @@ async function main() {
21192119
await setup.setup();
21202120
}
21212121

2122-
if (import.meta.url === `file://${process.argv[1]}`) {
2122+
// Run if this is the main module (supports both direct execution and tsx)
2123+
const isMainModule = import.meta.url.endsWith('setup.ts') ||
2124+
import.meta.url === `file://${process.argv[1]}` ||
2125+
process.argv[1]?.endsWith('setup.ts');
2126+
2127+
if (isMainModule) {
21232128
main().catch((error) => {
21242129
console.error('Setup failed:', error);
21252130
process.exit(1);

src/components/auth/login-modal.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -507,6 +507,7 @@ export function LoginModal({
507507
<a
508508
href="https://www.cloudflare.com/website-terms/"
509509
target="_blank"
510+
rel="noopener noreferrer"
510511
className="underline hover:text-kumo-default"
511512
>
512513
Terms of Service
@@ -515,6 +516,7 @@ export function LoginModal({
515516
<a
516517
href="https://www.cloudflare.com/privacypolicy/"
517518
target="_blank"
519+
rel="noopener noreferrer"
518520
className="underline hover:text-kumo-default"
519521
>
520522
Privacy Policy

src/components/cloudflare-account-selector.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -316,8 +316,8 @@ export function CloudflareAccountSelector() {
316316
<DropdownMenu.Content align="end">
317317
{gatewayDashUrl && (
318318
<DropdownMenu.Item
319-
icon={ArrowSquareOutIcon}
320-
onClick={() => window.open(gatewayDashUrl, '_blank')}
319+
icon={ArrowSquareOutIcon}
320+
onClick={() => window.open(gatewayDashUrl, '_blank', 'noopener,noreferrer')}
321321
>
322322
View gateway
323323
</DropdownMenu.Item>

src/features/presentation/components/PresentationHeaderActions.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ export function PresentationHeaderActions({
4848
: `${currentSrc}?print-pdf`;
4949

5050
// Open print view in new window for PDF export
51-
window.open(printUrl, '_blank');
51+
window.open(printUrl, '_blank', 'noopener,noreferrer');
5252
};
5353

5454
return (

src/lib/api-client.ts

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1249,34 +1249,6 @@ class ApiClient {
12491249
});
12501250
}
12511251

1252-
/**
1253-
* Verify email with OTP
1254-
*/
1255-
async verifyEmail(data: {
1256-
email: string;
1257-
otp: string;
1258-
}): Promise<ApiResponse<LoginResponseData>> {
1259-
return this.request<LoginResponseData>('/api/auth/verify-email', {
1260-
method: 'POST',
1261-
body: data,
1262-
});
1263-
}
1264-
1265-
/**
1266-
* Resend verification OTP
1267-
*/
1268-
async resendVerificationOtp(
1269-
email: string,
1270-
): Promise<ApiResponse<{ message: string }>> {
1271-
return this.request<{ message: string }>(
1272-
'/api/auth/resend-verification',
1273-
{
1274-
method: 'POST',
1275-
body: { email },
1276-
},
1277-
);
1278-
}
1279-
12801252
/**
12811253
* Get CSRF token
12821254
*/

src/routes/app/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -792,7 +792,7 @@ export default function AppView() {
792792
aria-label="Open in new tab"
793793
title="Open in new tab"
794794
onClick={() =>
795-
window.open(appUrl, '_blank')
795+
window.open(appUrl, '_blank', 'noopener,noreferrer')
796796
}
797797
icon={
798798
<ExternalLink className="size-3.5" />

0 commit comments

Comments
 (0)