@antiphony/shared 0.1.0 → 0.4.0

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.
Files changed (59) hide show
  1. package/README.md +4 -4
  2. package/dist/cjs/api-codecs.cjs +90 -787
  3. package/dist/cjs/api-codecs.d.cts +117 -290
  4. package/dist/cjs/index.cjs +102 -947
  5. package/dist/cjs/index.d.cts +89 -7
  6. package/dist/cjs/nsid.cjs +8 -18
  7. package/dist/cjs/nsid.d.cts +8 -17
  8. package/dist/cjs/types/audio.cjs +77 -662
  9. package/dist/cjs/types/audio.d.cts +285 -203
  10. package/dist/cjs/types/blob.cjs +5 -9
  11. package/dist/cjs/types/blob.d.cts +21 -21
  12. package/dist/cjs/types/records.cjs +0 -370
  13. package/dist/cjs/types/records.d.cts +1 -825
  14. package/dist/esm/api-codecs.d.ts +117 -290
  15. package/dist/esm/api-codecs.js +5 -6
  16. package/dist/esm/{chunk-ORMEWXMH.js → chunk-5JBD5THX.js} +1 -16
  17. package/dist/esm/{chunk-F2CANZZ7.js → chunk-BNNLHRH7.js} +1 -1
  18. package/dist/esm/chunk-D655OH2I.js +35 -0
  19. package/dist/esm/chunk-RUUHUNZ6.js +37 -0
  20. package/dist/esm/chunk-SBYNIQRZ.js +23 -0
  21. package/dist/esm/chunk-SMK4OZNU.js +17 -0
  22. package/dist/esm/{chunk-BUNMR4ZO.js → chunk-WL2GSPGC.js} +81 -12
  23. package/dist/esm/errors/index.js +1 -1
  24. package/dist/esm/index.d.ts +89 -7
  25. package/dist/esm/index.js +7 -9
  26. package/dist/esm/nsid.d.ts +8 -17
  27. package/dist/esm/nsid.js +2 -2
  28. package/dist/esm/observability/index.js +2 -2
  29. package/dist/esm/observability/report-error.js +2 -2
  30. package/dist/esm/types/audio.d.ts +285 -203
  31. package/dist/esm/types/audio.js +4 -5
  32. package/dist/esm/types/blob.d.ts +21 -21
  33. package/dist/esm/types/blob.js +2 -2
  34. package/dist/esm/types/records.d.ts +1 -825
  35. package/dist/esm/types/records.js +2 -3
  36. package/dist/esm/utils/index.js +1 -1
  37. package/package.json +90 -26
  38. package/dist/cjs/types/api.cjs +0 -726
  39. package/dist/cjs/types/api.d.cts +0 -494
  40. package/dist/cjs/types/channels.cjs +0 -170
  41. package/dist/cjs/types/channels.d.cts +0 -262
  42. package/dist/cjs/types/storage.cjs +0 -414
  43. package/dist/cjs/types/storage.d.cts +0 -197
  44. package/dist/cjs/types/views.cjs +0 -820
  45. package/dist/cjs/types/views.d.cts +0 -9806
  46. package/dist/esm/chunk-3WZJXJNU.js +0 -378
  47. package/dist/esm/chunk-5EHV73BA.js +0 -20
  48. package/dist/esm/chunk-7V44CPRR.js +0 -132
  49. package/dist/esm/chunk-EA4OONDV.js +0 -380
  50. package/dist/esm/chunk-TIZRJORN.js +0 -24
  51. package/dist/esm/chunk-XDBKR6LW.js +0 -32
  52. package/dist/esm/types/api.d.ts +0 -494
  53. package/dist/esm/types/api.js +0 -5
  54. package/dist/esm/types/channels.d.ts +0 -262
  55. package/dist/esm/types/channels.js +0 -162
  56. package/dist/esm/types/storage.d.ts +0 -197
  57. package/dist/esm/types/storage.js +0 -26
  58. package/dist/esm/types/views.d.ts +0 -9806
  59. package/dist/esm/types/views.js +0 -4
@@ -3,11 +3,6 @@ import { z } from 'zod';
3
3
  /**
4
4
  * Antiphony canonical audio-post contract (`dev.antiphony.*`).
5
5
  *
6
- * This is the NEW data model from `specs/antiphony-data-model.md`, added
7
- * ADDITIVELY alongside the legacy `PromptRecord`/`ReplyRecord` (Stream 1).
8
- * Nothing here touches the old shapes; Vox Pop keeps running on them until the
9
- * Stream 4 migration deletes the legacy schemas + `com.voxpop.*` lexicons.
10
- *
11
6
  * Mirrors the lexicons in `lexicons/dev/antiphony/`. Key model decisions:
12
7
  * - ONE post collection; `reply` presence discriminates prompt-vs-reply.
13
8
  * - The audio is a standard `embed.audio`; transcript is platform enrichment
@@ -85,20 +80,30 @@ type ReplyRef = z.infer<typeof ReplyRefSchema>;
85
80
  */
86
81
  declare const AudioEmbedSchema: z.ZodObject<{
87
82
  $type: z.ZodLiteral<"dev.antiphony.embed.audio">;
88
- /** The audio bytes as a content-addressed storage ref (CID/path). */
83
+ /** The audio bytes as a content-addressed blob ref (`ref.$link` = CID). */
89
84
  audio: z.ZodObject<{
90
85
  $type: z.ZodLiteral<"blob">;
91
- ref: z.ZodString;
86
+ ref: z.ZodObject<{
87
+ $link: z.ZodString;
88
+ }, "strip", z.ZodTypeAny, {
89
+ $link: string;
90
+ }, {
91
+ $link: string;
92
+ }>;
92
93
  mimeType: z.ZodString;
93
94
  size: z.ZodNumber;
94
95
  }, "strip", z.ZodTypeAny, {
95
96
  $type: "blob";
96
- ref: string;
97
+ ref: {
98
+ $link: string;
99
+ };
97
100
  mimeType: string;
98
101
  size: number;
99
102
  }, {
100
103
  $type: "blob";
101
- ref: string;
104
+ ref: {
105
+ $link: string;
106
+ };
102
107
  mimeType: string;
103
108
  size: number;
104
109
  }>;
@@ -112,7 +117,9 @@ declare const AudioEmbedSchema: z.ZodObject<{
112
117
  $type: "dev.antiphony.embed.audio";
113
118
  audio: {
114
119
  $type: "blob";
115
- ref: string;
120
+ ref: {
121
+ $link: string;
122
+ };
116
123
  mimeType: string;
117
124
  size: number;
118
125
  };
@@ -123,7 +130,9 @@ declare const AudioEmbedSchema: z.ZodObject<{
123
130
  $type: "dev.antiphony.embed.audio";
124
131
  audio: {
125
132
  $type: "blob";
126
- ref: string;
133
+ ref: {
134
+ $link: string;
135
+ };
127
136
  mimeType: string;
128
137
  size: number;
129
138
  };
@@ -251,6 +260,23 @@ declare const AudioEmbedViewSchema: z.ZodObject<{
251
260
  }[];
252
261
  text?: string | undefined;
253
262
  }>>;
263
+ /**
264
+ * Per-stage audio-processing status (transcribe / denoise), when the app
265
+ * opted into processing on create. Absent otherwise. A `pending` stage
266
+ * means the client should poll (or re-render) for the result. When
267
+ * `denoise === 'ready'`, `url` above already resolves to the cleaned
268
+ * audio variant. See `types/processing.ts`.
269
+ */
270
+ processing: z.ZodOptional<z.ZodObject<{
271
+ transcribe: z.ZodOptional<z.ZodEnum<["pending", "ready", "failed", "skipped"]>>;
272
+ denoise: z.ZodOptional<z.ZodEnum<["pending", "ready", "failed", "skipped"]>>;
273
+ }, "strip", z.ZodTypeAny, {
274
+ transcribe?: "pending" | "ready" | "failed" | "skipped" | undefined;
275
+ denoise?: "pending" | "ready" | "failed" | "skipped" | undefined;
276
+ }, {
277
+ transcribe?: "pending" | "ready" | "failed" | "skipped" | undefined;
278
+ denoise?: "pending" | "ready" | "failed" | "skipped" | undefined;
279
+ }>>;
254
280
  }, "strip", z.ZodTypeAny, {
255
281
  $type: "dev.antiphony.embed.audio#view";
256
282
  url: string;
@@ -265,6 +291,10 @@ declare const AudioEmbedViewSchema: z.ZodObject<{
265
291
  }[];
266
292
  text?: string | undefined;
267
293
  } | undefined;
294
+ processing?: {
295
+ transcribe?: "pending" | "ready" | "failed" | "skipped" | undefined;
296
+ denoise?: "pending" | "ready" | "failed" | "skipped" | undefined;
297
+ } | undefined;
268
298
  }, {
269
299
  $type: "dev.antiphony.embed.audio#view";
270
300
  url: string;
@@ -279,6 +309,10 @@ declare const AudioEmbedViewSchema: z.ZodObject<{
279
309
  }[];
280
310
  text?: string | undefined;
281
311
  } | undefined;
312
+ processing?: {
313
+ transcribe?: "pending" | "ready" | "failed" | "skipped" | undefined;
314
+ denoise?: "pending" | "ready" | "failed" | "skipped" | undefined;
315
+ } | undefined;
282
316
  }>;
283
317
  type AudioEmbedView = z.infer<typeof AudioEmbedViewSchema>;
284
318
  /**
@@ -293,6 +327,13 @@ type AudioEmbedView = z.infer<typeof AudioEmbedViewSchema>;
293
327
  declare const AudioPostRecordSchema: z.ZodEffects<z.ZodObject<{
294
328
  /** Storage id (rkey/doc id). */
295
329
  id: z.ZodString;
330
+ /**
331
+ * Content CID of the canonical lexicon record (CIDv1, dag-cbor, sha2-256
332
+ * — the AT Protocol record-CID rule). Computed at write time over the
333
+ * lexicon projection (public fields only, NOT the storage/tenancy fields
334
+ * below), so StrongRefs built from it are verifiable content addresses.
335
+ */
336
+ cid: z.ZodString;
296
337
  /** Origin app that created this record — the multi-tenant isolation key. */
297
338
  originAppId: z.ZodString;
298
339
  /** Authoring user. A queryable facet, not the tenancy boundary. */
@@ -303,6 +344,45 @@ declare const AudioPostRecordSchema: z.ZodEffects<z.ZodObject<{
303
344
  orgId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
304
345
  /** Denormalized from `reply` presence: `reply` set ⇒ 'reply', else 'prompt'. */
305
346
  kind: z.ZodEnum<["prompt", "reply"]>;
347
+ /**
348
+ * Branch participant pair (author ids) for reply gating — the parties to a
349
+ * reply's sub-thread: the creator (thread-root author) + the responder who
350
+ * opened the branch. Set on replies (deduped, 1–2 ids); absent on prompts
351
+ * (a prompt's repliers are the app's audience policy, not a fixed pair).
352
+ * Inherited down the branch so reply gating is an O(1) field check, never a
353
+ * thread walk.
354
+ */
355
+ threadParticipants: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
356
+ /**
357
+ * Author of this reply's thread ROOT (the prompt) — the reply's recipient,
358
+ * the person whose "replies to me" feed it lands in. Denormalized at write
359
+ * time so "replies whose root author is X" is a cheap composite-index query
360
+ * (see `queryByRootAuthor`). Set on replies (`kind === 'reply'`); absent on
361
+ * prompts. Storage-layer facet, NOT in the public lexicon or the record CID.
362
+ */
363
+ rootAuthorId: z.ZodOptional<z.ZodString>;
364
+ /**
365
+ * Async audio-processing state (transcribe / denoise), present iff the app
366
+ * opted into processing on create. Mutated by the processing worker after
367
+ * the post is created — storage-layer, NOT in the lexicon or the record
368
+ * CID. See `types/processing.ts`.
369
+ */
370
+ processing: z.ZodOptional<z.ZodObject<{
371
+ transcribe: z.ZodOptional<z.ZodEnum<["pending", "ready", "failed", "skipped"]>>;
372
+ denoise: z.ZodOptional<z.ZodEnum<["pending", "ready", "failed", "skipped"]>>;
373
+ denoisedBlobCid: z.ZodOptional<z.ZodString>;
374
+ updatedAt: z.ZodEffects<z.ZodUnion<[z.ZodType<unknown, z.ZodTypeDef, unknown>, z.ZodString, z.ZodNumber, z.ZodDate]>, Date, unknown>;
375
+ }, "strip", z.ZodTypeAny, {
376
+ updatedAt: Date;
377
+ transcribe?: "pending" | "ready" | "failed" | "skipped" | undefined;
378
+ denoise?: "pending" | "ready" | "failed" | "skipped" | undefined;
379
+ denoisedBlobCid?: string | undefined;
380
+ }, {
381
+ transcribe?: "pending" | "ready" | "failed" | "skipped" | undefined;
382
+ denoise?: "pending" | "ready" | "failed" | "skipped" | undefined;
383
+ denoisedBlobCid?: string | undefined;
384
+ updatedAt?: unknown;
385
+ }>>;
306
386
  /** User-authored text (bsky-semantic). May be empty for pure-audio posts. NEVER the transcript. */
307
387
  text: z.ZodString;
308
388
  /** Optional headline; a prompt feature, not the discriminator. */
@@ -310,20 +390,30 @@ declare const AudioPostRecordSchema: z.ZodEffects<z.ZodObject<{
310
390
  /** Audio (or other) attachment. Audio posts carry an `AudioEmbed`. */
311
391
  embed: z.ZodOptional<z.ZodObject<{
312
392
  $type: z.ZodLiteral<"dev.antiphony.embed.audio">;
313
- /** The audio bytes as a content-addressed storage ref (CID/path). */
393
+ /** The audio bytes as a content-addressed blob ref (`ref.$link` = CID). */
314
394
  audio: z.ZodObject<{
315
395
  $type: z.ZodLiteral<"blob">;
316
- ref: z.ZodString;
396
+ ref: z.ZodObject<{
397
+ $link: z.ZodString;
398
+ }, "strip", z.ZodTypeAny, {
399
+ $link: string;
400
+ }, {
401
+ $link: string;
402
+ }>;
317
403
  mimeType: z.ZodString;
318
404
  size: z.ZodNumber;
319
405
  }, "strip", z.ZodTypeAny, {
320
406
  $type: "blob";
321
- ref: string;
407
+ ref: {
408
+ $link: string;
409
+ };
322
410
  mimeType: string;
323
411
  size: number;
324
412
  }, {
325
413
  $type: "blob";
326
- ref: string;
414
+ ref: {
415
+ $link: string;
416
+ };
327
417
  mimeType: string;
328
418
  size: number;
329
419
  }>;
@@ -337,7 +427,9 @@ declare const AudioPostRecordSchema: z.ZodEffects<z.ZodObject<{
337
427
  $type: "dev.antiphony.embed.audio";
338
428
  audio: {
339
429
  $type: "blob";
340
- ref: string;
430
+ ref: {
431
+ $link: string;
432
+ };
341
433
  mimeType: string;
342
434
  size: number;
343
435
  };
@@ -348,7 +440,9 @@ declare const AudioPostRecordSchema: z.ZodEffects<z.ZodObject<{
348
440
  $type: "dev.antiphony.embed.audio";
349
441
  audio: {
350
442
  $type: "blob";
351
- ref: string;
443
+ ref: {
444
+ $link: string;
445
+ };
352
446
  mimeType: string;
353
447
  size: number;
354
448
  };
@@ -404,15 +498,21 @@ declare const AudioPostRecordSchema: z.ZodEffects<z.ZodObject<{
404
498
  selfLabels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
405
499
  createdAt: z.ZodEffects<z.ZodUnion<[z.ZodType<unknown, z.ZodTypeDef, unknown>, z.ZodString, z.ZodNumber, z.ZodDate]>, Date, unknown>;
406
500
  }, "strip", z.ZodTypeAny, {
407
- id: string;
408
- createdAt: Date;
409
- authorId: string;
501
+ cid: string;
410
502
  text: string;
503
+ id: string;
411
504
  originAppId: string;
505
+ authorId: string;
412
506
  kind: "prompt" | "reply";
413
- orgId?: string | null | undefined;
414
- title?: string | undefined;
507
+ createdAt: Date;
508
+ processing?: {
509
+ updatedAt: Date;
510
+ transcribe?: "pending" | "ready" | "failed" | "skipped" | undefined;
511
+ denoise?: "pending" | "ready" | "failed" | "skipped" | undefined;
512
+ denoisedBlobCid?: string | undefined;
513
+ } | undefined;
415
514
  authorDid?: string | undefined;
515
+ orgId?: string | null | undefined;
416
516
  reply?: {
417
517
  root: {
418
518
  uri: string;
@@ -423,11 +523,16 @@ declare const AudioPostRecordSchema: z.ZodEffects<z.ZodObject<{
423
523
  cid: string;
424
524
  };
425
525
  } | undefined;
526
+ threadParticipants?: string[] | undefined;
527
+ rootAuthorId?: string | undefined;
528
+ title?: string | undefined;
426
529
  embed?: {
427
530
  $type: "dev.antiphony.embed.audio";
428
531
  audio: {
429
532
  $type: "blob";
430
- ref: string;
533
+ ref: {
534
+ $link: string;
535
+ };
431
536
  mimeType: string;
432
537
  size: number;
433
538
  };
@@ -438,15 +543,20 @@ declare const AudioPostRecordSchema: z.ZodEffects<z.ZodObject<{
438
543
  langs?: string[] | undefined;
439
544
  selfLabels?: string[] | undefined;
440
545
  }, {
441
- id: string;
442
- authorId: string;
546
+ cid: string;
443
547
  text: string;
548
+ id: string;
444
549
  originAppId: string;
550
+ authorId: string;
445
551
  kind: "prompt" | "reply";
446
- createdAt?: unknown;
447
- orgId?: string | null | undefined;
448
- title?: string | undefined;
552
+ processing?: {
553
+ transcribe?: "pending" | "ready" | "failed" | "skipped" | undefined;
554
+ denoise?: "pending" | "ready" | "failed" | "skipped" | undefined;
555
+ denoisedBlobCid?: string | undefined;
556
+ updatedAt?: unknown;
557
+ } | undefined;
449
558
  authorDid?: string | undefined;
559
+ orgId?: string | null | undefined;
450
560
  reply?: {
451
561
  root: {
452
562
  uri: string;
@@ -457,11 +567,16 @@ declare const AudioPostRecordSchema: z.ZodEffects<z.ZodObject<{
457
567
  cid: string;
458
568
  };
459
569
  } | undefined;
570
+ threadParticipants?: string[] | undefined;
571
+ rootAuthorId?: string | undefined;
572
+ title?: string | undefined;
460
573
  embed?: {
461
574
  $type: "dev.antiphony.embed.audio";
462
575
  audio: {
463
576
  $type: "blob";
464
- ref: string;
577
+ ref: {
578
+ $link: string;
579
+ };
465
580
  mimeType: string;
466
581
  size: number;
467
582
  };
@@ -471,16 +586,23 @@ declare const AudioPostRecordSchema: z.ZodEffects<z.ZodObject<{
471
586
  } | undefined;
472
587
  langs?: string[] | undefined;
473
588
  selfLabels?: string[] | undefined;
589
+ createdAt?: unknown;
474
590
  }>, {
475
- id: string;
476
- createdAt: Date;
477
- authorId: string;
591
+ cid: string;
478
592
  text: string;
593
+ id: string;
479
594
  originAppId: string;
595
+ authorId: string;
480
596
  kind: "prompt" | "reply";
481
- orgId?: string | null | undefined;
482
- title?: string | undefined;
597
+ createdAt: Date;
598
+ processing?: {
599
+ updatedAt: Date;
600
+ transcribe?: "pending" | "ready" | "failed" | "skipped" | undefined;
601
+ denoise?: "pending" | "ready" | "failed" | "skipped" | undefined;
602
+ denoisedBlobCid?: string | undefined;
603
+ } | undefined;
483
604
  authorDid?: string | undefined;
605
+ orgId?: string | null | undefined;
484
606
  reply?: {
485
607
  root: {
486
608
  uri: string;
@@ -491,11 +613,16 @@ declare const AudioPostRecordSchema: z.ZodEffects<z.ZodObject<{
491
613
  cid: string;
492
614
  };
493
615
  } | undefined;
616
+ threadParticipants?: string[] | undefined;
617
+ rootAuthorId?: string | undefined;
618
+ title?: string | undefined;
494
619
  embed?: {
495
620
  $type: "dev.antiphony.embed.audio";
496
621
  audio: {
497
622
  $type: "blob";
498
- ref: string;
623
+ ref: {
624
+ $link: string;
625
+ };
499
626
  mimeType: string;
500
627
  size: number;
501
628
  };
@@ -506,15 +633,20 @@ declare const AudioPostRecordSchema: z.ZodEffects<z.ZodObject<{
506
633
  langs?: string[] | undefined;
507
634
  selfLabels?: string[] | undefined;
508
635
  }, {
509
- id: string;
510
- authorId: string;
636
+ cid: string;
511
637
  text: string;
638
+ id: string;
512
639
  originAppId: string;
640
+ authorId: string;
513
641
  kind: "prompt" | "reply";
514
- createdAt?: unknown;
515
- orgId?: string | null | undefined;
516
- title?: string | undefined;
642
+ processing?: {
643
+ transcribe?: "pending" | "ready" | "failed" | "skipped" | undefined;
644
+ denoise?: "pending" | "ready" | "failed" | "skipped" | undefined;
645
+ denoisedBlobCid?: string | undefined;
646
+ updatedAt?: unknown;
647
+ } | undefined;
517
648
  authorDid?: string | undefined;
649
+ orgId?: string | null | undefined;
518
650
  reply?: {
519
651
  root: {
520
652
  uri: string;
@@ -525,11 +657,16 @@ declare const AudioPostRecordSchema: z.ZodEffects<z.ZodObject<{
525
657
  cid: string;
526
658
  };
527
659
  } | undefined;
660
+ threadParticipants?: string[] | undefined;
661
+ rootAuthorId?: string | undefined;
662
+ title?: string | undefined;
528
663
  embed?: {
529
664
  $type: "dev.antiphony.embed.audio";
530
665
  audio: {
531
666
  $type: "blob";
532
- ref: string;
667
+ ref: {
668
+ $link: string;
669
+ };
533
670
  mimeType: string;
534
671
  size: number;
535
672
  };
@@ -539,6 +676,7 @@ declare const AudioPostRecordSchema: z.ZodEffects<z.ZodObject<{
539
676
  } | undefined;
540
677
  langs?: string[] | undefined;
541
678
  selfLabels?: string[] | undefined;
679
+ createdAt?: unknown;
542
680
  }>;
543
681
  type AudioPostRecord = z.infer<typeof AudioPostRecordSchema>;
544
682
  /**
@@ -603,8 +741,6 @@ declare const TranscriptEnrichmentRecordSchema: z.ZodObject<{
603
741
  model: z.ZodOptional<z.ZodString>;
604
742
  createdAt: z.ZodEffects<z.ZodUnion<[z.ZodType<unknown, z.ZodTypeDef, unknown>, z.ZodString, z.ZodNumber, z.ZodDate]>, Date, unknown>;
605
743
  }, "strip", z.ZodTypeAny, {
606
- id: string;
607
- createdAt: Date;
608
744
  transcript: {
609
745
  segments: {
610
746
  startMs: number;
@@ -613,6 +749,8 @@ declare const TranscriptEnrichmentRecordSchema: z.ZodObject<{
613
749
  }[];
614
750
  text?: string | undefined;
615
751
  };
752
+ id: string;
753
+ createdAt: Date;
616
754
  subject: {
617
755
  uri: string;
618
756
  cid: string;
@@ -620,7 +758,6 @@ declare const TranscriptEnrichmentRecordSchema: z.ZodObject<{
620
758
  lang?: string | undefined;
621
759
  model?: string | undefined;
622
760
  }, {
623
- id: string;
624
761
  transcript: {
625
762
  segments: {
626
763
  startMs: number;
@@ -629,6 +766,7 @@ declare const TranscriptEnrichmentRecordSchema: z.ZodObject<{
629
766
  }[];
630
767
  text?: string | undefined;
631
768
  };
769
+ id: string;
632
770
  subject: {
633
771
  uri: string;
634
772
  cid: string;
@@ -639,7 +777,13 @@ declare const TranscriptEnrichmentRecordSchema: z.ZodObject<{
639
777
  }>;
640
778
  type TranscriptEnrichmentRecord = z.infer<typeof TranscriptEnrichmentRecordSchema>;
641
779
  /**
642
- * `dev.antiphony.actor.profile` — port of `com.voxpop.actor.profile`.
780
+ * `dev.antiphony.actor.profile` — portable actor-profile record shape.
781
+ *
782
+ * Lexicon-only: the core never stores, serves, or CRUDs this record — the
783
+ * caller BFF is the sole authority for profile data. The schema stays in
784
+ * `@antiphony/shared` so a federating/exporting deployment has a well-known
785
+ * shape to project a BFF-owned profile into (see specs/core-bff-boundary.md,
786
+ * "actor.profile lexicon", resolved 2026-07-03).
643
787
  */
644
788
  declare const ActorProfileRecordSchema: z.ZodObject<{
645
789
  handle: z.ZodOptional<z.ZodString>;
@@ -663,10 +807,22 @@ type ActorProfileRecord = z.infer<typeof ActorProfileRecordSchema>;
663
807
  declare const ViewerStateSchema: z.ZodObject<{
664
808
  /** True when the authenticated caller authored this post. */
665
809
  isAuthor: z.ZodDefault<z.ZodBoolean>;
810
+ /**
811
+ * Whether the caller may reply to this post (reply gating, §6). A prompt is
812
+ * repliable by any authenticated viewer (the app's audience-policy default);
813
+ * a reply only by its branch participants (`{ creator, branch responder }`).
814
+ */
815
+ canReply: z.ZodDefault<z.ZodBoolean>;
816
+ /** Why `canReply` is false, when it is (omitted when the caller can reply). */
817
+ replyDisabledReason: z.ZodOptional<z.ZodEnum<["unauthenticated", "not_a_participant"]>>;
666
818
  }, "strip", z.ZodTypeAny, {
667
819
  isAuthor: boolean;
820
+ canReply: boolean;
821
+ replyDisabledReason?: "unauthenticated" | "not_a_participant" | undefined;
668
822
  }, {
669
823
  isAuthor?: boolean | undefined;
824
+ canReply?: boolean | undefined;
825
+ replyDisabledReason?: "unauthenticated" | "not_a_participant" | undefined;
670
826
  }>;
671
827
  type ViewerState = z.infer<typeof ViewerStateSchema>;
672
828
  /**
@@ -720,9 +876,8 @@ declare const PostRecordPublicSchema: z.ZodObject<{
720
876
  selfLabels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
721
877
  createdAt: z.ZodEffects<z.ZodUnion<[z.ZodType<unknown, z.ZodTypeDef, unknown>, z.ZodString, z.ZodNumber, z.ZodDate]>, Date, unknown>;
722
878
  }, "strip", z.ZodTypeAny, {
723
- createdAt: Date;
724
879
  text: string;
725
- title?: string | undefined;
880
+ createdAt: Date;
726
881
  reply?: {
727
882
  root: {
728
883
  uri: string;
@@ -733,12 +888,11 @@ declare const PostRecordPublicSchema: z.ZodObject<{
733
888
  cid: string;
734
889
  };
735
890
  } | undefined;
891
+ title?: string | undefined;
736
892
  langs?: string[] | undefined;
737
893
  selfLabels?: string[] | undefined;
738
894
  }, {
739
895
  text: string;
740
- createdAt?: unknown;
741
- title?: string | undefined;
742
896
  reply?: {
743
897
  root: {
744
898
  uri: string;
@@ -749,112 +903,35 @@ declare const PostRecordPublicSchema: z.ZodObject<{
749
903
  cid: string;
750
904
  };
751
905
  } | undefined;
906
+ title?: string | undefined;
752
907
  langs?: string[] | undefined;
753
908
  selfLabels?: string[] | undefined;
909
+ createdAt?: unknown;
754
910
  }>;
755
911
  type PostRecordPublic = z.infer<typeof PostRecordPublicSchema>;
756
912
  /**
757
913
  * `AudioPostView` — the hydrated, client-facing shape (the bsky `postView`
758
- * analogue): record content + author + hydrated embed + per-viewer state.
759
- * Produced by the (batched) hydrator; the default/public view, with
760
- * owner-extra arriving via `viewer` + separate authed endpoints, not fat
761
- * records.
914
+ * analogue): record content + opaque author references + hydrated embed +
915
+ * per-viewer state. Produced by the (batched) hydrator; the default/public
916
+ * view, with owner-extra arriving via `viewer` + separate authed endpoints,
917
+ * not fat records.
918
+ *
919
+ * Author identity is carried as **opaque references**, never a hydrated
920
+ * profile: `authorId` is the app's own user id (attribution facet) and
921
+ * `authorDid` is present only when the caller asserted one. Antiphony holds no
922
+ * user data — the caller BFF hydrates display identity by joining on
923
+ * `authorId` (see specs/core-surface.md, "The author model").
762
924
  */
763
925
  declare const AudioPostViewSchema: z.ZodObject<{
764
926
  /** at:// URI (or internal ref) identifying the post. */
765
927
  uri: z.ZodString;
766
- cid: z.ZodOptional<z.ZodString>;
928
+ /** Content CID of the canonical record (see `AudioPostRecordSchema.cid`). */
929
+ cid: z.ZodString;
767
930
  kind: z.ZodEnum<["prompt", "reply"]>;
768
- author: z.ZodObject<{
769
- id: z.ZodString;
770
- handle: z.ZodOptional<z.ZodNullable<z.ZodString>>;
771
- displayName: z.ZodOptional<z.ZodNullable<z.ZodString>>;
772
- avatarUrl: z.ZodOptional<z.ZodNullable<z.ZodString>>;
773
- bio: z.ZodOptional<z.ZodNullable<z.ZodString>>;
774
- website: z.ZodOptional<z.ZodNullable<z.ZodString>>;
775
- links: z.ZodOptional<z.ZodArray<z.ZodObject<{
776
- label: z.ZodString;
777
- url: z.ZodString;
778
- }, "strip", z.ZodTypeAny, {
779
- label: string;
780
- url: string;
781
- }, {
782
- label: string;
783
- url: string;
784
- }>, "many">>;
785
- bluesky: z.ZodOptional<z.ZodObject<{
786
- handle: z.ZodString;
787
- did: z.ZodString;
788
- }, "strip", z.ZodTypeAny, {
789
- handle: string;
790
- did: string;
791
- }, {
792
- handle: string;
793
- did: string;
794
- }>>;
795
- stats: z.ZodOptional<z.ZodObject<{
796
- followers: z.ZodDefault<z.ZodNumber>;
797
- following: z.ZodDefault<z.ZodNumber>;
798
- prompts: z.ZodDefault<z.ZodNumber>;
799
- }, "strip", z.ZodTypeAny, {
800
- followers: number;
801
- following: number;
802
- prompts: number;
803
- }, {
804
- followers?: number | undefined;
805
- following?: number | undefined;
806
- prompts?: number | undefined;
807
- }>>;
808
- badges: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
809
- isVerified: z.ZodOptional<z.ZodBoolean>;
810
- createdAt: z.ZodOptional<z.ZodEffects<z.ZodUnion<[z.ZodType<unknown, z.ZodTypeDef, unknown>, z.ZodString, z.ZodNumber, z.ZodDate]>, Date, unknown>>;
811
- }, "strip", z.ZodTypeAny, {
812
- id: string;
813
- handle?: string | null | undefined;
814
- displayName?: string | null | undefined;
815
- bio?: string | null | undefined;
816
- avatarUrl?: string | null | undefined;
817
- website?: string | null | undefined;
818
- links?: {
819
- label: string;
820
- url: string;
821
- }[] | undefined;
822
- createdAt?: Date | undefined;
823
- bluesky?: {
824
- handle: string;
825
- did: string;
826
- } | undefined;
827
- stats?: {
828
- followers: number;
829
- following: number;
830
- prompts: number;
831
- } | undefined;
832
- badges?: string[] | undefined;
833
- isVerified?: boolean | undefined;
834
- }, {
835
- id: string;
836
- handle?: string | null | undefined;
837
- displayName?: string | null | undefined;
838
- bio?: string | null | undefined;
839
- avatarUrl?: string | null | undefined;
840
- website?: string | null | undefined;
841
- links?: {
842
- label: string;
843
- url: string;
844
- }[] | undefined;
845
- createdAt?: unknown;
846
- bluesky?: {
847
- handle: string;
848
- did: string;
849
- } | undefined;
850
- stats?: {
851
- followers?: number | undefined;
852
- following?: number | undefined;
853
- prompts?: number | undefined;
854
- } | undefined;
855
- badges?: string[] | undefined;
856
- isVerified?: boolean | undefined;
857
- }>;
931
+ /** The acting actor's app-scoped id — an opaque attribution ref, not a profile. */
932
+ authorId: z.ZodString;
933
+ /** The author's app-asserted AT Protocol DID, when the caller provided one. */
934
+ authorDid: z.ZodOptional<z.ZodString>;
858
935
  record: z.ZodObject<{
859
936
  text: z.ZodString;
860
937
  title: z.ZodOptional<z.ZodString>;
@@ -902,9 +979,8 @@ declare const AudioPostViewSchema: z.ZodObject<{
902
979
  selfLabels: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
903
980
  createdAt: z.ZodEffects<z.ZodUnion<[z.ZodType<unknown, z.ZodTypeDef, unknown>, z.ZodString, z.ZodNumber, z.ZodDate]>, Date, unknown>;
904
981
  }, "strip", z.ZodTypeAny, {
905
- createdAt: Date;
906
982
  text: string;
907
- title?: string | undefined;
983
+ createdAt: Date;
908
984
  reply?: {
909
985
  root: {
910
986
  uri: string;
@@ -915,12 +991,11 @@ declare const AudioPostViewSchema: z.ZodObject<{
915
991
  cid: string;
916
992
  };
917
993
  } | undefined;
994
+ title?: string | undefined;
918
995
  langs?: string[] | undefined;
919
996
  selfLabels?: string[] | undefined;
920
997
  }, {
921
998
  text: string;
922
- createdAt?: unknown;
923
- title?: string | undefined;
924
999
  reply?: {
925
1000
  root: {
926
1001
  uri: string;
@@ -931,8 +1006,10 @@ declare const AudioPostViewSchema: z.ZodObject<{
931
1006
  cid: string;
932
1007
  };
933
1008
  } | undefined;
1009
+ title?: string | undefined;
934
1010
  langs?: string[] | undefined;
935
1011
  selfLabels?: string[] | undefined;
1012
+ createdAt?: unknown;
936
1013
  }>;
937
1014
  /** Hydrated audio embed (signed URL + lifted transcript). */
938
1015
  embed: z.ZodOptional<z.ZodObject<{
@@ -980,6 +1057,23 @@ declare const AudioPostViewSchema: z.ZodObject<{
980
1057
  }[];
981
1058
  text?: string | undefined;
982
1059
  }>>;
1060
+ /**
1061
+ * Per-stage audio-processing status (transcribe / denoise), when the app
1062
+ * opted into processing on create. Absent otherwise. A `pending` stage
1063
+ * means the client should poll (or re-render) for the result. When
1064
+ * `denoise === 'ready'`, `url` above already resolves to the cleaned
1065
+ * audio variant. See `types/processing.ts`.
1066
+ */
1067
+ processing: z.ZodOptional<z.ZodObject<{
1068
+ transcribe: z.ZodOptional<z.ZodEnum<["pending", "ready", "failed", "skipped"]>>;
1069
+ denoise: z.ZodOptional<z.ZodEnum<["pending", "ready", "failed", "skipped"]>>;
1070
+ }, "strip", z.ZodTypeAny, {
1071
+ transcribe?: "pending" | "ready" | "failed" | "skipped" | undefined;
1072
+ denoise?: "pending" | "ready" | "failed" | "skipped" | undefined;
1073
+ }, {
1074
+ transcribe?: "pending" | "ready" | "failed" | "skipped" | undefined;
1075
+ denoise?: "pending" | "ready" | "failed" | "skipped" | undefined;
1076
+ }>>;
983
1077
  }, "strip", z.ZodTypeAny, {
984
1078
  $type: "dev.antiphony.embed.audio#view";
985
1079
  url: string;
@@ -994,6 +1088,10 @@ declare const AudioPostViewSchema: z.ZodObject<{
994
1088
  }[];
995
1089
  text?: string | undefined;
996
1090
  } | undefined;
1091
+ processing?: {
1092
+ transcribe?: "pending" | "ready" | "failed" | "skipped" | undefined;
1093
+ denoise?: "pending" | "ready" | "failed" | "skipped" | undefined;
1094
+ } | undefined;
997
1095
  }, {
998
1096
  $type: "dev.antiphony.embed.audio#view";
999
1097
  url: string;
@@ -1008,21 +1106,39 @@ declare const AudioPostViewSchema: z.ZodObject<{
1008
1106
  }[];
1009
1107
  text?: string | undefined;
1010
1108
  } | undefined;
1109
+ processing?: {
1110
+ transcribe?: "pending" | "ready" | "failed" | "skipped" | undefined;
1111
+ denoise?: "pending" | "ready" | "failed" | "skipped" | undefined;
1112
+ } | undefined;
1011
1113
  }>>;
1012
1114
  viewer: z.ZodObject<{
1013
1115
  /** True when the authenticated caller authored this post. */
1014
1116
  isAuthor: z.ZodDefault<z.ZodBoolean>;
1117
+ /**
1118
+ * Whether the caller may reply to this post (reply gating, §6). A prompt is
1119
+ * repliable by any authenticated viewer (the app's audience-policy default);
1120
+ * a reply only by its branch participants (`{ creator, branch responder }`).
1121
+ */
1122
+ canReply: z.ZodDefault<z.ZodBoolean>;
1123
+ /** Why `canReply` is false, when it is (omitted when the caller can reply). */
1124
+ replyDisabledReason: z.ZodOptional<z.ZodEnum<["unauthenticated", "not_a_participant"]>>;
1015
1125
  }, "strip", z.ZodTypeAny, {
1016
1126
  isAuthor: boolean;
1127
+ canReply: boolean;
1128
+ replyDisabledReason?: "unauthenticated" | "not_a_participant" | undefined;
1017
1129
  }, {
1018
1130
  isAuthor?: boolean | undefined;
1131
+ canReply?: boolean | undefined;
1132
+ replyDisabledReason?: "unauthenticated" | "not_a_participant" | undefined;
1019
1133
  }>;
1020
1134
  }, "strip", z.ZodTypeAny, {
1021
1135
  uri: string;
1136
+ cid: string;
1137
+ authorId: string;
1138
+ kind: "prompt" | "reply";
1022
1139
  record: {
1023
- createdAt: Date;
1024
1140
  text: string;
1025
- title?: string | undefined;
1141
+ createdAt: Date;
1026
1142
  reply?: {
1027
1143
  root: {
1028
1144
  uri: string;
@@ -1033,38 +1149,16 @@ declare const AudioPostViewSchema: z.ZodObject<{
1033
1149
  cid: string;
1034
1150
  };
1035
1151
  } | undefined;
1152
+ title?: string | undefined;
1036
1153
  langs?: string[] | undefined;
1037
1154
  selfLabels?: string[] | undefined;
1038
1155
  };
1039
- author: {
1040
- id: string;
1041
- handle?: string | null | undefined;
1042
- displayName?: string | null | undefined;
1043
- bio?: string | null | undefined;
1044
- avatarUrl?: string | null | undefined;
1045
- website?: string | null | undefined;
1046
- links?: {
1047
- label: string;
1048
- url: string;
1049
- }[] | undefined;
1050
- createdAt?: Date | undefined;
1051
- bluesky?: {
1052
- handle: string;
1053
- did: string;
1054
- } | undefined;
1055
- stats?: {
1056
- followers: number;
1057
- following: number;
1058
- prompts: number;
1059
- } | undefined;
1060
- badges?: string[] | undefined;
1061
- isVerified?: boolean | undefined;
1062
- };
1063
- kind: "prompt" | "reply";
1064
1156
  viewer: {
1065
1157
  isAuthor: boolean;
1158
+ canReply: boolean;
1159
+ replyDisabledReason?: "unauthenticated" | "not_a_participant" | undefined;
1066
1160
  };
1067
- cid?: string | undefined;
1161
+ authorDid?: string | undefined;
1068
1162
  embed?: {
1069
1163
  $type: "dev.antiphony.embed.audio#view";
1070
1164
  url: string;
@@ -1079,13 +1173,18 @@ declare const AudioPostViewSchema: z.ZodObject<{
1079
1173
  }[];
1080
1174
  text?: string | undefined;
1081
1175
  } | undefined;
1176
+ processing?: {
1177
+ transcribe?: "pending" | "ready" | "failed" | "skipped" | undefined;
1178
+ denoise?: "pending" | "ready" | "failed" | "skipped" | undefined;
1179
+ } | undefined;
1082
1180
  } | undefined;
1083
1181
  }, {
1084
1182
  uri: string;
1183
+ cid: string;
1184
+ authorId: string;
1185
+ kind: "prompt" | "reply";
1085
1186
  record: {
1086
1187
  text: string;
1087
- createdAt?: unknown;
1088
- title?: string | undefined;
1089
1188
  reply?: {
1090
1189
  root: {
1091
1190
  uri: string;
@@ -1096,38 +1195,17 @@ declare const AudioPostViewSchema: z.ZodObject<{
1096
1195
  cid: string;
1097
1196
  };
1098
1197
  } | undefined;
1198
+ title?: string | undefined;
1099
1199
  langs?: string[] | undefined;
1100
1200
  selfLabels?: string[] | undefined;
1101
- };
1102
- author: {
1103
- id: string;
1104
- handle?: string | null | undefined;
1105
- displayName?: string | null | undefined;
1106
- bio?: string | null | undefined;
1107
- avatarUrl?: string | null | undefined;
1108
- website?: string | null | undefined;
1109
- links?: {
1110
- label: string;
1111
- url: string;
1112
- }[] | undefined;
1113
1201
  createdAt?: unknown;
1114
- bluesky?: {
1115
- handle: string;
1116
- did: string;
1117
- } | undefined;
1118
- stats?: {
1119
- followers?: number | undefined;
1120
- following?: number | undefined;
1121
- prompts?: number | undefined;
1122
- } | undefined;
1123
- badges?: string[] | undefined;
1124
- isVerified?: boolean | undefined;
1125
1202
  };
1126
- kind: "prompt" | "reply";
1127
1203
  viewer: {
1128
1204
  isAuthor?: boolean | undefined;
1205
+ canReply?: boolean | undefined;
1206
+ replyDisabledReason?: "unauthenticated" | "not_a_participant" | undefined;
1129
1207
  };
1130
- cid?: string | undefined;
1208
+ authorDid?: string | undefined;
1131
1209
  embed?: {
1132
1210
  $type: "dev.antiphony.embed.audio#view";
1133
1211
  url: string;
@@ -1142,6 +1220,10 @@ declare const AudioPostViewSchema: z.ZodObject<{
1142
1220
  }[];
1143
1221
  text?: string | undefined;
1144
1222
  } | undefined;
1223
+ processing?: {
1224
+ transcribe?: "pending" | "ready" | "failed" | "skipped" | undefined;
1225
+ denoise?: "pending" | "ready" | "failed" | "skipped" | undefined;
1226
+ } | undefined;
1145
1227
  } | undefined;
1146
1228
  }>;
1147
1229
  type AudioPostView = z.infer<typeof AudioPostViewSchema>;