@somewhere-tech/cli 0.37.7 → 0.37.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -22,12 +22,13 @@ export function registerInit(program) {
22
22
  program
23
23
  .command('init')
24
24
  .description('Write a local starter; when signed in, also create a project and link this directory')
25
- .option('--name <name>', 'Project name (skip prompt)')
25
+ .option('--name <name>', 'Project name (skip prompt); sign-in and invitation emails show it')
26
+ .option('--subdomain <slug>', 'Subdomain for the new project; default: derived from --name')
26
27
  .option('--link', 'Link to an existing project instead of creating one')
27
28
  .option('--project <ref>', 'Existing project ID, name, slug, or subdomain (requires --link)')
28
29
  .option('--bare', 'Create and link only: no starter source or dependencies (AGENTS.md/CLAUDE.md are still added when absent)')
29
30
  .option('--template <name>', 'Starter to write: auth (default, cookie sign-in) or minimal (no sign-in)', 'auth')
30
- .option('--features <ids>', 'Generate selected modules into an empty directory, comma-separated: auth, private-data, agent (see --catalog)')
31
+ .option('--features <ids>', 'Generate selected modules into an empty directory, comma-separated: auth, magic-link, private-data, agent (see --catalog)')
31
32
  .option('--ui <mode>', 'With --features: styled (default; src/ui + design tokens) or headless (hooks and plain markup)')
32
33
  .option('--catalog', 'Print the module catalog for --features and exit; no login, project or files')
33
34
  .option('--dry-run', 'With --features: validate the selection and print the file plan; nothing is created')
@@ -45,7 +46,8 @@ export function registerInit(program) {
45
46
  + ' somewhere init --catalog --json\n'
46
47
  + ' somewhere init --name my-app --features private-data --dry-run --json\n'
47
48
  + ' somewhere init --name my-app --features auth,private-data --ui styled\n'
48
- + 'Requirements are added and reported (private-data and agent add auth). --features only\n'
49
+ + ' somewhere init --name "Crew" --subdomain crew-app --features magic-link\n'
50
+ + 'Requirements are added and reported (magic-link, private-data and agent add auth). --features only\n'
49
51
  + 'writes into an empty directory and is checked before the project is created.\n')
50
52
  .action(async (opts, command) => {
51
53
  const dir = process.cwd();
@@ -85,6 +87,10 @@ export function registerInit(program) {
85
87
  error('--project requires --link.');
86
88
  process.exit(1);
87
89
  }
90
+ if (opts.subdomain !== undefined && opts.link) {
91
+ error('--subdomain names a new project; it cannot be combined with --link.');
92
+ process.exit(1);
93
+ }
88
94
  if (opts.json && opts.link && !opts.project) {
89
95
  error('--project <ref> is required with --link --json.');
90
96
  process.exit(1);
@@ -187,9 +193,12 @@ export function registerInit(program) {
187
193
  if (!name)
188
194
  return;
189
195
  }
190
- // If --name was provided, derive subdomain automatically (no prompt)
196
+ // --subdomain wins; with only --name, derive it (no prompt)
191
197
  let subdomain;
192
- if (opts.name) {
198
+ if (opts.subdomain !== undefined) {
199
+ subdomain = opts.subdomain.trim().toLowerCase();
200
+ }
201
+ else if (opts.name) {
193
202
  subdomain = name.toLowerCase().replace(/[^a-z0-9-]/g, '-');
194
203
  }
195
204
  else {
@@ -321,6 +330,7 @@ function printCatalog(opts, command) {
321
330
  opts.ui !== undefined ? '--ui' : null,
322
331
  opts.dryRun ? '--dry-run' : null,
323
332
  opts.name ? '--name' : null,
333
+ opts.subdomain !== undefined ? '--subdomain' : null,
324
334
  opts.link ? '--link' : null,
325
335
  opts.project ? '--project' : null,
326
336
  opts.bare ? '--bare' : null,
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -12,9 +12,7 @@ extend it using the README file map. Minimal/bare starters omit auth.
12
12
  URL, claim URL, and expiry. Login is needed for account-owned operations,
13
13
  the email test inbox and cron. On a hosted VM, after consent, \`somewhere login\` prints a
14
14
  code a human approves in their browser; the machine stays signed in.
15
- Ask \`somewhere advisor "<question>"\` how to build or fix it. For a reference,
16
- use \`somewhere docs <topic> --section <id>\`
17
- (MCP: \`advisor({ question })\`, \`docs({ topic })\`, \`catalog\`).
15
+ For a reference, use \`somewhere docs <topic> --section <id>\` (MCP: \`docs({ topic })\`, \`catalog\`).
18
16
 
19
17
  After every change:
20
18
  1. \`somewhere typecheck\`, then \`somewhere deploy\` (do not build first). Deploy
@@ -53,13 +51,14 @@ Functions: a bare \`export default async function (req, sw)\` returning a
53
51
  \`params.id\` there, \`sw.params.id\` bare. \`somewhere typecheck\` types bare
54
52
  handlers as \`(req: Request, sw: SomewhereRuntimeContext)\`.
55
53
 
56
- Data: tables in \`db/schema.ts\` — \`owner()\` (each user's own rows; no auth
57
- guard), \`shared()\` or \`serverOnly()\` — with a \`client\` block for browser
58
- access via \`somewhere:data\`; a custom endpoint enforces its own caller policy.
59
- \`sw.db.from\` / \`insert\` / \`update\` / \`remove\` return \`{ data: rows[], count,
54
+ Data: tables in \`db/schema.ts\` — \`owner()\` (normal data operations use the
55
+ signed-in user's rows), \`shared()\` or \`serverOnly()\` — with a \`client\` block for browser
56
+ access via \`somewhere:data\`; authorize custom endpoints.
57
+ Structured queries: \`sw.db.from\` / \`insert\` / \`update\` / \`remove\` return \`{ data: rows[], count,
60
58
  changes }\`; \`where: { a: 1, b: { in: ids }, c: { gte: 2 }, d: null }\` (one
61
- operator per column). Raw \`sw.db.query(sql, params)\` runs as written (add \`WHERE
62
- user_id = ?\`; managed projects refuse it). Independent reads: one \`Promise.all\`.`;
59
+ operator per column). Raw SQL \`sw.db.query(sql, params)\` runs as written (add \`WHERE
60
+ user_id = ?\`; managed projects refuse it). Use \`sw.db.server.query\` for managed
61
+ raw access; authorize the caller in your function. Parallel reads: \`Promise.all\`.`;
63
62
  export const SKILLS_POINTER = `Skills: \`${SKILLS_DIR}/\` — `
64
63
  + skillNames(BUNDLED_SKILLS_PACK).map((name) => `\`${name}\``).join(', ')
65
64
  + '. Read the skill that matches the task. `somewhere skills status` inspects the installed pack; `somewhere skills update` updates unmodified files.';
@@ -1 +1 @@
1
- {"version":3,"file":"init-agent-guide.js","sourceRoot":"","sources":["../../src/lib/init-agent-guide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1D,0EAA0E;AAC1E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oFAyDsD,CAAC;AAErF,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,UAAU,QAAQ;MACzD,UAAU,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;MACvE,oJAAoJ,CAAC;AAEzJ,MAAM,CAAC,MAAM,cAAc,GAAG,sCAAsC,cAAc,KAAK,cAAc,IAAI,CAAC;AAC1G,MAAM,CAAC,MAAM,cAAc,GAAG,4CAA4C,CAAC"}
1
+ {"version":3,"file":"init-agent-guide.js","sourceRoot":"","sources":["../../src/lib/init-agent-guide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1D,0EAA0E;AAC1E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oFAwDsD,CAAC;AAErF,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,UAAU,QAAQ;MACzD,UAAU,CAAC,mBAAmB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;MACvE,oJAAoJ,CAAC;AAEzJ,MAAM,CAAC,MAAM,cAAc,GAAG,sCAAsC,cAAc,KAAK,cAAc,IAAI,CAAC;AAC1G,MAAM,CAAC,MAAM,cAAc,GAAG,4CAA4C,CAAC"}
@@ -9,7 +9,7 @@ const PACKAGE_JSON = `{
9
9
  "typecheck": "somewhere typecheck"
10
10
  },
11
11
  "dependencies": {
12
- "@somewhere-tech/sdk": "0.11.3",
12
+ "@somewhere-tech/sdk": "0.11.6",
13
13
  "react": "19.2.7",
14
14
  "react-dom": "19.2.7"
15
15
  },
@@ -101,6 +101,25 @@ export interface UnconfirmedSignOut {
101
101
  pending: boolean;
102
102
  retry(): void;
103
103
  }
104
+
105
+ /**
106
+ * The "verify your email" panel. checking: asking the server. verified: done;
107
+ * the panel shows nothing. unverified: the code form. unavailable: the server
108
+ * could not say; retry() asks again.
109
+ */
110
+ export interface EmailVerification {
111
+ status: 'checking' | 'verified' | 'unverified' | 'unavailable';
112
+ code: string;
113
+ /** A code was emailed in this visit. */
114
+ sent: boolean;
115
+ pending: boolean;
116
+ error: string | null;
117
+ canSubmit: boolean;
118
+ setCode(value: string): void;
119
+ sendCode(): Promise<void>;
120
+ submit(): Promise<void>;
121
+ retry(): void;
122
+ }
104
123
  `;
105
124
  const AUTH_SERVICE = `import { AuthError, createSomewhereAuth } from '@somewhere-tech/sdk/auth';
106
125
 
@@ -2165,11 +2184,404 @@ const ASSISTANT_CSS = `/* Assistant example: delete with src/ui/AssistantPanel.t
2165
2184
  .composer { grid-template-columns: 1fr; }
2166
2185
  }
2167
2186
  `;
2187
+ // ----------------------------------------------------------------- magic-link
2188
+ const MAGIC_LINK_TYPES = `/** The "email me a sign-in link" form on the sign-in page. */
2189
+ export interface MagicLinkRequest {
2190
+ email: string;
2191
+ pending: boolean;
2192
+ /** The address the last link was sent to, until the email is edited. */
2193
+ sentTo: string | null;
2194
+ error: string | null;
2195
+ canSubmit: boolean;
2196
+ setEmail(value: string): void;
2197
+ submit(): Promise<void>;
2198
+ }
2199
+
2200
+ /**
2201
+ * The /auth/magic page the emailed link opens. verifying: the one-time token
2202
+ * is being exchanged for the session. failed: it was missing, already used,
2203
+ * expired or revoked. On success the page leaves, so there is no third state.
2204
+ */
2205
+ export type MagicLinkLanding =
2206
+ | { status: 'verifying' }
2207
+ | { status: 'failed'; error: string };
2208
+ `;
2209
+ const MAGIC_LINK_HOOKS = `import { useEffect, useRef, useState } from 'react';
2210
+ import { useAuth } from '@somewhere-tech/sdk/react';
2211
+ import type { MagicLinkLanding, MagicLinkRequest } from '../../types/magic-link';
2212
+ import { authErrorMessage } from '../services/auth';
2213
+
2214
+ // Sign-in links. The packaged route api/auth/[...path].ts sends the email
2215
+ // (POST /api/auth/magic-link) and redeems it (/api/auth/magic-link/verify).
2216
+ // The email opens /auth/magic?token=…; the token works once.
2217
+
2218
+ export function useMagicLinkRequest(): MagicLinkRequest {
2219
+ const auth = useAuth();
2220
+ const [email, setEmailValue] = useState('');
2221
+ const [pending, setPending] = useState(false);
2222
+ const [sentTo, setSentTo] = useState<string | null>(null);
2223
+ const [error, setError] = useState<string | null>(null);
2224
+ const canSubmit = !pending && email.trim() !== '';
2225
+
2226
+ async function submit() {
2227
+ if (!canSubmit) return;
2228
+ const address = email.trim();
2229
+ setPending(true);
2230
+ setError(null);
2231
+ try {
2232
+ await auth.sendMagicLink({ email: address });
2233
+ setSentTo(address);
2234
+ } catch (reason: unknown) {
2235
+ setError(authErrorMessage(reason));
2236
+ } finally {
2237
+ setPending(false);
2238
+ }
2239
+ }
2240
+
2241
+ return {
2242
+ email,
2243
+ pending,
2244
+ sentTo,
2245
+ error,
2246
+ canSubmit,
2247
+ setEmail(value) {
2248
+ setEmailValue(value);
2249
+ setSentTo(null);
2250
+ },
2251
+ submit,
2252
+ };
2253
+ }
2254
+
2255
+ /**
2256
+ * Where to go after signing in: the link's redirect_uri when it is a page of
2257
+ * this app (an invitation link carries ?invite_id=… there), otherwise home.
2258
+ * Another origin is never followed.
2259
+ */
2260
+ export function landingTarget(search: string, origin: string): string {
2261
+ const requested = new URLSearchParams(search).get('redirect_uri');
2262
+ if (!requested) return '/';
2263
+ try {
2264
+ const url = new URL(requested, origin);
2265
+ return url.origin === origin ? url.pathname + url.search + url.hash : '/';
2266
+ } catch {
2267
+ return '/';
2268
+ }
2269
+ }
2270
+
2271
+ export function useMagicLinkLanding(): MagicLinkLanding {
2272
+ const auth = useAuth();
2273
+ const [error, setError] = useState<string | null>(null);
2274
+ const started = useRef(false);
2275
+
2276
+ useEffect(() => {
2277
+ if (started.current) return; // the token works once; never verify it twice
2278
+ started.current = true;
2279
+ const token = new URLSearchParams(window.location.search).get('token');
2280
+ const target = landingTarget(window.location.search, window.location.origin);
2281
+ if (!token) {
2282
+ setError('This sign-in link is incomplete. Request a new one.');
2283
+ return;
2284
+ }
2285
+ // Keep the one-time token out of the address bar and history.
2286
+ window.history.replaceState(null, '', window.location.pathname);
2287
+ auth.verifyMagicLink({ token })
2288
+ // A full load: the app starts again with the new session.
2289
+ .then(() => window.location.replace(target))
2290
+ .catch((reason: unknown) => setError(authErrorMessage(reason)));
2291
+ }, [auth]);
2292
+
2293
+ return error === null ? { status: 'verifying' } : { status: 'failed', error };
2294
+ }
2295
+ `;
2296
+ const MAGIC_LINK_PAGE = `import { useMagicLinkLanding } from '../auth/magic-link';
2297
+ import { MagicLinkStatus } from '../ui/MagicLink';
2298
+
2299
+ // /auth/magic: the page the emailed sign-in or invitation link opens.
2300
+ export function MagicLinkPage() {
2301
+ const landing = useMagicLinkLanding();
2302
+ return <MagicLinkStatus landing={landing} />;
2303
+ }
2304
+ `;
2305
+ const MAGIC_SIGN_IN_PAGE = `import { useCredentialsForm, useUnconfirmedSignOut } from '../auth/hooks';
2306
+ import { useMagicLinkRequest } from '../auth/magic-link';
2307
+ import { APP_NAME } from '../config';
2308
+ import { AuthCard } from '../ui/AuthCard';
2309
+ import { SignOutUnconfirmed } from '../ui/feedback';
2310
+ import { MagicLinkForm } from '../ui/MagicLink';
2311
+
2312
+ export function SignInPage() {
2313
+ const form = useCredentialsForm();
2314
+ const magicLink = useMagicLinkRequest();
2315
+ const unconfirmed = useUnconfirmedSignOut();
2316
+ return (
2317
+ <>
2318
+ {unconfirmed ? <SignOutUnconfirmed pending={unconfirmed.pending} onRetry={unconfirmed.retry} /> : null}
2319
+ <AuthCard appName={APP_NAME} form={form}>
2320
+ <MagicLinkForm request={magicLink} />
2321
+ </AuthCard>
2322
+ </>
2323
+ );
2324
+ }
2325
+ `;
2326
+ const STYLED_MAGIC_LINK = `import type { FormEvent } from 'react';
2327
+ import type { MagicLinkLanding, MagicLinkRequest } from '../../types/magic-link';
2328
+
2329
+ export function MagicLinkForm({ request }: { request: MagicLinkRequest }) {
2330
+ function onSubmit(event: FormEvent<HTMLFormElement>) {
2331
+ event.preventDefault();
2332
+ void request.submit();
2333
+ }
2334
+ return (
2335
+ <form className="panel auth__form" onSubmit={onSubmit} noValidate aria-label="Email me a sign-in link">
2336
+ <div className="field">
2337
+ <label htmlFor="magic-email">No password? Get a sign-in link</label>
2338
+ <input id="magic-email" type="email" name="email" autoComplete="email" inputMode="email" required
2339
+ value={request.email} onChange={(event) => request.setEmail(event.target.value)} />
2340
+ </div>
2341
+ {request.error ? <p className="error" role="alert">{request.error}</p> : null}
2342
+ {request.sentTo ? <p className="hint" role="status">Check {request.sentTo} for your sign-in link. It works once.</p> : null}
2343
+ <button type="submit" className="button button--quiet" disabled={!request.canSubmit} aria-busy={request.pending}>
2344
+ {request.pending ? 'Sending…' : 'Email me a sign-in link'}
2345
+ </button>
2346
+ </form>
2347
+ );
2348
+ }
2349
+
2350
+ export function MagicLinkStatus({ landing }: { landing: MagicLinkLanding }) {
2351
+ if (landing.status === 'verifying') {
2352
+ return (
2353
+ <main className="loading" aria-busy="true">
2354
+ <span className="spinner" aria-hidden="true" />
2355
+ <p role="status">Signing you in…</p>
2356
+ </main>
2357
+ );
2358
+ }
2359
+ return (
2360
+ <main className="loading">
2361
+ <p className="error" role="alert">{landing.error}</p>
2362
+ <a href="/">Back to sign-in</a>
2363
+ </main>
2364
+ );
2365
+ }
2366
+ `;
2367
+ const PLAIN_MAGIC_LINK = `import type { FormEvent } from 'react';
2368
+ import type { MagicLinkLanding, MagicLinkRequest } from '../../types/magic-link';
2369
+
2370
+ export function MagicLinkForm({ request }: { request: MagicLinkRequest }) {
2371
+ function onSubmit(event: FormEvent<HTMLFormElement>) {
2372
+ event.preventDefault();
2373
+ void request.submit();
2374
+ }
2375
+ return (
2376
+ <form onSubmit={onSubmit} noValidate aria-label="Email me a sign-in link">
2377
+ <p>
2378
+ <label htmlFor="magic-email">No password? Get a sign-in link</label><br />
2379
+ <input id="magic-email" type="email" name="email" autoComplete="email" required
2380
+ value={request.email} onChange={(event) => request.setEmail(event.target.value)} />
2381
+ </p>
2382
+ {request.error ? <p role="alert">{request.error}</p> : null}
2383
+ {request.sentTo ? <p role="status">Check {request.sentTo} for your sign-in link. It works once.</p> : null}
2384
+ <button type="submit" disabled={!request.canSubmit} aria-busy={request.pending}>
2385
+ {request.pending ? 'Sending…' : 'Email me a sign-in link'}
2386
+ </button>
2387
+ </form>
2388
+ );
2389
+ }
2390
+
2391
+ export function MagicLinkStatus({ landing }: { landing: MagicLinkLanding }) {
2392
+ if (landing.status === 'verifying') return <main aria-busy="true"><p role="status">Signing you in…</p></main>;
2393
+ return (
2394
+ <main>
2395
+ <p role="alert">{landing.error}</p>
2396
+ <a href="/">Back to sign-in</a>
2397
+ </main>
2398
+ );
2399
+ }
2400
+ `;
2401
+ function replaceOnce(text, find, replacement) {
2402
+ const at = text.indexOf(find);
2403
+ if (at === -1 || text.indexOf(find, at + 1) !== -1)
2404
+ throw new Error(`init template: expected one ${JSON.stringify(find)}`);
2405
+ return text.slice(0, at) + replacement + text.slice(at + find.length);
2406
+ }
2407
+ /** The sign-in card with room below its form for the sign-in-link form. */
2408
+ function authCard(styled, magicLink) {
2409
+ const card = styled ? STYLED_AUTH_CARD : PLAIN_AUTH_CARD;
2410
+ if (!magicLink)
2411
+ return card;
2412
+ let out = replaceOnce(card, "import type { FormEvent } from 'react';", "import type { FormEvent, ReactNode } from 'react';");
2413
+ out = replaceOnce(out, '{ appName, form }: { appName: string; form: CredentialsForm }', '{ appName, form, children }: { appName: string; form: CredentialsForm; children?: ReactNode }');
2414
+ if (styled) {
2415
+ out = replaceOnce(out, ' <form className="panel auth__form"', ' <div className="auth__column">\n <form className="panel auth__form"');
2416
+ out = replaceOnce(out, ' </form>\n </main>', ' </form>\n {children}\n </div>\n </main>');
2417
+ }
2418
+ else {
2419
+ out = replaceOnce(out, ' </p>\n </main>', ' </p>\n {children}\n </main>');
2420
+ }
2421
+ return out;
2422
+ }
2423
+ /** App.tsx with /auth/magic in front of the sign-in gate: the person is not
2424
+ * signed in yet when the emailed link opens it. */
2425
+ function appTsx(magicLink) {
2426
+ if (!magicLink)
2427
+ return APP;
2428
+ let out = replaceOnce(APP, "import { HomePage } from './pages/HomePage';\n", "import { HomePage } from './pages/HomePage';\nimport { MagicLinkPage } from './pages/MagicLinkPage';\n");
2429
+ out = replaceOnce(out, ' const session = useAuthState();\n\n', " const pathname = usePathname();\n const session = useAuthState();\n\n // The emailed sign-in link lands here before a session exists.\n if (pathname === '/auth/magic') return <MagicLinkPage />;\n");
2430
+ return out;
2431
+ }
2432
+ const MAGIC_LINK_CSS = `/* Sign-in links: delete with src/ui/MagicLink.tsx. */
2433
+ .auth__column { display: grid; gap: var(--space-4); }
2434
+ `;
2435
+ // --------------------------------------------------------------- verify-email
2436
+ const VERIFY_EMAIL_HOOK = `import { useEffect, useState } from 'react';
2437
+ import { useAuth } from '@somewhere-tech/sdk/react';
2438
+ import type { EmailVerification } from '../../types/auth';
2439
+ import { authErrorMessage } from '../services/auth';
2440
+
2441
+ // Email verification for the signed-in account, through the packaged route
2442
+ // api/auth/[...path].ts (GET/POST /api/auth/verify-email and
2443
+ // POST /api/auth/request-email-verification). The session cookie decides the
2444
+ // account; this page never holds a token. Accounts that signed in with a link
2445
+ // are already verified, so they never see the panel.
2446
+ export function useEmailVerification(): EmailVerification {
2447
+ const auth = useAuth();
2448
+ const [status, setStatus] = useState<EmailVerification['status']>('checking');
2449
+ const [code, setCode] = useState('');
2450
+ const [sent, setSent] = useState(false);
2451
+ const [pending, setPending] = useState(false);
2452
+ const [error, setError] = useState<string | null>(null);
2453
+ const [attempt, setAttempt] = useState(0);
2454
+
2455
+ useEffect(() => {
2456
+ let current = true;
2457
+ setStatus('checking');
2458
+ auth.emailVerified()
2459
+ .then((verified) => { if (current) setStatus(verified ? 'verified' : 'unverified'); })
2460
+ .catch(() => { if (current) setStatus('unavailable'); });
2461
+ return () => { current = false; };
2462
+ }, [auth, attempt]);
2463
+
2464
+ async function run(action: () => Promise<void>) {
2465
+ setPending(true);
2466
+ setError(null);
2467
+ try {
2468
+ await action();
2469
+ } catch (reason: unknown) {
2470
+ setError(authErrorMessage(reason));
2471
+ } finally {
2472
+ setPending(false);
2473
+ }
2474
+ }
2475
+
2476
+ return {
2477
+ status,
2478
+ code,
2479
+ sent,
2480
+ pending,
2481
+ error,
2482
+ canSubmit: !pending && /^[0-9]{6}$/.test(code.trim()),
2483
+ setCode,
2484
+ sendCode: () => run(async () => { await auth.requestEmailVerification(); setSent(true); }),
2485
+ submit: () => run(async () => { await auth.verifyEmail({ code: code.trim() }); setStatus('verified'); }),
2486
+ retry: () => setAttempt((value) => value + 1),
2487
+ };
2488
+ }
2489
+ `;
2490
+ const STYLED_VERIFY_EMAIL = `import type { FormEvent } from 'react';
2491
+ import type { EmailVerification } from '../../types/auth';
2492
+
2493
+ export function VerifyEmailPanel({ verification }: { verification: EmailVerification }) {
2494
+ if (verification.status === 'checking' || verification.status === 'verified') return null;
2495
+ if (verification.status === 'unavailable') {
2496
+ return (
2497
+ <div className="banner" role="alert">
2498
+ <p>Could not check whether your email is verified.</p>
2499
+ <button type="button" className="button button--quiet" onClick={verification.retry}>Try again</button>
2500
+ </div>
2501
+ );
2502
+ }
2503
+ function onSubmit(event: FormEvent<HTMLFormElement>) {
2504
+ event.preventDefault();
2505
+ void verification.submit();
2506
+ }
2507
+ return (
2508
+ <section className="panel verify-email" aria-label="Verify your email">
2509
+ <p><strong>Verify your email.</strong> {verification.sent ? 'Enter the 6-digit code we emailed you.' : 'We will email you a 6-digit code.'}</p>
2510
+ {verification.sent ? (
2511
+ <form className="verify-email__form" onSubmit={onSubmit} noValidate>
2512
+ <label htmlFor="verify-code">Code</label>
2513
+ <input id="verify-code" inputMode="numeric" autoComplete="one-time-code" maxLength={6} required
2514
+ value={verification.code} onChange={(event) => verification.setCode(event.target.value)} />
2515
+ <button type="submit" className="button" disabled={!verification.canSubmit} aria-busy={verification.pending}>Verify</button>
2516
+ <button type="button" className="link-button" onClick={() => void verification.sendCode()} disabled={verification.pending}>Send a new code</button>
2517
+ </form>
2518
+ ) : (
2519
+ <button type="button" className="button" onClick={() => void verification.sendCode()} disabled={verification.pending} aria-busy={verification.pending}>
2520
+ Email me a code
2521
+ </button>
2522
+ )}
2523
+ {verification.error ? <p className="error" role="alert">{verification.error}</p> : null}
2524
+ </section>
2525
+ );
2526
+ }
2527
+ `;
2528
+ const PLAIN_VERIFY_EMAIL = `import type { FormEvent } from 'react';
2529
+ import type { EmailVerification } from '../../types/auth';
2530
+
2531
+ export function VerifyEmailPanel({ verification }: { verification: EmailVerification }) {
2532
+ if (verification.status === 'checking' || verification.status === 'verified') return null;
2533
+ if (verification.status === 'unavailable') {
2534
+ return (
2535
+ <p role="alert">
2536
+ Could not check whether your email is verified. <button type="button" onClick={verification.retry}>Try again</button>
2537
+ </p>
2538
+ );
2539
+ }
2540
+ function onSubmit(event: FormEvent<HTMLFormElement>) {
2541
+ event.preventDefault();
2542
+ void verification.submit();
2543
+ }
2544
+ return (
2545
+ <section aria-label="Verify your email">
2546
+ <p>Verify your email. {verification.sent ? 'Enter the 6-digit code we emailed you.' : 'We will email you a 6-digit code.'}</p>
2547
+ {verification.sent ? (
2548
+ <form onSubmit={onSubmit} noValidate>
2549
+ <label htmlFor="verify-code">Code</label>{' '}
2550
+ <input id="verify-code" inputMode="numeric" autoComplete="one-time-code" maxLength={6} required
2551
+ value={verification.code} onChange={(event) => verification.setCode(event.target.value)} />{' '}
2552
+ <button type="submit" disabled={!verification.canSubmit} aria-busy={verification.pending}>Verify</button>{' '}
2553
+ <button type="button" onClick={() => void verification.sendCode()} disabled={verification.pending}>Send a new code</button>
2554
+ </form>
2555
+ ) : (
2556
+ <button type="button" onClick={() => void verification.sendCode()} disabled={verification.pending} aria-busy={verification.pending}>
2557
+ Email me a code
2558
+ </button>
2559
+ )}
2560
+ {verification.error ? <p role="alert">{verification.error}</p> : null}
2561
+ </section>
2562
+ );
2563
+ }
2564
+ `;
2565
+ const VERIFY_EMAIL_CSS = `/* Email verification panel (src/ui/VerifyEmail.tsx). */
2566
+ .verify-email { display: grid; gap: var(--space-3); margin-bottom: var(--space-6); }
2567
+ .verify-email p { margin: 0; }
2568
+ .verify-email__form { display: flex; flex-wrap: wrap; gap: var(--space-2); align-items: center; }
2569
+ .verify-email__form input { width: 8ch; letter-spacing: 0.2em; }
2570
+ `;
2571
+ /** The signed-in frame, with the verify-email panel above every page. */
2572
+ function signedInLayout() {
2573
+ let out = replaceOnce(SIGNED_IN_LAYOUT, "import { useSignOut } from '../auth/hooks';\n", "import { useSignOut } from '../auth/hooks';\nimport { useEmailVerification } from '../auth/useEmailVerification';\n");
2574
+ out = replaceOnce(out, "import { AppShell } from '../ui/AppShell';\n", "import { AppShell } from '../ui/AppShell';\nimport { VerifyEmailPanel } from '../ui/VerifyEmail';\n");
2575
+ out = replaceOnce(out, ' const signOut = useSignOut();\n', ' const signOut = useSignOut();\n const verification = useEmailVerification();\n');
2576
+ out = replaceOnce(out, ' {children}\n', ' <VerifyEmailPanel verification={verification} />\n {children}\n');
2577
+ return out;
2578
+ }
2168
2579
  // --------------------------------------------------------------------- readme
2169
2580
  function readme(selection) {
2170
2581
  const styled = selection.ui === 'styled';
2171
2582
  const privateData = selection.modules.includes('private-data');
2172
2583
  const agent = selection.modules.includes('agent');
2584
+ const magicLink = selection.modules.includes('magic-link');
2173
2585
  const lines = [
2174
2586
  '# somewhere.tech app',
2175
2587
  '',
@@ -2179,15 +2591,21 @@ function readme(selection) {
2179
2591
  styled
2180
2592
  ? '- Look: `src/styles/tokens.css` (shared values), `src/styles/app.css`, and the views in `src/ui/`. Views take props only; rewrite or replace them freely.'
2181
2593
  : '- Look: `src/ui/` holds plain semantic views. Replace them with your own components; keep their props, or change the pages that pass them.',
2182
- '- Sign-in: `src/auth/hooks.ts` (state and actions) over the SDK client in `src/services/auth.ts` and the SDK route `api/auth/[...path].ts`.',
2594
+ '- Sign-in: `src/auth/hooks.ts` (state and actions) over the SDK client in `src/services/auth.ts` and the SDK route `api/auth/[...path].ts`. Email verification: `src/auth/useEmailVerification.ts` and `src/ui/VerifyEmail.tsx`.',
2183
2595
  ];
2596
+ if (magicLink) {
2597
+ lines.push('- Sign-in links: `src/auth/magic-link.ts` (send and redeem), `src/pages/MagicLinkPage.tsx` (the `/auth/magic` page the email opens), `src/ui/MagicLink.tsx` (views).');
2598
+ }
2184
2599
  if (privateData) {
2185
2600
  lines.push('- Data: `db/schema.ts` (tables and browser permissions), `src/services/notes.ts` (calls), `src/data/useNotes.ts` (state). The notes example is removable.');
2186
2601
  }
2187
2602
  if (agent) {
2188
2603
  lines.push('- Assistant: `api/chat.ts` (the agent run and its tools), `api/proposals.ts` (approve/reject), `src/services/assistant.ts`, `src/data/useAssistant.ts`, `src/ui/AssistantPanel.tsx`. Preview states: `src/fixtures/assistant.ts`.');
2189
2604
  }
2190
- lines.push('', '## Auth', '', 'Auth is handled by `@somewhere-tech/sdk`. The session is an httpOnly cookie;', 'app code does not store or send a token. `src/App.tsx` shows private pages only', 'for an account the server confirmed: a loading screen until the first check', 'answers, and a "try again" screen when the server cannot be reached (pages', 'already open stay mounted but hidden, so unsaved input survives). Signing out', 'clears private pages at once and shows "Signing out…" until the server answers;', 'if it cannot confirm, the sign-in page says so and offers "Sign out again". The gate is', 'only UX: functions and `db/schema.ts` decide what a request may read or write.', 'Password reset, OAuth and MFA are not generated.');
2605
+ lines.push('', '## Auth', '', 'Auth is handled by `@somewhere-tech/sdk`. The session is an httpOnly cookie;', 'app code does not store or send a token. `src/App.tsx` shows private pages only', 'for an account the server confirmed: a loading screen until the first check', 'answers, and a "try again" screen when the server cannot be reached (pages', 'already open stay mounted but hidden, so unsaved input survives). Signing out', 'clears private pages at once and shows "Signing out…" until the server answers;', 'if it cannot confirm, the sign-in page says so and offers "Sign out again". The gate is', 'only UX: functions and `db/schema.ts` decide what a request may read or write.', 'A password account sees a "Verify your email" panel until it enters the 6-digit', 'code the platform emails it (`auth.requestEmailVerification` / `auth.verifyEmail`', 'through the same SDK route; the session cookie decides the account).', 'Password reset, OAuth and MFA are not generated.');
2606
+ if (magicLink) {
2607
+ lines.push('', '## Sign-in links', '', 'The sign-in page also emails a one-time link (`auth.sendMagicLink`). It opens', '`/auth/magic?token=…`, which `src/App.tsx` routes in front of the sign-in gate;', 'the page exchanges the token for the same cookie session (`auth.verifyMagicLink`)', 'and then opens the link\'s `redirect_uri` when it is a page of this app, otherwise', '`/`. The first link creates the account. Invitations from `sw.auth.invite` land', 'on the same page. The email shows the project name: create the project with', '`somewhere init --name "Your App" --subdomain your-app`.', 'Test it with `<name>@<subdomain>.test.somewhere.site`, then', '`somewhere email test-inbox <address>` prints the link. `somewhere docs sw.auth`');
2608
+ }
2191
2609
  if (privateData) {
2192
2610
  lines.push('', '## Private data', '', '`db/schema.ts` declares `notes` with `owner()`, so the generated `somewhere:data`', 'client returns and changes only the signed-in user\'s rows; the browser code', 'sends no user filter. Functions you add can bypass this with explicit', 'server-authority calls and must check the caller themselves. The title/body', 'length limits are form checks only. Contract: `somewhere docs declared-data`.');
2193
2611
  }
@@ -2205,6 +2623,8 @@ export function extensionPoints(selection) {
2205
2623
  look: selection.ui === 'styled' ? 'src/styles/tokens.css, src/styles/app.css, src/ui/' : 'src/ui/',
2206
2624
  auth: 'src/auth/hooks.ts',
2207
2625
  };
2626
+ if (selection.modules.includes('magic-link'))
2627
+ points.magic_link = 'src/auth/magic-link.ts, src/pages/MagicLinkPage.tsx';
2208
2628
  if (selection.modules.includes('private-data'))
2209
2629
  points.data = 'db/schema.ts, src/services/notes.ts, src/data/useNotes.ts';
2210
2630
  if (selection.modules.includes('agent'))
@@ -2216,6 +2636,7 @@ export function createFeatureTemplate(selection, options) {
2216
2636
  const styled = selection.ui === 'styled';
2217
2637
  const privateData = selection.modules.includes('private-data');
2218
2638
  const agent = selection.modules.includes('agent');
2639
+ const magicLink = selection.modules.includes('magic-link');
2219
2640
  const files = [
2220
2641
  { path: '.gitignore', content: 'node_modules\ndist\nbuild\n.env\n' },
2221
2642
  { path: 'AGENTS.md', content: INIT_AGENTS_MD },
@@ -2227,21 +2648,26 @@ export function createFeatureTemplate(selection, options) {
2227
2648
  { path: 'api/auth/[...path].ts', content: AUTH_API },
2228
2649
  { path: 'types/auth.ts', content: AUTH_TYPES },
2229
2650
  { path: 'src/main.tsx', content: mainTsx(styled, agent) },
2230
- { path: 'src/App.tsx', content: APP },
2651
+ { path: 'src/App.tsx', content: appTsx(magicLink) },
2231
2652
  { path: 'src/config.ts', content: configTs(options.appName) },
2232
2653
  { path: 'src/routes.ts', content: ROUTES },
2233
2654
  { path: 'src/services/auth.ts', content: AUTH_SERVICE },
2234
2655
  { path: 'src/auth/hooks.ts', content: AUTH_HOOKS },
2235
- { path: 'src/pages/SignInPage.tsx', content: SIGN_IN_PAGE },
2236
- { path: 'src/pages/SignedInLayout.tsx', content: SIGNED_IN_LAYOUT },
2656
+ { path: 'src/pages/SignInPage.tsx', content: magicLink ? MAGIC_SIGN_IN_PAGE : SIGN_IN_PAGE },
2657
+ { path: 'src/pages/SignedInLayout.tsx', content: signedInLayout() },
2658
+ { path: 'src/auth/useEmailVerification.ts', content: VERIFY_EMAIL_HOOK },
2659
+ { path: 'src/ui/VerifyEmail.tsx', content: styled ? STYLED_VERIFY_EMAIL : PLAIN_VERIFY_EMAIL },
2237
2660
  { path: 'src/pages/HomePage.tsx', content: homePage(privateData, agent) },
2238
2661
  { path: 'src/pages/NotFoundPage.tsx', content: NOT_FOUND_PAGE },
2239
2662
  { path: 'src/ui/feedback.tsx', content: styled ? STYLED_FEEDBACK : PLAIN_FEEDBACK },
2240
- { path: 'src/ui/AuthCard.tsx', content: styled ? STYLED_AUTH_CARD : PLAIN_AUTH_CARD },
2663
+ { path: 'src/ui/AuthCard.tsx', content: authCard(styled, magicLink) },
2241
2664
  { path: 'src/ui/AppShell.tsx', content: styled ? STYLED_APP_SHELL : PLAIN_APP_SHELL },
2242
2665
  ];
2243
2666
  if (styled) {
2244
- files.push({ path: 'src/styles/tokens.css', content: TOKENS_CSS }, { path: 'src/styles/app.css', content: [APP_CSS, ...(privateData ? [NOTES_CSS] : []), ...(agent ? [privateData ? ASSISTANT_CSS : ASSISTANT_SHARED_CSS + ASSISTANT_CSS] : [])].join('\n') });
2667
+ files.push({ path: 'src/styles/tokens.css', content: TOKENS_CSS }, { path: 'src/styles/app.css', content: [APP_CSS, VERIFY_EMAIL_CSS, ...(magicLink ? [MAGIC_LINK_CSS] : []), ...(privateData ? [NOTES_CSS] : []), ...(agent ? [privateData ? ASSISTANT_CSS : ASSISTANT_SHARED_CSS + ASSISTANT_CSS] : [])].join('\n') });
2668
+ }
2669
+ if (magicLink) {
2670
+ files.push({ path: 'types/magic-link.ts', content: MAGIC_LINK_TYPES }, { path: 'src/auth/magic-link.ts', content: MAGIC_LINK_HOOKS }, { path: 'src/pages/MagicLinkPage.tsx', content: MAGIC_LINK_PAGE }, { path: 'src/ui/MagicLink.tsx', content: styled ? STYLED_MAGIC_LINK : PLAIN_MAGIC_LINK });
2245
2671
  }
2246
2672
  if (privateData || agent)
2247
2673
  files.push({ path: 'db/schema.ts', content: schemaTs(privateData, agent) });
@@ -1 +1 @@
1
- {"version":3,"file":"init-feature-template.js","sourceRoot":"","sources":["../../src/lib/init-feature-template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-feature-template.js","sourceRoot":"","sources":["../../src/lib/init-feature-template.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,19 @@
1
1
  // The module menu for `somewhere init --features`. A const table, not a
2
2
  // plugin system: each module names what it requires, and the resolver adds
3
3
  // those requirements and reports them. Files come from init-feature-template.ts.
4
- export const INIT_MODULE_IDS = ['auth', 'private-data', 'agent'];
4
+ export const INIT_MODULE_IDS = ['auth', 'magic-link', 'private-data', 'agent'];
5
5
  export const INIT_UI_MODES = ['styled', 'headless'];
6
6
  const MODULES = [
7
7
  {
8
8
  id: 'auth',
9
- summary: 'Email/password sign-up, sign-in and sign-out through the SDK cookie session: the packaged /api/auth route, auth hooks over the SDK provider, a sign-in page, and a per-user private boundary behind a loading state. This is what plain `somewhere init` writes.',
9
+ summary: 'Email/password sign-up, sign-in and sign-out through the SDK cookie session: the packaged /api/auth route, auth hooks over the SDK provider, a sign-in page, a "Verify your email" code panel for password accounts (the session decides the account; no token in page code), and a per-user private boundary behind a loading state. This is what plain `somewhere init` writes.',
10
10
  requires: [],
11
11
  },
12
+ {
13
+ id: 'magic-link',
14
+ summary: 'Passwordless sign-in links on the sign-in page: an "email me a sign-in link" form (auth.sendMagicLink through the packaged /api/auth route), the /auth/magic page the email opens, routed in front of the sign-in gate, which redeems the one-time token for the same cookie session and then opens the link\'s redirect_uri only when it is a page of this app. sw.auth.invite links land on the same page.',
15
+ requires: ['auth'],
16
+ },
12
17
  {
13
18
  id: 'private-data',
14
19
  summary: 'A notes table each signed-in user owns (db/schema.ts owner()), read and written from the browser through the generated somewhere:data client, with form validation, error mapping, no-change results, and a per-user reset on sign-out or account switch.',
@@ -1 +1 @@
1
- {"version":3,"file":"init-features.js","sourceRoot":"","sources":["../../src/lib/init-features.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-features.js","sourceRoot":"","sources":["../../src/lib/init-features.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@somewhere-tech/cli",
3
- "version": "0.37.7",
3
+ "version": "0.37.9",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "@somewhere-tech/cli",
9
- "version": "0.37.7",
9
+ "version": "0.37.9",
10
10
  "bundleDependencies": [
11
11
  "@modelcontextprotocol/sdk",
12
12
  "chokidar",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@somewhere-tech/cli",
3
- "version": "0.37.7",
3
+ "version": "0.37.9",
4
4
  "description": "CLI for somewhere.tech — auth, projects, deploy, pull, promote, db, logs, env, MCP bridge.",
5
5
  "keywords": [
6
6
  "somewhere",
@@ -2,7 +2,7 @@
2
2
  "esbuild": "0.24.0",
3
3
  "source_files": {
4
4
  "worker/containers/compile/declared-data-contract.cjs": "49db952d33eee0b41583c541abe304a91dbe22207f0309cc480e32a1c9484df5",
5
- "worker/containers/compile/runtime-types.cjs": "0c90ca3404de59f976a74bdaeecef0365888f62b4e0178aad5ad8f4d3b717f6c",
5
+ "worker/containers/compile/runtime-types.cjs": "a8fe7a450cf80ac1a986c6f70b5b3e908666f9a3d8e287d17ba398f35f184e39",
6
6
  "worker/containers/compile/schema-types.cjs": "2872a80845d0ea1ba806dc98da6b578a19331a94ad4d5c5e66d114b034f8e5fe",
7
7
  "worker/containers/compile/typed-data.cjs": "57b458e16a373e42d48a0e527317fcdf609299ae368eb539a8b582b9a47abb15",
8
8
  "worker/containers/compile/typed-files.cjs": "af198ef42ea3d68df31ade5b146ead89414e5200f144de4268ca9713c382716c",
@@ -11,8 +11,8 @@
11
11
  "worker/src/utils/db-schema-deploy/client-permissions.ts": "05b1d68afae151569abfa16b452834a96b3c0a2bf4b04f63d322f05548827222",
12
12
  "worker/src/utils/db-schema-deploy/extract-schema-files.ts": "5923d30040251b3ec4481d38f3f4ddbbd4889129d77bb08843d9dd7992467a0a",
13
13
  "worker/src/utils/db-schema-deploy/extract-schema-relations.ts": "3984683d3227e964845836079476687a7295e6907b525ef21b9eebc488825bf8",
14
- "worker/src/utils/db-schema-deploy/extract-schema-ts.ts": "8280f5c197f83ccb08398b3d45576e1fbd3132b73b52bc4dc643995288fbc94d",
14
+ "worker/src/utils/db-schema-deploy/extract-schema-ts.ts": "fb84c84aad995ae365ea8f3cdf91dbe5d73da291635d426ad4b2eca83b9dbe22",
15
15
  "worker/src/utils/db-schema-deploy/schema-ownership.ts": "e6c811a87bc657707be3518dfe547c6d97718ac073108b126eb7f791c9c08202"
16
16
  },
17
- "sha256": "e3a3bff525d0b6cf1066edaee7307223300ab07441a512b785dabfac2ec31e25"
17
+ "sha256": "30a1f0783af45b92e8455bd380f6b5f3731f3c44dce98f7b4dbe1d88ba08595b"
18
18
  }
@@ -693,8 +693,39 @@ interface SomewhereAuthMfaRequired {
693
693
  }
694
694
  type SomewhereAuthLoginResult = SomewhereAuthIssuedSession | SomewhereAuthMfaRequired;
695
695
  interface SomewhereAuthOtpSession extends SomewhereAuthIssuedSession {
696
- // The redirect_uri passed to signInWithOtp, or null.
696
+ // The redirect_uri passed to signInWithOtp, or null. For an invitation
697
+ // link: the invite's redirect_uri with ?invite_id=<id> added.
697
698
  redirect_uri: string | null;
699
+ // Present when the verified token was an invitation.
700
+ invite_id?: string;
701
+ }
702
+ type SomewhereAuthInviteStatus = 'pending' | 'accepted' | 'revoked' | 'expired';
703
+ interface SomewhereAuthInvite {
704
+ id: string;
705
+ email: string;
706
+ status: SomewhereAuthInviteStatus;
707
+ redirect_uri: string;
708
+ // Server-side only; never in the email or the link.
709
+ data: SomewhereJsonObject | null;
710
+ expires_at: number;
711
+ created_at: number;
712
+ accepted_at: number | null;
713
+ accepted_user_id: string | null;
714
+ revoked_at: number | null;
715
+ }
716
+ interface SomewhereAuthInviteOptions {
717
+ email: string;
718
+ // A path in the app such as '/join', or an allowed absolute URL.
719
+ redirect_uri: string;
720
+ // At most 4096 bytes of JSON.
721
+ data?: SomewhereJsonObject;
722
+ // Seconds, 900 to 2592000; default 604800 (7 days).
723
+ expires_in?: number;
724
+ }
725
+ interface SomewhereAuthInviteSent {
726
+ invite: SomewhereAuthInvite;
727
+ delivery: 'sent' | 'pending';
728
+ message_id?: string;
698
729
  }
699
730
  interface SomewhereAuthOAuthSession {
700
731
  user: SomewhereAuthSignedInUser;
@@ -800,6 +831,19 @@ interface SomewhereRuntimeAuthMfa {
800
831
  verify(options: { token: string; enrollment_id: string; activation_token: string; code: string }):
801
832
  Promise<{ enabled: true; backup_codes: string[] }>;
802
833
  unenroll(options: { token: string; code: string }): Promise<{ enabled: false }>;
834
+ // The same steps for the request's own session (cookie or Bearer). verifyWithCookie ends every session and clears the cookies.
835
+ enrollWithCookie(req: Request): Promise<{
836
+ secret: string; enrollment_id: string; otpauth_uri: string; issuer: string; account: string;
837
+ }>;
838
+ reauthenticateWithCookie(req: Request, options: { enrollment_id: string; method: 'password'; password: string }):
839
+ Promise<{ method: 'password'; activation_token: string; expires_in_seconds: number }>;
840
+ reauthenticateWithCookie(req: Request, options: { enrollment_id: string; method: 'email' }):
841
+ Promise<{ method: 'email'; challenge_id: string; expires_in_seconds: number; pending?: true }>;
842
+ verifyReauthenticationWithCookie(req: Request, options: { enrollment_id: string; challenge_id: string; code: string }):
843
+ Promise<{ method: 'email'; activation_token: string; expires_in_seconds: number }>;
844
+ verifyWithCookie(req: Request, options: { enrollment_id: string; activation_token: string; code: string }):
845
+ Promise<{ enabled: true; backup_codes: string[] }>;
846
+ unenrollWithCookie(req: Request, options: { code: string }): Promise<{ enabled: false }>;
803
847
  }
804
848
  interface SomewhereRuntimeAuth {
805
849
  signup(options: SomewhereAuthSignupOptions): Promise<SomewhereAuthIssuedSession>;
@@ -823,7 +867,17 @@ interface SomewhereRuntimeAuth {
823
867
  // Email change is verify-gated: sends a code, never writes the address immediately.
824
868
  updateProfile(token: string, options: SomewhereAuthEmailChangeRequest): Promise<SomewhereAuthEmailChangeStarted>;
825
869
  updateProfileWithCookie(req: Request, options: SomewhereAuthProfileUpdate): Promise<{ user: SomewhereAuthUpdatedUser }>;
870
+ updateProfileWithCookie(req: Request, options: SomewhereAuthEmailChangeRequest): Promise<{ email_change: SomewhereAuthEmailChange }>;
871
+ // Email change steps for the request's own session: change_id is email_change.id, code the 6-digit emailed code.
872
+ verifyEmailChangeCurrentWithCookie(req: Request, options: { change_id: string; code: string }): Promise<SomewhereAuthVerificationSent>;
873
+ verifyEmailChangeWithCookie(req: Request, options: { change_id: string; code: string }): Promise<{ changed: true; email: string }>;
874
+ // Email verification for the request's own session (cookie or Bearer); no token in app code.
875
+ requestEmailVerificationWithCookie(req: Request): Promise<SomewhereAuthVerificationSent>;
876
+ verifyEmailWithCookie(req: Request, options: { code: string }): Promise<{ verified: true }>;
826
877
  deleteUser(token: string): Promise<{ deleted: true }>;
878
+ // Password change and account deletion end every session of the account; these clear the cookies.
879
+ updatePasswordWithCookie(req: Request, options: { new_password: string; current_password?: string }): Promise<{ updated: true }>;
880
+ deleteUserWithCookie(req: Request): Promise<{ deleted: true }>;
827
881
  googleUrl(options: { redirect_uri: string }): string;
828
882
  githubUrl(options: { redirect_uri: string }): string;
829
883
  discordUrl(options: { redirect_uri: string }): string;
@@ -841,6 +895,14 @@ interface SomewhereRuntimeAuth {
841
895
  logoutWithCookie(req: Request): Promise<{ ok: true }>;
842
896
  signInWithOtp(options: { email: string; redirect_uri?: string }): Promise<SomewhereAuthOtpSent>;
843
897
  verifyOtp(options: { token: string }): Promise<SomewhereAuthOtpSession>;
898
+ // One invite email; the link signs the invitee in as the invited address.
899
+ invite(options: SomewhereAuthInviteOptions): Promise<SomewhereAuthInviteSent>;
900
+ listInvites(options?: { status?: SomewhereAuthInviteStatus; email?: string; limit?: number }): Promise<SomewhereAuthInvite[]>;
901
+ getInvite(id: string): Promise<SomewhereAuthInvite | null>;
902
+ revokeInvite(id: string): Promise<SomewhereAuthInvite>;
903
+ // The accepted invite, only for the signed-in account that accepted it;
904
+ // otherwise throws INVITE_NOT_ACCEPTED_BY_YOU (403) or AUTH_REQUIRED (401).
905
+ getAcceptedInvite(req: Request, id: string): Promise<SomewhereAuthInvite>;
844
906
  anonSession(): Promise<SomewhereAuthAnonSession>;
845
907
  readonly moderation: SomewhereRuntimeAuthModeration;
846
908
  }
@@ -1214,6 +1276,8 @@ interface SomewhereCalendarPolicyInput {
1214
1276
  advance_notice_hours?: number | null;
1215
1277
  bookable_from?: SomewhereCalendarInstant | null;
1216
1278
  turnaround_hours?: number | null;
1279
+ // Seats per exact [start, end) class slot. Omitted or null: one reservation per overlapping range.
1280
+ capacity?: number | null;
1217
1281
  }
1218
1282
  type SomewhereCalendarSetPolicyOptions = { resource: string } & ({ policy: SomewhereCalendarPolicyInput } | (SomewhereCalendarPolicyInput & { policy?: never }));
1219
1283
  interface SomewhereCalendarPolicy {
@@ -1223,6 +1287,7 @@ interface SomewhereCalendarPolicy {
1223
1287
  advance_notice_hours: number | null;
1224
1288
  bookable_from_ms: number | null;
1225
1289
  turnaround_hours: number | null;
1290
+ capacity: number | null;
1226
1291
  created_at: number | null;
1227
1292
  updated_at: number | null;
1228
1293
  }
@@ -1238,6 +1303,10 @@ interface SomewhereCalendarAvailabilityResult {
1238
1303
  expires_at: number | null;
1239
1304
  }[];
1240
1305
  free: { start_ms: number; end_ms: number }[];
1306
+ // null for an exclusive resource.
1307
+ capacity: number | null;
1308
+ // Existing class slots overlapping the range (full ones included); not a schedule.
1309
+ slots: { start_ms: number; end_ms: number; capacity: number; reserved: number; remaining: number }[];
1241
1310
  }
1242
1311
  interface SomewhereCalendarListExtras {
1243
1312
  range?: SomewhereCalendarReadRange | null;
@@ -1687,13 +1756,9 @@ interface SomewhereAnalyticsTrackOptions {
1687
1756
  referrer?: string | null;
1688
1757
  user_agent?: string | null;
1689
1758
  }
1690
- interface SomewhereAnalyticsTrackResult {
1691
- recorded: true;
1692
- event: string;
1693
- // Derived from the signed-in request user; never caller-supplied.
1694
- user_id: string | null;
1695
- attribution: 'app_user' | 'project';
1696
- }
1759
+ type SomewhereAnalyticsTrackResult =
1760
+ | { recorded: true; event: string; user_id: string | null; attribution: 'app_user' | 'project' }
1761
+ | { recorded: false; reason: 'consent_pending' | 'consent_declined' | 'consent_unavailable' };
1697
1762
  interface SomewhereAnalyticsQueryOptions {
1698
1763
  event?: string;
1699
1764
  from?: string | number;
@@ -1794,6 +1859,7 @@ interface SomewhereAiChatResult {
1794
1859
  interface __SomewhereAiChatFn {
1795
1860
  (options: SomewhereAiChatOptions & { stream: true }): Promise<ReadableStream<Uint8Array>>;
1796
1861
  (options: SomewhereAiChatOptions & { stream?: false }): Promise<SomewhereAiChatResult>;
1862
+ /** \`stream\` typed as plain boolean, e.g. \`const o = { messages, stream: false }\` (false widens to boolean): narrow the result with \`instanceof ReadableStream\`, or write \`stream: false as const\`. */
1797
1863
  (options: SomewhereAiChatOptions): Promise<SomewhereAiChatResult | ReadableStream<Uint8Array>>;
1798
1864
  }
1799
1865
  interface SomewhereAiConversationSummary {
@@ -1915,9 +1981,16 @@ interface SomewhereAiGenerateImageOptions {
1915
1981
  width?: number;
1916
1982
  height?: number;
1917
1983
  steps?: number;
1984
+ // gpt-image-2.5-flare only; refused on other models.
1985
+ quality?: 'low' | 'medium' | 'high';
1986
+ background?: 'auto' | 'opaque' | 'transparent';
1918
1987
  storage?: string;
1919
1988
  }
1920
- interface SomewhereAiGenerateImageStored extends __SomewhereAiStoredFile { width: number; height: number; steps: number }
1989
+ interface SomewhereAiGenerateImageStored extends __SomewhereAiStoredFile {
1990
+ width: number; height: number; steps: number;
1991
+ quality?: 'low' | 'medium' | 'high';
1992
+ background?: 'auto' | 'opaque' | 'transparent';
1993
+ }
1921
1994
  interface SomewhereAiRemoveBackgroundOptions { image_url: string; model?: string; storage?: string }
1922
1995
  type SomewhereAiEmbeddingsOptions = {
1923
1996
  model?: string;
@@ -2089,6 +2162,9 @@ interface SomewhereAgentStepCheckpoint {
2089
2162
  __sw_agent_turn: true;
2090
2163
  state: SomewhereJsonObject;
2091
2164
  done: boolean;
2165
+ // Present only when the run stopped at its budget and the platform's signed callback reads terminal budget
2166
+ // envelopes; the platform then records the run as failed with this code. Otherwise the budget stop throws.
2167
+ error?: { code: 'AI_SPEND_CAP_EXCEEDED' | 'AI_COST_PENDING'; message: string };
2092
2168
  agent_id?: never;
2093
2169
  status?: never;
2094
2170
  max_steps?: never;
@@ -2485,17 +2561,91 @@ interface SomewhereRuntimeNotifications {
2485
2561
  interface SomewherePushSendOptions {
2486
2562
  // Required: a string or any JSON-serializable value.
2487
2563
  payload: string | number | boolean | object;
2488
- // Neither user_id nor endpoint: broadcast to every subscription in the project.
2564
+ // Exactly one target; a missing, null or empty one is refused.
2489
2565
  user_id?: string;
2490
2566
  userId?: string;
2491
2567
  endpoint?: string;
2568
+ subscription_id?: string;
2569
+ subscriptionId?: string;
2570
+ // 'developer': devices registered with developer credentials. 'all': every device.
2571
+ audience?: 'developer' | 'all';
2492
2572
  ttl?: number;
2493
2573
  }
2494
- interface SomewherePushSendResult { sent: number; failed: number; gone: number; recipients: number }
2495
- // subscribe / unsubscribe are withdrawn in functions (always throw PUSH_SUBSCRIBE_UNAVAILABLE) and are not declared.
2574
+ type SomewherePushPlatform = 'web' | 'test';
2575
+ type SomewherePushDeliveryOutcome = 'sent' | 'failed' | 'gone' | 'captured';
2576
+ interface SomewherePushDeviceResult {
2577
+ delivery_id: string;
2578
+ subscription_id: string;
2579
+ user_id: string | null;
2580
+ platform: SomewherePushPlatform;
2581
+ device_label: string | null;
2582
+ endpoint_host: string | null;
2583
+ outcome: SomewherePushDeliveryOutcome;
2584
+ http_status: number | null;
2585
+ error: string | null;
2586
+ }
2587
+ interface SomewherePushSendResult {
2588
+ sent: number; failed: number; gone: number; captured: number; recipients: number;
2589
+ // false: the notifications went out but their history was not recorded.
2590
+ history_recorded: boolean;
2591
+ devices: SomewherePushDeviceResult[];
2592
+ }
2593
+ // The object PushManager.subscribe() returns, or its toJSON().
2594
+ interface SomewherePushBrowserSubscription {
2595
+ endpoint: string;
2596
+ keys: { p256dh: string; auth: string };
2597
+ }
2598
+ interface SomewherePushSubscribeResult {
2599
+ id: string; platform: SomewherePushPlatform; owner: 'app_user' | 'developer';
2600
+ created: boolean; reassigned?: boolean;
2601
+ }
2602
+ interface SomewherePushDevice {
2603
+ // 'legacy': stored before owners were verified; no send reaches it until it re-registers.
2604
+ id: string; user_id: string | null; owner: 'app_user' | 'developer' | 'legacy';
2605
+ platform: SomewherePushPlatform; device_label: string | null; endpoint_host: string | null;
2606
+ created_at: string; updated_at: string | null;
2607
+ }
2608
+ interface SomewherePushDelivery {
2609
+ id: string; subscription_id: string; user_id: string | null; platform: SomewherePushPlatform;
2610
+ device_label: string | null; endpoint_host: string | null; outcome: SomewherePushDeliveryOutcome;
2611
+ http_status: number | null; error: string | null; title: string | null; url: string | null;
2612
+ // Present on test-inbox deliveries only.
2613
+ payload?: unknown;
2614
+ created_at: string;
2615
+ }
2616
+ interface SomewherePushHistoryOptions {
2617
+ user_id?: string;
2618
+ userId?: string;
2619
+ subscription_id?: string;
2620
+ subscriptionId?: string;
2621
+ limit?: number;
2622
+ }
2496
2623
  interface SomewhereRuntimePush {
2497
2624
  vapidPublicKey(): Promise<{ vapid_public_key: string }>;
2625
+ // Registers a device for the signed-in user of this request (AUTH_REQUIRED without one).
2626
+ subscribe(
2627
+ subscription: SomewherePushBrowserSubscription | { toJSON(): SomewherePushBrowserSubscription } | { test: true },
2628
+ options?: { label?: string },
2629
+ ): Promise<SomewherePushSubscribeResult>;
2630
+ unsubscribe(target: string | { endpoint: string } | { test: true }): Promise<{ deleted: boolean }>;
2498
2631
  send(options: SomewherePushSendOptions): Promise<SomewherePushSendResult>;
2632
+ subscriptions(options?: { user_id?: string; userId?: string; limit?: number }): Promise<{ subscriptions: SomewherePushDevice[] }>;
2633
+ deliveries(options?: SomewherePushHistoryOptions): Promise<{ deliveries: SomewherePushDelivery[] }>;
2634
+ }
2635
+
2636
+ // The push browser helper (tsk_80c0ed92). The compiler maps this specifier to
2637
+ // the same-origin /__sw/push/client.js the project origin serves.
2638
+ declare module 'somewhere:push' {
2639
+ export interface PushDeviceResult {
2640
+ endpoint?: string; id: string; platform: 'web' | 'test'; owner: 'app_user' | 'developer';
2641
+ created: boolean; reassigned?: boolean;
2642
+ }
2643
+ export interface PushStatus { supported: boolean; permission: NotificationPermission | 'unsupported'; subscribed: boolean; endpoint: string | null }
2644
+ export interface PushMessage { type: 'push' | 'click'; payload: unknown }
2645
+ export function enablePush(options?: { test?: boolean; label?: string }): Promise<PushDeviceResult>;
2646
+ export function disablePush(options?: { test?: boolean }): Promise<{ deleted: boolean }>;
2647
+ export function pushStatus(): Promise<PushStatus>;
2648
+ export function listenToPush(handler: (message: PushMessage) => void): () => void;
2499
2649
  }
2500
2650
 
2501
2651
  // \u2500\u2500 sw.queue / sw.jobs \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
@@ -2521,6 +2671,8 @@ interface SomewhereJobsCreateOptions {
2521
2671
  priority?: 'normal' | 'low';
2522
2672
  // Generated per call when omitted.
2523
2673
  idempotency_key?: string;
2674
+ // Earliest start: an ISO-8601 time with an explicit offset, e.g. '2026-10-05T09:00:00Z'. Must be in the future.
2675
+ run_at?: string;
2524
2676
  agent?: { messages: readonly unknown[]; max_steps?: number; max_turns?: number; deployment_version?: string };
2525
2677
  }
2526
2678
  interface SomewhereJobsRecovery {
@@ -2537,6 +2689,8 @@ interface SomewhereJobsCreateResult {
2537
2689
  recovery: SomewhereJobsRecovery | null;
2538
2690
  ownership_status?: 'app_user' | 'project_owner';
2539
2691
  owner_subject_id?: string | null;
2692
+ // ISO time when run_at was given; status is 'scheduled' until then.
2693
+ run_at?: string | null;
2540
2694
  }
2541
2695
  interface SomewhereJob {
2542
2696
  job_id: string;
@@ -2563,6 +2717,7 @@ interface SomewhereJob {
2563
2717
  cron_id: string | null;
2564
2718
  cron_scheduled_at: string | null;
2565
2719
  trigger: 'scheduled' | 'manual' | null;
2720
+ run_at: string | null;
2566
2721
  recovery: SomewhereJobsRecovery | null;
2567
2722
  }
2568
2723
  interface SomewhereRuntimeJobs {
@@ -2746,6 +2901,14 @@ interface __SomewhereTypedRequest<Input> extends Request { json(): Promise<Input
2746
2901
  type ServerFunction<Contract extends { input: unknown; output: unknown }> =
2747
2902
  (req: __SomewhereTypedRequest<Contract["input"]>, sw: SomewhereRuntimeContext) =>
2748
2903
  Contract["output"] | Promise<Contract["output"]>;
2904
+
2905
+ // Outbound WebSocket client: fetch(url, { headers: { Upgrade: 'websocket' } })
2906
+ // returns the upgraded socket on the response (null on any other response),
2907
+ // and the function calls accept() before using it. The runtime fetch wrapper
2908
+ // and the pinned egress transport both hand that response through
2909
+ // (worker/src/runtime/fetch.ts, routes/code-egress.ts). Merged into lib.dom.
2910
+ interface Response { readonly webSocket: WebSocket | null }
2911
+ interface WebSocket { accept(): void }
2749
2912
  `;
2750
2913
  var ENDPOINT_DECLARATION2 = `
2751
2914
  interface SomewhereEndpointUser {
@@ -4542,11 +4705,6 @@ function readTable(r, rawName, nameLine) {
4542
4705
  }
4543
4706
  const uniques = [];
4544
4707
  for (const entry of uniqueEntries ?? []) {
4545
- if (entry.columns.length < 2) {
4546
- throw new SchemaTsError(
4547
- `line ${entry.line}: the "unique" option on table "${rawName}" is for MULTI-column uniqueness. For a single column, put { unique: true } on the column itself.`
4548
- );
4549
- }
4550
4708
  for (const colName of entry.columns) {
4551
4709
  if (!known.has(colName)) {
4552
4710
  throw new SchemaTsError(
@@ -4554,6 +4712,19 @@ function readTable(r, rawName, nameLine) {
4554
4712
  );
4555
4713
  }
4556
4714
  }
4715
+ const single = entry.columns.length === 1 ? columns.find((c) => c.name === entry.columns[0]) : void 0;
4716
+ if (single) {
4717
+ if (single.helper === "id") {
4718
+ throw new SchemaTsError(`line ${entry.line}: the primary key "${single.name}" on table "${rawName}" is already unique; remove its one-column "unique" group.`);
4719
+ }
4720
+ single.unique = true;
4721
+ continue;
4722
+ }
4723
+ if (entry.columns.length < 2) {
4724
+ throw new SchemaTsError(
4725
+ `line ${entry.line}: the "unique" option on table "${rawName}" lists only "${entry.columns[0]}", the owner column the platform manages, and an owner column cannot be unique on its own. Pair it with another column (for example [['${entry.columns[0]}', 'kind']]) for per-owner uniqueness.`
4726
+ );
4727
+ }
4557
4728
  uniques.push(entry.columns);
4558
4729
  }
4559
4730
  let client;