@tatumio/wallet-sdk 0.0.1

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.
Files changed (95) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +174 -0
  3. package/dist/chains.d.ts +38 -0
  4. package/dist/chains.d.ts.map +1 -0
  5. package/dist/chains.js +109 -0
  6. package/dist/chains.js.map +1 -0
  7. package/dist/constants/index.d.ts +3 -0
  8. package/dist/constants/index.d.ts.map +1 -0
  9. package/dist/constants/index.js +3 -0
  10. package/dist/constants/index.js.map +1 -0
  11. package/dist/constants/paths.d.ts +3 -0
  12. package/dist/constants/paths.d.ts.map +1 -0
  13. package/dist/constants/paths.js +3 -0
  14. package/dist/constants/paths.js.map +1 -0
  15. package/dist/constants/urls.d.ts +13 -0
  16. package/dist/constants/urls.d.ts.map +1 -0
  17. package/dist/constants/urls.js +13 -0
  18. package/dist/constants/urls.js.map +1 -0
  19. package/dist/errors.d.ts +9 -0
  20. package/dist/errors.d.ts.map +1 -0
  21. package/dist/errors.js +15 -0
  22. package/dist/errors.js.map +1 -0
  23. package/dist/http.d.ts +31 -0
  24. package/dist/http.d.ts.map +1 -0
  25. package/dist/http.js +123 -0
  26. package/dist/http.js.map +1 -0
  27. package/dist/index.d.ts +17 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +9 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/operation.d.ts +8 -0
  32. package/dist/operation.d.ts.map +1 -0
  33. package/dist/operation.js +26 -0
  34. package/dist/operation.js.map +1 -0
  35. package/dist/path.d.ts +3 -0
  36. package/dist/path.d.ts.map +1 -0
  37. package/dist/path.js +10 -0
  38. package/dist/path.js.map +1 -0
  39. package/dist/portal/client-api.d.ts +73 -0
  40. package/dist/portal/client-api.d.ts.map +1 -0
  41. package/dist/portal/client-api.js +63 -0
  42. package/dist/portal/client-api.js.map +1 -0
  43. package/dist/portal/custodian.d.ts +92 -0
  44. package/dist/portal/custodian.d.ts.map +1 -0
  45. package/dist/portal/custodian.js +84 -0
  46. package/dist/portal/custodian.js.map +1 -0
  47. package/dist/portal/enclave-api.d.ts +53 -0
  48. package/dist/portal/enclave-api.d.ts.map +1 -0
  49. package/dist/portal/enclave-api.js +70 -0
  50. package/dist/portal/enclave-api.js.map +1 -0
  51. package/dist/portal/transport.d.ts +13 -0
  52. package/dist/portal/transport.d.ts.map +1 -0
  53. package/dist/portal/transport.js +27 -0
  54. package/dist/portal/transport.js.map +1 -0
  55. package/dist/portal/types/client.d.ts +74 -0
  56. package/dist/portal/types/client.d.ts.map +1 -0
  57. package/dist/portal/types/client.js +2 -0
  58. package/dist/portal/types/client.js.map +1 -0
  59. package/dist/portal/types/custodian.d.ts +39 -0
  60. package/dist/portal/types/custodian.d.ts.map +1 -0
  61. package/dist/portal/types/custodian.js +2 -0
  62. package/dist/portal/types/custodian.js.map +1 -0
  63. package/dist/portal/types/enclave.d.ts +64 -0
  64. package/dist/portal/types/enclave.d.ts.map +1 -0
  65. package/dist/portal/types/enclave.js +2 -0
  66. package/dist/portal/types/enclave.js.map +1 -0
  67. package/dist/portal/types/index.d.ts +5 -0
  68. package/dist/portal/types/index.d.ts.map +1 -0
  69. package/dist/portal/types/index.js +5 -0
  70. package/dist/portal/types/index.js.map +1 -0
  71. package/dist/portal/types/shared.d.ts +163 -0
  72. package/dist/portal/types/shared.d.ts.map +1 -0
  73. package/dist/portal/types/shared.js +2 -0
  74. package/dist/portal/types/shared.js.map +1 -0
  75. package/dist/portal/wallets-client.d.ts +105 -0
  76. package/dist/portal/wallets-client.d.ts.map +1 -0
  77. package/dist/portal/wallets-client.js +126 -0
  78. package/dist/portal/wallets-client.js.map +1 -0
  79. package/dist/sdk.d.ts +35 -0
  80. package/dist/sdk.d.ts.map +1 -0
  81. package/dist/sdk.js +41 -0
  82. package/dist/sdk.js.map +1 -0
  83. package/dist/tatum/api-client.d.ts +12 -0
  84. package/dist/tatum/api-client.d.ts.map +1 -0
  85. package/dist/tatum/api-client.js +35 -0
  86. package/dist/tatum/api-client.js.map +1 -0
  87. package/dist/tatum/provider.d.ts +17 -0
  88. package/dist/tatum/provider.d.ts.map +1 -0
  89. package/dist/tatum/provider.js +41 -0
  90. package/dist/tatum/provider.js.map +1 -0
  91. package/dist/types.d.ts +33 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js +2 -0
  94. package/dist/types.js.map +1 -0
  95. package/package.json +62 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Tatum
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,174 @@
1
+ # @tatumio/wallet-sdk
2
+
3
+ TypeScript SDK for Tatum MPC wallets — wallet creation, signing, sending, backup/recovery, and custodian/client management.
4
+
5
+ ## Installation
6
+
7
+ ```sh
8
+ npm install @tatumio/wallet-sdk
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```ts
14
+ import { TatumWalletsSdk } from "@tatumio/wallet-sdk";
15
+
16
+ const wallets = new TatumWalletsSdk({
17
+ apiKey: process.env.TATUM_API_KEY!,
18
+ baseUrl: "https://api.tatum.io",
19
+ });
20
+ ```
21
+
22
+ For lower-level or not-yet-modeled Tatum calls, use `wallets.api.request(...)` directly.
23
+
24
+ ## Custodian and Client Operations
25
+
26
+ Custodian-scoped calls are authenticated through your Tatum API key:
27
+
28
+ ```ts
29
+ // Response is typed as CreateClientResponse ({ id, clientApiKey, clientSessionToken, ... }).
30
+ const newClient = await wallets.custodian.createClient({
31
+ body: {
32
+ isAccountAbstracted: false,
33
+ },
34
+ });
35
+
36
+ const clients = await wallets.custodian.listClients({
37
+ query: {
38
+ take: 100,
39
+ },
40
+ });
41
+
42
+ // Mint a Client Session Token (CST) for an existing client.
43
+ const session = await wallets.custodian.createClientSession({
44
+ path: { clientId: newClient.id! },
45
+ body: { isAccountAbstracted: false },
46
+ });
47
+ ```
48
+
49
+ Client-scoped calls use the client API key or client session token for the selected client:
50
+
51
+ ```ts
52
+ import { WalletChain } from "@tatumio/wallet-sdk";
53
+
54
+ const client = wallets.initClient({
55
+ token: newClient.clientApiKey ?? session.clientSessionToken!,
56
+ });
57
+
58
+ const details = await client.getClientDetails(); // typed as ClientDetails
59
+ const shares = await client.generateWallet(); // typed as GenerateWalletResponse
60
+
61
+ await client.sendAssets({
62
+ body: {
63
+ share: shares.SECP256K1.share,
64
+ chain: WalletChain.ETHEREUM_MAINNET,
65
+ to: "0x...",
66
+ token: "NATIVE",
67
+ amount: "0.01",
68
+ },
69
+ });
70
+ ```
71
+
72
+ Chain fields (`chain` / `chainId` on sign, sendAssets, evaluate, and the `{chain}` path on build-transaction) take the `WalletChain` enum rather than raw strings. Each value is the chain's CAIP-2 id, and `WALLET_CHAINS[chain]` / `getWalletChainConfig(chain)` expose its `curve` and `requiresRpcUrl`. Primary chains: Monad, Ethereum, Solana, Stellar, Tron, Bitcoin, Arbitrum, Avalanche, Base, Optimism, Polygon, Celo (all `_MAINNET`), plus `ETHEREUM_SEPOLIA` (testnet).
73
+
74
+ ### Signing
75
+
76
+ `sign` accepts any supported RPC signing method (`eth_sendTransaction`, `personal_sign`, `sol_signTransaction`). `rawSign` signs a hex digest directly with a given curve, with no chain/RPC context:
77
+
78
+ ```ts
79
+ const signed = await client.sign({
80
+ body: {
81
+ share: shares.SECP256K1.share,
82
+ method: "personal_sign",
83
+ params: ["0x48656c6c6f"],
84
+ chainId: WalletChain.ETHEREUM_MAINNET,
85
+ to: "0x...",
86
+ },
87
+ });
88
+
89
+ const raw = await client.rawSign({
90
+ path: { curve: "SECP256K1" },
91
+ body: { params: "7369676e2074686973", share: shares.SECP256K1.share },
92
+ }); // typed as RawSignResponse ({ data })
93
+ ```
94
+
95
+ Before signing, you can simulate/validate a transaction (balance changes, risk score):
96
+
97
+ ```ts
98
+ const evaluation = await client.evaluateTransaction({
99
+ query: { chainId: WalletChain.ETHEREUM_MAINNET },
100
+ body: {
101
+ network: "ethereum",
102
+ transaction: { toAddress: "0x...", value: "10000000000000000" },
103
+ },
104
+ }); // typed as EvaluateTransactionResponse
105
+ ```
106
+
107
+ ### Backup and recovery
108
+
109
+ Back up the signing shares, encrypt each curve's share yourself, store the ciphertext via the SDK, then mark the pairs stored:
110
+
111
+ ```ts
112
+ const backup = await client.backupWallet({
113
+ body: { generateResponse: JSON.stringify(shares) },
114
+ }); // typed as BackupWalletResponse (per-curve shares)
115
+
116
+ for (const curve of ["SECP256K1", "ED25519"] as const) {
117
+ const { id, share } = backup[curve];
118
+ await client.storeEncryptedBackupShare({
119
+ path: { backupSharePairId: id },
120
+ body: { clientCipherText: await yourEncrypt(share) },
121
+ });
122
+ }
123
+
124
+ await client.updateBackupSharePairs({
125
+ body: {
126
+ backupSharePairIds: [backup.SECP256K1.id, backup.ED25519.id],
127
+ status: "STORED_CLIENT_BACKUP_SHARE",
128
+ },
129
+ });
130
+ ```
131
+
132
+ To recover, fetch and decrypt each curve's stored ciphertext, rebuild the backup
133
+ response shape (`{ SECP256K1: { share, id }, ED25519: { share, id } }`), then pass
134
+ it to `recoverWallet`:
135
+
136
+ ```ts
137
+ const restore = async (
138
+ curve: "SECP256K1" | "ED25519",
139
+ backupSharePairId: string,
140
+ ) => {
141
+ const { cipherText } = await client.getBackupShareCipherText({
142
+ path: { backupSharePairId },
143
+ });
144
+ return { share: await yourDecrypt(cipherText), id: backupSharePairId };
145
+ };
146
+
147
+ const backupResponse = {
148
+ SECP256K1: await restore("SECP256K1", secpBackupSharePairId),
149
+ ED25519: await restore("ED25519", edBackupSharePairId),
150
+ };
151
+
152
+ const recovered = await client.recoverWallet({
153
+ body: { backupResponse: JSON.stringify(backupResponse) },
154
+ }); // typed as RecoverWalletResponse
155
+ ```
156
+
157
+ Custodian-scoped calls are authenticated through Tatum: the SDK resolves the custodian token from your Tatum `x-api-key` via `GET /v4/wallets/custodian-api-key` (throwing if your key isn't authorized for wallets). Enclave operations that need an RPC URL get one automatically — the SDK builds `https://<network>.gateway.tatum.io/<your-api-key>` from the chain's `tatumRpcNetwork` (see `WALLET_CHAINS`) — unless you pass an explicit `rpcUrl` in the body.
158
+
159
+ ## Development
160
+
161
+ ```sh
162
+ npm install
163
+ npm test
164
+ npm run typecheck
165
+ npm run build
166
+ ```
167
+
168
+ ## Publishing
169
+
170
+ The package is configured for public npm publishing under the scoped package name:
171
+
172
+ ```sh
173
+ npm publish --access public
174
+ ```
@@ -0,0 +1,38 @@
1
+ import type { Curve } from './portal/types/shared.js';
2
+ /**
3
+ * Supported wallet chains.
4
+ *
5
+ * Each enum value is the chain's CAIP-2 identifier, so a `WalletChain`
6
+ * can be passed directly anywhere the API expects a `chainId` or `chain`
7
+ * (sign, evaluate-transaction, sendAssets, build-transaction).
8
+ */
9
+ export declare enum WalletChain {
10
+ MONAD_MAINNET = "eip155:143",
11
+ ETHEREUM_MAINNET = "eip155:1",
12
+ ETHEREUM_SEPOLIA = "eip155:11155111",
13
+ SOLANA_MAINNET = "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
14
+ STELLAR_MAINNET = "stellar:pubnet",
15
+ TRON_MAINNET = "tron:mainnet",
16
+ BITCOIN_MAINNET = "bip122:000000000019d6689c085ae165831e93-p2wpkh",
17
+ ARBITRUM_MAINNET = "eip155:42161",
18
+ AVALANCHE_MAINNET = "eip155:43114",
19
+ BASE_MAINNET = "eip155:8453",
20
+ OPTIMISM_MAINNET = "eip155:10",
21
+ POLYGON_MAINNET = "eip155:137",
22
+ CELO_MAINNET = "eip155:42220"
23
+ }
24
+ export interface WalletChainConfig {
25
+ /** CAIP-2 chain identifier (identical to the {@link WalletChain} value). */
26
+ chainId: WalletChain;
27
+ /** Signing curve this chain uses — picks which `shares[curve]` to pass to sign/sendAssets. */
28
+ curve: Curve;
29
+ /** Whether an explicit `rpcUrl` is required for enclave operations on this chain. */
30
+ requiresRpcUrl: boolean;
31
+ /** Tatum RPC gateway network slug (`<slug>.gateway.tatum.io`). */
32
+ tatumRpcNetwork: string;
33
+ }
34
+ /** Per-chain configuration, keyed by {@link WalletChain}. */
35
+ export declare const WALLET_CHAINS: Record<WalletChain, WalletChainConfig>;
36
+ /** Resolve the configuration for a supported chain. */
37
+ export declare function getWalletChainConfig(chain: WalletChain): WalletChainConfig;
38
+ //# sourceMappingURL=chains.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chains.d.ts","sourceRoot":"","sources":["../src/chains.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAEtD;;;;;;GAMG;AACH,oBAAY,WAAW;IACrB,aAAa,eAAe;IAC5B,gBAAgB,aAAa;IAC7B,gBAAgB,oBAAoB;IACpC,cAAc,4CAA4C;IAC1D,eAAe,mBAAmB;IAClC,YAAY,iBAAiB;IAC7B,eAAe,mDAAmD;IAClE,gBAAgB,iBAAiB;IACjC,iBAAiB,iBAAiB;IAClC,YAAY,gBAAgB;IAC5B,gBAAgB,cAAc;IAC9B,eAAe,eAAe;IAC9B,YAAY,iBAAiB;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,OAAO,EAAE,WAAW,CAAC;IACrB,8FAA8F;IAC9F,KAAK,EAAE,KAAK,CAAC;IACb,qFAAqF;IACrF,cAAc,EAAE,OAAO,CAAC;IACxB,kEAAkE;IAClE,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,6DAA6D;AAC7D,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,WAAW,EAAE,iBAAiB,CA+EhE,CAAC;AAEF,uDAAuD;AACvD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,iBAAiB,CAE1E"}
package/dist/chains.js ADDED
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Supported wallet chains.
3
+ *
4
+ * Each enum value is the chain's CAIP-2 identifier, so a `WalletChain`
5
+ * can be passed directly anywhere the API expects a `chainId` or `chain`
6
+ * (sign, evaluate-transaction, sendAssets, build-transaction).
7
+ */
8
+ export var WalletChain;
9
+ (function (WalletChain) {
10
+ WalletChain["MONAD_MAINNET"] = "eip155:143";
11
+ WalletChain["ETHEREUM_MAINNET"] = "eip155:1";
12
+ WalletChain["ETHEREUM_SEPOLIA"] = "eip155:11155111";
13
+ WalletChain["SOLANA_MAINNET"] = "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp";
14
+ WalletChain["STELLAR_MAINNET"] = "stellar:pubnet";
15
+ WalletChain["TRON_MAINNET"] = "tron:mainnet";
16
+ WalletChain["BITCOIN_MAINNET"] = "bip122:000000000019d6689c085ae165831e93-p2wpkh";
17
+ WalletChain["ARBITRUM_MAINNET"] = "eip155:42161";
18
+ WalletChain["AVALANCHE_MAINNET"] = "eip155:43114";
19
+ WalletChain["BASE_MAINNET"] = "eip155:8453";
20
+ WalletChain["OPTIMISM_MAINNET"] = "eip155:10";
21
+ WalletChain["POLYGON_MAINNET"] = "eip155:137";
22
+ WalletChain["CELO_MAINNET"] = "eip155:42220";
23
+ })(WalletChain || (WalletChain = {}));
24
+ /** Per-chain configuration, keyed by {@link WalletChain}. */
25
+ export const WALLET_CHAINS = {
26
+ [WalletChain.MONAD_MAINNET]: {
27
+ chainId: WalletChain.MONAD_MAINNET,
28
+ curve: 'SECP256K1',
29
+ requiresRpcUrl: false,
30
+ tatumRpcNetwork: 'monad-mainnet'
31
+ },
32
+ [WalletChain.ETHEREUM_MAINNET]: {
33
+ chainId: WalletChain.ETHEREUM_MAINNET,
34
+ curve: 'SECP256K1',
35
+ requiresRpcUrl: false,
36
+ tatumRpcNetwork: 'ethereum-mainnet'
37
+ },
38
+ [WalletChain.ETHEREUM_SEPOLIA]: {
39
+ chainId: WalletChain.ETHEREUM_SEPOLIA,
40
+ curve: 'SECP256K1',
41
+ requiresRpcUrl: false,
42
+ tatumRpcNetwork: 'ethereum-sepolia'
43
+ },
44
+ [WalletChain.SOLANA_MAINNET]: {
45
+ chainId: WalletChain.SOLANA_MAINNET,
46
+ curve: 'ED25519',
47
+ requiresRpcUrl: false,
48
+ tatumRpcNetwork: 'solana-mainnet'
49
+ },
50
+ [WalletChain.STELLAR_MAINNET]: {
51
+ chainId: WalletChain.STELLAR_MAINNET,
52
+ curve: 'ED25519',
53
+ requiresRpcUrl: true,
54
+ tatumRpcNetwork: 'stellar-mainnet'
55
+ },
56
+ [WalletChain.TRON_MAINNET]: {
57
+ chainId: WalletChain.TRON_MAINNET,
58
+ curve: 'SECP256K1',
59
+ requiresRpcUrl: true,
60
+ tatumRpcNetwork: 'tron-mainnet'
61
+ },
62
+ [WalletChain.BITCOIN_MAINNET]: {
63
+ chainId: WalletChain.BITCOIN_MAINNET,
64
+ curve: 'SECP256K1',
65
+ requiresRpcUrl: true,
66
+ tatumRpcNetwork: 'bitcoin-mainnet'
67
+ },
68
+ [WalletChain.ARBITRUM_MAINNET]: {
69
+ chainId: WalletChain.ARBITRUM_MAINNET,
70
+ curve: 'SECP256K1',
71
+ requiresRpcUrl: false,
72
+ tatumRpcNetwork: 'arb-one-mainnet'
73
+ },
74
+ [WalletChain.AVALANCHE_MAINNET]: {
75
+ chainId: WalletChain.AVALANCHE_MAINNET,
76
+ curve: 'SECP256K1',
77
+ requiresRpcUrl: false,
78
+ tatumRpcNetwork: 'avax-mainnet'
79
+ },
80
+ [WalletChain.BASE_MAINNET]: {
81
+ chainId: WalletChain.BASE_MAINNET,
82
+ curve: 'SECP256K1',
83
+ requiresRpcUrl: false,
84
+ tatumRpcNetwork: 'base-mainnet'
85
+ },
86
+ [WalletChain.OPTIMISM_MAINNET]: {
87
+ chainId: WalletChain.OPTIMISM_MAINNET,
88
+ curve: 'SECP256K1',
89
+ requiresRpcUrl: false,
90
+ tatumRpcNetwork: 'optimism-mainnet'
91
+ },
92
+ [WalletChain.POLYGON_MAINNET]: {
93
+ chainId: WalletChain.POLYGON_MAINNET,
94
+ curve: 'SECP256K1',
95
+ requiresRpcUrl: false,
96
+ tatumRpcNetwork: 'polygon-mainnet'
97
+ },
98
+ [WalletChain.CELO_MAINNET]: {
99
+ chainId: WalletChain.CELO_MAINNET,
100
+ curve: 'SECP256K1',
101
+ requiresRpcUrl: true,
102
+ tatumRpcNetwork: 'celo-mainnet'
103
+ }
104
+ };
105
+ /** Resolve the configuration for a supported chain. */
106
+ export function getWalletChainConfig(chain) {
107
+ return WALLET_CHAINS[chain];
108
+ }
109
+ //# sourceMappingURL=chains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chains.js","sourceRoot":"","sources":["../src/chains.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from './paths.js';
2
+ export * from './urls.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './paths.js';
2
+ export * from './urls.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Tatum endpoint that resolves the caller's Portal custodian API key from their `x-api-key`. */
2
+ export declare const CUSTODIAN_API_KEY_PATH = "/v4/wallets/custodian-api-key";
3
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/constants/paths.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,eAAO,MAAM,sBAAsB,kCAAkC,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** Tatum endpoint that resolves the caller's Portal custodian API key from their `x-api-key`. */
2
+ export const CUSTODIAN_API_KEY_PATH = '/v4/wallets/custodian-api-key';
3
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/constants/paths.ts"],"names":[],"mappings":"AAAA,iGAAiG;AACjG,MAAM,CAAC,MAAM,sBAAsB,GAAG,+BAA+B,CAAC"}
@@ -0,0 +1,13 @@
1
+ /** Tatum API base URL (default; overridable via `config.baseUrl`). */
2
+ export declare const TATUM_API_BASE_URL = "https://api.tatum.io";
3
+ /** Portal REST API base (custodian- and client-scoped endpoints). */
4
+ export declare const PORTAL_API_BASE_URL = "https://api.portalhq.io/api/v3";
5
+ /** Portal Enclave MPC API base (generate/backup/recover/sign/sendAssets). */
6
+ export declare const PORTAL_ENCLAVE_BASE_URL = "https://mpc-client.portalhq.io";
7
+ /**
8
+ * Tatum RPC gateway domain. Per-chain RPC URLs are built as
9
+ * `https://<network>.${TATUM_RPC_GATEWAY_DOMAIN}/<apiKey>` (the `<network>`
10
+ * slug comes from each chain's {@link WalletChainConfig.tatumRpcNetwork}).
11
+ */
12
+ export declare const TATUM_RPC_GATEWAY_DOMAIN = "gateway.tatum.io";
13
+ //# sourceMappingURL=urls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../../src/constants/urls.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AAEzD,qEAAqE;AACrE,eAAO,MAAM,mBAAmB,mCAAmC,CAAC;AAEpE,6EAA6E;AAC7E,eAAO,MAAM,uBAAuB,mCAAmC,CAAC;AAExE;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,qBAAqB,CAAC"}
@@ -0,0 +1,13 @@
1
+ /** Tatum API base URL (default; overridable via `config.baseUrl`). */
2
+ export const TATUM_API_BASE_URL = 'https://api.tatum.io';
3
+ /** Portal REST API base (custodian- and client-scoped endpoints). */
4
+ export const PORTAL_API_BASE_URL = 'https://api.portalhq.io/api/v3';
5
+ /** Portal Enclave MPC API base (generate/backup/recover/sign/sendAssets). */
6
+ export const PORTAL_ENCLAVE_BASE_URL = 'https://mpc-client.portalhq.io';
7
+ /**
8
+ * Tatum RPC gateway domain. Per-chain RPC URLs are built as
9
+ * `https://<network>.${TATUM_RPC_GATEWAY_DOMAIN}/<apiKey>` (the `<network>`
10
+ * slug comes from each chain's {@link WalletChainConfig.tatumRpcNetwork}).
11
+ */
12
+ export const TATUM_RPC_GATEWAY_DOMAIN = 'gateway.tatum.io';
13
+ //# sourceMappingURL=urls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urls.js","sourceRoot":"","sources":["../../src/constants/urls.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AAEzD,qEAAqE;AACrE,MAAM,CAAC,MAAM,mBAAmB,GAAG,gCAAgC,CAAC;AAEpE,6EAA6E;AAC7E,MAAM,CAAC,MAAM,uBAAuB,GAAG,gCAAgC,CAAC;AAExE;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,kBAAkB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { ApiErrorOptions } from "./types.js";
2
+ export declare class WalletsApiError extends Error {
3
+ readonly status: number;
4
+ readonly statusText: string | undefined;
5
+ readonly body: unknown;
6
+ readonly headers: Headers | undefined;
7
+ constructor(message: string, options: ApiErrorOptions);
8
+ }
9
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;gBAE1B,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe;CAQtD"}
package/dist/errors.js ADDED
@@ -0,0 +1,15 @@
1
+ export class WalletsApiError extends Error {
2
+ status;
3
+ statusText;
4
+ body;
5
+ headers;
6
+ constructor(message, options) {
7
+ super(message);
8
+ this.name = "WalletsApiError";
9
+ this.status = options.status;
10
+ this.statusText = options.statusText;
11
+ this.body = options.body;
12
+ this.headers = options.headers;
13
+ }
14
+ }
15
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,MAAM,CAAS;IACf,UAAU,CAAqB;IAC/B,IAAI,CAAU;IACd,OAAO,CAAsB;IAEtC,YAAY,OAAe,EAAE,OAAwB;QACnD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IACjC,CAAC;CACF"}
package/dist/http.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ import type { ApiRequestOptions } from './types.js';
2
+ /**
3
+ * Mutates the outgoing header map to add an authentication header. Each API
4
+ * surface supplies its own strategy (e.g. `x-api-key` for Tatum, bearer token
5
+ * for Portal) so the transport stays auth-agnostic.
6
+ */
7
+ export type ApplyAuthHeaders = (headers: Record<string, string>) => void;
8
+ export interface HttpClientConfig {
9
+ baseUrl: string;
10
+ applyAuth: ApplyAuthHeaders;
11
+ /** Prefix for thrown error messages, e.g. `'Wallets API'` or `'Portal API'`. */
12
+ errorLabel: string;
13
+ headers?: Record<string, string> | undefined;
14
+ fetch?: typeof fetch | undefined;
15
+ }
16
+ /**
17
+ * Shared fetch-based transport. Builds URLs and headers, serializes JSON bodies,
18
+ * parses responses, and throws {@link WalletsApiError} on non-2xx. Subclasses
19
+ * differ only in their auth strategy and error label.
20
+ */
21
+ export declare class HttpClient {
22
+ private readonly baseUrl;
23
+ private readonly defaultHeaders;
24
+ private readonly fetchImpl;
25
+ private readonly applyAuth;
26
+ private readonly errorLabel;
27
+ constructor(config: HttpClientConfig);
28
+ request<TResponse = unknown>(options: ApiRequestOptions): Promise<TResponse>;
29
+ private buildHeaders;
30
+ }
31
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAc,MAAM,YAAY,CAAC;AAEhE;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,gFAAgF;IAChF,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC7C,KAAK,CAAC,EAAE,OAAO,KAAK,GAAG,SAAS,CAAC;CAClC;AAED;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAExB,MAAM,EAAE,gBAAgB;IAY9B,OAAO,CAAC,SAAS,GAAG,OAAO,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC;IAiClF,OAAO,CAAC,YAAY;CAerB"}
package/dist/http.js ADDED
@@ -0,0 +1,123 @@
1
+ import { WalletsApiError } from './errors.js';
2
+ /**
3
+ * Shared fetch-based transport. Builds URLs and headers, serializes JSON bodies,
4
+ * parses responses, and throws {@link WalletsApiError} on non-2xx. Subclasses
5
+ * differ only in their auth strategy and error label.
6
+ */
7
+ export class HttpClient {
8
+ baseUrl;
9
+ defaultHeaders;
10
+ fetchImpl;
11
+ applyAuth;
12
+ errorLabel;
13
+ constructor(config) {
14
+ if (!config.fetch && typeof fetch === 'undefined') {
15
+ throw new Error('A fetch implementation is required in this runtime.');
16
+ }
17
+ this.baseUrl = normalizeBaseUrl(config.baseUrl);
18
+ this.defaultHeaders = normalizeHeaders(config.headers);
19
+ this.fetchImpl = config.fetch ?? fetch;
20
+ this.applyAuth = config.applyAuth;
21
+ this.errorLabel = config.errorLabel;
22
+ }
23
+ async request(options) {
24
+ const method = options.method ?? 'GET';
25
+ const url = buildUrl(this.baseUrl, options.path, options.query);
26
+ const headers = this.buildHeaders(options.headers, options.body);
27
+ const requestInit = {
28
+ method,
29
+ headers
30
+ };
31
+ const body = serializeBody(options.body);
32
+ if (body !== undefined) {
33
+ requestInit.body = body;
34
+ }
35
+ if (options.signal !== undefined) {
36
+ requestInit.signal = options.signal;
37
+ }
38
+ const response = await this.fetchImpl(url, requestInit);
39
+ const responseBody = await parseResponseBody(response);
40
+ if (!response.ok) {
41
+ throw new WalletsApiError(`${this.errorLabel} request failed with status ${response.status}`, {
42
+ status: response.status,
43
+ statusText: response.statusText || undefined,
44
+ body: responseBody,
45
+ headers: response.headers
46
+ });
47
+ }
48
+ return responseBody;
49
+ }
50
+ buildHeaders(headers, body) {
51
+ const requestHeaders = {
52
+ accept: 'application/json',
53
+ ...this.defaultHeaders,
54
+ ...normalizeHeaders(headers)
55
+ };
56
+ this.applyAuth(requestHeaders);
57
+ if (body !== undefined && !isBodyInit(body) && !hasHeader(requestHeaders, 'content-type')) {
58
+ requestHeaders['content-type'] = 'application/json';
59
+ }
60
+ return requestHeaders;
61
+ }
62
+ }
63
+ function normalizeBaseUrl(baseUrl) {
64
+ return baseUrl.endsWith('/') ? baseUrl : `${baseUrl}/`;
65
+ }
66
+ function buildUrl(baseUrl, path, query) {
67
+ const normalizedPath = path.replace(/^\/+/, '');
68
+ const url = new URL(normalizedPath, baseUrl);
69
+ if (query) {
70
+ for (const [key, value] of Object.entries(query)) {
71
+ const values = Array.isArray(value) ? value : [value];
72
+ for (const item of values) {
73
+ appendQueryValue(url, key, item);
74
+ }
75
+ }
76
+ }
77
+ return url.toString();
78
+ }
79
+ function appendQueryValue(url, key, value) {
80
+ if (value === undefined || value === null) {
81
+ return;
82
+ }
83
+ url.searchParams.append(key, String(value));
84
+ }
85
+ function normalizeHeaders(headers) {
86
+ if (!headers) {
87
+ return {};
88
+ }
89
+ return Object.fromEntries(Object.entries(headers).map(([key, value]) => [key.toLowerCase(), value]));
90
+ }
91
+ function hasHeader(headers, name) {
92
+ return Object.keys(headers).some((key) => key.toLowerCase() === name.toLowerCase());
93
+ }
94
+ function serializeBody(body) {
95
+ if (body === undefined) {
96
+ return undefined;
97
+ }
98
+ if (isBodyInit(body)) {
99
+ return body;
100
+ }
101
+ return JSON.stringify(body);
102
+ }
103
+ function isBodyInit(body) {
104
+ return (typeof body === 'string' ||
105
+ (typeof Blob !== 'undefined' && body instanceof Blob) ||
106
+ (typeof FormData !== 'undefined' && body instanceof FormData) ||
107
+ (typeof URLSearchParams !== 'undefined' && body instanceof URLSearchParams));
108
+ }
109
+ async function parseResponseBody(response) {
110
+ if (response.status === 204 || response.status === 205) {
111
+ return undefined;
112
+ }
113
+ const text = await response.text();
114
+ if (!text) {
115
+ return undefined;
116
+ }
117
+ const contentType = response.headers.get('content-type') ?? '';
118
+ if (contentType.includes('application/json')) {
119
+ return JSON.parse(text);
120
+ }
121
+ return text;
122
+ }
123
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export { WALLET_CHAINS, WalletChain, getWalletChainConfig } from './chains.js';
2
+ export { WalletsApiError } from './errors.js';
3
+ export { CustodianApi, custodianOperations } from './portal/custodian.js';
4
+ export { clientOperations } from './portal/client-api.js';
5
+ export { enclaveOperations } from './portal/enclave-api.js';
6
+ export { WalletsClient } from './portal/wallets-client.js';
7
+ export { TatumWalletsSdk } from './sdk.js';
8
+ export { WalletsApiClient } from './tatum/api-client.js';
9
+ export type { WalletChainConfig } from './chains.js';
10
+ export type { CustodianOperation, CustodianRequestOptions } from './portal/custodian.js';
11
+ export type { ClientOperation } from './portal/client-api.js';
12
+ export type { EnclaveOperation } from './portal/enclave-api.js';
13
+ export type { InitClientConfig, WalletsClientRequestOptions } from './portal/wallets-client.js';
14
+ export type { PathParamValue } from './path.js';
15
+ export type { ApiErrorOptions, ApiRequestOptions, HttpMethod, QueryParams, QueryValue, WalletsSDKConfig } from './types.js';
16
+ export type { BackupShareCipherTextResponse, BackupSharePair, BackupWalletBody, BackupWalletResponse, BitcoinTransactionResult, BuildTransactionBody, BuildTransactionResponse, ClientDetails, ClientEjectableBackupSharesQuery, ClientEjectableBackupSharesResponse, CreateClientBody, CreateClientResponse, CreateClientSessionBody, CreateClientSessionResponse, Curve, CurveShares, Eip155TransactionResult, EjectableBackupShares, EjectableBackupSharesBackupMethod, EnableEjectBody, EnableEjectResponse, EvaluateTransactionBody, EvaluateTransactionInput, EvaluateTransactionOperationType, EvaluateTransactionQuery, EvaluateTransactionResponse, EvaluateTransactionToken, GenerateWalletResponse, ListClientsQuery, ListClientsResponse, PortalRequestOptions, RawSignBody, RawSignResponse, RecoverWalletBody, RecoverWalletResponse, SendAssetsBody, SendAssetsResponse, SignBody, SignResponse, SigningSharePair, StoreBackupShareBody, SolanaTransactionResult, StellarTransactionResult, TransactionBalanceChange, TransactionEvaluation, TronTransactionResult, UpdateBackupSharePairsBody, UpdateSigningSharePairsBody, Wallet, WalletShare } from './portal/types/index.js';
17
+ //# sourceMappingURL=index.d.ts.map