@dsh-enhanced/event-triggers 0.1.24 → 0.1.31

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lark-calendar-sensor.js","sourceRoot":"","sources":["../src/lark-calendar-sensor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import type { Context } from '@deepseek-ai/cordis';
2
+ import type { GoalSourceClaim, EventTriggerStore } from './store.js';
3
+ import type { ObserverLifetime } from './config.js';
4
+ export interface EventObserverConfig {
5
+ workspace: string;
6
+ preset: string;
7
+ principalId: string;
8
+ principalRecordId: string;
9
+ principalVersion: number;
10
+ ownerRouteId: string;
11
+ expiresAt: number;
12
+ budgetId: string;
13
+ }
14
+ export declare const EVENT_OBSERVER_EXECUTOR: "event-triggers-observer/v1";
15
+ type Binding = Readonly<{
16
+ triggerId: string;
17
+ automationId: string;
18
+ configDigest: string;
19
+ owner: EventObserverConfig;
20
+ lifetime: ObserverLifetime;
21
+ }>;
22
+ /**
23
+ * Binds the existing durable event source to a finite, owner-authorized Host
24
+ * automation. It never reads an event body and never enters a model lane.
25
+ */
26
+ export declare class EventSourceObservers {
27
+ private readonly ctx;
28
+ private readonly store;
29
+ private readonly bindings;
30
+ private readonly receipts;
31
+ private readonly definitionHashes;
32
+ private automations;
33
+ private policy;
34
+ private delivery;
35
+ private unregister;
36
+ private injection;
37
+ private active;
38
+ constructor(ctx: Context, bindings: readonly Binding[], store: EventTriggerStore);
39
+ assertCurrent: (triggerId: string) => void;
40
+ claimGoalSource(input: GoalSourceClaim): boolean;
41
+ retireGoalSource(input: GoalSourceClaim): boolean;
42
+ /** Read-only terminal settlement guard for an already retired dedicated source. */
43
+ canSettleGoalSource(input: GoalSourceClaim): boolean;
44
+ private accepts;
45
+ private activationNonce;
46
+ private definition;
47
+ private reconcile;
48
+ private execute;
49
+ private assertBinding;
50
+ private claimMatches;
51
+ private trustedComplete;
52
+ private sameClaimIdentity;
53
+ private assertGoalClaimCurrent;
54
+ private goalReader;
55
+ private routeReceipt;
56
+ private pauseCurrent;
57
+ private pause;
58
+ private requireAutomations;
59
+ private requirePolicy;
60
+ private requireDelivery;
61
+ }
62
+ export {};
63
+ //# sourceMappingURL=observer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAUlD,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEnD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,iBAAiB,EAAE,MAAM,CAAA;IACzB,gBAAgB,EAAE,MAAM,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,eAAO,MAAM,uBAAuB,EAAG,4BAAqC,CAAA;AAM5E,KAAK,OAAO,GAAG,QAAQ,CAAC;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,EAAE,mBAAmB,CAAA;IAC1B,QAAQ,EAAE,gBAAgB,CAAA;CAC3B,CAAC,CAAA;AA4BF;;;GAGG;AACH,qBAAa,oBAAoB;IAWnB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAyC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAV/F,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA6B;IACtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2D;IACpF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA4B;IAC7D,OAAO,CAAC,WAAW,CAAyC;IAC5D,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,QAAQ,CAAsC;IACtD,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,SAAS,CAA0C;IAC3D,OAAO,CAAC,MAAM,CAAO;gBAEQ,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,OAAO,EAAE,EAAmB,KAAK,EAAE,iBAAiB;IAqClH,aAAa,GAAI,WAAW,MAAM,KAAG,IAAI,CAYxC;IAED,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO;IAShD,gBAAgB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO;IASjD,mFAAmF;IACnF,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO;IAWpD,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,SAAS;IAuCjB,OAAO,CAAC,OAAO;IA4Bf,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,sBAAsB;IAc9B,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,eAAe;CAIxB"}
@@ -0,0 +1,350 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { resolve } from 'node:path';
3
+ export const EVENT_OBSERVER_EXECUTOR = 'event-triggers-observer/v1';
4
+ const RUNBOOK_ID = 'observe-persisted-event-source';
5
+ const RUNBOOK_VERSION = 1;
6
+ const SYSTEM_OWNER = EVENT_OBSERVER_EXECUTOR;
7
+ const FUTURE_AT = '2099-01-01T00:00:00.000Z';
8
+ function digest(value) {
9
+ const canonical = (input) => {
10
+ if (input === null || typeof input !== 'object')
11
+ return JSON.stringify(input);
12
+ if (Array.isArray(input))
13
+ return `[${input.map(canonical).join(',')}]`;
14
+ const record = input;
15
+ return `{${Object.keys(record).sort().map(key => `${JSON.stringify(key)}:${canonical(record[key])}`).join(',')}}`;
16
+ };
17
+ return createHash('sha256').update(canonical(value)).digest('hex');
18
+ }
19
+ function scopeDigest(owner) {
20
+ return digest([resolve(owner.workspace), owner.preset]);
21
+ }
22
+ const sameScope = (left, right) => left.principalId === right.principalId
23
+ && left.principalRecordId === right.principalRecordId && left.principalVersion === right.principalVersion
24
+ && resolve(left.workspace) === resolve(right.workspace) && left.preset === right.preset;
25
+ function catalogDigest() {
26
+ return digest({ executor: EVENT_OBSERVER_EXECUTOR, contractVersion: 1, runbook: RUNBOOK_ID, version: RUNBOOK_VERSION });
27
+ }
28
+ const CATALOG_DIGEST = catalogDigest();
29
+ /**
30
+ * Binds the existing durable event source to a finite, owner-authorized Host
31
+ * automation. It never reads an event body and never enters a model lane.
32
+ */
33
+ export class EventSourceObservers {
34
+ ctx;
35
+ store;
36
+ bindings = new Map();
37
+ receipts = new Map();
38
+ definitionHashes = new Map();
39
+ automations;
40
+ policy;
41
+ delivery;
42
+ unregister;
43
+ injection;
44
+ active = true;
45
+ constructor(ctx, bindings, store) {
46
+ this.ctx = ctx;
47
+ this.store = store;
48
+ const automationIds = new Set();
49
+ for (const binding of bindings) {
50
+ if (this.bindings.has(binding.triggerId))
51
+ throw new Error(`event-triggers: duplicate observer trigger ${binding.triggerId}`);
52
+ if (automationIds.has(binding.automationId))
53
+ throw new Error(`event-triggers: duplicate observer automation ${binding.automationId}`);
54
+ automationIds.add(binding.automationId);
55
+ this.bindings.set(binding.triggerId, Object.freeze({ ...binding, lifetime: binding.lifetime, owner: Object.freeze({ ...binding.owner }) }));
56
+ }
57
+ const activate = (runtime) => {
58
+ if (!this.active)
59
+ return;
60
+ this.unregister?.();
61
+ this.automations = runtime.get('assistantAutomations');
62
+ this.policy = runtime.get('assistantPolicy');
63
+ this.delivery = runtime.get('assistantDelivery');
64
+ if (this.automations === undefined || this.policy === undefined
65
+ || (this.bindings.size > 0 && this.delivery === undefined))
66
+ return;
67
+ if (this.bindings.size > 0)
68
+ this.unregister = this.automations.registerHostExecutor({
69
+ descriptor: Object.freeze({ executorId: EVENT_OBSERVER_EXECUTOR, contractVersion: 1, catalogDigest: CATALOG_DIGEST }),
70
+ accepts: spec => this.accepts(spec),
71
+ execute: input => this.execute(input),
72
+ });
73
+ if (this.bindings.size > 0 || typeof this.automations.listSystemOwned === 'function')
74
+ this.reconcile();
75
+ return () => { this.unregister?.(); this.unregister = undefined; this.automations = undefined; this.policy = undefined; this.delivery = undefined; };
76
+ };
77
+ const dependencies = this.bindings.size === 0
78
+ ? ['assistantAutomations', 'assistantPolicy']
79
+ : ['assistantAutomations', 'assistantPolicy', 'assistantDelivery'];
80
+ this.injection = ctx.inject(dependencies, activate);
81
+ activate(ctx);
82
+ ctx.effect(() => () => {
83
+ this.active = false;
84
+ this.unregister?.();
85
+ this.unregister = undefined;
86
+ void this.injection?.dispose();
87
+ }, 'event-triggers.observer');
88
+ }
89
+ assertCurrent = (triggerId) => {
90
+ const binding = this.bindings.get(triggerId);
91
+ if (binding === undefined)
92
+ return;
93
+ if (!this.assertGoalClaimCurrent(binding))
94
+ throw new Error('event-triggers: observer goal binding is retired or changed');
95
+ const receipt = this.assertBinding(binding), automations = this.requireAutomations();
96
+ const activation = automations.inspectSystemOwnedActivation({ owner: SYSTEM_OWNER, automationId: binding.automationId });
97
+ const current = automations.inspectSystemOwned({ owner: SYSTEM_OWNER, automationId: binding.automationId });
98
+ if (!activation || current.automationStatus !== 'active' || activation.definitionHash !== this.definitionHashes.get(triggerId)
99
+ || activation.activationNonce !== this.activationNonce(binding, receipt) || activation.ownerRouteId !== binding.owner.ownerRouteId) {
100
+ this.pauseCurrent(binding.automationId, 'source-changed');
101
+ throw new Error('event-triggers: observer source is paused or changed');
102
+ }
103
+ };
104
+ claimGoalSource(input) {
105
+ const binding = this.bindings.get(input.triggerId);
106
+ if (binding === undefined || binding.lifetime === 'shared')
107
+ return false;
108
+ if (!this.claimMatches(binding, input))
109
+ throw new Error('event-triggers: observer goal binding does not match source configuration');
110
+ this.assertBinding(binding);
111
+ this.store.claimGoalSource(input);
112
+ return true;
113
+ }
114
+ retireGoalSource(input) {
115
+ const binding = this.bindings.get(input.triggerId);
116
+ if (binding === undefined || binding.lifetime === 'shared')
117
+ return false;
118
+ if (!this.claimMatches(binding, input) || !this.trustedComplete(input))
119
+ throw new Error('event-triggers: observer goal completion is not trusted');
120
+ this.store.retireGoalSource(input);
121
+ this.pauseCurrent(binding.automationId, 'goal-complete');
122
+ return true;
123
+ }
124
+ /** Read-only terminal settlement guard for an already retired dedicated source. */
125
+ canSettleGoalSource(input) {
126
+ try {
127
+ const binding = this.bindings.get(input.triggerId);
128
+ if (binding === undefined || binding.lifetime !== 'goal' || !this.claimMatches(binding, input))
129
+ return false;
130
+ const claim = this.store.goalSourceClaim(input.triggerId);
131
+ if (claim === undefined || claim.retiredAt === undefined || !this.sameClaimIdentity(claim, input))
132
+ return false;
133
+ this.assertBinding(binding);
134
+ return this.trustedComplete(input);
135
+ }
136
+ catch {
137
+ return false;
138
+ }
139
+ }
140
+ accepts(spec) {
141
+ return spec.kind === 'host'
142
+ && spec.executorId === EVENT_OBSERVER_EXECUTOR
143
+ && spec.executorContractVersion === 1
144
+ && spec.runbookId === RUNBOOK_ID
145
+ && spec.runbookVersion === RUNBOOK_VERSION
146
+ && spec.catalogDigest === CATALOG_DIGEST
147
+ && spec.scopeDigest === digest([resolve(spec.targetScope.workspace), spec.targetScope.preset]);
148
+ }
149
+ activationNonce(binding, receipt) {
150
+ return digest({ contract: EVENT_OBSERVER_EXECUTOR, triggerId: binding.triggerId, automationId: binding.automationId,
151
+ configDigest: binding.configDigest, owner: binding.owner, route: receipt });
152
+ }
153
+ definition(binding, receipt) {
154
+ const owner = binding.owner;
155
+ return Object.freeze({
156
+ name: `Observe event source: ${binding.triggerId}`,
157
+ schedule: Object.freeze({ kind: 'at', at: FUTURE_AT }),
158
+ workspace: resolve(owner.workspace), agentPreset: owner.preset, timeoutMs: 30_000,
159
+ misfire: Object.freeze({ kind: 'latest' }), overlap: 'skip',
160
+ retrySafety: 'never', maxRetries: 0, principal: owner.principalId,
161
+ budgetId: owner.budgetId, budgetAmount: 1,
162
+ execution: Object.freeze({ kind: 'host', executorId: EVENT_OBSERVER_EXECUTOR,
163
+ executorContractVersion: 1, runbookId: RUNBOOK_ID, runbookVersion: RUNBOOK_VERSION,
164
+ catalogDigest: CATALOG_DIGEST, targetScope: Object.freeze({ workspace: resolve(owner.workspace), preset: owner.preset }),
165
+ scopeDigest: scopeDigest(owner), ownerRouteId: owner.ownerRouteId, activationNonce: this.activationNonce(binding, receipt) }),
166
+ });
167
+ }
168
+ reconcile() {
169
+ const automations = this.requireAutomations();
170
+ const desired = new Set([...this.bindings.values()].map(binding => binding.automationId));
171
+ const inventory = automations.listSystemOwned({ owner: SYSTEM_OWNER, limit: 1_000 });
172
+ if (inventory.length === 1_000)
173
+ throw new Error('event-triggers: observer inventory reached safe reconciliation bound');
174
+ for (const current of inventory) {
175
+ if (desired.has(current.automationId) || current.automationStatus !== 'active')
176
+ continue;
177
+ this.pause(current.automationId, current.definitionHash, current.definitionVersion, 'remove');
178
+ }
179
+ for (const binding of this.bindings.values()) {
180
+ if (!this.assertGoalClaimCurrent(binding))
181
+ continue;
182
+ let receipt;
183
+ try {
184
+ receipt = this.assertBinding(binding);
185
+ this.receipts.set(binding.triggerId, receipt);
186
+ }
187
+ catch {
188
+ this.pauseCurrent(binding.automationId, 'unattested');
189
+ continue;
190
+ }
191
+ const definition = this.definition(binding, receipt);
192
+ const existing = automations.inspectSystemOwnedActivation({ owner: SYSTEM_OWNER, automationId: binding.automationId });
193
+ // A restart must prove the route receipt already sealed in the durable
194
+ // definition before it can keep or reactivate that source.
195
+ if (existing !== undefined && (existing.ownerRouteId !== binding.owner.ownerRouteId
196
+ || existing.activationNonce !== definition.execution.activationNonce)) {
197
+ this.pauseCurrent(binding.automationId, 'persistent-route-mismatch');
198
+ continue;
199
+ }
200
+ const bindingIdentity = binding.lifetime === 'shared'
201
+ ? { triggerId: binding.triggerId, automationId: binding.automationId, configDigest: binding.configDigest, owner: binding.owner }
202
+ : binding;
203
+ const reconciled = automations.reconcileSystem({ owner: SYSTEM_OWNER, automationId: binding.automationId,
204
+ idempotencyKey: `event-observer:v1:${digest({ binding: bindingIdentity, definition })}`, desiredStatus: 'active', definition });
205
+ // Reconcile returns the original normalized definition on idempotent
206
+ // replay, including after another controller changes the current row.
207
+ this.definitionHashes.set(binding.triggerId, createHash('sha256').update(JSON.stringify(reconciled.definition)).digest('hex'));
208
+ }
209
+ }
210
+ execute(input) {
211
+ try {
212
+ if (!this.active || input.signal.aborted || input.executionMode !== 'production')
213
+ throw new Error('inactive');
214
+ const binding = [...this.bindings.values()].find(value => value.automationId === input.automationId);
215
+ if (binding === undefined)
216
+ throw new Error('unknown automation');
217
+ const receipt = this.assertBinding(binding);
218
+ this.receipts.set(binding.triggerId, receipt);
219
+ const definition = this.definition(binding, receipt);
220
+ const activation = this.requireAutomations().inspectSystemOwnedActivation({ owner: SYSTEM_OWNER, automationId: binding.automationId });
221
+ const health = this.requireAutomations().inspectSystemOwned({ owner: SYSTEM_OWNER, automationId: binding.automationId });
222
+ if (activation === undefined || health.automationStatus !== 'active'
223
+ || activation.definitionHash !== this.definitionHashes.get(binding.triggerId)
224
+ || activation.definitionHash !== input.definitionHash || activation.ownerRouteId !== binding.owner.ownerRouteId
225
+ || activation.activationNonce !== definition.execution.activationNonce
226
+ || input.definitionHash !== health.definitionHash
227
+ || input.principal !== binding.owner.principalId || input.ownerRouteId !== binding.owner.ownerRouteId
228
+ || input.activationNonce !== definition.execution.activationNonce
229
+ || input.targetScope.workspace !== definition.execution.targetScope.workspace
230
+ || input.targetScope.preset !== definition.execution.targetScope.preset)
231
+ throw new Error('stale definition');
232
+ return Promise.resolve(Object.freeze({ outcome: 'succeeded', failureClass: 'none',
233
+ failurePhase: 'none', failureCode: 'none', sideEffectState: 'none', retryability: 'safe' }));
234
+ }
235
+ catch {
236
+ return Promise.resolve(Object.freeze({ outcome: 'failed', failureClass: 'policy',
237
+ failurePhase: 'host-execution', failureCode: 'observer-authority', sideEffectState: 'none',
238
+ retryability: 'after-intervention' }));
239
+ }
240
+ }
241
+ assertBinding(binding) {
242
+ if (!this.active)
243
+ throw new Error('event-triggers: observer disposed');
244
+ if (Date.now() >= binding.owner.expiresAt) {
245
+ this.pauseCurrent(binding.automationId, 'expired');
246
+ throw new Error('event-triggers: observer authorization expired');
247
+ }
248
+ const receipt = this.routeReceipt(binding);
249
+ if (receipt.principalRecordId !== binding.owner.principalRecordId || receipt.principalVersion !== binding.owner.principalVersion
250
+ || receipt.principalId !== binding.owner.principalId || receipt.workspace !== resolve(binding.owner.workspace)
251
+ || receipt.agentPreset !== binding.owner.preset) {
252
+ this.pauseCurrent(binding.automationId, 'route-changed');
253
+ throw new Error('event-triggers: observer owner route changed');
254
+ }
255
+ const frozen = this.receipts.get(binding.triggerId);
256
+ if (frozen !== undefined && (receipt.authorityHash !== frozen.authorityHash || receipt.bindingVersion !== frozen.bindingVersion
257
+ || receipt.generation !== frozen.generation)) {
258
+ this.pauseCurrent(binding.automationId, 'route-rebound');
259
+ throw new Error('event-triggers: observer owner route changed');
260
+ }
261
+ const decision = this.requirePolicy().evaluate({
262
+ subject: { kind: 'background', id: SYSTEM_OWNER, workspace: resolve(binding.owner.workspace), principal: binding.owner.principalId },
263
+ action: 'observe', resource: { kind: 'automation', id: binding.automationId }, context: { initiator: 'background' },
264
+ });
265
+ if (decision.effect !== 'allow')
266
+ throw new Error('event-triggers: observer policy denied');
267
+ return receipt;
268
+ }
269
+ claimMatches(binding, input) {
270
+ const owner = binding.owner;
271
+ return input.automationId === binding.automationId && input.configDigest === binding.configDigest
272
+ && input.scope.principalId === owner.principalId && input.scope.principalRecordId === owner.principalRecordId
273
+ && input.scope.principalVersion === owner.principalVersion && resolve(input.scope.workspace) === resolve(owner.workspace)
274
+ && input.scope.preset === owner.preset;
275
+ }
276
+ trustedComplete(input) {
277
+ const goal = this.goalReader()?.inspectGoalLifecycle({ scope: input.scope, goalId: input.goalId });
278
+ return goal !== undefined && sameScope(goal.scope, input.scope) && goal.id === input.goalId
279
+ && goal.definition.version === input.definition.version && goal.definition.digest === input.definition.digest
280
+ && goal.native.sessionId === input.native.sessionId && goal.native.goalId === input.native.goalId
281
+ && goal.native.revision >= input.native.revision && goal.native.phase === 'complete';
282
+ }
283
+ sameClaimIdentity(claim, input) {
284
+ return sameScope(claim.scope, input.scope) && claim.goalId === input.goalId
285
+ && claim.definition.version === input.definition.version && claim.definition.digest === input.definition.digest
286
+ && claim.native.sessionId === input.native.sessionId && claim.native.goalId === input.native.goalId
287
+ && input.native.revision >= claim.native.revision && claim.configDigest === input.configDigest
288
+ && claim.automationId === input.automationId;
289
+ }
290
+ assertGoalClaimCurrent(binding) {
291
+ if (binding.lifetime === 'shared')
292
+ return true;
293
+ const claim = this.store.goalSourceClaim(binding.triggerId);
294
+ if (!claim)
295
+ return true;
296
+ if (claim.retiredAt !== undefined || !this.claimMatches(binding, claim)) {
297
+ this.pauseCurrent(binding.automationId, 'goal-binding-changed');
298
+ return false;
299
+ }
300
+ const goal = this.goalReader()?.inspectGoalLifecycle({ scope: claim.scope, goalId: claim.goalId });
301
+ if (!goal || !sameScope(goal.scope, claim.scope) || goal.id !== claim.goalId
302
+ || goal.definition.version !== claim.definition.version || goal.definition.digest !== claim.definition.digest
303
+ || goal.native.sessionId !== claim.native.sessionId || goal.native.goalId !== claim.native.goalId
304
+ || goal.native.revision < claim.native.revision) {
305
+ this.pauseCurrent(binding.automationId, 'goal-binding-changed');
306
+ return false;
307
+ }
308
+ if (goal.native.phase === 'complete') {
309
+ this.store.retireGoalSource(claim);
310
+ this.pauseCurrent(binding.automationId, 'goal-complete');
311
+ return false;
312
+ }
313
+ return true;
314
+ }
315
+ goalReader() {
316
+ return this.ctx.get('assistantGoals', false);
317
+ }
318
+ routeReceipt(binding) {
319
+ return this.requireDelivery().validateOwnerRoute({ authorityId: binding.owner.ownerRouteId,
320
+ principalId: binding.owner.principalId, workspace: resolve(binding.owner.workspace), agentPreset: binding.owner.preset });
321
+ }
322
+ pauseCurrent(automationId, reason) {
323
+ try {
324
+ const current = this.requireAutomations().inspectSystemOwned({ owner: SYSTEM_OWNER, automationId });
325
+ if (current.automationStatus === 'active')
326
+ this.pause(automationId, current.definitionHash, current.definitionVersion, reason);
327
+ }
328
+ catch { /* best effort: never rewrite a row we cannot prove is ours */ }
329
+ }
330
+ pause(automationId, definitionHash, expectedVersion, reason) {
331
+ this.requireAutomations().pauseSystemOwned({ owner: SYSTEM_OWNER, automationId, definitionHash, expectedVersion,
332
+ operationId: `event-observer:${reason}:v1:${digest({ automationId, definitionHash, expectedVersion })}` });
333
+ }
334
+ requireAutomations() {
335
+ if (this.automations === undefined)
336
+ throw new Error('event-triggers: observer dependencies are unavailable');
337
+ return this.automations;
338
+ }
339
+ requirePolicy() {
340
+ if (this.policy === undefined)
341
+ throw new Error('event-triggers: observer dependencies are unavailable');
342
+ return this.policy;
343
+ }
344
+ requireDelivery() {
345
+ if (this.delivery === undefined)
346
+ throw new Error('event-triggers: observer dependencies are unavailable');
347
+ return this.delivery;
348
+ }
349
+ }
350
+ //# sourceMappingURL=observer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observer.js","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"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"}
package/lib/sensors.d.ts CHANGED
@@ -36,6 +36,20 @@ export declare function defaultLookup(hostname: string): Promise<Array<{
36
36
  address: string;
37
37
  family: number;
38
38
  }>>;
39
+ export declare function readHttpJsonValue(input: {
40
+ url: string;
41
+ maxBodyBytes: number;
42
+ timeoutMs: number;
43
+ allowedHosts?: ReadonlySet<string>;
44
+ allowedOrigins?: ReadonlySet<string>;
45
+ allowIpv6?: boolean;
46
+ fetcher?: Fetcher;
47
+ lookup?: Lookup;
48
+ trackOperation?: OperationTracker;
49
+ signal?: AbortSignal;
50
+ headers?: RequestInit['headers'];
51
+ rejectPagination?: boolean;
52
+ }): Promise<unknown>;
39
53
  export declare function readHttpJsonObservation(input: {
40
54
  url: string;
41
55
  pointer: string;
@@ -1 +1 @@
1
- {"version":3,"file":"sensors.d.ts","sourceRoot":"","sources":["../src/sensors.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,eAAe;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACpE,MAAM,WAAW,cAAc;IAAG,SAAS,EAAE,SAAS,QAAQ,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAA;KAAE,CAAC,EAAE,CAAA;CAAE;AACtG,MAAM,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAA;AACrE,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAClG,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AAkBvE,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,cAAc,EAAE,CAoBhF;AAyBD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,IAAI,EAAE,cAAc,GAAG,QAAQ,CAAA;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,CAAA;IACvC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACjC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkD7B;AAkMD,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAEzG;AAyCD,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAClC,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACpC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,gBAAgB,CAAA;IACjC,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8C7B"}
1
+ {"version":3,"file":"sensors.d.ts","sourceRoot":"","sources":["../src/sensors.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,eAAe;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE;AACpE,MAAM,WAAW,cAAc;IAAG,SAAS,EAAE,SAAS,QAAQ,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAA;KAAE,CAAC,EAAE,CAAA;CAAE;AACtG,MAAM,MAAM,MAAM,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAA;AACrE,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,cAAc,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AAClG,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AAkBvE,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,cAAc,EAAE,CAoBhF;AAyBD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,IAAI,EAAE,cAAc,GAAG,QAAQ,CAAA;IAC/B,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,SAAS,cAAc,EAAE,CAAA;IACvC,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACjC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkD7B;AAkMD,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAEzG;AAyCD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAC7C,GAAG,EAAE,MAAM,CAAA;IACX,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAClC,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACpC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,gBAAgB,CAAA;IACjC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;IAChC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,GAAG,OAAO,CAAC,OAAO,CAAC,CAwBnB;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE;IACnD,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IACf,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAClC,cAAc,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACpC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,gBAAgB,CAAA;IACjC,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAK7B"}
package/lib/sensors.js CHANGED
@@ -380,15 +380,13 @@ async function pinnedHttpsFetch(urlValue, init, route) {
380
380
  request.end();
381
381
  });
382
382
  }
383
- export async function readHttpJsonObservation(input) {
383
+ export async function readHttpJsonValue(input) {
384
384
  const url = new URL(input.url);
385
385
  if (url.protocol !== 'https:')
386
386
  throw new Error('event-triggers: HTTP sensor requires HTTPS');
387
- const legacyAllowed = (url.port === '' || url.port === '443')
388
- && (input.allowedHosts?.has(url.hostname.toLowerCase()) ?? false);
389
- if (url.username !== '' || url.password !== '' || (!legacyAllowed && !(input.allowedOrigins?.has(url.origin) ?? false))) {
387
+ const legacyAllowed = (url.port === '' || url.port === '443') && (input.allowedHosts?.has(url.hostname.toLowerCase()) ?? false);
388
+ if (url.username !== '' || url.password !== '' || (!legacyAllowed && !(input.allowedOrigins?.has(url.origin) ?? false)))
390
389
  throw new Error('event-triggers: HTTP sensor host/origin is not allowlisted');
391
- }
392
390
  const controller = new AbortController();
393
391
  const forwardAbort = () => controller.abort(input.signal?.reason ?? new Error('event-triggers: HTTP sensor was aborted'));
394
392
  if (input.signal?.aborted)
@@ -398,17 +396,12 @@ export async function readHttpJsonObservation(input) {
398
396
  const timer = setTimeout(() => controller.abort(new Error('event-triggers: HTTP sensor timeout')), input.timeoutMs);
399
397
  timer.unref?.();
400
398
  try {
401
- const address = hostname(url);
402
- const family = isIP(address);
403
- const resolving = family === 0
404
- ? (input.lookup ?? defaultLookup)(address)
405
- : Promise.resolve([{ address, family }]);
399
+ const address = hostname(url), family = isIP(address);
400
+ const resolving = family === 0 ? (input.lookup ?? defaultLookup)(address) : Promise.resolve([{ address, family }]);
406
401
  const resolved = await raceWithAbort(tracked(resolving, input.trackOperation), controller.signal);
407
402
  const addresses = validatedAddresses(resolved, input.allowIpv6 ?? false);
408
- const fetching = (input.fetcher ?? pinnedHttpsFetch)(url.toString(), {
409
- method: 'GET', redirect: 'manual', signal: controller.signal,
410
- headers: { accept: 'application/json' },
411
- }, { addresses });
403
+ const fetching = (input.fetcher ?? pinnedHttpsFetch)(url.toString(), { method: 'GET', redirect: 'manual', signal: controller.signal,
404
+ headers: input.headers ?? { accept: 'application/json' } }, { addresses });
412
405
  const response = await raceWithAbort(tracked(fetching, input.trackOperation), controller.signal);
413
406
  if (response.status >= 300 && response.status < 400) {
414
407
  await cancelBody(response, controller.signal, input.trackOperation);
@@ -418,23 +411,28 @@ export async function readHttpJsonObservation(input) {
418
411
  await cancelBody(response, controller.signal, input.trackOperation);
419
412
  throw new Error(`event-triggers: HTTP sensor returned ${response.status}`);
420
413
  }
414
+ if (input.rejectPagination && /(?:^|[;,\s])rel="?next"?/iu.test(response.headers.get('link') ?? '')) {
415
+ await cancelBody(response, controller.signal, input.trackOperation);
416
+ throw new Error('event-triggers: HTTP response is paginated');
417
+ }
421
418
  const body = await boundedBody(response, input.maxBodyBytes, controller.signal, input.trackOperation);
422
- let document;
423
419
  try {
424
- document = JSON.parse(body.toString('utf8'));
420
+ return JSON.parse(body.toString('utf8'));
425
421
  }
426
422
  catch {
427
423
  throw new Error('event-triggers: HTTP body is not valid JSON');
428
424
  }
429
- const selected = pointer(document, input.pointer);
430
- const serialized = JSON.stringify(selected);
431
- if (serialized === undefined)
432
- throw new Error('event-triggers: JSON pointer selected an unsupported value');
433
- return { fingerprint: `sha256:${hash(serialized)}`, truthy: Boolean(selected) };
434
425
  }
435
426
  finally {
436
427
  clearTimeout(timer);
437
428
  input.signal?.removeEventListener('abort', forwardAbort);
438
429
  }
439
430
  }
431
+ export async function readHttpJsonObservation(input) {
432
+ const selected = pointer(await readHttpJsonValue(input), input.pointer);
433
+ const serialized = JSON.stringify(selected);
434
+ if (serialized === undefined)
435
+ throw new Error('event-triggers: JSON pointer selected an unsupported value');
436
+ return { fingerprint: `sha256:${hash(serialized)}`, truthy: Boolean(selected) };
437
+ }
440
438
  //# sourceMappingURL=sensors.js.map