@frequency-chain/ethereum-utils 1.17.0-rc5 → 1.17.0-rc7
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/address.d.ts +1 -1
- package/browser/frequency-ethereum-utils.esm.min.js +902 -656
- package/browser/frequency-ethereum-utils.umd.min.js +882 -644
- package/cjs/index.js +8 -8
- package/cjs/signature.definitions.js +53 -3
- package/cjs/signature.js +184 -64
- package/esm/index.js +8 -8
- package/esm/signature.definitions.js +52 -2
- package/esm/signature.js +137 -22
- package/index.d.ts +33 -15
- package/package.json +7 -4
- package/payloads.d.ts +20 -1
- package/signature.d.ts +45 -5
- package/signature.definitions.d.ts +67 -2
- package/utils.d.ts +1 -1
package/cjs/index.js
CHANGED
|
@@ -36,12 +36,12 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
36
36
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
const address = __importStar(require("./address"));
|
|
40
|
-
const payloads = __importStar(require("./payloads"));
|
|
41
|
-
const signature = __importStar(require("./signature"));
|
|
42
|
-
const signatureDefinitions = __importStar(require("./signature.definitions"));
|
|
43
|
-
__exportStar(require("./payloads"), exports);
|
|
44
|
-
__exportStar(require("./signature"), exports);
|
|
45
|
-
__exportStar(require("./signature.definitions"), exports);
|
|
46
|
-
__exportStar(require("./address"), exports);
|
|
39
|
+
const address = __importStar(require("./address.js"));
|
|
40
|
+
const payloads = __importStar(require("./payloads.js"));
|
|
41
|
+
const signature = __importStar(require("./signature.js"));
|
|
42
|
+
const signatureDefinitions = __importStar(require("./signature.definitions.js"));
|
|
43
|
+
__exportStar(require("./payloads.js"), exports);
|
|
44
|
+
__exportStar(require("./signature.js"), exports);
|
|
45
|
+
__exportStar(require("./signature.definitions.js"), exports);
|
|
46
|
+
__exportStar(require("./address.js"), exports);
|
|
47
47
|
exports.default = { ...payloads, ...address, ...signatureDefinitions, ...signature };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2 = exports.PAGINATED_UPSERT_SIGNATURE_PAYLOAD_DEFINITION_V2 = exports.PAGINATED_DELETE_SIGNATURE_PAYLOAD_DEFINITION_V2 = exports.PASSKEY_PUBLIC_KEY_DEFINITION = exports.CLAIM_HANDLE_PAYLOAD_DEFINITION = exports.ADD_KEY_DATA_DEFINITION = exports.ADD_PROVIDER_DEFINITION = exports.
|
|
3
|
+
exports.SIWF_SIGNED_REQUEST_PAYLOAD_DEFINITION = exports.ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2 = exports.PAGINATED_UPSERT_SIGNATURE_PAYLOAD_DEFINITION_V2 = exports.PAGINATED_DELETE_SIGNATURE_PAYLOAD_DEFINITION_V2 = exports.PASSKEY_PUBLIC_KEY_DEFINITION = exports.CLAIM_HANDLE_PAYLOAD_DEFINITION = exports.AUTHORIZED_KEY_DATA_DEFINITION = exports.ADD_KEY_DATA_DEFINITION = exports.ADD_PROVIDER_DEFINITION = exports.EIP712_DOMAIN_TESTNET = exports.EIP712_DOMAIN_MAINNET = exports.EIP712_DOMAIN_DEFINITION = void 0;
|
|
4
4
|
exports.EIP712_DOMAIN_DEFINITION = {
|
|
5
5
|
EIP712Domain: [
|
|
6
6
|
{
|
|
@@ -21,8 +21,15 @@ exports.EIP712_DOMAIN_DEFINITION = {
|
|
|
21
21
|
},
|
|
22
22
|
],
|
|
23
23
|
};
|
|
24
|
-
// using
|
|
25
|
-
exports.
|
|
24
|
+
// using 2091 for mainnet
|
|
25
|
+
exports.EIP712_DOMAIN_MAINNET = {
|
|
26
|
+
name: 'Frequency',
|
|
27
|
+
version: '1',
|
|
28
|
+
chainId: '0x082B',
|
|
29
|
+
verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',
|
|
30
|
+
};
|
|
31
|
+
// using pallet_revive test chain ID for testnet/dev
|
|
32
|
+
exports.EIP712_DOMAIN_TESTNET = {
|
|
26
33
|
name: 'Frequency',
|
|
27
34
|
version: '1',
|
|
28
35
|
chainId: '0x190f1b44',
|
|
@@ -60,6 +67,22 @@ exports.ADD_KEY_DATA_DEFINITION = {
|
|
|
60
67
|
},
|
|
61
68
|
],
|
|
62
69
|
};
|
|
70
|
+
exports.AUTHORIZED_KEY_DATA_DEFINITION = {
|
|
71
|
+
AuthorizedKeyData: [
|
|
72
|
+
{
|
|
73
|
+
name: 'msaId',
|
|
74
|
+
type: 'uint64',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'expiration',
|
|
78
|
+
type: 'uint32',
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'authorizedPublicKey',
|
|
82
|
+
type: 'address',
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
};
|
|
63
86
|
exports.CLAIM_HANDLE_PAYLOAD_DEFINITION = {
|
|
64
87
|
ClaimHandlePayload: [
|
|
65
88
|
{
|
|
@@ -149,3 +172,30 @@ exports.ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2 = {
|
|
|
149
172
|
{ name: 'index', type: 'uint16' },
|
|
150
173
|
],
|
|
151
174
|
};
|
|
175
|
+
exports.SIWF_SIGNED_REQUEST_PAYLOAD_DEFINITION = {
|
|
176
|
+
SiwfSignedRequestPayload: [
|
|
177
|
+
{
|
|
178
|
+
name: 'callback',
|
|
179
|
+
type: 'string',
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
name: 'permissions',
|
|
183
|
+
type: 'uint16[]',
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
name: 'userIdentifierAdminUrl',
|
|
187
|
+
type: 'string',
|
|
188
|
+
},
|
|
189
|
+
],
|
|
190
|
+
};
|
|
191
|
+
const PAYLOAD_DEFINITIONS = [
|
|
192
|
+
exports.ADD_PROVIDER_DEFINITION,
|
|
193
|
+
exports.ADD_KEY_DATA_DEFINITION,
|
|
194
|
+
exports.AUTHORIZED_KEY_DATA_DEFINITION,
|
|
195
|
+
exports.CLAIM_HANDLE_PAYLOAD_DEFINITION,
|
|
196
|
+
exports.PASSKEY_PUBLIC_KEY_DEFINITION,
|
|
197
|
+
exports.PAGINATED_DELETE_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
198
|
+
exports.PAGINATED_UPSERT_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
199
|
+
exports.ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
200
|
+
exports.SIWF_SIGNED_REQUEST_PAYLOAD_DEFINITION,
|
|
201
|
+
];
|
package/cjs/signature.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.
|
|
3
|
+
exports.sign = sign;
|
|
4
|
+
exports.verifySignature = verifySignature;
|
|
5
5
|
exports.createAddKeyData = createAddKeyData;
|
|
6
|
+
exports.createAuthorizedKeyData = createAuthorizedKeyData;
|
|
6
7
|
exports.createAddProvider = createAddProvider;
|
|
7
8
|
exports.createClaimHandlePayload = createClaimHandlePayload;
|
|
8
9
|
exports.createPasskeyPublicKey = createPasskeyPublicKey;
|
|
@@ -11,48 +12,70 @@ exports.createItemizedDeleteAction = createItemizedDeleteAction;
|
|
|
11
12
|
exports.createItemizedSignaturePayloadV2 = createItemizedSignaturePayloadV2;
|
|
12
13
|
exports.createPaginatedDeleteSignaturePayloadV2 = createPaginatedDeleteSignaturePayloadV2;
|
|
13
14
|
exports.createPaginatedUpsertSignaturePayloadV2 = createPaginatedUpsertSignaturePayloadV2;
|
|
15
|
+
exports.createSiwfSignedRequestPayload = createSiwfSignedRequestPayload;
|
|
16
|
+
exports.createSiwfLoginRequestPayload = createSiwfLoginRequestPayload;
|
|
14
17
|
exports.getEip712BrowserRequestAddKeyData = getEip712BrowserRequestAddKeyData;
|
|
18
|
+
exports.getEip712BrowserRequestAuthorizedKeyData = getEip712BrowserRequestAuthorizedKeyData;
|
|
15
19
|
exports.getEip712BrowserRequestAddProvider = getEip712BrowserRequestAddProvider;
|
|
16
20
|
exports.getEip712BrowserRequestPaginatedUpsertSignaturePayloadV2 = getEip712BrowserRequestPaginatedUpsertSignaturePayloadV2;
|
|
17
21
|
exports.getEip712BrowserRequestPaginatedDeleteSignaturePayloadV2 = getEip712BrowserRequestPaginatedDeleteSignaturePayloadV2;
|
|
18
22
|
exports.getEip712BrowserRequestItemizedSignaturePayloadV2 = getEip712BrowserRequestItemizedSignaturePayloadV2;
|
|
19
23
|
exports.getEip712BrowserRequestClaimHandlePayload = getEip712BrowserRequestClaimHandlePayload;
|
|
20
24
|
exports.getEip712BrowserRequestPasskeyPublicKey = getEip712BrowserRequestPasskeyPublicKey;
|
|
25
|
+
exports.getEip712BrowserRequestSiwfSignedRequestPayload = getEip712BrowserRequestSiwfSignedRequestPayload;
|
|
21
26
|
exports.getEthereumRegularSigner = getEthereumRegularSigner;
|
|
22
27
|
exports.getEthereumMessageSigner = getEthereumMessageSigner;
|
|
23
|
-
const
|
|
24
|
-
const
|
|
28
|
+
const utils_js_1 = require("./utils.js");
|
|
29
|
+
const address_js_1 = require("./address.js");
|
|
25
30
|
const ethers_1 = require("ethers");
|
|
26
31
|
const util_1 = require("@polkadot/util");
|
|
27
|
-
const
|
|
32
|
+
const signature_definitions_js_1 = require("./signature.definitions.js");
|
|
28
33
|
/**
|
|
29
|
-
* Signing EIP-712 compatible signature
|
|
34
|
+
* Signing EIP-712 or ERC-191 compatible signature based on payload
|
|
30
35
|
* @param secretKey
|
|
31
36
|
* @param payload
|
|
32
37
|
* @param chain
|
|
33
38
|
*/
|
|
34
|
-
async function
|
|
35
|
-
const
|
|
39
|
+
async function sign(secretKey, payload, chain) {
|
|
40
|
+
const signatureType = getSignatureType(payload.type);
|
|
36
41
|
const normalizedPayload = normalizePayload(payload);
|
|
37
42
|
const wallet = new ethers_1.ethers.Wallet(secretKey);
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
43
|
+
let signature;
|
|
44
|
+
switch (signatureType) {
|
|
45
|
+
case 'EIP-712':
|
|
46
|
+
// TODO: use correct contract address for different payloads
|
|
47
|
+
signature = await wallet.signTypedData(chain === 'Mainnet-Frequency' ? signature_definitions_js_1.EIP712_DOMAIN_MAINNET : signature_definitions_js_1.EIP712_DOMAIN_TESTNET, getTypesFor(payload.type), normalizedPayload);
|
|
48
|
+
break;
|
|
49
|
+
case 'EIP-191':
|
|
50
|
+
signature = await wallet.signMessage(payload.message);
|
|
51
|
+
break;
|
|
52
|
+
default:
|
|
53
|
+
throw new Error(`Unsupported signature type : ${signatureType}`);
|
|
54
|
+
}
|
|
41
55
|
return { Ecdsa: signature };
|
|
42
56
|
}
|
|
43
57
|
/**
|
|
44
|
-
* Verify EIP-712 signatures
|
|
58
|
+
* Verify EIP-712 and ERC-191 signatures based on payload
|
|
45
59
|
* @param ethereumAddress
|
|
46
60
|
* @param signature
|
|
47
61
|
* @param payload
|
|
48
62
|
* @param chain
|
|
49
63
|
*/
|
|
50
|
-
function
|
|
51
|
-
const
|
|
64
|
+
function verifySignature(ethereumAddress, signature, payload, chain) {
|
|
65
|
+
const signatureType = getSignatureType(payload.type);
|
|
52
66
|
const normalizedPayload = normalizePayload(payload);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
67
|
+
let recoveredAddress;
|
|
68
|
+
switch (signatureType) {
|
|
69
|
+
case 'EIP-712':
|
|
70
|
+
// TODO: use correct contract address for different payloads
|
|
71
|
+
recoveredAddress = ethers_1.ethers.verifyTypedData(chain === 'Mainnet-Frequency' ? signature_definitions_js_1.EIP712_DOMAIN_MAINNET : signature_definitions_js_1.EIP712_DOMAIN_TESTNET, getTypesFor(payload.type), normalizedPayload, signature);
|
|
72
|
+
break;
|
|
73
|
+
case 'EIP-191':
|
|
74
|
+
recoveredAddress = ethers_1.ethers.verifyMessage(payload.message, signature);
|
|
75
|
+
break;
|
|
76
|
+
default:
|
|
77
|
+
throw new Error(`Unsupported signature type : ${signatureType}`);
|
|
78
|
+
}
|
|
56
79
|
return recoveredAddress.toLowerCase() === ethereumAddress.toLowerCase();
|
|
57
80
|
}
|
|
58
81
|
function normalizePayload(payload) {
|
|
@@ -64,14 +87,27 @@ function normalizePayload(payload) {
|
|
|
64
87
|
case 'PasskeyPublicKey':
|
|
65
88
|
case 'ClaimHandlePayload':
|
|
66
89
|
case 'AddProvider':
|
|
90
|
+
case 'SiwfLoginRequestPayload':
|
|
67
91
|
break;
|
|
68
92
|
case 'AddKeyData':
|
|
69
93
|
// convert to 20 bytes ethereum address for signature
|
|
70
94
|
if (clonedPayload.newPublicKey.length !== 42) {
|
|
71
|
-
clonedPayload.newPublicKey = (0,
|
|
95
|
+
clonedPayload.newPublicKey = (0, address_js_1.reverseUnifiedAddressToEthereumAddress)(payload.newPublicKey);
|
|
72
96
|
}
|
|
73
97
|
clonedPayload.newPublicKey = clonedPayload.newPublicKey.toLowerCase();
|
|
74
98
|
break;
|
|
99
|
+
case 'AuthorizedKeyData':
|
|
100
|
+
// convert to 20 bytes ethereum address for signature
|
|
101
|
+
if (clonedPayload.authorizedPublicKey.length !== 42) {
|
|
102
|
+
clonedPayload.authorizedPublicKey = (0, address_js_1.reverseUnifiedAddressToEthereumAddress)(payload.authorizedPublicKey);
|
|
103
|
+
}
|
|
104
|
+
clonedPayload.authorizedPublicKey = clonedPayload.authorizedPublicKey.toLowerCase();
|
|
105
|
+
break;
|
|
106
|
+
case 'SiwfSignedRequestPayload':
|
|
107
|
+
if (clonedPayload.userIdentifierAdminUrl == null) {
|
|
108
|
+
clonedPayload.userIdentifierAdminUrl = '';
|
|
109
|
+
}
|
|
110
|
+
break;
|
|
75
111
|
default:
|
|
76
112
|
throw new Error(`Unsupported payload type: ${JSON.stringify(payload)}`);
|
|
77
113
|
}
|
|
@@ -81,13 +117,16 @@ function normalizePayload(payload) {
|
|
|
81
117
|
}
|
|
82
118
|
function getTypesFor(payloadType) {
|
|
83
119
|
const PAYLOAD_TYPE_DEFINITIONS = {
|
|
84
|
-
PaginatedUpsertSignaturePayloadV2:
|
|
85
|
-
PaginatedDeleteSignaturePayloadV2:
|
|
86
|
-
ItemizedSignaturePayloadV2:
|
|
87
|
-
PasskeyPublicKey:
|
|
88
|
-
ClaimHandlePayload:
|
|
89
|
-
AddKeyData:
|
|
90
|
-
|
|
120
|
+
PaginatedUpsertSignaturePayloadV2: signature_definitions_js_1.PAGINATED_UPSERT_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
121
|
+
PaginatedDeleteSignaturePayloadV2: signature_definitions_js_1.PAGINATED_DELETE_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
122
|
+
ItemizedSignaturePayloadV2: signature_definitions_js_1.ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
123
|
+
PasskeyPublicKey: signature_definitions_js_1.PASSKEY_PUBLIC_KEY_DEFINITION,
|
|
124
|
+
ClaimHandlePayload: signature_definitions_js_1.CLAIM_HANDLE_PAYLOAD_DEFINITION,
|
|
125
|
+
AddKeyData: signature_definitions_js_1.ADD_KEY_DATA_DEFINITION,
|
|
126
|
+
AuthorizedKeyData: signature_definitions_js_1.AUTHORIZED_KEY_DATA_DEFINITION,
|
|
127
|
+
AddProvider: signature_definitions_js_1.ADD_PROVIDER_DEFINITION,
|
|
128
|
+
// offchain signatures
|
|
129
|
+
SiwfSignedRequestPayload: signature_definitions_js_1.SIWF_SIGNED_REQUEST_PAYLOAD_DEFINITION,
|
|
91
130
|
};
|
|
92
131
|
const definition = PAYLOAD_TYPE_DEFINITIONS[payloadType];
|
|
93
132
|
if (!definition) {
|
|
@@ -95,6 +134,12 @@ function getTypesFor(payloadType) {
|
|
|
95
134
|
}
|
|
96
135
|
return definition;
|
|
97
136
|
}
|
|
137
|
+
function getSignatureType(payloadType) {
|
|
138
|
+
if (payloadType === 'SiwfLoginRequestPayload') {
|
|
139
|
+
return 'EIP-191';
|
|
140
|
+
}
|
|
141
|
+
return 'EIP-712';
|
|
142
|
+
}
|
|
98
143
|
/**
|
|
99
144
|
* Build an AddKeyData payload for signature.
|
|
100
145
|
*
|
|
@@ -105,9 +150,9 @@ function getTypesFor(payloadType) {
|
|
|
105
150
|
function createAddKeyData(msaId, newPublicKey, expirationBlock) {
|
|
106
151
|
const parsedMsaId = typeof msaId === 'string' ? msaId : `${msaId}`;
|
|
107
152
|
const parsedNewPublicKey = typeof newPublicKey === 'object' ? (0, util_1.u8aToHex)(newPublicKey) : newPublicKey;
|
|
108
|
-
(0,
|
|
109
|
-
(0,
|
|
110
|
-
(0,
|
|
153
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint64String)(parsedMsaId), 'msaId should be a valid uint64');
|
|
154
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(expirationBlock), 'expiration should be a valid uint32');
|
|
155
|
+
(0, utils_js_1.assert)((0, utils_js_1.isHexString)(parsedNewPublicKey), 'newPublicKey should be valid hex');
|
|
111
156
|
return {
|
|
112
157
|
type: 'AddKeyData',
|
|
113
158
|
msaId: parsedMsaId,
|
|
@@ -115,6 +160,26 @@ function createAddKeyData(msaId, newPublicKey, expirationBlock) {
|
|
|
115
160
|
newPublicKey: parsedNewPublicKey,
|
|
116
161
|
};
|
|
117
162
|
}
|
|
163
|
+
/**
|
|
164
|
+
* Build an AuthorizedKeyData payload for signature.
|
|
165
|
+
*
|
|
166
|
+
* @param msaId MSA ID (uint64) to add the key
|
|
167
|
+
* @param authorizedPublicKey 32 bytes public key to authorize in hex or Uint8Array
|
|
168
|
+
* @param expirationBlock Block number after which this payload is invalid
|
|
169
|
+
*/
|
|
170
|
+
function createAuthorizedKeyData(msaId, newPublicKey, expirationBlock) {
|
|
171
|
+
const parsedMsaId = typeof msaId === 'string' ? msaId : `${msaId}`;
|
|
172
|
+
const parsedNewPublicKey = typeof newPublicKey === 'object' ? (0, util_1.u8aToHex)(newPublicKey) : newPublicKey;
|
|
173
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint64String)(parsedMsaId), 'msaId should be a valid uint64');
|
|
174
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(expirationBlock), 'expiration should be a valid uint32');
|
|
175
|
+
(0, utils_js_1.assert)((0, utils_js_1.isHexString)(parsedNewPublicKey), 'newPublicKey should be valid hex');
|
|
176
|
+
return {
|
|
177
|
+
type: 'AuthorizedKeyData',
|
|
178
|
+
msaId: parsedMsaId,
|
|
179
|
+
expiration: expirationBlock,
|
|
180
|
+
authorizedPublicKey: parsedNewPublicKey,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
118
183
|
/**
|
|
119
184
|
* Build an AddProvider payload for signature.
|
|
120
185
|
*
|
|
@@ -123,10 +188,10 @@ function createAddKeyData(msaId, newPublicKey, expirationBlock) {
|
|
|
123
188
|
* @param expirationBlock Block number after which this payload is invalid
|
|
124
189
|
*/
|
|
125
190
|
function createAddProvider(authorizedMsaId, schemaIds, expirationBlock) {
|
|
126
|
-
(0,
|
|
127
|
-
(0,
|
|
191
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint64String)(authorizedMsaId), 'authorizedMsaId should be a valid uint64');
|
|
192
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(expirationBlock), 'expiration should be a valid uint32');
|
|
128
193
|
schemaIds.forEach((schemaId) => {
|
|
129
|
-
(0,
|
|
194
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint16)(schemaId), 'schemaId should be a valid uint16');
|
|
130
195
|
});
|
|
131
196
|
return {
|
|
132
197
|
type: 'AddProvider',
|
|
@@ -142,8 +207,8 @@ function createAddProvider(authorizedMsaId, schemaIds, expirationBlock) {
|
|
|
142
207
|
* @param expirationBlock Block number after which this payload is invalid
|
|
143
208
|
*/
|
|
144
209
|
function createClaimHandlePayload(handle, expirationBlock) {
|
|
145
|
-
(0,
|
|
146
|
-
(0,
|
|
210
|
+
(0, utils_js_1.assert)(handle.length > 0, 'handle should be a valid string');
|
|
211
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(expirationBlock), 'expiration should be a valid uint32');
|
|
147
212
|
return {
|
|
148
213
|
type: 'ClaimHandlePayload',
|
|
149
214
|
handle,
|
|
@@ -157,7 +222,7 @@ function createClaimHandlePayload(handle, expirationBlock) {
|
|
|
157
222
|
*/
|
|
158
223
|
function createPasskeyPublicKey(publicKey) {
|
|
159
224
|
const parsedNewPublicKey = typeof publicKey === 'object' ? (0, util_1.u8aToHex)(publicKey) : publicKey;
|
|
160
|
-
(0,
|
|
225
|
+
(0, utils_js_1.assert)((0, utils_js_1.isHexString)(parsedNewPublicKey), 'publicKey should be valid hex');
|
|
161
226
|
return {
|
|
162
227
|
type: 'PasskeyPublicKey',
|
|
163
228
|
publicKey: parsedNewPublicKey,
|
|
@@ -165,11 +230,11 @@ function createPasskeyPublicKey(publicKey) {
|
|
|
165
230
|
}
|
|
166
231
|
function createItemizedAddAction(data) {
|
|
167
232
|
const parsedData = typeof data === 'object' ? (0, util_1.u8aToHex)(data) : data;
|
|
168
|
-
(0,
|
|
233
|
+
(0, utils_js_1.assert)((0, utils_js_1.isHexString)(parsedData), 'itemized data should be valid hex');
|
|
169
234
|
return { actionType: 'Add', data, index: 0 };
|
|
170
235
|
}
|
|
171
236
|
function createItemizedDeleteAction(index) {
|
|
172
|
-
(0,
|
|
237
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint16)(index), 'itemized index should be a valid uint16');
|
|
173
238
|
return { actionType: 'Delete', data: '0x', index };
|
|
174
239
|
}
|
|
175
240
|
/**
|
|
@@ -181,10 +246,10 @@ function createItemizedDeleteAction(index) {
|
|
|
181
246
|
* @param actions Array of Add/Delete itemized actions
|
|
182
247
|
*/
|
|
183
248
|
function createItemizedSignaturePayloadV2(schemaId, targetHash, expiration, actions) {
|
|
184
|
-
(0,
|
|
185
|
-
(0,
|
|
186
|
-
(0,
|
|
187
|
-
(0,
|
|
249
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint16)(schemaId), 'schemaId should be a valid uint16');
|
|
250
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(targetHash), 'targetHash should be a valid uint32');
|
|
251
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(expiration), 'expiration should be a valid uint32');
|
|
252
|
+
(0, utils_js_1.assert)(actions.length > 0, 'At least one action is required for ItemizedSignaturePayloadV2');
|
|
188
253
|
return {
|
|
189
254
|
type: 'ItemizedSignaturePayloadV2',
|
|
190
255
|
schemaId,
|
|
@@ -202,10 +267,10 @@ function createItemizedSignaturePayloadV2(schemaId, targetHash, expiration, acti
|
|
|
202
267
|
* @param expiration uint32 expiration block
|
|
203
268
|
*/
|
|
204
269
|
function createPaginatedDeleteSignaturePayloadV2(schemaId, pageId, targetHash, expiration) {
|
|
205
|
-
(0,
|
|
206
|
-
(0,
|
|
207
|
-
(0,
|
|
208
|
-
(0,
|
|
270
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint16)(schemaId), 'schemaId should be a valid uint16');
|
|
271
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint16)(pageId), 'pageId should be a valid uint16');
|
|
272
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(targetHash), 'targetHash should be a valid uint32');
|
|
273
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(expiration), 'expiration should be a valid uint32');
|
|
209
274
|
return {
|
|
210
275
|
type: 'PaginatedDeleteSignaturePayloadV2',
|
|
211
276
|
schemaId,
|
|
@@ -225,11 +290,11 @@ function createPaginatedDeleteSignaturePayloadV2(schemaId, pageId, targetHash, e
|
|
|
225
290
|
*/
|
|
226
291
|
function createPaginatedUpsertSignaturePayloadV2(schemaId, pageId, targetHash, expiration, payload) {
|
|
227
292
|
const parsedPayload = typeof payload === 'object' ? (0, util_1.u8aToHex)(payload) : payload;
|
|
228
|
-
(0,
|
|
229
|
-
(0,
|
|
230
|
-
(0,
|
|
231
|
-
(0,
|
|
232
|
-
(0,
|
|
293
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint16)(schemaId), 'schemaId should be a valid uint16');
|
|
294
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint16)(pageId), 'pageId should be a valid uint16');
|
|
295
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(targetHash), 'targetHash should be a valid uint32');
|
|
296
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint32)(expiration), 'expiration should be a valid uint32');
|
|
297
|
+
(0, utils_js_1.assert)((0, utils_js_1.isHexString)(parsedPayload), 'payload should be valid hex');
|
|
233
298
|
return {
|
|
234
299
|
type: 'PaginatedUpsertSignaturePayloadV2',
|
|
235
300
|
schemaId,
|
|
@@ -239,6 +304,35 @@ function createPaginatedUpsertSignaturePayloadV2(schemaId, pageId, targetHash, e
|
|
|
239
304
|
payload: parsedPayload,
|
|
240
305
|
};
|
|
241
306
|
}
|
|
307
|
+
/**
|
|
308
|
+
* Build an SiwfSignedRequestPayload payload for signature.
|
|
309
|
+
*
|
|
310
|
+
* @param callback Callback URL for login
|
|
311
|
+
* @param permissions One or more schema IDs (uint16) the provider may use
|
|
312
|
+
* @param userIdentifierAdminUrl Only used for custom integration situations.
|
|
313
|
+
*/
|
|
314
|
+
function createSiwfSignedRequestPayload(callback, permissions, userIdentifierAdminUrl) {
|
|
315
|
+
permissions.forEach((schemaId) => {
|
|
316
|
+
(0, utils_js_1.assert)((0, utils_js_1.isValidUint16)(schemaId), 'permission should be a valid uint16');
|
|
317
|
+
});
|
|
318
|
+
return {
|
|
319
|
+
type: 'SiwfSignedRequestPayload',
|
|
320
|
+
callback: callback,
|
|
321
|
+
permissions,
|
|
322
|
+
userIdentifierAdminUrl,
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Build an SiwfLoginRequestPayload payload for signature.
|
|
327
|
+
*
|
|
328
|
+
* @param message login message
|
|
329
|
+
*/
|
|
330
|
+
function createSiwfLoginRequestPayload(message) {
|
|
331
|
+
return {
|
|
332
|
+
type: 'SiwfLoginRequestPayload',
|
|
333
|
+
message,
|
|
334
|
+
};
|
|
335
|
+
}
|
|
242
336
|
/**
|
|
243
337
|
* Returns the EIP-712 browser request for a AddKeyData for signing.
|
|
244
338
|
*
|
|
@@ -247,10 +341,23 @@ function createPaginatedUpsertSignaturePayloadV2(schemaId, pageId, targetHash, e
|
|
|
247
341
|
* @param expirationBlock Block number after which this payload is invalid
|
|
248
342
|
* @param domain
|
|
249
343
|
*/
|
|
250
|
-
function getEip712BrowserRequestAddKeyData(msaId, newPublicKey, expirationBlock, domain =
|
|
344
|
+
function getEip712BrowserRequestAddKeyData(msaId, newPublicKey, expirationBlock, domain = signature_definitions_js_1.EIP712_DOMAIN_MAINNET) {
|
|
251
345
|
const message = createAddKeyData(msaId, newPublicKey, expirationBlock);
|
|
252
346
|
const normalized = normalizePayload(message);
|
|
253
|
-
return createEip712Payload(
|
|
347
|
+
return createEip712Payload(signature_definitions_js_1.ADD_KEY_DATA_DEFINITION, message.type, domain, normalized);
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Returns the EIP-712 browser request for a AuthorizedKeyData for signing.
|
|
351
|
+
*
|
|
352
|
+
* @param msaId MSA ID (uint64) to add the key
|
|
353
|
+
* @param authorizedPublicKey 32 bytes public key to add in hex or Uint8Array
|
|
354
|
+
* @param expirationBlock Block number after which this payload is invalid
|
|
355
|
+
* @param domain
|
|
356
|
+
*/
|
|
357
|
+
function getEip712BrowserRequestAuthorizedKeyData(msaId, authorizedPublicKey, expirationBlock, domain = signature_definitions_js_1.EIP712_DOMAIN_MAINNET) {
|
|
358
|
+
const message = createAuthorizedKeyData(msaId, authorizedPublicKey, expirationBlock);
|
|
359
|
+
const normalized = normalizePayload(message);
|
|
360
|
+
return createEip712Payload(signature_definitions_js_1.AUTHORIZED_KEY_DATA_DEFINITION, message.type, domain, normalized);
|
|
254
361
|
}
|
|
255
362
|
/**
|
|
256
363
|
* Returns the EIP-712 browser request for a AddProvider for signing.
|
|
@@ -260,10 +367,10 @@ function getEip712BrowserRequestAddKeyData(msaId, newPublicKey, expirationBlock,
|
|
|
260
367
|
* @param expirationBlock Block number after which this payload is invalid
|
|
261
368
|
* @param domain
|
|
262
369
|
*/
|
|
263
|
-
function getEip712BrowserRequestAddProvider(authorizedMsaId, schemaIds, expirationBlock, domain =
|
|
370
|
+
function getEip712BrowserRequestAddProvider(authorizedMsaId, schemaIds, expirationBlock, domain = signature_definitions_js_1.EIP712_DOMAIN_MAINNET) {
|
|
264
371
|
const message = createAddProvider(authorizedMsaId, schemaIds, expirationBlock);
|
|
265
372
|
const normalized = normalizePayload(message);
|
|
266
|
-
return createEip712Payload(
|
|
373
|
+
return createEip712Payload(signature_definitions_js_1.ADD_PROVIDER_DEFINITION, message.type, domain, normalized);
|
|
267
374
|
}
|
|
268
375
|
/**
|
|
269
376
|
* Returns the EIP-712 browser request for a PaginatedUpsertSignaturePayloadV2 for signing.
|
|
@@ -275,10 +382,10 @@ function getEip712BrowserRequestAddProvider(authorizedMsaId, schemaIds, expirati
|
|
|
275
382
|
* @param payload HexString or Uint8Array data to upsert
|
|
276
383
|
* @param domain
|
|
277
384
|
*/
|
|
278
|
-
function getEip712BrowserRequestPaginatedUpsertSignaturePayloadV2(schemaId, pageId, targetHash, expiration, payload, domain =
|
|
385
|
+
function getEip712BrowserRequestPaginatedUpsertSignaturePayloadV2(schemaId, pageId, targetHash, expiration, payload, domain = signature_definitions_js_1.EIP712_DOMAIN_MAINNET) {
|
|
279
386
|
const message = createPaginatedUpsertSignaturePayloadV2(schemaId, pageId, targetHash, expiration, payload);
|
|
280
387
|
const normalized = normalizePayload(message);
|
|
281
|
-
return createEip712Payload(
|
|
388
|
+
return createEip712Payload(signature_definitions_js_1.PAGINATED_UPSERT_SIGNATURE_PAYLOAD_DEFINITION_V2, message.type, domain, normalized);
|
|
282
389
|
}
|
|
283
390
|
/**
|
|
284
391
|
* Returns the EIP-712 browser request for a PaginatedDeleteSignaturePayloadV2 for signing.
|
|
@@ -289,10 +396,10 @@ function getEip712BrowserRequestPaginatedUpsertSignaturePayloadV2(schemaId, page
|
|
|
289
396
|
* @param expiration uint32 expiration block
|
|
290
397
|
* @param domain
|
|
291
398
|
*/
|
|
292
|
-
function getEip712BrowserRequestPaginatedDeleteSignaturePayloadV2(schemaId, pageId, targetHash, expiration, domain =
|
|
399
|
+
function getEip712BrowserRequestPaginatedDeleteSignaturePayloadV2(schemaId, pageId, targetHash, expiration, domain = signature_definitions_js_1.EIP712_DOMAIN_MAINNET) {
|
|
293
400
|
const message = createPaginatedDeleteSignaturePayloadV2(schemaId, pageId, targetHash, expiration);
|
|
294
401
|
const normalized = normalizePayload(message);
|
|
295
|
-
return createEip712Payload(
|
|
402
|
+
return createEip712Payload(signature_definitions_js_1.PAGINATED_DELETE_SIGNATURE_PAYLOAD_DEFINITION_V2, message.type, domain, normalized);
|
|
296
403
|
}
|
|
297
404
|
/**
|
|
298
405
|
* Returns the EIP-712 browser request for a ItemizedSignaturePayloadV2 for signing.
|
|
@@ -303,10 +410,10 @@ function getEip712BrowserRequestPaginatedDeleteSignaturePayloadV2(schemaId, page
|
|
|
303
410
|
* @param actions Array of Add/Delete itemized actions
|
|
304
411
|
* @param domain
|
|
305
412
|
*/
|
|
306
|
-
function getEip712BrowserRequestItemizedSignaturePayloadV2(schemaId, targetHash, expiration, actions, domain =
|
|
413
|
+
function getEip712BrowserRequestItemizedSignaturePayloadV2(schemaId, targetHash, expiration, actions, domain = signature_definitions_js_1.EIP712_DOMAIN_MAINNET) {
|
|
307
414
|
const message = createItemizedSignaturePayloadV2(schemaId, targetHash, expiration, actions);
|
|
308
415
|
const normalized = normalizePayload(message);
|
|
309
|
-
return createEip712Payload(
|
|
416
|
+
return createEip712Payload(signature_definitions_js_1.ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2, message.type, domain, normalized);
|
|
310
417
|
}
|
|
311
418
|
/**
|
|
312
419
|
* Returns the EIP-712 browser request for a ClaimHandlePayload for signing.
|
|
@@ -315,10 +422,10 @@ function getEip712BrowserRequestItemizedSignaturePayloadV2(schemaId, targetHash,
|
|
|
315
422
|
* @param expirationBlock Block number after which this payload is invalid
|
|
316
423
|
* @param domain
|
|
317
424
|
*/
|
|
318
|
-
function getEip712BrowserRequestClaimHandlePayload(handle, expirationBlock, domain =
|
|
425
|
+
function getEip712BrowserRequestClaimHandlePayload(handle, expirationBlock, domain = signature_definitions_js_1.EIP712_DOMAIN_MAINNET) {
|
|
319
426
|
const message = createClaimHandlePayload(handle, expirationBlock);
|
|
320
427
|
const normalized = normalizePayload(message);
|
|
321
|
-
return createEip712Payload(
|
|
428
|
+
return createEip712Payload(signature_definitions_js_1.CLAIM_HANDLE_PAYLOAD_DEFINITION, message.type, domain, normalized);
|
|
322
429
|
}
|
|
323
430
|
/**
|
|
324
431
|
* Returns the EIP-712 browser request for a PasskeyPublicKey for signing.
|
|
@@ -326,15 +433,28 @@ function getEip712BrowserRequestClaimHandlePayload(handle, expirationBlock, doma
|
|
|
326
433
|
* @param publicKey The passkey’s public key (hex string or raw bytes)
|
|
327
434
|
* @param domain
|
|
328
435
|
*/
|
|
329
|
-
function getEip712BrowserRequestPasskeyPublicKey(publicKey, domain =
|
|
436
|
+
function getEip712BrowserRequestPasskeyPublicKey(publicKey, domain = signature_definitions_js_1.EIP712_DOMAIN_MAINNET) {
|
|
330
437
|
const message = createPasskeyPublicKey(publicKey);
|
|
331
438
|
const normalized = normalizePayload(message);
|
|
332
|
-
return createEip712Payload(
|
|
439
|
+
return createEip712Payload(signature_definitions_js_1.PASSKEY_PUBLIC_KEY_DEFINITION, message.type, domain, normalized);
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* Returns the EIP-712 browser request for a SiwfSignedRequestPayload for signing.
|
|
443
|
+
*
|
|
444
|
+
* @param callback Callback URL for login
|
|
445
|
+
* @param permissions One or more schema IDs (uint16) the provider may use
|
|
446
|
+
* @param userIdentifierAdminUrl Only used for custom integration situations.
|
|
447
|
+
* @param domain
|
|
448
|
+
*/
|
|
449
|
+
function getEip712BrowserRequestSiwfSignedRequestPayload(callback, permissions, userIdentifierAdminUrl, domain = signature_definitions_js_1.EIP712_DOMAIN_MAINNET) {
|
|
450
|
+
const message = createSiwfSignedRequestPayload(callback, permissions, userIdentifierAdminUrl);
|
|
451
|
+
const normalized = normalizePayload(message);
|
|
452
|
+
return createEip712Payload(signature_definitions_js_1.SIWF_SIGNED_REQUEST_PAYLOAD_DEFINITION, message.type, domain, normalized);
|
|
333
453
|
}
|
|
334
454
|
function createEip712Payload(typeDefinition, primaryType, domain, message) {
|
|
335
455
|
return {
|
|
336
456
|
types: {
|
|
337
|
-
...
|
|
457
|
+
...signature_definitions_js_1.EIP712_DOMAIN_DEFINITION,
|
|
338
458
|
...typeDefinition,
|
|
339
459
|
},
|
|
340
460
|
primaryType,
|
package/esm/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import * as address from './address';
|
|
2
|
-
import * as payloads from './payloads';
|
|
3
|
-
import * as signature from './signature';
|
|
4
|
-
import * as signatureDefinitions from './signature.definitions';
|
|
5
|
-
export * from './payloads';
|
|
6
|
-
export * from './signature';
|
|
7
|
-
export * from './signature.definitions';
|
|
8
|
-
export * from './address';
|
|
1
|
+
import * as address from './address.js';
|
|
2
|
+
import * as payloads from './payloads.js';
|
|
3
|
+
import * as signature from './signature.js';
|
|
4
|
+
import * as signatureDefinitions from './signature.definitions.js';
|
|
5
|
+
export * from './payloads.js';
|
|
6
|
+
export * from './signature.js';
|
|
7
|
+
export * from './signature.definitions.js';
|
|
8
|
+
export * from './address.js';
|
|
9
9
|
export default { ...payloads, ...address, ...signatureDefinitions, ...signature };
|
|
@@ -18,8 +18,15 @@ export const EIP712_DOMAIN_DEFINITION = {
|
|
|
18
18
|
},
|
|
19
19
|
],
|
|
20
20
|
};
|
|
21
|
-
// using
|
|
22
|
-
export const
|
|
21
|
+
// using 2091 for mainnet
|
|
22
|
+
export const EIP712_DOMAIN_MAINNET = {
|
|
23
|
+
name: 'Frequency',
|
|
24
|
+
version: '1',
|
|
25
|
+
chainId: '0x082B',
|
|
26
|
+
verifyingContract: '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC',
|
|
27
|
+
};
|
|
28
|
+
// using pallet_revive test chain ID for testnet/dev
|
|
29
|
+
export const EIP712_DOMAIN_TESTNET = {
|
|
23
30
|
name: 'Frequency',
|
|
24
31
|
version: '1',
|
|
25
32
|
chainId: '0x190f1b44',
|
|
@@ -57,6 +64,22 @@ export const ADD_KEY_DATA_DEFINITION = {
|
|
|
57
64
|
},
|
|
58
65
|
],
|
|
59
66
|
};
|
|
67
|
+
export const AUTHORIZED_KEY_DATA_DEFINITION = {
|
|
68
|
+
AuthorizedKeyData: [
|
|
69
|
+
{
|
|
70
|
+
name: 'msaId',
|
|
71
|
+
type: 'uint64',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
name: 'expiration',
|
|
75
|
+
type: 'uint32',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: 'authorizedPublicKey',
|
|
79
|
+
type: 'address',
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
};
|
|
60
83
|
export const CLAIM_HANDLE_PAYLOAD_DEFINITION = {
|
|
61
84
|
ClaimHandlePayload: [
|
|
62
85
|
{
|
|
@@ -146,3 +169,30 @@ export const ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2 = {
|
|
|
146
169
|
{ name: 'index', type: 'uint16' },
|
|
147
170
|
],
|
|
148
171
|
};
|
|
172
|
+
export const SIWF_SIGNED_REQUEST_PAYLOAD_DEFINITION = {
|
|
173
|
+
SiwfSignedRequestPayload: [
|
|
174
|
+
{
|
|
175
|
+
name: 'callback',
|
|
176
|
+
type: 'string',
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
name: 'permissions',
|
|
180
|
+
type: 'uint16[]',
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
name: 'userIdentifierAdminUrl',
|
|
184
|
+
type: 'string',
|
|
185
|
+
},
|
|
186
|
+
],
|
|
187
|
+
};
|
|
188
|
+
const PAYLOAD_DEFINITIONS = [
|
|
189
|
+
ADD_PROVIDER_DEFINITION,
|
|
190
|
+
ADD_KEY_DATA_DEFINITION,
|
|
191
|
+
AUTHORIZED_KEY_DATA_DEFINITION,
|
|
192
|
+
CLAIM_HANDLE_PAYLOAD_DEFINITION,
|
|
193
|
+
PASSKEY_PUBLIC_KEY_DEFINITION,
|
|
194
|
+
PAGINATED_DELETE_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
195
|
+
PAGINATED_UPSERT_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
196
|
+
ITEMIZED_SIGNATURE_PAYLOAD_DEFINITION_V2,
|
|
197
|
+
SIWF_SIGNED_REQUEST_PAYLOAD_DEFINITION,
|
|
198
|
+
];
|