near-safe 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  import { type SafeInfo } from "@safe-global/safe-gateway-typescript-sdk";
2
- import { EIP712TypedData, RecoveryData } from "near-ca";
3
- import { Address, Hash } from "viem";
2
+ import { EIP712TypedData } from "near-ca";
3
+ import { Hash } from "viem";
4
4
  export type DecodedSafeMessage = {
5
5
  decodedMessage: string | EIP712TypedData;
6
6
  safeMessageMessage: string;
@@ -20,8 +20,3 @@ export type MinimalSafeInfo = Pick<SafeInfo, "address" | "version" | "chainId">;
20
20
  * }`
21
21
  */
22
22
  export declare function decodeSafeMessage(message: string | EIP712TypedData, safe: MinimalSafeInfo): DecodedSafeMessage;
23
- export declare function safeMessageTxData(method: string, message: DecodedSafeMessage, sender: Address): {
24
- evmMessage: string;
25
- payload: number[];
26
- recoveryData: RecoveryData;
27
- };
@@ -1,8 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.decodeSafeMessage = decodeSafeMessage;
4
- exports.safeMessageTxData = safeMessageTxData;
5
- const near_ca_1 = require("near-ca");
6
4
  const semver_1 = require("semver");
7
5
  const viem_1 = require("viem");
8
6
  /*
@@ -84,21 +82,6 @@ function decodeSafeMessage(message, safe) {
84
82
  safeMessageHash: generateSafeMessageHash(safe, decodedMessage),
85
83
  };
86
84
  }
87
- function safeMessageTxData(method, message, sender) {
88
- return {
89
- evmMessage: message.safeMessageMessage,
90
- payload: (0, near_ca_1.toPayload)(message.safeMessageHash),
91
- recoveryData: {
92
- type: method,
93
- data: {
94
- address: sender,
95
- // TODO - Upgrade Signable Message in near-ca
96
- // @ts-expect-error: Type 'string | EIP712TypedData' is not assignable to type 'SignableMessage'.
97
- message: decodedMessage,
98
- },
99
- },
100
- };
101
- }
102
85
  // const isEIP712TypedData = (obj: any): obj is EIP712TypedData => {
103
86
  // return (
104
87
  // typeof obj === "object" &&
@@ -1,9 +1,9 @@
1
1
  import { FinalExecutionOutcome } from "near-api-js/lib/providers";
2
- import { NearEthAdapter, SignRequestData, NearEthTxData, RecoveryData } from "near-ca";
2
+ import { NearEthAdapter, SignRequestData } from "near-ca";
3
3
  import { Address, Hash, Hex } from "viem";
4
4
  import { Erc4337Bundler } from "./lib/bundler";
5
5
  import { ContractSuite } from "./lib/safe";
6
- import { MetaTransaction, UserOperation, UserOperationReceipt } from "./types";
6
+ import { EncodedTxData, MetaTransaction, UserOperation, UserOperationReceipt } from "./types";
7
7
  export declare class TransactionManager {
8
8
  readonly nearAdapter: NearEthAdapter;
9
9
  readonly address: Address;
@@ -31,7 +31,7 @@ export declare class TransactionManager {
31
31
  }): Promise<UserOperation>;
32
32
  signTransaction(safeOpHash: Hex): Promise<Hex>;
33
33
  opHash(userOp: UserOperation): Promise<Hash>;
34
- encodeSignRequest(signRequest: SignRequestData, usePaymaster: boolean): Promise<NearEthTxData>;
34
+ encodeSignRequest(signRequest: SignRequestData, usePaymaster: boolean): Promise<EncodedTxData>;
35
35
  executeTransaction(chainId: number, userOp: UserOperation): Promise<UserOperationReceipt>;
36
36
  safeDeployed(chainId: number): Promise<boolean>;
37
37
  addOwnerTx(address: Address): MetaTransaction;
@@ -53,6 +53,6 @@ export declare class TransactionManager {
53
53
  requestRouter({ method, chainId, params }: SignRequestData, usePaymaster: boolean): Promise<{
54
54
  evmMessage: string;
55
55
  payload: number[];
56
- recoveryData: RecoveryData;
56
+ hash: Hash;
57
57
  }>;
58
58
  }
@@ -68,14 +68,18 @@ class TransactionManager {
68
68
  return this.safePack.getOpHash(userOp);
69
69
  }
70
70
  async encodeSignRequest(signRequest, usePaymaster) {
71
- const data = await this.requestRouter(signRequest, usePaymaster);
71
+ const { payload, evmMessage, hash } = await this.requestRouter(signRequest, usePaymaster);
72
72
  return {
73
73
  nearPayload: await this.nearAdapter.mpcContract.encodeSignatureRequestTx({
74
74
  path: this.nearAdapter.derivationPath,
75
- payload: data.payload,
75
+ payload,
76
76
  key_version: 0,
77
77
  }),
78
- ...data,
78
+ evmData: {
79
+ chainId: signRequest.chainId,
80
+ data: evmMessage,
81
+ hash,
82
+ },
79
83
  };
80
84
  }
81
85
  async executeTransaction(chainId, userOp) {
@@ -152,12 +156,22 @@ class TransactionManager {
152
156
  case "eth_signTypedData":
153
157
  case "eth_signTypedData_v4":
154
158
  case "eth_sign": {
155
- const [sender, messageOrData] = params;
156
- return (0, safe_message_1.safeMessageTxData)(method, (0, safe_message_1.decodeSafeMessage)(messageOrData, safeInfo), sender);
159
+ const [_, messageOrData] = params;
160
+ const message = (0, safe_message_1.decodeSafeMessage)(messageOrData, safeInfo);
161
+ return {
162
+ evmMessage: message.safeMessageMessage,
163
+ payload: (0, near_ca_1.toPayload)(message.safeMessageHash),
164
+ hash: message.safeMessageHash,
165
+ };
157
166
  }
158
167
  case "personal_sign": {
159
- const [messageHash, sender] = params;
160
- return (0, safe_message_1.safeMessageTxData)(method, (0, safe_message_1.decodeSafeMessage)(messageHash, safeInfo), sender);
168
+ const [messageHash, _] = params;
169
+ const message = (0, safe_message_1.decodeSafeMessage)(messageHash, safeInfo);
170
+ return {
171
+ evmMessage: message.safeMessageMessage,
172
+ payload: (0, near_ca_1.toPayload)(message.safeMessageHash),
173
+ hash: message.safeMessageHash,
174
+ };
161
175
  }
162
176
  case "eth_sendTransaction": {
163
177
  const transactions = (0, util_1.metaTransactionsFromRequest)(params);
@@ -170,12 +184,7 @@ class TransactionManager {
170
184
  return {
171
185
  payload: (0, near_ca_1.toPayload)(opHash),
172
186
  evmMessage: JSON.stringify(userOp),
173
- recoveryData: {
174
- type: method,
175
- // TODO: Double check that this is sufficient for UI.
176
- // We may want to adapt and return the `MetaTransactions` instead.
177
- data: opHash,
178
- },
187
+ hash: await this.opHash(userOp),
179
188
  };
180
189
  }
181
190
  }
@@ -1,4 +1,5 @@
1
- import { Address, Hex } from "viem";
1
+ import { FunctionCallTransaction, SignArgs } from "near-ca";
2
+ import { Address, Hash, Hex, TransactionSerializable } from "viem";
2
3
  export interface UnsignedUserOperation {
3
4
  sender: Address;
4
5
  nonce: string;
@@ -89,4 +90,14 @@ export interface MetaTransaction {
89
90
  readonly data: string;
90
91
  readonly operation?: OperationType;
91
92
  }
93
+ export interface EncodedTxData {
94
+ evmData: {
95
+ chainId: number;
96
+ data: string | TransactionSerializable;
97
+ hash: Hash;
98
+ };
99
+ nearPayload: FunctionCallTransaction<{
100
+ request: SignArgs;
101
+ }>;
102
+ }
92
103
  export {};
@@ -1,6 +1,6 @@
1
1
  import { type SafeInfo } from "@safe-global/safe-gateway-typescript-sdk";
2
- import { EIP712TypedData, RecoveryData } from "near-ca";
3
- import { Address, Hash } from "viem";
2
+ import { EIP712TypedData } from "near-ca";
3
+ import { Hash } from "viem";
4
4
  export type DecodedSafeMessage = {
5
5
  decodedMessage: string | EIP712TypedData;
6
6
  safeMessageMessage: string;
@@ -20,8 +20,3 @@ export type MinimalSafeInfo = Pick<SafeInfo, "address" | "version" | "chainId">;
20
20
  * }`
21
21
  */
22
22
  export declare function decodeSafeMessage(message: string | EIP712TypedData, safe: MinimalSafeInfo): DecodedSafeMessage;
23
- export declare function safeMessageTxData(method: string, message: DecodedSafeMessage, sender: Address): {
24
- evmMessage: string;
25
- payload: number[];
26
- recoveryData: RecoveryData;
27
- };
@@ -1,4 +1,3 @@
1
- import { toPayload } from "near-ca";
2
1
  import { gte } from "semver";
3
2
  import { fromHex, hashMessage, hashTypedData, isHex, } from "viem";
4
3
  /*
@@ -80,21 +79,6 @@ export function decodeSafeMessage(message, safe) {
80
79
  safeMessageHash: generateSafeMessageHash(safe, decodedMessage),
81
80
  };
82
81
  }
83
- export function safeMessageTxData(method, message, sender) {
84
- return {
85
- evmMessage: message.safeMessageMessage,
86
- payload: toPayload(message.safeMessageHash),
87
- recoveryData: {
88
- type: method,
89
- data: {
90
- address: sender,
91
- // TODO - Upgrade Signable Message in near-ca
92
- // @ts-expect-error: Type 'string | EIP712TypedData' is not assignable to type 'SignableMessage'.
93
- message: decodedMessage,
94
- },
95
- },
96
- };
97
- }
98
82
  // const isEIP712TypedData = (obj: any): obj is EIP712TypedData => {
99
83
  // return (
100
84
  // typeof obj === "object" &&
@@ -1,9 +1,9 @@
1
1
  import { FinalExecutionOutcome } from "near-api-js/lib/providers";
2
- import { NearEthAdapter, SignRequestData, NearEthTxData, RecoveryData } from "near-ca";
2
+ import { NearEthAdapter, SignRequestData } from "near-ca";
3
3
  import { Address, Hash, Hex } from "viem";
4
4
  import { Erc4337Bundler } from "./lib/bundler";
5
5
  import { ContractSuite } from "./lib/safe";
6
- import { MetaTransaction, UserOperation, UserOperationReceipt } from "./types";
6
+ import { EncodedTxData, MetaTransaction, UserOperation, UserOperationReceipt } from "./types";
7
7
  export declare class TransactionManager {
8
8
  readonly nearAdapter: NearEthAdapter;
9
9
  readonly address: Address;
@@ -31,7 +31,7 @@ export declare class TransactionManager {
31
31
  }): Promise<UserOperation>;
32
32
  signTransaction(safeOpHash: Hex): Promise<Hex>;
33
33
  opHash(userOp: UserOperation): Promise<Hash>;
34
- encodeSignRequest(signRequest: SignRequestData, usePaymaster: boolean): Promise<NearEthTxData>;
34
+ encodeSignRequest(signRequest: SignRequestData, usePaymaster: boolean): Promise<EncodedTxData>;
35
35
  executeTransaction(chainId: number, userOp: UserOperation): Promise<UserOperationReceipt>;
36
36
  safeDeployed(chainId: number): Promise<boolean>;
37
37
  addOwnerTx(address: Address): MetaTransaction;
@@ -53,6 +53,6 @@ export declare class TransactionManager {
53
53
  requestRouter({ method, chainId, params }: SignRequestData, usePaymaster: boolean): Promise<{
54
54
  evmMessage: string;
55
55
  payload: number[];
56
- recoveryData: RecoveryData;
56
+ hash: Hash;
57
57
  }>;
58
58
  }
@@ -3,7 +3,7 @@ import { serializeSignature } from "viem";
3
3
  import { Erc4337Bundler } from "./lib/bundler";
4
4
  import { encodeMulti } from "./lib/multisend";
5
5
  import { ContractSuite } from "./lib/safe";
6
- import { decodeSafeMessage, safeMessageTxData } from "./lib/safe-message";
6
+ import { decodeSafeMessage } from "./lib/safe-message";
7
7
  import { getClient, isContract, metaTransactionsFromRequest, packSignature, } from "./util";
8
8
  export class TransactionManager {
9
9
  nearAdapter;
@@ -72,14 +72,18 @@ export class TransactionManager {
72
72
  return this.safePack.getOpHash(userOp);
73
73
  }
74
74
  async encodeSignRequest(signRequest, usePaymaster) {
75
- const data = await this.requestRouter(signRequest, usePaymaster);
75
+ const { payload, evmMessage, hash } = await this.requestRouter(signRequest, usePaymaster);
76
76
  return {
77
77
  nearPayload: await this.nearAdapter.mpcContract.encodeSignatureRequestTx({
78
78
  path: this.nearAdapter.derivationPath,
79
- payload: data.payload,
79
+ payload,
80
80
  key_version: 0,
81
81
  }),
82
- ...data,
82
+ evmData: {
83
+ chainId: signRequest.chainId,
84
+ data: evmMessage,
85
+ hash,
86
+ },
83
87
  };
84
88
  }
85
89
  async executeTransaction(chainId, userOp) {
@@ -156,12 +160,22 @@ export class TransactionManager {
156
160
  case "eth_signTypedData":
157
161
  case "eth_signTypedData_v4":
158
162
  case "eth_sign": {
159
- const [sender, messageOrData] = params;
160
- return safeMessageTxData(method, decodeSafeMessage(messageOrData, safeInfo), sender);
163
+ const [_, messageOrData] = params;
164
+ const message = decodeSafeMessage(messageOrData, safeInfo);
165
+ return {
166
+ evmMessage: message.safeMessageMessage,
167
+ payload: toPayload(message.safeMessageHash),
168
+ hash: message.safeMessageHash,
169
+ };
161
170
  }
162
171
  case "personal_sign": {
163
- const [messageHash, sender] = params;
164
- return safeMessageTxData(method, decodeSafeMessage(messageHash, safeInfo), sender);
172
+ const [messageHash, _] = params;
173
+ const message = decodeSafeMessage(messageHash, safeInfo);
174
+ return {
175
+ evmMessage: message.safeMessageMessage,
176
+ payload: toPayload(message.safeMessageHash),
177
+ hash: message.safeMessageHash,
178
+ };
165
179
  }
166
180
  case "eth_sendTransaction": {
167
181
  const transactions = metaTransactionsFromRequest(params);
@@ -174,12 +188,7 @@ export class TransactionManager {
174
188
  return {
175
189
  payload: toPayload(opHash),
176
190
  evmMessage: JSON.stringify(userOp),
177
- recoveryData: {
178
- type: method,
179
- // TODO: Double check that this is sufficient for UI.
180
- // We may want to adapt and return the `MetaTransactions` instead.
181
- data: opHash,
182
- },
191
+ hash: await this.opHash(userOp),
183
192
  };
184
193
  }
185
194
  }
@@ -1,4 +1,5 @@
1
- import { Address, Hex } from "viem";
1
+ import { FunctionCallTransaction, SignArgs } from "near-ca";
2
+ import { Address, Hash, Hex, TransactionSerializable } from "viem";
2
3
  export interface UnsignedUserOperation {
3
4
  sender: Address;
4
5
  nonce: string;
@@ -89,4 +90,14 @@ export interface MetaTransaction {
89
90
  readonly data: string;
90
91
  readonly operation?: OperationType;
91
92
  }
93
+ export interface EncodedTxData {
94
+ evmData: {
95
+ chainId: number;
96
+ data: string | TransactionSerializable;
97
+ hash: Hash;
98
+ };
99
+ nearPayload: FunctionCallTransaction<{
100
+ request: SignArgs;
101
+ }>;
102
+ }
92
103
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "near-safe",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "license": "MIT",
5
5
  "description": "An SDK for controlling Ethereum Smart Accounts via ERC4337 from a Near Account.",
6
6
  "author": "bh2smith",