@onekeyfe/onekey-alph-provider 2.2.61 → 2.2.62

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
+ private _nodeProvider;
18
+ private _explorerProvider;
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,17 @@ 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
+ this._nodeProvider = undefined;
32
+ this._explorerProvider = undefined;
45
33
  this._base = new ProviderAlphBase(Object.assign(Object.assign({}, props), { bridge: props.bridge || getOrCreateExtInjectedJsBridge({ timeout: props.timeout }) }));
46
34
  this.version = this._base.version;
35
+ // Create proxy providers eagerly in the constructor.
36
+ // defineWindowProperty() wraps the instance in a Proxy whose defineProperty
37
+ // trap silently blocks property assignments not in its whitelist.
38
+ // Lazy assignment in the getter (this._nodeProvider = ...) is swallowed
39
+ // by that trap, so we must set these before the Proxy wrapping happens.
40
+ this._nodeProvider = this._createProviderProxy('alph_nodeProvider_request');
41
+ this._explorerProvider = this._createProviderProxy('alph_explorerProvider_request');
47
42
  this._registerEvents();
48
43
  }
49
44
  bridgeRequest(data) {
@@ -161,16 +156,59 @@ export class ProviderAlph extends InteractiveSignerProvider {
161
156
  return this.bridgeRequest({ method: 'unsafeEnable', params });
162
157
  }
163
158
  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");
159
+ return this._nodeProvider;
168
160
  }
169
161
  get explorerProvider() {
170
- if (!__classPrivateFieldGet(this, _ProviderAlph_explorerProvider, "f")) {
171
- __classPrivateFieldSet(this, _ProviderAlph_explorerProvider, new ExplorerProvider('https://backend.mainnet.alephium.org'), "f");
162
+ return this._explorerProvider;
163
+ }
164
+ /**
165
+ * Create a two-level Proxy that forwards all property access to the App side
166
+ * via bridge, where the real NodeProvider/ExplorerProvider executes the call.
167
+ *
168
+ * Handles three usage patterns:
169
+ * 1. provider.namespace.method(...args) -- e.g. nodeProvider.addresses.getAddressesAddressBalance('T...')
170
+ * 2. provider.directMethod(...args) -- e.g. nodeProvider.fetchFungibleTokenMetaData(tokenId)
171
+ * 3. provider.request(args) -- low-level API
172
+ */
173
+ // eslint-disable-next-line class-methods-use-this
174
+ _sanitizeBridgeParams(value) {
175
+ if (typeof value === 'bigint')
176
+ return value.toString();
177
+ if (Array.isArray(value))
178
+ return value.map((v) => this._sanitizeBridgeParams(v));
179
+ if (value !== null && typeof value === 'object') {
180
+ const out = {};
181
+ for (const [k, v] of Object.entries(value)) {
182
+ out[k] = this._sanitizeBridgeParams(v);
183
+ }
184
+ return out;
172
185
  }
173
- return __classPrivateFieldGet(this, _ProviderAlph_explorerProvider, "f");
186
+ return value;
187
+ }
188
+ _createProviderProxy(bridgeMethod) {
189
+ const bridge = this.bridgeRequest.bind(this);
190
+ const sanitize = this._sanitizeBridgeParams.bind(this);
191
+ const forward = (args) => bridge({ method: bridgeMethod, params: sanitize(args) });
192
+ return new Proxy(Object.create(null), {
193
+ get(_, prop) {
194
+ if (typeof prop !== 'string' || prop === 'then' || prop === 'toJSON')
195
+ return undefined;
196
+ // request() — standard low-level API: provider.request({ path, method, params })
197
+ if (prop === 'request')
198
+ return forward;
199
+ // Return a callable Proxy:
200
+ // - Called directly → direct method: provider.fetchFungibleTokenMetaData(tokenId)
201
+ // - Property access → namespace.method: provider.addresses.getBalance(addr)
202
+ const directCall = (...args) => forward({ path: prop, params: args });
203
+ return new Proxy(directCall, {
204
+ get(_, method) {
205
+ if (typeof method !== 'string' || method === 'then')
206
+ return undefined;
207
+ return (...args) => forward({ path: prop, method, params: args });
208
+ },
209
+ });
210
+ },
211
+ });
174
212
  }
175
213
  unsafeGetSelectedAccount() {
176
214
  return this.bridgeRequest({ method: 'unsafeGetSelectedAccount' });
@@ -218,4 +256,3 @@ export class ProviderAlph extends InteractiveSignerProvider {
218
256
  });
219
257
  }
220
258
  }
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,17 @@ 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
+ this._nodeProvider = undefined;
35
+ this._explorerProvider = undefined;
48
36
  this._base = new ProviderAlphBase_1.ProviderAlphBase(Object.assign(Object.assign({}, props), { bridge: props.bridge || (0, extension_bridge_injected_1.getOrCreateExtInjectedJsBridge)({ timeout: props.timeout }) }));
49
37
  this.version = this._base.version;
38
+ // Create proxy providers eagerly in the constructor.
39
+ // defineWindowProperty() wraps the instance in a Proxy whose defineProperty
40
+ // trap silently blocks property assignments not in its whitelist.
41
+ // Lazy assignment in the getter (this._nodeProvider = ...) is swallowed
42
+ // by that trap, so we must set these before the Proxy wrapping happens.
43
+ this._nodeProvider = this._createProviderProxy('alph_nodeProvider_request');
44
+ this._explorerProvider = this._createProviderProxy('alph_explorerProvider_request');
50
45
  this._registerEvents();
51
46
  }
52
47
  bridgeRequest(data) {
@@ -164,16 +159,59 @@ class ProviderAlph extends web3_1.InteractiveSignerProvider {
164
159
  return this.bridgeRequest({ method: 'unsafeEnable', params });
165
160
  }
166
161
  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");
162
+ return this._nodeProvider;
171
163
  }
172
164
  get explorerProvider() {
173
- if (!__classPrivateFieldGet(this, _ProviderAlph_explorerProvider, "f")) {
174
- __classPrivateFieldSet(this, _ProviderAlph_explorerProvider, new web3_1.ExplorerProvider('https://backend.mainnet.alephium.org'), "f");
165
+ return this._explorerProvider;
166
+ }
167
+ /**
168
+ * Create a two-level Proxy that forwards all property access to the App side
169
+ * via bridge, where the real NodeProvider/ExplorerProvider executes the call.
170
+ *
171
+ * Handles three usage patterns:
172
+ * 1. provider.namespace.method(...args) -- e.g. nodeProvider.addresses.getAddressesAddressBalance('T...')
173
+ * 2. provider.directMethod(...args) -- e.g. nodeProvider.fetchFungibleTokenMetaData(tokenId)
174
+ * 3. provider.request(args) -- low-level API
175
+ */
176
+ // eslint-disable-next-line class-methods-use-this
177
+ _sanitizeBridgeParams(value) {
178
+ if (typeof value === 'bigint')
179
+ return value.toString();
180
+ if (Array.isArray(value))
181
+ return value.map((v) => this._sanitizeBridgeParams(v));
182
+ if (value !== null && typeof value === 'object') {
183
+ const out = {};
184
+ for (const [k, v] of Object.entries(value)) {
185
+ out[k] = this._sanitizeBridgeParams(v);
186
+ }
187
+ return out;
175
188
  }
176
- return __classPrivateFieldGet(this, _ProviderAlph_explorerProvider, "f");
189
+ return value;
190
+ }
191
+ _createProviderProxy(bridgeMethod) {
192
+ const bridge = this.bridgeRequest.bind(this);
193
+ const sanitize = this._sanitizeBridgeParams.bind(this);
194
+ const forward = (args) => bridge({ method: bridgeMethod, params: sanitize(args) });
195
+ return new Proxy(Object.create(null), {
196
+ get(_, prop) {
197
+ if (typeof prop !== 'string' || prop === 'then' || prop === 'toJSON')
198
+ return undefined;
199
+ // request() — standard low-level API: provider.request({ path, method, params })
200
+ if (prop === 'request')
201
+ return forward;
202
+ // Return a callable Proxy:
203
+ // - Called directly → direct method: provider.fetchFungibleTokenMetaData(tokenId)
204
+ // - Property access → namespace.method: provider.addresses.getBalance(addr)
205
+ const directCall = (...args) => forward({ path: prop, params: args });
206
+ return new Proxy(directCall, {
207
+ get(_, method) {
208
+ if (typeof method !== 'string' || method === 'then')
209
+ return undefined;
210
+ return (...args) => forward({ path: prop, method, params: args });
211
+ },
212
+ });
213
+ },
214
+ });
177
215
  }
178
216
  unsafeGetSelectedAccount() {
179
217
  return this.bridgeRequest({ method: 'unsafeGetSelectedAccount' });
@@ -222,4 +260,3 @@ class ProviderAlph extends web3_1.InteractiveSignerProvider {
222
260
  }
223
261
  }
224
262
  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.62",
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.62",
35
+ "@onekeyfe/cross-inpage-provider-errors": "2.2.62",
36
+ "@onekeyfe/cross-inpage-provider-types": "2.2.62",
37
+ "@onekeyfe/extension-bridge-injected": "2.2.62",
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": "a4d24178035601f87fc68590bc83f8faab37a464"
45
45
  }