@rango-dev/provider-safe 0.14.1-next.8 → 0.16.0
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/CHANGELOG.md +4 -0
- package/dist/evm-signer.d.ts +7 -4
- package/dist/evm-signer.d.ts.map +1 -1
- package/dist/helpers.d.ts +1 -0
- package/dist/helpers.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +3 -3
- package/package.json +5 -6
- package/src/evm-signer.ts +19 -18
- package/src/helpers.ts +10 -21
- package/src/index.ts +1 -1
package/CHANGELOG.md
CHANGED
package/dist/evm-signer.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import { GenericSigner } from 'rango-types';
|
|
2
|
+
import { EvmTransaction } from 'rango-types/lib/api/main';
|
|
3
|
+
import { TransactionResponse } from '@ethersproject/abstract-provider';
|
|
4
4
|
export declare class CustomEvmSigner implements GenericSigner<EvmTransaction> {
|
|
5
5
|
private signer;
|
|
6
6
|
constructor(provider: any);
|
|
@@ -13,7 +13,10 @@ export declare class CustomEvmSigner implements GenericSigner<EvmTransaction> {
|
|
|
13
13
|
}>;
|
|
14
14
|
wait(safeHash: string, chainId: string, response: TransactionResponse): Promise<{
|
|
15
15
|
hash: string;
|
|
16
|
-
response: TransactionResponse
|
|
16
|
+
response: TransactionResponse & {
|
|
17
|
+
hashWasUpdated: boolean;
|
|
18
|
+
isMultiSig: true;
|
|
19
|
+
};
|
|
17
20
|
chainId: string;
|
|
18
21
|
}>;
|
|
19
22
|
}
|
package/dist/evm-signer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm-signer.d.ts","sourceRoot":"","sources":["../src/evm-signer.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"evm-signer.d.ts","sourceRoot":"","sources":["../src/evm-signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAKvE,qBAAa,eAAgB,YAAW,aAAa,CAAC,cAAc,CAAC;IACnE,OAAO,CAAC,MAAM,CAAC;gBAEH,QAAQ,EAAE,GAAG;IAInB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQzC,aAAa,CACjB,EAAE,EAAE,cAAc,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GAAG,IAAI,GACrB,OAAO,CAAC;QACT,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,mBAAmB,GAAG;YAAE,mBAAmB,EAAE,OAAO,CAAA;SAAE,CAAC;KAClE,CAAC;IAQI,IAAI,CACR,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAAC;QACT,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,mBAAmB,GAAG;YAC9B,cAAc,EAAE,OAAO,CAAC;YACxB,UAAU,EAAE,IAAI,CAAC;SAClB,CAAC;QACF,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CAYH"}
|
package/dist/helpers.d.ts
CHANGED
package/dist/helpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,WAAkC,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAEA,OAAO,WAAkC,MAAM,4BAA4B,CAAC;AAM5E,eAAO,MAAM,GAAG,aAA2B,CAAC;AAC5C,wBAAsB,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,CAMpD;AAED,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,OAAO,CAAA;CAAE,CAAC,CAyBtD"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var u=Object.defineProperty;var s=(e,t)=>u(e,"name",{value:t,configurable:!0});import{canEagerlyConnectToEvm as E,canSwitchNetworkToEvm as k,subscribeToEvm as v,switchNetworkForEvm as b,WalletTypes as C}from"@rango-dev/wallets-shared";import{evmBlockchains as N,isEvmBlockchain as A}from"rango-types";import{waitMs as w}from"@rango-dev/signer-evm";import{SafeAppProvider as S}from"@safe-global/safe-apps-provider";import d,{TransactionStatus as p}from"@safe-global/safe-apps-sdk";var x={allowedDomains:[/gnosis-safe.io$/,/app.safe.global$/],debug:!1},o=new d(x);async function g(){let e=await Promise.race([o.safe.getInfo(),new Promise(t=>setTimeout(t,200))]);return e?new S(e,o):null}s(g,"getSafeInstance");async function h(e){let t,n=!1;for(;!t;)try{let a=await o.txs.getBySafeTxHash(e);a.txStatus===p.AWAITING_CONFIRMATIONS||a.txStatus===p.AWAITING_EXECUTION?await w(5e3):a.txHash&&(t=a.txHash,n=!0)}catch{t=e,n=!0}return{txHash:t,hashWasUpdated:n}}s(h,"getTxHash");import{DefaultSignerFactory as y,TransactionType as I}from"rango-types";import{DefaultEvmSigner as T}from"@rango-dev/signer-evm";var i=class{constructor(t){this.signer=new T(t)}async signMessage(t){let{signature:n}=await o.txs.signMessage(t);return n}async signAndSendTx(t,n,a){let r=await this.signer.signAndSendTx(t,n,a);return{hash:r.hash,response:{...r.response,hashRequiringUpdate:!0}}}async wait(t,n,a){let r=await h(t);return{hash:r.txHash,response:{...a,hashWasUpdated:r.hashWasUpdated,isMultiSig:!0},chainId:n}}};s(i,"CustomEvmSigner");function c(e){let t=new y;return t.registerSigner(I.EVM,new i(e)),t}s(c,"getSigners");var W=C.SAFE,J={type:W,isAsyncInstance:!0},Q=s(async()=>await g(),"getInstance"),Y=s(async({instance:e})=>{let t=await e.request({method:"eth_accounts"}),{chainId:n}=e;return{accounts:t,chainId:n}},"connect"),Z=s(({instance:e,state:t,updateChainId:n,updateAccounts:a,meta:r,connect:m,disconnect:f})=>{let l=r.filter(A);v({instance:e,state:t,updateChainId:n,updateAccounts:a,meta:l,connect:m,disconnect:f})},"subscribe"),tt=b,et=k,nt=c,st=E,at=s(e=>{let t=N(e);return{name:"Safe",img:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/safe/icon.svg",installLink:{DEFAULT:"https://app.safe.global/"},color:"#ffffff",supportedChains:t,hideWhenNotInstalled:!0}},"getWalletInfo");export{st as canEagerConnect,et as canSwitchNetworkTo,J as config,Y as connect,Q as getInstance,nt as getSigners,at as getWalletInfo,Z as subscribe,tt as switchNetwork};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/helpers.ts", "../src/signer.ts", "../src/evm-signer.ts"],
|
|
4
|
-
"sourcesContent": ["import type {\n CanEagerConnect,\n CanSwitchNetwork,\n Connect,\n GetInstance,\n Subscribe,\n SwitchNetwork,\n WalletInfo,\n} from '@rango-dev/wallets-shared';\nimport type { BlockchainMeta, SignerFactory } from 'rango-types';\n\nimport {\n canEagerlyConnectToEvm,\n canSwitchNetworkToEvm,\n subscribeToEvm,\n switchNetworkForEvm,\n WalletTypes,\n} from '@rango-dev/wallets-shared';\nimport { evmBlockchains, isEvmBlockchain } from 'rango-types';\n\nimport { getSafeInstance } from './helpers';\nimport signer from './signer';\n\nconst WALLET = WalletTypes.SAFE;\n\nexport const config = {\n type: WALLET,\n isAsyncInstance: true,\n};\n\nexport const getInstance: GetInstance = async () => {\n return await getSafeInstance();\n};\n\nexport const connect: Connect = async ({ instance }) => {\n const accounts = await instance.request({\n method: 'eth_accounts',\n });\n\n const { chainId } = instance;\n\n return { accounts, chainId };\n};\n\nexport const subscribe: Subscribe = ({\n instance,\n state,\n updateChainId,\n updateAccounts,\n meta,\n connect,\n disconnect,\n}) => {\n const evmBlockchainMeta = meta.filter(isEvmBlockchain);\n\n subscribeToEvm({\n instance,\n state,\n updateChainId,\n updateAccounts,\n meta: evmBlockchainMeta,\n connect,\n disconnect,\n });\n};\n\nexport const switchNetwork: SwitchNetwork = switchNetworkForEvm;\n\nexport const canSwitchNetworkTo: CanSwitchNetwork = canSwitchNetworkToEvm;\n\nexport const getSigners: (provider: any) => SignerFactory = signer;\n\nexport const canEagerConnect: CanEagerConnect = canEagerlyConnectToEvm;\n\nexport const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo = (\n allBlockChains\n) => {\n const evms = evmBlockchains(allBlockChains);\n return {\n name: 'Safe',\n img: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/safe/icon.svg',\n installLink: {\n DEFAULT: 'https://app.safe.global/',\n },\n color: '#ffffff',\n supportedChains: evms,\n
|
|
5
|
-
"mappings": "+EAWA,OACE,0BAAAA,EACA,yBAAAC,EACA,kBAAAC,EACA,uBAAAC,EACA,eAAAC,MACK,4BACP,OAAS,kBAAAC,EAAgB,mBAAAC,MAAuB,cClBhD,OAAS,UAAAC,MAAc,wBACvB,OAAS,mBAAAC,MAAuB,kCAChC,OAAOC,GAAe,qBAAAC,MAAyB,6BAE/C,IAAMC,EAAU,CACd,eAAgB,CAAC,kBAAmB,kBAAkB,EACtD,MAAO,EACT,
|
|
6
|
-
"names": ["canEagerlyConnectToEvm", "canSwitchNetworkToEvm", "subscribeToEvm", "switchNetworkForEvm", "WalletTypes", "evmBlockchains", "isEvmBlockchain", "waitMs", "SafeAppProvider", "SafeAppsSDK", "TransactionStatus", "options", "
|
|
4
|
+
"sourcesContent": ["import type {\n CanEagerConnect,\n CanSwitchNetwork,\n Connect,\n GetInstance,\n Subscribe,\n SwitchNetwork,\n WalletInfo,\n} from '@rango-dev/wallets-shared';\nimport type { BlockchainMeta, SignerFactory } from 'rango-types';\n\nimport {\n canEagerlyConnectToEvm,\n canSwitchNetworkToEvm,\n subscribeToEvm,\n switchNetworkForEvm,\n WalletTypes,\n} from '@rango-dev/wallets-shared';\nimport { evmBlockchains, isEvmBlockchain } from 'rango-types';\n\nimport { getSafeInstance } from './helpers';\nimport signer from './signer';\n\nconst WALLET = WalletTypes.SAFE;\n\nexport const config = {\n type: WALLET,\n isAsyncInstance: true,\n};\n\nexport const getInstance: GetInstance = async () => {\n return await getSafeInstance();\n};\n\nexport const connect: Connect = async ({ instance }) => {\n const accounts = await instance.request({\n method: 'eth_accounts',\n });\n\n const { chainId } = instance;\n\n return { accounts, chainId };\n};\n\nexport const subscribe: Subscribe = ({\n instance,\n state,\n updateChainId,\n updateAccounts,\n meta,\n connect,\n disconnect,\n}) => {\n const evmBlockchainMeta = meta.filter(isEvmBlockchain);\n\n subscribeToEvm({\n instance,\n state,\n updateChainId,\n updateAccounts,\n meta: evmBlockchainMeta,\n connect,\n disconnect,\n });\n};\n\nexport const switchNetwork: SwitchNetwork = switchNetworkForEvm;\n\nexport const canSwitchNetworkTo: CanSwitchNetwork = canSwitchNetworkToEvm;\n\nexport const getSigners: (provider: any) => SignerFactory = signer;\n\nexport const canEagerConnect: CanEagerConnect = canEagerlyConnectToEvm;\n\nexport const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo = (\n allBlockChains\n) => {\n const evms = evmBlockchains(allBlockChains);\n return {\n name: 'Safe',\n img: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/safe/icon.svg',\n installLink: {\n DEFAULT: 'https://app.safe.global/',\n },\n color: '#ffffff',\n supportedChains: evms,\n hideWhenNotInstalled: true,\n };\n};\n", "import { waitMs } from '@rango-dev/signer-evm';\nimport { SafeAppProvider } from '@safe-global/safe-apps-provider';\nimport SafeAppsSDK, { TransactionStatus } from '@safe-global/safe-apps-sdk';\n\nconst options = {\n allowedDomains: [/gnosis-safe.io$/, /app.safe.global$/],\n debug: false,\n};\nexport const sdk = new SafeAppsSDK(options);\nexport async function getSafeInstance(): Promise<any> {\n const accountInfo = await Promise.race([\n sdk.safe.getInfo(),\n new Promise<undefined>((resolve) => setTimeout(resolve, 200)),\n ]);\n return accountInfo ? new SafeAppProvider(accountInfo, sdk as any) : null;\n}\n\nexport async function getTxHash(\n safeHash: string\n): Promise<{ txHash: string; hashWasUpdated: boolean }> {\n let txHash;\n let hashWasUpdated = false;\n\n while (!txHash) {\n try {\n /** The SDK will be pinged until a txHash is available and the txStatus is in an end-state */\n const queued = await sdk.txs.getBySafeTxHash(safeHash);\n if (\n queued.txStatus === TransactionStatus.AWAITING_CONFIRMATIONS ||\n queued.txStatus === TransactionStatus.AWAITING_EXECUTION\n ) {\n /** Mimic a status watcher by checking once every 5 seconds */\n await waitMs(5_000);\n } else if (queued.txHash) {\n /** The txStatus is in an end-state (e.g. success) so we probably have a valid, on chain txHash*/\n txHash = queued.txHash;\n hashWasUpdated = true;\n }\n } catch {\n txHash = safeHash;\n hashWasUpdated = true;\n }\n }\n return { txHash, hashWasUpdated };\n}\n", "import {\n DefaultSignerFactory,\n SignerFactory,\n TransactionType as TxType,\n} from 'rango-types';\nimport { CustomEvmSigner } from './evm-signer';\n\nexport default function getSigners(provider: any): SignerFactory {\n const signers = new DefaultSignerFactory();\n signers.registerSigner(TxType.EVM, new CustomEvmSigner(provider));\n\n return signers;\n}\n", "import { GenericSigner } from 'rango-types';\nimport { EvmTransaction } from 'rango-types/lib/api/main';\nimport { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { DefaultEvmSigner } from '@rango-dev/signer-evm';\nimport { sdk, getTxHash } from './helpers';\nimport { OffChainSignMessageResponse } from '@safe-global/safe-apps-sdk';\n\nexport class CustomEvmSigner implements GenericSigner<EvmTransaction> {\n private signer;\n\n constructor(provider: any) {\n this.signer = new DefaultEvmSigner(provider);\n }\n\n async signMessage(msg: string): Promise<string> {\n const { signature } = (await sdk.txs.signMessage(\n msg\n )) as OffChainSignMessageResponse & { signature: string };\n\n return signature;\n }\n\n async signAndSendTx(\n tx: EvmTransaction,\n address: string,\n chainId: string | null\n ): Promise<{\n hash: string;\n response: TransactionResponse & { hashRequiringUpdate: boolean };\n }> {\n const result = await this.signer.signAndSendTx(tx, address, chainId);\n return {\n hash: result.hash,\n response: { ...result.response, hashRequiringUpdate: true },\n };\n }\n\n async wait(\n safeHash: string,\n chainId: string,\n response: TransactionResponse\n ): Promise<{\n hash: string;\n response: TransactionResponse & {\n hashWasUpdated: boolean;\n isMultiSig: true;\n };\n chainId: string;\n }> {\n const result = await getTxHash(safeHash);\n return {\n hash: result.txHash,\n response: {\n ...response,\n hashWasUpdated: result.hashWasUpdated,\n isMultiSig: true,\n },\n chainId,\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["canEagerlyConnectToEvm", "canSwitchNetworkToEvm", "subscribeToEvm", "switchNetworkForEvm", "WalletTypes", "evmBlockchains", "isEvmBlockchain", "waitMs", "SafeAppProvider", "SafeAppsSDK", "TransactionStatus", "options", "sdk", "SafeAppsSDK", "getSafeInstance", "accountInfo", "resolve", "SafeAppProvider", "__name", "getTxHash", "safeHash", "txHash", "hashWasUpdated", "queued", "TransactionStatus", "waitMs", "DefaultSignerFactory", "TxType", "DefaultEvmSigner", "CustomEvmSigner", "provider", "DefaultEvmSigner", "msg", "signature", "sdk", "tx", "address", "chainId", "result", "safeHash", "response", "getTxHash", "__name", "getSigners", "provider", "signers", "DefaultSignerFactory", "TxType", "CustomEvmSigner", "__name", "WALLET", "WalletTypes", "config", "getInstance", "__name", "getSafeInstance", "connect", "instance", "accounts", "chainId", "subscribe", "state", "updateChainId", "updateAccounts", "meta", "disconnect", "evmBlockchainMeta", "isEvmBlockchain", "subscribeToEvm", "switchNetwork", "switchNetworkForEvm", "canSwitchNetworkTo", "canSwitchNetworkToEvm", "getSigners", "canEagerConnect", "canEagerlyConnectToEvm", "getWalletInfo", "allBlockChains", "evms", "evmBlockchains"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rango-dev/provider-safe",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"
|
|
6
|
+
"module": "./dist/index.js",
|
|
7
7
|
"main": "./dist/index.js",
|
|
8
8
|
"exports": {
|
|
9
9
|
".": "./dist/index.js"
|
|
@@ -15,18 +15,17 @@
|
|
|
15
15
|
],
|
|
16
16
|
"scripts": {
|
|
17
17
|
"build": "node ../../scripts/build/command.mjs --path wallets/provider-safe",
|
|
18
|
-
"ts-check": "tsc --declaration --emitDeclarationOnly -p ./tsconfig.json",
|
|
19
18
|
"clean": "rimraf dist",
|
|
20
19
|
"format": "prettier --write '{.,src}/**/*.{ts,tsx}'",
|
|
21
20
|
"lint": "eslint \"**/*.{ts,tsx}\" --ignore-path ../../.eslintignore"
|
|
22
21
|
},
|
|
23
22
|
"dependencies": {
|
|
24
23
|
"@ethersproject/abstract-provider": "^5.7.0",
|
|
25
|
-
"@rango-dev/signer-evm": "^0.
|
|
26
|
-
"@rango-dev/wallets-shared": "^0.
|
|
24
|
+
"@rango-dev/signer-evm": "^0.23.0",
|
|
25
|
+
"@rango-dev/wallets-shared": "^0.23.0",
|
|
27
26
|
"@safe-global/safe-apps-provider": "^0.17.0",
|
|
28
27
|
"@safe-global/safe-apps-sdk": "^7.11.0",
|
|
29
|
-
"rango-types": "^0.1.
|
|
28
|
+
"rango-types": "^0.1.46"
|
|
30
29
|
},
|
|
31
30
|
"publishConfig": {
|
|
32
31
|
"access": "public"
|
package/src/evm-signer.ts
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import type { EvmTransaction } from 'rango-types/lib/api/main';
|
|
5
|
-
|
|
1
|
+
import { GenericSigner } from 'rango-types';
|
|
2
|
+
import { EvmTransaction } from 'rango-types/lib/api/main';
|
|
3
|
+
import { TransactionResponse } from '@ethersproject/abstract-provider';
|
|
6
4
|
import { DefaultEvmSigner } from '@rango-dev/signer-evm';
|
|
7
|
-
|
|
8
|
-
import {
|
|
5
|
+
import { sdk, getTxHash } from './helpers';
|
|
6
|
+
import { OffChainSignMessageResponse } from '@safe-global/safe-apps-sdk';
|
|
9
7
|
|
|
10
8
|
export class CustomEvmSigner implements GenericSigner<EvmTransaction> {
|
|
11
9
|
private signer;
|
|
@@ -30,14 +28,10 @@ export class CustomEvmSigner implements GenericSigner<EvmTransaction> {
|
|
|
30
28
|
hash: string;
|
|
31
29
|
response: TransactionResponse & { hashRequiringUpdate: boolean };
|
|
32
30
|
}> {
|
|
33
|
-
const
|
|
34
|
-
tx,
|
|
35
|
-
address,
|
|
36
|
-
chainId
|
|
37
|
-
);
|
|
31
|
+
const result = await this.signer.signAndSendTx(tx, address, chainId);
|
|
38
32
|
return {
|
|
39
|
-
hash,
|
|
40
|
-
response: { ...response, hashRequiringUpdate: true },
|
|
33
|
+
hash: result.hash,
|
|
34
|
+
response: { ...result.response, hashRequiringUpdate: true },
|
|
41
35
|
};
|
|
42
36
|
}
|
|
43
37
|
|
|
@@ -47,13 +41,20 @@ export class CustomEvmSigner implements GenericSigner<EvmTransaction> {
|
|
|
47
41
|
response: TransactionResponse
|
|
48
42
|
): Promise<{
|
|
49
43
|
hash: string;
|
|
50
|
-
response: TransactionResponse
|
|
44
|
+
response: TransactionResponse & {
|
|
45
|
+
hashWasUpdated: boolean;
|
|
46
|
+
isMultiSig: true;
|
|
47
|
+
};
|
|
51
48
|
chainId: string;
|
|
52
49
|
}> {
|
|
53
|
-
const
|
|
50
|
+
const result = await getTxHash(safeHash);
|
|
54
51
|
return {
|
|
55
|
-
hash,
|
|
56
|
-
response
|
|
52
|
+
hash: result.txHash,
|
|
53
|
+
response: {
|
|
54
|
+
...response,
|
|
55
|
+
hashWasUpdated: result.hashWasUpdated,
|
|
56
|
+
isMultiSig: true,
|
|
57
|
+
},
|
|
57
58
|
chainId,
|
|
58
59
|
};
|
|
59
60
|
}
|
package/src/helpers.ts
CHANGED
|
@@ -6,33 +6,20 @@ const options = {
|
|
|
6
6
|
allowedDomains: [/gnosis-safe.io$/, /app.safe.global$/],
|
|
7
7
|
debug: false,
|
|
8
8
|
};
|
|
9
|
-
|
|
10
|
-
/*
|
|
11
|
-
* similar to:
|
|
12
|
-
* https://github.com/wagmi-dev/references/pull/114
|
|
13
|
-
*/
|
|
14
|
-
let SDK = SafeAppsSDK;
|
|
15
|
-
if (
|
|
16
|
-
typeof SafeAppsSDK !== 'function' &&
|
|
17
|
-
// @ts-expect-error This import error is not visible to TypeScript
|
|
18
|
-
typeof SafeAppsSDK.default === 'function'
|
|
19
|
-
) {
|
|
20
|
-
SDK = (SafeAppsSDK as unknown as { default: typeof SafeAppsSDK }).default;
|
|
21
|
-
}
|
|
22
|
-
export const sdk = new SDK(options);
|
|
23
|
-
|
|
9
|
+
export const sdk = new SafeAppsSDK(options);
|
|
24
10
|
export async function getSafeInstance(): Promise<any> {
|
|
25
|
-
const timeout = 200;
|
|
26
11
|
const accountInfo = await Promise.race([
|
|
27
12
|
sdk.safe.getInfo(),
|
|
28
|
-
new Promise<undefined>((resolve) => setTimeout(resolve,
|
|
13
|
+
new Promise<undefined>((resolve) => setTimeout(resolve, 200)),
|
|
29
14
|
]);
|
|
30
15
|
return accountInfo ? new SafeAppProvider(accountInfo, sdk as any) : null;
|
|
31
16
|
}
|
|
32
17
|
|
|
33
|
-
export async function getTxHash(
|
|
18
|
+
export async function getTxHash(
|
|
19
|
+
safeHash: string
|
|
20
|
+
): Promise<{ txHash: string; hashWasUpdated: boolean }> {
|
|
34
21
|
let txHash;
|
|
35
|
-
|
|
22
|
+
let hashWasUpdated = false;
|
|
36
23
|
|
|
37
24
|
while (!txHash) {
|
|
38
25
|
try {
|
|
@@ -43,14 +30,16 @@ export async function getTxHash(safeHash: string): Promise<{ txHash: string }> {
|
|
|
43
30
|
queued.txStatus === TransactionStatus.AWAITING_EXECUTION
|
|
44
31
|
) {
|
|
45
32
|
/** Mimic a status watcher by checking once every 5 seconds */
|
|
46
|
-
await waitMs(
|
|
33
|
+
await waitMs(5_000);
|
|
47
34
|
} else if (queued.txHash) {
|
|
48
35
|
/** The txStatus is in an end-state (e.g. success) so we probably have a valid, on chain txHash*/
|
|
49
36
|
txHash = queued.txHash;
|
|
37
|
+
hashWasUpdated = true;
|
|
50
38
|
}
|
|
51
39
|
} catch {
|
|
52
40
|
txHash = safeHash;
|
|
41
|
+
hashWasUpdated = true;
|
|
53
42
|
}
|
|
54
43
|
}
|
|
55
|
-
return { txHash };
|
|
44
|
+
return { txHash, hashWasUpdated };
|
|
56
45
|
}
|