@ultraos/wallet-sdk 0.0.8 → 0.0.10

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/package.json CHANGED
@@ -1,8 +1,9 @@
1
1
  {
2
2
  "name": "@ultraos/wallet-sdk",
3
- "version": "0.0.8",
3
+ "version": "0.0.10",
4
4
  "homepage": "https://developers.ultra.io",
5
5
  "dependencies": {
6
+ "json-rpc-2.0": "^1.7.0",
6
7
  "tslib": "^2.3.0"
7
8
  },
8
9
  "type": "module",
@@ -5,6 +5,15 @@ export declare class ClientMessenger {
5
5
  private rpcClient;
6
6
  private pendingRequest;
7
7
  constructor(windowManager: WindowManager);
8
- sendRequest<T>(requestMethod: string, requestParams: object): Promise<UltraResponse<T>>;
8
+ private initializeRpcClient;
9
+ private setupMessageListener;
10
+ sendRequest<T>(requestMethod: string, requestParams: Record<string, unknown>): Promise<UltraResponse<T>>;
11
+ private isWalletWindowClosed;
12
+ private ensureWalletWindow;
13
+ private executeRequest;
14
+ private isValidReadyMessage;
15
+ private processRpcRequest;
16
+ private rejectWithError;
17
+ private createErrorResponse;
9
18
  }
10
19
  //# sourceMappingURL=client-messenger.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-messenger.d.ts","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/common/client-messenger.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgD,aAAa,EAAE,MAAM,eAAe,CAAC;AAG5F,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,cAAc,CAAS;gBAEnB,aAAa,EAAE,aAAa;IAmBlC,WAAW,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;CA4E9F"}
1
+ {"version":3,"file":"client-messenger.d.ts","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/common/client-messenger.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgD,aAAa,EAAE,MAAM,eAAe,CAAC;AAG5F,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,cAAc,CAAS;gBAEnB,aAAa,EAAE,aAAa;IAMxC,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,oBAAoB;IAQtB,WAAW,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IAiB9G,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,kBAAkB;YAQZ,cAAc;IAgD5B,OAAO,CAAC,mBAAmB;YAOb,iBAAiB;IAuB/B,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,mBAAmB;CAI5B"}
@@ -6,6 +6,10 @@ export class ClientMessenger {
6
6
  constructor(windowManager) {
7
7
  this.pendingRequest = false;
8
8
  this.windowManager = windowManager;
9
+ this.initializeRpcClient();
10
+ this.setupMessageListener();
11
+ }
12
+ initializeRpcClient() {
9
13
  this.rpcClient = new JSONRPCClient((request) => {
10
14
  const walletWindow = this.windowManager.getWalletWindow();
11
15
  if (!walletWindow) {
@@ -14,6 +18,8 @@ export class ClientMessenger {
14
18
  walletWindow.postMessage(request, this.windowManager.walletUrl);
15
19
  return Promise.resolve();
16
20
  });
21
+ }
22
+ setupMessageListener() {
17
23
  window.addEventListener('message', (event) => {
18
24
  if (event.origin === this.windowManager.walletUrl && event.data?.jsonrpc === '2.0') {
19
25
  this.rpcClient.receive(event.data);
@@ -21,73 +27,97 @@ export class ClientMessenger {
21
27
  });
22
28
  }
23
29
  async sendRequest(requestMethod, requestParams) {
24
- if (this.pendingRequest && this.windowManager.getWalletWindow()?.closed === false) {
25
- const { code, message } = new ClientError(SdkErrorCode.REQUESTED_RESOURCE_NOT_AVAILABLE);
26
- return Promise.reject({ status: ResponseStatus.ERROR, code, message });
30
+ if (this.pendingRequest && !this.isWalletWindowClosed()) {
31
+ throw this.createErrorResponse(SdkErrorCode.REQUESTED_RESOURCE_NOT_AVAILABLE);
27
32
  }
28
33
  this.pendingRequest = true;
29
- this.windowManager.openOrReuseWallet();
34
+ try {
35
+ this.windowManager.openOrReuseWallet();
36
+ const walletWindow = this.ensureWalletWindow();
37
+ return await this.executeRequest(walletWindow, requestMethod, requestParams);
38
+ }
39
+ finally {
40
+ this.pendingRequest = false;
41
+ }
42
+ }
43
+ isWalletWindowClosed() {
44
+ return this.windowManager.getWalletWindow()?.closed === true;
45
+ }
46
+ ensureWalletWindow() {
30
47
  const walletWindow = this.windowManager.getWalletWindow();
31
48
  if (!walletWindow) {
32
- const { code, message } = new ClientError(SdkErrorCode.WALLET_WINDOW_UNAVAILABLE);
33
- return Promise.reject({ status: ResponseStatus.ERROR, code, message });
49
+ throw this.createErrorResponse(SdkErrorCode.WALLET_WINDOW_UNAVAILABLE);
34
50
  }
35
- let ready = false;
36
- let cleanupCalled = false;
51
+ return walletWindow;
52
+ }
53
+ async executeRequest(walletWindow, requestMethod, requestParams) {
37
54
  return new Promise((resolve, reject) => {
38
- const cleanup = () => {
39
- if (cleanupCalled)
55
+ let isResolved = false;
56
+ let timeoutId;
57
+ let intervalId;
58
+ const cleanupResources = () => {
59
+ if (isResolved)
40
60
  return;
41
- cleanupCalled = true;
42
- this.pendingRequest = false;
43
- clearTimeout(timeout);
44
- clearInterval(checkWindowClose);
45
- window.removeEventListener('message', handleReady);
46
- walletWindow.close();
61
+ isResolved = true;
62
+ clearTimeout(timeoutId);
63
+ clearInterval(intervalId);
64
+ window.removeEventListener('message', handleWalletHandshake);
47
65
  };
48
- const handleReady = (event) => {
49
- if (event.origin !== this.windowManager.walletUrl)
66
+ const handleWalletHandshake = (event) => {
67
+ if (!this.isValidReadyMessage(event))
50
68
  return;
51
- const msg = event.data;
52
- if (msg?.jsonrpc === '2.0' && msg.method === 'ready') {
53
- ready = true;
54
- window.removeEventListener('message', handleReady);
55
- Promise.resolve(this.rpcClient.request(requestMethod, requestParams))
56
- .then((result) => {
57
- cleanup();
58
- if (result.status === ResponseStatus.SUCCESS) {
59
- resolve(result);
60
- }
61
- else {
62
- reject(result);
63
- }
64
- })
65
- .catch((error) => {
66
- cleanup();
67
- const clientError = new ClientError(SdkErrorCode.UNKNOWN_ERROR, error);
68
- reject({
69
- status: ResponseStatus.ERROR,
70
- ...clientError,
71
- });
72
- });
73
- }
69
+ cleanupResources();
70
+ // Once the wallet is ready, we can send the request to the wallet
71
+ this.processRpcRequest(requestMethod, requestParams, resolve, reject);
74
72
  };
75
- const timeout = setTimeout(() => {
76
- if (!ready) {
77
- cleanup();
78
- const { code, message } = new ClientError(SdkErrorCode.WALLET_HANDSHAKE_TIMEOUT);
79
- reject({ status: ResponseStatus.ERROR, code, message });
80
- }
81
- }, UltraWalletSdkConfig.handshakeTimeout);
82
- const checkWindowClose = setInterval(() => {
83
- if (walletWindow.closed) {
84
- cleanup();
85
- const { code, message } = new ClientError(SdkErrorCode.USER_REJECTED_REQUEST);
86
- reject({ status: ResponseStatus.ERROR, code, message });
73
+ const handleTimeout = () => {
74
+ cleanupResources();
75
+ walletWindow.close();
76
+ this.rejectWithError(SdkErrorCode.WALLET_HANDSHAKE_TIMEOUT, reject);
77
+ };
78
+ const handleWindowClose = () => {
79
+ if (walletWindow.closed && !isResolved) {
80
+ cleanupResources();
81
+ this.rejectWithError(SdkErrorCode.USER_REJECTED_REQUEST, reject);
87
82
  }
88
- }, UltraWalletSdkConfig.checkWindowInterval);
89
- window.addEventListener('message', handleReady);
83
+ };
84
+ // Set up event listeners and timers
85
+ window.addEventListener('message', handleWalletHandshake);
86
+ timeoutId = setTimeout(handleTimeout, UltraWalletSdkConfig.handshakeTimeout);
87
+ intervalId = setInterval(handleWindowClose, UltraWalletSdkConfig.checkWindowInterval);
90
88
  });
91
89
  }
90
+ isValidReadyMessage(event) {
91
+ if (event.origin !== this.windowManager.walletUrl)
92
+ return false;
93
+ const msg = event.data;
94
+ return msg?.jsonrpc === '2.0' && msg.method === 'ready';
95
+ }
96
+ async processRpcRequest(requestMethod, requestParams, resolve, reject) {
97
+ try {
98
+ const result = await this.rpcClient.request(requestMethod, requestParams);
99
+ if (result.status === ResponseStatus.SUCCESS) {
100
+ resolve(result);
101
+ }
102
+ else {
103
+ reject(result);
104
+ }
105
+ }
106
+ catch (error) {
107
+ const clientError = new ClientError(SdkErrorCode.UNKNOWN_ERROR, error);
108
+ reject({
109
+ status: ResponseStatus.ERROR,
110
+ ...clientError,
111
+ });
112
+ }
113
+ }
114
+ rejectWithError(errorCode, reject) {
115
+ const errorResponse = this.createErrorResponse(errorCode);
116
+ reject(errorResponse);
117
+ }
118
+ createErrorResponse(errorCode) {
119
+ const { code, message } = new ClientError(errorCode);
120
+ return { status: ResponseStatus.ERROR, code, message, data: null };
121
+ }
92
122
  }
93
123
  //# sourceMappingURL=client-messenger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client-messenger.js","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/common/client-messenger.ts"],"names":[],"mappings":"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","sourcesContent":["import { JSONRPCClient } from 'json-rpc-2.0';\n\nimport UltraWalletSdkConfig from '../config/ultra-wallet-sdk.config';\nimport { JsonRpcMessage, ResponseStatus, SdkErrorCode, UltraResponse } from '../interfaces';\n\nimport { ClientError } from './client-error';\nimport { WindowManager } from './window-manager';\n\nexport class ClientMessenger {\n private windowManager: WindowManager;\n private rpcClient: JSONRPCClient;\n private pendingRequest = false;\n\n constructor(windowManager: WindowManager) {\n this.windowManager = windowManager;\n\n this.rpcClient = new JSONRPCClient((request) => {\n const walletWindow = this.windowManager.getWalletWindow();\n if (!walletWindow) {\n return Promise.reject(new ClientError(SdkErrorCode.WALLET_WINDOW_UNAVAILABLE));\n }\n walletWindow.postMessage(request, this.windowManager.walletUrl);\n return Promise.resolve();\n });\n\n window.addEventListener('message', (event) => {\n if (event.origin === this.windowManager.walletUrl && event.data?.jsonrpc === '2.0') {\n this.rpcClient.receive(event.data);\n }\n });\n }\n\n async sendRequest<T>(requestMethod: string, requestParams: object): Promise<UltraResponse<T>> {\n if (this.pendingRequest && this.windowManager.getWalletWindow()?.closed === false) {\n const { code, message } = new ClientError(SdkErrorCode.REQUESTED_RESOURCE_NOT_AVAILABLE);\n return Promise.reject({ status: ResponseStatus.ERROR, code, message });\n }\n\n this.pendingRequest = true;\n\n this.windowManager.openOrReuseWallet();\n\n const walletWindow = this.windowManager.getWalletWindow();\n if (!walletWindow) {\n const { code, message } = new ClientError(SdkErrorCode.WALLET_WINDOW_UNAVAILABLE);\n return Promise.reject({ status: ResponseStatus.ERROR, code, message });\n }\n\n let ready = false;\n let cleanupCalled = false;\n\n return new Promise<UltraResponse<T>>((resolve, reject) => {\n const cleanup = () => {\n if (cleanupCalled) return;\n cleanupCalled = true;\n this.pendingRequest = false;\n clearTimeout(timeout);\n clearInterval(checkWindowClose);\n window.removeEventListener('message', handleReady);\n walletWindow.close();\n };\n\n const handleReady = (event: MessageEvent) => {\n if (event.origin !== this.windowManager.walletUrl) return;\n const msg: JsonRpcMessage = event.data;\n if (msg?.jsonrpc === '2.0' && msg.method === 'ready') {\n ready = true;\n window.removeEventListener('message', handleReady);\n\n Promise.resolve(this.rpcClient.request(requestMethod, requestParams))\n .then((result) => {\n cleanup();\n if (result.status === ResponseStatus.SUCCESS) {\n resolve(result);\n } else {\n reject(result);\n }\n })\n .catch((error) => {\n cleanup();\n const clientError = new ClientError(SdkErrorCode.UNKNOWN_ERROR, error);\n reject({\n status: ResponseStatus.ERROR,\n ...clientError,\n });\n });\n }\n };\n\n const timeout = setTimeout(() => {\n if (!ready) {\n cleanup();\n const { code, message } = new ClientError(SdkErrorCode.WALLET_HANDSHAKE_TIMEOUT);\n reject({ status: ResponseStatus.ERROR, code, message });\n }\n }, UltraWalletSdkConfig.handshakeTimeout);\n\n const checkWindowClose = setInterval(() => {\n if (walletWindow.closed) {\n cleanup();\n const { code, message } = new ClientError(SdkErrorCode.USER_REJECTED_REQUEST);\n reject({ status: ResponseStatus.ERROR, code, message });\n }\n }, UltraWalletSdkConfig.checkWindowInterval);\n\n window.addEventListener('message', handleReady);\n });\n }\n}\n"]}
1
+ {"version":3,"file":"client-messenger.js","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/common/client-messenger.ts"],"names":[],"mappings":"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","sourcesContent":["import { JSONRPCClient } from 'json-rpc-2.0';\n\nimport UltraWalletSdkConfig from '../config/ultra-wallet-sdk.config';\nimport { JsonRpcMessage, ResponseStatus, SdkErrorCode, UltraResponse } from '../interfaces';\n\nimport { ClientError } from './client-error';\nimport { WindowManager } from './window-manager';\n\nexport class ClientMessenger {\n private windowManager: WindowManager;\n private rpcClient: JSONRPCClient;\n private pendingRequest = false;\n\n constructor(windowManager: WindowManager) {\n this.windowManager = windowManager;\n this.initializeRpcClient();\n this.setupMessageListener();\n }\n\n private initializeRpcClient(): void {\n this.rpcClient = new JSONRPCClient((request) => {\n const walletWindow = this.windowManager.getWalletWindow();\n if (!walletWindow) {\n return Promise.reject(new ClientError(SdkErrorCode.WALLET_WINDOW_UNAVAILABLE));\n }\n walletWindow.postMessage(request, this.windowManager.walletUrl);\n return Promise.resolve();\n });\n }\n\n private setupMessageListener(): void {\n window.addEventListener('message', (event) => {\n if (event.origin === this.windowManager.walletUrl && event.data?.jsonrpc === '2.0') {\n this.rpcClient.receive(event.data);\n }\n });\n }\n\n async sendRequest<T>(requestMethod: string, requestParams: Record<string, unknown>): Promise<UltraResponse<T>> {\n if (this.pendingRequest && !this.isWalletWindowClosed()) {\n throw this.createErrorResponse(SdkErrorCode.REQUESTED_RESOURCE_NOT_AVAILABLE);\n }\n\n this.pendingRequest = true;\n\n try {\n this.windowManager.openOrReuseWallet();\n const walletWindow = this.ensureWalletWindow();\n\n return await this.executeRequest<T>(walletWindow, requestMethod, requestParams);\n } finally {\n this.pendingRequest = false;\n }\n }\n\n private isWalletWindowClosed(): boolean {\n return this.windowManager.getWalletWindow()?.closed === true;\n }\n\n private ensureWalletWindow(): Window {\n const walletWindow = this.windowManager.getWalletWindow();\n if (!walletWindow) {\n throw this.createErrorResponse(SdkErrorCode.WALLET_WINDOW_UNAVAILABLE);\n }\n return walletWindow;\n }\n\n private async executeRequest<T>(\n walletWindow: Window,\n requestMethod: string,\n requestParams: Record<string, unknown>,\n ): Promise<UltraResponse<T>> {\n return new Promise<UltraResponse<T>>((resolve, reject) => {\n let isResolved = false;\n let timeoutId: any;\n let intervalId: any;\n\n const cleanupResources = () => {\n if (isResolved) return;\n isResolved = true;\n\n clearTimeout(timeoutId);\n clearInterval(intervalId);\n window.removeEventListener('message', handleWalletHandshake);\n };\n\n const handleWalletHandshake = (event: MessageEvent) => {\n if (!this.isValidReadyMessage(event)) return;\n\n cleanupResources();\n\n // Once the wallet is ready, we can send the request to the wallet\n this.processRpcRequest<T>(requestMethod, requestParams, resolve, reject);\n };\n\n const handleTimeout = () => {\n cleanupResources();\n walletWindow.close();\n this.rejectWithError(SdkErrorCode.WALLET_HANDSHAKE_TIMEOUT, reject);\n };\n\n const handleWindowClose = () => {\n if (walletWindow.closed && !isResolved) {\n cleanupResources();\n this.rejectWithError(SdkErrorCode.USER_REJECTED_REQUEST, reject);\n }\n };\n\n // Set up event listeners and timers\n window.addEventListener('message', handleWalletHandshake);\n timeoutId = setTimeout(handleTimeout, UltraWalletSdkConfig.handshakeTimeout);\n intervalId = setInterval(handleWindowClose, UltraWalletSdkConfig.checkWindowInterval);\n });\n }\n\n private isValidReadyMessage(event: MessageEvent): boolean {\n if (event.origin !== this.windowManager.walletUrl) return false;\n\n const msg: JsonRpcMessage = event.data;\n return msg?.jsonrpc === '2.0' && msg.method === 'ready';\n }\n\n private async processRpcRequest<T>(\n requestMethod: string,\n requestParams: Record<string, unknown>,\n resolve: (value: UltraResponse<T>) => void,\n reject: (reason: any) => void,\n ): Promise<void> {\n try {\n const result = await this.rpcClient.request(requestMethod, requestParams);\n\n if (result.status === ResponseStatus.SUCCESS) {\n resolve(result);\n } else {\n reject(result);\n }\n } catch (error) {\n const clientError = new ClientError(SdkErrorCode.UNKNOWN_ERROR, error);\n reject({\n status: ResponseStatus.ERROR,\n ...clientError,\n });\n }\n }\n\n private rejectWithError(errorCode: SdkErrorCode, reject: (reason: any) => void): void {\n const errorResponse = this.createErrorResponse(errorCode);\n reject(errorResponse);\n }\n\n private createErrorResponse(errorCode: SdkErrorCode): UltraResponse<never> {\n const { code, message } = new ClientError(errorCode);\n return { status: ResponseStatus.ERROR, code, message, data: null as never };\n }\n}\n"]}
@@ -11,7 +11,7 @@ export class WindowManager {
11
11
  const width = UltraWalletSdkConfig.width;
12
12
  const top = this.currentWindow.top;
13
13
  const left = this.currentWindow.screenLeft + this.currentWindow.innerWidth - width;
14
- this.walletWindow = window.open(this.walletUrl, '_blank', `width=${width},height=${height},top=${top},left=${left}`);
14
+ this.walletWindow = window.open(this.walletUrl, '_blank', `width=${width},height=${height},top=${top},left=${left},resizable=0`);
15
15
  }
16
16
  else {
17
17
  this.walletWindow.focus();
@@ -1 +1 @@
1
- {"version":3,"file":"window-manager.js","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/common/window-manager.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,MAAM,mCAAmC,CAAC;AAErE,MAAM,OAAO,aAAa;IAKxB,YAAY,SAAiB;QAHrB,iBAAY,GAAkB,IAAI,CAAC;QAIzC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,iBAAiB;QACf,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC;YAC3C,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,KAAK,CAAC;YAEnF,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAC7B,IAAI,CAAC,SAAS,EACd,QAAQ,EACR,SAAS,KAAK,WAAW,MAAM,QAAQ,GAAG,SAAS,IAAI,EAAE,CAC1D,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CACF","sourcesContent":["import UltraWalletSdkConfig from '../config/ultra-wallet-sdk.config';\n\nexport class WindowManager {\n private currentWindow: Window;\n private walletWindow: Window | null = null;\n public readonly walletUrl: string;\n\n constructor(walletUrl: string) {\n this.currentWindow = window;\n this.walletUrl = walletUrl;\n }\n\n openOrReuseWallet() {\n if (this.walletWindow == null || this.walletWindow.closed) {\n const height = UltraWalletSdkConfig.height;\n const width = UltraWalletSdkConfig.width;\n const top = this.currentWindow.top;\n const left = this.currentWindow.screenLeft + this.currentWindow.innerWidth - width;\n\n this.walletWindow = window.open(\n this.walletUrl,\n '_blank',\n `width=${width},height=${height},top=${top},left=${left}`,\n );\n } else {\n this.walletWindow.focus();\n }\n }\n\n // Provides a reference to the wallet window\n getWalletWindow(): Window | null {\n return this.walletWindow;\n }\n}\n"]}
1
+ {"version":3,"file":"window-manager.js","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/common/window-manager.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,MAAM,mCAAmC,CAAC;AAErE,MAAM,OAAO,aAAa;IAKxB,YAAY,SAAiB;QAHrB,iBAAY,GAAkB,IAAI,CAAC;QAIzC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,iBAAiB;QACf,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YAC1D,MAAM,MAAM,GAAG,oBAAoB,CAAC,MAAM,CAAC;YAC3C,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC;YACzC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG,KAAK,CAAC;YAEnF,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,IAAI,CAC7B,IAAI,CAAC,SAAS,EACd,QAAQ,EACR,SAAS,KAAK,WAAW,MAAM,QAAQ,GAAG,SAAS,IAAI,cAAc,CACtE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CACF","sourcesContent":["import UltraWalletSdkConfig from '../config/ultra-wallet-sdk.config';\n\nexport class WindowManager {\n private currentWindow: Window;\n private walletWindow: Window | null = null;\n public readonly walletUrl: string;\n\n constructor(walletUrl: string) {\n this.currentWindow = window;\n this.walletUrl = walletUrl;\n }\n\n openOrReuseWallet() {\n if (this.walletWindow == null || this.walletWindow.closed) {\n const height = UltraWalletSdkConfig.height;\n const width = UltraWalletSdkConfig.width;\n const top = this.currentWindow.top;\n const left = this.currentWindow.screenLeft + this.currentWindow.innerWidth - width;\n\n this.walletWindow = window.open(\n this.walletUrl,\n '_blank',\n `width=${width},height=${height},top=${top},left=${left},resizable=0`,\n );\n } else {\n this.walletWindow.focus();\n }\n }\n\n // Provides a reference to the wallet window\n getWalletWindow(): Window | null {\n return this.walletWindow;\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  const UltraWalletSdkConfig = Object.freeze({
2
- width: 345,
3
- height: 610,
2
+ width: 420,
3
+ height: 815,
4
4
  walletUrls: {
5
5
  mainnet: 'https://web-wallet.ultra.io',
6
6
  testnet: 'https://web-wallet.staging.ultra.io',
@@ -1 +1 @@
1
- {"version":3,"file":"ultra-wallet-sdk.config.js","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/config/ultra-wallet-sdk.config.ts"],"names":[],"mappings":"AAiBA,MAAM,oBAAoB,GAAyB,MAAM,CAAC,MAAM,CAAC;IAC/D,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IACX,UAAU,EAAE;QACV,OAAO,EAAE,6BAA6B;QACtC,OAAO,EAAE,qCAAqC;KAC/C;IACD,WAAW,EAAE;QACX,OAAO,EAAE;YACP,OAAO,EAAE,kEAAkE;SAC5E;QACD,OAAO,EAAE;YACP,OAAO,EAAE,kEAAkE;SAC5E;KACF;IACD,mBAAmB,EAAE,GAAG;IACxB,gBAAgB,EAAE,KAAM;CACzB,CAAC,CAAC;AAEH,eAAe,oBAAoB,CAAC","sourcesContent":["interface UltraWalletSdkConfig {\n width: number;\n height: number;\n walletUrls: {\n mainnet: string;\n testnet: string;\n };\n checkWindowInterval: number;\n handshakeTimeout: number;\n networkInfo: Record<\n 'mainnet' | 'testnet',\n {\n chainId: string;\n }\n >;\n}\n\nconst UltraWalletSdkConfig: UltraWalletSdkConfig = Object.freeze({\n width: 345,\n height: 610,\n walletUrls: {\n mainnet: 'https://web-wallet.ultra.io',\n testnet: 'https://web-wallet.staging.ultra.io',\n },\n networkInfo: {\n mainnet: {\n chainId: 'a9c481dfbc7d9506dc7e87e9a137c931b0a9303f64fd7a1d08b8230133920097',\n },\n testnet: {\n chainId: '7fc56be645bb76ab9d747b53089f132dcb7681db06f0852cfa03eaf6f7ac80e9',\n },\n },\n checkWindowInterval: 500,\n handshakeTimeout: 10_000,\n});\n\nexport default UltraWalletSdkConfig;\n"]}
1
+ {"version":3,"file":"ultra-wallet-sdk.config.js","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/config/ultra-wallet-sdk.config.ts"],"names":[],"mappings":"AAiBA,MAAM,oBAAoB,GAAyB,MAAM,CAAC,MAAM,CAAC;IAC/D,KAAK,EAAE,GAAG;IACV,MAAM,EAAE,GAAG;IACX,UAAU,EAAE;QACV,OAAO,EAAE,6BAA6B;QACtC,OAAO,EAAE,qCAAqC;KAC/C;IACD,WAAW,EAAE;QACX,OAAO,EAAE;YACP,OAAO,EAAE,kEAAkE;SAC5E;QACD,OAAO,EAAE;YACP,OAAO,EAAE,kEAAkE;SAC5E;KACF;IACD,mBAAmB,EAAE,GAAG;IACxB,gBAAgB,EAAE,KAAM;CACzB,CAAC,CAAC;AAEH,eAAe,oBAAoB,CAAC","sourcesContent":["interface UltraWalletSdkConfig {\n width: number;\n height: number;\n walletUrls: {\n mainnet: string;\n testnet: string;\n };\n checkWindowInterval: number;\n handshakeTimeout: number;\n networkInfo: Record<\n 'mainnet' | 'testnet',\n {\n chainId: string;\n }\n >;\n}\n\nconst UltraWalletSdkConfig: UltraWalletSdkConfig = Object.freeze({\n width: 420,\n height: 815,\n walletUrls: {\n mainnet: 'https://web-wallet.ultra.io',\n testnet: 'https://web-wallet.staging.ultra.io',\n },\n networkInfo: {\n mainnet: {\n chainId: 'a9c481dfbc7d9506dc7e87e9a137c931b0a9303f64fd7a1d08b8230133920097',\n },\n testnet: {\n chainId: '7fc56be645bb76ab9d747b53089f132dcb7681db06f0852cfa03eaf6f7ac80e9',\n },\n },\n checkWindowInterval: 500,\n handshakeTimeout: 10_000,\n});\n\nexport default UltraWalletSdkConfig;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"web.provider.d.ts","sourceRoot":"","sources":["../../../../../../../libs/wallet-sdk/src/lib/providers/web-provider/web.provider.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,WAAY,YAAW,mBAAmB;IAIzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAHrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAErB,OAAO,CAAC,EAAE,qBAAqB;IAK5D,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAIjE,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAI7C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAIvE,eAAe,CACb,WAAW,EAAE,qBAAqB,GAAG,qBAAqB,EAAE,GAC3D,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAIhD,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAI5C,YAAY,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAOpG,OAAO,CAAC,gBAAgB;CAIzB"}
1
+ {"version":3,"file":"web.provider.d.ts","sourceRoot":"","sources":["../../../../../../../libs/wallet-sdk/src/lib/providers/web-provider/web.provider.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAEhB,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,WAAY,YAAW,mBAAmB;IAIzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAHrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;gBAErB,OAAO,CAAC,EAAE,qBAAqB;IAK5D,OAAO,CAAC,CAAC,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAIjE,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAI7C,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;IAIvE,eAAe,CACb,WAAW,EAAE,qBAAqB,GAAG,qBAAqB,EAAE,GAC3D,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAI1C,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAuBlD,YAAY,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;IAOpG,OAAO,CAAC,gBAAgB;CAIzB"}
@@ -1,6 +1,7 @@
1
1
  import { ClientMessenger } from '../../common/client-messenger';
2
2
  import { WindowManager } from '../../common/window-manager';
3
3
  import UltraWalletSdkConfig from '../../config/ultra-wallet-sdk.config';
4
+ import { ResponseStatus, } from '../../interfaces';
4
5
  export class WebProvider {
5
6
  constructor(options) {
6
7
  this.options = options;
@@ -19,8 +20,24 @@ export class WebProvider {
19
20
  signTransaction(transaction) {
20
21
  return this.clientMessenger.sendRequest('signTransaction', { transaction });
21
22
  }
22
- getChainId() {
23
- return this.clientMessenger.sendRequest('getChainId', {});
23
+ async getChainId() {
24
+ const environment = this.options?.environment || 'mainnet';
25
+ switch (environment) {
26
+ case 'mainnet':
27
+ const mainnetChainId = UltraWalletSdkConfig.networkInfo.mainnet.chainId;
28
+ return {
29
+ status: ResponseStatus.SUCCESS,
30
+ data: mainnetChainId,
31
+ };
32
+ case 'testnet':
33
+ const testnetChainId = UltraWalletSdkConfig.networkInfo.testnet.chainId;
34
+ return {
35
+ status: ResponseStatus.SUCCESS,
36
+ data: testnetChainId,
37
+ };
38
+ default:
39
+ return this.clientMessenger.sendRequest('getChainId', {});
40
+ }
24
41
  }
25
42
  purchaseItem(itemType, itemId) {
26
43
  return this.clientMessenger.sendRequest('purchaseItem', {
@@ -1 +1 @@
1
- {"version":3,"file":"web.provider.js","sourceRoot":"","sources":["../../../../../../../libs/wallet-sdk/src/lib/providers/web-provider/web.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,oBAAoB,MAAM,sCAAsC,CAAC;AAcxE,MAAM,OAAO,WAAW;IAItB,YAA6B,OAA+B;QAA/B,YAAO,GAAP,OAAO,CAAwB;QAC1D,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,CAAC,CAAiB;QACvB,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAgB,SAAS,EAAE,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAU,YAAY,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,WAAW,CAAC,OAAe;QACzB,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAoB,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,eAAe,CACb,WAA4D;QAE5D,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAwB,iBAAiB,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAS,YAAY,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IAED,YAAY,CAAC,QAA0B,EAAE,MAAc;QACrD,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAqB,cAAc,EAAE;YAC1E,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB;QACtB,MAAM,GAAG,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,IAAI,SAAS,CAAC,CAAC;QACpF,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IACzC,CAAC;CACF","sourcesContent":["import { ClientMessenger } from '../../common/client-messenger';\nimport { WindowManager } from '../../common/window-manager';\nimport UltraWalletSdkConfig from '../../config/ultra-wallet-sdk.config';\nimport {\n BlockchainTransaction,\n ConnectParams,\n ConnectResult,\n PurchaseItemResult,\n PurchaseItemType,\n SignMessageResult,\n SignTransactionResult,\n UltraResponse,\n UltraWalletProvider,\n UltraWalletSdkOptions,\n} from '../../interfaces';\n\nexport class WebProvider implements UltraWalletProvider {\n private readonly windowManager: WindowManager;\n private readonly clientMessenger: ClientMessenger;\n\n constructor(private readonly options?: UltraWalletSdkOptions) {\n this.windowManager = new WindowManager(this.resolveWalletUrl());\n this.clientMessenger = new ClientMessenger(this.windowManager);\n }\n\n connect(_?: ConnectParams): Promise<UltraResponse<ConnectResult>> {\n return this.clientMessenger.sendRequest<ConnectResult>('connect', {});\n }\n\n disconnect(): Promise<UltraResponse<boolean>> {\n return this.clientMessenger.sendRequest<boolean>('disconnect', {});\n }\n\n signMessage(message: string): Promise<UltraResponse<SignMessageResult>> {\n return this.clientMessenger.sendRequest<SignMessageResult>('signMessage', { message });\n }\n\n signTransaction(\n transaction: BlockchainTransaction | BlockchainTransaction[],\n ): Promise<UltraResponse<SignTransactionResult>> {\n return this.clientMessenger.sendRequest<SignTransactionResult>('signTransaction', { transaction });\n }\n\n getChainId(): Promise<UltraResponse<string>> {\n return this.clientMessenger.sendRequest<string>('getChainId', {});\n }\n\n purchaseItem(itemType: PurchaseItemType, itemId: string): Promise<UltraResponse<PurchaseItemResult>> {\n return this.clientMessenger.sendRequest<PurchaseItemResult>('purchaseItem', {\n itemType,\n itemId,\n });\n }\n\n private resolveWalletUrl(): string {\n const env = UltraWalletSdkConfig.walletUrls[this.options?.environment || 'mainnet'];\n return env || this.options.environment;\n }\n}\n"]}
1
+ {"version":3,"file":"web.provider.js","sourceRoot":"","sources":["../../../../../../../libs/wallet-sdk/src/lib/providers/web-provider/web.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,oBAAoB,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAML,cAAc,GAMf,MAAM,kBAAkB,CAAC;AAE1B,MAAM,OAAO,WAAW;IAItB,YAA6B,OAA+B;QAA/B,YAAO,GAAP,OAAO,CAAwB;QAC1D,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAChE,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,CAAC,CAAiB;QACvB,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAgB,SAAS,EAAE,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAU,YAAY,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,WAAW,CAAC,OAAe;QACzB,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAoB,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,eAAe,CACb,WAA4D;QAE5D,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAwB,iBAAiB,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IACrG,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,WAAW,IAAI,SAAS,CAAC;QAE3D,QAAQ,WAAW,EAAE,CAAC;YACpB,KAAK,SAAS;gBACZ,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;gBACxE,OAAO;oBACL,MAAM,EAAE,cAAc,CAAC,OAAO;oBAC9B,IAAI,EAAE,cAAc;iBACrB,CAAC;YAEJ,KAAK,SAAS;gBACZ,MAAM,cAAc,GAAG,oBAAoB,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC;gBACxE,OAAO;oBACL,MAAM,EAAE,cAAc,CAAC,OAAO;oBAC9B,IAAI,EAAE,cAAc;iBACrB,CAAC;YAEJ;gBACE,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAS,YAAY,EAAE,EAAE,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAED,YAAY,CAAC,QAA0B,EAAE,MAAc;QACrD,OAAO,IAAI,CAAC,eAAe,CAAC,WAAW,CAAqB,cAAc,EAAE;YAC1E,QAAQ;YACR,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB;QACtB,MAAM,GAAG,GAAG,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,IAAI,SAAS,CAAC,CAAC;QACpF,OAAO,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;IACzC,CAAC;CACF","sourcesContent":["import { ClientMessenger } from '../../common/client-messenger';\nimport { WindowManager } from '../../common/window-manager';\nimport UltraWalletSdkConfig from '../../config/ultra-wallet-sdk.config';\nimport {\n BlockchainTransaction,\n ConnectParams,\n ConnectResult,\n PurchaseItemResult,\n PurchaseItemType,\n ResponseStatus,\n SignMessageResult,\n SignTransactionResult,\n UltraResponse,\n UltraWalletProvider,\n UltraWalletSdkOptions,\n} from '../../interfaces';\n\nexport class WebProvider implements UltraWalletProvider {\n private readonly windowManager: WindowManager;\n private readonly clientMessenger: ClientMessenger;\n\n constructor(private readonly options?: UltraWalletSdkOptions) {\n this.windowManager = new WindowManager(this.resolveWalletUrl());\n this.clientMessenger = new ClientMessenger(this.windowManager);\n }\n\n connect(_?: ConnectParams): Promise<UltraResponse<ConnectResult>> {\n return this.clientMessenger.sendRequest<ConnectResult>('connect', {});\n }\n\n disconnect(): Promise<UltraResponse<boolean>> {\n return this.clientMessenger.sendRequest<boolean>('disconnect', {});\n }\n\n signMessage(message: string): Promise<UltraResponse<SignMessageResult>> {\n return this.clientMessenger.sendRequest<SignMessageResult>('signMessage', { message });\n }\n\n signTransaction(\n transaction: BlockchainTransaction | BlockchainTransaction[],\n ): Promise<UltraResponse<SignTransactionResult>> {\n return this.clientMessenger.sendRequest<SignTransactionResult>('signTransaction', { transaction });\n }\n\n async getChainId(): Promise<UltraResponse<string>> {\n const environment = this.options?.environment || 'mainnet';\n\n switch (environment) {\n case 'mainnet':\n const mainnetChainId = UltraWalletSdkConfig.networkInfo.mainnet.chainId;\n return {\n status: ResponseStatus.SUCCESS,\n data: mainnetChainId,\n };\n\n case 'testnet':\n const testnetChainId = UltraWalletSdkConfig.networkInfo.testnet.chainId;\n return {\n status: ResponseStatus.SUCCESS,\n data: testnetChainId,\n };\n\n default:\n return this.clientMessenger.sendRequest<string>('getChainId', {});\n }\n }\n\n purchaseItem(itemType: PurchaseItemType, itemId: string): Promise<UltraResponse<PurchaseItemResult>> {\n return this.clientMessenger.sendRequest<PurchaseItemResult>('purchaseItem', {\n itemType,\n itemId,\n });\n }\n\n private resolveWalletUrl(): string {\n const env = UltraWalletSdkConfig.walletUrls[this.options?.environment || 'mainnet'];\n return env || this.options.environment;\n }\n}\n"]}