@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.
- package/lib/encrypted-container.d.ts +53 -3
- package/lib/encrypted-container.d.ts.map +1 -1
- package/lib/encrypted-container.js +549 -93
- package/lib/encrypted-container.js.map +1 -1
- package/lib/http-server/index.d.ts.map +1 -1
- package/lib/http-server/index.js +58 -5
- package/lib/http-server/index.js.map +1 -1
- package/lib/queue/drivers/queue_firestore.d.ts +29 -0
- package/lib/queue/drivers/queue_firestore.d.ts.map +1 -0
- package/lib/queue/drivers/queue_firestore.js +279 -0
- package/lib/queue/drivers/queue_firestore.js.map +1 -0
- package/lib/queue/index.d.ts +56 -0
- package/lib/queue/index.d.ts.map +1 -1
- package/lib/queue/index.js +111 -21
- package/lib/queue/index.js.map +1 -1
- package/lib/resolver.d.ts +4 -15
- package/lib/resolver.d.ts.map +1 -1
- package/lib/resolver.js +468 -636
- package/lib/resolver.js.map +1 -1
- package/lib/utils/signing.d.ts +12 -3
- package/lib/utils/signing.d.ts.map +1 -1
- package/lib/utils/signing.js +7 -13
- package/lib/utils/signing.js.map +1 -1
- package/npm-shrinkwrap.json +4 -4
- package/package.json +2 -1
- package/services/asset-movement/client.d.ts +2 -2
- package/services/asset-movement/client.d.ts.map +1 -1
- package/services/asset-movement/client.js +2 -2
- package/services/asset-movement/client.js.map +1 -1
- package/services/asset-movement/common.d.ts +56 -22
- package/services/asset-movement/common.d.ts.map +1 -1
- package/services/asset-movement/common.js +295 -70
- package/services/asset-movement/common.js.map +1 -1
- package/services/fx/client.d.ts +15 -3
- package/services/fx/client.d.ts.map +1 -1
- package/services/fx/client.js +18 -0
- package/services/fx/client.js.map +1 -1
- package/services/fx/server.d.ts +22 -3
- package/services/fx/server.d.ts.map +1 -1
- package/services/fx/server.js +158 -102
- package/services/fx/server.js.map +1 -1
- package/services/fx/util.d.ts +26 -8
- package/services/fx/util.d.ts.map +1 -1
- package/services/fx/util.js +92 -4
- 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"]}
|
package/lib/queue/index.d.ts
CHANGED
|
@@ -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
|
package/lib/queue/index.d.ts.map
CHANGED
|
@@ -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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"}
|