@openlimiter/core 1.3.4 → 2.0.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 (73) hide show
  1. package/dist/acquire/cadence.d.ts +5 -3
  2. package/dist/acquire/cadence.d.ts.map +1 -1
  3. package/dist/acquire/cadence.js +14 -9
  4. package/dist/acquire/cadence.js.map +1 -1
  5. package/dist/acquire/coordination.d.ts.map +1 -1
  6. package/dist/acquire/coordination.js +3 -4
  7. package/dist/acquire/coordination.js.map +1 -1
  8. package/dist/acquire/credentials.d.ts +1 -1
  9. package/dist/acquire/credentials.d.ts.map +1 -1
  10. package/dist/acquire/credentials.js +8 -0
  11. package/dist/acquire/credentials.js.map +1 -1
  12. package/dist/acquire/cursor.d.ts +8 -0
  13. package/dist/acquire/cursor.d.ts.map +1 -0
  14. package/dist/acquire/cursor.js +60 -0
  15. package/dist/acquire/cursor.js.map +1 -0
  16. package/dist/acquire/identity.d.ts +1 -1
  17. package/dist/acquire/identity.js +1 -1
  18. package/dist/acquire/index.d.ts +1 -0
  19. package/dist/acquire/index.d.ts.map +1 -1
  20. package/dist/acquire/index.js +1 -0
  21. package/dist/acquire/index.js.map +1 -1
  22. package/dist/acquire/providers.d.ts +1 -0
  23. package/dist/acquire/providers.d.ts.map +1 -1
  24. package/dist/acquire/providers.js +10 -1
  25. package/dist/acquire/providers.js.map +1 -1
  26. package/dist/acquire/runner.d.ts +7 -14
  27. package/dist/acquire/runner.d.ts.map +1 -1
  28. package/dist/acquire/runner.js +144 -6
  29. package/dist/acquire/runner.js.map +1 -1
  30. package/dist/acquire/transport.d.ts +7 -1
  31. package/dist/acquire/transport.d.ts.map +1 -1
  32. package/dist/acquire/transport.js +30 -4
  33. package/dist/acquire/transport.js.map +1 -1
  34. package/dist/activity/contract.d.ts +108 -0
  35. package/dist/activity/contract.d.ts.map +1 -0
  36. package/dist/activity/contract.js +281 -0
  37. package/dist/activity/contract.js.map +1 -0
  38. package/dist/activity/spool.d.ts +20 -0
  39. package/dist/activity/spool.d.ts.map +1 -0
  40. package/dist/activity/spool.js +305 -0
  41. package/dist/activity/spool.js.map +1 -0
  42. package/dist/cache.d.ts +46 -1
  43. package/dist/cache.d.ts.map +1 -1
  44. package/dist/cache.js +117 -1
  45. package/dist/cache.js.map +1 -1
  46. package/dist/connection-state.d.ts +15 -0
  47. package/dist/connection-state.d.ts.map +1 -1
  48. package/dist/connection-state.js +18 -0
  49. package/dist/connection-state.js.map +1 -1
  50. package/dist/contracts/notify.d.ts +47 -0
  51. package/dist/contracts/notify.d.ts.map +1 -0
  52. package/dist/contracts/notify.js +83 -0
  53. package/dist/contracts/notify.js.map +1 -0
  54. package/dist/contracts/surfaces.d.ts +61 -0
  55. package/dist/contracts/surfaces.d.ts.map +1 -0
  56. package/dist/contracts/surfaces.js +73 -0
  57. package/dist/contracts/surfaces.js.map +1 -0
  58. package/dist/contracts/wire.d.ts +108 -0
  59. package/dist/contracts/wire.d.ts.map +1 -0
  60. package/dist/contracts/wire.js +202 -0
  61. package/dist/contracts/wire.js.map +1 -0
  62. package/dist/index.d.ts +4 -0
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +4 -0
  65. package/dist/index.js.map +1 -1
  66. package/dist/normalizer.d.ts.map +1 -1
  67. package/dist/normalizer.js +42 -7
  68. package/dist/normalizer.js.map +1 -1
  69. package/dist/types.d.ts +44 -10
  70. package/dist/types.d.ts.map +1 -1
  71. package/dist/types.js +7 -0
  72. package/dist/types.js.map +1 -1
  73. package/package.json +16 -1
@@ -0,0 +1,61 @@
1
+ import { type ProviderCode, type SnapshotKind, type SnapshotPrecision } from "../types.js";
2
+ import { type SnapshotAvailability } from "../connection-state.js";
3
+ export declare const USAGE_BAND_THRESHOLDS: {
4
+ readonly yellow: 60;
5
+ readonly orange: 80;
6
+ readonly red: 90;
7
+ };
8
+ export type SurfaceBand = "green" | "yellow" | "orange" | "red" | "stale";
9
+ export interface SessionsSummary {
10
+ busy: number;
11
+ waiting: number;
12
+ done: number;
13
+ idle: number;
14
+ unknown: number;
15
+ }
16
+ /** Meter identity, meaning and reset travel as one object on every surface. */
17
+ export interface SurfaceAccountRow {
18
+ provider: ProviderCode;
19
+ account: string | null;
20
+ headlineMeterId: string;
21
+ kind: SnapshotKind | "unknown";
22
+ value: number | null;
23
+ meaning: "used" | "remaining";
24
+ windowLabel: string;
25
+ resetAt: string | null;
26
+ freshness: "fresh" | "stale" | "unknown";
27
+ availability: "available" | SnapshotAvailability;
28
+ band: SurfaceBand;
29
+ precision: SnapshotPrecision | "unknown";
30
+ /** null only for exact reported precision. */
31
+ fidelityMarker: "estimated" | "manual" | "unknown" | null;
32
+ sessions: SessionsSummary;
33
+ }
34
+ export type TrayAccountViewModel = SurfaceAccountRow;
35
+ export type RailAccountViewModel = SurfaceAccountRow;
36
+ /** Percent bands always describe consumption, even when the row shows remaining. */
37
+ export declare function usageBand(usedPercent: number, freshness?: SurfaceAccountRow["freshness"]): SurfaceBand;
38
+ export declare function isSurfaceAccountRow(value: unknown): value is SurfaceAccountRow;
39
+ export type TraySummary = {
40
+ state: "numeric";
41
+ /** Highest fresh quota consumption; ties preserve the caller's account order. */
42
+ selected: SurfaceAccountRow;
43
+ value: number;
44
+ meaning: "used";
45
+ band: Exclude<SurfaceBand, "stale">;
46
+ partial: boolean;
47
+ includedRows: number;
48
+ excludedRows: number;
49
+ } | {
50
+ state: "unknown";
51
+ selected: null;
52
+ value: null;
53
+ meaning: "used";
54
+ band: "stale";
55
+ partial: boolean;
56
+ includedRows: 0;
57
+ excludedRows: number;
58
+ };
59
+ /** Select one comparable quota, never sum or average unrelated provider balances. */
60
+ export declare function traySummary(rows: readonly SurfaceAccountRow[]): TraySummary;
61
+ //# sourceMappingURL=surfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surfaces.d.ts","sourceRoot":"","sources":["../../src/contracts/surfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkC,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC3H,OAAO,EAA2B,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG5F,eAAO,MAAM,qBAAqB;;;;CAA+C,CAAC;AAClF,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;AAC1E,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,YAAY,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,YAAY,GAAG,SAAS,CAAC;IAC/B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,WAAW,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;IACzC,YAAY,EAAE,WAAW,GAAG,oBAAoB,CAAC;IACjD,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACzC,8CAA8C;IAC9C,cAAc,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1D,QAAQ,EAAE,eAAe,CAAC;CAC3B;AACD,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AACrD,MAAM,MAAM,oBAAoB,GAAG,iBAAiB,CAAC;AAErD,oFAAoF;AACpF,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,iBAAiB,CAAC,WAAW,CAAW,GAAG,WAAW,CAI/G;AAQD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAsB9E;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,SAAS,CAAC;IACjB,iFAAiF;IACjF,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG;IACF,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,EAAE,IAAI,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,CAAC,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,qFAAqF;AACrF,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,iBAAiB,EAAE,GAAG,WAAW,CAgB3E"}
@@ -0,0 +1,73 @@
1
+ import { PROVIDER_CODES, SNAPSHOT_KINDS } from "../types.js";
2
+ import { SNAPSHOT_AVAILABILITIES } from "../connection-state.js";
3
+ import { MAX_LIVE_ACTIVITY_SESSIONS, hasOnlyContractKeys, isContractInstant, isContractObject } from "../activity/contract.js";
4
+ export const USAGE_BAND_THRESHOLDS = { yellow: 60, orange: 80, red: 90 };
5
+ /** Percent bands always describe consumption, even when the row shows remaining. */
6
+ export function usageBand(usedPercent, freshness = "fresh") {
7
+ if (freshness !== "fresh" || !Number.isFinite(usedPercent) || usedPercent < 0 || usedPercent > 100)
8
+ return "stale";
9
+ return usedPercent >= USAGE_BAND_THRESHOLDS.red ? "red" : usedPercent >= USAGE_BAND_THRESHOLDS.orange ? "orange" :
10
+ usedPercent >= USAGE_BAND_THRESHOLDS.yellow ? "yellow" : "green";
11
+ }
12
+ function usedPercent(row) {
13
+ if (row.kind !== "quota_percent" || row.availability !== "available" || row.freshness !== "fresh" ||
14
+ row.value === null || !Number.isFinite(row.value) || row.value < 0 || row.value > 100)
15
+ return null;
16
+ return row.meaning === "remaining" ? 100 - row.value : row.value;
17
+ }
18
+ const shortText = (value) => typeof value === "string" && value["length"] > 0 &&
19
+ value["length"] <= 256 && !/[\u0000-\u001f\u007f]/u.test(value);
20
+ export function isSurfaceAccountRow(value) {
21
+ if (!isContractObject(value) || !hasOnlyContractKeys(value, ["provider", "account", "headlineMeterId", "kind", "value", "meaning",
22
+ "windowLabel", "resetAt", "freshness", "availability", "band", "precision", "fidelityMarker", "sessions"]) ||
23
+ !PROVIDER_CODES.includes(value["provider"]) || !(value["account"] === null || shortText(value["account"])) ||
24
+ !shortText(value["headlineMeterId"]) || !shortText(value["windowLabel"]) ||
25
+ !(value["resetAt"] === null || isContractInstant(value["resetAt"])) ||
26
+ ![...SNAPSHOT_KINDS, "unknown"].includes(value["kind"]) ||
27
+ !["used", "remaining"].includes(value["meaning"]) || !["fresh", "stale", "unknown"].includes(value["freshness"]) ||
28
+ !["available", ...SNAPSHOT_AVAILABILITIES].includes(value["availability"]) ||
29
+ !["exact", "estimated", "manual", "unknown"].includes(value["precision"]))
30
+ return false;
31
+ if (value["value"] !== null && (typeof value["value"] !== "number" || !Number.isFinite(value["value"]) || value["value"] < 0))
32
+ return false;
33
+ if (value["availability"] !== "available" && value["value"] !== null)
34
+ return false;
35
+ if (value["kind"] === "quota_percent" && typeof value["value"] === "number" && value["value"] > 100)
36
+ return false;
37
+ if (value["fidelityMarker"] !== (value["precision"] === "exact" ? null : value["precision"]))
38
+ return false;
39
+ const sessions = value["sessions"];
40
+ const keys = ["busy", "waiting", "done", "idle", "unknown"];
41
+ if (!isContractObject(sessions) || !hasOnlyContractKeys(sessions, keys) ||
42
+ !keys.every((key) => Number.isSafeInteger(sessions[key]) && sessions[key] >= 0) ||
43
+ keys.reduce((total, key) => total + sessions[key], 0) > MAX_LIVE_ACTIVITY_SESSIONS)
44
+ return false;
45
+ const row = value;
46
+ const used = usedPercent(row);
47
+ return row.band === (used === null ? "stale" : usageBand(used));
48
+ }
49
+ /** Select one comparable quota, never sum or average unrelated provider balances. */
50
+ export function traySummary(rows) {
51
+ let selected = null;
52
+ let maximum = -1;
53
+ let includedRows = 0;
54
+ for (const row of rows) {
55
+ if (!isSurfaceAccountRow(row))
56
+ continue;
57
+ const used = usedPercent(row);
58
+ if (used === null)
59
+ continue;
60
+ includedRows++;
61
+ if (used > maximum) {
62
+ selected = row;
63
+ maximum = used;
64
+ }
65
+ }
66
+ const excludedRows = rows.length - includedRows;
67
+ const partial = includedRows > 0 && excludedRows > 0;
68
+ if (selected === null)
69
+ return { state: "unknown", selected: null, value: null, meaning: "used", band: "stale", partial, includedRows: 0, excludedRows };
70
+ return { state: "numeric", selected, value: maximum, meaning: "used", band: usageBand(maximum),
71
+ partial, includedRows, excludedRows };
72
+ }
73
+ //# sourceMappingURL=surfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surfaces.js","sourceRoot":"","sources":["../../src/contracts/surfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { type ConnectorVerification, type Snapshot, type SnapshotAvailability, type SnapshotCurrency, type SnapshotKind, type SnapshotPrecision, type SnapshotSource, type VerificationEvidence } from "../types.js";
2
+ export declare const WIRE_SCHEMA_VERSION_V3: 3;
3
+ export interface WireVerificationEvidence {
4
+ readonly provider_version: string;
5
+ readonly account_shape: string;
6
+ readonly os: string;
7
+ readonly date: string;
8
+ }
9
+ /** The v2 allowlist, plus seven optional v3 metadata fields. */
10
+ export interface WireSampleV3 {
11
+ readonly account_id: string;
12
+ readonly provider: string;
13
+ readonly window_id: string;
14
+ readonly observed_at: string;
15
+ readonly stale: boolean;
16
+ readonly meter?: string;
17
+ readonly code?: string;
18
+ readonly usage_percent?: number | null;
19
+ readonly percent?: number | null;
20
+ readonly reset_at?: string | null;
21
+ readonly resets_at?: string | null;
22
+ readonly amount?: number | null;
23
+ readonly currency?: SnapshotCurrency | null;
24
+ readonly source_period?: readonly [string, string];
25
+ readonly source?: SnapshotSource;
26
+ readonly precision?: SnapshotPrecision;
27
+ readonly verification?: ConnectorVerification;
28
+ readonly verification_evidence?: WireVerificationEvidence;
29
+ readonly kind?: SnapshotKind;
30
+ readonly availability?: SnapshotAvailability;
31
+ readonly retry_at?: string;
32
+ }
33
+ export interface WireForecastInput {
34
+ readonly first_observed_at: string;
35
+ readonly last_observed_at: string;
36
+ readonly sample_count: number;
37
+ readonly burn_usd_per_day: number;
38
+ }
39
+ /** API spend remains the v2 shape. */
40
+ export interface WireApiSpendSample {
41
+ readonly source_id: string;
42
+ readonly account_id: string;
43
+ readonly provider: string;
44
+ readonly key_label: string;
45
+ readonly month: string;
46
+ readonly spend_usd: number;
47
+ readonly budget_usd: number | null;
48
+ readonly source_period: readonly [string, string];
49
+ readonly currency_source: string;
50
+ readonly raw_unit_scale: number;
51
+ readonly forecast_date: string | null;
52
+ readonly forecast_input: WireForecastInput | null;
53
+ readonly period_complete: boolean;
54
+ }
55
+ export interface WireEnvelopeV3 {
56
+ readonly event_id: string;
57
+ readonly device_id: string;
58
+ readonly previous_sequence: number;
59
+ readonly sequence: number;
60
+ readonly observed_at: string;
61
+ readonly client_version: string;
62
+ readonly schema_version: typeof WIRE_SCHEMA_VERSION_V3;
63
+ readonly usage_samples: readonly WireSampleV3[];
64
+ readonly api_spend_samples: readonly WireApiSpendSample[];
65
+ }
66
+ declare const LOCAL_KEYS: {
67
+ readonly account_id: "accountId";
68
+ readonly provider: "provider";
69
+ readonly window_id: "windowId";
70
+ readonly observed_at: "observedAt";
71
+ readonly stale: "stale";
72
+ readonly meter: "meter";
73
+ readonly code: "code";
74
+ readonly usage_percent: "usagePercent";
75
+ readonly percent: "percent";
76
+ readonly reset_at: "resetAt";
77
+ readonly resets_at: "resetsAt";
78
+ readonly amount: "amount";
79
+ readonly currency: "currency";
80
+ readonly source_period: "sourcePeriod";
81
+ readonly source: "source";
82
+ readonly precision: "precision";
83
+ readonly verification: "verification";
84
+ readonly verification_evidence: "verificationEvidence";
85
+ readonly kind: "kind";
86
+ readonly availability: "availability";
87
+ readonly retry_at: "retryAt";
88
+ };
89
+ /**
90
+ * A lossless camelCase projection, not a fabricated Snapshot. The wire does
91
+ * not carry expiresAt, window duration, or the other connector labels.
92
+ */
93
+ export type LocalWireSample = {
94
+ readonly [K in keyof WireSampleV3 as (typeof LOCAL_KEYS)[K]]: K extends "verification_evidence" ? VerificationEvidence : WireSampleV3[K];
95
+ };
96
+ /** No version lives on a sample. The containing envelope declares 2 or 3. */
97
+ export declare function readWireSample(value: unknown): LocalWireSample;
98
+ /**
99
+ * Snapshot inputs use the established unnamed account and meter window rules.
100
+ * staleness is evaluated at conversion time (or an explicit test clock).
101
+ * LocalWireSample inputs preserve the received wire projection exactly.
102
+ */
103
+ export declare function toWireSampleV3(snapshot: Snapshot, now?: string): WireSampleV3;
104
+ export declare function toWireSampleV3(snapshot: LocalWireSample): WireSampleV3;
105
+ /** Negotiation is opt in. Existing emitters continue to send v2. */
106
+ export declare function chooseWireVersion(serverAccepted: readonly number[]): 2 | 3;
107
+ export {};
108
+ //# sourceMappingURL=wire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/contracts/wire.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,202 @@
1
+ import { CONNECTOR_VERIFICATIONS, SNAPSHOT_KINDS } from "../types.js";
2
+ export const WIRE_SCHEMA_VERSION_V3 = 3;
3
+ const LOCAL_KEYS = {
4
+ account_id: "accountId", provider: "provider", window_id: "windowId",
5
+ observed_at: "observedAt", stale: "stale", meter: "meter", code: "code",
6
+ usage_percent: "usagePercent", percent: "percent", reset_at: "resetAt",
7
+ resets_at: "resetsAt", amount: "amount", currency: "currency",
8
+ source_period: "sourcePeriod", source: "source", precision: "precision",
9
+ verification: "verification", verification_evidence: "verificationEvidence",
10
+ kind: "kind", availability: "availability", retry_at: "retryAt"
11
+ };
12
+ const SOURCES = ["native_payload", "documented_api", "internal_payload", "authenticated_page", "manual_entry"];
13
+ const PRECISIONS = ["exact", "estimated", "manual"];
14
+ const CURRENCIES = ["USD", "CNY"];
15
+ const AVAILABILITIES = {
16
+ network_failure: true, missing_credentials: true, expired_credentials: true,
17
+ access_denied: true, missing_subscription: true, unlimited: true,
18
+ quota_unavailable: true, rate_limited: true, schema_drift: true
19
+ };
20
+ const WIRE_AVAILABILITIES = Object.keys(AVAILABILITIES);
21
+ function fail(field, reason) {
22
+ throw new TypeError(`Invalid wire sample: ${field} ${reason}`);
23
+ }
24
+ function record(value, field) {
25
+ if (typeof value !== "object" || value === null || Array.isArray(value)) {
26
+ fail(field, "must be an object");
27
+ }
28
+ return value;
29
+ }
30
+ function closed(row, keys, field) {
31
+ for (const key of Object.keys(row)) {
32
+ if (!keys.includes(key))
33
+ fail(`${field}.${key}`, "is an unknown key");
34
+ if (row[key] === undefined)
35
+ fail(`${field}.${key}`, "must not be undefined; omit it instead");
36
+ }
37
+ }
38
+ function instant(value, field) {
39
+ if (typeof value !== "string" || !Number.isFinite(Date.parse(value)) ||
40
+ new Date(value).toISOString() !== value)
41
+ fail(field, "must be a canonical ISO instant");
42
+ }
43
+ function numeric(value, field, max, exclusive = false) {
44
+ if (typeof value !== "number" || !Number.isFinite(value) || value < 0 ||
45
+ (exclusive ? value >= max : value > max))
46
+ fail(field, `must be a finite number from 0 to ${max}${exclusive ? " (exclusive)" : ""}`);
47
+ }
48
+ function member(value, values, field) {
49
+ if (typeof value !== "string" || !values.includes(value))
50
+ fail(field, `must be one of ${values.join(", ")}`);
51
+ }
52
+ function validateSample(value) {
53
+ const row = record(value, "sample");
54
+ closed(row, Object.keys(LOCAL_KEYS), "sample");
55
+ for (const key of ["account_id", "provider", "window_id"]) {
56
+ if (typeof row[key] !== "string" || row[key].length === 0)
57
+ fail(key, "must be a nonempty string");
58
+ }
59
+ if (!/^[a-z0-9][a-z0-9-]{0,63}$/u.test(row["account_id"]))
60
+ fail("account_id", "must be a valid account alias");
61
+ instant(row["observed_at"], "observed_at");
62
+ if (typeof row["stale"] !== "boolean")
63
+ fail("stale", "must be a boolean");
64
+ for (const key of ["meter", "code"]) {
65
+ if (row[key] !== undefined && (typeof row[key] !== "string" || row[key].length === 0))
66
+ fail(key, "must be a nonempty string");
67
+ }
68
+ if (row["meter"] === undefined && row["code"] === undefined)
69
+ fail("meter/code", "requires a meter identifier");
70
+ for (const [left, right] of [["meter", "code"], ["usage_percent", "percent"], ["reset_at", "resets_at"]]) {
71
+ if (row[left] !== undefined && row[right] !== undefined && row[left] !== row[right])
72
+ fail(`${left}/${right}`, "aliases must agree");
73
+ }
74
+ for (const key of ["reset_at", "resets_at"]) {
75
+ if (row[key] !== undefined && row[key] !== null)
76
+ instant(row[key], key);
77
+ }
78
+ for (const key of ["usage_percent", "percent"]) {
79
+ if (row[key] !== undefined && row[key] !== null)
80
+ numeric(row[key], key, 100_000);
81
+ }
82
+ if (row["amount"] !== undefined && row["amount"] !== null)
83
+ numeric(row["amount"], "amount", 1e14, true);
84
+ if (row["currency"] !== undefined && row["currency"] !== null)
85
+ member(row["currency"], CURRENCIES, "currency");
86
+ if ((row["amount"] != null) !== (row["currency"] != null))
87
+ fail("amount/currency", "must be supplied together");
88
+ if (row["source_period"] !== undefined) {
89
+ const period = row["source_period"];
90
+ if (!Array.isArray(period) || period.length !== 2)
91
+ fail("source_period", "must contain two ISO instants");
92
+ instant(period[0], "source_period[0]");
93
+ instant(period[1], "source_period[1]");
94
+ if (Date.parse(period[0]) > Date.parse(period[1]))
95
+ fail("source_period", "must be ordered");
96
+ }
97
+ for (const [key, values] of [
98
+ ["source", SOURCES], ["precision", PRECISIONS],
99
+ ["verification", CONNECTOR_VERIFICATIONS], ["kind", SNAPSHOT_KINDS],
100
+ ["availability", WIRE_AVAILABILITIES]
101
+ ]) {
102
+ if (row[key] !== undefined)
103
+ member(row[key], values, key);
104
+ }
105
+ if (row["verification_evidence"] !== undefined) {
106
+ if (row["verification"] !== "VERIFIED_LIVE")
107
+ fail("verification_evidence", "requires VERIFIED_LIVE");
108
+ const evidence = record(row["verification_evidence"], "verification_evidence");
109
+ closed(evidence, ["provider_version", "account_shape", "os", "date"], "verification_evidence");
110
+ for (const key of ["provider_version", "account_shape", "os"]) {
111
+ if (typeof evidence[key] !== "string")
112
+ fail(`verification_evidence.${key}`, "must be a string");
113
+ }
114
+ instant(evidence["date"], "verification_evidence.date");
115
+ }
116
+ if (row["availability"] !== undefined && (typeof row["usage_percent"] === "number" || typeof row["percent"] === "number")) {
117
+ fail("availability", "cannot accompany a numeric percent");
118
+ }
119
+ if (row["availability"] === undefined && row["usage_percent"] == null && row["percent"] == null && row["amount"] == null) {
120
+ fail("sample", "requires a numeric percent, an amount, or availability");
121
+ }
122
+ if (row["retry_at"] !== undefined) {
123
+ if (row["availability"] !== "rate_limited")
124
+ fail("retry_at", "requires rate_limited availability");
125
+ instant(row["retry_at"], "retry_at");
126
+ }
127
+ return row;
128
+ }
129
+ /** No version lives on a sample. The containing envelope declares 2 or 3. */
130
+ export function readWireSample(value) {
131
+ const wire = validateSample(value);
132
+ const local = {};
133
+ for (const key of Object.keys(wire)) {
134
+ local[LOCAL_KEYS[key]] = wire[key];
135
+ }
136
+ if (wire.verification_evidence !== undefined) {
137
+ const evidence = wire.verification_evidence;
138
+ local["verificationEvidence"] = {
139
+ providerVersion: evidence.provider_version, accountShape: evidence.account_shape,
140
+ os: evidence.os, date: evidence.date
141
+ };
142
+ }
143
+ return local;
144
+ }
145
+ export function toWireSampleV3(snapshot, now = new Date().toISOString()) {
146
+ let wire;
147
+ if ("value" in snapshot) {
148
+ instant(snapshot.expiresAt, "expiresAt");
149
+ instant(now, "now");
150
+ if (snapshot.unit !== "PERCENT" && snapshot.availability === undefined && snapshot.usedAmount === undefined) {
151
+ fail("unit", "has no v2 usage representation; use an explicit amount projection");
152
+ }
153
+ wire = {
154
+ account_id: snapshot.accountId ?? "default", provider: snapshot.provider,
155
+ meter: snapshot.meter, window_id: snapshot.meter,
156
+ observed_at: snapshot.observedAt, reset_at: snapshot.resetAt,
157
+ stale: Date.parse(snapshot.expiresAt) <= Date.parse(now),
158
+ source: snapshot.source, precision: snapshot.precision,
159
+ verification: snapshot.labels.verification
160
+ };
161
+ if (snapshot.availability === undefined && snapshot.unit === "PERCENT")
162
+ wire["usage_percent"] = snapshot.value;
163
+ if (snapshot.usedAmount !== undefined)
164
+ wire["amount"] = snapshot.usedAmount;
165
+ if (snapshot.currency !== undefined)
166
+ wire["currency"] = snapshot.currency;
167
+ if (snapshot.kind !== undefined)
168
+ wire["kind"] = snapshot.kind;
169
+ if (snapshot.availability !== undefined)
170
+ wire["availability"] = snapshot.availability;
171
+ if (snapshot.retryAt !== undefined)
172
+ wire["retry_at"] = snapshot.retryAt;
173
+ if (snapshot.labels.verificationEvidence !== undefined) {
174
+ const evidence = snapshot.labels.verificationEvidence;
175
+ wire["verification_evidence"] = {
176
+ provider_version: evidence.providerVersion, account_shape: evidence.accountShape,
177
+ os: evidence.os, date: evidence.date
178
+ };
179
+ }
180
+ }
181
+ else {
182
+ wire = {};
183
+ for (const key of Object.keys(LOCAL_KEYS)) {
184
+ const value = snapshot[LOCAL_KEYS[key]];
185
+ if (value !== undefined)
186
+ wire[key] = value;
187
+ }
188
+ if (snapshot.verificationEvidence !== undefined) {
189
+ const evidence = snapshot.verificationEvidence;
190
+ wire["verification_evidence"] = {
191
+ provider_version: evidence.providerVersion, account_shape: evidence.accountShape,
192
+ os: evidence.os, date: evidence.date
193
+ };
194
+ }
195
+ }
196
+ return validateSample(wire);
197
+ }
198
+ /** Negotiation is opt in. Existing emitters continue to send v2. */
199
+ export function chooseWireVersion(serverAccepted) {
200
+ return serverAccepted.includes(WIRE_SCHEMA_VERSION_V3) ? WIRE_SCHEMA_VERSION_V3 : 2;
201
+ }
202
+ //# sourceMappingURL=wire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.js","sourceRoot":"","sources":["../../src/contracts/wire.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -13,4 +13,8 @@ export * from "./normalizer.js";
13
13
  export * from "./policy.js";
14
14
  export * from "./schedule.js";
15
15
  export * from "./types.js";
16
+ export * from "./contracts/wire.js";
17
+ export * from "./activity/contract.js";
18
+ export * from "./contracts/notify.js";
19
+ export * from "./contracts/surfaces.js";
16
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC"}
package/dist/index.js CHANGED
@@ -13,4 +13,8 @@ export * from "./normalizer.js";
13
13
  export * from "./policy.js";
14
14
  export * from "./schedule.js";
15
15
  export * from "./types.js";
16
+ export * from "./contracts/wire.js";
17
+ export * from "./activity/contract.js";
18
+ export * from "./contracts/notify.js";
19
+ export * from "./contracts/surfaces.js";
16
20
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"normalizer.d.ts","sourceRoot":"","sources":["../src/normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,QAAQ,EAWd,MAAM,YAAY,CAAC;AAmHpB,kDAAkD;AAClD,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAmD1C,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAgD7D;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAK1E;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,sEAAsE;IACtE,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAClC,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,SAAS,QAAQ,EAAE,GAC7B,eAAe,CAgBjB;AAUD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD"}
1
+ {"version":3,"file":"normalizer.d.ts","sourceRoot":"","sources":["../src/normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,QAAQ,EAad,MAAM,YAAY,CAAC;AA6IpB,kDAAkD;AAClD,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAmD1C,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CA0D7D;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAK1E;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,sEAAsE;IACtE,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAClC,oEAAoE;IACpE,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,SAAS,QAAQ,EAAE,GAC7B,eAAe,CAgBjB;AAUD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD"}
@@ -1,4 +1,5 @@
1
- import { ACCOUNT_ID_PATTERN, MAX_SNAPSHOT_AMOUNT, PROVIDER_CODES, SNAPSHOT_OBSERVED_VIA, SNAPSHOT_SOURCE_KINDS, SNAPSHOT_WRITERS, UNKNOWN_PROVENANCE } from "./types.js";
1
+ import { ACCOUNT_ID_PATTERN, CONNECTOR_VERIFICATIONS, MAX_SNAPSHOT_AMOUNT, PROVIDER_CODES, SNAPSHOT_KINDS, SNAPSHOT_OBSERVED_VIA, SNAPSHOT_SOURCE_KINDS, SNAPSHOT_WRITERS, UNKNOWN_PROVENANCE } from "./types.js";
2
+ import { SNAPSHOT_AVAILABILITIES } from "./connection-state.js";
2
3
  const units = new Set(["PERCENT", "CREDITS", "TOKENS", "REQUESTS"]);
3
4
  const sources = new Set([
4
5
  "native_payload",
@@ -8,7 +9,10 @@ const sources = new Set([
8
9
  "manual_entry"
9
10
  ]);
10
11
  const precisions = new Set(["exact", "estimated", "manual"]);
11
- const currencies = new Set(["USD"]);
12
+ const currencies = new Set(["USD", "CNY"]);
13
+ const verifications = new Set(CONNECTOR_VERIFICATIONS);
14
+ const kinds = new Set(SNAPSHOT_KINDS);
15
+ const availabilities = new Set(SNAPSHOT_AVAILABILITIES);
12
16
  const providerCodes = new Set(PROVIDER_CODES);
13
17
  const sourceKinds = new Set(SNAPSHOT_SOURCE_KINDS);
14
18
  const observedVia = new Set(SNAPSHOT_OBSERVED_VIA);
@@ -43,7 +47,17 @@ function normalizeWindow(value) {
43
47
  return { kind, durationSeconds: duration };
44
48
  }
45
49
  function normalizeLabels(value) {
46
- if (!isRecord(value) || value["verification"] !== "UNVERIFIED")
50
+ if (!isRecord(value))
51
+ return null;
52
+ const verification = value["verification"];
53
+ if (typeof verification !== "string" || !verifications.has(verification))
54
+ return null;
55
+ const evidence = value["verificationEvidence"];
56
+ if (evidence !== undefined && (verification !== "VERIFIED_LIVE" || !isRecord(evidence) ||
57
+ typeof evidence["providerVersion"] !== "string" || !evidence["providerVersion"].trim() ||
58
+ typeof evidence["accountShape"] !== "string" || !evidence["accountShape"].trim() ||
59
+ typeof evidence["os"] !== "string" || !evidence["os"].trim() ||
60
+ !isIsoInstant(evidence["date"])))
47
61
  return null;
48
62
  const credentialOrigin = value["credentialOrigin"];
49
63
  const dataInterfaceStatus = value["dataInterfaceStatus"];
@@ -61,11 +75,23 @@ function normalizeLabels(value) {
61
75
  return null;
62
76
  if (automationRisk !== "low" && automationRisk !== "high")
63
77
  return null;
64
- return {
78
+ const base = {
65
79
  credentialOrigin,
66
80
  dataInterfaceStatus,
67
- automationRisk,
68
- verification: "UNVERIFIED"
81
+ automationRisk
82
+ };
83
+ if (verification === "UNVERIFIED" || verification === "VERIFIED_FIXTURES") {
84
+ return { ...base, verification };
85
+ }
86
+ return {
87
+ ...base,
88
+ verification,
89
+ ...(evidence === undefined ? {} : { verificationEvidence: {
90
+ providerVersion: evidence["providerVersion"],
91
+ accountShape: evidence["accountShape"],
92
+ os: evidence["os"],
93
+ date: evidence["date"]
94
+ } })
69
95
  };
70
96
  }
71
97
  /**
@@ -168,6 +194,12 @@ function readWriter(value) {
168
194
  return value;
169
195
  }
170
196
  export function normalizeMeter(raw) {
197
+ if (raw.kind !== undefined && (typeof raw.kind !== "string" || !kinds.has(raw.kind)))
198
+ return null;
199
+ if (raw.availability !== undefined && (typeof raw.availability !== "string" || !availabilities.has(raw.availability)))
200
+ return null;
201
+ if (raw.retryAt !== undefined && (raw.availability !== "rate_limited" || !isIsoInstant(raw.retryAt)))
202
+ return null;
171
203
  if (typeof raw.provider !== "string" || !providerCodes.has(raw.provider))
172
204
  return null;
173
205
  if (typeof raw.meter !== "string" || !safeMeter.test(raw.meter))
@@ -222,7 +254,10 @@ export function normalizeMeter(raw) {
222
254
  ? {}
223
255
  : { accountLabel }),
224
256
  ...(provenance === null ? {} : { provenance }),
225
- ...(writer === null ? {} : { writer })
257
+ ...(writer === null ? {} : { writer }),
258
+ ...(raw.kind === undefined ? {} : { kind: raw.kind }),
259
+ ...(raw.availability === undefined ? {} : { availability: raw.availability }),
260
+ ...(raw.retryAt === undefined ? {} : { retryAt: raw.retryAt })
226
261
  };
227
262
  }
228
263
  export function normalizeMeters(rawMeters) {