@somewhere-tech/cli 0.37.8 → 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.
- package/dist/commands/init.js +15 -5
- package/dist/commands/init.js.map +1 -1
- package/dist/lib/init-feature-template.js +434 -8
- package/dist/lib/init-feature-template.js.map +1 -1
- package/dist/lib/init-features.js +7 -2
- package/dist/lib/init-features.js.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/runtime/DECLARED-DATA-VENDOR.json +3 -3
- package/runtime/declared-data.cjs +188 -17
package/dist/commands/init.js
CHANGED
|
@@ -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
|
-
+ '
|
|
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
|
-
//
|
|
196
|
+
// --subdomain wins; with only --name, derive it (no prompt)
|
|
191
197
|
let subdomain;
|
|
192
|
-
if (opts.
|
|
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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"}
|
|
@@ -9,7 +9,7 @@ const PACKAGE_JSON = `{
|
|
|
9
9
|
"typecheck": "somewhere typecheck"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@somewhere-tech/sdk": "0.11.
|
|
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:
|
|
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:
|
|
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
|
|
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":"AAAA,wEAAwE;AACxE,2EAA2E;AAC3E,iFAAiF;AAEjF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"init-features.js","sourceRoot":"","sources":["../../src/lib/init-features.ts"],"names":[],"mappings":"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"}
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@somewhere-tech/cli",
|
|
3
|
-
"version": "0.37.
|
|
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.
|
|
9
|
+
"version": "0.37.9",
|
|
10
10
|
"bundleDependencies": [
|
|
11
11
|
"@modelcontextprotocol/sdk",
|
|
12
12
|
"chokidar",
|
package/package.json
CHANGED
|
@@ -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": "
|
|
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": "
|
|
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": "
|
|
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
|
-
|
|
1691
|
-
recorded: true;
|
|
1692
|
-
|
|
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 {
|
|
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
|
-
//
|
|
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
|
-
|
|
2495
|
-
|
|
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;
|