@exodus/web3-ethereum-utils 3.38.1 → 4.0.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.
@@ -5,4 +5,4 @@ export declare const createSimulateMessage: ({ apiEndpoint, headers, }?: {
5
5
  headers?: {
6
6
  'X-Api-Version': string;
7
7
  } | undefined;
8
- }) => ({ message, origin, asset, address, }: EthSimulateMessageParams) => Promise<MessageSimulationResult>;
8
+ }) => ({ message, url, asset, address, }: EthSimulateMessageParams) => Promise<MessageSimulationResult>;
@@ -1,9 +1,11 @@
1
+ import assert from 'minimalistic-assert';
1
2
  import { getMessageType } from './simulation/getMessageType.js';
2
3
  import { simulateMessage } from './simulation/simulateMessage.js';
3
4
  import { tryParsingSIWE } from './simulation/tryParsingSIWE.js';
4
5
  export const createSimulateMessage = ({ apiEndpoint = 'https://simulation.a.exodus.io/simulateMessage', headers = {
5
6
  'X-Api-Version': '2023-06-05',
6
- }, } = {}) => async ({ message, origin, asset, address, }) => {
7
+ }, } = {}) => async ({ message, url, asset, address, }) => {
8
+ assert(url instanceof URL, "'url' should be an instance of the URL object.");
7
9
  const simulationResult = {
8
10
  baseAssetName: asset.baseAssetName,
9
11
  action: 'NONE',
@@ -15,7 +17,7 @@ export const createSimulateMessage = ({ apiEndpoint = 'https://simulation.a.exod
15
17
  tryParsingSIWE({
16
18
  message,
17
19
  messageType,
18
- origin,
20
+ url,
19
21
  simulationResult,
20
22
  });
21
23
  await simulateMessage({
@@ -24,7 +26,7 @@ export const createSimulateMessage = ({ apiEndpoint = 'https://simulation.a.exod
24
26
  message,
25
27
  messageType,
26
28
  },
27
- origin,
29
+ url,
28
30
  apiEndpoint,
29
31
  headers,
30
32
  simulationResult,
@@ -37,6 +37,9 @@ export const createSimulateTransactions = ({ apiEndpoint, headers }) => async ({
37
37
  message: 'Balance changes cannot be estimated.',
38
38
  });
39
39
  }
40
+ if (simulationTransactionInternalResult.errorMessage) {
41
+ simulationResult.metadata.humanReadableError = simulationTransactionInternalResult.errorMessage;
42
+ }
40
43
  return simulationResult;
41
44
  }
42
45
  simulationResult.displayDetails = getDisplayDetails(simulationResult.balanceChanges.willApprove);
@@ -4,4 +4,4 @@ export declare const handleActionResponse: ({ simulationResult, response, }: {
4
4
  simulationResult: MessageSimulationResult;
5
5
  response: ScanMessageEvm200Response;
6
6
  }) => void;
7
- export declare const simulateMessage: ({ address, apiEndpoint, message, origin, headers, simulationResult, }: SimulateMessageParams) => Promise<void>;
7
+ export declare const simulateMessage: ({ address, apiEndpoint, message, url, headers, simulationResult, }: SimulateMessageParams) => Promise<void>;
@@ -1,8 +1,8 @@
1
1
  import { makeSimulationAPICall } from '@exodus/web3-utils';
2
2
  import { BLOWFISH_EVM_CHAINS } from './common.js';
3
- const convertToAPIPayload = ({ origin, address, message, }) => {
3
+ const convertToAPIPayload = ({ address, message, url, }) => {
4
4
  const restParameters = {
5
- metadata: { origin },
5
+ metadata: { origin: url.href },
6
6
  userAccount: address,
7
7
  };
8
8
  if (message.messageType === 1 /* MessageTypeEnum.TypedData */) {
@@ -29,9 +29,9 @@ export const handleActionResponse = ({ simulationResult, response, }) => {
29
29
  simulationResult.action = response.action;
30
30
  }
31
31
  };
32
- export const simulateMessage = async ({ address, apiEndpoint, message, origin, headers, simulationResult, }) => {
32
+ export const simulateMessage = async ({ address, apiEndpoint, message, url, headers, simulationResult, }) => {
33
33
  const { network, chain } = BLOWFISH_EVM_CHAINS[simulationResult.baseAssetName];
34
- const payload = convertToAPIPayload({ address, origin, message });
34
+ const payload = convertToAPIPayload({ address, message, url });
35
35
  const response = await makeSimulationAPICall({
36
36
  url: apiEndpoint,
37
37
  chain,
@@ -5,8 +5,9 @@ type SimulateTransactionParams = Required<Pick<CreateSimulateTransactionsParams,
5
5
  headers?: Record<string, string>;
6
6
  };
7
7
  export declare const enum SimulationErrorMessages {
8
- 'SimulationNotSupported' = 0,
9
- 'APICallFailed' = 1
8
+ 'APICallFailed' = 0,
9
+ 'SimulationFailed' = 1,
10
+ 'SimulationNotSupported' = 2
10
11
  }
11
12
  export declare const simulateTransactions: ({ transactions, apiEndpoint, origin, simulationResult, headers, asset, }: SimulateTransactionParams) => SimulateTransactionsInternalResult<undefined, SimulationErrorMessages>;
12
13
  export {};
@@ -127,7 +127,7 @@ export const simulateTransactions = async ({ transactions, apiEndpoint, origin,
127
127
  if (!BLOWFISH_EVM_CHAINS[asset.name]) {
128
128
  return {
129
129
  kind: 'error',
130
- error: 0 /* SimulationErrorMessages.SimulationNotSupported */,
130
+ error: 2 /* SimulationErrorMessages.SimulationNotSupported */,
131
131
  };
132
132
  }
133
133
  const userAddress = transactions[0].from;
@@ -147,7 +147,7 @@ export const simulateTransactions = async ({ transactions, apiEndpoint, origin,
147
147
  if (!response) {
148
148
  return {
149
149
  kind: 'error',
150
- error: 1 /* SimulationErrorMessages.APICallFailed */,
150
+ error: 0 /* SimulationErrorMessages.APICallFailed */,
151
151
  };
152
152
  }
153
153
  simulationResult.metadata.simulatedLocally = false;
@@ -155,7 +155,11 @@ export const simulateTransactions = async ({ transactions, apiEndpoint, origin,
155
155
  if (error) {
156
156
  // ToDo: accept a logger dep and log the error
157
157
  // ToDo: consider pushing an error to the "warnings" list
158
- return successDefaultResult;
158
+ return {
159
+ kind: 'error',
160
+ error: 1 /* SimulationErrorMessages.SimulationFailed */,
161
+ errorMessage: error?.humanReadableError,
162
+ };
159
163
  }
160
164
  const noExpectedStateChangesDetected = Object.keys(expectedStateChanges).length === 0;
161
165
  // This is a self-send transaction, adding a zero "transfer" so that the UI can display it.
@@ -1,8 +1,8 @@
1
1
  import { MessageTypeEnum } from './getMessageType.js';
2
2
  import type { MessageSimulationResult } from '@exodus/web3-types';
3
- export declare const tryParsingSIWE: ({ message, messageType, origin: _origin, simulationResult, }: {
3
+ export declare const tryParsingSIWE: ({ message, messageType, url, simulationResult, }: {
4
4
  message: string;
5
5
  messageType: MessageTypeEnum;
6
- origin: string;
6
+ url: URL;
7
7
  simulationResult: MessageSimulationResult;
8
8
  }) => void;
@@ -1,31 +1,11 @@
1
- const createURL = (origin) => {
2
- try {
3
- return new URL(origin);
4
- }
5
- catch (err) {
6
- try {
7
- // During this attempt we're checking if a scheme was missing in the origin as
8
- // Platforms may or may nor include it.
9
- return new URL(`https://${origin}`);
10
- }
11
- catch (err) {
12
- // ToDo: accept a logger dep and log an error here
13
- return null;
14
- }
15
- }
16
- };
17
- export const tryParsingSIWE = ({ message, messageType, origin: _origin, simulationResult, }) => {
1
+ export const tryParsingSIWE = ({ message, messageType, url, simulationResult, }) => {
18
2
  if (messageType === 1 /* MessageTypeEnum.TypedData */) {
19
3
  return;
20
4
  }
21
- const origin = createURL(_origin);
22
- if (!origin) {
23
- return;
24
- }
25
5
  /*
26
6
  Some dApps don't comply with EIP-4361 and use their custom Sign-In messages. This code block detects such known custom SIWE messages.
27
7
  */
28
- if (origin.hostname === 'rarible.com' &&
8
+ if (url.hostname === 'rarible.com' &&
29
9
  message.includes('I want to login on Rarible')) {
30
10
  simulationResult.kind = {
31
11
  kind: 'SIWE',
package/lib/types.d.ts CHANGED
@@ -56,7 +56,7 @@ export type EthAggregatedTransactionSimulationResult = AggregatedTransactionSimu
56
56
  export interface EthSimulateMessageParams {
57
57
  asset: Asset;
58
58
  message: string;
59
- origin: string;
59
+ url: URL;
60
60
  address: string;
61
61
  }
62
62
  export interface SimulateMessageParams {
@@ -65,7 +65,7 @@ export interface SimulateMessageParams {
65
65
  message: string;
66
66
  messageType: MessageTypeEnum.RawMessage | MessageTypeEnum.TypedData;
67
67
  };
68
- origin: EthSimulateMessageParams['origin'];
68
+ url: EthSimulateMessageParams['url'];
69
69
  apiEndpoint: string;
70
70
  headers: Record<string, string>;
71
71
  simulationResult: MessageSimulationResult;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@exodus/web3-ethereum-utils",
3
3
  "description": "Web3 Ethereum utils.",
4
- "version": "3.38.1",
4
+ "version": "4.0.1",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "module": "lib/index.js",
@@ -34,18 +34,19 @@
34
34
  "test": "run -T exodus-test --jest --esbuild"
35
35
  },
36
36
  "devDependencies": {
37
- "@exodus/web3-types": "1.52.0"
37
+ "@exodus/web3-types": "1.53.0"
38
38
  },
39
39
  "dependencies": {
40
40
  "@exodus/basic-utils": "^3.0.1",
41
41
  "@exodus/ethereumjs": "^1.0.0",
42
42
  "@exodus/web3-utils": "^1.48.3",
43
- "@metamask/eth-sig-util": "^4.0.1"
43
+ "@metamask/eth-sig-util": "^4.0.1",
44
+ "minimalistic-assert": "^1.0.1"
44
45
  },
45
46
  "author": "Exodus Movement, Inc.",
46
47
  "bugs": {
47
48
  "url": "https://github.com/ExodusMovement/assets/issues?q=is%3Aissue+is%3Aopen+label%3Aweb3-ethereum-utils"
48
49
  },
49
50
  "homepage": "https://github.com/ExodusMovement/assets/tree/master/web3/web3-ethereum-utils",
50
- "gitHead": "9f590f5439d73cba02054d608fb3d5c62fbdcf34"
51
+ "gitHead": "4ca0d746f4d34aa284df0eaec95ef06706400f17"
51
52
  }