@fungi.computer/oyster 0.0.1 → 0.2.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 (195) hide show
  1. package/README.md +228 -176
  2. package/dist/agent-avatars.d.ts +103 -0
  3. package/dist/agent-avatars.js +66 -0
  4. package/dist/agents.d.ts +12 -2
  5. package/dist/agents.js +39 -2
  6. package/dist/app-builds.d.ts +76 -17
  7. package/dist/app-builds.js +207 -63
  8. package/dist/app-sources.d.ts +7 -22
  9. package/dist/app-sources.js +49 -14
  10. package/dist/apps/gate.d.ts +7 -7
  11. package/dist/apps/gate.js +6 -6
  12. package/dist/apps/installation.d.ts +35 -35
  13. package/dist/apps/installation.js +20 -19
  14. package/dist/build/artifact-writer.d.ts +40 -0
  15. package/dist/build/artifact-writer.js +181 -0
  16. package/dist/build/build-jobs.js +7 -1
  17. package/dist/build/build-policy.d.ts +10 -0
  18. package/dist/build/build-policy.js +10 -0
  19. package/dist/build/build-step.d.ts +12 -1
  20. package/dist/build/build-step.js +9 -1
  21. package/dist/build/candidate-builder.d.ts +68 -0
  22. package/dist/build/candidate-builder.js +91 -0
  23. package/dist/build/candidate-cli.d.ts +1 -0
  24. package/dist/build/candidate-cli.js +119 -0
  25. package/dist/build/candidate-cli.mjs +28220 -0
  26. package/dist/build/content-objects.d.ts +37 -0
  27. package/dist/build/content-objects.js +53 -0
  28. package/dist/build/effect.d.ts +18 -0
  29. package/dist/build/effect.js +52 -12
  30. package/dist/build/git-environment.d.ts +3 -0
  31. package/dist/build/git-environment.js +21 -9
  32. package/dist/build/local-build.d.ts +13 -3
  33. package/dist/build/local-build.js +149 -99
  34. package/dist/build/snapshot-package-store.d.ts +10 -0
  35. package/dist/build/snapshot-package-store.js +15 -0
  36. package/dist/build/snapshot-program-scripts.js +1 -1
  37. package/dist/build/snapshot-programs/snapshot-path.d.ts +2 -0
  38. package/dist/build/snapshot-programs/snapshot-path.js +6 -0
  39. package/dist/build/submission-contract.d.ts +461 -17
  40. package/dist/build/submission-contract.js +136 -26
  41. package/dist/build/workspace-build.d.ts +7 -2
  42. package/dist/build/workspace-build.js +55 -11
  43. package/dist/build-contract.d.ts +3 -0
  44. package/dist/build-contract.js +3 -0
  45. package/dist/build-egress.d.ts +62 -0
  46. package/dist/build-egress.js +148 -0
  47. package/dist/build.d.ts +1 -0
  48. package/dist/build.js +1 -0
  49. package/dist/cloudflare.js +4 -4
  50. package/dist/frame-binding-wire-script.js +1 -1
  51. package/dist/frame-binding-wire.d.ts +1 -1
  52. package/dist/frame-binding-wire.js +1 -1
  53. package/dist/git-journal.js +4 -4
  54. package/dist/index.d.ts +1 -0
  55. package/dist/index.js +1 -0
  56. package/dist/installation-consent.d.ts +3 -1
  57. package/dist/installation-consent.js +2 -0
  58. package/dist/mcp-owner.js +20 -8
  59. package/dist/pack.d.ts +6 -3
  60. package/dist/pack.js +28 -11
  61. package/dist/page/gill-observation.d.ts +4 -0
  62. package/dist/page/gill-observation.js +31 -0
  63. package/dist/page/mount.d.ts +4 -8
  64. package/dist/page/window-launch.d.ts +18 -0
  65. package/dist/page/window-launch.js +11 -0
  66. package/dist/page-script.js +4 -4
  67. package/dist/release.d.ts +11 -0
  68. package/dist/release.js +4 -1
  69. package/dist/shell/app-directory.d.ts +50 -45
  70. package/dist/shell/app-directory.js +19 -18
  71. package/dist/shell/shell-module.d.ts +26 -2
  72. package/dist/shell/shell-module.js +51 -2
  73. package/dist/shell/window-manager.d.ts +5 -1
  74. package/dist/shell/window-manager.js +21 -2
  75. package/dist/shell/workbench-directory.d.ts +332 -0
  76. package/dist/shell/workbench-directory.js +35 -0
  77. package/dist/shell/workbench-host-types.d.ts +1 -1
  78. package/dist/shell/workbench-host.js +5 -0
  79. package/dist/shell/workbench-model.d.ts +3 -1
  80. package/dist/source/index.d.ts +6 -7
  81. package/dist/source/index.js +6 -7
  82. package/dist/source/template-push.d.ts +33 -0
  83. package/dist/source/template-push.js +223 -0
  84. package/dist/source/template-repository.d.ts +2 -0
  85. package/dist/source/template-repository.js +13 -0
  86. package/dist/source/{template-write.d.ts → template-seed.d.ts} +19 -20
  87. package/dist/source/template-seed.js +80 -0
  88. package/dist/standalone/agent-directory.d.ts +4 -0
  89. package/dist/standalone/agent-directory.js +4 -0
  90. package/dist/standalone/agents.d.ts +227 -0
  91. package/dist/standalone/agents.js +834 -0
  92. package/dist/standalone/app-builds-binding.d.ts +36 -0
  93. package/dist/standalone/app-builds-binding.js +119 -0
  94. package/dist/standalone/app-set.d.ts +91 -0
  95. package/dist/standalone/app-set.js +395 -0
  96. package/dist/standalone/app-source.d.ts +41 -0
  97. package/dist/standalone/app-source.js +59 -0
  98. package/dist/standalone/builds.d.ts +18 -0
  99. package/dist/standalone/builds.js +101 -0
  100. package/dist/standalone/computer-egress.d.ts +37 -0
  101. package/dist/standalone/computer-egress.js +111 -0
  102. package/dist/standalone/computer.d.ts +122 -0
  103. package/dist/standalone/computer.js +714 -0
  104. package/dist/standalone/install-apps-cli.d.ts +2 -0
  105. package/dist/standalone/install-apps-cli.js +126 -0
  106. package/dist/standalone/instance.d.ts +35 -0
  107. package/dist/standalone/instance.js +74 -0
  108. package/dist/standalone/media.d.ts +76 -0
  109. package/dist/standalone/media.js +227 -0
  110. package/dist/standalone/preview.d.ts +51 -0
  111. package/dist/standalone/preview.js +167 -0
  112. package/dist/standalone/registry.d.ts +102 -0
  113. package/dist/standalone/registry.js +193 -0
  114. package/dist/standalone/tenancy.d.ts +42 -0
  115. package/dist/standalone/tenancy.js +241 -0
  116. package/dist/standalone/worker.d.ts +55 -0
  117. package/dist/standalone/worker.js +147 -0
  118. package/dist/standalone/workflow-authority-readers.d.ts +16 -0
  119. package/dist/standalone/workflow-authority-readers.js +35 -0
  120. package/dist/standalone/workflow-binding.d.ts +216 -0
  121. package/dist/standalone/workflow-binding.js +217 -0
  122. package/dist/standalone/workflow-events.d.ts +46 -0
  123. package/dist/standalone/workflow-events.js +39 -0
  124. package/dist/standalone/workflow-git-capture.d.ts +7 -0
  125. package/dist/standalone/workflow-git-capture.js +62 -0
  126. package/dist/standalone/workflow-host.d.ts +955 -0
  127. package/dist/standalone/workflow-host.js +778 -0
  128. package/dist/standalone/workflow-node-capture.d.ts +13 -0
  129. package/dist/standalone/workflow-node-capture.js +72 -0
  130. package/dist/standalone/workflow-root-authority.d.ts +27 -0
  131. package/dist/standalone/workflow-root-authority.js +87 -0
  132. package/dist/standalone/workflow-schedules.d.ts +52 -0
  133. package/dist/standalone/workflow-schedules.js +40 -0
  134. package/dist/standalone/workflow-trigger-host.d.ts +1716 -0
  135. package/dist/standalone/workflow-trigger-host.js +52 -0
  136. package/dist/standalone/workflows.d.ts +713 -0
  137. package/dist/standalone/workflows.js +554 -0
  138. package/dist/tenancy/auth0.d.ts +64 -0
  139. package/dist/tenancy/auth0.js +198 -0
  140. package/dist/tenancy/cloudflare/rate-limit.d.ts +8 -0
  141. package/dist/tenancy/cloudflare/rate-limit.js +19 -0
  142. package/dist/tenancy/cloudflare/registry.d.ts +50 -0
  143. package/dist/tenancy/cloudflare/registry.js +301 -0
  144. package/dist/tenancy/cloudflare.d.ts +2 -0
  145. package/dist/tenancy/cloudflare.js +2 -0
  146. package/dist/tenancy/cold-directory.d.ts +13 -0
  147. package/dist/tenancy/cold-directory.js +43 -0
  148. package/dist/tenancy/contracts.d.ts +195 -0
  149. package/dist/tenancy/contracts.js +1 -0
  150. package/dist/tenancy/index.d.ts +19 -0
  151. package/dist/tenancy/index.js +156 -0
  152. package/dist/tenancy/owner-key.d.ts +26 -0
  153. package/dist/tenancy/owner-key.js +63 -0
  154. package/dist/tenancy/oyster.d.ts +4 -0
  155. package/dist/tenancy/oyster.js +25 -0
  156. package/dist/tenancy/registry-record.d.ts +7 -0
  157. package/dist/tenancy/registry-record.js +44 -0
  158. package/dist/tenancy/registry.d.ts +27 -0
  159. package/dist/tenancy/registry.js +138 -0
  160. package/dist/tenancy/resolve.d.ts +7 -0
  161. package/dist/tenancy/resolve.js +64 -0
  162. package/dist/workers-git.js +1 -4
  163. package/dist/workers.d.ts +2 -2
  164. package/dist/workers.js +3 -1
  165. package/docs/api/build-contract.md +829 -32
  166. package/docs/api/build.md +253 -17
  167. package/docs/api/modules.md +40 -32
  168. package/docs/api/pack.md +6 -3
  169. package/docs/api/shell/app-directory.md +267 -0
  170. package/docs/api/shell/shell-module.md +64 -3
  171. package/docs/api/shell/workbench-directory.md +119 -0
  172. package/docs/api/shell/workbench.md +19 -0
  173. package/docs/api/shell.md +127 -0
  174. package/docs/api/tenancy/auth0.md +110 -0
  175. package/docs/api/tenancy/cloudflare.md +221 -0
  176. package/docs/api/tenancy/cold-directory.md +46 -0
  177. package/docs/api/tenancy/owner-key.md +63 -0
  178. package/docs/api/tenancy/registry.md +77 -0
  179. package/docs/api/tenancy/resolve.md +69 -0
  180. package/docs/api/tenancy.md +430 -0
  181. package/docs/api/workers-git.md +140 -21
  182. package/docs/api/workers.md +15 -2
  183. package/docs/site/agent-quickstart.mdx +52 -55
  184. package/examples/standalone/worker.ts +7 -14
  185. package/examples/standalone/wrangler.jsonc +67 -6
  186. package/package.json +78 -25
  187. package/dist/build/r2-artifact-writer.d.ts +0 -31
  188. package/dist/build/r2-artifact-writer.js +0 -179
  189. package/dist/source/template-write.js +0 -344
  190. package/docs/media/architecture.mmd +0 -32
  191. package/docs/media/architecture.png +0 -0
  192. package/docs/media/bonsai-network.png +0 -0
  193. package/docs/media/bonsai-repository.png +0 -0
  194. package/examples/git/worker.ts +0 -39
  195. package/examples/git/wrangler.jsonc +0 -32
@@ -0,0 +1,69 @@
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/resolve
8
+
9
+ # tenancy/resolve
10
+
11
+ ## Functions
12
+
13
+ ### subdomain()
14
+
15
+ ```ts
16
+ function subdomain(baseDomain): TenantResolverAdapter<"origin">;
17
+ ```
18
+
19
+ Resolve a provisioned label immediately below a configured base hostname.
20
+
21
+ #### Parameters
22
+
23
+ | Parameter | Type |
24
+ | ------------ | -------- |
25
+ | `baseDomain` | `string` |
26
+
27
+ #### Returns
28
+
29
+ [`TenantResolverAdapter`](../tenancy.md#tenantresolveradapter)\<`"origin"`\>
30
+
31
+ ---
32
+
33
+ ### hosts()
34
+
35
+ ```ts
36
+ function hosts(registry): TenantResolverAdapter<"origin">;
37
+ ```
38
+
39
+ Resolve a provisioned custom domain through the registry's domain index.
40
+
41
+ #### Parameters
42
+
43
+ | Parameter | Type |
44
+ | ---------- | ---------------------------------------------------------------- |
45
+ | `registry` | [`ReadonlyTenantRegistry`](../tenancy.md#readonlytenantregistry) |
46
+
47
+ #### Returns
48
+
49
+ [`TenantResolverAdapter`](../tenancy.md#tenantresolveradapter)\<`"origin"`\>
50
+
51
+ ---
52
+
53
+ ### path()
54
+
55
+ ```ts
56
+ function path(pattern): TenantResolverAdapter<"path">;
57
+ ```
58
+
59
+ Resolve provisioned path tenants for APIs; this resolver cannot host Oyster.
60
+
61
+ #### Parameters
62
+
63
+ | Parameter | Type |
64
+ | --------- | -------- |
65
+ | `pattern` | `string` |
66
+
67
+ #### Returns
68
+
69
+ [`TenantResolverAdapter`](../tenancy.md#tenantresolveradapter)\<`"path"`\>
@@ -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`\>