@blamejs/blamejs-shop 0.2.24 → 0.2.25

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 (63) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/lib/admin.js +42 -9
  3. package/lib/asset-manifest.json +1 -1
  4. package/lib/storefront.js +98 -21
  5. package/lib/vendor/MANIFEST.json +2 -2
  6. package/lib/vendor/blamejs/CHANGELOG.md +2 -0
  7. package/lib/vendor/blamejs/api-snapshot.json +2 -2
  8. package/lib/vendor/blamejs/lib/a2a.js +11 -11
  9. package/lib/vendor/blamejs/lib/agent-snapshot.js +1 -1
  10. package/lib/vendor/blamejs/lib/ai-capability.js +20 -20
  11. package/lib/vendor/blamejs/lib/ai-dp.js +17 -17
  12. package/lib/vendor/blamejs/lib/ai-input.js +3 -3
  13. package/lib/vendor/blamejs/lib/ai-pref.js +9 -9
  14. package/lib/vendor/blamejs/lib/ai-quota.js +17 -17
  15. package/lib/vendor/blamejs/lib/arg-parser.js +38 -38
  16. package/lib/vendor/blamejs/lib/audit-sign.js +4 -4
  17. package/lib/vendor/blamejs/lib/auth/acr-vocabulary.js +4 -4
  18. package/lib/vendor/blamejs/lib/auth/auth-time-tracker.js +1 -1
  19. package/lib/vendor/blamejs/lib/auth/elevation-grant.js +10 -10
  20. package/lib/vendor/blamejs/lib/auth/step-up-policy.js +12 -12
  21. package/lib/vendor/blamejs/lib/auth/step-up.js +15 -15
  22. package/lib/vendor/blamejs/lib/boot-gates.js +6 -6
  23. package/lib/vendor/blamejs/lib/budr.js +6 -6
  24. package/lib/vendor/blamejs/lib/content-credentials.js +13 -13
  25. package/lib/vendor/blamejs/lib/dark-patterns.js +15 -15
  26. package/lib/vendor/blamejs/lib/ddl-change-control.js +37 -37
  27. package/lib/vendor/blamejs/lib/dr-runbook.js +7 -7
  28. package/lib/vendor/blamejs/lib/fapi2.js +9 -9
  29. package/lib/vendor/blamejs/lib/fdx.js +7 -7
  30. package/lib/vendor/blamejs/lib/graphql-federation.js +2 -2
  31. package/lib/vendor/blamejs/lib/iab-mspa.js +5 -5
  32. package/lib/vendor/blamejs/lib/iab-tcf.js +18 -18
  33. package/lib/vendor/blamejs/lib/mcp.js +13 -13
  34. package/lib/vendor/blamejs/lib/middleware/require-step-up.js +3 -3
  35. package/lib/vendor/blamejs/lib/sec-cyber.js +3 -3
  36. package/lib/vendor/blamejs/lib/sse.js +14 -14
  37. package/lib/vendor/blamejs/lib/tcpa-10dlc.js +5 -5
  38. package/lib/vendor/blamejs/lib/tenant-quota.js +18 -18
  39. package/lib/vendor/blamejs/package.json +1 -1
  40. package/lib/vendor/blamejs/release-notes/v0.13.44.json +31 -0
  41. package/lib/vendor/blamejs/test/layer-0-primitives/a2a.test.js +1 -1
  42. package/lib/vendor/blamejs/test/layer-0-primitives/ai-capability.test.js +15 -15
  43. package/lib/vendor/blamejs/test/layer-0-primitives/ai-dp.test.js +16 -16
  44. package/lib/vendor/blamejs/test/layer-0-primitives/ai-input.test.js +2 -2
  45. package/lib/vendor/blamejs/test/layer-0-primitives/ai-pref.test.js +2 -2
  46. package/lib/vendor/blamejs/test/layer-0-primitives/ai-quota.test.js +19 -19
  47. package/lib/vendor/blamejs/test/layer-0-primitives/audit-sign-ml-dsa-65.test.js +1 -1
  48. package/lib/vendor/blamejs/test/layer-0-primitives/boot-gates.test.js +1 -1
  49. package/lib/vendor/blamejs/test/layer-0-primitives/budr.test.js +3 -3
  50. package/lib/vendor/blamejs/test/layer-0-primitives/codebase-patterns.test.js +52 -0
  51. package/lib/vendor/blamejs/test/layer-0-primitives/content-credentials.test.js +3 -3
  52. package/lib/vendor/blamejs/test/layer-0-primitives/dark-patterns.test.js +2 -2
  53. package/lib/vendor/blamejs/test/layer-0-primitives/dr-runbook.test.js +1 -1
  54. package/lib/vendor/blamejs/test/layer-0-primitives/fapi2.test.js +6 -6
  55. package/lib/vendor/blamejs/test/layer-0-primitives/fdx.test.js +2 -2
  56. package/lib/vendor/blamejs/test/layer-0-primitives/graphql-federation.test.js +1 -1
  57. package/lib/vendor/blamejs/test/layer-0-primitives/iab-mspa.test.js +3 -3
  58. package/lib/vendor/blamejs/test/layer-0-primitives/iab-tcf.test.js +7 -7
  59. package/lib/vendor/blamejs/test/layer-0-primitives/mcp.test.js +5 -5
  60. package/lib/vendor/blamejs/test/layer-0-primitives/sse.test.js +1 -1
  61. package/lib/vendor/blamejs/test/layer-0-primitives/tcpa-10dlc.test.js +3 -3
  62. package/lib/vendor/blamejs/test/layer-0-primitives/tenant-quota.test.js +3 -3
  63. package/package.json +1 -1
@@ -102,7 +102,7 @@ function _frGt(a, b) { return a.num * b.den > b.num * a.den; } // a > b
102
102
  // Uniform BigInt in [0, m) via rejection sampling on CSPRNG bytes —
103
103
  // no modulo bias.
104
104
  function _uniformBelow(m) {
105
- if (m <= 0n) throw new AiDpError("aiDp/internal", "ai.dp: _uniformBelow needs m > 0");
105
+ if (m <= 0n) throw new AiDpError("ai-dp/internal", "ai.dp: _uniformBelow needs m > 0");
106
106
  if (m === 1n) return 0n;
107
107
  var bits = m.toString(2).length;
108
108
  var bytes = Math.ceil(bits / 8); // allow:raw-byte-literal — bits-per-byte divisor, not a size
@@ -296,23 +296,23 @@ function mechanism(opts) {
296
296
  validateOpts(opts, ["type", "sensitivity", "epsilon", "delta", "bound"], "ai.dp.mechanism");
297
297
 
298
298
  if (MECHANISMS.indexOf(opts.type) === -1) {
299
- throw new AiDpError("aiDp/bad-mechanism",
299
+ throw new AiDpError("ai-dp/bad-mechanism",
300
300
  "ai.dp.mechanism: type must be one of " + MECHANISMS.join(" / ") +
301
301
  " (exponential / sparse-vector are deferred — their float-safe constructions " +
302
302
  "re-open on demand)");
303
303
  }
304
304
  if (typeof opts.sensitivity !== "number" || !isFinite(opts.sensitivity) || opts.sensitivity <= 0) {
305
- throw new AiDpError("aiDp/bad-sensitivity",
305
+ throw new AiDpError("ai-dp/bad-sensitivity",
306
306
  "ai.dp.mechanism: sensitivity must be a positive finite number");
307
307
  }
308
308
  if (typeof opts.epsilon !== "number" || !isFinite(opts.epsilon) || opts.epsilon <= 0) {
309
- throw new AiDpError("aiDp/bad-epsilon",
309
+ throw new AiDpError("ai-dp/bad-epsilon",
310
310
  "ai.dp.mechanism: epsilon must be a positive finite number");
311
311
  }
312
312
 
313
313
  if (opts.type === "laplace") {
314
314
  if (typeof opts.bound !== "number" || !isFinite(opts.bound) || opts.bound <= 0) {
315
- throw new AiDpError("aiDp/bad-bound",
315
+ throw new AiDpError("ai-dp/bad-bound",
316
316
  "ai.dp.mechanism: laplace requires bound > 0 (the snapping clamp; the " +
317
317
  "privacy guarantee depends on it)");
318
318
  }
@@ -325,11 +325,11 @@ function mechanism(opts) {
325
325
 
326
326
  // gaussian
327
327
  if (typeof opts.delta !== "number" || !isFinite(opts.delta) || opts.delta <= 0 || opts.delta >= 1) {
328
- throw new AiDpError("aiDp/bad-delta",
328
+ throw new AiDpError("ai-dp/bad-delta",
329
329
  "ai.dp.mechanism: gaussian requires 0 < delta < 1");
330
330
  }
331
331
  if (opts.epsilon > 1) {
332
- throw new AiDpError("aiDp/epsilon-too-large",
332
+ throw new AiDpError("ai-dp/epsilon-too-large",
333
333
  "ai.dp.mechanism: the classic Gaussian calibration is proven for epsilon <= 1; " +
334
334
  "split into multiple releases under an rdp budget, or the analytic Gaussian " +
335
335
  "mechanism (Balle-Wang 2018) re-opens this path on demand");
@@ -346,7 +346,7 @@ function mechanism(opts) {
346
346
  // budget wraps this).
347
347
  function _applyMechanism(m, value) {
348
348
  if (typeof value !== "number" || !isFinite(value)) {
349
- throw new AiDpError("aiDp/bad-value", "ai.dp: value must be a finite number");
349
+ throw new AiDpError("ai-dp/bad-value", "ai.dp: value must be a finite number");
350
350
  }
351
351
  if (m.type === "laplace") {
352
352
  return _snappingLaplace(value, m.scale, m.bound);
@@ -403,22 +403,22 @@ function budget(opts) {
403
403
  validateOpts(opts, ["scope", "epsilon", "delta", "accounting", "audit"], "ai.dp.budget");
404
404
 
405
405
  validateOpts.requireNonEmptyString(opts.scope,
406
- "ai.dp.budget: scope", AiDpError, "aiDp/bad-scope");
406
+ "ai.dp.budget: scope", AiDpError, "ai-dp/bad-scope");
407
407
  if (typeof opts.epsilon !== "number" || !isFinite(opts.epsilon) || opts.epsilon <= 0) {
408
- throw new AiDpError("aiDp/bad-epsilon", "ai.dp.budget: epsilon must be a positive finite number");
408
+ throw new AiDpError("ai-dp/bad-epsilon", "ai.dp.budget: epsilon must be a positive finite number");
409
409
  }
410
410
  var totalEpsilon = opts.epsilon;
411
411
  var totalDelta = (opts.delta == null) ? 0 : opts.delta;
412
412
  if (typeof totalDelta !== "number" || !isFinite(totalDelta) || totalDelta < 0 || totalDelta >= 1) {
413
- throw new AiDpError("aiDp/bad-delta", "ai.dp.budget: delta must be in [0, 1)");
413
+ throw new AiDpError("ai-dp/bad-delta", "ai.dp.budget: delta must be in [0, 1)");
414
414
  }
415
415
  var accounting = (opts.accounting == null) ? "basic" : opts.accounting;
416
416
  if (ACCOUNTINGS.indexOf(accounting) === -1) {
417
- throw new AiDpError("aiDp/bad-accounting",
417
+ throw new AiDpError("ai-dp/bad-accounting",
418
418
  "ai.dp.budget: accounting must be one of " + ACCOUNTINGS.join(" / "));
419
419
  }
420
420
  if (accounting === "rdp" && totalDelta <= 0) {
421
- throw new AiDpError("aiDp/bad-accounting",
421
+ throw new AiDpError("ai-dp/bad-accounting",
422
422
  "ai.dp.budget: rdp accounting requires delta > 0 (the RDP→(ε,δ) conversion is " +
423
423
  "undefined at delta = 0; use basic accounting for pure-ε budgets)");
424
424
  }
@@ -457,11 +457,11 @@ function budget(opts) {
457
457
 
458
458
  function consume(m, value) {
459
459
  if (!m || typeof m !== "object" || MECHANISMS.indexOf(m.type) === -1) {
460
- throw new AiDpError("aiDp/bad-mechanism",
460
+ throw new AiDpError("ai-dp/bad-mechanism",
461
461
  "ai.dp.budget.consume: first argument must be a b.ai.dp.mechanism");
462
462
  }
463
463
  if (m.type === "gaussian" && totalDelta <= 0) {
464
- throw new AiDpError("aiDp/bad-delta",
464
+ throw new AiDpError("ai-dp/bad-delta",
465
465
  "ai.dp.budget.consume: a gaussian mechanism needs a scope delta > 0");
466
466
  }
467
467
 
@@ -475,7 +475,7 @@ function budget(opts) {
475
475
  requestEpsilon: m.epsilon, requestDelta: m.delta,
476
476
  spentEpsilon: spentEpsilon, totalEpsilon: totalEpsilon,
477
477
  });
478
- throw new AiDpError("aiDp/budget-exhausted",
478
+ throw new AiDpError("ai-dp/budget-exhausted",
479
479
  "ai.dp.budget.consume: scope '" + scope + "' would spend ε=" +
480
480
  (spentEpsilon + m.epsilon) + "/" + totalEpsilon + ", δ=" +
481
481
  (spentDelta + m.delta) + "/" + totalDelta + "; refused");
@@ -489,7 +489,7 @@ function budget(opts) {
489
489
  scope: scope, accounting: accounting, mechanism: m.type,
490
490
  projectedEpsilon: trialEps, totalEpsilon: totalEpsilon,
491
491
  });
492
- throw new AiDpError("aiDp/budget-exhausted",
492
+ throw new AiDpError("ai-dp/budget-exhausted",
493
493
  "ai.dp.budget.consume: scope '" + scope + "' would reach ε=" +
494
494
  trialEps.toFixed(4) + " of " + totalEpsilon + " at δ=" + totalDelta + "; refused");
495
495
  }
@@ -104,12 +104,12 @@ function classify(input, opts) {
104
104
  var auditOn = opts.audit !== false;
105
105
 
106
106
  if (typeof input !== "string") {
107
- throw errorClass.factory("BAD_INPUT",
107
+ throw errorClass.factory("ai-input/bad-input",
108
108
  "aiInput.classify: input must be a string");
109
109
  }
110
110
  var byteLen = Buffer.byteLength(input, "utf8");
111
111
  if (byteLen > maxBytes) {
112
- throw errorClass.factory("INPUT_TOO_LARGE",
112
+ throw errorClass.factory("ai-input/input-too-large",
113
113
  "aiInput.classify: input exceeds " + maxBytes + " bytes (got " + byteLen + ")");
114
114
  }
115
115
 
@@ -187,7 +187,7 @@ function refuseIfMalicious(input, opts) {
187
187
  var errorClass = opts.errorClass || AiInputError;
188
188
  var result = classify(input, opts);
189
189
  if (result.verdict === "malicious") {
190
- throw errorClass.factory("MALICIOUS_INPUT",
190
+ throw errorClass.factory("ai-input/malicious-input",
191
191
  "aiInput: input flagged as malicious (signals: " +
192
192
  result.signals.map(function (s) { return s.id; }).join(", ") + ")");
193
193
  }
@@ -38,25 +38,25 @@ var SNIPPET_VALUES = ["allow", "deny"];
38
38
 
39
39
  function _validate(opts) {
40
40
  if (!opts || typeof opts !== "object") {
41
- throw AiPrefError.factory("BAD_OPTS",
41
+ throw AiPrefError.factory("ai-pref/bad-opts",
42
42
  "aiPref: opts required");
43
43
  }
44
44
  var train = opts.train || "deny";
45
45
  var infer = opts.infer || "allow";
46
46
  var snippet = opts.snippet || "allow";
47
47
  if (TRAIN_VALUES.indexOf(train) === -1) {
48
- throw AiPrefError.factory("BAD_TRAIN", "aiPref: train must be one of " + TRAIN_VALUES.join(", "));
48
+ throw AiPrefError.factory("ai-pref/bad-train", "aiPref: train must be one of " + TRAIN_VALUES.join(", "));
49
49
  }
50
50
  if (INFER_VALUES.indexOf(infer) === -1) {
51
- throw AiPrefError.factory("BAD_INFER", "aiPref: infer must be one of " + INFER_VALUES.join(", "));
51
+ throw AiPrefError.factory("ai-pref/bad-infer", "aiPref: infer must be one of " + INFER_VALUES.join(", "));
52
52
  }
53
53
  if (SNIPPET_VALUES.indexOf(snippet) === -1) {
54
- throw AiPrefError.factory("BAD_SNIPPET", "aiPref: snippet must be one of " + SNIPPET_VALUES.join(", "));
54
+ throw AiPrefError.factory("ai-pref/bad-snippet", "aiPref: snippet must be one of " + SNIPPET_VALUES.join(", "));
55
55
  }
56
56
  if ((train === "paid" || infer === "paid") &&
57
57
  (!opts.price || typeof opts.price.amountUsd !== "number" ||
58
58
  !isFinite(opts.price.amountUsd) || opts.price.amountUsd <= 0)) {
59
- throw AiPrefError.factory("BAD_PRICE",
59
+ throw AiPrefError.factory("ai-pref/bad-price",
60
60
  "aiPref: price.amountUsd (positive finite number) required when train or infer is 'paid'");
61
61
  }
62
62
  return { train: train, infer: infer, snippet: snippet, price: opts.price || null };
@@ -140,10 +140,10 @@ function serializeHeader(opts) {
140
140
  */
141
141
  function parseHeader(value) {
142
142
  if (typeof value !== "string" || value.length === 0) {
143
- throw AiPrefError.factory("BAD_HEADER", "aiPref.parseHeader: value required");
143
+ throw AiPrefError.factory("ai-pref/bad-header", "aiPref.parseHeader: value required");
144
144
  }
145
145
  if (value.length > 1024) { // allow:raw-byte-literal — header value cap, not bytes
146
- throw AiPrefError.factory("HEADER_TOO_LARGE",
146
+ throw AiPrefError.factory("ai-pref/header-too-large",
147
147
  "aiPref.parseHeader: value exceeds 1024 chars");
148
148
  }
149
149
  structuredFields.refuseControlBytes(value, {
@@ -206,7 +206,7 @@ function robotsBlock(opts) {
206
206
  var v = _validate(opts);
207
207
  var ua = opts.userAgent || "*";
208
208
  if (typeof ua !== "string" || ua.length === 0 || ua.length > 256) { // allow:raw-byte-literal — UA-string cap, not bytes
209
- throw AiPrefError.factory("BAD_USER_AGENT",
209
+ throw AiPrefError.factory("ai-pref/bad-user-agent",
210
210
  "aiPref.robotsBlock: userAgent must be 1-256 char string (or omit for *)");
211
211
  }
212
212
  return "User-agent: " + ua + "\n" +
@@ -298,7 +298,7 @@ function middleware(opts) {
298
298
  */
299
299
  function refusePaidCrawl(req, res, opts) {
300
300
  if (!opts || !opts.price || typeof opts.price.amountUsd !== "number") {
301
- throw AiPrefError.factory("BAD_PRICE",
301
+ throw AiPrefError.factory("ai-pref/bad-price",
302
302
  "aiPref.refusePaidCrawl: opts.price.amountUsd required");
303
303
  }
304
304
  var body = JSON.stringify({
@@ -257,20 +257,20 @@ function create(opts) {
257
257
 
258
258
  var dimension = opts.dimension;
259
259
  if (DIMENSIONS.indexOf(dimension) === -1) {
260
- throw new AiQuotaError("aiQuota/bad-dimension",
260
+ throw new AiQuotaError("ai-quota/bad-dimension",
261
261
  "ai.quota.create: dimension must be one of " + DIMENSIONS.join(" / ") +
262
262
  " (got " + JSON.stringify(dimension) + ")");
263
263
  }
264
264
 
265
265
  var period = opts.period;
266
266
  if (PERIODS.indexOf(period) === -1) {
267
- throw new AiQuotaError("aiQuota/bad-period",
267
+ throw new AiQuotaError("ai-quota/bad-period",
268
268
  "ai.quota.create: period must be one of " + PERIODS.join(" / ") +
269
269
  " (got " + JSON.stringify(period) + ")");
270
270
  }
271
271
 
272
272
  if (typeof opts.limit !== "number" || !isFinite(opts.limit) || opts.limit <= 0) {
273
- throw new AiQuotaError("aiQuota/bad-limit",
273
+ throw new AiQuotaError("ai-quota/bad-limit",
274
274
  "ai.quota.create: limit must be a positive finite number");
275
275
  }
276
276
  var defaultLimit = opts.limit;
@@ -281,7 +281,7 @@ function create(opts) {
281
281
 
282
282
  var enforcement = (opts.enforcement == null) ? "hard" : opts.enforcement;
283
283
  if (ENFORCEMENTS.indexOf(enforcement) === -1) {
284
- throw new AiQuotaError("aiQuota/bad-enforcement",
284
+ throw new AiQuotaError("ai-quota/bad-enforcement",
285
285
  "ai.quota.create: enforcement must be one of " + ENFORCEMENTS.join(" / ") +
286
286
  " (got " + JSON.stringify(enforcement) + ")");
287
287
  }
@@ -353,11 +353,11 @@ function create(opts) {
353
353
 
354
354
  function consume(tenantId, model, amount, consumeOpts) {
355
355
  validateOpts.requireNonEmptyString(tenantId,
356
- "ai.quota.consume: tenantId", AiQuotaError, "aiQuota/bad-tenant");
356
+ "ai.quota.consume: tenantId", AiQuotaError, "ai-quota/bad-tenant");
357
357
  validateOpts.requireNonEmptyString(model,
358
- "ai.quota.consume: model", AiQuotaError, "aiQuota/bad-model");
358
+ "ai.quota.consume: model", AiQuotaError, "ai-quota/bad-model");
359
359
  if (typeof amount !== "number" || !isFinite(amount) || amount < 0) {
360
- throw new AiQuotaError("aiQuota/bad-amount",
360
+ throw new AiQuotaError("ai-quota/bad-amount",
361
361
  "ai.quota.consume: amount must be a non-negative finite number");
362
362
  }
363
363
  consumeOpts = consumeOpts || {};
@@ -366,7 +366,7 @@ function create(opts) {
366
366
  // enforcer; still validated against the allowlist.
367
367
  var mode = (consumeOpts.enforcement == null) ? enforcement : consumeOpts.enforcement;
368
368
  if (ENFORCEMENTS.indexOf(mode) === -1) {
369
- throw new AiQuotaError("aiQuota/bad-enforcement",
369
+ throw new AiQuotaError("ai-quota/bad-enforcement",
370
370
  "ai.quota.consume: enforcement override must be one of " + ENFORCEMENTS.join(" / "));
371
371
  }
372
372
 
@@ -401,7 +401,7 @@ function create(opts) {
401
401
  enforcement: mode, nodeId: _nodeId(),
402
402
  });
403
403
  _emitMetric("ai.quota.exceeded", 1);
404
- throw new AiQuotaError("aiQuota/exceeded",
404
+ throw new AiQuotaError("ai-quota/exceeded",
405
405
  "ai.quota.consume: tenant '" + tenantId + "' model '" + model +
406
406
  "' is at " + rv.used + " of " + limit + " " + dimension +
407
407
  " this " + period + "; consuming " + amount + " would exceed the budget — call refused");
@@ -432,9 +432,9 @@ function create(opts) {
432
432
 
433
433
  function check(tenantId, model) {
434
434
  validateOpts.requireNonEmptyString(tenantId,
435
- "ai.quota.check: tenantId", AiQuotaError, "aiQuota/bad-tenant");
435
+ "ai.quota.check: tenantId", AiQuotaError, "ai-quota/bad-tenant");
436
436
  validateOpts.requireNonEmptyString(model,
437
- "ai.quota.check: model", AiQuotaError, "aiQuota/bad-model");
437
+ "ai.quota.check: model", AiQuotaError, "ai-quota/bad-model");
438
438
  var now = Date.now();
439
439
  var windowStart = _windowStartFor(period, now);
440
440
  var resetsAt = _resetsAtFor(period, windowStart);
@@ -454,10 +454,10 @@ function create(opts) {
454
454
  return;
455
455
  }
456
456
  validateOpts.requireNonEmptyString(tenantId,
457
- "ai.quota.reset: tenantId", AiQuotaError, "aiQuota/bad-tenant");
457
+ "ai.quota.reset: tenantId", AiQuotaError, "ai-quota/bad-tenant");
458
458
  if (model !== undefined) {
459
459
  validateOpts.requireNonEmptyString(model,
460
- "ai.quota.reset: model", AiQuotaError, "aiQuota/bad-model");
460
+ "ai.quota.reset: model", AiQuotaError, "ai-quota/bad-model");
461
461
  store.reset(_keyFor(tenantId, model, windowStart));
462
462
  return;
463
463
  }
@@ -470,7 +470,7 @@ function create(opts) {
470
470
  for (var i = 0; i < keys.length; i++) store.reset(keys[i]);
471
471
  return;
472
472
  }
473
- throw new AiQuotaError("aiQuota/reset-unsupported",
473
+ throw new AiQuotaError("ai-quota/reset-unsupported",
474
474
  "ai.quota.reset: tenant-wide reset with an external store requires " +
475
475
  "an explicit model argument (per-key) or a store-side prefix delete");
476
476
  }
@@ -491,14 +491,14 @@ function create(opts) {
491
491
  function _validateLimitMap(map, label) {
492
492
  if (map == null) return {};
493
493
  if (typeof map !== "object" || Array.isArray(map)) {
494
- throw new AiQuotaError("aiQuota/bad-override",
494
+ throw new AiQuotaError("ai-quota/bad-override",
495
495
  "ai.quota.create: " + label + " must be a plain object { key: limit }");
496
496
  }
497
497
  var keys = Object.keys(map);
498
498
  for (var i = 0; i < keys.length; i++) {
499
499
  var v = map[keys[i]];
500
500
  if (typeof v !== "number" || !isFinite(v) || v <= 0) {
501
- throw new AiQuotaError("aiQuota/bad-override",
501
+ throw new AiQuotaError("ai-quota/bad-override",
502
502
  "ai.quota.create: " + label + "['" + keys[i] +
503
503
  "'] must be a positive finite number");
504
504
  }
@@ -512,7 +512,7 @@ function _validateStore(store) {
512
512
  typeof store.add !== "function" ||
513
513
  typeof store.get !== "function" ||
514
514
  typeof store.reset !== "function") {
515
- throw new AiQuotaError("aiQuota/bad-store",
515
+ throw new AiQuotaError("ai-quota/bad-store",
516
516
  "ai.quota.create: store must expose reserve / add / get / reset functions");
517
517
  }
518
518
  }
@@ -53,17 +53,17 @@ function _isPlainNonEmpty(s) {
53
53
 
54
54
  function _validateFlagName(name) {
55
55
  if (!_isPlainNonEmpty(name)) {
56
- throw new ArgParserError("argParser/flag-name-invalid",
56
+ throw new ArgParserError("arg-parser/flag-name-invalid",
57
57
  "flag name must be a non-empty string");
58
58
  }
59
59
  if (FORBIDDEN_NAMES.indexOf(name) !== -1) {
60
- throw new ArgParserError("argParser/flag-name-forbidden",
60
+ throw new ArgParserError("arg-parser/flag-name-forbidden",
61
61
  "flag name '" + name + "' is reserved");
62
62
  }
63
63
  // ASCII-only kebab-/snake-case identifier. Keeps every flag name safe
64
64
  // to embed in help text and prevents `--foo$bar=baz` style oddities.
65
65
  if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(name)) {
66
- throw new ArgParserError("argParser/flag-name-shape",
66
+ throw new ArgParserError("arg-parser/flag-name-shape",
67
67
  "flag name '" + name + "' must match [a-zA-Z][a-zA-Z0-9_-]*");
68
68
  }
69
69
  }
@@ -71,26 +71,26 @@ function _validateFlagName(name) {
71
71
  function _validateAlias(alias, ownerName) {
72
72
  if (alias === undefined || alias === null) return;
73
73
  if (typeof alias !== "string" || alias.length !== 1 || !/^[a-zA-Z]$/.test(alias)) {
74
- throw new ArgParserError("argParser/alias-shape",
74
+ throw new ArgParserError("arg-parser/alias-shape",
75
75
  "flag '" + ownerName + "' alias must be a single letter [a-zA-Z]");
76
76
  }
77
77
  }
78
78
 
79
79
  function _validateFlagSpec(spec, ownerLabel) {
80
80
  if (!spec || typeof spec !== "object") {
81
- throw new ArgParserError("argParser/flag-spec-invalid",
81
+ throw new ArgParserError("arg-parser/flag-spec-invalid",
82
82
  ownerLabel + ": flag spec must be an object");
83
83
  }
84
84
  _validateFlagName(spec.name);
85
85
  _validateAlias(spec.alias, spec.name);
86
86
  var type = spec.type || "string";
87
87
  if (SUPPORTED_TYPES.indexOf(type) === -1) {
88
- throw new ArgParserError("argParser/flag-type-unsupported",
88
+ throw new ArgParserError("arg-parser/flag-type-unsupported",
89
89
  ownerLabel + ": flag '" + spec.name +
90
90
  "' type '" + type + "' must be one of " + SUPPORTED_TYPES.join(", "));
91
91
  }
92
92
  if (spec.description !== undefined && typeof spec.description !== "string") {
93
- throw new ArgParserError("argParser/flag-description-invalid",
93
+ throw new ArgParserError("arg-parser/flag-description-invalid",
94
94
  ownerLabel + ": flag '" + spec.name + "' description must be a string");
95
95
  }
96
96
  }
@@ -101,7 +101,7 @@ function _coerceValue(spec, raw, label) {
101
101
  if (type === "number") {
102
102
  var n = Number(raw);
103
103
  if (!isFinite(n)) {
104
- throw new ArgParserError("argParser/value-not-number",
104
+ throw new ArgParserError("arg-parser/value-not-number",
105
105
  label + " '" + spec.name + "' expected a number, got " + JSON.stringify(raw));
106
106
  }
107
107
  return n;
@@ -112,7 +112,7 @@ function _coerceValue(spec, raw, label) {
112
112
  var s = String(raw).toLowerCase();
113
113
  if (s === "true" || s === "1" || s === "yes") return true;
114
114
  if (s === "false" || s === "0" || s === "no") return false;
115
- throw new ArgParserError("argParser/value-not-boolean",
115
+ throw new ArgParserError("arg-parser/value-not-boolean",
116
116
  label + " '" + spec.name + "' expected boolean, got " + JSON.stringify(raw));
117
117
  }
118
118
  if (type === "list") {
@@ -121,7 +121,7 @@ function _coerceValue(spec, raw, label) {
121
121
  return s2.indexOf(",") === -1 ? [s2] : s2.split(",");
122
122
  }
123
123
  // Unreachable: validated at create-time.
124
- throw new ArgParserError("argParser/type-unreachable",
124
+ throw new ArgParserError("arg-parser/type-unreachable",
125
125
  "unsupported flag type '" + type + "'");
126
126
  }
127
127
 
@@ -132,13 +132,13 @@ function _buildFlagIndex(flagSpecs, ownerLabel) {
132
132
  var spec = flagSpecs[i];
133
133
  _validateFlagSpec(spec, ownerLabel);
134
134
  if (byName[spec.name]) {
135
- throw new ArgParserError("argParser/flag-duplicate",
135
+ throw new ArgParserError("arg-parser/flag-duplicate",
136
136
  ownerLabel + ": flag '" + spec.name + "' declared twice");
137
137
  }
138
138
  byName[spec.name] = spec;
139
139
  if (spec.alias) {
140
140
  if (byAlias[spec.alias]) {
141
- throw new ArgParserError("argParser/alias-duplicate",
141
+ throw new ArgParserError("arg-parser/alias-duplicate",
142
142
  ownerLabel + ": alias '-" + spec.alias + "' declared twice");
143
143
  }
144
144
  byAlias[spec.alias] = spec;
@@ -232,12 +232,12 @@ function _renderCommandHelp(parser, command) {
232
232
  // command-name (the first non-flag token, when commands are configured).
233
233
  function _splitArgv(parser, argv) {
234
234
  if (!Array.isArray(argv)) {
235
- throw new ArgParserError("argParser/argv-not-array",
235
+ throw new ArgParserError("arg-parser/argv-not-array",
236
236
  "argv must be an array of strings");
237
237
  }
238
238
  for (var n = 0; n < argv.length; n++) {
239
239
  if (typeof argv[n] !== "string") {
240
- throw new ArgParserError("argParser/argv-element-not-string",
240
+ throw new ArgParserError("arg-parser/argv-element-not-string",
241
241
  "argv[" + n + "] must be a string");
242
242
  }
243
243
  }
@@ -256,7 +256,7 @@ function _splitArgv(parser, argv) {
256
256
  if (!parser.commands.byName[name]) {
257
257
  // Surface help / version as built-ins even when no command matches.
258
258
  if (name === "help") return { command: "__help__", pre: argv.slice(0, i), rest: argv.slice(i + 1) };
259
- throw new ArgParserError("argParser/unknown-command",
259
+ throw new ArgParserError("arg-parser/unknown-command",
260
260
  "unknown command '" + name + "'");
261
261
  }
262
262
  return { command: name, pre: argv.slice(0, i), rest: argv.slice(i + 1) };
@@ -299,7 +299,7 @@ function _consumeFlags(index, tokens) {
299
299
  if (tok.indexOf("--") === 0) {
300
300
  var rest = tok.slice(2);
301
301
  if (FORBIDDEN_NAMES.indexOf(rest.split("=")[0]) !== -1) {
302
- throw new ArgParserError("argParser/argv-forbidden-name",
302
+ throw new ArgParserError("arg-parser/argv-forbidden-name",
303
303
  "flag '--" + rest.split("=")[0] + "' is reserved");
304
304
  }
305
305
  var eq = rest.indexOf("=");
@@ -313,7 +313,7 @@ function _consumeFlags(index, tokens) {
313
313
  }
314
314
  spec = index.byName[nm];
315
315
  if (!spec) {
316
- throw new ArgParserError("argParser/unknown-flag",
316
+ throw new ArgParserError("arg-parser/unknown-flag",
317
317
  "unknown flag '--" + nm + "'");
318
318
  }
319
319
  } else if (tok.indexOf("-") === 0 && tok.length >= 2) {
@@ -329,12 +329,12 @@ function _consumeFlags(index, tokens) {
329
329
  ach = alias;
330
330
  }
331
331
  if (ach.length !== 1) {
332
- throw new ArgParserError("argParser/short-flag-shape",
332
+ throw new ArgParserError("arg-parser/short-flag-shape",
333
333
  "short flag '" + tok + "' must be a single letter (use --long-form for multi-char names)");
334
334
  }
335
335
  spec = index.byAlias[ach];
336
336
  if (!spec) {
337
- throw new ArgParserError("argParser/unknown-alias",
337
+ throw new ArgParserError("arg-parser/unknown-alias",
338
338
  "unknown short flag '-" + ach + "'");
339
339
  }
340
340
  } else {
@@ -349,7 +349,7 @@ function _consumeFlags(index, tokens) {
349
349
  } else {
350
350
  if (!hasInlineValue) {
351
351
  if (i + 1 >= tokens.length) {
352
- throw new ArgParserError("argParser/value-missing",
352
+ throw new ArgParserError("arg-parser/value-missing",
353
353
  "flag '--" + spec.name + "' requires a value");
354
354
  }
355
355
  rawValue = tokens[++i];
@@ -377,7 +377,7 @@ function _applyDefaultsAndRequired(specs, flags, ownerLabel) {
377
377
  for (var k = 0; k < specs.length; k++) {
378
378
  var s = specs[k];
379
379
  if (s.required && flags[s.name] === undefined) {
380
- throw new ArgParserError("argParser/missing-required",
380
+ throw new ArgParserError("arg-parser/missing-required",
381
381
  ownerLabel + ": flag '--" + s.name + "' is required");
382
382
  }
383
383
  }
@@ -385,23 +385,23 @@ function _applyDefaultsAndRequired(specs, flags, ownerLabel) {
385
385
 
386
386
  function _validateCommandSpec(cmd) {
387
387
  if (!cmd || typeof cmd !== "object") {
388
- throw new ArgParserError("argParser/command-spec-invalid",
388
+ throw new ArgParserError("arg-parser/command-spec-invalid",
389
389
  "command spec must be an object");
390
390
  }
391
391
  if (!_isPlainNonEmpty(cmd.name)) {
392
- throw new ArgParserError("argParser/command-name-invalid",
392
+ throw new ArgParserError("arg-parser/command-name-invalid",
393
393
  "command name must be a non-empty string");
394
394
  }
395
395
  if (!/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(cmd.name)) {
396
- throw new ArgParserError("argParser/command-name-shape",
396
+ throw new ArgParserError("arg-parser/command-name-shape",
397
397
  "command name '" + cmd.name + "' must match [a-zA-Z][a-zA-Z0-9_-]*");
398
398
  }
399
399
  if (cmd.handler !== undefined && typeof cmd.handler !== "function") {
400
- throw new ArgParserError("argParser/command-handler-not-function",
400
+ throw new ArgParserError("arg-parser/command-handler-not-function",
401
401
  "command '" + cmd.name + "' handler must be a function");
402
402
  }
403
403
  if (cmd.description !== undefined && typeof cmd.description !== "string") {
404
- throw new ArgParserError("argParser/command-description-invalid",
404
+ throw new ArgParserError("arg-parser/command-description-invalid",
405
405
  "command '" + cmd.name + "' description must be a string");
406
406
  }
407
407
  }
@@ -465,29 +465,29 @@ function _validateCommandSpec(cmd) {
465
465
  */
466
466
  function create(opts) {
467
467
  if (!opts || typeof opts !== "object") {
468
- throw new ArgParserError("argParser/opts-required",
468
+ throw new ArgParserError("arg-parser/opts-required",
469
469
  "argParser.create requires an opts object");
470
470
  }
471
471
  var programName = opts.programName;
472
472
  if (programName !== undefined && typeof programName !== "string") {
473
- throw new ArgParserError("argParser/program-name-invalid",
473
+ throw new ArgParserError("arg-parser/program-name-invalid",
474
474
  "programName must be a string");
475
475
  }
476
476
  var description = opts.description;
477
477
  if (description !== undefined && typeof description !== "string") {
478
- throw new ArgParserError("argParser/description-invalid",
478
+ throw new ArgParserError("arg-parser/description-invalid",
479
479
  "description must be a string");
480
480
  }
481
481
  var topFlagsSpec = opts.flags || [];
482
482
  if (!Array.isArray(topFlagsSpec)) {
483
- throw new ArgParserError("argParser/flags-not-array",
483
+ throw new ArgParserError("arg-parser/flags-not-array",
484
484
  "flags must be an array");
485
485
  }
486
486
  var topFlags = _buildFlagIndex(topFlagsSpec, "top-level");
487
487
 
488
488
  var commandsSpec = opts.commands || [];
489
489
  if (!Array.isArray(commandsSpec)) {
490
- throw new ArgParserError("argParser/commands-not-array",
490
+ throw new ArgParserError("arg-parser/commands-not-array",
491
491
  "commands must be an array");
492
492
  }
493
493
  var commandsByName = Object.create(null);
@@ -496,12 +496,12 @@ function create(opts) {
496
496
  var c = commandsSpec[i];
497
497
  _validateCommandSpec(c);
498
498
  if (commandsByName[c.name]) {
499
- throw new ArgParserError("argParser/command-duplicate",
499
+ throw new ArgParserError("arg-parser/command-duplicate",
500
500
  "command '" + c.name + "' declared twice");
501
501
  }
502
502
  var cmdFlagsSpec = c.flags || [];
503
503
  if (!Array.isArray(cmdFlagsSpec)) {
504
- throw new ArgParserError("argParser/command-flags-not-array",
504
+ throw new ArgParserError("arg-parser/command-flags-not-array",
505
505
  "command '" + c.name + "' flags must be an array");
506
506
  }
507
507
  var cmdFlags = _buildFlagIndex(cmdFlagsSpec, "command '" + c.name + "'");
@@ -526,7 +526,7 @@ function create(opts) {
526
526
  if (commandName) {
527
527
  var cmd = commandsByName[commandName];
528
528
  if (!cmd) {
529
- throw new ArgParserError("argParser/help-unknown-command",
529
+ throw new ArgParserError("arg-parser/help-unknown-command",
530
530
  "no command named '" + commandName + "'");
531
531
  }
532
532
  return _renderCommandHelp(parser, cmd);
@@ -645,7 +645,7 @@ function create(opts) {
645
645
  */
646
646
  function parseRaw(argv) {
647
647
  if (!Array.isArray(argv)) {
648
- throw new ArgParserError("argParser/argv-not-array",
648
+ throw new ArgParserError("arg-parser/argv-not-array",
649
649
  "argv must be an array of strings");
650
650
  }
651
651
  var pos = [];
@@ -653,7 +653,7 @@ function parseRaw(argv) {
653
653
  for (var i = 0; i < argv.length; i++) {
654
654
  var tok = argv[i];
655
655
  if (typeof tok !== "string") {
656
- throw new ArgParserError("argParser/argv-element-not-string",
656
+ throw new ArgParserError("arg-parser/argv-element-not-string",
657
657
  "argv[" + i + "] must be a string");
658
658
  }
659
659
  if (tok === "--") {
@@ -673,14 +673,14 @@ function parseRaw(argv) {
673
673
  val = true;
674
674
  }
675
675
  if (FORBIDDEN_NAMES.indexOf(name) !== -1) {
676
- throw new ArgParserError("argParser/argv-forbidden-name",
676
+ throw new ArgParserError("arg-parser/argv-forbidden-name",
677
677
  "flag '--" + name + "' is reserved");
678
678
  }
679
679
  flags[name] = val;
680
680
  } else if (tok.indexOf("-") === 0 && tok.length === 2) {
681
681
  var s = tok.slice(1);
682
682
  if (FORBIDDEN_NAMES.indexOf(s) !== -1) {
683
- throw new ArgParserError("argParser/argv-forbidden-name",
683
+ throw new ArgParserError("arg-parser/argv-forbidden-name",
684
684
  "flag '-" + s + "' is reserved");
685
685
  }
686
686
  flags[s] = true;
@@ -178,13 +178,13 @@ var pendingNewKeyAlg = null;
178
178
  async function init(opts) {
179
179
  if (initialized) return;
180
180
  if (!opts || !opts.dataDir) {
181
- throw new AuditSignError("auditSign/bad-init",
181
+ throw new AuditSignError("audit-sign/bad-init",
182
182
  "auditSign.init({ dataDir }) is required");
183
183
  }
184
184
 
185
185
  var mode = (opts.mode || "wrapped").toLowerCase();
186
186
  if (mode !== "wrapped" && mode !== "plaintext") {
187
- throw new AuditSignError("auditSign/bad-mode",
187
+ throw new AuditSignError("audit-sign/bad-mode",
188
188
  "auditSign.init: mode must be 'wrapped' or 'plaintext'");
189
189
  }
190
190
  // Algorithm-on-generate. Validated against the supported list so
@@ -192,7 +192,7 @@ async function init(opts) {
192
192
  // deeper in nodeCrypto.
193
193
  var alg = (opts.algorithm || DEFAULT_SIGNING_ALG).toLowerCase();
194
194
  if (SUPPORTED_SIGNING_ALGS.indexOf(alg) === -1) {
195
- throw new AuditSignError("auditSign/bad-algorithm",
195
+ throw new AuditSignError("audit-sign/bad-algorithm",
196
196
  "auditSign.init: algorithm must be one of " +
197
197
  SUPPORTED_SIGNING_ALGS.join(", ") + " (got: " + alg + ")");
198
198
  }
@@ -341,7 +341,7 @@ async function _initFirstRunWrapped() {
341
341
 
342
342
  function _requireInit() {
343
343
  if (!initialized) {
344
- throw new AuditSignError("auditSign/not-initialized",
344
+ throw new AuditSignError("audit-sign/not-initialized",
345
345
  "auditSign.init() must be awaited before sign/verify");
346
346
  }
347
347
  }