llm-relay 0.47.0 → 0.48.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 (77) hide show
  1. package/dist/accounting-store-io.js +1 -9
  2. package/dist/accounting-store-io.js.map +1 -1
  3. package/dist/accounting-store-schema.d.ts +0 -35
  4. package/dist/accounting-store-schema.js +14 -101
  5. package/dist/accounting-store-schema.js.map +1 -1
  6. package/dist/accounting-store.d.ts +7 -0
  7. package/dist/accounting-store.js +3 -1
  8. package/dist/accounting-store.js.map +1 -1
  9. package/dist/availability-snapshot.js +14 -44
  10. package/dist/availability-snapshot.js.map +1 -1
  11. package/dist/availability.d.ts +31 -4
  12. package/dist/availability.js +36 -0
  13. package/dist/availability.js.map +1 -1
  14. package/dist/backend.js +12 -20
  15. package/dist/backend.js.map +1 -1
  16. package/dist/candidates.js +12 -46
  17. package/dist/candidates.js.map +1 -1
  18. package/dist/cli.js +47 -178
  19. package/dist/cli.js.map +1 -1
  20. package/dist/configured-limits.js +55 -106
  21. package/dist/configured-limits.js.map +1 -1
  22. package/dist/cooldown-clear.d.ts +3 -0
  23. package/dist/cooldown-clear.js +158 -2
  24. package/dist/cooldown-clear.js.map +1 -1
  25. package/dist/dashboard/.vite/manifest.json +1 -1
  26. package/dist/dashboard/assets/{index-u-Ez_oE6.js → index-BA4GdK4p.js} +1 -1
  27. package/dist/dashboard/index.html +1 -1
  28. package/dist/dashboard-contract.js +1 -5
  29. package/dist/dashboard-contract.js.map +1 -1
  30. package/dist/dashboard-routes.js +29 -57
  31. package/dist/dashboard-routes.js.map +1 -1
  32. package/dist/dashboard-snapshot.js +17 -42
  33. package/dist/dashboard-snapshot.js.map +1 -1
  34. package/dist/dashboard-static.js +1 -3
  35. package/dist/dashboard-static.js.map +1 -1
  36. package/dist/dialect-stream.js +13 -21
  37. package/dist/dialect-stream.js.map +1 -1
  38. package/dist/hard-cap.d.ts +3 -1
  39. package/dist/hard-cap.js +11 -0
  40. package/dist/hard-cap.js.map +1 -1
  41. package/dist/json-shape.d.ts +22 -0
  42. package/dist/json-shape.js +40 -0
  43. package/dist/json-shape.js.map +1 -0
  44. package/dist/keys-cli.js +4 -60
  45. package/dist/keys-cli.js.map +1 -1
  46. package/dist/keystore.js +11 -18
  47. package/dist/keystore.js.map +1 -1
  48. package/dist/openai-dialect.js +46 -40
  49. package/dist/openai-dialect.js.map +1 -1
  50. package/dist/openai-request.d.ts +0 -26
  51. package/dist/openai-request.js +1 -3
  52. package/dist/openai-request.js.map +1 -1
  53. package/dist/quota-demotion.js +9 -34
  54. package/dist/quota-demotion.js.map +1 -1
  55. package/dist/refusal-interpretation.js +1 -4
  56. package/dist/refusal-interpretation.js.map +1 -1
  57. package/dist/responses-request.d.ts +0 -76
  58. package/dist/responses-request.js +1 -3
  59. package/dist/responses-request.js.map +1 -1
  60. package/dist/server.js +122 -150
  61. package/dist/server.js.map +1 -1
  62. package/dist/sse-frames.d.ts +39 -0
  63. package/dist/sse-frames.js +65 -0
  64. package/dist/sse-frames.js.map +1 -0
  65. package/dist/stream-commit.js +14 -24
  66. package/dist/stream-commit.js.map +1 -1
  67. package/dist/target-facts.d.ts +6 -0
  68. package/dist/target-facts.js +8 -5
  69. package/dist/target-facts.js.map +1 -1
  70. package/dist/think-tags.js +11 -30
  71. package/dist/think-tags.js.map +1 -1
  72. package/dist/tool-use-ids.d.ts +0 -31
  73. package/dist/tool-use-ids.js +11 -63
  74. package/dist/tool-use-ids.js.map +1 -1
  75. package/dist/usage-observer.js +22 -33
  76. package/dist/usage-observer.js.map +1 -1
  77. package/package.json +1 -1
@@ -15,25 +15,10 @@ function parseAxisValues(raw, where) {
15
15
  }
16
16
  return out;
17
17
  }
18
- /** The keys legal inside a `hard` block — the closed axes and nothing else. */
19
- function isHardKey(key) {
18
+ /** Recognize one member of the closed axis vocabulary. */
19
+ function isConfiguredLimitAxis(key) {
20
20
  return CONFIGURED_LIMIT_AXES.includes(key);
21
21
  }
22
- /**
23
- * Validate one flat hard-axis set. Same positive-safe-integer rule as the soft axes, but NO
24
- * nested `models` handling here — the caller splits that out first.
25
- */
26
- function parseHardAxisValues(raw, where) {
27
- const out = {};
28
- for (const key of Object.keys(raw)) {
29
- const value = raw[key];
30
- if (!Number.isSafeInteger(value) || value <= 0) {
31
- throw new Error(`${where}.${key} must be a positive integer; got ${JSON.stringify(value)}`);
32
- }
33
- out[key] = value;
34
- }
35
- return out;
36
- }
37
22
  /**
38
23
  * Validate the `hard` sub-block of a `limits` declaration at load time. FLAT AXES ONLY: a
39
24
  * per-deployment cap rides inside that deployment's own limits entry
@@ -50,7 +35,7 @@ export function parseHardLimits(raw, where) {
50
35
  throw new Error(`${where} must be an object of rate-limit axes`);
51
36
  }
52
37
  for (const key of Object.keys(raw)) {
53
- if (!isHardKey(key)) {
38
+ if (!isConfiguredLimitAxis(key)) {
54
39
  // Month ceilings are refused, not ignored: the ledger's window read declines month
55
40
  // (`usedInWindow` returns no figure), so such a cap could never fire and its presence would
56
41
  // be a lie about what this relay enforces. See docs/reference.md "Hard caps".
@@ -58,7 +43,32 @@ export function parseHardLimits(raw, where) {
58
43
  `minute/day periods only — a per-deployment cap belongs in that model's own limits entry`);
59
44
  }
60
45
  }
61
- return parseHardAxisValues(raw, where);
46
+ return parseAxisValues(raw, where);
47
+ }
48
+ /** Parse the grammar shared by a provider/credential block and each of its model entries. */
49
+ function parseLimitEntry(raw, where, allowModels) {
50
+ const axes = {};
51
+ let modelsRaw;
52
+ let hardRaw;
53
+ for (const [key, value] of Object.entries(raw)) {
54
+ if (allowModels && key === "models") {
55
+ modelsRaw = value;
56
+ continue;
57
+ }
58
+ if (key === "hard") {
59
+ hardRaw = value;
60
+ continue;
61
+ }
62
+ if (!isConfiguredLimitAxis(key)) {
63
+ throw new Error(`${where}.${key} is not a known rate-limit axis (expected ${CONFIGURED_LIMIT_AXES.join(", ")})`);
64
+ }
65
+ axes[key] = value;
66
+ }
67
+ const limits = parseAxisValues(axes, where);
68
+ const hard = parseHardLimits(hardRaw, `${where}.hard`);
69
+ if (hard !== undefined)
70
+ limits.hard = hard;
71
+ return [limits, modelsRaw];
62
72
  }
63
73
  /**
64
74
  * Validate a `limits` block at load time.
@@ -79,30 +89,8 @@ export function parseConfiguredLimits(raw, where) {
79
89
  if (typeof raw !== "object" || raw === null || Array.isArray(raw)) {
80
90
  throw new Error(`${where} must be an object of rate-limit axes`);
81
91
  }
82
- const value = raw;
83
- const axes = {};
84
- let modelsRaw;
85
- let hardRaw;
86
- for (const [key, v] of Object.entries(value)) {
87
- if (key === "models") {
88
- modelsRaw = v;
89
- continue;
90
- }
91
- if (key === "hard") {
92
- // The refusal ceilings ride INSIDE the same block, validated by their own parser —
93
- // which throws on the same typo hazards this one does.
94
- hardRaw = v;
95
- continue;
96
- }
97
- if (!CONFIGURED_LIMIT_AXES.includes(key)) {
98
- throw new Error(`${where}.${key} is not a known rate-limit axis (expected ${CONFIGURED_LIMIT_AXES.join(", ")})`);
99
- }
100
- axes[key] = v;
101
- }
102
- const out = parseAxisValues(axes, where);
103
- const hard = parseHardLimits(hardRaw, `${where}.hard`);
104
- if (hard !== undefined)
105
- out.hard = hard;
92
+ const [parsed, modelsRaw] = parseLimitEntry(raw, where, true);
93
+ const out = parsed;
106
94
  if (modelsRaw !== undefined) {
107
95
  if (typeof modelsRaw !== "object" || modelsRaw === null || Array.isArray(modelsRaw)) {
108
96
  throw new Error(`${where}.models must be an object mapping backend model ids to limit axes`);
@@ -113,26 +101,9 @@ export function parseConfiguredLimits(raw, where) {
113
101
  throw new Error(`${where}.models.${JSON.stringify(modelId)} must be an object of rate-limit axes`);
114
102
  }
115
103
  // A model override goes through the SAME closed-axis check — an "RPM" inside a model entry
116
- // is the same silent-typo hazard as one at the top level. `hard` splits out first and is
117
- // validated by its own parser, so a nested ceiling rides beside the soft axes here too.
118
- const entryValue = entry;
119
- let entryHardRaw;
120
- const entryAxes = {};
121
- for (const [key, v] of Object.entries(entryValue)) {
122
- if (key === "hard") {
123
- entryHardRaw = v;
124
- continue;
125
- }
126
- if (!CONFIGURED_LIMIT_AXES.includes(key)) {
127
- throw new Error(`${where}.models.${JSON.stringify(modelId)}.${key} is not a known rate-limit axis ` +
128
- `(expected ${CONFIGURED_LIMIT_AXES.join(", ")})`);
129
- }
130
- entryAxes[key] = v;
131
- }
132
- const parsedEntry = parseAxisValues(entryAxes, `${where}.models.${JSON.stringify(modelId)}`);
133
- const entryHard = parseHardLimits(entryHardRaw, `${where}.models.${JSON.stringify(modelId)}.hard`);
134
- if (entryHard !== undefined)
135
- parsedEntry.hard = entryHard;
104
+ // is the same silent-typo hazard as one at the top level. `allowModels` is false here, so a
105
+ // nested `models` key is rejected by that same closed-axis check rather than recursing.
106
+ const [parsedEntry] = parseLimitEntry(entry, `${where}.models.${JSON.stringify(modelId)}`, false);
136
107
  models[modelId] = parsedEntry;
137
108
  }
138
109
  if (Object.keys(models).length > 0)
@@ -163,54 +134,32 @@ export function resolveConfiguredLimits(cfg, provider, credentialLabel, model) {
163
134
  : p.credentials?.find((c) => c.label === credentialLabel)?.limits;
164
135
  if (providerLimits === undefined && credentialLimits === undefined)
165
136
  return null;
137
+ const ladder = [
138
+ ["credential-model", model !== null ? credentialLimits?.models?.[model] : undefined],
139
+ ["provider-model", model !== null ? providerLimits?.models?.[model] : undefined],
140
+ ["credential", credentialLimits],
141
+ ["provider", providerLimits],
142
+ ];
166
143
  const out = { basis: "configured", source: {} };
167
144
  const hard = {};
168
145
  const hardSource = {};
169
146
  let hardDeclared = false;
170
147
  for (const axis of CONFIGURED_LIMIT_AXES) {
171
- const fromCredentialModel = model !== null ? credentialLimits?.models?.[model]?.[axis] : undefined;
172
- const fromProviderModel = model !== null ? providerLimits?.models?.[model]?.[axis] : undefined;
173
- const fromCredential = credentialLimits?.[axis];
174
- const fromProvider = providerLimits?.[axis];
175
- if (fromCredentialModel !== undefined) {
176
- out[axis] = fromCredentialModel;
177
- out.source[axis] = "credential-model";
178
- }
179
- else if (fromProviderModel !== undefined) {
180
- out[axis] = fromProviderModel;
181
- out.source[axis] = "provider-model";
182
- }
183
- else if (fromCredential !== undefined) {
184
- out[axis] = fromCredential;
185
- out.source[axis] = "credential";
186
- }
187
- else if (fromProvider !== undefined) {
188
- out[axis] = fromProvider;
189
- out.source[axis] = "provider";
190
- }
191
- // The `hard` ladder mirrors the soft one EXACTLY — same four declaration sites, same
192
- // most-specific-first order. A second grammar here would be a second thing to keep in step.
193
- const fromCredentialHardModel = model !== null ? credentialLimits?.models?.[model]?.hard?.[axis] : undefined;
194
- const fromProviderHardModel = model !== null ? providerLimits?.models?.[model]?.hard?.[axis] : undefined;
195
- if (fromCredentialHardModel !== undefined) {
196
- hard[axis] = fromCredentialHardModel;
197
- hardSource[axis] = "credential-model";
198
- hardDeclared = true;
199
- }
200
- else if (fromProviderHardModel !== undefined) {
201
- hard[axis] = fromProviderHardModel;
202
- hardSource[axis] = "provider-model";
203
- hardDeclared = true;
204
- }
205
- else if (credentialLimits?.hard?.[axis] !== undefined) {
206
- hard[axis] = credentialLimits.hard[axis];
207
- hardSource[axis] = "credential";
208
- hardDeclared = true;
209
- }
210
- else if (providerLimits?.hard?.[axis] !== undefined) {
211
- hard[axis] = providerLimits.hard[axis];
212
- hardSource[axis] = "provider";
213
- hardDeclared = true;
148
+ // The two figures resolve independently while walking the SAME precedence ladder.
149
+ for (const [source, limits] of ladder) {
150
+ const softValue = limits?.[axis];
151
+ if (out[axis] === undefined && softValue !== undefined) {
152
+ out[axis] = softValue;
153
+ out.source[axis] = source;
154
+ }
155
+ const hardValue = limits?.hard?.[axis];
156
+ if (hard[axis] === undefined && hardValue !== undefined) {
157
+ hard[axis] = hardValue;
158
+ hardSource[axis] = source;
159
+ hardDeclared = true;
160
+ }
161
+ if (out[axis] !== undefined && hard[axis] !== undefined)
162
+ break;
214
163
  }
215
164
  }
216
165
  // Attached only when something was declared, so a no-cap resolution keeps the exact pre-G2
@@ -1 +1 @@
1
- {"version":3,"file":"configured-limits.js","sourceRoot":"","sources":["../src/configured-limits.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configured-limits.js","sourceRoot":"","sources":["../src/configured-limits.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,9 @@ export interface CooldownClearResult {
25
25
  readonly facts: ClearedCooldownGroup<ClearedCooldownFact>;
26
26
  };
27
27
  }
28
+ export type CooldownClearTargetKey = keyof CooldownClearTarget;
29
+ /** Validate the cooldown-clear wire envelope under a caller-owned exact target-key policy. */
30
+ export declare function isCooldownClearResult(value: unknown, expectedTarget: CooldownClearTarget, acceptedTargetKeys: readonly CooldownClearTargetKey[]): value is CooldownClearResult;
28
31
  /** One mutation seam for the live breaker and process-global learned fact store. */
29
32
  export declare function clearCooldowns(breaker: CircuitBreaker, target: CooldownClearTarget, opts?: {
30
33
  factsPath?: string;
@@ -1,5 +1,161 @@
1
- import { makeCredentialId, parseCredentialId } from "./credential-id.js";
2
- import { clearCooldownFacts, clearCredentialInvalidFacts, } from "./target-facts.js";
1
+ import { CREDENTIAL_LABEL_PATTERN, makeCredentialId, parseCredentialId, } from "./credential-id.js";
2
+ import { hasExactKeys, isRecord } from "./json-shape.js";
3
+ import { clearCooldownFacts, clearCredentialInvalidFacts, COOLING_FACT_KINDS, } from "./target-facts.js";
4
+ function nonEmptyString(value) {
5
+ return typeof value === "string" && value.length > 0;
6
+ }
7
+ function credentialIdBelongsTo(provider, value) {
8
+ if (typeof value !== "string")
9
+ return false;
10
+ return parseCredentialId(value)?.provider === provider;
11
+ }
12
+ function targetMatches(value, expected, acceptedKeys) {
13
+ if (!hasExactKeys(value, acceptedKeys))
14
+ return false;
15
+ return acceptedKeys.every((key) => {
16
+ if (key !== "kinds")
17
+ return value[key] === expected[key];
18
+ return Array.isArray(value.kinds) && expected.kinds !== undefined &&
19
+ value.kinds.length === expected.kinds.length &&
20
+ value.kinds.every((kind, index) => kind === expected.kinds[index]);
21
+ });
22
+ }
23
+ function isCooldownFactScope(value) {
24
+ if (!isRecord(value))
25
+ return false;
26
+ switch (value.kind) {
27
+ case "attempt":
28
+ return hasExactKeys(value, ["kind", "provider", "credentialId", "model"]) &&
29
+ nonEmptyString(value.provider) &&
30
+ credentialIdBelongsTo(value.provider, value.credentialId) &&
31
+ nonEmptyString(value.model);
32
+ case "group": {
33
+ const keys = Object.hasOwn(value, "credentialId")
34
+ ? ["kind", "provider", "credentialId", "members"]
35
+ : ["kind", "provider", "members"];
36
+ return hasExactKeys(value, keys) &&
37
+ nonEmptyString(value.provider) &&
38
+ Array.isArray(value.members) &&
39
+ value.members.length > 0 &&
40
+ value.members.every(nonEmptyString) &&
41
+ (!Object.hasOwn(value, "credentialId") || credentialIdBelongsTo(value.provider, value.credentialId));
42
+ }
43
+ case "deployment":
44
+ return hasExactKeys(value, ["kind", "provider", "model"]) &&
45
+ nonEmptyString(value.provider) && nonEmptyString(value.model);
46
+ case "credential":
47
+ return hasExactKeys(value, ["kind", "provider", "credentialId"]) &&
48
+ nonEmptyString(value.provider) && credentialIdBelongsTo(value.provider, value.credentialId);
49
+ case "provider":
50
+ return hasExactKeys(value, ["kind", "provider"]) && nonEmptyString(value.provider);
51
+ case "model":
52
+ return hasExactKeys(value, ["kind", "model"]) && nonEmptyString(value.model);
53
+ default:
54
+ return false;
55
+ }
56
+ }
57
+ function scopeIsContainedByTarget(scope, target) {
58
+ const credentialId = target.credential === undefined
59
+ ? undefined
60
+ : makeCredentialId(target.provider, target.credential);
61
+ switch (scope.kind) {
62
+ case "attempt":
63
+ return scope.provider === target.provider &&
64
+ (target.model === undefined || scope.model === target.model) &&
65
+ (credentialId === undefined || scope.credentialId === credentialId);
66
+ case "group":
67
+ return scope.provider === target.provider &&
68
+ (target.model === undefined || scope.members.every((member) => member === target.model)) &&
69
+ (credentialId === undefined || scope.credentialId === credentialId);
70
+ case "deployment":
71
+ return scope.provider === target.provider && credentialId === undefined &&
72
+ (target.model === undefined || scope.model === target.model);
73
+ case "credential":
74
+ return scope.provider === target.provider && target.model === undefined &&
75
+ (credentialId === undefined || scope.credentialId === credentialId);
76
+ case "provider":
77
+ return scope.provider === target.provider && target.model === undefined && credentialId === undefined;
78
+ case "model":
79
+ return false;
80
+ }
81
+ }
82
+ function isNarrowedScope(value, target) {
83
+ if (!isRecord(value) || typeof value.kind !== "string")
84
+ return false;
85
+ const credentialId = target.credential === undefined
86
+ ? undefined
87
+ : makeCredentialId(target.provider, target.credential);
88
+ switch (value.kind) {
89
+ case "attempt":
90
+ return hasExactKeys(value, ["kind", "provider", "credentialId", "model"]) &&
91
+ value.provider === target.provider && value.credentialId === credentialId &&
92
+ typeof value.model === "string";
93
+ case "group":
94
+ return hasExactKeys(value, ["kind", "provider", "credentialId", "members"]) &&
95
+ value.provider === target.provider && value.credentialId === credentialId &&
96
+ Array.isArray(value.members) && value.members.length > 0 &&
97
+ value.members.every(nonEmptyString);
98
+ case "credential":
99
+ return hasExactKeys(value, ["kind", "provider", "credentialId"]) &&
100
+ value.provider === target.provider && value.credentialId === credentialId;
101
+ default:
102
+ return false;
103
+ }
104
+ }
105
+ function isCooldownCell(value, target, narrowed) {
106
+ if (!isRecord(value) || !hasExactKeys(value, ["provider", "model", "credential"]))
107
+ return false;
108
+ if (value.provider !== target.provider || (!narrowed && !nonEmptyString(value.provider)))
109
+ return false;
110
+ if (!(value.model === null || (narrowed ? typeof value.model === "string" : nonEmptyString(value.model)))) {
111
+ return false;
112
+ }
113
+ if (narrowed) {
114
+ if (value.credential !== target.credential)
115
+ return false;
116
+ }
117
+ else if (!nonEmptyString(value.credential) || !CREDENTIAL_LABEL_PATTERN.test(value.credential)) {
118
+ return false;
119
+ }
120
+ return (target.model === undefined || value.model === target.model) &&
121
+ (target.credential === undefined || value.credential === target.credential);
122
+ }
123
+ function isCooldownFact(value, target, narrowed) {
124
+ if (!isRecord(value) || !hasExactKeys(value, ["kind", "scope"]))
125
+ return false;
126
+ if (narrowed) {
127
+ return value.kind === "credential-invalid" && isNarrowedScope(value.scope, target);
128
+ }
129
+ return typeof value.kind === "string" &&
130
+ COOLING_FACT_KINDS.has(value.kind) &&
131
+ isCooldownFactScope(value.scope) &&
132
+ scopeIsContainedByTarget(value.scope, target);
133
+ }
134
+ function isClearedGroup(value, isItem) {
135
+ if (!isRecord(value) || !hasExactKeys(value, ["count", "items"]) ||
136
+ typeof value.count !== "number" || !Number.isSafeInteger(value.count) ||
137
+ value.count < 0 || !Array.isArray(value.items)) {
138
+ return false;
139
+ }
140
+ return value.count === value.items.length && value.items.every(isItem);
141
+ }
142
+ /** Validate the cooldown-clear wire envelope under a caller-owned exact target-key policy. */
143
+ export function isCooldownClearResult(value, expectedTarget, acceptedTargetKeys) {
144
+ if (!isRecord(value) || !hasExactKeys(value, ["target", "cleared"]) ||
145
+ !targetMatches(value.target, expectedTarget, acceptedTargetKeys) ||
146
+ !isRecord(value.cleared) ||
147
+ !hasExactKeys(value.cleared, ["breakerCells", "credentialFaults", "facts"])) {
148
+ return false;
149
+ }
150
+ // Derived from the semantic condition the PRODUCER uses (`target.kinds !== undefined` in
151
+ // clearCooldowns), not from the key-policy array — one definition of "narrowed" per file.
152
+ const narrowed = expectedTarget.kinds !== undefined;
153
+ return isClearedGroup(value.cleared.breakerCells, narrowed
154
+ ? (_item) => false
155
+ : (item) => isCooldownCell(item, expectedTarget, false)) &&
156
+ isClearedGroup(value.cleared.credentialFaults, (item) => isCooldownCell(item, expectedTarget, narrowed)) &&
157
+ isClearedGroup(value.cleared.facts, (item) => isCooldownFact(item, expectedTarget, narrowed));
158
+ }
3
159
  function publicCell(cell) {
4
160
  return {
5
161
  provider: cell.provider,
@@ -1 +1 @@
1
- {"version":3,"file":"cooldown-clear.js","sourceRoot":"","sources":["../src/cooldown-clear.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cooldown-clear.js","sourceRoot":"","sources":["../src/cooldown-clear.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "index.html": {
3
- "file": "assets/index-u-Ez_oE6.js",
3
+ "file": "assets/index-BA4GdK4p.js",
4
4
  "name": "index",
5
5
  "src": "index.html",
6
6
  "isEntry": true,