@rhinestone/sdk 1.0.0-alpha.14 → 1.0.0-alpha.16
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/dist/src/accounts/custom.d.ts +18 -0
- package/dist/src/accounts/custom.d.ts.map +1 -0
- package/dist/src/accounts/custom.js +121 -0
- package/dist/src/accounts/custom.test.d.ts +2 -0
- package/dist/src/accounts/custom.test.d.ts.map +1 -0
- package/dist/src/accounts/custom.test.js +64 -0
- package/dist/src/accounts/index.d.ts +1 -1
- package/dist/src/accounts/index.d.ts.map +1 -1
- package/dist/src/accounts/index.js +37 -6
- package/dist/src/accounts/index.test.js +3 -3
- package/dist/src/accounts/json-rpc/index.d.ts +5 -0
- package/dist/src/accounts/json-rpc/index.d.ts.map +1 -0
- package/dist/src/accounts/json-rpc/index.js +16 -0
- package/dist/src/accounts/json-rpc/index.test.d.ts +2 -0
- package/dist/src/accounts/json-rpc/index.test.d.ts.map +1 -0
- package/dist/src/accounts/json-rpc/index.test.js +16 -0
- package/dist/src/accounts/json-rpc/providers.d.ts +4 -0
- package/dist/src/accounts/json-rpc/providers.d.ts.map +1 -0
- package/dist/src/accounts/json-rpc/providers.js +14 -0
- package/dist/src/accounts/json-rpc/providers.test.d.ts +2 -0
- package/dist/src/accounts/json-rpc/providers.test.d.ts.map +1 -0
- package/dist/src/accounts/json-rpc/providers.test.js +15 -0
- package/dist/src/accounts/kernel.test.js +8 -8
- package/dist/src/accounts/nexus.d.ts.map +1 -1
- package/dist/src/accounts/nexus.js +34 -8
- package/dist/src/accounts/nexus.test.js +12 -12
- package/dist/src/accounts/safe.d.ts.map +1 -1
- package/dist/src/accounts/safe.js +2 -0
- package/dist/src/accounts/safe.test.js +8 -8
- package/dist/src/accounts/signing/common.d.ts +10 -6
- package/dist/src/accounts/signing/common.d.ts.map +1 -1
- package/dist/src/accounts/signing/common.js +41 -12
- package/dist/src/accounts/signing/message.d.ts +2 -2
- package/dist/src/accounts/signing/message.d.ts.map +1 -1
- package/dist/src/accounts/signing/message.js +7 -11
- package/dist/src/accounts/signing/passkeys.d.ts +29 -0
- package/dist/src/accounts/signing/passkeys.d.ts.map +1 -0
- package/dist/src/accounts/signing/passkeys.js +90 -0
- package/dist/src/accounts/signing/passkeys.test.d.ts +2 -0
- package/dist/src/accounts/signing/passkeys.test.d.ts.map +1 -0
- package/dist/src/accounts/signing/passkeys.test.js +73 -0
- package/dist/src/accounts/signing/typedData.d.ts +2 -2
- package/dist/src/accounts/signing/typedData.d.ts.map +1 -1
- package/dist/src/accounts/signing/typedData.js +7 -11
- package/dist/src/accounts/startale.test.js +8 -8
- package/dist/src/accounts/utils.d.ts +3 -3
- package/dist/src/accounts/utils.d.ts.map +1 -1
- package/dist/src/accounts/utils.js +3 -40
- package/dist/src/actions/index.d.ts +45 -1
- package/dist/src/actions/index.d.ts.map +1 -1
- package/dist/src/actions/index.js +174 -9
- package/dist/src/actions/index.test.js +16 -16
- package/dist/src/execution/index.d.ts.map +1 -1
- package/dist/src/execution/index.js +3 -6
- package/dist/src/execution/utils.d.ts +1 -1
- package/dist/src/execution/utils.d.ts.map +1 -1
- package/dist/src/execution/utils.js +17 -16
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -1
- package/dist/src/modules/index.d.ts +2 -17
- package/dist/src/modules/index.d.ts.map +1 -1
- package/dist/src/modules/index.js +4 -55
- package/dist/src/modules/index.test.js +2 -16
- package/dist/src/modules/omni-account.d.ts +2 -1
- package/dist/src/modules/omni-account.d.ts.map +1 -1
- package/dist/src/modules/omni-account.js +3 -1
- package/dist/src/modules/read.d.ts.map +1 -1
- package/dist/src/modules/read.js +1 -0
- package/dist/src/modules/validators/core.d.ts +4 -3
- package/dist/src/modules/validators/core.d.ts.map +1 -1
- package/dist/src/modules/validators/core.js +46 -37
- package/dist/src/modules/validators/core.test.js +6 -6
- package/dist/src/modules/validators/smart-sessions.test.js +4 -4
- package/dist/src/orchestrator/consts.d.ts +2 -1
- package/dist/src/orchestrator/consts.d.ts.map +1 -1
- package/dist/src/orchestrator/consts.js +3 -1
- package/dist/src/orchestrator/registry.d.ts +1 -23
- package/dist/src/orchestrator/registry.d.ts.map +1 -1
- package/dist/src/orchestrator/registry.js +22 -24
- package/dist/src/orchestrator/registry.test.js +4 -4
- package/dist/src/orchestrator/types.d.ts +1 -6
- package/dist/src/orchestrator/types.d.ts.map +1 -1
- package/dist/src/types.d.ts +29 -7
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/src/orchestrator/registry.json +0 -365
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const passkeys_1 = require("./passkeys");
|
|
5
|
+
(0, vitest_1.describe)('Passkeys', () => {
|
|
6
|
+
(0, vitest_1.describe)('Parse Public Key', () => {
|
|
7
|
+
(0, vitest_1.test)('default', () => {
|
|
8
|
+
const parsed = (0, passkeys_1.parsePublicKey)('0x7a2b9234dbc079da984e021acb76cf230dff5c03f2c5668024ddaeeb388520294bd61dcef34cade4d3bca405e63179ef022948ac45d0b0530cb125977c118ad7');
|
|
9
|
+
(0, vitest_1.expect)(parsed.x).toEqual(55259151030970399927675340420359705684663366332711724388150056154288143802409n);
|
|
10
|
+
(0, vitest_1.expect)(parsed.y).toEqual(34301774645623054632612895881498878184566570389017277955884655401641769536215n);
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
(0, vitest_1.describe)('Parse Signature', () => {
|
|
14
|
+
(0, vitest_1.test)('default', () => {
|
|
15
|
+
const parsed = (0, passkeys_1.parseSignature)('0xf60f80fe3fd029d1b380d631f0b659bfbc8f8f60921a88e1e123c159aa540f920ed337464d1bb813dc5f9c3e81998185370da49cc525e9f42cdf805f1030aff8');
|
|
16
|
+
(0, vitest_1.expect)(parsed.r).toEqual(111296353735534357766084082487308191701889898756402773464442570100570127077266n);
|
|
17
|
+
(0, vitest_1.expect)(parsed.s).toEqual(6705566102199758127831148650668918567109283965479844611524279039128750829560n);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
(0, vitest_1.describe)('Generate Credential ID', () => {
|
|
21
|
+
(0, vitest_1.test)('default', () => {
|
|
22
|
+
const id = (0, passkeys_1.generateCredentialId)(55259151030970399927675340420359705684663366332711724388150056154288143802409n, 34301774645623054632612895881498878184566570389017277955884655401641769536215n, '0xb975975c9f381b5df3b4af93bdd1ba739698bc37');
|
|
23
|
+
(0, vitest_1.expect)(id).toEqual('0x9437809df26444a849d303b1174543f0851df5fae657da19f3bb0d92356426ea');
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
(0, vitest_1.describe)('Pack Signature', () => {
|
|
27
|
+
(0, vitest_1.test)('single', () => {
|
|
28
|
+
const credIds = [
|
|
29
|
+
'0x9437809df26444a849d303b1174543f0851df5fae657da19f3bb0d92356426ea',
|
|
30
|
+
];
|
|
31
|
+
const usePrecompile = false;
|
|
32
|
+
const webAuthns = [
|
|
33
|
+
{
|
|
34
|
+
authenticatorData: '0x49960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d00000000',
|
|
35
|
+
clientDataJSON: '{"type":"webauthn.get","challenge":"4p2TiZpTooLCFFYTC2HmMPVMiVjZGghCJ0dz7zUDEeA","origin":"http://localhost:5173","crossOrigin":false}',
|
|
36
|
+
challengeIndex: 23n,
|
|
37
|
+
typeIndex: 1n,
|
|
38
|
+
r: 111296353735534357766084082487308191701889898756402773464442570100570127077266n,
|
|
39
|
+
s: 6705566102199758127831148650668918567109283965479844611524279039128750829560n,
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
const packed = (0, passkeys_1.packSignature)(credIds, usePrecompile, webAuthns);
|
|
43
|
+
(0, vitest_1.expect)(packed).toEqual('0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000019437809df26444a849d303b1174543f0851df5fae657da19f3bb0d92356426ea0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000170000000000000000000000000000000000000000000000000000000000000001f60f80fe3fd029d1b380d631f0b659bfbc8f8f60921a88e1e123c159aa540f920ed337464d1bb813dc5f9c3e81998185370da49cc525e9f42cdf805f1030aff8000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000867b2274797065223a22776562617574686e2e676574222c226368616c6c656e6765223a2234703254695a70546f6f4c43464659544332486d4d50564d69566a5a476768434a30647a377a5544456541222c226f726967696e223a22687474703a2f2f6c6f63616c686f73743a35313733222c2263726f73734f726967696e223a66616c73657d0000000000000000000000000000000000000000000000000000');
|
|
44
|
+
});
|
|
45
|
+
(0, vitest_1.test)('multisig', () => {
|
|
46
|
+
const credIds = [
|
|
47
|
+
'0x9437809df26444a849d303b1174543f0851df5fae657da19f3bb0d92356426ea',
|
|
48
|
+
'0x6be9646e4d64132d1a1789a467d0501e948d23afce6792d963f401434d7bef33',
|
|
49
|
+
];
|
|
50
|
+
const usePrecompile = true;
|
|
51
|
+
const webAuthns = [
|
|
52
|
+
{
|
|
53
|
+
authenticatorData: '0x49960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d00000000',
|
|
54
|
+
clientDataJSON: '{"type":"webauthn.get","challenge":"4p2TiZpTooLCFFYTC2HmMPVMiVjZGghCJ0dz7zUDEeA","origin":"http://localhost:5173","crossOrigin":false}',
|
|
55
|
+
challengeIndex: 23n,
|
|
56
|
+
typeIndex: 1n,
|
|
57
|
+
r: 111296353735534357766084082487308191701889898756402773464442570100570127077266n,
|
|
58
|
+
s: 6705566102199758127831148650668918567109283965479844611524279039128750829560n,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
authenticatorData: '0x49960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d00000000',
|
|
62
|
+
clientDataJSON: '{"type":"webauthn.get","challenge":"19qAcQAVCeucFt8tQSizBBdbxW6Jkex_3nAejdRuVek","origin":"http://localhost:5173","crossOrigin":false}',
|
|
63
|
+
challengeIndex: 23n,
|
|
64
|
+
typeIndex: 1n,
|
|
65
|
+
r: 52674584175531096231012948456392242307658490190760877544141461393264453154030n,
|
|
66
|
+
s: 1045924358482323524717958171193057427003444327614976707002321626568131749413n,
|
|
67
|
+
},
|
|
68
|
+
];
|
|
69
|
+
const packed = (0, passkeys_1.packSignature)(credIds, usePrecompile, webAuthns);
|
|
70
|
+
(0, vitest_1.expect)(packed).toEqual('0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000026be9646e4d64132d1a1789a467d0501e948d23afce6792d963f401434d7bef339437809df26444a849d303b1174543f0851df5fae657da19f3bb0d92356426ea00000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000022000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000001700000000000000000000000000000000000000000000000000000000000000017474c214167b8a4704cf06f75287a738e7ddbcca9cc0383db6dac6a7d090f4ee024ff8e2a2e8c54aa8cf5f36e3b6125016c3d58d896e3a85c5cd2cd0027a2625000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000867b2274797065223a22776562617574686e2e676574222c226368616c6c656e6765223a22313971416351415643657563467438745153697a424264627857364a6b65785f336e41656a64527556656b222c226f726967696e223a22687474703a2f2f6c6f63616c686f73743a35313733222c2263726f73734f726967696e223a66616c73657d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000170000000000000000000000000000000000000000000000000000000000000001f60f80fe3fd029d1b380d631f0b659bfbc8f8f60921a88e1e123c159aa540f920ed337464d1bb813dc5f9c3e81998185370da49cc525e9f42cdf805f1030aff8000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000867b2274797065223a22776562617574686e2e676574222c226368616c6c656e6765223a2234703254695a70546f6f4c43464659544332486d4d50564d69566a5a476768434a30647a377a5544456541222c226f726967696e223a22687474703a2f2f6c6f63616c686f73743a35313733222c2263726f73734f726967696e223a66616c73657d0000000000000000000000000000000000000000000000000000');
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { Chain, HashTypedDataParameters, Hex, TypedData } from 'viem';
|
|
1
|
+
import type { Address, Chain, HashTypedDataParameters, Hex, TypedData } from 'viem';
|
|
2
2
|
import type { SignerSet } from '../../types';
|
|
3
|
-
declare function sign<typedData extends TypedData | Record<string, unknown> = TypedData, primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData>(signers: SignerSet, chain: Chain, parameters: HashTypedDataParameters<typedData, primaryType>): Promise<Hex>;
|
|
3
|
+
declare function sign<typedData extends TypedData | Record<string, unknown> = TypedData, primaryType extends keyof typedData | 'EIP712Domain' = keyof typedData>(signers: SignerSet, chain: Chain, address: Address, parameters: HashTypedDataParameters<typedData, primaryType>): Promise<Hex>;
|
|
4
4
|
export { sign };
|
|
5
5
|
//# sourceMappingURL=typedData.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typedData.d.ts","sourceRoot":"","sources":["../../../../accounts/signing/typedData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,KAAK,EACL,uBAAuB,EACvB,GAAG,EACH,SAAS,EACV,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"typedData.d.ts","sourceRoot":"","sources":["../../../../accounts/signing/typedData.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,OAAO,EACP,KAAK,EACL,uBAAuB,EACvB,GAAG,EACH,SAAS,EACV,MAAM,MAAM,CAAA;AAEb,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAS5C,iBAAe,IAAI,CACjB,SAAS,SAAS,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACjE,WAAW,SAAS,MAAM,SAAS,GAAG,cAAc,GAAG,MAAM,SAAS,EAEtE,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,uBAAuB,CAAC,SAAS,EAAE,WAAW,CAAC,GAC1D,OAAO,CAAC,GAAG,CAAC,CA0Bd;AA6BD,OAAO,EAAE,IAAI,EAAE,CAAA"}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.sign = sign;
|
|
4
|
-
const modules_1 = require("../../modules");
|
|
5
4
|
const error_1 = require("../error");
|
|
6
5
|
const common_1 = require("./common");
|
|
7
|
-
async function sign(signers, chain, parameters) {
|
|
6
|
+
async function sign(signers, chain, address, parameters) {
|
|
8
7
|
const signingFunctions = {
|
|
9
8
|
signEcdsa: (account, params) => signEcdsa(account, params),
|
|
10
|
-
signPasskey: (account,
|
|
9
|
+
signPasskey: (account, params) => signPasskey(account, params),
|
|
11
10
|
};
|
|
12
11
|
switch (signers.type) {
|
|
13
12
|
case 'owner': {
|
|
14
|
-
return (0, common_1.signWithOwners)(signers, chain, parameters, signingFunctions, sign);
|
|
13
|
+
return (0, common_1.signWithOwners)(signers, chain, address, parameters, signingFunctions, sign);
|
|
15
14
|
}
|
|
16
15
|
case 'session': {
|
|
17
|
-
return (0, common_1.signWithSession)(signers, chain, parameters, sign);
|
|
16
|
+
return (0, common_1.signWithSession)(signers, chain, address, parameters, sign);
|
|
18
17
|
}
|
|
19
18
|
case 'guardians': {
|
|
20
19
|
return (0, common_1.signWithGuardians)(signers, parameters, signingFunctions);
|
|
@@ -27,13 +26,10 @@ async function signEcdsa(account, parameters) {
|
|
|
27
26
|
}
|
|
28
27
|
return await account.signTypedData(parameters);
|
|
29
28
|
}
|
|
30
|
-
async function signPasskey(account,
|
|
29
|
+
async function signPasskey(account, parameters) {
|
|
31
30
|
const { webauthn, signature } = await account.signTypedData(parameters);
|
|
32
|
-
|
|
33
|
-
const encodedSignature = (0, modules_1.getWebauthnValidatorSignature)({
|
|
31
|
+
return {
|
|
34
32
|
webauthn,
|
|
35
33
|
signature,
|
|
36
|
-
|
|
37
|
-
});
|
|
38
|
-
return encodedSignature;
|
|
34
|
+
};
|
|
39
35
|
}
|
|
@@ -19,10 +19,10 @@ const MOCK_MODULE_ADDRESS = '0x28de6501fa86f2e6cd0b33c3aabdaeb4a1b93f3f';
|
|
|
19
19
|
rhinestoneApiKey: consts_1.MOCK_API_KEY,
|
|
20
20
|
});
|
|
21
21
|
(0, vitest_1.expect)(factory).toEqual('0x0000003B3E7b530b4f981aE80d9350392Defef90');
|
|
22
|
-
(0, vitest_1.expect)(factoryData).toEqual('
|
|
22
|
+
(0, vitest_1.expect)(factoryData).toEqual('0xea6d13ac0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000552a5fae3db7a8f3917c435448f49ba6a9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003240984b2f700000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000013fdb5234e4e3162a810f54d9f7e98000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000006092086a3dc0020cd604a68fcf5d430007d51bb7000000000000000000000000f6c02c78ded62973b43bfa523b247da0994869360000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000005ad9ce1f5035fd62ca96cef16adaaf000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000');
|
|
23
23
|
(0, vitest_1.expect)(salt).toEqual('0x0000000000000000000000000000000000000000000000000000000000000000');
|
|
24
24
|
(0, vitest_1.expect)(implementation).toEqual('0x000000b8f5f723a680d3d7ee624fe0bc84a6e05a');
|
|
25
|
-
(0, vitest_1.expect)(initializationCallData).toEqual('
|
|
25
|
+
(0, vitest_1.expect)(initializationCallData).toEqual('0x4b6a1419000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003a0000000000000000000000000000000552a5fae3db7a8f3917c435448f49ba6a9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003240984b2f700000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001e0000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000013fdb5234e4e3162a810f54d9f7e98000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000020000000000000000000000006092086a3dc0020cd604a68fcf5d430007d51bb7000000000000000000000000f6c02c78ded62973b43bfa523b247da0994869360000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000005ad9ce1f5035fd62ca96cef16adaaf000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000');
|
|
26
26
|
});
|
|
27
27
|
(0, vitest_1.test)('Passkey owner', () => {
|
|
28
28
|
const { factory, factoryData, salt, implementation, initializationCallData, } = (0, startale_1.getDeployArgs)({
|
|
@@ -31,15 +31,15 @@ const MOCK_MODULE_ADDRESS = '0x28de6501fa86f2e6cd0b33c3aabdaeb4a1b93f3f';
|
|
|
31
31
|
},
|
|
32
32
|
owners: {
|
|
33
33
|
type: 'passkey',
|
|
34
|
-
|
|
34
|
+
accounts: [consts_1.passkeyAccount],
|
|
35
35
|
},
|
|
36
36
|
rhinestoneApiKey: consts_1.MOCK_API_KEY,
|
|
37
37
|
});
|
|
38
38
|
(0, vitest_1.expect)(factory).toEqual('0x0000003B3E7b530b4f981aE80d9350392Defef90');
|
|
39
|
-
(0, vitest_1.expect)(factoryData).toEqual('
|
|
39
|
+
(0, vitest_1.expect)(factoryData).toEqual('0xea6d13ac0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000552a5fae3db7a8f3917c435448f49ba6a9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003440984b2f700000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000578c4cb0e472a5462da43c495c3f33000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001580a9af0569ad3905b26a703201b358aa0904236642ebe79b22a19d00d3737637d46f725a5427ae45a9569259bf67e1e16b187d7b3ad1ed70138c4f0409677d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000005ad9ce1f5035fd62ca96cef16adaaf000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000');
|
|
40
40
|
(0, vitest_1.expect)(salt).toEqual('0x0000000000000000000000000000000000000000000000000000000000000000');
|
|
41
41
|
(0, vitest_1.expect)(implementation).toEqual('0x000000b8f5f723a680d3d7ee624fe0bc84a6e05a');
|
|
42
|
-
(0, vitest_1.expect)(initializationCallData).toEqual('
|
|
42
|
+
(0, vitest_1.expect)(initializationCallData).toEqual('0x4b6a1419000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003c0000000000000000000000000000000552a5fae3db7a8f3917c435448f49ba6a9000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000003440984b2f700000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000578c4cb0e472a5462da43c495c3f33000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000001580a9af0569ad3905b26a703201b358aa0904236642ebe79b22a19d00d3737637d46f725a5427ae45a9569259bf67e1e16b187d7b3ad1ed70138c4f0409677d100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000005ad9ce1f5035fd62ca96cef16adaaf000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000');
|
|
43
43
|
});
|
|
44
44
|
});
|
|
45
45
|
(0, vitest_1.describe)('Get Address', () => {
|
|
@@ -54,7 +54,7 @@ const MOCK_MODULE_ADDRESS = '0x28de6501fa86f2e6cd0b33c3aabdaeb4a1b93f3f';
|
|
|
54
54
|
},
|
|
55
55
|
rhinestoneApiKey: consts_1.MOCK_API_KEY,
|
|
56
56
|
});
|
|
57
|
-
(0, vitest_1.expect)(address).toEqual('
|
|
57
|
+
(0, vitest_1.expect)(address).toEqual('0x614ea8885429c480a83deddd2e050d411da36d4b');
|
|
58
58
|
});
|
|
59
59
|
(0, vitest_1.test)('Passkey owner', () => {
|
|
60
60
|
const address = (0, startale_1.getAddress)({
|
|
@@ -63,11 +63,11 @@ const MOCK_MODULE_ADDRESS = '0x28de6501fa86f2e6cd0b33c3aabdaeb4a1b93f3f';
|
|
|
63
63
|
},
|
|
64
64
|
owners: {
|
|
65
65
|
type: 'passkey',
|
|
66
|
-
|
|
66
|
+
accounts: [consts_1.passkeyAccount],
|
|
67
67
|
},
|
|
68
68
|
rhinestoneApiKey: consts_1.MOCK_API_KEY,
|
|
69
69
|
});
|
|
70
|
-
(0, vitest_1.expect)(address).toEqual('
|
|
70
|
+
(0, vitest_1.expect)(address).toEqual('0x4d78f6b273d07f2fd24433ebc7a90d89f0d061ae');
|
|
71
71
|
});
|
|
72
72
|
});
|
|
73
73
|
(0, vitest_1.describe)('Get Install Data', () => {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { Address,
|
|
2
|
-
import type {
|
|
1
|
+
import type { Address, Client, Hex } from 'viem';
|
|
2
|
+
import type { RhinestoneAccountConfig } from '../types';
|
|
3
|
+
import { createTransport } from './json-rpc';
|
|
3
4
|
type CallType = 'call' | 'delegatecall' | 'batchcall';
|
|
4
5
|
interface ValidatorConfig {
|
|
5
6
|
address: Address;
|
|
@@ -27,7 +28,6 @@ interface GetAccountNonceParams {
|
|
|
27
28
|
declare function encode7579Calls<callType extends CallType>({ mode, callData, }: EncodeCallDataParams<callType>): Hex;
|
|
28
29
|
declare function getAccountNonce(client: Client, args: GetAccountNonceParams): Promise<bigint>;
|
|
29
30
|
declare function getBundlerClient(config: RhinestoneAccountConfig, client: Client): import("viem/account-abstraction").BundlerClient<import("viem").HttpTransport<undefined, false>, undefined, undefined, Client, undefined>;
|
|
30
|
-
declare function createTransport(chain: Chain, provider?: ProviderConfig): Transport;
|
|
31
31
|
export { encode7579Calls, getAccountNonce, getBundlerClient, createTransport };
|
|
32
32
|
export type { ValidatorConfig };
|
|
33
33
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../accounts/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../accounts/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,MAAM,CAAA;AAgBhD,OAAO,KAAK,EAGV,uBAAuB,EACxB,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAE5C,KAAK,QAAQ,GAAG,MAAM,GAAG,cAAc,GAAG,WAAW,CAAA;AAErD,UAAU,eAAe;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,UAAU,aAAa,CAAC,QAAQ,SAAS,QAAQ;IAC/C,IAAI,EAAE,QAAQ,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,EAAE,GAAG,CAAA;IACd,OAAO,CAAC,EAAE,GAAG,CAAA;CACd;AAED,UAAU,oBAAoB,CAAC,QAAQ,SAAS,QAAQ;IACtD,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;IAC7B,QAAQ,EAAE,SAAS;QACjB,EAAE,EAAE,OAAO,CAAA;QACX,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,EAAE,GAAG,GAAG,SAAS,CAAA;KACvB,EAAE,CAAA;CACJ;AAED,UAAU,qBAAqB;IAC7B,OAAO,EAAE,OAAO,CAAA;IAChB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAkDD,iBAAS,eAAe,CAAC,QAAQ,SAAS,QAAQ,EAAE,EAClD,IAAI,EACJ,QAAQ,GACT,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,GAAG,CAuFtC;AAED,iBAAe,eAAe,CAC5B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,qBAAqB,GAC1B,OAAO,CAAC,MAAM,CAAC,CAmCjB;AAED,iBAAS,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,EAAE,MAAM,EAAE,MAAM,6IA2CxE;AAyBD,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAA;AAC9E,YAAY,EAAE,eAAe,EAAE,CAAA"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTransport = void 0;
|
|
3
4
|
exports.encode7579Calls = encode7579Calls;
|
|
4
5
|
exports.getAccountNonce = getAccountNonce;
|
|
5
6
|
exports.getBundlerClient = getBundlerClient;
|
|
6
|
-
exports.createTransport = createTransport;
|
|
7
7
|
const viem_1 = require("viem");
|
|
8
8
|
const account_abstraction_1 = require("viem/account-abstraction");
|
|
9
9
|
const actions_1 = require("viem/actions");
|
|
10
|
-
const chains_1 = require("viem/chains");
|
|
11
10
|
const utils_1 = require("viem/utils");
|
|
11
|
+
const json_rpc_1 = require("./json-rpc");
|
|
12
|
+
Object.defineProperty(exports, "createTransport", { enumerable: true, get: function () { return json_rpc_1.createTransport; } });
|
|
12
13
|
function parseCallType(callType) {
|
|
13
14
|
switch (callType) {
|
|
14
15
|
case 'call':
|
|
@@ -198,41 +199,3 @@ async function getGasPriceEstimate(bundlerUrl) {
|
|
|
198
199
|
maxPriorityFeePerGas: BigInt(json.result.fast.maxPriorityFeePerGas),
|
|
199
200
|
};
|
|
200
201
|
}
|
|
201
|
-
function createTransport(chain, provider) {
|
|
202
|
-
if (!provider) {
|
|
203
|
-
return (0, viem_1.http)();
|
|
204
|
-
}
|
|
205
|
-
switch (provider.type) {
|
|
206
|
-
case 'alchemy': {
|
|
207
|
-
const alchemyNetwork = getAlchemyNetworkName(chain.id);
|
|
208
|
-
const jsonRpcEndpoint = `https://${alchemyNetwork}.g.alchemy.com/v2/${provider.apiKey}`;
|
|
209
|
-
return (0, viem_1.http)(jsonRpcEndpoint);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
function getAlchemyNetworkName(chainId) {
|
|
214
|
-
switch (chainId) {
|
|
215
|
-
case chains_1.mainnet.id:
|
|
216
|
-
return 'eth-mainnet';
|
|
217
|
-
case chains_1.sepolia.id:
|
|
218
|
-
return 'eth-sepolia';
|
|
219
|
-
case chains_1.polygon.id:
|
|
220
|
-
return 'polygon-mainnet';
|
|
221
|
-
case chains_1.optimism.id:
|
|
222
|
-
return 'opt-mainnet';
|
|
223
|
-
case chains_1.optimismSepolia.id:
|
|
224
|
-
return 'opt-sepolia';
|
|
225
|
-
case chains_1.arbitrum.id:
|
|
226
|
-
return 'arb-mainnet';
|
|
227
|
-
case chains_1.arbitrumSepolia.id:
|
|
228
|
-
return 'arb-sepolia';
|
|
229
|
-
case chains_1.base.id:
|
|
230
|
-
return 'base-mainnet';
|
|
231
|
-
case chains_1.baseSepolia.id:
|
|
232
|
-
return 'base-sepolia';
|
|
233
|
-
case chains_1.zksync.id:
|
|
234
|
-
return 'zksync-mainnet';
|
|
235
|
-
case chains_1.soneium.id:
|
|
236
|
-
return 'soneium-mainnet';
|
|
237
|
-
}
|
|
238
|
-
}
|
|
@@ -20,6 +20,7 @@ declare function setUpRecovery({ rhinestoneAccount, guardians, threshold, }: {
|
|
|
20
20
|
* @param chain Chain to recover ownership on
|
|
21
21
|
* @param provider Provider to use for the recovery
|
|
22
22
|
* @returns Calls to recover ownership
|
|
23
|
+
* @deprecated Use `recoverEcdsaOwnership` or `recoverPasskeyOwnership` instead
|
|
23
24
|
*/
|
|
24
25
|
declare function recover(address: Address, newOwners: OwnerSet, chain: Chain, provider?: ProviderConfig): Promise<Call[]>;
|
|
25
26
|
/**
|
|
@@ -79,6 +80,49 @@ declare function removeOwner(prevOwner: Address, ownerToRemove: Address): Call;
|
|
|
79
80
|
* @returns Call to change the threshold
|
|
80
81
|
*/
|
|
81
82
|
declare function changeThreshold(newThreshold: number): Call;
|
|
83
|
+
/**
|
|
84
|
+
* Add a passkey owner
|
|
85
|
+
* @param pubKeyX Public key X
|
|
86
|
+
* @param pubKeyY Public key Y
|
|
87
|
+
* @param requireUserVerification Whether to require user verification
|
|
88
|
+
* @returns Call to add the passkey owner
|
|
89
|
+
*/
|
|
90
|
+
declare function addPasskeyOwner(pubKeyX: bigint, pubKeyY: bigint, requireUserVerification: boolean): Call;
|
|
91
|
+
/**
|
|
92
|
+
* Remove a passkey owner
|
|
93
|
+
* @param pubKeyX Public key X
|
|
94
|
+
* @param pubKeyY Public key Y
|
|
95
|
+
* @returns Call to remove the passkey owner
|
|
96
|
+
*/
|
|
97
|
+
declare function removePasskeyOwner(pubKeyX: bigint, pubKeyY: bigint): Call;
|
|
98
|
+
/**
|
|
99
|
+
* Change an account's signer threshold (passkey)
|
|
100
|
+
* @param newThreshold New threshold
|
|
101
|
+
* @returns Call to change the threshold
|
|
102
|
+
*/
|
|
103
|
+
declare function changePasskeyThreshold(newThreshold: number): Call;
|
|
104
|
+
/**
|
|
105
|
+
* Recover an account's ownership (ECDSA)
|
|
106
|
+
* @param address Account address
|
|
107
|
+
* @param newOwners New owners
|
|
108
|
+
* @param chain Chain to recover ownership on
|
|
109
|
+
* @param provider Provider to use for the recovery
|
|
110
|
+
* @returns Calls to recover ownership
|
|
111
|
+
*/
|
|
112
|
+
declare function recoverEcdsaOwnership(address: Address, newOwners: OwnableValidatorConfig, chain: Chain, provider?: ProviderConfig, validatorAddress?: Address): Promise<Call[]>;
|
|
113
|
+
/**
|
|
114
|
+
* Recover an account's ownership (Passkey)
|
|
115
|
+
* @param address Account address
|
|
116
|
+
* @param oldCredentials Old credentials to be replaced (with pubKeyX, pubKeyY)
|
|
117
|
+
* @param newOwners New passkey owners
|
|
118
|
+
* @param chain Chain to recover ownership on
|
|
119
|
+
* @param provider Provider to use for the recovery
|
|
120
|
+
* @returns Calls to recover ownership
|
|
121
|
+
*/
|
|
122
|
+
declare function recoverPasskeyOwnership(address: Address, oldCredentials: {
|
|
123
|
+
pubKeyX: bigint;
|
|
124
|
+
pubKeyY: bigint;
|
|
125
|
+
}[], newOwners: WebauthnValidatorConfig, chain: Chain, provider?: ProviderConfig): Promise<Call[]>;
|
|
82
126
|
/**
|
|
83
127
|
* Enable multi-factor authentication
|
|
84
128
|
* @param rhinestoneAccount Account to enable multi-factor authentication on
|
|
@@ -119,5 +163,5 @@ declare function setSubValidator(id: Hex | number, validator: OwnableValidatorCo
|
|
|
119
163
|
* @returns Call to remove the sub-validator
|
|
120
164
|
*/
|
|
121
165
|
declare function removeSubValidator(id: Hex | number, validator: OwnableValidatorConfig | WebauthnValidatorConfig): Call;
|
|
122
|
-
export { enableEcdsa, enablePasskeys, disableEcdsa, disablePasskeys, addOwner, removeOwner, changeThreshold, recover, setUpRecovery, encodeSmartSessionSignature, enableMultiFactor, disableMultiFactor, changeMultiFactorThreshold, setSubValidator, removeSubValidator, };
|
|
166
|
+
export { enableEcdsa, enablePasskeys, disableEcdsa, disablePasskeys, addOwner, removeOwner, changeThreshold, addPasskeyOwner, removePasskeyOwner, changePasskeyThreshold, recover, recoverEcdsaOwnership, recoverPasskeyOwnership, setUpRecovery, encodeSmartSessionSignature, enableMultiFactor, disableMultiFactor, changeMultiFactorThreshold, setSubValidator, removeSubValidator, };
|
|
123
167
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,KAAK,EAGV,KAAK,GAAG,EAGT,MAAM,MAAM,CAAA;AAEb,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,IAAI,CAAA;AAM3C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../actions/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,12 @@ exports.disablePasskeys = disablePasskeys;
|
|
|
8
8
|
exports.addOwner = addOwner;
|
|
9
9
|
exports.removeOwner = removeOwner;
|
|
10
10
|
exports.changeThreshold = changeThreshold;
|
|
11
|
+
exports.addPasskeyOwner = addPasskeyOwner;
|
|
12
|
+
exports.removePasskeyOwner = removePasskeyOwner;
|
|
13
|
+
exports.changePasskeyThreshold = changePasskeyThreshold;
|
|
11
14
|
exports.recover = recover;
|
|
15
|
+
exports.recoverEcdsaOwnership = recoverEcdsaOwnership;
|
|
16
|
+
exports.recoverPasskeyOwnership = recoverPasskeyOwnership;
|
|
12
17
|
exports.setUpRecovery = setUpRecovery;
|
|
13
18
|
exports.enableMultiFactor = enableMultiFactor;
|
|
14
19
|
exports.disableMultiFactor = disableMultiFactor;
|
|
@@ -40,12 +45,16 @@ function setUpRecovery({ rhinestoneAccount, guardians, threshold = 1, }) {
|
|
|
40
45
|
* @param chain Chain to recover ownership on
|
|
41
46
|
* @param provider Provider to use for the recovery
|
|
42
47
|
* @returns Calls to recover ownership
|
|
48
|
+
* @deprecated Use `recoverEcdsaOwnership` or `recoverPasskeyOwnership` instead
|
|
43
49
|
*/
|
|
44
50
|
async function recover(address, newOwners, chain, provider) {
|
|
45
51
|
switch (newOwners.type) {
|
|
46
52
|
case 'ecdsa': {
|
|
47
53
|
return recoverEcdsaOwnership(address, newOwners, chain, provider);
|
|
48
54
|
}
|
|
55
|
+
case 'ecdsa-v0': {
|
|
56
|
+
return recoverEcdsaOwnership(address, newOwners, chain, provider, core_1.OWNABLE_V0_VALIDATOR_ADDRESS);
|
|
57
|
+
}
|
|
49
58
|
case 'passkey': {
|
|
50
59
|
throw new Error('Passkey ownership recovery is not yet supported');
|
|
51
60
|
}
|
|
@@ -74,7 +83,7 @@ function enableEcdsa({ rhinestoneAccount, owners, threshold = 1, }) {
|
|
|
74
83
|
* @returns Calls to enable passkeys authentication
|
|
75
84
|
*/
|
|
76
85
|
function enablePasskeys({ rhinestoneAccount, pubKey, authenticatorId, }) {
|
|
77
|
-
const module = (0, core_1.getWebAuthnValidator)({ pubKey, authenticatorId });
|
|
86
|
+
const module = (0, core_1.getWebAuthnValidator)(1, [{ pubKey, authenticatorId }]);
|
|
78
87
|
const calls = (0, accounts_1.getModuleInstallationCalls)(rhinestoneAccount.config, module);
|
|
79
88
|
return calls;
|
|
80
89
|
}
|
|
@@ -94,11 +103,13 @@ function disableEcdsa({ rhinestoneAccount, }) {
|
|
|
94
103
|
* @returns Calls to disable passkeys authentication
|
|
95
104
|
*/
|
|
96
105
|
function disablePasskeys({ rhinestoneAccount, }) {
|
|
97
|
-
const module = (0, core_1.getWebAuthnValidator)(
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
106
|
+
const module = (0, core_1.getWebAuthnValidator)(1, [
|
|
107
|
+
{
|
|
108
|
+
// Mocked values
|
|
109
|
+
pubKey: '0x580a9af0569ad3905b26a703201b358aa0904236642ebe79b22a19d00d3737637d46f725a5427ae45a9569259bf67e1e16b187d7b3ad1ed70138c4f0409677d1',
|
|
110
|
+
authenticatorId: '0x',
|
|
111
|
+
},
|
|
112
|
+
]);
|
|
102
113
|
const calls = (0, accounts_1.getModuleUninstallationCalls)(rhinestoneAccount.config, module);
|
|
103
114
|
return calls;
|
|
104
115
|
}
|
|
@@ -180,6 +191,93 @@ function changeThreshold(newThreshold) {
|
|
|
180
191
|
}),
|
|
181
192
|
};
|
|
182
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Add a passkey owner
|
|
196
|
+
* @param pubKeyX Public key X
|
|
197
|
+
* @param pubKeyY Public key Y
|
|
198
|
+
* @param requireUserVerification Whether to require user verification
|
|
199
|
+
* @returns Call to add the passkey owner
|
|
200
|
+
*/
|
|
201
|
+
function addPasskeyOwner(pubKeyX, pubKeyY, requireUserVerification) {
|
|
202
|
+
return {
|
|
203
|
+
to: core_1.WEBAUTHN_VALIDATOR_ADDRESS,
|
|
204
|
+
value: 0n,
|
|
205
|
+
data: (0, viem_1.encodeFunctionData)({
|
|
206
|
+
abi: [
|
|
207
|
+
{
|
|
208
|
+
inputs: [
|
|
209
|
+
{ name: 'pubKeyX', type: 'uint256' },
|
|
210
|
+
{ name: 'pubKeyY', type: 'uint256' },
|
|
211
|
+
{
|
|
212
|
+
name: 'requireUserVerification',
|
|
213
|
+
type: 'bool',
|
|
214
|
+
},
|
|
215
|
+
],
|
|
216
|
+
name: 'addCredential',
|
|
217
|
+
outputs: [],
|
|
218
|
+
stateMutability: 'nonpayable',
|
|
219
|
+
type: 'function',
|
|
220
|
+
},
|
|
221
|
+
],
|
|
222
|
+
functionName: 'addCredential',
|
|
223
|
+
args: [pubKeyX, pubKeyY, requireUserVerification],
|
|
224
|
+
}),
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Remove a passkey owner
|
|
229
|
+
* @param pubKeyX Public key X
|
|
230
|
+
* @param pubKeyY Public key Y
|
|
231
|
+
* @returns Call to remove the passkey owner
|
|
232
|
+
*/
|
|
233
|
+
function removePasskeyOwner(pubKeyX, pubKeyY) {
|
|
234
|
+
return {
|
|
235
|
+
to: core_1.WEBAUTHN_VALIDATOR_ADDRESS,
|
|
236
|
+
value: 0n,
|
|
237
|
+
data: (0, viem_1.encodeFunctionData)({
|
|
238
|
+
abi: [
|
|
239
|
+
{
|
|
240
|
+
inputs: [
|
|
241
|
+
{ name: 'pubKeyX', type: 'uint256' },
|
|
242
|
+
{ name: 'pubKeyY', type: 'uint256' },
|
|
243
|
+
],
|
|
244
|
+
name: 'removeCredential',
|
|
245
|
+
outputs: [],
|
|
246
|
+
stateMutability: 'nonpayable',
|
|
247
|
+
type: 'function',
|
|
248
|
+
},
|
|
249
|
+
],
|
|
250
|
+
functionName: 'removeCredential',
|
|
251
|
+
args: [pubKeyX, pubKeyY],
|
|
252
|
+
}),
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
/**
|
|
256
|
+
* Change an account's signer threshold (passkey)
|
|
257
|
+
* @param newThreshold New threshold
|
|
258
|
+
* @returns Call to change the threshold
|
|
259
|
+
*/
|
|
260
|
+
function changePasskeyThreshold(newThreshold) {
|
|
261
|
+
return {
|
|
262
|
+
to: core_1.WEBAUTHN_VALIDATOR_ADDRESS,
|
|
263
|
+
value: 0n,
|
|
264
|
+
data: (0, viem_1.encodeFunctionData)({
|
|
265
|
+
abi: [
|
|
266
|
+
{
|
|
267
|
+
inputs: [
|
|
268
|
+
{ internalType: 'uint256', name: '_threshold', type: 'uint256' },
|
|
269
|
+
],
|
|
270
|
+
name: 'setThreshold',
|
|
271
|
+
outputs: [],
|
|
272
|
+
stateMutability: 'nonpayable',
|
|
273
|
+
type: 'function',
|
|
274
|
+
},
|
|
275
|
+
],
|
|
276
|
+
functionName: 'setThreshold',
|
|
277
|
+
args: [BigInt(newThreshold)],
|
|
278
|
+
}),
|
|
279
|
+
};
|
|
280
|
+
}
|
|
183
281
|
/**
|
|
184
282
|
* Recover an account's ownership (ECDSA)
|
|
185
283
|
* @param address Account address
|
|
@@ -188,7 +286,7 @@ function changeThreshold(newThreshold) {
|
|
|
188
286
|
* @param provider Provider to use for the recovery
|
|
189
287
|
* @returns Calls to recover ownership
|
|
190
288
|
*/
|
|
191
|
-
async function recoverEcdsaOwnership(address, newOwners, chain, provider) {
|
|
289
|
+
async function recoverEcdsaOwnership(address, newOwners, chain, provider, validatorAddress) {
|
|
192
290
|
const publicClient = (0, viem_1.createPublicClient)({
|
|
193
291
|
chain,
|
|
194
292
|
transport: (0, utils_1.createTransport)(chain, provider),
|
|
@@ -197,7 +295,7 @@ async function recoverEcdsaOwnership(address, newOwners, chain, provider) {
|
|
|
197
295
|
const results = await publicClient.multicall({
|
|
198
296
|
contracts: [
|
|
199
297
|
{
|
|
200
|
-
address: core_1.OWNABLE_VALIDATOR_ADDRESS,
|
|
298
|
+
address: validatorAddress ?? core_1.OWNABLE_VALIDATOR_ADDRESS,
|
|
201
299
|
abi: [
|
|
202
300
|
{
|
|
203
301
|
inputs: [
|
|
@@ -219,7 +317,7 @@ async function recoverEcdsaOwnership(address, newOwners, chain, provider) {
|
|
|
219
317
|
args: [address],
|
|
220
318
|
},
|
|
221
319
|
{
|
|
222
|
-
address: core_1.OWNABLE_VALIDATOR_ADDRESS,
|
|
320
|
+
address: validatorAddress ?? core_1.OWNABLE_VALIDATOR_ADDRESS,
|
|
223
321
|
abi: [
|
|
224
322
|
{
|
|
225
323
|
inputs: [
|
|
@@ -278,6 +376,73 @@ async function recoverEcdsaOwnership(address, newOwners, chain, provider) {
|
|
|
278
376
|
}
|
|
279
377
|
return calls;
|
|
280
378
|
}
|
|
379
|
+
/**
|
|
380
|
+
* Recover an account's ownership (Passkey)
|
|
381
|
+
* @param address Account address
|
|
382
|
+
* @param oldCredentials Old credentials to be replaced (with pubKeyX, pubKeyY)
|
|
383
|
+
* @param newOwners New passkey owners
|
|
384
|
+
* @param chain Chain to recover ownership on
|
|
385
|
+
* @param provider Provider to use for the recovery
|
|
386
|
+
* @returns Calls to recover ownership
|
|
387
|
+
*/
|
|
388
|
+
async function recoverPasskeyOwnership(address, oldCredentials, newOwners, chain, provider) {
|
|
389
|
+
const publicClient = (0, viem_1.createPublicClient)({
|
|
390
|
+
chain,
|
|
391
|
+
transport: (0, utils_1.createTransport)(chain, provider),
|
|
392
|
+
});
|
|
393
|
+
const existingThreshold = await publicClient.readContract({
|
|
394
|
+
address: core_1.WEBAUTHN_VALIDATOR_ADDRESS,
|
|
395
|
+
abi: [
|
|
396
|
+
{
|
|
397
|
+
inputs: [{ internalType: 'address', name: 'account', type: 'address' }],
|
|
398
|
+
name: 'threshold',
|
|
399
|
+
outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],
|
|
400
|
+
stateMutability: 'view',
|
|
401
|
+
type: 'function',
|
|
402
|
+
},
|
|
403
|
+
],
|
|
404
|
+
functionName: 'threshold',
|
|
405
|
+
args: [address],
|
|
406
|
+
});
|
|
407
|
+
const calls = [];
|
|
408
|
+
// Convert new owners config to credentials and threshold
|
|
409
|
+
const newCredentials = newOwners.accounts.map((account) => {
|
|
410
|
+
const publicKey = account.publicKey;
|
|
411
|
+
// Parse the public key hex string to extract x and y coordinates
|
|
412
|
+
const publicKeyBytes = publicKey.startsWith('0x')
|
|
413
|
+
? publicKey.slice(2)
|
|
414
|
+
: publicKey;
|
|
415
|
+
// The public key is 64 bytes: 32 bytes for x, 32 bytes for y
|
|
416
|
+
const x = BigInt(`0x${publicKeyBytes.slice(0, 64)}`);
|
|
417
|
+
const y = BigInt(`0x${publicKeyBytes.slice(64, 128)}`);
|
|
418
|
+
return {
|
|
419
|
+
pubKeyX: x,
|
|
420
|
+
pubKeyY: y,
|
|
421
|
+
requireUV: false, // Default to false for now
|
|
422
|
+
};
|
|
423
|
+
});
|
|
424
|
+
const newThreshold = newOwners.threshold ?? 1;
|
|
425
|
+
// Check if threshold needs to be updated
|
|
426
|
+
if (Number(existingThreshold) !== newThreshold) {
|
|
427
|
+
calls.push(changePasskeyThreshold(newThreshold));
|
|
428
|
+
}
|
|
429
|
+
// Compare existing and new credentials to determine what to add/remove
|
|
430
|
+
const existingCredentialKeys = oldCredentials.map((cred) => `${cred.pubKeyX.toString()}-${cred.pubKeyY.toString()}`);
|
|
431
|
+
const newCredentialKeys = newCredentials.map((cred) => `${cred.pubKeyX.toString()}-${cred.pubKeyY.toString()}`);
|
|
432
|
+
// Find credentials to add (new ones not in existing)
|
|
433
|
+
const credentialsToAdd = newCredentials.filter((cred) => !existingCredentialKeys.includes(`${cred.pubKeyX.toString()}-${cred.pubKeyY.toString()}`));
|
|
434
|
+
// Find credentials to remove (existing ones not in new)
|
|
435
|
+
const credentialsToRemove = oldCredentials.filter((cred) => !newCredentialKeys.includes(`${cred.pubKeyX.toString()}-${cred.pubKeyY.toString()}`));
|
|
436
|
+
// Remove old credentials first (important for security in recovery scenarios)
|
|
437
|
+
for (const credential of credentialsToRemove) {
|
|
438
|
+
calls.push(removePasskeyOwner(credential.pubKeyX, credential.pubKeyY));
|
|
439
|
+
}
|
|
440
|
+
// Then add new credentials
|
|
441
|
+
for (const credential of credentialsToAdd) {
|
|
442
|
+
calls.push(addPasskeyOwner(credential.pubKeyX, credential.pubKeyY, credential.requireUV));
|
|
443
|
+
}
|
|
444
|
+
return calls;
|
|
445
|
+
}
|
|
281
446
|
/**
|
|
282
447
|
* Enable multi-factor authentication
|
|
283
448
|
* @param rhinestoneAccount Account to enable multi-factor authentication on
|