@rhinestone/sdk 1.4.0 → 1.4.2

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 (53) hide show
  1. package/dist/src/accounts/index.d.ts +1 -0
  2. package/dist/src/accounts/index.d.ts.map +1 -1
  3. package/dist/src/accounts/index.js +8 -2
  4. package/dist/src/accounts/json-rpc/providers.js +1 -1
  5. package/dist/src/accounts/safe.d.ts.map +1 -1
  6. package/dist/src/accounts/safe.js +4 -1
  7. package/dist/src/accounts/safe.test.js +50 -0
  8. package/dist/src/actions/recovery.test.js +1 -1
  9. package/dist/src/execution/signing.test.d.ts +2 -0
  10. package/dist/src/execution/signing.test.d.ts.map +1 -0
  11. package/dist/src/execution/signing.test.js +465 -0
  12. package/dist/src/execution/utils.d.ts +1 -0
  13. package/dist/src/execution/utils.d.ts.map +1 -1
  14. package/dist/src/execution/utils.js +76 -7
  15. package/dist/src/execution/utils.test.js +183 -0
  16. package/dist/src/index.d.ts +2 -2
  17. package/dist/src/index.d.ts.map +1 -1
  18. package/dist/src/modules/validators/index.d.ts +2 -2
  19. package/dist/src/modules/validators/index.d.ts.map +1 -1
  20. package/dist/src/modules/validators/index.js +4 -1
  21. package/dist/src/modules/validators/policies/claim/permit2.d.ts +55 -0
  22. package/dist/src/modules/validators/policies/claim/permit2.d.ts.map +1 -0
  23. package/dist/src/modules/validators/policies/claim/permit2.js +239 -0
  24. package/dist/src/modules/validators/policies/claim/permit2.test.d.ts +2 -0
  25. package/dist/src/modules/validators/policies/claim/permit2.test.d.ts.map +1 -0
  26. package/dist/src/modules/validators/policies/claim/permit2.test.js +519 -0
  27. package/dist/src/modules/validators/policies/claim/types.d.ts +12 -0
  28. package/dist/src/modules/validators/policies/claim/types.d.ts.map +1 -0
  29. package/dist/src/modules/validators/policies/claim/types.js +18 -0
  30. package/dist/src/modules/validators/smart-sessions.d.ts +14 -3
  31. package/dist/src/modules/validators/smart-sessions.d.ts.map +1 -1
  32. package/dist/src/modules/validators/smart-sessions.js +51 -16
  33. package/dist/src/modules/validators/smart-sessions.test.js +266 -16
  34. package/dist/src/orchestrator/client.d.ts.map +1 -1
  35. package/dist/src/orchestrator/client.js +1 -0
  36. package/dist/src/orchestrator/consts.d.ts +3 -2
  37. package/dist/src/orchestrator/consts.d.ts.map +1 -1
  38. package/dist/src/orchestrator/consts.js +4 -2
  39. package/dist/src/orchestrator/index.d.ts +2 -2
  40. package/dist/src/orchestrator/index.d.ts.map +1 -1
  41. package/dist/src/orchestrator/registry.d.ts.map +1 -1
  42. package/dist/src/orchestrator/registry.js +5 -1
  43. package/dist/src/orchestrator/types.d.ts +1 -0
  44. package/dist/src/orchestrator/types.d.ts.map +1 -1
  45. package/dist/src/types.d.ts +38 -1
  46. package/dist/src/types.d.ts.map +1 -1
  47. package/dist/src/utils/index.d.ts +3 -9
  48. package/dist/src/utils/index.d.ts.map +1 -1
  49. package/dist/src/utils/index.test.d.ts +2 -0
  50. package/dist/src/utils/index.test.d.ts.map +1 -0
  51. package/dist/src/utils/index.test.js +42 -0
  52. package/dist/test/utils/utils.js +1 -1
  53. package/package.json +2 -2
@@ -39,6 +39,7 @@ declare function getTypedDataPackedSignature<typedData extends TypedData | Recor
39
39
  declare function isDeployed(config: RhinestoneConfig, chain: Chain): Promise<boolean>;
40
40
  declare function deploy(config: RhinestoneConfig, chain: Chain, params?: {
41
41
  sponsored?: boolean;
42
+ eip7702InitSignature?: Hex;
42
43
  }): Promise<boolean>;
43
44
  declare function setup(config: RhinestoneConfig, chain: Chain): Promise<boolean>;
44
45
  declare function toErc6492Signature(config: RhinestoneConfig, signature: Hex, chain: Chain): Promise<Hex>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../accounts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,KAAK,EAKV,KAAK,uBAAuB,EAC5B,KAAK,GAAG,EAER,KAAK,YAAY,EAEjB,KAAK,SAAS,EAGf,MAAM,MAAM,CAAA;AAUb,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAA;AACpF,OAAO,KAAK,EACV,qBAAqB,EACrB,IAAI,EACJ,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACV,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,qCAAqC,EACrC,YAAY,EACZ,6BAA6B,EAC7B,8BAA8B,EAC9B,kCAAkC,EAClC,8BAA8B,EAC9B,kCAAkC,EAClC,2BAA2B,EAC3B,wCAAwC,EACxC,4BAA4B,EAC5B,cAAc,EACd,mCAAmC,EACnC,wBAAwB,EACxB,kCAAkC,EAClC,4BAA4B,EAC5B,mCAAmC,EACpC,MAAM,SAAS,CAAA;AAkDhB,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,SAAS,CAAA;AAEhB,KAAK,iBAAiB,GAAG,SAAS,GAAG,wBAAwB,CAAA;AA8C7D,iBAAS,WAAW,CAAC,MAAM,EAAE,gBAAgB;;;;;cAkB5C;AAED,iBAAS,aAAa,CAAC,MAAM,EAAE,gBAAgB;;;;;cAkB9C;AAED,iBAAe,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,0BAsB1D;AAED,iBAAS,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,GAAG;;;EAenE;AAED,iBAAS,eAAe,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK;;;;;;EA0B9D;AAED,iBAAS,0BAA0B,CACjC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,GACb,IAAI,EAAE,CAiCR;AAED,iBAAS,4BAA4B,CACnC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,GACb,IAAI,EAAE,CA6BR;AAED,iBAAS,UAAU,CAAC,MAAM,EAAE,gBAAgB,iBAiC3C;AAED,iBAAS,YAAY,CAAC,MAAM,EAAE,gBAAgB,WAS7C;AAGD,iBAAe,mBAAmB,CAChC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,iBAAiB,GAAG,SAAS,EACtC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,GAAG,EACT,kBAAkB,GAAE,CAAC,SAAS,EAAE,GAAG,KAAK,GAA8B,GACrE,OAAO,CAAC,GAAG,CAAC,CA2Cd;AAGD,iBAAe,oBAAoB,CACjC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,iBAAiB,GAAG,SAAS,EACtC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,GAAG,EACT,kBAAkB,GAAE,CAAC,SAAS,EAAE,GAAG,KAAK,GAA8B,GACrE,OAAO,CAAC,GAAG,CAAC,CAWd;AAGD,iBAAe,2BAA2B,CACxC,SAAS,SAAS,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACjE,WAAW,SAAS,MAAM,SAAS,GAAG,cAAc,GAAG,MAAM,SAAS,EAEtE,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,iBAAiB,GAAG,SAAS,EACtC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,eAAe,EAC1B,UAAU,EAAE,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,EAC3D,kBAAkB,GAAE,CAAC,SAAS,EAAE,GAAG,KAAK,GAA8B,GACrE,OAAO,CAAC,GAAG,CAAC,CAiDd;AAED,iBAAe,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,oBAmB/D;AAED,iBAAe,MAAM,CACnB,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,KAAK,EACZ,MAAM,CAAC,EAAE;IACP,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,GACA,OAAO,CAAC,OAAO,CAAC,CA+BlB;AAKD,iBAAe,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAiE7E;AAuDD,iBAAe,kBAAkB,CAC/B,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,GAAG,EACd,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,GAAG,CAAC,CA4Bd;AAED,iBAAe,eAAe,CAC5B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,KAAK,gLA0Db;AAED,iBAAe,uBAAuB,CACpC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,QAAQ,gLAyDpB;AAED,iBAAS,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAGjD;AAED,iBAAS,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,GAAG,qBAAqB,CAO3E;AAED,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,4BAA4B,EAC5B,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,MAAM,EACN,UAAU,EACV,MAAM,EACN,KAAK,EACL,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,2BAA2B,EAE3B,cAAc,EACd,YAAY,EACZ,qCAAqC,EACrC,6BAA6B,EAC7B,8BAA8B,EAC9B,kCAAkC,EAClC,8BAA8B,EAC9B,kCAAkC,EAClC,2BAA2B,EAC3B,wCAAwC,EACxC,4BAA4B,EAC5B,mCAAmC,EACnC,wBAAwB,EACxB,kCAAkC,EAClC,4BAA4B,EAC5B,mCAAmC,GACpC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../accounts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,KAAK,EAKV,KAAK,uBAAuB,EAC5B,KAAK,GAAG,EAER,KAAK,YAAY,EAEjB,KAAK,SAAS,EAGf,MAAM,MAAM,CAAA;AAUb,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAG/C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAA;AACpF,OAAO,KAAK,EACV,qBAAqB,EACrB,IAAI,EACJ,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACV,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,qCAAqC,EACrC,YAAY,EACZ,6BAA6B,EAC7B,8BAA8B,EAC9B,kCAAkC,EAClC,8BAA8B,EAC9B,kCAAkC,EAClC,2BAA2B,EAC3B,wCAAwC,EACxC,4BAA4B,EAC5B,cAAc,EACd,mCAAmC,EACnC,wBAAwB,EACxB,kCAAkC,EAClC,4BAA4B,EAC5B,mCAAmC,EACpC,MAAM,SAAS,CAAA;AAkDhB,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,SAAS,CAAA;AAEhB,KAAK,iBAAiB,GAAG,SAAS,GAAG,wBAAwB,CAAA;AA8C7D,iBAAS,WAAW,CAAC,MAAM,EAAE,gBAAgB;;;;;cAkB5C;AAED,iBAAS,aAAa,CAAC,MAAM,EAAE,gBAAgB;;;;;cAkB9C;AAED,iBAAe,mBAAmB,CAAC,MAAM,EAAE,gBAAgB,0BAsB1D;AAED,iBAAS,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,EAAE,SAAS,EAAE,GAAG;;;EAenE;AAED,iBAAS,eAAe,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK;;;;;;EA0B9D;AAED,iBAAS,0BAA0B,CACjC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,GACb,IAAI,EAAE,CAiCR;AAED,iBAAS,4BAA4B,CACnC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,GACb,IAAI,EAAE,CA6BR;AAED,iBAAS,UAAU,CAAC,MAAM,EAAE,gBAAgB,iBAiC3C;AAED,iBAAS,YAAY,CAAC,MAAM,EAAE,gBAAgB,WAS7C;AAGD,iBAAe,mBAAmB,CAChC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,iBAAiB,GAAG,SAAS,EACtC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,GAAG,EACT,kBAAkB,GAAE,CAAC,SAAS,EAAE,GAAG,KAAK,GAA8B,GACrE,OAAO,CAAC,GAAG,CAAC,CA2Cd;AAGD,iBAAe,oBAAoB,CACjC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,iBAAiB,GAAG,SAAS,EACtC,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,GAAG,EACT,kBAAkB,GAAE,CAAC,SAAS,EAAE,GAAG,KAAK,GAA8B,GACrE,OAAO,CAAC,GAAG,CAAC,CAWd;AAGD,iBAAe,2BAA2B,CACxC,SAAS,SAAS,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACjE,WAAW,SAAS,MAAM,SAAS,GAAG,cAAc,GAAG,MAAM,SAAS,EAEtE,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,iBAAiB,GAAG,SAAS,EACtC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,eAAe,EAC1B,UAAU,EAAE,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,EAC3D,kBAAkB,GAAE,CAAC,SAAS,EAAE,GAAG,KAAK,GAA8B,GACrE,OAAO,CAAC,GAAG,CAAC,CAiDd;AAED,iBAAe,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,oBAmB/D;AAED,iBAAe,MAAM,CACnB,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,KAAK,EACZ,MAAM,CAAC,EAAE;IACP,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,oBAAoB,CAAC,EAAE,GAAG,CAAA;CAC3B,GACA,OAAO,CAAC,OAAO,CAAC,CAoClB;AAKD,iBAAe,KAAK,CAAC,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAiE7E;AAgED,iBAAe,kBAAkB,CAC/B,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,GAAG,EACd,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,GAAG,CAAC,CA4Bd;AAED,iBAAe,eAAe,CAC5B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,KAAK,gLA0Db;AAED,iBAAe,uBAAuB,CACpC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,QAAQ,gLAyDpB;AAED,iBAAS,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAGjD;AAED,iBAAS,kBAAkB,CAAC,MAAM,EAAE,gBAAgB,GAAG,qBAAqB,CAO3E;AAED,OAAO,EACL,eAAe,EACf,0BAA0B,EAC1B,4BAA4B,EAC5B,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,MAAM,EACN,UAAU,EACV,MAAM,EACN,KAAK,EACL,kBAAkB,EAClB,eAAe,EACf,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,2BAA2B,EAE3B,cAAc,EACd,YAAY,EACZ,qCAAqC,EACrC,6BAA6B,EAC7B,8BAA8B,EAC9B,kCAAkC,EAClC,8BAA8B,EAC9B,kCAAkC,EAClC,2BAA2B,EAC3B,wCAAwC,EACxC,4BAA4B,EAC5B,mCAAmC,EACnC,wBAAwB,EACxB,kCAAkC,EAClC,4BAA4B,EAC5B,mCAAmC,GACpC,CAAA"}
@@ -433,7 +433,7 @@ async function deploy(config, chain, params) {
433
433
  await deployWithBundler(chain, config);
434
434
  }
435
435
  else {
436
- await deployWithIntent(chain, config, params?.sponsored ?? false);
436
+ await deployWithIntent(chain, config, params?.sponsored ?? false, params?.eip7702InitSignature);
437
437
  }
438
438
  return true;
439
439
  }
@@ -503,7 +503,7 @@ async function setup(config, chain) {
503
503
  await (0, execution_1.waitForExecution)(config, result, true);
504
504
  return true;
505
505
  }
506
- async function deployWithIntent(chain, config, sponsored) {
506
+ async function deployWithIntent(chain, config, sponsored, eip7702InitSignature) {
507
507
  const publicClient = (0, viem_1.createPublicClient)({
508
508
  chain,
509
509
  transport: (0, utils_1.createTransport)(chain, config.provider),
@@ -514,11 +514,17 @@ async function deployWithIntent(chain, config, sponsored) {
514
514
  // Already deployed
515
515
  return;
516
516
  }
517
+ // For EIP-7702 accounts, auto-sign if no signature was provided
518
+ let initSignature = eip7702InitSignature;
519
+ if (!initSignature && is7702(config)) {
520
+ initSignature = await signEip7702InitData(config);
521
+ }
517
522
  const result = await (0, execution_1.sendTransaction)(config, {
518
523
  sourceChains: [chain],
519
524
  targetChain: chain,
520
525
  calls: [],
521
526
  sponsored,
527
+ eip7702InitSignature: initSignature,
522
528
  });
523
529
  await (0, execution_1.waitForExecution)(config, result, true);
524
530
  }
@@ -11,7 +11,7 @@ function getAlchemyUrl(chainId, apiKey) {
11
11
  }
12
12
  return urlTemplate
13
13
  .replace('{{chain_param}}', chainParam)
14
- .replace('\$\{ALCHEMY_API_KEY\}', apiKey);
14
+ .replace('${ALCHEMY_API_KEY}', apiKey);
15
15
  }
16
16
  function getCustomUrl(chainId, urls) {
17
17
  return urls[chainId];
@@ -1 +1 @@
1
- {"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../../../accounts/safe.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,GAAG,EACR,KAAK,OAAO,EACZ,KAAK,KAAK,EAOV,KAAK,GAAG,EAER,KAAK,YAAY,EAKlB,MAAM,MAAM,CAAA;AACb,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,0BAA0B,EAEhC,MAAM,0BAA0B,CAAA;AAGjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAM/C,OAAO,KAAK,EAAE,QAAQ,EAAE,uBAAuB,EAAe,MAAM,UAAU,CAAA;AAM9E,OAAO,EAAoC,KAAK,eAAe,EAAE,MAAM,SAAS,CAAA;AAoBhF,iBAAS,aAAa,CAAC,MAAM,EAAE,uBAAuB;;;;;;SAmGrD;AAED,iBAAS,eAAe,CAAC,MAAM,EAAE,uBAAuB;;;;;;EAgFvD;AAED,iBAAS,UAAU,CAAC,MAAM,EAAE,uBAAuB,iBAiBlD;AAED,iBAAS,eAAe,CAAC,MAAM,EAAE,uBAAuB,EAAE,KAAK,EAAE,KAAK;;;;;;EAarE;AAED,iBAAS,cAAc,CAAC,MAAM,EAAE,MAAM,iBA2BrC;AAED,iBAAe,aAAa,CAC1B,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,eAAe,EAC1B,kBAAkB,GAAE,CAAC,SAAS,EAAE,GAAG,KAAK,GAA8B,0BAMvE;AAED,iBAAe,eAAe,CAC5B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,QAAQ,EAChB,gBAAgB,EAAE,OAAO,EACzB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,iEAWlC;AAED,iBAAe,uBAAuB,CACpC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,QAAQ,EACnB,gBAAgB,EAAE,OAAO,EACzB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,iEAalC;AA0GD,OAAO,EACL,eAAe,EACf,cAAc,EACd,UAAU,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,uBAAuB,GACxB,CAAA"}
1
+ {"version":3,"file":"safe.d.ts","sourceRoot":"","sources":["../../../accounts/safe.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,GAAG,EACR,KAAK,OAAO,EACZ,KAAK,KAAK,EAOV,KAAK,GAAG,EAER,KAAK,YAAY,EAKlB,MAAM,MAAM,CAAA;AACb,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,0BAA0B,EAEhC,MAAM,0BAA0B,CAAA;AAGjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAM/C,OAAO,KAAK,EAAE,QAAQ,EAAE,uBAAuB,EAAe,MAAM,UAAU,CAAA;AAM9E,OAAO,EAAoC,KAAK,eAAe,EAAE,MAAM,SAAS,CAAA;AAoBhF,iBAAS,aAAa,CAAC,MAAM,EAAE,uBAAuB;;;;;;SAmGrD;AAED,iBAAS,eAAe,CAAC,MAAM,EAAE,uBAAuB;;;;;;EAgFvD;AAED,iBAAS,UAAU,CAAC,MAAM,EAAE,uBAAuB,iBAoBlD;AAED,iBAAS,eAAe,CAAC,MAAM,EAAE,uBAAuB,EAAE,KAAK,EAAE,KAAK;;;;;;EAarE;AAED,iBAAS,cAAc,CAAC,MAAM,EAAE,MAAM,iBA2BrC;AAED,iBAAe,aAAa,CAC1B,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,eAAe,EAC1B,kBAAkB,GAAE,CAAC,SAAS,EAAE,GAAG,KAAK,GAA8B,0BAMvE;AAED,iBAAe,eAAe,CAC5B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,QAAQ,EAChB,gBAAgB,EAAE,OAAO,EACzB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,iEAWlC;AAED,iBAAe,uBAAuB,CACpC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,QAAQ,EACnB,gBAAgB,EAAE,OAAO,EACzB,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,iEAalC;AA0GD,OAAO,EACL,eAAe,EACf,cAAc,EACd,UAAU,EACV,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,uBAAuB,GACxB,CAAA"}
@@ -186,6 +186,9 @@ function getV0DeployArgs(config) {
186
186
  function getAddress(config) {
187
187
  const deployArgs = getDeployArgs(config);
188
188
  if (!deployArgs) {
189
+ if (config.initData?.address) {
190
+ return config.initData.address;
191
+ }
189
192
  throw new Error('Cannot derive address: deploy args not available');
190
193
  }
191
194
  const { factory, implementation, salt } = deployArgs;
@@ -199,7 +202,7 @@ function getAddress(config) {
199
202
  return address;
200
203
  }
201
204
  function getEip712Domain(config, chain) {
202
- if (config.initData) {
205
+ if (config.initData && !('factory' in config.initData)) {
203
206
  throw new error_1.Eip712DomainNotAvailableError('Existing Safe-7579 accounts are not yet supported');
204
207
  }
205
208
  return {
@@ -91,6 +91,56 @@ const MOCK_MODULE_ADDRESS = '0x28de6501fa86f2e6cd0b33c3aabdaeb4a1b93f3f';
91
91
  });
92
92
  (0, vitest_1.expect)(address).toEqual('0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38');
93
93
  });
94
+ (0, vitest_1.test)('Address-only initData fallback', () => {
95
+ const address = (0, safe_1.getAddress)({
96
+ account: {
97
+ type: 'safe',
98
+ },
99
+ owners: {
100
+ type: 'ecdsa',
101
+ accounts: [consts_1.accountA, consts_1.accountB],
102
+ },
103
+ initData: {
104
+ address: '0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38',
105
+ },
106
+ });
107
+ (0, vitest_1.expect)(address).toEqual('0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38');
108
+ });
109
+ });
110
+ (0, vitest_1.describe)('EIP-712 Domain', () => {
111
+ (0, vitest_1.test)('Factory-backed initData stays signable', () => {
112
+ const domain = (0, safe_1.getEip712Domain)({
113
+ owners: {
114
+ type: 'ecdsa',
115
+ accounts: [consts_1.accountA, consts_1.accountB],
116
+ },
117
+ initData: {
118
+ factory: '0x4e1dcf7ad4e460cfd30791ccc4f9c8a4f820ec67',
119
+ factoryData: '0x1688f0b90000000000000000000000007579011ab74c46090561ea277ba79d510c6c00ff0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000844fff40e1ec88f0966a6bc17a138345cdf7519caf9a1e0bb840330108a6a4315f1028c39000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000',
120
+ address: '0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38',
121
+ intentExecutorInstalled: true,
122
+ },
123
+ }, {
124
+ id: 1,
125
+ });
126
+ (0, vitest_1.expect)(domain.verifyingContract).toEqual('0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38');
127
+ });
128
+ (0, vitest_1.test)('Address-only initData remains unsupported', () => {
129
+ (0, vitest_1.expect)(() => (0, safe_1.getEip712Domain)({
130
+ account: {
131
+ type: 'safe',
132
+ },
133
+ owners: {
134
+ type: 'ecdsa',
135
+ accounts: [consts_1.accountA, consts_1.accountB],
136
+ },
137
+ initData: {
138
+ address: '0xc41bb9cfB2658dD3D74Ada0862044f5f30304b38',
139
+ },
140
+ }, {
141
+ id: 1,
142
+ })).toThrow('Existing Safe-7579 accounts are not yet supported');
143
+ });
94
144
  });
95
145
  (0, vitest_1.describe)('Get Install Data', () => {
96
146
  (0, vitest_1.test)('Module', () => {
@@ -12,7 +12,7 @@ const accountAddress = '0x36C03e7D593F7B2C6b06fC18B5f4E9a4A29C99b0';
12
12
  vitest_1.vi.mock('viem', async (importOriginal) => {
13
13
  const actual = await importOriginal();
14
14
  return {
15
- // @ts-ignore
15
+ // @ts-expect-error
16
16
  ...actual,
17
17
  createPublicClient: vitest_1.vi.fn(),
18
18
  };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=signing.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.test.d.ts","sourceRoot":"","sources":["../../../execution/signing.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,465 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const viem_1 = require("viem");
37
+ const chains_1 = require("viem/chains");
38
+ const vitest_1 = require("vitest");
39
+ const consts_1 = require("../../test/consts");
40
+ const utils_1 = require("./utils");
41
+ const { MOCK_EMISSARY, MOCK_EIP1271, MOCK_ACCOUNT, MOCK_EXECUTOR, MOCK_VALIDATOR, mockGetEmissarySignature, mockGetEip1271Signature, mockIsSessionEnabled, MOCK_TYPED_DATA, } = vitest_1.vi.hoisted(() => {
42
+ const MOCK_ACCOUNT = '0x1111111111111111111111111111111111111111';
43
+ const MOCK_EXECUTOR = '0x2222222222222222222222222222222222222222';
44
+ const MOCK_VALIDATOR = '0x3333333333333333333333333333333333333333';
45
+ const MOCK_EMISSARY = `0x${'ee'.repeat(65)}`;
46
+ const MOCK_EIP1271 = `0x${'12'.repeat(65)}`;
47
+ const mockGetEmissarySignature = vitest_1.vi.fn().mockResolvedValue(MOCK_EMISSARY);
48
+ const mockGetEip1271Signature = vitest_1.vi.fn().mockResolvedValue(MOCK_EIP1271);
49
+ const mockIsSessionEnabled = vitest_1.vi.fn().mockResolvedValue(true);
50
+ const MOCK_TYPED_DATA = {
51
+ domain: {
52
+ name: 'Test',
53
+ version: '1',
54
+ chainId: 8453,
55
+ verifyingContract: MOCK_EXECUTOR,
56
+ },
57
+ types: {
58
+ Test: [{ name: 'value', type: 'uint256' }],
59
+ },
60
+ primaryType: 'Test',
61
+ message: { value: 1n },
62
+ };
63
+ return {
64
+ MOCK_EMISSARY: MOCK_EMISSARY,
65
+ MOCK_EIP1271: MOCK_EIP1271,
66
+ MOCK_ACCOUNT: MOCK_ACCOUNT,
67
+ MOCK_EXECUTOR: MOCK_EXECUTOR,
68
+ MOCK_VALIDATOR: MOCK_VALIDATOR,
69
+ mockGetEmissarySignature,
70
+ mockGetEip1271Signature,
71
+ mockIsSessionEnabled,
72
+ MOCK_TYPED_DATA,
73
+ };
74
+ });
75
+ vitest_1.vi.mock('../orchestrator', () => ({
76
+ getOrchestrator: vitest_1.vi.fn(),
77
+ }));
78
+ vitest_1.vi.mock('../accounts', () => ({
79
+ getAddress: vitest_1.vi.fn().mockReturnValue(MOCK_ACCOUNT),
80
+ getEmissarySignature: mockGetEmissarySignature,
81
+ getEip1271Signature: mockGetEip1271Signature,
82
+ getSmartAccount: vitest_1.vi.fn(),
83
+ getEip712Domain: vitest_1.vi.fn(),
84
+ getAccountProvider: vitest_1.vi.fn(),
85
+ getInitCode: vitest_1.vi.fn(),
86
+ getGuardianSmartAccount: vitest_1.vi.fn(),
87
+ getTypedDataPackedSignature: vitest_1.vi.fn(),
88
+ toErc6492Signature: vitest_1.vi.fn(),
89
+ is7702: vitest_1.vi.fn().mockReturnValue(false),
90
+ getEip7702InitCall: vitest_1.vi.fn(),
91
+ EoaAccountMustHaveAccountError: class extends Error {
92
+ },
93
+ EoaSigningMethodNotConfiguredError: class extends Error {
94
+ },
95
+ FactoryArgsNotAvailableError: class extends Error {
96
+ },
97
+ }));
98
+ vitest_1.vi.mock('../accounts/signing/common', () => ({
99
+ convertOwnerSetToSignerSet: vitest_1.vi.fn(),
100
+ }));
101
+ vitest_1.vi.mock('../accounts/startale', () => ({
102
+ K1_DEFAULT_VALIDATOR_ADDRESS: '0x0000000000000000000000000000000000000000',
103
+ }));
104
+ vitest_1.vi.mock('../accounts/utils', () => ({
105
+ createTransport: vitest_1.vi.fn(),
106
+ getBundlerClient: vitest_1.vi.fn(),
107
+ }));
108
+ vitest_1.vi.mock('../modules', () => ({
109
+ getIntentExecutor: vitest_1.vi.fn().mockReturnValue({
110
+ address: MOCK_EXECUTOR,
111
+ type: 7,
112
+ initData: '0x',
113
+ deInitData: '0x',
114
+ additionalContext: '0x',
115
+ }),
116
+ }));
117
+ vitest_1.vi.mock('../modules/validators', () => ({
118
+ isSessionEnabled: mockIsSessionEnabled,
119
+ getOwnerValidator: vitest_1.vi.fn().mockReturnValue({
120
+ address: MOCK_VALIDATOR,
121
+ type: 1,
122
+ initData: '0x',
123
+ deInitData: '0x',
124
+ additionalContext: '0x',
125
+ }),
126
+ buildMockSignature: vitest_1.vi.fn(),
127
+ getPermissionId: vitest_1.vi.fn().mockReturnValue(`0x${'cc'.repeat(32)}`),
128
+ getSmartSessionValidator: vitest_1.vi.fn().mockReturnValue({
129
+ address: MOCK_VALIDATOR,
130
+ type: 1,
131
+ initData: '0x',
132
+ deInitData: '0x',
133
+ additionalContext: '0x',
134
+ }),
135
+ }));
136
+ vitest_1.vi.mock('../modules/validators/core', () => ({
137
+ supportsEip712: vitest_1.vi.fn().mockReturnValue(false),
138
+ getMultiFactorValidator: vitest_1.vi.fn(),
139
+ getSocialRecoveryValidator: vitest_1.vi.fn(),
140
+ getWebAuthnValidator: vitest_1.vi.fn(),
141
+ }));
142
+ vitest_1.vi.mock('../orchestrator/registry', () => ({
143
+ getChainById: vitest_1.vi.fn().mockReturnValue(chains_1.base),
144
+ getTokenAddress: vitest_1.vi.fn(),
145
+ resolveTokenAddress: vitest_1.vi.fn(),
146
+ }));
147
+ vitest_1.vi.mock('./singleChainOps', () => ({
148
+ getTypedData: vitest_1.vi.fn().mockReturnValue(MOCK_TYPED_DATA),
149
+ }));
150
+ vitest_1.vi.mock('./compact', () => ({
151
+ getCompactTypedData: vitest_1.vi.fn().mockReturnValue(MOCK_TYPED_DATA),
152
+ }));
153
+ vitest_1.vi.mock('./error', () => ({
154
+ Eip7702InitSignatureRequiredError: class extends Error {
155
+ },
156
+ SignerNotSupportedError: class extends Error {
157
+ },
158
+ }));
159
+ vitest_1.vi.mock('./permit2', () => ({
160
+ getTypedData: vitest_1.vi.fn().mockReturnValue(MOCK_TYPED_DATA),
161
+ }));
162
+ // --- Helpers ---
163
+ const makeElement = (settlementLayer) => ({
164
+ mandate: {
165
+ destinationChainId: chains_1.base.id,
166
+ destinationOps: {
167
+ vt: `0x${'00'.repeat(32)}`,
168
+ ops: [],
169
+ },
170
+ preClaimOps: {
171
+ vt: `0x${'00'.repeat(32)}`,
172
+ ops: [],
173
+ },
174
+ qualifier: {
175
+ settlementContext: {
176
+ settlementLayer,
177
+ fundingMethod: 'NO_FUNDING',
178
+ using7579: true,
179
+ gasRefund: {
180
+ token: viem_1.zeroAddress,
181
+ exchangeRate: 0n,
182
+ overhead: 0n,
183
+ },
184
+ },
185
+ },
186
+ },
187
+ });
188
+ const makeIntentOp = (settlementLayer, targetExecutionNonce = '200') => {
189
+ const layers = Array.isArray(settlementLayer)
190
+ ? settlementLayer
191
+ : [settlementLayer];
192
+ return {
193
+ sponsor: MOCK_ACCOUNT,
194
+ nonce: '100',
195
+ targetExecutionNonce,
196
+ expires: '9999999999',
197
+ elements: layers.map(makeElement),
198
+ serverSignature: '0x',
199
+ signedMetadata: { fees: {} },
200
+ };
201
+ };
202
+ // verifyExecutions auto-derived as true when session.actions is non-empty
203
+ const sessionWithActions = {
204
+ chain: chains_1.base,
205
+ owners: { type: 'ecdsa', accounts: [consts_1.accountA] },
206
+ actions: [{ policies: [{ type: 'usage-limit', limit: 1n }] }],
207
+ };
208
+ // verifyExecutions auto-derived as false when session.actions is absent
209
+ const sessionNoActions = {
210
+ chain: chains_1.base,
211
+ owners: { type: 'ecdsa', accounts: [consts_1.accountA] },
212
+ };
213
+ const config = {
214
+ apiKey: 'test',
215
+ owners: { type: 'ecdsa', accounts: [consts_1.accountA] },
216
+ };
217
+ const makeSessionSigners = (session) => ({
218
+ type: 'experimental_session',
219
+ session,
220
+ });
221
+ const ownerSigners = {
222
+ type: 'owner',
223
+ kind: 'ecdsa',
224
+ accounts: [consts_1.accountA],
225
+ };
226
+ // --- Tests ---
227
+ (0, vitest_1.beforeEach)(() => {
228
+ vitest_1.vi.clearAllMocks();
229
+ mockGetEmissarySignature.mockResolvedValue(MOCK_EMISSARY);
230
+ mockGetEip1271Signature.mockResolvedValue(MOCK_EIP1271);
231
+ mockIsSessionEnabled.mockResolvedValue(true);
232
+ });
233
+ (0, vitest_1.describe)('getTargetExecutionSignature', () => {
234
+ (0, vitest_1.test)('undefined signers returns undefined', async () => {
235
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
236
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, undefined);
237
+ (0, vitest_1.expect)(result).toBeUndefined();
238
+ });
239
+ (0, vitest_1.test)('non-session signers returns undefined', async () => {
240
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
241
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, ownerSigners);
242
+ (0, vitest_1.expect)(result).toBeUndefined();
243
+ });
244
+ (0, vitest_1.test)('SAME_CHAIN + verifyExecutions: true returns emissary sig', async () => {
245
+ const intentOp = makeIntentOp('SAME_CHAIN');
246
+ const signers = makeSessionSigners(sessionWithActions);
247
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
248
+ (0, vitest_1.expect)(result).toBe(MOCK_EMISSARY);
249
+ });
250
+ (0, vitest_1.test)('INTENT_EXECUTOR + verifyExecutions: false (no actions) returns undefined', async () => {
251
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
252
+ const signers = makeSessionSigners(sessionNoActions);
253
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
254
+ (0, vitest_1.expect)(result).toBeUndefined();
255
+ });
256
+ (0, vitest_1.test)('explicit verifyExecutions: false on signers overrides session with actions', async () => {
257
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
258
+ const signers = {
259
+ type: 'experimental_session',
260
+ session: sessionWithActions,
261
+ verifyExecutions: false,
262
+ };
263
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
264
+ (0, vitest_1.expect)(result).toBeUndefined();
265
+ });
266
+ (0, vitest_1.test)('explicit verifyExecutions: true on signers overrides session without actions', async () => {
267
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
268
+ const signers = {
269
+ type: 'experimental_session',
270
+ session: sessionNoActions,
271
+ verifyExecutions: true,
272
+ };
273
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
274
+ (0, vitest_1.expect)(result).toBe(MOCK_EMISSARY);
275
+ });
276
+ (0, vitest_1.test)('session not yet enabled still resolves verifyExecutions from actions', async () => {
277
+ mockIsSessionEnabled.mockResolvedValueOnce(false);
278
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
279
+ const signers = makeSessionSigners(sessionWithActions);
280
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
281
+ (0, vitest_1.expect)(result).toBe(MOCK_EMISSARY);
282
+ });
283
+ (0, vitest_1.test)('mixed INTENT_EXECUTOR + SAME_CHAIN elements returns emissary sig', async () => {
284
+ const intentOp = makeIntentOp(['INTENT_EXECUTOR', 'SAME_CHAIN']);
285
+ const signers = makeSessionSigners(sessionWithActions);
286
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
287
+ (0, vitest_1.expect)(result).toBe(MOCK_EMISSARY);
288
+ });
289
+ (0, vitest_1.test)('INTENT_EXECUTOR + verifyExecutions: true returns emissary sig', async () => {
290
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
291
+ const signers = makeSessionSigners(sessionWithActions);
292
+ const result = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
293
+ (0, vitest_1.expect)(result).toBe(MOCK_EMISSARY);
294
+ (0, vitest_1.expect)(mockGetEmissarySignature).toHaveBeenCalledTimes(1);
295
+ (0, vitest_1.expect)(mockGetEip1271Signature).not.toHaveBeenCalled();
296
+ });
297
+ });
298
+ (0, vitest_1.describe)('signIntent with owner signers', () => {
299
+ (0, vitest_1.test)('gives EIP-1271 destinationSignature, not emissary', async () => {
300
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
301
+ const { destinationSignature, originSignatures } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, ownerSigners);
302
+ (0, vitest_1.expect)(destinationSignature).toBe(MOCK_EIP1271);
303
+ (0, vitest_1.expect)(mockGetEip1271Signature).toHaveBeenCalled();
304
+ (0, vitest_1.expect)(mockGetEmissarySignature).not.toHaveBeenCalled();
305
+ (0, vitest_1.expect)(originSignatures).toHaveLength(1);
306
+ });
307
+ });
308
+ (0, vitest_1.describe)('signIntent destinationSignature', () => {
309
+ (0, vitest_1.test)('verifyExecutions: true + INTENT_EXECUTOR — emissary destinationSignature, both sigs generated', async () => {
310
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
311
+ const signers = makeSessionSigners(sessionWithActions);
312
+ const { destinationSignature, originSignatures } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
313
+ // destinationSignature picks preClaimSig (emissary format) from the { preClaimSig, notarizedClaimSig } pair
314
+ (0, vitest_1.expect)(destinationSignature).toBe(MOCK_EMISSARY);
315
+ // Both emissary and EIP-1271 are produced internally (preClaimSig + notarizedClaimSig)
316
+ (0, vitest_1.expect)(mockGetEmissarySignature).toHaveBeenCalled();
317
+ (0, vitest_1.expect)(mockGetEip1271Signature).toHaveBeenCalled();
318
+ (0, vitest_1.expect)(originSignatures).toHaveLength(1);
319
+ });
320
+ (0, vitest_1.test)('verifyExecutions: false + INTENT_EXECUTOR — EIP-1271 destinationSignature only', async () => {
321
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
322
+ const signers = makeSessionSigners(sessionNoActions);
323
+ const { destinationSignature, originSignatures } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
324
+ (0, vitest_1.expect)(destinationSignature).toBe(MOCK_EIP1271);
325
+ (0, vitest_1.expect)(mockGetEmissarySignature).not.toHaveBeenCalled();
326
+ (0, vitest_1.expect)(originSignatures).toHaveLength(1);
327
+ });
328
+ (0, vitest_1.test)('verifyExecutions: true + SAME_CHAIN — emissary destinationSignature', async () => {
329
+ const intentOp = makeIntentOp('SAME_CHAIN');
330
+ const signers = makeSessionSigners(sessionWithActions);
331
+ const { destinationSignature } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
332
+ (0, vitest_1.expect)(destinationSignature).toBe(MOCK_EMISSARY);
333
+ });
334
+ (0, vitest_1.test)('multi-element op produces one originSignature per element', async () => {
335
+ const intentOp = makeIntentOp(['INTENT_EXECUTOR', 'INTENT_EXECUTOR']);
336
+ const signers = makeSessionSigners(sessionWithActions);
337
+ const { originSignatures } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
338
+ (0, vitest_1.expect)(originSignatures).toHaveLength(2);
339
+ });
340
+ });
341
+ (0, vitest_1.describe)('signIntent + getTargetExecutionSignature routing', () => {
342
+ (0, vitest_1.test)('INTENT_EXECUTOR + verifyExecutions: true — EMISSARY for both', async () => {
343
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
344
+ const signers = makeSessionSigners(sessionWithActions);
345
+ const { destinationSignature } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
346
+ const targetExecutionSignature = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
347
+ (0, vitest_1.expect)(destinationSignature).toBe(MOCK_EMISSARY);
348
+ (0, vitest_1.expect)(targetExecutionSignature).toBe(MOCK_EMISSARY);
349
+ });
350
+ (0, vitest_1.test)('INTENT_EXECUTOR + verifyExecutions: false — EIP-1271 destination, undefined target', async () => {
351
+ const intentOp = makeIntentOp('INTENT_EXECUTOR');
352
+ const signers = makeSessionSigners(sessionNoActions);
353
+ const { destinationSignature } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
354
+ const targetExecutionSignature = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
355
+ (0, vitest_1.expect)(destinationSignature).toBe(MOCK_EIP1271);
356
+ (0, vitest_1.expect)(targetExecutionSignature).toBeUndefined();
357
+ });
358
+ (0, vitest_1.test)('SAME_CHAIN + verifyExecutions: true — EMISSARY for both destination and target', async () => {
359
+ const intentOp = makeIntentOp('SAME_CHAIN');
360
+ const signers = makeSessionSigners(sessionWithActions);
361
+ const { destinationSignature } = await (0, utils_1.signIntent)(config, intentOp, chains_1.base, signers);
362
+ const targetExecutionSignature = await (0, utils_1.getTargetExecutionSignature)(config, intentOp, chains_1.base, signers);
363
+ (0, vitest_1.expect)(destinationSignature).toBe(MOCK_EMISSARY);
364
+ (0, vitest_1.expect)(targetExecutionSignature).toBe(MOCK_EMISSARY);
365
+ });
366
+ });
367
+ // Permit2 typed data shape that triggers resolveClaimPolicyData
368
+ const MOCK_PERMIT2_TYPED_DATA = {
369
+ domain: { name: 'Permit2', chainId: 8453, verifyingContract: MOCK_EXECUTOR },
370
+ types: {
371
+ PermitBatchWitnessTransferFrom: [{ name: 'nonce', type: 'uint256' }],
372
+ },
373
+ primaryType: 'PermitBatchWitnessTransferFrom',
374
+ message: {
375
+ permitted: [
376
+ { token: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831', amount: 20000n },
377
+ ],
378
+ spender: MOCK_EXECUTOR,
379
+ nonce: 1n,
380
+ deadline: 9999999999n,
381
+ mandate: {
382
+ target: {
383
+ recipient: MOCK_ACCOUNT,
384
+ tokenOut: [],
385
+ targetChain: 8453n,
386
+ fillExpiry: 9999999999n,
387
+ },
388
+ minGas: 0n,
389
+ originOps: { vt: `0x${'00'.repeat(32)}`, ops: [] },
390
+ destOps: { vt: `0x${'00'.repeat(32)}`, ops: [] },
391
+ q: `0x${'ab'.repeat(32)}`,
392
+ },
393
+ },
394
+ };
395
+ const makePermit2IntentOp = () => ({
396
+ sponsor: MOCK_ACCOUNT,
397
+ nonce: '100',
398
+ targetExecutionNonce: '200',
399
+ expires: '9999999999',
400
+ elements: [
401
+ {
402
+ mandate: {
403
+ destinationChainId: chains_1.base.id,
404
+ destinationOps: { vt: `0x${'00'.repeat(32)}`, ops: [] },
405
+ preClaimOps: { vt: `0x${'00'.repeat(32)}`, ops: [] },
406
+ qualifier: {
407
+ settlementContext: {
408
+ // SAME_CHAIN avoids the INTENT_EXECUTOR branch so the PERMIT2 funding path is taken
409
+ settlementLayer: 'SAME_CHAIN',
410
+ fundingMethod: 'PERMIT2',
411
+ using7579: true,
412
+ gasRefund: { token: viem_1.zeroAddress, exchangeRate: 0n, overhead: 0n },
413
+ },
414
+ },
415
+ },
416
+ },
417
+ ],
418
+ });
419
+ const sessionWithClaimPolicy = {
420
+ chain: chains_1.base,
421
+ owners: { type: 'ecdsa', accounts: [consts_1.accountA] },
422
+ actions: [{ policies: [{ type: 'usage-limit', limit: 1n }] }],
423
+ claimPolicies: [{ type: 'permit2-claim' }],
424
+ };
425
+ (0, vitest_1.describe)('signIntent with permit2 claim policy', () => {
426
+ (0, vitest_1.test)('Permit2 typed data + claimPolicies → getEip1271Signature called with claimPolicyData', async () => {
427
+ const { getTypedData: mockPermit2GetTypedData } = await Promise.resolve().then(() => __importStar(require('./permit2')));
428
+ vitest_1.vi.mocked(mockPermit2GetTypedData).mockReturnValueOnce(MOCK_PERMIT2_TYPED_DATA);
429
+ const signers = {
430
+ type: 'experimental_session',
431
+ session: sessionWithClaimPolicy,
432
+ verifyExecutions: true,
433
+ };
434
+ await (0, utils_1.signIntent)(config, makePermit2IntentOp(), chains_1.base, signers);
435
+ (0, vitest_1.expect)(mockGetEip1271Signature).toHaveBeenCalled();
436
+ const sessionSignersArg = mockGetEip1271Signature.mock.calls[0][1];
437
+ (0, vitest_1.expect)(sessionSignersArg.claimPolicyData).toBeDefined();
438
+ (0, vitest_1.expect)(sessionSignersArg.claimPolicyData).not.toBe('0x');
439
+ });
440
+ (0, vitest_1.test)('non-Permit2 typed data + claimPolicies → getEip1271Signature called without claimPolicyData', async () => {
441
+ // Default mock returns MOCK_TYPED_DATA (primaryType: 'Test'), not Permit2
442
+ const signers = {
443
+ type: 'experimental_session',
444
+ session: sessionWithClaimPolicy,
445
+ verifyExecutions: true,
446
+ };
447
+ await (0, utils_1.signIntent)(config, makeIntentOp('INTENT_EXECUTOR'), chains_1.base, signers);
448
+ (0, vitest_1.expect)(mockGetEip1271Signature).toHaveBeenCalled();
449
+ const sessionSignersArg = mockGetEip1271Signature.mock.calls[0][1];
450
+ (0, vitest_1.expect)(sessionSignersArg.claimPolicyData).toBeUndefined();
451
+ });
452
+ (0, vitest_1.test)('Permit2 typed data without claimPolicies → getEip1271Signature called without claimPolicyData', async () => {
453
+ const { getTypedData: mockPermit2GetTypedData } = await Promise.resolve().then(() => __importStar(require('./permit2')));
454
+ vitest_1.vi.mocked(mockPermit2GetTypedData).mockReturnValueOnce(MOCK_PERMIT2_TYPED_DATA);
455
+ const signers = {
456
+ type: 'experimental_session',
457
+ session: sessionWithActions, // no claimPolicies
458
+ verifyExecutions: true,
459
+ };
460
+ await (0, utils_1.signIntent)(config, makePermit2IntentOp(), chains_1.base, signers);
461
+ (0, vitest_1.expect)(mockGetEip1271Signature).toHaveBeenCalled();
462
+ const sessionSignersArg = mockGetEip1271Signature.mock.calls[0][1];
463
+ (0, vitest_1.expect)(sessionSignersArg.claimPolicyData).toBeUndefined();
464
+ });
465
+ });
@@ -8,6 +8,7 @@ type InternalSignerSet = Exclude<SignerSet, SessionSignerSet> | ResolvedSessionS
8
8
  declare function resolveSessionForChain(signers: SessionSignerSet, chainId: number): {
9
9
  session: Session;
10
10
  enableData?: SessionEnableData;
11
+ verifyExecutions?: boolean;
11
12
  };
12
13
  interface UserOperationResult {
13
14
  type: 'userop';