@ultraos/wallet-sdk 0.2.0 → 0.3.0
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 +2 -2
- package/src/lib/interfaces/blockchain-transaction.interface.d.ts +40 -1
- package/src/lib/interfaces/blockchain-transaction.interface.d.ts.map +1 -1
- package/src/lib/interfaces/blockchain-transaction.interface.js.map +1 -1
- package/src/lib/interfaces/wallet-provider-response.interface.d.ts +83 -0
- package/src/lib/interfaces/wallet-provider-response.interface.d.ts.map +1 -1
- package/src/lib/interfaces/wallet-provider-response.interface.js.map +1 -1
- package/src/lib/interfaces/wallet-provider.interface.d.ts +61 -1
- package/src/lib/interfaces/wallet-provider.interface.d.ts.map +1 -1
- package/src/lib/interfaces/wallet-provider.interface.js.map +1 -1
- package/src/lib/providers/extension-provider/extension.provider.d.ts +46 -6
- package/src/lib/providers/extension-provider/extension.provider.d.ts.map +1 -1
- package/src/lib/providers/extension-provider/extension.provider.js +188 -7
- package/src/lib/providers/extension-provider/extension.provider.js.map +1 -1
- package/src/lib/providers/web-provider/web.provider.d.ts +15 -1
- package/src/lib/providers/web-provider/web.provider.d.ts.map +1 -1
- package/src/lib/providers/web-provider/web.provider.js +37 -0
- package/src/lib/providers/web-provider/web.provider.js.map +1 -1
- package/src/lib/ultra-wallet-sdk.d.ts +15 -1
- package/src/lib/ultra-wallet-sdk.d.ts.map +1 -1
- package/src/lib/ultra-wallet-sdk.js +30 -0
- package/src/lib/ultra-wallet-sdk.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ultraos/wallet-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"homepage": "https://developers.ultra.io",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"json-rpc-2.0": "^1.7.0",
|
|
@@ -13,4 +13,4 @@
|
|
|
13
13
|
"access": "public"
|
|
14
14
|
},
|
|
15
15
|
"module": "./src/index.js"
|
|
16
|
-
}
|
|
16
|
+
}
|
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents a structured authorization entry for a blockchain transaction,
|
|
3
|
+
* specifying the actor account and required permission level.
|
|
4
|
+
*/
|
|
5
|
+
export interface StructuredAuthorization {
|
|
6
|
+
/**
|
|
7
|
+
* The account name authorizing the transaction.
|
|
8
|
+
*/
|
|
9
|
+
actor: string;
|
|
10
|
+
/**
|
|
11
|
+
* The permission level used for authorization (e.g., "active", "owner").
|
|
12
|
+
*/
|
|
13
|
+
permission: string;
|
|
14
|
+
}
|
|
1
15
|
/**
|
|
2
16
|
* Defines the structure of a blockchain transaction request to be signed by the Ultra Wallet.
|
|
3
17
|
*/
|
|
@@ -15,9 +29,15 @@ export interface BlockchainTransaction {
|
|
|
15
29
|
*/
|
|
16
30
|
data: any;
|
|
17
31
|
/**
|
|
18
|
-
* List of authorizations (account@permission)
|
|
32
|
+
* List of authorizations in legacy string format (account@permission).
|
|
33
|
+
* @deprecated Use `authorization` with `StructuredAuthorization[]` instead.
|
|
19
34
|
*/
|
|
20
35
|
authorizations?: string[];
|
|
36
|
+
/**
|
|
37
|
+
* List of structured authorizations specifying actor and permission separately.
|
|
38
|
+
* Preferred over the legacy `authorizations` string array.
|
|
39
|
+
*/
|
|
40
|
+
authorization?: StructuredAuthorization[];
|
|
21
41
|
}
|
|
22
42
|
export interface SignTransactionOptions {
|
|
23
43
|
/**
|
|
@@ -25,4 +45,23 @@ export interface SignTransactionOptions {
|
|
|
25
45
|
*/
|
|
26
46
|
signOnly?: boolean;
|
|
27
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Represents a single authorization that the wallet can sign for.
|
|
50
|
+
* Returned by getAvailableAuthorizations() so dApps can discover
|
|
51
|
+
* which account@permission pairs the wallet holds keys for.
|
|
52
|
+
*/
|
|
53
|
+
export interface AvailableAuth {
|
|
54
|
+
/**
|
|
55
|
+
* The blockchain account name.
|
|
56
|
+
*/
|
|
57
|
+
accountName: string;
|
|
58
|
+
/**
|
|
59
|
+
* The permission level (e.g., "active", "owner").
|
|
60
|
+
*/
|
|
61
|
+
permission: string;
|
|
62
|
+
/**
|
|
63
|
+
* The public key that authorizes this permission.
|
|
64
|
+
*/
|
|
65
|
+
publicKey: string;
|
|
66
|
+
}
|
|
28
67
|
//# sourceMappingURL=blockchain-transaction.interface.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blockchain-transaction.interface.d.ts","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/interfaces/blockchain-transaction.interface.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,EAAE,GAAG,CAAC;IACV
|
|
1
|
+
{"version":3,"file":"blockchain-transaction.interface.d.ts","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/interfaces/blockchain-transaction.interface.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,IAAI,EAAE,GAAG,CAAC;IACV;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;OAGG;IACH,aAAa,CAAC,EAAE,uBAAuB,EAAE,CAAC;CAC3C;AAED,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blockchain-transaction.interface.js","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/interfaces/blockchain-transaction.interface.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Defines the structure of a blockchain transaction request to be signed by the Ultra Wallet.\n */\nexport interface BlockchainTransaction {\n /**\n * The smart contract address or name to interact with.\n */\n contract: string;\n /**\n * The action or method to call on the contract.\n */\n action: string;\n /**\n * The data payload for the contract action.\n */\n data: any;\n /**\n * List of authorizations (account@permission)
|
|
1
|
+
{"version":3,"file":"blockchain-transaction.interface.js","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/interfaces/blockchain-transaction.interface.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Represents a structured authorization entry for a blockchain transaction,\n * specifying the actor account and required permission level.\n */\nexport interface StructuredAuthorization {\n /**\n * The account name authorizing the transaction.\n */\n actor: string;\n /**\n * The permission level used for authorization (e.g., \"active\", \"owner\").\n */\n permission: string;\n}\n\n/**\n * Defines the structure of a blockchain transaction request to be signed by the Ultra Wallet.\n */\nexport interface BlockchainTransaction {\n /**\n * The smart contract address or name to interact with.\n */\n contract: string;\n /**\n * The action or method to call on the contract.\n */\n action: string;\n /**\n * The data payload for the contract action.\n */\n data: any;\n /**\n * List of authorizations in legacy string format (account@permission).\n * @deprecated Use `authorization` with `StructuredAuthorization[]` instead.\n */\n authorizations?: string[];\n /**\n * List of structured authorizations specifying actor and permission separately.\n * Preferred over the legacy `authorizations` string array.\n */\n authorization?: StructuredAuthorization[];\n}\n\nexport interface SignTransactionOptions {\n /**\n * If true, only sign the transaction, don't broadcast it\n */\n signOnly?: boolean;\n}\n\n/**\n * Represents a single authorization that the wallet can sign for.\n * Returned by getAvailableAuthorizations() so dApps can discover\n * which account@permission pairs the wallet holds keys for.\n */\nexport interface AvailableAuth {\n /**\n * The blockchain account name.\n */\n accountName: string;\n /**\n * The permission level (e.g., \"active\", \"owner\").\n */\n permission: string;\n /**\n * The public key that authorizes this permission.\n */\n publicKey: string;\n}\n"]}
|
|
@@ -35,18 +35,95 @@ export declare enum ResponseStatus {
|
|
|
35
35
|
* A boolean indicating whether the disconnection was successful.
|
|
36
36
|
*/
|
|
37
37
|
export type DisconnectResponse = boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Represents a single permission entry associated with a blockchain account.
|
|
40
|
+
*/
|
|
41
|
+
export interface PermissionInfo {
|
|
42
|
+
/**
|
|
43
|
+
* The permission level name (e.g., "active", "owner").
|
|
44
|
+
*/
|
|
45
|
+
name: string;
|
|
46
|
+
/**
|
|
47
|
+
* The public keys associated with this permission.
|
|
48
|
+
*/
|
|
49
|
+
publicKeys: string[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Represents a blockchain account with its associated permissions.
|
|
53
|
+
*/
|
|
54
|
+
export interface AccountInfo {
|
|
55
|
+
/**
|
|
56
|
+
* The blockchain account name.
|
|
57
|
+
*/
|
|
58
|
+
accountName: string;
|
|
59
|
+
/**
|
|
60
|
+
* The list of permissions associated with this account.
|
|
61
|
+
*/
|
|
62
|
+
permissions: PermissionInfo[];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Represents information about the connected blockchain network.
|
|
66
|
+
*/
|
|
67
|
+
export interface NetworkInfo {
|
|
68
|
+
/**
|
|
69
|
+
* The human-readable name of the network (e.g., "mainnet", "testnet").
|
|
70
|
+
*/
|
|
71
|
+
name: string;
|
|
72
|
+
/**
|
|
73
|
+
* The unique chain identifier.
|
|
74
|
+
*/
|
|
75
|
+
chainId: string;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Extended network information including connection details.
|
|
79
|
+
* Returned by getNetwork, getNetworks, and accepted by addNetwork.
|
|
80
|
+
*/
|
|
81
|
+
export interface NetworkDetails {
|
|
82
|
+
/**
|
|
83
|
+
* The human-readable name of the network (e.g., "mainnet", "testnet").
|
|
84
|
+
*/
|
|
85
|
+
name: string;
|
|
86
|
+
/**
|
|
87
|
+
* The unique chain identifier.
|
|
88
|
+
*/
|
|
89
|
+
chainId: string;
|
|
90
|
+
/**
|
|
91
|
+
* The RPC node URL for the network.
|
|
92
|
+
*/
|
|
93
|
+
nodeUrl: string;
|
|
94
|
+
/**
|
|
95
|
+
* Whether this is a user-defined custom network.
|
|
96
|
+
*/
|
|
97
|
+
isCustom?: boolean;
|
|
98
|
+
}
|
|
38
99
|
/**
|
|
39
100
|
* Represents the result of a successful connection request, containing the user's account details.
|
|
101
|
+
* Backward-compatible: legacy fields `blockchainid` and `publicKey` are preserved alongside
|
|
102
|
+
* the new multi-account fields.
|
|
40
103
|
*/
|
|
41
104
|
export type ConnectResult = {
|
|
42
105
|
/**
|
|
43
106
|
* The blockchain network identifier.
|
|
107
|
+
* @deprecated Use `network.chainId` instead.
|
|
44
108
|
*/
|
|
45
109
|
blockchainid: string;
|
|
46
110
|
/**
|
|
47
111
|
* The public key associated with the user's account.
|
|
112
|
+
* @deprecated Use `selectedAccount.permissions[n].publicKeys` instead.
|
|
48
113
|
*/
|
|
49
114
|
publicKey: string;
|
|
115
|
+
/**
|
|
116
|
+
* All accounts available in the connected wallet.
|
|
117
|
+
*/
|
|
118
|
+
accounts?: AccountInfo[];
|
|
119
|
+
/**
|
|
120
|
+
* The currently selected account.
|
|
121
|
+
*/
|
|
122
|
+
selectedAccount?: AccountInfo;
|
|
123
|
+
/**
|
|
124
|
+
* Information about the connected blockchain network.
|
|
125
|
+
*/
|
|
126
|
+
network?: NetworkInfo;
|
|
50
127
|
};
|
|
51
128
|
/**
|
|
52
129
|
* The result structure returned after a successful item purchase using the Ultra Wallet.
|
|
@@ -86,6 +163,12 @@ export interface SignTransactionResult {
|
|
|
86
163
|
* The hash of the signed blockchain transaction.
|
|
87
164
|
*/
|
|
88
165
|
transactionHash?: string;
|
|
166
|
+
/**
|
|
167
|
+
* Authorizations that couldn't be signed because the wallet lacks the keys.
|
|
168
|
+
* Format: ["account@permission", ...]
|
|
169
|
+
* Absent or empty means all authorizations were signed.
|
|
170
|
+
*/
|
|
171
|
+
unsignedAuth?: string[];
|
|
89
172
|
processed?: {
|
|
90
173
|
id: string;
|
|
91
174
|
block_num: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-provider-response.interface.d.ts","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/interfaces/wallet-provider-response.interface.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,GAAG;IACpC;;OAEG;IACH,MAAM,EAAE,cAAc,CAAC;IACvB;;OAEG;IACH,IAAI,EAAE,CAAC,CAAC;IACR;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,oBAAY,cAAc;IACxB,OAAO,YAAY;IACnB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEzC;;GAEG;AACH,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"wallet-provider-response.interface.d.ts","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/interfaces/wallet-provider-response.interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-provider-response.interface.js","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/interfaces/wallet-provider-response.interface.ts"],"names":[],"mappings":"AAyBA;;GAEG;AACH,MAAM,CAAN,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,qCAAmB,CAAA;IACnB,+BAAa,CAAA;IACb,iCAAe,CAAA;AACjB,CAAC,EAJW,cAAc,KAAd,cAAc,QAIzB","sourcesContent":["/**\n * A generic wrapper for all Ultra Wallet SDK responses.\n * Encapsulates the status, data payload, and optional error messaging or codes.\n *\n * @template T The type of the data payload contained in the response.\n */\nexport interface UltraResponse<T = any> {\n /**\n * The status of the response, e.g., success, fail, or error.\n */\n status: ResponseStatus;\n /**\n * The actual response data payload.\n */\n data: T;\n /**\n * Optional end-user-readable message, explaining what went wrong (if applicable).\n */\n message?: string;\n /**\n * Optional error or status code.\n */\n code?: number;\n}\n\n/**\n * Enumeration of possible response statuses returned by the Ultra Wallet SDK.\n */\nexport enum ResponseStatus {\n SUCCESS = 'success',\n FAIL = 'fail',\n ERROR = 'error',\n}\n\n/**\n * Represents the result of a disconnect request.\n * A boolean indicating whether the disconnection was successful.\n */\nexport type DisconnectResponse = boolean;\n\n/**\n * Represents the result of a successful connection request, containing the user's account details.\n */\nexport type ConnectResult = {\n /**\n * The blockchain network identifier.\n */\n blockchainid: string;\n /**\n * The public key associated with the user's account.\n */\n publicKey: string;\n};\n\n/**\n * The result structure returned after a successful item purchase using the Ultra Wallet.\n * Contains metadata about the purchased items and the associated blockchain transaction.\n */\nexport interface PurchaseItemResult {\n /**\n * An ID associated with the purchase order, used for support requests if required.\n */\n orderHash: string;\n\n items: {\n /**\n * The ID of the minted Uniq.\n */\n artifactId: string;\n /**\n * The purchased item ID.\n */\n productId: string;\n /**\n * The ID of the transaction in the blockchain, useful for tracking the status and details of the transaction.\n */\n blockchainTransactionId: string;\n }[];\n}\n\n/**\n * Represents the result returned after signing a message with the Ultra Wallet.\n */\nexport interface SignMessageResult {\n signature: string;\n}\n\n/**\n * Represents the result returned after signing a blockchain transaction with the Ultra Wallet.\n */\nexport interface SignTransactionResult {\n /**\n * The hash of the signed blockchain transaction.\n */\n transactionHash?: string;\n processed?: {\n id: string;\n block_num: number;\n block_time: string; // ISO timestamp\n producer_block_id: string | null;\n receipt: {\n status: string;\n cpu_usage_us: number;\n net_usage_words: number;\n };\n elapsed: number;\n net_usage: number;\n scheduled: boolean;\n action_traces: ActionTrace[];\n account_ram_delta: any | null;\n except: any | null;\n error_code: number | null;\n };\n}\n\nexport interface ActionTrace {\n action_ordinal: number;\n creator_action_ordinal: number;\n closest_unnotified_ancestor_action_ordinal: number;\n receipt: {\n receiver: string;\n act_digest: string;\n global_sequence: number;\n recv_sequence: number;\n auth_sequence: [string, number][];\n code_sequence: number;\n abi_sequence: number;\n };\n receiver: string;\n act: {\n account: string;\n name: string;\n authorization: {\n actor: string;\n permission: string;\n }[];\n data: {\n from: string;\n to: string;\n quantity: string;\n memo: string;\n };\n hex_data: string;\n };\n context_free: boolean;\n elapsed: number;\n console: string;\n trx_id: string;\n block_num: number;\n block_time: string;\n producer_block_id: string | null;\n account_ram_deltas: any[];\n except: any | null;\n error_code: number | null;\n return_value_hex_data: string;\n inline_traces: ActionTrace[];\n}\n"]}
|
|
1
|
+
{"version":3,"file":"wallet-provider-response.interface.js","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/interfaces/wallet-provider-response.interface.ts"],"names":[],"mappings":"AAyBA;;GAEG;AACH,MAAM,CAAN,IAAY,cAIX;AAJD,WAAY,cAAc;IACxB,qCAAmB,CAAA;IACnB,+BAAa,CAAA;IACb,iCAAe,CAAA;AACjB,CAAC,EAJW,cAAc,KAAd,cAAc,QAIzB","sourcesContent":["/**\n * A generic wrapper for all Ultra Wallet SDK responses.\n * Encapsulates the status, data payload, and optional error messaging or codes.\n *\n * @template T The type of the data payload contained in the response.\n */\nexport interface UltraResponse<T = any> {\n /**\n * The status of the response, e.g., success, fail, or error.\n */\n status: ResponseStatus;\n /**\n * The actual response data payload.\n */\n data: T;\n /**\n * Optional end-user-readable message, explaining what went wrong (if applicable).\n */\n message?: string;\n /**\n * Optional error or status code.\n */\n code?: number;\n}\n\n/**\n * Enumeration of possible response statuses returned by the Ultra Wallet SDK.\n */\nexport enum ResponseStatus {\n SUCCESS = 'success',\n FAIL = 'fail',\n ERROR = 'error',\n}\n\n/**\n * Represents the result of a disconnect request.\n * A boolean indicating whether the disconnection was successful.\n */\nexport type DisconnectResponse = boolean;\n\n/**\n * Represents a single permission entry associated with a blockchain account.\n */\nexport interface PermissionInfo {\n /**\n * The permission level name (e.g., \"active\", \"owner\").\n */\n name: string;\n /**\n * The public keys associated with this permission.\n */\n publicKeys: string[];\n}\n\n/**\n * Represents a blockchain account with its associated permissions.\n */\nexport interface AccountInfo {\n /**\n * The blockchain account name.\n */\n accountName: string;\n /**\n * The list of permissions associated with this account.\n */\n permissions: PermissionInfo[];\n}\n\n/**\n * Represents information about the connected blockchain network.\n */\nexport interface NetworkInfo {\n /**\n * The human-readable name of the network (e.g., \"mainnet\", \"testnet\").\n */\n name: string;\n /**\n * The unique chain identifier.\n */\n chainId: string;\n}\n\n/**\n * Extended network information including connection details.\n * Returned by getNetwork, getNetworks, and accepted by addNetwork.\n */\nexport interface NetworkDetails {\n /**\n * The human-readable name of the network (e.g., \"mainnet\", \"testnet\").\n */\n name: string;\n /**\n * The unique chain identifier.\n */\n chainId: string;\n /**\n * The RPC node URL for the network.\n */\n nodeUrl: string;\n /**\n * Whether this is a user-defined custom network.\n */\n isCustom?: boolean;\n}\n\n/**\n * Represents the result of a successful connection request, containing the user's account details.\n * Backward-compatible: legacy fields `blockchainid` and `publicKey` are preserved alongside\n * the new multi-account fields.\n */\nexport type ConnectResult = {\n /**\n * The blockchain network identifier.\n * @deprecated Use `network.chainId` instead.\n */\n blockchainid: string;\n /**\n * The public key associated with the user's account.\n * @deprecated Use `selectedAccount.permissions[n].publicKeys` instead.\n */\n publicKey: string;\n /**\n * All accounts available in the connected wallet.\n */\n accounts?: AccountInfo[];\n /**\n * The currently selected account.\n */\n selectedAccount?: AccountInfo;\n /**\n * Information about the connected blockchain network.\n */\n network?: NetworkInfo;\n};\n\n/**\n * The result structure returned after a successful item purchase using the Ultra Wallet.\n * Contains metadata about the purchased items and the associated blockchain transaction.\n */\nexport interface PurchaseItemResult {\n /**\n * An ID associated with the purchase order, used for support requests if required.\n */\n orderHash: string;\n\n items: {\n /**\n * The ID of the minted Uniq.\n */\n artifactId: string;\n /**\n * The purchased item ID.\n */\n productId: string;\n /**\n * The ID of the transaction in the blockchain, useful for tracking the status and details of the transaction.\n */\n blockchainTransactionId: string;\n }[];\n}\n\n/**\n * Represents the result returned after signing a message with the Ultra Wallet.\n */\nexport interface SignMessageResult {\n signature: string;\n}\n\n/**\n * Represents the result returned after signing a blockchain transaction with the Ultra Wallet.\n */\nexport interface SignTransactionResult {\n /**\n * The hash of the signed blockchain transaction.\n */\n transactionHash?: string;\n /**\n * Authorizations that couldn't be signed because the wallet lacks the keys.\n * Format: [\"account@permission\", ...]\n * Absent or empty means all authorizations were signed.\n */\n unsignedAuth?: string[];\n processed?: {\n id: string;\n block_num: number;\n block_time: string; // ISO timestamp\n producer_block_id: string | null;\n receipt: {\n status: string;\n cpu_usage_us: number;\n net_usage_words: number;\n };\n elapsed: number;\n net_usage: number;\n scheduled: boolean;\n action_traces: ActionTrace[];\n account_ram_delta: any | null;\n except: any | null;\n error_code: number | null;\n };\n}\n\nexport interface ActionTrace {\n action_ordinal: number;\n creator_action_ordinal: number;\n closest_unnotified_ancestor_action_ordinal: number;\n receipt: {\n receiver: string;\n act_digest: string;\n global_sequence: number;\n recv_sequence: number;\n auth_sequence: [string, number][];\n code_sequence: number;\n abi_sequence: number;\n };\n receiver: string;\n act: {\n account: string;\n name: string;\n authorization: {\n actor: string;\n permission: string;\n }[];\n data: {\n from: string;\n to: string;\n quantity: string;\n memo: string;\n };\n hex_data: string;\n };\n context_free: boolean;\n elapsed: number;\n console: string;\n trx_id: string;\n block_num: number;\n block_time: string;\n producer_block_id: string | null;\n account_ram_deltas: any[];\n except: any | null;\n error_code: number | null;\n return_value_hex_data: string;\n inline_traces: ActionTrace[];\n}\n"]}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
import { BlockchainTransaction, SignTransactionOptions } from './blockchain-transaction.interface';
|
|
2
|
+
import { AvailableAuth } from './blockchain-transaction.interface';
|
|
2
3
|
import { ConnectParams } from './connect-params.interface';
|
|
3
4
|
import { PurchaseItemType } from './purchase-item.interface';
|
|
4
|
-
import { ConnectResult, DisconnectResponse, PurchaseItemResult, SignMessageResult, SignTransactionResult, UltraResponse } from './wallet-provider-response.interface';
|
|
5
|
+
import { AccountInfo, ConnectResult, DisconnectResponse, NetworkDetails, PurchaseItemResult, SignMessageResult, SignTransactionResult, UltraResponse } from './wallet-provider-response.interface';
|
|
6
|
+
/**
|
|
7
|
+
* Event types emitted by the wallet provider.
|
|
8
|
+
*/
|
|
9
|
+
export type WalletEventType = 'accountChanged' | 'networkChanged' | 'disconnect';
|
|
5
10
|
/**
|
|
6
11
|
* Defines the minimal interface that a wallet provider must implement for the Ultra Wallet SDK.
|
|
7
12
|
*/
|
|
@@ -38,5 +43,60 @@ export interface UltraWalletProvider {
|
|
|
38
43
|
* @param {string} itemId - The id of the item to purchase
|
|
39
44
|
*/
|
|
40
45
|
purchaseItem(itemType: PurchaseItemType, itemId: string): Promise<UltraResponse<PurchaseItemResult>>;
|
|
46
|
+
/**
|
|
47
|
+
* Get all accounts available in the connected wallet.
|
|
48
|
+
*/
|
|
49
|
+
getAccounts(): Promise<UltraResponse<AccountInfo[]>>;
|
|
50
|
+
/**
|
|
51
|
+
* Get the currently selected account in the wallet.
|
|
52
|
+
*/
|
|
53
|
+
getSelectedAccount(): Promise<UltraResponse<AccountInfo>>;
|
|
54
|
+
/**
|
|
55
|
+
* Get all authorizations (account@permission pairs) the wallet can sign for.
|
|
56
|
+
* Useful for dApps that need to know which authorities are available before
|
|
57
|
+
* constructing transactions.
|
|
58
|
+
*/
|
|
59
|
+
getAvailableAuthorizations(): Promise<UltraResponse<AvailableAuth[]>>;
|
|
60
|
+
/**
|
|
61
|
+
* Register a callback for a wallet event.
|
|
62
|
+
* @param event - The event type to listen for
|
|
63
|
+
* @param callback - The callback to invoke when the event fires
|
|
64
|
+
*/
|
|
65
|
+
on(event: WalletEventType, callback: (data: any) => void): void;
|
|
66
|
+
/**
|
|
67
|
+
* Remove a previously registered callback for a wallet event.
|
|
68
|
+
* @param event - The event type to stop listening for
|
|
69
|
+
* @param callback - The exact callback reference to remove
|
|
70
|
+
*/
|
|
71
|
+
off(event: WalletEventType, callback: (data: any) => void): void;
|
|
72
|
+
/**
|
|
73
|
+
* Request the wallet to switch to a different network.
|
|
74
|
+
* @param chainId - The chain identifier of the target network
|
|
75
|
+
*/
|
|
76
|
+
switchNetwork(chainId: string): Promise<UltraResponse<void>>;
|
|
77
|
+
/**
|
|
78
|
+
* Get information about the currently active network.
|
|
79
|
+
*/
|
|
80
|
+
getNetwork(): Promise<UltraResponse<NetworkDetails>>;
|
|
81
|
+
/**
|
|
82
|
+
* Get all networks configured in the wallet.
|
|
83
|
+
*/
|
|
84
|
+
getNetworks(): Promise<UltraResponse<NetworkDetails[]>>;
|
|
85
|
+
/**
|
|
86
|
+
* Add a custom network to the wallet.
|
|
87
|
+
* @param params - The network configuration to add
|
|
88
|
+
*/
|
|
89
|
+
addNetwork(params: {
|
|
90
|
+
name: string;
|
|
91
|
+
chainId: string;
|
|
92
|
+
nodeUrl: string;
|
|
93
|
+
}): Promise<UltraResponse<void>>;
|
|
94
|
+
/**
|
|
95
|
+
* Release any resources held by the provider (timers, window listeners,
|
|
96
|
+
* internal maps). After dispose() the provider is no longer usable —
|
|
97
|
+
* callers should drop the reference and construct a fresh one if needed.
|
|
98
|
+
* Implementations that hold no resources may safely no-op.
|
|
99
|
+
*/
|
|
100
|
+
dispose(): void;
|
|
41
101
|
}
|
|
42
102
|
//# sourceMappingURL=wallet-provider.interface.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-provider.interface.d.ts","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/interfaces/wallet-provider.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACd,MAAM,sCAAsC,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;IAEvE;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEzD;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExE;;;;OAIG;IACH,eAAe,CACb,WAAW,EAAE,qBAAqB,GAAG,qBAAqB,EAAE,EAC5D,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAEjD;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAE7C;;;;OAIG;IACH,YAAY,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"wallet-provider.interface.d.ts","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/interfaces/wallet-provider.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EACL,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACd,MAAM,sCAAsC,CAAC;AAE9C;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,YAAY,CAAC;AAEjF;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,OAAO,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;IAEvE;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAEzD;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExE;;;;OAIG;IACH,eAAe,CACb,WAAW,EAAE,qBAAqB,GAAG,qBAAqB,EAAE,EAC5D,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAEjD;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAE7C;;;;OAIG;IACH,YAAY,CAAC,QAAQ,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAErG;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAErD;;OAEG;IACH,kBAAkB,IAAI,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC;IAE1D;;;;OAIG;IACH,0BAA0B,IAAI,OAAO,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAEtE;;;;OAIG;IACH,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAEhE;;;;OAIG;IACH,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI,CAAC;IAEjE;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7D;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC;IAErD;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IAExD;;;OAGG;IACH,UAAU,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAErG;;;;;OAKG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-provider.interface.js","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/interfaces/wallet-provider.interface.ts"],"names":[],"mappings":"","sourcesContent":["import { BlockchainTransaction, SignTransactionOptions } from './blockchain-transaction.interface';\nimport { ConnectParams } from './connect-params.interface';\nimport { PurchaseItemType } from './purchase-item.interface';\nimport {\n ConnectResult,\n DisconnectResponse,\n PurchaseItemResult,\n SignMessageResult,\n SignTransactionResult,\n UltraResponse,\n} from './wallet-provider-response.interface';\n\n/**\n * Defines the minimal interface that a wallet provider must implement for the Ultra Wallet SDK.\n */\nexport interface UltraWalletProvider {\n /**\n * Prompt the user for permission to share his wallet info with the 3rd party application.\n * Once permission is established the first time, the 3rd party application will be whitelisted for future requests.\n * @param params.onlyIfTrusted - Do not prompt the user for permissions. Share current account info if Dapp is already trusted,\n * otherwise rejects the request.\n */\n connect(params?: ConnectParams): Promise<UltraResponse<ConnectResult>>;\n\n /**\n * Remove permission to interact with the 3rd party application\n */\n disconnect(): Promise<UltraResponse<DisconnectResponse>>;\n\n /**\n * Open a popup to sign a message\n * @param message - The message to sign. The message should be prefixed with \"0x:, UOSx:, or message:\"\n */\n signMessage(message: string): Promise<UltraResponse<SignMessageResult>>;\n\n /**\n * Open a popup to sign a transaction\n * @param transaction - The transaction to sign\n * @param options - The options for the transaction\n */\n signTransaction(\n transaction: BlockchainTransaction | BlockchainTransaction[],\n options?: SignTransactionOptions,\n ): Promise<UltraResponse<SignTransactionResult>>;\n\n /**\n * Get current chain id\n */\n getChainId(): Promise<UltraResponse<string>>;\n\n /**\n * Open a popup to purchase an item\n * @param {PurchaseItemType} itemType - The type of item to purchase\n * @param {string} itemId - The id of the item to purchase\n */\n purchaseItem(itemType: PurchaseItemType, itemId: string): Promise<UltraResponse<PurchaseItemResult>>;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"wallet-provider.interface.js","sourceRoot":"","sources":["../../../../../../libs/wallet-sdk/src/lib/interfaces/wallet-provider.interface.ts"],"names":[],"mappings":"","sourcesContent":["import { BlockchainTransaction, SignTransactionOptions } from './blockchain-transaction.interface';\nimport { AvailableAuth } from './blockchain-transaction.interface';\nimport { ConnectParams } from './connect-params.interface';\nimport { PurchaseItemType } from './purchase-item.interface';\nimport {\n AccountInfo,\n ConnectResult,\n DisconnectResponse,\n NetworkDetails,\n PurchaseItemResult,\n SignMessageResult,\n SignTransactionResult,\n UltraResponse,\n} from './wallet-provider-response.interface';\n\n/**\n * Event types emitted by the wallet provider.\n */\nexport type WalletEventType = 'accountChanged' | 'networkChanged' | 'disconnect';\n\n/**\n * Defines the minimal interface that a wallet provider must implement for the Ultra Wallet SDK.\n */\nexport interface UltraWalletProvider {\n /**\n * Prompt the user for permission to share his wallet info with the 3rd party application.\n * Once permission is established the first time, the 3rd party application will be whitelisted for future requests.\n * @param params.onlyIfTrusted - Do not prompt the user for permissions. Share current account info if Dapp is already trusted,\n * otherwise rejects the request.\n */\n connect(params?: ConnectParams): Promise<UltraResponse<ConnectResult>>;\n\n /**\n * Remove permission to interact with the 3rd party application\n */\n disconnect(): Promise<UltraResponse<DisconnectResponse>>;\n\n /**\n * Open a popup to sign a message\n * @param message - The message to sign. The message should be prefixed with \"0x:, UOSx:, or message:\"\n */\n signMessage(message: string): Promise<UltraResponse<SignMessageResult>>;\n\n /**\n * Open a popup to sign a transaction\n * @param transaction - The transaction to sign\n * @param options - The options for the transaction\n */\n signTransaction(\n transaction: BlockchainTransaction | BlockchainTransaction[],\n options?: SignTransactionOptions,\n ): Promise<UltraResponse<SignTransactionResult>>;\n\n /**\n * Get current chain id\n */\n getChainId(): Promise<UltraResponse<string>>;\n\n /**\n * Open a popup to purchase an item\n * @param {PurchaseItemType} itemType - The type of item to purchase\n * @param {string} itemId - The id of the item to purchase\n */\n purchaseItem(itemType: PurchaseItemType, itemId: string): Promise<UltraResponse<PurchaseItemResult>>;\n\n /**\n * Get all accounts available in the connected wallet.\n */\n getAccounts(): Promise<UltraResponse<AccountInfo[]>>;\n\n /**\n * Get the currently selected account in the wallet.\n */\n getSelectedAccount(): Promise<UltraResponse<AccountInfo>>;\n\n /**\n * Get all authorizations (account@permission pairs) the wallet can sign for.\n * Useful for dApps that need to know which authorities are available before\n * constructing transactions.\n */\n getAvailableAuthorizations(): Promise<UltraResponse<AvailableAuth[]>>;\n\n /**\n * Register a callback for a wallet event.\n * @param event - The event type to listen for\n * @param callback - The callback to invoke when the event fires\n */\n on(event: WalletEventType, callback: (data: any) => void): void;\n\n /**\n * Remove a previously registered callback for a wallet event.\n * @param event - The event type to stop listening for\n * @param callback - The exact callback reference to remove\n */\n off(event: WalletEventType, callback: (data: any) => void): void;\n\n /**\n * Request the wallet to switch to a different network.\n * @param chainId - The chain identifier of the target network\n */\n switchNetwork(chainId: string): Promise<UltraResponse<void>>;\n\n /**\n * Get information about the currently active network.\n */\n getNetwork(): Promise<UltraResponse<NetworkDetails>>;\n\n /**\n * Get all networks configured in the wallet.\n */\n getNetworks(): Promise<UltraResponse<NetworkDetails[]>>;\n\n /**\n * Add a custom network to the wallet.\n * @param params - The network configuration to add\n */\n addNetwork(params: { name: string; chainId: string; nodeUrl: string }): Promise<UltraResponse<void>>;\n\n /**\n * Release any resources held by the provider (timers, window listeners,\n * internal maps). After dispose() the provider is no longer usable —\n * callers should drop the reference and construct a fresh one if needed.\n * Implementations that hold no resources may safely no-op.\n */\n dispose(): void;\n}\n"]}
|
|
@@ -1,17 +1,57 @@
|
|
|
1
|
-
import { BlockchainTransaction, ConnectParams, ConnectResult, PurchaseItemResult, PurchaseItemType, SignMessageResult, SignTransactionOptions, SignTransactionResult, UltraResponse, UltraWalletProvider, UltraWalletSdkOptions } from '../../interfaces';
|
|
2
|
-
declare global {
|
|
3
|
-
interface Window {
|
|
4
|
-
ultra: UltraWalletProvider;
|
|
5
|
-
}
|
|
6
|
-
}
|
|
1
|
+
import { AccountInfo, AvailableAuth, BlockchainTransaction, ConnectParams, ConnectResult, NetworkDetails, PurchaseItemResult, PurchaseItemType, SignMessageResult, SignTransactionOptions, SignTransactionResult, UltraResponse, UltraWalletProvider, UltraWalletSdkOptions, WalletEventType } from '../../interfaces';
|
|
7
2
|
export declare class ExtensionProvider implements UltraWalletProvider {
|
|
8
3
|
private readonly options?;
|
|
4
|
+
private readonly eventListeners;
|
|
5
|
+
private readonly listenerIds;
|
|
6
|
+
private heartbeatTimer;
|
|
7
|
+
private messageHandler;
|
|
8
|
+
/**
|
|
9
|
+
* Access window.ultra typed as UltraWalletProvider.
|
|
10
|
+
* At runtime, window.ultra is a Proxy that handles all SDK method calls.
|
|
11
|
+
* We cast here rather than declaring a global Window augmentation to avoid
|
|
12
|
+
* conflicting with the app-level window.d.ts which types window.ultra as IUltraInternalAPI.
|
|
13
|
+
*/
|
|
14
|
+
private get walletProvider();
|
|
9
15
|
constructor(options?: UltraWalletSdkOptions);
|
|
16
|
+
/**
|
|
17
|
+
* Wire-format match: the BG's MessageType.EVENT serialises as the uppercase
|
|
18
|
+
* string 'EVENT'. We uppercase the incoming type so a future SDK build that
|
|
19
|
+
* emits lowercase (or any case variant) still dispatches. Payload shape:
|
|
20
|
+
* `{ event, origin, data }`.
|
|
21
|
+
*/
|
|
22
|
+
private initWindowEventListener;
|
|
10
23
|
connect(params?: ConnectParams): Promise<UltraResponse<ConnectResult>>;
|
|
11
24
|
disconnect(): Promise<UltraResponse<boolean>>;
|
|
12
25
|
signMessage(message: string): Promise<UltraResponse<SignMessageResult>>;
|
|
13
26
|
signTransaction(transaction: BlockchainTransaction | BlockchainTransaction[], options?: SignTransactionOptions): Promise<UltraResponse<SignTransactionResult>>;
|
|
14
27
|
getChainId(): Promise<UltraResponse<string>>;
|
|
15
28
|
purchaseItem(itemType: PurchaseItemType, itemId: string): Promise<UltraResponse<PurchaseItemResult>>;
|
|
29
|
+
getAccounts(): Promise<UltraResponse<AccountInfo[]>>;
|
|
30
|
+
getSelectedAccount(): Promise<UltraResponse<AccountInfo>>;
|
|
31
|
+
getAvailableAuthorizations(): Promise<UltraResponse<AvailableAuth[]>>;
|
|
32
|
+
on(event: WalletEventType, callback: (data: any) => void): void;
|
|
33
|
+
off(event: WalletEventType, callback: (data: any) => void): void;
|
|
34
|
+
switchNetwork(chainId: string): Promise<UltraResponse<void>>;
|
|
35
|
+
getNetwork(): Promise<UltraResponse<NetworkDetails>>;
|
|
36
|
+
getNetworks(): Promise<UltraResponse<NetworkDetails[]>>;
|
|
37
|
+
addNetwork(params: {
|
|
38
|
+
name: string;
|
|
39
|
+
chainId: string;
|
|
40
|
+
nodeUrl: string;
|
|
41
|
+
}): Promise<UltraResponse<void>>;
|
|
42
|
+
/**
|
|
43
|
+
* Detach the window message listener and clear timers + maps. Safe to call
|
|
44
|
+
* multiple times. Does NOT deregister each listener on the BG — the BG
|
|
45
|
+
* GCs on tab close (verified via the S5(b) dedup work + tab-close cleanup
|
|
46
|
+
* in `EventsService.removeTabListeners`). Calling N RPCs at dispose-time
|
|
47
|
+
* would slow the page-unload path for no benefit.
|
|
48
|
+
*/
|
|
49
|
+
dispose(): void;
|
|
50
|
+
private registerListenerWithExtension;
|
|
51
|
+
private deregisterListenerWithExtension;
|
|
52
|
+
private ensureHeartbeat;
|
|
53
|
+
private heartbeatTick;
|
|
54
|
+
private isExtensionAvailable;
|
|
55
|
+
private generateListenerId;
|
|
16
56
|
}
|
|
17
57
|
//# sourceMappingURL=extension.provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.provider.d.ts","sourceRoot":"","sources":["../../../../../../../libs/wallet-sdk/src/lib/providers/extension-provider/extension.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"extension.provider.d.ts","sourceRoot":"","sources":["../../../../../../../libs/wallet-sdk/src/lib/providers/extension-provider/extension.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EAChB,MAAM,kBAAkB,CAAC;AAgB1B,qBAAa,iBAAkB,YAAW,mBAAmB;IAgB/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAfrC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA0D;IACzF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,cAAc,CAA+C;IACrE,OAAO,CAAC,cAAc,CAAgD;IAEtE;;;;;OAKG;IACH,OAAO,KAAK,cAAc,GAEzB;gBAE4B,OAAO,CAAC,EAAE,qBAAqB;IAI5D;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAgBzB,OAAO,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAqB5E,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,EAC5D,OAAO,CAAC,EAAE,sBAAsB,GAC/B,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;IAIpG,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC;IAIpD,kBAAkB,IAAI,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAIzD,0BAA0B,IAAI,OAAO,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,CAAC;IAIrE,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAY/D,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAWhE,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAI5D,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IAIpD,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC;IAIvD,UAAU,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAIpG;;;;;;OAMG;IACH,OAAO,IAAI,IAAI;YAaD,6BAA6B;YAe7B,+BAA+B;IAe7C,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,kBAAkB;CAM3B"}
|
|
@@ -1,29 +1,210 @@
|
|
|
1
1
|
import { isValidChain } from '../../utils/chain-validator';
|
|
2
|
+
const HEARTBEAT_INTERVAL_MS = 2000;
|
|
2
3
|
export class ExtensionProvider {
|
|
4
|
+
/**
|
|
5
|
+
* Access window.ultra typed as UltraWalletProvider.
|
|
6
|
+
* At runtime, window.ultra is a Proxy that handles all SDK method calls.
|
|
7
|
+
* We cast here rather than declaring a global Window augmentation to avoid
|
|
8
|
+
* conflicting with the app-level window.d.ts which types window.ultra as IUltraInternalAPI.
|
|
9
|
+
*/
|
|
10
|
+
get walletProvider() {
|
|
11
|
+
return window.ultra;
|
|
12
|
+
}
|
|
3
13
|
constructor(options) {
|
|
4
14
|
this.options = options;
|
|
15
|
+
this.eventListeners = new Map();
|
|
16
|
+
this.listenerIds = new Map();
|
|
17
|
+
this.heartbeatTimer = null;
|
|
18
|
+
this.messageHandler = null;
|
|
19
|
+
this.initWindowEventListener();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Wire-format match: the BG's MessageType.EVENT serialises as the uppercase
|
|
23
|
+
* string 'EVENT'. We uppercase the incoming type so a future SDK build that
|
|
24
|
+
* emits lowercase (or any case variant) still dispatches. Payload shape:
|
|
25
|
+
* `{ event, origin, data }`.
|
|
26
|
+
*/
|
|
27
|
+
initWindowEventListener() {
|
|
28
|
+
if (typeof window === 'undefined')
|
|
29
|
+
return;
|
|
30
|
+
if (this.messageHandler)
|
|
31
|
+
return;
|
|
32
|
+
this.messageHandler = (event) => {
|
|
33
|
+
if (event.source !== window || !event.data)
|
|
34
|
+
return;
|
|
35
|
+
const msg = event.data;
|
|
36
|
+
const msgType = typeof msg.type === 'string' ? msg.type.toUpperCase() : '';
|
|
37
|
+
if (msgType !== 'EVENT' || !msg.payload)
|
|
38
|
+
return;
|
|
39
|
+
const eventName = msg.payload.event;
|
|
40
|
+
if (!eventName)
|
|
41
|
+
return;
|
|
42
|
+
const cbs = this.eventListeners.get(eventName);
|
|
43
|
+
if (cbs)
|
|
44
|
+
cbs.forEach((cb) => cb(msg.payload.data));
|
|
45
|
+
};
|
|
46
|
+
window.addEventListener('message', this.messageHandler);
|
|
5
47
|
}
|
|
6
48
|
async connect(params) {
|
|
7
|
-
const { data: chainId } = await
|
|
49
|
+
const { data: chainId } = await this.walletProvider.getChainId();
|
|
8
50
|
if (!isValidChain(this.options?.environment, chainId)) {
|
|
9
51
|
throw new Error(`Wallet environment mismatch: expected "${this.options?.environment}" chain, but received "${chainId}". Please verify the SDK configuration and the connected network.`);
|
|
10
52
|
}
|
|
11
|
-
|
|
53
|
+
const result = await this.walletProvider.connect(params);
|
|
54
|
+
// After connect() succeeds, the origin is now trusted in the BG. Any
|
|
55
|
+
// pre-connect on() calls registered listener-ids that the BG silently
|
|
56
|
+
// dropped (untrusted-origin no-op). Clear and re-register so the heartbeat
|
|
57
|
+
// observes the fresh state.
|
|
58
|
+
if (result?.status === 'success') {
|
|
59
|
+
this.listenerIds.clear();
|
|
60
|
+
for (const event of this.eventListeners.keys()) {
|
|
61
|
+
void this.registerListenerWithExtension(event);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return result;
|
|
12
65
|
}
|
|
13
66
|
disconnect() {
|
|
14
|
-
return
|
|
67
|
+
return this.walletProvider.disconnect();
|
|
15
68
|
}
|
|
16
69
|
signMessage(message) {
|
|
17
|
-
return
|
|
70
|
+
return this.walletProvider.signMessage(message);
|
|
18
71
|
}
|
|
19
72
|
signTransaction(transaction, options) {
|
|
20
|
-
return
|
|
73
|
+
return this.walletProvider.signTransaction(transaction, options);
|
|
21
74
|
}
|
|
22
75
|
getChainId() {
|
|
23
|
-
return
|
|
76
|
+
return this.walletProvider.getChainId();
|
|
24
77
|
}
|
|
25
78
|
purchaseItem(itemType, itemId) {
|
|
26
|
-
return
|
|
79
|
+
return this.walletProvider.purchaseItem(itemType, itemId);
|
|
80
|
+
}
|
|
81
|
+
getAccounts() {
|
|
82
|
+
return this.walletProvider.getAccounts();
|
|
83
|
+
}
|
|
84
|
+
getSelectedAccount() {
|
|
85
|
+
return this.walletProvider.getSelectedAccount();
|
|
86
|
+
}
|
|
87
|
+
getAvailableAuthorizations() {
|
|
88
|
+
return this.walletProvider.getAvailableAuthorizations();
|
|
89
|
+
}
|
|
90
|
+
on(event, callback) {
|
|
91
|
+
this.initWindowEventListener();
|
|
92
|
+
const cbs = this.eventListeners.get(event) ?? [];
|
|
93
|
+
cbs.push(callback);
|
|
94
|
+
this.eventListeners.set(event, cbs);
|
|
95
|
+
// Idempotent re-register: every on() call refreshes the BG's record of
|
|
96
|
+
// this listener-id. Defends against extension-reload wipe and the
|
|
97
|
+
// pre-connect untrusted-origin no-op race.
|
|
98
|
+
void this.registerListenerWithExtension(event);
|
|
99
|
+
this.ensureHeartbeat();
|
|
100
|
+
}
|
|
101
|
+
off(event, callback) {
|
|
102
|
+
const cbs = this.eventListeners.get(event);
|
|
103
|
+
if (!cbs)
|
|
104
|
+
return;
|
|
105
|
+
const idx = cbs.indexOf(callback);
|
|
106
|
+
if (idx >= 0)
|
|
107
|
+
cbs.splice(idx, 1);
|
|
108
|
+
if (cbs.length === 0) {
|
|
109
|
+
this.eventListeners.delete(event);
|
|
110
|
+
void this.deregisterListenerWithExtension(event);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
switchNetwork(chainId) {
|
|
114
|
+
return this.walletProvider.switchNetwork(chainId);
|
|
115
|
+
}
|
|
116
|
+
getNetwork() {
|
|
117
|
+
return this.walletProvider.getNetwork();
|
|
118
|
+
}
|
|
119
|
+
getNetworks() {
|
|
120
|
+
return this.walletProvider.getNetworks();
|
|
121
|
+
}
|
|
122
|
+
addNetwork(params) {
|
|
123
|
+
return this.walletProvider.addNetwork(params);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Detach the window message listener and clear timers + maps. Safe to call
|
|
127
|
+
* multiple times. Does NOT deregister each listener on the BG — the BG
|
|
128
|
+
* GCs on tab close (verified via the S5(b) dedup work + tab-close cleanup
|
|
129
|
+
* in `EventsService.removeTabListeners`). Calling N RPCs at dispose-time
|
|
130
|
+
* would slow the page-unload path for no benefit.
|
|
131
|
+
*/
|
|
132
|
+
dispose() {
|
|
133
|
+
if (this.heartbeatTimer != null) {
|
|
134
|
+
clearInterval(this.heartbeatTimer);
|
|
135
|
+
this.heartbeatTimer = null;
|
|
136
|
+
}
|
|
137
|
+
if (this.messageHandler && typeof window !== 'undefined') {
|
|
138
|
+
window.removeEventListener('message', this.messageHandler);
|
|
139
|
+
this.messageHandler = null;
|
|
140
|
+
}
|
|
141
|
+
this.eventListeners.clear();
|
|
142
|
+
this.listenerIds.clear();
|
|
143
|
+
}
|
|
144
|
+
async registerListenerWithExtension(event) {
|
|
145
|
+
if (!this.isExtensionAvailable())
|
|
146
|
+
return;
|
|
147
|
+
const id = this.listenerIds.get(event) ?? this.generateListenerId();
|
|
148
|
+
this.listenerIds.set(event, id);
|
|
149
|
+
try {
|
|
150
|
+
const result = this.walletProvider.addExtensionListener?.(event, id);
|
|
151
|
+
if (result && typeof result.catch === 'function') {
|
|
152
|
+
// Don't drop the id on rejection — heartbeat will retry.
|
|
153
|
+
result.catch(() => undefined);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
// Swallow: heartbeat retry will pick this up.
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async deregisterListenerWithExtension(event) {
|
|
161
|
+
if (!this.isExtensionAvailable())
|
|
162
|
+
return;
|
|
163
|
+
const id = this.listenerIds.get(event);
|
|
164
|
+
if (!id)
|
|
165
|
+
return;
|
|
166
|
+
this.listenerIds.delete(event);
|
|
167
|
+
try {
|
|
168
|
+
const result = this.walletProvider.removeExtensionListener?.(event, id);
|
|
169
|
+
if (result && typeof result.catch === 'function') {
|
|
170
|
+
result.catch(() => undefined);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
// Ignore — extension may have been removed.
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
ensureHeartbeat() {
|
|
178
|
+
if (this.heartbeatTimer != null || typeof window === 'undefined')
|
|
179
|
+
return;
|
|
180
|
+
// Cadence matches the toolkit's prior workaround. Lower = BG storage-write
|
|
181
|
+
// overhead; higher = wider post-reload event-drop window.
|
|
182
|
+
this.heartbeatTimer = setInterval(() => this.heartbeatTick(), HEARTBEAT_INTERVAL_MS);
|
|
183
|
+
}
|
|
184
|
+
heartbeatTick() {
|
|
185
|
+
if (!this.isExtensionAvailable())
|
|
186
|
+
return;
|
|
187
|
+
let hasAny = false;
|
|
188
|
+
for (const cbs of this.eventListeners.values()) {
|
|
189
|
+
if (cbs.length > 0) {
|
|
190
|
+
hasAny = true;
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
if (!hasAny)
|
|
195
|
+
return;
|
|
196
|
+
for (const event of this.eventListeners.keys()) {
|
|
197
|
+
void this.registerListenerWithExtension(event);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
isExtensionAvailable() {
|
|
201
|
+
return typeof window !== 'undefined' && !!window.ultra;
|
|
202
|
+
}
|
|
203
|
+
generateListenerId() {
|
|
204
|
+
if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
|
|
205
|
+
return crypto.randomUUID();
|
|
206
|
+
}
|
|
207
|
+
return Math.random().toString(36).slice(2) + Date.now().toString(36);
|
|
27
208
|
}
|
|
28
209
|
}
|
|
29
210
|
//# sourceMappingURL=extension.provider.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.provider.js","sourceRoot":"","sources":["../../../../../../../libs/wallet-sdk/src/lib/providers/extension-provider/extension.provider.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAQ3D,MAAM,OAAO,iBAAiB;IAC5B,YAA6B,OAA+B;QAA/B,YAAO,GAAP,OAAO,CAAwB;IAAG,CAAC;IAEhE,KAAK,CAAC,OAAO,CAAC,MAAsB;QAClC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;QAC1D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CACb,0CAA0C,IAAI,CAAC,OAAO,EAAE,WAAW,0BAA0B,OAAO,mEAAmE,CACxK,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,UAAU;QACR,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;IACnC,CAAC;IAED,WAAW,CAAC,OAAe;QACzB,OAAO,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED,eAAe,CACb,WAA4D,EAC5D,OAAgC;QAEhC,OAAO,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAED,UAAU;QACR,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;IACnC,CAAC;IAED,YAAY,CAAC,QAA0B,EAAE,MAAc;QACrD,OAAO,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;CACF","sourcesContent":["import {\n BlockchainTransaction,\n ConnectParams,\n ConnectResult,\n PurchaseItemResult,\n PurchaseItemType,\n SignMessageResult,\n SignTransactionOptions,\n SignTransactionResult,\n UltraResponse,\n UltraWalletProvider,\n UltraWalletSdkOptions,\n} from '../../interfaces';\nimport { isValidChain } from '../../utils/chain-validator';\n\ndeclare global {\n interface Window {\n ultra: UltraWalletProvider;\n }\n}\n\nexport class ExtensionProvider implements UltraWalletProvider {\n constructor(private readonly options?: UltraWalletSdkOptions) {}\n\n async connect(params?: ConnectParams): Promise<UltraResponse<ConnectResult>> {\n const { data: chainId } = await window.ultra.getChainId();\n if (!isValidChain(this.options?.environment, chainId)) {\n throw new Error(\n `Wallet environment mismatch: expected \"${this.options?.environment}\" chain, but received \"${chainId}\". Please verify the SDK configuration and the connected network.`,\n );\n }\n return window.ultra.connect(params);\n }\n\n disconnect(): Promise<UltraResponse<boolean>> {\n return window.ultra.disconnect();\n }\n\n signMessage(message: string): Promise<UltraResponse<SignMessageResult>> {\n return window.ultra.signMessage(message);\n }\n\n signTransaction(\n transaction: BlockchainTransaction | BlockchainTransaction[],\n options?: SignTransactionOptions,\n ): Promise<UltraResponse<SignTransactionResult>> {\n return window.ultra.signTransaction(transaction, options);\n }\n\n getChainId(): Promise<UltraResponse<string>> {\n return window.ultra.getChainId();\n }\n\n purchaseItem(itemType: PurchaseItemType, itemId: string): Promise<UltraResponse<PurchaseItemResult>> {\n return window.ultra.purchaseItem(itemType, itemId);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"extension.provider.js","sourceRoot":"","sources":["../../../../../../../libs/wallet-sdk/src/lib/providers/extension-provider/extension.provider.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AccountInfo,\n AvailableAuth,\n BlockchainTransaction,\n ConnectParams,\n ConnectResult,\n NetworkDetails,\n PurchaseItemResult,\n PurchaseItemType,\n SignMessageResult,\n SignTransactionOptions,\n SignTransactionResult,\n UltraResponse,\n UltraWalletProvider,\n UltraWalletSdkOptions,\n WalletEventType,\n} from '../../interfaces';\nimport { isValidChain } from '../../utils/chain-validator';\n\n/**\n * Internal extension-only API exposed by the wallet's content-script-injected\n * `window.ultra` proxy. Not part of the public `UltraWalletProvider`\n * interface — the SDK calls these to manage listener registration with the\n * extension's background service worker.\n */\ninterface ExtensionListenerAPI {\n addExtensionListener?(event: WalletEventType, listenerId: string): Promise<unknown> | unknown;\n removeExtensionListener?(event: WalletEventType, listenerId: string): Promise<unknown> | unknown;\n}\n\nconst HEARTBEAT_INTERVAL_MS = 2_000;\n\nexport class ExtensionProvider implements UltraWalletProvider {\n private readonly eventListeners = new Map<WalletEventType, Array<(data: any) => void>>();\n private readonly listenerIds = new Map<WalletEventType, string>();\n private heartbeatTimer: ReturnType<typeof setInterval> | null = null;\n private messageHandler: ((event: MessageEvent) => void) | null = null;\n\n /**\n * Access window.ultra typed as UltraWalletProvider.\n * At runtime, window.ultra is a Proxy that handles all SDK method calls.\n * We cast here rather than declaring a global Window augmentation to avoid\n * conflicting with the app-level window.d.ts which types window.ultra as IUltraInternalAPI.\n */\n private get walletProvider(): UltraWalletProvider & ExtensionListenerAPI {\n return (window as any).ultra as UltraWalletProvider & ExtensionListenerAPI;\n }\n\n constructor(private readonly options?: UltraWalletSdkOptions) {\n this.initWindowEventListener();\n }\n\n /**\n * Wire-format match: the BG's MessageType.EVENT serialises as the uppercase\n * string 'EVENT'. We uppercase the incoming type so a future SDK build that\n * emits lowercase (or any case variant) still dispatches. Payload shape:\n * `{ event, origin, data }`.\n */\n private initWindowEventListener(): void {\n if (typeof window === 'undefined') return;\n if (this.messageHandler) return;\n this.messageHandler = (event: MessageEvent) => {\n if (event.source !== window || !event.data) return;\n const msg = event.data;\n const msgType = typeof msg.type === 'string' ? msg.type.toUpperCase() : '';\n if (msgType !== 'EVENT' || !msg.payload) return;\n const eventName = msg.payload.event as WalletEventType;\n if (!eventName) return;\n const cbs = this.eventListeners.get(eventName);\n if (cbs) cbs.forEach((cb) => cb(msg.payload.data));\n };\n window.addEventListener('message', this.messageHandler);\n }\n\n async connect(params?: ConnectParams): Promise<UltraResponse<ConnectResult>> {\n const { data: chainId } = await this.walletProvider.getChainId();\n if (!isValidChain(this.options?.environment, chainId)) {\n throw new Error(\n `Wallet environment mismatch: expected \"${this.options?.environment}\" chain, but received \"${chainId}\". Please verify the SDK configuration and the connected network.`,\n );\n }\n const result = await this.walletProvider.connect(params);\n // After connect() succeeds, the origin is now trusted in the BG. Any\n // pre-connect on() calls registered listener-ids that the BG silently\n // dropped (untrusted-origin no-op). Clear and re-register so the heartbeat\n // observes the fresh state.\n if (result?.status === 'success') {\n this.listenerIds.clear();\n for (const event of this.eventListeners.keys()) {\n void this.registerListenerWithExtension(event);\n }\n }\n return result;\n }\n\n disconnect(): Promise<UltraResponse<boolean>> {\n return this.walletProvider.disconnect();\n }\n\n signMessage(message: string): Promise<UltraResponse<SignMessageResult>> {\n return this.walletProvider.signMessage(message);\n }\n\n signTransaction(\n transaction: BlockchainTransaction | BlockchainTransaction[],\n options?: SignTransactionOptions,\n ): Promise<UltraResponse<SignTransactionResult>> {\n return this.walletProvider.signTransaction(transaction, options);\n }\n\n getChainId(): Promise<UltraResponse<string>> {\n return this.walletProvider.getChainId();\n }\n\n purchaseItem(itemType: PurchaseItemType, itemId: string): Promise<UltraResponse<PurchaseItemResult>> {\n return this.walletProvider.purchaseItem(itemType, itemId);\n }\n\n getAccounts(): Promise<UltraResponse<AccountInfo[]>> {\n return this.walletProvider.getAccounts();\n }\n\n getSelectedAccount(): Promise<UltraResponse<AccountInfo>> {\n return this.walletProvider.getSelectedAccount();\n }\n\n getAvailableAuthorizations(): Promise<UltraResponse<AvailableAuth[]>> {\n return this.walletProvider.getAvailableAuthorizations();\n }\n\n on(event: WalletEventType, callback: (data: any) => void): void {\n this.initWindowEventListener();\n const cbs = this.eventListeners.get(event) ?? [];\n cbs.push(callback);\n this.eventListeners.set(event, cbs);\n // Idempotent re-register: every on() call refreshes the BG's record of\n // this listener-id. Defends against extension-reload wipe and the\n // pre-connect untrusted-origin no-op race.\n void this.registerListenerWithExtension(event);\n this.ensureHeartbeat();\n }\n\n off(event: WalletEventType, callback: (data: any) => void): void {\n const cbs = this.eventListeners.get(event);\n if (!cbs) return;\n const idx = cbs.indexOf(callback);\n if (idx >= 0) cbs.splice(idx, 1);\n if (cbs.length === 0) {\n this.eventListeners.delete(event);\n void this.deregisterListenerWithExtension(event);\n }\n }\n\n switchNetwork(chainId: string): Promise<UltraResponse<void>> {\n return this.walletProvider.switchNetwork(chainId);\n }\n\n getNetwork(): Promise<UltraResponse<NetworkDetails>> {\n return this.walletProvider.getNetwork();\n }\n\n getNetworks(): Promise<UltraResponse<NetworkDetails[]>> {\n return this.walletProvider.getNetworks();\n }\n\n addNetwork(params: { name: string; chainId: string; nodeUrl: string }): Promise<UltraResponse<void>> {\n return this.walletProvider.addNetwork(params);\n }\n\n /**\n * Detach the window message listener and clear timers + maps. Safe to call\n * multiple times. Does NOT deregister each listener on the BG — the BG\n * GCs on tab close (verified via the S5(b) dedup work + tab-close cleanup\n * in `EventsService.removeTabListeners`). Calling N RPCs at dispose-time\n * would slow the page-unload path for no benefit.\n */\n dispose(): void {\n if (this.heartbeatTimer != null) {\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = null;\n }\n if (this.messageHandler && typeof window !== 'undefined') {\n window.removeEventListener('message', this.messageHandler);\n this.messageHandler = null;\n }\n this.eventListeners.clear();\n this.listenerIds.clear();\n }\n\n private async registerListenerWithExtension(event: WalletEventType): Promise<void> {\n if (!this.isExtensionAvailable()) return;\n const id = this.listenerIds.get(event) ?? this.generateListenerId();\n this.listenerIds.set(event, id);\n try {\n const result = this.walletProvider.addExtensionListener?.(event, id);\n if (result && typeof (result as Promise<unknown>).catch === 'function') {\n // Don't drop the id on rejection — heartbeat will retry.\n (result as Promise<unknown>).catch(() => undefined);\n }\n } catch {\n // Swallow: heartbeat retry will pick this up.\n }\n }\n\n private async deregisterListenerWithExtension(event: WalletEventType): Promise<void> {\n if (!this.isExtensionAvailable()) return;\n const id = this.listenerIds.get(event);\n if (!id) return;\n this.listenerIds.delete(event);\n try {\n const result = this.walletProvider.removeExtensionListener?.(event, id);\n if (result && typeof (result as Promise<unknown>).catch === 'function') {\n (result as Promise<unknown>).catch(() => undefined);\n }\n } catch {\n // Ignore — extension may have been removed.\n }\n }\n\n private ensureHeartbeat(): void {\n if (this.heartbeatTimer != null || typeof window === 'undefined') return;\n // Cadence matches the toolkit's prior workaround. Lower = BG storage-write\n // overhead; higher = wider post-reload event-drop window.\n this.heartbeatTimer = setInterval(() => this.heartbeatTick(), HEARTBEAT_INTERVAL_MS);\n }\n\n private heartbeatTick(): void {\n if (!this.isExtensionAvailable()) return;\n let hasAny = false;\n for (const cbs of this.eventListeners.values()) {\n if (cbs.length > 0) {\n hasAny = true;\n break;\n }\n }\n if (!hasAny) return;\n for (const event of this.eventListeners.keys()) {\n void this.registerListenerWithExtension(event);\n }\n }\n\n private isExtensionAvailable(): boolean {\n return typeof window !== 'undefined' && !!(window as any).ultra;\n }\n\n private generateListenerId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n return Math.random().toString(36).slice(2) + Date.now().toString(36);\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BlockchainTransaction, ConnectParams, ConnectResult, PurchaseItemResult, PurchaseItemType, SignMessageResult, SignTransactionOptions, SignTransactionResult, UltraResponse, UltraWalletProvider, UltraWalletSdkOptions } from '../../interfaces';
|
|
1
|
+
import { AccountInfo, AvailableAuth, BlockchainTransaction, ConnectParams, ConnectResult, NetworkDetails, PurchaseItemResult, PurchaseItemType, SignMessageResult, SignTransactionOptions, SignTransactionResult, UltraResponse, UltraWalletProvider, UltraWalletSdkOptions, WalletEventType } from '../../interfaces';
|
|
2
2
|
export declare class WebProvider implements UltraWalletProvider {
|
|
3
3
|
private readonly options?;
|
|
4
4
|
private readonly windowManager;
|
|
@@ -10,6 +10,20 @@ export declare class WebProvider implements UltraWalletProvider {
|
|
|
10
10
|
signTransaction(transaction: BlockchainTransaction | BlockchainTransaction[], options?: SignTransactionOptions): Promise<UltraResponse<SignTransactionResult>>;
|
|
11
11
|
getChainId(): Promise<UltraResponse<string>>;
|
|
12
12
|
purchaseItem(itemType: PurchaseItemType, itemId: string): Promise<UltraResponse<PurchaseItemResult>>;
|
|
13
|
+
getAccounts(): Promise<UltraResponse<AccountInfo[]>>;
|
|
14
|
+
getSelectedAccount(): Promise<UltraResponse<AccountInfo>>;
|
|
15
|
+
getAvailableAuthorizations(): Promise<UltraResponse<AvailableAuth[]>>;
|
|
16
|
+
on(_event: WalletEventType, _callback: (data: any) => void): void;
|
|
17
|
+
off(_event: WalletEventType, _callback: (data: any) => void): void;
|
|
18
|
+
switchNetwork(_chainId: string): Promise<UltraResponse<void>>;
|
|
19
|
+
getNetwork(): Promise<UltraResponse<NetworkDetails>>;
|
|
20
|
+
getNetworks(): Promise<UltraResponse<NetworkDetails[]>>;
|
|
21
|
+
addNetwork(_params: {
|
|
22
|
+
name: string;
|
|
23
|
+
chainId: string;
|
|
24
|
+
nodeUrl: string;
|
|
25
|
+
}): Promise<UltraResponse<void>>;
|
|
26
|
+
dispose(): void;
|
|
13
27
|
private resolveWalletUrl;
|
|
14
28
|
}
|
|
15
29
|
//# sourceMappingURL=web.provider.d.ts.map
|
|
@@ -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,EAEhB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,qBAAqB,
|
|
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,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAEhB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,EACb,mBAAmB,EACnB,qBAAqB,EACrB,eAAe,EAChB,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,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAIvE,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,EAC5D,OAAO,CAAC,EAAE,sBAAsB,GAC/B,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,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC;IAIpD,kBAAkB,IAAI,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAIzD,0BAA0B,IAAI,OAAO,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,CAAC;IAKrE,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAOjE,GAAG,CAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAKlE,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAI7D,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IAIpD,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC;IAKvD,UAAU,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAIrG,OAAO,IAAI,IAAI;IAKf,OAAO,CAAC,gBAAgB;CAIzB"}
|
|
@@ -45,6 +45,43 @@ export class WebProvider {
|
|
|
45
45
|
itemId,
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
|
+
getAccounts() {
|
|
49
|
+
return this.clientMessenger.sendRequest('getAccounts', {});
|
|
50
|
+
}
|
|
51
|
+
getSelectedAccount() {
|
|
52
|
+
return this.clientMessenger.sendRequest('getSelectedAccount', {});
|
|
53
|
+
}
|
|
54
|
+
getAvailableAuthorizations() {
|
|
55
|
+
return this.clientMessenger.sendRequest('getAvailableAuthorizations', {});
|
|
56
|
+
}
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
58
|
+
on(_event, _callback) {
|
|
59
|
+
// The Web Wallet provider communicates via postMessage through a popup window.
|
|
60
|
+
// Long-lived event subscriptions are not supported in this transport model.
|
|
61
|
+
// Consumers requiring real-time events should use the Extension provider.
|
|
62
|
+
}
|
|
63
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
64
|
+
off(_event, _callback) {
|
|
65
|
+
// Not supported in web provider — see on() above.
|
|
66
|
+
}
|
|
67
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
68
|
+
switchNetwork(_chainId) {
|
|
69
|
+
throw new Error('Not supported in web provider');
|
|
70
|
+
}
|
|
71
|
+
getNetwork() {
|
|
72
|
+
throw new Error('Not supported in web provider');
|
|
73
|
+
}
|
|
74
|
+
getNetworks() {
|
|
75
|
+
throw new Error('Not supported in web provider');
|
|
76
|
+
}
|
|
77
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
78
|
+
addNetwork(_params) {
|
|
79
|
+
throw new Error('Not supported in web provider');
|
|
80
|
+
}
|
|
81
|
+
dispose() {
|
|
82
|
+
// Web provider holds no long-lived timers/listeners — the popup-based
|
|
83
|
+
// postMessage transport is request/response only.
|
|
84
|
+
}
|
|
48
85
|
resolveWalletUrl() {
|
|
49
86
|
const env = UltraWalletSdkConfig.walletUrls[this.options?.environment || 'mainnet'];
|
|
50
87
|
return env || this.options.environment;
|
|
@@ -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,OAAO,
|
|
1
|
+
{"version":3,"file":"web.provider.js","sourceRoot":"","sources":["../../../../../../../libs/wallet-sdk/src/lib/providers/web-provider/web.provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { ClientMessenger } from '../../common/client-messenger';\nimport { WindowManager } from '../../common/window-manager';\nimport UltraWalletSdkConfig from '../../config/ultra-wallet-sdk.config';\nimport {\n AccountInfo,\n AvailableAuth,\n BlockchainTransaction,\n ConnectParams,\n ConnectResult,\n NetworkDetails,\n PurchaseItemResult,\n PurchaseItemType,\n ResponseStatus,\n SignMessageResult,\n SignTransactionOptions,\n SignTransactionResult,\n UltraResponse,\n UltraWalletProvider,\n UltraWalletSdkOptions,\n WalletEventType,\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(options?: ConnectParams): Promise<UltraResponse<ConnectResult>> {\n return this.clientMessenger.sendRequest<ConnectResult>('connect', { options });\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 options?: SignTransactionOptions,\n ): Promise<UltraResponse<SignTransactionResult>> {\n return this.clientMessenger.sendRequest<SignTransactionResult>('signTransaction', { transaction, options });\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 getAccounts(): Promise<UltraResponse<AccountInfo[]>> {\n return this.clientMessenger.sendRequest<AccountInfo[]>('getAccounts', {});\n }\n\n getSelectedAccount(): Promise<UltraResponse<AccountInfo>> {\n return this.clientMessenger.sendRequest<AccountInfo>('getSelectedAccount', {});\n }\n\n getAvailableAuthorizations(): Promise<UltraResponse<AvailableAuth[]>> {\n return this.clientMessenger.sendRequest<AvailableAuth[]>('getAvailableAuthorizations', {});\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n on(_event: WalletEventType, _callback: (data: any) => void): void {\n // The Web Wallet provider communicates via postMessage through a popup window.\n // Long-lived event subscriptions are not supported in this transport model.\n // Consumers requiring real-time events should use the Extension provider.\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n off(_event: WalletEventType, _callback: (data: any) => void): void {\n // Not supported in web provider — see on() above.\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n switchNetwork(_chainId: string): Promise<UltraResponse<void>> {\n throw new Error('Not supported in web provider');\n }\n\n getNetwork(): Promise<UltraResponse<NetworkDetails>> {\n throw new Error('Not supported in web provider');\n }\n\n getNetworks(): Promise<UltraResponse<NetworkDetails[]>> {\n throw new Error('Not supported in web provider');\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n addNetwork(_params: { name: string; chainId: string; nodeUrl: string }): Promise<UltraResponse<void>> {\n throw new Error('Not supported in web provider');\n }\n\n dispose(): void {\n // Web provider holds no long-lived timers/listeners — the popup-based\n // postMessage transport is request/response only.\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,4 +1,4 @@
|
|
|
1
|
-
import { BlockchainTransaction, ConnectParams, ConnectResult, PurchaseItemResult, PurchaseItemType, SignMessageResult, SignTransactionOptions, SignTransactionResult, UltraResponse, UltraWalletSdkOptions } from './interfaces';
|
|
1
|
+
import { AccountInfo, AvailableAuth, BlockchainTransaction, ConnectParams, ConnectResult, NetworkDetails, PurchaseItemResult, PurchaseItemType, SignMessageResult, SignTransactionOptions, SignTransactionResult, UltraResponse, UltraWalletSdkOptions, WalletEventType } from './interfaces';
|
|
2
2
|
/**
|
|
3
3
|
* UltraWalletClient acts as a Facade for interacting with the Ultra Wallet.
|
|
4
4
|
* It provides a unified API regardless of the underlying provider implementation (Extension or Web).
|
|
@@ -20,6 +20,20 @@ export declare class UltraWalletSDK {
|
|
|
20
20
|
signTransaction(transaction: BlockchainTransaction | BlockchainTransaction[], options?: SignTransactionOptions): Promise<UltraResponse<SignTransactionResult>>;
|
|
21
21
|
getChainId(): Promise<UltraResponse<string>>;
|
|
22
22
|
purchaseItem(itemType: PurchaseItemType, itemId: string): Promise<UltraResponse<PurchaseItemResult>>;
|
|
23
|
+
getAccounts(): Promise<UltraResponse<AccountInfo[]>>;
|
|
24
|
+
getSelectedAccount(): Promise<UltraResponse<AccountInfo>>;
|
|
25
|
+
getAvailableAuthorizations(): Promise<UltraResponse<AvailableAuth[]>>;
|
|
26
|
+
on(event: WalletEventType, callback: (data: any) => void): void;
|
|
27
|
+
off(event: WalletEventType, callback: (data: any) => void): void;
|
|
28
|
+
switchNetwork(chainId: string): Promise<UltraResponse<void>>;
|
|
29
|
+
getNetwork(): Promise<UltraResponse<NetworkDetails>>;
|
|
30
|
+
getNetworks(): Promise<UltraResponse<NetworkDetails[]>>;
|
|
31
|
+
addNetwork(params: {
|
|
32
|
+
name: string;
|
|
33
|
+
chainId: string;
|
|
34
|
+
nodeUrl: string;
|
|
35
|
+
}): Promise<UltraResponse<void>>;
|
|
36
|
+
dispose(): void;
|
|
23
37
|
private resolveWalletProvider;
|
|
24
38
|
}
|
|
25
39
|
//# sourceMappingURL=ultra-wallet-sdk.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ultra-wallet-sdk.d.ts","sourceRoot":"","sources":["../../../../../libs/wallet-sdk/src/lib/ultra-wallet-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,EAEb,qBAAqB,
|
|
1
|
+
{"version":3,"file":"ultra-wallet-sdk.d.ts","sourceRoot":"","sources":["../../../../../libs/wallet-sdk/src/lib/ultra-wallet-sdk.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EACb,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,aAAa,EAEb,qBAAqB,EAErB,eAAe,EAChB,MAAM,cAAc,CAAC;AAItB;;;GAGG;AACH,qBAAa,cAAc;IAUb,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IATrC,OAAO,CAAC,QAAQ,CAAsB;IAEtC;;;;;;OAMG;gBAC0B,OAAO,CAAC,EAAE,qBAAqB;IAI5D,OAAO,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IAItE,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,EAC5D,OAAO,CAAC,EAAE,sBAAsB,GAC/B,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;IAIpG,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC,CAAC;IAIpD,kBAAkB,IAAI,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAIzD,0BAA0B,IAAI,OAAO,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC,CAAC;IAIrE,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAI/D,GAAG,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,GAAG,IAAI;IAIhE,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAI5D,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IAIpD,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC;IAIvD,UAAU,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAIpG,OAAO,IAAI,IAAI;IAIf,OAAO,CAAC,qBAAqB;CAY9B"}
|
|
@@ -34,6 +34,36 @@ export class UltraWalletSDK {
|
|
|
34
34
|
purchaseItem(itemType, itemId) {
|
|
35
35
|
return this.provider.purchaseItem(itemType, itemId);
|
|
36
36
|
}
|
|
37
|
+
getAccounts() {
|
|
38
|
+
return this.provider.getAccounts();
|
|
39
|
+
}
|
|
40
|
+
getSelectedAccount() {
|
|
41
|
+
return this.provider.getSelectedAccount();
|
|
42
|
+
}
|
|
43
|
+
getAvailableAuthorizations() {
|
|
44
|
+
return this.provider.getAvailableAuthorizations();
|
|
45
|
+
}
|
|
46
|
+
on(event, callback) {
|
|
47
|
+
this.provider.on(event, callback);
|
|
48
|
+
}
|
|
49
|
+
off(event, callback) {
|
|
50
|
+
this.provider.off(event, callback);
|
|
51
|
+
}
|
|
52
|
+
switchNetwork(chainId) {
|
|
53
|
+
return this.provider.switchNetwork(chainId);
|
|
54
|
+
}
|
|
55
|
+
getNetwork() {
|
|
56
|
+
return this.provider.getNetwork();
|
|
57
|
+
}
|
|
58
|
+
getNetworks() {
|
|
59
|
+
return this.provider.getNetworks();
|
|
60
|
+
}
|
|
61
|
+
addNetwork(params) {
|
|
62
|
+
return this.provider.addNetwork(params);
|
|
63
|
+
}
|
|
64
|
+
dispose() {
|
|
65
|
+
this.provider.dispose();
|
|
66
|
+
}
|
|
37
67
|
resolveWalletProvider() {
|
|
38
68
|
const requestedProvider = this.options?.provider;
|
|
39
69
|
if (requestedProvider === 'extension') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ultra-wallet-sdk.js","sourceRoot":"","sources":["../../../../../libs/wallet-sdk/src/lib/ultra-wallet-sdk.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ultra-wallet-sdk.js","sourceRoot":"","sources":["../../../../../libs/wallet-sdk/src/lib/ultra-wallet-sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AccountInfo,\n AvailableAuth,\n BlockchainTransaction,\n ConnectParams,\n ConnectResult,\n NetworkDetails,\n PurchaseItemResult,\n PurchaseItemType,\n SignMessageResult,\n SignTransactionOptions,\n SignTransactionResult,\n UltraResponse,\n UltraWalletProvider,\n UltraWalletSdkOptions,\n UltraWalletSdkProvider,\n WalletEventType,\n} from './interfaces';\nimport { ExtensionProvider, WebProvider } from './providers';\nimport { isExtensionAvailable } from './utils/detection';\n\n/**\n * UltraWalletClient acts as a Facade for interacting with the Ultra Wallet.\n * It provides a unified API regardless of the underlying provider implementation (Extension or Web).\n */\nexport class UltraWalletSDK {\n private provider: UltraWalletProvider;\n\n /**\n * Constructs an UltraWalletClient instance.\n * If the Ultra Wallet Extension is available (window.ultra), it will be used automatically.\n * If the Extension is not available, the Web Wallet provider will be initialized using the given network options.\n *\n * @param {UltraWalletSdkOptions} [options] - Configuration options for the Web Wallet fallback (environment or custom URL).\n */\n constructor(private readonly options?: UltraWalletSdkOptions) {\n this.provider = this.resolveWalletProvider();\n }\n\n connect(params?: ConnectParams): Promise<UltraResponse<ConnectResult>> {\n return this.provider.connect(params);\n }\n\n disconnect(): Promise<UltraResponse<boolean>> {\n return this.provider.disconnect();\n }\n\n signMessage(message: string): Promise<UltraResponse<SignMessageResult>> {\n return this.provider.signMessage(message);\n }\n\n signTransaction(\n transaction: BlockchainTransaction | BlockchainTransaction[],\n options?: SignTransactionOptions,\n ): Promise<UltraResponse<SignTransactionResult>> {\n return this.provider.signTransaction(transaction, options);\n }\n\n getChainId(): Promise<UltraResponse<string>> {\n return this.provider.getChainId();\n }\n\n purchaseItem(itemType: PurchaseItemType, itemId: string): Promise<UltraResponse<PurchaseItemResult>> {\n return this.provider.purchaseItem(itemType, itemId);\n }\n\n getAccounts(): Promise<UltraResponse<AccountInfo[]>> {\n return this.provider.getAccounts();\n }\n\n getSelectedAccount(): Promise<UltraResponse<AccountInfo>> {\n return this.provider.getSelectedAccount();\n }\n\n getAvailableAuthorizations(): Promise<UltraResponse<AvailableAuth[]>> {\n return this.provider.getAvailableAuthorizations();\n }\n\n on(event: WalletEventType, callback: (data: any) => void): void {\n this.provider.on(event, callback);\n }\n\n off(event: WalletEventType, callback: (data: any) => void): void {\n this.provider.off(event, callback);\n }\n\n switchNetwork(chainId: string): Promise<UltraResponse<void>> {\n return this.provider.switchNetwork(chainId);\n }\n\n getNetwork(): Promise<UltraResponse<NetworkDetails>> {\n return this.provider.getNetwork();\n }\n\n getNetworks(): Promise<UltraResponse<NetworkDetails[]>> {\n return this.provider.getNetworks();\n }\n\n addNetwork(params: { name: string; chainId: string; nodeUrl: string }): Promise<UltraResponse<void>> {\n return this.provider.addNetwork(params);\n }\n\n dispose(): void {\n this.provider.dispose();\n }\n\n private resolveWalletProvider(): UltraWalletProvider {\n const requestedProvider: UltraWalletSdkProvider | undefined = this.options?.provider;\n if (requestedProvider === 'extension') {\n return new ExtensionProvider(this.options);\n }\n if (requestedProvider === 'web') {\n return new WebProvider(this.options);\n }\n\n const extensionAvailable = isExtensionAvailable();\n return extensionAvailable ? new ExtensionProvider(this.options) : new WebProvider(this.options);\n }\n}\n"]}
|