@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.
Files changed (76) hide show
  1. package/dist/src/RelayKitBasePack.d.ts +0 -1
  2. package/dist/src/RelayKitBasePack.js +26 -0
  3. package/dist/src/RelayKitBasePack.js.map +1 -0
  4. package/dist/src/constants.d.ts +0 -1
  5. package/dist/src/constants.js +12 -0
  6. package/dist/src/constants.js.map +1 -0
  7. package/dist/src/deprecated.d.ts +0 -1
  8. package/dist/src/deprecated.js +3 -0
  9. package/dist/src/deprecated.js.map +1 -0
  10. package/dist/src/index.d.ts +0 -2
  11. package/dist/src/index.js +30 -0
  12. package/dist/src/index.js.map +1 -0
  13. package/dist/src/packs/gelato/GelatoRelayPack.d.ts +0 -1
  14. package/dist/src/packs/gelato/GelatoRelayPack.js +327 -0
  15. package/dist/src/packs/gelato/GelatoRelayPack.js.map +1 -0
  16. package/dist/src/packs/gelato/types.d.ts +0 -1
  17. package/dist/src/packs/gelato/types.js +3 -0
  18. package/dist/src/packs/gelato/types.js.map +1 -0
  19. package/dist/src/packs/safe-4337/Safe4337Pack.d.ts +0 -1
  20. package/dist/src/packs/safe-4337/Safe4337Pack.js +644 -0
  21. package/dist/src/packs/safe-4337/Safe4337Pack.js.map +1 -0
  22. package/dist/src/packs/safe-4337/SafeOperation.d.ts +0 -1
  23. package/dist/src/packs/safe-4337/SafeOperation.js +68 -0
  24. package/dist/src/packs/safe-4337/SafeOperation.js.map +1 -0
  25. package/dist/src/packs/safe-4337/constants.d.ts +0 -1
  26. package/dist/src/packs/safe-4337/constants.js +55 -0
  27. package/dist/src/packs/safe-4337/constants.js.map +1 -0
  28. package/dist/src/packs/safe-4337/estimators/PimlicoFeeEstimator.d.ts +0 -1
  29. package/dist/src/packs/safe-4337/estimators/PimlicoFeeEstimator.js +49 -0
  30. package/dist/src/packs/safe-4337/estimators/PimlicoFeeEstimator.js.map +1 -0
  31. package/dist/src/packs/safe-4337/estimators/index.d.ts +0 -1
  32. package/dist/src/packs/safe-4337/estimators/index.js +6 -0
  33. package/dist/src/packs/safe-4337/estimators/index.js.map +1 -0
  34. package/dist/{test-utils → src/packs/safe-4337/testing-utils}/fixtures.d.ts +6 -7
  35. package/dist/src/packs/safe-4337/testing-utils/fixtures.js +128 -0
  36. package/dist/src/packs/safe-4337/testing-utils/fixtures.js.map +1 -0
  37. package/dist/{test-utils → src/packs/safe-4337/testing-utils}/helpers.d.ts +2 -3
  38. package/dist/src/packs/safe-4337/testing-utils/helpers.js +58 -0
  39. package/dist/src/packs/safe-4337/testing-utils/helpers.js.map +1 -0
  40. package/dist/src/packs/safe-4337/types.d.ts +0 -1
  41. package/dist/src/packs/safe-4337/types.js +3 -0
  42. package/dist/src/packs/safe-4337/types.js.map +1 -0
  43. package/dist/src/packs/safe-4337/utils/entrypoint.d.ts +0 -1
  44. package/dist/src/packs/safe-4337/utils/entrypoint.js +23 -0
  45. package/dist/src/packs/safe-4337/utils/entrypoint.js.map +1 -0
  46. package/dist/src/packs/safe-4337/utils/getRelayKitVersion.d.ts +0 -1
  47. package/dist/src/packs/safe-4337/utils/getRelayKitVersion.js +6 -0
  48. package/dist/src/packs/safe-4337/utils/getRelayKitVersion.js.map +1 -0
  49. package/dist/src/packs/safe-4337/utils.d.ts +0 -1
  50. package/dist/src/packs/safe-4337/utils.js +190 -0
  51. package/dist/src/packs/safe-4337/utils.js.map +1 -0
  52. package/dist/tsconfig.build.tsbuildinfo +1 -1
  53. package/package.json +7 -23
  54. package/dist/cjs/src/index.cjs +0 -1323
  55. package/dist/cjs/test-utils/index.cjs +0 -1171
  56. package/dist/esm/src/index.mjs +0 -1326
  57. package/dist/esm/test-utils/index.mjs +0 -1172
  58. package/dist/src/RelayKitBasePack.d.ts.map +0 -1
  59. package/dist/src/constants.d.ts.map +0 -1
  60. package/dist/src/deprecated.d.ts.map +0 -1
  61. package/dist/src/index.d.ts.map +0 -1
  62. package/dist/src/packs/gelato/GelatoRelayPack.d.ts.map +0 -1
  63. package/dist/src/packs/gelato/types.d.ts.map +0 -1
  64. package/dist/src/packs/safe-4337/Safe4337Pack.d.ts.map +0 -1
  65. package/dist/src/packs/safe-4337/SafeOperation.d.ts.map +0 -1
  66. package/dist/src/packs/safe-4337/constants.d.ts.map +0 -1
  67. package/dist/src/packs/safe-4337/estimators/PimlicoFeeEstimator.d.ts.map +0 -1
  68. package/dist/src/packs/safe-4337/estimators/index.d.ts.map +0 -1
  69. package/dist/src/packs/safe-4337/types.d.ts.map +0 -1
  70. package/dist/src/packs/safe-4337/utils/entrypoint.d.ts.map +0 -1
  71. package/dist/src/packs/safe-4337/utils/getRelayKitVersion.d.ts.map +0 -1
  72. package/dist/src/packs/safe-4337/utils.d.ts.map +0 -1
  73. package/dist/test-utils/fixtures.d.ts.map +0 -1
  74. package/dist/test-utils/helpers.d.ts.map +0 -1
  75. package/dist/test-utils/index.d.ts +0 -4
  76. 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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"}