@zerodev/permissions 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/_cjs/constants.js +18 -0
  2. package/_cjs/constants.js.map +1 -0
  3. package/_cjs/deserializePermissionAccount.js +99 -0
  4. package/_cjs/deserializePermissionAccount.js.map +1 -0
  5. package/_cjs/index.js +12 -0
  6. package/_cjs/index.js.map +1 -0
  7. package/_cjs/package.json +1 -0
  8. package/_cjs/policies/callPolicyUtils.js +87 -0
  9. package/_cjs/policies/callPolicyUtils.js.map +1 -0
  10. package/_cjs/policies/index.js +21 -0
  11. package/_cjs/policies/index.js.map +1 -0
  12. package/_cjs/policies/toCallPolicy.js +42 -0
  13. package/_cjs/policies/toCallPolicy.js.map +1 -0
  14. package/_cjs/policies/toGasPolicy.js +30 -0
  15. package/_cjs/policies/toGasPolicy.js.map +1 -0
  16. package/_cjs/policies/toRateLimitPolicy.js +30 -0
  17. package/_cjs/policies/toRateLimitPolicy.js.map +1 -0
  18. package/_cjs/policies/toSignatureCallerPolicy.js +24 -0
  19. package/_cjs/policies/toSignatureCallerPolicy.js.map +1 -0
  20. package/_cjs/policies/toSudoPolicy.js +22 -0
  21. package/_cjs/policies/toSudoPolicy.js.map +1 -0
  22. package/_cjs/policies/toTimestampPolicy.js +27 -0
  23. package/_cjs/policies/toTimestampPolicy.js.map +1 -0
  24. package/_cjs/policies/types.js +19 -0
  25. package/_cjs/policies/types.js.map +1 -0
  26. package/_cjs/policies/utils/toPolicyId.js +11 -0
  27. package/_cjs/policies/utils/toPolicyId.js.map +1 -0
  28. package/_cjs/serializePermissionAccount.js +27 -0
  29. package/_cjs/serializePermissionAccount.js.map +1 -0
  30. package/_cjs/signers/index.js +14 -0
  31. package/_cjs/signers/index.js.map +1 -0
  32. package/_cjs/signers/toECDSASigner.js +39 -0
  33. package/_cjs/signers/toECDSASigner.js.map +1 -0
  34. package/_cjs/signers/toEmptyECDSASigner.js +30 -0
  35. package/_cjs/signers/toEmptyECDSASigner.js.map +1 -0
  36. package/_cjs/signers/toWebAuthnPubKey.js +98 -0
  37. package/_cjs/signers/toWebAuthnPubKey.js.map +1 -0
  38. package/_cjs/signers/toWebAuthnSigner.js +154 -0
  39. package/_cjs/signers/toWebAuthnSigner.js.map +1 -0
  40. package/_cjs/signers/utils/toSignerId.js +9 -0
  41. package/_cjs/signers/utils/toSignerId.js.map +1 -0
  42. package/_cjs/signers/webAuthnUtils.js +45 -0
  43. package/_cjs/signers/webAuthnUtils.js.map +1 -0
  44. package/_cjs/toPermissionValidator.js +98 -0
  45. package/_cjs/toPermissionValidator.js.map +1 -0
  46. package/_cjs/types.js +3 -0
  47. package/_cjs/types.js.map +1 -0
  48. package/_cjs/utils.js +37 -0
  49. package/_cjs/utils.js.map +1 -0
  50. package/_esm/constants.js +15 -0
  51. package/_esm/constants.js.map +1 -0
  52. package/_esm/deserializePermissionAccount.js +94 -0
  53. package/_esm/deserializePermissionAccount.js.map +1 -0
  54. package/_esm/index.js +5 -0
  55. package/_esm/index.js.map +1 -0
  56. package/_esm/package.json +1 -0
  57. package/_esm/policies/callPolicyUtils.js +82 -0
  58. package/_esm/policies/callPolicyUtils.js.map +1 -0
  59. package/_esm/policies/index.js +9 -0
  60. package/_esm/policies/index.js.map +1 -0
  61. package/_esm/policies/toCallPolicy.js +38 -0
  62. package/_esm/policies/toCallPolicy.js.map +1 -0
  63. package/_esm/policies/toGasPolicy.js +26 -0
  64. package/_esm/policies/toGasPolicy.js.map +1 -0
  65. package/_esm/policies/toRateLimitPolicy.js +26 -0
  66. package/_esm/policies/toRateLimitPolicy.js.map +1 -0
  67. package/_esm/policies/toSignatureCallerPolicy.js +20 -0
  68. package/_esm/policies/toSignatureCallerPolicy.js.map +1 -0
  69. package/_esm/policies/toSudoPolicy.js +18 -0
  70. package/_esm/policies/toSudoPolicy.js.map +1 -0
  71. package/_esm/policies/toTimestampPolicy.js +23 -0
  72. package/_esm/policies/toTimestampPolicy.js.map +1 -0
  73. package/_esm/policies/types.js +17 -0
  74. package/_esm/policies/types.js.map +1 -0
  75. package/_esm/policies/utils/toPolicyId.js +7 -0
  76. package/_esm/policies/utils/toPolicyId.js.map +1 -0
  77. package/_esm/serializePermissionAccount.js +23 -0
  78. package/_esm/serializePermissionAccount.js.map +1 -0
  79. package/_esm/signers/index.js +6 -0
  80. package/_esm/signers/index.js.map +1 -0
  81. package/_esm/signers/toECDSASigner.js +36 -0
  82. package/_esm/signers/toECDSASigner.js.map +1 -0
  83. package/_esm/signers/toEmptyECDSASigner.js +27 -0
  84. package/_esm/signers/toEmptyECDSASigner.js.map +1 -0
  85. package/_esm/signers/toWebAuthnPubKey.js +108 -0
  86. package/_esm/signers/toWebAuthnPubKey.js.map +1 -0
  87. package/_esm/signers/toWebAuthnSigner.js +164 -0
  88. package/_esm/signers/toWebAuthnSigner.js.map +1 -0
  89. package/_esm/signers/utils/toSignerId.js +5 -0
  90. package/_esm/signers/utils/toSignerId.js.map +1 -0
  91. package/_esm/signers/webAuthnUtils.js +41 -0
  92. package/_esm/signers/webAuthnUtils.js.map +1 -0
  93. package/_esm/toPermissionValidator.js +94 -0
  94. package/_esm/toPermissionValidator.js.map +1 -0
  95. package/_esm/types.js +3 -0
  96. package/_esm/types.js.map +1 -0
  97. package/_esm/utils.js +32 -0
  98. package/_esm/utils.js.map +1 -0
  99. package/_types/constants.d.ts +14 -0
  100. package/_types/constants.d.ts.map +1 -0
  101. package/_types/deserializePermissionAccount.d.ts +13 -0
  102. package/_types/deserializePermissionAccount.d.ts.map +1 -0
  103. package/_types/index.d.ts +6 -0
  104. package/_types/index.d.ts.map +1 -0
  105. package/_types/policies/callPolicyUtils.d.ts +5 -0
  106. package/_types/policies/callPolicyUtils.d.ts.map +1 -0
  107. package/_types/policies/index.d.ts +9 -0
  108. package/_types/policies/index.d.ts.map +1 -0
  109. package/_types/policies/toCallPolicy.d.ts +8 -0
  110. package/_types/policies/toCallPolicy.d.ts.map +1 -0
  111. package/_types/policies/toGasPolicy.d.ts +9 -0
  112. package/_types/policies/toGasPolicy.d.ts.map +1 -0
  113. package/_types/policies/toRateLimitPolicy.d.ts +8 -0
  114. package/_types/policies/toRateLimitPolicy.d.ts.map +1 -0
  115. package/_types/policies/toSignatureCallerPolicy.d.ts +7 -0
  116. package/_types/policies/toSignatureCallerPolicy.d.ts.map +1 -0
  117. package/_types/policies/toSudoPolicy.d.ts +4 -0
  118. package/_types/policies/toSudoPolicy.d.ts.map +1 -0
  119. package/_types/policies/toTimestampPolicy.d.ts +7 -0
  120. package/_types/policies/toTimestampPolicy.d.ts.map +1 -0
  121. package/_types/policies/types.d.ts +56 -0
  122. package/_types/policies/types.d.ts.map +1 -0
  123. package/_types/policies/utils/toPolicyId.d.ts +4 -0
  124. package/_types/policies/utils/toPolicyId.d.ts.map +1 -0
  125. package/_types/serializePermissionAccount.d.ts +5 -0
  126. package/_types/serializePermissionAccount.d.ts.map +1 -0
  127. package/_types/signers/index.d.ts +6 -0
  128. package/_types/signers/index.d.ts.map +1 -0
  129. package/_types/signers/toECDSASigner.d.ts +8 -0
  130. package/_types/signers/toECDSASigner.d.ts.map +1 -0
  131. package/_types/signers/toEmptyECDSASigner.d.ts +4 -0
  132. package/_types/signers/toEmptyECDSASigner.d.ts.map +1 -0
  133. package/_types/signers/toWebAuthnPubKey.d.ts +11 -0
  134. package/_types/signers/toWebAuthnPubKey.d.ts.map +1 -0
  135. package/_types/signers/toWebAuthnSigner.d.ts +16 -0
  136. package/_types/signers/toWebAuthnSigner.d.ts.map +1 -0
  137. package/_types/signers/utils/toSignerId.d.ts +4 -0
  138. package/_types/signers/utils/toSignerId.d.ts.map +1 -0
  139. package/_types/signers/webAuthnUtils.d.ts +13 -0
  140. package/_types/signers/webAuthnUtils.d.ts.map +1 -0
  141. package/_types/toPermissionValidator.d.ts +5 -0
  142. package/_types/toPermissionValidator.d.ts.map +1 -0
  143. package/_types/types.d.ts +61 -0
  144. package/_types/types.d.ts.map +1 -0
  145. package/_types/utils.d.ts +8 -0
  146. package/_types/utils.d.ts.map +1 -0
  147. package/constants.ts +19 -0
  148. package/deserializePermissionAccount.ts +130 -0
  149. package/index.ts +5 -0
  150. package/package.json +63 -0
  151. package/policies/callPolicyUtils.ts +122 -0
  152. package/policies/index.ts +17 -0
  153. package/policies/toCallPolicy.ts +65 -0
  154. package/policies/toGasPolicy.ts +42 -0
  155. package/policies/toRateLimitPolicy.ts +41 -0
  156. package/policies/toSignatureCallerPolicy.ts +32 -0
  157. package/policies/toSudoPolicy.ts +24 -0
  158. package/policies/toTimestampPolicy.ts +37 -0
  159. package/policies/types.ts +118 -0
  160. package/policies/utils/toPolicyId.ts +13 -0
  161. package/serializePermissionAccount.ts +38 -0
  162. package/signers/index.ts +11 -0
  163. package/signers/toECDSASigner.ts +61 -0
  164. package/signers/toEmptyECDSASigner.ts +34 -0
  165. package/signers/toWebAuthnPubKey.ts +153 -0
  166. package/signers/toWebAuthnSigner.ts +246 -0
  167. package/signers/utils/toSignerId.ts +9 -0
  168. package/signers/webAuthnUtils.ts +54 -0
  169. package/toPermissionValidator.ts +151 -0
  170. package/types.ts +75 -0
  171. package/utils.ts +42 -0
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toEmptyECDSASigner = void 0;
4
+ const sdk_1 = require("@zerodev/sdk");
5
+ const accounts_1 = require("viem/accounts");
6
+ const constants_js_1 = require("../constants.js");
7
+ function toEmptyECDSASigner(address) {
8
+ const account = (0, accounts_1.toAccount)({
9
+ address,
10
+ async signMessage() {
11
+ throw new Error("Method not supported");
12
+ },
13
+ async signTransaction(_, __) {
14
+ throw new Error("Method not supported");
15
+ },
16
+ async signTypedData(_typedData) {
17
+ throw new Error("Method not supported");
18
+ }
19
+ });
20
+ return {
21
+ account,
22
+ signerContractAddress: constants_js_1.ECDSA_SIGNER_CONTRACT,
23
+ getSignerData: () => {
24
+ return address;
25
+ },
26
+ getDummySignature: () => sdk_1.constants.DUMMY_ECDSA_SIG
27
+ };
28
+ }
29
+ exports.toEmptyECDSASigner = toEmptyECDSASigner;
30
+ //# sourceMappingURL=toEmptyECDSASigner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toEmptyECDSASigner.js","sourceRoot":"","sources":["../../signers/toEmptyECDSASigner.ts"],"names":[],"mappings":";;;AAAA,sCAAwC;AAGxC,4CAAyC;AACzC,kDAAuD;AAGvD,SAAgB,kBAAkB,CAAC,OAAgB;IAC/C,MAAM,OAAO,GAAG,IAAA,oBAAS,EAAC;QACtB,OAAO;QACP,KAAK,CAAC,WAAW;YACb,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;QAC3C,CAAC;QACD,KAAK,CAAC,eAAe,CAAC,CAAC,EAAE,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;QAC3C,CAAC;QACD,KAAK,CAAC,aAAa,CAKjB,UAAyD;YACvD,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAA;QAC3C,CAAC;KACJ,CAAC,CAAA;IACF,OAAO;QACH,OAAO;QACP,qBAAqB,EAAE,oCAAqB;QAC5C,aAAa,EAAE,GAAG,EAAE;YAChB,OAAO,OAAO,CAAA;QAClB,CAAC;QACD,iBAAiB,EAAE,GAAG,EAAE,CAAC,eAAS,CAAC,eAAe;KACrD,CAAA;AACL,CAAC;AA1BD,gDA0BC"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toWebAuthnPubKey = exports.WebAuthnMode = void 0;
4
+ const buffer_1 = require("buffer");
5
+ const viem_1 = require("viem");
6
+ const webAuthnUtils_js_1 = require("./webAuthnUtils.js");
7
+ var WebAuthnMode;
8
+ (function (WebAuthnMode) {
9
+ WebAuthnMode["Register"] = "register";
10
+ WebAuthnMode["Login"] = "login";
11
+ })(WebAuthnMode || (exports.WebAuthnMode = WebAuthnMode = {}));
12
+ const toWebAuthnPubKey = async ({ passkeyName, passkeyServerUrl, mode = WebAuthnMode.Login }) => {
13
+ let pubKey;
14
+ let authenticatorIdHash;
15
+ if (mode === WebAuthnMode.Login) {
16
+ const loginOptionsResponse = await fetch(`${passkeyServerUrl}/login/options`, {
17
+ method: "POST",
18
+ headers: { "Content-Type": "application/json" },
19
+ credentials: "include"
20
+ });
21
+ const loginOptions = await loginOptionsResponse.json();
22
+ const { startAuthentication } = await Promise.resolve().then(() => require("@simplewebauthn/browser"));
23
+ const loginCred = await startAuthentication(loginOptions);
24
+ authenticatorIdHash = (0, viem_1.keccak256)((0, webAuthnUtils_js_1.uint8ArrayToHexString)((0, webAuthnUtils_js_1.b64ToBytes)(loginCred.id)));
25
+ const loginVerifyResponse = await fetch(`${passkeyServerUrl}/login/verify`, {
26
+ method: "POST",
27
+ headers: { "Content-Type": "application/json" },
28
+ body: JSON.stringify({ cred: loginCred }),
29
+ credentials: "include"
30
+ });
31
+ const loginVerifyResult = await loginVerifyResponse.json();
32
+ if (window.sessionStorage === undefined) {
33
+ throw new Error("sessionStorage is not available");
34
+ }
35
+ sessionStorage.setItem("userId", loginVerifyResult.userId);
36
+ if (!loginVerifyResult.verification.verified) {
37
+ throw new Error("Login not verified");
38
+ }
39
+ pubKey = loginVerifyResult.pubkey;
40
+ }
41
+ else {
42
+ if (!passkeyName) {
43
+ throw new Error("No passkey name provided");
44
+ }
45
+ const registerOptionsResponse = await fetch(`${passkeyServerUrl}/register/options`, {
46
+ method: "POST",
47
+ headers: {
48
+ "Content-Type": "application/json"
49
+ },
50
+ body: JSON.stringify({ username: passkeyName }),
51
+ credentials: "include"
52
+ });
53
+ const registerOptions = await registerOptionsResponse.json();
54
+ if (window.sessionStorage === undefined) {
55
+ throw new Error("sessionStorage is not available");
56
+ }
57
+ sessionStorage.setItem("userId", registerOptions.userId);
58
+ const { startRegistration } = await Promise.resolve().then(() => require("@simplewebauthn/browser"));
59
+ const registerCred = await startRegistration(registerOptions.options);
60
+ authenticatorIdHash = (0, viem_1.keccak256)((0, webAuthnUtils_js_1.uint8ArrayToHexString)((0, webAuthnUtils_js_1.b64ToBytes)(registerCred.id)));
61
+ const registerVerifyResponse = await fetch(`${passkeyServerUrl}/register/verify`, {
62
+ method: "POST",
63
+ headers: {
64
+ "Content-Type": "application/json"
65
+ },
66
+ body: JSON.stringify({
67
+ userId: registerOptions.userId,
68
+ username: passkeyName,
69
+ cred: registerCred
70
+ }),
71
+ credentials: "include"
72
+ });
73
+ const registerVerifyResult = await registerVerifyResponse.json();
74
+ if (!registerVerifyResult.verified) {
75
+ throw new Error("Registration not verified");
76
+ }
77
+ pubKey = registerCred.response.publicKey;
78
+ }
79
+ if (!pubKey) {
80
+ throw new Error("No public key returned from registration credential");
81
+ }
82
+ const spkiDer = buffer_1.Buffer.from(pubKey, "base64");
83
+ const key = await crypto.subtle.importKey("spki", spkiDer, {
84
+ name: "ECDSA",
85
+ namedCurve: "P-256"
86
+ }, true, ["verify"]);
87
+ const rawKey = await crypto.subtle.exportKey("raw", key);
88
+ const rawKeyBuffer = buffer_1.Buffer.from(rawKey);
89
+ const pubKeyX = rawKeyBuffer.subarray(1, 33).toString("hex");
90
+ const pubKeyY = rawKeyBuffer.subarray(33).toString("hex");
91
+ return {
92
+ pubX: BigInt(`0x${pubKeyX}`),
93
+ pubY: BigInt(`0x${pubKeyY}`),
94
+ authenticatorIdHash
95
+ };
96
+ };
97
+ exports.toWebAuthnPubKey = toWebAuthnPubKey;
98
+ //# sourceMappingURL=toWebAuthnPubKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toWebAuthnPubKey.js","sourceRoot":"","sources":["../../signers/toWebAuthnPubKey.ts"],"names":[],"mappings":";;;AAAA,mCAA+B;AAC/B,+BAA0C;AAE1C,yDAAsE;AAEtE,IAAY,YAGX;AAHD,WAAY,YAAY;IACpB,qCAAqB,CAAA;IACrB,+BAAe,CAAA;AACnB,CAAC,EAHW,YAAY,4BAAZ,YAAY,QAGvB;AAEM,MAAM,gBAAgB,GAAG,KAAK,EAAE,EACnC,WAAW,EACX,gBAAgB,EAChB,IAAI,GAAG,YAAY,CAAC,KAAK,EAK5B,EAAwB,EAAE;IACvB,IAAI,MAA0B,CAAA;IAC9B,IAAI,mBAAwB,CAAA;IAC5B,IAAI,IAAI,KAAK,YAAY,CAAC,KAAK,EAAE,CAAC;QAE9B,MAAM,oBAAoB,GAAG,MAAM,KAAK,CACpC,GAAG,gBAAgB,gBAAgB,EACnC;YACI,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,WAAW,EAAE,SAAS;SACzB,CACJ,CAAA;QACD,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,CAAA;QAGtD,MAAM,EAAE,mBAAmB,EAAE,GAAG,2CAAa,yBAAyB,EAAC,CAAA;QACvE,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,YAAY,CAAC,CAAA;QAGzD,mBAAmB,GAAG,IAAA,gBAAS,EAC3B,IAAA,wCAAqB,EAAC,IAAA,6BAAU,EAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAClD,CAAA;QAGD,MAAM,mBAAmB,GAAG,MAAM,KAAK,CACnC,GAAG,gBAAgB,eAAe,EAClC;YACI,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;YACzC,WAAW,EAAE,SAAS;SACzB,CACJ,CAAA;QAED,MAAM,iBAAiB,GAAG,MAAM,mBAAmB,CAAC,IAAI,EAAE,CAAA;QAE1D,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;QACtD,CAAC;QACD,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAE1D,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAA;QACzC,CAAC;QAED,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAA;IACrC,CAAC;SAAM,CAAC;QACJ,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QAC/C,CAAC;QAED,MAAM,uBAAuB,GAAG,MAAM,KAAK,CACvC,GAAG,gBAAgB,mBAAmB,EACtC;YACI,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;aACrC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;YAC/C,WAAW,EAAE,SAAS;SACzB,CACJ,CAAA;QACD,MAAM,eAAe,GAAG,MAAM,uBAAuB,CAAC,IAAI,EAAE,CAAA;QAG5D,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;QACtD,CAAC;QACD,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,CAAA;QAGxD,MAAM,EAAE,iBAAiB,EAAE,GAAG,2CAAa,yBAAyB,EAAC,CAAA;QACrE,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;QAGrE,mBAAmB,GAAG,IAAA,gBAAS,EAC3B,IAAA,wCAAqB,EAAC,IAAA,6BAAU,EAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CACrD,CAAA;QAGD,MAAM,sBAAsB,GAAG,MAAM,KAAK,CACtC,GAAG,gBAAgB,kBAAkB,EACrC;YACI,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,cAAc,EAAE,kBAAkB;aACrC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACjB,MAAM,EAAE,eAAe,CAAC,MAAM;gBAC9B,QAAQ,EAAE,WAAW;gBACrB,IAAI,EAAE,YAAY;aACrB,CAAC;YACF,WAAW,EAAE,SAAS;SACzB,CACJ,CAAA;QAED,MAAM,oBAAoB,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,CAAA;QAChE,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;QAChD,CAAC;QAGD,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAA;IAC5C,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAA;IAC1E,CAAC;IAED,MAAM,OAAO,GAAG,eAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC7C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CACrC,MAAM,EACN,OAAO,EACP;QACI,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,OAAO;KACtB,EACD,IAAI,EACJ,CAAC,QAAQ,CAAC,CACb,CAAA;IAGD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACxD,MAAM,YAAY,GAAG,eAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAGxC,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC5D,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAEzD,OAAO;QACH,IAAI,EAAE,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC;QAC5B,IAAI,EAAE,MAAM,CAAC,KAAK,OAAO,EAAE,CAAC;QAC5B,mBAAmB;KACtB,CAAA;AACL,CAAC,CAAA;AA9IY,QAAA,gBAAgB,oBA8I5B"}
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toWebAuthnSigner = void 0;
4
+ const accounts_1 = require("permissionless/accounts");
5
+ const viem_1 = require("viem");
6
+ const viem_2 = require("viem");
7
+ const accounts_2 = require("viem/accounts");
8
+ const actions_1 = require("viem/actions");
9
+ const constants_js_1 = require("../constants.js");
10
+ const toWebAuthnPubKey_js_1 = require("./toWebAuthnPubKey.js");
11
+ const webAuthnUtils_js_1 = require("./webAuthnUtils.js");
12
+ const toWebAuthnSigner = async (client, { signerContractAddress = constants_js_1.WEBAUTHN_SIGNER_CONTRACT, pubKey, passkeyServerUrl, passkeyName, mode = toWebAuthnPubKey_js_1.WebAuthnMode.Register }) => {
13
+ pubKey =
14
+ pubKey ??
15
+ (await (0, toWebAuthnPubKey_js_1.toWebAuthnPubKey)({
16
+ passkeyName,
17
+ passkeyServerUrl,
18
+ mode
19
+ }));
20
+ if (!pubKey) {
21
+ throw new Error("WebAuthn public key not found");
22
+ }
23
+ const chainId = await (0, actions_1.getChainId)(client);
24
+ const signMessageUsingWebAuthn = async (message) => {
25
+ let messageContent;
26
+ if (typeof message === "string") {
27
+ messageContent = message;
28
+ }
29
+ else if ("raw" in message && typeof message.raw === "string") {
30
+ messageContent = message.raw;
31
+ }
32
+ else if ("raw" in message && message.raw instanceof Uint8Array) {
33
+ messageContent = message.raw.toString();
34
+ }
35
+ else {
36
+ throw new Error("Unsupported message format");
37
+ }
38
+ const formattedMessage = messageContent.startsWith("0x")
39
+ ? messageContent.slice(2)
40
+ : messageContent;
41
+ if (window.sessionStorage === undefined) {
42
+ throw new Error("sessionStorage is not available");
43
+ }
44
+ const userId = sessionStorage.getItem("userId");
45
+ const signInitiateResponse = await fetch(`${passkeyServerUrl}/sign-initiate`, {
46
+ method: "POST",
47
+ headers: { "Content-Type": "application/json" },
48
+ body: JSON.stringify({ data: formattedMessage, userId }),
49
+ credentials: "include"
50
+ });
51
+ const signInitiateResult = await signInitiateResponse.json();
52
+ const assertionOptions = {
53
+ challenge: signInitiateResult.challenge,
54
+ allowCredentials: signInitiateResult.allowCredentials,
55
+ userVerification: "required"
56
+ };
57
+ const { startAuthentication } = await Promise.resolve().then(() => require("@simplewebauthn/browser"));
58
+ const cred = await startAuthentication(assertionOptions);
59
+ const verifyResponse = await fetch(`${passkeyServerUrl}/sign-verify`, {
60
+ method: "POST",
61
+ headers: { "Content-Type": "application/json" },
62
+ body: JSON.stringify({ cred, userId }),
63
+ credentials: "include"
64
+ });
65
+ const verifyResult = await verifyResponse.json();
66
+ if (!verifyResult.success) {
67
+ throw new Error("Signature not verified");
68
+ }
69
+ const authenticatorData = verifyResult.authenticatorData;
70
+ const authenticatorDataHex = (0, webAuthnUtils_js_1.uint8ArrayToHexString)((0, webAuthnUtils_js_1.b64ToBytes)(authenticatorData));
71
+ const clientDataJSON = atob(cred.response.clientDataJSON);
72
+ const { beforeType } = (0, webAuthnUtils_js_1.findQuoteIndices)(clientDataJSON);
73
+ const signature = verifyResult.signature;
74
+ const signatureHex = (0, webAuthnUtils_js_1.uint8ArrayToHexString)((0, webAuthnUtils_js_1.b64ToBytes)(signature));
75
+ const { r, s } = (0, webAuthnUtils_js_1.parseAndNormalizeSig)(signatureHex);
76
+ const encodedSignature = (0, viem_2.encodeAbiParameters)([
77
+ { name: "authenticatorData", type: "bytes" },
78
+ { name: "clientDataJSON", type: "string" },
79
+ { name: "responseTypeLocation", type: "uint256" },
80
+ { name: "r", type: "uint256" },
81
+ { name: "s", type: "uint256" },
82
+ { name: "usePrecompiled", type: "bool" }
83
+ ], [
84
+ authenticatorDataHex,
85
+ clientDataJSON,
86
+ beforeType,
87
+ BigInt(r),
88
+ BigInt(s),
89
+ (0, webAuthnUtils_js_1.isRIP7212SupportedNetwork)(chainId)
90
+ ]);
91
+ return encodedSignature;
92
+ };
93
+ const account = (0, accounts_2.toAccount)({
94
+ address: "0x0000000000000000000000000000000000000000",
95
+ async signMessage({ message }) {
96
+ return signMessageUsingWebAuthn(message);
97
+ },
98
+ async signTransaction(_, __) {
99
+ throw new accounts_1.SignTransactionNotSupportedBySmartAccount();
100
+ },
101
+ async signTypedData(typedData) {
102
+ const { domain, message, primaryType } = typedData;
103
+ const types = {
104
+ EIP712Domain: (0, viem_1.getTypesForEIP712Domain)({ domain }),
105
+ ...typedData.types
106
+ };
107
+ (0, viem_1.validateTypedData)({ domain, message, primaryType, types });
108
+ const hash = (0, viem_1.hashTypedData)(typedData);
109
+ return signMessageUsingWebAuthn(hash);
110
+ }
111
+ });
112
+ return {
113
+ account,
114
+ signerContractAddress,
115
+ getSignerData: () => {
116
+ if (!pubKey) {
117
+ throw new Error("WebAuthn public key not found");
118
+ }
119
+ return (0, viem_2.encodeAbiParameters)([
120
+ {
121
+ components: [
122
+ { name: "pubKeyX", type: "uint256" },
123
+ { name: "pubKeyY", type: "uint256" }
124
+ ],
125
+ name: "WebAuthnSignerData",
126
+ type: "tuple"
127
+ },
128
+ { name: "authenticatorIdHash", type: "bytes32" }
129
+ ], [
130
+ { pubKeyX: pubKey.pubX, pubKeyY: pubKey.pubY },
131
+ pubKey.authenticatorIdHash
132
+ ]);
133
+ },
134
+ getDummySignature: () => {
135
+ return (0, viem_2.encodeAbiParameters)([
136
+ { name: "authenticatorData", type: "bytes" },
137
+ { name: "clientDataJSON", type: "string" },
138
+ { name: "responseTypeLocation", type: "uint256" },
139
+ { name: "r", type: "uint256" },
140
+ { name: "s", type: "uint256" },
141
+ { name: "usePrecompiled", type: "bool" }
142
+ ], [
143
+ "0x49960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d00000000",
144
+ '{"type":"webauthn.get","challenge":"tbxXNFS9X_4Byr1cMwqKrIGB-_30a0QhZ6y7ucM0BOE","origin":"http://localhost:3000","crossOrigin":false}',
145
+ 1n,
146
+ 44941127272049826721201904734628716258498742255959991581049806490182030242267n,
147
+ 9910254599581058084911561569808925251374718953855182016200087235935345969636n,
148
+ false
149
+ ]);
150
+ }
151
+ };
152
+ };
153
+ exports.toWebAuthnSigner = toWebAuthnSigner;
154
+ //# sourceMappingURL=toWebAuthnSigner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toWebAuthnSigner.js","sourceRoot":"","sources":["../../signers/toWebAuthnSigner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toSignerId = void 0;
4
+ const viem_1 = require("viem");
5
+ const toSignerId = (signer) => {
6
+ return (0, viem_1.encodeAbiParameters)([{ name: "signerData", type: "bytes" }], [(0, viem_1.concat)([signer.signerContractAddress, signer.getSignerData()])]);
7
+ };
8
+ exports.toSignerId = toSignerId;
9
+ //# sourceMappingURL=toSignerId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toSignerId.js","sourceRoot":"","sources":["../../../signers/utils/toSignerId.ts"],"names":[],"mappings":";;;AAAA,+BAA4D;AAGrD,MAAM,UAAU,GAAG,CAAC,MAAqB,EAAO,EAAE;IACrD,OAAO,IAAA,0BAAmB,EACtB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EACvC,CAAC,IAAA,aAAM,EAAC,CAAC,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CACnE,CAAA;AACL,CAAC,CAAA;AALY,QAAA,UAAU,cAKtB"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isRIP7212SupportedNetwork = exports.parseAndNormalizeSig = exports.findQuoteIndices = exports.b64ToBytes = exports.uint8ArrayToHexString = void 0;
4
+ const p256_1 = require("@noble/curves/p256");
5
+ const viem_1 = require("viem");
6
+ const RIP7212_SUPPORTED_NETWORKS = [80001];
7
+ const uint8ArrayToHexString = (array) => {
8
+ return `0x${Array.from(array, (byte) => byte.toString(16).padStart(2, "0")).join("")}`;
9
+ };
10
+ exports.uint8ArrayToHexString = uint8ArrayToHexString;
11
+ const b64ToBytes = (base64) => {
12
+ const paddedBase64 = base64
13
+ .replace(/-/g, "+")
14
+ .replace(/_/g, "/")
15
+ .padEnd(base64.length + ((4 - (base64.length % 4)) % 4), "=");
16
+ const binString = atob(paddedBase64);
17
+ return Uint8Array.from(binString, (m) => m.codePointAt(0) ?? 0);
18
+ };
19
+ exports.b64ToBytes = b64ToBytes;
20
+ const findQuoteIndices = (input) => {
21
+ const beforeTypeIndex = BigInt(input.lastIndexOf('"type":"webauthn.get"'));
22
+ const beforeChallengeIndex = BigInt(input.indexOf('"challenge'));
23
+ return {
24
+ beforeType: beforeTypeIndex,
25
+ beforeChallenge: beforeChallengeIndex
26
+ };
27
+ };
28
+ exports.findQuoteIndices = findQuoteIndices;
29
+ function parseAndNormalizeSig(derSig) {
30
+ const parsedSignature = p256_1.p256.Signature.fromDER(derSig.slice(2));
31
+ const bSig = (0, viem_1.hexToBytes)(`0x${parsedSignature.toCompactHex()}`);
32
+ const bR = bSig.slice(0, 32);
33
+ const bS = bSig.slice(32);
34
+ const r = (0, viem_1.bytesToBigInt)(bR);
35
+ let s = (0, viem_1.bytesToBigInt)(bS);
36
+ const n = BigInt("0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551");
37
+ if (s > n / 2n) {
38
+ s = n - s;
39
+ }
40
+ return { r, s };
41
+ }
42
+ exports.parseAndNormalizeSig = parseAndNormalizeSig;
43
+ const isRIP7212SupportedNetwork = (chainId) => RIP7212_SUPPORTED_NETWORKS.includes(chainId);
44
+ exports.isRIP7212SupportedNetwork = isRIP7212SupportedNetwork;
45
+ //# sourceMappingURL=webAuthnUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webAuthnUtils.js","sourceRoot":"","sources":["../../signers/webAuthnUtils.ts"],"names":[],"mappings":";;;AAAA,6CAAyC;AACzC,+BAA0D;AAE1D,MAAM,0BAA0B,GAAG,CAAC,KAAK,CAAC,CAAA;AAEnC,MAAM,qBAAqB,GAAG,CAAC,KAAiB,EAAiB,EAAE;IACtE,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CACnC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CACrC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAmB,CAAA;AACjC,CAAC,CAAA;AAJY,QAAA,qBAAqB,yBAIjC;AAEM,MAAM,UAAU,GAAG,CAAC,MAAc,EAAc,EAAE;IACrD,MAAM,YAAY,GAAG,MAAM;SACtB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;SAClB,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;SAClB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACjE,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAA;IACpC,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;AACnE,CAAC,CAAA;AAPY,QAAA,UAAU,cAOtB;AAEM,MAAM,gBAAgB,GAAG,CAC5B,KAAa,EACkC,EAAE;IACjD,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,CAAA;IAC1E,MAAM,oBAAoB,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAA;IAChE,OAAO;QACH,UAAU,EAAE,eAAe;QAC3B,eAAe,EAAE,oBAAoB;KACxC,CAAA;AACL,CAAC,CAAA;AATY,QAAA,gBAAgB,oBAS5B;AAID,SAAgB,oBAAoB,CAAC,MAAW;IAC5C,MAAM,eAAe,GAAG,WAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC/D,MAAM,IAAI,GAAG,IAAA,iBAAU,EAAC,KAAK,eAAe,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;IAE9D,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;IAC5B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAGzB,MAAM,CAAC,GAAG,IAAA,oBAAa,EAAC,EAAE,CAAC,CAAA;IAC3B,IAAI,CAAC,GAAG,IAAA,oBAAa,EAAC,EAAE,CAAC,CAAA;IACzB,MAAM,CAAC,GAAG,MAAM,CACZ,oEAAoE,CACvE,CAAA;IACD,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;QACb,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACb,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAA;AACnB,CAAC;AAjBD,oDAiBC;AAEM,MAAM,yBAAyB,GAAG,CAAC,OAAe,EAAW,EAAE,CAClE,0BAA0B,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;AADnC,QAAA,yBAAyB,6BACU"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toPermissionValidator = void 0;
4
+ const sdk_1 = require("@zerodev/sdk");
5
+ const permissionless_1 = require("permissionless");
6
+ const viem_1 = require("viem");
7
+ const actions_1 = require("viem/actions");
8
+ const constants_js_1 = require("./constants.js");
9
+ const index_js_1 = require("./policies/index.js");
10
+ const index_js_2 = require("./signers/index.js");
11
+ async function toPermissionValidator(client, { signer, policies, entryPoint: entryPointAddress, flag = constants_js_1.PolicyFlags.FOR_ALL_VALIDATION }) {
12
+ const chainId = await (0, actions_1.getChainId)(client);
13
+ const entryPointVersion = (0, permissionless_1.getEntryPointVersion)(entryPointAddress);
14
+ if (entryPointVersion !== "v0.7") {
15
+ throw new Error("Only EntryPoint 0.7 is supported");
16
+ }
17
+ const getEnableData = async (_kernelAccountAddress) => {
18
+ const enableData = (0, viem_1.encodeAbiParameters)([{ name: "policyAndSignerData", type: "bytes[]" }], [
19
+ [
20
+ ...policies.map((policy) => (0, viem_1.concat)([
21
+ policy.getPolicyInfoInBytes(),
22
+ policy.getPolicyData()
23
+ ])),
24
+ (0, viem_1.concat)([
25
+ flag,
26
+ signer.signerContractAddress,
27
+ signer.getSignerData()
28
+ ])
29
+ ]
30
+ ]);
31
+ return enableData;
32
+ };
33
+ const getPermissionId = () => {
34
+ const pIdData = (0, viem_1.encodeAbiParameters)([{ name: "policyAndSignerData", type: "bytes[]" }], [[(0, index_js_1.toPolicyId)(policies), flag, (0, index_js_2.toSignerId)(signer)]]);
35
+ return (0, viem_1.slice)((0, viem_1.keccak256)(pIdData), 0, 4);
36
+ };
37
+ return {
38
+ ...signer.account,
39
+ validatorType: "PERMISSION",
40
+ address: viem_1.zeroAddress,
41
+ source: "PermissionValidator",
42
+ getEnableData,
43
+ getIdentifier: getPermissionId,
44
+ signMessage: async ({ message }) => {
45
+ return (0, viem_1.concat)([
46
+ "0xff",
47
+ await signer.account.signMessage({ message })
48
+ ]);
49
+ },
50
+ signTypedData: async (typedData) => {
51
+ return (0, viem_1.concat)([
52
+ "0xff",
53
+ await signer.account.signTypedData(typedData)
54
+ ]);
55
+ },
56
+ signUserOperation: async (userOperation) => {
57
+ const userOpHash = (0, permissionless_1.getUserOperationHash)({
58
+ userOperation: { ...userOperation, signature: "0x" },
59
+ entryPoint: entryPointAddress,
60
+ chainId
61
+ });
62
+ const signature = await signer.account.signMessage({
63
+ message: { raw: userOpHash }
64
+ });
65
+ return (0, viem_1.concat)(["0xff", signature]);
66
+ },
67
+ async getNonceKey(_accountAddress, customNonceKey) {
68
+ if (customNonceKey) {
69
+ return customNonceKey;
70
+ }
71
+ return 0n;
72
+ },
73
+ async getDummySignature(_userOperation) {
74
+ return (0, viem_1.concat)(["0xff", signer.getDummySignature()]);
75
+ },
76
+ getPluginSerializationParams: () => {
77
+ return {
78
+ policies
79
+ };
80
+ },
81
+ isEnabled: async (kernelAccountAddress, _selector) => {
82
+ try {
83
+ const permissionConfig = await (0, permissionless_1.getAction)(client, actions_1.readContract)({
84
+ abi: sdk_1.KernelV3AccountAbi,
85
+ address: kernelAccountAddress,
86
+ functionName: "permissionConfig",
87
+ args: [getPermissionId()]
88
+ });
89
+ return permissionConfig.signer === signer.signerContractAddress;
90
+ }
91
+ catch (error) {
92
+ return false;
93
+ }
94
+ }
95
+ };
96
+ }
97
+ exports.toPermissionValidator = toPermissionValidator;
98
+ //# sourceMappingURL=toPermissionValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toPermissionValidator.js","sourceRoot":"","sources":["../toPermissionValidator.ts"],"names":[],"mappings":"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"}
package/_cjs/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":""}
package/_cjs/utils.js ADDED
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deserializePermissionAccountParams = exports.serializePermissionAccountParams = exports.isPermissionValidatorPlugin = exports.bytesToBase64 = exports.base64ToBytes = void 0;
4
+ function base64ToBytes(base64) {
5
+ const binString = atob(base64);
6
+ return Uint8Array.from(binString, (m) => m.codePointAt(0));
7
+ }
8
+ exports.base64ToBytes = base64ToBytes;
9
+ function bytesToBase64(bytes) {
10
+ const binString = Array.from(bytes, (x) => String.fromCodePoint(x)).join("");
11
+ return btoa(binString);
12
+ }
13
+ exports.bytesToBase64 = bytesToBase64;
14
+ function isPermissionValidatorPlugin(plugin) {
15
+ return plugin?.getPluginSerializationParams !== undefined;
16
+ }
17
+ exports.isPermissionValidatorPlugin = isPermissionValidatorPlugin;
18
+ const serializePermissionAccountParams = (params) => {
19
+ const replacer = (_, value) => {
20
+ if (typeof value === "bigint") {
21
+ return value.toString();
22
+ }
23
+ return value;
24
+ };
25
+ const jsonString = JSON.stringify(params, replacer);
26
+ const uint8Array = new TextEncoder().encode(jsonString);
27
+ const base64String = bytesToBase64(uint8Array);
28
+ return base64String;
29
+ };
30
+ exports.serializePermissionAccountParams = serializePermissionAccountParams;
31
+ const deserializePermissionAccountParams = (params) => {
32
+ const uint8Array = base64ToBytes(params);
33
+ const jsonString = new TextDecoder().decode(uint8Array);
34
+ return JSON.parse(jsonString);
35
+ };
36
+ exports.deserializePermissionAccountParams = deserializePermissionAccountParams;
37
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../utils.ts"],"names":[],"mappings":";;;AAGA,SAAgB,aAAa,CAAC,MAAc;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;IAC9B,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAW,CAAC,CAAA;AACxE,CAAC;AAHD,sCAGC;AAED,SAAgB,aAAa,CAAC,KAAiB;IAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC5E,OAAO,IAAI,CAAC,SAAS,CAAC,CAAA;AAC1B,CAAC;AAHD,sCAGC;AAED,SAAgB,2BAA2B,CAEvC,MAAW;IAEX,OAAO,MAAM,EAAE,4BAA4B,KAAK,SAAS,CAAA;AAC7D,CAAC;AALD,kEAKC;AAEM,MAAM,gCAAgC,GAAG,CAC5C,MAA+B,EACjC,EAAE;IAEA,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,KAAU,EAAE,EAAE;QACvC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAA;QAC3B,CAAC;QACD,OAAO,KAAK,CAAA;IAChB,CAAC,CAAA;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IACnD,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACvD,MAAM,YAAY,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;IAC9C,OAAO,YAAY,CAAA;AACvB,CAAC,CAAA;AAfY,QAAA,gCAAgC,oCAe5C;AAEM,MAAM,kCAAkC,GAAG,CAAC,MAAc,EAAE,EAAE;IACjE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IACxC,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;IACvD,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAA4B,CAAA;AAC5D,CAAC,CAAA;AAJY,QAAA,kCAAkC,sCAI9C"}
@@ -0,0 +1,15 @@
1
+ export const ECDSA_SIGNER_CONTRACT = "0x6A6F069E2a08c2468e7724Ab3250CdBFBA14D4FF";
2
+ export const WEBAUTHN_SIGNER_CONTRACT = "0x8AA55d4BfAE101609078681A69B5bc3181516612";
3
+ export const CALL_POLICY_CONTRACT = "0xe4Fec84B7B002273ecC86baa65a831ddB92d30a8";
4
+ export const GAS_POLICY_CONTRACT = "0xaeFC5AbC67FfD258abD0A3E54f65E70326F84b23";
5
+ export const RATE_LIMIT_POLICY_CONTRACT = "0xf63d4139B25c836334edD76641356c6b74C86873";
6
+ export const SIGNATURE_POLICY_CONTRACT = "0xF6A936c88D97E6fad13b98d2FD731Ff17eeD591d";
7
+ export const SUDO_POLICY_CONTRACT = "0x67b436caD8a6D025DF6C82C5BB43fbF11fC5B9B7";
8
+ export const TIMESTAMP_POLICY_CONTRACT = "0xB9f8f524bE6EcD8C945b1b87f9ae5C192FdCE20F";
9
+ export var PolicyFlags;
10
+ (function (PolicyFlags) {
11
+ PolicyFlags["FOR_ALL_VALIDATION"] = "0x0000";
12
+ PolicyFlags["NOT_FOR_VALIDATE_USEROP"] = "0x0001";
13
+ PolicyFlags["NOT_FOR_VALIDATE_SIG"] = "0x0002";
14
+ })(PolicyFlags || (PolicyFlags = {}));
15
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAC9B,4CAA4C,CAAA;AAChD,MAAM,CAAC,MAAM,wBAAwB,GACjC,4CAA4C,CAAA;AAChD,MAAM,CAAC,MAAM,oBAAoB,GAAG,4CAA4C,CAAA;AAChF,MAAM,CAAC,MAAM,mBAAmB,GAAG,4CAA4C,CAAA;AAC/E,MAAM,CAAC,MAAM,0BAA0B,GACnC,4CAA4C,CAAA;AAChD,MAAM,CAAC,MAAM,yBAAyB,GAClC,4CAA4C,CAAA;AAChD,MAAM,CAAC,MAAM,oBAAoB,GAAG,4CAA4C,CAAA;AAChF,MAAM,CAAC,MAAM,yBAAyB,GAClC,4CAA4C,CAAA;AAEhD,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACnB,4CAA6B,CAAA;IAC7B,iDAAkC,CAAA;IAClC,8CAA+B,CAAA;AACnC,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB"}
@@ -0,0 +1,94 @@
1
+ import { KernelFactoryStakerAbi, KernelV3AccountAbi, createKernelAccount } from "@zerodev/sdk";
2
+ import { toKernelPluginManager } from "@zerodev/sdk/accounts";
3
+ import { getEntryPointVersion } from "permissionless";
4
+ import { decodeFunctionData } from "viem";
5
+ import { privateKeyToAccount } from "viem/accounts";
6
+ import { toCallPolicy, toGasPolicy, toRateLimitPolicy, toSignatureCallerPolicy, toSudoPolicy, toTimestampPolicy } from "./policies/index.js";
7
+ import { toECDSASigner } from "./signers/toECDSASigner.js";
8
+ import { toPermissionValidator } from "./toPermissionValidator.js";
9
+ import {} from "./types.js";
10
+ import { deserializePermissionAccountParams } from "./utils.js";
11
+ export const deserializePermissionAccount = async (client, entryPointAddress, modularPermissionAccountParams, modularSigner) => {
12
+ const entryPointVersion = getEntryPointVersion(entryPointAddress);
13
+ if (entryPointVersion !== "v0.7") {
14
+ throw new Error("Only EntryPoint 0.7 is supported");
15
+ }
16
+ const params = deserializePermissionAccountParams(modularPermissionAccountParams);
17
+ let signer;
18
+ if (params.privateKey)
19
+ signer = toECDSASigner({
20
+ signer: privateKeyToAccount(params.privateKey)
21
+ });
22
+ else if (modularSigner)
23
+ signer = modularSigner;
24
+ else
25
+ throw new Error("No signer or serialized sessionKey provided");
26
+ const modularPermissionPlugin = await toPermissionValidator(client, {
27
+ signer,
28
+ policies: await Promise.all(params.permissionParams.policies?.map((policy) => createPolicyFromParams(policy)) || []),
29
+ entryPoint: entryPointAddress
30
+ });
31
+ const { index, validatorInitData } = decodeParamsFromInitCode(params.accountParams.initCode);
32
+ const kernelPluginManager = await toKernelPluginManager(client, {
33
+ regular: modularPermissionPlugin,
34
+ pluginEnableSignature: params.enableSignature,
35
+ validatorInitData,
36
+ action: params.action,
37
+ entryPoint: entryPointAddress,
38
+ ...params.validityData
39
+ });
40
+ return createKernelAccount(client, {
41
+ plugins: kernelPluginManager,
42
+ index,
43
+ deployedAccountAddress: params.accountParams.accountAddress,
44
+ entryPoint: entryPointAddress
45
+ });
46
+ };
47
+ export const createPolicyFromParams = async (policy) => {
48
+ switch (policy.policyParams.type) {
49
+ case "call":
50
+ return await toCallPolicy(policy.policyParams);
51
+ case "gas":
52
+ return await toGasPolicy(policy.policyParams);
53
+ case "rate-limit":
54
+ return await toRateLimitPolicy(policy.policyParams);
55
+ case "signature-caller":
56
+ return await toSignatureCallerPolicy(policy.policyParams);
57
+ case "sudo":
58
+ return await toSudoPolicy(policy.policyParams);
59
+ case "timestamp":
60
+ return await toTimestampPolicy(policy.policyParams);
61
+ default:
62
+ throw new Error("Unsupported policy type");
63
+ }
64
+ };
65
+ export const decodeParamsFromInitCode = (initCode) => {
66
+ let index;
67
+ let validatorInitData;
68
+ const deployWithFactoryFunctionData = decodeFunctionData({
69
+ abi: KernelFactoryStakerAbi,
70
+ data: `0x${initCode.slice(42)}`
71
+ });
72
+ if (!deployWithFactoryFunctionData)
73
+ throw new Error("Invalid initCode");
74
+ if (deployWithFactoryFunctionData.functionName === "deployWithFactory") {
75
+ index = BigInt(deployWithFactoryFunctionData.args[2]);
76
+ const initializeFunctionData = decodeFunctionData({
77
+ abi: KernelV3AccountAbi,
78
+ data: deployWithFactoryFunctionData.args[1]
79
+ });
80
+ if (!initializeFunctionData)
81
+ throw new Error("Invalid initCode");
82
+ if (initializeFunctionData.functionName === "initialize") {
83
+ validatorInitData = {
84
+ validatorAddress: initializeFunctionData.args[0],
85
+ identifier: initializeFunctionData.args[0],
86
+ enableData: initializeFunctionData.args[2]
87
+ };
88
+ }
89
+ }
90
+ if (index === undefined || validatorInitData === undefined)
91
+ throw new Error("Invalid initCode");
92
+ return { index, validatorInitData };
93
+ };
94
+ //# sourceMappingURL=deserializePermissionAccount.js.map