@siebly/kraken-api 0.0.9

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 (204) hide show
  1. package/LICENSE.md +7 -0
  2. package/README.md +624 -0
  3. package/dist/cjs/DerivativesClient.d.ts +657 -0
  4. package/dist/cjs/DerivativesClient.js +726 -0
  5. package/dist/cjs/DerivativesClient.js.map +1 -0
  6. package/dist/cjs/InstitutionalClient.d.ts +183 -0
  7. package/dist/cjs/InstitutionalClient.js +266 -0
  8. package/dist/cjs/InstitutionalClient.js.map +1 -0
  9. package/dist/cjs/PartnerClient.d.ts +257 -0
  10. package/dist/cjs/PartnerClient.js +344 -0
  11. package/dist/cjs/PartnerClient.js.map +1 -0
  12. package/dist/cjs/SpotClient.d.ts +547 -0
  13. package/dist/cjs/SpotClient.js +607 -0
  14. package/dist/cjs/SpotClient.js.map +1 -0
  15. package/dist/cjs/WebsocketAPIClient.d.ts +95 -0
  16. package/dist/cjs/WebsocketAPIClient.js +136 -0
  17. package/dist/cjs/WebsocketAPIClient.js.map +1 -0
  18. package/dist/cjs/WebsocketClient.d.ts +120 -0
  19. package/dist/cjs/WebsocketClient.js +669 -0
  20. package/dist/cjs/WebsocketClient.js.map +1 -0
  21. package/dist/cjs/index.d.ts +24 -0
  22. package/dist/cjs/index.js +41 -0
  23. package/dist/cjs/index.js.map +1 -0
  24. package/dist/cjs/lib/BaseRestClient.d.ts +66 -0
  25. package/dist/cjs/lib/BaseRestClient.js +548 -0
  26. package/dist/cjs/lib/BaseRestClient.js.map +1 -0
  27. package/dist/cjs/lib/BaseWSClient.d.ts +230 -0
  28. package/dist/cjs/lib/BaseWSClient.js +935 -0
  29. package/dist/cjs/lib/BaseWSClient.js.map +1 -0
  30. package/dist/cjs/lib/misc-util.d.ts +1 -0
  31. package/dist/cjs/lib/misc-util.js +7 -0
  32. package/dist/cjs/lib/misc-util.js.map +1 -0
  33. package/dist/cjs/lib/requestUtils.d.ts +68 -0
  34. package/dist/cjs/lib/requestUtils.js +82 -0
  35. package/dist/cjs/lib/requestUtils.js.map +1 -0
  36. package/dist/cjs/lib/webCryptoAPI.d.ts +15 -0
  37. package/dist/cjs/lib/webCryptoAPI.js +85 -0
  38. package/dist/cjs/lib/webCryptoAPI.js.map +1 -0
  39. package/dist/cjs/lib/websocket/WsStore.d.ts +75 -0
  40. package/dist/cjs/lib/websocket/WsStore.js +303 -0
  41. package/dist/cjs/lib/websocket/WsStore.js.map +1 -0
  42. package/dist/cjs/lib/websocket/WsStore.types.d.ts +51 -0
  43. package/dist/cjs/lib/websocket/WsStore.types.js +14 -0
  44. package/dist/cjs/lib/websocket/WsStore.types.js.map +1 -0
  45. package/dist/cjs/lib/websocket/logger.d.ts +7 -0
  46. package/dist/cjs/lib/websocket/logger.js +16 -0
  47. package/dist/cjs/lib/websocket/logger.js.map +1 -0
  48. package/dist/cjs/lib/websocket/rest-client-cache.d.ts +22 -0
  49. package/dist/cjs/lib/websocket/rest-client-cache.js +66 -0
  50. package/dist/cjs/lib/websocket/rest-client-cache.js.map +1 -0
  51. package/dist/cjs/lib/websocket/websocket-util.d.ts +76 -0
  52. package/dist/cjs/lib/websocket/websocket-util.js +59 -0
  53. package/dist/cjs/lib/websocket/websocket-util.js.map +1 -0
  54. package/dist/cjs/package.json +3 -0
  55. package/dist/cjs/types/request/derivatives.types.d.ts +186 -0
  56. package/dist/cjs/types/request/derivatives.types.js +6 -0
  57. package/dist/cjs/types/request/derivatives.types.js.map +1 -0
  58. package/dist/cjs/types/request/institutional.types.d.ts +313 -0
  59. package/dist/cjs/types/request/institutional.types.js +4 -0
  60. package/dist/cjs/types/request/institutional.types.js.map +1 -0
  61. package/dist/cjs/types/request/partner.types.d.ts +291 -0
  62. package/dist/cjs/types/request/partner.types.js +4 -0
  63. package/dist/cjs/types/request/partner.types.js.map +1 -0
  64. package/dist/cjs/types/request/spot.types.d.ts +324 -0
  65. package/dist/cjs/types/request/spot.types.js +6 -0
  66. package/dist/cjs/types/request/spot.types.js.map +1 -0
  67. package/dist/cjs/types/request/wsapi.types.d.ts +90 -0
  68. package/dist/cjs/types/request/wsapi.types.js +6 -0
  69. package/dist/cjs/types/request/wsapi.types.js.map +1 -0
  70. package/dist/cjs/types/response/derivatives.types.d.ts +712 -0
  71. package/dist/cjs/types/response/derivatives.types.js +6 -0
  72. package/dist/cjs/types/response/derivatives.types.js.map +1 -0
  73. package/dist/cjs/types/response/institutional.types.d.ts +318 -0
  74. package/dist/cjs/types/response/institutional.types.js +4 -0
  75. package/dist/cjs/types/response/institutional.types.js.map +1 -0
  76. package/dist/cjs/types/response/partner.types.d.ts +332 -0
  77. package/dist/cjs/types/response/partner.types.js +4 -0
  78. package/dist/cjs/types/response/partner.types.js.map +1 -0
  79. package/dist/cjs/types/response/shared.types.d.ts +27 -0
  80. package/dist/cjs/types/response/shared.types.js +3 -0
  81. package/dist/cjs/types/response/shared.types.js.map +1 -0
  82. package/dist/cjs/types/response/spot.types.d.ts +590 -0
  83. package/dist/cjs/types/response/spot.types.js +6 -0
  84. package/dist/cjs/types/response/spot.types.js.map +1 -0
  85. package/dist/cjs/types/response/ws.d.ts +11 -0
  86. package/dist/cjs/types/response/ws.js +3 -0
  87. package/dist/cjs/types/response/ws.js.map +1 -0
  88. package/dist/cjs/types/response/wsapi.types.d.ts +44 -0
  89. package/dist/cjs/types/response/wsapi.types.js +6 -0
  90. package/dist/cjs/types/response/wsapi.types.js.map +1 -0
  91. package/dist/cjs/types/websockets/ws-api.d.ts +71 -0
  92. package/dist/cjs/types/websockets/ws-api.js +18 -0
  93. package/dist/cjs/types/websockets/ws-api.js.map +1 -0
  94. package/dist/cjs/types/websockets/ws-events.d.ts +11 -0
  95. package/dist/cjs/types/websockets/ws-events.js +11 -0
  96. package/dist/cjs/types/websockets/ws-events.js.map +1 -0
  97. package/dist/cjs/types/websockets/ws-general.d.ts +67 -0
  98. package/dist/cjs/types/websockets/ws-general.js +3 -0
  99. package/dist/cjs/types/websockets/ws-general.js.map +1 -0
  100. package/dist/cjs/types/websockets/ws-subscriptions.d.ts +11 -0
  101. package/dist/cjs/types/websockets/ws-subscriptions.js +31 -0
  102. package/dist/cjs/types/websockets/ws-subscriptions.js.map +1 -0
  103. package/dist/mjs/DerivativesClient.d.ts +657 -0
  104. package/dist/mjs/DerivativesClient.js +722 -0
  105. package/dist/mjs/DerivativesClient.js.map +1 -0
  106. package/dist/mjs/InstitutionalClient.d.ts +183 -0
  107. package/dist/mjs/InstitutionalClient.js +262 -0
  108. package/dist/mjs/InstitutionalClient.js.map +1 -0
  109. package/dist/mjs/PartnerClient.d.ts +257 -0
  110. package/dist/mjs/PartnerClient.js +340 -0
  111. package/dist/mjs/PartnerClient.js.map +1 -0
  112. package/dist/mjs/SpotClient.d.ts +547 -0
  113. package/dist/mjs/SpotClient.js +603 -0
  114. package/dist/mjs/SpotClient.js.map +1 -0
  115. package/dist/mjs/WebsocketAPIClient.d.ts +95 -0
  116. package/dist/mjs/WebsocketAPIClient.js +132 -0
  117. package/dist/mjs/WebsocketAPIClient.js.map +1 -0
  118. package/dist/mjs/WebsocketClient.d.ts +120 -0
  119. package/dist/mjs/WebsocketClient.js +665 -0
  120. package/dist/mjs/WebsocketClient.js.map +1 -0
  121. package/dist/mjs/index.d.ts +24 -0
  122. package/dist/mjs/index.js +25 -0
  123. package/dist/mjs/index.js.map +1 -0
  124. package/dist/mjs/lib/BaseRestClient.d.ts +66 -0
  125. package/dist/mjs/lib/BaseRestClient.js +541 -0
  126. package/dist/mjs/lib/BaseRestClient.js.map +1 -0
  127. package/dist/mjs/lib/BaseWSClient.d.ts +230 -0
  128. package/dist/mjs/lib/BaseWSClient.js +928 -0
  129. package/dist/mjs/lib/BaseWSClient.js.map +1 -0
  130. package/dist/mjs/lib/misc-util.d.ts +1 -0
  131. package/dist/mjs/lib/misc-util.js +4 -0
  132. package/dist/mjs/lib/misc-util.js.map +1 -0
  133. package/dist/mjs/lib/requestUtils.d.ts +68 -0
  134. package/dist/mjs/lib/requestUtils.js +76 -0
  135. package/dist/mjs/lib/requestUtils.js.map +1 -0
  136. package/dist/mjs/lib/webCryptoAPI.d.ts +15 -0
  137. package/dist/mjs/lib/webCryptoAPI.js +80 -0
  138. package/dist/mjs/lib/webCryptoAPI.js.map +1 -0
  139. package/dist/mjs/lib/websocket/WsStore.d.ts +75 -0
  140. package/dist/mjs/lib/websocket/WsStore.js +298 -0
  141. package/dist/mjs/lib/websocket/WsStore.js.map +1 -0
  142. package/dist/mjs/lib/websocket/WsStore.types.d.ts +51 -0
  143. package/dist/mjs/lib/websocket/WsStore.types.js +11 -0
  144. package/dist/mjs/lib/websocket/WsStore.types.js.map +1 -0
  145. package/dist/mjs/lib/websocket/logger.d.ts +7 -0
  146. package/dist/mjs/lib/websocket/logger.js +13 -0
  147. package/dist/mjs/lib/websocket/logger.js.map +1 -0
  148. package/dist/mjs/lib/websocket/rest-client-cache.d.ts +22 -0
  149. package/dist/mjs/lib/websocket/rest-client-cache.js +62 -0
  150. package/dist/mjs/lib/websocket/rest-client-cache.js.map +1 -0
  151. package/dist/mjs/lib/websocket/websocket-util.d.ts +76 -0
  152. package/dist/mjs/lib/websocket/websocket-util.js +54 -0
  153. package/dist/mjs/lib/websocket/websocket-util.js.map +1 -0
  154. package/dist/mjs/package.json +3 -0
  155. package/dist/mjs/types/request/derivatives.types.d.ts +186 -0
  156. package/dist/mjs/types/request/derivatives.types.js +5 -0
  157. package/dist/mjs/types/request/derivatives.types.js.map +1 -0
  158. package/dist/mjs/types/request/institutional.types.d.ts +313 -0
  159. package/dist/mjs/types/request/institutional.types.js +3 -0
  160. package/dist/mjs/types/request/institutional.types.js.map +1 -0
  161. package/dist/mjs/types/request/partner.types.d.ts +291 -0
  162. package/dist/mjs/types/request/partner.types.js +3 -0
  163. package/dist/mjs/types/request/partner.types.js.map +1 -0
  164. package/dist/mjs/types/request/spot.types.d.ts +324 -0
  165. package/dist/mjs/types/request/spot.types.js +5 -0
  166. package/dist/mjs/types/request/spot.types.js.map +1 -0
  167. package/dist/mjs/types/request/wsapi.types.d.ts +90 -0
  168. package/dist/mjs/types/request/wsapi.types.js +5 -0
  169. package/dist/mjs/types/request/wsapi.types.js.map +1 -0
  170. package/dist/mjs/types/response/derivatives.types.d.ts +712 -0
  171. package/dist/mjs/types/response/derivatives.types.js +5 -0
  172. package/dist/mjs/types/response/derivatives.types.js.map +1 -0
  173. package/dist/mjs/types/response/institutional.types.d.ts +318 -0
  174. package/dist/mjs/types/response/institutional.types.js +3 -0
  175. package/dist/mjs/types/response/institutional.types.js.map +1 -0
  176. package/dist/mjs/types/response/partner.types.d.ts +332 -0
  177. package/dist/mjs/types/response/partner.types.js +3 -0
  178. package/dist/mjs/types/response/partner.types.js.map +1 -0
  179. package/dist/mjs/types/response/shared.types.d.ts +27 -0
  180. package/dist/mjs/types/response/shared.types.js +2 -0
  181. package/dist/mjs/types/response/shared.types.js.map +1 -0
  182. package/dist/mjs/types/response/spot.types.d.ts +590 -0
  183. package/dist/mjs/types/response/spot.types.js +5 -0
  184. package/dist/mjs/types/response/spot.types.js.map +1 -0
  185. package/dist/mjs/types/response/ws.d.ts +11 -0
  186. package/dist/mjs/types/response/ws.js +2 -0
  187. package/dist/mjs/types/response/ws.js.map +1 -0
  188. package/dist/mjs/types/response/wsapi.types.d.ts +44 -0
  189. package/dist/mjs/types/response/wsapi.types.js +5 -0
  190. package/dist/mjs/types/response/wsapi.types.js.map +1 -0
  191. package/dist/mjs/types/websockets/ws-api.d.ts +71 -0
  192. package/dist/mjs/types/websockets/ws-api.js +15 -0
  193. package/dist/mjs/types/websockets/ws-api.js.map +1 -0
  194. package/dist/mjs/types/websockets/ws-events.d.ts +11 -0
  195. package/dist/mjs/types/websockets/ws-events.js +8 -0
  196. package/dist/mjs/types/websockets/ws-events.js.map +1 -0
  197. package/dist/mjs/types/websockets/ws-general.d.ts +67 -0
  198. package/dist/mjs/types/websockets/ws-general.js +2 -0
  199. package/dist/mjs/types/websockets/ws-general.js.map +1 -0
  200. package/dist/mjs/types/websockets/ws-subscriptions.d.ts +11 -0
  201. package/dist/mjs/types/websockets/ws-subscriptions.js +28 -0
  202. package/dist/mjs/types/websockets/ws-subscriptions.js.map +1 -0
  203. package/llms.txt +10925 -0
  204. package/package.json +89 -0
@@ -0,0 +1,548 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.BaseRestClient = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const https_1 = __importDefault(require("https"));
9
+ const misc_util_js_1 = require("./misc-util.js");
10
+ const requestUtils_js_1 = require("./requestUtils.js");
11
+ const webCryptoAPI_js_1 = require("./webCryptoAPI.js");
12
+ const MISSING_API_KEYS_ERROR = 'API Key & Secret are BOTH required to use the authenticated REST client';
13
+ const ENABLE_HTTP_TRACE = typeof process === 'object' &&
14
+ typeof process.env === 'object' &&
15
+ process.env.KRAKENTRACE;
16
+ if (ENABLE_HTTP_TRACE) {
17
+ axios_1.default.interceptors.request.use((request) => {
18
+ console.log(new Date(), 'Starting Request', JSON.stringify({
19
+ url: request.url,
20
+ method: request.method,
21
+ params: request.params,
22
+ data: request.data,
23
+ }, null, 2));
24
+ return request;
25
+ });
26
+ axios_1.default.interceptors.response.use((response) => {
27
+ console.log(new Date(), 'Response:', {
28
+ // request: {
29
+ // url: response.config.url,
30
+ // method: response.config.method,
31
+ // data: response.config.data,
32
+ // headers: response.config.headers,
33
+ // },
34
+ response: {
35
+ status: response.status,
36
+ statusText: response.statusText,
37
+ headers: response.headers,
38
+ data: JSON.stringify(response.data, null, 2),
39
+ },
40
+ });
41
+ return response;
42
+ });
43
+ }
44
+ /**
45
+ * Impure, mutates params to remove any values that have a key but are undefined.
46
+ */
47
+ function deleteUndefinedValues(params) {
48
+ if (!params) {
49
+ return;
50
+ }
51
+ for (const key in params) {
52
+ const value = params[key];
53
+ if (typeof value === 'undefined') {
54
+ delete params[key];
55
+ }
56
+ }
57
+ }
58
+ class BaseRestClient {
59
+ options;
60
+ baseUrl;
61
+ globalRequestOptions;
62
+ apiKey;
63
+ apiSecret;
64
+ apiAccessToken;
65
+ // A unique incrementing nonce
66
+ apiRequestNonce = Date.now();
67
+ /**
68
+ * Create an instance of the REST client. Pass API credentials in the object in the first parameter.
69
+ * @param {RestClientOptions} [restClientOptions={}] options to configure REST API connectivity
70
+ * @param {AxiosRequestConfig} [networkOptions={}] HTTP networking options for axios
71
+ */
72
+ constructor(restClientOptions = {}, networkOptions = {}) {
73
+ this.options = {
74
+ /** Throw errors if any request params are empty */
75
+ strictParamValidation: false,
76
+ ...restClientOptions,
77
+ };
78
+ this.globalRequestOptions = {
79
+ /** in ms == 5 minutes by default */
80
+ timeout: 1000 * 60 * 5,
81
+ /** inject custom request options based on axios specs - see axios docs for more guidance on AxiosRequestConfig: https://github.com/axios/axios#request-config */
82
+ ...networkOptions,
83
+ headers: {
84
+ UserAgent: '@siebly/kraken-api',
85
+ locale: 'en-US',
86
+ },
87
+ };
88
+ // If enabled, configure a https agent with keepAlive enabled
89
+ if (this.options.keepAlive) {
90
+ // Extract existing https agent parameters, if provided, to prevent the keepAlive flag from overwriting an existing https agent completely
91
+ const existingHttpsAgent = this.globalRequestOptions.httpsAgent;
92
+ const existingAgentOptions = existingHttpsAgent?.options || {};
93
+ // For more advanced configuration, raise an issue on GitHub or use the "networkOptions"
94
+ // parameter to define a custom httpsAgent with the desired properties
95
+ this.globalRequestOptions.httpsAgent = new https_1.default.Agent({
96
+ ...existingAgentOptions,
97
+ keepAlive: true,
98
+ keepAliveMsecs: this.options.keepAliveMsecs,
99
+ });
100
+ }
101
+ this.baseUrl = (0, requestUtils_js_1.getRestBaseUrl)(restClientOptions, this.getClientType());
102
+ this.apiKey = this.options.apiKey;
103
+ this.apiSecret = this.options.apiSecret;
104
+ this.apiAccessToken = this.options.apiAccessToken;
105
+ // Check Web Crypto API support when credentials are provided
106
+ if (this.apiKey && this.apiSecret) {
107
+ (0, webCryptoAPI_js_1.checkWebCryptoAPISupported)();
108
+ }
109
+ // Throw if one of the 3 values is missing, but at least one of them is set
110
+ const credentials = [this.apiKey, this.apiSecret];
111
+ if (credentials.includes(undefined) &&
112
+ credentials.some((v) => typeof v === 'string')) {
113
+ throw new Error(MISSING_API_KEYS_ERROR);
114
+ }
115
+ }
116
+ /**
117
+ * Generates a timestamp for signing API requests.
118
+ *
119
+ * This method can be overridden or customized using `customTimestampFn`
120
+ * to implement a custom timestamp synchronization mechanism.
121
+ * If no custom function is provided, it defaults to the current system time.
122
+ */
123
+ getSignTimestampMs() {
124
+ if (typeof this.options.customTimestampFn === 'function') {
125
+ return this.options.customTimestampFn();
126
+ }
127
+ return Date.now();
128
+ }
129
+ getNextRequestNonce() {
130
+ const newNonce = Date.now();
131
+ if (newNonce <= this.apiRequestNonce) {
132
+ this.apiRequestNonce = ++this.apiRequestNonce;
133
+ }
134
+ else {
135
+ this.apiRequestNonce = newNonce;
136
+ }
137
+ return String(this.apiRequestNonce);
138
+ }
139
+ hasValidCredentials() {
140
+ const hasAllAPICredentials = this.apiKey && this.apiSecret;
141
+ return this.hasAccessToken() || hasAllAPICredentials;
142
+ }
143
+ setAccessToken(newAccessToken) {
144
+ this.apiAccessToken = newAccessToken;
145
+ }
146
+ hasAccessToken() {
147
+ return !!this.apiAccessToken;
148
+ }
149
+ get(endpoint, params) {
150
+ const isPublicAPI = true;
151
+ // GET only supports params in the query string
152
+ return this._call('GET', endpoint, { query: params }, isPublicAPI);
153
+ }
154
+ post(endpoint, params) {
155
+ const isPublicAPI = true;
156
+ return this._call('POST', endpoint, params, isPublicAPI);
157
+ }
158
+ getPrivate(endpoint, params) {
159
+ const isPublicAPI = false;
160
+ // GET only supports params in the query string
161
+ return this._call('GET', endpoint, { query: params }, isPublicAPI);
162
+ }
163
+ postPrivate(endpoint, params) {
164
+ const isPublicAPI = false;
165
+ return this._call('POST', endpoint, params, isPublicAPI);
166
+ }
167
+ deletePrivate(endpoint, params) {
168
+ const isPublicAPI = false;
169
+ return this._call('DELETE', endpoint, params, isPublicAPI);
170
+ }
171
+ putPrivate(endpoint, params) {
172
+ const isPublicAPI = false;
173
+ return this._call('PUT', endpoint, params, isPublicAPI);
174
+ }
175
+ // protected patchPrivate(endpoint: string, params?: any) {
176
+ patchPrivate(endpoint, params) {
177
+ const isPublicAPI = false;
178
+ return this._call('PATCH', endpoint, params, isPublicAPI);
179
+ }
180
+ /**
181
+ * @private Make a HTTP request to a specific endpoint. Private endpoint API calls are automatically signed.
182
+ */
183
+ async _call(method, endpoint, params, isPublicApi) {
184
+ const path = endpoint.startsWith('/') ? endpoint : '/' + endpoint;
185
+ // Sanity check to make sure it's only ever prefixed by one forward slash
186
+ const requestUrl = this.baseUrl + path;
187
+ // Build a request and handle signature process
188
+ const options = await this.buildRequest(method, path, requestUrl, params, isPublicApi);
189
+ if (ENABLE_HTTP_TRACE) {
190
+ console.log(new Date(), 'full request: ', JSON.stringify(options, null, 2));
191
+ }
192
+ // Dispatch request
193
+ return (0, axios_1.default)(options)
194
+ .then((response) => {
195
+ const throable = {
196
+ method,
197
+ endpoint,
198
+ params,
199
+ response,
200
+ };
201
+ if (response.status == 200) {
202
+ // Throw if API returns an error (e.g. insufficient balance)
203
+ if (typeof response.data?.code === 'string' &&
204
+ response.data?.code !== '200000') {
205
+ throw throable;
206
+ }
207
+ switch (this.getClientType()) {
208
+ case requestUtils_js_1.REST_CLIENT_TYPE_ENUM.main: {
209
+ if (response.data?.error?.length) {
210
+ throw throable;
211
+ }
212
+ break;
213
+ }
214
+ case requestUtils_js_1.REST_CLIENT_TYPE_ENUM.derivatives: {
215
+ // const res = {
216
+ // result: 'error',
217
+ // error: 'authenticationError',
218
+ // serverTime: '2025-10-29T15:02:39.341Z',
219
+ // };
220
+ if (response?.data?.result === 'error') {
221
+ throw throable;
222
+ }
223
+ break;
224
+ }
225
+ }
226
+ return response.data;
227
+ }
228
+ throw throable;
229
+ })
230
+ .catch((e) => this.parseException(e, {
231
+ method,
232
+ endpoint,
233
+ path,
234
+ requestUrl,
235
+ params,
236
+ options: {
237
+ ...options,
238
+ headers: {
239
+ ...options.headers,
240
+ APIKey: 'omittedFromError',
241
+ },
242
+ },
243
+ }));
244
+ }
245
+ /**
246
+ * @private generic handler to parse request exceptions
247
+ */
248
+ parseException(e, requestParams) {
249
+ if (this.options.parseExceptions === false) {
250
+ throw e;
251
+ }
252
+ // Something happened in setting up the request that triggered an error
253
+ if (!e.response) {
254
+ if (!e.request) {
255
+ throw e.message;
256
+ }
257
+ // request made but no response received
258
+ throw e;
259
+ }
260
+ // The request was made and the server responded with a status code
261
+ // that falls out of the range of 2xx
262
+ const response = e.response;
263
+ // console.error('err: ', response?.data);
264
+ throw {
265
+ code: response.status,
266
+ message: response.statusText,
267
+ body: response.data,
268
+ headers: response.headers,
269
+ requestOptions: {
270
+ ...this.options,
271
+ // Prevent credentials from leaking into error messages
272
+ apiKey: 'omittedFromError',
273
+ apiSecret: 'omittedFromError',
274
+ apiPassphrase: 'omittedFromError',
275
+ },
276
+ requestParams,
277
+ };
278
+ }
279
+ async signMessage(paramsStr, secret, method, algorithm, options) {
280
+ if (typeof this.options.customSignMessageFn === 'function') {
281
+ return this.options.customSignMessageFn(paramsStr, secret);
282
+ }
283
+ return await (0, webCryptoAPI_js_1.signMessage)(paramsStr, secret, method, algorithm, options);
284
+ }
285
+ /**
286
+ * @private sign request and set recv window
287
+ */
288
+ async signRequest(data, endpoint, method, signMethod) {
289
+ const timestamp = this.getSignTimestampMs();
290
+ const res = {
291
+ originalParams: { ...data },
292
+ requestData: data?.body || {},
293
+ requestQuery: data?.query || {},
294
+ sign: '',
295
+ timestamp,
296
+ recvWindow: 0,
297
+ serializedParams: '',
298
+ queryParamsWithSign: '',
299
+ };
300
+ if (!this.hasValidCredentials()) {
301
+ return res;
302
+ }
303
+ // handle JSON preprocessing for requests, including embedded stringify
304
+ if (method === 'POST') {
305
+ // array
306
+ if (Array.isArray(res.requestData)) {
307
+ res.requestData.forEach((element) => {
308
+ element[requestUtils_js_1.APIIDMainKey] = requestUtils_js_1.APIIDMain;
309
+ });
310
+ }
311
+ else if (
312
+ // not array in top, but has array orders
313
+ !Array.isArray(res.requestData) &&
314
+ Array.isArray(res.requestData.orders)) {
315
+ res.requestData.orders.forEach((order) => {
316
+ order[requestUtils_js_1.APIIDMainKey] = requestUtils_js_1.APIIDMain;
317
+ });
318
+ }
319
+ else if (
320
+ // not array in top, but has array batchOrder
321
+ !Array.isArray(res.requestData) &&
322
+ res.requestData?.json &&
323
+ typeof res.requestData.json === 'object' &&
324
+ Array.isArray(res.requestData.json?.batchOrder)) {
325
+ // Unique to batch order placement, json must be pre-stringified in request
326
+ res.requestData.json = JSON.stringify({
327
+ ...res.requestData.json,
328
+ batchOrder: res.requestData.json.batchOrder.map((order) => ({
329
+ ...order,
330
+ [requestUtils_js_1.APIIDMainKey]: requestUtils_js_1.APIIDMain,
331
+ })),
332
+ });
333
+ }
334
+ else if (
335
+ // not array in top, but has json object
336
+ !Array.isArray(res.requestData) &&
337
+ res.requestData?.json &&
338
+ typeof res.requestData.json === 'object') {
339
+ // For the rare non-order requests that expected pre-stringified json
340
+ res.requestData.json = JSON.stringify({
341
+ ...res.requestData.json,
342
+ });
343
+ }
344
+ else if (res.requestData) {
345
+ // simple object
346
+ res.requestData[requestUtils_js_1.APIIDMainKey] = requestUtils_js_1.APIIDMain;
347
+ }
348
+ }
349
+ const strictParamValidation = this.options.strictParamValidation;
350
+ const encodeQueryStringValues = true;
351
+ if (signMethod === 'kraken') {
352
+ // Don't prefix with ? as part of sign. Prefix after sign
353
+ const prefixWith = '';
354
+ // Array values are repeated into key value pairs
355
+ // E.g. orderIds:[1,2] becomes orderIds=1&orderIds=2
356
+ const repeatArrayValuesAsKVPairs = true;
357
+ const clientType = this.getClientType();
358
+ switch (clientType) {
359
+ case requestUtils_js_1.REST_CLIENT_TYPE_ENUM.main: {
360
+ // Set default nonce, if not set yet
361
+ if (!Array.isArray(res.requestData)) {
362
+ if (!res.requestData?.nonce) {
363
+ res.requestData = {
364
+ nonce: this.getNextRequestNonce(),
365
+ ...res.requestData,
366
+ };
367
+ }
368
+ }
369
+ // Allow nonce override in reuqest
370
+ // Should never fallback to new nonce, since it's pre-set above with default val
371
+ const nonce = res.requestData?.nonce || this.getNextRequestNonce();
372
+ const serialisedParams = (0, requestUtils_js_1.serializeParams)(method === 'GET' ? res.requestQuery : res.requestData, strictParamValidation, encodeQueryStringValues, prefixWith, repeatArrayValuesAsKVPairs);
373
+ const serialisedQueryParams = (0, requestUtils_js_1.serializeParams)(res.requestQuery, strictParamValidation, encodeQueryStringValues, prefixWith, repeatArrayValuesAsKVPairs);
374
+ // for spot, serialise GET params, use JSON for POST
375
+ const signRequestParams = method === 'GET'
376
+ ? serialisedParams
377
+ : JSON.stringify(res.requestData);
378
+ const signEndpoint = endpoint;
379
+ const signInput = `${nonce}${signRequestParams}`;
380
+ // Only sign when no access token is provided
381
+ if (!this.hasAccessToken()) {
382
+ try {
383
+ const signMessageInput = signEndpoint +
384
+ (await (0, webCryptoAPI_js_1.hashMessage)(signInput, 'binary', 'SHA-256'));
385
+ // node:crypto equivalent
386
+ // const sign = createHmac(
387
+ // 'sha512',
388
+ // Buffer.from(this.apiSecret!, 'base64'),
389
+ // )
390
+ // .update(signMessage, 'binary')
391
+ // .digest('base64');
392
+ const sign = await this.signMessage(signMessageInput, this.apiSecret, 'base64', 'SHA-512', {
393
+ isSecretB64Encoded: true,
394
+ isInputBinaryString: true,
395
+ });
396
+ res.sign = sign;
397
+ }
398
+ catch (error) {
399
+ // Check if this is a base64 decoding error (invalid API credentials)
400
+ if (error instanceof Error &&
401
+ (error.name === 'InvalidCharacterError' ||
402
+ error.message?.includes('Invalid character'))) {
403
+ const credentialError = new Error('Failed to sign request: Invalid API credentials detected.\n\n' +
404
+ '⚠️ PLEASE CHECK YOUR API KEY AND SECRET:\n' +
405
+ ' - Ensure your API Secret is a valid base64-encoded string\n' +
406
+ ' - Kraken provides API secrets in base64 format\n\n' +
407
+ `Original error: ${error.message}\n` +
408
+ `Stack trace: ${error.stack}`);
409
+ credentialError.name = 'InvalidCredentialsError';
410
+ throw credentialError;
411
+ }
412
+ // Re-throw other errors as-is
413
+ throw error;
414
+ }
415
+ }
416
+ // ONLY the query params. The rest goes in the body, if there is a body.
417
+ res.queryParamsWithSign = serialisedQueryParams;
418
+ break;
419
+ }
420
+ case requestUtils_js_1.REST_CLIENT_TYPE_ENUM.derivatives: {
421
+ const serialisedQueryParams = (0, requestUtils_js_1.serializeParams)(res.requestQuery, strictParamValidation, encodeQueryStringValues, prefixWith, repeatArrayValuesAsKVPairs);
422
+ const serialisedBodyParams = (0, requestUtils_js_1.serializeParams)(res.requestData, strictParamValidation, encodeQueryStringValues, prefixWith, repeatArrayValuesAsKVPairs);
423
+ const signEndpoint = endpoint.replace('/derivatives', '');
424
+ const nonce = ''; //this.getNextRequestNonce();
425
+ const signInput = `${serialisedQueryParams}${serialisedBodyParams}${nonce}${signEndpoint}`;
426
+ // Only sign when no access token is provided
427
+ if (!this.hasAccessToken()) {
428
+ const signMessageInput = await (0, webCryptoAPI_js_1.hashMessage)(signInput, 'binary', 'SHA-256');
429
+ // node:crypto equivalent
430
+ // const sign = createHmac(
431
+ // 'sha512',
432
+ // Buffer.from(this.apiSecret!, 'base64'),
433
+ // )
434
+ // .update(signMessage, 'binary')
435
+ // .digest('base64');
436
+ const sign = await this.signMessage(signMessageInput, this.apiSecret, 'base64', 'SHA-512', {
437
+ isSecretB64Encoded: true,
438
+ isInputBinaryString: true,
439
+ });
440
+ res.sign = sign;
441
+ }
442
+ res.queryParamsWithSign = serialisedQueryParams;
443
+ // Submitted as query string in form body
444
+ res.requestData = serialisedBodyParams;
445
+ break;
446
+ }
447
+ }
448
+ return res;
449
+ }
450
+ console.error(new Date(), (0, misc_util_js_1.neverGuard)(signMethod, `Unhandled sign method: "${signMethod}"`));
451
+ return res;
452
+ }
453
+ async prepareSignParams(method, endpoint, signMethod, params, isPublicApi) {
454
+ if (isPublicApi) {
455
+ return {
456
+ originalParams: params,
457
+ paramsWithSign: params,
458
+ };
459
+ }
460
+ if (!this.hasValidCredentials()) {
461
+ throw new Error(MISSING_API_KEYS_ERROR);
462
+ }
463
+ return this.signRequest(params, endpoint, method, signMethod);
464
+ }
465
+ /** Returns an axios request object. Handles signing process automatically if this is a private API call */
466
+ async buildRequest(method, endpoint, url, params, isPublicApi) {
467
+ const options = {
468
+ ...this.globalRequestOptions,
469
+ url: url,
470
+ method: method,
471
+ headers: {
472
+ ...params?.headers,
473
+ ...this.globalRequestOptions.headers,
474
+ },
475
+ };
476
+ deleteUndefinedValues(params);
477
+ deleteUndefinedValues(params?.body);
478
+ deleteUndefinedValues(params?.query);
479
+ deleteUndefinedValues(params?.headers);
480
+ if (isPublicApi || !this.apiKey || !this.apiSecret) {
481
+ return {
482
+ ...options,
483
+ params: params?.query || params?.body || params,
484
+ };
485
+ }
486
+ const signResult = await this.prepareSignParams(method, endpoint, 'kraken', params, isPublicApi);
487
+ let signHeaders = {};
488
+ switch (this.getClientType()) {
489
+ case requestUtils_js_1.REST_CLIENT_TYPE_ENUM.main: {
490
+ signHeaders = {
491
+ 'API-Key': this.apiKey,
492
+ 'API-Sign': signResult.sign,
493
+ 'Content-Type': 'application/json',
494
+ Accept: 'application/json',
495
+ };
496
+ break;
497
+ }
498
+ case requestUtils_js_1.REST_CLIENT_TYPE_ENUM.derivatives: {
499
+ // Support for Authorization header, if provided:
500
+ // https://github.com/tiagosiebler/kucoin-api/issues/2
501
+ // Use restClient.setAccessToken(newToken), if you need to store a new access token
502
+ // Not supported for Kraken at this time
503
+ if (this.apiAccessToken) {
504
+ signHeaders = {
505
+ Authorization: this.apiAccessToken,
506
+ };
507
+ }
508
+ else {
509
+ signHeaders = {
510
+ Authent: signResult.sign,
511
+ APIKey: this.apiKey,
512
+ 'Content-Type': 'application/x-www-form-urlencoded',
513
+ };
514
+ }
515
+ break;
516
+ }
517
+ }
518
+ const queryParams = signResult.queryParamsWithSign
519
+ ? '?' + signResult.queryParamsWithSign
520
+ : '';
521
+ const urlWithQueryParams = options.url + queryParams;
522
+ if (method !== 'GET') {
523
+ return {
524
+ ...options,
525
+ headers: {
526
+ ...signHeaders,
527
+ ...params?.headers,
528
+ ...options.headers,
529
+ },
530
+ url: urlWithQueryParams,
531
+ data: (0, requestUtils_js_1.isEmptyObject)(signResult.requestData, true)
532
+ ? undefined
533
+ : signResult.requestData,
534
+ };
535
+ }
536
+ return {
537
+ ...options,
538
+ headers: {
539
+ ...signHeaders,
540
+ ...params?.headers,
541
+ ...options.headers,
542
+ },
543
+ url: urlWithQueryParams,
544
+ };
545
+ }
546
+ }
547
+ exports.BaseRestClient = BaseRestClient;
548
+ //# sourceMappingURL=BaseRestClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseRestClient.js","sourceRoot":"","sources":["../../../src/lib/BaseRestClient.ts"],"names":[],"mappings":"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"}