@memberjunction/work-queue-core 0.0.0 → 6.2.0-edge.3
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 +183 -0
- package/README.md +128 -43
- package/dist/api/WorkQueueApiPublisher.d.ts +35 -0
- package/dist/api/WorkQueueApiPublisher.d.ts.map +1 -0
- package/dist/api/WorkQueueApiPublisher.js +136 -0
- package/dist/api/WorkQueueApiPublisher.js.map +1 -0
- package/dist/api/restContract.d.ts +50 -0
- package/dist/api/restContract.d.ts.map +1 -0
- package/dist/api/restContract.js +247 -0
- package/dist/api/restContract.js.map +1 -0
- package/dist/backoff.d.ts +15 -0
- package/dist/backoff.d.ts.map +1 -0
- package/dist/backoff.js +29 -0
- package/dist/backoff.js.map +1 -0
- package/dist/compatibility.d.ts +10 -0
- package/dist/compatibility.d.ts.map +1 -0
- package/dist/compatibility.js +41 -0
- package/dist/compatibility.js.map +1 -0
- package/dist/envelope.d.ts +33 -0
- package/dist/envelope.d.ts.map +1 -0
- package/dist/envelope.js +2 -0
- package/dist/envelope.js.map +1 -0
- package/dist/errors.d.ts +14 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +23 -0
- package/dist/errors.js.map +1 -0
- package/dist/filter.d.ts +12 -0
- package/dist/filter.d.ts.map +1 -0
- package/dist/filter.js +187 -0
- package/dist/filter.js.map +1 -0
- package/dist/filterTypes.d.ts +25 -0
- package/dist/filterTypes.d.ts.map +1 -0
- package/dist/filterTypes.js +2 -0
- package/dist/filterTypes.js.map +1 -0
- package/dist/handler.d.ts +56 -0
- package/dist/handler.d.ts.map +1 -0
- package/dist/handler.js +25 -0
- package/dist/handler.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +46 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +2 -0
- package/dist/manifest.js.map +1 -0
- package/dist/memory/InMemoryConsumer.d.ts +18 -0
- package/dist/memory/InMemoryConsumer.d.ts.map +1 -0
- package/dist/memory/InMemoryConsumer.js +36 -0
- package/dist/memory/InMemoryConsumer.js.map +1 -0
- package/dist/memory/InMemoryOperator.d.ts +13 -0
- package/dist/memory/InMemoryOperator.d.ts.map +1 -0
- package/dist/memory/InMemoryOperator.js +25 -0
- package/dist/memory/InMemoryOperator.js.map +1 -0
- package/dist/memory/InMemoryStore.d.ts +82 -0
- package/dist/memory/InMemoryStore.d.ts.map +1 -0
- package/dist/memory/InMemoryStore.js +436 -0
- package/dist/memory/InMemoryStore.js.map +1 -0
- package/dist/memory/InMemoryTransport.d.ts +29 -0
- package/dist/memory/InMemoryTransport.d.ts.map +1 -0
- package/dist/memory/InMemoryTransport.js +48 -0
- package/dist/memory/InMemoryTransport.js.map +1 -0
- package/dist/operator.d.ts +60 -0
- package/dist/operator.d.ts.map +1 -0
- package/dist/operator.js +2 -0
- package/dist/operator.js.map +1 -0
- package/dist/policy.d.ts +24 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +10 -0
- package/dist/policy.js.map +1 -0
- package/dist/publishing.d.ts +58 -0
- package/dist/publishing.d.ts.map +1 -0
- package/dist/publishing.js +40 -0
- package/dist/publishing.js.map +1 -0
- package/dist/runtime/ConsumerRuntime.d.ts +46 -0
- package/dist/runtime/ConsumerRuntime.d.ts.map +1 -0
- package/dist/runtime/ConsumerRuntime.js +252 -0
- package/dist/runtime/ConsumerRuntime.js.map +1 -0
- package/dist/runtime/DeliveryExecution.d.ts +83 -0
- package/dist/runtime/DeliveryExecution.d.ts.map +1 -0
- package/dist/runtime/DeliveryExecution.js +0 -0
- package/dist/runtime/DeliveryExecution.js.map +1 -0
- package/dist/runtime/outcomes.d.ts +28 -0
- package/dist/runtime/outcomes.d.ts.map +1 -0
- package/dist/runtime/outcomes.js +65 -0
- package/dist/runtime/outcomes.js.map +1 -0
- package/dist/runtime/types.d.ts +14 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +2 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/testing/ConformanceHarness.d.ts +45 -0
- package/dist/testing/ConformanceHarness.d.ts.map +1 -0
- package/dist/testing/ConformanceHarness.js +2 -0
- package/dist/testing/ConformanceHarness.js.map +1 -0
- package/dist/testing/ConformanceScenario.d.ts +29 -0
- package/dist/testing/ConformanceScenario.d.ts.map +1 -0
- package/dist/testing/ConformanceScenario.js +83 -0
- package/dist/testing/ConformanceScenario.js.map +1 -0
- package/dist/testing/RunConformanceChecks.d.ts +10 -0
- package/dist/testing/RunConformanceChecks.d.ts.map +1 -0
- package/dist/testing/RunConformanceChecks.js +50 -0
- package/dist/testing/RunConformanceChecks.js.map +1 -0
- package/dist/testing/assertions.d.ts +13 -0
- package/dist/testing/assertions.d.ts.map +1 -0
- package/dist/testing/assertions.js +66 -0
- package/dist/testing/assertions.js.map +1 -0
- package/dist/testing/conformanceCases.d.ts +4 -0
- package/dist/testing/conformanceCases.d.ts.map +1 -0
- package/dist/testing/conformanceCases.js +359 -0
- package/dist/testing/conformanceCases.js.map +1 -0
- package/dist/testing/fixtures.d.ts +21 -0
- package/dist/testing/fixtures.d.ts.map +1 -0
- package/dist/testing/fixtures.js +39 -0
- package/dist/testing/fixtures.js.map +1 -0
- package/dist/testing/index.d.ts +6 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +5 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/vitest.d.ts +4 -0
- package/dist/testing/vitest.d.ts.map +1 -0
- package/dist/testing/vitest.js +19 -0
- package/dist/testing/vitest.js.map +1 -0
- package/dist/transport.d.ts +106 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +2 -0
- package/dist/transport.js.map +1 -0
- package/dist/validation.d.ts +26 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +177 -0
- package/dist/validation.js.map +1 -0
- package/package.json +49 -8
package/dist/filter.js
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { WorkQueueConfigurationError } from './errors.js';
|
|
2
|
+
import { ATTRIBUTE_KEY_PATTERN } from './validation.js';
|
|
3
|
+
const ALL_OPERATORS = ['eq', 'neq', 'startswith', 'isnull', 'isnotnull'];
|
|
4
|
+
const VALUELESS_OPERATORS = ['isnull', 'isnotnull'];
|
|
5
|
+
/** What the Database transport accepts; cloud drivers narrow it. */
|
|
6
|
+
export const WORK_QUEUE_FILTER_SUPPORT = {
|
|
7
|
+
Operators: ALL_OPERATORS,
|
|
8
|
+
SingleFieldOrGroups: true,
|
|
9
|
+
MaxFields: 5,
|
|
10
|
+
MaxValues: 50,
|
|
11
|
+
};
|
|
12
|
+
/** Parses a subscription's Filter column. Null or blank text means "match everything". */
|
|
13
|
+
export function ParseSubscriptionFilter(json, support) {
|
|
14
|
+
if (json === null || json.trim() === '') {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
let parsed;
|
|
18
|
+
try {
|
|
19
|
+
parsed = JSON.parse(json);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
throw new WorkQueueConfigurationError('Filter is not valid JSON');
|
|
23
|
+
}
|
|
24
|
+
return ValidateSubscriptionFilter(parsed, support);
|
|
25
|
+
}
|
|
26
|
+
/** Checks an already-parsed CompositeFilterDescriptor against the queue's subset and this transport's support. */
|
|
27
|
+
export function ValidateSubscriptionFilter(value, support) {
|
|
28
|
+
if (!isGroup(value)) {
|
|
29
|
+
throw new WorkQueueConfigurationError('Filter must be a CompositeFilterDescriptor object: { "logic": "and", "filters": [...] }');
|
|
30
|
+
}
|
|
31
|
+
if (value.logic !== 'and') {
|
|
32
|
+
throw new WorkQueueConfigurationError("Filter root logic must be 'and'; OR is only allowed inside a single-field group");
|
|
33
|
+
}
|
|
34
|
+
const filters = value.filters.map((entry) => (isGroup(entry) ? validateGroup(entry, support) : validateRule(entry, support)));
|
|
35
|
+
const constrained = new Set();
|
|
36
|
+
for (const entry of filters) {
|
|
37
|
+
const field = entryField(entry);
|
|
38
|
+
if (constrained.has(field)) {
|
|
39
|
+
throw new WorkQueueConfigurationError(`Filter field '${field}' is constrained more than once; combine the conditions into a single rule or one OR group`);
|
|
40
|
+
}
|
|
41
|
+
constrained.add(field);
|
|
42
|
+
}
|
|
43
|
+
const result = { logic: 'and', filters };
|
|
44
|
+
const fields = FilterFields(result);
|
|
45
|
+
if (fields.length > support.MaxFields) {
|
|
46
|
+
throw new WorkQueueConfigurationError(`Filter may reference at most ${support.MaxFields} fields; got ${fields.length}`);
|
|
47
|
+
}
|
|
48
|
+
const values = countValues(result);
|
|
49
|
+
if (values > support.MaxValues) {
|
|
50
|
+
throw new WorkQueueConfigurationError(`Filter may have at most ${support.MaxValues} values in total; got ${values}`);
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
/** AND across the root's entries; OR inside a single-field group. Case-sensitive (spec 03 §4.3). */
|
|
55
|
+
export function MatchesFilter(filter, attributes) {
|
|
56
|
+
if (filter === null || filter.filters.length === 0) {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
return matchesGroup(filter, attributes);
|
|
60
|
+
}
|
|
61
|
+
/** Distinct field names, in first-seen order. */
|
|
62
|
+
export function FilterFields(filter) {
|
|
63
|
+
if (filter === null) {
|
|
64
|
+
return [];
|
|
65
|
+
}
|
|
66
|
+
const seen = [];
|
|
67
|
+
walkRules(filter, (rule) => {
|
|
68
|
+
if (!seen.includes(rule.field)) {
|
|
69
|
+
seen.push(rule.field);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
return seen;
|
|
73
|
+
}
|
|
74
|
+
function matchesGroup(group, attributes) {
|
|
75
|
+
const results = group.filters.map((entry) => isGroup(entry) ? matchesGroup(entry, attributes) : matchesRule(entry, attributes));
|
|
76
|
+
return group.logic === 'and' ? results.every(Boolean) : results.some(Boolean);
|
|
77
|
+
}
|
|
78
|
+
function matchesRule(rule, attributes) {
|
|
79
|
+
const present = Object.prototype.hasOwnProperty.call(attributes, rule.field);
|
|
80
|
+
const value = present ? attributes[rule.field] : undefined;
|
|
81
|
+
if (rule.operator === 'isnull') {
|
|
82
|
+
return !present;
|
|
83
|
+
}
|
|
84
|
+
if (rule.operator === 'isnotnull') {
|
|
85
|
+
return present;
|
|
86
|
+
}
|
|
87
|
+
if (value === undefined) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
const expected = String(rule.value ?? '');
|
|
91
|
+
switch (rule.operator) {
|
|
92
|
+
case 'eq':
|
|
93
|
+
return value === expected;
|
|
94
|
+
case 'neq':
|
|
95
|
+
return value !== expected;
|
|
96
|
+
default:
|
|
97
|
+
return value.startsWith(expected);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
function validateGroup(group, support) {
|
|
101
|
+
if (!support.SingleFieldOrGroups) {
|
|
102
|
+
throw new WorkQueueConfigurationError('This transport does not support OR groups in a subscription filter');
|
|
103
|
+
}
|
|
104
|
+
if (group.logic !== 'or') {
|
|
105
|
+
throw new WorkQueueConfigurationError("A nested filter group must use logic 'or'");
|
|
106
|
+
}
|
|
107
|
+
if (group.filters.some(isGroup)) {
|
|
108
|
+
throw new WorkQueueConfigurationError('Filter nesting is limited to one OR group inside the root');
|
|
109
|
+
}
|
|
110
|
+
const rules = group.filters.map((entry) => validateRule(entry, support));
|
|
111
|
+
const fields = new Set(rules.map((rule) => rule.field));
|
|
112
|
+
if (fields.size !== 1) {
|
|
113
|
+
throw new WorkQueueConfigurationError(`An OR group must test a single field; got ${[...fields].join(', ')}`);
|
|
114
|
+
}
|
|
115
|
+
const offender = rules.find((rule) => rule.operator !== 'eq');
|
|
116
|
+
if (offender) {
|
|
117
|
+
throw new WorkQueueConfigurationError(`An OR group may use only 'eq'; field '${offender.field}' uses '${offender.operator}'`);
|
|
118
|
+
}
|
|
119
|
+
return { logic: 'or', filters: rules };
|
|
120
|
+
}
|
|
121
|
+
function validateRule(value, support) {
|
|
122
|
+
if (!isPlainObject(value) || typeof value['field'] !== 'string' || typeof value['operator'] !== 'string') {
|
|
123
|
+
throw new WorkQueueConfigurationError('Each filter entry must be { field, operator, value? } or a nested group');
|
|
124
|
+
}
|
|
125
|
+
const field = value['field'];
|
|
126
|
+
const operator = value['operator'];
|
|
127
|
+
if (field.includes('.')) {
|
|
128
|
+
throw new WorkQueueConfigurationError(`Filter field '${field}' is not supported: use a bare attribute name, not the dotted source.field form`);
|
|
129
|
+
}
|
|
130
|
+
if (!ATTRIBUTE_KEY_PATTERN.test(field)) {
|
|
131
|
+
throw new WorkQueueConfigurationError(`Filter field '${field}' is not a valid attribute name`);
|
|
132
|
+
}
|
|
133
|
+
if (!isOperator(operator) || !support.Operators.includes(operator)) {
|
|
134
|
+
throw new WorkQueueConfigurationError(`Filter operator '${operator}' on field '${field}' is not supported by this transport`);
|
|
135
|
+
}
|
|
136
|
+
const raw = value['value'];
|
|
137
|
+
if (VALUELESS_OPERATORS.includes(operator)) {
|
|
138
|
+
if (raw !== undefined && raw !== null) {
|
|
139
|
+
throw new WorkQueueConfigurationError(`Filter operator '${operator}' on field '${field}' takes no value`);
|
|
140
|
+
}
|
|
141
|
+
return { field, operator };
|
|
142
|
+
}
|
|
143
|
+
if (raw === undefined || raw === null || raw === '') {
|
|
144
|
+
throw new WorkQueueConfigurationError(`Filter operator '${operator}' on field '${field}' requires a value`);
|
|
145
|
+
}
|
|
146
|
+
if (typeof raw !== 'string' && typeof raw !== 'number' && typeof raw !== 'boolean') {
|
|
147
|
+
throw new WorkQueueConfigurationError(`Filter value for field '${field}' must be a string, number or boolean`);
|
|
148
|
+
}
|
|
149
|
+
return { field, operator, value: String(raw) };
|
|
150
|
+
}
|
|
151
|
+
/** The field a validated root entry constrains; a group is single-field by construction. */
|
|
152
|
+
function entryField(entry) {
|
|
153
|
+
if (!isGroup(entry)) {
|
|
154
|
+
return entry.field;
|
|
155
|
+
}
|
|
156
|
+
const first = entry.filters[0];
|
|
157
|
+
return isGroup(first) ? '' : first.field;
|
|
158
|
+
}
|
|
159
|
+
function countValues(filter) {
|
|
160
|
+
let count = 0;
|
|
161
|
+
walkRules(filter, (rule) => {
|
|
162
|
+
if (rule.value !== undefined) {
|
|
163
|
+
count += 1;
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
return count;
|
|
167
|
+
}
|
|
168
|
+
function walkRules(group, visit) {
|
|
169
|
+
for (const entry of group.filters) {
|
|
170
|
+
if (isGroup(entry)) {
|
|
171
|
+
walkRules(entry, visit);
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
visit(entry);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
function isOperator(value) {
|
|
179
|
+
return ALL_OPERATORS.includes(value);
|
|
180
|
+
}
|
|
181
|
+
function isGroup(value) {
|
|
182
|
+
return isPlainObject(value) && typeof value['logic'] === 'string' && Array.isArray(value['filters']);
|
|
183
|
+
}
|
|
184
|
+
function isPlainObject(value) {
|
|
185
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../src/filter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Subscription filters are MJ's `CompositeFilterDescriptor` JSON (the shape `mj-filter-builder` edits and user views
|
|
3
|
+
* persist), restricted to what every transport can express — spec 03 §4. `field` is an envelope attribute name.
|
|
4
|
+
*/
|
|
5
|
+
export type FilterOperator = 'eq' | 'neq' | 'startswith' | 'isnull' | 'isnotnull';
|
|
6
|
+
export interface FilterRule {
|
|
7
|
+
field: string;
|
|
8
|
+
operator: FilterOperator;
|
|
9
|
+
/** Normalised to a string when parsed; absent for isnull/isnotnull. */
|
|
10
|
+
value?: string | number | boolean | null;
|
|
11
|
+
}
|
|
12
|
+
export interface FilterGroup {
|
|
13
|
+
logic: 'and' | 'or';
|
|
14
|
+
filters: (FilterRule | FilterGroup)[];
|
|
15
|
+
}
|
|
16
|
+
export type SubscriptionFilter = FilterGroup;
|
|
17
|
+
/** What one transport accepts; drivers publish this as `TransportCapabilities.Filters` (spec 03 §4.1). */
|
|
18
|
+
export interface FilterSupport {
|
|
19
|
+
Operators: FilterOperator[];
|
|
20
|
+
/** A nested group may only be a single-field OR of `eq`. */
|
|
21
|
+
SingleFieldOrGroups: boolean;
|
|
22
|
+
MaxFields: number;
|
|
23
|
+
MaxValues: number;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=filterTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterTypes.d.ts","sourceRoot":"","sources":["../src/filterTypes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,KAAK,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,CAAC;AAElF,MAAM,WAAW,UAAU;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,CAAC;IACzB,uEAAuE;IACvE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,CAAC,UAAU,GAAG,WAAW,CAAC,EAAE,CAAC;CACzC;AAED,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC;AAE7C,0GAA0G;AAC1G,MAAM,WAAW,aAAa;IAC1B,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,4DAA4D;IAC5D,mBAAmB,EAAE,OAAO,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterTypes.js","sourceRoot":"","sources":["../src/filterTypes.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { WorkJson, WorkMessage } from './envelope.js';
|
|
2
|
+
export interface WorkProgress {
|
|
3
|
+
/** 0..100 */
|
|
4
|
+
Percent?: number;
|
|
5
|
+
/** ≤ 500 chars */
|
|
6
|
+
Message?: string;
|
|
7
|
+
/** Small; persisted by the Database transport only. */
|
|
8
|
+
Checkpoint?: WorkJson;
|
|
9
|
+
}
|
|
10
|
+
export interface WorkLogger {
|
|
11
|
+
Info(message: string, data?: Record<string, WorkJson>): void;
|
|
12
|
+
Warn(message: string, data?: Record<string, WorkJson>): void;
|
|
13
|
+
Error(message: string, error?: Error, data?: Record<string, WorkJson>): void;
|
|
14
|
+
}
|
|
15
|
+
/** Why a handler was asked to stop; the value of `WorkContext.Signal.reason` once aborted. */
|
|
16
|
+
export type WorkAbortReason = 'Cancelled' | 'LeaseLost' | 'MaxProcessingSeconds' | 'Shutdown';
|
|
17
|
+
export interface WorkContext {
|
|
18
|
+
readonly SubscriptionName: string;
|
|
19
|
+
/** Database: WorkQueueDelivery.ID; SQS: SQS MessageId */
|
|
20
|
+
readonly DeliveryID: string;
|
|
21
|
+
/** 1-based */
|
|
22
|
+
readonly Attempt: number;
|
|
23
|
+
readonly MaxAttempts: number;
|
|
24
|
+
readonly IsReplay: boolean;
|
|
25
|
+
/** Aborted with a `WorkAbortReason` when an operator cancels, the lease is lost, the cap is hit, or the host stops. */
|
|
26
|
+
readonly Signal: AbortSignal;
|
|
27
|
+
/**
|
|
28
|
+
* Renews the lease and records progress. Resolves false once the lease is lost or the delivery is cancelled
|
|
29
|
+
* (spec 03 §7); the handler must stop. A transient transport failure does not resolve false: it is retried on
|
|
30
|
+
* the next tick while the lease horizon has not passed.
|
|
31
|
+
*/
|
|
32
|
+
Heartbeat(progress?: WorkProgress): Promise<boolean>;
|
|
33
|
+
readonly Log: WorkLogger;
|
|
34
|
+
}
|
|
35
|
+
export type WorkOutcome = {
|
|
36
|
+
Kind: 'Complete';
|
|
37
|
+
} | {
|
|
38
|
+
Kind: 'Retry';
|
|
39
|
+
DelaySeconds?: number;
|
|
40
|
+
Reason?: string;
|
|
41
|
+
} | {
|
|
42
|
+
Kind: 'DeadLetter';
|
|
43
|
+
Reason: string;
|
|
44
|
+
};
|
|
45
|
+
export declare const Outcome: {
|
|
46
|
+
Complete(): WorkOutcome;
|
|
47
|
+
Retry(reason?: string, delaySeconds?: number): WorkOutcome;
|
|
48
|
+
DeadLetter(reason: string): WorkOutcome;
|
|
49
|
+
};
|
|
50
|
+
/** Core handler interface — external (e.g. Lambda) handlers implement this directly. */
|
|
51
|
+
export interface WorkHandler<TPayload extends WorkJson = WorkJson> {
|
|
52
|
+
Handle(message: WorkMessage<TPayload>, context: WorkContext): Promise<WorkOutcome>;
|
|
53
|
+
}
|
|
54
|
+
/** Logger that discards everything; the default where no logger is supplied. */
|
|
55
|
+
export declare const NULL_WORK_LOGGER: WorkLogger;
|
|
56
|
+
//# sourceMappingURL=handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,YAAY;IACzB,aAAa;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,UAAU,CAAC,EAAE,QAAQ,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACvB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IAC7D,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;CAChF;AAED,8FAA8F;AAC9F,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,WAAW,GAAG,sBAAsB,GAAG,UAAU,CAAC;AAE9F,MAAM,WAAW,WAAW;IACxB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,cAAc;IACd,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,uHAAuH;IACvH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B;;;;OAIG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;CAC5B;AAED,MAAM,MAAM,WAAW,GACjB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GACzD;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7C,eAAO,MAAM,OAAO;gBACJ,WAAW;mBAGR,MAAM,iBAAiB,MAAM,GAAG,WAAW;uBAUvC,MAAM,GAAG,WAAW;CAG1C,CAAC;AAEF,wFAAwF;AACxF,MAAM,WAAW,WAAW,CAAC,QAAQ,SAAS,QAAQ,GAAG,QAAQ;IAC7D,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACtF;AAED,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,EAAE,UAI9B,CAAC"}
|
package/dist/handler.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export const Outcome = {
|
|
2
|
+
Complete() {
|
|
3
|
+
return { Kind: 'Complete' };
|
|
4
|
+
},
|
|
5
|
+
Retry(reason, delaySeconds) {
|
|
6
|
+
const outcome = { Kind: 'Retry' };
|
|
7
|
+
if (reason !== undefined) {
|
|
8
|
+
outcome.Reason = reason;
|
|
9
|
+
}
|
|
10
|
+
if (delaySeconds !== undefined) {
|
|
11
|
+
outcome.DelaySeconds = delaySeconds;
|
|
12
|
+
}
|
|
13
|
+
return outcome;
|
|
14
|
+
},
|
|
15
|
+
DeadLetter(reason) {
|
|
16
|
+
return { Kind: 'DeadLetter', Reason: reason };
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
/** Logger that discards everything; the default where no logger is supplied. */
|
|
20
|
+
export const NULL_WORK_LOGGER = {
|
|
21
|
+
Info: () => undefined,
|
|
22
|
+
Warn: () => undefined,
|
|
23
|
+
Error: () => undefined,
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AA4CA,MAAM,CAAC,MAAM,OAAO,GAAG;IACnB,QAAQ;QACJ,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAChC,CAAC;IACD,KAAK,CAAC,MAAe,EAAE,YAAqB;QACxC,MAAM,OAAO,GAA8D,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC7F,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC;QAC5B,CAAC;QACD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;QACxC,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IACD,UAAU,CAAC,MAAc;QACrB,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAClD,CAAC;CACJ,CAAC;AAOF,gFAAgF;AAChF,MAAM,CAAC,MAAM,gBAAgB,GAAe;IACxC,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS;IACrB,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS;IACrB,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS;CACzB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export * from './envelope.js';
|
|
2
|
+
export * from './publishing.js';
|
|
3
|
+
export * from './policy.js';
|
|
4
|
+
export * from './filterTypes.js';
|
|
5
|
+
export * from './handler.js';
|
|
6
|
+
export * from './errors.js';
|
|
7
|
+
export * from './transport.js';
|
|
8
|
+
export * from './operator.js';
|
|
9
|
+
export * from './manifest.js';
|
|
10
|
+
export * from './validation.js';
|
|
11
|
+
export * from './filter.js';
|
|
12
|
+
export * from './backoff.js';
|
|
13
|
+
export * from './compatibility.js';
|
|
14
|
+
export * from './runtime/types.js';
|
|
15
|
+
export * from './runtime/outcomes.js';
|
|
16
|
+
export * from './runtime/DeliveryExecution.js';
|
|
17
|
+
export * from './runtime/ConsumerRuntime.js';
|
|
18
|
+
export { InMemoryTransport, IN_MEMORY_TRANSPORT_CAPABILITIES } from './memory/InMemoryTransport.js';
|
|
19
|
+
export type { InMemoryTransportOptions } from './memory/InMemoryTransport.js';
|
|
20
|
+
export type { InMemoryDeliverySnapshot } from './memory/InMemoryStore.js';
|
|
21
|
+
export { LEASE_EXPIRED_REASON, MAX_RESOLUTION_NOTE_LENGTH } from './memory/InMemoryStore.js';
|
|
22
|
+
export * from './api/restContract.js';
|
|
23
|
+
export * from './api/WorkQueueApiPublisher.js';
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAG3B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAGhC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAG1C,OAAO,EAAE,iBAAiB,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AACjG,YAAY,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,YAAY,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAG1F,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// Contracts (spec 03 §1–§5, §10)
|
|
2
|
+
export * from './envelope.js';
|
|
3
|
+
export * from './publishing.js';
|
|
4
|
+
export * from './policy.js';
|
|
5
|
+
export * from './filterTypes.js';
|
|
6
|
+
export * from './handler.js';
|
|
7
|
+
export * from './errors.js';
|
|
8
|
+
export * from './transport.js';
|
|
9
|
+
export * from './operator.js';
|
|
10
|
+
export * from './manifest.js';
|
|
11
|
+
// Shared rules
|
|
12
|
+
export * from './validation.js';
|
|
13
|
+
export * from './filter.js';
|
|
14
|
+
export * from './backoff.js';
|
|
15
|
+
export * from './compatibility.js';
|
|
16
|
+
// Consumer runtime
|
|
17
|
+
export * from './runtime/types.js';
|
|
18
|
+
export * from './runtime/outcomes.js';
|
|
19
|
+
export * from './runtime/DeliveryExecution.js';
|
|
20
|
+
export * from './runtime/ConsumerRuntime.js';
|
|
21
|
+
// Reference transport (the conformance kit lives in ./testing)
|
|
22
|
+
export { InMemoryTransport, IN_MEMORY_TRANSPORT_CAPABILITIES } from './memory/InMemoryTransport.js';
|
|
23
|
+
export { LEASE_EXPIRED_REASON, MAX_RESOLUTION_NOTE_LENGTH } from './memory/InMemoryStore.js';
|
|
24
|
+
// REST publish client
|
|
25
|
+
export * from './api/restContract.js';
|
|
26
|
+
export * from './api/WorkQueueApiPublisher.js';
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,eAAe,CAAC;AAC9B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAE3B,eAAe;AACf,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAEhC,mBAAmB;AACnB,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAE1C,+DAA+D;AAC/D,OAAO,EAAE,iBAAiB,EAAE,gCAAgC,EAAE,MAAM,4BAA4B,CAAC;AAGjG,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AAE1F,sBAAsB;AACtB,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { WorkJson } from './envelope.js';
|
|
2
|
+
import type { SubscriptionFilter } from './filterTypes.js';
|
|
3
|
+
import type { HostType, SubscriptionPolicy } from './policy.js';
|
|
4
|
+
export interface TopologyManifest {
|
|
5
|
+
ManifestVersion: 1;
|
|
6
|
+
GeneratedAt: string;
|
|
7
|
+
Transport: {
|
|
8
|
+
Name: string;
|
|
9
|
+
DriverClass: string;
|
|
10
|
+
Configuration: Record<string, WorkJson>;
|
|
11
|
+
};
|
|
12
|
+
Topics: ManifestTopic[];
|
|
13
|
+
}
|
|
14
|
+
export interface ManifestTopic {
|
|
15
|
+
Name: string;
|
|
16
|
+
IsFifo: boolean;
|
|
17
|
+
MaxPayloadBytes: number;
|
|
18
|
+
Subscriptions: ManifestSubscription[];
|
|
19
|
+
}
|
|
20
|
+
export interface ManifestSubscription {
|
|
21
|
+
Name: string;
|
|
22
|
+
Filter: SubscriptionFilter | null;
|
|
23
|
+
Policy: SubscriptionPolicy;
|
|
24
|
+
HostType: HostType;
|
|
25
|
+
/** Terraform maps Paused/Disabled to the Lambda event source's `enabled = false`. */
|
|
26
|
+
Status: 'Active' | 'Paused' | 'Disabled';
|
|
27
|
+
ExternalRef: string | null;
|
|
28
|
+
/**
|
|
29
|
+
* Artifacts rendered by the transport's driver at export time (for example the subscription filter in the
|
|
30
|
+
* broker's native syntax) so IaC never re-translates them. Core defines the slot; each driver defines and
|
|
31
|
+
* documents its keys (AWS: `SnsFilterPolicy`). Absent on transports that render nothing (contract delta CD8).
|
|
32
|
+
*/
|
|
33
|
+
DriverArtifacts?: Record<string, WorkJson>;
|
|
34
|
+
}
|
|
35
|
+
export interface BindingImport {
|
|
36
|
+
ManifestVersion: 1;
|
|
37
|
+
Topics: {
|
|
38
|
+
Name: string;
|
|
39
|
+
BindingConfig: Record<string, WorkJson>;
|
|
40
|
+
}[];
|
|
41
|
+
Subscriptions: {
|
|
42
|
+
Name: string;
|
|
43
|
+
BindingConfig: Record<string, WorkJson>;
|
|
44
|
+
}[];
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE7D,MAAM,WAAW,gBAAgB;IAC7B,eAAe,EAAE,CAAC,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;KAAE,CAAC;IAC1F,MAAM,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,oBAAoB,EAAE,CAAC;CACzC;AAED,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAClC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,qFAAqF;IACrF,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;IACzC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,aAAa;IAC1B,eAAe,EAAE,CAAC,CAAC;IACnB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;KAAE,EAAE,CAAC;IACpE,aAAa,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;KAAE,EAAE,CAAC;CAC9E"}
|
package/dist/manifest.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { WorkJson } from '../envelope.js';
|
|
2
|
+
import type { WorkProgress } from '../handler.js';
|
|
3
|
+
import type { ITransportConsumer, LeaseExtension, ReceivedDelivery, SettleResult, SubscriptionBinding } from '../transport.js';
|
|
4
|
+
import type { InMemoryStore } from './InMemoryStore.js';
|
|
5
|
+
export declare class InMemoryConsumer<TPayload extends WorkJson = WorkJson> implements ITransportConsumer<TPayload> {
|
|
6
|
+
private readonly store;
|
|
7
|
+
private readonly binding;
|
|
8
|
+
constructor(store: InMemoryStore, binding: SubscriptionBinding);
|
|
9
|
+
Receive(max: number, _waitSeconds: number, signal: AbortSignal): Promise<ReceivedDelivery<TPayload>[]>;
|
|
10
|
+
ExtendLease(delivery: ReceivedDelivery<TPayload>, leaseSeconds: number, progress?: WorkProgress): Promise<LeaseExtension>;
|
|
11
|
+
Complete(delivery: ReceivedDelivery<TPayload>): Promise<SettleResult>;
|
|
12
|
+
Retry(delivery: ReceivedDelivery<TPayload>, delaySeconds: number, error: string): Promise<SettleResult>;
|
|
13
|
+
DeadLetter(delivery: ReceivedDelivery<TPayload>, reason: string, error: string | null): Promise<SettleResult>;
|
|
14
|
+
Release(delivery: ReceivedDelivery<TPayload>): Promise<SettleResult>;
|
|
15
|
+
AcknowledgeCancel(delivery: ReceivedDelivery<TPayload>): Promise<SettleResult>;
|
|
16
|
+
Close(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=InMemoryConsumer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InMemoryConsumer.d.ts","sourceRoot":"","sources":["../../src/memory/InMemoryConsumer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,gBAAgB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC5H,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,qBAAa,gBAAgB,CAAC,QAAQ,SAAS,QAAQ,GAAG,QAAQ,CAAE,YAAW,kBAAkB,CAAC,QAAQ,CAAC;IAEnG,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBADP,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,mBAAmB;IAKpC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;IAQtG,WAAW,CAAC,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAIzH,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAIrE,KAAK,CAAC,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIvG,UAAU,CAAC,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC;IAI7G,OAAO,CAAC,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAIpE,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAI9E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGtC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export class InMemoryConsumer {
|
|
2
|
+
constructor(store, binding) {
|
|
3
|
+
this.store = store;
|
|
4
|
+
this.binding = binding;
|
|
5
|
+
store.RegisterBinding(binding);
|
|
6
|
+
}
|
|
7
|
+
async Receive(max, _waitSeconds, signal) {
|
|
8
|
+
if (signal.aborted) {
|
|
9
|
+
return [];
|
|
10
|
+
}
|
|
11
|
+
// Like every transport, the in-memory store cannot verify that payloads match TPayload.
|
|
12
|
+
return this.store.Claim(this.binding, max);
|
|
13
|
+
}
|
|
14
|
+
async ExtendLease(delivery, leaseSeconds, progress) {
|
|
15
|
+
return this.store.ExtendLease(delivery, leaseSeconds, progress);
|
|
16
|
+
}
|
|
17
|
+
async Complete(delivery) {
|
|
18
|
+
return this.store.Complete(delivery);
|
|
19
|
+
}
|
|
20
|
+
async Retry(delivery, delaySeconds, error) {
|
|
21
|
+
return this.store.Retry(delivery, delaySeconds, error);
|
|
22
|
+
}
|
|
23
|
+
async DeadLetter(delivery, reason, error) {
|
|
24
|
+
return this.store.DeadLetter(delivery, reason, error);
|
|
25
|
+
}
|
|
26
|
+
async Release(delivery) {
|
|
27
|
+
return this.store.Release(delivery);
|
|
28
|
+
}
|
|
29
|
+
async AcknowledgeCancel(delivery) {
|
|
30
|
+
return this.store.AcknowledgeCancel(delivery);
|
|
31
|
+
}
|
|
32
|
+
async Close() {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=InMemoryConsumer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InMemoryConsumer.js","sourceRoot":"","sources":["../../src/memory/InMemoryConsumer.ts"],"names":[],"mappings":"AAKA,MAAM,OAAO,gBAAgB;IACzB,YACqB,KAAoB,EACpB,OAA4B;QAD5B,UAAK,GAAL,KAAK,CAAe;QACpB,YAAO,GAAP,OAAO,CAAqB;QAE7C,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,YAAoB,EAAE,MAAmB;QACvE,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACd,CAAC;QACD,wFAAwF;QACxF,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAiC,CAAC;IAC/E,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,QAAoC,EAAE,YAAoB,EAAE,QAAuB;QACxG,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;IACpE,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,QAAoC;QACtD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,QAAoC,EAAE,YAAoB,EAAE,KAAa;QACxF,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IAC3D,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,QAAoC,EAAE,MAAc,EAAE,KAAoB;QAC9F,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,QAAoC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,QAAoC;QAC/D,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IAEM,KAAK,CAAC,KAAK;QACd,OAAO;IACX,CAAC;CACJ"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DeadLetterRecord, ITransportOperator, OperatorResult, Page, PartitionCondition, PartitionStateRecord, SubscriptionStats } from '../operator.js';
|
|
2
|
+
import type { SubscriptionBinding } from '../transport.js';
|
|
3
|
+
import type { InMemoryStore } from './InMemoryStore.js';
|
|
4
|
+
export declare class InMemoryOperator implements ITransportOperator {
|
|
5
|
+
private readonly store;
|
|
6
|
+
constructor(store: InMemoryStore);
|
|
7
|
+
GetStats(subscription: SubscriptionBinding): Promise<SubscriptionStats>;
|
|
8
|
+
ListDeadLetters(subscription: SubscriptionBinding, cursor: string | null, pageSize: number): Promise<Page<DeadLetterRecord> | null>;
|
|
9
|
+
ListPartitions(subscription: SubscriptionBinding, condition: PartitionCondition | null, cursor: string | null, pageSize: number): Promise<Page<PartitionStateRecord> | null>;
|
|
10
|
+
Replay(subscription: SubscriptionBinding, deliveryID: string, actorUserID: string | null, note: string | null): Promise<OperatorResult>;
|
|
11
|
+
Discard(subscription: SubscriptionBinding, deliveryID: string, reason: string, actorUserID: string | null): Promise<OperatorResult>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=InMemoryOperator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InMemoryOperator.d.ts","sourceRoot":"","sources":["../../src/memory/InMemoryOperator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,cAAc,EAAE,IAAI,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC3J,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,qBAAa,gBAAiB,YAAW,kBAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAAL,KAAK,EAAE,aAAa;IAEpC,QAAQ,CAAC,YAAY,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIvE,eAAe,CAAC,YAAY,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAInI,cAAc,CACvB,YAAY,EAAE,mBAAmB,EACjC,SAAS,EAAE,kBAAkB,GAAG,IAAI,EACpC,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,QAAQ,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC;IAIhC,MAAM,CAAC,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC;IAIvI,OAAO,CAAC,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC;CAOnJ"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export class InMemoryOperator {
|
|
2
|
+
constructor(store) {
|
|
3
|
+
this.store = store;
|
|
4
|
+
}
|
|
5
|
+
async GetStats(subscription) {
|
|
6
|
+
return this.store.Stats(subscription);
|
|
7
|
+
}
|
|
8
|
+
async ListDeadLetters(subscription, cursor, pageSize) {
|
|
9
|
+
return this.store.DeadLetters(subscription, cursor, pageSize);
|
|
10
|
+
}
|
|
11
|
+
async ListPartitions(subscription, condition, cursor, pageSize) {
|
|
12
|
+
return this.store.Partitions(subscription, condition, cursor, pageSize);
|
|
13
|
+
}
|
|
14
|
+
async Replay(subscription, deliveryID, actorUserID, note) {
|
|
15
|
+
return { Supported: true, Changed: this.store.Replay(subscription, deliveryID, actorUserID, note) };
|
|
16
|
+
}
|
|
17
|
+
async Discard(subscription, deliveryID, reason, actorUserID) {
|
|
18
|
+
const result = this.store.Discard(subscription, deliveryID, reason, actorUserID);
|
|
19
|
+
// CancelRequested is only set for the in-flight case, so plain discards keep the simple shape.
|
|
20
|
+
return result.CancelRequested
|
|
21
|
+
? { Supported: true, Changed: result.Changed, CancelRequested: true }
|
|
22
|
+
: { Supported: true, Changed: result.Changed };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=InMemoryOperator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InMemoryOperator.js","sourceRoot":"","sources":["../../src/memory/InMemoryOperator.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,gBAAgB;IACzB,YAA6B,KAAoB;QAApB,UAAK,GAAL,KAAK,CAAe;IAAG,CAAC;IAE9C,KAAK,CAAC,QAAQ,CAAC,YAAiC;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,YAAiC,EAAE,MAAqB,EAAE,QAAgB;QACnG,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClE,CAAC;IAEM,KAAK,CAAC,cAAc,CACvB,YAAiC,EACjC,SAAoC,EACpC,MAAqB,EACrB,QAAgB;QAEhB,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5E,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,YAAiC,EAAE,UAAkB,EAAE,WAA0B,EAAE,IAAmB;QACtH,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC;IACxG,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,YAAiC,EAAE,UAAkB,EAAE,MAAc,EAAE,WAA0B;QAClH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACjF,+FAA+F;QAC/F,OAAO,MAAM,CAAC,eAAe;YACzB,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE;YACrE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IACvD,CAAC;CACJ"}
|