@substrat-run/adapter-cloudflare 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/LICENSE +661 -0
- package/dist/checker.d.ts +22 -0
- package/dist/checker.d.ts.map +1 -0
- package/dist/checker.js +128 -0
- package/dist/checker.js.map +1 -0
- package/dist/control-plane-do.d.ts +90 -0
- package/dist/control-plane-do.d.ts.map +1 -0
- package/dist/control-plane-do.js +279 -0
- package/dist/control-plane-do.js.map +1 -0
- package/dist/host.d.ts +34 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +234 -0
- package/dist/host.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/scope-do.d.ts +21 -0
- package/dist/scope-do.d.ts.map +1 -0
- package/dist/scope-do.js +339 -0
- package/dist/scope-do.js.map +1 -0
- package/dist/serialization.d.ts +17 -0
- package/dist/serialization.d.ts.map +1 -0
- package/dist/serialization.js +22 -0
- package/dist/serialization.js.map +1 -0
- package/dist/sql.d.ts +17 -0
- package/dist/sql.d.ts.map +1 -0
- package/dist/sql.js +24 -0
- package/dist/sql.js.map +1 -0
- package/package.json +44 -0
package/dist/host.js
ADDED
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { adminLogEntry, createTenantInput, identityLink, moduleManifest, resolvedIdentity, roleDefinition, tenant as tenantSchema, } from '@substrat-run/contracts';
|
|
2
|
+
import { ulid, } from '@substrat-run/kernel';
|
|
3
|
+
export class CloudflareScopeHost {
|
|
4
|
+
admin;
|
|
5
|
+
scopeNs;
|
|
6
|
+
cp;
|
|
7
|
+
// Registration-mechanics bookkeeping (validation only — the DO executes).
|
|
8
|
+
// Code-time, derived from the bundled modules, NOT durable directory state.
|
|
9
|
+
moduleIds = new Set();
|
|
10
|
+
operations = new Set();
|
|
11
|
+
predicateNames = new Map(); // name → module
|
|
12
|
+
withdrawn = new Map(); // operation → module
|
|
13
|
+
operationEntitlement = new Map();
|
|
14
|
+
constructor(options) {
|
|
15
|
+
this.scopeNs = options.scope;
|
|
16
|
+
this.cp = options.controlPlane.get(options.controlPlane.idFromName('control-plane'));
|
|
17
|
+
this.admin = this.buildAdmin();
|
|
18
|
+
}
|
|
19
|
+
// -- registration mechanics (validation only) -----------------------------
|
|
20
|
+
registerModule(registration) {
|
|
21
|
+
const manifest = moduleManifest.parse(registration.manifest);
|
|
22
|
+
if (this.moduleIds.has(manifest.id)) {
|
|
23
|
+
throw new Error(`module already registered: ${manifest.id}`);
|
|
24
|
+
}
|
|
25
|
+
const migrations = registration.migrations ?? [];
|
|
26
|
+
const seen = new Set();
|
|
27
|
+
for (const m of migrations) {
|
|
28
|
+
if (seen.has(m.version)) {
|
|
29
|
+
throw new Error(`duplicate migration version in ${manifest.id}: ${m.version}`);
|
|
30
|
+
}
|
|
31
|
+
seen.add(m.version);
|
|
32
|
+
}
|
|
33
|
+
const declaredConsumes = new Set(manifest.events.consumes.map((c) => c.type));
|
|
34
|
+
for (const eventType of Object.keys(registration.consumers ?? {})) {
|
|
35
|
+
if (!declaredConsumes.has(eventType)) {
|
|
36
|
+
throw new Error(`${manifest.id} registers a consumer for undeclared event type: ${eventType}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
for (const name of Object.keys(registration.predicates ?? {})) {
|
|
40
|
+
const existing = this.predicateNames.get(name);
|
|
41
|
+
if (existing) {
|
|
42
|
+
throw new Error(`guard predicate already contributed by ${existing}: ${name} (names are global)`);
|
|
43
|
+
}
|
|
44
|
+
this.predicateNames.set(name, manifest.id);
|
|
45
|
+
}
|
|
46
|
+
this.moduleIds.add(manifest.id);
|
|
47
|
+
const ownOperations = new Set(Object.keys(registration.operations ?? {}));
|
|
48
|
+
for (const name of manifest.withdraws ?? []) {
|
|
49
|
+
if (ownOperations.has(name)) {
|
|
50
|
+
throw new Error(`${manifest.id} withdraws its own operation: ${name} (a module cannot withdraw itself — just don't register it)`);
|
|
51
|
+
}
|
|
52
|
+
this.withdrawn.set(name, manifest.id);
|
|
53
|
+
this.operations.delete(name);
|
|
54
|
+
this.operationEntitlement.delete(name);
|
|
55
|
+
}
|
|
56
|
+
for (const name of Object.keys(registration.operations ?? {})) {
|
|
57
|
+
this.bindOperation(name);
|
|
58
|
+
this.operationEntitlement.set(name, manifest.entitlementKey);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
defineOperation(name, _handler) {
|
|
62
|
+
this.bindOperation(name);
|
|
63
|
+
}
|
|
64
|
+
bindOperation(name) {
|
|
65
|
+
if (this.withdrawn.has(name))
|
|
66
|
+
return; // withdrawn by another manifest — never binds
|
|
67
|
+
if (this.operations.has(name))
|
|
68
|
+
throw new Error(`operation already defined: ${name}`);
|
|
69
|
+
this.operations.add(name);
|
|
70
|
+
}
|
|
71
|
+
// -- scope lifecycle ------------------------------------------------------
|
|
72
|
+
async provisionScope(actor, input) {
|
|
73
|
+
// Fail-closed tenant gate throws out of the awaited cp call BEFORE migrate
|
|
74
|
+
// or audit, so a rejected provision creates nothing and writes no audit row.
|
|
75
|
+
const created = await this.cp.provisionScope(input.tenantId, input.scopeId, input.storageShape ?? 'A', input.jurisdiction ?? null, new Date().toISOString());
|
|
76
|
+
// Instantiate the scope DO and trigger its lazy migration.
|
|
77
|
+
await this.scopeStub(input.scopeId).migrate();
|
|
78
|
+
// Audit a real provision only; an idempotent re-provision changed nothing.
|
|
79
|
+
if (created) {
|
|
80
|
+
await this.recordAdmin(actor, 'provisionScope', { tenantId: input.tenantId, scopeId: input.scopeId }, null, { storageShape: input.storageShape ?? 'A', jurisdiction: input.jurisdiction ?? null });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async getScope(principal, tenantId, scopeId) {
|
|
84
|
+
// Lifecycle gates (control-plane.md §4.1/§4.2), the K-3 fail-closed path,
|
|
85
|
+
// evaluated durably in the ControlPlaneDO. A throw propagates here.
|
|
86
|
+
await this.cp.validateScopeAccess(tenantId, scopeId);
|
|
87
|
+
const stub = this.scopeStub(scopeId);
|
|
88
|
+
await stub.migrate();
|
|
89
|
+
const cp = this.cp;
|
|
90
|
+
const operationEntitlement = this.operationEntitlement;
|
|
91
|
+
return {
|
|
92
|
+
tenantId,
|
|
93
|
+
scopeId,
|
|
94
|
+
invoke: async (operation, input) => {
|
|
95
|
+
// Entitlement gate (§4.3): a module loads for a tenant only if the tenant
|
|
96
|
+
// holds its SKU flag. Fails closed the same way withdrawal does.
|
|
97
|
+
const requiredKey = operationEntitlement.get(operation);
|
|
98
|
+
if (requiredKey && !(await cp.tenantHoldsEntitlement(tenantId, requiredKey))) {
|
|
99
|
+
return Promise.reject(new Error(`operation not entitled: ${operation} — tenant does not hold '${requiredKey}'`));
|
|
100
|
+
}
|
|
101
|
+
return stub.invoke(operation, input, principal, tenantId, scopeId);
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
async close() {
|
|
106
|
+
// Nothing to drain: every admin write awaits its RPC to completion inline.
|
|
107
|
+
}
|
|
108
|
+
// -- admin surface --------------------------------------------------------
|
|
109
|
+
buildAdmin() {
|
|
110
|
+
const transitionScope = async (actor, action, tenantId, scopeId, from, to) => {
|
|
111
|
+
const before = await this.cp.transitionScope(tenantId, scopeId, from, to, action);
|
|
112
|
+
await this.recordAdmin(actor, action, { tenantId, scopeId }, { status: before }, { status: to });
|
|
113
|
+
};
|
|
114
|
+
const writeGrant = async (subject, permission, node, entity, expiresAt) => {
|
|
115
|
+
if (entity) {
|
|
116
|
+
await this.writeScopeTuple(node.scopeId, subject, `granted:${permission}`, `${entity.entityType}:${entity.entityId}`, expiresAt ?? null);
|
|
117
|
+
}
|
|
118
|
+
else if (node.scopeId) {
|
|
119
|
+
await this.writeScopeTuple(node.scopeId, subject, `granted:${permission}`, `scope:${node.scopeId}`, expiresAt ?? null);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
await this.cp.writeTenantTuple(node.tenantId, subject, `granted:${permission}`, `tenant:${node.tenantId}`, expiresAt ?? null);
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
return {
|
|
126
|
+
defineRole: async (actor, tenantId, role) => {
|
|
127
|
+
const parsed = roleDefinition.parse(role);
|
|
128
|
+
const before = await this.cp.defineRole(tenantId, parsed);
|
|
129
|
+
await this.recordAdmin(actor, 'defineRole', { tenantId }, before, parsed);
|
|
130
|
+
},
|
|
131
|
+
assignRole: async (actor, assignment) => {
|
|
132
|
+
const subject = `principal:${assignment.principalId}`;
|
|
133
|
+
if (assignment.node.scopeId) {
|
|
134
|
+
await this.writeScopeTuple(assignment.node.scopeId, subject, `role:${assignment.roleKey}`, `scope:${assignment.node.scopeId}`, null);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
await this.cp.writeTenantTuple(assignment.node.tenantId, subject, `role:${assignment.roleKey}`, `tenant:${assignment.node.tenantId}`, null);
|
|
138
|
+
}
|
|
139
|
+
await this.recordAdmin(actor, 'assignRole', { tenantId: assignment.node.tenantId, scopeId: assignment.node.scopeId }, null, assignment);
|
|
140
|
+
},
|
|
141
|
+
grant: async (actor, grant) => {
|
|
142
|
+
await writeGrant(`principal:${grant.principalId}`, grant.permission, grant.node, grant.entity, grant.expiresAt);
|
|
143
|
+
await this.recordAdmin(actor, 'grant', { tenantId: grant.node.tenantId, scopeId: grant.node.scopeId }, null, grant);
|
|
144
|
+
},
|
|
145
|
+
grantToOrg: async (actor, orgId, permission, node, entity) => {
|
|
146
|
+
await writeGrant(`org:${orgId}`, permission, node, entity);
|
|
147
|
+
await this.recordAdmin(actor, 'grantToOrg', { tenantId: node.tenantId, scopeId: node.scopeId }, null, { orgId, permission, node, entity });
|
|
148
|
+
},
|
|
149
|
+
addMember: async (actor, tenantId, principal, orgId) => {
|
|
150
|
+
await this.cp.writeTenantTuple(tenantId, `principal:${principal}`, 'member', `org:${orgId}`, null);
|
|
151
|
+
await this.recordAdmin(actor, 'addMember', { tenantId }, null, { principal, orgId });
|
|
152
|
+
},
|
|
153
|
+
createTenant: async (actor, input) => {
|
|
154
|
+
const parsed = createTenantInput.parse(input);
|
|
155
|
+
const created = await this.cp.createTenant(parsed.id, parsed.slug, parsed.name, new Date().toISOString());
|
|
156
|
+
// Idempotent: re-creating an existing tenant is a no-op, not audited.
|
|
157
|
+
if (!created)
|
|
158
|
+
return;
|
|
159
|
+
await this.recordAdmin(actor, 'createTenant', { tenantId: parsed.id }, null, created);
|
|
160
|
+
},
|
|
161
|
+
setTenantStatus: async (actor, tenantId, status) => {
|
|
162
|
+
const before = await this.cp.setTenantStatus(tenantId, status);
|
|
163
|
+
await this.recordAdmin(actor, 'setTenantStatus', { tenantId }, { status: before }, { status });
|
|
164
|
+
},
|
|
165
|
+
listTenants: async () => (await this.cp.listTenants()).map((t) => tenantSchema.parse(t)),
|
|
166
|
+
getTenant: async (tenantId) => {
|
|
167
|
+
const t = await this.cp.getTenant(tenantId);
|
|
168
|
+
return t ? tenantSchema.parse(t) : undefined;
|
|
169
|
+
},
|
|
170
|
+
suspendScope: async (actor, tenantId, scopeId) => transitionScope(actor, 'suspendScope', tenantId, scopeId, ['active'], 'suspended'),
|
|
171
|
+
unsuspendScope: async (actor, tenantId, scopeId) => transitionScope(actor, 'unsuspendScope', tenantId, scopeId, ['suspended'], 'active'),
|
|
172
|
+
archiveScope: async (actor, tenantId, scopeId) => transitionScope(actor, 'archiveScope', tenantId, scopeId, ['active', 'suspended'], 'archived'),
|
|
173
|
+
unarchiveScope: async (actor, tenantId, scopeId) => transitionScope(actor, 'unarchiveScope', tenantId, scopeId, ['archived'], 'active'),
|
|
174
|
+
grantEntitlement: async (actor, tenantId, entitlementKey) => {
|
|
175
|
+
const changed = await this.cp.grantEntitlement(tenantId, entitlementKey);
|
|
176
|
+
if (!changed)
|
|
177
|
+
return; // idempotent
|
|
178
|
+
await this.recordAdmin(actor, 'grantEntitlement', { tenantId }, null, { entitlementKey });
|
|
179
|
+
},
|
|
180
|
+
revokeEntitlement: async (actor, tenantId, entitlementKey) => {
|
|
181
|
+
const changed = await this.cp.revokeEntitlement(tenantId, entitlementKey);
|
|
182
|
+
if (!changed)
|
|
183
|
+
return; // nothing held, nothing changed
|
|
184
|
+
await this.recordAdmin(actor, 'revokeEntitlement', { tenantId }, { entitlementKey }, null);
|
|
185
|
+
},
|
|
186
|
+
listEntitlements: async (tenantId) => this.cp.listEntitlements(tenantId),
|
|
187
|
+
linkIdentity: async (actor, input) => {
|
|
188
|
+
const parsed = identityLink.parse(input);
|
|
189
|
+
const changed = await this.cp.linkIdentity(parsed.provider, parsed.externalId, parsed.principal, parsed.tenantId, parsed.scopeId ?? null, new Date().toISOString());
|
|
190
|
+
// Idempotent: an identity already bound is a no-op, not audited.
|
|
191
|
+
if (!changed)
|
|
192
|
+
return;
|
|
193
|
+
await this.recordAdmin(actor, 'linkIdentity', { tenantId: parsed.tenantId, scopeId: parsed.scopeId }, null, { provider: parsed.provider, externalId: parsed.externalId, principal: parsed.principal });
|
|
194
|
+
},
|
|
195
|
+
resolveIdentity: async (provider, externalId) => {
|
|
196
|
+
const row = await this.cp.resolveIdentity(provider, externalId);
|
|
197
|
+
if (!row)
|
|
198
|
+
return undefined;
|
|
199
|
+
return resolvedIdentity.parse({
|
|
200
|
+
principal: row.principal,
|
|
201
|
+
tenantId: row.tenantId,
|
|
202
|
+
scopeId: row.scopeId,
|
|
203
|
+
});
|
|
204
|
+
},
|
|
205
|
+
auditLog: async (filter) => {
|
|
206
|
+
const rows = await this.cp.auditLog(filter?.tenantId ?? null);
|
|
207
|
+
return rows.map((r) => adminLogEntry.parse(r));
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
// -- helpers --------------------------------------------------------------
|
|
212
|
+
async recordAdmin(actor, action, target, before, after) {
|
|
213
|
+
await this.cp.recordAdmin({
|
|
214
|
+
id: ulid(),
|
|
215
|
+
actor,
|
|
216
|
+
action,
|
|
217
|
+
tenantId: target.tenantId,
|
|
218
|
+
scopeId: target.scopeId ?? null,
|
|
219
|
+
vertical: target.vertical ?? null,
|
|
220
|
+
before: before ?? null,
|
|
221
|
+
after: after ?? null,
|
|
222
|
+
at: new Date().toISOString(),
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
async writeScopeTuple(scopeId, subject, relation, object, expiresAt) {
|
|
226
|
+
await this.scopeStub(scopeId).writeTuple(subject, relation, object, expiresAt);
|
|
227
|
+
}
|
|
228
|
+
scopeStub(scopeId) {
|
|
229
|
+
// Deterministic DO id in milestone 1. Production mints per-jurisdiction ids
|
|
230
|
+
// via newUniqueId (K-7) and stores the mapping in the directory — deferred.
|
|
231
|
+
return this.scopeNs.get(this.scopeNs.idFromName(scopeId));
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=host.js.map
|
package/dist/host.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@substrat-run/adapter-cloudflare` — the Durable-Object scope host (D-14).
|
|
3
|
+
*
|
|
4
|
+
* Milestone 1: the shared contract-test suites run in workerd against real
|
|
5
|
+
* Durable Objects. The adapter boundary is the scope-host contract (§5.7):
|
|
6
|
+
* everything above it is the same kernel + contracts + modules the pure adapter
|
|
7
|
+
* runs, unchanged.
|
|
8
|
+
*
|
|
9
|
+
* - CloudflareScopeHost — the coordinator (Worker isolate) implementing ScopeHost
|
|
10
|
+
* - defineScopeDO — one SQLite-backed Durable Object per scope
|
|
11
|
+
* - ControlPlaneDO — the cross-DO directory slice (roles + tenant tuples)
|
|
12
|
+
*/
|
|
13
|
+
export { CloudflareScopeHost } from './host.js';
|
|
14
|
+
export type { CloudflareScopeHostOptions } from './host.js';
|
|
15
|
+
export { defineScopeDO } from './scope-do.js';
|
|
16
|
+
export { ControlPlaneDO } from './control-plane-do.js';
|
|
17
|
+
export { OperationQueue } from './serialization.js';
|
|
18
|
+
export { doScopedSql } from './sql.js';
|
|
19
|
+
export { createDoTupleChecker } from './checker.js';
|
|
20
|
+
export type { ControlPlaneReader, DoCheckerDeps } from './checker.js';
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,YAAY,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@substrat-run/adapter-cloudflare` — the Durable-Object scope host (D-14).
|
|
3
|
+
*
|
|
4
|
+
* Milestone 1: the shared contract-test suites run in workerd against real
|
|
5
|
+
* Durable Objects. The adapter boundary is the scope-host contract (§5.7):
|
|
6
|
+
* everything above it is the same kernel + contracts + modules the pure adapter
|
|
7
|
+
* runs, unchanged.
|
|
8
|
+
*
|
|
9
|
+
* - CloudflareScopeHost — the coordinator (Worker isolate) implementing ScopeHost
|
|
10
|
+
* - defineScopeDO — one SQLite-backed Durable Object per scope
|
|
11
|
+
* - ControlPlaneDO — the cross-DO directory slice (roles + tenant tuples)
|
|
12
|
+
*/
|
|
13
|
+
export { CloudflareScopeHost } from './host.js';
|
|
14
|
+
export { defineScopeDO } from './scope-do.js';
|
|
15
|
+
export { ControlPlaneDO } from './control-plane-do.js';
|
|
16
|
+
export { OperationQueue } from './serialization.js';
|
|
17
|
+
export { doScopedSql } from './sql.js';
|
|
18
|
+
export { createDoTupleChecker } from './checker.js';
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { DurableObject } from 'cloudflare:workers';
|
|
2
|
+
import { type ModuleRegistration, type OperationHandler } from '@substrat-run/kernel';
|
|
3
|
+
/**
|
|
4
|
+
* `defineScopeDO` — one Durable Object per scope, the CF analogue of a single
|
|
5
|
+
* `SqliteScopeHost` scope runtime (D-14). It closes over a CODE-TIME module set
|
|
6
|
+
* (a DO cannot receive handler closures over RPC), builds the kernel spine in
|
|
7
|
+
* its own SQLite, and runs each operation inside `ctx.storage.transaction` — the
|
|
8
|
+
* async transaction API that commits on success and rolls back on a throw even
|
|
9
|
+
* across an `await` (verified in workerd), the direct analogue of the pure
|
|
10
|
+
* adapter's `BEGIN IMMEDIATE … COMMIT/ROLLBACK`.
|
|
11
|
+
*
|
|
12
|
+
* The coordinator (`CloudflareScopeHost`) owns the directory, the entitlement
|
|
13
|
+
* gate, and audit; the DO owns per-scope execution: migrations, guards,
|
|
14
|
+
* handlers, emits, the outbox→consumer dispatch loop, entity links, and local
|
|
15
|
+
* permission evaluation (scope tuples here, tenant tuples via ControlPlaneDO).
|
|
16
|
+
*/
|
|
17
|
+
export interface ScopeDoEnv {
|
|
18
|
+
CONTROL_PLANE: DurableObjectNamespace;
|
|
19
|
+
}
|
|
20
|
+
export declare function defineScopeDO(modules: ModuleRegistration[], bareOps: Record<string, OperationHandler<never, unknown>>): new (ctx: DurableObjectState, env: ScopeDoEnv) => DurableObject;
|
|
21
|
+
//# sourceMappingURL=scope-do.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-do.d.ts","sourceRoot":"","sources":["../src/scope-do.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAgBnD,OAAO,EAIL,KAAK,kBAAkB,EAEvB,KAAK,gBAAgB,EAGtB,MAAM,sBAAsB,CAAC;AAK9B;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,sBAAsB,CAAC;CACvC;AAkFD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,kBAAkB,EAAE,EAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,GACxD,KAAK,GAAG,EAAE,kBAAkB,EAAE,GAAG,EAAE,UAAU,KAAK,aAAa,CA8WjE"}
|