@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/node.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
  }
@@ -1588,9 +1844,9 @@ class WorkerServerBase {
1588
1844
  setTimeout(() => {
1589
1845
  this.completedRequests.delete(id);
1590
1846
  }, 5000);
1591
- if (this.completedRequests.size > 1e4) {
1847
+ if (this.completedRequests.size > 1000) {
1592
1848
  const iter = this.completedRequests.values();
1593
- for (let i = 0;i < 5000; i++) {
1849
+ for (let i = 0;i < 500; i++) {
1594
1850
  const entry = iter.next();
1595
1851
  if (entry.done)
1596
1852
  break;
@@ -1645,6 +1901,7 @@ export {
1645
1901
  serialize,
1646
1902
  resolveCredential,
1647
1903
  registerInputResolver,
1904
+ registerInputCompactor,
1648
1905
  parentPort,
1649
1906
  objectOfArraysAsArrayOfObjects,
1650
1907
  makeFingerprint,
@@ -1653,6 +1910,7 @@ export {
1653
1910
  getTelemetryProvider,
1654
1911
  getLogger,
1655
1912
  getInputResolvers,
1913
+ getInputCompactors,
1656
1914
  getGlobalCredentialStore,
1657
1915
  forceArray,
1658
1916
  encrypt,
@@ -1671,20 +1929,26 @@ export {
1671
1929
  TELEMETRY_PROVIDER,
1672
1930
  SpanStatusCode,
1673
1931
  ServiceRegistry,
1932
+ OtpPassphraseCache,
1674
1933
  OTelTelemetryProvider,
1675
1934
  NullLogger,
1676
1935
  NoopTelemetryProvider,
1677
1936
  LOGGER,
1678
1937
  InMemoryCredentialStore,
1679
1938
  INPUT_RESOLVERS,
1939
+ INPUT_COMPACTORS,
1680
1940
  EventEmitter,
1681
1941
  EnvCredentialStore,
1942
+ CredentialPutInputSchema,
1682
1943
  Container,
1683
1944
  ConsoleTelemetryProvider,
1684
1945
  ConsoleLogger,
1685
1946
  ChainedCredentialStore,
1686
1947
  CREDENTIAL_STORE,
1948
+ CREDENTIAL_PROVIDER_SCHEMA_ENUM,
1949
+ CREDENTIAL_PROVIDER_OPTIONS,
1950
+ CREDENTIAL_PROVIDER_NONE,
1687
1951
  BaseError
1688
1952
  };
1689
1953
 
1690
- //# debugId=95A7F4B72D9E347164756E2164756E21
1954
+ //# debugId=4E655B5EF37DCACC64756E2164756E21