@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.
- package/_cjs/constants.js +18 -0
- package/_cjs/constants.js.map +1 -0
- package/_cjs/deserializePermissionAccount.js +99 -0
- package/_cjs/deserializePermissionAccount.js.map +1 -0
- package/_cjs/index.js +12 -0
- package/_cjs/index.js.map +1 -0
- package/_cjs/package.json +1 -0
- package/_cjs/policies/callPolicyUtils.js +87 -0
- package/_cjs/policies/callPolicyUtils.js.map +1 -0
- package/_cjs/policies/index.js +21 -0
- package/_cjs/policies/index.js.map +1 -0
- package/_cjs/policies/toCallPolicy.js +42 -0
- package/_cjs/policies/toCallPolicy.js.map +1 -0
- package/_cjs/policies/toGasPolicy.js +30 -0
- package/_cjs/policies/toGasPolicy.js.map +1 -0
- package/_cjs/policies/toRateLimitPolicy.js +30 -0
- package/_cjs/policies/toRateLimitPolicy.js.map +1 -0
- package/_cjs/policies/toSignatureCallerPolicy.js +24 -0
- package/_cjs/policies/toSignatureCallerPolicy.js.map +1 -0
- package/_cjs/policies/toSudoPolicy.js +22 -0
- package/_cjs/policies/toSudoPolicy.js.map +1 -0
- package/_cjs/policies/toTimestampPolicy.js +27 -0
- package/_cjs/policies/toTimestampPolicy.js.map +1 -0
- package/_cjs/policies/types.js +19 -0
- package/_cjs/policies/types.js.map +1 -0
- package/_cjs/policies/utils/toPolicyId.js +11 -0
- package/_cjs/policies/utils/toPolicyId.js.map +1 -0
- package/_cjs/serializePermissionAccount.js +27 -0
- package/_cjs/serializePermissionAccount.js.map +1 -0
- package/_cjs/signers/index.js +14 -0
- package/_cjs/signers/index.js.map +1 -0
- package/_cjs/signers/toECDSASigner.js +39 -0
- package/_cjs/signers/toECDSASigner.js.map +1 -0
- package/_cjs/signers/toEmptyECDSASigner.js +30 -0
- package/_cjs/signers/toEmptyECDSASigner.js.map +1 -0
- package/_cjs/signers/toWebAuthnPubKey.js +98 -0
- package/_cjs/signers/toWebAuthnPubKey.js.map +1 -0
- package/_cjs/signers/toWebAuthnSigner.js +154 -0
- package/_cjs/signers/toWebAuthnSigner.js.map +1 -0
- package/_cjs/signers/utils/toSignerId.js +9 -0
- package/_cjs/signers/utils/toSignerId.js.map +1 -0
- package/_cjs/signers/webAuthnUtils.js +45 -0
- package/_cjs/signers/webAuthnUtils.js.map +1 -0
- package/_cjs/toPermissionValidator.js +98 -0
- package/_cjs/toPermissionValidator.js.map +1 -0
- package/_cjs/types.js +3 -0
- package/_cjs/types.js.map +1 -0
- package/_cjs/utils.js +37 -0
- package/_cjs/utils.js.map +1 -0
- package/_esm/constants.js +15 -0
- package/_esm/constants.js.map +1 -0
- package/_esm/deserializePermissionAccount.js +94 -0
- package/_esm/deserializePermissionAccount.js.map +1 -0
- package/_esm/index.js +5 -0
- package/_esm/index.js.map +1 -0
- package/_esm/package.json +1 -0
- package/_esm/policies/callPolicyUtils.js +82 -0
- package/_esm/policies/callPolicyUtils.js.map +1 -0
- package/_esm/policies/index.js +9 -0
- package/_esm/policies/index.js.map +1 -0
- package/_esm/policies/toCallPolicy.js +38 -0
- package/_esm/policies/toCallPolicy.js.map +1 -0
- package/_esm/policies/toGasPolicy.js +26 -0
- package/_esm/policies/toGasPolicy.js.map +1 -0
- package/_esm/policies/toRateLimitPolicy.js +26 -0
- package/_esm/policies/toRateLimitPolicy.js.map +1 -0
- package/_esm/policies/toSignatureCallerPolicy.js +20 -0
- package/_esm/policies/toSignatureCallerPolicy.js.map +1 -0
- package/_esm/policies/toSudoPolicy.js +18 -0
- package/_esm/policies/toSudoPolicy.js.map +1 -0
- package/_esm/policies/toTimestampPolicy.js +23 -0
- package/_esm/policies/toTimestampPolicy.js.map +1 -0
- package/_esm/policies/types.js +17 -0
- package/_esm/policies/types.js.map +1 -0
- package/_esm/policies/utils/toPolicyId.js +7 -0
- package/_esm/policies/utils/toPolicyId.js.map +1 -0
- package/_esm/serializePermissionAccount.js +23 -0
- package/_esm/serializePermissionAccount.js.map +1 -0
- package/_esm/signers/index.js +6 -0
- package/_esm/signers/index.js.map +1 -0
- package/_esm/signers/toECDSASigner.js +36 -0
- package/_esm/signers/toECDSASigner.js.map +1 -0
- package/_esm/signers/toEmptyECDSASigner.js +27 -0
- package/_esm/signers/toEmptyECDSASigner.js.map +1 -0
- package/_esm/signers/toWebAuthnPubKey.js +108 -0
- package/_esm/signers/toWebAuthnPubKey.js.map +1 -0
- package/_esm/signers/toWebAuthnSigner.js +164 -0
- package/_esm/signers/toWebAuthnSigner.js.map +1 -0
- package/_esm/signers/utils/toSignerId.js +5 -0
- package/_esm/signers/utils/toSignerId.js.map +1 -0
- package/_esm/signers/webAuthnUtils.js +41 -0
- package/_esm/signers/webAuthnUtils.js.map +1 -0
- package/_esm/toPermissionValidator.js +94 -0
- package/_esm/toPermissionValidator.js.map +1 -0
- package/_esm/types.js +3 -0
- package/_esm/types.js.map +1 -0
- package/_esm/utils.js +32 -0
- package/_esm/utils.js.map +1 -0
- package/_types/constants.d.ts +14 -0
- package/_types/constants.d.ts.map +1 -0
- package/_types/deserializePermissionAccount.d.ts +13 -0
- package/_types/deserializePermissionAccount.d.ts.map +1 -0
- package/_types/index.d.ts +6 -0
- package/_types/index.d.ts.map +1 -0
- package/_types/policies/callPolicyUtils.d.ts +5 -0
- package/_types/policies/callPolicyUtils.d.ts.map +1 -0
- package/_types/policies/index.d.ts +9 -0
- package/_types/policies/index.d.ts.map +1 -0
- package/_types/policies/toCallPolicy.d.ts +8 -0
- package/_types/policies/toCallPolicy.d.ts.map +1 -0
- package/_types/policies/toGasPolicy.d.ts +9 -0
- package/_types/policies/toGasPolicy.d.ts.map +1 -0
- package/_types/policies/toRateLimitPolicy.d.ts +8 -0
- package/_types/policies/toRateLimitPolicy.d.ts.map +1 -0
- package/_types/policies/toSignatureCallerPolicy.d.ts +7 -0
- package/_types/policies/toSignatureCallerPolicy.d.ts.map +1 -0
- package/_types/policies/toSudoPolicy.d.ts +4 -0
- package/_types/policies/toSudoPolicy.d.ts.map +1 -0
- package/_types/policies/toTimestampPolicy.d.ts +7 -0
- package/_types/policies/toTimestampPolicy.d.ts.map +1 -0
- package/_types/policies/types.d.ts +56 -0
- package/_types/policies/types.d.ts.map +1 -0
- package/_types/policies/utils/toPolicyId.d.ts +4 -0
- package/_types/policies/utils/toPolicyId.d.ts.map +1 -0
- package/_types/serializePermissionAccount.d.ts +5 -0
- package/_types/serializePermissionAccount.d.ts.map +1 -0
- package/_types/signers/index.d.ts +6 -0
- package/_types/signers/index.d.ts.map +1 -0
- package/_types/signers/toECDSASigner.d.ts +8 -0
- package/_types/signers/toECDSASigner.d.ts.map +1 -0
- package/_types/signers/toEmptyECDSASigner.d.ts +4 -0
- package/_types/signers/toEmptyECDSASigner.d.ts.map +1 -0
- package/_types/signers/toWebAuthnPubKey.d.ts +11 -0
- package/_types/signers/toWebAuthnPubKey.d.ts.map +1 -0
- package/_types/signers/toWebAuthnSigner.d.ts +16 -0
- package/_types/signers/toWebAuthnSigner.d.ts.map +1 -0
- package/_types/signers/utils/toSignerId.d.ts +4 -0
- package/_types/signers/utils/toSignerId.d.ts.map +1 -0
- package/_types/signers/webAuthnUtils.d.ts +13 -0
- package/_types/signers/webAuthnUtils.d.ts.map +1 -0
- package/_types/toPermissionValidator.d.ts +5 -0
- package/_types/toPermissionValidator.d.ts.map +1 -0
- package/_types/types.d.ts +61 -0
- package/_types/types.d.ts.map +1 -0
- package/_types/utils.d.ts +8 -0
- package/_types/utils.d.ts.map +1 -0
- package/constants.ts +19 -0
- package/deserializePermissionAccount.ts +130 -0
- package/index.ts +5 -0
- package/package.json +63 -0
- package/policies/callPolicyUtils.ts +122 -0
- package/policies/index.ts +17 -0
- package/policies/toCallPolicy.ts +65 -0
- package/policies/toGasPolicy.ts +42 -0
- package/policies/toRateLimitPolicy.ts +41 -0
- package/policies/toSignatureCallerPolicy.ts +32 -0
- package/policies/toSudoPolicy.ts +24 -0
- package/policies/toTimestampPolicy.ts +37 -0
- package/policies/types.ts +118 -0
- package/policies/utils/toPolicyId.ts +13 -0
- package/serializePermissionAccount.ts +38 -0
- package/signers/index.ts +11 -0
- package/signers/toECDSASigner.ts +61 -0
- package/signers/toEmptyECDSASigner.ts +34 -0
- package/signers/toWebAuthnPubKey.ts +153 -0
- package/signers/toWebAuthnSigner.ts +246 -0
- package/signers/utils/toSignerId.ts +9 -0
- package/signers/webAuthnUtils.ts +54 -0
- package/toPermissionValidator.ts +151 -0
- package/types.ts +75 -0
- 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 @@
|
|
|
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
|