@onekeyfe/onekey-alph-provider 2.2.61 → 2.2.63

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,13 +1,12 @@
1
1
  import { IInpageProviderConfig } from '@onekeyfe/cross-inpage-provider-core';
2
2
  import { AlephiumWindowObject, EnableOptions, RequestMessage } from '@alephium/get-extension-wallet';
3
- import { NodeProvider, ExplorerProvider, InteractiveSignerProvider } from '@alephium/web3';
4
- import type { EnableOptionsBase, Account, SignDeployContractTxParams, SignDeployContractTxResult, SignExecuteScriptTxParams, SignExecuteScriptTxResult, SignTransferTxParams, SignTransferTxResult, SignUnsignedTxParams, SignUnsignedTxResult, SignMessageParams, SignMessageResult } from '@alephium/web3';
3
+ import { InteractiveSignerProvider } from '@alephium/web3';
4
+ import type { EnableOptionsBase, Account, NodeProvider, ExplorerProvider, SignDeployContractTxParams, SignDeployContractTxResult, SignExecuteScriptTxParams, SignExecuteScriptTxResult, SignTransferTxParams, SignTransferTxResult, SignUnsignedTxParams, SignUnsignedTxResult, SignMessageParams, SignMessageResult } from '@alephium/web3';
5
5
  import { ProviderAlphBase } from './ProviderAlphBase';
6
6
  type OneKeyTonProviderProps = IInpageProviderConfig & {
7
7
  timeout?: number;
8
8
  };
9
9
  export declare class ProviderAlph extends InteractiveSignerProvider implements AlephiumWindowObject {
10
- #private;
11
10
  _base: ProviderAlphBase;
12
11
  id: string;
13
12
  name: string;
@@ -15,6 +14,8 @@ export declare class ProviderAlph extends InteractiveSignerProvider implements A
15
14
  version: string;
16
15
  _accountInfo: Account | undefined;
17
16
  onDisconnected: (() => void | Promise<void>) | undefined;
17
+ _nodeProvider: NodeProvider | undefined;
18
+ _explorerProvider: ExplorerProvider | undefined;
18
19
  constructor(props: OneKeyTonProviderProps);
19
20
  private bridgeRequest;
20
21
  on(eventName: string | symbol, listener: (...args: unknown[]) => void): void;
@@ -33,6 +34,17 @@ export declare class ProviderAlph extends InteractiveSignerProvider implements A
33
34
  unsafeEnable(opt?: EnableOptionsBase | undefined): Promise<Account>;
34
35
  get nodeProvider(): NodeProvider | undefined;
35
36
  get explorerProvider(): ExplorerProvider | undefined;
37
+ /**
38
+ * Create a two-level Proxy that forwards all property access to the App side
39
+ * via bridge, where the real NodeProvider/ExplorerProvider executes the call.
40
+ *
41
+ * Handles three usage patterns:
42
+ * 1. provider.namespace.method(...args) -- e.g. nodeProvider.addresses.getAddressesAddressBalance('T...')
43
+ * 2. provider.directMethod(...args) -- e.g. nodeProvider.fetchFungibleTokenMetaData(tokenId)
44
+ * 3. provider.request(args) -- low-level API
45
+ */
46
+ private _sanitizeBridgeParams;
47
+ private _createProviderProxy;
36
48
  unsafeGetSelectedAccount(): Promise<Account>;
37
49
  signAndSubmitDeployContractTx(params: SignDeployContractTxParams): Promise<SignDeployContractTxResult>;
38
50
  signAndSubmitExecuteScriptTx(params: SignExecuteScriptTxParams): Promise<SignExecuteScriptTxResult>;
@@ -7,20 +7,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
11
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
12
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
13
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
14
- };
15
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
16
- if (kind === "m") throw new TypeError("Private method is not writable");
17
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
18
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
19
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
20
- };
21
- var _ProviderAlph_nodeProvider, _ProviderAlph_explorerProvider;
22
10
  import { getOrCreateExtInjectedJsBridge } from '@onekeyfe/extension-bridge-injected';
23
- import { NodeProvider, ExplorerProvider, InteractiveSignerProvider } from '@alephium/web3';
11
+ import { InteractiveSignerProvider } from '@alephium/web3';
24
12
  import { ProviderAlphBase } from './ProviderAlphBase';
25
13
  const PROVIDER_EVENTS = {
26
14
  'disconnect': 'disconnect',
@@ -40,10 +28,19 @@ export class ProviderAlph extends InteractiveSignerProvider {
40
28
  this.icon = 'https://uni.onekey-asset.com/static/logo/onekey.png';
41
29
  this.version = '0.9.4';
42
30
  this.onDisconnected = undefined;
43
- _ProviderAlph_nodeProvider.set(this, undefined);
44
- _ProviderAlph_explorerProvider.set(this, undefined);
31
+ // NOTE: Do NOT use `private` keyword here — TypeScript compiles it to WeakMap-based
32
+ // access, which breaks when the instance is wrapped in a Proxy by defineWindowProperty().
33
+ this._nodeProvider = undefined;
34
+ this._explorerProvider = undefined;
45
35
  this._base = new ProviderAlphBase(Object.assign(Object.assign({}, props), { bridge: props.bridge || getOrCreateExtInjectedJsBridge({ timeout: props.timeout }) }));
46
36
  this.version = this._base.version;
37
+ // Create proxy providers eagerly in the constructor.
38
+ // defineWindowProperty() wraps the instance in a Proxy whose defineProperty
39
+ // trap silently blocks property assignments not in its whitelist.
40
+ // Lazy assignment in the getter (this._nodeProvider = ...) is swallowed
41
+ // by that trap, so we must set these before the Proxy wrapping happens.
42
+ this._nodeProvider = this._createProviderProxy('alph_nodeProvider_request');
43
+ this._explorerProvider = this._createProviderProxy('alph_explorerProvider_request');
47
44
  this._registerEvents();
48
45
  }
49
46
  bridgeRequest(data) {
@@ -161,16 +158,59 @@ export class ProviderAlph extends InteractiveSignerProvider {
161
158
  return this.bridgeRequest({ method: 'unsafeEnable', params });
162
159
  }
163
160
  get nodeProvider() {
164
- if (!__classPrivateFieldGet(this, _ProviderAlph_nodeProvider, "f")) {
165
- __classPrivateFieldSet(this, _ProviderAlph_nodeProvider, new NodeProvider('https://node.mainnet.alephium.org'), "f");
166
- }
167
- return __classPrivateFieldGet(this, _ProviderAlph_nodeProvider, "f");
161
+ return this._nodeProvider;
168
162
  }
169
163
  get explorerProvider() {
170
- if (!__classPrivateFieldGet(this, _ProviderAlph_explorerProvider, "f")) {
171
- __classPrivateFieldSet(this, _ProviderAlph_explorerProvider, new ExplorerProvider('https://backend.mainnet.alephium.org'), "f");
164
+ return this._explorerProvider;
165
+ }
166
+ /**
167
+ * Create a two-level Proxy that forwards all property access to the App side
168
+ * via bridge, where the real NodeProvider/ExplorerProvider executes the call.
169
+ *
170
+ * Handles three usage patterns:
171
+ * 1. provider.namespace.method(...args) -- e.g. nodeProvider.addresses.getAddressesAddressBalance('T...')
172
+ * 2. provider.directMethod(...args) -- e.g. nodeProvider.fetchFungibleTokenMetaData(tokenId)
173
+ * 3. provider.request(args) -- low-level API
174
+ */
175
+ // eslint-disable-next-line class-methods-use-this
176
+ _sanitizeBridgeParams(value) {
177
+ if (typeof value === 'bigint')
178
+ return value.toString();
179
+ if (Array.isArray(value))
180
+ return value.map((v) => this._sanitizeBridgeParams(v));
181
+ if (value !== null && typeof value === 'object') {
182
+ const out = {};
183
+ for (const [k, v] of Object.entries(value)) {
184
+ out[k] = this._sanitizeBridgeParams(v);
185
+ }
186
+ return out;
172
187
  }
173
- return __classPrivateFieldGet(this, _ProviderAlph_explorerProvider, "f");
188
+ return value;
189
+ }
190
+ _createProviderProxy(bridgeMethod) {
191
+ const bridge = this.bridgeRequest.bind(this);
192
+ const sanitize = this._sanitizeBridgeParams.bind(this);
193
+ const forward = (args) => bridge({ method: bridgeMethod, params: sanitize(args) });
194
+ return new Proxy(Object.create(null), {
195
+ get(_, prop) {
196
+ if (typeof prop !== 'string' || prop === 'then' || prop === 'toJSON')
197
+ return undefined;
198
+ // request() — standard low-level API: provider.request({ path, method, params })
199
+ if (prop === 'request')
200
+ return forward;
201
+ // Return a callable Proxy:
202
+ // - Called directly → direct method: provider.fetchFungibleTokenMetaData(tokenId)
203
+ // - Property access → namespace.method: provider.addresses.getBalance(addr)
204
+ const directCall = (...args) => forward({ path: prop, params: args });
205
+ return new Proxy(directCall, {
206
+ get(_, method) {
207
+ if (typeof method !== 'string' || method === 'then')
208
+ return undefined;
209
+ return (...args) => forward({ path: prop, method, params: args });
210
+ },
211
+ });
212
+ },
213
+ });
174
214
  }
175
215
  unsafeGetSelectedAccount() {
176
216
  return this.bridgeRequest({ method: 'unsafeGetSelectedAccount' });
@@ -218,4 +258,3 @@ export class ProviderAlph extends InteractiveSignerProvider {
218
258
  });
219
259
  }
220
260
  }
221
- _ProviderAlph_nodeProvider = new WeakMap(), _ProviderAlph_explorerProvider = new WeakMap();
@@ -8,18 +8,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
8
8
  step((generator = generator.apply(thisArg, _arguments || [])).next());
9
9
  });
10
10
  };
11
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
12
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
13
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
14
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
15
- };
16
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
17
- if (kind === "m") throw new TypeError("Private method is not writable");
18
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
19
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
20
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
21
- };
22
- var _ProviderAlph_nodeProvider, _ProviderAlph_explorerProvider;
23
11
  Object.defineProperty(exports, "__esModule", { value: true });
24
12
  exports.ProviderAlph = void 0;
25
13
  const extension_bridge_injected_1 = require("@onekeyfe/extension-bridge-injected");
@@ -43,10 +31,19 @@ class ProviderAlph extends web3_1.InteractiveSignerProvider {
43
31
  this.icon = 'https://uni.onekey-asset.com/static/logo/onekey.png';
44
32
  this.version = '0.9.4';
45
33
  this.onDisconnected = undefined;
46
- _ProviderAlph_nodeProvider.set(this, undefined);
47
- _ProviderAlph_explorerProvider.set(this, undefined);
34
+ // NOTE: Do NOT use `private` keyword here — TypeScript compiles it to WeakMap-based
35
+ // access, which breaks when the instance is wrapped in a Proxy by defineWindowProperty().
36
+ this._nodeProvider = undefined;
37
+ this._explorerProvider = undefined;
48
38
  this._base = new ProviderAlphBase_1.ProviderAlphBase(Object.assign(Object.assign({}, props), { bridge: props.bridge || (0, extension_bridge_injected_1.getOrCreateExtInjectedJsBridge)({ timeout: props.timeout }) }));
49
39
  this.version = this._base.version;
40
+ // Create proxy providers eagerly in the constructor.
41
+ // defineWindowProperty() wraps the instance in a Proxy whose defineProperty
42
+ // trap silently blocks property assignments not in its whitelist.
43
+ // Lazy assignment in the getter (this._nodeProvider = ...) is swallowed
44
+ // by that trap, so we must set these before the Proxy wrapping happens.
45
+ this._nodeProvider = this._createProviderProxy('alph_nodeProvider_request');
46
+ this._explorerProvider = this._createProviderProxy('alph_explorerProvider_request');
50
47
  this._registerEvents();
51
48
  }
52
49
  bridgeRequest(data) {
@@ -164,16 +161,59 @@ class ProviderAlph extends web3_1.InteractiveSignerProvider {
164
161
  return this.bridgeRequest({ method: 'unsafeEnable', params });
165
162
  }
166
163
  get nodeProvider() {
167
- if (!__classPrivateFieldGet(this, _ProviderAlph_nodeProvider, "f")) {
168
- __classPrivateFieldSet(this, _ProviderAlph_nodeProvider, new web3_1.NodeProvider('https://node.mainnet.alephium.org'), "f");
169
- }
170
- return __classPrivateFieldGet(this, _ProviderAlph_nodeProvider, "f");
164
+ return this._nodeProvider;
171
165
  }
172
166
  get explorerProvider() {
173
- if (!__classPrivateFieldGet(this, _ProviderAlph_explorerProvider, "f")) {
174
- __classPrivateFieldSet(this, _ProviderAlph_explorerProvider, new web3_1.ExplorerProvider('https://backend.mainnet.alephium.org'), "f");
167
+ return this._explorerProvider;
168
+ }
169
+ /**
170
+ * Create a two-level Proxy that forwards all property access to the App side
171
+ * via bridge, where the real NodeProvider/ExplorerProvider executes the call.
172
+ *
173
+ * Handles three usage patterns:
174
+ * 1. provider.namespace.method(...args) -- e.g. nodeProvider.addresses.getAddressesAddressBalance('T...')
175
+ * 2. provider.directMethod(...args) -- e.g. nodeProvider.fetchFungibleTokenMetaData(tokenId)
176
+ * 3. provider.request(args) -- low-level API
177
+ */
178
+ // eslint-disable-next-line class-methods-use-this
179
+ _sanitizeBridgeParams(value) {
180
+ if (typeof value === 'bigint')
181
+ return value.toString();
182
+ if (Array.isArray(value))
183
+ return value.map((v) => this._sanitizeBridgeParams(v));
184
+ if (value !== null && typeof value === 'object') {
185
+ const out = {};
186
+ for (const [k, v] of Object.entries(value)) {
187
+ out[k] = this._sanitizeBridgeParams(v);
188
+ }
189
+ return out;
175
190
  }
176
- return __classPrivateFieldGet(this, _ProviderAlph_explorerProvider, "f");
191
+ return value;
192
+ }
193
+ _createProviderProxy(bridgeMethod) {
194
+ const bridge = this.bridgeRequest.bind(this);
195
+ const sanitize = this._sanitizeBridgeParams.bind(this);
196
+ const forward = (args) => bridge({ method: bridgeMethod, params: sanitize(args) });
197
+ return new Proxy(Object.create(null), {
198
+ get(_, prop) {
199
+ if (typeof prop !== 'string' || prop === 'then' || prop === 'toJSON')
200
+ return undefined;
201
+ // request() — standard low-level API: provider.request({ path, method, params })
202
+ if (prop === 'request')
203
+ return forward;
204
+ // Return a callable Proxy:
205
+ // - Called directly → direct method: provider.fetchFungibleTokenMetaData(tokenId)
206
+ // - Property access → namespace.method: provider.addresses.getBalance(addr)
207
+ const directCall = (...args) => forward({ path: prop, params: args });
208
+ return new Proxy(directCall, {
209
+ get(_, method) {
210
+ if (typeof method !== 'string' || method === 'then')
211
+ return undefined;
212
+ return (...args) => forward({ path: prop, method, params: args });
213
+ },
214
+ });
215
+ },
216
+ });
177
217
  }
178
218
  unsafeGetSelectedAccount() {
179
219
  return this.bridgeRequest({ method: 'unsafeGetSelectedAccount' });
@@ -222,4 +262,3 @@ class ProviderAlph extends web3_1.InteractiveSignerProvider {
222
262
  }
223
263
  }
224
264
  exports.ProviderAlph = ProviderAlph;
225
- _ProviderAlph_nodeProvider = new WeakMap(), _ProviderAlph_explorerProvider = new WeakMap();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onekeyfe/onekey-alph-provider",
3
- "version": "2.2.61",
3
+ "version": "2.2.63",
4
4
  "keywords": [
5
5
  "cross-inpage-provider"
6
6
  ],
@@ -31,15 +31,15 @@
31
31
  "@alephium/get-extension-wallet": "^1.5.2",
32
32
  "@alephium/walletconnect-provider": "^1.5.2",
33
33
  "@alephium/web3": "^1.5.2",
34
- "@onekeyfe/cross-inpage-provider-core": "2.2.61",
35
- "@onekeyfe/cross-inpage-provider-errors": "2.2.61",
36
- "@onekeyfe/cross-inpage-provider-types": "2.2.61",
37
- "@onekeyfe/extension-bridge-injected": "2.2.61",
34
+ "@onekeyfe/cross-inpage-provider-core": "2.2.63",
35
+ "@onekeyfe/cross-inpage-provider-errors": "2.2.63",
36
+ "@onekeyfe/cross-inpage-provider-types": "2.2.63",
37
+ "@onekeyfe/extension-bridge-injected": "2.2.63",
38
38
  "cipher-base": "^1.0.6",
39
39
  "elliptic": "^6.6.1",
40
40
  "patch-package": "^8.0.0",
41
41
  "pbkdf2": "^3.1.3",
42
42
  "sha.js": "^2.4.12"
43
43
  },
44
- "gitHead": "1e98fecc19bda6cea42ecd616f3e432749f6dd0d"
44
+ "gitHead": "321fff7491b90508f1adb921307e01539a867152"
45
45
  }