create-pyric 0.1.0-alpha.21 → 0.1.0-alpha.24
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/scaffold.d.ts +3 -3
- package/dist/scaffold.d.ts.map +1 -1
- package/dist/scaffold.js +2 -2
- package/dist/scaffold.js.map +1 -1
- package/dist/templates.d.ts.map +1 -1
- package/dist/templates.js +47 -4
- package/dist/templates.js.map +1 -1
- package/package.json +1 -1
- package/src/scaffold.ts +4 -4
- package/src/templates.ts +47 -4
- package/templates/chat/.env.development +6 -0
- package/templates/chat/database.rules.json +4 -4
- package/templates/chat/package.json +2 -0
- package/templates/chat/scaffold.json +1 -0
- package/templates/chat/scripts/check-listener-owner-build.ts +73 -0
- package/templates/chat/src/services/conversation-service.ts +6 -5
- package/templates/chat/src/services/firestore-helpers.ts +18 -0
- package/templates/chat/src/services/message-service.ts +4 -3
- package/templates/chat/src/services/presence-service.ts +4 -4
- package/templates/chat/src/ui/chat/chat-format.ts +8 -0
- package/templates/chat/src/ui/chat/chat-page.tsx +29 -126
- package/templates/chat/src/ui/chat/chat-types.ts +16 -4
- package/templates/chat/src/ui/chat/conversation-header.tsx +26 -0
- package/templates/chat/src/ui/chat/conversation-list.tsx +38 -0
- package/templates/chat/src/ui/chat/firebase-chat-gateway.ts +4 -4
- package/templates/chat/src/ui/chat/message-thread.tsx +156 -0
- package/templates/chat/src/ui/chat/presence-bar.tsx +23 -0
- package/templates/chat/vite.config.ts +6 -2
package/dist/scaffold.d.ts
CHANGED
|
@@ -9,9 +9,9 @@ import { type ScaffoldTemplate, type TemplateName } from './templates.js';
|
|
|
9
9
|
import type { FlagValue } from './parse-args.js';
|
|
10
10
|
export type { ScaffoldTemplate, TemplateName };
|
|
11
11
|
export { TEMPLATES, TEMPLATE_NAMES, isTemplateName } from './templates.js';
|
|
12
|
-
/** Where the scaffold's `pyric` / `@pyric/cli` deps come from. */
|
|
12
|
+
/** Where the scaffold's `pyric` / `@pyric/cli` / `@pyric/ui` deps come from. */
|
|
13
13
|
export type DepsMode = 'vendor' | 'npm';
|
|
14
|
-
/** Return a copy of `t` with `pyric` / `@pyric/cli` deps rewritten for `mode`. */
|
|
14
|
+
/** Return a copy of `t` with `pyric` / `@pyric/cli` / `@pyric/ui` deps rewritten for `mode`. */
|
|
15
15
|
export declare function applyDepsMode(t: ScaffoldTemplate, mode: DepsMode, opts: {
|
|
16
16
|
vendorSpecs?: Record<string, string>;
|
|
17
17
|
version?: string | null;
|
|
@@ -67,7 +67,7 @@ export interface ScaffoldRequest {
|
|
|
67
67
|
depsMode?: DepsMode;
|
|
68
68
|
/** Already-rewritten template; defaults to TEMPLATES[template] (+ npm pin). */
|
|
69
69
|
effectiveTemplate?: ScaffoldTemplate;
|
|
70
|
-
/** Version pin for npm-mode `@pyric/cli` / `pyric` ranges. */
|
|
70
|
+
/** Version pin for npm-mode `@pyric/cli` / `pyric` / `@pyric/ui` ranges. */
|
|
71
71
|
pinVersion?: string | null;
|
|
72
72
|
/** Label used in human report lines (`create-pyric` or `pyric init`). */
|
|
73
73
|
commandLabel?: string;
|
package/dist/scaffold.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAU,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE3E,
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
|
package/dist/scaffold.js
CHANGED
|
@@ -8,9 +8,9 @@ import { writeFile, readFile, mkdir, access } from 'node:fs/promises';
|
|
|
8
8
|
import { join, basename, resolve } from 'node:path';
|
|
9
9
|
import { TEMPLATES, TEMPLATE_NAMES, isTemplateName, } from './templates.js';
|
|
10
10
|
export { TEMPLATES, TEMPLATE_NAMES, isTemplateName } from './templates.js';
|
|
11
|
-
/** Return a copy of `t` with `pyric` / `@pyric/cli` deps rewritten for `mode`. */
|
|
11
|
+
/** Return a copy of `t` with `pyric` / `@pyric/cli` / `@pyric/ui` deps rewritten for `mode`. */
|
|
12
12
|
export function applyDepsMode(t, mode, opts) {
|
|
13
|
-
const WORKSPACE_PKGS = ['pyric', '@pyric/cli'];
|
|
13
|
+
const WORKSPACE_PKGS = ['pyric', '@pyric/cli', '@pyric/ui'];
|
|
14
14
|
const rewrite = (section) => {
|
|
15
15
|
const next = { ...section };
|
|
16
16
|
for (const pkg of WORKSPACE_PKGS) {
|
package/dist/scaffold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../src/scaffold.ts"],"names":[],"mappings":"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"}
|
package/dist/templates.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,eAAO,MAAM,cAAc,sDAAuD,CAAC;AACnF,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,YAAY,CAEnE;AAED,MAAM,WAAW,gBAAgB;IAC/B,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC;6EACyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,8EAA8E;IAC9E,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,qDAAqD;IACrD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,4DAA4D;IAC5D,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAMD,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAkBD,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG;IAC9E,WAAW,EAAE;QACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACpC,CAAC;IACF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB,CAkEA;
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAOH,eAAO,MAAM,cAAc,sDAAuD,CAAC;AACnF,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE3D,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,YAAY,CAEnE;AAED,MAAM,WAAW,gBAAgB;IAC/B,8EAA8E;IAC9E,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC;6EACyE;IACzE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,8EAA8E;IAC9E,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,qDAAqD;IACrD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9D,4DAA4D;IAC5D,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAMD,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAkBD,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG;IAC9E,WAAW,EAAE;QACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACxC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACpC,CAAC;IACF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB,CAkEA;AAupBD,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAoG5D,CAAC"}
|
package/dist/templates.js
CHANGED
|
@@ -419,13 +419,17 @@ const VITE_INDEX_HTML = (name) => `<!doctype html>
|
|
|
419
419
|
form { display: flex; gap: 0.5rem; margin: 1rem 0; }
|
|
420
420
|
input { flex: 1; padding: 0.4rem 0.6rem; }
|
|
421
421
|
ul { padding-left: 1.2rem; }
|
|
422
|
-
.status { color: #666; }
|
|
422
|
+
.status { color: #666; display: flex; align-items: center; gap: 0.5rem; }
|
|
423
|
+
.avatar { width: 32px; height: 32px; border-radius: 50%; }
|
|
423
424
|
</style>
|
|
424
425
|
</head>
|
|
425
426
|
<body>
|
|
426
427
|
<main>
|
|
427
428
|
<h1>${name}</h1>
|
|
428
|
-
<p class="status"
|
|
429
|
+
<p class="status">
|
|
430
|
+
<img class="avatar" id="avatar" alt="" hidden />
|
|
431
|
+
<span id="auth-status">Signed out</span>
|
|
432
|
+
</p>
|
|
429
433
|
<button id="sign-in">Sign in with Google</button>
|
|
430
434
|
<button id="sign-out" hidden>Sign out</button>
|
|
431
435
|
<!-- Visible even while signed out ON PURPOSE — submitting attempts the
|
|
@@ -492,6 +496,7 @@ const db = getFirestore(app);
|
|
|
492
496
|
const $ = <T extends HTMLElement>(id: string): T => document.getElementById(id) as T;
|
|
493
497
|
const els = {
|
|
494
498
|
status: $('auth-status'),
|
|
499
|
+
avatar: $<HTMLImageElement>('avatar'),
|
|
495
500
|
signIn: $<HTMLButtonElement>('sign-in'),
|
|
496
501
|
signOut: $<HTMLButtonElement>('sign-out'),
|
|
497
502
|
form: $<HTMLFormElement>('add-post'),
|
|
@@ -507,7 +512,7 @@ let unsubscribePosts: (() => void) | undefined = undefined;
|
|
|
507
512
|
onAuthStateChanged(auth, (user) => {
|
|
508
513
|
const hasActiveSubscription = unsubscribePosts !== undefined;
|
|
509
514
|
if (hasActiveSubscription) {
|
|
510
|
-
unsubscribePosts();
|
|
515
|
+
unsubscribePosts?.();
|
|
511
516
|
unsubscribePosts = undefined;
|
|
512
517
|
}
|
|
513
518
|
|
|
@@ -523,6 +528,16 @@ onAuthStateChanged(auth, (user) => {
|
|
|
523
528
|
displayLabel = user.displayName as string;
|
|
524
529
|
}
|
|
525
530
|
els.status.textContent = 'Signed in as ' + displayLabel;
|
|
531
|
+
// Provider sign-ins always carry a photoURL, in the sandbox as in
|
|
532
|
+
// production; email/password and anonymous users have none.
|
|
533
|
+
const hasPhoto = user.photoURL !== null;
|
|
534
|
+
if (hasPhoto) {
|
|
535
|
+
els.avatar.src = user.photoURL as string;
|
|
536
|
+
els.avatar.hidden = false;
|
|
537
|
+
} else {
|
|
538
|
+
els.avatar.src = '';
|
|
539
|
+
els.avatar.hidden = true;
|
|
540
|
+
}
|
|
526
541
|
els.signIn.hidden = true;
|
|
527
542
|
els.signOut.hidden = false;
|
|
528
543
|
|
|
@@ -544,6 +559,8 @@ onAuthStateChanged(auth, (user) => {
|
|
|
544
559
|
});
|
|
545
560
|
} else {
|
|
546
561
|
els.status.textContent = 'Signed out';
|
|
562
|
+
els.avatar.hidden = true;
|
|
563
|
+
els.avatar.src = '';
|
|
547
564
|
els.signIn.hidden = false;
|
|
548
565
|
els.signOut.hidden = true;
|
|
549
566
|
els.posts.replaceChildren();
|
|
@@ -598,8 +615,34 @@ import { pyric } from '@pyric/cli/vite';
|
|
|
598
615
|
// self-contained sandbox preview you can serve under \`pyric sandbox\`, build with a
|
|
599
616
|
// non-production mode: \`vite build --mode development\` (see the \`build:sandbox\`
|
|
600
617
|
// script). That output is marked and can never be deployed.
|
|
618
|
+
|
|
619
|
+
// A custom avatar generator lives in its own file so this config stays
|
|
620
|
+
// small. The pyric example app ships vite.avatars.ts with a worked example
|
|
621
|
+
// that calls an image API; write your own function of the same shape to
|
|
622
|
+
// use the \`avatars.source\` option below.
|
|
623
|
+
// import { nanoBananaAvatar } from './vite.avatars';
|
|
624
|
+
|
|
601
625
|
export default defineConfig({
|
|
602
|
-
plugins: [
|
|
626
|
+
plugins: [
|
|
627
|
+
pyric({
|
|
628
|
+
// Profile photos for provider sign-ins. The default needs no
|
|
629
|
+
// configuration: every federated sign-in gets a deterministic
|
|
630
|
+
// generated avatar. Comment exactly one option back in to try the
|
|
631
|
+
// alternatives.
|
|
632
|
+
|
|
633
|
+
// Firebase-null behaviour — photoURL stays null and the avatar
|
|
634
|
+
// route unmounts:
|
|
635
|
+
// avatars: false,
|
|
636
|
+
|
|
637
|
+
// A pre-created avatar set: a directory holding a manifest.json and
|
|
638
|
+
// image files; each user is deterministically assigned one:
|
|
639
|
+
// avatars: './avatars',
|
|
640
|
+
|
|
641
|
+
// Generate each user's photo once, on demand, with the function
|
|
642
|
+
// named in the commented import above:
|
|
643
|
+
// avatars: { source: nanoBananaAvatar },
|
|
644
|
+
}),
|
|
645
|
+
],
|
|
603
646
|
});
|
|
604
647
|
`;
|
|
605
648
|
const VITE_TSCONFIG = `{
|
package/dist/templates.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/scaffold.ts
CHANGED
|
@@ -19,16 +19,16 @@ import type { FlagValue } from './parse-args.js';
|
|
|
19
19
|
export type { ScaffoldTemplate, TemplateName };
|
|
20
20
|
export { TEMPLATES, TEMPLATE_NAMES, isTemplateName } from './templates.js';
|
|
21
21
|
|
|
22
|
-
/** Where the scaffold's `pyric` / `@pyric/cli` deps come from. */
|
|
22
|
+
/** Where the scaffold's `pyric` / `@pyric/cli` / `@pyric/ui` deps come from. */
|
|
23
23
|
export type DepsMode = 'vendor' | 'npm';
|
|
24
24
|
|
|
25
|
-
/** Return a copy of `t` with `pyric` / `@pyric/cli` deps rewritten for `mode`. */
|
|
25
|
+
/** Return a copy of `t` with `pyric` / `@pyric/cli` / `@pyric/ui` deps rewritten for `mode`. */
|
|
26
26
|
export function applyDepsMode(
|
|
27
27
|
t: ScaffoldTemplate,
|
|
28
28
|
mode: DepsMode,
|
|
29
29
|
opts: { vendorSpecs?: Record<string, string>; version?: string | null },
|
|
30
30
|
): ScaffoldTemplate {
|
|
31
|
-
const WORKSPACE_PKGS = ['pyric', '@pyric/cli'];
|
|
31
|
+
const WORKSPACE_PKGS = ['pyric', '@pyric/cli', '@pyric/ui'];
|
|
32
32
|
const rewrite = (section: Record<string, string>): Record<string, string> => {
|
|
33
33
|
const next = { ...section };
|
|
34
34
|
for (const pkg of WORKSPACE_PKGS) {
|
|
@@ -202,7 +202,7 @@ export interface ScaffoldRequest {
|
|
|
202
202
|
depsMode?: DepsMode;
|
|
203
203
|
/** Already-rewritten template; defaults to TEMPLATES[template] (+ npm pin). */
|
|
204
204
|
effectiveTemplate?: ScaffoldTemplate;
|
|
205
|
-
/** Version pin for npm-mode `@pyric/cli` / `pyric` ranges. */
|
|
205
|
+
/** Version pin for npm-mode `@pyric/cli` / `pyric` / `@pyric/ui` ranges. */
|
|
206
206
|
pinVersion?: string | null;
|
|
207
207
|
/** Label used in human report lines (`create-pyric` or `pyric init`). */
|
|
208
208
|
commandLabel?: string;
|
package/src/templates.ts
CHANGED
|
@@ -490,13 +490,17 @@ const VITE_INDEX_HTML = (name: string): string => `<!doctype html>
|
|
|
490
490
|
form { display: flex; gap: 0.5rem; margin: 1rem 0; }
|
|
491
491
|
input { flex: 1; padding: 0.4rem 0.6rem; }
|
|
492
492
|
ul { padding-left: 1.2rem; }
|
|
493
|
-
.status { color: #666; }
|
|
493
|
+
.status { color: #666; display: flex; align-items: center; gap: 0.5rem; }
|
|
494
|
+
.avatar { width: 32px; height: 32px; border-radius: 50%; }
|
|
494
495
|
</style>
|
|
495
496
|
</head>
|
|
496
497
|
<body>
|
|
497
498
|
<main>
|
|
498
499
|
<h1>${name}</h1>
|
|
499
|
-
<p class="status"
|
|
500
|
+
<p class="status">
|
|
501
|
+
<img class="avatar" id="avatar" alt="" hidden />
|
|
502
|
+
<span id="auth-status">Signed out</span>
|
|
503
|
+
</p>
|
|
500
504
|
<button id="sign-in">Sign in with Google</button>
|
|
501
505
|
<button id="sign-out" hidden>Sign out</button>
|
|
502
506
|
<!-- Visible even while signed out ON PURPOSE — submitting attempts the
|
|
@@ -564,6 +568,7 @@ const db = getFirestore(app);
|
|
|
564
568
|
const $ = <T extends HTMLElement>(id: string): T => document.getElementById(id) as T;
|
|
565
569
|
const els = {
|
|
566
570
|
status: $('auth-status'),
|
|
571
|
+
avatar: $<HTMLImageElement>('avatar'),
|
|
567
572
|
signIn: $<HTMLButtonElement>('sign-in'),
|
|
568
573
|
signOut: $<HTMLButtonElement>('sign-out'),
|
|
569
574
|
form: $<HTMLFormElement>('add-post'),
|
|
@@ -579,7 +584,7 @@ let unsubscribePosts: (() => void) | undefined = undefined;
|
|
|
579
584
|
onAuthStateChanged(auth, (user) => {
|
|
580
585
|
const hasActiveSubscription = unsubscribePosts !== undefined;
|
|
581
586
|
if (hasActiveSubscription) {
|
|
582
|
-
unsubscribePosts();
|
|
587
|
+
unsubscribePosts?.();
|
|
583
588
|
unsubscribePosts = undefined;
|
|
584
589
|
}
|
|
585
590
|
|
|
@@ -595,6 +600,16 @@ onAuthStateChanged(auth, (user) => {
|
|
|
595
600
|
displayLabel = user.displayName as string;
|
|
596
601
|
}
|
|
597
602
|
els.status.textContent = 'Signed in as ' + displayLabel;
|
|
603
|
+
// Provider sign-ins always carry a photoURL, in the sandbox as in
|
|
604
|
+
// production; email/password and anonymous users have none.
|
|
605
|
+
const hasPhoto = user.photoURL !== null;
|
|
606
|
+
if (hasPhoto) {
|
|
607
|
+
els.avatar.src = user.photoURL as string;
|
|
608
|
+
els.avatar.hidden = false;
|
|
609
|
+
} else {
|
|
610
|
+
els.avatar.src = '';
|
|
611
|
+
els.avatar.hidden = true;
|
|
612
|
+
}
|
|
598
613
|
els.signIn.hidden = true;
|
|
599
614
|
els.signOut.hidden = false;
|
|
600
615
|
|
|
@@ -616,6 +631,8 @@ onAuthStateChanged(auth, (user) => {
|
|
|
616
631
|
});
|
|
617
632
|
} else {
|
|
618
633
|
els.status.textContent = 'Signed out';
|
|
634
|
+
els.avatar.hidden = true;
|
|
635
|
+
els.avatar.src = '';
|
|
619
636
|
els.signIn.hidden = false;
|
|
620
637
|
els.signOut.hidden = true;
|
|
621
638
|
els.posts.replaceChildren();
|
|
@@ -671,8 +688,34 @@ import { pyric } from '@pyric/cli/vite';
|
|
|
671
688
|
// self-contained sandbox preview you can serve under \`pyric sandbox\`, build with a
|
|
672
689
|
// non-production mode: \`vite build --mode development\` (see the \`build:sandbox\`
|
|
673
690
|
// script). That output is marked and can never be deployed.
|
|
691
|
+
|
|
692
|
+
// A custom avatar generator lives in its own file so this config stays
|
|
693
|
+
// small. The pyric example app ships vite.avatars.ts with a worked example
|
|
694
|
+
// that calls an image API; write your own function of the same shape to
|
|
695
|
+
// use the \`avatars.source\` option below.
|
|
696
|
+
// import { nanoBananaAvatar } from './vite.avatars';
|
|
697
|
+
|
|
674
698
|
export default defineConfig({
|
|
675
|
-
plugins: [
|
|
699
|
+
plugins: [
|
|
700
|
+
pyric({
|
|
701
|
+
// Profile photos for provider sign-ins. The default needs no
|
|
702
|
+
// configuration: every federated sign-in gets a deterministic
|
|
703
|
+
// generated avatar. Comment exactly one option back in to try the
|
|
704
|
+
// alternatives.
|
|
705
|
+
|
|
706
|
+
// Firebase-null behaviour — photoURL stays null and the avatar
|
|
707
|
+
// route unmounts:
|
|
708
|
+
// avatars: false,
|
|
709
|
+
|
|
710
|
+
// A pre-created avatar set: a directory holding a manifest.json and
|
|
711
|
+
// image files; each user is deterministically assigned one:
|
|
712
|
+
// avatars: './avatars',
|
|
713
|
+
|
|
714
|
+
// Generate each user's photo once, on demand, with the function
|
|
715
|
+
// named in the commented import above:
|
|
716
|
+
// avatars: { source: nanoBananaAvatar },
|
|
717
|
+
}),
|
|
718
|
+
],
|
|
676
719
|
});
|
|
677
720
|
`;
|
|
678
721
|
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
# Loaded by Vite for `--mode development`, which includes the served sandbox
|
|
2
|
+
# build (`npm run build:sandbox`). Vite otherwise treats every `vite build` as
|
|
3
|
+
# NODE_ENV=production, which turns off pyric's listener attribution and the
|
|
4
|
+
# React component capture behind it. Development is also what the plain
|
|
5
|
+
# `vite dev` path runs as, so the two sandbox paths behave the same.
|
|
6
|
+
NODE_ENV=development
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"rules": {
|
|
3
3
|
"presence": {
|
|
4
|
-
".read": "auth
|
|
4
|
+
".read": "auth != null",
|
|
5
5
|
"$uid": {
|
|
6
|
-
".write": "auth
|
|
6
|
+
".write": "auth != null && auth.uid == $uid",
|
|
7
7
|
".validate": "newData.hasChildren(['state', 'at']) && newData.child('state').isString()"
|
|
8
8
|
}
|
|
9
9
|
},
|
|
10
10
|
"notify": {
|
|
11
11
|
"$uid": {
|
|
12
|
-
".read": "auth
|
|
13
|
-
".write": "auth
|
|
12
|
+
".read": "auth != null && auth.uid == $uid",
|
|
13
|
+
".write": "auth != null && auth.uid == $uid",
|
|
14
14
|
"$pushId": {
|
|
15
15
|
".validate": "newData.hasChildren(['title', 'body']) && newData.child('title').isString() && newData.child('body').isString()"
|
|
16
16
|
}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"build:sandbox": "vite build --mode development",
|
|
10
10
|
"test": "node --experimental-strip-types --test test/*.test.*",
|
|
11
11
|
"test:notifications": "npm run build && node --experimental-strip-types scripts/check-notification-build.ts",
|
|
12
|
+
"test:listener-owner": "node --experimental-strip-types scripts/check-listener-owner-build.ts",
|
|
12
13
|
"preview": "vite preview",
|
|
13
14
|
"typecheck": "tsc --noEmit",
|
|
14
15
|
"rules:resolve": "pyric firestore rules resolve firestore.modules.rules --out firestore.rules"
|
|
@@ -37,6 +38,7 @@
|
|
|
37
38
|
},
|
|
38
39
|
"devDependencies": {
|
|
39
40
|
"@pyric/cli": "*",
|
|
41
|
+
"@pyric/ui": "*",
|
|
40
42
|
"@tailwindcss/vite": "^4.3.3",
|
|
41
43
|
"@types/react": "^19.2.17",
|
|
42
44
|
"@types/react-dom": "^19.2.3",
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proves that listener attribution costs the production build nothing.
|
|
3
|
+
*
|
|
4
|
+
* The app calls `useListenerOwner` from `@pyric/ui/listener-owner` to name
|
|
5
|
+
* the React component that owns each Firestore listener. That hook gates its
|
|
6
|
+
* capture on `process.env.NODE_ENV`, and `@pyric/cli/vite` swaps `firebase/*`
|
|
7
|
+
* to pyric only outside production mode. Both claims are checked here by
|
|
8
|
+
* building the app twice and reading the emitted JavaScript.
|
|
9
|
+
*
|
|
10
|
+
* Two markers are read:
|
|
11
|
+
*
|
|
12
|
+
* - `pyric`, which appears throughout the sandbox implementation. A
|
|
13
|
+
* production bundle must not contain it anywhere.
|
|
14
|
+
* - the string `/node_modules/`, the frame filter the hook uses when it reads
|
|
15
|
+
* a render-phase call stack. It is present only when the capture survived
|
|
16
|
+
* the build, so it stands in for the capture itself.
|
|
17
|
+
*
|
|
18
|
+
* A production build must carry neither. A development-mode build, the one
|
|
19
|
+
* `npm run build:sandbox` produces for serving under `pyric sandbox`, must
|
|
20
|
+
* carry both, which is what makes the production result evidence of the gate
|
|
21
|
+
* rather than of a marker that never existed.
|
|
22
|
+
*/
|
|
23
|
+
import { execFileSync } from 'node:child_process';
|
|
24
|
+
import { readdir, readFile } from 'node:fs/promises';
|
|
25
|
+
import { dirname, join } from 'node:path';
|
|
26
|
+
import { fileURLToPath } from 'node:url';
|
|
27
|
+
|
|
28
|
+
const PYRIC_MARKER = 'pyric';
|
|
29
|
+
const CAPTURE_MARKER = '/node_modules/';
|
|
30
|
+
|
|
31
|
+
const scriptDirectory = dirname(fileURLToPath(import.meta.url));
|
|
32
|
+
const templateDirectory = join(scriptDirectory, '..');
|
|
33
|
+
|
|
34
|
+
/** Build the app in `mode` into its own directory and return the emitted
|
|
35
|
+
* application JavaScript, the service worker excluded. */
|
|
36
|
+
async function buildAndRead(mode: string, outDirectory: string): Promise<string> {
|
|
37
|
+
execFileSync(
|
|
38
|
+
'npx',
|
|
39
|
+
['vite', 'build', '--mode', mode, '--emptyOutDir', '--outDir', outDirectory],
|
|
40
|
+
{ cwd: templateDirectory, stdio: 'inherit' },
|
|
41
|
+
);
|
|
42
|
+
const assetsDirectory = join(templateDirectory, outDirectory, 'assets');
|
|
43
|
+
const names = (await readdir(assetsDirectory)).filter(
|
|
44
|
+
(name) => name.endsWith('.js') && !name.startsWith('firebase-messaging-sw-'),
|
|
45
|
+
);
|
|
46
|
+
if (names.length === 0) {
|
|
47
|
+
throw new Error(`The ${mode} build emitted no application JavaScript.`);
|
|
48
|
+
}
|
|
49
|
+
const sources = await Promise.all(
|
|
50
|
+
names.map((name) => readFile(join(assetsDirectory, name), 'utf8')),
|
|
51
|
+
);
|
|
52
|
+
return sources.join('\n');
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const production = await buildAndRead('production', 'dist/listener-owner-check/production');
|
|
56
|
+
|
|
57
|
+
if (production.includes(PYRIC_MARKER)) {
|
|
58
|
+
throw new Error('The production bundle contains pyric.');
|
|
59
|
+
}
|
|
60
|
+
if (production.includes(CAPTURE_MARKER)) {
|
|
61
|
+
throw new Error('The production bundle contains the listener-owner stack capture.');
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const development = await buildAndRead('development', 'dist/listener-owner-check/development');
|
|
65
|
+
|
|
66
|
+
if (!development.includes(PYRIC_MARKER)) {
|
|
67
|
+
throw new Error('The development-mode bundle does not contain pyric, so the production result proves nothing.');
|
|
68
|
+
}
|
|
69
|
+
if (!development.includes(CAPTURE_MARKER)) {
|
|
70
|
+
throw new Error('The development-mode bundle does not contain the listener-owner stack capture, so the production result proves nothing.');
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
console.log('Listener owner build checks passed: pyric and the stack capture are in the development build and absent from the production build.');
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
type Query,
|
|
17
17
|
type QueryDocumentSnapshot,
|
|
18
18
|
type QuerySnapshot,
|
|
19
|
+
type SnapshotListenOptions,
|
|
19
20
|
} from 'firebase/firestore';
|
|
20
21
|
import { auth, db } from '../firebase/app';
|
|
21
22
|
import {
|
|
@@ -28,7 +29,7 @@ import {
|
|
|
28
29
|
type PageOptions,
|
|
29
30
|
ServiceError,
|
|
30
31
|
} from '../firebase/types';
|
|
31
|
-
import { clampPageSize, mapFirestoreError, requireUid } from './firestore-helpers';
|
|
32
|
+
import { clampPageSize, listenOptions, mapFirestoreError, requireUid, type ListenerOptions } from './firestore-helpers';
|
|
32
33
|
|
|
33
34
|
const allowedModels = new Set(['gemini-3.5-flash', 'gemini-3.1-flash-lite', 'gemini-2.5-flash', 'gemini-2.0-flash', 'gemini-1.5-flash', 'gemini-flash-lite-latest']);
|
|
34
35
|
const cleanTitle = (title: string): string => title.trim().slice(0, 120) || 'New conversation';
|
|
@@ -59,10 +60,10 @@ export class ConversationService {
|
|
|
59
60
|
}
|
|
60
61
|
}
|
|
61
62
|
|
|
62
|
-
observeList(callback: (conversations: Conversation[]) => void, options: PageOptions = {}): () => void {
|
|
63
|
+
observeList(callback: (conversations: Conversation[]) => void, options: PageOptions & ListenerOptions = {}): () => void {
|
|
63
64
|
const uid = requireUid(auth.currentUser?.uid);
|
|
64
65
|
const pageSize = clampPageSize(options.pageSize);
|
|
65
|
-
return onSnapshot(conversationQuery(uid, pageSize), (snapshot) => callback(snapshot.docs.map(toConversation)));
|
|
66
|
+
return onSnapshot(conversationQuery(uid, pageSize), listenOptions<SnapshotListenOptions>(options), (snapshot) => callback(snapshot.docs.map(toConversation)));
|
|
66
67
|
}
|
|
67
68
|
|
|
68
69
|
async create(input: CreateConversationInput = {}): Promise<Conversation['id']> {
|
|
@@ -146,9 +147,9 @@ export class ConversationService {
|
|
|
146
147
|
}
|
|
147
148
|
}
|
|
148
149
|
|
|
149
|
-
observe(id: Conversation['id'], callback: (value: Conversation) => void): () => void {
|
|
150
|
+
observe(id: Conversation['id'], callback: (value: Conversation) => void, options?: ListenerOptions): () => void {
|
|
150
151
|
requireUid(auth.currentUser?.uid);
|
|
151
|
-
return onSnapshot(doc(db, 'conversations', id), (snapshot) => {
|
|
152
|
+
return onSnapshot(doc(db, 'conversations', id), listenOptions<SnapshotListenOptions>(options), (snapshot) => {
|
|
152
153
|
if (snapshot.exists()) callback({ id, ...(snapshot.data() as ConversationDocument) });
|
|
153
154
|
});
|
|
154
155
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ListenerOwner } from '@pyric/ui/listener-owner';
|
|
1
2
|
import {
|
|
2
3
|
doc,
|
|
3
4
|
type DocumentData,
|
|
@@ -37,3 +38,20 @@ export const typedDoc = <T extends DocumentData>(firestore: Firestore, path: str
|
|
|
37
38
|
|
|
38
39
|
export const clampPageSize = (value: number | undefined, fallback = 50): number =>
|
|
39
40
|
Math.min(Math.max(Math.trunc(value ?? fallback), 1), 100);
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Who owns a listener: either a region name the caller gives it, or the
|
|
44
|
+
* React component `useListenerOwner` identified. Under the local sandbox the
|
|
45
|
+
* SDK records this as the listener's owner, which is how the runtime chip and
|
|
46
|
+
* Studio group listeners by the UI they feed. The production SDK reads only
|
|
47
|
+
* its own keys from the listen options and ignores the owner.
|
|
48
|
+
*
|
|
49
|
+
* `ListenerOwner` is a type-only import. `@pyric/ui` is a development
|
|
50
|
+
* dependency and none of it reaches the production build.
|
|
51
|
+
*/
|
|
52
|
+
export type ListenerOptions = { owner?: string | ListenerOwner };
|
|
53
|
+
|
|
54
|
+
/** The listen options object to hand the SDK, typed as whatever the SDK expects so the extra key passes. */
|
|
55
|
+
export function listenOptions<T extends object>(options: ListenerOptions | undefined): T {
|
|
56
|
+
return (options?.owner === undefined ? {} : { owner: options.owner }) as T;
|
|
57
|
+
}
|
|
@@ -11,11 +11,12 @@ import {
|
|
|
11
11
|
serverTimestamp,
|
|
12
12
|
startAfter,
|
|
13
13
|
where,
|
|
14
|
+
type SnapshotListenOptions,
|
|
14
15
|
} from 'firebase/firestore';
|
|
15
16
|
import { push, ref, serverTimestamp as rtdbServerTimestamp } from 'firebase/database';
|
|
16
17
|
import { auth, db, rtdb } from '../firebase/app';
|
|
17
18
|
import { asMessageId, type AppendAssistantMessageInput, type AppendUserMessageInput, type Message, type MessageDocument, type Page, type PageOptions, ServiceError } from '../firebase/types';
|
|
18
|
-
import { clampPageSize, mapFirestoreError, requireUid } from './firestore-helpers';
|
|
19
|
+
import { clampPageSize, mapFirestoreError, requireUid, listenOptions, type ListenerOptions } from './firestore-helpers';
|
|
19
20
|
|
|
20
21
|
const toMessage = (snapshot: { id: string; data: () => unknown }): Message => ({
|
|
21
22
|
id: asMessageId(snapshot.id),
|
|
@@ -144,9 +145,9 @@ export class MessageService {
|
|
|
144
145
|
}
|
|
145
146
|
}
|
|
146
147
|
|
|
147
|
-
observeRecent(conversationId: string, callback: (messages: Message[]) => void): () => void {
|
|
148
|
+
observeRecent(conversationId: string, callback: (messages: Message[]) => void, options?: ListenerOptions): () => void {
|
|
148
149
|
const uid = requireUid(auth.currentUser?.uid);
|
|
149
150
|
const messageQuery = query(messageCollection(conversationId), where('ownerUid', '==', uid), orderBy('createdAt', 'desc'), limit(50));
|
|
150
|
-
return onSnapshot(messageQuery, (snapshot) => callback(snapshot.docs.map(toMessage).reverse()));
|
|
151
|
+
return onSnapshot(messageQuery, listenOptions<SnapshotListenOptions>(options), (snapshot) => callback(snapshot.docs.map(toMessage).reverse()));
|
|
151
152
|
}
|
|
152
153
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { onDisconnect, onValue, ref, serverTimestamp, set } from 'firebase/database';
|
|
1
|
+
import { onDisconnect, onValue, ref, serverTimestamp, set, type ListenOptions } from 'firebase/database';
|
|
2
2
|
import { auth, rtdb } from '../firebase/app';
|
|
3
3
|
import { asUserId, type AuthUser, type PresenceEntry, type PresenceRecord, ServiceError } from '../firebase/types';
|
|
4
|
-
import { requireUid } from './firestore-helpers';
|
|
4
|
+
import { listenOptions, requireUid, type ListenerOptions } from './firestore-helpers';
|
|
5
5
|
|
|
6
6
|
const mapRtdbError = (error: unknown): ServiceError => {
|
|
7
7
|
const code = typeof error === 'object' && error && 'code' in error ? String(error.code) : '';
|
|
@@ -50,7 +50,7 @@ export class PresenceService {
|
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
/** Observe every presence node; the callback receives the online members. */
|
|
53
|
-
observe(callback: (online: PresenceEntry[]) => void): () => void {
|
|
53
|
+
observe(callback: (online: PresenceEntry[]) => void, options?: ListenerOptions): () => void {
|
|
54
54
|
requireUid(auth.currentUser?.uid);
|
|
55
55
|
return onValue(ref(rtdb, 'presence'), (snapshot) => {
|
|
56
56
|
const entries: PresenceEntry[] = [];
|
|
@@ -59,6 +59,6 @@ export class PresenceService {
|
|
|
59
59
|
if (entry && entry.state === 'online') entries.push(entry);
|
|
60
60
|
});
|
|
61
61
|
callback(entries);
|
|
62
|
-
});
|
|
62
|
+
}, listenOptions<ListenOptions>(options));
|
|
63
63
|
}
|
|
64
64
|
}
|