@fungi.computer/oyster 0.0.0-stage → 0.1.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 (339) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1134 -2
  3. package/dist/agents.d.ts +114 -0
  4. package/dist/agents.js +322 -0
  5. package/dist/app-builds.d.ts +210 -0
  6. package/dist/app-builds.js +499 -0
  7. package/dist/app-sandbox.d.ts +2 -0
  8. package/dist/app-sandbox.js +2 -0
  9. package/dist/app-sources.d.ts +31 -0
  10. package/dist/app-sources.js +370 -0
  11. package/dist/app-storage.d.ts +141 -0
  12. package/dist/app-storage.js +281 -0
  13. package/dist/apps/gate.d.ts +105 -0
  14. package/dist/apps/gate.js +273 -0
  15. package/dist/apps/index.d.ts +5 -0
  16. package/dist/apps/index.js +5 -0
  17. package/dist/apps/installation.d.ts +248 -0
  18. package/dist/apps/installation.js +307 -0
  19. package/dist/apps/operations.d.ts +8 -0
  20. package/dist/apps/operations.js +98 -0
  21. package/dist/apps/tools.d.ts +33 -0
  22. package/dist/apps/tools.js +17 -0
  23. package/dist/auth.d.ts +11 -0
  24. package/dist/auth.js +93 -0
  25. package/dist/backend-request.d.ts +3 -0
  26. package/dist/backend-request.js +53 -0
  27. package/dist/build/artifact-writer.d.ts +40 -0
  28. package/dist/build/artifact-writer.js +181 -0
  29. package/dist/build/build-jobs.d.ts +128 -0
  30. package/dist/build/build-jobs.js +203 -0
  31. package/dist/build/build-policy.d.ts +10 -0
  32. package/dist/build/build-policy.js +10 -0
  33. package/dist/build/build-step.d.ts +37 -0
  34. package/dist/build/build-step.js +28 -0
  35. package/dist/build/bundled-html.d.ts +7 -0
  36. package/dist/build/bundled-html.js +64 -0
  37. package/dist/build/candidate-builder.d.ts +68 -0
  38. package/dist/build/candidate-builder.js +91 -0
  39. package/dist/build/candidate-cli.d.ts +1 -0
  40. package/dist/build/candidate-cli.js +119 -0
  41. package/dist/build/candidate-cli.mjs +28170 -0
  42. package/dist/build/content-objects.d.ts +37 -0
  43. package/dist/build/content-objects.js +53 -0
  44. package/dist/build/definition-emission.d.ts +34 -0
  45. package/dist/build/definition-emission.js +201 -0
  46. package/dist/build/effect.d.ts +249 -0
  47. package/dist/build/effect.js +436 -0
  48. package/dist/build/git-environment.d.ts +9 -0
  49. package/dist/build/git-environment.js +60 -0
  50. package/dist/build/html-recipe.d.ts +20 -0
  51. package/dist/build/html-recipe.js +51 -0
  52. package/dist/build/local-build.d.ts +67 -0
  53. package/dist/build/local-build.js +1128 -0
  54. package/dist/build/snapshot-package-store.d.ts +12 -0
  55. package/dist/build/snapshot-package-store.js +36 -0
  56. package/dist/build/snapshot-program-scripts.d.ts +6 -0
  57. package/dist/build/snapshot-program-scripts.js +2 -0
  58. package/dist/build/snapshot-programs/snapshot-path.d.ts +2 -0
  59. package/dist/build/snapshot-programs/snapshot-path.js +6 -0
  60. package/dist/build/submission-contract.d.ts +828 -0
  61. package/dist/build/submission-contract.js +180 -0
  62. package/dist/build/workspace-build.d.ts +55 -0
  63. package/dist/build/workspace-build.js +200 -0
  64. package/dist/build-contract.d.ts +7 -0
  65. package/dist/build-contract.js +7 -0
  66. package/dist/build-egress.d.ts +62 -0
  67. package/dist/build-egress.js +148 -0
  68. package/dist/build-jobs.d.ts +2 -0
  69. package/dist/build-jobs.js +2 -0
  70. package/dist/build.d.ts +12 -0
  71. package/dist/build.js +14 -0
  72. package/dist/capability-descriptor.d.ts +46 -0
  73. package/dist/capability-descriptor.js +51 -0
  74. package/dist/catalog-frame.d.ts +39 -0
  75. package/dist/catalog-frame.js +72 -0
  76. package/dist/cause-class.d.ts +19 -0
  77. package/dist/cause-class.js +54 -0
  78. package/dist/cloudflare.d.ts +123 -0
  79. package/dist/cloudflare.js +391 -0
  80. package/dist/computer-terminal.d.ts +38 -0
  81. package/dist/computer-terminal.js +410 -0
  82. package/dist/computer.d.ts +60 -0
  83. package/dist/computer.js +33 -0
  84. package/dist/event-recipients.d.ts +57 -0
  85. package/dist/event-recipients.js +144 -0
  86. package/dist/facet-invocation.d.ts +4 -0
  87. package/dist/facet-invocation.js +45 -0
  88. package/dist/files.d.ts +42 -0
  89. package/dist/files.js +123 -0
  90. package/dist/frame-binding-wire-script.d.ts +2 -0
  91. package/dist/frame-binding-wire-script.js +1 -0
  92. package/dist/frame-binding-wire.d.ts +28 -0
  93. package/dist/frame-binding-wire.js +54 -0
  94. package/dist/git-admission.d.ts +52 -0
  95. package/dist/git-admission.js +188 -0
  96. package/dist/git-auth.d.ts +11 -0
  97. package/dist/git-auth.js +27 -0
  98. package/dist/git-door.d.ts +35 -0
  99. package/dist/git-door.js +108 -0
  100. package/dist/git-journal.d.ts +31 -0
  101. package/dist/git-journal.js +188 -0
  102. package/dist/git.d.ts +31 -0
  103. package/dist/git.js +64 -0
  104. package/dist/guest-policy.d.ts +9 -0
  105. package/dist/guest-policy.js +13 -0
  106. package/dist/host.d.ts +244 -0
  107. package/dist/host.js +1043 -0
  108. package/dist/index.d.ts +166 -0
  109. package/dist/index.js +320 -0
  110. package/dist/installation-consent.d.ts +79 -0
  111. package/dist/installation-consent.js +82 -0
  112. package/dist/internal/background-origins.d.ts +3 -0
  113. package/dist/internal/background-origins.js +8 -0
  114. package/dist/internal/delivery.d.ts +12 -0
  115. package/dist/internal/delivery.js +167 -0
  116. package/dist/internal/host-gate.d.ts +14 -0
  117. package/dist/internal/host-gate.js +62 -0
  118. package/dist/internal/registry-installations.d.ts +6 -0
  119. package/dist/internal/registry-installations.js +12 -0
  120. package/dist/invocation.d.ts +251 -0
  121. package/dist/invocation.js +377 -0
  122. package/dist/keys.d.ts +48 -0
  123. package/dist/keys.js +52 -0
  124. package/dist/mcp-owner.d.ts +27 -0
  125. package/dist/mcp-owner.js +155 -0
  126. package/dist/mcp.d.ts +89 -0
  127. package/dist/mcp.js +429 -0
  128. package/dist/media.d.ts +23 -0
  129. package/dist/media.js +12 -0
  130. package/dist/pack.d.ts +79 -0
  131. package/dist/pack.js +151 -0
  132. package/dist/page/capabilities.d.ts +23 -0
  133. package/dist/page/capabilities.js +256 -0
  134. package/dist/page/computer-handles.d.ts +79 -0
  135. package/dist/page/computer-handles.js +44 -0
  136. package/dist/page/gill-observation.d.ts +4 -0
  137. package/dist/page/gill-observation.js +31 -0
  138. package/dist/page/lifetime.d.ts +6 -0
  139. package/dist/page/lifetime.js +19 -0
  140. package/dist/page/mount.d.ts +163 -0
  141. package/dist/page/mount.js +390 -0
  142. package/dist/page/storage.d.ts +3 -0
  143. package/dist/page/storage.js +82 -0
  144. package/dist/page/terminal.d.ts +5 -0
  145. package/dist/page/terminal.js +7 -0
  146. package/dist/page/window-launch.d.ts +18 -0
  147. package/dist/page/window-launch.js +11 -0
  148. package/dist/page-script.d.ts +14 -0
  149. package/dist/page-script.js +5 -0
  150. package/dist/r2-files.d.ts +3 -0
  151. package/dist/r2-files.js +79 -0
  152. package/dist/release.d.ts +83 -0
  153. package/dist/release.js +167 -0
  154. package/dist/root-data.d.ts +86 -0
  155. package/dist/root-data.js +69 -0
  156. package/dist/shell/app-directory.d.ts +542 -0
  157. package/dist/shell/app-directory.js +199 -0
  158. package/dist/shell/browser-actions.d.ts +7 -0
  159. package/dist/shell/browser-actions.js +56 -0
  160. package/dist/shell/command-host.d.ts +112 -0
  161. package/dist/shell/command-host.js +502 -0
  162. package/dist/shell/commands.d.ts +25 -0
  163. package/dist/shell/commands.js +78 -0
  164. package/dist/shell/index.d.ts +8 -0
  165. package/dist/shell/index.js +8 -0
  166. package/dist/shell/keys.d.ts +41 -0
  167. package/dist/shell/keys.js +134 -0
  168. package/dist/shell/shell-module.d.ts +55 -0
  169. package/dist/shell/shell-module.js +86 -0
  170. package/dist/shell/window-manager.d.ts +124 -0
  171. package/dist/shell/window-manager.js +711 -0
  172. package/dist/shell/workbench-contract.d.ts +68 -0
  173. package/dist/shell/workbench-contract.js +1 -0
  174. package/dist/shell/workbench-directory.d.ts +332 -0
  175. package/dist/shell/workbench-directory.js +35 -0
  176. package/dist/shell/workbench-host-types.d.ts +96 -0
  177. package/dist/shell/workbench-host-types.js +1 -0
  178. package/dist/shell/workbench-host.d.ts +34 -0
  179. package/dist/shell/workbench-host.js +347 -0
  180. package/dist/shell/workbench-model.d.ts +192 -0
  181. package/dist/shell/workbench-model.js +53 -0
  182. package/dist/shell/workbench.d.ts +4 -0
  183. package/dist/shell/workbench.js +2 -0
  184. package/dist/source/fork.d.ts +27 -0
  185. package/dist/source/fork.js +46 -0
  186. package/dist/source/index.d.ts +10 -0
  187. package/dist/source/index.js +10 -0
  188. package/dist/source/seed-receipt.d.ts +53 -0
  189. package/dist/source/seed-receipt.js +18 -0
  190. package/dist/source/team-source.d.ts +32 -0
  191. package/dist/source/team-source.js +42 -0
  192. package/dist/source/template-push.d.ts +33 -0
  193. package/dist/source/template-push.js +223 -0
  194. package/dist/source/template-repository.d.ts +4 -0
  195. package/dist/source/template-repository.js +21 -0
  196. package/dist/source/template-seed.d.ts +68 -0
  197. package/dist/source/template-seed.js +80 -0
  198. package/dist/standalone/agent-directory.d.ts +4 -0
  199. package/dist/standalone/agent-directory.js +4 -0
  200. package/dist/standalone/agents.d.ts +220 -0
  201. package/dist/standalone/agents.js +795 -0
  202. package/dist/standalone/app-builds-binding.d.ts +36 -0
  203. package/dist/standalone/app-builds-binding.js +119 -0
  204. package/dist/standalone/app-set.d.ts +91 -0
  205. package/dist/standalone/app-set.js +395 -0
  206. package/dist/standalone/app-source.d.ts +41 -0
  207. package/dist/standalone/app-source.js +59 -0
  208. package/dist/standalone/builds.d.ts +18 -0
  209. package/dist/standalone/builds.js +101 -0
  210. package/dist/standalone/computer-egress.d.ts +37 -0
  211. package/dist/standalone/computer-egress.js +111 -0
  212. package/dist/standalone/computer.d.ts +122 -0
  213. package/dist/standalone/computer.js +714 -0
  214. package/dist/standalone/install-apps-cli.d.ts +2 -0
  215. package/dist/standalone/install-apps-cli.js +126 -0
  216. package/dist/standalone/instance.d.ts +35 -0
  217. package/dist/standalone/instance.js +74 -0
  218. package/dist/standalone/media.d.ts +76 -0
  219. package/dist/standalone/media.js +227 -0
  220. package/dist/standalone/preview.d.ts +51 -0
  221. package/dist/standalone/preview.js +167 -0
  222. package/dist/standalone/registry.d.ts +102 -0
  223. package/dist/standalone/registry.js +193 -0
  224. package/dist/standalone/tenancy.d.ts +42 -0
  225. package/dist/standalone/tenancy.js +241 -0
  226. package/dist/standalone/worker.d.ts +55 -0
  227. package/dist/standalone/worker.js +147 -0
  228. package/dist/standalone/workflow-authority-readers.d.ts +16 -0
  229. package/dist/standalone/workflow-authority-readers.js +35 -0
  230. package/dist/standalone/workflow-binding.d.ts +216 -0
  231. package/dist/standalone/workflow-binding.js +217 -0
  232. package/dist/standalone/workflow-events.d.ts +46 -0
  233. package/dist/standalone/workflow-events.js +39 -0
  234. package/dist/standalone/workflow-git-capture.d.ts +7 -0
  235. package/dist/standalone/workflow-git-capture.js +62 -0
  236. package/dist/standalone/workflow-host.d.ts +931 -0
  237. package/dist/standalone/workflow-host.js +751 -0
  238. package/dist/standalone/workflow-node-capture.d.ts +13 -0
  239. package/dist/standalone/workflow-node-capture.js +72 -0
  240. package/dist/standalone/workflow-root-authority.d.ts +27 -0
  241. package/dist/standalone/workflow-root-authority.js +87 -0
  242. package/dist/standalone/workflow-schedules.d.ts +52 -0
  243. package/dist/standalone/workflow-schedules.js +40 -0
  244. package/dist/standalone/workflow-trigger-host.d.ts +1694 -0
  245. package/dist/standalone/workflow-trigger-host.js +52 -0
  246. package/dist/standalone/workflows.d.ts +657 -0
  247. package/dist/standalone/workflows.js +554 -0
  248. package/dist/storage-frame.d.ts +64 -0
  249. package/dist/storage-frame.js +28 -0
  250. package/dist/tenancy/auth0.d.ts +64 -0
  251. package/dist/tenancy/auth0.js +198 -0
  252. package/dist/tenancy/cloudflare/rate-limit.d.ts +8 -0
  253. package/dist/tenancy/cloudflare/rate-limit.js +19 -0
  254. package/dist/tenancy/cloudflare/registry.d.ts +50 -0
  255. package/dist/tenancy/cloudflare/registry.js +301 -0
  256. package/dist/tenancy/cloudflare.d.ts +2 -0
  257. package/dist/tenancy/cloudflare.js +2 -0
  258. package/dist/tenancy/cold-directory.d.ts +13 -0
  259. package/dist/tenancy/cold-directory.js +43 -0
  260. package/dist/tenancy/contracts.d.ts +195 -0
  261. package/dist/tenancy/contracts.js +1 -0
  262. package/dist/tenancy/index.d.ts +19 -0
  263. package/dist/tenancy/index.js +156 -0
  264. package/dist/tenancy/owner-key.d.ts +26 -0
  265. package/dist/tenancy/owner-key.js +63 -0
  266. package/dist/tenancy/oyster.d.ts +4 -0
  267. package/dist/tenancy/oyster.js +25 -0
  268. package/dist/tenancy/registry-record.d.ts +7 -0
  269. package/dist/tenancy/registry-record.js +44 -0
  270. package/dist/tenancy/registry.d.ts +27 -0
  271. package/dist/tenancy/registry.js +138 -0
  272. package/dist/tenancy/resolve.d.ts +7 -0
  273. package/dist/tenancy/resolve.js +64 -0
  274. package/dist/tenant.d.ts +81 -0
  275. package/dist/tenant.js +71 -0
  276. package/dist/testing/capabilities.d.ts +29 -0
  277. package/dist/testing/capabilities.js +130 -0
  278. package/dist/testing/catalog.d.ts +3 -0
  279. package/dist/testing/catalog.js +53 -0
  280. package/dist/testing/index.d.ts +10 -0
  281. package/dist/testing/index.js +10 -0
  282. package/dist/testing/installation.d.ts +11 -0
  283. package/dist/testing/installation.js +25 -0
  284. package/dist/testing/native-worker.d.ts +21 -0
  285. package/dist/testing/native-worker.js +106 -0
  286. package/dist/testing/worker.d.ts +18 -0
  287. package/dist/testing/worker.js +67 -0
  288. package/dist/testing/workers-runtime.d.ts +24 -0
  289. package/dist/testing/workers-runtime.js +33 -0
  290. package/dist/webhook-delivery.d.ts +14 -0
  291. package/dist/webhook-delivery.js +17 -0
  292. package/dist/workers-git.d.ts +285 -0
  293. package/dist/workers-git.js +1174 -0
  294. package/dist/workers.d.ts +352 -0
  295. package/dist/workers.js +868 -0
  296. package/docs/api/README.md +82 -0
  297. package/docs/api/agents.md +332 -0
  298. package/docs/api/app-storage.md +209 -0
  299. package/docs/api/apps.md +1375 -0
  300. package/docs/api/auth.md +63 -0
  301. package/docs/api/build-contract.md +1304 -0
  302. package/docs/api/build.md +1712 -0
  303. package/docs/api/cloudflare.md +421 -0
  304. package/docs/api/computer.md +203 -0
  305. package/docs/api/files.md +117 -0
  306. package/docs/api/git.md +470 -0
  307. package/docs/api/host.md +1328 -0
  308. package/docs/api/index.md +430 -0
  309. package/docs/api/invocation.md +738 -0
  310. package/docs/api/keys.md +175 -0
  311. package/docs/api/mcp.md +301 -0
  312. package/docs/api/media.md +40 -0
  313. package/docs/api/modules.md +50 -0
  314. package/docs/api/pack.md +141 -0
  315. package/docs/api/page/mount.md +298 -0
  316. package/docs/api/root-data.md +111 -0
  317. package/docs/api/shell/app-directory.md +599 -0
  318. package/docs/api/shell/command-host.md +224 -0
  319. package/docs/api/shell/commands.md +197 -0
  320. package/docs/api/shell/keys.md +183 -0
  321. package/docs/api/shell/shell-module.md +204 -0
  322. package/docs/api/shell/window-manager.md +267 -0
  323. package/docs/api/shell/workbench-directory.md +119 -0
  324. package/docs/api/shell/workbench.md +205 -0
  325. package/docs/api/shell.md +1915 -0
  326. package/docs/api/tenancy/auth0.md +110 -0
  327. package/docs/api/tenancy/cloudflare.md +221 -0
  328. package/docs/api/tenancy/cold-directory.md +46 -0
  329. package/docs/api/tenancy/owner-key.md +63 -0
  330. package/docs/api/tenancy/registry.md +77 -0
  331. package/docs/api/tenancy/resolve.md +69 -0
  332. package/docs/api/tenancy.md +430 -0
  333. package/docs/api/tenant.md +194 -0
  334. package/docs/api/workers-git.md +1646 -0
  335. package/docs/api/workers.md +1691 -0
  336. package/docs/site/agent-quickstart.mdx +346 -0
  337. package/examples/standalone/worker.ts +7 -0
  338. package/examples/standalone/wrangler.jsonc +82 -0
  339. package/package.json +300 -3
@@ -0,0 +1,430 @@
1
+ <!-- Generated by Botanical API docs (TypeDoc + typedoc-plugin-markdown). Do not edit. -->
2
+
3
+ [**@fungi.computer/oyster**](README.md)
4
+
5
+ ---
6
+
7
+ [@fungi.computer/oyster](modules.md) / tenancy
8
+
9
+ # tenancy
10
+
11
+ ## Type Aliases
12
+
13
+ ### Identity
14
+
15
+ ```ts
16
+ type Identity = Readonly<{
17
+ provider: string;
18
+ subject: string;
19
+ email?: string;
20
+ }>;
21
+ ```
22
+
23
+ An external identity; the registry owns its canonical member mapping.
24
+
25
+ ---
26
+
27
+ ### Tenant
28
+
29
+ ```ts
30
+ type Tenant = Readonly<{
31
+ id: TenantId;
32
+ handle: string;
33
+ origin: string;
34
+ status: "active" | "suspended" | "deleting";
35
+ owners: readonly string[];
36
+ domains: readonly string[];
37
+ }>;
38
+ ```
39
+
40
+ One provisioned tenant and its registry-owned canonical public origin.
41
+
42
+ ---
43
+
44
+ ### Membership
45
+
46
+ ```ts
47
+ type Membership = Readonly<{
48
+ memberId: string;
49
+ role: "owner" | "member";
50
+ membershipVersion: number;
51
+ }>;
52
+ ```
53
+
54
+ A live membership, carrying a stored host-owned member identity.
55
+
56
+ ---
57
+
58
+ ### ReadonlyTenantRegistry
59
+
60
+ ```ts
61
+ type ReadonlyTenantRegistry = Readonly<{
62
+ get: Promise<Readonly<{
63
+ id: TenantId;
64
+ handle: string;
65
+ origin: string;
66
+ status: "active" | "suspended" | "deleting";
67
+ owners: readonly string[];
68
+ domains: readonly string[];
69
+ }> | null>;
70
+ byHandle: Promise<Readonly<{
71
+ id: TenantId;
72
+ handle: string;
73
+ origin: string;
74
+ status: "active" | "suspended" | "deleting";
75
+ owners: readonly string[];
76
+ domains: readonly string[];
77
+ }> | null>;
78
+ byDomain?: Promise<Readonly<{
79
+ id: TenantId;
80
+ handle: string;
81
+ origin: string;
82
+ status: "active" | "suspended" | "deleting";
83
+ owners: readonly string[];
84
+ domains: readonly string[];
85
+ }> | null>;
86
+ status: Promise<"active" | "deleting" | "suspended" | null>;
87
+ membershipOf: Promise<Readonly<{
88
+ memberId: string;
89
+ role: "owner" | "member";
90
+ membershipVersion: number;
91
+ }> | null>;
92
+ memberById: Promise<Readonly<{
93
+ memberId: string;
94
+ role: "owner" | "member";
95
+ membershipVersion: number;
96
+ }> | null>;
97
+ }>;
98
+ ```
99
+
100
+ Reads existing authority; this port cannot mutate tenants or members.
101
+
102
+ ---
103
+
104
+ ### TenantCreateInput
105
+
106
+ ```ts
107
+ type TenantCreateInput = Readonly<{
108
+ handle: string;
109
+ origin: string;
110
+ domains: readonly string[];
111
+ owner: Identity;
112
+ }>;
113
+ ```
114
+
115
+ A single create transition records tenant and owner membership together.
116
+
117
+ ---
118
+
119
+ ### ManagedTenantRegistry
120
+
121
+ ```ts
122
+ type ManagedTenantRegistry = ReadonlyTenantRegistry &
123
+ Readonly<{
124
+ create: Promise<
125
+ Readonly<{
126
+ id: TenantId;
127
+ handle: string;
128
+ origin: string;
129
+ status: "active" | "suspended" | "deleting";
130
+ owners: readonly string[];
131
+ domains: readonly string[];
132
+ }>
133
+ >;
134
+ setStatus: Promise<void>;
135
+ delete: Promise<void>;
136
+ }>;
137
+ ```
138
+
139
+ Mutable registry owner; remove is called only after teardown succeeds.
140
+
141
+ ---
142
+
143
+ ### TenantResolverAdapter
144
+
145
+ ```ts
146
+ type TenantResolverAdapter<Kind> = Readonly<{
147
+ kind: Kind;
148
+ resolve: Promise<(string & Brand<"OysterTenantId">) | null>;
149
+ }>;
150
+ ```
151
+
152
+ Request URL resolution, with an explicit origin/path distinction.
153
+
154
+ #### Type Parameters
155
+
156
+ | Type Parameter | Default type |
157
+ | --------------------------------------- | ---------------------- |
158
+ | `Kind` _extends_ `"origin"` \| `"path"` | `"origin"` \| `"path"` |
159
+
160
+ ---
161
+
162
+ ### AuthResult
163
+
164
+ ```ts
165
+ type AuthResult =
166
+ | Readonly<{
167
+ kind: "identity";
168
+ identity: Identity;
169
+ }>
170
+ | Readonly<{
171
+ kind: "principal";
172
+ principal: TenantPrincipal;
173
+ }>
174
+ | Readonly<{
175
+ kind: "pass";
176
+ }>
177
+ | Readonly<{
178
+ kind: "refused";
179
+ status: 401 | 403;
180
+ }>;
181
+ ```
182
+
183
+ Adapter output: pass only when the presented credential is not this adapter's.
184
+
185
+ ---
186
+
187
+ ### AuthAdapter
188
+
189
+ ```ts
190
+ type AuthAdapter = Readonly<{
191
+ id: string;
192
+ routes?: Hono;
193
+ authenticate: Promise<AuthResult>;
194
+ }>;
195
+ ```
196
+
197
+ Authentication proves an identity, or attests a principal for this tenant.
198
+
199
+ ---
200
+
201
+ ### TenancyPolicy
202
+
203
+ ```ts
204
+ type TenancyPolicy = (context) => Promise<
205
+ | Readonly<{
206
+ kind: "allow";
207
+ }>
208
+ | Readonly<{
209
+ kind: "refuse";
210
+ status: 429;
211
+ retryAfter: number;
212
+ }>
213
+ >;
214
+ ```
215
+
216
+ Abuse-only admission policy; it does not meter or bill usage.
217
+
218
+ #### Parameters
219
+
220
+ | Parameter | Type |
221
+ | --------- | ------------------------------------------------------------------------------------------------------------------------------------- |
222
+ | `context` | `Readonly`\<\{ `tenant`: [`Tenant`](#tenant); `principal`: [`TenantPrincipal`](tenant.md#tenantprincipal); `request`: `Request`; \}\> |
223
+
224
+ #### Returns
225
+
226
+ `Promise`\< \| `Readonly`\<\{ `kind`: `"allow"`; \}\> \| `Readonly`\<\{ `kind`:
227
+ `"refuse"`; `status`: `429`; `retryAfter`: `number`; \}\>\>
228
+
229
+ ---
230
+
231
+ ### TenancyHooks
232
+
233
+ ```ts
234
+ type TenancyHooks = Readonly<{
235
+ tenant.created?: (context) => Promise<void>;
236
+ tenant.deleting?: (context) => Promise<void>;
237
+ }>;
238
+ ```
239
+
240
+ Lifecycle callbacks run after create and before physical deletion.
241
+
242
+ ---
243
+
244
+ ### TenancyAdmission
245
+
246
+ ```ts
247
+ type TenancyAdmission =
248
+ | Readonly<{
249
+ kind: "admitted";
250
+ tenant: Tenant;
251
+ principal: TenantPrincipal;
252
+ }>
253
+ | Readonly<{
254
+ kind: "refused";
255
+ status: 401 | 403 | 404 | 429;
256
+ retryAfter?: number;
257
+ }>;
258
+ ```
259
+
260
+ Typed result of tenant authentication and abuse-policy admission.
261
+
262
+ ---
263
+
264
+ ### TenancyVariables
265
+
266
+ ```ts
267
+ type TenancyVariables = object;
268
+ ```
269
+
270
+ Typed Hono context fields populated only after admission.
271
+
272
+ #### Properties
273
+
274
+ ##### tenant
275
+
276
+ ```ts
277
+ tenant: Tenant;
278
+ ```
279
+
280
+ The admitted provisioned tenant.
281
+
282
+ ##### principal
283
+
284
+ ```ts
285
+ principal: TenantPrincipal;
286
+ ```
287
+
288
+ The admitted canonical principal.
289
+
290
+ ---
291
+
292
+ ### ReadonlyTenancy
293
+
294
+ ```ts
295
+ type ReadonlyTenancy<Kind> = Readonly<{
296
+ resolve: Promise<Readonly<{
297
+ id: TenantId;
298
+ handle: string;
299
+ origin: string;
300
+ status: "active" | "suspended" | "deleting";
301
+ owners: readonly string[];
302
+ domains: readonly string[];
303
+ }> | null>;
304
+ authenticate: Promise<TenancyAdmission>;
305
+ member: Promise<TenantPrincipal | null>;
306
+ memberById: Promise<
307
+ (TenantPrincipal & Readonly<{ membershipVersion: number }>) | null
308
+ >;
309
+ middleware: MiddlewareHandler<{
310
+ Variables: TenancyVariables;
311
+ }>;
312
+ }> &
313
+ Kind extends "origin"
314
+ ? Readonly<{
315
+ oyster: OysterTenancy;
316
+ }>
317
+ : Record<never, never>;
318
+ ```
319
+
320
+ Read-only host API; no create/delete methods are exposed.
321
+
322
+ #### Type Parameters
323
+
324
+ | Type Parameter | Default type |
325
+ | --------------------------------------- | ---------------------- |
326
+ | `Kind` _extends_ `"origin"` \| `"path"` | `"origin"` \| `"path"` |
327
+
328
+ ---
329
+
330
+ ### ManagedTenancy
331
+
332
+ ```ts
333
+ type ManagedTenancy<Kind> = ReadonlyTenancy<Kind> &
334
+ Readonly<{
335
+ create: Promise<
336
+ Readonly<{
337
+ id: TenantId;
338
+ handle: string;
339
+ origin: string;
340
+ status: "active" | "suspended" | "deleting";
341
+ owners: readonly string[];
342
+ domains: readonly string[];
343
+ }>
344
+ >;
345
+ delete: Promise<void>;
346
+ }>;
347
+ ```
348
+
349
+ Managed hosts can provision tenants and run teardown through the kit.
350
+
351
+ #### Type Parameters
352
+
353
+ | Type Parameter | Default type |
354
+ | --------------------------------------- | ---------------------- |
355
+ | `Kind` _extends_ `"origin"` \| `"path"` | `"origin"` \| `"path"` |
356
+
357
+ ---
358
+
359
+ ### TenancyConfig
360
+
361
+ ```ts
362
+ type TenancyConfig<Registry, Kind> = Readonly<{
363
+ resolve: TenantResolverAdapter<Kind>;
364
+ registry: Registry;
365
+ auth: readonly AuthAdapter[];
366
+ policy?: TenancyPolicy;
367
+ on?: TenancyHooks;
368
+ }>;
369
+ ```
370
+
371
+ Configuration composes resolution, live registry authority and auth adapters.
372
+
373
+ #### Type Parameters
374
+
375
+ | Type Parameter | Default type |
376
+ | ------------------------------------------------------------------------ | --------------------------------------------------- |
377
+ | `Registry` _extends_ [`ReadonlyTenantRegistry`](#readonlytenantregistry) | [`ReadonlyTenantRegistry`](#readonlytenantregistry) |
378
+ | `Kind` _extends_ `"origin"` \| `"path"` | `"origin"` \| `"path"` |
379
+
380
+ ## Functions
381
+
382
+ ### createTenancy()
383
+
384
+ #### Call Signature
385
+
386
+ ```ts
387
+ function createTenancy<Kind>(config): ManagedTenancy<Kind>;
388
+ ```
389
+
390
+ Managed registries expose provisioning and cleanup; readonly registries do not.
391
+
392
+ ##### Type Parameters
393
+
394
+ | Type Parameter |
395
+ | --------------------------------------- |
396
+ | `Kind` _extends_ `"path"` \| `"origin"` |
397
+
398
+ ##### Parameters
399
+
400
+ | Parameter | Type |
401
+ | --------- | ---------------------------------------------------------------------------------------------- |
402
+ | `config` | [`TenancyConfig`](#tenancyconfig)\<[`ManagedTenantRegistry`](#managedtenantregistry), `Kind`\> |
403
+
404
+ ##### Returns
405
+
406
+ [`ManagedTenancy`](#managedtenancy)\<`Kind`\>
407
+
408
+ #### Call Signature
409
+
410
+ ```ts
411
+ function createTenancy<Kind>(config): ReadonlyTenancy<Kind>;
412
+ ```
413
+
414
+ Resolve and authenticate requests without exposing registry mutations.
415
+
416
+ ##### Type Parameters
417
+
418
+ | Type Parameter |
419
+ | --------------------------------------- |
420
+ | `Kind` _extends_ `"path"` \| `"origin"` |
421
+
422
+ ##### Parameters
423
+
424
+ | Parameter | Type |
425
+ | --------- | ------------------------------------------------------------------------------------------------ |
426
+ | `config` | [`TenancyConfig`](#tenancyconfig)\<[`ReadonlyTenantRegistry`](#readonlytenantregistry), `Kind`\> |
427
+
428
+ ##### Returns
429
+
430
+ [`ReadonlyTenancy`](#readonlytenancy)\<`Kind`\>
@@ -0,0 +1,194 @@
1
+ <!-- Generated by Botanical API docs (TypeDoc + typedoc-plugin-markdown). Do not edit. -->
2
+
3
+ [**@fungi.computer/oyster**](README.md)
4
+
5
+ ---
6
+
7
+ [@fungi.computer/oyster](modules.md) / tenant
8
+
9
+ # tenant
10
+
11
+ ## Type Aliases
12
+
13
+ ### TenantId
14
+
15
+ ```ts
16
+ type TenantId = typeof tenantIdSchema.Type;
17
+ ```
18
+
19
+ A validated host-selected tenant identity.
20
+
21
+ ---
22
+
23
+ ### TenantPrincipal
24
+
25
+ ```ts
26
+ type TenantPrincipal =
27
+ | Readonly<{
28
+ actor: Extract<
29
+ HostActor,
30
+ {
31
+ kind: "member";
32
+ }
33
+ >;
34
+ role: "owner" | "member";
35
+ soleMember?: true;
36
+ }>
37
+ | Readonly<{
38
+ actor: Exclude<
39
+ HostActor,
40
+ {
41
+ kind: "member";
42
+ }
43
+ >;
44
+ }>;
45
+ ```
46
+
47
+ A canonical host actor with a tenant role only when the actor is a member.
48
+
49
+ ---
50
+
51
+ ### TenantResolver
52
+
53
+ ```ts
54
+ type TenantResolver = Readonly<{
55
+ resolve: Promise<Readonly<{
56
+ tenantId: TenantId;
57
+ origin: string;
58
+ }> | null>;
59
+ }>;
60
+ ```
61
+
62
+ Resolves a request before authentication; null means refuse, never fallback.
63
+
64
+ ---
65
+
66
+ ### TenantScope
67
+
68
+ ```ts
69
+ type TenantScope = Readonly<{
70
+ tenantId: TenantId;
71
+ origin: string;
72
+ durableName: string;
73
+ computerName: string;
74
+ workspacePrefix: string;
75
+ repositoryPrefix: string;
76
+ }>;
77
+ ```
78
+
79
+ The only source of durable names for a standalone Oyster tenant.
80
+
81
+ ---
82
+
83
+ ### ResolvedTenant
84
+
85
+ ```ts
86
+ type ResolvedTenant = Readonly<{
87
+ scope: TenantScope;
88
+ auth: OysterAuth;
89
+ }>;
90
+ ```
91
+
92
+ A host-selected scope paired with its existing authentication port.
93
+
94
+ ---
95
+
96
+ ### OysterTenancy
97
+
98
+ ```ts
99
+ type OysterTenancy = Readonly<{
100
+ resolve: Promise<Readonly<{
101
+ scope: TenantScope;
102
+ auth: OysterAuth;
103
+ }> | null>;
104
+ }>;
105
+ ```
106
+
107
+ Resolve an origin-scoped host; null refuses the request without a fallback.
108
+
109
+ ## Variables
110
+
111
+ ### tenantIdSchema
112
+
113
+ ```ts
114
+ const tenantIdSchema: brand<String, "OysterTenantId">;
115
+ ```
116
+
117
+ A host-minted tenant slug: 2–40 lowercase ASCII letters or digits, with single
118
+ interior hyphens. The repository separator `--` is forbidden. Hosts resolve it
119
+ before authentication; App-controlled inputs never select it.
120
+
121
+ ---
122
+
123
+ ### defaultTenant
124
+
125
+ ```ts
126
+ const defaultTenant: TenantId;
127
+ ```
128
+
129
+ The single-tenant Oyster identity whose durable names remain unchanged.
130
+
131
+ ## Functions
132
+
133
+ ### tenantScope()
134
+
135
+ ```ts
136
+ function tenantScope(tenantId, origin): TenantScope;
137
+ ```
138
+
139
+ Name tenant-owned stores without changing any default-tenant name. The `t.`
140
+ repository namespace cannot be a default installation slug, which forbids dots.
141
+ Hub supplies its own Team-scoped ports and does not use this naming contract.
142
+
143
+ #### Parameters
144
+
145
+ | Parameter | Type |
146
+ | ---------- | ---------------------------------------- |
147
+ | `tenantId` | `string` & `Brand`\<`"OysterTenantId"`\> |
148
+ | `origin` | `string` |
149
+
150
+ #### Returns
151
+
152
+ [`TenantScope`](#tenantscope)
153
+
154
+ ---
155
+
156
+ ### singleTenant()
157
+
158
+ ```ts
159
+ function singleTenant(origin): TenantResolver;
160
+ ```
161
+
162
+ Admit defaultTenant only at the configured origin. Scheme, host and port must
163
+ match after URL canonicalization; unknown origins never fall back to default.
164
+
165
+ #### Parameters
166
+
167
+ | Parameter | Type |
168
+ | --------- | -------- |
169
+ | `origin` | `string` |
170
+
171
+ #### Returns
172
+
173
+ [`TenantResolver`](#tenantresolver)
174
+
175
+ ---
176
+
177
+ ### implicitTenancy()
178
+
179
+ ```ts
180
+ function implicitTenancy(origin, auth): OysterTenancy;
181
+ ```
182
+
183
+ Preserve the default tenant's names and auth only at the configured origin.
184
+
185
+ #### Parameters
186
+
187
+ | Parameter | Type |
188
+ | --------- | ---------------------------------- |
189
+ | `origin` | `string` |
190
+ | `auth` | [`OysterAuth`](host.md#oysterauth) |
191
+
192
+ #### Returns
193
+
194
+ [`OysterTenancy`](#oystertenancy)