open-agentpay 0.1.0 → 0.2.5

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 (133) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +125 -4
  3. package/dist/client/client.d.ts +37 -0
  4. package/dist/client/client.d.ts.map +1 -0
  5. package/dist/client/client.js +90 -0
  6. package/dist/client/client.js.map +1 -0
  7. package/dist/client/errors.d.ts +23 -0
  8. package/dist/client/errors.d.ts.map +1 -0
  9. package/dist/client/errors.js +38 -0
  10. package/dist/client/errors.js.map +1 -0
  11. package/dist/client/index.d.ts +6 -0
  12. package/dist/client/index.d.ts.map +1 -0
  13. package/dist/client/index.js +6 -0
  14. package/dist/client/index.js.map +1 -0
  15. package/dist/client/interfaces.d.ts +34 -0
  16. package/dist/client/interfaces.d.ts.map +1 -0
  17. package/dist/client/interfaces.js +5 -0
  18. package/dist/client/interfaces.js.map +1 -0
  19. package/dist/client/signer.d.ts +136 -0
  20. package/dist/client/signer.d.ts.map +1 -0
  21. package/dist/client/signer.js +300 -0
  22. package/dist/client/signer.js.map +1 -0
  23. package/dist/client/transport.d.ts +44 -0
  24. package/dist/client/transport.d.ts.map +1 -0
  25. package/dist/client/transport.js +389 -0
  26. package/dist/client/transport.js.map +1 -0
  27. package/dist/core/codecs.d.ts +35 -0
  28. package/dist/core/codecs.d.ts.map +1 -0
  29. package/dist/core/codecs.js +177 -0
  30. package/dist/core/codecs.js.map +1 -0
  31. package/dist/core/errors.d.ts +33 -0
  32. package/dist/core/errors.d.ts.map +1 -0
  33. package/dist/core/errors.js +48 -0
  34. package/dist/core/errors.js.map +1 -0
  35. package/dist/core/index.d.ts +6 -0
  36. package/dist/core/index.d.ts.map +1 -0
  37. package/dist/core/index.js +6 -0
  38. package/dist/core/index.js.map +1 -0
  39. package/dist/core/interop.d.ts +10 -0
  40. package/dist/core/interop.d.ts.map +1 -0
  41. package/dist/core/interop.js +28 -0
  42. package/dist/core/interop.js.map +1 -0
  43. package/dist/core/models.d.ts +155 -0
  44. package/dist/core/models.d.ts.map +1 -0
  45. package/dist/core/models.js +463 -0
  46. package/dist/core/models.js.map +1 -0
  47. package/dist/core/state.d.ts +82 -0
  48. package/dist/core/state.d.ts.map +1 -0
  49. package/dist/core/state.js +87 -0
  50. package/dist/core/state.js.map +1 -0
  51. package/dist/evm/constants.d.ts +52 -0
  52. package/dist/evm/constants.d.ts.map +1 -0
  53. package/dist/evm/constants.js +72 -0
  54. package/dist/evm/constants.js.map +1 -0
  55. package/dist/evm/eip3009.d.ts +43 -0
  56. package/dist/evm/eip3009.d.ts.map +1 -0
  57. package/dist/evm/eip3009.js +145 -0
  58. package/dist/evm/eip3009.js.map +1 -0
  59. package/dist/evm/index.d.ts +3 -0
  60. package/dist/evm/index.d.ts.map +1 -0
  61. package/dist/evm/index.js +3 -0
  62. package/dist/evm/index.js.map +1 -0
  63. package/dist/index.d.ts +12 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +12 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/integrations/index.d.ts +4 -0
  68. package/dist/integrations/index.d.ts.map +1 -0
  69. package/dist/integrations/index.js +4 -0
  70. package/dist/integrations/index.js.map +1 -0
  71. package/dist/integrations/langchain.d.ts +40 -0
  72. package/dist/integrations/langchain.d.ts.map +1 -0
  73. package/dist/integrations/langchain.js +68 -0
  74. package/dist/integrations/langchain.js.map +1 -0
  75. package/dist/integrations/mcp.d.ts +29 -0
  76. package/dist/integrations/mcp.d.ts.map +1 -0
  77. package/dist/integrations/mcp.js +73 -0
  78. package/dist/integrations/mcp.js.map +1 -0
  79. package/dist/integrations/vercel-ai.d.ts +31 -0
  80. package/dist/integrations/vercel-ai.d.ts.map +1 -0
  81. package/dist/integrations/vercel-ai.js +50 -0
  82. package/dist/integrations/vercel-ai.js.map +1 -0
  83. package/dist/policy/db.d.ts +14 -0
  84. package/dist/policy/db.d.ts.map +1 -0
  85. package/dist/policy/db.js +86 -0
  86. package/dist/policy/db.js.map +1 -0
  87. package/dist/policy/errors.d.ts +31 -0
  88. package/dist/policy/errors.d.ts.map +1 -0
  89. package/dist/policy/errors.js +48 -0
  90. package/dist/policy/errors.js.map +1 -0
  91. package/dist/policy/evaluator.d.ts +22 -0
  92. package/dist/policy/evaluator.d.ts.map +1 -0
  93. package/dist/policy/evaluator.js +152 -0
  94. package/dist/policy/evaluator.js.map +1 -0
  95. package/dist/policy/index.d.ts +7 -0
  96. package/dist/policy/index.d.ts.map +1 -0
  97. package/dist/policy/index.js +7 -0
  98. package/dist/policy/index.js.map +1 -0
  99. package/dist/policy/interfaces.d.ts +59 -0
  100. package/dist/policy/interfaces.d.ts.map +1 -0
  101. package/dist/policy/interfaces.js +7 -0
  102. package/dist/policy/interfaces.js.map +1 -0
  103. package/dist/policy/models.d.ts +161 -0
  104. package/dist/policy/models.d.ts.map +1 -0
  105. package/dist/policy/models.js +449 -0
  106. package/dist/policy/models.js.map +1 -0
  107. package/dist/policy/sqlite-engine.d.ts +28 -0
  108. package/dist/policy/sqlite-engine.d.ts.map +1 -0
  109. package/dist/policy/sqlite-engine.js +501 -0
  110. package/dist/policy/sqlite-engine.js.map +1 -0
  111. package/dist/state/buyer-coordinator.d.ts +33 -0
  112. package/dist/state/buyer-coordinator.d.ts.map +1 -0
  113. package/dist/state/buyer-coordinator.js +363 -0
  114. package/dist/state/buyer-coordinator.js.map +1 -0
  115. package/dist/state/errors.d.ts +45 -0
  116. package/dist/state/errors.d.ts.map +1 -0
  117. package/dist/state/errors.js +88 -0
  118. package/dist/state/errors.js.map +1 -0
  119. package/dist/state/guards.d.ts +24 -0
  120. package/dist/state/guards.d.ts.map +1 -0
  121. package/dist/state/guards.js +211 -0
  122. package/dist/state/guards.js.map +1 -0
  123. package/dist/state/index.d.ts +5 -0
  124. package/dist/state/index.d.ts.map +1 -0
  125. package/dist/state/index.js +5 -0
  126. package/dist/state/index.js.map +1 -0
  127. package/dist/state/reconciliation.d.ts +105 -0
  128. package/dist/state/reconciliation.d.ts.map +1 -0
  129. package/dist/state/reconciliation.js +297 -0
  130. package/dist/state/reconciliation.js.map +1 -0
  131. package/package.json +98 -12
  132. package/index.d.ts +0 -2
  133. package/index.js +0 -8
@@ -0,0 +1,449 @@
1
+ /**
2
+ * Policy engine data models for AgentPay.
3
+ *
4
+ * All models are frozen value objects.
5
+ * Amounts are strictly bigint base units; floats and booleans are rejected.
6
+ * EVM addresses are auto-normalised to lowercase.
7
+ * CAIP-2 network identifiers are validated on construction.
8
+ */
9
+ import { SQLITE_MAX_INT } from '../core/models.js';
10
+ export { SQLITE_MAX_INT };
11
+ const CAIP2_RE = /^[-a-z0-9]{3,8}:[-_a-zA-Z0-9]{1,32}$/;
12
+ const EVM_ADDRESS_RE = /^0x[0-9a-fA-F]{40}$/;
13
+ const AGENTPAY_ROUTE_RE = /^agentpay:route:[A-Za-z0-9_-]+$/;
14
+ const AGENTPAY_INTERNAL_NETWORK = 'agentpay:internal-ledger';
15
+ const WALLET_FIAT_CURRENCIES = new Set(['CNY', 'USD', 'EUR']);
16
+ export function normalizeDomainHost(value) {
17
+ let v = value.trim().toLowerCase();
18
+ if (v.includes('://')) {
19
+ v = v.split('://')[1];
20
+ }
21
+ v = v.split('/')[0].split('?')[0].split('#')[0];
22
+ if (v.includes(':')) {
23
+ v = v.split(':')[0];
24
+ }
25
+ return v.replace(/\.+$/, '');
26
+ }
27
+ export function validatePositiveBigInt(value, fieldName) {
28
+ if (typeof value === 'boolean') {
29
+ throw new TypeError(`${fieldName} must be an integer, got boolean`);
30
+ }
31
+ let big;
32
+ if (typeof value === 'bigint') {
33
+ big = value;
34
+ }
35
+ else if (typeof value === 'number') {
36
+ if (!Number.isInteger(value) || !Number.isSafeInteger(value)) {
37
+ throw new TypeError(`${fieldName} must be an integer, got ${value}`);
38
+ }
39
+ big = BigInt(value);
40
+ }
41
+ else if (typeof value === 'string') {
42
+ const trimmed = value.trim();
43
+ if (!/^\d+$/.test(trimmed)) {
44
+ throw new TypeError(`${fieldName} must be a positive integer string, got ${JSON.stringify(value)}`);
45
+ }
46
+ big = BigInt(trimmed);
47
+ }
48
+ else {
49
+ throw new TypeError(`${fieldName} must be bigint, number, or string, got ${typeof value}`);
50
+ }
51
+ if (big <= 0n) {
52
+ throw new RangeError(`${fieldName} must be > 0, got ${big.toString()}`);
53
+ }
54
+ if (big > SQLITE_MAX_INT) {
55
+ throw new RangeError(`${fieldName} exceeds SQLite max signed 64-bit integer (${SQLITE_MAX_INT.toString()})`);
56
+ }
57
+ return big;
58
+ }
59
+ export var BreakerState;
60
+ (function (BreakerState) {
61
+ BreakerState["CLOSED"] = "CLOSED";
62
+ BreakerState["OPEN"] = "OPEN";
63
+ BreakerState["HALF_OPEN"] = "HALF_OPEN";
64
+ })(BreakerState || (BreakerState = {}));
65
+ export var WhitelistMode;
66
+ (function (WhitelistMode) {
67
+ WhitelistMode["STRICT"] = "strict";
68
+ WhitelistMode["SIMPLE"] = "simple";
69
+ })(WhitelistMode || (WhitelistMode = {}));
70
+ export var LedgerEntryState;
71
+ (function (LedgerEntryState) {
72
+ LedgerEntryState["RESERVED"] = "RESERVED";
73
+ LedgerEntryState["COMMITTED"] = "COMMITTED";
74
+ LedgerEntryState["RELEASED"] = "RELEASED";
75
+ })(LedgerEntryState || (LedgerEntryState = {}));
76
+ export class ReservationToken {
77
+ reservationId;
78
+ intentId;
79
+ policyId;
80
+ amount;
81
+ expiresAt;
82
+ createdAt;
83
+ get reservation_id() {
84
+ return this.reservationId;
85
+ }
86
+ get intent_id() {
87
+ return this.intentId;
88
+ }
89
+ get policy_id() {
90
+ return this.policyId;
91
+ }
92
+ get expires_at() {
93
+ return this.expiresAt;
94
+ }
95
+ get created_at() {
96
+ return this.createdAt;
97
+ }
98
+ constructor(input) {
99
+ const resId = input.reservationId ?? input.reservation_id;
100
+ if (!resId || typeof resId !== 'string') {
101
+ throw new TypeError('reservationId must be a non-empty string');
102
+ }
103
+ const intentId = input.intentId ?? input.intent_id;
104
+ if (!intentId || typeof intentId !== 'string') {
105
+ throw new TypeError('intentId must be a non-empty string');
106
+ }
107
+ const policyId = input.policyId ?? input.policy_id ?? 'default';
108
+ if (typeof policyId !== 'string') {
109
+ throw new TypeError('policyId must be a string');
110
+ }
111
+ const amountBig = validatePositiveBigInt(input.amount, 'amount');
112
+ const expiresAt = input.expiresAt ?? input.expires_at ?? 0;
113
+ const createdAt = input.createdAt ?? input.created_at ?? Math.floor(Date.now() / 1000);
114
+ this.reservationId = resId;
115
+ this.intentId = intentId;
116
+ this.policyId = policyId;
117
+ this.amount = amountBig;
118
+ this.expiresAt = expiresAt;
119
+ this.createdAt = createdAt;
120
+ Object.freeze(this);
121
+ }
122
+ toJSON() {
123
+ return {
124
+ reservationId: this.reservationId,
125
+ intentId: this.intentId,
126
+ policyId: this.policyId,
127
+ amount: this.amount.toString(),
128
+ expiresAt: this.expiresAt,
129
+ createdAt: this.createdAt,
130
+ };
131
+ }
132
+ }
133
+ export class PaymentRequest {
134
+ intentId;
135
+ amount;
136
+ payee;
137
+ asset;
138
+ network;
139
+ domain;
140
+ ttlSeconds;
141
+ get intent_id() {
142
+ return this.intentId;
143
+ }
144
+ get ttl_seconds() {
145
+ return this.ttlSeconds;
146
+ }
147
+ get isAgentpayWallet() {
148
+ return this.network === AGENTPAY_INTERNAL_NETWORK;
149
+ }
150
+ get is_agentpay_wallet() {
151
+ return this.isAgentpayWallet;
152
+ }
153
+ constructor(input) {
154
+ const intentId = input.intentId ?? input.intent_id;
155
+ if (!intentId || typeof intentId !== 'string' || !intentId.trim()) {
156
+ throw new TypeError('intentId must be a non-empty string');
157
+ }
158
+ const amountBig = validatePositiveBigInt(input.amount, 'amount');
159
+ if (typeof input.payee !== 'string' || !input.payee.trim()) {
160
+ throw new TypeError('payee must be a non-empty string');
161
+ }
162
+ const payeeClean = input.payee.trim();
163
+ let normPayee;
164
+ if (AGENTPAY_ROUTE_RE.test(payeeClean)) {
165
+ normPayee = payeeClean;
166
+ }
167
+ else if (EVM_ADDRESS_RE.test(payeeClean)) {
168
+ normPayee = payeeClean.toLowerCase();
169
+ }
170
+ else {
171
+ throw new TypeError(`Invalid payee address: ${input.payee}`);
172
+ }
173
+ if (typeof input.asset !== 'string' || !input.asset.trim()) {
174
+ throw new TypeError('asset must be a non-empty string');
175
+ }
176
+ const assetClean = input.asset.trim();
177
+ let normAsset;
178
+ if (WALLET_FIAT_CURRENCIES.has(assetClean.toUpperCase())) {
179
+ normAsset = assetClean.toUpperCase();
180
+ }
181
+ else if (EVM_ADDRESS_RE.test(assetClean)) {
182
+ normAsset = assetClean.toLowerCase();
183
+ }
184
+ else {
185
+ throw new TypeError(`Invalid asset: ${input.asset}`);
186
+ }
187
+ if (typeof input.network !== 'string' || !input.network.trim()) {
188
+ throw new TypeError('network must be a non-empty string');
189
+ }
190
+ const netClean = input.network.trim();
191
+ if (netClean !== AGENTPAY_INTERNAL_NETWORK && !CAIP2_RE.test(netClean)) {
192
+ throw new TypeError(`Invalid network identifier: ${input.network}`);
193
+ }
194
+ const isWallet = netClean === AGENTPAY_INTERNAL_NETWORK;
195
+ const isWalletPayee = AGENTPAY_ROUTE_RE.test(normPayee);
196
+ const isWalletAsset = WALLET_FIAT_CURRENCIES.has(normAsset);
197
+ if ((isWallet || isWalletPayee || isWalletAsset) && !(isWallet && isWalletPayee && isWalletAsset)) {
198
+ throw new TypeError('AgentPay wallet requests require internal-ledger, supported fiat (CNY/USD/EUR), and agentpay:route payee');
199
+ }
200
+ const domain = input.domain ? normalizeDomainHost(input.domain) : null;
201
+ const rawTtl = input.ttlSeconds ?? input.ttl_seconds ?? 360;
202
+ if (typeof rawTtl !== 'number' || !Number.isInteger(rawTtl) || rawTtl <= 0 || rawTtl > 86400) {
203
+ throw new TypeError(`ttlSeconds must be an integer between 1 and 86400, got ${rawTtl}`);
204
+ }
205
+ this.intentId = intentId.trim();
206
+ this.amount = amountBig;
207
+ this.payee = normPayee;
208
+ this.asset = normAsset;
209
+ this.network = netClean;
210
+ this.domain = domain;
211
+ this.ttlSeconds = rawTtl;
212
+ Object.freeze(this);
213
+ }
214
+ }
215
+ export class PolicyConfig {
216
+ id;
217
+ name;
218
+ walletAddress;
219
+ maxPerTxBaseUnits;
220
+ rollingBudget24hBaseUnits;
221
+ lifetimeBudgetBaseUnits;
222
+ whitelistMode;
223
+ whitelistPayees;
224
+ whitelistAssets;
225
+ whitelistNetworks;
226
+ whitelistDomains;
227
+ circuitMaxRpm;
228
+ circuitConsecutiveFailures;
229
+ circuitCooldownSeconds;
230
+ breakerState;
231
+ trippedAt;
232
+ isFrozen;
233
+ createdAt;
234
+ updatedAt;
235
+ get wallet_address() {
236
+ return this.walletAddress;
237
+ }
238
+ get max_per_tx_base_units() {
239
+ return this.maxPerTxBaseUnits;
240
+ }
241
+ get rolling_budget_24h_base_units() {
242
+ return this.rollingBudget24hBaseUnits;
243
+ }
244
+ get lifetime_budget_base_units() {
245
+ return this.lifetimeBudgetBaseUnits;
246
+ }
247
+ get whitelist_mode() {
248
+ return this.whitelistMode;
249
+ }
250
+ get circuit_max_rpm() {
251
+ return this.circuitMaxRpm;
252
+ }
253
+ get circuit_consecutive_failures() {
254
+ return this.circuitConsecutiveFailures;
255
+ }
256
+ get circuit_cooldown_seconds() {
257
+ return this.circuitCooldownSeconds;
258
+ }
259
+ get breaker_state() {
260
+ return this.breakerState;
261
+ }
262
+ get tripped_at() {
263
+ return this.trippedAt;
264
+ }
265
+ get is_frozen() {
266
+ return this.isFrozen;
267
+ }
268
+ get created_at() {
269
+ return this.createdAt;
270
+ }
271
+ get updated_at() {
272
+ return this.updatedAt;
273
+ }
274
+ constructor(input) {
275
+ if (!input.id || typeof input.id !== 'string') {
276
+ throw new TypeError('id must be a non-empty string');
277
+ }
278
+ this.id = input.id;
279
+ this.name = input.name || input.id;
280
+ const rawAddr = input.walletAddress ?? input.wallet_address;
281
+ if (!rawAddr || typeof rawAddr !== 'string' || !EVM_ADDRESS_RE.test(rawAddr)) {
282
+ throw new TypeError(`walletAddress must be a valid EVM address, got ${rawAddr}`);
283
+ }
284
+ this.walletAddress = rawAddr.toLowerCase();
285
+ const rawMaxPerTx = input.maxPerTxBaseUnits ?? input.max_per_tx_base_units;
286
+ if (rawMaxPerTx === undefined || rawMaxPerTx === null) {
287
+ throw new TypeError('maxPerTxBaseUnits is required');
288
+ }
289
+ this.maxPerTxBaseUnits = validatePositiveBigInt(rawMaxPerTx, 'maxPerTxBaseUnits');
290
+ const rawRolling = input.rollingBudget24hBaseUnits ?? input.rolling_budget_24h_base_units;
291
+ if (rawRolling === undefined || rawRolling === null) {
292
+ throw new TypeError('rollingBudget24hBaseUnits is required');
293
+ }
294
+ this.rollingBudget24hBaseUnits = validatePositiveBigInt(rawRolling, 'rollingBudget24hBaseUnits');
295
+ const rawLifetime = input.lifetimeBudgetBaseUnits ?? input.lifetime_budget_base_units;
296
+ this.lifetimeBudgetBaseUnits =
297
+ rawLifetime !== undefined && rawLifetime !== null
298
+ ? validatePositiveBigInt(rawLifetime, 'lifetimeBudgetBaseUnits')
299
+ : null;
300
+ const rawMode = input.whitelistMode ?? input.whitelist_mode ?? WhitelistMode.SIMPLE;
301
+ this.whitelistMode = rawMode === WhitelistMode.STRICT || rawMode === 'strict' ? WhitelistMode.STRICT : WhitelistMode.SIMPLE;
302
+ const payees = input.whitelistPayees ?? input.whitelist_payees ?? [];
303
+ const normPayees = new Set();
304
+ for (const p of payees) {
305
+ if (typeof p !== 'string')
306
+ throw new TypeError('whitelist payees must be strings');
307
+ if (AGENTPAY_ROUTE_RE.test(p)) {
308
+ normPayees.add(p);
309
+ }
310
+ else if (EVM_ADDRESS_RE.test(p)) {
311
+ normPayees.add(p.toLowerCase());
312
+ }
313
+ else {
314
+ throw new TypeError(`Invalid payee in whitelist: ${p}`);
315
+ }
316
+ }
317
+ this.whitelistPayees = Object.freeze(normPayees);
318
+ const assets = input.whitelistAssets ?? input.whitelist_assets ?? [];
319
+ const normAssets = new Set();
320
+ for (const a of assets) {
321
+ if (typeof a !== 'string')
322
+ throw new TypeError('whitelist assets must be strings');
323
+ if (WALLET_FIAT_CURRENCIES.has(a.toUpperCase())) {
324
+ normAssets.add(a.toUpperCase());
325
+ }
326
+ else if (EVM_ADDRESS_RE.test(a)) {
327
+ normAssets.add(a.toLowerCase());
328
+ }
329
+ else {
330
+ throw new TypeError(`Invalid asset in whitelist: ${a}`);
331
+ }
332
+ }
333
+ this.whitelistAssets = Object.freeze(normAssets);
334
+ const networks = input.whitelistNetworks ?? input.whitelist_networks ?? [];
335
+ const normNetworks = new Set();
336
+ for (const n of networks) {
337
+ if (typeof n !== 'string' || (n !== AGENTPAY_INTERNAL_NETWORK && !CAIP2_RE.test(n))) {
338
+ throw new TypeError(`Invalid network in whitelist: ${n}`);
339
+ }
340
+ normNetworks.add(n);
341
+ }
342
+ this.whitelistNetworks = Object.freeze(normNetworks);
343
+ const domains = input.whitelistDomains ?? input.whitelist_domains ?? [];
344
+ const normDomains = new Set();
345
+ for (const d of domains) {
346
+ if (typeof d !== 'string')
347
+ throw new TypeError('whitelist domains must be strings');
348
+ normDomains.add(normalizeDomainHost(d));
349
+ }
350
+ this.whitelistDomains = Object.freeze(normDomains);
351
+ this.circuitMaxRpm = input.circuitMaxRpm ?? input.circuit_max_rpm ?? 15;
352
+ this.circuitConsecutiveFailures = input.circuitConsecutiveFailures ?? input.circuit_consecutive_failures ?? 5;
353
+ this.circuitCooldownSeconds = input.circuitCooldownSeconds ?? input.circuit_cooldown_seconds ?? 300;
354
+ const rawBreaker = input.breakerState ?? input.breaker_state ?? BreakerState.CLOSED;
355
+ this.breakerState =
356
+ rawBreaker === BreakerState.OPEN || rawBreaker === 'OPEN'
357
+ ? BreakerState.OPEN
358
+ : rawBreaker === BreakerState.HALF_OPEN || rawBreaker === 'HALF_OPEN'
359
+ ? BreakerState.HALF_OPEN
360
+ : BreakerState.CLOSED;
361
+ this.trippedAt = input.trippedAt ?? input.tripped_at ?? null;
362
+ const rawFrozen = input.isFrozen ?? input.is_frozen ?? false;
363
+ this.isFrozen = rawFrozen === true || rawFrozen === 1;
364
+ const now = Math.floor(Date.now() / 1000);
365
+ this.createdAt = input.createdAt ?? input.created_at ?? now;
366
+ this.updatedAt = input.updatedAt ?? input.updated_at ?? now;
367
+ Object.freeze(this);
368
+ }
369
+ }
370
+ export function loadPolicyConfig(data) {
371
+ const norm = {};
372
+ if ('policyId' in data)
373
+ norm.id = data.policyId;
374
+ else if ('id' in data)
375
+ norm.id = data.id;
376
+ if ('name' in data)
377
+ norm.name = data.name;
378
+ if ('walletAddress' in data)
379
+ norm.walletAddress = data.walletAddress;
380
+ else if ('wallet_address' in data)
381
+ norm.walletAddress = data.wallet_address;
382
+ if ('max_per_tx_base_units' in data)
383
+ norm.maxPerTxBaseUnits = data.max_per_tx_base_units;
384
+ else if ('maxPerTxBaseUnits' in data)
385
+ norm.maxPerTxBaseUnits = data.maxPerTxBaseUnits;
386
+ if ('rolling_budget_24h_base_units' in data)
387
+ norm.rollingBudget24hBaseUnits = data.rolling_budget_24h_base_units;
388
+ else if ('rollingBudget24hBaseUnits' in data)
389
+ norm.rollingBudget24hBaseUnits = data.rollingBudget24hBaseUnits;
390
+ if ('lifetime_budget_base_units' in data)
391
+ norm.lifetimeBudgetBaseUnits = data.lifetime_budget_base_units;
392
+ else if ('lifetimeBudgetBaseUnits' in data)
393
+ norm.lifetimeBudgetBaseUnits = data.lifetimeBudgetBaseUnits;
394
+ if ('whitelistMode' in data)
395
+ norm.whitelistMode = data.whitelistMode;
396
+ else if ('whitelist_mode' in data)
397
+ norm.whitelistMode = data.whitelist_mode;
398
+ if ('whitelist' in data && typeof data.whitelist === 'object' && data.whitelist !== null) {
399
+ const wl = data.whitelist;
400
+ if ('mode' in wl && !norm.whitelistMode)
401
+ norm.whitelistMode = wl.mode;
402
+ norm.whitelistPayees = wl.payees ?? [];
403
+ norm.whitelistAssets = wl.assets ?? [];
404
+ norm.whitelistNetworks = wl.networks ?? [];
405
+ norm.whitelistDomains = wl.domains ?? [];
406
+ }
407
+ else {
408
+ if ('whitelist_payees' in data)
409
+ norm.whitelistPayees = data.whitelist_payees;
410
+ else if ('whitelistPayees' in data)
411
+ norm.whitelistPayees = data.whitelistPayees;
412
+ if ('whitelist_assets' in data)
413
+ norm.whitelistAssets = data.whitelist_assets;
414
+ else if ('whitelistAssets' in data)
415
+ norm.whitelistAssets = data.whitelistAssets;
416
+ if ('whitelist_networks' in data)
417
+ norm.whitelistNetworks = data.whitelist_networks;
418
+ else if ('whitelistNetworks' in data)
419
+ norm.whitelistNetworks = data.whitelistNetworks;
420
+ if ('whitelist_domains' in data)
421
+ norm.whitelistDomains = data.whitelist_domains;
422
+ else if ('whitelistDomains' in data)
423
+ norm.whitelistDomains = data.whitelistDomains;
424
+ }
425
+ for (const field of [
426
+ 'circuit_max_rpm',
427
+ 'circuitMaxRpm',
428
+ 'circuit_consecutive_failures',
429
+ 'circuitConsecutiveFailures',
430
+ 'circuit_cooldown_seconds',
431
+ 'circuitCooldownSeconds',
432
+ 'breaker_state',
433
+ 'breakerState',
434
+ 'tripped_at',
435
+ 'trippedAt',
436
+ 'is_frozen',
437
+ 'isFrozen',
438
+ 'created_at',
439
+ 'createdAt',
440
+ 'updated_at',
441
+ 'updatedAt',
442
+ ]) {
443
+ if (field in data) {
444
+ norm[field] = data[field];
445
+ }
446
+ }
447
+ return new PolicyConfig(norm);
448
+ }
449
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/policy/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * SQLite-backed Policy Engine implementation.
3
+ *
4
+ * Enforces 24-hour true rolling budget, atomic slot reservation, lifetime limits,
5
+ * circuit breaker (RPM rate limiting, consecutive failures, half-open test probes),
6
+ * and strict two-phase commit/release protocol within BEGIN IMMEDIATE transactions.
7
+ */
8
+ import type { Database as DatabaseInstance } from 'better-sqlite3';
9
+ import type { Clock, IMeteredPolicyEngine, ReserveParams } from './interfaces.js';
10
+ import { BreakerState, type PolicyConfig, type PolicyDecision } from './models.js';
11
+ export declare class SQLitePolicyEngine implements IMeteredPolicyEngine {
12
+ #private;
13
+ constructor(db: DatabaseInstance, config: PolicyConfig, clock?: Clock);
14
+ /**
15
+ * Create an in-memory SQLitePolicyEngine with the buyer schema initialized.
16
+ */
17
+ static createInMemory(config: PolicyConfig, clock?: Clock): SQLitePolicyEngine;
18
+ getAvailableRollingBudget(): bigint;
19
+ getBreakerState(): BreakerState;
20
+ recordFailure(reason?: string): void;
21
+ resetBreaker(): void;
22
+ reserve(params: ReserveParams): PolicyDecision;
23
+ commit(intentId: string): void;
24
+ release(intentId: string, reason?: string): void;
25
+ reserveMetered(intentId: string, estimatedAmount: bigint | number | string, domain?: string | null, ttlSeconds?: number): PolicyDecision;
26
+ settleMetered(intentId: string, actualAmount?: bigint | number | null): void;
27
+ }
28
+ //# sourceMappingURL=sqlite-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite-engine.d.ts","sourceRoot":"","sources":["../../src/policy/sqlite-engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAInE,OAAO,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EACL,YAAY,EAEZ,KAAK,YAAY,EACjB,KAAK,cAAc,EAIpB,MAAM,aAAa,CAAC;AAErB,qBAAa,kBAAmB,YAAW,oBAAoB;;gBAMjD,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,KAAK;IAOrE;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,kBAAkB;IAkL9E,yBAAyB,IAAI,MAAM;IAOnC,eAAe,IAAI,YAAY;IA8B/B,aAAa,CAAC,MAAM,SAAK,GAAG,IAAI;IAkChC,YAAY,IAAI,IAAI;IAUpB,OAAO,CAAC,MAAM,EAAE,aAAa,GAAG,cAAc;IAsG9C,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAyD9B,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IA0ChD,cAAc,CACZ,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EACzC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,EACtB,UAAU,SAAK,GACd,cAAc;IAkGjB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI;CA4C7E"}