@meshconnect/uwc-injected-connector 0.15.1 → 0.15.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.
@@ -0,0 +1,2 @@
1
+ export declare const BRIDGE_WALLET_POLL_MS: number;
2
+ //# sourceMappingURL=bridge-poll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-poll.d.ts","sourceRoot":"","sources":["../src/bridge-poll.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,qBAAqB,QAAyB,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { MAX_POLL_MS } from '@meshconnect/uwc-bridge-child';
2
+ /**
3
+ * Consumer-side budget for the bridge wallet poll
4
+ * (pollForBridgeWallets in eip6963/wallet-standard/tron/ton-discovery.ts).
5
+ *
6
+ * Derived as the bridge child's own budget (MAX_POLL_MS) plus a grace margin, so
7
+ * the invariant "consumer budget > child budget" is enforced by construction
8
+ * rather than by a comment. Why it must hold:
9
+ * - The child writes window.{tron,ton}Wallets — real wallets, or [] via its
10
+ * fillEmptyDefaults backstop — up to its own MAX_POLL_MS deadline.
11
+ * - Consumer-side wallet detection is ONE-SHOT: UniversalWalletConnector runs
12
+ * it once at construction, and connectTron later reads the cached result. A
13
+ * missed wallet there throws "tron provider was not detected" until reload.
14
+ * - A wallet that becomes ready on the child's LAST tick is written a few ms
15
+ * AFTER MAX_POLL_MS (the marshal is a Comlink round-trip). The grace covers
16
+ * that tail, so an equal deadline can't let the consumer resolve [] on the
17
+ * same tick and cache it.
18
+ */
19
+ const GRACE_MS = 300;
20
+ export const BRIDGE_WALLET_POLL_MS = MAX_POLL_MS + GRACE_MS;
21
+ //# sourceMappingURL=bridge-poll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge-poll.js","sourceRoot":"","sources":["../src/bridge-poll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAA;AAE3D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,QAAQ,GAAG,GAAG,CAAA;AAEpB,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,GAAG,QAAQ,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"eip6963-discovery.d.ts","sourceRoot":"","sources":["../src/eip6963-discovery.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAG5D,MAAM,WAAW,gBAAgB;IAE/B,OAAO,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEvE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAA;IAE/D,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAA;CAC5E;AAED;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IAGvD,OAAO,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEvE,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAA;IAE9D,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAA;IAI1E,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,mBAAmB,CAAA;IACzB,QAAQ,EAAE,gBAAgB,CAAA;CAC3B;AAED,MAAM,WAAW,4BAA6B,SAAQ,WAAW;IAC/D,IAAI,EAAE,0BAA0B,CAAA;IAChC,MAAM,EAAE,qBAAqB,CAAA;CAC9B;AAED,MAAM,WAAW,2BAA4B,SAAQ,KAAK;IACxD,IAAI,EAAE,yBAAyB,CAAA;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,gBAAgB,CAAA;CAC3B;AAuCD;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAqDjE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,eAAe,GAAE,cAAc,EAAO,GACrC,OAAO,CAAC,cAAc,EAAE,CAAC,CAkD3B"}
1
+ {"version":3,"file":"eip6963-discovery.d.ts","sourceRoot":"","sources":["../src/eip6963-discovery.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAI5D,MAAM,WAAW,gBAAgB;IAE/B,OAAO,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEvE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAA;IAE/D,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAA;CAC5E;AAED;;;GAGG;AACH,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IAGvD,OAAO,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEvE,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAA;IAE9D,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAA;IAI1E,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,mBAAmB,CAAA;IACzB,QAAQ,EAAE,gBAAgB,CAAA;CAC3B;AAED,MAAM,WAAW,4BAA6B,SAAQ,WAAW;IAC/D,IAAI,EAAE,0BAA0B,CAAA;IAChC,MAAM,EAAE,qBAAqB,CAAA;CAC9B;AAED,MAAM,WAAW,2BAA4B,SAAQ,KAAK;IACxD,IAAI,EAAE,yBAAyB,CAAA;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,gBAAgB,CAAA;CAC3B;AA0CD;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAqDjE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,eAAe,GAAE,cAAc,EAAO,GACrC,OAAO,CAAC,cAAc,EAAE,CAAC,CAkD3B"}
@@ -3,13 +3,17 @@
3
3
  * https://eips.ethereum.org/EIPS/eip-6963
4
4
  */
5
5
  import { v4 as uuid } from 'uuid';
6
+ import { BRIDGE_WALLET_POLL_MS } from './bridge-poll';
6
7
  /**
7
8
  * Polls for bridge wallets when UWCBridgeInitialized is true
8
9
  * @returns Promise that resolves to an array of detected wallets from the bridge
9
10
  */
10
11
  async function pollForBridgeWallets() {
11
- const pollInterval = 100; // Poll every 100ms
12
- const maxPollTime = 3000; // Poll for maximum 3 seconds
12
+ const pollInterval = 50; // Poll every 50ms
13
+ // Consumer budget see BRIDGE_WALLET_POLL_MS for rationale (couples this
14
+ // to the bridge child's MAX_POLL_MS + grace so we don't resolve `[]` while
15
+ // the child is still marshalling).
16
+ const maxPollTime = BRIDGE_WALLET_POLL_MS;
13
17
  const startTime = Date.now();
14
18
  return new Promise(resolve => {
15
19
  const poll = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"eip6963-discovery.js","sourceRoot":"","sources":["../src/eip6963-discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eip6963-discovery.js","sourceRoot":"","sources":["../src/eip6963-discovery.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAA;AACjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AA0DrD;;;GAGG;AACH,KAAK,UAAU,oBAAoB;IACjC,MAAM,YAAY,GAAG,EAAE,CAAA,CAAC,kBAAkB;IAC1C,0EAA0E;IAC1E,2EAA2E;IAC3E,mCAAmC;IACnC,MAAM,WAAW,GAAG,qBAAqB,CAAA;IACzC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAE5B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,IAAI,GAAG,GAAG,EAAE;YAChB,4CAA4C;YAC5C,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,WAAW,EAAE,CAAC;gBACzC,OAAO,CAAC,EAAE,CAAC,CAAA;gBACX,OAAM;YACR,CAAC;YAED,8CAA8C;YAC9C,6DAA6D;YAC7D,0DAA0D;YAC1D,IAAI,MAAM,CAAC,cAAc,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;gBAClE,6DAA6D;gBAC7D,aAAa;gBACb,MAAM,aAAa,GAAG,MAAM,CAAC,cAAkC,CAAA;gBAC/D,OAAO,CAAC,aAAa,CAAC,CAAA;gBACtB,OAAM;YACR,CAAC;YAED,mBAAmB;YACnB,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;QAChC,CAAC,CAAA;QAED,gBAAgB;QAChB,IAAI,EAAE,CAAA;IACR,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,6CAA6C;IAC7C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,EAAE,CAAA;IACX,CAAC;IACD,mJAAmJ;IACnJ,6DAA6D;IAC7D,gEAAgE;IAChE,IAAI,MAAM,CAAC,yBAAyB,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,oBAAoB,EAAE,CAAA;QAE5C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,OAAO,CAAA;QAChB,CAAC;IACH,CAAC;IAED,8BAA8B;IAC9B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,eAAe,GAAqB,EAAE,CAAA;QAC5C,MAAM,OAAO,GAAG,GAAG,CAAA,CAAC,4CAA4C;QAEhE,2CAA2C;QAC3C,MAAM,kBAAkB,GAAG,CAAC,KAAY,EAAE,EAAE;YAC1C,MAAM,iBAAiB,GAAG,KAAqC,CAAA;YAC/D,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAA;YAEnD,gDAAgD;YAChD,MAAM,aAAa,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAA;YAE1E,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;gBACzB,eAAe,CAAC,IAAI,CAAC;oBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ;iBACT,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAA;QAED,kCAAkC;QAClC,MAAM,CAAC,gBAAgB,CAAC,0BAA0B,EAAE,kBAAkB,CAAC,CAAA;QAEvE,yCAAyC;QACzC,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAA;QAE1D,qCAAqC;QACrC,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,CAAC,mBAAmB,CAAC,0BAA0B,EAAE,kBAAkB,CAAC,CAAA;YAE1E,OAAO,CAAC,eAAe,CAAC,CAAA;QAC1B,CAAC,EAAE,OAAO,CAAC,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,kBAAoC,EAAE;IAEtC,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,MAAM,eAAe,EAAE,CAAA;QAE/C,+DAA+D;QAC/D,6DAA6D;QAC7D,qDAAqD;QACrD,IAAI,MAAM,CAAC,QAAQ,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,6DAA6D;YAC7D,qDAAqD;YACrD,MAAM,cAAc,GAAG,MAAM,CAAC,QAA2B,CAAA;YAEzD,uEAAuE;YACvE,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAClD,MAAM,UAAU,GACd,MAAM,CAAC,yBAAyB,EAAE,iBAAiB,CAAC,MAAM;oBACxD,EAAE,UAAU,IAAI,EAAE,CAAA;gBAEtB,uEAAuE;gBACvE,0GAA0G;gBAC1G,OAAO,UAAU,IAAI,cAAc,CAAC,UAAU,CAAC,KAAK,IAAI,CAAA;YAC1D,CAAC,CAAC,CAAA;YAEF,IAAI,aAAa,EAAE,CAAC;gBAClB,4EAA4E;gBAC5E,MAAM,iBAAiB,GAAG,eAAe,CAAC,IAAI,CAC5C,cAAc,CAAC,EAAE,CACf,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE;oBACjC,aAAa,CAAC,yBAAyB,EAAE,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,CAC/F,CAAA;gBAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACvB,eAAe,CAAC,IAAI,CAAC;wBACnB,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE;wBAC9C,IAAI,EACF,aAAa,CAAC,yBAAyB,EAAE,iBAAiB,CAAC,MAAM;4BAC/D,EAAE,UAAU,IAAI,aAAa,CAAC,IAAI;wBACtC,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE;wBAC1C,IAAI,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE;wBAC1C,QAAQ,EAAE,cAAc;qBACzB,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,eAAe,CAAA;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;QACxC,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC"}
@@ -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,CA0B9B"}
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;AAG5D,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;AAiFD,wBAAsB,aAAa,CACjC,eAAe,GAAE,cAAc,EAAO,GACrC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA0B9B"}
@@ -6,6 +6,7 @@
6
6
  * window[jsBridgeKey].tonconnect. Unlike EVM (EIP-6963), there is no
7
7
  * announcement event — we check known keys from wallet config.
8
8
  */
9
+ import { BRIDGE_WALLET_POLL_MS } from './bridge-poll';
9
10
  function isTonConnectBridge(value) {
10
11
  if (!value || typeof value !== 'object')
11
12
  return false;
@@ -47,8 +48,10 @@ function discoverTonProviders(jsBridgeKeys) {
47
48
  return wallets;
48
49
  }
49
50
  async function pollForBridgeTonWallets() {
50
- const pollInterval = 100;
51
- const maxPollTime = 1000;
51
+ const pollInterval = 50;
52
+ // Consumer poll budget — see BRIDGE_WALLET_POLL_MS for rationale + the
53
+ // must-exceed-child-budget invariant. Ceiling, not a fixed wait.
54
+ const maxPollTime = BRIDGE_WALLET_POLL_MS;
52
55
  const startTime = Date.now();
53
56
  return new Promise(resolve => {
54
57
  const poll = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"ton-discovery.js","sourceRoot":"","sources":["../src/ton-discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ton-discovery.js","sourceRoot":"","sources":["../src/ton-discovery.ts"],"names":[],"mappings":"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"}
@@ -58,8 +58,7 @@ export interface DetectedTronWallet {
58
58
  /**
59
59
  * Discovers Tron wallets by checking known injection paths on the window object.
60
60
  * When running inside an iframe with the UWC bridge, checks for bridge-proxied
61
- * wallets first. Otherwise polls for up to 3 seconds to handle wallets that
62
- * inject their provider lazily.
61
+ * wallets first. Otherwise checks injected providers on the window object.
63
62
  */
64
63
  export declare function getTronWallets(expectedWallets?: WalletMetadata[]): Promise<DetectedTronWallet[]>;
65
64
  //# sourceMappingURL=tron-discovery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tron-discovery.d.ts","sourceRoot":"","sources":["../src/tron-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAE5D,MAAM,WAAW,OAAO;IACtB,cAAc,CAAC,EAAE;QACf,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;QACvB,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;KACrB,CAAA;IACD,kEAAkE;IAClE,iBAAiB,CAAC,IAAI,OAAO,CAAC;QAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;QACvB,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;KACrB,CAAC,CAAA;IACF,GAAG,EAAE;QACH,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;QAC5C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;QAC/C,kBAAkB,CAAC,iBAAiB,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;KACjE,CAAA;IACD,kBAAkB,EAAE;QAElB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QAC/D,oBAAoB,CAClB,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,EAExB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAE5B,SAAS,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,GAAG,CAAA;SAAE,CAAC,EAC9C,aAAa,EAAE,MAAM,GAEpB,OAAO,CAAC;YAAE,WAAW,EAAE,GAAG,CAAC;YAAC,MAAM,EAAE;gBAAE,MAAM,EAAE,OAAO,CAAA;aAAE,CAAA;SAAE,CAAC,CAAA;KAC9D,CAAA;IACD,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;IAE9B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACxE,OAAO,EAAE,OAAO,CAAA;IAEhB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,YAAY,CAAA;CACvB;AA6FD;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,eAAe,GAAE,cAAc,EAAO,GACrC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAyB/B"}
1
+ {"version":3,"file":"tron-discovery.d.ts","sourceRoot":"","sources":["../src/tron-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAG5D,MAAM,WAAW,OAAO;IACtB,cAAc,CAAC,EAAE;QACf,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;QACvB,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;KACrB,CAAA;IACD,kEAAkE;IAClE,iBAAiB,CAAC,IAAI,OAAO,CAAC;QAC5B,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;QACvB,GAAG,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;KACrB,CAAC,CAAA;IACF,GAAG,EAAE;QACH,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;QAC5C,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;QAC/C,kBAAkB,CAAC,iBAAiB,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;KACjE,CAAA;IACD,kBAAkB,EAAE;QAElB,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;QAC/D,oBAAoB,CAClB,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,EAExB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAE5B,SAAS,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,GAAG,CAAA;SAAE,CAAC,EAC9C,aAAa,EAAE,MAAM,GAEpB,OAAO,CAAC;YAAE,WAAW,EAAE,GAAG,CAAC;YAAC,MAAM,EAAE;gBAAE,MAAM,EAAE,OAAO,CAAA;aAAE,CAAA;SAAE,CAAC,CAAA;KAC9D,CAAA;IACD,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAA;IAE9B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACxE,OAAO,EAAE,OAAO,CAAA;IAEhB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,YAAY,CAAA;CACvB;AAiGD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,eAAe,GAAE,cAAc,EAAO,GACrC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAyB/B"}
@@ -9,6 +9,7 @@
9
9
  *
10
10
  * Each provider has a `tronWeb` property containing the TronWeb API.
11
11
  */
12
+ import { BRIDGE_WALLET_POLL_MS } from './bridge-poll';
12
13
  /**
13
14
  * Resolves a nested property on the window object using dot notation
14
15
  */
@@ -60,8 +61,12 @@ function discoverTronProviders(injectedIds) {
60
61
  * Polls for bridge Tron wallets when UWCBridgeChildInitialized is true
61
62
  */
62
63
  async function pollForBridgeTronWallets() {
63
- const pollInterval = 100;
64
- const maxPollTime = 1000;
64
+ const pollInterval = 50;
65
+ // Consumer poll budget — rationale + the must-exceed-child-budget invariant
66
+ // are documented on BRIDGE_WALLET_POLL_MS. The child resolves the array (real
67
+ // wallets or []) as soon as the parent answers, so this is a ceiling, not a
68
+ // fixed wait.
69
+ const maxPollTime = BRIDGE_WALLET_POLL_MS;
65
70
  const startTime = Date.now();
66
71
  return new Promise(resolve => {
67
72
  const poll = () => {
@@ -86,28 +91,24 @@ async function pollForBridgeTronWallets() {
86
91
  /**
87
92
  * Discovers Tron wallets by checking known injection paths on the window object.
88
93
  * When running inside an iframe with the UWC bridge, checks for bridge-proxied
89
- * wallets first. Otherwise polls for up to 3 seconds to handle wallets that
90
- * inject their provider lazily.
94
+ * wallets first. Otherwise checks injected providers on the window object.
91
95
  */
92
96
  export async function getTronWallets(expectedWallets = []) {
93
97
  try {
94
98
  const injectedIds = expectedWallets
95
99
  .map(w => w.extensionInjectedProvider?.namespaceMetaData?.tron?.injectedId)
96
100
  .filter((id) => !!id);
97
- // Check for bridge-proxied wallets first (iframe mode)
98
101
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
99
102
  // @ts-ignore - window.UWCBridgeChildInitialized is set by the bridge
100
- if (window.UWCBridgeChildInitialized === true) {
103
+ const bridgeMode = window.UWCBridgeChildInitialized === true;
104
+ // Check for bridge-proxied wallets first (iframe mode)
105
+ if (bridgeMode) {
101
106
  const wallets = await pollForBridgeTronWallets();
102
- if (wallets.length > 0) {
103
- return wallets;
104
- }
107
+ return wallets.length > 0 ? wallets : [];
105
108
  }
106
- else {
107
- // Native discovery: check injected providers on the window object, only if bridge parent is not initialized
108
- return discoverTronProviders(injectedIds);
109
- }
110
- return [];
109
+ // Native discovery: check injected providers on the window object.
110
+ const wallets = discoverTronProviders(injectedIds);
111
+ return wallets;
111
112
  }
112
113
  catch {
113
114
  // Return empty array if discovery fails
@@ -1 +1 @@
1
- {"version":3,"file":"tron-discovery.js","sourceRoot":"","sources":["../src/tron-discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tron-discovery.js","sourceRoot":"","sources":["../src/tron-discovery.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAmDrD;;GAEG;AACH,SAAS,iBAAiB;AACxB,8DAA8D;AAC9D,GAAwB,EACxB,IAAY;AACZ,8DAA8D;;IAE9D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAA;AAChE,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACrD,MAAM,QAAQ,GAAG,KAAgC,CAAA;IACjD,OAAO,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,SAAS,IAAI,QAAQ,CAAA;AAC7D,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,UAAkB;IAC1C,OAAO,QAAQ,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AAC/D,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,WAAqB;IAClD,MAAM,OAAO,GAAyB,EAAE,CAAA;IACxC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAE9B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAG,iBAAiB,CAChC,MAA4C,EAC5C,UAAU,CACX,CAAA;QAED,IAAI,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACtD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;YAEpB,6CAA6C;YAC7C,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAA;YAEnD,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,gBAAgB,CAAC,UAAU,CAAC;gBAClC,IAAI;gBACJ,UAAU;gBACV,QAAQ;aACT,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,wBAAwB;IACrC,MAAM,YAAY,GAAG,EAAE,CAAA;IACvB,4EAA4E;IAC5E,8EAA8E;IAC9E,4EAA4E;IAC5E,cAAc;IACd,MAAM,WAAW,GAAG,qBAAqB,CAAA;IACzC,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,uDAAuD;YACvD,IAAI,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC5D,6DAA6D;gBAC7D,aAAa;gBACb,MAAM,aAAa,GAAG,MAAM,CAAC,WAAmC,CAAA;gBAChE,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;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,kBAAoC,EAAE;IAEtC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,eAAe;aAChC,GAAG,CACF,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,yBAAyB,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,CACtE;aACA,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;QAErC,6DAA6D;QAC7D,qEAAqE;QACrE,MAAM,UAAU,GAAG,MAAM,CAAC,yBAAyB,KAAK,IAAI,CAAA;QAE5D,uDAAuD;QACvD,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,MAAM,wBAAwB,EAAE,CAAA;YAChD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1C,CAAC;QAED,mEAAmE;QACnE,MAAM,OAAO,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAA;QAClD,OAAO,OAAO,CAAA;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;QACxC,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-standard-discovery.d.ts","sourceRoot":"","sources":["../src/wallet-standard-discovery.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAA;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAElD,MAAM,WAAW,6BAA8B,SAAQ,qBAAqB;IAC1E,eAAe,EAAE,CACb,2BAA2B,GAC3B,2BAA2B,GAC3B,+BAA+B,GAC/B,4BAA4B,CAC/B,EAAE,CAAA;IACH,yBAAyB,EAAE,CACzB,WAAW,EAAE,OAAO,EACpB,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,MAAM,CAAC,CAAA;IACpB,yBAAyB,EAAE,CACzB,WAAW,EAAE,OAAO,KACjB,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,CAAA;IACjC,6BAA6B,EAAE,CAC7B,YAAY,EAAE,OAAO,EAAE,KACpB,OAAO,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC,CAAA;IAGnC,0BAA0B,EAAE,CAC1B,WAAW,EAAE,OAAO,EACpB,gBAAgB,CAAC,EAAE,MAAM,KACtB,OAAO,CAAC,UAAU,CAAC,CAAA;CACzB;AAED,MAAM,MAAM,aAAa,GACrB,6BAA6B,GAC7B,qBAAqB,CAAA;AAEzB,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,EAAE,aAAa,GAAG,SAAS,CAAA;CACnC;AA6CD;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAwCtE"}
1
+ {"version":3,"file":"wallet-standard-discovery.d.ts","sourceRoot":"","sources":["../src/wallet-standard-discovery.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAA;AACnF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAGlD,MAAM,WAAW,6BAA8B,SAAQ,qBAAqB;IAC1E,eAAe,EAAE,CACb,2BAA2B,GAC3B,2BAA2B,GAC3B,+BAA+B,GAC/B,4BAA4B,CAC/B,EAAE,CAAA;IACH,yBAAyB,EAAE,CACzB,WAAW,EAAE,OAAO,EACpB,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,MAAM,CAAC,CAAA;IACpB,yBAAyB,EAAE,CACzB,WAAW,EAAE,OAAO,KACjB,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,CAAA;IACjC,6BAA6B,EAAE,CAC7B,YAAY,EAAE,OAAO,EAAE,KACpB,OAAO,CAAC,KAAK,GAAG,WAAW,EAAE,CAAC,CAAA;IAGnC,0BAA0B,EAAE,CAC1B,WAAW,EAAE,OAAO,EACpB,gBAAgB,CAAC,EAAE,MAAM,KACtB,OAAO,CAAC,UAAU,CAAC,CAAA;CACzB;AAED,MAAM,MAAM,aAAa,GACrB,6BAA6B,GAC7B,qBAAqB,CAAA;AAEzB,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,EAAE,aAAa,GAAG,SAAS,CAAA;CACnC;AAiDD;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAwCtE"}
@@ -6,13 +6,18 @@
6
6
  import { getWallets } from '@wallet-standard/app';
7
7
  import { isWalletAdapterCompatibleStandardWallet } from '@solana/wallet-adapter-base';
8
8
  import { StandardWalletAdapter } from '@solana/wallet-standard-wallet-adapter-base';
9
+ import { BRIDGE_WALLET_POLL_MS } from './bridge-poll';
9
10
  /**
10
11
  * Polls for bridge wallets when UWCBridgeInitialized is true
11
12
  * @returns Promise that resolves to an array of detected wallets from the bridge
12
13
  */
13
14
  async function pollForBridgeWallets() {
14
- const pollInterval = 100; // Poll every 100ms
15
- const maxPollTime = 3000; // Poll for maximum 3 seconds
15
+ const pollInterval = 50; // Poll every 50ms
16
+ // Consumer budget see BRIDGE_WALLET_POLL_MS for rationale. Even though
17
+ // Solana is published early by BridgeParent, a late-exposing parent can
18
+ // push the child's marshal past 500ms; that race silently cached Solana
19
+ // injected wallets as "not installed".
20
+ const maxPollTime = BRIDGE_WALLET_POLL_MS;
16
21
  const startTime = Date.now();
17
22
  return new Promise(resolve => {
18
23
  const poll = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"wallet-standard-discovery.js","sourceRoot":"","sources":["../src/wallet-standard-discovery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wallet-standard-discovery.js","sourceRoot":"","sources":["../src/wallet-standard-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.15.1",
3
+ "version": "0.15.2",
4
4
  "description": "Injected connector for Universal Wallet Connector",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -27,7 +27,7 @@
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.2",
30
+ "@meshconnect/uwc-bridge-child": "0.2.3",
31
31
  "@meshconnect/uwc-constants": "0.6.7",
32
32
  "@meshconnect/uwc-ton-connector": "0.6.6",
33
33
  "@meshconnect/uwc-tron-connector": "0.3.0",
@@ -0,0 +1,22 @@
1
+ import { MAX_POLL_MS } from '@meshconnect/uwc-bridge-child'
2
+
3
+ /**
4
+ * Consumer-side budget for the bridge wallet poll
5
+ * (pollForBridgeWallets in eip6963/wallet-standard/tron/ton-discovery.ts).
6
+ *
7
+ * Derived as the bridge child's own budget (MAX_POLL_MS) plus a grace margin, so
8
+ * the invariant "consumer budget > child budget" is enforced by construction
9
+ * rather than by a comment. Why it must hold:
10
+ * - The child writes window.{tron,ton}Wallets — real wallets, or [] via its
11
+ * fillEmptyDefaults backstop — up to its own MAX_POLL_MS deadline.
12
+ * - Consumer-side wallet detection is ONE-SHOT: UniversalWalletConnector runs
13
+ * it once at construction, and connectTron later reads the cached result. A
14
+ * missed wallet there throws "tron provider was not detected" until reload.
15
+ * - A wallet that becomes ready on the child's LAST tick is written a few ms
16
+ * AFTER MAX_POLL_MS (the marshal is a Comlink round-trip). The grace covers
17
+ * that tail, so an equal deadline can't let the consumer resolve [] on the
18
+ * same tick and cache it.
19
+ */
20
+ const GRACE_MS = 300
21
+
22
+ export const BRIDGE_WALLET_POLL_MS = MAX_POLL_MS + GRACE_MS
@@ -76,7 +76,7 @@ describe('EIP-6963 Discovery', () => {
76
76
  const result = await discoverWallets()
77
77
 
78
78
  expect(result).toEqual([])
79
- })
79
+ }, 7000)
80
80
 
81
81
  it('should handle invalid bridge wallets array', async () => {
82
82
  mockWindow.UWCBridgeChildInitialized = true
@@ -85,7 +85,7 @@ describe('EIP-6963 Discovery', () => {
85
85
  const result = await discoverWallets()
86
86
 
87
87
  expect(result).toEqual([])
88
- })
88
+ }, 7000)
89
89
  })
90
90
 
91
91
  describe('getAvailableWallets', () => {
@@ -5,6 +5,7 @@
5
5
 
6
6
  import type { WalletMetadata } from '@meshconnect/uwc-types'
7
7
  import { v4 as uuid } from 'uuid'
8
+ import { BRIDGE_WALLET_POLL_MS } from './bridge-poll'
8
9
 
9
10
  export interface EthereumProvider {
10
11
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -67,8 +68,11 @@ export interface DetectedWallet {
67
68
  * @returns Promise that resolves to an array of detected wallets from the bridge
68
69
  */
69
70
  async function pollForBridgeWallets(): Promise<DetectedWallet[]> {
70
- const pollInterval = 100 // Poll every 100ms
71
- const maxPollTime = 3000 // Poll for maximum 3 seconds
71
+ const pollInterval = 50 // Poll every 50ms
72
+ // Consumer budget see BRIDGE_WALLET_POLL_MS for rationale (couples this
73
+ // to the bridge child's MAX_POLL_MS + grace so we don't resolve `[]` while
74
+ // the child is still marshalling).
75
+ const maxPollTime = BRIDGE_WALLET_POLL_MS
72
76
  const startTime = Date.now()
73
77
 
74
78
  return new Promise(resolve => {
@@ -14,7 +14,10 @@ vi.mock('./services/tron/tron-wallet-service')
14
14
  vi.mock('./services/connection-manager')
15
15
  vi.mock('./services/signature-service')
16
16
  vi.mock('./services/transaction-service')
17
- vi.mock('@meshconnect/uwc-bridge-child', () => ({ BridgeChild: vi.fn() }))
17
+ vi.mock('@meshconnect/uwc-bridge-child', () => ({
18
+ BridgeChild: vi.fn(),
19
+ MAX_POLL_MS: 5000
20
+ }))
18
21
 
19
22
  // SolanaWalletService needs fine-grained control — we mock at the module level
20
23
  // and override getConnectedAdapter per test.
@@ -142,6 +142,7 @@ describe('getTonWallets / discoverTonProviders', () => {
142
142
  describe('getTonWallets / bridge polling', () => {
143
143
  beforeEach(() => {
144
144
  vi.resetModules()
145
+ vi.useFakeTimers()
145
146
  mockWindow.UWCBridgeChildInitialized = undefined
146
147
  mockWindow.tonkeeper = undefined
147
148
  mockWindow.mytonwallet = undefined
@@ -150,6 +151,7 @@ describe('getTonWallets / bridge polling', () => {
150
151
  })
151
152
 
152
153
  afterEach(() => {
154
+ vi.useRealTimers()
153
155
  vi.restoreAllMocks()
154
156
  })
155
157
 
@@ -185,10 +187,12 @@ describe('getTonWallets / bridge polling', () => {
185
187
  // No tonWallets set — polling will time out
186
188
 
187
189
  const { getTonWallets } = await import('./ton-discovery')
188
- const wallets = await getTonWallets([makeWalletMeta('tonkeeper')])
190
+ const resultPromise = getTonWallets([makeWalletMeta('tonkeeper')])
191
+ await vi.advanceTimersByTimeAsync(5400)
192
+ const wallets = await resultPromise
189
193
 
190
194
  expect(wallets).toEqual([])
191
- }, 3000)
195
+ })
192
196
 
193
197
  it('uses the in-frame (local) provider in bridge mode without waiting for the parent', async () => {
194
198
  mockWindow.UWCBridgeChildInitialized = true
@@ -197,7 +201,9 @@ describe('getTonWallets / bridge polling', () => {
197
201
  mockWindow.tonkeeper = { tonconnect: localBridge }
198
202
 
199
203
  const { getTonWallets } = await import('./ton-discovery')
200
- const wallets = await getTonWallets([makeWalletMeta('tonkeeper')])
204
+ const resultPromise = getTonWallets([makeWalletMeta('tonkeeper')])
205
+ await vi.advanceTimersByTimeAsync(5400)
206
+ const wallets = await resultPromise
201
207
 
202
208
  expect(wallets).toHaveLength(1)
203
209
  expect(wallets[0].jsBridgeKey).toBe('tonkeeper')
@@ -253,18 +259,46 @@ describe('getTonWallets / bridge polling', () => {
253
259
  }, 200)
254
260
 
255
261
  const { getTonWallets } = await import('./ton-discovery')
256
- const wallets = await getTonWallets([makeWalletMeta('tonkeeper')])
262
+ const resultPromise = getTonWallets([makeWalletMeta('tonkeeper')])
263
+ await vi.advanceTimersByTimeAsync(400)
264
+ const wallets = await resultPromise
257
265
 
258
266
  expect(wallets).toEqual([bridgeWallet])
259
- }, 3000)
267
+ })
260
268
 
261
269
  it('handles invalid bridge wallets array', async () => {
262
270
  mockWindow.UWCBridgeChildInitialized = true
263
271
  mockWindow.tonWallets = 'not-an-array'
264
272
 
265
273
  const { getTonWallets } = await import('./ton-discovery')
266
- const wallets = await getTonWallets([makeWalletMeta('tonkeeper')])
274
+ const resultPromise = getTonWallets([makeWalletMeta('tonkeeper')])
275
+ await vi.advanceTimersByTimeAsync(5400)
276
+ const wallets = await resultPromise
267
277
 
268
278
  expect(wallets).toEqual([])
269
- }, 3000)
279
+ })
280
+
281
+ it('picks up a wallet the child writes inside the grace window (t≈5050ms)', async () => {
282
+ // The child can marshal on its final tick, writing window.tonWallets just
283
+ // after its own 5000ms budget. The consumer's BRIDGE_WALLET_POLL_MS (5300ms)
284
+ // grace must still observe it — an equal 5000ms deadline would miss it.
285
+ mockWindow.UWCBridgeChildInitialized = true
286
+ const bridgeWallet = {
287
+ uuid: 'ton-tonkeeper',
288
+ name: 'Tonkeeper',
289
+ icon: '',
290
+ jsBridgeKey: 'tonkeeper',
291
+ provider: makeBridge('Tonkeeper')
292
+ }
293
+ setTimeout(() => {
294
+ mockWindow.tonWallets = [bridgeWallet]
295
+ }, 5050)
296
+
297
+ const { getTonWallets } = await import('./ton-discovery')
298
+ const resultPromise = getTonWallets([makeWalletMeta('tonkeeper')])
299
+ await vi.advanceTimersByTimeAsync(5200)
300
+ const wallets = await resultPromise
301
+
302
+ expect(wallets).toEqual([bridgeWallet])
303
+ })
270
304
  })
@@ -8,6 +8,7 @@
8
8
  */
9
9
 
10
10
  import type { WalletMetadata } from '@meshconnect/uwc-types'
11
+ import { BRIDGE_WALLET_POLL_MS } from './bridge-poll'
11
12
 
12
13
  interface TonConnectBridge {
13
14
  deviceInfo: { platform: string; appName: string }
@@ -74,8 +75,10 @@ function discoverTonProviders(jsBridgeKeys: string[]): DetectedTonWallet[] {
74
75
  }
75
76
 
76
77
  async function pollForBridgeTonWallets(): Promise<DetectedTonWallet[]> {
77
- const pollInterval = 100
78
- const maxPollTime = 1000
78
+ const pollInterval = 50
79
+ // Consumer poll budget — see BRIDGE_WALLET_POLL_MS for rationale + the
80
+ // must-exceed-child-budget invariant. Ceiling, not a fixed wait.
81
+ const maxPollTime = BRIDGE_WALLET_POLL_MS
79
82
  const startTime = Date.now()
80
83
 
81
84
  return new Promise(resolve => {
@@ -236,8 +236,8 @@ describe('Tron Discovery', () => {
236
236
 
237
237
  const resultPromise = getTronWallets()
238
238
 
239
- // Fast-forward past the 1000ms max poll time
240
- await vi.advanceTimersByTimeAsync(1200)
239
+ // Fast-forward past the bridge poll budget (BRIDGE_WALLET_POLL_MS = 5300ms)
240
+ await vi.advanceTimersByTimeAsync(5400)
241
241
 
242
242
  const result = await resultPromise
243
243
 
@@ -251,7 +251,7 @@ describe('Tron Discovery', () => {
251
251
  const { getTronWallets } = await import('./tron-discovery')
252
252
 
253
253
  const resultPromise = getTronWallets()
254
- await vi.advanceTimersByTimeAsync(1200)
254
+ await vi.advanceTimersByTimeAsync(5400)
255
255
 
256
256
  const result = await resultPromise
257
257
 
@@ -301,8 +301,8 @@ describe('Tron Discovery', () => {
301
301
 
302
302
  const resultPromise = getTronWallets(createExpectedWallets(['tronLink']))
303
303
 
304
- // Fast-forward past the 1000ms max poll time
305
- await vi.advanceTimersByTimeAsync(1200)
304
+ // Fast-forward past the bridge poll budget (BRIDGE_WALLET_POLL_MS = 5300ms)
305
+ await vi.advanceTimersByTimeAsync(5400)
306
306
 
307
307
  const result = await resultPromise
308
308
 
@@ -323,6 +323,29 @@ describe('Tron Discovery', () => {
323
323
  expect(result[0].uuid).toBe('tron-tronlink')
324
324
  expect(result[0].injectedId).toBe('tronLink')
325
325
  })
326
+
327
+ it('picks up a wallet the child writes inside the grace window (t≈5050ms)', async () => {
328
+ // The child can marshal on its final tick, writing window.tronWallets just
329
+ // after its own 5000ms budget. The consumer's BRIDGE_WALLET_POLL_MS (5300ms)
330
+ // grace must still observe it — an equal 5000ms deadline would miss it.
331
+ mockWindow.UWCBridgeChildInitialized = true
332
+ const bridgeWallet = {
333
+ uuid: 'tron-tronlink',
334
+ name: 'tronLink',
335
+ injectedId: 'tronLink',
336
+ provider: createMockTronProvider()
337
+ }
338
+ setTimeout(() => {
339
+ mockWindow.tronWallets = [bridgeWallet]
340
+ }, 5050)
341
+
342
+ const { getTronWallets } = await import('./tron-discovery')
343
+ const resultPromise = getTronWallets()
344
+ await vi.advanceTimersByTimeAsync(5200)
345
+ const result = await resultPromise
346
+
347
+ expect(result).toEqual([bridgeWallet])
348
+ })
326
349
  })
327
350
 
328
351
  describe('error handling', () => {
@@ -11,6 +11,7 @@
11
11
  */
12
12
 
13
13
  import type { WalletMetadata } from '@meshconnect/uwc-types'
14
+ import { BRIDGE_WALLET_POLL_MS } from './bridge-poll'
14
15
 
15
16
  export interface TronWeb {
16
17
  defaultAddress?: {
@@ -124,8 +125,12 @@ function discoverTronProviders(injectedIds: string[]): DetectedTronWallet[] {
124
125
  * Polls for bridge Tron wallets when UWCBridgeChildInitialized is true
125
126
  */
126
127
  async function pollForBridgeTronWallets(): Promise<DetectedTronWallet[]> {
127
- const pollInterval = 100
128
- const maxPollTime = 1000
128
+ const pollInterval = 50
129
+ // Consumer poll budget — rationale + the must-exceed-child-budget invariant
130
+ // are documented on BRIDGE_WALLET_POLL_MS. The child resolves the array (real
131
+ // wallets or []) as soon as the parent answers, so this is a ceiling, not a
132
+ // fixed wait.
133
+ const maxPollTime = BRIDGE_WALLET_POLL_MS
129
134
  const startTime = Date.now()
130
135
 
131
136
  return new Promise(resolve => {
@@ -155,8 +160,7 @@ async function pollForBridgeTronWallets(): Promise<DetectedTronWallet[]> {
155
160
  /**
156
161
  * Discovers Tron wallets by checking known injection paths on the window object.
157
162
  * When running inside an iframe with the UWC bridge, checks for bridge-proxied
158
- * wallets first. Otherwise polls for up to 3 seconds to handle wallets that
159
- * inject their provider lazily.
163
+ * wallets first. Otherwise checks injected providers on the window object.
160
164
  */
161
165
  export async function getTronWallets(
162
166
  expectedWallets: WalletMetadata[] = []
@@ -168,19 +172,19 @@ export async function getTronWallets(
168
172
  )
169
173
  .filter((id): id is string => !!id)
170
174
 
171
- // Check for bridge-proxied wallets first (iframe mode)
172
175
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
173
176
  // @ts-ignore - window.UWCBridgeChildInitialized is set by the bridge
174
- if (window.UWCBridgeChildInitialized === true) {
177
+ const bridgeMode = window.UWCBridgeChildInitialized === true
178
+
179
+ // Check for bridge-proxied wallets first (iframe mode)
180
+ if (bridgeMode) {
175
181
  const wallets = await pollForBridgeTronWallets()
176
- if (wallets.length > 0) {
177
- return wallets
178
- }
179
- } else {
180
- // Native discovery: check injected providers on the window object, only if bridge parent is not initialized
181
- return discoverTronProviders(injectedIds)
182
+ return wallets.length > 0 ? wallets : []
182
183
  }
183
- return []
184
+
185
+ // Native discovery: check injected providers on the window object.
186
+ const wallets = discoverTronProviders(injectedIds)
187
+ return wallets
184
188
  } catch {
185
189
  // Return empty array if discovery fails
186
190
  return []
@@ -9,6 +9,7 @@ import { getWallets } from '@wallet-standard/app'
9
9
  import { isWalletAdapterCompatibleStandardWallet } from '@solana/wallet-adapter-base'
10
10
  import { StandardWalletAdapter } from '@solana/wallet-standard-wallet-adapter-base'
11
11
  import type { Transaction } from '@solana/web3.js'
12
+ import { BRIDGE_WALLET_POLL_MS } from './bridge-poll'
12
13
 
13
14
  export interface ExtendedStandardWalletAdapter extends StandardWalletAdapter {
14
15
  customFunctions: (
@@ -52,8 +53,12 @@ export interface WalletStandardInfo {
52
53
  * @returns Promise that resolves to an array of detected wallets from the bridge
53
54
  */
54
55
  async function pollForBridgeWallets(): Promise<WalletStandardInfo[]> {
55
- const pollInterval = 100 // Poll every 100ms
56
- const maxPollTime = 3000 // Poll for maximum 3 seconds
56
+ const pollInterval = 50 // Poll every 50ms
57
+ // Consumer budget see BRIDGE_WALLET_POLL_MS for rationale. Even though
58
+ // Solana is published early by BridgeParent, a late-exposing parent can
59
+ // push the child's marshal past 500ms; that race silently cached Solana
60
+ // injected wallets as "not installed".
61
+ const maxPollTime = BRIDGE_WALLET_POLL_MS
57
62
  const startTime = Date.now()
58
63
 
59
64
  return new Promise(resolve => {