@workglow/util 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/dist/browser.js +344 -80
  2. package/dist/browser.js.map +17 -13
  3. package/dist/bun.js +344 -80
  4. package/dist/bun.js.map +17 -13
  5. package/dist/credentials/CredentialProviderOptions.d.ts +38 -0
  6. package/dist/credentials/CredentialProviderOptions.d.ts.map +1 -0
  7. package/dist/credentials/CredentialPutInputSchema.d.ts +37 -0
  8. package/dist/credentials/CredentialPutInputSchema.d.ts.map +1 -0
  9. package/dist/credentials/CredentialStoreRegistry.d.ts.map +1 -1
  10. package/dist/credentials/OtpPassphraseCache.d.ts +73 -0
  11. package/dist/credentials/OtpPassphraseCache.d.ts.map +1 -0
  12. package/dist/credentials/index.d.ts +6 -3
  13. package/dist/credentials/index.d.ts.map +1 -1
  14. package/dist/di/Container.d.ts +15 -0
  15. package/dist/di/Container.d.ts.map +1 -1
  16. package/dist/di/InputCompactorRegistry.d.ts +46 -0
  17. package/dist/di/InputCompactorRegistry.d.ts.map +1 -0
  18. package/dist/di/InputResolverRegistry.d.ts.map +1 -1
  19. package/dist/di/ServiceRegistry.d.ts +11 -0
  20. package/dist/di/ServiceRegistry.d.ts.map +1 -1
  21. package/dist/di/index.d.ts +1 -0
  22. package/dist/di/index.d.ts.map +1 -1
  23. package/dist/events/EventEmitter.d.ts +16 -0
  24. package/dist/events/EventEmitter.d.ts.map +1 -1
  25. package/dist/graph/directedAcyclicGraph.d.ts.map +1 -1
  26. package/dist/graph/directedGraph.d.ts.map +1 -1
  27. package/dist/graph/graph.d.ts.map +1 -1
  28. package/dist/graph-entry.js +55 -18
  29. package/dist/graph-entry.js.map +6 -6
  30. package/dist/json-schema/SchemaValidation.d.ts +31 -0
  31. package/dist/json-schema/SchemaValidation.d.ts.map +1 -1
  32. package/dist/logging/LoggerRegistry.d.ts.map +1 -1
  33. package/dist/node.js +344 -80
  34. package/dist/node.js.map +17 -13
  35. package/dist/schema-entry.js +168 -1
  36. package/dist/schema-entry.js.map +4 -4
  37. package/dist/telemetry/ITelemetryProvider.d.ts.map +1 -1
  38. package/dist/telemetry/TelemetryRegistry.d.ts.map +1 -1
  39. package/dist/vector/Tensor.d.ts.map +1 -1
  40. package/dist/vector/TypedArray.d.ts.map +1 -1
  41. package/dist/worker/Worker.browser.d.ts +1 -1
  42. package/dist/worker/Worker.bun.d.ts +1 -1
  43. package/dist/worker/WorkerManager.d.ts +9 -0
  44. package/dist/worker/WorkerManager.d.ts.map +1 -1
  45. package/dist/worker-browser.js +110 -22
  46. package/dist/worker-browser.js.map +10 -9
  47. package/dist/worker-bun.js +110 -22
  48. package/dist/worker-bun.js.map +10 -9
  49. package/dist/worker-node.js +110 -22
  50. package/dist/worker-node.js.map +10 -9
  51. package/package.json +6 -1
package/dist/bun.js CHANGED
@@ -87,12 +87,19 @@ class Container {
87
87
  services = new Map;
88
88
  factories = new Map;
89
89
  singletons = new Set;
90
+ resolving = [];
90
91
  register(token, factory, singleton = true) {
91
92
  this.factories.set(token, factory);
92
93
  if (singleton) {
93
94
  this.singletons.add(token);
94
95
  }
95
96
  }
97
+ registerIfAbsent(token, factory, singleton = true) {
98
+ if (this.factories.has(token) || this.services.has(token)) {
99
+ return;
100
+ }
101
+ this.register(token, factory, singleton);
102
+ }
96
103
  registerInstance(token, instance) {
97
104
  this.services.set(token, instance);
98
105
  this.singletons.add(token);
@@ -105,11 +112,20 @@ class Container {
105
112
  if (!factory) {
106
113
  throw new Error(`Service not registered: ${String(token)}`);
107
114
  }
108
- const instance = factory();
109
- if (this.singletons.has(token)) {
110
- this.services.set(token, instance);
115
+ if (this.resolving.includes(token)) {
116
+ const cycle = [...this.resolving.slice(this.resolving.indexOf(token)), token];
117
+ throw new Error(`Circular dependency detected: ${cycle.join(" -> ")}`);
118
+ }
119
+ this.resolving.push(token);
120
+ try {
121
+ const instance = factory();
122
+ if (this.singletons.has(token)) {
123
+ this.services.set(token, instance);
124
+ }
125
+ return instance;
126
+ } finally {
127
+ this.resolving.pop();
111
128
  }
112
- return instance;
113
129
  }
114
130
  has(token) {
115
131
  return this.services.has(token) || this.factories.has(token);
@@ -119,6 +135,36 @@ class Container {
119
135
  this.factories.delete(token);
120
136
  this.singletons.delete(token);
121
137
  }
138
+ async dispose() {
139
+ const errors = [];
140
+ try {
141
+ for (const service of this.services.values()) {
142
+ if (service == null)
143
+ continue;
144
+ try {
145
+ if (typeof service[Symbol.asyncDispose] === "function") {
146
+ await service[Symbol.asyncDispose]();
147
+ } else if (typeof service[Symbol.dispose] === "function") {
148
+ service[Symbol.dispose]();
149
+ } else if (typeof service.dispose === "function") {
150
+ await service.dispose();
151
+ }
152
+ } catch (err) {
153
+ errors.push(err);
154
+ }
155
+ }
156
+ } finally {
157
+ this.services.clear();
158
+ this.factories.clear();
159
+ this.singletons.clear();
160
+ }
161
+ if (errors.length > 0) {
162
+ throw new AggregateError(errors, "One or more services failed to dispose");
163
+ }
164
+ }
165
+ async[Symbol.asyncDispose]() {
166
+ await this.dispose();
167
+ }
122
168
  createChildContainer() {
123
169
  const child = new Container;
124
170
  this.factories.forEach((factory, token) => {
@@ -150,6 +196,9 @@ class ServiceRegistry {
150
196
  register(token, factory, singleton = true) {
151
197
  this.container.register(token.id, factory, singleton);
152
198
  }
199
+ registerIfAbsent(token, factory, singleton = true) {
200
+ this.container.registerIfAbsent(token.id, factory, singleton);
201
+ }
153
202
  registerInstance(token, instance) {
154
203
  this.container.registerInstance(token.id, instance);
155
204
  }
@@ -159,14 +208,25 @@ class ServiceRegistry {
159
208
  has(token) {
160
209
  return this.container.has(token.id);
161
210
  }
211
+ async dispose() {
212
+ await this.container.dispose();
213
+ }
162
214
  }
163
215
  var globalServiceRegistry = new ServiceRegistry(globalContainer);
164
216
 
217
+ // src/di/InputCompactorRegistry.ts
218
+ var INPUT_COMPACTORS = createServiceToken("task.input.compactors");
219
+ globalServiceRegistry.registerIfAbsent(INPUT_COMPACTORS, () => new Map, true);
220
+ function getInputCompactors() {
221
+ return globalServiceRegistry.get(INPUT_COMPACTORS);
222
+ }
223
+ function registerInputCompactor(formatPrefix, compactor) {
224
+ const compactors = getInputCompactors();
225
+ compactors.set(formatPrefix, compactor);
226
+ }
165
227
  // src/di/InputResolverRegistry.ts
166
228
  var INPUT_RESOLVERS = createServiceToken("task.input.resolvers");
167
- if (!globalServiceRegistry.has(INPUT_RESOLVERS)) {
168
- globalServiceRegistry.register(INPUT_RESOLVERS, () => new Map, true);
169
- }
229
+ globalServiceRegistry.registerIfAbsent(INPUT_RESOLVERS, () => new Map, true);
170
230
  function getInputResolvers() {
171
231
  return globalServiceRegistry.get(INPUT_RESOLVERS);
172
232
  }
@@ -177,17 +237,36 @@ function registerInputResolver(formatPrefix, resolver) {
177
237
  // src/events/EventEmitter.ts
178
238
  class EventEmitter {
179
239
  listeners = {};
240
+ maxListeners = 0;
241
+ warnedEvents = new Set;
242
+ setMaxListeners(n) {
243
+ if (!Number.isFinite(n) || n < 0) {
244
+ throw new RangeError(`"n" must be a non-negative finite number. Got ${n}.`);
245
+ }
246
+ this.maxListeners = Math.trunc(n);
247
+ this.warnedEvents.clear();
248
+ return this;
249
+ }
250
+ listenerCount(event) {
251
+ return this.listeners[event]?.length ?? 0;
252
+ }
253
+ eventNames() {
254
+ return Object.keys(this.listeners).filter((k) => (this.listeners[k]?.length ?? 0) > 0);
255
+ }
180
256
  removeAllListeners(event) {
181
257
  if (event) {
182
258
  delete this.listeners[event];
259
+ this.warnedEvents.delete(event);
183
260
  } else {
184
261
  this.listeners = {};
262
+ this.warnedEvents.clear();
185
263
  }
186
264
  return this;
187
265
  }
188
266
  on(event, listener) {
189
267
  const listeners = this.listeners[event] || (this.listeners[event] = []);
190
268
  listeners.push({ listener });
269
+ this.checkMaxListeners(event, listeners.length);
191
270
  return this;
192
271
  }
193
272
  off(event, listener) {
@@ -197,12 +276,16 @@ class EventEmitter {
197
276
  const index = listeners.findIndex((l) => l.listener === listener);
198
277
  if (index >= 0) {
199
278
  listeners.splice(index, 1);
279
+ if (this.maxListeners > 0 && listeners.length <= this.maxListeners) {
280
+ this.warnedEvents.delete(event);
281
+ }
200
282
  }
201
283
  return this;
202
284
  }
203
285
  once(event, listener) {
204
286
  const listeners = this.listeners[event] || (this.listeners[event] = []);
205
287
  listeners.push({ listener, once: true });
288
+ this.checkMaxListeners(event, listeners.length);
206
289
  return this;
207
290
  }
208
291
  waitOn(event) {
@@ -226,11 +309,22 @@ class EventEmitter {
226
309
  }
227
310
  }
228
311
  this.listeners[event] = listeners.filter((l) => !l.once);
229
- if (errors.length > 0) {
312
+ if (this.maxListeners > 0 && (this.listeners[event]?.length ?? 0) <= this.maxListeners) {
313
+ this.warnedEvents.delete(event);
314
+ }
315
+ if (errors.length > 1) {
316
+ throw new AggregateError(errors, `${errors.length} listener(s) threw on "${String(event)}"`);
317
+ } else if (errors.length === 1) {
230
318
  throw errors[0];
231
319
  }
232
320
  }
233
321
  }
322
+ checkMaxListeners(event, count) {
323
+ if (this.maxListeners > 0 && count > this.maxListeners && !this.warnedEvents.has(event)) {
324
+ this.warnedEvents.add(event);
325
+ console.warn(`MaxListenersExceededWarning: Possible EventEmitter memory leak detected. ` + `${count} listeners added for event "${String(event)}". ` + `Use setMaxListeners() to increase limit (current: ${this.maxListeners}).`);
326
+ }
327
+ }
234
328
  subscribe(event, listener) {
235
329
  this.on(event, listener);
236
330
  return () => this.off(event, listener);
@@ -403,9 +497,7 @@ function createDefaultLogger() {
403
497
  }
404
498
  return new NullLogger;
405
499
  }
406
- if (!globalServiceRegistry.has(LOGGER)) {
407
- globalServiceRegistry.register(LOGGER, createDefaultLogger, true);
408
- }
500
+ globalServiceRegistry.registerIfAbsent(LOGGER, createDefaultLogger, true);
409
501
  function getLogger() {
410
502
  return globalServiceRegistry.get(LOGGER);
411
503
  }
@@ -816,16 +908,19 @@ class WorkerManager {
816
908
  let init = this.lazyInitPromises.get(name);
817
909
  if (!init) {
818
910
  init = (async () => {
819
- const f = this.lazyFactories.get(name);
820
- this.lazyFactories.delete(name);
821
- const worker = f();
822
- this.attachWorkerInstance(name, worker);
911
+ try {
912
+ const f = this.lazyFactories.get(name);
913
+ this.lazyFactories.delete(name);
914
+ const worker = f();
915
+ this.attachWorkerInstance(name, worker);
916
+ await this.readyWorkers.get(name);
917
+ } finally {
918
+ this.lazyInitPromises.delete(name);
919
+ }
823
920
  })();
824
921
  this.lazyInitPromises.set(name, init);
825
922
  }
826
923
  await init;
827
- await this.readyWorkers.get(name);
828
- this.lazyInitPromises.delete(name);
829
924
  }
830
925
  getWorker(name) {
831
926
  const worker = this.workers.get(name);
@@ -838,7 +933,6 @@ class WorkerManager {
838
933
  const worker = this.workers.get(workerName);
839
934
  if (!worker)
840
935
  throw new Error(`Worker ${workerName} not found.`);
841
- await this.readyWorkers.get(workerName);
842
936
  const knownFunctions = this.workerFunctions.get(workerName);
843
937
  if (knownFunctions && !knownFunctions.has(functionName)) {
844
938
  throw new Error(`Function "${functionName}" is not registered on worker "${workerName}".`);
@@ -887,7 +981,6 @@ class WorkerManager {
887
981
  const worker = this.workers.get(workerName);
888
982
  if (!worker)
889
983
  return;
890
- await this.readyWorkers.get(workerName);
891
984
  const knownReactive = this.workerReactiveFunctions.get(workerName);
892
985
  if (knownReactive && !knownReactive.has(functionName))
893
986
  return;
@@ -902,6 +995,9 @@ class WorkerManager {
902
995
  resolve(data);
903
996
  } else if (type === "error") {
904
997
  cleanup();
998
+ getLogger().warn(`Worker ${workerName} reactive function ${functionName} error:`, {
999
+ error: data
1000
+ });
905
1001
  resolve(undefined);
906
1002
  }
907
1003
  };
@@ -914,12 +1010,35 @@ class WorkerManager {
914
1010
  getLogger().info(`Worker ${workerName} reactive function ${functionName} called.`);
915
1011
  });
916
1012
  }
1013
+ async terminateWorker(name) {
1014
+ const worker = this.workers.get(name);
1015
+ this.workers.delete(name);
1016
+ this.readyWorkers.delete(name);
1017
+ this.workerFunctions.delete(name);
1018
+ this.workerStreamFunctions.delete(name);
1019
+ this.workerReactiveFunctions.delete(name);
1020
+ this.lazyFactories.delete(name);
1021
+ this.lazyInitPromises.delete(name);
1022
+ try {
1023
+ if (worker && "terminate" in worker && typeof worker.terminate === "function") {
1024
+ await worker.terminate();
1025
+ }
1026
+ } catch {}
1027
+ }
1028
+ async dispose() {
1029
+ const names = [...this.workers.keys(), ...this.lazyFactories.keys()];
1030
+ for (const name of names) {
1031
+ await this.terminateWorker(name);
1032
+ }
1033
+ }
1034
+ async[Symbol.asyncDispose]() {
1035
+ await this.dispose();
1036
+ }
917
1037
  async* callWorkerStreamFunction(workerName, functionName, args, options) {
918
1038
  await this.ensureWorkerReady(workerName);
919
1039
  const worker = this.workers.get(workerName);
920
1040
  if (!worker)
921
1041
  throw new Error(`Worker ${workerName} not found.`);
922
- await this.readyWorkers.get(workerName);
923
1042
  const knownStream = this.workerStreamFunctions.get(workerName);
924
1043
  const knownFns = this.workerFunctions.get(workerName);
925
1044
  if (knownStream && knownFns && !knownStream.has(functionName) && !knownFns.has(functionName)) {
@@ -999,8 +1118,106 @@ class WorkerManager {
999
1118
  }
1000
1119
  var WORKER_MANAGER = createServiceToken("worker.manager");
1001
1120
  globalServiceRegistry.register(WORKER_MANAGER, () => new WorkerManager, true);
1121
+ // src/credentials/ChainedCredentialStore.ts
1122
+ class ChainedCredentialStore {
1123
+ stores;
1124
+ constructor(stores) {
1125
+ this.stores = stores;
1126
+ if (stores.length === 0) {
1127
+ throw new Error("ChainedCredentialStore requires at least one store.");
1128
+ }
1129
+ }
1130
+ async get(key) {
1131
+ for (const store of this.stores) {
1132
+ const value = await store.get(key);
1133
+ if (value !== undefined)
1134
+ return value;
1135
+ }
1136
+ return;
1137
+ }
1138
+ async put(key, value, options) {
1139
+ await this.stores[0].put(key, value, options);
1140
+ }
1141
+ async delete(key) {
1142
+ let deleted = false;
1143
+ for (const store of this.stores) {
1144
+ if (await store.delete(key)) {
1145
+ deleted = true;
1146
+ }
1147
+ }
1148
+ return deleted;
1149
+ }
1150
+ async has(key) {
1151
+ for (const store of this.stores) {
1152
+ if (await store.has(key))
1153
+ return true;
1154
+ }
1155
+ return false;
1156
+ }
1157
+ async keys() {
1158
+ const seen = new Set;
1159
+ for (const store of this.stores) {
1160
+ for (const key of await store.keys()) {
1161
+ seen.add(key);
1162
+ }
1163
+ }
1164
+ return [...seen];
1165
+ }
1166
+ async deleteAll() {
1167
+ await Promise.all(this.stores.map((s) => s.deleteAll()));
1168
+ }
1169
+ }
1170
+ // src/credentials/CredentialProviderOptions.ts
1171
+ var CREDENTIAL_PROVIDER_VALUES = [
1172
+ "none",
1173
+ "anthropic",
1174
+ "openai",
1175
+ "google",
1176
+ "huggingface",
1177
+ "custom"
1178
+ ];
1179
+ var CREDENTIAL_PROVIDER_SCHEMA_ENUM = CREDENTIAL_PROVIDER_VALUES;
1180
+ var CREDENTIAL_PROVIDER_NONE = CREDENTIAL_PROVIDER_VALUES[0];
1181
+ var CREDENTIAL_PROVIDER_OPTIONS = [
1182
+ { value: CREDENTIAL_PROVIDER_VALUES[0], label: "None" },
1183
+ { value: CREDENTIAL_PROVIDER_VALUES[1], label: "Anthropic" },
1184
+ { value: CREDENTIAL_PROVIDER_VALUES[2], label: "OpenAI" },
1185
+ { value: CREDENTIAL_PROVIDER_VALUES[3], label: "Google" },
1186
+ { value: CREDENTIAL_PROVIDER_VALUES[4], label: "Hugging Face" },
1187
+ { value: CREDENTIAL_PROVIDER_VALUES[5], label: "Custom" }
1188
+ ];
1189
+ // src/credentials/CredentialPutInputSchema.ts
1190
+ var CredentialPutInputSchema = {
1191
+ type: "object",
1192
+ properties: {
1193
+ key: {
1194
+ type: "string",
1195
+ title: "Key",
1196
+ description: 'Unique identifier (e.g. "openai-api-key")'
1197
+ },
1198
+ value: {
1199
+ type: "string",
1200
+ title: "Value",
1201
+ description: "Secret value (API key, token, or password)",
1202
+ format: "password"
1203
+ },
1204
+ label: {
1205
+ type: "string",
1206
+ title: "Label",
1207
+ description: "Human-readable label (optional)"
1208
+ },
1209
+ provider: {
1210
+ type: "string",
1211
+ title: "Provider",
1212
+ description: "Optional provider this credential is associated with",
1213
+ enum: [...CREDENTIAL_PROVIDER_SCHEMA_ENUM]
1214
+ }
1215
+ },
1216
+ required: ["key", "value"]
1217
+ };
1002
1218
  // src/credentials/ICredentialStore.ts
1003
1219
  var CREDENTIAL_STORE = createServiceToken("credential.store");
1220
+
1004
1221
  // src/credentials/InMemoryCredentialStore.ts
1005
1222
  class InMemoryCredentialStore {
1006
1223
  store = new Map;
@@ -1055,6 +1272,25 @@ class InMemoryCredentialStore {
1055
1272
  this.store.clear();
1056
1273
  }
1057
1274
  }
1275
+
1276
+ // src/credentials/CredentialStoreRegistry.ts
1277
+ globalServiceRegistry.registerIfAbsent(CREDENTIAL_STORE, () => new InMemoryCredentialStore, true);
1278
+ function getGlobalCredentialStore() {
1279
+ return globalServiceRegistry.get(CREDENTIAL_STORE);
1280
+ }
1281
+ function setGlobalCredentialStore(store) {
1282
+ globalServiceRegistry.registerInstance(CREDENTIAL_STORE, store);
1283
+ }
1284
+ async function resolveCredential(key, registry) {
1285
+ const store = registry && registry.has(CREDENTIAL_STORE) ? registry.get(CREDENTIAL_STORE) : getGlobalCredentialStore();
1286
+ return store.get(key);
1287
+ }
1288
+ registerInputResolver("credential", async (id, _format, registry) => {
1289
+ return await resolveCredential(id, registry) ?? id;
1290
+ });
1291
+ registerInputCompactor("credential", (value) => {
1292
+ return typeof value === "string" ? value : undefined;
1293
+ });
1058
1294
  // src/credentials/EnvCredentialStore.ts
1059
1295
  class EnvCredentialStore {
1060
1296
  keyToEnvVar;
@@ -1118,72 +1354,94 @@ class EnvCredentialStore {
1118
1354
  }
1119
1355
  }
1120
1356
  }
1121
- // src/credentials/ChainedCredentialStore.ts
1122
- class ChainedCredentialStore {
1123
- stores;
1124
- constructor(stores) {
1125
- this.stores = stores;
1126
- if (stores.length === 0) {
1127
- throw new Error("ChainedCredentialStore requires at least one store.");
1357
+ // src/credentials/OtpPassphraseCache.ts
1358
+ var DEFAULT_HARD_TTL_MS = 6 * 60 * 60 * 1000;
1359
+
1360
+ class OtpPassphraseCache {
1361
+ masked;
1362
+ pad;
1363
+ hardTimer;
1364
+ idleTimer;
1365
+ options;
1366
+ constructor(options) {
1367
+ this.options = options ?? {};
1368
+ }
1369
+ store(passphrase) {
1370
+ this.clearInternal(false);
1371
+ const encoder = new TextEncoder;
1372
+ const raw = encoder.encode(passphrase);
1373
+ const pad = crypto.getRandomValues(new Uint8Array(raw.length));
1374
+ const masked = new Uint8Array(raw.length);
1375
+ for (let i = 0;i < raw.length; i++) {
1376
+ masked[i] = raw[i] ^ pad[i];
1377
+ }
1378
+ raw.fill(0);
1379
+ this.masked = masked;
1380
+ this.pad = pad;
1381
+ this.startTimers();
1382
+ }
1383
+ retrieve() {
1384
+ if (!this.masked || !this.pad)
1385
+ return;
1386
+ const raw = new Uint8Array(this.masked.length);
1387
+ for (let i = 0;i < this.masked.length; i++) {
1388
+ raw[i] = this.masked[i] ^ this.pad[i];
1128
1389
  }
1390
+ const result = new TextDecoder().decode(raw);
1391
+ raw.fill(0);
1392
+ this.resetIdleTimer();
1393
+ return result;
1129
1394
  }
1130
- async get(key) {
1131
- for (const store of this.stores) {
1132
- const value = await store.get(key);
1133
- if (value !== undefined)
1134
- return value;
1135
- }
1136
- return;
1395
+ get hasValue() {
1396
+ return this.masked !== undefined && this.pad !== undefined;
1137
1397
  }
1138
- async put(key, value, options) {
1139
- await this.stores[0].put(key, value, options);
1398
+ clear() {
1399
+ this.clearInternal(true);
1140
1400
  }
1141
- async delete(key) {
1142
- let deleted = false;
1143
- for (const store of this.stores) {
1144
- if (await store.delete(key)) {
1145
- deleted = true;
1146
- }
1401
+ clearInternal(fireCallback) {
1402
+ if (this.hardTimer !== undefined) {
1403
+ clearTimeout(this.hardTimer);
1404
+ this.hardTimer = undefined;
1405
+ }
1406
+ if (this.idleTimer !== undefined) {
1407
+ clearTimeout(this.idleTimer);
1408
+ this.idleTimer = undefined;
1409
+ }
1410
+ const hadValue = this.masked !== undefined;
1411
+ if (this.masked) {
1412
+ this.masked.fill(0);
1413
+ this.masked = undefined;
1414
+ }
1415
+ if (this.pad) {
1416
+ this.pad.fill(0);
1417
+ this.pad = undefined;
1418
+ }
1419
+ if (fireCallback && hadValue && this.options.onExpiry) {
1420
+ this.options.onExpiry();
1147
1421
  }
1148
- return deleted;
1149
1422
  }
1150
- async has(key) {
1151
- for (const store of this.stores) {
1152
- if (await store.has(key))
1153
- return true;
1423
+ startTimers() {
1424
+ const hardTtl = this.options.hardTtlMs ?? DEFAULT_HARD_TTL_MS;
1425
+ this.hardTimer = setTimeout(() => this.clear(), hardTtl);
1426
+ if (typeof this.hardTimer === "object" && "unref" in this.hardTimer) {
1427
+ this.hardTimer.unref();
1154
1428
  }
1155
- return false;
1429
+ this.resetIdleTimer();
1156
1430
  }
1157
- async keys() {
1158
- const seen = new Set;
1159
- for (const store of this.stores) {
1160
- for (const key of await store.keys()) {
1161
- seen.add(key);
1431
+ resetIdleTimer() {
1432
+ if (this.idleTimer !== undefined) {
1433
+ clearTimeout(this.idleTimer);
1434
+ this.idleTimer = undefined;
1435
+ }
1436
+ const idleTtl = this.options.idleTtlMs;
1437
+ if (idleTtl !== undefined && this.masked !== undefined) {
1438
+ this.idleTimer = setTimeout(() => this.clear(), idleTtl);
1439
+ if (typeof this.idleTimer === "object" && "unref" in this.idleTimer) {
1440
+ this.idleTimer.unref();
1162
1441
  }
1163
1442
  }
1164
- return [...seen];
1165
- }
1166
- async deleteAll() {
1167
- await Promise.all(this.stores.map((s) => s.deleteAll()));
1168
1443
  }
1169
1444
  }
1170
- // src/credentials/CredentialStoreRegistry.ts
1171
- if (!globalServiceRegistry.has(CREDENTIAL_STORE)) {
1172
- globalServiceRegistry.register(CREDENTIAL_STORE, () => new InMemoryCredentialStore, true);
1173
- }
1174
- function getGlobalCredentialStore() {
1175
- return globalServiceRegistry.get(CREDENTIAL_STORE);
1176
- }
1177
- function setGlobalCredentialStore(store) {
1178
- globalServiceRegistry.registerInstance(CREDENTIAL_STORE, store);
1179
- }
1180
- async function resolveCredential(key, registry) {
1181
- const store = registry && registry.has(CREDENTIAL_STORE) ? registry.get(CREDENTIAL_STORE) : getGlobalCredentialStore();
1182
- return store.get(key);
1183
- }
1184
- registerInputResolver("credential", async (id, _format, registry) => {
1185
- return await resolveCredential(id, registry) ?? id;
1186
- });
1187
1445
  // src/crypto/WebCrypto.ts
1188
1446
  var SALT_LENGTH = 16;
1189
1447
  async function deriveKey(passphrase, salt) {
@@ -1383,9 +1641,7 @@ function createDefaultTelemetryProvider() {
1383
1641
  }
1384
1642
  return new NoopTelemetryProvider;
1385
1643
  }
1386
- if (!globalServiceRegistry.has(TELEMETRY_PROVIDER)) {
1387
- globalServiceRegistry.register(TELEMETRY_PROVIDER, createDefaultTelemetryProvider, true);
1388
- }
1644
+ globalServiceRegistry.registerIfAbsent(TELEMETRY_PROVIDER, createDefaultTelemetryProvider, true);
1389
1645
  function getTelemetryProvider() {
1390
1646
  return globalServiceRegistry.get(TELEMETRY_PROVIDER);
1391
1647
  }
@@ -1584,9 +1840,9 @@ class WorkerServerBase {
1584
1840
  setTimeout(() => {
1585
1841
  this.completedRequests.delete(id);
1586
1842
  }, 5000);
1587
- if (this.completedRequests.size > 1e4) {
1843
+ if (this.completedRequests.size > 1000) {
1588
1844
  const iter = this.completedRequests.values();
1589
- for (let i = 0;i < 5000; i++) {
1845
+ for (let i = 0;i < 500; i++) {
1590
1846
  const entry = iter.next();
1591
1847
  if (entry.done)
1592
1848
  break;
@@ -1624,6 +1880,7 @@ export {
1624
1880
  serialize,
1625
1881
  resolveCredential,
1626
1882
  registerInputResolver,
1883
+ registerInputCompactor,
1627
1884
  parentPort,
1628
1885
  objectOfArraysAsArrayOfObjects,
1629
1886
  makeFingerprint,
@@ -1632,6 +1889,7 @@ export {
1632
1889
  getTelemetryProvider,
1633
1890
  getLogger,
1634
1891
  getInputResolvers,
1892
+ getInputCompactors,
1635
1893
  getGlobalCredentialStore,
1636
1894
  forceArray,
1637
1895
  encrypt,
@@ -1650,20 +1908,26 @@ export {
1650
1908
  TELEMETRY_PROVIDER,
1651
1909
  SpanStatusCode,
1652
1910
  ServiceRegistry,
1911
+ OtpPassphraseCache,
1653
1912
  OTelTelemetryProvider,
1654
1913
  NullLogger,
1655
1914
  NoopTelemetryProvider,
1656
1915
  LOGGER,
1657
1916
  InMemoryCredentialStore,
1658
1917
  INPUT_RESOLVERS,
1918
+ INPUT_COMPACTORS,
1659
1919
  EventEmitter,
1660
1920
  EnvCredentialStore,
1921
+ CredentialPutInputSchema,
1661
1922
  Container,
1662
1923
  ConsoleTelemetryProvider,
1663
1924
  ConsoleLogger,
1664
1925
  ChainedCredentialStore,
1665
1926
  CREDENTIAL_STORE,
1927
+ CREDENTIAL_PROVIDER_SCHEMA_ENUM,
1928
+ CREDENTIAL_PROVIDER_OPTIONS,
1929
+ CREDENTIAL_PROVIDER_NONE,
1666
1930
  BaseError
1667
1931
  };
1668
1932
 
1669
- //# debugId=98A19D1FE1EE3D8D64756E2164756E21
1933
+ //# debugId=C70A02C175B2D24B64756E2164756E21