@relkit/providers-local 0.0.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 +40 -0
- package/dist/buckets/index.d.ts +5 -0
- package/dist/buckets/index.d.ts.map +1 -0
- package/dist/buckets/index.js +5 -0
- package/dist/buckets/index.js.map +1 -0
- package/dist/buckets/keys.d.ts +7 -0
- package/dist/buckets/keys.d.ts.map +1 -0
- package/dist/buckets/keys.js +60 -0
- package/dist/buckets/keys.js.map +1 -0
- package/dist/buckets/operations.d.ts +11 -0
- package/dist/buckets/operations.d.ts.map +1 -0
- package/dist/buckets/operations.js +89 -0
- package/dist/buckets/operations.js.map +1 -0
- package/dist/buckets/pagination.d.ts +5 -0
- package/dist/buckets/pagination.d.ts.map +1 -0
- package/dist/buckets/pagination.js +34 -0
- package/dist/buckets/pagination.js.map +1 -0
- package/dist/buckets/policy.d.ts +8 -0
- package/dist/buckets/policy.d.ts.map +1 -0
- package/dist/buckets/policy.js +74 -0
- package/dist/buckets/policy.js.map +1 -0
- package/dist/buckets/provider.d.ts +4 -0
- package/dist/buckets/provider.d.ts.map +1 -0
- package/dist/buckets/provider.js +119 -0
- package/dist/buckets/provider.js.map +1 -0
- package/dist/buckets/storage.d.ts +12 -0
- package/dist/buckets/storage.d.ts.map +1 -0
- package/dist/buckets/storage.js +169 -0
- package/dist/buckets/storage.js.map +1 -0
- package/dist/buckets/types.d.ts +91 -0
- package/dist/buckets/types.d.ts.map +1 -0
- package/dist/buckets/types.js +34 -0
- package/dist/buckets/types.js.map +1 -0
- package/dist/cache/index.d.ts +8 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +8 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/inspector.d.ts +4 -0
- package/dist/cache/inspector.d.ts.map +1 -0
- package/dist/cache/inspector.js +62 -0
- package/dist/cache/inspector.js.map +1 -0
- package/dist/cache/keys.d.ts +6 -0
- package/dist/cache/keys.d.ts.map +1 -0
- package/dist/cache/keys.js +34 -0
- package/dist/cache/keys.js.map +1 -0
- package/dist/cache/persistence.d.ts +5 -0
- package/dist/cache/persistence.d.ts.map +1 -0
- package/dist/cache/persistence.js +108 -0
- package/dist/cache/persistence.js.map +1 -0
- package/dist/cache/policy.d.ts +9 -0
- package/dist/cache/policy.d.ts.map +1 -0
- package/dist/cache/policy.js +64 -0
- package/dist/cache/policy.js.map +1 -0
- package/dist/cache/provider.d.ts +3 -0
- package/dist/cache/provider.d.ts.map +1 -0
- package/dist/cache/provider.js +164 -0
- package/dist/cache/provider.js.map +1 -0
- package/dist/cache/store.d.ts +44 -0
- package/dist/cache/store.d.ts.map +1 -0
- package/dist/cache/store.js +132 -0
- package/dist/cache/store.js.map +1 -0
- package/dist/cache/types.d.ts +100 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +39 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/cache/write.d.ts +5 -0
- package/dist/cache/write.d.ts.map +1 -0
- package/dist/cache/write.js +13 -0
- package/dist/cache/write.js.map +1 -0
- package/dist/events/admin-actions.d.ts +7 -0
- package/dist/events/admin-actions.d.ts.map +1 -0
- package/dist/events/admin-actions.js +28 -0
- package/dist/events/admin-actions.js.map +1 -0
- package/dist/events/admin-contracts.d.ts +132 -0
- package/dist/events/admin-contracts.d.ts.map +1 -0
- package/dist/events/admin-contracts.js +4 -0
- package/dist/events/admin-contracts.js.map +1 -0
- package/dist/events/admin-errors.d.ts +5 -0
- package/dist/events/admin-errors.d.ts.map +1 -0
- package/dist/events/admin-errors.js +9 -0
- package/dist/events/admin-errors.js.map +1 -0
- package/dist/events/admin-state.d.ts +8 -0
- package/dist/events/admin-state.d.ts.map +1 -0
- package/dist/events/admin-state.js +10 -0
- package/dist/events/admin-state.js.map +1 -0
- package/dist/events/admin-utils.d.ts +27 -0
- package/dist/events/admin-utils.d.ts.map +1 -0
- package/dist/events/admin-utils.js +153 -0
- package/dist/events/admin-utils.js.map +1 -0
- package/dist/events/admin.d.ts +22 -0
- package/dist/events/admin.d.ts.map +1 -0
- package/dist/events/admin.js +92 -0
- package/dist/events/admin.js.map +1 -0
- package/dist/events/delivery-types.d.ts +74 -0
- package/dist/events/delivery-types.d.ts.map +1 -0
- package/dist/events/delivery-types.js +9 -0
- package/dist/events/delivery-types.js.map +1 -0
- package/dist/events/delivery-utils.d.ts +17 -0
- package/dist/events/delivery-utils.d.ts.map +1 -0
- package/dist/events/delivery-utils.js +133 -0
- package/dist/events/delivery-utils.js.map +1 -0
- package/dist/events/delivery.d.ts +6 -0
- package/dist/events/delivery.d.ts.map +1 -0
- package/dist/events/delivery.js +159 -0
- package/dist/events/delivery.js.map +1 -0
- package/dist/events/ephemeral.d.ts +36 -0
- package/dist/events/ephemeral.d.ts.map +1 -0
- package/dist/events/ephemeral.js +61 -0
- package/dist/events/ephemeral.js.map +1 -0
- package/dist/events/log.d.ts +37 -0
- package/dist/events/log.d.ts.map +1 -0
- package/dist/events/log.js +121 -0
- package/dist/events/log.js.map +1 -0
- package/dist/events/provider.d.ts +9 -0
- package/dist/events/provider.d.ts.map +1 -0
- package/dist/events/provider.js +37 -0
- package/dist/events/provider.js.map +1 -0
- package/dist/events/router-inspection.d.ts +18 -0
- package/dist/events/router-inspection.d.ts.map +1 -0
- package/dist/events/router-inspection.js +110 -0
- package/dist/events/router-inspection.js.map +1 -0
- package/dist/events/router-records.d.ts +34 -0
- package/dist/events/router-records.d.ts.map +1 -0
- package/dist/events/router-records.js +98 -0
- package/dist/events/router-records.js.map +1 -0
- package/dist/events/router-types.d.ts +83 -0
- package/dist/events/router-types.d.ts.map +1 -0
- package/dist/events/router-types.js +2 -0
- package/dist/events/router-types.js.map +1 -0
- package/dist/events/router.d.ts +7 -0
- package/dist/events/router.d.ts.map +1 -0
- package/dist/events/router.js +148 -0
- package/dist/events/router.js.map +1 -0
- package/dist/factory.d.ts +26 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/factory.js +66 -0
- package/dist/factory.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs/admin-contracts.d.ts +66 -0
- package/dist/jobs/admin-contracts.d.ts.map +1 -0
- package/dist/jobs/admin-contracts.js +4 -0
- package/dist/jobs/admin-contracts.js.map +1 -0
- package/dist/jobs/admin-errors.d.ts +5 -0
- package/dist/jobs/admin-errors.d.ts.map +1 -0
- package/dist/jobs/admin-errors.js +9 -0
- package/dist/jobs/admin-errors.js.map +1 -0
- package/dist/jobs/admin-utils.d.ts +29 -0
- package/dist/jobs/admin-utils.d.ts.map +1 -0
- package/dist/jobs/admin-utils.js +138 -0
- package/dist/jobs/admin-utils.js.map +1 -0
- package/dist/jobs/admin.d.ts +25 -0
- package/dist/jobs/admin.d.ts.map +1 -0
- package/dist/jobs/admin.js +89 -0
- package/dist/jobs/admin.js.map +1 -0
- package/dist/jobs/cron.d.ts +10 -0
- package/dist/jobs/cron.d.ts.map +1 -0
- package/dist/jobs/cron.js +18 -0
- package/dist/jobs/cron.js.map +1 -0
- package/dist/jobs/idempotency.d.ts +18 -0
- package/dist/jobs/idempotency.d.ts.map +1 -0
- package/dist/jobs/idempotency.js +82 -0
- package/dist/jobs/idempotency.js.map +1 -0
- package/dist/jobs/lease-utils.d.ts +9 -0
- package/dist/jobs/lease-utils.d.ts.map +1 -0
- package/dist/jobs/lease-utils.js +31 -0
- package/dist/jobs/lease-utils.js.map +1 -0
- package/dist/jobs/queue-admin.d.ts +12 -0
- package/dist/jobs/queue-admin.d.ts.map +1 -0
- package/dist/jobs/queue-admin.js +42 -0
- package/dist/jobs/queue-admin.js.map +1 -0
- package/dist/jobs/queue-entry.d.ts +8 -0
- package/dist/jobs/queue-entry.d.ts.map +1 -0
- package/dist/jobs/queue-entry.js +130 -0
- package/dist/jobs/queue-entry.js.map +1 -0
- package/dist/jobs/queue-lease.d.ts +4 -0
- package/dist/jobs/queue-lease.d.ts.map +1 -0
- package/dist/jobs/queue-lease.js +12 -0
- package/dist/jobs/queue-lease.js.map +1 -0
- package/dist/jobs/queue-operations.d.ts +16 -0
- package/dist/jobs/queue-operations.d.ts.map +1 -0
- package/dist/jobs/queue-operations.js +107 -0
- package/dist/jobs/queue-operations.js.map +1 -0
- package/dist/jobs/queue-recovery.d.ts +5 -0
- package/dist/jobs/queue-recovery.d.ts.map +1 -0
- package/dist/jobs/queue-recovery.js +22 -0
- package/dist/jobs/queue-recovery.js.map +1 -0
- package/dist/jobs/queue-utils.d.ts +101 -0
- package/dist/jobs/queue-utils.d.ts.map +1 -0
- package/dist/jobs/queue-utils.js +28 -0
- package/dist/jobs/queue-utils.js.map +1 -0
- package/dist/jobs/queue.d.ts +7 -0
- package/dist/jobs/queue.d.ts.map +1 -0
- package/dist/jobs/queue.js +70 -0
- package/dist/jobs/queue.js.map +1 -0
- package/dist/jobs/retry.d.ts +25 -0
- package/dist/jobs/retry.d.ts.map +1 -0
- package/dist/jobs/retry.js +84 -0
- package/dist/jobs/retry.js.map +1 -0
- package/dist/jobs/scheduler.d.ts +52 -0
- package/dist/jobs/scheduler.d.ts.map +1 -0
- package/dist/jobs/scheduler.js +122 -0
- package/dist/jobs/scheduler.js.map +1 -0
- package/dist/jobs/store-files.d.ts +20 -0
- package/dist/jobs/store-files.d.ts.map +1 -0
- package/dist/jobs/store-files.js +177 -0
- package/dist/jobs/store-files.js.map +1 -0
- package/dist/jobs/store.d.ts +60 -0
- package/dist/jobs/store.d.ts.map +1 -0
- package/dist/jobs/store.js +97 -0
- package/dist/jobs/store.js.map +1 -0
- package/dist/runtime-capabilities.d.ts +17 -0
- package/dist/runtime-capabilities.d.ts.map +1 -0
- package/dist/runtime-capabilities.js +32 -0
- package/dist/runtime-capabilities.js.map +1 -0
- package/dist/state.d.ts +15 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +69 -0
- package/dist/state.js.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { join, resolve } from "node:path";
|
|
2
|
+
import { normalizeId } from "@relkit/contracts";
|
|
3
|
+
import { createEventDelivery } from "./delivery.js";
|
|
4
|
+
import { createEphemeralDelivery } from "./ephemeral.js";
|
|
5
|
+
import { EventRouterStateError, normalizeDelivery, normalizeEnvelope, normalizeExpansion, } from "./router-records.js";
|
|
6
|
+
import { createSnapshot, normalizeContract, publication, retryDelivery, drainDeliveries, runNextDelivery, } from "./router-inspection.js";
|
|
7
|
+
export { EVENT_DELIVERY_VERSION, EventRouterStateError } from "./router-records.js";
|
|
8
|
+
/** Routes accepted envelopes using only the compiler's explicit expansions. */
|
|
9
|
+
export async function createEventRouter(requestedRoot, options = {}) {
|
|
10
|
+
const root = resolve(requestedRoot);
|
|
11
|
+
if (root === resolve("/"))
|
|
12
|
+
throw new EventRouterStateError("Event router root is too broad");
|
|
13
|
+
const triggers = new Map();
|
|
14
|
+
const contracts = new Map();
|
|
15
|
+
const publications = [];
|
|
16
|
+
let publicationSequence = 0;
|
|
17
|
+
let closed = false;
|
|
18
|
+
const registerContract = async (contract) => {
|
|
19
|
+
ensureOpen();
|
|
20
|
+
const normalized = normalizeContract(contract);
|
|
21
|
+
const key = `${normalized.id}@${normalized.version}`;
|
|
22
|
+
if (contracts.has(key))
|
|
23
|
+
throw new EventRouterStateError(`Duplicate event contract ${key}`);
|
|
24
|
+
contracts.set(key, normalized);
|
|
25
|
+
};
|
|
26
|
+
const registerTrigger = async (binding) => {
|
|
27
|
+
ensureOpen();
|
|
28
|
+
const id = normalizeId(binding.id);
|
|
29
|
+
if (triggers.has(id))
|
|
30
|
+
throw new EventRouterStateError(`Duplicate event trigger ${id}`);
|
|
31
|
+
const delivery = normalizeDelivery(binding.delivery);
|
|
32
|
+
if (typeof binding.invoke !== "function")
|
|
33
|
+
throw new EventRouterStateError(`Event trigger ${id} has no invocation target`);
|
|
34
|
+
const normalized = Object.freeze({
|
|
35
|
+
...binding,
|
|
36
|
+
id,
|
|
37
|
+
delivery,
|
|
38
|
+
expansion: normalizeExpansion(binding.expansion),
|
|
39
|
+
});
|
|
40
|
+
const durable = delivery === "durable"
|
|
41
|
+
? await createEventDelivery(join(root, "triggers", id), normalized, {
|
|
42
|
+
...(options.now === undefined ? {} : { now: options.now }),
|
|
43
|
+
...(options.random === undefined ? {} : { random: options.random }),
|
|
44
|
+
...(options.ownerToken === undefined ? {} : { ownerToken: options.ownerToken }),
|
|
45
|
+
...(options.leaseDurationMs === undefined
|
|
46
|
+
? {}
|
|
47
|
+
: { leaseDurationMs: options.leaseDurationMs }),
|
|
48
|
+
onBoundary: (boundary) => options.onBoundary?.(boundary, id),
|
|
49
|
+
})
|
|
50
|
+
: undefined;
|
|
51
|
+
const ephemeral = delivery === "ephemeral"
|
|
52
|
+
? createEphemeralDelivery(normalized.invoke, options.ephemeralCapacity)
|
|
53
|
+
: undefined;
|
|
54
|
+
triggers.set(id, {
|
|
55
|
+
binding: normalized,
|
|
56
|
+
...(durable === undefined ? {} : { durable }),
|
|
57
|
+
...(ephemeral === undefined ? {} : { ephemeral }),
|
|
58
|
+
});
|
|
59
|
+
};
|
|
60
|
+
const route = async (input, routeOptions = {}) => {
|
|
61
|
+
ensureOpen();
|
|
62
|
+
const event = normalizeEnvelope(input);
|
|
63
|
+
publications.push(publication(input, event, ++publicationSequence, options.now ?? Date.now));
|
|
64
|
+
const pair = `${event.eventId}@${event.version}`;
|
|
65
|
+
const matching = [...triggers.values()]
|
|
66
|
+
.filter(({ binding }) => binding.expansion.includes(pair))
|
|
67
|
+
.sort((left, right) => left.binding.id.localeCompare(right.binding.id));
|
|
68
|
+
const deliveries = await Promise.all(matching.map((trigger) => deliver(trigger, event, routeOptions.run !== false)));
|
|
69
|
+
return Object.freeze({
|
|
70
|
+
event,
|
|
71
|
+
matchedTriggerIds: Object.freeze(matching.map(({ binding }) => binding.id)),
|
|
72
|
+
deliveries: Object.freeze(deliveries),
|
|
73
|
+
});
|
|
74
|
+
};
|
|
75
|
+
const runNext = async (triggerId) => {
|
|
76
|
+
ensureOpen();
|
|
77
|
+
return runNextDelivery(triggers, triggerId);
|
|
78
|
+
};
|
|
79
|
+
const drain = async () => {
|
|
80
|
+
ensureOpen();
|
|
81
|
+
return drainDeliveries(triggers);
|
|
82
|
+
};
|
|
83
|
+
const retry = async (deliveryId) => {
|
|
84
|
+
ensureOpen();
|
|
85
|
+
return retryDelivery(triggers, deliveryId);
|
|
86
|
+
};
|
|
87
|
+
const snapshot = () => {
|
|
88
|
+
ensureOpen();
|
|
89
|
+
return createSnapshot(triggers, contracts, publications);
|
|
90
|
+
};
|
|
91
|
+
const close = async () => {
|
|
92
|
+
if (closed)
|
|
93
|
+
return;
|
|
94
|
+
closed = true;
|
|
95
|
+
await Promise.all([...triggers.values()].flatMap(({ durable }) => (durable ? [durable.close()] : [])));
|
|
96
|
+
};
|
|
97
|
+
return Object.freeze({
|
|
98
|
+
root,
|
|
99
|
+
registerContract,
|
|
100
|
+
registerTrigger,
|
|
101
|
+
route,
|
|
102
|
+
runNext,
|
|
103
|
+
drain,
|
|
104
|
+
retry,
|
|
105
|
+
snapshot,
|
|
106
|
+
close,
|
|
107
|
+
});
|
|
108
|
+
function ensureOpen() {
|
|
109
|
+
if (closed)
|
|
110
|
+
throw new EventRouterStateError("Event router is closed");
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async function deliver({ binding, durable, ephemeral }, envelope, run) {
|
|
114
|
+
if (binding.delivery === "ephemeral") {
|
|
115
|
+
if (ephemeral === undefined)
|
|
116
|
+
throw new EventRouterStateError("Ephemeral trigger has no delivery limiter");
|
|
117
|
+
return Object.freeze({
|
|
118
|
+
triggerId: binding.id,
|
|
119
|
+
delivery: binding.delivery,
|
|
120
|
+
...(await ephemeral.deliver(envelope)),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
if (durable === undefined) {
|
|
124
|
+
return {
|
|
125
|
+
triggerId: binding.id,
|
|
126
|
+
delivery: binding.delivery,
|
|
127
|
+
accepted: false,
|
|
128
|
+
persisted: false,
|
|
129
|
+
status: "failed",
|
|
130
|
+
error: new EventRouterStateError("Durable trigger has no delivery"),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
const result = run ? await durable.deliver(envelope) : await durable.accept(envelope);
|
|
135
|
+
return Object.freeze({ delivery: binding.delivery, ...result });
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
return Object.freeze({
|
|
139
|
+
triggerId: binding.id,
|
|
140
|
+
delivery: binding.delivery,
|
|
141
|
+
accepted: false,
|
|
142
|
+
persisted: false,
|
|
143
|
+
status: "failed",
|
|
144
|
+
error,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/events/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ProviderBinding, ProviderCapability } from "@relkit/app";
|
|
2
|
+
import type { MaybePromise } from "@relkit/contracts";
|
|
3
|
+
export interface LocalBindingFactoryContext {
|
|
4
|
+
readonly generationId: string;
|
|
5
|
+
readonly environment: "development" | "test" | "production";
|
|
6
|
+
readonly capability: ProviderCapability;
|
|
7
|
+
readonly profile: string;
|
|
8
|
+
readonly binding: ProviderBinding;
|
|
9
|
+
readonly configuration: Readonly<Record<string, unknown>>;
|
|
10
|
+
readonly signal?: AbortSignal;
|
|
11
|
+
}
|
|
12
|
+
export interface LocalBindingGeneration {
|
|
13
|
+
readonly value?: unknown;
|
|
14
|
+
readonly modelRegistry?: unknown;
|
|
15
|
+
readonly ready?: () => MaybePromise<void>;
|
|
16
|
+
readonly release?: () => MaybePromise<void>;
|
|
17
|
+
readonly dispose?: () => MaybePromise<void>;
|
|
18
|
+
}
|
|
19
|
+
export interface LocalBindingFactory {
|
|
20
|
+
readonly capability: ProviderCapability;
|
|
21
|
+
readonly adapter: "memory";
|
|
22
|
+
readonly create: (context: LocalBindingFactoryContext) => MaybePromise<LocalBindingGeneration>;
|
|
23
|
+
}
|
|
24
|
+
export declare const localProviderFactories: Readonly<Record<ProviderCapability, LocalBindingFactory>>;
|
|
25
|
+
export declare function getLocalProviderFactory(capability: ProviderCapability): LocalBindingFactory | undefined;
|
|
26
|
+
//# sourceMappingURL=factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAWtD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,EAAE,aAAa,GAAG,MAAM,GAAG,YAAY,CAAC;IAC5D,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAC;IAClC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAC1C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;IAC5C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,0BAA0B,KAAK,YAAY,CAAC,sBAAsB,CAAC,CAAC;CAChG;AAED,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,MAAM,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAQzF,CAAC;AAEL,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,kBAAkB,GAC7B,mBAAmB,GAAG,SAAS,CAEjC"}
|
package/dist/factory.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { createLocalBucketProvider } from "./buckets/index.js";
|
|
3
|
+
import { createLocalCacheProvider } from "./cache/index.js";
|
|
4
|
+
import { createLocalEventProvider } from "./events/provider.js";
|
|
5
|
+
import { createLocalJobProvider, createLocalObservabilityProvider, } from "./runtime-capabilities.js";
|
|
6
|
+
import { createLocalProviderStateRoot } from "./state.js";
|
|
7
|
+
export const localProviderFactories = Object.freeze({
|
|
8
|
+
buckets: factory("buckets", createBucket),
|
|
9
|
+
cache: factory("cache", createCache),
|
|
10
|
+
jobs: factory("jobs", createJobs),
|
|
11
|
+
events: factory("events", createEvents),
|
|
12
|
+
models: factory("models", createModels),
|
|
13
|
+
observability: factory("observability", createObservability),
|
|
14
|
+
});
|
|
15
|
+
export function getLocalProviderFactory(capability) {
|
|
16
|
+
return localProviderFactories[capability];
|
|
17
|
+
}
|
|
18
|
+
function factory(capability, create) {
|
|
19
|
+
return Object.freeze({ capability, adapter: "memory", create });
|
|
20
|
+
}
|
|
21
|
+
function createBucket(context) {
|
|
22
|
+
const provider = createLocalBucketProvider({
|
|
23
|
+
root: join(stateRoot(context).buckets, context.profile),
|
|
24
|
+
});
|
|
25
|
+
return { value: provider, ready: provider.ready, release: provider.close };
|
|
26
|
+
}
|
|
27
|
+
function createCache(context) {
|
|
28
|
+
const provider = createLocalCacheProvider({
|
|
29
|
+
stateRoot: join(stateRoot(context).cache, context.profile),
|
|
30
|
+
cacheId: context.profile,
|
|
31
|
+
});
|
|
32
|
+
return { value: provider, ready: provider.ready, release: provider.close };
|
|
33
|
+
}
|
|
34
|
+
async function createEvents(context) {
|
|
35
|
+
const provider = await createLocalEventProvider(join(stateRoot(context).root, "events", context.profile));
|
|
36
|
+
return { value: provider, release: provider.close };
|
|
37
|
+
}
|
|
38
|
+
function createJobs(context) {
|
|
39
|
+
const provider = createLocalJobProvider(stateRoot(context).root, context.profile);
|
|
40
|
+
return { value: provider, release: provider.close };
|
|
41
|
+
}
|
|
42
|
+
function createObservability(_context) {
|
|
43
|
+
return { value: createLocalObservabilityProvider() };
|
|
44
|
+
}
|
|
45
|
+
function createModels(_context) {
|
|
46
|
+
const modelRegistry = Object.freeze({
|
|
47
|
+
resolveModel: (selector) => ({
|
|
48
|
+
provider: "test",
|
|
49
|
+
id: selector ?? "test:default",
|
|
50
|
+
model: Object.freeze({ provider: "relkit.test", modelId: "default" }),
|
|
51
|
+
}),
|
|
52
|
+
});
|
|
53
|
+
return { modelRegistry };
|
|
54
|
+
}
|
|
55
|
+
function stateRoot(context) {
|
|
56
|
+
check(context);
|
|
57
|
+
return createLocalProviderStateRoot(join(process.cwd(), ".relkit", "state", "testing", context.generationId));
|
|
58
|
+
}
|
|
59
|
+
function check(context) {
|
|
60
|
+
if (context.generationId.trim() === "")
|
|
61
|
+
throw new TypeError("Generation ID is required");
|
|
62
|
+
if (context.signal?.aborted) {
|
|
63
|
+
throw context.signal.reason ?? new Error("Provider generation was aborted");
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../src/factory.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export * from "./factory.js";
|
|
2
|
+
export * from "./buckets/index.js";
|
|
3
|
+
export * from "./cache/index.js";
|
|
4
|
+
export * from "./jobs/queue.js";
|
|
5
|
+
export type * from "./jobs/queue-utils.js";
|
|
6
|
+
export { createJobStore } from "./jobs/store.js";
|
|
7
|
+
export type { JobRecord, JobRecordInput, JobStore, JobStoreBoundary, JobStoreCheckpoint, JobStoreIndex, JobStoreOptions, JobStoreSnapshot, } from "./jobs/store.js";
|
|
8
|
+
export * from "./jobs/retry.js";
|
|
9
|
+
export * from "./jobs/scheduler.js";
|
|
10
|
+
export * from "./jobs/admin.js";
|
|
11
|
+
export * from "./events/log.js";
|
|
12
|
+
export * from "./events/router.js";
|
|
13
|
+
export * from "./events/provider.js";
|
|
14
|
+
export * from "./events/admin.js";
|
|
15
|
+
export * from "./events/ephemeral.js";
|
|
16
|
+
export { EVENT_DELIVERY_CAPABILITIES, createEventDelivery } from "./events/delivery.js";
|
|
17
|
+
export type { EventDelivery, EventDeliveryBinding, EventDeliveryBoundary, EventDeliveryLedgerRecord, EventDeliveryOptions, EventDeliveryResult as DurableEventDeliveryResult, EventDeliverySnapshot, } from "./events/delivery.js";
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,mBAAmB,uBAAuB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,YAAY,EACV,SAAS,EACT,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACxF,YAAY,EACV,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,oBAAoB,EACpB,mBAAmB,IAAI,0BAA0B,EACjD,qBAAqB,GACtB,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export * from "./factory.js";
|
|
2
|
+
export * from "./buckets/index.js";
|
|
3
|
+
export * from "./cache/index.js";
|
|
4
|
+
export * from "./jobs/queue.js";
|
|
5
|
+
export { createJobStore } from "./jobs/store.js";
|
|
6
|
+
export * from "./jobs/retry.js";
|
|
7
|
+
export * from "./jobs/scheduler.js";
|
|
8
|
+
export * from "./jobs/admin.js";
|
|
9
|
+
export * from "./events/log.js";
|
|
10
|
+
export * from "./events/router.js";
|
|
11
|
+
export * from "./events/provider.js";
|
|
12
|
+
export * from "./events/admin.js";
|
|
13
|
+
export * from "./events/ephemeral.js";
|
|
14
|
+
export { EVENT_DELIVERY_CAPABILITIES, createEventDelivery } from "./events/delivery.js";
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAWjD,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type MaybePromise } from "@relkit/contracts";
|
|
2
|
+
import type { JobFailureMetadata, JobQueueCounts, JobQueueState } from "./queue-utils.js";
|
|
3
|
+
export declare const JOB_ADMIN_PROTOCOL: "relkit.jobs.admin";
|
|
4
|
+
export declare const JOB_ADMIN_VERSION: 1;
|
|
5
|
+
export type JobAdminMode = "development" | "test" | "production";
|
|
6
|
+
export type JobAdminAction = "retry" | "cancel" | "dead-letter";
|
|
7
|
+
export type JobAdminActionOutcome = "applied" | "rejected";
|
|
8
|
+
export interface JobAdminVersion {
|
|
9
|
+
readonly protocol: typeof JOB_ADMIN_PROTOCOL;
|
|
10
|
+
readonly version: typeof JOB_ADMIN_VERSION;
|
|
11
|
+
}
|
|
12
|
+
/** Safe, versioned state returned to inspector consumers. */
|
|
13
|
+
export interface JobStatusContract extends JobAdminVersion {
|
|
14
|
+
readonly instanceId: string;
|
|
15
|
+
readonly state: JobQueueState;
|
|
16
|
+
readonly profile: string;
|
|
17
|
+
readonly attempt: number;
|
|
18
|
+
readonly acceptedAt: number;
|
|
19
|
+
readonly order: number;
|
|
20
|
+
readonly availableAt?: number;
|
|
21
|
+
readonly leaseExpiresAt?: number;
|
|
22
|
+
readonly idempotencyExpiresAt?: number;
|
|
23
|
+
readonly failure?: JobFailureMetadata;
|
|
24
|
+
}
|
|
25
|
+
export interface JobQueryRequest {
|
|
26
|
+
readonly protocol?: typeof JOB_ADMIN_PROTOCOL;
|
|
27
|
+
readonly version?: typeof JOB_ADMIN_VERSION;
|
|
28
|
+
readonly instanceId?: string;
|
|
29
|
+
readonly state?: JobQueueState;
|
|
30
|
+
readonly states?: readonly JobQueueState[];
|
|
31
|
+
readonly cursor?: string;
|
|
32
|
+
readonly limit?: number;
|
|
33
|
+
}
|
|
34
|
+
export interface JobQueryContract extends JobAdminVersion {
|
|
35
|
+
readonly items: readonly JobStatusContract[];
|
|
36
|
+
readonly counts: JobQueueCounts;
|
|
37
|
+
readonly nextCursor?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface JobActionRequest {
|
|
40
|
+
readonly protocol?: typeof JOB_ADMIN_PROTOCOL;
|
|
41
|
+
readonly version?: typeof JOB_ADMIN_VERSION;
|
|
42
|
+
readonly instanceId: string;
|
|
43
|
+
readonly reason?: string;
|
|
44
|
+
}
|
|
45
|
+
export type JobRetryRequest = JobActionRequest;
|
|
46
|
+
export type JobCancelRequest = JobActionRequest;
|
|
47
|
+
export type JobDeadLetterRequest = JobActionRequest;
|
|
48
|
+
export interface JobAdminActionRecord extends JobAdminVersion {
|
|
49
|
+
readonly actionId: string;
|
|
50
|
+
readonly action: JobAdminAction;
|
|
51
|
+
readonly instanceId: string;
|
|
52
|
+
readonly mode: JobAdminMode;
|
|
53
|
+
readonly outcome: JobAdminActionOutcome;
|
|
54
|
+
readonly requestedAt: number;
|
|
55
|
+
readonly fromState?: JobQueueState;
|
|
56
|
+
readonly toState?: JobQueueState;
|
|
57
|
+
readonly errorCode?: string;
|
|
58
|
+
readonly reason?: string;
|
|
59
|
+
}
|
|
60
|
+
export interface JobActionContract extends JobAdminVersion {
|
|
61
|
+
readonly action: JobAdminAction;
|
|
62
|
+
readonly status: JobStatusContract;
|
|
63
|
+
readonly record: JobAdminActionRecord;
|
|
64
|
+
}
|
|
65
|
+
export type JobAdminActionSink = (record: JobAdminActionRecord) => MaybePromise<void>;
|
|
66
|
+
//# sourceMappingURL=admin-contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-contracts.d.ts","sourceRoot":"","sources":["../../src/jobs/admin-contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-contracts.js","sourceRoot":"","sources":["../../src/jobs/admin-contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAqB,MAAM,mBAAmB,CAAC;AAGxE,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAA4B,CAAC;AAC/D,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-errors.d.ts","sourceRoot":"","sources":["../../src/jobs/admin-errors.ts"],"names":[],"mappings":"AAAA,qBAAa,aAAc,SAAQ,KAAK;IAEpC,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAKlB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-errors.js","sourceRoot":"","sources":["../../src/jobs/admin-errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,aAAc,SAAQ,KAAK;IAE3B;IADX,YACW,IAAY,EACrB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,SAAI,GAAJ,IAAI,CAAQ;QAIrB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { JobAdminError } from "./admin-errors.js";
|
|
2
|
+
import { type JobAdminAction, type JobAdminActionRecord, type JobAdminActionSink, type JobAdminMode, type JobAdminVersion, type JobQueryRequest, type JobStatusContract } from "./admin-contracts.js";
|
|
3
|
+
import type { JobQueueEntry } from "./queue-utils.js";
|
|
4
|
+
export declare function toStatus(entry: JobQueueEntry): JobStatusContract;
|
|
5
|
+
export declare function matches(entry: JobQueueEntry, request: JobQueryRequest): boolean;
|
|
6
|
+
export declare function afterCursor(entry: JobQueueEntry, value: string | undefined): boolean;
|
|
7
|
+
export declare function cursor(entry: JobQueueEntry): string;
|
|
8
|
+
export declare function pageLimit(value: number | undefined): number;
|
|
9
|
+
export declare function validateQuery(request: JobQueryRequest): void;
|
|
10
|
+
export declare function failureFor(action: JobAdminAction): {
|
|
11
|
+
readonly kind: "provider" | "cancellation";
|
|
12
|
+
readonly outcome: "provider-failure" | "cancelled";
|
|
13
|
+
readonly code: "RELKIT_JOB_ADMIN_CANCELLED" | "RELKIT_JOB_ADMIN_DEAD_LETTERED";
|
|
14
|
+
readonly message: "Job cancelled by local development action" | "Job dead-lettered by local development action";
|
|
15
|
+
readonly retry: "never";
|
|
16
|
+
};
|
|
17
|
+
export declare function makeRecord(action: JobAdminAction, actionId: string, instanceId: string, requestedAt: number, outcome: "applied" | "rejected", mode: JobAdminMode, before: JobQueueEntry | undefined, after: JobQueueEntry | undefined, errorCode?: string, reason?: string): JobAdminActionRecord;
|
|
18
|
+
export declare function recordAction(options: {
|
|
19
|
+
readonly onAction?: JobAdminActionSink;
|
|
20
|
+
readonly records: JobAdminActionRecord[];
|
|
21
|
+
}, record: JobAdminActionRecord): Promise<JobAdminActionRecord>;
|
|
22
|
+
export declare function versioned<T extends object>(value: T): T & JobAdminVersion;
|
|
23
|
+
export declare function assertVersion(value: unknown): void;
|
|
24
|
+
export declare function assertMode(value: string): asserts value is JobAdminMode;
|
|
25
|
+
export declare function safeId(value: unknown): string | undefined;
|
|
26
|
+
export declare function readReason(value: unknown): string | undefined;
|
|
27
|
+
export declare function safeReason(value: unknown): string | undefined;
|
|
28
|
+
export declare function safeError(value: unknown): JobAdminError;
|
|
29
|
+
//# sourceMappingURL=admin-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-utils.d.ts","sourceRoot":"","sources":["../../src/jobs/admin-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAKL,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,iBAAiB,CAehE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAK/E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAOpF;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAEnD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK3D;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAQ5D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc;;;;;;EAWhD;AAED,wBAAgB,UAAU,CACxB,MAAM,EAAE,cAAc,EACtB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,SAAS,GAAG,UAAU,EAC/B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,aAAa,GAAG,SAAS,EACjC,KAAK,EAAE,aAAa,GAAG,SAAS,EAChC,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACd,oBAAoB,CAatB;AAED,wBAAsB,YAAY,CAChC,OAAO,EAAE;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,EAAE,CAAA;CAAE,EAC7F,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,oBAAoB,CAAC,CAQ/B;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,eAAe,CAEzE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAQlD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,IAAI,YAAY,CAGvE;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAMzD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAK7D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAM7D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAIvD"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { deepFreeze, normalizeId } from "@relkit/contracts";
|
|
2
|
+
import { JobAdminError } from "./admin-errors.js";
|
|
3
|
+
import { JOB_ADMIN_PROTOCOL, JOB_ADMIN_VERSION, } from "./admin-contracts.js";
|
|
4
|
+
export function toStatus(entry) {
|
|
5
|
+
return versioned({
|
|
6
|
+
instanceId: entry.instanceId,
|
|
7
|
+
state: entry.state,
|
|
8
|
+
profile: entry.profile,
|
|
9
|
+
attempt: entry.attempt,
|
|
10
|
+
acceptedAt: entry.acceptedAt,
|
|
11
|
+
order: entry.order,
|
|
12
|
+
...(entry.availableAt === undefined ? {} : { availableAt: entry.availableAt }),
|
|
13
|
+
...(entry.leaseExpiresAt === undefined ? {} : { leaseExpiresAt: entry.leaseExpiresAt }),
|
|
14
|
+
...(entry.idempotency === undefined
|
|
15
|
+
? {}
|
|
16
|
+
: { idempotencyExpiresAt: entry.idempotency.expiresAt }),
|
|
17
|
+
...(entry.failure === undefined ? {} : { failure: entry.failure }),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
export function matches(entry, request) {
|
|
21
|
+
if (request.instanceId !== undefined && entry.instanceId !== normalizeId(request.instanceId))
|
|
22
|
+
return false;
|
|
23
|
+
const states = request.states ?? (request.state === undefined ? undefined : [request.state]);
|
|
24
|
+
return states === undefined || states.includes(entry.state);
|
|
25
|
+
}
|
|
26
|
+
export function afterCursor(entry, value) {
|
|
27
|
+
if (value === undefined)
|
|
28
|
+
return true;
|
|
29
|
+
const [order, instanceId] = value.split(":", 2);
|
|
30
|
+
const parsed = Number(order);
|
|
31
|
+
if (!Number.isSafeInteger(parsed) || instanceId === undefined)
|
|
32
|
+
throw newAdminError("RELKIT_JOB_ADMIN_CURSOR_INVALID", "Job query cursor is invalid");
|
|
33
|
+
return entry.order > parsed || (entry.order === parsed && entry.instanceId > instanceId);
|
|
34
|
+
}
|
|
35
|
+
export function cursor(entry) {
|
|
36
|
+
return `${entry.order}:${entry.instanceId}`;
|
|
37
|
+
}
|
|
38
|
+
export function pageLimit(value) {
|
|
39
|
+
if (value === undefined)
|
|
40
|
+
return 50;
|
|
41
|
+
if (!Number.isSafeInteger(value) || value < 1)
|
|
42
|
+
throw newAdminError("RELKIT_JOB_ADMIN_QUERY_INVALID", "Job query limit is invalid");
|
|
43
|
+
return Math.min(value, 100);
|
|
44
|
+
}
|
|
45
|
+
export function validateQuery(request) {
|
|
46
|
+
if (request.state !== undefined && !isState(request.state))
|
|
47
|
+
throw newAdminError("RELKIT_JOB_ADMIN_QUERY_INVALID", "Job query state is invalid");
|
|
48
|
+
if (request.states !== undefined &&
|
|
49
|
+
(!Array.isArray(request.states) || request.states.some((state) => !isState(state))))
|
|
50
|
+
throw newAdminError("RELKIT_JOB_ADMIN_QUERY_INVALID", "Job query states are invalid");
|
|
51
|
+
}
|
|
52
|
+
export function failureFor(action) {
|
|
53
|
+
return {
|
|
54
|
+
kind: action === "cancel" ? "cancellation" : "provider",
|
|
55
|
+
outcome: action === "cancel" ? "cancelled" : "provider-failure",
|
|
56
|
+
code: action === "cancel" ? "RELKIT_JOB_ADMIN_CANCELLED" : "RELKIT_JOB_ADMIN_DEAD_LETTERED",
|
|
57
|
+
message: action === "cancel"
|
|
58
|
+
? "Job cancelled by local development action"
|
|
59
|
+
: "Job dead-lettered by local development action",
|
|
60
|
+
retry: "never",
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export function makeRecord(action, actionId, instanceId, requestedAt, outcome, mode, before, after, errorCode, reason) {
|
|
64
|
+
return versioned({
|
|
65
|
+
actionId,
|
|
66
|
+
action,
|
|
67
|
+
instanceId,
|
|
68
|
+
mode,
|
|
69
|
+
outcome,
|
|
70
|
+
requestedAt,
|
|
71
|
+
...(before === undefined ? {} : { fromState: before.state }),
|
|
72
|
+
...(after === undefined ? {} : { toState: after.state }),
|
|
73
|
+
...(errorCode === undefined ? {} : { errorCode }),
|
|
74
|
+
...(reason === undefined ? {} : { reason }),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
export async function recordAction(options, record) {
|
|
78
|
+
options.records.push(record);
|
|
79
|
+
try {
|
|
80
|
+
await options.onAction?.(record);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// A failing sink cannot erase the local action record or change its result.
|
|
84
|
+
}
|
|
85
|
+
return record;
|
|
86
|
+
}
|
|
87
|
+
export function versioned(value) {
|
|
88
|
+
return deepFreeze({ protocol: JOB_ADMIN_PROTOCOL, version: JOB_ADMIN_VERSION, ...value });
|
|
89
|
+
}
|
|
90
|
+
export function assertVersion(value) {
|
|
91
|
+
if (!isRecord(value))
|
|
92
|
+
throw newAdminError("RELKIT_JOB_ADMIN_REQUEST_INVALID", "Job admin request is invalid");
|
|
93
|
+
if ((value.protocol !== undefined && value.protocol !== JOB_ADMIN_PROTOCOL) ||
|
|
94
|
+
(value.version !== undefined && value.version !== JOB_ADMIN_VERSION))
|
|
95
|
+
throw newAdminError("RELKIT_JOB_ADMIN_PROTOCOL_MISMATCH", "Unsupported job admin protocol");
|
|
96
|
+
}
|
|
97
|
+
export function assertMode(value) {
|
|
98
|
+
if (value !== "development" && value !== "test" && value !== "production")
|
|
99
|
+
throw newAdminError("RELKIT_JOB_ADMIN_MODE_INVALID", "Job admin mode is invalid");
|
|
100
|
+
}
|
|
101
|
+
export function safeId(value) {
|
|
102
|
+
try {
|
|
103
|
+
return normalizeId(value);
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
export function readReason(value) {
|
|
110
|
+
if (!isRecord(value) || value.reason === undefined)
|
|
111
|
+
return undefined;
|
|
112
|
+
if (typeof value.reason !== "string" || value.reason.trim() === "")
|
|
113
|
+
throw newAdminError("RELKIT_JOB_ADMIN_REQUEST_INVALID", "Job action reason is invalid");
|
|
114
|
+
return value.reason.trim().slice(0, 256);
|
|
115
|
+
}
|
|
116
|
+
export function safeReason(value) {
|
|
117
|
+
try {
|
|
118
|
+
return readReason(value);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
return undefined;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
export function safeError(value) {
|
|
125
|
+
return value instanceof JobAdminError
|
|
126
|
+
? value
|
|
127
|
+
: newAdminError("RELKIT_JOB_ADMIN_ACTION_FAILED", "Job admin action failed");
|
|
128
|
+
}
|
|
129
|
+
function isState(value) {
|
|
130
|
+
return ["accepted", "available", "leased", "delayed", "completed", "dead-lettered"].includes(value);
|
|
131
|
+
}
|
|
132
|
+
function isRecord(value) {
|
|
133
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
134
|
+
}
|
|
135
|
+
function newAdminError(code, message) {
|
|
136
|
+
return new JobAdminError(code, message);
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=admin-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-utils.js","sourceRoot":"","sources":["../../src/jobs/admin-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { JobQueue } from "./queue-utils.js";
|
|
2
|
+
import { JOB_ADMIN_PROTOCOL, JOB_ADMIN_VERSION, type JobActionContract, type JobActionRequest, type JobAdminActionRecord, type JobAdminActionSink, type JobAdminMode, type JobQueryContract, type JobQueryRequest, type JobStatusContract } from "./admin-contracts.js";
|
|
3
|
+
export * from "./admin-contracts.js";
|
|
4
|
+
export { JobAdminError } from "./admin-errors.js";
|
|
5
|
+
export interface JobAdminOptions {
|
|
6
|
+
readonly mode?: JobAdminMode;
|
|
7
|
+
readonly environment?: JobAdminMode;
|
|
8
|
+
readonly enabled?: boolean;
|
|
9
|
+
readonly now?: () => number;
|
|
10
|
+
readonly createActionId?: () => string;
|
|
11
|
+
readonly onAction?: JobAdminActionSink;
|
|
12
|
+
}
|
|
13
|
+
export interface JobAdmin {
|
|
14
|
+
readonly protocol: typeof JOB_ADMIN_PROTOCOL;
|
|
15
|
+
readonly version: typeof JOB_ADMIN_VERSION;
|
|
16
|
+
readonly status: (instanceId: string) => JobStatusContract | undefined;
|
|
17
|
+
readonly query: (request?: JobQueryRequest) => JobQueryContract;
|
|
18
|
+
readonly retry: (request: string | JobActionRequest) => Promise<JobActionContract>;
|
|
19
|
+
readonly cancel: (request: string | JobActionRequest) => Promise<JobActionContract>;
|
|
20
|
+
readonly deadLetter: (request: string | JobActionRequest) => Promise<JobActionContract>;
|
|
21
|
+
readonly actions: () => readonly JobAdminActionRecord[];
|
|
22
|
+
}
|
|
23
|
+
/** Exposes versioned local job inspection and explicitly audited mutations. */
|
|
24
|
+
export declare function createJobAdmin(queue: JobQueue, options?: JobAdminOptions): JobAdmin;
|
|
25
|
+
//# sourceMappingURL=admin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/jobs/admin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAErB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACvB,MAAM,sBAAsB,CAAC;AAoB9B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,MAAM,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CACxC;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,OAAO,kBAAkB,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,OAAO,iBAAiB,CAAC;IAC3C,QAAQ,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,iBAAiB,GAAG,SAAS,CAAC;IACvE,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,eAAe,KAAK,gBAAgB,CAAC;IAChE,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACnF,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpF,QAAQ,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACxF,QAAQ,CAAC,OAAO,EAAE,MAAM,SAAS,oBAAoB,EAAE,CAAC;CACzD;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAE,eAAoB,GAAG,QAAQ,CA8CvF"}
|