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