@meshconnect/web-link-sdk 3.2.15 → 3.3.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/Link.d.ts +2 -0
- package/Link.js +535 -0
- package/index.d.ts +3 -0
- package/index.js +3 -0
- package/package.json +9 -20
- package/utils/connectors/evm/chainConfigs.d.ts +2 -0
- package/utils/connectors/evm/chainConfigs.js +115 -0
- package/utils/connectors/evm/chainSwitching.d.ts +15 -0
- package/utils/connectors/evm/chainSwitching.js +242 -0
- package/utils/connectors/evm/index.d.ts +8 -0
- package/utils/connectors/evm/index.js +8 -0
- package/utils/connectors/evm/provider.d.ts +6 -0
- package/utils/connectors/evm/provider.js +13 -0
- package/utils/connectors/evm/signing.d.ts +1 -0
- package/utils/connectors/evm/signing.js +78 -0
- package/utils/connectors/evm/transactions.d.ts +28 -0
- package/utils/connectors/evm/transactions.js +381 -0
- package/utils/connectors/evm/types.d.ts +57 -0
- package/utils/connectors/evm/types.js +1 -0
- package/utils/connectors/evm/walletConnection.d.ts +20 -0
- package/utils/connectors/evm/walletConnection.js +160 -0
- package/utils/connectors/evm/walletDiscovery.d.ts +10 -0
- package/utils/connectors/evm/walletDiscovery.js +55 -0
- package/utils/connectors/solana/connection.d.ts +4 -0
- package/utils/connectors/solana/connection.js +108 -0
- package/utils/connectors/solana/index.d.ts +5 -0
- package/utils/connectors/solana/index.js +5 -0
- package/utils/connectors/solana/providerDiscovery.d.ts +3 -0
- package/utils/connectors/solana/providerDiscovery.js +127 -0
- package/utils/connectors/solana/signing.d.ts +1 -0
- package/utils/connectors/solana/signing.js +59 -0
- package/utils/connectors/solana/transaction.d.ts +17 -0
- package/utils/connectors/solana/transaction.js +362 -0
- package/utils/connectors/solana/types.d.ts +71 -0
- package/utils/connectors/solana/types.js +8 -0
- package/utils/event-types.d.ts +233 -0
- package/{src/utils/event-types.test.ts → utils/event-types.js} +5 -15
- package/utils/popup.d.ts +3 -0
- package/utils/popup.js +36 -0
- package/utils/sdk-specs.d.ts +5 -0
- package/utils/sdk-specs.js +6 -0
- package/utils/style.d.ts +3 -0
- package/utils/style.js +13 -0
- package/utils/types.d.ts +234 -0
- package/utils/types.js +1 -0
- package/utils/version.d.ts +1 -0
- package/utils/version.js +1 -0
- package/utils/wallet/EVMWalletStrategy.d.ts +31 -0
- package/utils/wallet/EVMWalletStrategy.js +265 -0
- package/utils/wallet/SolanaWalletStrategy.d.ts +33 -0
- package/utils/wallet/SolanaWalletStrategy.js +300 -0
- package/utils/wallet/WalletStrategy.d.ts +61 -0
- package/utils/wallet/WalletStrategy.js +25 -0
- package/utils/wallet/WalletStrategyFactory.d.ts +15 -0
- package/utils/wallet/WalletStrategyFactory.js +31 -0
- package/utils/wallet/index.d.ts +4 -0
- package/utils/wallet/index.js +4 -0
- package/utils/wallet-browser-event-types.d.ts +116 -0
- package/utils/wallet-browser-event-types.js +17 -0
- package/jest.setup.ts +0 -4
- package/src/Link.test.ts +0 -434
- package/src/Link.ts +0 -491
- package/src/index.ts +0 -3
- package/src/utils/__snapshots__/popup.test.ts.snap +0 -89
- package/src/utils/connectors/evm/chainConfigs.ts +0 -120
- package/src/utils/connectors/evm/chainSwitching.ts +0 -165
- package/src/utils/connectors/evm/index.ts +0 -8
- package/src/utils/connectors/evm/provider.ts +0 -22
- package/src/utils/connectors/evm/signing.ts +0 -39
- package/src/utils/connectors/evm/transactions.ts +0 -356
- package/src/utils/connectors/evm/types.ts +0 -63
- package/src/utils/connectors/evm/walletConnection.ts +0 -140
- package/src/utils/connectors/evm/walletDiscovery.ts +0 -67
- package/src/utils/connectors/solana/connection.ts +0 -69
- package/src/utils/connectors/solana/index.ts +0 -5
- package/src/utils/connectors/solana/providerDiscovery.ts +0 -153
- package/src/utils/connectors/solana/signing.ts +0 -18
- package/src/utils/connectors/solana/transaction.ts +0 -382
- package/src/utils/connectors/solana/types.ts +0 -66
- package/src/utils/event-types.ts +0 -350
- package/src/utils/popup.test.ts +0 -50
- package/src/utils/popup.ts +0 -123
- package/src/utils/sdk-specs.test.ts +0 -18
- package/src/utils/sdk-specs.ts +0 -7
- package/src/utils/style.test.ts +0 -33
- package/src/utils/style.ts +0 -15
- package/src/utils/types.ts +0 -270
- package/src/utils/version.ts +0 -1
- package/src/utils/wallet/EVMWalletStrategy.ts +0 -176
- package/src/utils/wallet/SolanaWalletStrategy.ts +0 -207
- package/src/utils/wallet/WalletStrategy.ts +0 -99
- package/src/utils/wallet/WalletStrategyFactory.ts +0 -46
- package/src/utils/wallet/__tests__/EVMWalletStrategy.test.ts +0 -233
- package/src/utils/wallet/__tests__/SolanaWalletStrategy.test.ts +0 -253
- package/src/utils/wallet/__tests__/WalletStrategy.test.ts +0 -77
- package/src/utils/wallet/__tests__/WalletStrategyFactory.test.ts +0 -65
- package/src/utils/wallet/index.ts +0 -4
- package/src/utils/wallet-browser-event-types.ts +0 -190
- package/tools/copy.js +0 -26
- package/tools/update-version.js +0 -10
- package/tsconfig.json +0 -14
package/src/Link.ts
DELETED
@@ -1,491 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
LinkOptions,
|
3
|
-
Link,
|
4
|
-
EventType,
|
5
|
-
AccessTokenPayload,
|
6
|
-
DelayedAuthPayload,
|
7
|
-
TransferFinishedPayload,
|
8
|
-
LinkPayload,
|
9
|
-
WalletBrowserPayload,
|
10
|
-
SignRequestPayload,
|
11
|
-
ChainSwitchPayload,
|
12
|
-
TransferPayload,
|
13
|
-
SmartContractPayload,
|
14
|
-
DisconnectPayload,
|
15
|
-
TransactionBatchPayload,
|
16
|
-
WalletCapabilitiesPayload,
|
17
|
-
SolanaTransferWithInstructionsPayload
|
18
|
-
} from './utils/types'
|
19
|
-
import { addPopup, iframeId, removePopup } from './utils/popup'
|
20
|
-
import { LinkEventType, isLinkEventTypeKey } from './utils/event-types'
|
21
|
-
import {
|
22
|
-
WalletBrowserEventType,
|
23
|
-
isWalletBrowserEventTypeKey
|
24
|
-
} from './utils/wallet-browser-event-types'
|
25
|
-
import { sdkSpecs } from './utils/sdk-specs'
|
26
|
-
import { WalletStrategyFactory, NetworkType } from './utils/wallet'
|
27
|
-
|
28
|
-
let currentOptions: LinkOptions | undefined
|
29
|
-
let targetOrigin: string | undefined
|
30
|
-
let linkTokenOrigin: string | undefined
|
31
|
-
let currentIframeId = iframeId
|
32
|
-
|
33
|
-
const iframeElement = () => {
|
34
|
-
return document.getElementById(currentIframeId) as HTMLIFrameElement
|
35
|
-
}
|
36
|
-
|
37
|
-
function sendMessageToIframe<T extends { type: string }>(message: T) {
|
38
|
-
const iframe = iframeElement()
|
39
|
-
if (!iframe) {
|
40
|
-
console.warn(
|
41
|
-
`Mesh SDK: Failed to deliver ${message.type} message to the iframe - no iframe element found`
|
42
|
-
)
|
43
|
-
return
|
44
|
-
}
|
45
|
-
if (!linkTokenOrigin) {
|
46
|
-
console.warn(
|
47
|
-
`Mesh SDK: Failed to deliver ${message.type} message to the iframe - no link token origin found`
|
48
|
-
)
|
49
|
-
return
|
50
|
-
}
|
51
|
-
try {
|
52
|
-
iframe.contentWindow?.postMessage(message, linkTokenOrigin)
|
53
|
-
} catch (e) {
|
54
|
-
console.error(
|
55
|
-
`Mesh SDK: Failed to deliver ${message.type} message to the iframe`
|
56
|
-
)
|
57
|
-
console.error(e)
|
58
|
-
}
|
59
|
-
}
|
60
|
-
|
61
|
-
async function handleLinkEvent(
|
62
|
-
event:
|
63
|
-
| MessageEvent<{
|
64
|
-
type: EventType
|
65
|
-
payload?:
|
66
|
-
| AccessTokenPayload
|
67
|
-
| DelayedAuthPayload
|
68
|
-
| TransferFinishedPayload
|
69
|
-
link?: string
|
70
|
-
}>
|
71
|
-
| MessageEvent<LinkEventType>
|
72
|
-
) {
|
73
|
-
switch (event.data.type) {
|
74
|
-
case 'brokerageAccountAccessToken': {
|
75
|
-
const payload: LinkPayload = {
|
76
|
-
accessToken: event.data.payload as AccessTokenPayload
|
77
|
-
}
|
78
|
-
currentOptions?.onEvent?.({
|
79
|
-
type: 'integrationConnected',
|
80
|
-
payload: payload
|
81
|
-
})
|
82
|
-
currentOptions?.onIntegrationConnected?.(payload)
|
83
|
-
break
|
84
|
-
}
|
85
|
-
case 'delayedAuthentication': {
|
86
|
-
const payload: LinkPayload = {
|
87
|
-
delayedAuth: event.data.payload as DelayedAuthPayload
|
88
|
-
}
|
89
|
-
currentOptions?.onEvent?.({
|
90
|
-
type: 'integrationConnected',
|
91
|
-
payload: payload
|
92
|
-
})
|
93
|
-
currentOptions?.onIntegrationConnected?.(payload)
|
94
|
-
break
|
95
|
-
}
|
96
|
-
case 'transferFinished': {
|
97
|
-
const payload = event.data.payload as TransferFinishedPayload
|
98
|
-
|
99
|
-
currentOptions?.onEvent?.({
|
100
|
-
type: 'transferCompleted',
|
101
|
-
payload: payload
|
102
|
-
})
|
103
|
-
currentOptions?.onTransferFinished?.(payload)
|
104
|
-
break
|
105
|
-
}
|
106
|
-
case 'close':
|
107
|
-
case 'done': {
|
108
|
-
const payload = event.data?.payload
|
109
|
-
currentOptions?.onExit?.(payload?.errorMessage, payload)
|
110
|
-
removePopup()
|
111
|
-
break
|
112
|
-
}
|
113
|
-
case 'loaded': {
|
114
|
-
sendMessageToIframe({
|
115
|
-
type: 'meshSDKSpecs',
|
116
|
-
payload: { ...sdkSpecs }
|
117
|
-
})
|
118
|
-
|
119
|
-
// Get all providers using the wallet factory
|
120
|
-
const walletFactory = WalletStrategyFactory.getInstance()
|
121
|
-
const allProviders = walletFactory.getAllProviders()
|
122
|
-
|
123
|
-
sendMessageToIframe({
|
124
|
-
type: 'SDKinjectedWalletProviders',
|
125
|
-
payload: allProviders
|
126
|
-
})
|
127
|
-
|
128
|
-
if (currentOptions?.accessTokens) {
|
129
|
-
sendMessageToIframe({
|
130
|
-
type: 'frontAccessTokens',
|
131
|
-
payload: currentOptions.accessTokens
|
132
|
-
})
|
133
|
-
}
|
134
|
-
if (currentOptions?.transferDestinationTokens) {
|
135
|
-
sendMessageToIframe({
|
136
|
-
type: 'frontTransferDestinationTokens',
|
137
|
-
payload: currentOptions.transferDestinationTokens
|
138
|
-
})
|
139
|
-
}
|
140
|
-
currentOptions?.onEvent?.({ type: 'pageLoaded' })
|
141
|
-
break
|
142
|
-
}
|
143
|
-
default: {
|
144
|
-
if (isLinkEventTypeKey(event.data.type)) {
|
145
|
-
currentOptions?.onEvent?.(event.data)
|
146
|
-
}
|
147
|
-
break
|
148
|
-
}
|
149
|
-
}
|
150
|
-
}
|
151
|
-
|
152
|
-
async function handleWalletBrowserEvent(
|
153
|
-
event: MessageEvent<WalletBrowserEventType>
|
154
|
-
) {
|
155
|
-
const walletFactory = WalletStrategyFactory.getInstance()
|
156
|
-
switch (event.data.type) {
|
157
|
-
case 'walletBrowserInjectedWalletSelected': {
|
158
|
-
const payload = event.data.payload as WalletBrowserPayload
|
159
|
-
try {
|
160
|
-
const networkType = (
|
161
|
-
payload.networkType?.includes('solana') ? 'solana' : 'evm'
|
162
|
-
) as NetworkType
|
163
|
-
const strategy = walletFactory.getStrategy(networkType)
|
164
|
-
|
165
|
-
const result = await strategy.connect(payload)
|
166
|
-
|
167
|
-
sendMessageToIframe({
|
168
|
-
type: 'SDKinjectedConnectionCompleted',
|
169
|
-
payload: {
|
170
|
-
accounts: result.accounts,
|
171
|
-
chainId: result.chainId,
|
172
|
-
networkType: networkType
|
173
|
-
}
|
174
|
-
})
|
175
|
-
} catch (error) {
|
176
|
-
console.error('Connection error:', error)
|
177
|
-
handleErrorAndSendMessage(
|
178
|
-
error as Error,
|
179
|
-
'SDKinjectedConnectionCompleted'
|
180
|
-
)
|
181
|
-
}
|
182
|
-
break
|
183
|
-
}
|
184
|
-
case 'walletBrowserSignRequest': {
|
185
|
-
const payload = event.data.payload as SignRequestPayload
|
186
|
-
try {
|
187
|
-
const networkType = (
|
188
|
-
!payload.address.startsWith('0x') ? 'solana' : 'evm'
|
189
|
-
) as NetworkType
|
190
|
-
const strategy = walletFactory.getStrategy(networkType)
|
191
|
-
|
192
|
-
const result = await strategy.signMessage(payload)
|
193
|
-
|
194
|
-
sendMessageToIframe({
|
195
|
-
type: 'SDKsignRequestCompleted',
|
196
|
-
payload: result
|
197
|
-
})
|
198
|
-
} catch (error) {
|
199
|
-
handleErrorAndSendMessage(error as Error, 'SDKsignRequestCompleted')
|
200
|
-
}
|
201
|
-
break
|
202
|
-
}
|
203
|
-
case 'walletBrowserChainSwitchRequest': {
|
204
|
-
const payload = event.data.payload as ChainSwitchPayload
|
205
|
-
try {
|
206
|
-
const networkType = (
|
207
|
-
payload.networkType === 'solana' ? 'solana' : 'evm'
|
208
|
-
) as NetworkType
|
209
|
-
const strategy = walletFactory.getStrategy(networkType)
|
210
|
-
|
211
|
-
const result = await strategy.switchChain(payload)
|
212
|
-
|
213
|
-
sendMessageToIframe({
|
214
|
-
type: 'SDKswitchChainCompleted',
|
215
|
-
payload: {
|
216
|
-
chainId: result.chainId,
|
217
|
-
accounts: result.accounts,
|
218
|
-
networkType: networkType
|
219
|
-
}
|
220
|
-
})
|
221
|
-
} catch (error) {
|
222
|
-
console.error('Chain switch failed:', error)
|
223
|
-
handleErrorAndSendMessage(error as Error, 'SDKswitchChainCompleted')
|
224
|
-
}
|
225
|
-
break
|
226
|
-
}
|
227
|
-
case 'walletBrowserNativeTransferRequest': {
|
228
|
-
const payload = event.data.payload as TransferPayload
|
229
|
-
try {
|
230
|
-
const networkType = (
|
231
|
-
payload.network === 'solana' ? 'solana' : 'evm'
|
232
|
-
) as NetworkType
|
233
|
-
const strategy = walletFactory.getStrategy(networkType)
|
234
|
-
|
235
|
-
const result = await strategy.sendNativeTransfer(payload)
|
236
|
-
|
237
|
-
sendMessageToIframe({
|
238
|
-
type: 'SDKnativeTransferCompleted',
|
239
|
-
payload: result
|
240
|
-
})
|
241
|
-
} catch (error) {
|
242
|
-
handleErrorAndSendMessage(error as Error, 'SDKnativeTransferCompleted')
|
243
|
-
}
|
244
|
-
break
|
245
|
-
}
|
246
|
-
case 'walletBrowserNonNativeTransferRequest':
|
247
|
-
case 'walletBrowserNonNativeSmartDeposit': {
|
248
|
-
const payload = event.data.payload as SmartContractPayload
|
249
|
-
const getResponseType = (type: WalletBrowserEventType['type']) => {
|
250
|
-
switch (type) {
|
251
|
-
case 'walletBrowserNonNativeTransferRequest':
|
252
|
-
return 'SDKnonNativeTransferCompleted'
|
253
|
-
case 'walletBrowserNativeSmartDeposit':
|
254
|
-
return 'SDKnativeSmartDepositCompleted'
|
255
|
-
case 'walletBrowserNonNativeSmartDeposit':
|
256
|
-
return 'SDKnonNativeSmartDepositCompleted'
|
257
|
-
default:
|
258
|
-
return 'SDKnonNativeTransferCompleted'
|
259
|
-
}
|
260
|
-
}
|
261
|
-
|
262
|
-
try {
|
263
|
-
const networkType = (
|
264
|
-
payload.address.startsWith('0x') ? 'evm' : 'solana'
|
265
|
-
) as NetworkType
|
266
|
-
const strategy = walletFactory.getStrategy(networkType)
|
267
|
-
const result = await strategy.sendSmartContractInteraction(payload)
|
268
|
-
|
269
|
-
const responseType = getResponseType(event.data.type)
|
270
|
-
|
271
|
-
sendMessageToIframe({
|
272
|
-
type: responseType,
|
273
|
-
payload: {
|
274
|
-
txHash: result
|
275
|
-
}
|
276
|
-
})
|
277
|
-
} catch (error) {
|
278
|
-
const errorType = getResponseType(event.data.type)
|
279
|
-
handleErrorAndSendMessage(error as Error, errorType)
|
280
|
-
}
|
281
|
-
break
|
282
|
-
}
|
283
|
-
case 'walletBrowserNativeSmartDeposit': {
|
284
|
-
const payload = event.data.payload as SmartContractPayload
|
285
|
-
const getResponseType = (type: WalletBrowserEventType['type']) => {
|
286
|
-
switch (type) {
|
287
|
-
case 'walletBrowserNonNativeTransferRequest':
|
288
|
-
return 'SDKnonNativeTransferCompleted'
|
289
|
-
case 'walletBrowserNativeSmartDeposit':
|
290
|
-
return 'SDKnativeSmartDepositCompleted'
|
291
|
-
case 'walletBrowserNonNativeSmartDeposit':
|
292
|
-
return 'SDKnonNativeSmartDepositCompleted'
|
293
|
-
default:
|
294
|
-
return 'SDKnonNativeTransferCompleted'
|
295
|
-
}
|
296
|
-
}
|
297
|
-
|
298
|
-
try {
|
299
|
-
const networkType = (
|
300
|
-
payload.address.startsWith('0x') ? 'evm' : 'solana'
|
301
|
-
) as NetworkType
|
302
|
-
const strategy = walletFactory.getStrategy(networkType)
|
303
|
-
const result = await strategy.sendNativeSmartContractInteraction(
|
304
|
-
payload
|
305
|
-
)
|
306
|
-
|
307
|
-
const responseType = getResponseType(event.data.type)
|
308
|
-
|
309
|
-
sendMessageToIframe({
|
310
|
-
type: responseType,
|
311
|
-
payload: {
|
312
|
-
txHash: result
|
313
|
-
}
|
314
|
-
})
|
315
|
-
} catch (error) {
|
316
|
-
const errorType = getResponseType(event.data.type)
|
317
|
-
handleErrorAndSendMessage(error as Error, errorType)
|
318
|
-
}
|
319
|
-
break
|
320
|
-
}
|
321
|
-
case 'walletBrowserTransactionBatchRequest': {
|
322
|
-
const payload = event.data.payload as TransactionBatchPayload
|
323
|
-
const responseType = 'SDKtransactionBatchCompleted'
|
324
|
-
|
325
|
-
try {
|
326
|
-
const networkType = (
|
327
|
-
payload.from.startsWith('0x') ? 'evm' : 'solana'
|
328
|
-
) as NetworkType
|
329
|
-
const strategy = walletFactory.getStrategy(networkType)
|
330
|
-
const result = await strategy.sendTransactionBatch(payload)
|
331
|
-
|
332
|
-
sendMessageToIframe({
|
333
|
-
type: responseType,
|
334
|
-
payload: {
|
335
|
-
txHash: result
|
336
|
-
}
|
337
|
-
})
|
338
|
-
} catch (error) {
|
339
|
-
handleErrorAndSendMessage(error as Error, responseType)
|
340
|
-
}
|
341
|
-
break
|
342
|
-
}
|
343
|
-
case 'walletBrowserWalletCapabilities': {
|
344
|
-
const payload = event.data.payload as WalletCapabilitiesPayload
|
345
|
-
const responseType = 'SDKwalletCapabilitiesCompleted'
|
346
|
-
try {
|
347
|
-
const networkType = (
|
348
|
-
payload.from.startsWith('0x') ? 'evm' : 'solana'
|
349
|
-
) as NetworkType
|
350
|
-
const strategy = walletFactory.getStrategy(networkType)
|
351
|
-
const result = await strategy.getWalletCapabilities(payload)
|
352
|
-
|
353
|
-
sendMessageToIframe({
|
354
|
-
type: responseType,
|
355
|
-
payload: result
|
356
|
-
})
|
357
|
-
} catch (error) {
|
358
|
-
handleErrorAndSendMessage(error as Error, responseType)
|
359
|
-
}
|
360
|
-
break
|
361
|
-
break
|
362
|
-
}
|
363
|
-
case 'walletBrowserDisconnect': {
|
364
|
-
const payload = event.data.payload as DisconnectPayload
|
365
|
-
|
366
|
-
try {
|
367
|
-
if (payload?.networkType) {
|
368
|
-
const networkType = (
|
369
|
-
payload.networkType === 'solana' ? 'solana' : 'evm'
|
370
|
-
) as NetworkType
|
371
|
-
const strategy = walletFactory.getStrategy(networkType)
|
372
|
-
await strategy.disconnect(payload)
|
373
|
-
} else {
|
374
|
-
// Disconnect from all if no specific network type
|
375
|
-
await Promise.all([
|
376
|
-
walletFactory.getStrategy('solana').disconnect(payload),
|
377
|
-
walletFactory.getStrategy('evm').disconnect(payload)
|
378
|
-
])
|
379
|
-
}
|
380
|
-
|
381
|
-
sendMessageToIframe({
|
382
|
-
type: 'SDKdisconnectSuccess'
|
383
|
-
})
|
384
|
-
} catch (error) {
|
385
|
-
console.error('Error during disconnect:', error)
|
386
|
-
handleErrorAndSendMessage(error as Error, 'SDKdisconnectSuccess')
|
387
|
-
}
|
388
|
-
break
|
389
|
-
}
|
390
|
-
case 'walletBrowserSolanaTransferWithInstructionsRequest': {
|
391
|
-
const payload = event.data
|
392
|
-
.payload as SolanaTransferWithInstructionsPayload
|
393
|
-
|
394
|
-
try {
|
395
|
-
const networkType = 'solana' as NetworkType
|
396
|
-
const strategy = walletFactory.getStrategy(networkType)
|
397
|
-
const result = await strategy.sendTransactionWithInstructions(payload)
|
398
|
-
sendMessageToIframe({
|
399
|
-
type: 'SDKnonNativeTransferCompleted',
|
400
|
-
payload: {
|
401
|
-
txHash: result
|
402
|
-
}
|
403
|
-
})
|
404
|
-
} catch (error) {
|
405
|
-
handleErrorAndSendMessage(error as Error, 'SDKdisconnectSuccess')
|
406
|
-
}
|
407
|
-
break
|
408
|
-
}
|
409
|
-
}
|
410
|
-
}
|
411
|
-
|
412
|
-
async function eventsListener(
|
413
|
-
event: MessageEvent<
|
414
|
-
LinkEventType | WalletBrowserEventType | { type: EventType }
|
415
|
-
>
|
416
|
-
) {
|
417
|
-
if (event.origin !== targetOrigin && event.origin !== linkTokenOrigin) {
|
418
|
-
console.warn('Received message from untrusted origin:', event.origin)
|
419
|
-
} else if (isWalletBrowserEventTypeKey(event.data.type)) {
|
420
|
-
await handleWalletBrowserEvent(
|
421
|
-
event as MessageEvent<WalletBrowserEventType>
|
422
|
-
)
|
423
|
-
} else {
|
424
|
-
await handleLinkEvent(event as MessageEvent<{ type: EventType }>)
|
425
|
-
}
|
426
|
-
}
|
427
|
-
|
428
|
-
function handleErrorAndSendMessage(error: Error, messageType: string) {
|
429
|
-
sendMessageToIframe({
|
430
|
-
type: messageType,
|
431
|
-
payload: {
|
432
|
-
error: error
|
433
|
-
}
|
434
|
-
})
|
435
|
-
}
|
436
|
-
|
437
|
-
export const createLink = (options: LinkOptions): Link => {
|
438
|
-
const openLink = (linkToken: string, customIframeId?: string) => {
|
439
|
-
if (!linkToken) {
|
440
|
-
options?.onExit?.('Invalid link token!')
|
441
|
-
return
|
442
|
-
}
|
443
|
-
|
444
|
-
currentOptions = options
|
445
|
-
let linkUrl = window.atob(linkToken)
|
446
|
-
linkUrl = addLanguage(linkUrl, currentOptions?.language)
|
447
|
-
linkTokenOrigin = new URL(linkUrl).origin
|
448
|
-
window.removeEventListener('message', eventsListener)
|
449
|
-
if (customIframeId) {
|
450
|
-
const iframe = document.getElementById(
|
451
|
-
customIframeId
|
452
|
-
) as HTMLIFrameElement
|
453
|
-
if (iframe) {
|
454
|
-
iframe.allow = 'clipboard-read *; clipboard-write *'
|
455
|
-
iframe.src = linkUrl
|
456
|
-
currentIframeId = customIframeId
|
457
|
-
} else {
|
458
|
-
console.warn(`Mesh SDK: No iframe found with id ${customIframeId}`)
|
459
|
-
}
|
460
|
-
} else {
|
461
|
-
currentIframeId = iframeId
|
462
|
-
addPopup(linkUrl)
|
463
|
-
}
|
464
|
-
|
465
|
-
window.addEventListener('message', eventsListener)
|
466
|
-
|
467
|
-
targetOrigin = window.location.origin
|
468
|
-
}
|
469
|
-
|
470
|
-
const closeLink = () => {
|
471
|
-
removePopup()
|
472
|
-
window.removeEventListener('message', eventsListener)
|
473
|
-
options.onExit?.()
|
474
|
-
}
|
475
|
-
|
476
|
-
return {
|
477
|
-
openLink: openLink,
|
478
|
-
closeLink: closeLink
|
479
|
-
}
|
480
|
-
}
|
481
|
-
|
482
|
-
function addLanguage(linkUrl: string, language: string | undefined) {
|
483
|
-
if (language === 'system') {
|
484
|
-
language =
|
485
|
-
typeof navigator !== 'undefined' && navigator.language
|
486
|
-
? encodeURIComponent(navigator.language)
|
487
|
-
: undefined
|
488
|
-
}
|
489
|
-
|
490
|
-
return `${linkUrl}${linkUrl.includes('?') ? '&' : '?'}lng=${language || 'en'}`
|
491
|
-
}
|
package/src/index.ts
DELETED
@@ -1,89 +0,0 @@
|
|
1
|
-
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
2
|
-
|
3
|
-
exports[`Popup tests addPopup should add correct popup 1`] = `
|
4
|
-
<style
|
5
|
-
id="mesh-link-popup__styles"
|
6
|
-
>
|
7
|
-
|
8
|
-
body {
|
9
|
-
position: fixed;
|
10
|
-
left: 0;
|
11
|
-
top: 0;
|
12
|
-
bottom: 0;
|
13
|
-
right: 0;
|
14
|
-
overflow: hidden;
|
15
|
-
}
|
16
|
-
|
17
|
-
#mesh-link-popup {
|
18
|
-
all: unset;
|
19
|
-
position: fixed;
|
20
|
-
left: 0;
|
21
|
-
top: 0;
|
22
|
-
bottom: 0;
|
23
|
-
right: 0;
|
24
|
-
display: flex;
|
25
|
-
flex-direction: column;
|
26
|
-
align-items: center;
|
27
|
-
justify-content: center;
|
28
|
-
z-index: 10000;
|
29
|
-
}
|
30
|
-
|
31
|
-
#mesh-link-popup__backdrop {
|
32
|
-
position: absolute;
|
33
|
-
left: 0;
|
34
|
-
top: 0;
|
35
|
-
bottom: 0;
|
36
|
-
right: 0;
|
37
|
-
z-index: 10000;
|
38
|
-
background: black;
|
39
|
-
opacity: 0.8;
|
40
|
-
}
|
41
|
-
|
42
|
-
#mesh-link-popup__popup-content {
|
43
|
-
position: absolute;
|
44
|
-
height: 80%;
|
45
|
-
max-height: 710px;
|
46
|
-
min-height: 685px;
|
47
|
-
margin: auto;
|
48
|
-
z-index: 10001;
|
49
|
-
width: 30%;
|
50
|
-
max-width: 430px;
|
51
|
-
min-width: 380px;
|
52
|
-
display: flex;
|
53
|
-
flex-direction: column;
|
54
|
-
border-radius: 2px;
|
55
|
-
flex-grow: 1;
|
56
|
-
}
|
57
|
-
|
58
|
-
#mesh-link-popup__popup-content iframe {
|
59
|
-
border: none;
|
60
|
-
width: 100%;
|
61
|
-
flex-grow: 1;
|
62
|
-
border-radius: 2px;
|
63
|
-
}
|
64
|
-
|
65
|
-
@media only screen and (max-width: 768px) {
|
66
|
-
#mesh-link-popup__popup-content {
|
67
|
-
height: 100vh;
|
68
|
-
width: 100vw;
|
69
|
-
max-width: 100%;
|
70
|
-
min-width: 100%;
|
71
|
-
max-height: 100%;
|
72
|
-
min-height: 100%;
|
73
|
-
border-radius: 0px;
|
74
|
-
}
|
75
|
-
|
76
|
-
#mesh-link-popup__popup-content iframe {
|
77
|
-
border-radius: 0px;
|
78
|
-
}
|
79
|
-
}
|
80
|
-
|
81
|
-
@media only screen and (max-height: 710px) {
|
82
|
-
#mesh-link-popup__popup-content {
|
83
|
-
max-height: 100%;
|
84
|
-
min-height: 100%;
|
85
|
-
}
|
86
|
-
}
|
87
|
-
|
88
|
-
</style>
|
89
|
-
`;
|
@@ -1,120 +0,0 @@
|
|
1
|
-
import { ChainConfig } from './types'
|
2
|
-
|
3
|
-
// Chain configurations
|
4
|
-
const chainConfigs: Record<number, ChainConfig> = {
|
5
|
-
43114: {
|
6
|
-
// Avalanche
|
7
|
-
name: 'Avalanche',
|
8
|
-
nativeCurrency: {
|
9
|
-
decimals: 18,
|
10
|
-
name: 'Avalanche',
|
11
|
-
symbol: 'AVAX'
|
12
|
-
},
|
13
|
-
rpcUrls: {
|
14
|
-
default: { http: ['https://avalanche-mainnet.infura.io'] }
|
15
|
-
},
|
16
|
-
blockExplorers: {
|
17
|
-
default: {
|
18
|
-
name: 'SnowTrace',
|
19
|
-
url: 'https://snowtrace.io'
|
20
|
-
}
|
21
|
-
}
|
22
|
-
},
|
23
|
-
42161: {
|
24
|
-
// Arbitrum
|
25
|
-
name: 'Arbitrum One',
|
26
|
-
nativeCurrency: {
|
27
|
-
decimals: 18,
|
28
|
-
name: 'Ether',
|
29
|
-
symbol: 'ETH'
|
30
|
-
},
|
31
|
-
rpcUrls: {
|
32
|
-
default: { http: ['https://arb1.arbitrum.io/rpc'] }
|
33
|
-
},
|
34
|
-
blockExplorers: {
|
35
|
-
default: {
|
36
|
-
name: 'Arbiscan',
|
37
|
-
url: 'https://arbiscan.io'
|
38
|
-
}
|
39
|
-
}
|
40
|
-
},
|
41
|
-
10: {
|
42
|
-
// Optimism
|
43
|
-
name: 'OP Mainnet',
|
44
|
-
nativeCurrency: {
|
45
|
-
decimals: 18,
|
46
|
-
name: 'Ether',
|
47
|
-
symbol: 'ETH'
|
48
|
-
},
|
49
|
-
rpcUrls: {
|
50
|
-
default: { http: ['https://mainnet.optimism.io'] }
|
51
|
-
},
|
52
|
-
blockExplorers: {
|
53
|
-
default: {
|
54
|
-
name: 'Optimism Explorer',
|
55
|
-
url: 'https://optimistic.etherscan.io'
|
56
|
-
}
|
57
|
-
}
|
58
|
-
},
|
59
|
-
8453: {
|
60
|
-
// Base
|
61
|
-
name: 'Base',
|
62
|
-
nativeCurrency: {
|
63
|
-
decimals: 18,
|
64
|
-
name: 'Ether',
|
65
|
-
symbol: 'ETH'
|
66
|
-
},
|
67
|
-
rpcUrls: {
|
68
|
-
default: { http: ['https://mainnet.base.org'] }
|
69
|
-
},
|
70
|
-
blockExplorers: {
|
71
|
-
default: {
|
72
|
-
name: 'Basescan',
|
73
|
-
url: 'https://basescan.org'
|
74
|
-
}
|
75
|
-
}
|
76
|
-
},
|
77
|
-
137: {
|
78
|
-
// Polygon
|
79
|
-
name: 'Polygon',
|
80
|
-
nativeCurrency: {
|
81
|
-
decimals: 18,
|
82
|
-
name: 'MATIC',
|
83
|
-
symbol: 'MATIC'
|
84
|
-
},
|
85
|
-
rpcUrls: {
|
86
|
-
default: { http: ['https://polygon-rpc.com'] }
|
87
|
-
},
|
88
|
-
blockExplorers: {
|
89
|
-
default: {
|
90
|
-
name: 'PolygonScan',
|
91
|
-
url: 'https://polygonscan.com'
|
92
|
-
}
|
93
|
-
}
|
94
|
-
},
|
95
|
-
56: {
|
96
|
-
// BSC
|
97
|
-
name: 'BNB Smart Chain',
|
98
|
-
nativeCurrency: {
|
99
|
-
decimals: 18,
|
100
|
-
name: 'BNB',
|
101
|
-
symbol: 'BNB'
|
102
|
-
},
|
103
|
-
rpcUrls: {
|
104
|
-
default: { http: ['https://rpc.ankr.com/bsc'] }
|
105
|
-
},
|
106
|
-
blockExplorers: {
|
107
|
-
default: {
|
108
|
-
name: 'BscScan',
|
109
|
-
url: 'https://bscscan.com'
|
110
|
-
}
|
111
|
-
}
|
112
|
-
}
|
113
|
-
}
|
114
|
-
|
115
|
-
// Helper function to get chain configuration
|
116
|
-
export const getChainConfiguration = (
|
117
|
-
chainId: number
|
118
|
-
): ChainConfig | undefined => {
|
119
|
-
return chainConfigs[chainId]
|
120
|
-
}
|