@somewhere-tech/cli 0.37.8 → 0.37.10
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/cron.js +9 -4
- package/dist/commands/cron.js.map +1 -1
- package/dist/commands/init.js +15 -5
- package/dist/commands/init.js.map +1 -1
- package/dist/lib/init-feature-template.js +437 -11
- 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/dist/lib/skills-pack.generated.js +8 -8
- package/dist/lib/skills-pack.generated.js.map +1 -1
- package/npm-shrinkwrap.json +2 -2
- package/package.json +1 -1
- package/runtime/DECLARED-DATA-VENDOR.json +10 -8
- package/runtime/declared-data.cjs +490 -35
|
@@ -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
|
|
|
@@ -398,7 +417,7 @@ export default schema({
|
|
|
398
417
|
});
|
|
399
418
|
`;
|
|
400
419
|
const NOTES_TYPES = `export interface Note {
|
|
401
|
-
id: number
|
|
420
|
+
id: number;
|
|
402
421
|
title: string;
|
|
403
422
|
body: string;
|
|
404
423
|
}
|
|
@@ -921,12 +940,12 @@ export interface ToolActivity {
|
|
|
921
940
|
|
|
922
941
|
/** A task the assistant drafted; it becomes a task only after approval. */
|
|
923
942
|
export interface Proposal {
|
|
924
|
-
id: number
|
|
943
|
+
id: number;
|
|
925
944
|
title: string;
|
|
926
945
|
}
|
|
927
946
|
|
|
928
947
|
export interface AgentTask {
|
|
929
|
-
id: number
|
|
948
|
+
id: number;
|
|
930
949
|
title: string;
|
|
931
950
|
}
|
|
932
951
|
|
|
@@ -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":"AAAA,wEAAwE;AACxE,2EAA2E;AAC3E,iFAAiF;AAEjF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,CAAU,CAAC;AAGxF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAU,CAAC;AAS7D,MAAM,OAAO,GAAoC;IAC/C;QACE,EAAE,EAAE,MAAM;QACV,OAAO,EAAE,mXAAmX;QAC5X,QAAQ,EAAE,EAAE;KACb;IACD;QACE,EAAE,EAAE,YAAY;QAChB,OAAO,EAAE,8YAA8Y;QACvZ,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;IACD;QACE,EAAE,EAAE,cAAc;QAClB,OAAO,EAAE,2PAA2P;QACpQ,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;IACD;QACE,EAAE,EAAE,OAAO;QACX,OAAO,EAAE,+dAA+d;QACxe,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;CACF,CAAC;AAEF,MAAM,QAAQ,GAAmD;IAC/D,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,sHAAsH,EAAE;IACjJ,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,iIAAiI,EAAE;CAC/J,CAAC;AAEF,4EAA4E;AAC5E,MAAM,WAAW,GAA8C;IAC7D,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,+DAA+D,EAAE;IAChG,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,qFAAqF,EAAE;IACvH,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,kDAAkD,EAAE;IAC3E,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE;IACvC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,+CAA+C,EAAE;IAC3E,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,uEAAuE,EAAE;IAChG,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,kEAAkE,EAAE;IACpG,EAAE,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,+JAA+J,EAAE;CACjM,CAAC;AAYF,6EAA6E;AAC7E,MAAM,OAAO,kBAAmB,SAAQ,KAAK;CAAG;AAEhD,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAQ,eAAqC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAQ,aAAmC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,EAAE,GAAG,QAAQ;IAClE,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7E,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,kBAAkB,CAAC,yCAAyC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvG,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChF,MAAM,IAAI,kBAAkB,CAC1B,sBAAsB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE,CAC/F,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,kBAAkB,CAAC,gBAAgB,EAAE,iBAAiB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAqB,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgB,CAAC;IACzC,MAAM,KAAK,GAAG,CAAC,EAAgB,EAAE,EAAE;QACjC,IAAI,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO;QAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjB,KAAK,MAAM,UAAU,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC,QAAQ;YAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5E,CAAC,CAAC;IACF,KAAK,MAAM,EAAE,IAAI,MAAM;QAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG,CAAC,GAAsB,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACxF,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC;QAC1B,KAAK,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1E,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC;QAC1B,EAAE;KACH,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAgB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAE,CAAC;AACnD,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,QAA2E;IACrG,MAAM,QAAQ,GAAG,CAAC,SAAwB,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5F,MAAM,SAAS,GAAG,CAAC,OAAuB,EAAE,KAAiB,QAAQ,EAAiB,EAAE,CACtF,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,CAAC,GAAa,EAAE,IAAc,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACxG,MAAM,UAAU,GAAG,CAAC,GAAG,eAAe,CAAC,CAAC;IACxC,OAAO;QACL,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,2FAA2F;QACpG,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC/B,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;YAC7B,KAAK,EAAE,UAAU,CACf,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAClD,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CACtE;SACF,CAAC,CAAC;QACH,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;iBAChG,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC7C,OAAO;gBACL,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;qBAC5C,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC;qBACrH,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;qBACxB,IAAI,EAAE;aACV,CAAC;QACJ,CAAC,CAAC;QACF,QAAQ,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;QAC1B,WAAW,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;KACxD,CAAC;AACJ,CAAC;AAED,oGAAoG;AACpG,MAAM,UAAU,iBAAiB,CAAC,SAAwB;IACxD,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QACvC,MAAM,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QACxG,OAAO,GAAG,EAAE,uBAAuB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IACrD,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,SAAS,SAAS,CAAC,EAAE,EAAE,CAAC;AAC/G,CAAC"}
|