@cat-factory/gatekeeper-worker 0.5.0 → 0.6.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 +43 -2
- package/dist/arguments.d.ts +18 -0
- package/dist/arguments.d.ts.map +1 -0
- package/dist/arguments.js +75 -0
- package/dist/arguments.js.map +1 -0
- package/dist/capability.d.ts +10 -0
- package/dist/capability.d.ts.map +1 -1
- package/dist/capability.js +39 -1
- package/dist/capability.js.map +1 -1
- package/dist/env.d.ts +10 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +12 -0
- package/dist/env.js.map +1 -1
- package/dist/errors.d.ts +20 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +11 -0
- package/dist/errors.js.map +1 -1
- package/dist/gatekeeper.d.ts +31 -1
- package/dist/gatekeeper.d.ts.map +1 -1
- package/dist/gatekeeper.js +38 -8
- package/dist/gatekeeper.js.map +1 -1
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/os/discoverability.d.ts +13 -1
- package/dist/os/discoverability.d.ts.map +1 -1
- package/dist/os/discoverability.js +23 -6
- package/dist/os/discoverability.js.map +1 -1
- package/dist/os/exports.d.ts +27 -0
- package/dist/os/exports.d.ts.map +1 -1
- package/dist/os/exports.js +25 -0
- package/dist/os/exports.js.map +1 -1
- package/dist/os/hook-controller.d.ts +14 -0
- package/dist/os/hook-controller.d.ts.map +1 -0
- package/dist/os/hook-controller.js +53 -0
- package/dist/os/hook-controller.js.map +1 -0
- package/dist/os/hooks.d.ts +200 -0
- package/dist/os/hooks.d.ts.map +1 -0
- package/dist/os/hooks.js +253 -0
- package/dist/os/hooks.js.map +1 -0
- package/dist/os/protocol.d.ts +43 -0
- package/dist/os/protocol.d.ts.map +1 -1
- package/dist/os/queue.d.ts +9 -0
- package/dist/os/queue.d.ts.map +1 -1
- package/dist/os/queue.js +44 -1
- package/dist/os/queue.js.map +1 -1
- package/dist/os/resource-core.d.ts +25 -10
- package/dist/os/resource-core.d.ts.map +1 -1
- package/dist/os/resource-core.js +31 -14
- package/dist/os/resource-core.js.map +1 -1
- package/dist/os/resource.d.ts.map +1 -1
- package/dist/os/resource.js +7 -1
- package/dist/os/resource.js.map +1 -1
- package/dist/os/session-types.d.ts.map +1 -1
- package/dist/os/session-types.js +28 -0
- package/dist/os/session-types.js.map +1 -1
- package/dist/os/sharing.d.ts +35 -0
- package/dist/os/sharing.d.ts.map +1 -0
- package/dist/os/sharing.js +135 -0
- package/dist/os/sharing.js.map +1 -0
- package/dist/os/vendor.d.ts +1 -1
- package/dist/os/vendor.d.ts.map +1 -1
- package/dist/os/vendor.js +8 -1
- package/dist/os/vendor.js.map +1 -1
- package/dist/state.d.ts +80 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +234 -6
- package/dist/state.js.map +1 -1
- package/dist/worker.d.ts.map +1 -1
- package/dist/worker.js +4 -1
- package/dist/worker.js.map +1 -1
- package/package.json +3 -3
package/dist/state.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// The Gatekeeper's durable state: one object per paired workspace, holding
|
|
2
|
-
//
|
|
1
|
+
// The Gatekeeper's durable state: one object per paired workspace, holding what a stateless Worker
|
|
2
|
+
// cannot.
|
|
3
3
|
//
|
|
4
4
|
// 1. WHICH DELIVERIES HAVE BEEN SEEN. The platform's terminal run events are at-least-once and
|
|
5
5
|
// a replay re-stamps `sentAt`, so two deliveries of one transition are not byte-identical
|
|
@@ -13,6 +13,15 @@
|
|
|
13
13
|
// 4. THE MINTED PER-ACTOR KEYS. `POST /api/v1/keys` returns a raw secret EXACTLY ONCE; a
|
|
14
14
|
// Gatekeeper that forgets it has minted one mints another on the next call and leaves a
|
|
15
15
|
// trail of live credentials nobody revokes.
|
|
16
|
+
// 5. THE ENABLED HOOKS. A workspace enables one in a session and is pushed to from the webhook,
|
|
17
|
+
// which is a different invocation entirely, so the registration cannot live in either. This
|
|
18
|
+
// is also the object every delivery already wakes, which is why the fan-out runs HERE rather
|
|
19
|
+
// than in the receiver: the live half of a registration is a stub, and a stub can only be
|
|
20
|
+
// held where it was handed over.
|
|
21
|
+
// 6. WHICH ACCOUNTS THIS DEPLOYMENT MINTED. One boolean, for one question: `addObserver` is
|
|
22
|
+
// handed an account id by a verifier and has to know whether it is an account of ours before
|
|
23
|
+
// resolving a tier for it. Without this the tier lookup answers for an id it has never seen,
|
|
24
|
+
// and a viewer from another vendor entirely measures up as identical to the owner.
|
|
16
25
|
//
|
|
17
26
|
// The dedupe marker and the effect it guards are written TOGETHER, in one multi-key `put`, which
|
|
18
27
|
// is the reason `applyDelivery` lives here rather than being composed from two calls in the
|
|
@@ -28,11 +37,14 @@
|
|
|
28
37
|
// not acceptable for your deployment, mint per call and revoke after, at the cost of a key row
|
|
29
38
|
// per operation.
|
|
30
39
|
import { DurableObject } from 'cloudflare:workers';
|
|
40
|
+
import { applyPushOutcome, holdInitiator, pushToHook, registrationKey, releaseInitiator, } from './os/hooks.js';
|
|
31
41
|
const DELIVERY_PREFIX = 'delivery:';
|
|
32
42
|
const CARD_PREFIX = 'card:';
|
|
33
43
|
const KEY_PREFIX = 'key:';
|
|
34
44
|
const CLAIM_PREFIX = 'mint:';
|
|
35
45
|
const RUN_PREFIX = 'run:';
|
|
46
|
+
const HOOK_PREFIX = 'hook:';
|
|
47
|
+
const ACCOUNT_PREFIX = 'account:';
|
|
36
48
|
/**
|
|
37
49
|
* How long a `deliveryId` is remembered for dedupe purposes.
|
|
38
50
|
*
|
|
@@ -56,6 +68,17 @@ const MINT_CLAIM_TTL_MS = 30_000;
|
|
|
56
68
|
/** How often the prune alarm runs. */
|
|
57
69
|
const PRUNE_INTERVAL_MS = 24 * 60 * 60 * 1000;
|
|
58
70
|
export class GatekeeperState extends DurableObject {
|
|
71
|
+
/**
|
|
72
|
+
* The live half of every enabled hook: the workspace's initiator, held past the call it came on.
|
|
73
|
+
*
|
|
74
|
+
* IN MEMORY, and there is no version of this that is not. A stub is a reference into another
|
|
75
|
+
* Worker, so it cannot be written to storage, and an object that is evicted between two
|
|
76
|
+
* deliveries keeps its records and loses this map. That is why a push with no entry here is
|
|
77
|
+
* COUNTED as missed on the record rather than skipped: the count is what a workspace reads to
|
|
78
|
+
* discover its hook went quiet, and the projection it was pushing is still there to reconcile
|
|
79
|
+
* against.
|
|
80
|
+
*/
|
|
81
|
+
#initiators = new Map();
|
|
59
82
|
/**
|
|
60
83
|
* Take one delivery: dedupe and act, as ONE durable write.
|
|
61
84
|
*
|
|
@@ -70,32 +93,56 @@ export class GatekeeperState extends DurableObject {
|
|
|
70
93
|
return { applied: false, reason: 'duplicate' };
|
|
71
94
|
}
|
|
72
95
|
const writes = { [marker]: now };
|
|
96
|
+
const pushes = [];
|
|
73
97
|
if (effect.kind === 'open') {
|
|
74
98
|
writes[`${CARD_PREFIX}${effect.card.cardId}`] = effect.card;
|
|
99
|
+
pushes.push({ topic: 'approval_card', cardId: effect.card.cardId });
|
|
75
100
|
}
|
|
76
101
|
else if (effect.kind === 'supersede') {
|
|
77
102
|
const key = `${CARD_PREFIX}${effect.cardId}`;
|
|
78
103
|
const card = await this.ctx.storage.get(key);
|
|
79
104
|
if (card !== undefined && card.resolvedAt === null) {
|
|
80
105
|
writes[key] = { ...card, resolvedAt: now, resolution: 'superseded' };
|
|
106
|
+
pushes.push({ topic: 'approval_card', cardId: effect.cardId });
|
|
81
107
|
}
|
|
82
108
|
}
|
|
83
109
|
else if (effect.kind === 'run-event') {
|
|
84
110
|
writes[`${RUN_PREFIX}${effect.state.runId}`] = { ...effect.state, updatedAt: now };
|
|
111
|
+
pushes.push({ topic: 'run_event', runId: effect.state.runId });
|
|
85
112
|
// A run that ended answers nothing more, so its open cards stop asking. Doing it here rather
|
|
86
113
|
// than lazily at read time is what keeps the inbox honest for an OS that renders the list
|
|
87
|
-
// without asking this Gatekeeper anything else
|
|
114
|
+
// without asking this Gatekeeper anything else, and each settlement is pushed for the same
|
|
115
|
+
// reason: a hook that heard only the run event would leave its gadget showing decisions
|
|
116
|
+
// nobody can answer any more.
|
|
88
117
|
if (effect.state.terminal) {
|
|
89
118
|
for (const [key, card] of await this.#openCardsFor(effect.state.runId)) {
|
|
90
|
-
writes[key] = {
|
|
119
|
+
writes[key] = {
|
|
120
|
+
...card,
|
|
121
|
+
resolvedAt: now,
|
|
122
|
+
resolution: `run_${effect.state.event}`,
|
|
123
|
+
};
|
|
124
|
+
pushes.push({ topic: 'approval_card', cardId: card.cardId });
|
|
91
125
|
}
|
|
92
126
|
}
|
|
93
127
|
}
|
|
94
128
|
await this.ctx.storage.put(writes);
|
|
95
129
|
await this.#ensureAlarm(now);
|
|
96
|
-
return {
|
|
130
|
+
return {
|
|
131
|
+
applied: true,
|
|
132
|
+
effect: effect.kind === 'none' ? 'none' : effectName(effect.kind),
|
|
133
|
+
pushes,
|
|
134
|
+
};
|
|
97
135
|
}
|
|
98
|
-
/**
|
|
136
|
+
/**
|
|
137
|
+
* Settle a card this Gatekeeper answered. A card already settled keeps its first resolution.
|
|
138
|
+
*
|
|
139
|
+
* The settlement is pushed before this returns, which is the opposite disposition from the
|
|
140
|
+
* webhook receiver's and for the reason that separates the two callers. There the fan-out is
|
|
141
|
+
* deferred because the platform's retry is waiting on the acknowledgement and would re-drive a
|
|
142
|
+
* delivery this Gatekeeper has already committed; here the caller is the session that just
|
|
143
|
+
* answered the card, nothing is retrying it, and a push bounded by its own per-hook deadline
|
|
144
|
+
* costs that one call rather than the record.
|
|
145
|
+
*/
|
|
99
146
|
async resolveCard(cardId, resolution, now) {
|
|
100
147
|
const key = `${CARD_PREFIX}${cardId}`;
|
|
101
148
|
const card = await this.ctx.storage.get(key);
|
|
@@ -103,6 +150,7 @@ export class GatekeeperState extends DurableObject {
|
|
|
103
150
|
return card ?? null;
|
|
104
151
|
const resolved = { ...card, resolvedAt: now, resolution };
|
|
105
152
|
await this.ctx.storage.put(key, resolved);
|
|
153
|
+
await this.dispatchHooks([{ topic: 'approval_card', cardId }], now);
|
|
106
154
|
return resolved;
|
|
107
155
|
}
|
|
108
156
|
async getCard(cardId) {
|
|
@@ -118,6 +166,154 @@ export class GatekeeperState extends DurableObject {
|
|
|
118
166
|
const rows = await this.ctx.storage.list({ prefix: RUN_PREFIX });
|
|
119
167
|
return [...rows.values()].sort((a, b) => b.updatedAt - a.updatedAt);
|
|
120
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* The workspace enabled a hook: store the registration, and hold the live half beside it.
|
|
171
|
+
*
|
|
172
|
+
* The counters of an existing registration SURVIVE a re-enable. A workspace re-arms a hook
|
|
173
|
+
* exactly when it noticed one had gone quiet, and the number that told it so is `missed`;
|
|
174
|
+
* zeroing it on the way back up would delete the evidence at the one moment it is being acted
|
|
175
|
+
* on. What is replaced is the initiator, which the contract asks for by name.
|
|
176
|
+
*/
|
|
177
|
+
async enableHook(record, initiator) {
|
|
178
|
+
const key = `${HOOK_PREFIX}${registrationKey(record)}`;
|
|
179
|
+
const existing = await this.ctx.storage.get(key);
|
|
180
|
+
// The record lands FIRST, so a failure between the two halves leaves the one that reports
|
|
181
|
+
// itself: a registration with no live initiator counts every delivery as missed, where a live
|
|
182
|
+
// initiator with no registration is a stub nothing will ever push to and nothing can see.
|
|
183
|
+
await this.ctx.storage.put(key, {
|
|
184
|
+
...record,
|
|
185
|
+
deliveries: existing?.deliveries ?? record.deliveries,
|
|
186
|
+
missed: existing?.missed ?? record.missed,
|
|
187
|
+
failures: existing?.failures ?? record.failures,
|
|
188
|
+
lastDeliveryAt: existing?.lastDeliveryAt ?? record.lastDeliveryAt,
|
|
189
|
+
lastError: existing?.lastError ?? record.lastError,
|
|
190
|
+
});
|
|
191
|
+
// A re-bind arrives under a fresh hook id and replaces the row (see `registrationKey`), so the
|
|
192
|
+
// id it displaced is one nothing can reach any more: its hold on the workspace's end of a
|
|
193
|
+
// connection is released here or never.
|
|
194
|
+
if (existing !== undefined && existing.hookId !== record.hookId) {
|
|
195
|
+
this.#replaceInitiator(existing.hookId, undefined);
|
|
196
|
+
}
|
|
197
|
+
this.#replaceInitiator(record.hookId, holdInitiator(initiator));
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* The workspace withdrew a hook: both halves go, which is the permanent clean-up asked for.
|
|
201
|
+
*
|
|
202
|
+
* Found BY HOOK ID rather than addressed by it, because the row is keyed on the target while the
|
|
203
|
+
* controller a workspace persisted names the id it was bound under. A controller whose row was
|
|
204
|
+
* replaced by a later bind from the same gadget finds nothing and settles for releasing its own
|
|
205
|
+
* half, which is the right answer: it is being asked to withdraw a registration that a re-arm
|
|
206
|
+
* has already superseded, and deleting the successor's row would silence a live hook.
|
|
207
|
+
*/
|
|
208
|
+
async disableHook(hookId) {
|
|
209
|
+
this.#replaceInitiator(hookId, undefined);
|
|
210
|
+
const rows = await this.ctx.storage.list({ prefix: HOOK_PREFIX });
|
|
211
|
+
for (const [key, record] of rows) {
|
|
212
|
+
if (record.hookId === hookId)
|
|
213
|
+
await this.ctx.storage.delete(key);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* The hooks enabled for one account, newest first, each with whether its live half survives.
|
|
218
|
+
*
|
|
219
|
+
* Scoped to the account rather than answering the object's whole set: a session reads this, and
|
|
220
|
+
* one account's gadget bindings are not another's to enumerate.
|
|
221
|
+
*/
|
|
222
|
+
async listHooks(accountId) {
|
|
223
|
+
const rows = await this.ctx.storage.list({ prefix: HOOK_PREFIX });
|
|
224
|
+
return [...rows.values()]
|
|
225
|
+
.filter((record) => record.accountId === accountId)
|
|
226
|
+
.sort((a, b) => b.enabledAt - a.enabledAt)
|
|
227
|
+
.map((record) => ({ ...record, live: this.#initiators.has(record.hookId) }));
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Push what a change produced to every hook registered for each payload's topic.
|
|
231
|
+
*
|
|
232
|
+
* Called AFTER the write it reports has committed, never as part of it: the card is the durable
|
|
233
|
+
* truth and the push is the accelerator over it, so an outbound call that hangs or refuses costs
|
|
234
|
+
* a notification and never the record of what the deployment reported. Each registration is
|
|
235
|
+
* pushed independently and concurrently, and every outcome lands on that registration's own
|
|
236
|
+
* counters, because one workspace's broken gadget must not decide whether another's hook fires
|
|
237
|
+
* or how long it waits to.
|
|
238
|
+
*/
|
|
239
|
+
async dispatchHooks(pushes, now) {
|
|
240
|
+
const report = { delivered: 0, stale: 0, failed: 0 };
|
|
241
|
+
if (pushes.length === 0)
|
|
242
|
+
return report;
|
|
243
|
+
const rows = [...(await this.ctx.storage.list({ prefix: HOOK_PREFIX }))];
|
|
244
|
+
// Every payload is resolved BEFORE any push starts, rather than as each one comes up. The two
|
|
245
|
+
// phases read the same either way, and interleaving them would leave a push in flight across
|
|
246
|
+
// the next `#payloadFor` await with nothing yet attached to its rejection: a storage failure in
|
|
247
|
+
// that window is an unhandled rejection instead of the outcome it should have been.
|
|
248
|
+
const planned = [];
|
|
249
|
+
for (const target of pushes) {
|
|
250
|
+
const registered = rows.filter(([, record]) => record.topic === target.topic);
|
|
251
|
+
// Read once per target rather than once per hook, and not at all for a topic nothing is
|
|
252
|
+
// registered for.
|
|
253
|
+
if (registered.length === 0)
|
|
254
|
+
continue;
|
|
255
|
+
const payload = await this.#payloadFor(target);
|
|
256
|
+
if (payload === null)
|
|
257
|
+
continue;
|
|
258
|
+
for (const [key, record] of registered)
|
|
259
|
+
planned.push({ payload, key, record });
|
|
260
|
+
}
|
|
261
|
+
const work = planned.map((push) => this.#pushOne(push.payload, push.key, push.record, now));
|
|
262
|
+
for (const outcome of await Promise.all(work)) {
|
|
263
|
+
if (outcome === 'delivered')
|
|
264
|
+
report.delivered += 1;
|
|
265
|
+
else if (outcome === 'stale')
|
|
266
|
+
report.stale += 1;
|
|
267
|
+
else
|
|
268
|
+
report.failed += 1;
|
|
269
|
+
}
|
|
270
|
+
return report;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Push to one registration, then fold the outcome onto the row AS IT STANDS.
|
|
274
|
+
*
|
|
275
|
+
* The re-read is the point. A push awaits a call into another Worker, and a non-storage await
|
|
276
|
+
* opens this object's input gate, so by the time it resolves a concurrent `disableHook` may have
|
|
277
|
+
* removed the row and a concurrent delivery may have moved its counters. Writing back the
|
|
278
|
+
* snapshot the push was described from resurrected the withdrawn registration (permanently not
|
|
279
|
+
* live, counting a miss against every later delivery) and discarded the sibling's increments.
|
|
280
|
+
* Reading and writing with no await between them is what makes the fold atomic: a storage
|
|
281
|
+
* operation holds the gate closed, so nothing is delivered in the gap.
|
|
282
|
+
*
|
|
283
|
+
* A row that has GONE, or that a re-arm has replaced with a different hook id, is one this push
|
|
284
|
+
* is no longer about, so its outcome is reported and not recorded.
|
|
285
|
+
*/
|
|
286
|
+
async #pushOne(payload, key, record, now) {
|
|
287
|
+
const result = await pushToHook(payload, record, this.#initiators.get(record.hookId));
|
|
288
|
+
const current = await this.ctx.storage.get(key);
|
|
289
|
+
if (current !== undefined && current.hookId === record.hookId) {
|
|
290
|
+
await this.ctx.storage.put(key, applyPushOutcome(current, result, now));
|
|
291
|
+
}
|
|
292
|
+
return result.outcome;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Remember that this deployment minted an account.
|
|
296
|
+
*
|
|
297
|
+
* The one thing an account id has to be checkable for, and the reason it is the only account
|
|
298
|
+
* state here: `addObserver` is handed an id by a verifier and has to decide whether this
|
|
299
|
+
* Gatekeeper has ever heard of it. Nothing else consults this, because nothing else needs to. A
|
|
300
|
+
* session's account id rides `ctx.props` on a stub the workspace holds, so it was minted here by
|
|
301
|
+
* construction, and re-deriving that on every call would be a lookup with no question behind it.
|
|
302
|
+
*/
|
|
303
|
+
async recordAccount(accountId, now) {
|
|
304
|
+
await this.ctx.storage.put(`${ACCOUNT_PREFIX}${accountId}`, now);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Whether this deployment minted the named account.
|
|
308
|
+
*
|
|
309
|
+
* Never pruned, and that is deliberate rather than an omission: the workspace holds the account
|
|
310
|
+
* stub for as long as it likes, and an id whose row expired would read as an account this
|
|
311
|
+
* Gatekeeper never made. Revoking an account's keys does not remove it either, because what was
|
|
312
|
+
* revoked is a credential and what is asked here is a fact about who exists.
|
|
313
|
+
*/
|
|
314
|
+
async hasAccount(accountId) {
|
|
315
|
+
return (await this.ctx.storage.get(`${ACCOUNT_PREFIX}${accountId}`)) !== undefined;
|
|
316
|
+
}
|
|
121
317
|
/**
|
|
122
318
|
* Either the actor's existing key, or an exclusive claim on minting one.
|
|
123
319
|
*
|
|
@@ -198,6 +394,38 @@ export class GatekeeperState extends DurableObject {
|
|
|
198
394
|
await this.#pruneOlderThan(RUN_PREFIX, RUN_STATE_RETENTION_MS, now, (state) => state.updatedAt);
|
|
199
395
|
await this.ctx.storage.setAlarm(now + PRUNE_INTERVAL_MS);
|
|
200
396
|
}
|
|
397
|
+
/**
|
|
398
|
+
* Install (or drop) one hook's live half, giving back the reference it replaces.
|
|
399
|
+
*
|
|
400
|
+
* One method for both directions because the release is the half that gets forgotten: a
|
|
401
|
+
* duplicate taken on enable and overwritten on the next enable would hold the workspace's end of
|
|
402
|
+
* a connection open for the object's whole lifetime, and nothing about either call site would
|
|
403
|
+
* show it.
|
|
404
|
+
*/
|
|
405
|
+
#replaceInitiator(hookId, initiator) {
|
|
406
|
+
const previous = this.#initiators.get(hookId);
|
|
407
|
+
if (previous !== undefined)
|
|
408
|
+
releaseInitiator(previous);
|
|
409
|
+
if (initiator === undefined)
|
|
410
|
+
this.#initiators.delete(hookId);
|
|
411
|
+
else
|
|
412
|
+
this.#initiators.set(hookId, initiator);
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* The row one push target names, as it stands now.
|
|
416
|
+
*
|
|
417
|
+
* `null` is the honest answer for a row that has gone (a card pruned, a run whose state a later
|
|
418
|
+
* write removed): a callback cannot be handed a payload nothing backs, and a hook that fired on
|
|
419
|
+
* one would be pushing an event with no subject.
|
|
420
|
+
*/
|
|
421
|
+
async #payloadFor(target) {
|
|
422
|
+
if (target.topic === 'approval_card') {
|
|
423
|
+
const card = await this.ctx.storage.get(`${CARD_PREFIX}${target.cardId}`);
|
|
424
|
+
return card === undefined ? null : { topic: 'approval_card', card };
|
|
425
|
+
}
|
|
426
|
+
const state = await this.ctx.storage.get(`${RUN_PREFIX}${target.runId}`);
|
|
427
|
+
return state === undefined ? null : { topic: 'run_event', state };
|
|
428
|
+
}
|
|
201
429
|
async #openCardsFor(runId) {
|
|
202
430
|
const rows = await this.ctx.storage.list({ prefix: CARD_PREFIX });
|
|
203
431
|
return [...rows.entries()].filter(([, card]) => card.runId === runId && card.resolvedAt === null);
|
package/dist/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
|
package/dist/worker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAkCA,OAAO,EAAyD,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AAKpG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAE3D,kDAAkD;AAClD,MAAM,WAAW,uBAAuB;IACtC;;;;;OAKG;IACH,MAAM,EAAE,gBAAgB,CAAA;CACzB;AAwDD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,eAAe,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAkCA,OAAO,EAAyD,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AAKpG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAE3D,kDAAkD;AAClD,MAAM,WAAW,uBAAuB;IACtC;;;;;OAKG;IACH,MAAM,EAAE,gBAAgB,CAAA;CACzB;AAwDD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uBAAuB,GAC/B,eAAe,CAAC,aAAa,CAAC,CAsHhC"}
|
package/dist/worker.js
CHANGED
|
@@ -116,7 +116,10 @@ export function createGatekeeperWorker(options) {
|
|
|
116
116
|
if (url.pathname === '/webhook') {
|
|
117
117
|
if (request.method !== 'POST')
|
|
118
118
|
return problem(405, 'method_not_allowed', 'POST only.');
|
|
119
|
-
|
|
119
|
+
// The hook fan-out rides `waitUntil` rather than the response: the platform is waiting
|
|
120
|
+
// on this acknowledgement with a retry behind it, and a workspace's own callback must
|
|
121
|
+
// never be in a position to spend that retry (see `takeDelivery`).
|
|
122
|
+
const outcome = await gatekeeper.takeDelivery(request, Date.now(), (work) => ctx.waitUntil(work));
|
|
120
123
|
if (outcome.handled === 'rejected') {
|
|
121
124
|
return problem(401, outcome.reason, 'This delivery did not verify against the endpoint secret.');
|
|
122
125
|
}
|
package/dist/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,2BAA2B;AAC3B,EAAE;AACF,kGAAkG;AAClG,gGAAgG;AAChG,mGAAmG;AACnG,qFAAqF;AACrF,EAAE;AACF,mEAAmE;AACnE,8FAA8F;AAC9F,gFAAgF;AAChF,kFAAkF;AAClF,+FAA+F;AAC/F,EAAE;AACF,iGAAiG;AACjG,6FAA6F;AAC7F,mGAAmG;AACnG,8FAA8F;AAC9F,mEAAmE;AACnE,EAAE;AACF,mFAAmF;AACnF,EAAE;AACF,gGAAgG;AAChG,gGAAgG;AAChG,+FAA+F;AAC/F,gGAAgG;AAChG,gGAAgG;AAChG,wFAAwF;AACxF,EAAE;AACF,iGAAiG;AACjG,gGAAgG;AAChG,2EAA2E;AAE3E,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,eAAe,EAAsB,MAAM,UAAU,CAAA;AACpG,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AA0BjE,8EAA8E;AAC9E,MAAM,aAAc,SAAQ,SAAS;IAC1B,WAAW,CAAY;IAEhC,YAAY,UAAsB;QAChC,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,WAAW,GAAG,UAAU,CAAA;IAC/B,CAAC;IAED,OAAO,CAAC,OAAuB;QAC7B,MAAM,OAAO,GAAG,OAAO,OAAO,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;QAC3E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,eAAe,CACvB,eAAe,EACf,yFAAyF;gBACvF,wDAAwD,CAC3D,CAAA;QACH,CAAC;QACD,MAAM,KAAK,GAAU;YACnB,EAAE,EAAE,OAAO;YACX,GAAG,CAAC,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACvE,CAAA;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAC9C,CAAC;CACF;AAED,SAAS,OAAO,CAAC,MAAc,EAAE,MAAc,EAAE,OAAe;IAC9D,OAAO,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;AAClE,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,YAAY,WAAW;QAAE,OAAO,OAAO,CAAC,GAAG,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IACtF,IAAI,KAAK,YAAY,WAAW;QAAE,OAAO,OAAO,CAAC,GAAG,EAAE,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IACtF,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAgC;IAEhC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;IAE1B,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,OAAgB,EAAE,GAAkB,EAAE,GAAqB;YACrE,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAEhC,IAAI,CAAC;gBACH,0FAA0F;gBAC1F,sFAAsF;gBACtF,oFAAoF;gBACpF,0FAA0F;gBAC1F,yFAAyF;gBACzF,cAAc;gBACd,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC/B,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;oBACpC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACvB,OAAO,OAAO,CAAC,GAAG,EAAE,gBAAgB,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAA;oBACzE,CAAC;oBACD,yFAAyF;oBACzF,iFAAiF;oBACjF,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;oBAChD,yFAAyF;oBACzF,wFAAwF;oBACxF,uFAAuF;oBACvF,uFAAuF;oBACvF,yFAAyF;oBACzF,2EAA2E;oBAC3E,OAAO,QAAQ,CAAC,IAAI,CAAC;wBACnB,EAAE,EAAE,IAAI;wBACR,EAAE,EAAE,uBAAuB,CAAC;4BAC1B,OAAO,EAAE,GAAG,CAAC,OAAO;4BACpB,mBAAmB,EAAE,SAAS,CAAC,uBAAuB;yBACvD,CAAC;qBACH,CAAC,CAAA;gBACJ,CAAC;gBAED,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;gBAEjD,IAAI,GAAG,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;oBAChC,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM;wBAAE,OAAO,OAAO,CAAC,GAAG,EAAE,oBAAoB,EAAE,YAAY,CAAC,CAAA;oBACtF,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../src/worker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cat-factory/gatekeeper-worker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "The Cloudflare OS Gatekeeper machinery for cat-factory as an installable library: policy-compiled Cap'n Web capabilities over the /api/v1 operation table, per-actor API-key minting, a verified outbound-webhook receiver and the approval inbox that answers every park a run stops on. A deployment supplies only its policy; deploy/gatekeeper is the template it copies.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"capnweb",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"capnweb": "^0.10.0",
|
|
40
|
-
"@cat-factory/gatekeeper-bindings": "0.
|
|
41
|
-
"@cat-factory/sdk": "0.
|
|
40
|
+
"@cat-factory/gatekeeper-bindings": "0.11.0",
|
|
41
|
+
"@cat-factory/sdk": "0.29.0"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@cloudflare/vitest-pool-workers": "^0.20.3",
|