usage-sdk-test 0.1.0 → 0.1.1

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 (96) hide show
  1. package/README.md +2 -1
  2. package/dist/errors.d.ts +20 -0
  3. package/dist/errors.d.ts.map +1 -0
  4. package/dist/errors.js +35 -0
  5. package/dist/errors.js.map +1 -0
  6. package/dist/index.d.ts +5 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +24 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/persistence/MemoryPersistenceProvider.d.ts +4 -0
  11. package/dist/persistence/MemoryPersistenceProvider.js +19 -0
  12. package/dist/persistence/MemoryPersistenceProvider.js.map +1 -0
  13. package/dist/persistence/PersistenceProvider.d.ts +22 -0
  14. package/dist/persistence/PersistenceProvider.js +3 -0
  15. package/dist/persistence/PersistenceProvider.js.map +1 -0
  16. package/dist/pricing/matchRule.d.ts +2 -0
  17. package/dist/pricing/matchRule.d.ts.map +1 -0
  18. package/dist/pricing/matchRule.js +47 -0
  19. package/dist/pricing/matchRule.js.map +1 -0
  20. package/dist/pricing/quote.d.ts +2 -0
  21. package/dist/pricing/quote.d.ts.map +1 -0
  22. package/dist/pricing/quote.js +35 -0
  23. package/dist/pricing/quote.js.map +1 -0
  24. package/dist/providers/memory/MemoryLedgerStore.d.ts +16 -0
  25. package/dist/providers/memory/MemoryLedgerStore.d.ts.map +1 -0
  26. package/dist/providers/memory/MemoryLedgerStore.js +80 -0
  27. package/dist/providers/memory/MemoryLedgerStore.js.map +1 -0
  28. package/dist/providers/memory/MemoryLimitStore.d.ts +24 -0
  29. package/dist/providers/memory/MemoryLimitStore.d.ts.map +1 -0
  30. package/dist/providers/memory/MemoryLimitStore.js +88 -0
  31. package/dist/providers/memory/MemoryLimitStore.js.map +1 -0
  32. package/dist/providers/memory/MemoryPlanStore.d.ts +7 -0
  33. package/dist/providers/memory/MemoryPlanStore.d.ts.map +1 -0
  34. package/dist/providers/memory/MemoryPlanStore.js +15 -0
  35. package/dist/providers/memory/MemoryPlanStore.js.map +1 -0
  36. package/dist/providers/memory/MemoryUsageStore.d.ts +11 -0
  37. package/dist/providers/memory/MemoryUsageStore.d.ts.map +1 -0
  38. package/dist/providers/memory/MemoryUsageStore.js +16 -0
  39. package/dist/providers/memory/MemoryUsageStore.js.map +1 -0
  40. package/dist/sdk/UsageSdk.d.ts +40 -0
  41. package/dist/sdk/UsageSdk.d.ts.map +1 -0
  42. package/dist/sdk/UsageSdk.js +156 -0
  43. package/dist/sdk/UsageSdk.js.map +1 -0
  44. package/dist/sdk/createUsageSdk.d.ts +41 -0
  45. package/dist/sdk/createUsageSdk.d.ts.map +1 -0
  46. package/dist/sdk/createUsageSdk.js +24 -0
  47. package/dist/sdk/createUsageSdk.js.map +1 -0
  48. package/dist/stores/LedgerStore.d.ts +29 -0
  49. package/dist/stores/LedgerStore.d.ts.map +1 -0
  50. package/dist/stores/LedgerStore.js +3 -0
  51. package/dist/stores/LedgerStore.js.map +1 -0
  52. package/dist/stores/LimitStore.d.ts +20 -0
  53. package/dist/stores/LimitStore.d.ts.map +1 -0
  54. package/dist/stores/LimitStore.js +3 -0
  55. package/dist/stores/LimitStore.js.map +1 -0
  56. package/dist/stores/PlanStore.d.ts +4 -0
  57. package/dist/stores/PlanStore.d.ts.map +1 -0
  58. package/dist/stores/PlanStore.js +3 -0
  59. package/dist/stores/PlanStore.js.map +1 -0
  60. package/dist/stores/UsageStore.d.ts +9 -0
  61. package/dist/stores/UsageStore.d.ts.map +1 -0
  62. package/dist/stores/UsageStore.js +3 -0
  63. package/dist/stores/UsageStore.js.map +1 -0
  64. package/dist/types.d.ts +115 -0
  65. package/dist/types.d.ts.map +1 -0
  66. package/dist/types.js +3 -0
  67. package/dist/types.js.map +1 -0
  68. package/dist/utils/fingerprint.d.ts +2 -0
  69. package/dist/utils/fingerprint.d.ts.map +1 -0
  70. package/dist/utils/fingerprint.js +20 -0
  71. package/dist/utils/fingerprint.js.map +1 -0
  72. package/dist/utils/guards.d.ts +5 -0
  73. package/dist/utils/guards.d.ts.map +1 -0
  74. package/dist/utils/guards.js +32 -0
  75. package/dist/utils/guards.js.map +1 -0
  76. package/package.json +9 -9
  77. package/examples/basic.ts +0 -35
  78. package/src/errors.ts +0 -19
  79. package/src/index.ts +0 -3
  80. package/src/pricing/matchRule.ts +0 -36
  81. package/src/pricing/quote.ts +0 -38
  82. package/src/providers/memory/MemoryLedgerStore.ts +0 -90
  83. package/src/providers/memory/MemoryLimitStore.ts +0 -102
  84. package/src/providers/memory/MemoryPlanStore.ts +0 -14
  85. package/src/providers/memory/MemoryUsageStore.ts +0 -10
  86. package/src/sdk/UsageSdk.ts +0 -117
  87. package/src/sdk/createUsageSdk.ts +0 -38
  88. package/src/stores/LedgerStore.ts +0 -30
  89. package/src/stores/LimitStore.ts +0 -5
  90. package/src/stores/PlanStore.ts +0 -5
  91. package/src/stores/UsageStore.ts +0 -5
  92. package/src/types.ts +0 -116
  93. package/src/utils/fingerprint.ts +0 -14
  94. package/src/utils/guards.ts +0 -23
  95. package/tsconfig.build.json +0 -14
  96. package/tsconfig.json +0 -13
package/src/types.ts DELETED
@@ -1,116 +0,0 @@
1
- export type Currency = "CNY" | (string & {});
2
-
3
- export type Money = {
4
- currency: Currency;
5
- /**
6
- * Minor units (e.g. CNY=分). Integer only.
7
- */
8
- amountMinor: number;
9
- };
10
-
11
- export type UsageEvent = {
12
- meter: string;
13
- quantity: number;
14
- dimensions?: Record<string, string>;
15
- ts?: number;
16
- };
17
-
18
- export type PriceRule = {
19
- /**
20
- * A logical meter name, e.g. "tokens.input", "tokens.output", "requests".
21
- */
22
- meter: string;
23
- /**
24
- * Dimension matchers. v0 supports:
25
- * - "*" wildcard
26
- * - string equality
27
- * - string[] membership
28
- */
29
- when?: Record<string, "*" | string | string[]>;
30
- /**
31
- * Price per unit in minor units (e.g. 分). Integer only.
32
- */
33
- unitPriceMinor: number;
34
- currency: Currency;
35
- priority?: number;
36
- ruleId?: string;
37
- };
38
-
39
- export type PricePlan = {
40
- planId: string;
41
- rules: PriceRule[];
42
- };
43
-
44
- export type Limits = {
45
- /**
46
- * Requests per minute. v0: each `enforce()` call consumes 1 request by default.
47
- */
48
- rpm?: number;
49
- /**
50
- * Daily spending limit in minor units.
51
- */
52
- dailyLimitMinor?: number;
53
- /**
54
- * Monthly spending limit in minor units.
55
- */
56
- monthlyLimitMinor?: number;
57
- };
58
-
59
- export type QuoteInput = {
60
- accountId: string;
61
- planId: string;
62
- events: UsageEvent[];
63
- };
64
-
65
- export type QuoteItem = {
66
- event: UsageEvent;
67
- costMinor: number;
68
- ruleId?: string;
69
- };
70
-
71
- export type Quote = {
72
- total: Money;
73
- items: QuoteItem[];
74
- };
75
-
76
- export type EnforceInput = QuoteInput & {
77
- idempotencyKey: string;
78
- limits?: Limits;
79
- /**
80
- * Overrides RPM consumption for this call. Defaults to 1.
81
- */
82
- requestCount?: number;
83
- nowMs?: number;
84
- metadata?: Record<string, unknown>;
85
- };
86
-
87
- export type EnforceErrorCode =
88
- | "INSUFFICIENT_BALANCE"
89
- | "RPM_LIMIT_EXCEEDED"
90
- | "DAILY_LIMIT_EXCEEDED"
91
- | "MONTHLY_LIMIT_EXCEEDED"
92
- | "NO_PRICE_RULE"
93
- | "CURRENCY_MISMATCH"
94
- | "IDEMPOTENCY_CONFLICT"
95
- | "INVALID_ARGUMENT";
96
-
97
- export type EnforceResult =
98
- | { ok: true; txId: string; cost: Money; balanceAfter: Money }
99
- | {
100
- ok: false;
101
- code: EnforceErrorCode;
102
- message?: string;
103
- retryAfterMs?: number;
104
- };
105
-
106
- export type UsageRecord = {
107
- accountId: string;
108
- planId: string;
109
- idempotencyKey: string;
110
- txId: string;
111
- cost: Money;
112
- events: UsageEvent[];
113
- tsMs: number;
114
- metadata?: Record<string, unknown>;
115
- };
116
-
@@ -1,14 +0,0 @@
1
- const stableStringifyValue = (value: unknown): unknown => {
2
- if (Array.isArray(value)) return value.map(stableStringifyValue);
3
- if (!value || typeof value !== "object") return value;
4
- const record = value as Record<string, unknown>;
5
- const keys = Object.keys(record).sort();
6
- const out: Record<string, unknown> = {};
7
- for (const key of keys) out[key] = stableStringifyValue(record[key]);
8
- return out;
9
- };
10
-
11
- export const stableStringify = (value: unknown) => JSON.stringify(stableStringifyValue(value));
12
-
13
- export const makeFingerprint = (value: unknown) => stableStringify(value);
14
-
@@ -1,23 +0,0 @@
1
- import { UsageError } from "../errors.ts";
2
- import type { Money, UsageEvent } from "../types.ts";
3
-
4
- export const assertInteger = (value: number, field: string) => {
5
- if (!Number.isInteger(value)) throw new UsageError("INVALID_ARGUMENT", `${field} must be an integer`);
6
- };
7
-
8
- export const assertNonNegativeInteger = (value: number, field: string) => {
9
- assertInteger(value, field);
10
- if (value < 0) throw new UsageError("INVALID_ARGUMENT", `${field} must be >= 0`);
11
- };
12
-
13
- export const assertMoney = (money: Money, field: string) => {
14
- if (!money || typeof money !== "object") throw new UsageError("INVALID_ARGUMENT", `${field} is required`);
15
- if (!money.currency) throw new UsageError("INVALID_ARGUMENT", `${field}.currency is required`);
16
- assertNonNegativeInteger(money.amountMinor, `${field}.amountMinor`);
17
- };
18
-
19
- export const assertUsageEvent = (event: UsageEvent, field: string) => {
20
- if (!event || typeof event !== "object") throw new UsageError("INVALID_ARGUMENT", `${field} is required`);
21
- if (!event.meter) throw new UsageError("INVALID_ARGUMENT", `${field}.meter is required`);
22
- assertNonNegativeInteger(event.quantity, `${field}.quantity`);
23
- };
@@ -1,14 +0,0 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "compilerOptions": {
4
- "noEmit": false,
5
- "outDir": "dist",
6
- "rootDir": "src",
7
- "declaration": true,
8
- "declarationMap": true,
9
- "sourceMap": true,
10
- "rewriteRelativeImportExtensions": true
11
- },
12
- "include": ["src/**/*"]
13
- }
14
-
package/tsconfig.json DELETED
@@ -1,13 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "ES2022",
5
- "moduleResolution": "bundler",
6
- "allowImportingTsExtensions": true,
7
- "strict": true,
8
- "skipLibCheck": true,
9
- "noEmit": true,
10
- "forceConsistentCasingInFileNames": true
11
- },
12
- "include": ["src/**/*"]
13
- }