@meshconnect/uwc-injected-connector 0.14.0 → 0.14.2
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ton-discovery.d.ts","sourceRoot":"","sources":["../src/ton-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,UAAU,gBAAgB;IACxB,UAAU,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACjD,OAAO,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACtE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1C,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,MAAM,IAAI,CAAA;IACzD,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,gBAAgB,CAAA;CAC3B;AA+ED,wBAAsB,aAAa,CACjC,eAAe,GAAE,cAAc,EAAO,GACrC,OAAO,CAAC,iBAAiB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"ton-discovery.d.ts","sourceRoot":"","sources":["../src/ton-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,UAAU,gBAAgB;IACxB,UAAU,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IACjD,OAAO,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IACtE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAC1C,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,KAAK,MAAM,IAAI,CAAA;IACzD,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,gBAAgB,CAAA;CAC3B;AA+ED,wBAAsB,aAAa,CACjC,eAAe,GAAE,cAAc,EAAO,GACrC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA0B9B"}
|
package/dist/ton-discovery.js
CHANGED
|
@@ -75,15 +75,17 @@ export async function getTonWallets(expectedWallets = []) {
|
|
|
75
75
|
const jsBridgeKeys = expectedWallets
|
|
76
76
|
.map(w => w.extensionInjectedProvider?.namespaceMetaData?.tvm?.jsBridgeKey)
|
|
77
77
|
.filter((key) => !!key);
|
|
78
|
-
// Bridge mode
|
|
78
|
+
// Bridge mode: prefer this frame's own provider (window[jsBridgeKey]) so connect
|
|
79
|
+
// attributes to the iframe origin; fall back to the parent list only
|
|
80
|
+
// when none is present.
|
|
79
81
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
80
82
|
// @ts-ignore - window.UWCBridgeChildInitialized is set by the bridge
|
|
81
83
|
if (window.UWCBridgeChildInitialized === true) {
|
|
82
|
-
const
|
|
83
|
-
if (
|
|
84
|
-
return
|
|
84
|
+
const local = discoverTonProviders(jsBridgeKeys);
|
|
85
|
+
if (local.length > 0) {
|
|
86
|
+
return local;
|
|
85
87
|
}
|
|
86
|
-
return
|
|
88
|
+
return pollForBridgeTonWallets();
|
|
87
89
|
}
|
|
88
90
|
// Native discovery: direct window[key].tonconnect access
|
|
89
91
|
return discoverTonProviders(jsBridgeKeys);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ton-discovery.js","sourceRoot":"","sources":["../src/ton-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoBH,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACrD,MAAM,MAAM,GAAG,KAAgC,CAAA;IAC/C,OAAO,CACL,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,UAAU;QACvC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,UAAU;QACpC,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU,CACvC,CAAA;AACH,CAAC;AAED,SAAS,gBAAgB,CACvB,GAAW;IAEX,MAAM,IAAI,GAAI,MAA6C,CAAC,GAAG,CAAC,CAAA;IAChE,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAElD,MAAM,MAAM,GAAI,IAAgC,CAAC,YAAY,CAAC,CAAA;IAC9D,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,IAAI,GAAG,EAAE,CAAA;IAC5D,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,oBAAoB,CAAC,YAAsB;IAClD,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,CAAA;IAE5C,MAAM,OAAO,GAAwB,EAAE,CAAA;IACvC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAE9B,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAC/B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAQ;QAC3B,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;QACtC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACb,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,OAAO,GAAG,EAAE,CAAC,WAAW,EAAE;gBAChC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,EAAE;gBACR,WAAW,EAAE,GAAG;gBAChB,QAAQ,EAAE,QAAQ,CAAC,MAAM;aAC1B,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,KAAK,UAAU,uBAAuB;IACpC,MAAM,YAAY,GAAG,GAAG,CAAA;IACxB,MAAM,WAAW,GAAG,IAAI,CAAA;IACxB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAE5B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,WAAW,EAAE,CAAC;gBACzC,OAAO,CAAC,EAAE,CAAC,CAAA;gBACX,OAAM;YACR,CAAC;YAED,6DAA6D;YAC7D,sDAAsD;YACtD,IAAI,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC1D,6DAA6D;gBAC7D,aAAa;gBACb,MAAM,aAAa,GAAG,MAAM,CAAC,UAAiC,CAAA;gBAC9D,OAAO,CAAC,aAAa,CAAC,CAAA;gBACtB,OAAM;YACR,CAAC;YAED,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;QAChC,CAAC,CAAA;QAED,IAAI,EAAE,CAAA;IACR,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,kBAAoC,EAAE;IAEtC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,eAAe;aACjC,GAAG,CACF,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,yBAAyB,EAAE,iBAAiB,EAAE,GAAG,EAAE,WAAW,CACtE;aACA,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAExC,
|
|
1
|
+
{"version":3,"file":"ton-discovery.js","sourceRoot":"","sources":["../src/ton-discovery.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meshconnect/uwc-injected-connector",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.2",
|
|
4
4
|
"description": "Injected connector for Universal Wallet Connector",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -27,10 +27,10 @@
|
|
|
27
27
|
"buffer": "^6.0.3",
|
|
28
28
|
"uuid": "^13.0.0",
|
|
29
29
|
"viem": "^2.44.4",
|
|
30
|
-
"@meshconnect/uwc-bridge-child": "0.2.
|
|
31
|
-
"@meshconnect/uwc-constants": "0.6.
|
|
32
|
-
"@meshconnect/uwc-ton-connector": "0.6.
|
|
33
|
-
"@meshconnect/uwc-types": "0.15.
|
|
30
|
+
"@meshconnect/uwc-bridge-child": "0.2.2",
|
|
31
|
+
"@meshconnect/uwc-constants": "0.6.5",
|
|
32
|
+
"@meshconnect/uwc-ton-connector": "0.6.4",
|
|
33
|
+
"@meshconnect/uwc-types": "0.15.1"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"typescript": "^5.9.3"
|
|
@@ -153,9 +153,10 @@ describe('getTonWallets / bridge polling', () => {
|
|
|
153
153
|
vi.restoreAllMocks()
|
|
154
154
|
})
|
|
155
155
|
|
|
156
|
-
it('prefers bridge
|
|
156
|
+
it('prefers the in-frame (local) provider over the bridge when both are present', async () => {
|
|
157
157
|
mockWindow.UWCBridgeChildInitialized = true
|
|
158
158
|
|
|
159
|
+
// Parent-proxied wallet reported by the bridge...
|
|
159
160
|
const bridgeWallet = {
|
|
160
161
|
uuid: 'ton-tonkeeper',
|
|
161
162
|
name: 'Tonkeeper',
|
|
@@ -165,13 +166,18 @@ describe('getTonWallets / bridge polling', () => {
|
|
|
165
166
|
}
|
|
166
167
|
mockWindow.tonWallets = [bridgeWallet]
|
|
167
168
|
|
|
168
|
-
//
|
|
169
|
-
|
|
169
|
+
// ...and the extension's real provider injected into THIS frame. The local
|
|
170
|
+
// one must win so the connection attributes to the iframe origin.
|
|
171
|
+
const localBridge = makeBridge('Tonkeeper')
|
|
172
|
+
mockWindow.tonkeeper = { tonconnect: localBridge }
|
|
170
173
|
|
|
171
174
|
const { getTonWallets } = await import('./ton-discovery')
|
|
172
175
|
const wallets = await getTonWallets([makeWalletMeta('tonkeeper')])
|
|
173
176
|
|
|
174
|
-
expect(wallets).
|
|
177
|
+
expect(wallets).toHaveLength(1)
|
|
178
|
+
expect(wallets[0].jsBridgeKey).toBe('tonkeeper')
|
|
179
|
+
expect(wallets[0].provider).toBe(localBridge)
|
|
180
|
+
expect(wallets[0].provider).not.toBe(bridgeWallet.provider)
|
|
175
181
|
})
|
|
176
182
|
|
|
177
183
|
it('returns empty array when bridge polling times out', async () => {
|
|
@@ -184,16 +190,50 @@ describe('getTonWallets / bridge polling', () => {
|
|
|
184
190
|
expect(wallets).toEqual([])
|
|
185
191
|
}, 3000)
|
|
186
192
|
|
|
187
|
-
it('
|
|
193
|
+
it('uses the in-frame (local) provider in bridge mode without waiting for the parent', async () => {
|
|
188
194
|
mockWindow.UWCBridgeChildInitialized = true
|
|
189
|
-
//
|
|
190
|
-
|
|
191
|
-
|
|
195
|
+
// In-frame provider present; parent never reports any wallets.
|
|
196
|
+
const localBridge = makeBridge('Tonkeeper')
|
|
197
|
+
mockWindow.tonkeeper = { tonconnect: localBridge }
|
|
192
198
|
|
|
193
199
|
const { getTonWallets } = await import('./ton-discovery')
|
|
194
200
|
const wallets = await getTonWallets([makeWalletMeta('tonkeeper')])
|
|
195
201
|
|
|
196
|
-
expect(wallets).
|
|
202
|
+
expect(wallets).toHaveLength(1)
|
|
203
|
+
expect(wallets[0].jsBridgeKey).toBe('tonkeeper')
|
|
204
|
+
expect(wallets[0].provider).toBe(localBridge)
|
|
205
|
+
})
|
|
206
|
+
|
|
207
|
+
it('prefers the in-frame OKX provider in bridge mode (detection is generic, not Tonkeeper-only)', async () => {
|
|
208
|
+
mockWindow.UWCBridgeChildInitialized = true
|
|
209
|
+
const localBridge = makeBridge('OKX Wallet')
|
|
210
|
+
mockWindow.okxTonWallet = { tonconnect: localBridge }
|
|
211
|
+
|
|
212
|
+
const { getTonWallets } = await import('./ton-discovery')
|
|
213
|
+
const wallets = await getTonWallets([makeWalletMeta('okxTonWallet')])
|
|
214
|
+
|
|
215
|
+
expect(wallets).toHaveLength(1)
|
|
216
|
+
expect(wallets[0].jsBridgeKey).toBe('okxTonWallet')
|
|
217
|
+
expect(wallets[0].provider).toBe(localBridge)
|
|
218
|
+
})
|
|
219
|
+
|
|
220
|
+
it('falls back to the parent-proxied list when nothing is present at window[jsBridgeKey] yet', async () => {
|
|
221
|
+
mockWindow.UWCBridgeChildInitialized = true
|
|
222
|
+
// Nothing at window.tonkeeper yet (before BridgeChild shims, or an old
|
|
223
|
+
// bridge-parent without TON support).
|
|
224
|
+
const bridgeWallet = {
|
|
225
|
+
uuid: 'ton-tonkeeper',
|
|
226
|
+
name: 'Tonkeeper',
|
|
227
|
+
icon: '',
|
|
228
|
+
jsBridgeKey: 'tonkeeper',
|
|
229
|
+
provider: makeBridge('Tonkeeper')
|
|
230
|
+
}
|
|
231
|
+
mockWindow.tonWallets = [bridgeWallet]
|
|
232
|
+
|
|
233
|
+
const { getTonWallets } = await import('./ton-discovery')
|
|
234
|
+
const wallets = await getTonWallets([makeWalletMeta('tonkeeper')])
|
|
235
|
+
|
|
236
|
+
expect(wallets).toEqual([bridgeWallet])
|
|
197
237
|
}, 3000)
|
|
198
238
|
|
|
199
239
|
it('picks up bridge wallets that appear after a delay', async () => {
|
package/src/ton-discovery.ts
CHANGED
|
@@ -112,15 +112,17 @@ export async function getTonWallets(
|
|
|
112
112
|
)
|
|
113
113
|
.filter((key): key is string => !!key)
|
|
114
114
|
|
|
115
|
-
// Bridge mode
|
|
115
|
+
// Bridge mode: prefer this frame's own provider (window[jsBridgeKey]) so connect
|
|
116
|
+
// attributes to the iframe origin; fall back to the parent list only
|
|
117
|
+
// when none is present.
|
|
116
118
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
117
119
|
// @ts-ignore - window.UWCBridgeChildInitialized is set by the bridge
|
|
118
120
|
if (window.UWCBridgeChildInitialized === true) {
|
|
119
|
-
const
|
|
120
|
-
if (
|
|
121
|
-
return
|
|
121
|
+
const local = discoverTonProviders(jsBridgeKeys)
|
|
122
|
+
if (local.length > 0) {
|
|
123
|
+
return local
|
|
122
124
|
}
|
|
123
|
-
return
|
|
125
|
+
return pollForBridgeTonWallets()
|
|
124
126
|
}
|
|
125
127
|
|
|
126
128
|
// Native discovery: direct window[key].tonconnect access
|