@fungi.computer/puffball 0.0.0-stage → 0.0.1

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 (110) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +443 -2
  3. package/dist/app-api.d.ts +7 -0
  4. package/dist/app-api.js +61 -0
  5. package/dist/app-backend-binding-vocabulary.d.ts +299 -0
  6. package/dist/app-backend-binding-vocabulary.js +257 -0
  7. package/dist/app-backend-bindings.d.ts +21 -0
  8. package/dist/app-backend-bindings.js +47 -0
  9. package/dist/app-declaration.d.ts +46 -0
  10. package/dist/app-declaration.js +115 -0
  11. package/dist/app-event-facts.d.ts +40 -0
  12. package/dist/app-event-facts.js +28 -0
  13. package/dist/app-method-context.d.ts +109 -0
  14. package/dist/app-method-context.js +9 -0
  15. package/dist/app-method-runtime.d.ts +86 -0
  16. package/dist/app-method-runtime.js +122 -0
  17. package/dist/app-origin-paths.d.ts +6 -0
  18. package/dist/app-origin-paths.js +6 -0
  19. package/dist/app-vocabulary.d.ts +189 -0
  20. package/dist/app-vocabulary.js +103 -0
  21. package/dist/app.d.ts +379 -0
  22. package/dist/app.js +71 -0
  23. package/dist/artifact-dispositions.d.ts +115 -0
  24. package/dist/artifact-dispositions.js +234 -0
  25. package/dist/assets.d.ts +54 -0
  26. package/dist/assets.js +89 -0
  27. package/dist/backend.d.ts +41 -0
  28. package/dist/backend.js +29 -0
  29. package/dist/background-replay.d.ts +115 -0
  30. package/dist/background-replay.js +175 -0
  31. package/dist/buyer-references.d.ts +69 -0
  32. package/dist/buyer-references.js +154 -0
  33. package/dist/cloudflare-assets.d.ts +48 -0
  34. package/dist/cloudflare-assets.js +105 -0
  35. package/dist/cloudflare.d.ts +254 -0
  36. package/dist/cloudflare.js +1619 -0
  37. package/dist/effect.d.ts +73 -0
  38. package/dist/effect.js +325 -0
  39. package/dist/git-representation.d.ts +13 -0
  40. package/dist/git-representation.js +16 -0
  41. package/dist/inbox.d.ts +132 -0
  42. package/dist/inbox.js +81 -0
  43. package/dist/index.d.ts +31 -0
  44. package/dist/index.js +85 -0
  45. package/dist/internal/app-description.d.ts +14 -0
  46. package/dist/internal/app-description.js +98 -0
  47. package/dist/internal/app-release-artifact-reader.d.ts +26 -0
  48. package/dist/internal/app-release-artifact-reader.js +1 -0
  49. package/dist/internal/app-release-contract.d.ts +540 -0
  50. package/dist/internal/app-release-contract.js +169 -0
  51. package/dist/internal/app-release-schema.d.ts +1676 -0
  52. package/dist/internal/app-release-schema.js +386 -0
  53. package/dist/internal/app-release-store.d.ts +47 -0
  54. package/dist/internal/app-release-store.js +1 -0
  55. package/dist/internal/background-sync.d.ts +7 -0
  56. package/dist/internal/background-sync.js +10 -0
  57. package/dist/internal/deterministic-memory-app-release-store.d.ts +14 -0
  58. package/dist/internal/deterministic-memory-app-release-store.js +319 -0
  59. package/dist/internal/failure.d.ts +2 -0
  60. package/dist/internal/failure.js +9 -0
  61. package/dist/internal/immutable-release-material.d.ts +3 -0
  62. package/dist/internal/immutable-release-material.js +13 -0
  63. package/dist/internal/promise-app-release-store-adapter.d.ts +9 -0
  64. package/dist/internal/promise-app-release-store-adapter.js +65 -0
  65. package/dist/internal/promise-artifact-reader-adapter.d.ts +9 -0
  66. package/dist/internal/promise-artifact-reader-adapter.js +18 -0
  67. package/dist/internal/public-route-sql.d.ts +10 -0
  68. package/dist/internal/public-route-sql.js +239 -0
  69. package/dist/internal/public-website-authority.d.ts +338 -0
  70. package/dist/internal/public-website-authority.js +50 -0
  71. package/dist/internal/public-website-delivery.d.ts +59 -0
  72. package/dist/internal/public-website-delivery.js +232 -0
  73. package/dist/internal/public-website-fetch.d.ts +8 -0
  74. package/dist/internal/public-website-fetch.js +54 -0
  75. package/dist/internal/release-transition-material.d.ts +3 -0
  76. package/dist/internal/release-transition-material.js +11 -0
  77. package/dist/internal/verified-artifact-snapshot.d.ts +41 -0
  78. package/dist/internal/verified-artifact-snapshot.js +91 -0
  79. package/dist/public-route-moderation.d.ts +83 -0
  80. package/dist/public-route-moderation.js +236 -0
  81. package/dist/public-route-policy.d.ts +51 -0
  82. package/dist/public-route-policy.js +88 -0
  83. package/dist/public-routes.d.ts +34 -0
  84. package/dist/public-routes.js +136 -0
  85. package/dist/publisher.d.ts +61 -0
  86. package/dist/publisher.js +16 -0
  87. package/dist/safety-takedown.d.ts +56 -0
  88. package/dist/safety-takedown.js +146 -0
  89. package/dist/seller-closure-notice.d.ts +14 -0
  90. package/dist/seller-closure-notice.js +14 -0
  91. package/dist/seller-closure.d.ts +15 -0
  92. package/dist/seller-closure.js +31 -0
  93. package/dist/testing.d.ts +8 -0
  94. package/dist/testing.js +47 -0
  95. package/docs/api/README.md +26 -0
  96. package/docs/api/app-backend-binding-vocabulary.md +276 -0
  97. package/docs/api/app-backend-bindings.md +141 -0
  98. package/docs/api/app-event-facts.md +110 -0
  99. package/docs/api/app-method-context.md +166 -0
  100. package/docs/api/app-method-runtime.md +330 -0
  101. package/docs/api/backend.md +108 -0
  102. package/docs/api/background-replay.md +516 -0
  103. package/docs/api/cloudflare.md +1044 -0
  104. package/docs/api/effect.md +2429 -0
  105. package/docs/api/git-representation.md +56 -0
  106. package/docs/api/inbox.md +289 -0
  107. package/docs/api/index.md +2868 -0
  108. package/docs/api/publisher.md +147 -0
  109. package/docs/api/testing.md +31 -0
  110. package/package.json +158 -3
@@ -0,0 +1,2868 @@
1
+ <!-- Generated by Botanical API docs (TypeDoc + typedoc-plugin-markdown). Do not edit. -->
2
+
3
+ [**@fungi.computer/puffball**](README.md)
4
+
5
+ ---
6
+
7
+ [@fungi.computer/puffball](README.md) / index
8
+
9
+ # index
10
+
11
+ ## Classes
12
+
13
+ ### AppReleaseInputError
14
+
15
+ Fixed, non-leaking input failure for one public parser boundary.
16
+
17
+ #### Extends
18
+
19
+ - `Error`
20
+
21
+ #### Constructors
22
+
23
+ ##### Constructor
24
+
25
+ ```ts
26
+ new AppReleaseInputError(parserName): AppReleaseInputError;
27
+ ```
28
+
29
+ ###### Parameters
30
+
31
+ | Parameter | Type |
32
+ | ------------ | ----------------------------------------------- |
33
+ | `parserName` | [`AppReleaseParserName`](#appreleaseparsername) |
34
+
35
+ ###### Returns
36
+
37
+ [`AppReleaseInputError`](#appreleaseinputerror)
38
+
39
+ ###### Overrides
40
+
41
+ ```ts
42
+ Error.constructor;
43
+ ```
44
+
45
+ #### Properties
46
+
47
+ ##### parserName
48
+
49
+ ```ts
50
+ readonly parserName: AppReleaseParserName;
51
+ ```
52
+
53
+ ---
54
+
55
+ ### AppReleaseCommandInputError
56
+
57
+ Fixed non-leaking input failure for one public catalog command.
58
+
59
+ #### Extends
60
+
61
+ - `Error`
62
+
63
+ #### Constructors
64
+
65
+ ##### Constructor
66
+
67
+ ```ts
68
+ new AppReleaseCommandInputError(commandName): AppReleaseCommandInputError;
69
+ ```
70
+
71
+ ###### Parameters
72
+
73
+ | Parameter | Type |
74
+ | ------------- | ------------------------------------------------- |
75
+ | `commandName` | [`AppReleaseCommandName`](#appreleasecommandname) |
76
+
77
+ ###### Returns
78
+
79
+ [`AppReleaseCommandInputError`](#appreleasecommandinputerror)
80
+
81
+ ###### Overrides
82
+
83
+ ```ts
84
+ Error.constructor;
85
+ ```
86
+
87
+ #### Properties
88
+
89
+ ##### commandName
90
+
91
+ ```ts
92
+ readonly commandName: AppReleaseCommandName;
93
+ ```
94
+
95
+ ---
96
+
97
+ ### AppReleaseInvalidStoreResultError
98
+
99
+ Fixed non-leaking failure when a foreign Store success is structurally invalid.
100
+
101
+ #### Extends
102
+
103
+ - `Error`
104
+
105
+ #### Constructors
106
+
107
+ ##### Constructor
108
+
109
+ ```ts
110
+ new AppReleaseInvalidStoreResultError(): AppReleaseInvalidStoreResultError;
111
+ ```
112
+
113
+ ###### Returns
114
+
115
+ [`AppReleaseInvalidStoreResultError`](#appreleaseinvalidstoreresulterror)
116
+
117
+ ###### Overrides
118
+
119
+ ```ts
120
+ Error.constructor;
121
+ ```
122
+
123
+ ---
124
+
125
+ ### AppReleaseImmutableConflictError
126
+
127
+ Fixed conflict when one Release ID receives changed immutable input.
128
+
129
+ #### Extends
130
+
131
+ - `Error`
132
+
133
+ #### Constructors
134
+
135
+ ##### Constructor
136
+
137
+ ```ts
138
+ new AppReleaseImmutableConflictError(): AppReleaseImmutableConflictError;
139
+ ```
140
+
141
+ ###### Returns
142
+
143
+ [`AppReleaseImmutableConflictError`](#appreleaseimmutableconflicterror)
144
+
145
+ ###### Overrides
146
+
147
+ ```ts
148
+ Error.constructor;
149
+ ```
150
+
151
+ ---
152
+
153
+ ### AppReleaseOwnerAppAbsentError
154
+
155
+ Fixed failure when a new Release references an App that does not exist.
156
+
157
+ #### Extends
158
+
159
+ - `Error`
160
+
161
+ #### Constructors
162
+
163
+ ##### Constructor
164
+
165
+ ```ts
166
+ new AppReleaseOwnerAppAbsentError(appId): AppReleaseOwnerAppAbsentError;
167
+ ```
168
+
169
+ ###### Parameters
170
+
171
+ | Parameter | Type |
172
+ | --------- | ----------------- |
173
+ | `appId` | [`AppId`](#appid) |
174
+
175
+ ###### Returns
176
+
177
+ [`AppReleaseOwnerAppAbsentError`](#appreleaseownerappabsenterror)
178
+
179
+ ###### Overrides
180
+
181
+ ```ts
182
+ Error.constructor;
183
+ ```
184
+
185
+ #### Properties
186
+
187
+ ##### appId
188
+
189
+ ```ts
190
+ readonly appId: AppId;
191
+ ```
192
+
193
+ ---
194
+
195
+ ### AppReleaseSurfaceOwnerAppAbsentError
196
+
197
+ Fixed failure when a new public Surface references an App that does not exist.
198
+
199
+ #### Extends
200
+
201
+ - `Error`
202
+
203
+ #### Constructors
204
+
205
+ ##### Constructor
206
+
207
+ ```ts
208
+ new AppReleaseSurfaceOwnerAppAbsentError(appId): AppReleaseSurfaceOwnerAppAbsentError;
209
+ ```
210
+
211
+ ###### Parameters
212
+
213
+ | Parameter | Type |
214
+ | --------- | ----------------- |
215
+ | `appId` | [`AppId`](#appid) |
216
+
217
+ ###### Returns
218
+
219
+ [`AppReleaseSurfaceOwnerAppAbsentError`](#appreleasesurfaceownerappabsenterror)
220
+
221
+ ###### Overrides
222
+
223
+ ```ts
224
+ Error.constructor;
225
+ ```
226
+
227
+ #### Properties
228
+
229
+ ##### appId
230
+
231
+ ```ts
232
+ readonly appId: AppId;
233
+ ```
234
+
235
+ ---
236
+
237
+ ### AppReleaseStoreUnavailableError
238
+
239
+ Fixed non-leaking failure when the injected App Release store is unavailable.
240
+
241
+ #### Extends
242
+
243
+ - `Error`
244
+
245
+ #### Constructors
246
+
247
+ ##### Constructor
248
+
249
+ ```ts
250
+ new AppReleaseStoreUnavailableError(): AppReleaseStoreUnavailableError;
251
+ ```
252
+
253
+ ###### Returns
254
+
255
+ [`AppReleaseStoreUnavailableError`](#appreleasestoreunavailableerror)
256
+
257
+ ###### Overrides
258
+
259
+ ```ts
260
+ Error.constructor;
261
+ ```
262
+
263
+ ---
264
+
265
+ ### AppReleaseReleaseAbsentError
266
+
267
+ Fixed failure when artifact verification names no stored Release.
268
+
269
+ #### Extends
270
+
271
+ - `Error`
272
+
273
+ #### Constructors
274
+
275
+ ##### Constructor
276
+
277
+ ```ts
278
+ new AppReleaseReleaseAbsentError(): AppReleaseReleaseAbsentError;
279
+ ```
280
+
281
+ ###### Returns
282
+
283
+ [`AppReleaseReleaseAbsentError`](#appreleasereleaseabsenterror)
284
+
285
+ ###### Overrides
286
+
287
+ ```ts
288
+ Error.constructor;
289
+ ```
290
+
291
+ ---
292
+
293
+ ### AppReleaseArtifactUnavailableError
294
+
295
+ Fixed non-leaking failure when the injected artifact reader is unavailable.
296
+
297
+ #### Extends
298
+
299
+ - `Error`
300
+
301
+ #### Constructors
302
+
303
+ ##### Constructor
304
+
305
+ ```ts
306
+ new AppReleaseArtifactUnavailableError(): AppReleaseArtifactUnavailableError;
307
+ ```
308
+
309
+ ###### Returns
310
+
311
+ [`AppReleaseArtifactUnavailableError`](#appreleaseartifactunavailableerror)
312
+
313
+ ###### Overrides
314
+
315
+ ```ts
316
+ Error.constructor;
317
+ ```
318
+
319
+ ---
320
+
321
+ ### AppReleaseArtifactMissingError
322
+
323
+ Fixed failure when the requested artifact cannot be found.
324
+
325
+ #### Extends
326
+
327
+ - `Error`
328
+
329
+ #### Constructors
330
+
331
+ ##### Constructor
332
+
333
+ ```ts
334
+ new AppReleaseArtifactMissingError(): AppReleaseArtifactMissingError;
335
+ ```
336
+
337
+ ###### Returns
338
+
339
+ [`AppReleaseArtifactMissingError`](#appreleaseartifactmissingerror)
340
+
341
+ ###### Overrides
342
+
343
+ ```ts
344
+ Error.constructor;
345
+ ```
346
+
347
+ ---
348
+
349
+ ### AppReleaseArtifactDigestMismatchError
350
+
351
+ Fixed failure when resolved artifact bytes do not match the expected digest.
352
+
353
+ #### Extends
354
+
355
+ - `Error`
356
+
357
+ #### Constructors
358
+
359
+ ##### Constructor
360
+
361
+ ```ts
362
+ new AppReleaseArtifactDigestMismatchError(): AppReleaseArtifactDigestMismatchError;
363
+ ```
364
+
365
+ ###### Returns
366
+
367
+ [`AppReleaseArtifactDigestMismatchError`](#appreleaseartifactdigestmismatcherror)
368
+
369
+ ###### Overrides
370
+
371
+ ```ts
372
+ Error.constructor;
373
+ ```
374
+
375
+ ---
376
+
377
+ ### AppReleaseArtifactInvalidSnapshotError
378
+
379
+ Fixed failure when a hostile artifact read cannot form a valid snapshot.
380
+
381
+ #### Extends
382
+
383
+ - `Error`
384
+
385
+ #### Constructors
386
+
387
+ ##### Constructor
388
+
389
+ ```ts
390
+ new AppReleaseArtifactInvalidSnapshotError(): AppReleaseArtifactInvalidSnapshotError;
391
+ ```
392
+
393
+ ###### Returns
394
+
395
+ [`AppReleaseArtifactInvalidSnapshotError`](#appreleaseartifactinvalidsnapshoterror)
396
+
397
+ ###### Overrides
398
+
399
+ ```ts
400
+ Error.constructor;
401
+ ```
402
+
403
+ ---
404
+
405
+ ### AppReleaseUnimplementedError
406
+
407
+ Error thrown when a catalog operation is not implemented in this slice.
408
+
409
+ #### Extends
410
+
411
+ - `Error`
412
+
413
+ #### Constructors
414
+
415
+ ##### Constructor
416
+
417
+ ```ts
418
+ new AppReleaseUnimplementedError(): AppReleaseUnimplementedError;
419
+ ```
420
+
421
+ ###### Returns
422
+
423
+ [`AppReleaseUnimplementedError`](#appreleaseunimplementederror)
424
+
425
+ ###### Overrides
426
+
427
+ ```ts
428
+ Error.constructor;
429
+ ```
430
+
431
+ ---
432
+
433
+ ### AppReleaseTransitionReleaseAbsentError
434
+
435
+ Fixed failure when a transition names no stored Release.
436
+
437
+ #### Extends
438
+
439
+ - `Error`
440
+
441
+ #### Constructors
442
+
443
+ ##### Constructor
444
+
445
+ ```ts
446
+ new AppReleaseTransitionReleaseAbsentError(): AppReleaseTransitionReleaseAbsentError;
447
+ ```
448
+
449
+ ###### Returns
450
+
451
+ [`AppReleaseTransitionReleaseAbsentError`](#appreleasetransitionreleaseabsenterror)
452
+
453
+ ###### Overrides
454
+
455
+ ```ts
456
+ Error.constructor;
457
+ ```
458
+
459
+ ---
460
+
461
+ ### AppReleaseTransitionReleaseUnverifiedError
462
+
463
+ Fixed failure when promotion or rollback names an unverified Release.
464
+
465
+ #### Extends
466
+
467
+ - `Error`
468
+
469
+ #### Constructors
470
+
471
+ ##### Constructor
472
+
473
+ ```ts
474
+ new AppReleaseTransitionReleaseUnverifiedError(): AppReleaseTransitionReleaseUnverifiedError;
475
+ ```
476
+
477
+ ###### Returns
478
+
479
+ [`AppReleaseTransitionReleaseUnverifiedError`](#appreleasetransitionreleaseunverifiederror)
480
+
481
+ ###### Overrides
482
+
483
+ ```ts
484
+ Error.constructor;
485
+ ```
486
+
487
+ ---
488
+
489
+ ### AppReleaseTransitionArtifactIncompatibleError
490
+
491
+ Fixed failure when a website selection names a non-HTML artifact.
492
+
493
+ #### Extends
494
+
495
+ - `Error`
496
+
497
+ #### Constructors
498
+
499
+ ##### Constructor
500
+
501
+ ```ts
502
+ new AppReleaseTransitionArtifactIncompatibleError(): AppReleaseTransitionArtifactIncompatibleError;
503
+ ```
504
+
505
+ ###### Returns
506
+
507
+ [`AppReleaseTransitionArtifactIncompatibleError`](#appreleasetransitionartifactincompatibleerror)
508
+
509
+ ###### Overrides
510
+
511
+ ```ts
512
+ Error.constructor;
513
+ ```
514
+
515
+ ---
516
+
517
+ ### AppReleaseTransitionReleaseRevokedError
518
+
519
+ Fixed failure when promotion or rollback names a revoked Release.
520
+
521
+ #### Extends
522
+
523
+ - `Error`
524
+
525
+ #### Constructors
526
+
527
+ ##### Constructor
528
+
529
+ ```ts
530
+ new AppReleaseTransitionReleaseRevokedError(): AppReleaseTransitionReleaseRevokedError;
531
+ ```
532
+
533
+ ###### Returns
534
+
535
+ [`AppReleaseTransitionReleaseRevokedError`](#appreleasetransitionreleaserevokederror)
536
+
537
+ ###### Overrides
538
+
539
+ ```ts
540
+ Error.constructor;
541
+ ```
542
+
543
+ ---
544
+
545
+ ### AppReleaseTransitionSurfaceAbsentError
546
+
547
+ Fixed failure when a transition names no stored public Surface.
548
+
549
+ #### Extends
550
+
551
+ - `Error`
552
+
553
+ #### Constructors
554
+
555
+ ##### Constructor
556
+
557
+ ```ts
558
+ new AppReleaseTransitionSurfaceAbsentError(): AppReleaseTransitionSurfaceAbsentError;
559
+ ```
560
+
561
+ ###### Returns
562
+
563
+ [`AppReleaseTransitionSurfaceAbsentError`](#appreleasetransitionsurfaceabsenterror)
564
+
565
+ ###### Overrides
566
+
567
+ ```ts
568
+ Error.constructor;
569
+ ```
570
+
571
+ ---
572
+
573
+ ### AppReleaseTransitionOwnershipConflictError
574
+
575
+ Fixed failure when a Release is owned by another App than its Surface.
576
+
577
+ #### Extends
578
+
579
+ - `Error`
580
+
581
+ #### Constructors
582
+
583
+ ##### Constructor
584
+
585
+ ```ts
586
+ new AppReleaseTransitionOwnershipConflictError(): AppReleaseTransitionOwnershipConflictError;
587
+ ```
588
+
589
+ ###### Returns
590
+
591
+ [`AppReleaseTransitionOwnershipConflictError`](#appreleasetransitionownershipconflicterror)
592
+
593
+ ###### Overrides
594
+
595
+ ```ts
596
+ Error.constructor;
597
+ ```
598
+
599
+ ---
600
+
601
+ ### AppReleaseTransitionIdempotencyConflictError
602
+
603
+ Fixed failure when an idempotency key is reused for changed material input.
604
+
605
+ #### Extends
606
+
607
+ - `Error`
608
+
609
+ #### Constructors
610
+
611
+ ##### Constructor
612
+
613
+ ```ts
614
+ new AppReleaseTransitionIdempotencyConflictError(): AppReleaseTransitionIdempotencyConflictError;
615
+ ```
616
+
617
+ ###### Returns
618
+
619
+ [`AppReleaseTransitionIdempotencyConflictError`](#appreleasetransitionidempotencyconflicterror)
620
+
621
+ ###### Overrides
622
+
623
+ ```ts
624
+ Error.constructor;
625
+ ```
626
+
627
+ ---
628
+
629
+ ### AppReleaseTransitionIdUnavailableError
630
+
631
+ Fixed, non-leaking failure when Cairn cannot issue a transition identity.
632
+
633
+ #### Extends
634
+
635
+ - `Error`
636
+
637
+ #### Constructors
638
+
639
+ ##### Constructor
640
+
641
+ ```ts
642
+ new AppReleaseTransitionIdUnavailableError(): AppReleaseTransitionIdUnavailableError;
643
+ ```
644
+
645
+ ###### Returns
646
+
647
+ [`AppReleaseTransitionIdUnavailableError`](#appreleasetransitionidunavailableerror)
648
+
649
+ ###### Overrides
650
+
651
+ ```ts
652
+ Error.constructor;
653
+ ```
654
+
655
+ ---
656
+
657
+ ### AppReleasePublicWebsiteNotFoundError
658
+
659
+ Fixed non-leaking failure for malformed, absent, or unselected routes.
660
+
661
+ #### Extends
662
+
663
+ - `Error`
664
+
665
+ #### Constructors
666
+
667
+ ##### Constructor
668
+
669
+ ```ts
670
+ new AppReleasePublicWebsiteNotFoundError(): AppReleasePublicWebsiteNotFoundError;
671
+ ```
672
+
673
+ ###### Returns
674
+
675
+ [`AppReleasePublicWebsiteNotFoundError`](#appreleasepublicwebsitenotfounderror)
676
+
677
+ ###### Overrides
678
+
679
+ ```ts
680
+ Error.constructor;
681
+ ```
682
+
683
+ ---
684
+
685
+ ### AppReleasePublicWebsiteUnavailableError
686
+
687
+ Fixed non-leaking failure when public delivery cannot be proven safe.
688
+
689
+ #### Extends
690
+
691
+ - `Error`
692
+
693
+ #### Constructors
694
+
695
+ ##### Constructor
696
+
697
+ ```ts
698
+ new AppReleasePublicWebsiteUnavailableError(): AppReleasePublicWebsiteUnavailableError;
699
+ ```
700
+
701
+ ###### Returns
702
+
703
+ [`AppReleasePublicWebsiteUnavailableError`](#appreleasepublicwebsiteunavailableerror)
704
+
705
+ ###### Overrides
706
+
707
+ ```ts
708
+ Error.constructor;
709
+ ```
710
+
711
+ ## Type Aliases
712
+
713
+ ### AppRole
714
+
715
+ ```ts
716
+ type AppRole = (typeof appRoles)[number];
717
+ ```
718
+
719
+ One assignable App role.
720
+
721
+ ---
722
+
723
+ ### AppCapabilityId
724
+
725
+ ```ts
726
+ type AppCapabilityId = (typeof appCapabilityIds)[number];
727
+ ```
728
+
729
+ One requestable host capability id.
730
+
731
+ ---
732
+
733
+ ### AppApi
734
+
735
+ ```ts
736
+ type AppApi = Readonly<{
737
+ methods: Readonly<
738
+ Record<
739
+ string,
740
+ Readonly<{
741
+ description: string;
742
+ input: object;
743
+ output: object;
744
+ effect: "read" | "write" | "external";
745
+ requires: readonly AppCapabilityId[];
746
+ pending?: true;
747
+ hidden?: true;
748
+ anonymous?: true;
749
+ }>
750
+ >
751
+ >;
752
+ toolFamily?: Readonly<{
753
+ name: string;
754
+ list: string;
755
+ call: string;
756
+ }>;
757
+ events?: Readonly<
758
+ Record<
759
+ string,
760
+ Readonly<{
761
+ description: string;
762
+ payload: object;
763
+ }>
764
+ >
765
+ >;
766
+ }>;
767
+ ```
768
+
769
+ Build-generated method and event metadata. This data-only projection grants no
770
+ authority.
771
+
772
+ ---
773
+
774
+ ### AppHandler
775
+
776
+ ```ts
777
+ type AppHandler = (typeof appHandlers)[number];
778
+ ```
779
+
780
+ One shell navigation request an App can handle.
781
+
782
+ ---
783
+
784
+ ### AppDeclaredCommand
785
+
786
+ ```ts
787
+ type AppDeclaredCommand = Readonly<{
788
+ id: string;
789
+ title: string;
790
+ category: string;
791
+ description?: string;
792
+ sigil?: string;
793
+ projections?: Readonly<{
794
+ bindings?: Readonly<{
795
+ order?: ... | ...;
796
+ }> & Readonly<{
797
+ values: readonly ...;
798
+ }>;
799
+ agent?: Readonly<{
800
+ order?: ... | ...;
801
+ }> & Readonly<{
802
+ keybind?: ... | ...;
803
+ }>;
804
+ help?: Readonly<{
805
+ order?: number;
806
+ }>;
807
+ menu?: Readonly<{
808
+ order?: number;
809
+ }>;
810
+ palette?: Readonly<{
811
+ order?: number;
812
+ }>;
813
+ slash?: Readonly<{
814
+ order?: ... | ...;
815
+ }> & Readonly<{
816
+ aliases: readonly ...;
817
+ }>;
818
+ }>;
819
+ }>;
820
+ ```
821
+
822
+ One command an App declares so the backend can advertise it before the App is
823
+ open: the identity, labels and projections of a Whistle definition.
824
+ Availability, typed action schemas and slash argument grammars are runtime facts
825
+ the mounted App registers, so they are not part of the declaration.
826
+
827
+ ---
828
+
829
+ ### AppStorageScope
830
+
831
+ ```ts
832
+ type AppStorageScope = (typeof appStorageScopes)[number];
833
+ ```
834
+
835
+ The shared Team default or the calling member's private override.
836
+
837
+ ---
838
+
839
+ ### AppStorageKey
840
+
841
+ ```ts
842
+ type AppStorageKey = Readonly<{
843
+ key: string;
844
+ scopes: readonly AppStorageScope[];
845
+ maxBytes: number;
846
+ }>;
847
+ ```
848
+
849
+ One digest-covered key and the bounds its App agrees to use.
850
+
851
+ ---
852
+
853
+ ### AppDeclaration
854
+
855
+ ```ts
856
+ type AppDeclaration = Readonly<{
857
+ api?: AppApi;
858
+ displayName?: string;
859
+ capabilities: readonly AppCapabilityId[];
860
+ calls?: readonly Readonly<{
861
+ appId: string;
862
+ methods: readonly string[];
863
+ }>[];
864
+ guidance?: string;
865
+ handlers: readonly AppHandler[];
866
+ receives?: readonly "git.push"[];
867
+ icon?: string;
868
+ roles: readonly AppRole[];
869
+ storage?: readonly AppStorageKey[];
870
+ commands?: readonly AppDeclaredCommand[];
871
+ gills?: readonly AppDeclaredGill[];
872
+ backend?: Readonly<{
873
+ bindings: readonly AppBackendBinding[];
874
+ sync?: Readonly<{
875
+ method: string;
876
+ }>;
877
+ }>;
878
+ }>;
879
+ ```
880
+
881
+ What an App asks of the host, covered by its Release digest. Every App,
882
+ first-party or not, uses this same declaration; there is no other source.
883
+
884
+ ---
885
+
886
+ ### AppId
887
+
888
+ ```ts
889
+ type AppId = string & object;
890
+ ```
891
+
892
+ Opaque Global App identifier.
893
+
894
+ #### Type Declaration
895
+
896
+ | Name | Type |
897
+ | ---------------- | --------- |
898
+ | `appReleaseKind` | `"AppId"` |
899
+
900
+ ---
901
+
902
+ ### ReleaseId
903
+
904
+ ```ts
905
+ type ReleaseId = string & object;
906
+ ```
907
+
908
+ Opaque immutable Release identifier.
909
+
910
+ #### Type Declaration
911
+
912
+ | Name | Type |
913
+ | ---------------- | ------------- |
914
+ | `appReleaseKind` | `"ReleaseId"` |
915
+
916
+ ---
917
+
918
+ ### PublicSurfaceId
919
+
920
+ ```ts
921
+ type PublicSurfaceId = string & object;
922
+ ```
923
+
924
+ Opaque anonymous public-Surface identifier.
925
+
926
+ #### Type Declaration
927
+
928
+ | Name | Type |
929
+ | ---------------- | ------------------- |
930
+ | `appReleaseKind` | `"PublicSurfaceId"` |
931
+
932
+ ---
933
+
934
+ ### ArtifactRef
935
+
936
+ ```ts
937
+ type ArtifactRef = string & object;
938
+ ```
939
+
940
+ Opaque, bounded artifact locator for an injected reader.
941
+
942
+ #### Type Declaration
943
+
944
+ | Name | Type |
945
+ | ---------------- | --------------- |
946
+ | `appReleaseKind` | `"ArtifactRef"` |
947
+
948
+ ---
949
+
950
+ ### IdempotencyKey
951
+
952
+ ```ts
953
+ type IdempotencyKey = string & object;
954
+ ```
955
+
956
+ Caller-provided idempotency key for one control-plane operation.
957
+
958
+ #### Type Declaration
959
+
960
+ | Name | Type |
961
+ | ---------------- | ------------------ |
962
+ | `appReleaseKind` | `"IdempotencyKey"` |
963
+
964
+ ---
965
+
966
+ ### SourceRevision
967
+
968
+ ```ts
969
+ type SourceRevision = string & object;
970
+ ```
971
+
972
+ Pinned lowercase Git source revision.
973
+
974
+ #### Type Declaration
975
+
976
+ | Name | Type |
977
+ | ---------------- | ------------------ |
978
+ | `appReleaseKind` | `"SourceRevision"` |
979
+
980
+ ---
981
+
982
+ ### Sha256Digest
983
+
984
+ ```ts
985
+ type Sha256Digest = string & object;
986
+ ```
987
+
988
+ Lowercase SHA-256 digest with its `sha256:` prefix.
989
+
990
+ #### Type Declaration
991
+
992
+ | Name | Type |
993
+ | ---------------- | ---------------- |
994
+ | `appReleaseKind` | `"Sha256Digest"` |
995
+
996
+ ---
997
+
998
+ ### StableRoute
999
+
1000
+ ```ts
1001
+ type StableRoute = string & object;
1002
+ ```
1003
+
1004
+ Canonical, local origin-relative stable route for a public Surface.
1005
+
1006
+ #### Type Declaration
1007
+
1008
+ | Name | Type |
1009
+ | ---------------- | --------------- |
1010
+ | `appReleaseKind` | `"StableRoute"` |
1011
+
1012
+ ---
1013
+
1014
+ ### AppTransitionId
1015
+
1016
+ ```ts
1017
+ type AppTransitionId = CairnId<"app-release", "transition">;
1018
+ ```
1019
+
1020
+ Cairn-issued opaque identity for one owner-issued App transition.
1021
+
1022
+ ---
1023
+
1024
+ ### ImmutableArtifactBytes
1025
+
1026
+ ```ts
1027
+ type ImmutableArtifactBytes = object;
1028
+ ```
1029
+
1030
+ Immutable artifact bytes exposed only through fresh copies.
1031
+
1032
+ #### Properties
1033
+
1034
+ ##### byteLength
1035
+
1036
+ ```ts
1037
+ readonly byteLength: number;
1038
+ ```
1039
+
1040
+ The immutable snapshot's bounded byte length.
1041
+
1042
+ #### Methods
1043
+
1044
+ ##### copy()
1045
+
1046
+ ```ts
1047
+ copy(): Uint8Array;
1048
+ ```
1049
+
1050
+ Return an independently mutable copy of the immutable snapshot.
1051
+
1052
+ ###### Returns
1053
+
1054
+ `Uint8Array`
1055
+
1056
+ ---
1057
+
1058
+ ### ArtifactProvenance
1059
+
1060
+ ```ts
1061
+ type ArtifactProvenance = object;
1062
+ ```
1063
+
1064
+ Source and build facts permanently bound to a Release artifact.
1065
+
1066
+ #### Properties
1067
+
1068
+ ##### sourceRevision
1069
+
1070
+ ```ts
1071
+ readonly sourceRevision: SourceRevision;
1072
+ ```
1073
+
1074
+ Pinned source revision from which the artifact was built.
1075
+
1076
+ ##### sourceTreeDigest
1077
+
1078
+ ```ts
1079
+ readonly sourceTreeDigest: Sha256Digest;
1080
+ ```
1081
+
1082
+ Digest of the source tree used for the build.
1083
+
1084
+ ##### buildRecipeDigest
1085
+
1086
+ ```ts
1087
+ readonly buildRecipeDigest: Sha256Digest;
1088
+ ```
1089
+
1090
+ Digest of the deterministic build recipe.
1091
+
1092
+ ---
1093
+
1094
+ ### ReleaseArtifact
1095
+
1096
+ ```ts
1097
+ type ReleaseArtifact = object;
1098
+ ```
1099
+
1100
+ Immutable artifact identity and provenance bound to a Release.
1101
+
1102
+ #### Properties
1103
+
1104
+ ##### artifactRef
1105
+
1106
+ ```ts
1107
+ readonly artifactRef: ArtifactRef;
1108
+ ```
1109
+
1110
+ Opaque reference resolved only by the injected reader.
1111
+
1112
+ ##### artifactDigest
1113
+
1114
+ ```ts
1115
+ readonly artifactDigest: Sha256Digest;
1116
+ ```
1117
+
1118
+ Digest expected from the resolved artifact bytes.
1119
+
1120
+ ##### provenance
1121
+
1122
+ ```ts
1123
+ readonly provenance: ArtifactProvenance;
1124
+ ```
1125
+
1126
+ Write-once source and build provenance.
1127
+
1128
+ ---
1129
+
1130
+ ### App
1131
+
1132
+ ```ts
1133
+ type App = object;
1134
+ ```
1135
+
1136
+ Global App record owned by the catalog.
1137
+
1138
+ #### Properties
1139
+
1140
+ ##### appId
1141
+
1142
+ ```ts
1143
+ readonly appId: AppId;
1144
+ ```
1145
+
1146
+ Opaque App identity.
1147
+
1148
+ ---
1149
+
1150
+ ### Release
1151
+
1152
+ ```ts
1153
+ type Release = object;
1154
+ ```
1155
+
1156
+ Immutable App Release record.
1157
+
1158
+ #### Properties
1159
+
1160
+ ##### releaseId
1161
+
1162
+ ```ts
1163
+ readonly releaseId: ReleaseId;
1164
+ ```
1165
+
1166
+ Opaque immutable Release identity.
1167
+
1168
+ ##### appId
1169
+
1170
+ ```ts
1171
+ readonly appId: AppId;
1172
+ ```
1173
+
1174
+ App that owns this Release.
1175
+
1176
+ ##### artifact
1177
+
1178
+ ```ts
1179
+ readonly artifact: ReleaseArtifact;
1180
+ ```
1181
+
1182
+ Immutable artifact identity and provenance.
1183
+
1184
+ ---
1185
+
1186
+ ### PublicSurface
1187
+
1188
+ ```ts
1189
+ type PublicSurface = object;
1190
+ ```
1191
+
1192
+ Anonymous website Surface and its explicit App owner.
1193
+
1194
+ #### Properties
1195
+
1196
+ ##### publicSurfaceId
1197
+
1198
+ ```ts
1199
+ readonly publicSurfaceId: PublicSurfaceId;
1200
+ ```
1201
+
1202
+ Opaque public-Surface identity.
1203
+
1204
+ ##### appId
1205
+
1206
+ ```ts
1207
+ readonly appId: AppId;
1208
+ ```
1209
+
1210
+ App that owns this Surface.
1211
+
1212
+ ##### stableRoute
1213
+
1214
+ ```ts
1215
+ readonly stableRoute: StableRoute;
1216
+ ```
1217
+
1218
+ Canonical local route locator for this Surface.
1219
+
1220
+ ---
1221
+
1222
+ ### PublicSurfacePublisher
1223
+
1224
+ ```ts
1225
+ type PublicSurfacePublisher = Readonly<{
1226
+ kind: "customer" | "platform";
1227
+ teamId: string;
1228
+ userId: string;
1229
+ requestKey: string;
1230
+ }>;
1231
+ ```
1232
+
1233
+ Admitted publisher identity retained separately from public Surface metadata.
1234
+
1235
+ ---
1236
+
1237
+ ### PublicSurfaceDefinition
1238
+
1239
+ ```ts
1240
+ type PublicSurfaceDefinition = PublicSurface &
1241
+ Readonly<{
1242
+ publisher: PublicSurfacePublisher;
1243
+ }>;
1244
+ ```
1245
+
1246
+ Creation requires explicit publisher custody; an ID is never authority.
1247
+
1248
+ ---
1249
+
1250
+ ### ArtifactMediaType
1251
+
1252
+ ```ts
1253
+ type ArtifactMediaType =
1254
+ | "text/html; charset=utf-8"
1255
+ | "application/vnd.fungi.app-backend+json"
1256
+ | "application/vnd.fungi.app-assets+json"
1257
+ | "application/vnd.fungi.app+json";
1258
+ ```
1259
+
1260
+ Supported immutable artifact representation formats.
1261
+
1262
+ ---
1263
+
1264
+ ### VerifiedAppArtifactReference
1265
+
1266
+ ```ts
1267
+ type VerifiedAppArtifactReference = Readonly<{
1268
+ artifactRef: ArtifactRef;
1269
+ digest: Sha256Digest;
1270
+ mediaType: Exclude<ArtifactMediaType, "application/vnd.fungi.app+json">;
1271
+ version: string;
1272
+ byteLength: number;
1273
+ }>;
1274
+ ```
1275
+
1276
+ One immutable child reference retained after App publication verification.
1277
+
1278
+ ---
1279
+
1280
+ ### DurableBackend
1281
+
1282
+ ```ts
1283
+ type DurableBackend = Readonly<{
1284
+ runtime: Readonly<{
1285
+ kind: "durable-facet";
1286
+ stateSchema: number;
1287
+ }>;
1288
+ compatibilityDate: string;
1289
+ exportName: string;
1290
+ code: string;
1291
+ }>;
1292
+ ```
1293
+
1294
+ Executable descriptor decoded from one verified backend child artifact.
1295
+
1296
+ ---
1297
+
1298
+ ### VerifiedBackendProfile
1299
+
1300
+ ```ts
1301
+ type VerifiedBackendProfile = Omit<DurableBackend, "code">;
1302
+ ```
1303
+
1304
+ Backend facts needed for admission, with executable code deliberately absent.
1305
+
1306
+ ---
1307
+
1308
+ ### VerifiedAppDescription
1309
+
1310
+ ```ts
1311
+ type VerifiedAppDescription = Readonly<{
1312
+ format: "fungi-app-v1";
1313
+ ui: VerifiedAppArtifactReference | null;
1314
+ backend: Readonly<{
1315
+ artifact: VerifiedAppArtifactReference;
1316
+ profile: VerifiedBackendProfile;
1317
+ }> | null;
1318
+ declaration: AppDeclaration;
1319
+ }>;
1320
+ ```
1321
+
1322
+ Normalized immutable App description persisted by the verification owner.
1323
+
1324
+ ---
1325
+
1326
+ ### ResolvedAppMetadata
1327
+
1328
+ ```ts
1329
+ type ResolvedAppMetadata = Readonly<{
1330
+ release: Release;
1331
+ digest: Sha256Digest;
1332
+ description: VerifiedAppDescription;
1333
+ }>;
1334
+ ```
1335
+
1336
+ Verified metadata returned without reading any artifact body.
1337
+
1338
+ ---
1339
+
1340
+ ### PublicSurfaceAuthority
1341
+
1342
+ ```ts
1343
+ type PublicSurfaceAuthority = Readonly<{
1344
+ currentReleaseId: ReleaseId;
1345
+ sequence: number;
1346
+ app: App;
1347
+ release: Release;
1348
+ surface: PublicSurface;
1349
+ digest: Sha256Digest;
1350
+ revocation: ReleaseRevocation;
1351
+ description: VerifiedAppDescription;
1352
+ }>;
1353
+ ```
1354
+
1355
+ Current metadata-only authority for one selected public Surface.
1356
+
1357
+ ---
1358
+
1359
+ ### VerifiedArtifactRead
1360
+
1361
+ ```ts
1362
+ type VerifiedArtifactRead = object;
1363
+ ```
1364
+
1365
+ Successful, verified artifact read.
1366
+
1367
+ #### Properties
1368
+
1369
+ ##### kind
1370
+
1371
+ ```ts
1372
+ readonly kind: "verified";
1373
+ ```
1374
+
1375
+ Discriminant for a verified immutable representation snapshot.
1376
+
1377
+ ##### digest
1378
+
1379
+ ```ts
1380
+ readonly digest: Sha256Digest;
1381
+ ```
1382
+
1383
+ Computed digest matching the requested digest.
1384
+
1385
+ ##### mediaType
1386
+
1387
+ ```ts
1388
+ readonly mediaType: ArtifactMediaType;
1389
+ ```
1390
+
1391
+ Explicit artifact formats; an asset root is never interpreted as HTML or backend
1392
+ code.
1393
+
1394
+ ##### bytes
1395
+
1396
+ ```ts
1397
+ readonly bytes: ImmutableArtifactBytes;
1398
+ ```
1399
+
1400
+ Immutable representation byte snapshot.
1401
+
1402
+ ##### byteLength
1403
+
1404
+ ```ts
1405
+ readonly byteLength: number;
1406
+ ```
1407
+
1408
+ Byte length matching the immutable snapshot.
1409
+
1410
+ ---
1411
+
1412
+ ### AppUi
1413
+
1414
+ ```ts
1415
+ type AppUi = Omit<VerifiedArtifactRead, "kind" | "mediaType"> & object;
1416
+ ```
1417
+
1418
+ Verified UI representation; selection authority remains with its host.
1419
+
1420
+ #### Type Declaration
1421
+
1422
+ | Name | Type |
1423
+ | ----------- | ------------------------------------------------------------------------- |
1424
+ | `mediaType` | `"text/html; charset=utf-8"` \| `"application/vnd.fungi.app-assets+json"` |
1425
+
1426
+ ---
1427
+
1428
+ ### AppDescription
1429
+
1430
+ ```ts
1431
+ type AppDescription = Readonly<{
1432
+ ui: AppUi | null;
1433
+ backend: Readonly<{
1434
+ digest: Sha256Digest;
1435
+ descriptor: DurableBackend;
1436
+ }> | null;
1437
+ }>;
1438
+ ```
1439
+
1440
+ Normalized immutable code description shared by Surface and facet consumers.
1441
+
1442
+ ---
1443
+
1444
+ ### ResolvedApp
1445
+
1446
+ ```ts
1447
+ type ResolvedApp = AppDescription &
1448
+ Readonly<{
1449
+ release: Release;
1450
+ digest: Sha256Digest;
1451
+ }>;
1452
+ ```
1453
+
1454
+ One eligible Release with all declared executable parts resolved.
1455
+
1456
+ ---
1457
+
1458
+ ### ArtifactReadResult
1459
+
1460
+ ```ts
1461
+ type ArtifactReadResult =
1462
+ | VerifiedArtifactRead
1463
+ | {
1464
+ kind: "unavailable";
1465
+ }
1466
+ | {
1467
+ kind: "missing";
1468
+ }
1469
+ | {
1470
+ kind: "digest-mismatch";
1471
+ actualDigest: Sha256Digest;
1472
+ };
1473
+ ```
1474
+
1475
+ Closed result union returned by an injected artifact reader.
1476
+
1477
+ ---
1478
+
1479
+ ### ArtifactVerificationIntent
1480
+
1481
+ ```ts
1482
+ type ArtifactVerificationIntent = "publication";
1483
+ ```
1484
+
1485
+ Names the owner-controlled verification work requested for one read.
1486
+
1487
+ ---
1488
+
1489
+ ### ArtifactReader
1490
+
1491
+ ```ts
1492
+ type ArtifactReader = object;
1493
+ ```
1494
+
1495
+ Storage-neutral port that resolves an opaque reference and verifies bytes.
1496
+
1497
+ #### Methods
1498
+
1499
+ ##### read()
1500
+
1501
+ ```ts
1502
+ read(input): Promise<ArtifactReadResult>;
1503
+ ```
1504
+
1505
+ Resolve and verify exactly one expected immutable artifact.
1506
+
1507
+ ###### Parameters
1508
+
1509
+ | Parameter | Type | Description |
1510
+ | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1511
+ | `input` | \{ `artifactRef`: [`ArtifactRef`](#artifactref); `expectedDigest`: [`Sha256Digest`](#sha256digest); `expectedObject?`: \{ `version`: `string`; `byteLength`: `number`; \}; `verification?`: [`ArtifactVerificationIntent`](#artifactverificationintent); \} | - |
1512
+ | `input.artifactRef` | [`ArtifactRef`](#artifactref) | Opaque artifact reference; never a storage capability. |
1513
+ | `input.expectedDigest` | [`Sha256Digest`](#sha256digest) | Digest that the resolved bytes must match. |
1514
+ | `input.expectedObject?` | \{ `version`: `string`; `byteLength`: `number`; \} | Child reference pins the native object version as well as its content. |
1515
+ | `input.expectedObject.version` | `string` | - |
1516
+ | `input.expectedObject.byteLength` | `number` | - |
1517
+ | `input.verification?` | [`ArtifactVerificationIntent`](#artifactverificationintent) | Publication asks the reader to verify every object named by an asset manifest. Omitted for ordinary delivery, which verifies one requested object at the asset handler boundary. |
1518
+
1519
+ ###### Returns
1520
+
1521
+ `Promise`\<[`ArtifactReadResult`](#artifactreadresult)\>
1522
+
1523
+ ---
1524
+
1525
+ ### AppReleaseStoreFailure
1526
+
1527
+ ```ts
1528
+ type AppReleaseStoreFailure = object;
1529
+ ```
1530
+
1531
+ Closed infrastructure failure projected by an App Release store.
1532
+
1533
+ #### Properties
1534
+
1535
+ ##### kind
1536
+
1537
+ ```ts
1538
+ readonly kind: "unavailable";
1539
+ ```
1540
+
1541
+ ---
1542
+
1543
+ ### AppReleaseStoreSuccess
1544
+
1545
+ ```ts
1546
+ type AppReleaseStoreSuccess<Value> = object;
1547
+ ```
1548
+
1549
+ Closed successful outcome for one App Release store operation.
1550
+
1551
+ #### Type Parameters
1552
+
1553
+ | Type Parameter |
1554
+ | -------------- |
1555
+ | `Value` |
1556
+
1557
+ #### Properties
1558
+
1559
+ ##### kind
1560
+
1561
+ ```ts
1562
+ readonly kind: "success";
1563
+ ```
1564
+
1565
+ ##### value
1566
+
1567
+ ```ts
1568
+ readonly value: Value;
1569
+ ```
1570
+
1571
+ ---
1572
+
1573
+ ### AppReleaseStoreOperationFailure
1574
+
1575
+ ```ts
1576
+ type AppReleaseStoreOperationFailure = object;
1577
+ ```
1578
+
1579
+ Closed failed outcome for one App Release store operation.
1580
+
1581
+ #### Properties
1582
+
1583
+ ##### kind
1584
+
1585
+ ```ts
1586
+ readonly kind: "failure";
1587
+ ```
1588
+
1589
+ ##### failure
1590
+
1591
+ ```ts
1592
+ readonly failure: AppReleaseStoreFailure;
1593
+ ```
1594
+
1595
+ ---
1596
+
1597
+ ### AppReleaseStoreResult
1598
+
1599
+ ```ts
1600
+ type AppReleaseStoreResult<Value> =
1601
+ AppReleaseStoreSuccess<Value> | AppReleaseStoreOperationFailure;
1602
+ ```
1603
+
1604
+ Closed envelope returned by every App Release store operation.
1605
+
1606
+ #### Type Parameters
1607
+
1608
+ | Type Parameter |
1609
+ | -------------- |
1610
+ | `Value` |
1611
+
1612
+ ---
1613
+
1614
+ ### AppRead
1615
+
1616
+ ```ts
1617
+ type AppRead =
1618
+ | {
1619
+ kind: "found";
1620
+ app: App;
1621
+ }
1622
+ | {
1623
+ kind: "absent";
1624
+ };
1625
+ ```
1626
+
1627
+ Explicit result of looking up one Global App.
1628
+
1629
+ ---
1630
+
1631
+ ### AppCreate
1632
+
1633
+ ```ts
1634
+ type AppCreate =
1635
+ | {
1636
+ kind: "created";
1637
+ app: App;
1638
+ }
1639
+ | {
1640
+ kind: "existing";
1641
+ app: App;
1642
+ };
1643
+ ```
1644
+
1645
+ Explicit result of atomically creating or observing one Global App.
1646
+
1647
+ ---
1648
+
1649
+ ### ReleaseRead
1650
+
1651
+ ```ts
1652
+ type ReleaseRead =
1653
+ | {
1654
+ kind: "found";
1655
+ release: Release;
1656
+ }
1657
+ | {
1658
+ kind: "absent";
1659
+ };
1660
+ ```
1661
+
1662
+ Explicit result of looking up one immutable Release.
1663
+
1664
+ ---
1665
+
1666
+ ### ReleaseCreate
1667
+
1668
+ ```ts
1669
+ type ReleaseCreate =
1670
+ | {
1671
+ kind: "created";
1672
+ release: Release;
1673
+ }
1674
+ | {
1675
+ kind: "existing";
1676
+ release: Release;
1677
+ };
1678
+ ```
1679
+
1680
+ Explicit result of atomically creating or observing one immutable Release.
1681
+
1682
+ ---
1683
+
1684
+ ### PublicSurfaceRead
1685
+
1686
+ ```ts
1687
+ type PublicSurfaceRead =
1688
+ | {
1689
+ kind: "found";
1690
+ surface: PublicSurface;
1691
+ }
1692
+ | {
1693
+ kind: "absent";
1694
+ };
1695
+ ```
1696
+
1697
+ Explicit result of looking up one App-owned anonymous public Surface.
1698
+
1699
+ ---
1700
+
1701
+ ### PublicSurfaceCreate
1702
+
1703
+ ```ts
1704
+ type PublicSurfaceCreate =
1705
+ | {
1706
+ kind: "created";
1707
+ surface: PublicSurface;
1708
+ }
1709
+ | {
1710
+ kind: "existing";
1711
+ surface: PublicSurface;
1712
+ }
1713
+ | {
1714
+ kind: "conflict";
1715
+ };
1716
+ ```
1717
+
1718
+ Explicit result of atomically creating or observing one public Surface.
1719
+
1720
+ ---
1721
+
1722
+ ### ReleaseVerification
1723
+
1724
+ ```ts
1725
+ type ReleaseVerification =
1726
+ | {
1727
+ kind: "verified";
1728
+ digest: Sha256Digest;
1729
+ mediaType: "application/vnd.fungi.app+json";
1730
+ description: VerifiedAppDescription;
1731
+ }
1732
+ | {
1733
+ kind: "unverified";
1734
+ };
1735
+ ```
1736
+
1737
+ Verification fact retained after a valid immutable artifact snapshot.
1738
+
1739
+ ---
1740
+
1741
+ ### ReleaseRevocation
1742
+
1743
+ ```ts
1744
+ type ReleaseRevocation =
1745
+ | {
1746
+ kind: "active";
1747
+ }
1748
+ | {
1749
+ kind: "revoked";
1750
+ };
1751
+ ```
1752
+
1753
+ Revocation fact retained independently from immutable Release bytes.
1754
+
1755
+ ---
1756
+
1757
+ ### ReleaseLifecycle
1758
+
1759
+ ```ts
1760
+ type ReleaseLifecycle =
1761
+ | {
1762
+ kind: "found";
1763
+ release: Release;
1764
+ verification: ReleaseVerification;
1765
+ revocation: ReleaseRevocation;
1766
+ }
1767
+ | {
1768
+ kind: "absent";
1769
+ };
1770
+ ```
1771
+
1772
+ Durable Release facts observed by transition policy.
1773
+
1774
+ ---
1775
+
1776
+ ### PublicSurfaceLifecycle
1777
+
1778
+ ```ts
1779
+ type PublicSurfaceLifecycle =
1780
+ | {
1781
+ kind: "found";
1782
+ surface: PublicSurface;
1783
+ selection:
1784
+ | {
1785
+ kind: "none";
1786
+ }
1787
+ | {
1788
+ kind: "selected";
1789
+ releaseId: ReleaseId;
1790
+ };
1791
+ }
1792
+ | {
1793
+ kind: "absent";
1794
+ };
1795
+ ```
1796
+
1797
+ Durable public-Surface selection fact observed by transition policy.
1798
+
1799
+ ---
1800
+
1801
+ ### PublicWebsiteRepresentation
1802
+
1803
+ ```ts
1804
+ type PublicWebsiteRepresentation = Readonly<{
1805
+ releaseId: ReleaseId;
1806
+ digest: Sha256Digest;
1807
+ mediaType: "text/html; charset=utf-8";
1808
+ byteLength: number;
1809
+ bytes: ImmutableArtifactBytes;
1810
+ }>;
1811
+ ```
1812
+
1813
+ Safe immutable website bytes selected by the current Surface authority.
1814
+
1815
+ ---
1816
+
1817
+ ### PublicAssetBuildRepresentation
1818
+
1819
+ ```ts
1820
+ type PublicAssetBuildRepresentation = Omit<
1821
+ PublicWebsiteRepresentation,
1822
+ "mediaType"
1823
+ > &
1824
+ object;
1825
+ ```
1826
+
1827
+ Verified root manifest selected by the existing public Surface owner.
1828
+
1829
+ #### Type Declaration
1830
+
1831
+ | Name | Type |
1832
+ | ----------- | ----------------------------------------- |
1833
+ | `mediaType` | `"application/vnd.fungi.app-assets+json"` |
1834
+
1835
+ ---
1836
+
1837
+ ### TransitionLookup
1838
+
1839
+ ```ts
1840
+ type TransitionLookup =
1841
+ | {
1842
+ kind: "absent";
1843
+ }
1844
+ | {
1845
+ kind: "found";
1846
+ receipt: TransitionReceipt;
1847
+ }
1848
+ | {
1849
+ kind: "conflict";
1850
+ };
1851
+ ```
1852
+
1853
+ Result of looking up an operation-scoped idempotency key.
1854
+
1855
+ ---
1856
+
1857
+ ### TransitionPersistence
1858
+
1859
+ ```ts
1860
+ type TransitionPersistence =
1861
+ | {
1862
+ kind: "created";
1863
+ receipt: TransitionReceipt;
1864
+ }
1865
+ | {
1866
+ kind: "existing";
1867
+ receipt: TransitionReceipt;
1868
+ }
1869
+ | {
1870
+ kind: "conflict";
1871
+ }
1872
+ | {
1873
+ kind: "identity-collision";
1874
+ }
1875
+ | {
1876
+ kind: "lifecycle-conflict";
1877
+ };
1878
+ ```
1879
+
1880
+ Result of atomically recording one transition and its receipt.
1881
+
1882
+ ---
1883
+
1884
+ ### PromiseAppReleaseStore
1885
+
1886
+ ```ts
1887
+ type PromiseAppReleaseStore = object;
1888
+ ```
1889
+
1890
+ Effect-free projection of the App Release store boundary.
1891
+
1892
+ #### Properties
1893
+
1894
+ ##### readReleaseLifecycle?
1895
+
1896
+ ```ts
1897
+ readonly optional readReleaseLifecycle?: (releaseId) => Promise<AppReleaseStoreResult<ReleaseLifecycle>>;
1898
+ ```
1899
+
1900
+ Read immutable Release facts needed by owner-issued transitions.
1901
+
1902
+ ###### Parameters
1903
+
1904
+ | Parameter | Type |
1905
+ | ----------- | ------------------------- |
1906
+ | `releaseId` | [`ReleaseId`](#releaseid) |
1907
+
1908
+ ###### Returns
1909
+
1910
+ `Promise`\<[`AppReleaseStoreResult`](#appreleasestoreresult)\<[`ReleaseLifecycle`](#releaselifecycle)\>\>
1911
+
1912
+ ##### recordReleaseVerification?
1913
+
1914
+ ```ts
1915
+ readonly optional recordReleaseVerification?: (input) => Promise<AppReleaseStoreResult<{
1916
+ kind: "recorded";
1917
+ }>>;
1918
+ ```
1919
+
1920
+ Atomically retain that one Release artifact was successfully verified.
1921
+
1922
+ ###### Parameters
1923
+
1924
+ | Parameter | Type |
1925
+ | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
1926
+ | `input` | \{ `releaseId`: [`ReleaseId`](#releaseid); `digest`: [`Sha256Digest`](#sha256digest); `mediaType`: `"application/vnd.fungi.app+json"`; `description`: [`VerifiedAppDescription`](#verifiedappdescription); \} |
1927
+ | `input.releaseId` | [`ReleaseId`](#releaseid) |
1928
+ | `input.digest` | [`Sha256Digest`](#sha256digest) |
1929
+ | `input.mediaType` | `"application/vnd.fungi.app+json"` |
1930
+ | `input.description` | [`VerifiedAppDescription`](#verifiedappdescription) |
1931
+
1932
+ ###### Returns
1933
+
1934
+ `Promise`\<[`AppReleaseStoreResult`](#appreleasestoreresult)\<\{ `kind`:
1935
+ `"recorded"`; \}\>\>
1936
+
1937
+ ##### readTransition?
1938
+
1939
+ ```ts
1940
+ readonly optional readTransition?: (request) => Promise<AppReleaseStoreResult<TransitionLookup>>;
1941
+ ```
1942
+
1943
+ Read one operation-scoped transition receipt before policy checks.
1944
+
1945
+ ###### Parameters
1946
+
1947
+ | Parameter | Type |
1948
+ | --------- | ----------------------------------------- |
1949
+ | `request` | [`ReleaseTransition`](#releasetransition) |
1950
+
1951
+ ###### Returns
1952
+
1953
+ `Promise`\<[`AppReleaseStoreResult`](#appreleasestoreresult)\<[`TransitionLookup`](#transitionlookup)\>\>
1954
+
1955
+ ##### persistTransition?
1956
+
1957
+ ```ts
1958
+ readonly optional persistTransition?: (request, receipt) => Promise<AppReleaseStoreResult<TransitionPersistence>>;
1959
+ ```
1960
+
1961
+ Atomically persist a validated transition and its terminal receipt.
1962
+
1963
+ ###### Parameters
1964
+
1965
+ | Parameter | Type |
1966
+ | --------- | ----------------------------------------- |
1967
+ | `request` | [`ReleaseTransition`](#releasetransition) |
1968
+ | `receipt` | [`TransitionReceipt`](#transitionreceipt) |
1969
+
1970
+ ###### Returns
1971
+
1972
+ `Promise`\<[`AppReleaseStoreResult`](#appreleasestoreresult)\<[`TransitionPersistence`](#transitionpersistence)\>\>
1973
+
1974
+ #### Methods
1975
+
1976
+ ##### readApp()
1977
+
1978
+ ```ts
1979
+ readApp(appId): Promise<AppReleaseStoreResult<AppRead>>;
1980
+ ```
1981
+
1982
+ Look up one App by its opaque identifier.
1983
+
1984
+ ###### Parameters
1985
+
1986
+ | Parameter | Type |
1987
+ | --------- | ----------------- |
1988
+ | `appId` | [`AppId`](#appid) |
1989
+
1990
+ ###### Returns
1991
+
1992
+ `Promise`\<[`AppReleaseStoreResult`](#appreleasestoreresult)\<[`AppRead`](#appread)\>\>
1993
+
1994
+ ##### createAppIfAbsent()
1995
+
1996
+ ```ts
1997
+ createAppIfAbsent(app): Promise<AppReleaseStoreResult<AppCreate>>;
1998
+ ```
1999
+
2000
+ Create an App if absent, or return the immutable existing record.
2001
+
2002
+ ###### Parameters
2003
+
2004
+ | Parameter | Type |
2005
+ | --------- | ------------- |
2006
+ | `app` | [`App`](#app) |
2007
+
2008
+ ###### Returns
2009
+
2010
+ `Promise`\<[`AppReleaseStoreResult`](#appreleasestoreresult)\<[`AppCreate`](#appcreate)\>\>
2011
+
2012
+ ##### readRelease()
2013
+
2014
+ ```ts
2015
+ readRelease(releaseId): Promise<AppReleaseStoreResult<ReleaseRead>>;
2016
+ ```
2017
+
2018
+ Look up one immutable Release by its opaque identifier.
2019
+
2020
+ ###### Parameters
2021
+
2022
+ | Parameter | Type |
2023
+ | ----------- | ------------------------- |
2024
+ | `releaseId` | [`ReleaseId`](#releaseid) |
2025
+
2026
+ ###### Returns
2027
+
2028
+ `Promise`\<[`AppReleaseStoreResult`](#appreleasestoreresult)\<[`ReleaseRead`](#releaseread)\>\>
2029
+
2030
+ ##### createReleaseIfAbsent()
2031
+
2032
+ ```ts
2033
+ createReleaseIfAbsent(release): Promise<AppReleaseStoreResult<ReleaseCreate>>;
2034
+ ```
2035
+
2036
+ Create a Release if absent, or return the immutable existing record.
2037
+
2038
+ ###### Parameters
2039
+
2040
+ | Parameter | Type |
2041
+ | --------- | --------------------- |
2042
+ | `release` | [`Release`](#release) |
2043
+
2044
+ ###### Returns
2045
+
2046
+ `Promise`\<[`AppReleaseStoreResult`](#appreleasestoreresult)\<[`ReleaseCreate`](#releasecreate)\>\>
2047
+
2048
+ ##### readPublicSurface()
2049
+
2050
+ ```ts
2051
+ readPublicSurface(publicSurfaceId): Promise<AppReleaseStoreResult<PublicSurfaceRead>>;
2052
+ ```
2053
+
2054
+ Look up one public Surface by its opaque identifier.
2055
+
2056
+ ###### Parameters
2057
+
2058
+ | Parameter | Type |
2059
+ | ----------------- | ------------------------------------- |
2060
+ | `publicSurfaceId` | [`PublicSurfaceId`](#publicsurfaceid) |
2061
+
2062
+ ###### Returns
2063
+
2064
+ `Promise`\<[`AppReleaseStoreResult`](#appreleasestoreresult)\<[`PublicSurfaceRead`](#publicsurfaceread)\>\>
2065
+
2066
+ ##### createPublicSurfaceIfAbsent()
2067
+
2068
+ ```ts
2069
+ createPublicSurfaceIfAbsent(surface): Promise<AppReleaseStoreResult<PublicSurfaceCreate>>;
2070
+ ```
2071
+
2072
+ Create a public Surface if absent, or return the immutable existing record.
2073
+
2074
+ ###### Parameters
2075
+
2076
+ | Parameter | Type |
2077
+ | --------- | ----------------------------------------------------- |
2078
+ | `surface` | [`PublicSurfaceDefinition`](#publicsurfacedefinition) |
2079
+
2080
+ ###### Returns
2081
+
2082
+ `Promise`\<[`AppReleaseStoreResult`](#appreleasestoreresult)\<[`PublicSurfaceCreate`](#publicsurfacecreate)\>\>
2083
+
2084
+ ---
2085
+
2086
+ ### ReleaseTransition
2087
+
2088
+ ```ts
2089
+ type ReleaseTransition =
2090
+ | {
2091
+ kind: "promotion";
2092
+ publicSurfaceId: PublicSurfaceId;
2093
+ releaseId: ReleaseId;
2094
+ idempotencyKey: IdempotencyKey;
2095
+ }
2096
+ | {
2097
+ kind: "rollback";
2098
+ publicSurfaceId: PublicSurfaceId;
2099
+ releaseId: ReleaseId;
2100
+ idempotencyKey: IdempotencyKey;
2101
+ }
2102
+ | {
2103
+ kind: "revocation";
2104
+ releaseId: ReleaseId;
2105
+ idempotencyKey: IdempotencyKey;
2106
+ };
2107
+ ```
2108
+
2109
+ Owner-issued transition request.
2110
+
2111
+ ---
2112
+
2113
+ ### TransitionReceipt
2114
+
2115
+ ```ts
2116
+ type TransitionReceipt = object;
2117
+ ```
2118
+
2119
+ Terminal receipt for an owner-issued transition.
2120
+
2121
+ #### Properties
2122
+
2123
+ ##### transition
2124
+
2125
+ ```ts
2126
+ readonly transition: ReleaseTransition;
2127
+ ```
2128
+
2129
+ ##### transitionId
2130
+
2131
+ ```ts
2132
+ readonly transitionId: AppTransitionId;
2133
+ ```
2134
+
2135
+ ---
2136
+
2137
+ ### AppReleaseCatalogOptions
2138
+
2139
+ ```ts
2140
+ type AppReleaseCatalogOptions = object;
2141
+ ```
2142
+
2143
+ Inputs for the catalog factory.
2144
+
2145
+ #### Properties
2146
+
2147
+ ##### artifactReader
2148
+
2149
+ ```ts
2150
+ readonly artifactReader: ArtifactReader;
2151
+ ```
2152
+
2153
+ ##### store
2154
+
2155
+ ```ts
2156
+ readonly store: PromiseAppReleaseStore;
2157
+ ```
2158
+
2159
+ ##### artifactPolicy?
2160
+
2161
+ ```ts
2162
+ readonly optional artifactPolicy?: object;
2163
+ ```
2164
+
2165
+ ###### maxBytes
2166
+
2167
+ ```ts
2168
+ readonly maxBytes: number;
2169
+ ```
2170
+
2171
+ ###### maxManifestBytes?
2172
+
2173
+ ```ts
2174
+ readonly optional maxManifestBytes?: number;
2175
+ ```
2176
+
2177
+ ---
2178
+
2179
+ ### AppReleaseCatalog
2180
+
2181
+ ```ts
2182
+ type AppReleaseCatalog = object;
2183
+ ```
2184
+
2185
+ Public App Release catalog and public-website resolution seam.
2186
+
2187
+ #### Methods
2188
+
2189
+ ##### createApp()
2190
+
2191
+ ```ts
2192
+ createApp(app): Promise<App>;
2193
+ ```
2194
+
2195
+ Create an App once and return the canonical stored record.
2196
+
2197
+ ###### Parameters
2198
+
2199
+ | Parameter | Type |
2200
+ | --------- | ------------- |
2201
+ | `app` | [`App`](#app) |
2202
+
2203
+ ###### Returns
2204
+
2205
+ `Promise`\<[`App`](#app)\>
2206
+
2207
+ ##### createRelease()
2208
+
2209
+ ```ts
2210
+ createRelease(release): Promise<Release>;
2211
+ ```
2212
+
2213
+ Create a Release once and return the canonical stored record.
2214
+
2215
+ ###### Parameters
2216
+
2217
+ | Parameter | Type |
2218
+ | --------- | --------------------- |
2219
+ | `release` | [`Release`](#release) |
2220
+
2221
+ ###### Returns
2222
+
2223
+ `Promise`\<[`Release`](#release)\>
2224
+
2225
+ ##### verifyReleaseArtifact()
2226
+
2227
+ ```ts
2228
+ verifyReleaseArtifact(releaseId): Promise<VerifiedArtifactRead>;
2229
+ ```
2230
+
2231
+ Resolve and verify the immutable artifact bound to a Release.
2232
+
2233
+ ###### Parameters
2234
+
2235
+ | Parameter | Type |
2236
+ | ----------- | ------------------------- |
2237
+ | `releaseId` | [`ReleaseId`](#releaseid) |
2238
+
2239
+ ###### Returns
2240
+
2241
+ `Promise`\<[`VerifiedArtifactRead`](#verifiedartifactread)\>
2242
+
2243
+ ##### resolveEligibleReleaseArtifact()
2244
+
2245
+ ```ts
2246
+ resolveEligibleReleaseArtifact(releaseId): Promise<VerifiedArtifactRead & object>;
2247
+ ```
2248
+
2249
+ Read one verified, active Release snapshot and recheck its lifecycle. The caller
2250
+ owns selection authorization and must resolve before each use.
2251
+
2252
+ ###### Parameters
2253
+
2254
+ | Parameter | Type |
2255
+ | ----------- | ------------------------- |
2256
+ | `releaseId` | [`ReleaseId`](#releaseid) |
2257
+
2258
+ ###### Returns
2259
+
2260
+ `Promise`\<[`VerifiedArtifactRead`](#verifiedartifactread) & `object`\>
2261
+
2262
+ ##### resolveEligibleApp()
2263
+
2264
+ ```ts
2265
+ resolveEligibleApp(releaseId): Promise<ResolvedApp>;
2266
+ ```
2267
+
2268
+ Resolve the UI and backend bound by one eligible immutable Release.
2269
+
2270
+ ###### Parameters
2271
+
2272
+ | Parameter | Type |
2273
+ | ----------- | ------------------------- |
2274
+ | `releaseId` | [`ReleaseId`](#releaseid) |
2275
+
2276
+ ###### Returns
2277
+
2278
+ `Promise`\<[`ResolvedApp`](#resolvedapp)\>
2279
+
2280
+ ##### resolveEligibleAppMetadata()
2281
+
2282
+ ```ts
2283
+ resolveEligibleAppMetadata(releaseId): Promise<Readonly<{
2284
+ release: Release;
2285
+ digest: Sha256Digest;
2286
+ description: VerifiedAppDescription;
2287
+ }>>;
2288
+ ```
2289
+
2290
+ Resolve verified App metadata without reading any artifact body.
2291
+
2292
+ ###### Parameters
2293
+
2294
+ | Parameter | Type |
2295
+ | ----------- | ------------------------- |
2296
+ | `releaseId` | [`ReleaseId`](#releaseid) |
2297
+
2298
+ ###### Returns
2299
+
2300
+ `Promise`\<`Readonly`\<\{ `release`: [`Release`](#release); `digest`:
2301
+ [`Sha256Digest`](#sha256digest); `description`:
2302
+ [`VerifiedAppDescription`](#verifiedappdescription); \}\>\>
2303
+
2304
+ ##### resolvePublicSurfaceAuthority()
2305
+
2306
+ ```ts
2307
+ resolvePublicSurfaceAuthority(stableRoute): Promise<Readonly<{
2308
+ currentReleaseId: ReleaseId;
2309
+ sequence: number;
2310
+ app: App;
2311
+ release: Release;
2312
+ surface: PublicSurface;
2313
+ digest: Sha256Digest;
2314
+ revocation: ReleaseRevocation;
2315
+ description: VerifiedAppDescription;
2316
+ }>>;
2317
+ ```
2318
+
2319
+ Resolve one selected Surface's current metadata authority without bodies.
2320
+
2321
+ ###### Parameters
2322
+
2323
+ | Parameter | Type |
2324
+ | ------------- | ----------------------------- |
2325
+ | `stableRoute` | [`StableRoute`](#stableroute) |
2326
+
2327
+ ###### Returns
2328
+
2329
+ `Promise`\<`Readonly`\<\{ `currentReleaseId`: [`ReleaseId`](#releaseid);
2330
+ `sequence`: `number`; `app`: [`App`](#app); `release`: [`Release`](#release);
2331
+ `surface`: [`PublicSurface`](#publicsurface); `digest`:
2332
+ [`Sha256Digest`](#sha256digest); `revocation`:
2333
+ [`ReleaseRevocation`](#releaserevocation); `description`:
2334
+ [`VerifiedAppDescription`](#verifiedappdescription); \}\>\>
2335
+
2336
+ ##### resolvePublicSurfaceAuthorityVersion()
2337
+
2338
+ ```ts
2339
+ resolvePublicSurfaceAuthorityVersion(stableRoute, releaseId): Promise<Readonly<{
2340
+ currentReleaseId: ReleaseId;
2341
+ sequence: number;
2342
+ app: App;
2343
+ release: Release;
2344
+ surface: PublicSurface;
2345
+ digest: Sha256Digest;
2346
+ revocation: ReleaseRevocation;
2347
+ description: VerifiedAppDescription;
2348
+ }>>;
2349
+ ```
2350
+
2351
+ Resolve one previously selected Release's current metadata authority.
2352
+
2353
+ ###### Parameters
2354
+
2355
+ | Parameter | Type |
2356
+ | ------------- | ----------------------------- |
2357
+ | `stableRoute` | [`StableRoute`](#stableroute) |
2358
+ | `releaseId` | [`ReleaseId`](#releaseid) |
2359
+
2360
+ ###### Returns
2361
+
2362
+ `Promise`\<`Readonly`\<\{ `currentReleaseId`: [`ReleaseId`](#releaseid);
2363
+ `sequence`: `number`; `app`: [`App`](#app); `release`: [`Release`](#release);
2364
+ `surface`: [`PublicSurface`](#publicsurface); `digest`:
2365
+ [`Sha256Digest`](#sha256digest); `revocation`:
2366
+ [`ReleaseRevocation`](#releaserevocation); `description`:
2367
+ [`VerifiedAppDescription`](#verifiedappdescription); \}\>\>
2368
+
2369
+ ##### createPublicSurface()
2370
+
2371
+ ```ts
2372
+ createPublicSurface(surface): Promise<PublicSurface>;
2373
+ ```
2374
+
2375
+ Create a public Surface once and return the canonical stored record.
2376
+
2377
+ ###### Parameters
2378
+
2379
+ | Parameter | Type |
2380
+ | --------- | ----------------------------------------------------- |
2381
+ | `surface` | [`PublicSurfaceDefinition`](#publicsurfacedefinition) |
2382
+
2383
+ ###### Returns
2384
+
2385
+ `Promise`\<[`PublicSurface`](#publicsurface)\>
2386
+
2387
+ ##### transition()
2388
+
2389
+ ```ts
2390
+ transition(request): Promise<TransitionReceipt>;
2391
+ ```
2392
+
2393
+ Apply one owner-issued promotion, rollback, or revocation request.
2394
+
2395
+ ###### Parameters
2396
+
2397
+ | Parameter | Type |
2398
+ | --------- | ----------------------------------------- |
2399
+ | `request` | [`ReleaseTransition`](#releasetransition) |
2400
+
2401
+ ###### Returns
2402
+
2403
+ `Promise`\<[`TransitionReceipt`](#transitionreceipt)\>
2404
+
2405
+ ##### resolvePublicAssetBuild()
2406
+
2407
+ ```ts
2408
+ resolvePublicAssetBuild(stableRoute): Promise<PublicAssetBuildRepresentation>;
2409
+ ```
2410
+
2411
+ Resolve an asset-build root through the same current Surface authority.
2412
+
2413
+ ###### Parameters
2414
+
2415
+ | Parameter | Type |
2416
+ | ------------- | ----------------------------- |
2417
+ | `stableRoute` | [`StableRoute`](#stableroute) |
2418
+
2419
+ ###### Returns
2420
+
2421
+ `Promise`\<[`PublicAssetBuildRepresentation`](#publicassetbuildrepresentation)\>
2422
+
2423
+ ##### resolvePublicAssetBuildVersion()
2424
+
2425
+ ```ts
2426
+ resolvePublicAssetBuildVersion(stableRoute, releaseId): Promise<PublicAssetBuildRepresentation>;
2427
+ ```
2428
+
2429
+ Resolve a pinned asset-build root through Surface authority.
2430
+
2431
+ ###### Parameters
2432
+
2433
+ | Parameter | Type |
2434
+ | ------------- | ----------------------------- |
2435
+ | `stableRoute` | [`StableRoute`](#stableroute) |
2436
+ | `releaseId` | [`ReleaseId`](#releaseid) |
2437
+
2438
+ ###### Returns
2439
+
2440
+ `Promise`\<[`PublicAssetBuildRepresentation`](#publicassetbuildrepresentation)\>
2441
+
2442
+ ##### resolvePublicWebsite()
2443
+
2444
+ ```ts
2445
+ resolvePublicWebsite(stableRoute): Promise<Readonly<{
2446
+ releaseId: ReleaseId;
2447
+ digest: Sha256Digest;
2448
+ mediaType: "text/html; charset=utf-8";
2449
+ byteLength: number;
2450
+ bytes: ImmutableArtifactBytes;
2451
+ }>>;
2452
+ ```
2453
+
2454
+ Resolve the current eligible immutable website representation.
2455
+
2456
+ ###### Parameters
2457
+
2458
+ | Parameter | Type |
2459
+ | ------------- | ----------------------------- |
2460
+ | `stableRoute` | [`StableRoute`](#stableroute) |
2461
+
2462
+ ###### Returns
2463
+
2464
+ `Promise`\<`Readonly`\<\{ `releaseId`: [`ReleaseId`](#releaseid); `digest`:
2465
+ [`Sha256Digest`](#sha256digest); `mediaType`: `"text/html; charset=utf-8"`;
2466
+ `byteLength`: `number`; `bytes`:
2467
+ [`ImmutableArtifactBytes`](#immutableartifactbytes); \}\>\>
2468
+
2469
+ ##### resolvePublicWebsiteVersion()
2470
+
2471
+ ```ts
2472
+ resolvePublicWebsiteVersion(stableRoute, releaseId): Promise<Readonly<{
2473
+ releaseId: ReleaseId;
2474
+ digest: Sha256Digest;
2475
+ mediaType: "text/html; charset=utf-8";
2476
+ byteLength: number;
2477
+ bytes: ImmutableArtifactBytes;
2478
+ }>>;
2479
+ ```
2480
+
2481
+ Resolve a pinned eligible immutable website representation.
2482
+
2483
+ ###### Parameters
2484
+
2485
+ | Parameter | Type |
2486
+ | ------------- | ----------------------------- |
2487
+ | `stableRoute` | [`StableRoute`](#stableroute) |
2488
+ | `releaseId` | [`ReleaseId`](#releaseid) |
2489
+
2490
+ ###### Returns
2491
+
2492
+ `Promise`\<`Readonly`\<\{ `releaseId`: [`ReleaseId`](#releaseid); `digest`:
2493
+ [`Sha256Digest`](#sha256digest); `mediaType`: `"text/html; charset=utf-8"`;
2494
+ `byteLength`: `number`; `bytes`:
2495
+ [`ImmutableArtifactBytes`](#immutableartifactbytes); \}\>\>
2496
+
2497
+ ---
2498
+
2499
+ ### AppReleaseParserName
2500
+
2501
+ ```ts
2502
+ type AppReleaseParserName =
2503
+ | "AppId"
2504
+ | "ReleaseId"
2505
+ | "PublicSurfaceId"
2506
+ | "ArtifactRef"
2507
+ | "IdempotencyKey"
2508
+ | "SourceRevision"
2509
+ | "Sha256Digest"
2510
+ | "StableRoute"
2511
+ | "AppTransitionId";
2512
+ ```
2513
+
2514
+ Names the parser boundary that rejected an untrusted value.
2515
+
2516
+ ---
2517
+
2518
+ ### AppReleaseCommandName
2519
+
2520
+ ```ts
2521
+ type AppReleaseCommandName =
2522
+ | "createApp"
2523
+ | "createRelease"
2524
+ | "verifyReleaseArtifact"
2525
+ | "resolveEligibleReleaseArtifact"
2526
+ | "resolveEligibleAppMetadata"
2527
+ | "resolvePublicSurfaceAuthority"
2528
+ | "resolvePublicSurfaceAuthorityVersion"
2529
+ | "createPublicSurface"
2530
+ | "transition";
2531
+ ```
2532
+
2533
+ Names a public catalog command whose hostile input was rejected.
2534
+
2535
+ ## Variables
2536
+
2537
+ ### appRoles
2538
+
2539
+ ```ts
2540
+ const appRoles: readonly [
2541
+ "dashboard",
2542
+ "inbox",
2543
+ "files",
2544
+ "media",
2545
+ "sessions",
2546
+ "terminal",
2547
+ ];
2548
+ ```
2549
+
2550
+ Roles a user may assign to an App: the shell routes "open my inbox", file
2551
+ navigation, media and Session conversations to the App the Team chose.
2552
+ `dashboard` marks an App that can open as a Team's dashboard; the Team's shell
2553
+ selection, not a role choice, picks among them. Extend this list here; the Hub
2554
+ role projection then requires the new role. A role's intent and payload wire
2555
+ format lives in `@fungi.computer/agar/roles`.
2556
+
2557
+ ---
2558
+
2559
+ ### appCapabilityIds
2560
+
2561
+ ```ts
2562
+ const appCapabilityIds: readonly [
2563
+ "agent.list",
2564
+ "agent.manage",
2565
+ "agent.rename",
2566
+ "agent.toolPolicy",
2567
+ "agent.read",
2568
+ "agent.send",
2569
+ "computer.list",
2570
+ "computer.readFile",
2571
+ "computer.writeFile",
2572
+ "computer.execute",
2573
+ "llm.generation",
2574
+ "media.generation",
2575
+ "games:servers",
2576
+ "git.repository",
2577
+ "apps.open",
2578
+ "apps.call",
2579
+ "app.storage",
2580
+ "app.events.emit",
2581
+ "team.workbenchHost",
2582
+ "marketplace.browse",
2583
+ "marketplace.purchase",
2584
+ "workflow.run",
2585
+ "workflow.publish",
2586
+ "workflow.arm",
2587
+ "world",
2588
+ "channels.read",
2589
+ "channels.personal.manage",
2590
+ ];
2591
+ ```
2592
+
2593
+ Host capabilities an App may request. A request is never authority; the Team's
2594
+ installation grants decide. Extend this list here.
2595
+
2596
+ ---
2597
+
2598
+ ### appHandlers
2599
+
2600
+ ```ts
2601
+ const appHandlers: readonly ["file.open"];
2602
+ ```
2603
+
2604
+ Navigation requests an App can handle for the shell.
2605
+
2606
+ ---
2607
+
2608
+ ### appStorageScopes
2609
+
2610
+ ```ts
2611
+ const appStorageScopes: readonly ["team", "member"];
2612
+ ```
2613
+
2614
+ A declared layer of the App's own JSON data; never a cross-Team scope.
2615
+
2616
+ ---
2617
+
2618
+ ### emptyAppDeclaration
2619
+
2620
+ ```ts
2621
+ const emptyAppDeclaration: AppDeclaration;
2622
+ ```
2623
+
2624
+ The declaration of an App that asks for nothing.
2625
+
2626
+ ---
2627
+
2628
+ ### parseAppId
2629
+
2630
+ ```ts
2631
+ const parseAppId: (input) => AppId;
2632
+ ```
2633
+
2634
+ Parse an opaque Global App identifier.
2635
+
2636
+ #### Parameters
2637
+
2638
+ | Parameter | Type |
2639
+ | --------- | --------- |
2640
+ | `input` | `unknown` |
2641
+
2642
+ #### Returns
2643
+
2644
+ [`AppId`](#appid)
2645
+
2646
+ ---
2647
+
2648
+ ### parseAppTransitionId
2649
+
2650
+ ```ts
2651
+ const parseAppTransitionId: (input) => AppTransitionId;
2652
+ ```
2653
+
2654
+ Parse a Cairn-issued App transition identity.
2655
+
2656
+ #### Parameters
2657
+
2658
+ | Parameter | Type |
2659
+ | --------- | --------- |
2660
+ | `input` | `unknown` |
2661
+
2662
+ #### Returns
2663
+
2664
+ [`AppTransitionId`](#apptransitionid)
2665
+
2666
+ ---
2667
+
2668
+ ### parseReleaseId
2669
+
2670
+ ```ts
2671
+ const parseReleaseId: (input) => ReleaseId;
2672
+ ```
2673
+
2674
+ Parse an opaque immutable Release identifier.
2675
+
2676
+ #### Parameters
2677
+
2678
+ | Parameter | Type |
2679
+ | --------- | --------- |
2680
+ | `input` | `unknown` |
2681
+
2682
+ #### Returns
2683
+
2684
+ [`ReleaseId`](#releaseid)
2685
+
2686
+ ---
2687
+
2688
+ ### parsePublicSurfaceId
2689
+
2690
+ ```ts
2691
+ const parsePublicSurfaceId: (input) => PublicSurfaceId;
2692
+ ```
2693
+
2694
+ Parse an opaque anonymous public-Surface identifier.
2695
+
2696
+ #### Parameters
2697
+
2698
+ | Parameter | Type |
2699
+ | --------- | --------- |
2700
+ | `input` | `unknown` |
2701
+
2702
+ #### Returns
2703
+
2704
+ [`PublicSurfaceId`](#publicsurfaceid)
2705
+
2706
+ ---
2707
+
2708
+ ### parseArtifactRef
2709
+
2710
+ ```ts
2711
+ const parseArtifactRef: (input) => ArtifactRef;
2712
+ ```
2713
+
2714
+ Parse an opaque bounded artifact reference.
2715
+
2716
+ #### Parameters
2717
+
2718
+ | Parameter | Type |
2719
+ | --------- | --------- |
2720
+ | `input` | `unknown` |
2721
+
2722
+ #### Returns
2723
+
2724
+ [`ArtifactRef`](#artifactref)
2725
+
2726
+ ---
2727
+
2728
+ ### parseIdempotencyKey
2729
+
2730
+ ```ts
2731
+ const parseIdempotencyKey: (input) => IdempotencyKey;
2732
+ ```
2733
+
2734
+ Parse a caller-provided idempotency key.
2735
+
2736
+ #### Parameters
2737
+
2738
+ | Parameter | Type |
2739
+ | --------- | --------- |
2740
+ | `input` | `unknown` |
2741
+
2742
+ #### Returns
2743
+
2744
+ [`IdempotencyKey`](#idempotencykey)
2745
+
2746
+ ---
2747
+
2748
+ ### parseSourceRevision
2749
+
2750
+ ```ts
2751
+ const parseSourceRevision: (input) => SourceRevision;
2752
+ ```
2753
+
2754
+ Parse a pinned lowercase Git source revision.
2755
+
2756
+ #### Parameters
2757
+
2758
+ | Parameter | Type |
2759
+ | --------- | --------- |
2760
+ | `input` | `unknown` |
2761
+
2762
+ #### Returns
2763
+
2764
+ [`SourceRevision`](#sourcerevision)
2765
+
2766
+ ---
2767
+
2768
+ ### parseSha256Digest
2769
+
2770
+ ```ts
2771
+ const parseSha256Digest: (input) => Sha256Digest;
2772
+ ```
2773
+
2774
+ Parse a lowercase SHA-256 digest.
2775
+
2776
+ #### Parameters
2777
+
2778
+ | Parameter | Type |
2779
+ | --------- | --------- |
2780
+ | `input` | `unknown` |
2781
+
2782
+ #### Returns
2783
+
2784
+ [`Sha256Digest`](#sha256digest)
2785
+
2786
+ ---
2787
+
2788
+ ### parseStableRoute
2789
+
2790
+ ```ts
2791
+ const parseStableRoute: (input) => StableRoute;
2792
+ ```
2793
+
2794
+ Parse a canonical local origin-relative stable route.
2795
+
2796
+ #### Parameters
2797
+
2798
+ | Parameter | Type |
2799
+ | --------- | --------- |
2800
+ | `input` | `unknown` |
2801
+
2802
+ #### Returns
2803
+
2804
+ [`StableRoute`](#stableroute)
2805
+
2806
+ ## Functions
2807
+
2808
+ ### isEmptyAppDeclaration()
2809
+
2810
+ ```ts
2811
+ function isEmptyAppDeclaration(declaration): boolean;
2812
+ ```
2813
+
2814
+ An empty declaration is omitted from the manifest to keep digests stable.
2815
+
2816
+ #### Parameters
2817
+
2818
+ | Parameter | Type |
2819
+ | ------------- | ----------------------------------- |
2820
+ | `declaration` | [`AppDeclaration`](#appdeclaration) |
2821
+
2822
+ #### Returns
2823
+
2824
+ `boolean`
2825
+
2826
+ ---
2827
+
2828
+ ### issuePublicSurfaceId()
2829
+
2830
+ ```ts
2831
+ function issuePublicSurfaceId(): PublicSurfaceId;
2832
+ ```
2833
+
2834
+ Publisher issues customer Surface identities through Cairn, never from slugs.
2835
+
2836
+ #### Returns
2837
+
2838
+ [`PublicSurfaceId`](#publicsurfaceid)
2839
+
2840
+ ---
2841
+
2842
+ ### createAppReleaseCatalog()
2843
+
2844
+ ```ts
2845
+ function createAppReleaseCatalog(options): AppReleaseCatalog;
2846
+ ```
2847
+
2848
+ Create the App Release catalog.
2849
+
2850
+ The default Promise facade adapts each foreign port once before calling the same
2851
+ Effect-native core.
2852
+
2853
+ #### Parameters
2854
+
2855
+ | Parameter | Type |
2856
+ | --------- | ------------------------------------------------------- |
2857
+ | `options` | [`AppReleaseCatalogOptions`](#appreleasecatalogoptions) |
2858
+
2859
+ #### Returns
2860
+
2861
+ [`AppReleaseCatalog`](#appreleasecatalog)
2862
+
2863
+ ## References
2864
+
2865
+ ### AppBackendBinding
2866
+
2867
+ Re-exports
2868
+ [AppBackendBinding](app-backend-binding-vocabulary.md#appbackendbinding)