@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.
- package/LICENSE +21 -0
- package/README.md +1134 -2
- package/dist/agents.d.ts +114 -0
- package/dist/agents.js +322 -0
- package/dist/app-builds.d.ts +210 -0
- package/dist/app-builds.js +499 -0
- package/dist/app-sandbox.d.ts +2 -0
- package/dist/app-sandbox.js +2 -0
- package/dist/app-sources.d.ts +31 -0
- package/dist/app-sources.js +370 -0
- package/dist/app-storage.d.ts +141 -0
- package/dist/app-storage.js +281 -0
- package/dist/apps/gate.d.ts +105 -0
- package/dist/apps/gate.js +273 -0
- package/dist/apps/index.d.ts +5 -0
- package/dist/apps/index.js +5 -0
- package/dist/apps/installation.d.ts +248 -0
- package/dist/apps/installation.js +307 -0
- package/dist/apps/operations.d.ts +8 -0
- package/dist/apps/operations.js +98 -0
- package/dist/apps/tools.d.ts +33 -0
- package/dist/apps/tools.js +17 -0
- package/dist/auth.d.ts +11 -0
- package/dist/auth.js +93 -0
- package/dist/backend-request.d.ts +3 -0
- package/dist/backend-request.js +53 -0
- package/dist/build/artifact-writer.d.ts +40 -0
- package/dist/build/artifact-writer.js +181 -0
- package/dist/build/build-jobs.d.ts +128 -0
- package/dist/build/build-jobs.js +203 -0
- package/dist/build/build-policy.d.ts +10 -0
- package/dist/build/build-policy.js +10 -0
- package/dist/build/build-step.d.ts +37 -0
- package/dist/build/build-step.js +28 -0
- package/dist/build/bundled-html.d.ts +7 -0
- package/dist/build/bundled-html.js +64 -0
- 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 +28170 -0
- package/dist/build/content-objects.d.ts +37 -0
- package/dist/build/content-objects.js +53 -0
- package/dist/build/definition-emission.d.ts +34 -0
- package/dist/build/definition-emission.js +201 -0
- package/dist/build/effect.d.ts +249 -0
- package/dist/build/effect.js +436 -0
- package/dist/build/git-environment.d.ts +9 -0
- package/dist/build/git-environment.js +60 -0
- package/dist/build/html-recipe.d.ts +20 -0
- package/dist/build/html-recipe.js +51 -0
- package/dist/build/local-build.d.ts +67 -0
- package/dist/build/local-build.js +1128 -0
- package/dist/build/snapshot-package-store.d.ts +12 -0
- package/dist/build/snapshot-package-store.js +36 -0
- package/dist/build/snapshot-program-scripts.d.ts +6 -0
- package/dist/build/snapshot-program-scripts.js +2 -0
- 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 +828 -0
- package/dist/build/submission-contract.js +180 -0
- package/dist/build/workspace-build.d.ts +55 -0
- package/dist/build/workspace-build.js +200 -0
- package/dist/build-contract.d.ts +7 -0
- package/dist/build-contract.js +7 -0
- package/dist/build-egress.d.ts +62 -0
- package/dist/build-egress.js +148 -0
- package/dist/build-jobs.d.ts +2 -0
- package/dist/build-jobs.js +2 -0
- package/dist/build.d.ts +12 -0
- package/dist/build.js +14 -0
- package/dist/capability-descriptor.d.ts +46 -0
- package/dist/capability-descriptor.js +51 -0
- package/dist/catalog-frame.d.ts +39 -0
- package/dist/catalog-frame.js +72 -0
- package/dist/cause-class.d.ts +19 -0
- package/dist/cause-class.js +54 -0
- package/dist/cloudflare.d.ts +123 -0
- package/dist/cloudflare.js +391 -0
- package/dist/computer-terminal.d.ts +38 -0
- package/dist/computer-terminal.js +410 -0
- package/dist/computer.d.ts +60 -0
- package/dist/computer.js +33 -0
- package/dist/event-recipients.d.ts +57 -0
- package/dist/event-recipients.js +144 -0
- package/dist/facet-invocation.d.ts +4 -0
- package/dist/facet-invocation.js +45 -0
- package/dist/files.d.ts +42 -0
- package/dist/files.js +123 -0
- package/dist/frame-binding-wire-script.d.ts +2 -0
- package/dist/frame-binding-wire-script.js +1 -0
- package/dist/frame-binding-wire.d.ts +28 -0
- package/dist/frame-binding-wire.js +54 -0
- package/dist/git-admission.d.ts +52 -0
- package/dist/git-admission.js +188 -0
- package/dist/git-auth.d.ts +11 -0
- package/dist/git-auth.js +27 -0
- package/dist/git-door.d.ts +35 -0
- package/dist/git-door.js +108 -0
- package/dist/git-journal.d.ts +31 -0
- package/dist/git-journal.js +188 -0
- package/dist/git.d.ts +31 -0
- package/dist/git.js +64 -0
- package/dist/guest-policy.d.ts +9 -0
- package/dist/guest-policy.js +13 -0
- package/dist/host.d.ts +244 -0
- package/dist/host.js +1043 -0
- package/dist/index.d.ts +166 -0
- package/dist/index.js +320 -0
- package/dist/installation-consent.d.ts +79 -0
- package/dist/installation-consent.js +82 -0
- package/dist/internal/background-origins.d.ts +3 -0
- package/dist/internal/background-origins.js +8 -0
- package/dist/internal/delivery.d.ts +12 -0
- package/dist/internal/delivery.js +167 -0
- package/dist/internal/host-gate.d.ts +14 -0
- package/dist/internal/host-gate.js +62 -0
- package/dist/internal/registry-installations.d.ts +6 -0
- package/dist/internal/registry-installations.js +12 -0
- package/dist/invocation.d.ts +251 -0
- package/dist/invocation.js +377 -0
- package/dist/keys.d.ts +48 -0
- package/dist/keys.js +52 -0
- package/dist/mcp-owner.d.ts +27 -0
- package/dist/mcp-owner.js +155 -0
- package/dist/mcp.d.ts +89 -0
- package/dist/mcp.js +429 -0
- package/dist/media.d.ts +23 -0
- package/dist/media.js +12 -0
- package/dist/pack.d.ts +79 -0
- package/dist/pack.js +151 -0
- package/dist/page/capabilities.d.ts +23 -0
- package/dist/page/capabilities.js +256 -0
- package/dist/page/computer-handles.d.ts +79 -0
- package/dist/page/computer-handles.js +44 -0
- package/dist/page/gill-observation.d.ts +4 -0
- package/dist/page/gill-observation.js +31 -0
- package/dist/page/lifetime.d.ts +6 -0
- package/dist/page/lifetime.js +19 -0
- package/dist/page/mount.d.ts +163 -0
- package/dist/page/mount.js +390 -0
- package/dist/page/storage.d.ts +3 -0
- package/dist/page/storage.js +82 -0
- package/dist/page/terminal.d.ts +5 -0
- package/dist/page/terminal.js +7 -0
- package/dist/page/window-launch.d.ts +18 -0
- package/dist/page/window-launch.js +11 -0
- package/dist/page-script.d.ts +14 -0
- package/dist/page-script.js +5 -0
- package/dist/r2-files.d.ts +3 -0
- package/dist/r2-files.js +79 -0
- package/dist/release.d.ts +83 -0
- package/dist/release.js +167 -0
- package/dist/root-data.d.ts +86 -0
- package/dist/root-data.js +69 -0
- package/dist/shell/app-directory.d.ts +542 -0
- package/dist/shell/app-directory.js +199 -0
- package/dist/shell/browser-actions.d.ts +7 -0
- package/dist/shell/browser-actions.js +56 -0
- package/dist/shell/command-host.d.ts +112 -0
- package/dist/shell/command-host.js +502 -0
- package/dist/shell/commands.d.ts +25 -0
- package/dist/shell/commands.js +78 -0
- package/dist/shell/index.d.ts +8 -0
- package/dist/shell/index.js +8 -0
- package/dist/shell/keys.d.ts +41 -0
- package/dist/shell/keys.js +134 -0
- package/dist/shell/shell-module.d.ts +55 -0
- package/dist/shell/shell-module.js +86 -0
- package/dist/shell/window-manager.d.ts +124 -0
- package/dist/shell/window-manager.js +711 -0
- package/dist/shell/workbench-contract.d.ts +68 -0
- package/dist/shell/workbench-contract.js +1 -0
- 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 +96 -0
- package/dist/shell/workbench-host-types.js +1 -0
- package/dist/shell/workbench-host.d.ts +34 -0
- package/dist/shell/workbench-host.js +347 -0
- package/dist/shell/workbench-model.d.ts +192 -0
- package/dist/shell/workbench-model.js +53 -0
- package/dist/shell/workbench.d.ts +4 -0
- package/dist/shell/workbench.js +2 -0
- package/dist/source/fork.d.ts +27 -0
- package/dist/source/fork.js +46 -0
- package/dist/source/index.d.ts +10 -0
- package/dist/source/index.js +10 -0
- package/dist/source/seed-receipt.d.ts +53 -0
- package/dist/source/seed-receipt.js +18 -0
- package/dist/source/team-source.d.ts +32 -0
- package/dist/source/team-source.js +42 -0
- package/dist/source/template-push.d.ts +33 -0
- package/dist/source/template-push.js +223 -0
- package/dist/source/template-repository.d.ts +4 -0
- package/dist/source/template-repository.js +21 -0
- package/dist/source/template-seed.d.ts +68 -0
- 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 +220 -0
- package/dist/standalone/agents.js +795 -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 +931 -0
- package/dist/standalone/workflow-host.js +751 -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 +1694 -0
- package/dist/standalone/workflow-trigger-host.js +52 -0
- package/dist/standalone/workflows.d.ts +657 -0
- package/dist/standalone/workflows.js +554 -0
- package/dist/storage-frame.d.ts +64 -0
- package/dist/storage-frame.js +28 -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/tenant.d.ts +81 -0
- package/dist/tenant.js +71 -0
- package/dist/testing/capabilities.d.ts +29 -0
- package/dist/testing/capabilities.js +130 -0
- package/dist/testing/catalog.d.ts +3 -0
- package/dist/testing/catalog.js +53 -0
- package/dist/testing/index.d.ts +10 -0
- package/dist/testing/index.js +10 -0
- package/dist/testing/installation.d.ts +11 -0
- package/dist/testing/installation.js +25 -0
- package/dist/testing/native-worker.d.ts +21 -0
- package/dist/testing/native-worker.js +106 -0
- package/dist/testing/worker.d.ts +18 -0
- package/dist/testing/worker.js +67 -0
- package/dist/testing/workers-runtime.d.ts +24 -0
- package/dist/testing/workers-runtime.js +33 -0
- package/dist/webhook-delivery.d.ts +14 -0
- package/dist/webhook-delivery.js +17 -0
- package/dist/workers-git.d.ts +285 -0
- package/dist/workers-git.js +1174 -0
- package/dist/workers.d.ts +352 -0
- package/dist/workers.js +868 -0
- package/docs/api/README.md +82 -0
- package/docs/api/agents.md +332 -0
- package/docs/api/app-storage.md +209 -0
- package/docs/api/apps.md +1375 -0
- package/docs/api/auth.md +63 -0
- package/docs/api/build-contract.md +1304 -0
- package/docs/api/build.md +1712 -0
- package/docs/api/cloudflare.md +421 -0
- package/docs/api/computer.md +203 -0
- package/docs/api/files.md +117 -0
- package/docs/api/git.md +470 -0
- package/docs/api/host.md +1328 -0
- package/docs/api/index.md +430 -0
- package/docs/api/invocation.md +738 -0
- package/docs/api/keys.md +175 -0
- package/docs/api/mcp.md +301 -0
- package/docs/api/media.md +40 -0
- package/docs/api/modules.md +50 -0
- package/docs/api/pack.md +141 -0
- package/docs/api/page/mount.md +298 -0
- package/docs/api/root-data.md +111 -0
- package/docs/api/shell/app-directory.md +599 -0
- package/docs/api/shell/command-host.md +224 -0
- package/docs/api/shell/commands.md +197 -0
- package/docs/api/shell/keys.md +183 -0
- package/docs/api/shell/shell-module.md +204 -0
- package/docs/api/shell/window-manager.md +267 -0
- package/docs/api/shell/workbench-directory.md +119 -0
- package/docs/api/shell/workbench.md +205 -0
- package/docs/api/shell.md +1915 -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/tenant.md +194 -0
- package/docs/api/workers-git.md +1646 -0
- package/docs/api/workers.md +1691 -0
- package/docs/site/agent-quickstart.mdx +346 -0
- package/examples/standalone/worker.ts +7 -0
- package/examples/standalone/wrangler.jsonc +82 -0
- 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)
|