@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.
- package/README.md +228 -176
- package/dist/agent-avatars.d.ts +103 -0
- package/dist/agent-avatars.js +66 -0
- package/dist/agents.d.ts +12 -2
- package/dist/agents.js +39 -2
- package/dist/app-builds.d.ts +76 -17
- package/dist/app-builds.js +207 -63
- package/dist/app-sources.d.ts +7 -22
- package/dist/app-sources.js +49 -14
- package/dist/apps/gate.d.ts +7 -7
- package/dist/apps/gate.js +6 -6
- package/dist/apps/installation.d.ts +35 -35
- package/dist/apps/installation.js +20 -19
- package/dist/build/artifact-writer.d.ts +40 -0
- package/dist/build/artifact-writer.js +181 -0
- package/dist/build/build-jobs.js +7 -1
- package/dist/build/build-policy.d.ts +10 -0
- package/dist/build/build-policy.js +10 -0
- package/dist/build/build-step.d.ts +12 -1
- package/dist/build/build-step.js +9 -1
- package/dist/build/candidate-builder.d.ts +68 -0
- package/dist/build/candidate-builder.js +91 -0
- package/dist/build/candidate-cli.d.ts +1 -0
- package/dist/build/candidate-cli.js +119 -0
- package/dist/build/candidate-cli.mjs +28220 -0
- package/dist/build/content-objects.d.ts +37 -0
- package/dist/build/content-objects.js +53 -0
- package/dist/build/effect.d.ts +18 -0
- package/dist/build/effect.js +52 -12
- package/dist/build/git-environment.d.ts +3 -0
- package/dist/build/git-environment.js +21 -9
- package/dist/build/local-build.d.ts +13 -3
- package/dist/build/local-build.js +149 -99
- package/dist/build/snapshot-package-store.d.ts +10 -0
- package/dist/build/snapshot-package-store.js +15 -0
- package/dist/build/snapshot-program-scripts.js +1 -1
- package/dist/build/snapshot-programs/snapshot-path.d.ts +2 -0
- package/dist/build/snapshot-programs/snapshot-path.js +6 -0
- package/dist/build/submission-contract.d.ts +461 -17
- package/dist/build/submission-contract.js +136 -26
- package/dist/build/workspace-build.d.ts +7 -2
- package/dist/build/workspace-build.js +55 -11
- package/dist/build-contract.d.ts +3 -0
- package/dist/build-contract.js +3 -0
- package/dist/build-egress.d.ts +62 -0
- package/dist/build-egress.js +148 -0
- package/dist/build.d.ts +1 -0
- package/dist/build.js +1 -0
- package/dist/cloudflare.js +4 -4
- package/dist/frame-binding-wire-script.js +1 -1
- package/dist/frame-binding-wire.d.ts +1 -1
- package/dist/frame-binding-wire.js +1 -1
- package/dist/git-journal.js +4 -4
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/installation-consent.d.ts +3 -1
- package/dist/installation-consent.js +2 -0
- package/dist/mcp-owner.js +20 -8
- package/dist/pack.d.ts +6 -3
- package/dist/pack.js +28 -11
- package/dist/page/gill-observation.d.ts +4 -0
- package/dist/page/gill-observation.js +31 -0
- package/dist/page/mount.d.ts +4 -8
- package/dist/page/window-launch.d.ts +18 -0
- package/dist/page/window-launch.js +11 -0
- package/dist/page-script.js +4 -4
- package/dist/release.d.ts +11 -0
- package/dist/release.js +4 -1
- package/dist/shell/app-directory.d.ts +50 -45
- package/dist/shell/app-directory.js +19 -18
- package/dist/shell/shell-module.d.ts +26 -2
- package/dist/shell/shell-module.js +51 -2
- package/dist/shell/window-manager.d.ts +5 -1
- package/dist/shell/window-manager.js +21 -2
- package/dist/shell/workbench-directory.d.ts +332 -0
- package/dist/shell/workbench-directory.js +35 -0
- package/dist/shell/workbench-host-types.d.ts +1 -1
- package/dist/shell/workbench-host.js +5 -0
- package/dist/shell/workbench-model.d.ts +3 -1
- package/dist/source/index.d.ts +6 -7
- package/dist/source/index.js +6 -7
- package/dist/source/template-push.d.ts +33 -0
- package/dist/source/template-push.js +223 -0
- package/dist/source/template-repository.d.ts +2 -0
- package/dist/source/template-repository.js +13 -0
- package/dist/source/{template-write.d.ts → template-seed.d.ts} +19 -20
- package/dist/source/template-seed.js +80 -0
- package/dist/standalone/agent-directory.d.ts +4 -0
- package/dist/standalone/agent-directory.js +4 -0
- package/dist/standalone/agents.d.ts +227 -0
- package/dist/standalone/agents.js +834 -0
- package/dist/standalone/app-builds-binding.d.ts +36 -0
- package/dist/standalone/app-builds-binding.js +119 -0
- package/dist/standalone/app-set.d.ts +91 -0
- package/dist/standalone/app-set.js +395 -0
- package/dist/standalone/app-source.d.ts +41 -0
- package/dist/standalone/app-source.js +59 -0
- package/dist/standalone/builds.d.ts +18 -0
- package/dist/standalone/builds.js +101 -0
- package/dist/standalone/computer-egress.d.ts +37 -0
- package/dist/standalone/computer-egress.js +111 -0
- package/dist/standalone/computer.d.ts +122 -0
- package/dist/standalone/computer.js +714 -0
- package/dist/standalone/install-apps-cli.d.ts +2 -0
- package/dist/standalone/install-apps-cli.js +126 -0
- package/dist/standalone/instance.d.ts +35 -0
- package/dist/standalone/instance.js +74 -0
- package/dist/standalone/media.d.ts +76 -0
- package/dist/standalone/media.js +227 -0
- package/dist/standalone/preview.d.ts +51 -0
- package/dist/standalone/preview.js +167 -0
- package/dist/standalone/registry.d.ts +102 -0
- package/dist/standalone/registry.js +193 -0
- package/dist/standalone/tenancy.d.ts +42 -0
- package/dist/standalone/tenancy.js +241 -0
- package/dist/standalone/worker.d.ts +55 -0
- package/dist/standalone/worker.js +147 -0
- package/dist/standalone/workflow-authority-readers.d.ts +16 -0
- package/dist/standalone/workflow-authority-readers.js +35 -0
- package/dist/standalone/workflow-binding.d.ts +216 -0
- package/dist/standalone/workflow-binding.js +217 -0
- package/dist/standalone/workflow-events.d.ts +46 -0
- package/dist/standalone/workflow-events.js +39 -0
- package/dist/standalone/workflow-git-capture.d.ts +7 -0
- package/dist/standalone/workflow-git-capture.js +62 -0
- package/dist/standalone/workflow-host.d.ts +955 -0
- package/dist/standalone/workflow-host.js +778 -0
- package/dist/standalone/workflow-node-capture.d.ts +13 -0
- package/dist/standalone/workflow-node-capture.js +72 -0
- package/dist/standalone/workflow-root-authority.d.ts +27 -0
- package/dist/standalone/workflow-root-authority.js +87 -0
- package/dist/standalone/workflow-schedules.d.ts +52 -0
- package/dist/standalone/workflow-schedules.js +40 -0
- package/dist/standalone/workflow-trigger-host.d.ts +1716 -0
- package/dist/standalone/workflow-trigger-host.js +52 -0
- package/dist/standalone/workflows.d.ts +713 -0
- package/dist/standalone/workflows.js +554 -0
- package/dist/tenancy/auth0.d.ts +64 -0
- package/dist/tenancy/auth0.js +198 -0
- package/dist/tenancy/cloudflare/rate-limit.d.ts +8 -0
- package/dist/tenancy/cloudflare/rate-limit.js +19 -0
- package/dist/tenancy/cloudflare/registry.d.ts +50 -0
- package/dist/tenancy/cloudflare/registry.js +301 -0
- package/dist/tenancy/cloudflare.d.ts +2 -0
- package/dist/tenancy/cloudflare.js +2 -0
- package/dist/tenancy/cold-directory.d.ts +13 -0
- package/dist/tenancy/cold-directory.js +43 -0
- package/dist/tenancy/contracts.d.ts +195 -0
- package/dist/tenancy/contracts.js +1 -0
- package/dist/tenancy/index.d.ts +19 -0
- package/dist/tenancy/index.js +156 -0
- package/dist/tenancy/owner-key.d.ts +26 -0
- package/dist/tenancy/owner-key.js +63 -0
- package/dist/tenancy/oyster.d.ts +4 -0
- package/dist/tenancy/oyster.js +25 -0
- package/dist/tenancy/registry-record.d.ts +7 -0
- package/dist/tenancy/registry-record.js +44 -0
- package/dist/tenancy/registry.d.ts +27 -0
- package/dist/tenancy/registry.js +138 -0
- package/dist/tenancy/resolve.d.ts +7 -0
- package/dist/tenancy/resolve.js +64 -0
- package/dist/workers-git.js +1 -4
- package/dist/workers.d.ts +2 -2
- package/dist/workers.js +3 -1
- package/docs/api/build-contract.md +829 -32
- package/docs/api/build.md +253 -17
- package/docs/api/modules.md +40 -32
- package/docs/api/pack.md +6 -3
- package/docs/api/shell/app-directory.md +267 -0
- package/docs/api/shell/shell-module.md +64 -3
- package/docs/api/shell/workbench-directory.md +119 -0
- package/docs/api/shell/workbench.md +19 -0
- package/docs/api/shell.md +127 -0
- package/docs/api/tenancy/auth0.md +110 -0
- package/docs/api/tenancy/cloudflare.md +221 -0
- package/docs/api/tenancy/cold-directory.md +46 -0
- package/docs/api/tenancy/owner-key.md +63 -0
- package/docs/api/tenancy/registry.md +77 -0
- package/docs/api/tenancy/resolve.md +69 -0
- package/docs/api/tenancy.md +430 -0
- package/docs/api/workers-git.md +140 -21
- package/docs/api/workers.md +15 -2
- package/docs/site/agent-quickstart.mdx +52 -55
- package/examples/standalone/worker.ts +7 -14
- package/examples/standalone/wrangler.jsonc +67 -6
- package/package.json +78 -25
- package/dist/build/r2-artifact-writer.d.ts +0 -31
- package/dist/build/r2-artifact-writer.js +0 -179
- package/dist/source/template-write.js +0 -344
- package/docs/media/architecture.mmd +0 -32
- package/docs/media/architecture.png +0 -0
- package/docs/media/bonsai-network.png +0 -0
- package/docs/media/bonsai-repository.png +0 -0
- package/examples/git/worker.ts +0 -39
- 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`\>
|