@safe-global/relay-kit 3.4.1-alpha.0 → 3.4.1
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/RelayKitBasePack.d.ts +0 -1
- package/dist/src/RelayKitBasePack.js +26 -0
- package/dist/src/RelayKitBasePack.js.map +1 -0
- package/dist/src/constants.d.ts +0 -1
- package/dist/src/constants.js +12 -0
- package/dist/src/constants.js.map +1 -0
- package/dist/src/deprecated.d.ts +0 -1
- package/dist/src/deprecated.js +3 -0
- package/dist/src/deprecated.js.map +1 -0
- package/dist/src/index.d.ts +0 -2
- package/dist/src/index.js +30 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/packs/gelato/GelatoRelayPack.d.ts +0 -1
- package/dist/src/packs/gelato/GelatoRelayPack.js +327 -0
- package/dist/src/packs/gelato/GelatoRelayPack.js.map +1 -0
- package/dist/src/packs/gelato/types.d.ts +0 -1
- package/dist/src/packs/gelato/types.js +3 -0
- package/dist/src/packs/gelato/types.js.map +1 -0
- package/dist/src/packs/safe-4337/Safe4337Pack.d.ts +0 -1
- package/dist/src/packs/safe-4337/Safe4337Pack.js +644 -0
- package/dist/src/packs/safe-4337/Safe4337Pack.js.map +1 -0
- package/dist/src/packs/safe-4337/SafeOperation.d.ts +0 -1
- package/dist/src/packs/safe-4337/SafeOperation.js +68 -0
- package/dist/src/packs/safe-4337/SafeOperation.js.map +1 -0
- package/dist/src/packs/safe-4337/constants.d.ts +0 -1
- package/dist/src/packs/safe-4337/constants.js +55 -0
- package/dist/src/packs/safe-4337/constants.js.map +1 -0
- package/dist/src/packs/safe-4337/estimators/PimlicoFeeEstimator.d.ts +0 -1
- package/dist/src/packs/safe-4337/estimators/PimlicoFeeEstimator.js +49 -0
- package/dist/src/packs/safe-4337/estimators/PimlicoFeeEstimator.js.map +1 -0
- package/dist/src/packs/safe-4337/estimators/index.d.ts +0 -1
- package/dist/src/packs/safe-4337/estimators/index.js +6 -0
- package/dist/src/packs/safe-4337/estimators/index.js.map +1 -0
- package/dist/{test-utils → src/packs/safe-4337/testing-utils}/fixtures.d.ts +6 -7
- package/dist/src/packs/safe-4337/testing-utils/fixtures.js +128 -0
- package/dist/src/packs/safe-4337/testing-utils/fixtures.js.map +1 -0
- package/dist/{test-utils → src/packs/safe-4337/testing-utils}/helpers.d.ts +2 -3
- package/dist/src/packs/safe-4337/testing-utils/helpers.js +58 -0
- package/dist/src/packs/safe-4337/testing-utils/helpers.js.map +1 -0
- package/dist/src/packs/safe-4337/types.d.ts +0 -1
- package/dist/src/packs/safe-4337/types.js +3 -0
- package/dist/src/packs/safe-4337/types.js.map +1 -0
- package/dist/src/packs/safe-4337/utils/entrypoint.d.ts +0 -1
- package/dist/src/packs/safe-4337/utils/entrypoint.js +23 -0
- package/dist/src/packs/safe-4337/utils/entrypoint.js.map +1 -0
- package/dist/src/packs/safe-4337/utils/getRelayKitVersion.d.ts +0 -1
- package/dist/src/packs/safe-4337/utils/getRelayKitVersion.js +6 -0
- package/dist/src/packs/safe-4337/utils/getRelayKitVersion.js.map +1 -0
- package/dist/src/packs/safe-4337/utils.d.ts +0 -1
- package/dist/src/packs/safe-4337/utils.js +190 -0
- package/dist/src/packs/safe-4337/utils.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +7 -23
- package/dist/cjs/src/index.cjs +0 -1323
- package/dist/cjs/test-utils/index.cjs +0 -1171
- package/dist/esm/src/index.mjs +0 -1326
- package/dist/esm/test-utils/index.mjs +0 -1172
- package/dist/src/RelayKitBasePack.d.ts.map +0 -1
- package/dist/src/constants.d.ts.map +0 -1
- package/dist/src/deprecated.d.ts.map +0 -1
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/packs/gelato/GelatoRelayPack.d.ts.map +0 -1
- package/dist/src/packs/gelato/types.d.ts.map +0 -1
- package/dist/src/packs/safe-4337/Safe4337Pack.d.ts.map +0 -1
- package/dist/src/packs/safe-4337/SafeOperation.d.ts.map +0 -1
- package/dist/src/packs/safe-4337/constants.d.ts.map +0 -1
- package/dist/src/packs/safe-4337/estimators/PimlicoFeeEstimator.d.ts.map +0 -1
- package/dist/src/packs/safe-4337/estimators/index.d.ts.map +0 -1
- package/dist/src/packs/safe-4337/types.d.ts.map +0 -1
- package/dist/src/packs/safe-4337/utils/entrypoint.d.ts.map +0 -1
- package/dist/src/packs/safe-4337/utils/getRelayKitVersion.d.ts.map +0 -1
- package/dist/src/packs/safe-4337/utils.d.ts.map +0 -1
- package/dist/test-utils/fixtures.d.ts.map +0 -1
- package/dist/test-utils/helpers.d.ts.map +0 -1
- package/dist/test-utils/index.d.ts +0 -4
- package/dist/test-utils/index.d.ts.map +0 -1
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getSignatureBytes = exports.addDummySignature = exports.DUMMY_AUTHENTICATOR_DATA = exports.DUMMY_CLIENT_DATA_FIELDS = exports.userOperationToHexValues = exports.calculateSafeUserOperationHash = exports.encodeMultiSendCallData = exports.signSafeOp = exports.getEip4337BundlerProvider = void 0;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
const types_kit_1 = require("@safe-global/types-kit");
|
|
6
|
+
const protocol_kit_1 = require("@safe-global/protocol-kit");
|
|
7
|
+
const constants_1 = require("./constants");
|
|
8
|
+
/**
|
|
9
|
+
* Gets the EIP-4337 bundler provider.
|
|
10
|
+
*
|
|
11
|
+
* @param {string} bundlerUrl The EIP-4337 bundler URL.
|
|
12
|
+
* @return {BundlerClient} The EIP-4337 bundler provider.
|
|
13
|
+
*/
|
|
14
|
+
function getEip4337BundlerProvider(bundlerUrl) {
|
|
15
|
+
const provider = (0, viem_1.createPublicClient)({
|
|
16
|
+
transport: (0, viem_1.http)(bundlerUrl),
|
|
17
|
+
rpcSchema: (0, viem_1.rpcSchema)()
|
|
18
|
+
});
|
|
19
|
+
return provider;
|
|
20
|
+
}
|
|
21
|
+
exports.getEip4337BundlerProvider = getEip4337BundlerProvider;
|
|
22
|
+
/**
|
|
23
|
+
* Signs typed data.
|
|
24
|
+
*
|
|
25
|
+
* @param {SafeUserOperation} safeUserOperation - Safe user operation to sign.
|
|
26
|
+
* @param {SafeProvider} safeProvider - Safe provider.
|
|
27
|
+
* @param {string} safe4337ModuleAddress - Safe 4337 module address.
|
|
28
|
+
* @return {Promise<SafeSignature>} The SafeSignature object containing the data and the signatures.
|
|
29
|
+
*/
|
|
30
|
+
async function signSafeOp(safeUserOperation, safeProvider, safe4337ModuleAddress) {
|
|
31
|
+
const signer = await safeProvider.getExternalSigner();
|
|
32
|
+
if (!signer) {
|
|
33
|
+
throw new Error('No signer found');
|
|
34
|
+
}
|
|
35
|
+
const chainId = await safeProvider.getChainId();
|
|
36
|
+
const signerAddress = signer.account.address;
|
|
37
|
+
const signature = await signer.signTypedData({
|
|
38
|
+
domain: {
|
|
39
|
+
chainId: Number(chainId),
|
|
40
|
+
verifyingContract: safe4337ModuleAddress
|
|
41
|
+
},
|
|
42
|
+
types: constants_1.EIP712_SAFE_OPERATION_TYPE,
|
|
43
|
+
message: {
|
|
44
|
+
...safeUserOperation,
|
|
45
|
+
nonce: (0, viem_1.toHex)(safeUserOperation.nonce),
|
|
46
|
+
validAfter: (0, viem_1.toHex)(safeUserOperation.validAfter),
|
|
47
|
+
validUntil: (0, viem_1.toHex)(safeUserOperation.validUntil),
|
|
48
|
+
maxFeePerGas: (0, viem_1.toHex)(safeUserOperation.maxFeePerGas),
|
|
49
|
+
maxPriorityFeePerGas: (0, viem_1.toHex)(safeUserOperation.maxPriorityFeePerGas)
|
|
50
|
+
},
|
|
51
|
+
primaryType: 'SafeOp'
|
|
52
|
+
});
|
|
53
|
+
return new protocol_kit_1.EthSafeSignature(signerAddress, signature);
|
|
54
|
+
}
|
|
55
|
+
exports.signSafeOp = signSafeOp;
|
|
56
|
+
/**
|
|
57
|
+
* Encodes multi-send data from transactions batch.
|
|
58
|
+
*
|
|
59
|
+
* @param {MetaTransactionData[]} transactions - an array of transaction to to be encoded.
|
|
60
|
+
* @return {string} The encoded data string.
|
|
61
|
+
*/
|
|
62
|
+
function encodeMultiSendCallData(transactions) {
|
|
63
|
+
return (0, viem_1.encodeFunctionData)({
|
|
64
|
+
abi: constants_1.ABI,
|
|
65
|
+
functionName: 'multiSend',
|
|
66
|
+
args: [
|
|
67
|
+
(0, protocol_kit_1.encodeMultiSendData)(transactions.map((tx) => ({ ...tx, operation: tx.operation ?? types_kit_1.OperationType.Call })))
|
|
68
|
+
]
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
exports.encodeMultiSendCallData = encodeMultiSendCallData;
|
|
72
|
+
/**
|
|
73
|
+
* Gets the safe user operation hash.
|
|
74
|
+
*
|
|
75
|
+
* @param {SafeUserOperation} safeUserOperation - The SafeUserOperation.
|
|
76
|
+
* @param {bigint} chainId - The chain id.
|
|
77
|
+
* @param {string} safe4337ModuleAddress - The Safe 4337 module address.
|
|
78
|
+
* @return {string} The hash of the safe operation.
|
|
79
|
+
*/
|
|
80
|
+
function calculateSafeUserOperationHash(safeUserOperation, chainId, safe4337ModuleAddress) {
|
|
81
|
+
return (0, viem_1.hashTypedData)({
|
|
82
|
+
domain: {
|
|
83
|
+
chainId: Number(chainId),
|
|
84
|
+
verifyingContract: safe4337ModuleAddress
|
|
85
|
+
},
|
|
86
|
+
types: constants_1.EIP712_SAFE_OPERATION_TYPE,
|
|
87
|
+
primaryType: 'SafeOp',
|
|
88
|
+
message: safeUserOperation
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
exports.calculateSafeUserOperationHash = calculateSafeUserOperationHash;
|
|
92
|
+
/**
|
|
93
|
+
* Converts various bigint values from a UserOperation to their hexadecimal representation.
|
|
94
|
+
*
|
|
95
|
+
* @param {UserOperation} userOperation - The UserOperation object whose values are to be converted.
|
|
96
|
+
* @returns {UserOperation} A new UserOperation object with the values converted to hexadecimal.
|
|
97
|
+
*/
|
|
98
|
+
function userOperationToHexValues(userOperation) {
|
|
99
|
+
const userOperationWithHexValues = {
|
|
100
|
+
...userOperation,
|
|
101
|
+
nonce: (0, viem_1.toHex)(userOperation.nonce),
|
|
102
|
+
callGasLimit: (0, viem_1.toHex)(userOperation.callGasLimit),
|
|
103
|
+
verificationGasLimit: (0, viem_1.toHex)(userOperation.verificationGasLimit),
|
|
104
|
+
preVerificationGas: (0, viem_1.toHex)(userOperation.preVerificationGas),
|
|
105
|
+
maxFeePerGas: (0, viem_1.toHex)(userOperation.maxFeePerGas),
|
|
106
|
+
maxPriorityFeePerGas: (0, viem_1.toHex)(userOperation.maxPriorityFeePerGas)
|
|
107
|
+
};
|
|
108
|
+
return userOperationWithHexValues;
|
|
109
|
+
}
|
|
110
|
+
exports.userOperationToHexValues = userOperationToHexValues;
|
|
111
|
+
/**
|
|
112
|
+
* Passkey Dummy client data JSON fields. This can be used for gas estimations, as it pads the fields enough
|
|
113
|
+
* to account for variations in WebAuthn implementations.
|
|
114
|
+
*/
|
|
115
|
+
exports.DUMMY_CLIENT_DATA_FIELDS = [
|
|
116
|
+
`"origin":"https://safe.global"`,
|
|
117
|
+
`"padding":"This pads the clientDataJSON so that we can leave room for additional implementation specific fields for a more accurate 'preVerificationGas' estimate."`
|
|
118
|
+
].join(',');
|
|
119
|
+
/**
|
|
120
|
+
* Dummy authenticator data. This can be used for gas estimations, as it ensures that the correct
|
|
121
|
+
* authenticator flags are set.
|
|
122
|
+
*/
|
|
123
|
+
exports.DUMMY_AUTHENTICATOR_DATA = new Uint8Array(37);
|
|
124
|
+
// Authenticator data is the concatenation of:
|
|
125
|
+
// - 32 byte SHA-256 hash of the relying party ID
|
|
126
|
+
// - 1 byte for the user verification flag
|
|
127
|
+
// - 4 bytes for the signature count
|
|
128
|
+
// We fill it all with `0xfe` and set the appropriate user verification flag.
|
|
129
|
+
exports.DUMMY_AUTHENTICATOR_DATA.fill(0xfe);
|
|
130
|
+
exports.DUMMY_AUTHENTICATOR_DATA[32] = 0x04;
|
|
131
|
+
/**
|
|
132
|
+
* This method creates a dummy signature for the SafeOperation based on the Safe threshold. We assume that all owners are passkeys
|
|
133
|
+
* This is useful for gas estimations
|
|
134
|
+
* @param userOperation - The user operation
|
|
135
|
+
* @param signer - The signer
|
|
136
|
+
* @param threshold - The Safe threshold
|
|
137
|
+
* @returns The user operation with the dummy passkey signature
|
|
138
|
+
*/
|
|
139
|
+
function addDummySignature(userOperation, signer, threshold) {
|
|
140
|
+
const signatures = [];
|
|
141
|
+
for (let i = 0; i < threshold; i++) {
|
|
142
|
+
const isContractSignature = true;
|
|
143
|
+
const passkeySignature = getSignatureBytes({
|
|
144
|
+
authenticatorData: exports.DUMMY_AUTHENTICATOR_DATA,
|
|
145
|
+
clientDataFields: exports.DUMMY_CLIENT_DATA_FIELDS,
|
|
146
|
+
r: BigInt(`0x${'ec'.repeat(32)}`),
|
|
147
|
+
s: BigInt(`0x${'d5a'.repeat(21)}f`)
|
|
148
|
+
});
|
|
149
|
+
signatures.push(new protocol_kit_1.EthSafeSignature(signer, passkeySignature, isContractSignature));
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
...userOperation,
|
|
153
|
+
signature: (0, viem_1.encodePacked)(['uint48', 'uint48', 'bytes'], [0, 0, (0, protocol_kit_1.buildSignatureBytes)(signatures)])
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
exports.addDummySignature = addDummySignature;
|
|
157
|
+
/**
|
|
158
|
+
* Encodes the given WebAuthn signature into a string. This computes the ABI-encoded signature parameters:
|
|
159
|
+
* ```solidity
|
|
160
|
+
* abi.encode(authenticatorData, clientDataFields, r, s);
|
|
161
|
+
* ```
|
|
162
|
+
*
|
|
163
|
+
* @param authenticatorData - The authenticator data as a Uint8Array.
|
|
164
|
+
* @param clientDataFields - The client data fields as a string.
|
|
165
|
+
* @param r - The value of r as a bigint.
|
|
166
|
+
* @param s - The value of s as a bigint.
|
|
167
|
+
* @returns The encoded string.
|
|
168
|
+
*/
|
|
169
|
+
function getSignatureBytes({ authenticatorData, clientDataFields, r, s }) {
|
|
170
|
+
// Helper functions
|
|
171
|
+
// Convert a number to a 64-byte hex string with padded upto Hex string with 32 bytes
|
|
172
|
+
const encodeUint256 = (x) => x.toString(16).padStart(64, '0');
|
|
173
|
+
// Calculate the byte size of the dynamic data along with the length parameter alligned to 32 bytes
|
|
174
|
+
const byteSize = (data) => 32 * (Math.ceil(data.length / 32) + 1); // +1 is for the length parameter
|
|
175
|
+
// Encode dynamic data padded with zeros if necessary in 32 bytes chunks
|
|
176
|
+
const encodeBytes = (data) => `${encodeUint256(data.length)}${(0, viem_1.toHex)(data).slice(2)}`.padEnd(byteSize(data) * 2, '0');
|
|
177
|
+
// authenticatorData starts after the first four words.
|
|
178
|
+
const authenticatorDataOffset = 32 * 4;
|
|
179
|
+
// clientDataFields starts immediately after the authenticator data.
|
|
180
|
+
const clientDataFieldsOffset = authenticatorDataOffset + byteSize(authenticatorData);
|
|
181
|
+
return ('0x' +
|
|
182
|
+
encodeUint256(authenticatorDataOffset) +
|
|
183
|
+
encodeUint256(clientDataFieldsOffset) +
|
|
184
|
+
encodeUint256(r) +
|
|
185
|
+
encodeUint256(s) +
|
|
186
|
+
encodeBytes(authenticatorData) +
|
|
187
|
+
encodeBytes(new TextEncoder().encode(clientDataFields)));
|
|
188
|
+
}
|
|
189
|
+
exports.getSignatureBytes = getSignatureBytes;
|
|
190
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/packs/safe-4337/utils.ts"],"names":[],"mappings":"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"}
|