@keetanetwork/anchor 0.0.38 → 0.0.39

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.
Files changed (45) hide show
  1. package/lib/encrypted-container.d.ts +53 -3
  2. package/lib/encrypted-container.d.ts.map +1 -1
  3. package/lib/encrypted-container.js +549 -93
  4. package/lib/encrypted-container.js.map +1 -1
  5. package/lib/http-server/index.d.ts.map +1 -1
  6. package/lib/http-server/index.js +58 -5
  7. package/lib/http-server/index.js.map +1 -1
  8. package/lib/queue/drivers/queue_firestore.d.ts +29 -0
  9. package/lib/queue/drivers/queue_firestore.d.ts.map +1 -0
  10. package/lib/queue/drivers/queue_firestore.js +279 -0
  11. package/lib/queue/drivers/queue_firestore.js.map +1 -0
  12. package/lib/queue/index.d.ts +56 -0
  13. package/lib/queue/index.d.ts.map +1 -1
  14. package/lib/queue/index.js +111 -21
  15. package/lib/queue/index.js.map +1 -1
  16. package/lib/resolver.d.ts +4 -15
  17. package/lib/resolver.d.ts.map +1 -1
  18. package/lib/resolver.js +468 -636
  19. package/lib/resolver.js.map +1 -1
  20. package/lib/utils/signing.d.ts +12 -3
  21. package/lib/utils/signing.d.ts.map +1 -1
  22. package/lib/utils/signing.js +7 -13
  23. package/lib/utils/signing.js.map +1 -1
  24. package/npm-shrinkwrap.json +4 -4
  25. package/package.json +2 -1
  26. package/services/asset-movement/client.d.ts +2 -2
  27. package/services/asset-movement/client.d.ts.map +1 -1
  28. package/services/asset-movement/client.js +2 -2
  29. package/services/asset-movement/client.js.map +1 -1
  30. package/services/asset-movement/common.d.ts +56 -22
  31. package/services/asset-movement/common.d.ts.map +1 -1
  32. package/services/asset-movement/common.js +295 -70
  33. package/services/asset-movement/common.js.map +1 -1
  34. package/services/fx/client.d.ts +15 -3
  35. package/services/fx/client.d.ts.map +1 -1
  36. package/services/fx/client.js +18 -0
  37. package/services/fx/client.js.map +1 -1
  38. package/services/fx/server.d.ts +22 -3
  39. package/services/fx/server.d.ts.map +1 -1
  40. package/services/fx/server.js +158 -102
  41. package/services/fx/server.js.map +1 -1
  42. package/services/fx/util.d.ts +26 -8
  43. package/services/fx/util.d.ts.map +1 -1
  44. package/services/fx/util.js +92 -4
  45. package/services/fx/util.js.map +1 -1
@@ -0,0 +1,279 @@
1
+ import { MethodLogger, ManageStatusUpdates, ConvertStringToRequestID } from '../internal.js';
2
+ import { Errors } from '../common.js';
3
+ import { asleep } from '../../utils/asleep.js';
4
+ export default class KeetaAnchorQueueStorageDriverFirestore {
5
+ logger;
6
+ firestoreInternal = null;
7
+ name = 'KeetaAnchorQueueStorageDriverFirestore';
8
+ id;
9
+ path = [];
10
+ pathStr;
11
+ namespace;
12
+ toctouDelay = undefined;
13
+ constructor(options) {
14
+ this.id = options?.id ?? crypto.randomUUID();
15
+ this.logger = options?.logger;
16
+ this.firestoreInternal = options.firestore;
17
+ this.path = options.path ?? [];
18
+ this.pathStr = ['root', ...this.path].join('.');
19
+ this.namespace = options.namespace;
20
+ Object.freeze(this.path);
21
+ this.methodLogger('new')?.debug('Initialized Firestore queue storage driver');
22
+ }
23
+ methodLogger(method) {
24
+ return (MethodLogger(this.logger, {
25
+ class: 'KeetaAnchorQueueStorageDriverFirestore',
26
+ file: 'src/lib/queue/drivers/queue_firestore.ts',
27
+ method: method,
28
+ instanceID: this.id
29
+ }));
30
+ }
31
+ async getFirestore() {
32
+ if (this.firestoreInternal === null) {
33
+ throw (new Error('Firestore connection is not available'));
34
+ }
35
+ return (await this.firestoreInternal());
36
+ }
37
+ async getCollection() {
38
+ const firestore = await this.getFirestore();
39
+ return (firestore.collection(`queue_entries_${this.namespace}_${this.pathStr}`));
40
+ }
41
+ async getIdempotentCollection() {
42
+ const firestore = await this.getFirestore();
43
+ return (firestore.collection(`queue_idempotent_keys_${this.namespace}_${this.pathStr}`));
44
+ }
45
+ async add(request, info) {
46
+ const firestore = await this.getFirestore();
47
+ const collection = await this.getCollection();
48
+ const idempotentCollection = await this.getIdempotentCollection();
49
+ const logger = this.methodLogger('add');
50
+ let entryID = ConvertStringToRequestID(info?.id);
51
+ entryID ??= ConvertStringToRequestID(crypto.randomUUID());
52
+ logger?.debug(`Enqueuing request with id ${String(entryID)}`);
53
+ const currentTime = Date.now();
54
+ const requestJSON = JSON.stringify(request);
55
+ /**
56
+ * The status to use for the new entry
57
+ */
58
+ const status = info?.status ?? 'pending';
59
+ const entryData = {
60
+ id: String(entryID),
61
+ request: requestJSON,
62
+ output: null,
63
+ lastError: null,
64
+ status: status,
65
+ created: currentTime,
66
+ updated: currentTime,
67
+ worker: null,
68
+ failures: 0
69
+ };
70
+ const idempotentIDs = info?.idempotentKeys;
71
+ if (idempotentIDs && idempotentIDs.size > 0) {
72
+ entryData.idempotentKeys = Array.from(idempotentIDs).map(String);
73
+ }
74
+ await this.toctouDelay?.();
75
+ // Use Firestore transaction for atomicity
76
+ const result = await firestore.runTransaction(async (transaction) => {
77
+ const docRef = collection.doc(String(entryID));
78
+ const docSnapshot = await transaction.get(docRef);
79
+ if (docSnapshot.exists) {
80
+ logger?.debug(`Request with id ${String(entryID)} already exists, ignoring`);
81
+ return (entryID);
82
+ }
83
+ // Check idempotent keys
84
+ if (idempotentIDs && idempotentIDs.size > 0) {
85
+ const matchingIdempotentEntries = new Set();
86
+ for (const idempotentID of idempotentIDs) {
87
+ const idempotentDocRef = idempotentCollection.doc(String(idempotentID));
88
+ const idempotentSnapshot = await transaction.get(idempotentDocRef);
89
+ if (idempotentSnapshot.exists) {
90
+ matchingIdempotentEntries.add(idempotentID);
91
+ }
92
+ }
93
+ if (matchingIdempotentEntries.size !== 0) {
94
+ throw (new Errors.IdempotentExistsError('One or more idempotent entries already exist in the queue', matchingIdempotentEntries));
95
+ }
96
+ }
97
+ // Create entry
98
+ transaction.set(docRef, entryData);
99
+ // Create idempotent keys
100
+ if (idempotentIDs && idempotentIDs.size > 0) {
101
+ for (const idempotentID of idempotentIDs) {
102
+ const idempotentDocRef = idempotentCollection.doc(String(idempotentID));
103
+ transaction.set(idempotentDocRef, {
104
+ entryId: String(entryID),
105
+ idempotentId: String(idempotentID)
106
+ });
107
+ }
108
+ }
109
+ return (entryID);
110
+ });
111
+ return (result);
112
+ }
113
+ async setStatus(id, status, ancillary) {
114
+ const firestore = await this.getFirestore();
115
+ const collection = await this.getCollection();
116
+ const logger = this.methodLogger('setStatus');
117
+ const { oldStatus } = ancillary ?? {};
118
+ await firestore.runTransaction(async (transaction) => {
119
+ const docRef = collection.doc(String(id));
120
+ const docSnapshot = await transaction.get(docRef);
121
+ if (!docSnapshot.exists) {
122
+ throw (new Error(`Request with ID ${String(id)} not found`));
123
+ }
124
+ await this.toctouDelay?.();
125
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
126
+ const currentEntry = docSnapshot.data();
127
+ if (!currentEntry) {
128
+ throw (new Error(`Request with ID ${String(id)} not found`));
129
+ }
130
+ const currentEntryForUpdate = {
131
+ status: currentEntry.status,
132
+ failures: currentEntry.failures,
133
+ last_error: currentEntry.lastError,
134
+ output: currentEntry.output
135
+ };
136
+ const newEntry = ManageStatusUpdates(id, currentEntryForUpdate, status, ancillary, logger);
137
+ const currentTime = newEntry.updated.getTime();
138
+ const workerValue = newEntry.worker;
139
+ const newFailures = newEntry.failures ?? currentEntry.failures;
140
+ const newLastError = newEntry.lastError !== undefined ? newEntry.lastError : currentEntry.lastError;
141
+ const newOutput = newEntry.output !== undefined ? JSON.stringify(newEntry.output) : currentEntry.output;
142
+ if (oldStatus && currentEntry.status !== oldStatus) {
143
+ throw (new Errors.IncorrectStateAssertedError(id, oldStatus, currentEntry.status));
144
+ }
145
+ transaction.update(docRef, {
146
+ status: status,
147
+ updated: currentTime,
148
+ worker: workerValue,
149
+ failures: newFailures,
150
+ lastError: newLastError,
151
+ output: newOutput
152
+ });
153
+ });
154
+ }
155
+ async get(id) {
156
+ const collection = await this.getCollection();
157
+ const idempotentCollection = await this.getIdempotentCollection();
158
+ const docRef = collection.doc(String(id));
159
+ const docSnapshot = await docRef.get();
160
+ if (!docSnapshot.exists) {
161
+ return (null);
162
+ }
163
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
164
+ const entry = docSnapshot.data();
165
+ if (!entry) {
166
+ return (null);
167
+ }
168
+ // Get idempotent keys
169
+ const idempotentQuery = await idempotentCollection.where('entryId', '==', String(id)).get();
170
+ const idempotentKeys = idempotentQuery.empty
171
+ ? undefined
172
+ : new Set(idempotentQuery.docs.map((doc) => {
173
+ const data = doc.data();
174
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
175
+ return (ConvertStringToRequestID(data['idempotentId']));
176
+ }));
177
+ return ({
178
+ id: ConvertStringToRequestID(entry.id),
179
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
180
+ request: JSON.parse(entry.request),
181
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
182
+ output: entry.output ? JSON.parse(entry.output) : null,
183
+ lastError: entry.lastError,
184
+ status: entry.status,
185
+ created: new Date(entry.created),
186
+ updated: new Date(entry.updated),
187
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
188
+ worker: entry.worker,
189
+ failures: entry.failures,
190
+ idempotentKeys: idempotentKeys
191
+ });
192
+ }
193
+ async query(filter) {
194
+ const collection = await this.getCollection();
195
+ const idempotentCollection = await this.getIdempotentCollection();
196
+ const logger = this.methodLogger('query');
197
+ logger?.debug(`Querying queue with id ${this.id} with filter:`, filter);
198
+ let query = collection.orderBy('updated');
199
+ if (filter?.status) {
200
+ query = query.where('status', '==', filter.status);
201
+ }
202
+ if (filter?.updatedBefore) {
203
+ query = query.where('updated', '<', filter.updatedBefore.getTime());
204
+ }
205
+ if (filter?.limit !== undefined) {
206
+ query = query.limit(filter.limit);
207
+ }
208
+ const querySnapshot = await query.get();
209
+ const entries = [];
210
+ for (const doc of querySnapshot.docs) {
211
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
212
+ const row = doc.data();
213
+ // Get idempotent keys for this entry
214
+ const idempotentQuery = await idempotentCollection.where('entryId', '==', row.id).get();
215
+ const idempotentKeys = idempotentQuery.empty
216
+ ? undefined
217
+ : new Set(idempotentQuery.docs.map((idempotentDoc) => {
218
+ const data = idempotentDoc.data();
219
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
220
+ return (ConvertStringToRequestID(data['idempotentId']));
221
+ }));
222
+ entries.push({
223
+ id: ConvertStringToRequestID(row.id),
224
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
225
+ request: JSON.parse(row.request),
226
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
227
+ output: row.output ? JSON.parse(row.output) : null,
228
+ lastError: row.lastError,
229
+ status: row.status,
230
+ created: new Date(row.created),
231
+ updated: new Date(row.updated),
232
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
233
+ worker: row.worker,
234
+ failures: row.failures,
235
+ idempotentKeys: idempotentKeys
236
+ });
237
+ }
238
+ logger?.debug(`Queried queue with id ${this.id} with filter:`, filter, '-- found', entries.length, 'entries');
239
+ return (entries);
240
+ }
241
+ async partition(path) {
242
+ this.methodLogger('partition')?.debug(`Creating partitioned queue storage driver for path: ${path}`);
243
+ if (this.firestoreInternal === null) {
244
+ throw (new Error('Asked to partition but the instance has been destroyed'));
245
+ }
246
+ const retval = new KeetaAnchorQueueStorageDriverFirestore({
247
+ id: `${this.id}::${path}`,
248
+ logger: this.logger,
249
+ firestore: this.firestoreInternal,
250
+ namespace: this.namespace,
251
+ path: [...this.path, path]
252
+ });
253
+ return (retval);
254
+ }
255
+ async destroy() {
256
+ this.methodLogger('destroy')?.debug('Destroying instance');
257
+ this.firestoreInternal = null;
258
+ }
259
+ async [Symbol.asyncDispose]() {
260
+ return (await this.destroy());
261
+ }
262
+ /** @internal */
263
+ _Testing(key) {
264
+ if (key !== 'bc81abf8-e43b-490b-b486-744fb49a5082') {
265
+ throw (new Error('This is a testing only method'));
266
+ }
267
+ return ({
268
+ setToctouDelay: (delay) => {
269
+ this.toctouDelay = async () => {
270
+ return (await asleep(delay));
271
+ };
272
+ },
273
+ unsetToctouDelay: () => {
274
+ this.toctouDelay = undefined;
275
+ }
276
+ });
277
+ }
278
+ }
279
+ //# sourceMappingURL=queue_firestore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue_firestore.js","sourceRoot":"","sources":["../../../../src/lib/queue/drivers/queue_firestore.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n\tKeetaAnchorQueueStorageDriver,\n\tKeetaAnchorQueueStorageDriverConstructor,\n\tKeetaAnchorQueueRequest,\n\tKeetaAnchorQueueRequestID,\n\tKeetaAnchorQueueEntry,\n\tKeetaAnchorQueueEntryExtra,\n\tKeetaAnchorQueueEntryAncillaryData,\n\tKeetaAnchorQueueStatus,\n\tKeetaAnchorQueueFilter,\n\tKeetaAnchorQueueWorkerID\n} from '../index.ts';\nimport {\n\tMethodLogger,\n\tManageStatusUpdates,\n\tConvertStringToRequestID\n} from '../internal.js';\nimport { Errors } from '../common.js';\n\nimport type { Logger } from '../../log/index.ts';\nimport type { JSONSerializable } from '../../utils/json.js';\nimport { asleep } from '../../utils/asleep.js';\n\nimport type { Firestore, DocumentData, CollectionReference, Query } from '@google-cloud/firestore';\n\ntype QueueEntryDocument = {\n\tid: string;\n\trequest: string;\n\toutput: string | null;\n\tlastError: string | null;\n\tstatus: KeetaAnchorQueueStatus;\n\tcreated: number;\n\tupdated: number;\n\tworker: number | null;\n\tfailures: number;\n\tidempotentKeys?: string[];\n};\n\nexport default class KeetaAnchorQueueStorageDriverFirestore<QueueRequest extends JSONSerializable = JSONSerializable, QueueResult extends JSONSerializable = JSONSerializable> implements KeetaAnchorQueueStorageDriver<QueueRequest, QueueResult> {\n\tprivate readonly logger: Logger | undefined;\n\tprivate firestoreInternal: (() => Promise<Firestore>) | null = null;\n\n\treadonly name = 'KeetaAnchorQueueStorageDriverFirestore';\n\treadonly id: string;\n\treadonly path: string[] = [];\n\tprivate readonly pathStr: string;\n\tprivate readonly namespace: string;\n\tprivate toctouDelay: (() => Promise<void>) | undefined = undefined;\n\n\tconstructor(options: NonNullable<ConstructorParameters<KeetaAnchorQueueStorageDriverConstructor<QueueRequest, QueueResult>>[0]> & { firestore: () => Promise<Firestore>; namespace: string; }) {\n\t\tthis.id = options?.id ?? crypto.randomUUID();\n\t\tthis.logger = options?.logger;\n\t\tthis.firestoreInternal = options.firestore;\n\t\tthis.path = options.path ?? [];\n\t\tthis.pathStr = ['root', ...this.path].join('.');\n\t\tthis.namespace = options.namespace;\n\t\tObject.freeze(this.path);\n\n\t\tthis.methodLogger('new')?.debug('Initialized Firestore queue storage driver');\n\t}\n\n\tprivate methodLogger(method: string): Logger | undefined {\n\t\treturn(MethodLogger(this.logger, {\n\t\t\tclass: 'KeetaAnchorQueueStorageDriverFirestore',\n\t\t\tfile: 'src/lib/queue/drivers/queue_firestore.ts',\n\t\t\tmethod: method,\n\t\t\tinstanceID: this.id\n\t\t}));\n\t}\n\n\tprivate async getFirestore(): Promise<Firestore> {\n\t\tif (this.firestoreInternal === null) {\n\t\t\tthrow(new Error('Firestore connection is not available'));\n\t\t}\n\t\treturn(await this.firestoreInternal());\n\t}\n\n\tprivate async getCollection(): Promise<CollectionReference<DocumentData>> {\n\t\tconst firestore = await this.getFirestore();\n\t\treturn(firestore.collection(`queue_entries_${this.namespace}_${this.pathStr}`));\n\t}\n\n\tprivate async getIdempotentCollection(): Promise<CollectionReference<DocumentData>> {\n\t\tconst firestore = await this.getFirestore();\n\t\treturn(firestore.collection(`queue_idempotent_keys_${this.namespace}_${this.pathStr}`));\n\t}\n\n\tasync add(request: KeetaAnchorQueueRequest<QueueRequest>, info?: KeetaAnchorQueueEntryExtra): Promise<KeetaAnchorQueueRequestID> {\n\t\tconst firestore = await this.getFirestore();\n\t\tconst collection = await this.getCollection();\n\t\tconst idempotentCollection = await this.getIdempotentCollection();\n\t\tconst logger = this.methodLogger('add');\n\n\t\tlet entryID = ConvertStringToRequestID(info?.id);\n\t\tentryID ??= ConvertStringToRequestID(crypto.randomUUID());\n\n\t\tlogger?.debug(`Enqueuing request with id ${String(entryID)}`);\n\n\t\tconst currentTime = Date.now();\n\t\tconst requestJSON = JSON.stringify(request);\n\n\t\t/**\n\t\t * The status to use for the new entry\n\t\t */\n\t\tconst status = info?.status ?? 'pending';\n\n\t\tconst entryData: QueueEntryDocument = {\n\t\t\tid: String(entryID),\n\t\t\trequest: requestJSON,\n\t\t\toutput: null,\n\t\t\tlastError: null,\n\t\t\tstatus: status,\n\t\t\tcreated: currentTime,\n\t\t\tupdated: currentTime,\n\t\t\tworker: null,\n\t\t\tfailures: 0\n\t\t};\n\n\t\tconst idempotentIDs = info?.idempotentKeys;\n\t\tif (idempotentIDs && idempotentIDs.size > 0) {\n\t\t\tentryData.idempotentKeys = Array.from(idempotentIDs).map(String);\n\t\t}\n\n\t\tawait this.toctouDelay?.();\n\n\t\t// Use Firestore transaction for atomicity\n\t\tconst result = await firestore.runTransaction(async (transaction) => {\n\t\t\tconst docRef = collection.doc(String(entryID));\n\t\t\tconst docSnapshot = await transaction.get(docRef);\n\n\t\t\tif (docSnapshot.exists) {\n\t\t\t\tlogger?.debug(`Request with id ${String(entryID)} already exists, ignoring`);\n\t\t\t\treturn(entryID);\n\t\t\t}\n\n\t\t\t// Check idempotent keys\n\t\t\tif (idempotentIDs && idempotentIDs.size > 0) {\n\t\t\t\tconst matchingIdempotentEntries = new Set<KeetaAnchorQueueRequestID>();\n\t\t\t\tfor (const idempotentID of idempotentIDs) {\n\t\t\t\t\tconst idempotentDocRef = idempotentCollection.doc(String(idempotentID));\n\t\t\t\t\tconst idempotentSnapshot = await transaction.get(idempotentDocRef);\n\t\t\t\t\tif (idempotentSnapshot.exists) {\n\t\t\t\t\t\tmatchingIdempotentEntries.add(idempotentID);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (matchingIdempotentEntries.size !== 0) {\n\t\t\t\t\tthrow(new Errors.IdempotentExistsError('One or more idempotent entries already exist in the queue', matchingIdempotentEntries));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Create entry\n\t\t\ttransaction.set(docRef, entryData);\n\n\t\t\t// Create idempotent keys\n\t\t\tif (idempotentIDs && idempotentIDs.size > 0) {\n\t\t\t\tfor (const idempotentID of idempotentIDs) {\n\t\t\t\t\tconst idempotentDocRef = idempotentCollection.doc(String(idempotentID));\n\t\t\t\t\ttransaction.set(idempotentDocRef, {\n\t\t\t\t\t\tentryId: String(entryID),\n\t\t\t\t\t\tidempotentId: String(idempotentID)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn(entryID);\n\t\t});\n\n\t\treturn(result);\n\t}\n\n\tasync setStatus(id: KeetaAnchorQueueRequestID, status: KeetaAnchorQueueStatus, ancillary?: KeetaAnchorQueueEntryAncillaryData<QueueResult>): Promise<void> {\n\t\tconst firestore = await this.getFirestore();\n\t\tconst collection = await this.getCollection();\n\t\tconst logger = this.methodLogger('setStatus');\n\t\tconst { oldStatus } = ancillary ?? {};\n\n\t\tawait firestore.runTransaction(async (transaction) => {\n\t\t\tconst docRef = collection.doc(String(id));\n\t\t\tconst docSnapshot = await transaction.get(docRef);\n\n\t\t\tif (!docSnapshot.exists) {\n\t\t\t\tthrow(new Error(`Request with ID ${String(id)} not found`));\n\t\t\t}\n\n\t\t\tawait this.toctouDelay?.();\n\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tconst currentEntry = docSnapshot.data() as QueueEntryDocument;\n\t\t\tif (!currentEntry) {\n\t\t\t\tthrow(new Error(`Request with ID ${String(id)} not found`));\n\t\t\t}\n\n\t\t\tconst currentEntryForUpdate = {\n\t\t\t\tstatus: currentEntry.status,\n\t\t\t\tfailures: currentEntry.failures,\n\t\t\t\tlast_error: currentEntry.lastError,\n\t\t\t\toutput: currentEntry.output\n\t\t\t};\n\n\t\t\tconst newEntry = ManageStatusUpdates<QueueResult>(id, currentEntryForUpdate, status, ancillary, logger);\n\t\t\tconst currentTime = newEntry.updated.getTime();\n\t\t\tconst workerValue = newEntry.worker;\n\t\t\tconst newFailures = newEntry.failures ?? currentEntry.failures;\n\t\t\tconst newLastError = newEntry.lastError !== undefined ? newEntry.lastError : currentEntry.lastError;\n\t\t\tconst newOutput = newEntry.output !== undefined ? JSON.stringify(newEntry.output) : currentEntry.output;\n\n\t\t\tif (oldStatus && currentEntry.status !== oldStatus) {\n\t\t\t\tthrow(new Errors.IncorrectStateAssertedError(id, oldStatus, currentEntry.status));\n\t\t\t}\n\n\t\t\ttransaction.update(docRef, {\n\t\t\t\tstatus: status,\n\t\t\t\tupdated: currentTime,\n\t\t\t\tworker: workerValue,\n\t\t\t\tfailures: newFailures,\n\t\t\t\tlastError: newLastError,\n\t\t\t\toutput: newOutput\n\t\t\t});\n\t\t});\n\t}\n\n\tasync get(id: KeetaAnchorQueueRequestID): Promise<KeetaAnchorQueueEntry<QueueRequest, QueueResult> | null> {\n\t\tconst collection = await this.getCollection();\n\t\tconst idempotentCollection = await this.getIdempotentCollection();\n\n\t\tconst docRef = collection.doc(String(id));\n\t\tconst docSnapshot = await docRef.get();\n\n\t\tif (!docSnapshot.exists) {\n\t\t\treturn(null);\n\t\t}\n\n\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\tconst entry = docSnapshot.data() as QueueEntryDocument;\n\t\tif (!entry) {\n\t\t\treturn(null);\n\t\t}\n\n\t\t// Get idempotent keys\n\t\tconst idempotentQuery = await idempotentCollection.where('entryId', '==', String(id)).get();\n\t\tconst idempotentKeys = idempotentQuery.empty\n\t\t\t? undefined\n\t\t\t: new Set(idempotentQuery.docs.map((doc) => {\n\t\t\t\tconst data = doc.data();\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\t\treturn(ConvertStringToRequestID(data['idempotentId'] as string));\n\t\t\t}));\n\n\t\treturn({\n\t\t\tid: ConvertStringToRequestID(entry.id),\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\trequest: JSON.parse(entry.request) as QueueRequest,\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\toutput: entry.output ? JSON.parse(entry.output) as QueueResult : null,\n\t\t\tlastError: entry.lastError,\n\t\t\tstatus: entry.status,\n\t\t\tcreated: new Date(entry.created),\n\t\t\tupdated: new Date(entry.updated),\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tworker: entry.worker as unknown as KeetaAnchorQueueWorkerID | null,\n\t\t\tfailures: entry.failures,\n\t\t\tidempotentKeys: idempotentKeys\n\t\t});\n\t}\n\n\tasync query(filter?: KeetaAnchorQueueFilter): Promise<KeetaAnchorQueueEntry<QueueRequest, QueueResult>[]> {\n\t\tconst collection = await this.getCollection();\n\t\tconst idempotentCollection = await this.getIdempotentCollection();\n\t\tconst logger = this.methodLogger('query');\n\n\t\tlogger?.debug(`Querying queue with id ${this.id} with filter:`, filter);\n\n\t\tlet query: Query<DocumentData> | CollectionReference<DocumentData> = collection.orderBy('updated');\n\n\t\tif (filter?.status) {\n\t\t\tquery = query.where('status', '==', filter.status);\n\t\t}\n\n\t\tif (filter?.updatedBefore) {\n\t\t\tquery = query.where('updated', '<', filter.updatedBefore.getTime());\n\t\t}\n\n\t\tif (filter?.limit !== undefined) {\n\t\t\tquery = query.limit(filter.limit);\n\t\t}\n\n\t\tconst querySnapshot = await query.get();\n\n\t\tconst entries: KeetaAnchorQueueEntry<QueueRequest, QueueResult>[] = [];\n\n\t\tfor (const doc of querySnapshot.docs) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\tconst row = doc.data() as QueueEntryDocument;\n\n\t\t\t// Get idempotent keys for this entry\n\t\t\tconst idempotentQuery = await idempotentCollection.where('entryId', '==', row.id).get();\n\t\t\tconst idempotentKeys = idempotentQuery.empty\n\t\t\t\t? undefined\n\t\t\t\t: new Set(idempotentQuery.docs.map((idempotentDoc) => {\n\t\t\t\t\tconst data = idempotentDoc.data();\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\t\t\treturn(ConvertStringToRequestID(data['idempotentId'] as string));\n\t\t\t\t}));\n\n\t\t\tentries.push({\n\t\t\t\tid: ConvertStringToRequestID(row.id),\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\t\trequest: JSON.parse(row.request) as QueueRequest,\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\t\toutput: row.output ? JSON.parse(row.output) as QueueResult : null,\n\t\t\t\tlastError: row.lastError,\n\t\t\t\tstatus: row.status,\n\t\t\t\tcreated: new Date(row.created),\n\t\t\t\tupdated: new Date(row.updated),\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\t\t\t\tworker: row.worker as unknown as KeetaAnchorQueueWorkerID | null,\n\t\t\t\tfailures: row.failures,\n\t\t\t\tidempotentKeys: idempotentKeys\n\t\t\t});\n\t\t}\n\n\t\tlogger?.debug(`Queried queue with id ${this.id} with filter:`, filter, '-- found', entries.length, 'entries');\n\n\t\treturn(entries);\n\t}\n\n\tasync partition(path: string): Promise<KeetaAnchorQueueStorageDriver<QueueRequest, QueueResult>> {\n\t\tthis.methodLogger('partition')?.debug(`Creating partitioned queue storage driver for path: ${path}`);\n\n\t\tif (this.firestoreInternal === null) {\n\t\t\tthrow(new Error('Asked to partition but the instance has been destroyed'));\n\t\t}\n\n\t\tconst retval = new KeetaAnchorQueueStorageDriverFirestore<QueueRequest, QueueResult>({\n\t\t\tid: `${this.id}::${path}`,\n\t\t\tlogger: this.logger,\n\t\t\tfirestore: this.firestoreInternal,\n\t\t\tnamespace: this.namespace,\n\t\t\tpath: [...this.path, path]\n\t\t});\n\n\t\treturn(retval);\n\t}\n\n\tasync destroy(): Promise<void> {\n\t\tthis.methodLogger('destroy')?.debug('Destroying instance');\n\n\t\tthis.firestoreInternal = null;\n\t}\n\n\tasync [Symbol.asyncDispose](): Promise<void> {\n\t\treturn(await this.destroy());\n\t}\n\n\t/** @internal */\n\t_Testing(key: string): {\n\t\tsetToctouDelay(delay: number): void;\n\t\tunsetToctouDelay(): void;\n\t} {\n\t\tif (key !== 'bc81abf8-e43b-490b-b486-744fb49a5082') {\n\t\t\tthrow(new Error('This is a testing only method'));\n\t\t}\n\n\t\treturn({\n\t\t\tsetToctouDelay: (delay: number): void => {\n\t\t\t\tthis.toctouDelay = async (): Promise<void> => {\n\t\t\t\t\treturn(await asleep(delay));\n\t\t\t\t};\n\t\t\t},\n\t\t\tunsetToctouDelay: (): void => {\n\t\t\t\tthis.toctouDelay = undefined;\n\t\t\t}\n\t\t});\n\t}\n}\n"]}
@@ -6,6 +6,8 @@ export type KeetaAnchorQueueRequest<QueueRequest> = QueueRequest;
6
6
  export type KeetaAnchorQueueRequestID = BrandedString<'KeetaAnchorQueueID'>;
7
7
  export type KeetaAnchorQueueWorkerID = Brand<number, 'KeetaAnchorQueueWorkerID'>;
8
8
  export type KeetaAnchorQueueStatus = 'pending' | 'processing' | 'completed' | 'failed_temporarily' | 'failed_permanently' | 'stuck' | 'aborted' | 'moved' | '@internal';
9
+ declare const keetaAnchorPipeableQueueStatuses: readonly ["completed", "failed_permanently"];
10
+ export type KeetaAnchorPipeableQueueStatus = Extract<KeetaAnchorQueueStatus, typeof keetaAnchorPipeableQueueStatuses[number]>;
9
11
  export type KeetaAnchorQueueEntry<QueueRequest, QueueResult> = {
10
12
  /**
11
13
  * The Job ID
@@ -247,9 +249,60 @@ export declare abstract class KeetaAnchorQueueRunner<UserRequest = unknown, User
247
249
  /**
248
250
  * Configuration for this queue
249
251
  */
252
+ /**
253
+ * The maximum number of times to retry a failed job before giving up
254
+ * and marking it as permanently failed
255
+ */
250
256
  protected maxRetries: number;
257
+ /**
258
+ * The amount of time to allow a job to run before considering it
259
+ * timed out and marking it as aborted, the `aborted` processor
260
+ * (if provided) will be responsible for determining what to do with
261
+ * the job at that point (e.g. retry it, mark it as failed, etc)
262
+ * because some work from the job may have been completed
263
+ * before the timeout was reached -- it could even still be on-going
264
+ * after the timeout is reached, so the `aborted` processor should be
265
+ * prepared to handle that situation as well.
266
+ */
251
267
  protected processTimeout: number;
268
+ /**
269
+ * When piping a batch of jobs to another runner, this is the number
270
+ * of jobs to include in each batch (max).
271
+ */
252
272
  protected batchSize: number;
273
+ /**
274
+ * The amount of time to wait before retrying a failed job -- this should
275
+ * be long enough to allow any transient issues to be resolved (e.g. a downstream
276
+ * service to come back up, etc) but not so long that it causes excessive
277
+ * delays in processing.
278
+ *
279
+ * Keep in mind that after the {@link maxRetries} is reached, the job will
280
+ * be marked as permanently failed, so if the retry delay is too low then
281
+ * it could cause jobs to be marked as permanently failed before transient
282
+ * issues have a chance to be resolved.
283
+ */
284
+ protected get retryDelay(): number;
285
+ protected set retryDelay(value: number);
286
+ private internalRetryDelay?;
287
+ /**
288
+ * The number of {@link processTimeout} intervals to wait before
289
+ * considering a job to be stuck -- this is for jobs that are
290
+ * still in the 'processing' state but have not updated their
291
+ * timestamp in a long time, which likely indicates that the worker
292
+ * processing the job has died or is otherwise no longer making
293
+ * progress on the job.
294
+ *
295
+ * Like the `aborted` status, the `stuck` status means the job is in
296
+ * an indeterminate state where it may have done some of the work of
297
+ * the processor but we don't know how much (if any) of it was
298
+ * completed, so the `stuck` processor should be prepared to handle
299
+ * that situation. It is unlikely that the job is still being actively
300
+ * processed by a worker at this point, but it is possible, so the
301
+ * `stuck` processor should be prepared to handle that as well.
302
+ */
303
+ protected get stuckMultiplier(): number;
304
+ protected set stuckMultiplier(value: number);
305
+ private internalStuckMultiplier?;
253
306
  /**
254
307
  * How many runners can process this queue in parallel
255
308
  */
@@ -310,10 +363,12 @@ export declare abstract class KeetaAnchorQueueRunner<UserRequest = unknown, User
310
363
  * Pipe the the completed entries of this runner to another runner
311
364
  */
312
365
  pipe<T1, T2 extends JSONSerializable>(target: KeetaAnchorQueueRunner<UserResult, T1, QueueResult, T2>): typeof target;
366
+ pipeFailed<T1, T2 extends JSONSerializable>(target: KeetaAnchorQueueRunner<UserResult, T1, QueueResult, T2>): typeof target;
313
367
  /**
314
368
  * Pipe batches of completed entries from this runner to another runner
315
369
  */
316
370
  pipeBatch<T1, T2 extends JSONSerializable>(target: KeetaAnchorQueueRunner<UserResult[], T1, JSONSerializable, T2>, maxBatchSize?: number, minBatchSize?: number): typeof target;
371
+ pipeBatchFailed<T1, T2 extends JSONSerializable>(target: KeetaAnchorQueueRunner<UserResult[], T1, JSONSerializable, T2>, maxBatchSize?: number, minBatchSize?: number): typeof target;
317
372
  destroy(): Promise<void>;
318
373
  [Symbol.asyncDispose](): Promise<void>;
319
374
  }
@@ -339,4 +394,5 @@ export declare class KeetaAnchorQueueRunnerJSONConfigProc<UserRequest extends JS
339
394
  processorAborted?: KeetaAnchorQueueRunner<UserRequest, UserResult>['processorAborted'] | undefined;
340
395
  });
341
396
  }
397
+ export {};
342
398
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/queue/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/queue/index.ts"],"names":[],"mappings":"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"}