@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,YAAY,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACzF,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,YAAY,EAAE,gBAAgB,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAChG,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,WAAW,EACX,UAAU,EACV,gBAAgB,EACjB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,6BAA6B,EAC7B,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,wBAAwB,EACxB,aAAa,EACb,gCAAgC,EAChC,mCAAmC,EACnC,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,KAAK,EACL,WAAW,EACX,uBAAuB,EACvB,qBAAqB,EACrB,iCAAiC,EACjC,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,wBAAwB,EACxB,gCAAgC,EAChC,wBAAwB,EACxB,2BAA2B,EAC3B,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,qBAAqB,EACrB,qBAAqB,EACrB,0BAA0B,EAC1B,2BAA2B,EAC3B,MAAM,EACN,WAAW,EACZ,MAAM,yBAAyB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
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
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ApiRequestOptions, HttpMethod, RequestOptions } from './types.js';
2
+ /**
3
+ * Turns an operation definition plus per-call options into a concrete
4
+ * {@link ApiRequestOptions}: interpolates path params and copies only the
5
+ * fields that were actually provided (to respect `exactOptionalPropertyTypes`).
6
+ */
7
+ export declare function buildRequestOptions(method: HttpMethod, pathTemplate: string, options: RequestOptions): ApiRequestOptions;
8
+ //# sourceMappingURL=operation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhF;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,EAClB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,cAAc,GACtB,iBAAiB,CAuBnB"}
@@ -0,0 +1,26 @@
1
+ import { interpolatePath } from './path.js';
2
+ /**
3
+ * Turns an operation definition plus per-call options into a concrete
4
+ * {@link ApiRequestOptions}: interpolates path params and copies only the
5
+ * fields that were actually provided (to respect `exactOptionalPropertyTypes`).
6
+ */
7
+ export function buildRequestOptions(method, pathTemplate, options) {
8
+ const requestOptions = {
9
+ method,
10
+ path: interpolatePath(pathTemplate, options.path)
11
+ };
12
+ if (options.query !== undefined) {
13
+ requestOptions.query = options.query;
14
+ }
15
+ if (options.body !== undefined) {
16
+ requestOptions.body = options.body;
17
+ }
18
+ if (options.headers !== undefined) {
19
+ requestOptions.headers = options.headers;
20
+ }
21
+ if (options.signal !== undefined) {
22
+ requestOptions.signal = options.signal;
23
+ }
24
+ return requestOptions;
25
+ }
26
+ //# sourceMappingURL=operation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation.js","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAG5C;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAkB,EAClB,YAAoB,EACpB,OAAuB;IAEvB,MAAM,cAAc,GAAsB;QACxC,MAAM;QACN,IAAI,EAAE,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC;KAClD,CAAC;IAEF,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,cAAc,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IACvC,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,cAAc,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IACrC,CAAC;IAED,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,cAAc,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAC3C,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,cAAc,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IACzC,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC"}
package/dist/path.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export type PathParamValue = string | number | boolean;
2
+ export declare function interpolatePath(template: string, pathParams: Record<string, PathParamValue | null | undefined> | undefined): string;
3
+ //# sourceMappingURL=path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../src/path.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEvD,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,SAAS,GACxE,MAAM,CAUR"}
package/dist/path.js ADDED
@@ -0,0 +1,10 @@
1
+ export function interpolatePath(template, pathParams) {
2
+ return template.replace(/\{([^}]+)\}/g, (_match, key) => {
3
+ const value = pathParams?.[key];
4
+ if (value === undefined || value === null) {
5
+ throw new Error(`Missing path parameter "${key}" for ${template}`);
6
+ }
7
+ return encodeURIComponent(String(value));
8
+ });
9
+ }
10
+ //# sourceMappingURL=path.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path.js","sourceRoot":"","sources":["../src/path.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAC7B,QAAgB,EAChB,UAAyE;IAEzE,OAAO,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,GAAW,EAAE,EAAE;QAC9D,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC;QAEhC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,SAAS,QAAQ,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,OAAO,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,73 @@
1
+ import type { WalletChain } from '../chains.js';
2
+ import type { RequestOptions, WalletsSDKConfig } from '../types.js';
3
+ import type { BackupShareCipherTextResponse, BuildTransactionBody, BuildTransactionResponse, ClientDetails, ClientEjectableBackupSharesQuery, ClientEjectableBackupSharesResponse, EvaluateTransactionBody, EvaluateTransactionQuery, EvaluateTransactionResponse, PortalRequestOptions, StoreBackupShareBody, UpdateBackupSharePairsBody, UpdateSigningSharePairsBody } from './types/index.js';
4
+ export declare const clientOperations: {
5
+ readonly getClientDetails: {
6
+ readonly method: "GET";
7
+ readonly path: "/clients/me";
8
+ };
9
+ readonly buildTransaction: {
10
+ readonly method: "POST";
11
+ readonly path: "/clients/me/chains/{chain}/assets/send/build-transaction";
12
+ };
13
+ readonly evaluateTransaction: {
14
+ readonly method: "POST";
15
+ readonly path: "/clients/me/evaluate-transaction";
16
+ };
17
+ readonly updateSigningSharePairs: {
18
+ readonly method: "PATCH";
19
+ readonly path: "/clients/me/signing-share-pairs";
20
+ };
21
+ readonly updateBackupSharePairs: {
22
+ readonly method: "PATCH";
23
+ readonly path: "/clients/me/backup-share-pairs";
24
+ };
25
+ readonly storeEncryptedBackupShare: {
26
+ readonly method: "PATCH";
27
+ readonly path: "/clients/me/backup-share-pairs/{backupSharePairId}";
28
+ };
29
+ readonly getBackupShareCipherText: {
30
+ readonly method: "GET";
31
+ readonly path: "/clients/me/backup-share-pairs/{backupSharePairId}/cipher-text";
32
+ };
33
+ readonly getEjectableBackupShares: {
34
+ readonly method: "GET";
35
+ readonly path: "/clients/me/wallets/{walletId}/ejectable-backup-shares";
36
+ };
37
+ readonly completeEject: {
38
+ readonly method: "PATCH";
39
+ readonly path: "/clients/me/wallets/{walletId}/complete-eject";
40
+ };
41
+ };
42
+ export type ClientOperation = keyof typeof clientOperations;
43
+ /**
44
+ * Client-scoped Portal REST layer (`/clients/me/...`). Authenticates with the
45
+ * client's own Portal API key / Client Session Token. Internal — exposed to
46
+ * consumers through {@link WalletsClient}.
47
+ */
48
+ export declare class ClientApi {
49
+ private readonly token;
50
+ private readonly sdkConfig;
51
+ constructor(token: string, sdkConfig: WalletsSDKConfig);
52
+ request<TResponse = unknown>(operationName: ClientOperation, options?: RequestOptions): Promise<TResponse>;
53
+ getClientDetails<TResponse = ClientDetails>(options?: PortalRequestOptions): Promise<TResponse>;
54
+ buildTransaction<TResponse = BuildTransactionResponse>(options: PortalRequestOptions<BuildTransactionBody, {
55
+ chain: WalletChain;
56
+ }>): Promise<TResponse>;
57
+ evaluateTransaction<TResponse = EvaluateTransactionResponse>(options: PortalRequestOptions<EvaluateTransactionBody, never, EvaluateTransactionQuery>): Promise<TResponse>;
58
+ updateSigningSharePairs<TResponse = void>(options: PortalRequestOptions<UpdateSigningSharePairsBody>): Promise<TResponse>;
59
+ updateBackupSharePairs<TResponse = void>(options: PortalRequestOptions<UpdateBackupSharePairsBody>): Promise<TResponse>;
60
+ storeEncryptedBackupShare<TResponse = void>(options: PortalRequestOptions<StoreBackupShareBody, {
61
+ backupSharePairId: string;
62
+ }>): Promise<TResponse>;
63
+ getBackupShareCipherText<TResponse = BackupShareCipherTextResponse>(options: PortalRequestOptions<never, {
64
+ backupSharePairId: string;
65
+ }>): Promise<TResponse>;
66
+ getEjectableBackupShares<TResponse = ClientEjectableBackupSharesResponse>(options: PortalRequestOptions<never, {
67
+ walletId: string;
68
+ }, ClientEjectableBackupSharesQuery>): Promise<TResponse>;
69
+ completeEject<TResponse = void>(options: PortalRequestOptions<never, {
70
+ walletId: string;
71
+ }>): Promise<TResponse>;
72
+ }
73
+ //# sourceMappingURL=client-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-api.d.ts","sourceRoot":"","sources":["../../src/portal/client-api.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EACV,6BAA6B,EAC7B,oBAAoB,EACpB,wBAAwB,EACxB,aAAa,EACb,gCAAgC,EAChC,mCAAmC,EACnC,uBAAuB,EACvB,wBAAwB,EACxB,2BAA2B,EAC3B,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,kBAAkB,CAAC;AAE1B,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAanB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,gBAAgB,CAAC;AAE5D;;;;GAIG;AACH,qBAAa,SAAS;IAElB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBADT,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,gBAAgB;IAG9C,OAAO,CAAC,SAAS,GAAG,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,SAAS,CAAC;IAO9G,gBAAgB,CAAC,SAAS,GAAG,aAAa,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC;IAI/F,gBAAgB,CAAC,SAAS,GAAG,wBAAwB,EACnD,OAAO,EAAE,oBAAoB,CAAC,oBAAoB,EAAE;QAAE,KAAK,EAAE,WAAW,CAAA;KAAE,CAAC,GAC1E,OAAO,CAAC,SAAS,CAAC;IAIrB,mBAAmB,CAAC,SAAS,GAAG,2BAA2B,EACzD,OAAO,EAAE,oBAAoB,CAAC,uBAAuB,EAAE,KAAK,EAAE,wBAAwB,CAAC,GACtF,OAAO,CAAC,SAAS,CAAC;IAIrB,uBAAuB,CAAC,SAAS,GAAG,IAAI,EACtC,OAAO,EAAE,oBAAoB,CAAC,2BAA2B,CAAC,GACzD,OAAO,CAAC,SAAS,CAAC;IAIrB,sBAAsB,CAAC,SAAS,GAAG,IAAI,EACrC,OAAO,EAAE,oBAAoB,CAAC,0BAA0B,CAAC,GACxD,OAAO,CAAC,SAAS,CAAC;IAIrB,yBAAyB,CAAC,SAAS,GAAG,IAAI,EACxC,OAAO,EAAE,oBAAoB,CAAC,oBAAoB,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC,GACjF,OAAO,CAAC,SAAS,CAAC;IAIrB,wBAAwB,CAAC,SAAS,GAAG,6BAA6B,EAChE,OAAO,EAAE,oBAAoB,CAAC,KAAK,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAA;KAAE,CAAC,GAClE,OAAO,CAAC,SAAS,CAAC;IAIrB,wBAAwB,CAAC,SAAS,GAAG,mCAAmC,EACtE,OAAO,EAAE,oBAAoB,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,gCAAgC,CAAC,GAC3F,OAAO,CAAC,SAAS,CAAC;IAIrB,aAAa,CAAC,SAAS,GAAG,IAAI,EAC5B,OAAO,EAAE,oBAAoB,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,GACzD,OAAO,CAAC,SAAS,CAAC;CAGtB"}
@@ -0,0 +1,63 @@
1
+ import { PORTAL_API_BASE_URL } from '../constants/index.js';
2
+ import { buildRequestOptions } from '../operation.js';
3
+ import { createPortalApiClient } from './transport.js';
4
+ export const clientOperations = {
5
+ getClientDetails: { method: 'GET', path: '/clients/me' },
6
+ buildTransaction: { method: 'POST', path: '/clients/me/chains/{chain}/assets/send/build-transaction' },
7
+ evaluateTransaction: { method: 'POST', path: '/clients/me/evaluate-transaction' },
8
+ updateSigningSharePairs: { method: 'PATCH', path: '/clients/me/signing-share-pairs' },
9
+ updateBackupSharePairs: { method: 'PATCH', path: '/clients/me/backup-share-pairs' },
10
+ storeEncryptedBackupShare: { method: 'PATCH', path: '/clients/me/backup-share-pairs/{backupSharePairId}' },
11
+ getBackupShareCipherText: {
12
+ method: 'GET',
13
+ path: '/clients/me/backup-share-pairs/{backupSharePairId}/cipher-text'
14
+ },
15
+ getEjectableBackupShares: { method: 'GET', path: '/clients/me/wallets/{walletId}/ejectable-backup-shares' },
16
+ completeEject: { method: 'PATCH', path: '/clients/me/wallets/{walletId}/complete-eject' }
17
+ };
18
+ /**
19
+ * Client-scoped Portal REST layer (`/clients/me/...`). Authenticates with the
20
+ * client's own Portal API key / Client Session Token. Internal — exposed to
21
+ * consumers through {@link WalletsClient}.
22
+ */
23
+ export class ClientApi {
24
+ token;
25
+ sdkConfig;
26
+ constructor(token, sdkConfig) {
27
+ this.token = token;
28
+ this.sdkConfig = sdkConfig;
29
+ }
30
+ request(operationName, options = {}) {
31
+ const operation = clientOperations[operationName];
32
+ const client = createPortalApiClient(this.sdkConfig, this.token, PORTAL_API_BASE_URL);
33
+ return client.request(buildRequestOptions(operation.method, operation.path, options));
34
+ }
35
+ getClientDetails(options) {
36
+ return this.request('getClientDetails', options);
37
+ }
38
+ buildTransaction(options) {
39
+ return this.request('buildTransaction', options);
40
+ }
41
+ evaluateTransaction(options) {
42
+ return this.request('evaluateTransaction', options);
43
+ }
44
+ updateSigningSharePairs(options) {
45
+ return this.request('updateSigningSharePairs', options);
46
+ }
47
+ updateBackupSharePairs(options) {
48
+ return this.request('updateBackupSharePairs', options);
49
+ }
50
+ storeEncryptedBackupShare(options) {
51
+ return this.request('storeEncryptedBackupShare', options);
52
+ }
53
+ getBackupShareCipherText(options) {
54
+ return this.request('getBackupShareCipherText', options);
55
+ }
56
+ getEjectableBackupShares(options) {
57
+ return this.request('getEjectableBackupShares', options);
58
+ }
59
+ completeEject(options) {
60
+ return this.request('completeEject', options);
61
+ }
62
+ }
63
+ //# sourceMappingURL=client-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-api.js","sourceRoot":"","sources":["../../src/portal/client-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import type { WalletChain } from '../chains.js';
2
+ import type { PortalTatumProvider } from '../tatum/provider.js';
3
+ import type { RequestOptions, WalletsSDKConfig } from '../types.js';
4
+ import type { BuildTransactionBody, BuildTransactionResponse, ClientDetails, CreateClientBody, CreateClientResponse, CreateClientSessionBody, CreateClientSessionResponse, EjectableBackupShares, EnableEjectBody, EnableEjectResponse, ListClientsQuery, ListClientsResponse, PortalRequestOptions } from './types/index.js';
5
+ export declare const custodianOperations: {
6
+ readonly createClient: {
7
+ readonly method: "POST";
8
+ readonly path: "/custodians/me/clients";
9
+ };
10
+ readonly listClients: {
11
+ readonly method: "GET";
12
+ readonly path: "/custodians/me/clients";
13
+ };
14
+ readonly getClient: {
15
+ readonly method: "GET";
16
+ readonly path: "/custodians/me/clients/{clientId}";
17
+ };
18
+ readonly createClientSession: {
19
+ readonly method: "POST";
20
+ readonly path: "/custodians/me/clients/{clientId}/sessions";
21
+ };
22
+ readonly buildTransaction: {
23
+ readonly method: "POST";
24
+ readonly path: "/custodians/me/clients/{clientId}/chains/{chain}/assets/send/build-transaction";
25
+ };
26
+ readonly enableEject: {
27
+ readonly method: "PATCH";
28
+ readonly path: "/custodians/me/clients/{clientId}/enable-eject";
29
+ };
30
+ readonly getEjectableBackupShares: {
31
+ readonly method: "GET";
32
+ readonly path: "/custodians/me/clients/{clientId}/wallets/{walletId}/ejectable-backup-shares";
33
+ };
34
+ };
35
+ export type CustodianOperation = keyof typeof custodianOperations;
36
+ export type CustodianRequestOptions = RequestOptions;
37
+ /**
38
+ * Custodian-scoped Portal operations (`/custodians/me/...`).
39
+ *
40
+ * Every call is authenticated with the Portal custodian token, which the SDK
41
+ * resolves from your Tatum `x-api-key` — you never pass it yourself. Use this
42
+ * to manage Portal clients, mint session tokens, and run the eject flow.
43
+ */
44
+ export declare class CustodianApi {
45
+ private readonly provider;
46
+ private readonly config;
47
+ constructor(provider: PortalTatumProvider, config: WalletsSDKConfig);
48
+ /**
49
+ * Escape hatch: dispatch any custodian operation by name with raw options.
50
+ * Prefer the typed methods below; use this only for not-yet-modeled behavior.
51
+ */
52
+ request<TResponse = unknown>(operationName: CustodianOperation, options?: CustodianRequestOptions): Promise<TResponse>;
53
+ /**
54
+ * Register a new Portal client. Returns its `id`, `clientApiKey`, and an
55
+ * initial `clientSessionToken` — pass either to {@link TatumWalletsSdk.initClient}.
56
+ */
57
+ createClient<TResponse = CreateClientResponse>(options?: PortalRequestOptions<CreateClientBody>): Promise<TResponse>;
58
+ /** List the custodian's Portal clients, with cursor-based pagination (`take` ≤ 100). */
59
+ listClients<TResponse = ListClientsResponse>(options?: PortalRequestOptions<never, never, ListClientsQuery>): Promise<TResponse>;
60
+ /** Fetch a single client's details — wallets, addresses, and share-pair statuses. */
61
+ getClient<TResponse = ClientDetails>(options: PortalRequestOptions<never, {
62
+ clientId: string;
63
+ }>): Promise<TResponse>;
64
+ /** Mint a fresh Client Session Token (CST) for the given client. */
65
+ createClientSession<TResponse = CreateClientSessionResponse>(options: PortalRequestOptions<CreateClientSessionBody, {
66
+ clientId: string;
67
+ }>): Promise<TResponse>;
68
+ /**
69
+ * Build an unsigned asset-transfer transaction for a client on the given chain.
70
+ * The caller signs and submits it separately (e.g. via {@link WalletsClient.sign}).
71
+ */
72
+ buildTransaction<TResponse = BuildTransactionResponse>(options: PortalRequestOptions<BuildTransactionBody, {
73
+ clientId: string;
74
+ chain: WalletChain;
75
+ }>): Promise<TResponse>;
76
+ /**
77
+ * Enable key eject for a client's wallet until `ejectableUntil`, allowing the
78
+ * client to later reconstruct its full private key off Portal.
79
+ */
80
+ enableEject<TResponse = EnableEjectResponse>(options: PortalRequestOptions<EnableEjectBody, {
81
+ clientId: string;
82
+ }>): Promise<TResponse>;
83
+ /**
84
+ * Fetch a wallet's ejectable backup shares — the client's encrypted backup
85
+ * share (if stored with Portal) plus the custodian backup share.
86
+ */
87
+ getEjectableBackupShares<TResponse = EjectableBackupShares>(options: PortalRequestOptions<never, {
88
+ clientId: string;
89
+ walletId: string;
90
+ }>): Promise<TResponse>;
91
+ }
92
+ //# sourceMappingURL=custodian.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custodian.d.ts","sourceRoot":"","sources":["../../src/portal/custodian.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EACV,oBAAoB,EACpB,wBAAwB,EACxB,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,2BAA2B,EAC3B,qBAAqB,EACrB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,kBAAkB,CAAC;AAE1B,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CActB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,mBAAmB,CAAC;AAElE,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAAC;AAErD;;;;;;GAMG;AACH,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,QAAQ,EAAE,mBAAmB,EAC7B,MAAM,EAAE,gBAAgB;IAG3C;;;OAGG;IACG,OAAO,CAAC,SAAS,GAAG,OAAO,EAC/B,aAAa,EAAE,kBAAkB,EACjC,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,SAAS,CAAC;IAQrB;;;OAGG;IACH,YAAY,CAAC,SAAS,GAAG,oBAAoB,EAC3C,OAAO,CAAC,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,GAC/C,OAAO,CAAC,SAAS,CAAC;IAIrB,wFAAwF;IACxF,WAAW,CAAC,SAAS,GAAG,mBAAmB,EACzC,OAAO,CAAC,EAAE,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,gBAAgB,CAAC,GAC7D,OAAO,CAAC,SAAS,CAAC;IAIrB,qFAAqF;IACrF,SAAS,CAAC,SAAS,GAAG,aAAa,EACjC,OAAO,EAAE,oBAAoB,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,GACzD,OAAO,CAAC,SAAS,CAAC;IAIrB,oEAAoE;IACpE,mBAAmB,CAAC,SAAS,GAAG,2BAA2B,EACzD,OAAO,EAAE,oBAAoB,CAAC,uBAAuB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,GAC3E,OAAO,CAAC,SAAS,CAAC;IAIrB;;;OAGG;IACH,gBAAgB,CAAC,SAAS,GAAG,wBAAwB,EACnD,OAAO,EAAE,oBAAoB,CAAC,oBAAoB,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,WAAW,CAAA;KAAE,CAAC,GAC5F,OAAO,CAAC,SAAS,CAAC;IAIrB;;;OAGG;IACH,WAAW,CAAC,SAAS,GAAG,mBAAmB,EACzC,OAAO,EAAE,oBAAoB,CAAC,eAAe,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,GACnE,OAAO,CAAC,SAAS,CAAC;IAIrB;;;OAGG;IACH,wBAAwB,CAAC,SAAS,GAAG,qBAAqB,EACxD,OAAO,EAAE,oBAAoB,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,GAC3E,OAAO,CAAC,SAAS,CAAC;CAGtB"}
@@ -0,0 +1,84 @@
1
+ import { PORTAL_API_BASE_URL } from '../constants/index.js';
2
+ import { buildRequestOptions } from '../operation.js';
3
+ import { createPortalApiClient } from './transport.js';
4
+ export const custodianOperations = {
5
+ createClient: { method: 'POST', path: '/custodians/me/clients' },
6
+ listClients: { method: 'GET', path: '/custodians/me/clients' },
7
+ getClient: { method: 'GET', path: '/custodians/me/clients/{clientId}' },
8
+ createClientSession: { method: 'POST', path: '/custodians/me/clients/{clientId}/sessions' },
9
+ buildTransaction: {
10
+ method: 'POST',
11
+ path: '/custodians/me/clients/{clientId}/chains/{chain}/assets/send/build-transaction'
12
+ },
13
+ enableEject: { method: 'PATCH', path: '/custodians/me/clients/{clientId}/enable-eject' },
14
+ getEjectableBackupShares: {
15
+ method: 'GET',
16
+ path: '/custodians/me/clients/{clientId}/wallets/{walletId}/ejectable-backup-shares'
17
+ }
18
+ };
19
+ /**
20
+ * Custodian-scoped Portal operations (`/custodians/me/...`).
21
+ *
22
+ * Every call is authenticated with the Portal custodian token, which the SDK
23
+ * resolves from your Tatum `x-api-key` — you never pass it yourself. Use this
24
+ * to manage Portal clients, mint session tokens, and run the eject flow.
25
+ */
26
+ export class CustodianApi {
27
+ provider;
28
+ config;
29
+ constructor(provider, config) {
30
+ this.provider = provider;
31
+ this.config = config;
32
+ }
33
+ /**
34
+ * Escape hatch: dispatch any custodian operation by name with raw options.
35
+ * Prefer the typed methods below; use this only for not-yet-modeled behavior.
36
+ */
37
+ async request(operationName, options = {}) {
38
+ const operation = custodianOperations[operationName];
39
+ const token = await this.provider.getCustodianToken();
40
+ const client = createPortalApiClient(this.config, token, PORTAL_API_BASE_URL);
41
+ return client.request(buildRequestOptions(operation.method, operation.path, options));
42
+ }
43
+ /**
44
+ * Register a new Portal client. Returns its `id`, `clientApiKey`, and an
45
+ * initial `clientSessionToken` — pass either to {@link TatumWalletsSdk.initClient}.
46
+ */
47
+ createClient(options) {
48
+ return this.request('createClient', options);
49
+ }
50
+ /** List the custodian's Portal clients, with cursor-based pagination (`take` ≤ 100). */
51
+ listClients(options) {
52
+ return this.request('listClients', options);
53
+ }
54
+ /** Fetch a single client's details — wallets, addresses, and share-pair statuses. */
55
+ getClient(options) {
56
+ return this.request('getClient', options);
57
+ }
58
+ /** Mint a fresh Client Session Token (CST) for the given client. */
59
+ createClientSession(options) {
60
+ return this.request('createClientSession', options);
61
+ }
62
+ /**
63
+ * Build an unsigned asset-transfer transaction for a client on the given chain.
64
+ * The caller signs and submits it separately (e.g. via {@link WalletsClient.sign}).
65
+ */
66
+ buildTransaction(options) {
67
+ return this.request('buildTransaction', options);
68
+ }
69
+ /**
70
+ * Enable key eject for a client's wallet until `ejectableUntil`, allowing the
71
+ * client to later reconstruct its full private key off Portal.
72
+ */
73
+ enableEject(options) {
74
+ return this.request('enableEject', options);
75
+ }
76
+ /**
77
+ * Fetch a wallet's ejectable backup shares — the client's encrypted backup
78
+ * share (if stored with Portal) plus the custodian backup share.
79
+ */
80
+ getEjectableBackupShares(options) {
81
+ return this.request('getEjectableBackupShares', options);
82
+ }
83
+ }
84
+ //# sourceMappingURL=custodian.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custodian.js","sourceRoot":"","sources":["../../src/portal/custodian.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAoBvD,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE;IAChE,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,wBAAwB,EAAE;IAC9D,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,mCAAmC,EAAE;IACvE,mBAAmB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,4CAA4C,EAAE;IAC3F,gBAAgB,EAAE;QAChB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,gFAAgF;KACvF;IACD,WAAW,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,gDAAgD,EAAE;IACxF,wBAAwB,EAAE;QACxB,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,8EAA8E;KACrF;CACO,CAAC;AAMX;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IAEJ;IACA;IAFnB,YACmB,QAA6B,EAC7B,MAAwB;QADxB,aAAQ,GAAR,QAAQ,CAAqB;QAC7B,WAAM,GAAN,MAAM,CAAkB;IACxC,CAAC;IAEJ;;;OAGG;IACH,KAAK,CAAC,OAAO,CACX,aAAiC,EACjC,UAAmC,EAAE;QAErC,MAAM,SAAS,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,CAAC;QACtD,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;QAE9E,OAAO,MAAM,CAAC,OAAO,CAAY,mBAAmB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACnG,CAAC;IAED;;;OAGG;IACH,YAAY,CACV,OAAgD;QAEhD,OAAO,IAAI,CAAC,OAAO,CAAY,cAAc,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,wFAAwF;IACxF,WAAW,CACT,OAA8D;QAE9D,OAAO,IAAI,CAAC,OAAO,CAAY,aAAa,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAED,qFAAqF;IACrF,SAAS,CACP,OAA0D;QAE1D,OAAO,IAAI,CAAC,OAAO,CAAY,WAAW,EAAE,OAAO,CAAC,CAAC;IACvD,CAAC;IAED,oEAAoE;IACpE,mBAAmB,CACjB,OAA4E;QAE5E,OAAO,IAAI,CAAC,OAAO,CAAY,qBAAqB,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;IAED;;;OAGG;IACH,gBAAgB,CACd,OAA6F;QAE7F,OAAO,IAAI,CAAC,OAAO,CAAY,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACH,WAAW,CACT,OAAoE;QAEpE,OAAO,IAAI,CAAC,OAAO,CAAY,aAAa,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;IAED;;;OAGG;IACH,wBAAwB,CACtB,OAA4E;QAE5E,OAAO,IAAI,CAAC,OAAO,CAAY,0BAA0B,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;CACF"}
@@ -0,0 +1,53 @@
1
+ import type { Curve } from './types/index.js';
2
+ import type { PortalTatumProvider } from '../tatum/provider.js';
3
+ import type { RequestOptions, WalletsSDKConfig } from '../types.js';
4
+ import type { BackupWalletBody, BackupWalletResponse, GenerateWalletResponse, PortalRequestOptions, RawSignBody, RawSignResponse, RecoverWalletBody, RecoverWalletResponse, SendAssetsBody, SendAssetsResponse, SignBody, SignResponse } from './types/index.js';
5
+ export declare const enclaveOperations: {
6
+ readonly generateWallet: {
7
+ readonly method: "POST";
8
+ readonly path: "/v1/generate";
9
+ };
10
+ readonly backupWallet: {
11
+ readonly method: "POST";
12
+ readonly path: "/v1/backup";
13
+ };
14
+ readonly recoverWallet: {
15
+ readonly method: "POST";
16
+ readonly path: "/v1/recover";
17
+ };
18
+ readonly sign: {
19
+ readonly method: "POST";
20
+ readonly path: "/v1/sign";
21
+ };
22
+ readonly rawSign: {
23
+ readonly method: "POST";
24
+ readonly path: "/v1/raw/sign/{curve}";
25
+ };
26
+ readonly sendAssets: {
27
+ readonly method: "POST";
28
+ readonly path: "/v1/assets/send";
29
+ };
30
+ };
31
+ export type EnclaveOperation = keyof typeof enclaveOperations;
32
+ /**
33
+ * Enclave MPC layer (`mpc-client.portalhq.io/v1/...`). Operates on key shares;
34
+ * auto-injects a Tatum-resolved `rpcUrl` (from the body's `chain`/`chainId`)
35
+ * when one is not already present. Internal — exposed through {@link WalletsClient}.
36
+ */
37
+ export declare class EnclaveApi {
38
+ private readonly token;
39
+ private readonly provider;
40
+ private readonly sdkConfig;
41
+ constructor(token: string, provider: PortalTatumProvider, sdkConfig: WalletsSDKConfig);
42
+ request<TResponse = unknown>(operationName: EnclaveOperation, options?: RequestOptions): Promise<TResponse>;
43
+ generateWallet<TResponse = GenerateWalletResponse>(options?: PortalRequestOptions): Promise<TResponse>;
44
+ backupWallet<TResponse = BackupWalletResponse>(options: PortalRequestOptions<BackupWalletBody>): Promise<TResponse>;
45
+ recoverWallet<TResponse = RecoverWalletResponse>(options: PortalRequestOptions<RecoverWalletBody>): Promise<TResponse>;
46
+ sign<TResponse = SignResponse>(options: PortalRequestOptions<SignBody>): Promise<TResponse>;
47
+ rawSign<TResponse = RawSignResponse>(options: PortalRequestOptions<RawSignBody, {
48
+ curve: Curve;
49
+ }>): Promise<TResponse>;
50
+ sendAssets<TResponse = SendAssetsResponse>(options: PortalRequestOptions<SendAssetsBody>): Promise<TResponse>;
51
+ private withResolvedRpcUrl;
52
+ }
53
+ //# sourceMappingURL=enclave-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enclave-api.d.ts","sourceRoot":"","sources":["../../src/portal/enclave-api.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,YAAY,EACb,MAAM,kBAAkB,CAAC;AAE1B,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;CAOpB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAE9D;;;;GAIG;AACH,qBAAa,UAAU;IAEnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAFT,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,gBAAgB;IAGxC,OAAO,CAAC,SAAS,GAAG,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,SAAS,CAAC;IAWrH,cAAc,CAAC,SAAS,GAAG,sBAAsB,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,SAAS,CAAC;IAItG,YAAY,CAAC,SAAS,GAAG,oBAAoB,EAC3C,OAAO,EAAE,oBAAoB,CAAC,gBAAgB,CAAC,GAC9C,OAAO,CAAC,SAAS,CAAC;IAIrB,aAAa,CAAC,SAAS,GAAG,qBAAqB,EAC7C,OAAO,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,GAC/C,OAAO,CAAC,SAAS,CAAC;IAIrB,IAAI,CAAC,SAAS,GAAG,YAAY,EAAE,OAAO,EAAE,oBAAoB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAI3F,OAAO,CAAC,SAAS,GAAG,eAAe,EACjC,OAAO,EAAE,oBAAoB,CAAC,WAAW,EAAE;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC,GAC3D,OAAO,CAAC,SAAS,CAAC;IAIrB,UAAU,CAAC,SAAS,GAAG,kBAAkB,EACvC,OAAO,EAAE,oBAAoB,CAAC,cAAc,CAAC,GAC5C,OAAO,CAAC,SAAS,CAAC;YAIP,kBAAkB;CAiBjC"}
@@ -0,0 +1,70 @@
1
+ import { PORTAL_ENCLAVE_BASE_URL } from '../constants/index.js';
2
+ import { buildRequestOptions } from '../operation.js';
3
+ import { createPortalApiClient } from './transport.js';
4
+ export const enclaveOperations = {
5
+ generateWallet: { method: 'POST', path: '/v1/generate' },
6
+ backupWallet: { method: 'POST', path: '/v1/backup' },
7
+ recoverWallet: { method: 'POST', path: '/v1/recover' },
8
+ sign: { method: 'POST', path: '/v1/sign' },
9
+ rawSign: { method: 'POST', path: '/v1/raw/sign/{curve}' },
10
+ sendAssets: { method: 'POST', path: '/v1/assets/send' }
11
+ };
12
+ /**
13
+ * Enclave MPC layer (`mpc-client.portalhq.io/v1/...`). Operates on key shares;
14
+ * auto-injects a Tatum-resolved `rpcUrl` (from the body's `chain`/`chainId`)
15
+ * when one is not already present. Internal — exposed through {@link WalletsClient}.
16
+ */
17
+ export class EnclaveApi {
18
+ token;
19
+ provider;
20
+ sdkConfig;
21
+ constructor(token, provider, sdkConfig) {
22
+ this.token = token;
23
+ this.provider = provider;
24
+ this.sdkConfig = sdkConfig;
25
+ }
26
+ async request(operationName, options = {}) {
27
+ const operation = enclaveOperations[operationName];
28
+ const client = createPortalApiClient(this.sdkConfig, this.token, PORTAL_ENCLAVE_BASE_URL);
29
+ const requestOptions = buildRequestOptions(operation.method, operation.path, {
30
+ ...options,
31
+ body: await this.withResolvedRpcUrl(options.body)
32
+ });
33
+ return client.request(requestOptions);
34
+ }
35
+ generateWallet(options) {
36
+ return this.request('generateWallet', { ...options, body: {} });
37
+ }
38
+ backupWallet(options) {
39
+ return this.request('backupWallet', options);
40
+ }
41
+ recoverWallet(options) {
42
+ return this.request('recoverWallet', options);
43
+ }
44
+ sign(options) {
45
+ return this.request('sign', options);
46
+ }
47
+ rawSign(options) {
48
+ return this.request('rawSign', options);
49
+ }
50
+ sendAssets(options) {
51
+ return this.request('sendAssets', options);
52
+ }
53
+ async withResolvedRpcUrl(body) {
54
+ if (!isRecord(body) || typeof body.rpcUrl === 'string') {
55
+ return body;
56
+ }
57
+ const chain = typeof body.chain === 'string' ? body.chain : typeof body.chainId === 'string' ? body.chainId : undefined;
58
+ if (!chain) {
59
+ return body;
60
+ }
61
+ return {
62
+ ...body,
63
+ rpcUrl: await this.provider.getRpcUrl(chain)
64
+ };
65
+ }
66
+ }
67
+ function isRecord(value) {
68
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
69
+ }
70
+ //# sourceMappingURL=enclave-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enclave-api.js","sourceRoot":"","sources":["../../src/portal/enclave-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAmBvD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE;IACxD,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE;IACpD,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE;IACtD,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE;IAC1C,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,EAAE;IACzD,UAAU,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE;CAC/C,CAAC;AAIX;;;;GAIG;AACH,MAAM,OAAO,UAAU;IAEF;IACA;IACA;IAHnB,YACmB,KAAa,EACb,QAA6B,EAC7B,SAA2B;QAF3B,UAAK,GAAL,KAAK,CAAQ;QACb,aAAQ,GAAR,QAAQ,CAAqB;QAC7B,cAAS,GAAT,SAAS,CAAkB;IAC3C,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAsB,aAA+B,EAAE,UAA0B,EAAE;QAC9F,MAAM,SAAS,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,qBAAqB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;QAC1F,MAAM,cAAc,GAAG,mBAAmB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE;YAC3E,GAAG,OAAO;YACV,IAAI,EAAE,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC;SAClD,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,OAAO,CAAY,cAAc,CAAC,CAAC;IACnD,CAAC;IAED,cAAc,CAAqC,OAA8B;QAC/E,OAAO,IAAI,CAAC,OAAO,CAAY,gBAAgB,EAAE,EAAE,GAAG,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,YAAY,CACV,OAA+C;QAE/C,OAAO,IAAI,CAAC,OAAO,CAAY,cAAc,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,aAAa,CACX,OAAgD;QAEhD,OAAO,IAAI,CAAC,OAAO,CAAY,eAAe,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED,IAAI,CAA2B,OAAuC;QACpE,OAAO,IAAI,CAAC,OAAO,CAAY,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,CACL,OAA4D;QAE5D,OAAO,IAAI,CAAC,OAAO,CAAY,SAAS,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAED,UAAU,CACR,OAA6C;QAE7C,OAAO,IAAI,CAAC,OAAO,CAAY,YAAY,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IAEO,KAAK,CAAC,kBAAkB,CAAC,IAAa;QAC5C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GACT,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAE5G,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO;YACL,GAAG,IAAI;YACP,MAAM,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;SAC7C,CAAC;IACJ,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { HttpClient } from '../http.js';
2
+ import type { WalletsSDKConfig } from '../types.js';
3
+ export interface PortalApiClientConfig {
4
+ token: string;
5
+ baseUrl: string;
6
+ headers?: Record<string, string> | undefined;
7
+ fetch?: typeof fetch | undefined;
8
+ }
9
+ export declare class PortalApiClient extends HttpClient {
10
+ constructor(config: PortalApiClientConfig);
11
+ }
12
+ export declare function createPortalApiClient(config: Pick<WalletsSDKConfig, 'fetch' | 'headers'>, token: string, baseUrl: string): PortalApiClient;
13
+ //# sourceMappingURL=transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/portal/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;IAC7C,KAAK,CAAC,EAAE,OAAO,KAAK,GAAG,SAAS,CAAC;CAClC;AAED,qBAAa,eAAgB,SAAQ,UAAU;gBACjC,MAAM,EAAE,qBAAqB;CAiB1C;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,SAAS,CAAC,EACnD,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,eAAe,CAOjB"}
@@ -0,0 +1,27 @@
1
+ import { HttpClient } from '../http.js';
2
+ export class PortalApiClient extends HttpClient {
3
+ constructor(config) {
4
+ if (!config.token) {
5
+ throw new Error('Portal token is required');
6
+ }
7
+ const token = config.token;
8
+ super({
9
+ baseUrl: config.baseUrl,
10
+ headers: config.headers,
11
+ fetch: config.fetch,
12
+ errorLabel: 'Portal API',
13
+ applyAuth: (headers) => {
14
+ headers.authorization = `Bearer ${token}`;
15
+ }
16
+ });
17
+ }
18
+ }
19
+ export function createPortalApiClient(config, token, baseUrl) {
20
+ return new PortalApiClient({
21
+ token,
22
+ baseUrl,
23
+ headers: config.headers,
24
+ fetch: config.fetch
25
+ });
26
+ }
27
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/portal/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAUxC,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7C,YAAY,MAA6B;QACvC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAE3B,KAAK,CAAC;YACJ,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,UAAU,EAAE,YAAY;YACxB,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE;gBACrB,OAAO,CAAC,aAAa,GAAG,UAAU,KAAK,EAAE,CAAC;YAC5C,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,UAAU,qBAAqB,CACnC,MAAmD,EACnD,KAAa,EACb,OAAe;IAEf,OAAO,IAAI,eAAe,CAAC;QACzB,KAAK;QACL,OAAO;QACP,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC,CAAC;AACL,CAAC"}