openlimiter 1.3.1 → 1.3.3

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 (52) hide show
  1. package/dist/cli.d.ts +1 -1
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +130 -78
  4. package/dist/cli.js.map +1 -1
  5. package/dist/codex-device-login.d.ts +2 -1
  6. package/dist/codex-device-login.d.ts.map +1 -1
  7. package/dist/codex-device-login.js +6 -4
  8. package/dist/codex-device-login.js.map +1 -1
  9. package/dist/config.d.ts +1 -0
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +3 -2
  12. package/dist/config.js.map +1 -1
  13. package/dist/hub-auth.d.ts +12 -14
  14. package/dist/hub-auth.d.ts.map +1 -1
  15. package/dist/hub-auth.js +232 -47
  16. package/dist/hub-auth.js.map +1 -1
  17. package/dist/hub-sync.d.ts +14 -13
  18. package/dist/hub-sync.d.ts.map +1 -1
  19. package/dist/hub-sync.js +139 -18
  20. package/dist/hub-sync.js.map +1 -1
  21. package/dist/hub.d.ts +6 -3
  22. package/dist/hub.d.ts.map +1 -1
  23. package/dist/hub.js +47 -11
  24. package/dist/hub.js.map +1 -1
  25. package/dist/ingest.d.ts.map +1 -1
  26. package/dist/ingest.js +16 -21
  27. package/dist/ingest.js.map +1 -1
  28. package/dist/session.d.ts +16 -8
  29. package/dist/session.d.ts.map +1 -1
  30. package/dist/session.js +144 -31
  31. package/dist/session.js.map +1 -1
  32. package/dist/statusline.d.ts +1 -1
  33. package/dist/statusline.d.ts.map +1 -1
  34. package/dist/statusline.js +10 -8
  35. package/dist/statusline.js.map +1 -1
  36. package/dist/terminal-backup.d.ts +5 -0
  37. package/dist/terminal-backup.d.ts.map +1 -0
  38. package/dist/terminal-backup.js +88 -0
  39. package/dist/terminal-backup.js.map +1 -0
  40. package/dist/terminal-launcher.d.ts +12 -0
  41. package/dist/terminal-launcher.d.ts.map +1 -0
  42. package/dist/terminal-launcher.js +208 -0
  43. package/dist/terminal-launcher.js.map +1 -0
  44. package/dist/terminal-toml.d.ts +38 -0
  45. package/dist/terminal-toml.d.ts.map +1 -0
  46. package/dist/terminal-toml.js +357 -0
  47. package/dist/terminal-toml.js.map +1 -0
  48. package/dist/terminal.d.ts +10 -37
  49. package/dist/terminal.d.ts.map +1 -1
  50. package/dist/terminal.js +390 -619
  51. package/dist/terminal.js.map +1 -1
  52. package/package.json +4 -4
package/dist/hub-sync.js CHANGED
@@ -21,9 +21,21 @@
21
21
  */
22
22
  import { randomUUID, createHash } from "node:crypto";
23
23
  import path from "node:path";
24
- import { canonicalJson, freshness, readJsonFileSafely, resolveStateDirectory, writeFileAtomically } from "@openlimiter/core";
24
+ import { canonicalJson, freshness, prepareStateDirectory, readJsonFileSafely, resolveStateDirectory, writeFileAtomically } from "@openlimiter/core";
25
25
  import { parseHubJson, syncSnapshotsRequest } from "./hub.js";
26
+ import { withSessionLock } from "./session.js";
26
27
  export const SYNC_CURSOR_FILE_NAME = "openlimiter-sync-cursor.json";
28
+ export const OPENROUTER_BASELINE_FILE_NAME = "openlimiter-openrouter-baseline.json";
29
+ const SYNC_ATTEMPT_FILE_NAME = "openlimiter-sync-attempt.json";
30
+ export async function syncIsDue(directory, now) {
31
+ const result = await readJsonFileSafely(path.join(directory, SYNC_ATTEMPT_FILE_NAME));
32
+ const at = result.ok && isRecord(result.value) ? result.value["at"] : undefined;
33
+ const age = typeof at === "string" ? Date.parse(now) - Date.parse(at) : NaN;
34
+ return !Number.isFinite(age) || age < 0 || age >= 60_000;
35
+ }
36
+ export async function recordSyncAttempt(directory, now) {
37
+ await writeFileAtomically(path.join(directory, SYNC_ATTEMPT_FILE_NAME), canonicalJson({ at: now }));
38
+ }
27
39
  /** The contract version this build speaks, and nothing else. */
28
40
  export const SYNC_SCHEMA_VERSION = 2;
29
41
  /**
@@ -34,7 +46,7 @@ export const SYNC_SCHEMA_VERSION = 2;
34
46
  * inside a command a status line depends on. See `acquire/identity.ts` in the
35
47
  * core package for the same choice, made for the same reason.
36
48
  */
37
- export const SYNC_CLIENT_VERSION = "1.3.1";
49
+ export const SYNC_CLIENT_VERSION = "1.3.3";
38
50
  /** Most rows one envelope may carry, usage and spend counted together. */
39
51
  export const SYNC_MAX_ROWS = 128;
40
52
  /** How long an unresolved upload may still be retried as itself. */
@@ -116,25 +128,117 @@ function monthStartDate(observedAt) {
116
128
  .toISOString()
117
129
  .slice(0, 10);
118
130
  }
131
+ function utcMonth(observedAt) {
132
+ const parsed = new Date(observedAt);
133
+ if (Number.isNaN(parsed.getTime()))
134
+ return null;
135
+ return parsed.toISOString().slice(0, 7);
136
+ }
137
+ function isSafeUsage(value) {
138
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 && value <= 1_000_000_000_000;
139
+ }
140
+ function readOpenrouterBaselines(value) {
141
+ if (!isRecord(value) || value["version"] !== 1 || !isRecord(value["accounts"])) {
142
+ return new Map();
143
+ }
144
+ const result = new Map();
145
+ for (const [accountId, raw] of Object.entries(value["accounts"])) {
146
+ if (!ACCOUNT_ID_PATTERN.test(accountId) || !isRecord(raw))
147
+ continue;
148
+ const totalUsage = raw["totalUsage"];
149
+ const month = raw["month"];
150
+ const observedAt = raw["observedAt"];
151
+ if (!isSafeUsage(totalUsage) || typeof month !== "string" || !/^\d{4}-\d{2}$/u.test(month) ||
152
+ typeof observedAt !== "string" || !Number.isFinite(Date.parse(observedAt)))
153
+ continue;
154
+ result.set(accountId, { totalUsage, month, observedAt });
155
+ }
156
+ return result;
157
+ }
158
+ async function loadOpenrouterBaselines(directory) {
159
+ const result = await readJsonFileSafely(path.join(directory, OPENROUTER_BASELINE_FILE_NAME));
160
+ return readOpenrouterBaselines(result.ok ? result.value : null);
161
+ }
162
+ async function saveOpenrouterBaselines(directory, baselines) {
163
+ const accounts = {};
164
+ for (const [accountId, baseline] of baselines)
165
+ accounts[accountId] = baseline;
166
+ await prepareStateDirectory(directory);
167
+ await writeFileAtomically(path.join(directory, OPENROUTER_BASELINE_FILE_NAME), canonicalJson({ version: 1, accounts }));
168
+ }
119
169
  /**
120
170
  * Every spend row the cache has enough to build.
121
171
  *
122
- * This build tracks a point in time reading, not a month to date total with a
123
- * forecast: those live in the desktop's dedicated spend engine, which this
124
- * package does not have. So every row this function builds states its period
125
- * honestly as "the start of this month through the moment of this upload"
126
- * and never claims a forecast or a completed period it did not compute.
172
+ * Fixed windows spanning the observation's complete calendar month establish
173
+ * monthly spending directly. OpenRouter lifetime readings use a local per
174
+ * account baseline and contribute only the delta since that reading. Other
175
+ * lifetime credits and rolling windows stay local. The source period ends at
176
+ * the observation, never at the upload.
127
177
  * `usedAmount`, `limitAmount` and `currency` travel together or not at all
128
178
  * (see `Snapshot` in the core package), which is what this reads as "the
129
179
  * cache has one".
130
180
  */
131
181
  /** The providers the hub accepts an API spend sample for (mirrors API_PROVIDERS in the server contract); every other provider's spend stays local, otherwise one row would void the whole envelope. */
132
182
  export const SYNC_API_SPEND_PROVIDERS = new Set(["OPENAI", "ANTHROPIC", "XAI", "OPENROUTER"]);
133
- export function apiSpendSamplesFromSnapshots(snapshots, envelopeObservedAt) {
183
+ export async function apiSpendSamplesFromSnapshots(snapshots, _envelopeObservedAt, directory = resolveStateDirectory()) {
134
184
  const rows = [];
185
+ let baselines = null;
186
+ let baselinesChanged = false;
135
187
  for (const snapshot of snapshots) {
136
188
  if (!SYNC_API_SPEND_PROVIDERS.has(snapshot.provider))
137
189
  continue;
190
+ const isOpenrouterLifetime = snapshot.provider === "OPENROUTER" && snapshot.window.kind === "lifetime";
191
+ if (isOpenrouterLifetime) {
192
+ if (snapshot.usedAmount === undefined ||
193
+ snapshot.limitAmount === undefined ||
194
+ snapshot.currency === undefined ||
195
+ !isSafeUsage(snapshot.usedAmount) ||
196
+ !isSafeUsage(snapshot.limitAmount) ||
197
+ snapshot.currency !== "USD")
198
+ continue;
199
+ const accountId = accountIdOf(snapshot);
200
+ const month = utcMonth(snapshot.observedAt);
201
+ if (accountId === null || month === null)
202
+ continue;
203
+ baselines ??= await loadOpenrouterBaselines(directory);
204
+ const previous = baselines.get(accountId);
205
+ if (previous === undefined || previous.month !== month || snapshot.usedAmount < previous.totalUsage) {
206
+ baselines.set(accountId, {
207
+ totalUsage: snapshot.usedAmount,
208
+ month,
209
+ observedAt: snapshot.observedAt
210
+ });
211
+ baselinesChanged = true;
212
+ /* The server contract has no note field. The first observation is
213
+ stored locally and the first upload starts its source period at that
214
+ reading, with period_complete false to mean since first reading. */
215
+ continue;
216
+ }
217
+ rows.push({
218
+ source_id: stableSourceId(snapshot.provider + ":" + accountId),
219
+ account_id: accountId,
220
+ provider: snapshot.provider,
221
+ key_label: snapshot.accountLabel ?? accountId,
222
+ month: monthStartDate(snapshot.observedAt),
223
+ spend_usd: snapshot.usedAmount - previous.totalUsage,
224
+ budget_usd: snapshot.limitAmount,
225
+ source_period: [previous.observedAt, snapshot.observedAt],
226
+ currency_source: "PROVIDER_USD",
227
+ raw_unit_scale: 1,
228
+ forecast_date: null,
229
+ forecast_input: null,
230
+ period_complete: false
231
+ });
232
+ continue;
233
+ }
234
+ if (snapshot.window.kind !== "fixed" || snapshot.resetAt === null)
235
+ continue;
236
+ const monthStart = monthStartDate(snapshot.observedAt) + "T00:00:00.000Z";
237
+ const nextMonth = new Date(monthStart);
238
+ nextMonth.setUTCMonth(nextMonth.getUTCMonth() + 1);
239
+ if (snapshot.resetAt !== nextMonth.toISOString() ||
240
+ snapshot.window.durationSeconds !== (nextMonth.getTime() - Date.parse(monthStart)) / 1000)
241
+ continue;
138
242
  if (snapshot.usedAmount === undefined ||
139
243
  snapshot.limitAmount === undefined ||
140
244
  snapshot.currency === undefined) {
@@ -155,7 +259,7 @@ export function apiSpendSamplesFromSnapshots(snapshots, envelopeObservedAt) {
155
259
  month: monthStartDate(snapshot.observedAt),
156
260
  spend_usd: snapshot.usedAmount,
157
261
  budget_usd: snapshot.limitAmount,
158
- source_period: [monthStartDate(snapshot.observedAt) + "T00:00:00.000Z", envelopeObservedAt],
262
+ source_period: [monthStart, snapshot.observedAt],
159
263
  currency_source: "PROVIDER_USD",
160
264
  raw_unit_scale: 1,
161
265
  forecast_date: null,
@@ -163,6 +267,8 @@ export function apiSpendSamplesFromSnapshots(snapshots, envelopeObservedAt) {
163
267
  period_complete: false
164
268
  });
165
269
  }
270
+ if (baselines !== null && baselinesChanged)
271
+ await saveOpenrouterBaselines(directory, baselines);
166
272
  return rows.slice(0, SYNC_MAX_ROWS);
167
273
  }
168
274
  /**
@@ -195,6 +301,9 @@ export function buildSyncEnvelope(identity, usageSamples, apiSpendSamples) {
195
301
  function envelopeDigest(envelope) {
196
302
  return createHash("sha256").update(canonicalJson(envelope)).digest("hex");
197
303
  }
304
+ function isSafeSequence(value) {
305
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
306
+ }
198
307
  function isRecord(value) {
199
308
  return typeof value === "object" && value !== null && !Array.isArray(value);
200
309
  }
@@ -205,14 +314,14 @@ function normalizeCursor(value, deviceId) {
205
314
  if (value["version"] !== 1 || value["deviceId"] !== deviceId)
206
315
  return empty;
207
316
  const sequence = value["sequence"];
208
- if (typeof sequence !== "number" || !Number.isInteger(sequence) || sequence < 0)
317
+ if (!isSafeSequence(sequence))
209
318
  return empty;
210
319
  const pendingEventId = value["pendingEventId"];
211
320
  const pendingSequence = value["pendingSequence"];
212
321
  const pendingObservedAt = value["pendingObservedAt"];
213
322
  const pendingDigest = value["pendingDigest"];
214
323
  const pendingComplete = typeof pendingEventId === "string" &&
215
- typeof pendingSequence === "number" &&
324
+ isSafeSequence(pendingSequence) &&
216
325
  typeof pendingObservedAt === "string" &&
217
326
  typeof pendingDigest === "string";
218
327
  if (!pendingComplete)
@@ -279,17 +388,20 @@ function resumableEnvelope(cursor, usageSamples, apiSpendSamples, now) {
279
388
  }, usageSamples, apiSpendSamples);
280
389
  return envelopeDigest(candidate) === cursor.pendingDigest ? candidate : null;
281
390
  }
282
- function classifySyncReply(status, body, sentSequence) {
391
+ function classifySyncReply(status, body, sentSequence, storedSequence) {
283
392
  if (status === 200 && body["accepted"] === true) {
284
- const sequence = typeof body["sequence"] === "number" ? body["sequence"] : sentSequence;
393
+ const rawSequence = body["sequence"];
394
+ const sequence = rawSequence === undefined ? sentSequence : rawSequence;
395
+ if (!isSafeSequence(sequence) || sequence !== sentSequence)
396
+ return { kind: "sequence_mismatch" };
285
397
  const tier = typeof body["tier"] === "string" ? body["tier"] : null;
286
398
  return { kind: "accepted", sequence, tier };
287
399
  }
288
400
  if (status === 409) {
289
401
  const currentSequence = body["current_sequence"];
290
- return typeof currentSequence === "number"
402
+ return isSafeSequence(currentSequence) && currentSequence >= storedSequence
291
403
  ? { kind: "reconcile", sequence: currentSequence }
292
- : { kind: "rejected" };
404
+ : { kind: "sequence_mismatch" };
293
405
  }
294
406
  if (status >= 400 && status < 500)
295
407
  return { kind: "rejected" };
@@ -301,10 +413,10 @@ function classifySyncReply(status, body, sentSequence) {
301
413
  * never arrived leaves the same upload pending for the next run, and a
302
414
  * conflict names the hub's own sequence and is retried once.
303
415
  */
304
- export async function runSync(options) {
416
+ async function runSyncLocked(options) {
305
417
  const usageSamples = usageSamplesFromSnapshots(options.snapshots, options.now);
306
418
  const room = Math.max(0, SYNC_MAX_ROWS - usageSamples.length);
307
- const apiSpendSamples = apiSpendSamplesFromSnapshots(options.snapshots, options.now).slice(0, room);
419
+ const apiSpendSamples = (await apiSpendSamplesFromSnapshots(options.snapshots, options.now, options.directory)).slice(0, room);
308
420
  if (usageSamples.length === 0 && apiSpendSamples.length === 0) {
309
421
  return { kind: "nothing_to_sync" };
310
422
  }
@@ -339,7 +451,11 @@ export async function runSync(options) {
339
451
  }
340
452
  if (reply.status === 401)
341
453
  return { kind: "revoked" };
342
- const outcome = classifySyncReply(reply.status, parseHubJson(reply.body) ?? {}, envelope.sequence);
454
+ const outcome = classifySyncReply(reply.status, parseHubJson(reply.body) ?? {}, envelope.sequence, cursor.sequence);
455
+ if (outcome.kind === "sequence_mismatch") {
456
+ await saveCursor(options.directory, cursorSettled(cursor, cursor.sequence));
457
+ return { kind: "sequence_mismatch" };
458
+ }
343
459
  if (outcome.kind === "accepted") {
344
460
  cursor = cursorSettled(cursor, outcome.sequence);
345
461
  await saveCursor(options.directory, cursor);
@@ -363,6 +479,11 @@ export async function runSync(options) {
363
479
  }
364
480
  return { kind: "unavailable" };
365
481
  }
482
+ export async function runSync(options) {
483
+ if (options.sessionLockHeld === true)
484
+ return await runSyncLocked(options);
485
+ return await withSessionLock(options.directory, async () => await runSyncLocked(options));
486
+ }
366
487
  /** The state directory's default, exported so a caller need not repeat it. */
367
488
  export function defaultSyncDirectory() {
368
489
  return resolveStateDirectory();
@@ -1 +1 @@
1
- {"version":3,"file":"hub-sync.js","sourceRoot":"","sources":["../src/hub-sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hub-sync.js","sourceRoot":"","sources":["../src/hub-sync.ts"],"names":[],"mappings":"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"}
package/dist/hub.d.ts CHANGED
@@ -37,14 +37,17 @@ export interface HubRequest {
37
37
  export interface HubReply {
38
38
  readonly status: number;
39
39
  readonly body: string;
40
+ readonly retryAfterSeconds?: number | null;
40
41
  }
41
- export type HubTransport = (request: HubRequest) => Promise<HubReply>;
42
+ export type HubTransport = (request: HubRequest, signal?: AbortSignal) => Promise<HubReply>;
42
43
  /** The device flow's first call: mint a user code and a device code. */
43
- export declare function cliLoginStartRequest(environment: Readonly<Record<string, string | undefined>>): HubRequest | null;
44
+ export declare function cliLoginStartRequest(environment: Readonly<Record<string, string | undefined>>, clientProofHash?: string): HubRequest | null;
44
45
  /** The device flow's poll: ask whether somebody has approved the code yet. */
45
- export declare function cliLoginPollRequest(environment: Readonly<Record<string, string | undefined>>, deviceCode: string): HubRequest | null;
46
+ export declare function cliLoginPollRequest(environment: Readonly<Record<string, string | undefined>>, deviceCode: string, clientProof?: string): HubRequest | null;
46
47
  /** Trade a refresh credential for a new token, rotating the credential. */
47
48
  export declare function grantRenewRequest(environment: Readonly<Record<string, string | undefined>>, refreshCredential: string): HubRequest | null;
49
+ /** Acknowledge delivery of an approved grant without sending a bearer header. */
50
+ export declare function cliLoginAckRequest(environment: Readonly<Record<string, string | undefined>>, deviceCode: string, token: string, clientProof: string): HubRequest | null;
48
51
  /** Upload one sync envelope under the signed in account. */
49
52
  export declare function syncSnapshotsRequest(environment: Readonly<Record<string, string | undefined>>, token: string, envelope: unknown): HubRequest | null;
50
53
  /**
package/dist/hub.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hub.d.ts","sourceRoot":"","sources":["../src/hub.ts"],"names":[],"mappings":"AAmBA,qEAAqE;AACrE,eAAO,MAAM,eAAe,6CAA6C,CAAC;AAE1E,+HAA+H;AAC/H,eAAO,MAAM,2BAA2B,qNAAqN,CAAC;AAE9P,6DAA6D;AAC7D,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAE/C,yEAAyE;AACzE,eAAO,MAAM,sBAAsB,UAAY,CAAC;AAEhD,iEAAiE;AACjE,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAU7C;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,CAS5F;AAED,mIAAmI;AACnI,wBAAgB,UAAU,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,CAI5F;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GAAG,OAAO,CAEhG;AAED,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAQ3E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AA+BtE,wEAAwE;AACxE,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,GACxD,UAAU,GAAG,IAAI,CAEnB;AAKD,8EAA8E;AAC9E,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACzD,UAAU,EAAE,MAAM,GACjB,UAAU,GAAG,IAAI,CAGnB;AAKD,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACzD,iBAAiB,EAAE,MAAM,GACxB,UAAU,GAAG,IAAI,CAMnB;AAKD,4DAA4D;AAC5D,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACzD,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,GAChB,UAAU,GAAG,IAAI,CAGnB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,mBAAmB,GAAE,OAAO,UAAU,CAAC,KAAwB,GAC9D,YAAY,CAwBd;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAUzE"}
1
+ {"version":3,"file":"hub.d.ts","sourceRoot":"","sources":["../src/hub.ts"],"names":[],"mappings":"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"}
package/dist/hub.js CHANGED
@@ -15,7 +15,7 @@
15
15
  * configured answers every hub command with "not configured" rather than
16
16
  * sending a request with an empty credential.
17
17
  */
18
- import { OPENLIMITER_USER_AGENT } from "@openlimiter/core";
18
+ import { OPENLIMITER_USER_AGENT, readBoundedResponse } from "@openlimiter/core";
19
19
  /** The project this build talks to, absent a build time override. */
20
20
  export const DEFAULT_HUB_URL = "https://dsaonzonizvxtxgclwud.supabase.co";
21
21
  /** The hub's publishable key: public by design, shipped in every client, overridable through OPENLIMITER_SUPABASE_ANON_KEY. */
@@ -98,16 +98,24 @@ function buildRequest(environment, endpoint, body, bearer) {
98
98
  };
99
99
  }
100
100
  /** The device flow's first call: mint a user code and a device code. */
101
- export function cliLoginStartRequest(environment) {
102
- return buildRequest(environment, "cli_login", { action: "start" });
101
+ export function cliLoginStartRequest(environment, clientProofHash) {
102
+ if (clientProofHash !== undefined && !CLIENT_PROOF_PATTERN.test(clientProofHash))
103
+ return null;
104
+ return buildRequest(environment, "cli_login", clientProofHash === undefined
105
+ ? { action: "start" }
106
+ : { action: "start", client_proof_hash: clientProofHash });
103
107
  }
104
108
  /** Shape of a device code this build will still poll with. */
105
109
  const DEVICE_CODE_PATTERN = /^[A-Za-z0-9_.-]{8,256}$/u;
110
+ const CLIENT_PROOF_PATTERN = /^[A-Za-z0-9_-]{43}$/u;
106
111
  /** The device flow's poll: ask whether somebody has approved the code yet. */
107
- export function cliLoginPollRequest(environment, deviceCode) {
108
- if (!DEVICE_CODE_PATTERN.test(deviceCode))
112
+ export function cliLoginPollRequest(environment, deviceCode, clientProof) {
113
+ if (!DEVICE_CODE_PATTERN.test(deviceCode) || (clientProof !== undefined && !CLIENT_PROOF_PATTERN.test(clientProof))) {
109
114
  return null;
110
- return buildRequest(environment, "cli_login", { action: "poll", device_code: deviceCode });
115
+ }
116
+ return buildRequest(environment, "cli_login", clientProof === undefined
117
+ ? { action: "poll", device_code: deviceCode }
118
+ : { action: "poll", device_code: deviceCode, client_proof: clientProof });
111
119
  }
112
120
  /** Shape of a refresh credential this build will still spend. */
113
121
  const REFRESH_CREDENTIAL_PATTERN = /^[\x21-\x7E]{16,4096}$/u;
@@ -122,6 +130,20 @@ export function grantRenewRequest(environment, refreshCredential) {
122
130
  }
123
131
  /** Shape of a bearer token this build will still send. */
124
132
  const BEARER_TOKEN_PATTERN = /^[\x21-\x7E]{16,32768}$/u;
133
+ /** Acknowledge delivery of an approved grant without sending a bearer header. */
134
+ export function cliLoginAckRequest(environment, deviceCode, token, clientProof) {
135
+ if (!DEVICE_CODE_PATTERN.test(deviceCode) ||
136
+ !BEARER_TOKEN_PATTERN.test(token) ||
137
+ !CLIENT_PROOF_PATTERN.test(clientProof)) {
138
+ return null;
139
+ }
140
+ return buildRequest(environment, "cli_login", {
141
+ action: "ack",
142
+ device_code: deviceCode,
143
+ token,
144
+ client_proof: clientProof
145
+ });
146
+ }
125
147
  /** Upload one sync envelope under the signed in account. */
126
148
  export function syncSnapshotsRequest(environment, token, envelope) {
127
149
  if (!BEARER_TOKEN_PATTERN.test(token))
@@ -136,9 +158,14 @@ export function syncSnapshotsRequest(environment, token, envelope) {
136
158
  * transport in the core package does it.
137
159
  */
138
160
  export function createFetchHubTransport(fetchImplementation = globalThis.fetch) {
139
- return async (request) => {
161
+ return async (request, signal) => {
140
162
  const controller = new AbortController();
141
163
  const timer = setTimeout(() => controller.abort(), HUB_TIMEOUT_MILLISECONDS);
164
+ const forwardAbort = () => controller.abort();
165
+ if (signal?.aborted)
166
+ controller.abort();
167
+ else
168
+ signal?.addEventListener("abort", forwardAbort, { once: true });
142
169
  try {
143
170
  const response = await fetchImplementation(request.url, {
144
171
  method: request.method,
@@ -147,20 +174,29 @@ export function createFetchHubTransport(fetchImplementation = globalThis.fetch)
147
174
  signal: controller.signal,
148
175
  body: request.body
149
176
  });
150
- const buffer = await response.arrayBuffer();
151
- if (buffer.byteLength > MAX_HUB_RESPONSE_BYTES) {
152
- return { status: response.status, body: "" };
177
+ const retryAfter = parseRetryAfterSeconds(response.headers.get("retry-after"));
178
+ const buffer = await readBoundedResponse(response, MAX_HUB_RESPONSE_BYTES, controller);
179
+ if (buffer === null) {
180
+ return { status: response.status, body: "", retryAfterSeconds: retryAfter };
153
181
  }
154
182
  return {
155
183
  status: response.status,
156
- body: new TextDecoder("utf-8", { fatal: false }).decode(buffer)
184
+ body: new TextDecoder("utf-8", { fatal: false }).decode(buffer),
185
+ retryAfterSeconds: retryAfter
157
186
  };
158
187
  }
159
188
  finally {
160
189
  clearTimeout(timer);
190
+ signal?.removeEventListener("abort", forwardAbort);
161
191
  }
162
192
  };
163
193
  }
194
+ function parseRetryAfterSeconds(value) {
195
+ if (value === null)
196
+ return null;
197
+ const seconds = Number(value.trim());
198
+ return Number.isFinite(seconds) && seconds >= 0 && seconds <= 86_400 ? seconds : null;
199
+ }
164
200
  /** Parse a hub response body as JSON, or hand back nothing readable. */
165
201
  export function parseHubJson(body) {
166
202
  if (body.length === 0 || body.length > MAX_HUB_RESPONSE_BYTES)
package/dist/hub.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hub.js","sourceRoot":"","sources":["../src/hub.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hub.js","sourceRoot":"","sources":["../src/hub.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../src/ingest.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAG3B,mDAAmD;AACnD,eAAO,MAAM,gBAAgB,SAAU,CAAC;AAExC,mEAAmE;AACnE,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAE9C;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,GAAE,MAAM,CAAC,UAA0B,EACzC,mBAAmB,SAA6B,GAC/C,OAAO,CAAC,MAAM,CAAC,CA0BjB;AAED,iEAAiE;AACjE,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C,MAAM,MAAM,QAAQ,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpE;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,GAAE,MAAM,CAAC,UAA0B,EACzC,SAAS,SAAmB,EAC5B,mBAAmB,SAA6B,EAChD,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA8CxB;AAED,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,CAS3D;AAED;;;;;;;;GAQG;AAEH,sEAAsE;AACtE,eAAO,MAAM,qBAAqB,EAAE,kBAGnC,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,iCAAiC,EAAE,kBAG/C,CAAC;AAEF,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,GACV,QAAQ,EAAE,GAAG,IAAI,CAiFnB;AAED,qEAAqE;AACrE,eAAO,MAAM,0BAA0B,EAAE,kBAGxC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,GACV,QAAQ,EAAE,GAAG,IAAI,CAEnB;AAED,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,EAAE,kBAG/B,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,iBAAiB,EAAE,kBAG/B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,EAAE,kBAGpC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,QAAQ,EAAE,EAC3B,UAAU,EAAE,kBAAkB,GAC7B,QAAQ,EAAE,CAEZ;AAMD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,OAAO,CAAC,OAAO,CAAC,CAMlB;AAED,uEAAuE;AACvE,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAMvF;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACzD,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAQ7C;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,SAAS,QAAQ,EAAE,EAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,CAAC,CAO3B"}
1
+ {"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../src/ingest.ts"],"names":[],"mappings":"AAMA,OAAO,EAKL,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EACb,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACxB,MAAM,mBAAmB,CAAC;AAG3B,mDAAmD;AACnD,eAAO,MAAM,gBAAgB,SAAU,CAAC;AAExC,mEAAmE;AACnE,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAE9C;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,GAAE,MAAM,CAAC,UAA0B,EACzC,mBAAmB,SAA6B,GAC/C,OAAO,CAAC,MAAM,CAAC,CAmCjB;AAED,iEAAiE;AACjE,eAAO,MAAM,sBAAsB,QAAS,CAAC;AAE7C,MAAM,MAAM,QAAQ,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,CAAC;AAEpE;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,GAAE,MAAM,CAAC,UAA0B,EACzC,SAAS,SAAmB,EAC5B,mBAAmB,SAA6B,EAChD,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CA+CxB;AAED,qDAAqD;AACrD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,QAAQ,CAS3D;AAED;;;;;;;;GAQG;AAEH,sEAAsE;AACtE,eAAO,MAAM,qBAAqB,EAAE,kBAGnC,CAAC;AAEF,0EAA0E;AAC1E,eAAO,MAAM,iCAAiC,EAAE,kBAG/C,CAAC;AAEF,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,GACV,QAAQ,EAAE,GAAG,IAAI,CAiEnB;AAED,qEAAqE;AACrE,eAAO,MAAM,0BAA0B,EAAE,kBAGxC,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,GACV,QAAQ,EAAE,GAAG,IAAI,CAEnB;AAED,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,EAAE,kBAG/B,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,iBAAiB,EAAE,kBAG/B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,EAAE,kBAGpC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,QAAQ,EAAE,EAC3B,UAAU,EAAE,kBAAkB,GAC7B,QAAQ,EAAE,CAEZ;AAMD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,OAAO,CAAC,OAAO,CAAC,CAMlB;AAED,uEAAuE;AACvE,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAMvF;AAED;;;;;;GAMG;AACH,wBAAsB,2BAA2B,CAC/C,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EACzD,SAAS,EAAE,MAAM,GAAG,SAAS,GAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAQ7C;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,SAAS,QAAQ,EAAE,EAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,CAAC,CAO3B"}
package/dist/ingest.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import path from "node:path";
2
2
  import { MANUAL_FILE_MARKER, MANUAL_FILE_NAME, parseGrokPayload } from "@openlimiter/connectors";
3
- import { mergeSnapshotCache, readJsonFileSafely, resolveStateDirectory } from "@openlimiter/core";
3
+ import { mergeSnapshotCache, antigravityMeter, readJsonFileSafely, resolveStateDirectory } from "@openlimiter/core";
4
4
  import { writeAgentContextSnapshot } from "@openlimiter/adapters";
5
5
  /** Largest document accepted on standard input. */
6
6
  export const STDIN_BYTE_LIMIT = 262_144;
@@ -18,6 +18,7 @@ export async function readStandardInputBuffer(stream = process.stdin, timeoutMil
18
18
  return Buffer.alloc(0);
19
19
  return await new Promise((resolve) => {
20
20
  const chunks = [];
21
+ let total = 0;
21
22
  let settled = false;
22
23
  const finish = () => {
23
24
  if (settled)
@@ -31,6 +32,14 @@ export async function readStandardInputBuffer(stream = process.stdin, timeoutMil
31
32
  resolve(Buffer.concat(chunks));
32
33
  };
33
34
  const onData = (chunk) => {
35
+ const length = typeof chunk === "string" ? Buffer.byteLength(chunk) : chunk.length;
36
+ if (length > STDIN_BYTE_LIMIT - total) {
37
+ chunks.length = 0;
38
+ finish();
39
+ stream.destroy();
40
+ return;
41
+ }
42
+ total += length;
34
43
  chunks.push(Buffer.from(chunk));
35
44
  };
36
45
  const onEnd = () => finish();
@@ -89,6 +98,7 @@ export async function readStandardInputText(stream = process.stdin, byteLimit =
89
98
  total += chunk.length;
90
99
  if (total > byteLimit) {
91
100
  finish(null);
101
+ stream.destroy();
92
102
  return;
93
103
  }
94
104
  chunks.push(chunk);
@@ -157,25 +167,10 @@ export function parseAntigravityStatuslinePayload(payload, now) {
157
167
  continue;
158
168
  const fraction = Math.max(0, Math.min(1, remaining));
159
169
  const value = Math.round(Math.max(0, Math.min(100, (1 - fraction) * 100)) * 10) / 10;
160
- let meterCode;
161
- let durationSeconds = 18_000;
162
- const idLower = bucketId.toLowerCase();
163
- if (idLower === "gemini-5h" || idLower === "3p-5h" || idLower.endsWith("-5h") || idLower.includes("5h")) {
164
- meterCode = "FIVE_HOUR";
165
- durationSeconds = 18_000;
166
- }
167
- else if (idLower === "gemini-weekly" ||
168
- idLower === "3p-weekly" ||
169
- idLower.endsWith("-weekly") ||
170
- idLower.includes("weekly") ||
171
- idLower.includes("7d")) {
172
- meterCode = "SEVEN_DAY";
173
- durationSeconds = 604_800;
174
- }
175
- else {
176
- // Drop unknown bucket IDs; do not fabricate fake meters
170
+ const mapped = antigravityMeter(bucketId.toLowerCase());
171
+ if (mapped === null)
177
172
  continue;
178
- }
173
+ const { meter: meterCode, durationSeconds } = mapped;
179
174
  const resetTime = typeof b["reset_time"] === "string"
180
175
  ? b["reset_time"]
181
176
  : typeof b["resetTime"] === "string"
@@ -185,8 +180,8 @@ export function parseAntigravityStatuslinePayload(payload, now) {
185
180
  ? b["reset_in_seconds"]
186
181
  : typeof b["resetInSeconds"] === "number"
187
182
  ? b["resetInSeconds"]
188
- : null;
189
- let resetAt = undefined;
183
+ : typeof b["resetsInSeconds"] === "number" ? b["resetsInSeconds"] : null;
184
+ let resetAt = null;
190
185
  if (resetTime && !Number.isNaN(Date.parse(resetTime))) {
191
186
  resetAt = new Date(resetTime).toISOString();
192
187
  }