@aastar/sdk 0.20.5 → 0.20.6

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 (89) hide show
  1. package/dist/BaseClient-BjbYP0cf.d.ts +88 -0
  2. package/dist/UserClient-AIIHB54I.js +6 -0
  3. package/dist/{UserClient-UYIHF6UJ.js.map → UserClient-AIIHB54I.js.map} +1 -1
  4. package/dist/account.d.ts +48 -1
  5. package/dist/account.js +3 -3
  6. package/dist/admin.d.ts +62 -1
  7. package/dist/admin.js +3 -3
  8. package/dist/airaccount.d.ts +4 -2
  9. package/dist/airaccount.js +2 -2
  10. package/dist/channel-CkRRbzT8.d.ts +77 -0
  11. package/dist/channel.d.ts +64 -1
  12. package/dist/channel.js +3 -3
  13. package/dist/{chunk-FBDMID2J.js → chunk-4EZD7LPE.js} +30 -24
  14. package/dist/chunk-4EZD7LPE.js.map +1 -0
  15. package/dist/{chunk-TIH7D4FQ.js → chunk-6QYXGMCR.js} +513 -322
  16. package/dist/chunk-6QYXGMCR.js.map +1 -0
  17. package/dist/{chunk-6UHVUGDT.js → chunk-7ARJ3OSU.js} +29 -21
  18. package/dist/chunk-7ARJ3OSU.js.map +1 -0
  19. package/dist/{chunk-VYU6P7HB.js → chunk-BN5WY5GM.js} +16 -14
  20. package/dist/chunk-BN5WY5GM.js.map +1 -0
  21. package/dist/{chunk-ZFIKBDBT.js → chunk-FJ7XECC5.js} +4 -4
  22. package/dist/chunk-FJ7XECC5.js.map +1 -0
  23. package/dist/{chunk-4KRQXOTI.js → chunk-FUU7RIIA.js} +113 -102
  24. package/dist/chunk-FUU7RIIA.js.map +1 -0
  25. package/dist/{chunk-NRH56SAJ.js → chunk-G3UJC4EL.js} +6 -7
  26. package/dist/chunk-G3UJC4EL.js.map +1 -0
  27. package/dist/{chunk-QJT4IOIS.js → chunk-KDH3UPKD.js} +10 -13
  28. package/dist/chunk-KDH3UPKD.js.map +1 -0
  29. package/dist/{chunk-WPSWFZKF.js → chunk-KISL64KW.js} +69 -323
  30. package/dist/chunk-KISL64KW.js.map +1 -0
  31. package/dist/{chunk-ZGOEADCO.js → chunk-LXWIPTPX.js} +5 -5
  32. package/dist/chunk-LXWIPTPX.js.map +1 -0
  33. package/dist/{chunk-I3VRFZA4.js → chunk-MVEWJIPY.js} +124 -110
  34. package/dist/chunk-MVEWJIPY.js.map +1 -0
  35. package/dist/{chunk-FIS3RUGL.js → chunk-PAABYXS6.js} +33 -40
  36. package/dist/chunk-PAABYXS6.js.map +1 -0
  37. package/dist/{chunk-HNTLDUL7.js → chunk-PKCHRXFR.js} +8 -12
  38. package/dist/chunk-PKCHRXFR.js.map +1 -0
  39. package/dist/{chunk-42KVVOOU.js → chunk-TENYCMJ3.js} +31 -31
  40. package/dist/chunk-TENYCMJ3.js.map +1 -0
  41. package/dist/{contract-addresses-ADEWLDHE.js → contract-addresses-N3TOL2WL.js} +3 -3
  42. package/dist/{contract-addresses-ADEWLDHE.js.map → contract-addresses-N3TOL2WL.js.map} +1 -1
  43. package/dist/core.d.ts +6930 -13
  44. package/dist/core.js +2 -2
  45. package/dist/dapp.d.ts +127 -1
  46. package/dist/dapp.js +12 -13
  47. package/dist/dapp.js.map +1 -1
  48. package/dist/doc-types-471vSmPO.d.ts +16 -0
  49. package/dist/enduser.d.ts +261 -1
  50. package/dist/enduser.js +4 -4
  51. package/dist/identity.d.ts +81 -1
  52. package/dist/identity.js +3 -3
  53. package/dist/index-B6SfEQxo.d.ts +47 -0
  54. package/dist/index.d.ts +55 -15
  55. package/dist/index.js +18 -18
  56. package/dist/index.js.map +1 -1
  57. package/dist/kms.d.ts +2986 -2
  58. package/dist/kms.js +2 -2
  59. package/dist/operator.d.ts +164 -1
  60. package/dist/operator.js +3 -3
  61. package/dist/paymaster.d.ts +312 -1
  62. package/dist/paymaster.js +3 -3
  63. package/dist/{index.node-KIKM4EG6.js → src-L5SI5WNB.js} +4 -4
  64. package/dist/src-L5SI5WNB.js.map +1 -0
  65. package/dist/{dist-GVWCRI4F.js → src-X5MIV3EB.js} +5 -5
  66. package/dist/src-X5MIV3EB.js.map +1 -0
  67. package/dist/tier-router-DLiMxs0h.d.ts +321 -0
  68. package/dist/tokens.d.ts +64 -1
  69. package/dist/tokens.js +3 -3
  70. package/dist/x402.d.ts +373 -1
  71. package/dist/x402.js +3 -3
  72. package/package.json +1 -1
  73. package/dist/UserClient-UYIHF6UJ.js +0 -6
  74. package/dist/chunk-42KVVOOU.js.map +0 -1
  75. package/dist/chunk-4KRQXOTI.js.map +0 -1
  76. package/dist/chunk-6UHVUGDT.js.map +0 -1
  77. package/dist/chunk-FBDMID2J.js.map +0 -1
  78. package/dist/chunk-FIS3RUGL.js.map +0 -1
  79. package/dist/chunk-HNTLDUL7.js.map +0 -1
  80. package/dist/chunk-I3VRFZA4.js.map +0 -1
  81. package/dist/chunk-NRH56SAJ.js.map +0 -1
  82. package/dist/chunk-QJT4IOIS.js.map +0 -1
  83. package/dist/chunk-TIH7D4FQ.js.map +0 -1
  84. package/dist/chunk-VYU6P7HB.js.map +0 -1
  85. package/dist/chunk-WPSWFZKF.js.map +0 -1
  86. package/dist/chunk-ZFIKBDBT.js.map +0 -1
  87. package/dist/chunk-ZGOEADCO.js.map +0 -1
  88. package/dist/dist-GVWCRI4F.js.map +0 -1
  89. package/dist/index.node-KIKM4EG6.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { x402Actions } from './chunk-TIH7D4FQ.js';
1
+ import { x402Actions } from './chunk-6QYXGMCR.js';
2
2
  import { toHex } from 'viem';
3
3
 
4
4
  var EIP3009_TYPES = {
@@ -40,7 +40,12 @@ function generateNonce() {
40
40
  }
41
41
  var GTOKEN_EIP712_DOMAIN = { name: "GToken", version: "1" };
42
42
  async function signTransferWithAuthorization(walletClient, params) {
43
- const domain = getEIP3009Domain(params.tokenName, params.tokenVersion, params.chainId, params.verifyingContract);
43
+ const domain = getEIP3009Domain(
44
+ params.tokenName,
45
+ params.tokenVersion,
46
+ params.chainId,
47
+ params.verifyingContract
48
+ );
44
49
  const account = walletClient.account;
45
50
  if (!account) {
46
51
  throw new Error("WalletClient must have an account");
@@ -72,7 +77,9 @@ async function signGTokenTransferWithAuthorization(walletClient, params) {
72
77
  throw new Error("validBefore must be greater than validAfter");
73
78
  }
74
79
  if (params.validBefore - params.validAfter > 300n) {
75
- throw new Error(`Authorization window ${params.validBefore - params.validAfter}s exceeds MAX_AUTH_VALIDITY (300s)`);
80
+ throw new Error(
81
+ `Authorization window ${params.validBefore - params.validAfter}s exceeds MAX_AUTH_VALIDITY (300s)`
82
+ );
76
83
  }
77
84
  return signTransferWithAuthorization(walletClient, params);
78
85
  }
@@ -88,7 +95,9 @@ async function signReceiveWithAuthorization(walletClient, params) {
88
95
  throw new Error("validBefore must be greater than validAfter");
89
96
  }
90
97
  if (params.validBefore - params.validAfter > 300n) {
91
- throw new Error(`Authorization window ${params.validBefore - params.validAfter}s exceeds MAX_AUTH_VALIDITY (300s)`);
98
+ throw new Error(
99
+ `Authorization window ${params.validBefore - params.validAfter}s exceeds MAX_AUTH_VALIDITY (300s)`
100
+ );
92
101
  }
93
102
  return walletClient.signTypedData({
94
103
  account,
@@ -125,7 +134,7 @@ async function signCancelAuthorization(walletClient, params) {
125
134
  });
126
135
  }
127
136
 
128
- // ../x402/dist/payment-header.js
137
+ // ../x402/src/payment-header.ts
129
138
  var HEADER_PAYMENT_REQUIRED = "PAYMENT-REQUIRED";
130
139
  var HEADER_PAYMENT_SIGNATURE = "PAYMENT-SIGNATURE";
131
140
  var HEADER_PAYMENT_RESPONSE = "PAYMENT-RESPONSE";
@@ -167,24 +176,20 @@ function decodeSettleResponse(encoded) {
167
176
  }
168
177
  function extractPaymentRequired(response) {
169
178
  const v2 = response.headers.get(HEADER_PAYMENT_REQUIRED);
170
- if (v2)
171
- return decodePaymentRequired(v2);
179
+ if (v2) return decodePaymentRequired(v2);
172
180
  const v1 = response.headers.get("X-PAYMENT-REQUIRED");
173
- if (v1)
174
- return decodePaymentRequired(v1);
181
+ if (v1) return decodePaymentRequired(v1);
175
182
  return null;
176
183
  }
177
184
  function extractSettleResponse(response) {
178
185
  const v2 = response.headers.get(HEADER_PAYMENT_RESPONSE);
179
- if (v2)
180
- return decodeSettleResponse(v2);
186
+ if (v2) return decodeSettleResponse(v2);
181
187
  const v1 = response.headers.get(HEADER_V1_PAYMENT_RESPONSE);
182
- if (v1)
183
- return decodeSettleResponse(v1);
188
+ if (v1) return decodeSettleResponse(v1);
184
189
  return null;
185
190
  }
186
191
 
187
- // ../x402/dist/facilitator.js
192
+ // ../x402/src/facilitator.ts
188
193
  var FacilitatorClient = class {
189
194
  url;
190
195
  createAuthHeaders;
@@ -194,8 +199,7 @@ var FacilitatorClient = class {
194
199
  }
195
200
  async getHeaders(endpoint) {
196
201
  const base = { "Content-Type": "application/json" };
197
- if (!this.createAuthHeaders)
198
- return base;
202
+ if (!this.createAuthHeaders) return base;
199
203
  const auth = await this.createAuthHeaders();
200
204
  return { ...base, ...auth[endpoint] };
201
205
  }
@@ -250,7 +254,7 @@ var FacilitatorClient = class {
250
254
  }
251
255
  };
252
256
 
253
- // ../x402/dist/X402Client.js
257
+ // ../x402/src/X402Client.ts
254
258
  function toNetworkId(chainId) {
255
259
  return `eip155:${chainId}`;
256
260
  }
@@ -385,7 +389,9 @@ var X402Client = class {
385
389
  throw new Error("402 response missing PAYMENT-REQUIRED header or empty accepts");
386
390
  }
387
391
  const myNetwork = toNetworkId(this.config.chainId);
388
- let selected = paymentRequired.accepts.find((a) => a.network === myNetwork && a.scheme === "exact");
392
+ let selected = paymentRequired.accepts.find(
393
+ (a) => a.network === myNetwork && a.scheme === "exact"
394
+ );
389
395
  if (!selected) {
390
396
  selected = paymentRequired.accepts.find((a) => a.network.startsWith("eip155:"));
391
397
  }
@@ -393,7 +399,9 @@ var X402Client = class {
393
399
  throw new Error(`No compatible payment option for network ${myNetwork}`);
394
400
  }
395
401
  if (this.config.maxAmountPerRequest && BigInt(selected.amount) > this.config.maxAmountPerRequest) {
396
- throw new Error(`Payment amount ${selected.amount} exceeds max ${this.config.maxAmountPerRequest}`);
402
+ throw new Error(
403
+ `Payment amount ${selected.amount} exceeds max ${this.config.maxAmountPerRequest}`
404
+ );
397
405
  }
398
406
  const account = this.config.walletClient.account;
399
407
  if (!account) {
@@ -412,5 +420,5 @@ var X402Client = class {
412
420
  };
413
421
 
414
422
  export { EIP3009_TYPES, FacilitatorClient, GTOKEN_EIP712_DOMAIN, HEADER_PAYMENT_REQUIRED, HEADER_PAYMENT_RESPONSE, HEADER_PAYMENT_SIGNATURE, HEADER_V1_PAYMENT, HEADER_V1_PAYMENT_RESPONSE, X402Client, decodePaymentPayload, decodePaymentRequired, decodeSettleResponse, encodePaymentPayload, encodePaymentRequired, encodeSettleResponse, extractPaymentRequired, extractSettleResponse, generateNonce, getEIP3009Domain, signCancelAuthorization, signGTokenTransferWithAuthorization, signReceiveWithAuthorization, signTransferWithAuthorization };
415
- //# sourceMappingURL=chunk-6UHVUGDT.js.map
416
- //# sourceMappingURL=chunk-6UHVUGDT.js.map
423
+ //# sourceMappingURL=chunk-7ARJ3OSU.js.map
424
+ //# sourceMappingURL=chunk-7ARJ3OSU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../x402/src/eip3009.ts","../../x402/src/payment-header.ts","../../x402/src/facilitator.ts","../../x402/src/X402Client.ts"],"names":[],"mappings":";;;AAEO,IAAM,aAAA,GAAgB;AAAA,EACzB,yBAAA,EAA2B;AAAA,IACvB,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA,IAChC,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,SAAA,EAAU;AAAA,IAC9B,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA,EAAU;AAAA,IACjC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,SAAA,EAAU;AAAA,IACtC,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,SAAA,EAAU;AAAA,IACvC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA;AAAU,GACrC;AAAA;AAAA;AAAA,EAGA,wBAAA,EAA0B;AAAA,IACtB,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAU;AAAA,IAChC,EAAE,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,SAAA,EAAU;AAAA,IAC9B,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA,EAAU;AAAA,IACjC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,SAAA,EAAU;AAAA,IACtC,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,SAAA,EAAU;AAAA,IACvC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA;AAAU,GACrC;AAAA,EACA,mBAAA,EAAqB;AAAA,IACjB,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,SAAA,EAAU;AAAA,IACtC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA;AAAU;AAEzC;AAEO,SAAS,gBAAA,CAAiB,SAAA,EAAmB,YAAA,EAAsB,OAAA,EAAiB,iBAAA,EAA4B;AACnH,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS,YAAA;AAAA,IACT,OAAA;AAAA,IACA;AAAA,GACJ;AACJ;AAEO,SAAS,aAAA,GAAqB;AACjC,EAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,EAAE,CAAA;AAC/B,EAAA,UAAA,CAAW,MAAA,CAAO,gBAAgB,KAAK,CAAA;AACvC,EAAA,OAAO,MAAM,KAAK,CAAA;AACtB;AAGO,IAAM,oBAAA,GAAuB,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,GAAA;AAE/D,eAAsB,6BAAA,CAClB,cACA,MAAA,EAYY;AACZ,EAAA,MAAM,MAAA,GAAS,gBAAA;AAAA,IACX,MAAA,CAAO,SAAA;AAAA,IACP,MAAA,CAAO,YAAA;AAAA,IACP,MAAA,CAAO,OAAA;AAAA,IACP,MAAA,CAAO;AAAA,GACX;AAEA,EAAA,MAAM,UAAU,YAAA,CAAa,OAAA;AAC7B,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,EACvD;AAEA,EAAA,OAAO,aAAa,aAAA,CAAc;AAAA,IAC9B,OAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA,EAAO,aAAA;AAAA,IACP,WAAA,EAAa,2BAAA;AAAA,IACb,OAAA,EAAS;AAAA,MACL,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,IAAI,MAAA,CAAO,EAAA;AAAA,MACX,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,OAAO,MAAA,CAAO;AAAA;AAClB,GACH,CAAA;AACL;AAQA,eAAsB,mCAAA,CAClB,cACA,MAAA,EAYY;AACZ,EAAA,MAAM,UAAU,YAAA,CAAa,OAAA;AAC7B,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,EACvD;AACA,EAAA,IAAI,QAAQ,OAAA,CAAQ,WAAA,OAAkB,MAAA,CAAO,IAAA,CAAK,aAAY,EAAG;AAC7D,IAAA,MAAM,IAAI,MAAM,CAAA,OAAA,EAAU,OAAA,CAAQ,OAAO,CAAA,qBAAA,EAAwB,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAAA,EAClF;AAEA,EAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,UAAA,EAAY;AACzC,IAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,EACjE;AACA,EAAA,IAAI,MAAA,CAAO,WAAA,GAAc,MAAA,CAAO,UAAA,GAAa,IAAA,EAAM;AAC/C,IAAA,MAAM,IAAI,KAAA;AAAA,MACN,CAAA,qBAAA,EAAwB,MAAA,CAAO,WAAA,GAAc,MAAA,CAAO,UAAU,CAAA,kCAAA;AAAA,KAClE;AAAA,EACJ;AACA,EAAA,OAAO,6BAAA,CAA8B,cAAc,MAAM,CAAA;AAC7D;AAOA,eAAsB,4BAAA,CAClB,cACA,MAAA,EAYY;AACZ,EAAA,MAAM,UAAU,YAAA,CAAa,OAAA;AAC7B,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,EACvD;AACA,EAAA,IAAI,QAAQ,OAAA,CAAQ,WAAA,OAAkB,MAAA,CAAO,IAAA,CAAK,aAAY,EAAG;AAC7D,IAAA,MAAM,IAAI,MAAM,CAAA,OAAA,EAAU,OAAA,CAAQ,OAAO,CAAA,qBAAA,EAAwB,MAAA,CAAO,IAAI,CAAA,CAAE,CAAA;AAAA,EAClF;AAEA,EAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,UAAA,EAAY;AACzC,IAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,EACjE;AACA,EAAA,IAAI,MAAA,CAAO,WAAA,GAAc,MAAA,CAAO,UAAA,GAAa,IAAA,EAAM;AAC/C,IAAA,MAAM,IAAI,KAAA;AAAA,MACN,CAAA,qBAAA,EAAwB,MAAA,CAAO,WAAA,GAAc,MAAA,CAAO,UAAU,CAAA,kCAAA;AAAA,KAClE;AAAA,EACJ;AAEA,EAAA,OAAO,aAAa,aAAA,CAAc;AAAA,IAC9B,OAAA;AAAA,IACA,MAAA,EAAQ,iBAAiB,MAAA,CAAO,SAAA,EAAW,OAAO,YAAA,EAAc,MAAA,CAAO,OAAA,EAAS,MAAA,CAAO,iBAAiB,CAAA;AAAA,IACxG,KAAA,EAAO,aAAA;AAAA,IACP,WAAA,EAAa,0BAAA;AAAA,IACb,OAAA,EAAS;AAAA,MACL,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,IAAI,MAAA,CAAO,EAAA;AAAA,MACX,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,OAAO,MAAA,CAAO;AAAA;AAClB,GACH,CAAA;AACL;AAMA,eAAsB,uBAAA,CAClB,cACA,MAAA,EAQY;AACZ,EAAA,MAAM,UAAU,YAAA,CAAa,OAAA;AAC7B,EAAA,IAAI,CAAC,OAAA,EAAS;AACV,IAAA,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAAA,EACvD;AACA,EAAA,IAAI,QAAQ,OAAA,CAAQ,WAAA,OAAkB,MAAA,CAAO,UAAA,CAAW,aAAY,EAAG;AACnE,IAAA,MAAM,IAAI,MAAM,CAAA,OAAA,EAAU,OAAA,CAAQ,OAAO,CAAA,2BAAA,EAA8B,MAAA,CAAO,UAAU,CAAA,CAAE,CAAA;AAAA,EAC9F;AAEA,EAAA,OAAO,aAAa,aAAA,CAAc;AAAA,IAC9B,OAAA;AAAA,IACA,MAAA,EAAQ,iBAAiB,MAAA,CAAO,SAAA,EAAW,OAAO,YAAA,EAAc,MAAA,CAAO,OAAA,EAAS,MAAA,CAAO,iBAAiB,CAAA;AAAA,IACxG,KAAA,EAAO,aAAA;AAAA,IACP,WAAA,EAAa,qBAAA;AAAA,IACb,OAAA,EAAS;AAAA,MACL,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,OAAO,MAAA,CAAO;AAAA;AAClB,GACH,CAAA;AACL;;;AC9MO,IAAM,uBAAA,GAA0B;AAChC,IAAM,wBAAA,GAA2B;AACjC,IAAM,uBAAA,GAA0B;AAGhC,IAAM,iBAAA,GAAoB;AAC1B,IAAM,0BAAA,GAA6B;AAM1C,SAAS,SAAS,IAAA,EAAuB;AACrC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AAChC,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAC/B,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA,CAAE,SAAS,QAAQ,CAAA;AAAA,EAC9C;AACA,EAAA,OAAO,KAAK,IAAI,CAAA;AACpB;AAEA,SAAS,WAAc,OAAA,EAAoB;AACvC,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAC/B,IAAA,IAAA,GAAO,OAAO,IAAA,CAAK,OAAA,EAAS,QAAQ,CAAA,CAAE,SAAS,OAAO,CAAA;AAAA,EAC1D,CAAA,MAAO;AACH,IAAA,IAAA,GAAO,KAAK,OAAO,CAAA;AAAA,EACvB;AACA,EAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAC1B;AAIO,SAAS,sBAAsB,GAAA,EAA8B;AAChE,EAAA,OAAO,SAAS,GAAG,CAAA;AACvB;AAEO,SAAS,sBAAsB,OAAA,EAAkC;AACpE,EAAA,OAAO,WAA4B,OAAO,CAAA;AAC9C;AAIO,SAAS,qBAAqB,OAAA,EAAiC;AAClE,EAAA,OAAO,SAAS,OAAO,CAAA;AAC3B;AAEO,SAAS,qBAAqB,OAAA,EAAiC;AAClE,EAAA,OAAO,WAA2B,OAAO,CAAA;AAC7C;AAIO,SAAS,qBAAqB,IAAA,EAA8B;AAC/D,EAAA,OAAO,SAAS,IAAI,CAAA;AACxB;AAEO,SAAS,qBAAqB,OAAA,EAAiC;AAClE,EAAA,OAAO,WAA2B,OAAO,CAAA;AAC7C;AAUO,SAAS,uBAAuB,QAAA,EAA4C;AAC/E,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,uBAAuB,CAAA;AACvD,EAAA,IAAI,EAAA,EAAI,OAAO,qBAAA,CAAsB,EAAE,CAAA;AAGvC,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,oBAAoB,CAAA;AACpD,EAAA,IAAI,EAAA,EAAI,OAAO,qBAAA,CAAsB,EAAE,CAAA;AAEvC,EAAA,OAAO,IAAA;AACX;AAKO,SAAS,sBAAsB,QAAA,EAA2C;AAC7E,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,uBAAuB,CAAA;AACvD,EAAA,IAAI,EAAA,EAAI,OAAO,oBAAA,CAAqB,EAAE,CAAA;AAEtC,EAAA,MAAM,EAAA,GAAK,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,0BAA0B,CAAA;AAC1D,EAAA,IAAI,EAAA,EAAI,OAAO,oBAAA,CAAqB,EAAE,CAAA;AAEtC,EAAA,OAAO,IAAA;AACX;;;ACnFO,IAAM,oBAAN,MAAwB;AAAA,EACV,GAAA;AAAA,EACA,iBAAA;AAAA,EAEjB,YAAY,MAAA,EAA2B;AACnC,IAAA,IAAA,CAAK,GAAA,GAAM,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,OAAO,EAAE,CAAA;AACvC,IAAA,IAAA,CAAK,oBAAoB,MAAA,CAAO,iBAAA;AAAA,EACpC;AAAA,EAEA,MAAc,WAAW,QAAA,EAA8E;AACnG,IAAA,MAAM,IAAA,GAA+B,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAC1E,IAAA,IAAI,CAAC,IAAA,CAAK,iBAAA,EAAmB,OAAO,IAAA;AACpC,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAC1C,IAAA,OAAO,EAAE,GAAG,IAAA,EAAM,GAAG,IAAA,CAAK,QAAQ,CAAA,EAAE;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAA,CACF,cAAA,EACA,mBAAA,EACuB;AACvB,IAAA,MAAM,OAAO,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,GAAG,CAAA,OAAA,CAAA,EAAW;AAAA,MAC3C,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA;AAAA,MACvC,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACjB,WAAA,EAAa,CAAA;AAAA,QACb,cAAA;AAAA,QACA;AAAA,OACH;AAAA,KACJ,CAAA;AACD,IAAA,IAAI,CAAC,KAAK,EAAA,EAAI;AACV,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,IAAA,CAAK,MAAM,IAAI,MAAM,IAAA,CAAK,IAAA,EAAM,CAAA,CAAE,CAAA;AAAA,IACrF;AACA,IAAA,OAAO,KAAK,IAAA,EAAK;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAA,CACF,cAAA,EACA,mBAAA,EACuB;AACvB,IAAA,MAAM,OAAO,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,GAAG,CAAA,OAAA,CAAA,EAAW;AAAA,MAC3C,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,MAAM,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA;AAAA,MACvC,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACjB,WAAA,EAAa,CAAA;AAAA,QACb,cAAA;AAAA,QACA;AAAA,OACH;AAAA,KACJ,CAAA;AACD,IAAA,IAAI,CAAC,KAAK,EAAA,EAAI;AACV,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,IAAA,CAAK,MAAM,IAAI,MAAM,IAAA,CAAK,IAAA,EAAM,CAAA,CAAE,CAAA;AAAA,IACrF;AACA,IAAA,OAAO,KAAK,IAAA,EAAK;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,GAA2C;AAC7C,IAAA,MAAM,OAAO,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,GAAG,CAAA,UAAA,CAAA,EAAc;AAAA,MAC9C,MAAA,EAAQ,KAAA;AAAA,MACR,OAAA,EAAS,MAAM,IAAA,CAAK,UAAA,CAAW,WAAW;AAAA,KAC7C,CAAA;AACD,IAAA,IAAI,CAAC,KAAK,EAAA,EAAI;AACV,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,IAAA,CAAK,MAAM,IAAI,MAAM,IAAA,CAAK,IAAA,EAAM,CAAA,CAAE,CAAA;AAAA,IACxF;AACA,IAAA,OAAO,KAAK,IAAA,EAAK;AAAA,EACrB;AACJ;;;ACrDA,SAAS,YAAY,OAAA,EAAqC;AACtD,EAAA,OAAO,UAAU,OAAO,CAAA,CAAA;AAC5B;AAEO,IAAM,aAAN,MAAiB;AAAA,EACH,OAAA;AAAA,EACA,MAAA;AAAA,EACA,iBAAA;AAAA,EAEjB,YAAY,MAAA,EAA0B;AAClC,IAAA,IAAI,CAAC,MAAA,CAAO,YAAA,CAAa,OAAA,EAAS;AAC9B,MAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,IAClE;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAEd,IAAA,IAAA,CAAK,UAAU,WAAA,CAAY,MAAA,CAAO,qBAAqB,CAAA,CAAE,OAAO,YAAY,CAAA;AAC5E,IAAA,IAAI,OAAO,WAAA,EAAa;AACpB,MAAA,IAAA,CAAK,iBAAA,GAAoB,IAAI,iBAAA,CAAkB,MAAA,CAAO,WAAW,CAAA;AAAA,IACrE;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAc,MAAA,EAIjB;AACC,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,IAAS,aAAA,EAAc;AAC5C,IAAA,MAAM,GAAA,GAAM,OAAO,IAAA,CAAK,KAAA,CAAM,KAAK,GAAA,EAAI,GAAI,GAAI,CAAC,CAAA;AAChD,IAAA,MAAM,UAAA,GAAa,MAAA,CAAO,UAAA,IAAe,GAAA,GAAM,IAAA;AAC/C,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,WAAA,IAAgB,GAAA,GAAM,KAAA;AACjD,IAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,SAAA,IAAa,MAAA;AAC3C,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,MAAA,CAAO,YAAA,IAAgB,GAAA;AAEjD,IAAA,MAAM,SAAA,GAAY,MAAM,6BAAA,CAA8B,IAAA,CAAK,OAAO,YAAA,EAAc;AAAA,MAC5E,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,IAAI,MAAA,CAAO,EAAA;AAAA,MACX,OAAO,MAAA,CAAO,MAAA;AAAA,MACd,UAAA;AAAA,MACA,WAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,OAAA,EAAS,KAAK,MAAA,CAAO,OAAA;AAAA,MACrB,mBAAmB,MAAA,CAAO;AAAA,KAC7B,CAAA;AAED,IAAA,MAAM,OAAA,GAA0B;AAAA,MAC5B,WAAA,EAAa,CAAA;AAAA,MACb,QAAA,EAAU;AAAA,QACN,MAAA,EAAQ,OAAA;AAAA,QACR,OAAA,EAAS,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,QACxC,OAAO,MAAA,CAAO,KAAA;AAAA,QACd,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,QAAA,EAAS;AAAA,QAC/B,OAAO,MAAA,CAAO,EAAA;AAAA,QACd,iBAAA,EAAmB,IAAA;AAAA,QACnB,KAAA,EAAO,EAAE,IAAA,EAAM,SAAA,EAAW,SAAS,YAAA;AAAa,OACpD;AAAA,MACA,OAAA,EAAS;AAAA,QACL,SAAA;AAAA,QACA,aAAA,EAAe;AAAA,UACX,MAAM,MAAA,CAAO,IAAA;AAAA,UACb,IAAI,MAAA,CAAO,EAAA;AAAA,UACX,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,QAAA,EAAS;AAAA,UAC9B,UAAA,EAAY,WAAW,QAAA,EAAS;AAAA,UAChC,WAAA,EAAa,YAAY,QAAA,EAAS;AAAA,UAClC;AAAA;AACJ;AACJ,KACJ;AAEA,IAAA,OAAO;AAAA,MACH,OAAA;AAAA,MACA,OAAA,EAAS,qBAAqB,OAAO,CAAA;AAAA,MACrC;AAAA,KACJ;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAc,MAAA,EAGH;AACb,IAAA,OAAO,IAAA,CAAK,QAAQ,iBAAA,CAAkB;AAAA,MAClC,GAAG,MAAA;AAAA,MACH,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa;AAAA,KACrC,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBAAoB,MAAA,EAET;AACb,IAAA,OAAO,IAAA,CAAK,QAAQ,uBAAA,CAAwB;AAAA,MACxC,GAAG,MAAA;AAAA,MACH,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa;AAAA,KACrC,CAAA;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,GAAwC;AAC1C,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,iBAAA,EAAkB;AACpD,IAAA,OAAO,EAAE,MAAA,EAAO;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,KAAA,EAA8B;AAC3C,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,oBAAA,CAAqB,EAAE,OAAO,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,oBAAA,CAAqB,OAAA,EAAyB,YAAA,EAA4D;AAC5G,IAAA,IAAI,CAAC,KAAK,iBAAA,EAAmB;AACzB,MAAA,MAAM,IAAI,MAAM,+EAA+E,CAAA;AAAA,IACnG;AACA,IAAA,OAAO,IAAA,CAAK,iBAAA,CAAkB,MAAA,CAAO,OAAA,EAAS,YAAY,CAAA;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAM,SAAA,CAAU,GAAA,EAAa,IAAA,EAAuC;AAChE,IAAA,MAAM,aAAA,GAAgB,MAAM,KAAA,CAAM,GAAA,EAAK,IAAI,CAAA;AAE3C,IAAA,IAAI,aAAA,CAAc,WAAW,GAAA,EAAK;AAC9B,MAAA,OAAO,aAAA;AAAA,IACX;AAIA,IAAA,MAAM,eAAA,GAAkB,uBAAuB,aAAa,CAAA;AAC5D,IAAA,IAAI,CAAC,eAAA,IAAmB,CAAC,eAAA,CAAgB,SAAS,MAAA,EAAQ;AACtD,MAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,IACnF;AAGA,IAAA,MAAM,SAAA,GAAY,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AACjD,IAAA,IAAI,QAAA,GAAW,gBAAgB,OAAA,CAAQ,IAAA;AAAA,MACnC,CAAC,CAAA,KAAM,CAAA,CAAE,OAAA,KAAY,SAAA,IAAa,EAAE,MAAA,KAAW;AAAA,KACnD;AACA,IAAA,IAAI,CAAC,QAAA,EAAU;AAEX,MAAA,QAAA,GAAW,eAAA,CAAgB,QAAQ,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,OAAA,CAAQ,UAAA,CAAW,SAAS,CAAC,CAAA;AAAA,IAClF;AACA,IAAA,IAAI,CAAC,QAAA,EAAU;AACX,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yCAAA,EAA4C,SAAS,CAAA,CAAE,CAAA;AAAA,IAC3E;AAGA,IAAA,IAAI,IAAA,CAAK,OAAO,mBAAA,IAAuB,MAAA,CAAO,SAAS,MAAM,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,mBAAA,EAAqB;AAC9F,MAAA,MAAM,IAAI,KAAA;AAAA,QACN,kBAAkB,QAAA,CAAS,MAAM,CAAA,aAAA,EAAgB,IAAA,CAAK,OAAO,mBAAmB,CAAA;AAAA,OACpF;AAAA,IACJ;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa,OAAA;AACzC,IAAA,IAAI,CAAC,OAAA,EAAS;AACV,MAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,IAC7E;AAGA,IAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,MAAM,KAAK,aAAA,CAAc;AAAA,MACzC,MAAM,OAAA,CAAQ,OAAA;AAAA,MACd,IAAI,QAAA,CAAS,KAAA;AAAA,MACb,OAAO,QAAA,CAAS,KAAA;AAAA,MAChB,MAAA,EAAQ,MAAA,CAAO,QAAA,CAAS,MAAM;AAAA,KACjC,CAAA;AAGD,IAAA,MAAM,YAAA,GAAe,IAAI,OAAA,CAAQ,IAAA,EAAM,OAAO,CAAA;AAC9C,IAAA,YAAA,CAAa,GAAA,CAAI,0BAA0B,OAAO,CAAA;AAElD,IAAA,OAAO,MAAM,GAAA,EAAK,EAAE,GAAG,IAAA,EAAM,OAAA,EAAS,cAAc,CAAA;AAAA,EACxD;AACJ","file":"chunk-7ARJ3OSU.js","sourcesContent":["import { type Address, type Hex, type WalletClient, toHex } from 'viem';\n\nexport const EIP3009_TYPES = {\n TransferWithAuthorization: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'validAfter', type: 'uint256' },\n { name: 'validBefore', type: 'uint256' },\n { name: 'nonce', type: 'bytes32' },\n ],\n // Distinct typehash from TransferWithAuthorization — prevents replay across variants.\n // msg.sender must equal `to` on-chain (CallerMustBeRecipient error if violated).\n ReceiveWithAuthorization: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'validAfter', type: 'uint256' },\n { name: 'validBefore', type: 'uint256' },\n { name: 'nonce', type: 'bytes32' },\n ],\n CancelAuthorization: [\n { name: 'authorizer', type: 'address' },\n { name: 'nonce', type: 'bytes32' },\n ],\n} as const;\n\nexport function getEIP3009Domain(tokenName: string, tokenVersion: string, chainId: number, verifyingContract: Address) {\n return {\n name: tokenName,\n version: tokenVersion,\n chainId,\n verifyingContract,\n };\n}\n\nexport function generateNonce(): Hex {\n const bytes = new Uint8Array(32);\n globalThis.crypto.getRandomValues(bytes);\n return toHex(bytes);\n}\n\n// GToken EIP-712 domain constants (GTokenAuthorization v2.2.0)\nexport const GTOKEN_EIP712_DOMAIN = { name: 'GToken', version: '1' } as const;\n\nexport async function signTransferWithAuthorization(\n walletClient: WalletClient,\n params: {\n from: Address;\n to: Address;\n value: bigint;\n validAfter: bigint;\n validBefore: bigint;\n nonce: Hex;\n tokenName: string;\n tokenVersion: string;\n chainId: number;\n verifyingContract: Address;\n }\n): Promise<Hex> {\n const domain = getEIP3009Domain(\n params.tokenName,\n params.tokenVersion,\n params.chainId,\n params.verifyingContract\n );\n\n const account = walletClient.account;\n if (!account) {\n throw new Error('WalletClient must have an account');\n }\n\n return walletClient.signTypedData({\n account,\n domain,\n types: EIP3009_TYPES,\n primaryType: 'TransferWithAuthorization',\n message: {\n from: params.from,\n to: params.to,\n value: params.value,\n validAfter: params.validAfter,\n validBefore: params.validBefore,\n nonce: params.nonce,\n },\n });\n}\n\n/**\n * Sign a TransferWithAuthorization for GTokenAuthorization (EIP-3009).\n * GToken-specific wrapper: enforces MAX_AUTH_VALIDITY = 300s before signing.\n * Use this instead of the generic signTransferWithAuthorization when the\n * verifying contract is GTokenAuthorization.\n */\nexport async function signGTokenTransferWithAuthorization(\n walletClient: WalletClient,\n params: {\n from: Address;\n to: Address;\n value: bigint;\n validAfter: bigint;\n validBefore: bigint;\n nonce: Hex;\n tokenName: string;\n tokenVersion: string;\n chainId: number;\n verifyingContract: Address;\n }\n): Promise<Hex> {\n const account = walletClient.account;\n if (!account) {\n throw new Error('WalletClient must have an account');\n }\n if (account.address.toLowerCase() !== params.from.toLowerCase()) {\n throw new Error(`Signer ${account.address} does not match from ${params.from}`);\n }\n // GTokenAuthorization enforces MAX_AUTH_VALIDITY = 300s on-chain.\n if (params.validBefore <= params.validAfter) {\n throw new Error('validBefore must be greater than validAfter');\n }\n if (params.validBefore - params.validAfter > 300n) {\n throw new Error(\n `Authorization window ${params.validBefore - params.validAfter}s exceeds MAX_AUTH_VALIDITY (300s)`\n );\n }\n return signTransferWithAuthorization(walletClient, params);\n}\n\n/**\n * Sign a ReceiveWithAuthorization for GTokenAuthorization (EIP-3009).\n * The signed `to` address must be the one submitting the transaction on-chain.\n * Note: `xPNTsToken` is NOT included in the signature (it's a relay-supplied hint for RC-2).\n */\nexport async function signReceiveWithAuthorization(\n walletClient: WalletClient,\n params: {\n from: Address;\n to: Address;\n value: bigint;\n validAfter: bigint;\n validBefore: bigint;\n nonce: Hex;\n tokenName: string;\n tokenVersion: string;\n chainId: number;\n verifyingContract: Address;\n }\n): Promise<Hex> {\n const account = walletClient.account;\n if (!account) {\n throw new Error('WalletClient must have an account');\n }\n if (account.address.toLowerCase() !== params.from.toLowerCase()) {\n throw new Error(`Signer ${account.address} does not match from ${params.from}`);\n }\n // GTokenAuthorization enforces MAX_AUTH_VALIDITY = 300s on-chain (RC-1).\n if (params.validBefore <= params.validAfter) {\n throw new Error('validBefore must be greater than validAfter');\n }\n if (params.validBefore - params.validAfter > 300n) {\n throw new Error(\n `Authorization window ${params.validBefore - params.validAfter}s exceeds MAX_AUTH_VALIDITY (300s)`\n );\n }\n\n return walletClient.signTypedData({\n account,\n domain: getEIP3009Domain(params.tokenName, params.tokenVersion, params.chainId, params.verifyingContract),\n types: EIP3009_TYPES,\n primaryType: 'ReceiveWithAuthorization',\n message: {\n from: params.from,\n to: params.to,\n value: params.value,\n validAfter: params.validAfter,\n validBefore: params.validBefore,\n nonce: params.nonce,\n },\n });\n}\n\n/**\n * Sign a CancelAuthorization for GTokenAuthorization (EIP-3009).\n * Must be signed by the original `authorizer` address.\n */\nexport async function signCancelAuthorization(\n walletClient: WalletClient,\n params: {\n authorizer: Address;\n nonce: Hex;\n tokenName: string;\n tokenVersion: string;\n chainId: number;\n verifyingContract: Address;\n }\n): Promise<Hex> {\n const account = walletClient.account;\n if (!account) {\n throw new Error('WalletClient must have an account');\n }\n if (account.address.toLowerCase() !== params.authorizer.toLowerCase()) {\n throw new Error(`Signer ${account.address} does not match authorizer ${params.authorizer}`);\n }\n\n return walletClient.signTypedData({\n account,\n domain: getEIP3009Domain(params.tokenName, params.tokenVersion, params.chainId, params.verifyingContract),\n types: EIP3009_TYPES,\n primaryType: 'CancelAuthorization',\n message: {\n authorizer: params.authorizer,\n nonce: params.nonce,\n },\n });\n}\n","import type { PaymentRequired, PaymentPayload, SettleResponse } from './types.js';\n\n// ============================================================\n// x402 v2 HTTP Header Names\n// Ref: github.com/coinbase/x402/blob/main/specs/x402-specification-v2.md\n// ============================================================\n\n/** v2 header names (standard) */\nexport const HEADER_PAYMENT_REQUIRED = 'PAYMENT-REQUIRED';\nexport const HEADER_PAYMENT_SIGNATURE = 'PAYMENT-SIGNATURE';\nexport const HEADER_PAYMENT_RESPONSE = 'PAYMENT-RESPONSE';\n\n/** v1 header names (backward compat) */\nexport const HEADER_V1_PAYMENT = 'X-PAYMENT';\nexport const HEADER_V1_PAYMENT_RESPONSE = 'X-PAYMENT-RESPONSE';\n\n// ============================================================\n// Encoding / Decoding (Base64 JSON — per x402 spec)\n// ============================================================\n\nfunction toBase64(data: unknown): string {\n const json = JSON.stringify(data);\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(json).toString('base64');\n }\n return btoa(json);\n}\n\nfunction fromBase64<T>(encoded: string): T {\n let json: string;\n if (typeof Buffer !== 'undefined') {\n json = Buffer.from(encoded, 'base64').toString('utf-8');\n } else {\n json = atob(encoded);\n }\n return JSON.parse(json) as T;\n}\n\n// --- PaymentRequired (402 response) ---\n\nexport function encodePaymentRequired(req: PaymentRequired): string {\n return toBase64(req);\n}\n\nexport function decodePaymentRequired(encoded: string): PaymentRequired {\n return fromBase64<PaymentRequired>(encoded);\n}\n\n// --- PaymentPayload (client → server) ---\n\nexport function encodePaymentPayload(payload: PaymentPayload): string {\n return toBase64(payload);\n}\n\nexport function decodePaymentPayload(encoded: string): PaymentPayload {\n return fromBase64<PaymentPayload>(encoded);\n}\n\n// --- SettleResponse (server → client) ---\n\nexport function encodeSettleResponse(resp: SettleResponse): string {\n return toBase64(resp);\n}\n\nexport function decodeSettleResponse(encoded: string): SettleResponse {\n return fromBase64<SettleResponse>(encoded);\n}\n\n// ============================================================\n// Header Extraction Helpers\n// ============================================================\n\n/**\n * Extract PaymentRequired from a 402 Response.\n * Tries v2 header first, falls back to v1.\n */\nexport function extractPaymentRequired(response: Response): PaymentRequired | null {\n const v2 = response.headers.get(HEADER_PAYMENT_REQUIRED);\n if (v2) return decodePaymentRequired(v2);\n\n // v1 fallback: check body or X-PAYMENT-REQUIRED\n const v1 = response.headers.get('X-PAYMENT-REQUIRED');\n if (v1) return decodePaymentRequired(v1);\n\n return null;\n}\n\n/**\n * Extract SettleResponse from a successful response.\n */\nexport function extractSettleResponse(response: Response): SettleResponse | null {\n const v2 = response.headers.get(HEADER_PAYMENT_RESPONSE);\n if (v2) return decodeSettleResponse(v2);\n\n const v1 = response.headers.get(HEADER_V1_PAYMENT_RESPONSE);\n if (v1) return decodeSettleResponse(v1);\n\n return null;\n}\n","import type {\n PaymentPayload,\n PaymentRequirements,\n VerifyResponse,\n SettleResponse,\n FacilitatorSupported,\n FacilitatorConfig,\n} from './types.js';\n\n/**\n * HTTP Facilitator Client — standard x402 v2 facilitator API.\n * Compatible with Coinbase hosted facilitator and self-hosted instances.\n *\n * Ref: coinbase/x402 HTTPFacilitatorClient pattern\n */\nexport class FacilitatorClient {\n private readonly url: string;\n private readonly createAuthHeaders: FacilitatorConfig['createAuthHeaders'];\n\n constructor(config: FacilitatorConfig) {\n this.url = config.url.replace(/\\/$/, '');\n this.createAuthHeaders = config.createAuthHeaders;\n }\n\n private async getHeaders(endpoint: 'verify' | 'settle' | 'supported'): Promise<Record<string, string>> {\n const base: Record<string, string> = { 'Content-Type': 'application/json' };\n if (!this.createAuthHeaders) return base;\n const auth = await this.createAuthHeaders();\n return { ...base, ...auth[endpoint] };\n }\n\n /**\n * POST /verify — validate payment signature off-chain (~100ms).\n */\n async verify(\n paymentPayload: PaymentPayload,\n paymentRequirements: PaymentRequirements,\n ): Promise<VerifyResponse> {\n const resp = await fetch(`${this.url}/verify`, {\n method: 'POST',\n headers: await this.getHeaders('verify'),\n body: JSON.stringify({\n x402Version: 2,\n paymentPayload,\n paymentRequirements,\n }),\n });\n if (!resp.ok) {\n throw new Error(`Facilitator /verify failed: ${resp.status} ${await resp.text()}`);\n }\n return resp.json() as Promise<VerifyResponse>;\n }\n\n /**\n * POST /settle — execute on-chain settlement (~2s on Base).\n */\n async settle(\n paymentPayload: PaymentPayload,\n paymentRequirements: PaymentRequirements,\n ): Promise<SettleResponse> {\n const resp = await fetch(`${this.url}/settle`, {\n method: 'POST',\n headers: await this.getHeaders('settle'),\n body: JSON.stringify({\n x402Version: 2,\n paymentPayload,\n paymentRequirements,\n }),\n });\n if (!resp.ok) {\n throw new Error(`Facilitator /settle failed: ${resp.status} ${await resp.text()}`);\n }\n return resp.json() as Promise<SettleResponse>;\n }\n\n /**\n * GET /supported — query facilitator capabilities.\n */\n async supported(): Promise<FacilitatorSupported> {\n const resp = await fetch(`${this.url}/supported`, {\n method: 'GET',\n headers: await this.getHeaders('supported'),\n });\n if (!resp.ok) {\n throw new Error(`Facilitator /supported failed: ${resp.status} ${await resp.text()}`);\n }\n return resp.json() as Promise<FacilitatorSupported>;\n }\n}\n","import { type Address, type Hex, type Hash, type PublicClient, type WalletClient } from 'viem';\nimport { x402Actions } from '@aastar/core';\nimport type {\n X402PaymentParams, PaymentRequired, PaymentPayload,\n PaymentRequirements, SettleResponse, FacilitatorConfig,\n} from './types.js';\nimport { signTransferWithAuthorization, generateNonce } from './eip3009.js';\nimport {\n encodePaymentPayload,\n extractPaymentRequired,\n extractSettleResponse,\n HEADER_PAYMENT_SIGNATURE,\n} from './payment-header.js';\nimport { FacilitatorClient } from './facilitator.js';\n\n// ============================================================\n// x402 Client — aligned with @x402/fetch + @x402/core patterns\n// Ref: coinbase/x402, Cloudflare Workers x402, MPP mppx\n// ============================================================\n\nexport type X402ClientConfig = {\n publicClient: PublicClient;\n walletClient: WalletClient;\n superPaymasterAddress: Address;\n chainId: number;\n /** Facilitator endpoint (default: self-facilitated via SuperPaymaster) */\n facilitator?: FacilitatorConfig;\n /** EIP-712 domain for asset token (defaults: USDC / version \"2\") */\n tokenName?: string;\n tokenVersion?: string;\n /** Payment policy: max amount per request (in atomic units) */\n maxAmountPerRequest?: bigint;\n};\n\n/** CAIP-2 network identifier from chainId */\nfunction toNetworkId(chainId: number): `eip155:${number}` {\n return `eip155:${chainId}`;\n}\n\nexport class X402Client {\n private readonly actions;\n private readonly config: X402ClientConfig;\n private readonly facilitatorClient?: FacilitatorClient;\n\n constructor(config: X402ClientConfig) {\n if (!config.walletClient.account) {\n throw new Error('WalletClient must have an account configured');\n }\n this.config = config;\n // walletClient supports both readContract and writeContract — single instance suffices\n this.actions = x402Actions(config.superPaymasterAddress)(config.walletClient);\n if (config.facilitator) {\n this.facilitatorClient = new FacilitatorClient(config.facilitator);\n }\n }\n\n /**\n * Create a signed payment payload (EIP-3009 TransferWithAuthorization).\n * Returns a base64-encoded PaymentPayload ready for PAYMENT-SIGNATURE header.\n */\n async createPayment(params: X402PaymentParams): Promise<{\n payload: PaymentPayload;\n encoded: string;\n nonce: Hex;\n }> {\n const nonce = params.nonce || generateNonce();\n const now = BigInt(Math.floor(Date.now() / 1000));\n const validAfter = params.validAfter ?? (now - 600n); // 10 min grace (per x402 spec)\n const validBefore = params.validBefore ?? (now + 3600n);\n const tokenName = this.config.tokenName || 'USDC';\n const tokenVersion = this.config.tokenVersion || '2';\n\n const signature = await signTransferWithAuthorization(this.config.walletClient, {\n from: params.from,\n to: params.to,\n value: params.amount,\n validAfter,\n validBefore,\n nonce,\n tokenName,\n tokenVersion,\n chainId: this.config.chainId,\n verifyingContract: params.asset,\n });\n\n const payload: PaymentPayload = {\n x402Version: 2,\n accepted: {\n scheme: 'exact',\n network: toNetworkId(this.config.chainId),\n asset: params.asset,\n amount: params.amount.toString(),\n payTo: params.to,\n maxTimeoutSeconds: 3600,\n extra: { name: tokenName, version: tokenVersion },\n },\n payload: {\n signature,\n authorization: {\n from: params.from,\n to: params.to,\n value: params.amount.toString(),\n validAfter: validAfter.toString(),\n validBefore: validBefore.toString(),\n nonce,\n },\n },\n };\n\n return {\n payload,\n encoded: encodePaymentPayload(payload),\n nonce,\n };\n }\n\n /**\n * Settle payment on-chain via SuperPaymaster (self-facilitated).\n * Uses EIP-3009 transferWithAuthorization path.\n */\n async settleOnChain(params: {\n from: Address; to: Address; asset: Address; amount: bigint;\n validAfter: bigint; validBefore: bigint; nonce: Hex; signature: Hex;\n }): Promise<Hex> {\n return this.actions.settleX402Payment({\n ...params,\n account: this.config.walletClient.account!,\n });\n }\n\n /**\n * Settle payment on-chain via direct transfer (for xPNTs and pre-approved tokens).\n */\n async settleDirectOnChain(params: {\n from: Address; to: Address; asset: Address; amount: bigint; nonce: Hex;\n }): Promise<Hex> {\n return this.actions.settleX402PaymentDirect({\n ...params,\n account: this.config.walletClient.account!,\n });\n }\n\n /**\n * Get facilitator fee quote from on-chain contract.\n */\n async getQuote(): Promise<{ feeBPS: bigint }> {\n const feeBPS = await this.actions.facilitatorFeeBPS();\n return { feeBPS };\n }\n\n /**\n * Check if a nonce has been used.\n */\n async checkNonce(nonce: Hex): Promise<boolean> {\n return this.actions.x402SettlementNonces({ nonce });\n }\n\n /**\n * Settle via external facilitator (Coinbase, self-hosted, etc.).\n * Requires facilitator config in constructor.\n */\n async settleViaFacilitator(payload: PaymentPayload, requirements: PaymentRequirements): Promise<SettleResponse> {\n if (!this.facilitatorClient) {\n throw new Error('No facilitator configured. Pass facilitator config to X402Client constructor.');\n }\n return this.facilitatorClient.settle(payload, requirements);\n }\n\n /**\n * x402-aware fetch wrapper.\n * Automatically handles 402 → sign → retry flow per x402 v2 spec.\n *\n * Pattern from: @x402/fetch wrapFetchWithPayment\n *\n * Flow:\n * 1. Make initial request\n * 2. If 402, extract PaymentRequired from PAYMENT-REQUIRED header\n * 3. Select best payment option (applies policy: max amount check)\n * 4. Sign EIP-3009 authorization\n * 5. Retry with PAYMENT-SIGNATURE header\n */\n async x402Fetch(url: string, init?: RequestInit): Promise<Response> {\n const firstResponse = await fetch(url, init);\n\n if (firstResponse.status !== 402) {\n return firstResponse;\n }\n\n // Step 2: Extract payment requirements\n // TODO: some server implementations put PaymentRequired in the response body instead of headers\n const paymentRequired = extractPaymentRequired(firstResponse);\n if (!paymentRequired || !paymentRequired.accepts?.length) {\n throw new Error('402 response missing PAYMENT-REQUIRED header or empty accepts');\n }\n\n // Step 3: Select payment option (filter by network + policy)\n const myNetwork = toNetworkId(this.config.chainId);\n let selected = paymentRequired.accepts.find(\n (a) => a.network === myNetwork && a.scheme === 'exact'\n );\n if (!selected) {\n // Fallback: any EVM option\n selected = paymentRequired.accepts.find((a) => a.network.startsWith('eip155:'));\n }\n if (!selected) {\n throw new Error(`No compatible payment option for network ${myNetwork}`);\n }\n\n // Policy check: max amount\n if (this.config.maxAmountPerRequest && BigInt(selected.amount) > this.config.maxAmountPerRequest) {\n throw new Error(\n `Payment amount ${selected.amount} exceeds max ${this.config.maxAmountPerRequest}`\n );\n }\n\n const account = this.config.walletClient.account;\n if (!account) {\n throw new Error('WalletClient must have an account for automatic payment');\n }\n\n // Step 4: Sign\n const { encoded } = await this.createPayment({\n from: account.address,\n to: selected.payTo,\n asset: selected.asset as Address,\n amount: BigInt(selected.amount),\n });\n\n // Step 5: Retry with payment signature\n const retryHeaders = new Headers(init?.headers);\n retryHeaders.set(HEADER_PAYMENT_SIGNATURE, encoded);\n\n return fetch(url, { ...init, headers: retryHeaders });\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { BaseClient, registryActions, tokenActions, paymasterFactoryActions, PaymasterABI, superPaymasterActions, paymasterActions, dvtActions, aggregatorActions } from './chunk-TIH7D4FQ.js';
1
+ import { BaseClient, registryActions, tokenActions, paymasterFactoryActions, PaymasterABI, superPaymasterActions, paymasterActions, dvtActions, aggregatorActions } from './chunk-6QYXGMCR.js';
2
2
  import { parseEther } from 'viem';
3
3
 
4
4
  var PaymasterOperatorClient = class extends BaseClient {
@@ -23,7 +23,7 @@ var PaymasterOperatorClient = class extends BaseClient {
23
23
  * 2. Checks and approves GToken to GTokenStaking
24
24
  * 3. Registers ROLE_PAYMASTER_SUPER
25
25
  * 4. Optionally deposits collateral to SuperPaymaster
26
- *
26
+ *
27
27
  * @param params Registration parameters
28
28
  * @param options Transaction options
29
29
  * @returns Transaction hash of role registration
@@ -93,7 +93,7 @@ var PaymasterOperatorClient = class extends BaseClient {
93
93
  * 2. Predicts new Paymaster address
94
94
  * 3. Deploys Paymaster V4 via Factory
95
95
  * 4. Registers ROLE_PAYMASTER_AOA with staking
96
- *
96
+ *
97
97
  * @param params Deployment parameters
98
98
  * @param options Transaction options
99
99
  * @returns Object containing new paymaster address and transaction hashes
@@ -187,7 +187,10 @@ var PaymasterOperatorClient = class extends BaseClient {
187
187
  const { encodeAbiParameters, parseAbiParameters } = await import('viem');
188
188
  let roleData = "0x";
189
189
  if (stakeAmount > 0) {
190
- roleData = encodeAbiParameters(parseAbiParameters("uint256"), [stakeAmount]);
190
+ roleData = encodeAbiParameters(
191
+ parseAbiParameters("uint256"),
192
+ [stakeAmount]
193
+ );
191
194
  }
192
195
  const registerHash = await registry(this.client).registerRoleSelf({
193
196
  roleId: ROLE_PAYMASTER_AOA,
@@ -346,9 +349,8 @@ var PaymasterOperatorClient = class extends BaseClient {
346
349
  }
347
350
  };
348
351
 
349
- // ../operator/dist/ProtocolClient.js
350
- var ProposalState;
351
- (function(ProposalState2) {
352
+ // ../operator/src/ProtocolClient.ts
353
+ var ProposalState = /* @__PURE__ */ ((ProposalState2) => {
352
354
  ProposalState2[ProposalState2["Pending"] = 0] = "Pending";
353
355
  ProposalState2[ProposalState2["Active"] = 1] = "Active";
354
356
  ProposalState2[ProposalState2["Canceled"] = 2] = "Canceled";
@@ -357,7 +359,8 @@ var ProposalState;
357
359
  ProposalState2[ProposalState2["Queued"] = 5] = "Queued";
358
360
  ProposalState2[ProposalState2["Expired"] = 6] = "Expired";
359
361
  ProposalState2[ProposalState2["Executed"] = 7] = "Executed";
360
- })(ProposalState || (ProposalState = {}));
362
+ return ProposalState2;
363
+ })(ProposalState || {});
361
364
  var ProtocolClient = class extends BaseClient {
362
365
  dvtValidatorAddress;
363
366
  blsAggregatorAddress;
@@ -471,7 +474,7 @@ var ProtocolClient = class extends BaseClient {
471
474
  }
472
475
  };
473
476
 
474
- // ../operator/dist/OperatorLifecycle.js
477
+ // ../operator/src/OperatorLifecycle.ts
475
478
  var OperatorLifecycle = class extends PaymasterOperatorClient {
476
479
  constructor(config) {
477
480
  super(config);
@@ -506,7 +509,7 @@ var OperatorLifecycle = class extends PaymasterOperatorClient {
506
509
  depositAmount: params.depositAmount
507
510
  }, options);
508
511
  hashes.push(h);
509
- const factory = await import('./index.node-KIKM4EG6.js').then((m) => m.xPNTsFactoryActions(this.xpntsFactory)(this.getStartPublicClient()));
512
+ const factory = await import('./src-L5SI5WNB.js').then((m) => m.xPNTsFactoryActions(this.xpntsFactory)(this.getStartPublicClient()));
510
513
  const token = await factory.getTokenAddress({ community: this.getAddress() });
511
514
  if (token && token !== "0x0000000000000000000000000000000000000000") {
512
515
  const hConfig = await this.configureOperator(
@@ -566,13 +569,12 @@ var OperatorLifecycle = class extends PaymasterOperatorClient {
566
569
  }
567
570
  // Helper: Get GToken Balance
568
571
  async getTokenBalance() {
569
- if (!this.tokenAddress)
570
- return 0n;
572
+ if (!this.tokenAddress) return 0n;
571
573
  const token = tokenActions()(this.getStartPublicClient());
572
574
  return await token.balanceOf({ token: this.tokenAddress, account: this.getAddress() });
573
575
  }
574
576
  };
575
577
 
576
578
  export { OperatorLifecycle, PaymasterOperatorClient, ProposalState, ProtocolClient };
577
- //# sourceMappingURL=chunk-VYU6P7HB.js.map
578
- //# sourceMappingURL=chunk-VYU6P7HB.js.map
579
+ //# sourceMappingURL=chunk-BN5WY5GM.js.map
580
+ //# sourceMappingURL=chunk-BN5WY5GM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../operator/src/PaymasterOperatorClient.ts","../../operator/src/ProtocolClient.ts","../../operator/src/OperatorLifecycle.ts"],"names":["ProposalState"],"mappings":"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","file":"chunk-BN5WY5GM.js","sourcesContent":["import { type Address, type Hash, parseEther } from 'viem';\nimport { BaseClient, type ClientConfig, type TransactionOptions, PaymasterABI } from '@aastar/core';\nimport { superPaymasterActions, tokenActions, paymasterActions, registryActions, paymasterFactoryActions } from '@aastar/core';\n\nexport interface OperatorClientConfig extends ClientConfig {\n superPaymasterAddress: Address;\n tokenAddress?: Address;\n}\n\nexport interface SponsorshipPolicy {\n globalLimit: bigint;\n userLimit: bigint;\n itemPrice: bigint;\n // ... logic for encoding this into bytes/storage\n}\n\n/**\n * Client for Paymaster Operators (ROLE_PAYMASTER_SUPER)\n */\nexport class PaymasterOperatorClient extends BaseClient {\n public superPaymasterAddress: Address;\n public tokenAddress?: Address;\n public ethUsdPriceFeed: Address;\n public xpntsFactory: Address;\n\n constructor(config: OperatorClientConfig) {\n super(config);\n this.superPaymasterAddress = config.superPaymasterAddress;\n this.tokenAddress = config.tokenAddress;\n this.ethUsdPriceFeed = config.ethUsdPriceFeedAddress || '0x694AA1769357215DE4FAC081bf1f309aDC325306'; // Default Sepolia\n this.xpntsFactory = config.xpntsFactoryAddress || '0x0000000000000000000000000000000000000000'; // Should be provided\n }\n\n // ========================================\n // 0. 注册与入驻 (One-Stop Registration)\n // ========================================\n\n /**\n * Register as SuperPaymaster Operator (one-stop API).\n * This method handles all necessary steps:\n * 1. Checks prerequisites (must have ROLE_COMMUNITY)\n * 2. Checks and approves GToken to GTokenStaking\n * 3. Registers ROLE_PAYMASTER_SUPER\n * 4. Optionally deposits collateral to SuperPaymaster\n * \n * @param params Registration parameters\n * @param options Transaction options\n * @returns Transaction hash of role registration\n */\n async registerAsSuperPaymasterOperator(params?: {\n stakeAmount?: bigint; // Optional, defaults to 50 GToken (Registry requirement)\n depositAmount?: bigint; // Optional initial deposit to SuperPaymaster\n }, options?: TransactionOptions): Promise<Hash> {\n try {\n const registryAddr = this.requireRegistry();\n const gTokenAddr = this.requireGToken();\n const gTokenStakingAddr = this.requireGTokenStaking();\n \n const registry = registryActions(registryAddr);\n const gToken = tokenActions();\n const publicClient = this.getStartPublicClient();\n \n // 1. Check prerequisites\n const ROLE_COMMUNITY = await registry(publicClient).ROLE_COMMUNITY();\n const hasCommunity = await registry(publicClient).hasRole({\n user: this.getAddress(),\n roleId: ROLE_COMMUNITY\n });\n \n if (!hasCommunity) {\n throw new Error('Must have ROLE_COMMUNITY before registering as SuperPaymaster operator');\n }\n \n // 2. Check if already has role\n const ROLE_PAYMASTER_SUPER = await registry(publicClient).ROLE_PAYMASTER_SUPER();\n const hasSuper = await registry(publicClient).hasRole({\n user: this.getAddress(),\n roleId: ROLE_PAYMASTER_SUPER\n });\n \n if (hasSuper) {\n // Still handle deposit if requested\n if (params?.depositAmount) {\n return this.depositCollateral(params.depositAmount, options);\n }\n throw new Error('Already registered as SuperPaymaster operator');\n }\n \n // 3. Prepare stake amount (default 50 GToken as per Registry config)\n const stakeAmount = params?.stakeAmount || parseEther('50');\n \n // 4. Check and approve GToken to GTokenStaking\n const allowance = await gToken(publicClient).allowance({\n token: gTokenAddr,\n owner: this.getAddress(),\n spender: gTokenStakingAddr\n });\n \n if (allowance < stakeAmount) {\n const approveHash = await gToken(this.client).approve({\n token: gTokenAddr,\n spender: gTokenStakingAddr,\n amount: stakeAmount * 2n, // Approve 2x for future use\n account: options?.account\n });\n await (publicClient as any).waitForTransactionReceipt({ hash: approveHash });\n }\n \n // 5. Register ROLE_PAYMASTER_SUPER\n const registerHash = await registry(this.client).registerRoleSelf({\n roleId: ROLE_PAYMASTER_SUPER,\n data: '0x', // SuperPaymaster role doesn't need special data\n account: options?.account\n });\n \n // Wait for registration to complete\n await (publicClient as any).waitForTransactionReceipt({ hash: registerHash });\n \n // 6. Optional: Deposit collateral to SuperPaymaster\n if (params?.depositAmount) {\n await this.depositCollateral(params.depositAmount, options);\n }\n \n return registerHash;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Deploy a new Paymaster V4 and Register as AOA Operator (one-stop API).\n * This method handles:\n * 1. Checks prerequisites (ROLE_COMMUNITY)\n * 2. Predicts new Paymaster address\n * 3. Deploys Paymaster V4 via Factory\n * 4. Registers ROLE_PAYMASTER_AOA with staking\n * \n * @param params Deployment parameters\n * @param options Transaction options\n * @returns Object containing new paymaster address and transaction hashes\n */\n async deployAndRegisterPaymasterV4(params?: {\n stakeAmount?: bigint; // Optional, defaults to 30 GToken (Registry requirement for AOA)\n version?: string; // Optional, defaults to Factory default or V4.0.0\n salt?: bigint; // Optional, for deterministic deployment\n priceFeed?: Address;\n }, options?: TransactionOptions): Promise<{ \n paymasterAddress: Address; \n deployHash: Hash; \n registerHash: Hash;\n }> {\n try {\n const registryAddr = this.requireRegistry();\n const gTokenAddr = this.requireGToken();\n const gTokenStakingAddr = this.requireGTokenStaking();\n const factoryAddr = this.requirePaymasterFactory();\n \n const registry = registryActions(registryAddr);\n const gToken = tokenActions();\n const factory = paymasterFactoryActions(factoryAddr);\n const publicClient = this.getStartPublicClient();\n \n const account = options?.account || this.client.account || this.getAddress();\n const accountAddr = typeof account === 'string' ? account : account.address;\n\n // 1. Check prerequisites (ROLE_COMMUNITY)\n const ROLE_COMMUNITY = await registry(publicClient).ROLE_COMMUNITY();\n const hasCommunity = await registry(publicClient).hasRole({\n user: accountAddr,\n roleId: ROLE_COMMUNITY\n });\n \n if (!hasCommunity) {\n throw new Error('Must have ROLE_COMMUNITY before deploying Paymaster V4');\n }\n\n // 2. Deployment (Idempotent Check)\n const existingPaymaster = await factory(publicClient).getPaymaster({ owner: accountAddr });\n let deployHash: Hash = '0x0000000000000000000000000000000000000000000000000000000000000000';\n let paymasterAddress: Address;\n\n if (existingPaymaster && existingPaymaster !== '0x0000000000000000000000000000000000000000') {\n console.log(` ℹ️ Paymaster already deployed at: ${existingPaymaster}`);\n paymasterAddress = existingPaymaster;\n } else {\n console.log(' 🛠️ Deploying Paymaster V4 with args:', {\n entryPoint: this.requireEntryPoint(),\n owner: accountAddr,\n priceFeed: this.ethUsdPriceFeed,\n factory: factoryAddr\n });\n\n const { encodeFunctionData } = await import('viem');\n const initData = encodeFunctionData({\n abi: PaymasterABI,\n functionName: 'initialize',\n args: [\n this.requireEntryPoint(), // EntryPoint v0.7\n accountAddr,\n accountAddr, // Treasury defaults to owner\n this.ethUsdPriceFeed,\n 200n, // serviceFeeRate (2%)\n parseEther('0.1'), // maxGasCostCap\n 3600n // priceStalenessThreshold (1 hour)\n ]\n });\n\n deployHash = await factory(this.client).deployPaymaster({\n version: params?.version, \n initData,\n account\n });\n \n await (publicClient as any).waitForTransactionReceipt({ hash: deployHash });\n \n paymasterAddress = await factory(publicClient).getPaymaster({ owner: accountAddr });\n }\n \n if (!paymasterAddress || paymasterAddress === '0x0000000000000000000000000000000000000000') {\n throw new Error('Failed to retrieve Paymaster address from Factory');\n }\n\n // 3. Register ROLE_PAYMASTER_AOA\n const ROLE_PAYMASTER_AOA = await registry(publicClient).ROLE_PAYMASTER_AOA();\n const hasAOA = await registry(publicClient).hasRole({\n user: accountAddr,\n roleId: ROLE_PAYMASTER_AOA\n });\n\n if (hasAOA) {\n return { paymasterAddress, deployHash, registerHash: '0x0000000000000000000000000000000000000000000000000000000000000000' };\n }\n\n const stakeAmount = params?.stakeAmount || parseEther('30');\n \n const allowance = await gToken(publicClient).allowance({\n token: gTokenAddr,\n owner: accountAddr,\n spender: gTokenStakingAddr\n });\n \n if (allowance < stakeAmount) {\n const approveHash = await gToken(this.client).approve({\n token: gTokenAddr,\n spender: gTokenStakingAddr,\n amount: stakeAmount * 2n,\n account: account\n });\n await (publicClient as any).waitForTransactionReceipt({ hash: approveHash });\n }\n\n const { encodeAbiParameters, parseAbiParameters } = await import('viem');\n let roleData: Hash = '0x';\n if (stakeAmount > 0) {\n roleData = encodeAbiParameters(\n parseAbiParameters('uint256'),\n [stakeAmount]\n ) as Hash;\n }\n\n const registerHash = await registry(this.client).registerRoleSelf({\n roleId: ROLE_PAYMASTER_AOA,\n data: roleData,\n account: account\n });\n \n await (publicClient as any).waitForTransactionReceipt({ hash: registerHash });\n\n return {\n paymasterAddress,\n deployHash,\n registerHash\n };\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Deposit collateral (aPNTs/GToken) to SuperPaymaster.\n * This is a helper method used by registerAsSuperPaymasterOperator.\n */\n async depositCollateral(amount: bigint, options?: TransactionOptions): Promise<Hash> {\n try {\n const pm = superPaymasterActions(this.superPaymasterAddress);\n const publicClient = this.getStartPublicClient();\n \n // V3.7: Dynamically fetch the token expected by SuperPaymaster\n const depositToken = await pm(publicClient).APNTS_TOKEN();\n const token = tokenActions();\n \n // Approve SuperPaymaster to spend the token (usually aPNTs on Sepolia)\n const allowance = await token(publicClient).allowance({\n token: depositToken,\n owner: this.getAddress(),\n spender: this.superPaymasterAddress\n });\n \n if (allowance < amount) {\n const approveHash = await token(this.client).approve({\n token: depositToken,\n spender: this.superPaymasterAddress,\n amount,\n account: options?.account\n });\n await (publicClient as any).waitForTransactionReceipt({ hash: approveHash });\n }\n \n // Deposit to SuperPaymaster\n return pm(this.client).deposit({\n amount,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Configure operator parameters (Token, Treasury).\n * Exchange rate is now read live from xPNTsToken.exchangeRate() at runtime.\n * If parameters are undefined, existing values are preserved.\n */\n async configureOperator(\n xPNTsToken?: Address,\n treasury?: Address,\n options?: TransactionOptions\n ): Promise<Hash> {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n const publicClient = this.getStartPublicClient();\n\n // Fetch current config to preserve missing values\n const currentConfig = await sp(publicClient).operators({ operator: this.getAddress() });\n\n const currentToken = currentConfig.xPNTsToken;\n const currentTreasury = currentConfig.treasury;\n\n return await sp(this.client).configureOperator({\n xPNTsToken: xPNTsToken || currentToken,\n opTreasury: treasury || currentTreasury,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async withdrawCollateral(to: Address, amount: bigint, options?: TransactionOptions): Promise<Hash> {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.client).withdrawTo({\n to,\n amount,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async isOperator(operator: Address): Promise<boolean> {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n const config = await sp(this.getStartPublicClient()).operators({ operator });\n return config.isConfigured;\n } catch (error) {\n return false;\n }\n }\n\n async getOperatorDetails(operator?: Address): Promise<any> {\n try {\n const target = operator || this.getAddress();\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.getStartPublicClient()).operators({ operator: target });\n } catch (error) {\n throw error;\n }\n }\n\n async initiateExit(options?: TransactionOptions): Promise<Hash> {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.client).unlockStake({\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async withdrawStake(to: Address, options?: TransactionOptions): Promise<Hash> {\n try {\n const sp = superPaymasterActions(this.superPaymasterAddress);\n return await sp(this.client).withdrawStake({\n to,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n // ========================================\n // 3. 支付代币管理 (基于 PaymasterActions)\n // ========================================\n\n async addGasToken(token: Address, price: bigint, options?: TransactionOptions): Promise<Hash> {\n try {\n const pm = paymasterActions(this.superPaymasterAddress);\n return await pm(this.client).setTokenPrice({\n token,\n price,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async getTokenPrice(token: Address): Promise<bigint> {\n try {\n const pm = paymasterActions(this.superPaymasterAddress);\n return await pm(this.getStartPublicClient()).tokenPrices({ token });\n } catch (error) {\n throw error;\n }\n }\n\n async setupPaymasterDeposit(params: {\n paymaster: Address;\n user: Address;\n token: Address;\n amount: bigint;\n }, options?: TransactionOptions): Promise<Hash> {\n try {\n const pm = paymasterActions(params.paymaster);\n return await pm(this.client).depositFor({\n user: params.user,\n token: params.token,\n amount: params.amount,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n}\n","import { type Address, type Hash, type Hex } from 'viem';\nimport { BaseClient, type ClientConfig, type TransactionOptions } from '@aastar/core';\nimport { dvtActions, aggregatorActions, superPaymasterActions } from '@aastar/core';\n\nexport interface ProtocolClientConfig extends ClientConfig {\n dvtValidatorAddress: Address; // The DVT Validator contract (Governance)\n blsAggregatorAddress?: Address; // Optional BLS Aggregator\n superPaymasterAddress?: Address; // For Global Params\n}\n\nexport enum ProposalState {\n Pending = 0,\n Active = 1,\n Canceled = 2,\n Defeated = 3,\n Succeeded = 4,\n Queued = 5,\n Expired = 6,\n Executed = 7\n}\n\n/**\n * Client for Protocol Governors and Validators (Infrastructure)\n */\nexport class ProtocolClient extends BaseClient {\n public dvtValidatorAddress: Address;\n public blsAggregatorAddress?: Address;\n public superPaymasterAddress?: Address;\n\n constructor(config: ProtocolClientConfig) {\n super(config);\n this.dvtValidatorAddress = config.dvtValidatorAddress;\n this.blsAggregatorAddress = config.blsAggregatorAddress;\n this.superPaymasterAddress = config.superPaymasterAddress;\n }\n\n // ========================================\n // 1. 提案管理 (DVT)\n // ========================================\n\n /**\n * Create a new proposal\n */\n async createProposal(target: Address, calldata: Hex, description: string, options?: TransactionOptions): Promise<Hash> {\n try {\n const dvt = dvtActions(this.dvtValidatorAddress)(this.client);\n \n // Mapping general \"createProposal\" to \"createSlashProposal\" for now\n // Assuming Governance uses Validator logic or this Client is for Slash.\n // Using createSlashProposal as the available action.\n return await dvt.createSlashProposal({\n operator: target,\n level: 1, // Default level\n reason: description,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async signProposal(proposalId: bigint, signature: Hex = '0x', options?: TransactionOptions): Promise<Hash> {\n try {\n const dvt = dvtActions(this.dvtValidatorAddress)(this.client);\n return await dvt.signSlashProposal({\n proposalId,\n signature,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Execute a proposal with collected signatures\n */\n async executeWithProof(proposalId: bigint, signatures: Hex[], options?: TransactionOptions): Promise<Hash> {\n try {\n // Mock proof generation logic or placeholder\n const proof = '0x' as Hex; \n const dvt = dvtActions(this.dvtValidatorAddress)(this.client);\n \n return await dvt.executeSlashWithProof({\n proposalId,\n repUsers: [], // Needs real data in production\n newScores: [],\n epoch: 0n,\n proof,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n // ========================================\n // 2. 验证器管理 / BLS\n // ========================================\n\n async registerBLSKey(publicKey: Hex, options?: TransactionOptions): Promise<Hash> {\n try {\n if (!this.blsAggregatorAddress) {\n throw new Error('BLS Aggregator address required for this client');\n }\n // Aggregator actions now handle the type internally or via mapping\n const agg = aggregatorActions(this.blsAggregatorAddress)(this.client);\n \n return await agg.registerBLSPublicKey({\n validator: this.getAddress(),\n publicKey,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n // ========================================\n // 3. 全局参数管理 (Admin)\n // ========================================\n\n async setProtocolFee(bps: bigint, options?: TransactionOptions): Promise<Hash> {\n try {\n if (!this.superPaymasterAddress) {\n throw new Error('SuperPaymaster address required for this client');\n }\n const sp = superPaymasterActions(this.superPaymasterAddress);\n \n return await sp(this.client).setProtocolFee({\n newFeeBPS: bps,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n\n async setTreasury(treasury: Address, options?: TransactionOptions): Promise<Hash> {\n try {\n if (!this.superPaymasterAddress) {\n throw new Error('SuperPaymaster address required for this client');\n }\n const sp = superPaymasterActions(this.superPaymasterAddress);\n \n return await sp(this.client).setTreasury({\n treasury,\n account: options?.account\n });\n } catch (error) {\n throw error;\n }\n }\n}\n","import { type Address, type Hash, type Hex, parseEther } from 'viem';\nimport { type TransactionOptions } from '@aastar/core';\nimport { PaymasterOperatorClient, type OperatorClientConfig } from './PaymasterOperatorClient.js';\nimport { tokenActions, registryActions } from '@aastar/core'; // L2/L1 Actions\n\nexport interface OperatorStatus {\n isConfigured: boolean;\n isActive: boolean;\n balance: bigint;\n}\n\n/**\n * OperatorLifecycle - L3 Pattern\n * \n * Responsibilities:\n * 1. Managing the complete lifecycle of a Paymaster Operator\n * 2. Unifying setup (onboard), operation (config), and exit (withdraw)\n */\nexport class OperatorLifecycle extends PaymasterOperatorClient {\n\n constructor(config: OperatorClientConfig) {\n super(config);\n }\n\n // ===========================================\n // 1. Setup Phase (Onboarding)\n // ===========================================\n\n /**\n * Check if the account is ready to become an operator\n * (e.g., has GToken, has ROLE_COMMUNITY, etc.)\n */\n async checkReadiness(): Promise<OperatorStatus> {\n const isOp = await this.isOperator(this.getAddress());\n // For SuperPaymaster, balance is 'aPNTsBalance' (Collateral)\n const details = await this.getOperatorDetails();\n const balance = details.aPNTsBalance || 0n;\n \n return {\n isConfigured: isOp,\n isActive: isOp, // Simplification\n balance\n };\n }\n\n /**\n * One-click Setup: Register + Deposit + Deploy Node\n * Wraps existing registerAsSuperPaymasterOperator or deployAndRegisterPaymasterV4\n */\n async setupNode(params: {\n type: 'V4' | 'SUPER';\n stakeAmount?: bigint;\n depositAmount?: bigint;\n }, options?: TransactionOptions): Promise<Hash[]> {\n const hashes: Hash[] = [];\n\n if (params.type === 'SUPER') {\n const h = await this.registerAsSuperPaymasterOperator({\n stakeAmount: params.stakeAmount,\n depositAmount: params.depositAmount\n }, options);\n hashes.push(h);\n\n // Fetch Token Address and Configure\n const factory = await import('@aastar/core').then(m => m.xPNTsFactoryActions(this.xpntsFactory!)(this.getStartPublicClient()));\n const token = await factory.getTokenAddress({ community: this.getAddress() });\n \n if (token && token !== '0x0000000000000000000000000000000000000000') {\n const hConfig = await this.configureOperator(\n token,\n this.getAddress(), // Default treasury to self\n options\n );\n hashes.push(hConfig);\n }\n } else {\n const result = await this.deployAndRegisterPaymasterV4({\n stakeAmount: params.stakeAmount\n }, options);\n hashes.push(result.deployHash);\n hashes.push(result.registerHash);\n }\n\n return hashes;\n }\n\n // ===========================================\n // 2. Operational Phase (Config & Funds)\n // ===========================================\n\n // Inherits: addGasToken, configureOperator, depositCollateral from PaymasterOperatorClient\n\n async getOperatorStats(): Promise<any> {\n return await this.getOperatorDetails();\n }\n\n // ===========================================\n // 3. Exit Phase (Withdraw & Leave)\n // ===========================================\n\n /**\n * Start the exit process: Unstake from Registry/SuperPaymaster and Unlock funds\n */\n async initiateExit(options?: TransactionOptions): Promise<Hash> {\n // 1. Unlock Stake from SuperPaymaster (if applicable)\n return await super.initiateExit(options);\n }\n\n /**\n * Finalize exit: Withdraw all funds (Collateral + Rewards)\n */\n async withdrawAllFunds(to?: Address, options?: TransactionOptions): Promise<Hash[]> {\n const recipient = to || this.getAddress();\n const hashes: Hash[] = [];\n\n // 1. Withdraw Collateral from SuperPaymaster (if any)\n // Note: We need to know the balance to withdraw exact amount.\n // For current L3 pattern, we assume the user tracks it or we fetch it.\n const stats = await this.checkReadiness();\n if (stats.balance > 0n) {\n const hCol = await this.withdrawCollateral(recipient, stats.balance, options);\n hashes.push(hCol);\n }\n\n // 2. Exit Role in Registry (Unstake GToken)\n // This will fail if lock duration > 0 and not yet cooldown.\n // Or it will initiate cooldown.\n const client = this.getStartPublicClient();\n const registry = registryActions(this.registryAddress as Address); // Use local registry address\n const registryWriter = registryActions(this.registryAddress as Address)(this.client);\n \n // Check if we have the role\n // For Super Operator\n const ROLE_PAYMASTER_SUPER = await registry(client).ROLE_PAYMASTER_SUPER();\n const hasRole = await registry(client).hasRole({ user: this.getAddress(), roleId: ROLE_PAYMASTER_SUPER });\n \n if (hasRole) {\n const hExit = await registryWriter.exitRole({ roleId: ROLE_PAYMASTER_SUPER, account: options?.account });\n hashes.push(hExit);\n }\n\n return hashes;\n }\n\n // Helper: Get GToken Balance\n private async getTokenBalance(): Promise<bigint> {\n if (!this.tokenAddress) return 0n;\n const token = tokenActions()(this.getStartPublicClient());\n return await token.balanceOf({ token: this.tokenAddress, account: this.getAddress() });\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
- import { BaseClient, registryActions } from './chunk-TIH7D4FQ.js';
1
+ import { BaseClient, registryActions } from './chunk-6QYXGMCR.js';
2
2
 
3
- // ../admin/dist/ProtocolGovernance.js
3
+ // ../admin/src/ProtocolGovernance.ts
4
4
  var ProtocolGovernance = class extends BaseClient {
5
5
  registryAddress;
6
6
  entryPointAddress;
@@ -102,5 +102,5 @@ var ProtocolGovernance = class extends BaseClient {
102
102
  };
103
103
 
104
104
  export { ProtocolGovernance };
105
- //# sourceMappingURL=chunk-ZFIKBDBT.js.map
106
- //# sourceMappingURL=chunk-ZFIKBDBT.js.map
105
+ //# sourceMappingURL=chunk-FJ7XECC5.js.map
106
+ //# sourceMappingURL=chunk-FJ7XECC5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../admin/src/ProtocolGovernance.ts"],"names":[],"mappings":"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","file":"chunk-FJ7XECC5.js","sourcesContent":["import { type Address, type Hash, type Hex } from 'viem';\nimport { BaseClient, type ClientConfig, type TransactionOptions } from '@aastar/core';\nimport { registryActions, entryPointActions } from '@aastar/core'; // L2/L1 Actions\n\nexport interface ProtocolParams {\n minStake: bigint;\n treasury: Address;\n entryPoint: Address;\n superPaymaster: Address;\n}\n\n/**\n * ProtocolGovernance - L3 Pattern\n * \n * Responsibilities:\n * 1. Global Protocol Parameter Management (Registry, EntryPoint)\n * 2. High-level Governance Operations (DAO Transfer, Upgrades)\n * 3. SuperPaymaster & Module Approval\n */\nexport class ProtocolGovernance extends BaseClient {\n public registryAddress: Address;\n public entryPointAddress: Address;\n\n constructor(config: ClientConfig & { \n registryAddress: Address; \n entryPointAddress: Address \n }) {\n super(config);\n this.registryAddress = config.registryAddress;\n this.entryPointAddress = config.entryPointAddress;\n }\n\n // ===========================================\n // 1. Global Parameter Management\n // ===========================================\n\n /**\n * Update the Global Treasury Address where protocol fees are collected\n */\n async setTreasury(treasury: Address, options?: TransactionOptions): Promise<Hash> {\n // Note: Registry might not have direct setTreasury if it relies on SuperPaymaster's config.\n // Assuming Registry has ownership pointers or config pointers.\n // If Logic resides in SuperPaymaster, we would use superPaymasterActions.\n // Based on provided ABI/Actions, Registry manages Role Configs mainly.\n // Let's assume we are updating a System Role or similar global config if available,\n // OR adhering to what registryActions provides.\n \n // Checking registryActions... it has 'transferOwnership' but maybe not direct 'setTreasury' depending on version.\n // If strictly following ABI, we might need to update a specific Role Parameter (e.g. AOA/Super config).\n \n throw new Error(\"Method not mapped to RegistryABI v1. Please verify contract capabilities.\");\n }\n\n /**\n * Update the supported EntryPoint address\n */\n async updateEntryPoint(entryPoint: Address, options?: TransactionOptions): Promise<Hash> {\n // Placeholder: Real implementation depends on if Registry stores EntryPoint\n // registryActions typically provides getters. Setters usually restricted to Owner.\n // If action not available, throw standard error.\n throw new Error(\"Method not mapped to RegistryABI v1.\");\n }\n\n // ===========================================\n // 2. Role & Module Governance\n // ===========================================\n\n /**\n * Approve a new SuperPaymaster contract address\n */\n async setSuperPaymaster(paymaster: Address, options?: TransactionOptions): Promise<Hash> {\n const registry = registryActions(this.registryAddress);\n return await registry(this.client).setSuperPaymaster({\n paymaster,\n account: options?.account\n });\n }\n\n /**\n * Set the Staking contract address\n */\n async setStaking(staking: Address, options?: TransactionOptions): Promise<Hash> {\n const registry = registryActions(this.registryAddress);\n return await registry(this.client).setStaking({\n staking,\n account: options?.account\n });\n }\n\n /**\n * Configure a Role's parameters (Admin only).\n * Reads the current on-chain config first, then merges the provided overrides\n * and writes back the full struct via configureRole.\n */\n async configureRole(params: {\n roleId: Hex;\n minStake?: bigint;\n ticketPrice?: bigint;\n exitFeePercent?: bigint;\n minExitFee?: bigint;\n }, options?: TransactionOptions): Promise<Hash> {\n const registry = registryActions(this.registryAddress)(this.client);\n const current = await registry.getRoleConfig({ roleId: params.roleId });\n return await (registry as any).configureRole({\n roleId: params.roleId,\n config: {\n ...current,\n ...(params.minStake !== undefined && { minStake: params.minStake }),\n ...(params.ticketPrice !== undefined && { ticketPrice: params.ticketPrice }),\n ...(params.exitFeePercent !== undefined && { exitFeePercent: params.exitFeePercent }),\n ...(params.minExitFee !== undefined && { minExitFee: params.minExitFee }),\n },\n account: options?.account,\n });\n }\n\n // ===========================================\n // 3. Transfer to DAO (Exit/Upgrade)\n // ===========================================\n\n /**\n * Transfer Protocol Ownership to a DAO (Multisig/Timelock)\n * This is the final step of \"Protocol Admin\" lifecycle.\n */\n async transferToDAO(daoAddress: Address, options?: TransactionOptions): Promise<Hash> {\n const registry = registryActions(this.registryAddress);\n return await registry(this.client).transferOwnership({\n newOwner: daoAddress,\n account: options?.account\n });\n }\n\n // ===========================================\n // 4. Query Capabilities\n // ===========================================\n\n async getProtocolParams(): Promise<ProtocolParams> {\n const registry = registryActions(this.registryAddress)(this.client); // Read-only via Client\n \n // Parallel fetch\n const [sp, staking] = await Promise.all([\n registry.SUPER_PAYMASTER(),\n registry.GTOKEN_STAKING()\n ]);\n\n return {\n minStake: 0n, // Global default not directly exposed, usually per role\n treasury: await registry.owner(), // Approximation for now\n entryPoint: this.entryPointAddress,\n superPaymaster: sp\n };\n }\n}\n"]}