Skip to content

Commit 10bb81d

Browse files
1.25.0-0.1.0: [feature] gnosis safe wallet (#551)
* 1.25.0-0.1.0: [feature] Gnosis Wallet
1 parent ed6df80 commit 10bb81d

File tree

7 files changed

+97
-3
lines changed

7 files changed

+97
-3
lines changed

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "bnc-onboard",
3-
"version": "1.25.0",
3+
"version": "1.25.0-0.1.0",
44
"description": "Onboard users to web3 by allowing them to select a wallet, get that wallet ready to transact and have access to synced wallet state.",
55
"keywords": [
66
"ethereum",
@@ -54,6 +54,8 @@
5454
},
5555
"dependencies": {
5656
"@cvbb/eth-keyring": "^1.1.0",
57+
"@gnosis.pm/safe-apps-provider": "^0.3.0",
58+
"@gnosis.pm/safe-apps-sdk": "^2.3.0",
5759
"@ledgerhq/hw-app-eth": "^5.21.0",
5860
"@ledgerhq/hw-transport-u2f": "^5.21.0",
5961
"@portis/web3": "^4.0.0",

rollup.config.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ export default {
8282
'web3-provider-engine/subproviders/rpc',
8383
'web3-provider-engine/subproviders/subscriptions',
8484
'web3-provider-engine/subproviders/filters',
85-
'eth-provider'
85+
'eth-provider',
86+
'@gnosis.pm/safe-apps-sdk',
87+
'@gnosis.pm/safe-apps-provider'
8688
]
8789
}

src/interfaces.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ export interface WalletModule {
120120
interface: WalletInterface | null
121121
instance?: any
122122
}>
123-
type: 'hardware' | 'injected' | 'sdk'
123+
type: WalletType
124124
link?: string
125125
installMessage?: (wallets: {
126126
currentWallet: string | undefined
@@ -132,6 +132,8 @@ export interface WalletModule {
132132
osExclusions?: Array<string>
133133
}
134134

135+
export type WalletType = 'hardware' | 'injected' | 'sdk'
136+
135137
export interface Helpers {
136138
getProviderName: (provider: any) => string | undefined
137139
createLegacyProviderInterface: (provider: any) => WalletInterface
@@ -179,6 +181,7 @@ export interface CommonWalletOptions {
179181
label?: string
180182
iconSrc?: string
181183
svg?: string
184+
networkId?: number
182185
}
183186

184187
export interface SdkWalletOptions extends CommonWalletOptions {

src/modules/select/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ function getModule(
139139
return import('./wallets/alphawallet')
140140
case 'ownbit':
141141
return import('./wallets/ownbit')
142+
case 'gnosis':
143+
return import('./wallets/gnosis')
142144
default:
143145
throw new Error(`${name} is not a valid walletName.`)
144146
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
const gnosisWalletIcon = `
2+
<svg class="gnosis-logo" viewBox="0 0 2000 2000" enable-background="new 0 0 2000 2000" width="40" height="40">
3+
<g fill="#00a6c4">
4+
<path d="m1809.4 500l-73.6 73.6c58.5 92 76.9 207.4 36.8 317.7-66.9 187.3-274.2 286-463.2 219.1-26.8-10-51.8-21.7-73.6-36.8l-235.8 235.8-205.7-207.4c-95.3 63.5-217.4 81.9-332.8 41.8-194-70.2-294.3-282.6-224.1-474.9 10-30.1 25.1-56.9 41.8-81.9l-88.6-88.6-16.7 28.4c-92 150.5-142.1 324.4-142.1 503.3-1.7 533.4 433.1 969.9 966.5 969.9h1.7c533.4 0 966.6-433.1 968.2-966.6 0-177.3-48.5-351.2-140.5-503.3l-18.3-30.1"/>
5+
<path d="m388 695.7c-25.1 33.4-40.1 75.3-40.1 120.4 0 108.7 88.6 197.3 197.3 197.3 45.2 0 87-15.1 120.4-41.8l-277.6-275.9"/>
6+
<path d="m1356.2 954.8c31.8 21.7 68.6 33.4 110.4 33.4 108.7 0 197.3-88.6 197.3-197.3 0-40.1-11.7-78.6-33.4-110.4l-274.3 274.3"/>
7+
<path d="m1003.3 1162.2l-799.3-802.7 31.8-33.4c197.3-209 466.5-326.1 755.8-326.1h1.7c292.6 0 573.6 125.4 769.2 342.8l30.1 33.4-789.3 786m-668.8-802.7l668.9 670.6 660.5-657.2c-177.3-177.2-418.1-279.3-668.9-279.3h-1.7c-249.2 0-481.6 93.7-658.8 265.9"/>
8+
</g>
9+
</svg>`
10+
11+
export default gnosisWalletIcon

src/modules/select/wallets/gnosis.ts

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import type SafeAppsSDK from '@gnosis.pm/safe-apps-sdk'
2+
import type { SafeInfo } from '@gnosis.pm/safe-apps-sdk'
3+
import { CommonWalletOptions, Helpers, WalletModule } from '../../../interfaces'
4+
import gnosisWalletIcon from '../wallet-icons/icon-gnosis'
5+
6+
const getSafe = (sdk: SafeAppsSDK): Promise<SafeInfo | undefined> => {
7+
return Promise.race([
8+
sdk.getSafeInfo(),
9+
// Timeout need as this method hangs until it can find the safe info
10+
new Promise<undefined>(resolve => setTimeout(resolve, 200))
11+
])
12+
}
13+
14+
function gnosis(options: CommonWalletOptions): WalletModule {
15+
const { preferred, label, iconSrc, svg, networkId } = options
16+
17+
const network = networkId === 4 ? 'rinkeby.' : ''
18+
const link = `https://${network}gnosis-safe.io/app`
19+
20+
return {
21+
name: label || 'Gnosis Safe Wallet',
22+
iconSrc,
23+
svg: svg || gnosisWalletIcon,
24+
wallet: async ({ createModernProviderInterface }: Helpers) => {
25+
const sdk = new (await import('@gnosis.pm/safe-apps-sdk')).default()
26+
const { SafeAppProvider } = await import('@gnosis.pm/safe-apps-provider')
27+
28+
const safe: SafeInfo | undefined = await getSafe(sdk)
29+
// Checks if we are within the safe app context
30+
if (!safe) return { provider: undefined, interface: null }
31+
32+
const provider = new SafeAppProvider(safe, sdk)
33+
return {
34+
provider,
35+
interface: {
36+
...createModernProviderInterface(provider),
37+
connect: () => Promise.resolve([safe.safeAddress])
38+
}
39+
}
40+
},
41+
type: 'sdk',
42+
link,
43+
installMessage: () => `
44+
<p style="font-size: 0.889rem; font-family: inherit; margin: 0.889rem 0;">
45+
Click the button below to open the Gnosis Safe interface.
46+
</p>
47+
`,
48+
desktop: true,
49+
mobile: false,
50+
preferred
51+
}
52+
}
53+
54+
export default gnosis

yarn.lock

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1176,6 +1176,21 @@
11761176
resolved "https://registry.yarnpkg.com/@formatjs/intl-utils/-/intl-utils-2.3.0.tgz#2dc8c57044de0340eb53a7ba602e59abf80dc799"
11771177
integrity sha512-KWk80UPIzPmUg+P0rKh6TqspRw0G6eux1PuJr+zz47ftMaZ9QDwbGzHZbtzWkl5hgayM/qrKRutllRC7D/vVXQ==
11781178

1179+
"@gnosis.pm/safe-apps-provider@^0.3.0":
1180+
version "0.3.0"
1181+
resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-apps-provider/-/safe-apps-provider-0.3.0.tgz#72f212c6965f73a20e805e42cf91b635a814a8be"
1182+
integrity sha512-QL9NnhEYxbgmxpMmOfhOL1nyUcah9Qg4aBXf0F6QjRVc8OPUOSCrYa3pL2Uqd8pUIo98zvk/n7QBPaxWk08ZAQ==
1183+
dependencies:
1184+
"@gnosis.pm/safe-apps-sdk" "2.3.0"
1185+
events "^3.3.0"
1186+
1187+
"@gnosis.pm/safe-apps-sdk@2.3.0", "@gnosis.pm/safe-apps-sdk@^2.3.0":
1188+
version "2.3.0"
1189+
resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-apps-sdk/-/safe-apps-sdk-2.3.0.tgz#10813f065dbf94bb7f1da7c8e1f4ceb8667ef21a"
1190+
integrity sha512-Psu896peovf21k5pBk/+WQnJUE5Jtj82ILumGfSADP7xD20U6DJT7Z8X9jnb+QZnin6Q5gU57ht2tKmc3T+5lQ==
1191+
dependencies:
1192+
semver "^7.3.2"
1193+
11791194
"@json-rpc-tools/types@^1.6.1":
11801195
version "1.6.4"
11811196
resolved "https://registry.yarnpkg.com/@json-rpc-tools/types/-/types-1.6.4.tgz#8cfda48bcc19d4f643ff21ff56bdc1dce730a1f6"
@@ -3372,6 +3387,11 @@ events@3.2.0, events@^3.0.0, events@^3.1.0, events@^3.2.0:
33723387
resolved "https://registry.yarnpkg.com/events/-/events-3.2.0.tgz#93b87c18f8efcd4202a461aec4dfc0556b639379"
33733388
integrity sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==
33743389

3390+
events@^3.3.0:
3391+
version "3.3.0"
3392+
resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
3393+
integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
3394+
33753395
evp_bytestokey@^1.0.3:
33763396
version "1.0.3"
33773397
resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"

0 commit comments

Comments
 (0)