coinbase-api 0.3.2 → 1.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.
- package/README.md +438 -14
- package/dist/cjs/CBAdvancedTradeClient.d.ts +559 -0
- package/dist/cjs/CBAdvancedTradeClient.js +574 -0
- package/dist/cjs/CBAdvancedTradeClient.js.map +1 -0
- package/dist/cjs/CBAppClient.d.ts +359 -0
- package/dist/cjs/CBAppClient.js +336 -0
- package/dist/cjs/CBAppClient.js.map +1 -0
- package/dist/cjs/CBCommerceClient.d.ts +110 -0
- package/dist/cjs/CBCommerceClient.js +105 -0
- package/dist/cjs/CBCommerceClient.js.map +1 -0
- package/dist/cjs/CBExchangeClient.d.ts +640 -0
- package/dist/cjs/CBExchangeClient.js +751 -0
- package/dist/cjs/CBExchangeClient.js.map +1 -0
- package/dist/cjs/CBInternationalClient.d.ts +381 -0
- package/dist/cjs/CBInternationalClient.js +437 -0
- package/dist/cjs/CBInternationalClient.js.map +1 -0
- package/dist/cjs/CBPrimeClient.d.ts +363 -0
- package/dist/cjs/CBPrimeClient.js +451 -0
- package/dist/cjs/CBPrimeClient.js.map +1 -0
- package/dist/cjs/WebsocketClient.d.ts +78 -0
- package/dist/cjs/WebsocketClient.js +534 -0
- package/dist/cjs/WebsocketClient.js.map +1 -0
- package/dist/cjs/index.d.ts +13 -0
- package/dist/cjs/index.js +30 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lib/BaseRestClient.d.ts +66 -0
- package/dist/cjs/lib/BaseRestClient.js +436 -0
- package/dist/cjs/lib/BaseRestClient.js.map +1 -0
- package/dist/cjs/lib/BaseWSClient.d.ts +169 -0
- package/dist/cjs/lib/BaseWSClient.js +638 -0
- package/dist/cjs/lib/BaseWSClient.js.map +1 -0
- package/dist/cjs/lib/jwtNode.d.ts +13 -0
- package/dist/cjs/lib/jwtNode.js +52 -0
- package/dist/cjs/lib/jwtNode.js.map +1 -0
- package/dist/cjs/lib/misc-util.d.ts +1 -0
- package/dist/cjs/lib/misc-util.js +7 -0
- package/dist/cjs/lib/misc-util.js.map +1 -0
- package/dist/cjs/lib/requestUtils.d.ts +98 -0
- package/dist/cjs/lib/requestUtils.js +75 -0
- package/dist/cjs/lib/requestUtils.js.map +1 -0
- package/dist/cjs/lib/webCryptoAPI.d.ts +10 -0
- package/dist/cjs/lib/webCryptoAPI.js +83 -0
- package/dist/cjs/lib/webCryptoAPI.js.map +1 -0
- package/dist/cjs/lib/websocket/WsStore.d.ts +63 -0
- package/dist/cjs/lib/websocket/WsStore.js +254 -0
- package/dist/cjs/lib/websocket/WsStore.js.map +1 -0
- package/dist/cjs/lib/websocket/WsStore.types.d.ts +49 -0
- package/dist/cjs/lib/websocket/WsStore.types.js +14 -0
- package/dist/cjs/lib/websocket/WsStore.types.js.map +1 -0
- package/dist/cjs/lib/websocket/logger.d.ts +6 -0
- package/dist/cjs/lib/websocket/logger.js +16 -0
- package/dist/cjs/lib/websocket/logger.js.map +1 -0
- package/dist/cjs/lib/websocket/typeGuards.d.ts +27 -0
- package/dist/cjs/lib/websocket/typeGuards.js +86 -0
- package/dist/cjs/lib/websocket/typeGuards.js.map +1 -0
- package/dist/cjs/lib/websocket/websocket-util.d.ts +120 -0
- package/dist/cjs/lib/websocket/websocket-util.js +173 -0
- package/dist/cjs/lib/websocket/websocket-util.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/types/request/advanced-trade-client.d.ts +194 -0
- package/dist/cjs/types/request/advanced-trade-client.js +18 -0
- package/dist/cjs/types/request/advanced-trade-client.js.map +1 -0
- package/dist/cjs/types/request/coinbase-app-client.d.ts +80 -0
- package/dist/cjs/types/request/coinbase-app-client.js +28 -0
- package/dist/cjs/types/request/coinbase-app-client.js.map +1 -0
- package/dist/cjs/types/request/coinbase-exchange.d.ts +332 -0
- package/dist/cjs/types/request/coinbase-exchange.js +3 -0
- package/dist/cjs/types/request/coinbase-exchange.js.map +1 -0
- package/dist/cjs/types/request/coinbase-international.d.ts +160 -0
- package/dist/cjs/types/request/coinbase-international.js +13 -0
- package/dist/cjs/types/request/coinbase-international.js.map +1 -0
- package/dist/cjs/types/request/coinbase-prime.d.ts +298 -0
- package/dist/cjs/types/request/coinbase-prime.js +8 -0
- package/dist/cjs/types/request/coinbase-prime.js.map +1 -0
- package/dist/cjs/types/response/advanced-trade-client.d.ts +759 -0
- package/dist/cjs/types/response/advanced-trade-client.js +8 -0
- package/dist/cjs/types/response/advanced-trade-client.js.map +1 -0
- package/dist/cjs/types/response/coinbase-app-client.d.ts +168 -0
- package/dist/cjs/types/response/coinbase-app-client.js +18 -0
- package/dist/cjs/types/response/coinbase-app-client.js.map +1 -0
- package/dist/cjs/types/response/coinbase-exchange.d.ts +80 -0
- package/dist/cjs/types/response/coinbase-exchange.js +82 -0
- package/dist/cjs/types/response/coinbase-exchange.js.map +1 -0
- package/dist/cjs/types/response/coinbase-international.d.ts +40 -0
- package/dist/cjs/types/response/coinbase-international.js +42 -0
- package/dist/cjs/types/response/coinbase-international.js.map +1 -0
- package/dist/cjs/types/response/coinbase-prime.d.ts +70 -0
- package/dist/cjs/types/response/coinbase-prime.js +72 -0
- package/dist/cjs/types/response/coinbase-prime.js.map +1 -0
- package/dist/cjs/types/response/ws.d.ts +7 -0
- package/dist/cjs/types/response/ws.js +3 -0
- package/dist/cjs/types/response/ws.js.map +1 -0
- package/dist/cjs/types/shared.types.d.ts +60 -0
- package/dist/cjs/types/shared.types.js +3 -0
- package/dist/cjs/types/shared.types.js.map +1 -0
- package/dist/cjs/types/websockets/client.d.ts +73 -0
- package/dist/cjs/types/websockets/client.js +3 -0
- package/dist/cjs/types/websockets/client.js.map +1 -0
- package/dist/cjs/types/websockets/events.d.ts +40 -0
- package/dist/cjs/types/websockets/events.js +3 -0
- package/dist/cjs/types/websockets/events.js.map +1 -0
- package/dist/cjs/types/websockets/requests.d.ts +76 -0
- package/dist/cjs/types/websockets/requests.js +3 -0
- package/dist/cjs/types/websockets/requests.js.map +1 -0
- package/dist/cjs/types/websockets/wsAPI.d.ts +9 -0
- package/dist/cjs/types/websockets/wsAPI.js +3 -0
- package/dist/cjs/types/websockets/wsAPI.js.map +1 -0
- package/dist/mjs/CBAdvancedTradeClient.d.ts +559 -0
- package/dist/mjs/CBAdvancedTradeClient.js +570 -0
- package/dist/mjs/CBAdvancedTradeClient.js.map +1 -0
- package/dist/mjs/CBAppClient.d.ts +359 -0
- package/dist/mjs/CBAppClient.js +332 -0
- package/dist/mjs/CBAppClient.js.map +1 -0
- package/dist/mjs/CBCommerceClient.d.ts +110 -0
- package/dist/mjs/CBCommerceClient.js +101 -0
- package/dist/mjs/CBCommerceClient.js.map +1 -0
- package/dist/mjs/CBExchangeClient.d.ts +640 -0
- package/dist/mjs/CBExchangeClient.js +747 -0
- package/dist/mjs/CBExchangeClient.js.map +1 -0
- package/dist/mjs/CBInternationalClient.d.ts +381 -0
- package/dist/mjs/CBInternationalClient.js +433 -0
- package/dist/mjs/CBInternationalClient.js.map +1 -0
- package/dist/mjs/CBPrimeClient.d.ts +363 -0
- package/dist/mjs/CBPrimeClient.js +447 -0
- package/dist/mjs/CBPrimeClient.js.map +1 -0
- package/dist/mjs/WebsocketClient.d.ts +78 -0
- package/dist/mjs/WebsocketClient.js +530 -0
- package/dist/mjs/WebsocketClient.js.map +1 -0
- package/dist/mjs/index.d.ts +13 -0
- package/dist/mjs/index.js +14 -0
- package/dist/mjs/index.js.map +1 -0
- package/dist/mjs/lib/BaseRestClient.d.ts +66 -0
- package/dist/mjs/lib/BaseRestClient.js +429 -0
- package/dist/mjs/lib/BaseRestClient.js.map +1 -0
- package/dist/mjs/lib/BaseWSClient.d.ts +169 -0
- package/dist/mjs/lib/BaseWSClient.js +631 -0
- package/dist/mjs/lib/BaseWSClient.js.map +1 -0
- package/dist/mjs/lib/jwtNode.d.ts +13 -0
- package/dist/mjs/lib/jwtNode.js +45 -0
- package/dist/mjs/lib/jwtNode.js.map +1 -0
- package/dist/mjs/lib/misc-util.d.ts +1 -0
- package/dist/mjs/lib/misc-util.js +4 -0
- package/dist/mjs/lib/misc-util.js.map +1 -0
- package/dist/mjs/lib/requestUtils.d.ts +98 -0
- package/dist/mjs/lib/requestUtils.js +69 -0
- package/dist/mjs/lib/requestUtils.js.map +1 -0
- package/dist/mjs/lib/webCryptoAPI.d.ts +10 -0
- package/dist/mjs/lib/webCryptoAPI.js +79 -0
- package/dist/mjs/lib/webCryptoAPI.js.map +1 -0
- package/dist/mjs/lib/websocket/WsStore.d.ts +63 -0
- package/dist/mjs/lib/websocket/WsStore.js +249 -0
- package/dist/mjs/lib/websocket/WsStore.js.map +1 -0
- package/dist/mjs/lib/websocket/WsStore.types.d.ts +49 -0
- package/dist/mjs/lib/websocket/WsStore.types.js +11 -0
- package/dist/mjs/lib/websocket/WsStore.types.js.map +1 -0
- package/dist/mjs/lib/websocket/logger.d.ts +6 -0
- package/dist/mjs/lib/websocket/logger.js +13 -0
- package/dist/mjs/lib/websocket/logger.js.map +1 -0
- package/dist/mjs/lib/websocket/typeGuards.d.ts +27 -0
- package/dist/mjs/lib/websocket/typeGuards.js +78 -0
- package/dist/mjs/lib/websocket/typeGuards.js.map +1 -0
- package/dist/mjs/lib/websocket/websocket-util.d.ts +120 -0
- package/dist/mjs/lib/websocket/websocket-util.js +164 -0
- package/dist/mjs/lib/websocket/websocket-util.js.map +1 -0
- package/dist/mjs/package.json +3 -0
- package/dist/mjs/types/request/advanced-trade-client.d.ts +194 -0
- package/dist/mjs/types/request/advanced-trade-client.js +17 -0
- package/dist/mjs/types/request/advanced-trade-client.js.map +1 -0
- package/dist/mjs/types/request/coinbase-app-client.d.ts +80 -0
- package/dist/mjs/types/request/coinbase-app-client.js +27 -0
- package/dist/mjs/types/request/coinbase-app-client.js.map +1 -0
- package/dist/mjs/types/request/coinbase-exchange.d.ts +332 -0
- package/dist/mjs/types/request/coinbase-exchange.js +2 -0
- package/dist/mjs/types/request/coinbase-exchange.js.map +1 -0
- package/dist/mjs/types/request/coinbase-international.d.ts +160 -0
- package/dist/mjs/types/request/coinbase-international.js +12 -0
- package/dist/mjs/types/request/coinbase-international.js.map +1 -0
- package/dist/mjs/types/request/coinbase-prime.d.ts +298 -0
- package/dist/mjs/types/request/coinbase-prime.js +7 -0
- package/dist/mjs/types/request/coinbase-prime.js.map +1 -0
- package/dist/mjs/types/response/advanced-trade-client.d.ts +759 -0
- package/dist/mjs/types/response/advanced-trade-client.js +7 -0
- package/dist/mjs/types/response/advanced-trade-client.js.map +1 -0
- package/dist/mjs/types/response/coinbase-app-client.d.ts +168 -0
- package/dist/mjs/types/response/coinbase-app-client.js +17 -0
- package/dist/mjs/types/response/coinbase-app-client.js.map +1 -0
- package/dist/mjs/types/response/coinbase-exchange.d.ts +80 -0
- package/dist/mjs/types/response/coinbase-exchange.js +82 -0
- package/dist/mjs/types/response/coinbase-exchange.js.map +1 -0
- package/dist/mjs/types/response/coinbase-international.d.ts +40 -0
- package/dist/mjs/types/response/coinbase-international.js +42 -0
- package/dist/mjs/types/response/coinbase-international.js.map +1 -0
- package/dist/mjs/types/response/coinbase-prime.d.ts +70 -0
- package/dist/mjs/types/response/coinbase-prime.js +72 -0
- package/dist/mjs/types/response/coinbase-prime.js.map +1 -0
- package/dist/mjs/types/response/ws.d.ts +7 -0
- package/dist/mjs/types/response/ws.js +2 -0
- package/dist/mjs/types/response/ws.js.map +1 -0
- package/dist/mjs/types/shared.types.d.ts +60 -0
- package/dist/mjs/types/shared.types.js +2 -0
- package/dist/mjs/types/shared.types.js.map +1 -0
- package/dist/mjs/types/websockets/client.d.ts +73 -0
- package/dist/mjs/types/websockets/client.js +2 -0
- package/dist/mjs/types/websockets/client.js.map +1 -0
- package/dist/mjs/types/websockets/events.d.ts +40 -0
- package/dist/mjs/types/websockets/events.js +2 -0
- package/dist/mjs/types/websockets/events.js.map +1 -0
- package/dist/mjs/types/websockets/requests.d.ts +76 -0
- package/dist/mjs/types/websockets/requests.js +2 -0
- package/dist/mjs/types/websockets/requests.js.map +1 -0
- package/dist/mjs/types/websockets/wsAPI.d.ts +9 -0
- package/dist/mjs/types/websockets/wsAPI.js +2 -0
- package/dist/mjs/types/websockets/wsAPI.js.map +1 -0
- package/package.json +42 -30
- package/index.js +0 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -16
- package/lib/index.js.map +0 -1
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface JWTSignParams {
|
|
2
|
+
algorithm: 'ES256';
|
|
3
|
+
timestampMs: number;
|
|
4
|
+
jwtExpiresSeconds: number;
|
|
5
|
+
apiPubKey: string;
|
|
6
|
+
apiPrivKey: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function signJWT(params: {
|
|
9
|
+
url: string;
|
|
10
|
+
method: string;
|
|
11
|
+
} & JWTSignParams): string;
|
|
12
|
+
export declare function signWSJWT(params: JWTSignParams): string;
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,52 @@
|
|
|
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.signJWT = signJWT;
|
|
7
|
+
exports.signWSJWT = signWSJWT;
|
|
8
|
+
const jsonwebtoken_1 = __importDefault(require("jsonwebtoken"));
|
|
9
|
+
const nanoid_1 = require("nanoid");
|
|
10
|
+
function signJWT(params) {
|
|
11
|
+
const { url, method, algorithm, timestampMs, jwtExpiresSeconds, apiPrivKey, apiPubKey, } = params;
|
|
12
|
+
// Remove https:// but keep the rest
|
|
13
|
+
const urlWithEndpoint = url.slice(8);
|
|
14
|
+
const uri = `${method} ${urlWithEndpoint}`;
|
|
15
|
+
const payload = {
|
|
16
|
+
iss: 'cdp',
|
|
17
|
+
nbf: Math.floor(timestampMs / 1000),
|
|
18
|
+
exp: Math.floor(timestampMs / 1000) + jwtExpiresSeconds,
|
|
19
|
+
sub: apiPubKey,
|
|
20
|
+
uri,
|
|
21
|
+
};
|
|
22
|
+
const header = {
|
|
23
|
+
alg: algorithm,
|
|
24
|
+
kid: apiPubKey,
|
|
25
|
+
nonce: (0, nanoid_1.nanoid)(16),
|
|
26
|
+
};
|
|
27
|
+
const options = {
|
|
28
|
+
algorithm: algorithm,
|
|
29
|
+
header: header,
|
|
30
|
+
};
|
|
31
|
+
return jsonwebtoken_1.default.sign(payload, apiPrivKey, options);
|
|
32
|
+
}
|
|
33
|
+
function signWSJWT(params) {
|
|
34
|
+
const { algorithm, timestampMs, jwtExpiresSeconds, apiPrivKey, apiPubKey } = params;
|
|
35
|
+
const payload = {
|
|
36
|
+
iss: 'cdp',
|
|
37
|
+
nbf: Math.floor(timestampMs / 1000),
|
|
38
|
+
exp: Math.floor(timestampMs / 1000) + jwtExpiresSeconds,
|
|
39
|
+
sub: apiPubKey,
|
|
40
|
+
};
|
|
41
|
+
const header = {
|
|
42
|
+
alg: algorithm,
|
|
43
|
+
kid: apiPubKey,
|
|
44
|
+
nonce: (0, nanoid_1.nanoid)(16),
|
|
45
|
+
};
|
|
46
|
+
const options = {
|
|
47
|
+
algorithm: algorithm,
|
|
48
|
+
header: header,
|
|
49
|
+
};
|
|
50
|
+
return jsonwebtoken_1.default.sign(payload, apiPrivKey, options);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=jwtNode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwtNode.js","sourceRoot":"","sources":["../../../src/lib/jwtNode.ts"],"names":[],"mappings":";;;;;AAWA,0BAwCC;AAED,8BAsBC;AA3ED,gEAA+B;AAC/B,mCAAgC;AAUhC,SAAgB,OAAO,CACrB,MAGiB;IAEjB,MAAM,EACJ,GAAG,EACH,MAAM,EACN,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,SAAS,GACV,GAAG,MAAM,CAAC;IAEX,oCAAoC;IACpC,MAAM,eAAe,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,eAAe,EAAE,CAAC;IAE3C,MAAM,OAAO,GAAG;QACd,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QACnC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,iBAAiB;QACvD,GAAG,EAAE,SAAS;QACd,GAAG;KACJ,CAAC;IAEF,MAAM,MAAM,GAAG;QACb,GAAG,EAAE,SAAS;QACd,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,IAAA,eAAM,EAAC,EAAE,CAAC;KAClB,CAAC;IAEF,MAAM,OAAO,GAAoB;QAC/B,SAAS,EAAE,SAA0B;QACrC,MAAM,EAAE,MAAM;KACf,CAAC;IAEF,OAAO,sBAAG,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED,SAAgB,SAAS,CAAC,MAAqB;IAC7C,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,GACxE,MAAM,CAAC;IACT,MAAM,OAAO,GAAG;QACd,GAAG,EAAE,KAAK;QACV,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QACnC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,iBAAiB;QACvD,GAAG,EAAE,SAAS;KACf,CAAC;IAEF,MAAM,MAAM,GAAG;QACb,GAAG,EAAE,SAAS;QACd,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,IAAA,eAAM,EAAC,EAAE,CAAC;KAClB,CAAC;IAEF,MAAM,OAAO,GAAoB;QAC/B,SAAS,EAAE,SAA0B;QACrC,MAAM,EAAE,MAAM;KACf,CAAC;IAEF,OAAO,sBAAG,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function neverGuard(x: never, msg: string): Error;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"misc-util.js","sourceRoot":"","sources":["../../../src/lib/misc-util.ts"],"names":[],"mappings":";;AAAA,gCAEC;AAFD,SAAgB,UAAU,CAAC,CAAQ,EAAE,GAAW;IAC9C,OAAO,IAAI,KAAK,CAAC,8BAA8B,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { CustomOrderIdProperty } from '../types/shared.types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Used to switch how authentication/requests work under the hood
|
|
4
|
+
*/
|
|
5
|
+
export declare const REST_CLIENT_TYPE_ENUM: {
|
|
6
|
+
/** Coinbase Advanced Trade API */
|
|
7
|
+
readonly advancedTrade: "advancedTrade";
|
|
8
|
+
/** Coinbase App API */
|
|
9
|
+
readonly coinbaseApp: "coinbaseApp";
|
|
10
|
+
/** Coinbase Exchange API */
|
|
11
|
+
readonly exchange: "exchange";
|
|
12
|
+
/** Coinbase Prime API */
|
|
13
|
+
readonly prime: "prime";
|
|
14
|
+
/** Coinbase International API */
|
|
15
|
+
readonly international: "international";
|
|
16
|
+
/** Coinbase Commerce API */
|
|
17
|
+
readonly commerce: "commerce";
|
|
18
|
+
};
|
|
19
|
+
export type RestClientType = (typeof REST_CLIENT_TYPE_ENUM)[keyof typeof REST_CLIENT_TYPE_ENUM];
|
|
20
|
+
export interface RestClientOptions {
|
|
21
|
+
/**
|
|
22
|
+
* Your API key name.
|
|
23
|
+
*
|
|
24
|
+
* - For the Advanced Trade or App APIs, this is your API Key Name.
|
|
25
|
+
*/
|
|
26
|
+
apiKey?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Your API key secret.
|
|
29
|
+
*
|
|
30
|
+
* - For the Advanced Trade or App APIs, this is your API private key (including the -----BEGIN EC PRIVATE KEY-----\n etc).
|
|
31
|
+
*/
|
|
32
|
+
apiSecret?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Your API passphrase (NOT your account password). Only used for the API groups that use an API passphrase:
|
|
35
|
+
* - Coinbase Exchange API
|
|
36
|
+
* - Coinbase International API
|
|
37
|
+
* - Coinbase Prime API
|
|
38
|
+
*/
|
|
39
|
+
apiPassphrase?: string;
|
|
40
|
+
/**
|
|
41
|
+
* For the Advanced Trade or App APIs, instead of passing the key name and
|
|
42
|
+
* private key, you can also parse the exported "cdp_api_key.json" into an object and pass it here.
|
|
43
|
+
*
|
|
44
|
+
* It will automatically get parsed into the apiKey & apiSecret configuration parameters.
|
|
45
|
+
*/
|
|
46
|
+
cdpApiKey?: {
|
|
47
|
+
name: string;
|
|
48
|
+
privateKey: string;
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* https://docs.cdp.coinbase.com/coinbase-app/docs/localization
|
|
52
|
+
*
|
|
53
|
+
* The Coinbase App API supports localization for error messages and other strings.
|
|
54
|
+
* Localization is defined in each request with Accept-Language header.
|
|
55
|
+
*
|
|
56
|
+
* Accepted values are currently as below. Note: this may not work for all coinbase product groups.
|
|
57
|
+
*/
|
|
58
|
+
localisation?: 'de' | 'en' | 'es' | 'es-mx' | 'fr' | 'id' | 'it' | 'nl' | 'pt' | 'pt-br';
|
|
59
|
+
/**
|
|
60
|
+
* Connect to the sandbox for supported products
|
|
61
|
+
*
|
|
62
|
+
* - Coinbase Exchange: https://docs.cdp.coinbase.com/exchange/docs/sandbox
|
|
63
|
+
* - Coinbase International: https://docs.cdp.coinbase.com/intx/docs/sandbox
|
|
64
|
+
*
|
|
65
|
+
* - Coinbase App: No sandbox available.
|
|
66
|
+
* - Coinbase Advanced Trade: No sandbox available.
|
|
67
|
+
* - Coinbase Prime: No sandbox available.
|
|
68
|
+
*/
|
|
69
|
+
useSandbox?: boolean;
|
|
70
|
+
/**
|
|
71
|
+
* Enable keep alive for REST API requests (via axios).
|
|
72
|
+
* See: https://github.com/tiagosiebler/bybit-api/issues/368
|
|
73
|
+
*/
|
|
74
|
+
keepAlive?: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* When using HTTP KeepAlive, how often to send TCP KeepAlive packets over sockets being kept alive. Default = 1000.
|
|
77
|
+
* Only relevant if keepAlive is set to true.
|
|
78
|
+
* Default: 1000 (defaults comes from https agent)
|
|
79
|
+
*/
|
|
80
|
+
keepAliveMsecs?: number;
|
|
81
|
+
/**
|
|
82
|
+
* For JWT auth (adv trade & app API), seconds until jwt expires. Defaults to 120 seconds.
|
|
83
|
+
*/
|
|
84
|
+
jwtExpiresSeconds?: number;
|
|
85
|
+
/** Default: false. If true, we'll throw errors if any params are undefined */
|
|
86
|
+
strictParamValidation?: boolean;
|
|
87
|
+
/**
|
|
88
|
+
* Optionally override API protocol + domain
|
|
89
|
+
* e.g baseUrl: 'https://api.differentUrl.com'
|
|
90
|
+
**/
|
|
91
|
+
baseUrl?: string;
|
|
92
|
+
/** Default: true. whether to try and post-process request exceptions (and throw them). */
|
|
93
|
+
parseExceptions?: boolean;
|
|
94
|
+
}
|
|
95
|
+
export declare function serializeParams<T extends Record<string, any> | undefined = {}>(params: T, strict_validation: boolean | undefined, encodeValues: boolean, prefixWith: string): string;
|
|
96
|
+
export declare const APIIDPrefix = "cbnode";
|
|
97
|
+
export declare function logInvalidOrderId(orderIdProperty: CustomOrderIdProperty, expectedOrderIdPrefix: string, params: unknown): void;
|
|
98
|
+
export declare function getRestBaseUrl(restClientOptions: RestClientOptions, restClientType: RestClientType): string;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.APIIDPrefix = exports.REST_CLIENT_TYPE_ENUM = void 0;
|
|
4
|
+
exports.serializeParams = serializeParams;
|
|
5
|
+
exports.logInvalidOrderId = logInvalidOrderId;
|
|
6
|
+
exports.getRestBaseUrl = getRestBaseUrl;
|
|
7
|
+
/**
|
|
8
|
+
* Used to switch how authentication/requests work under the hood
|
|
9
|
+
*/
|
|
10
|
+
exports.REST_CLIENT_TYPE_ENUM = {
|
|
11
|
+
/** Coinbase Advanced Trade API */
|
|
12
|
+
advancedTrade: 'advancedTrade',
|
|
13
|
+
/** Coinbase App API */
|
|
14
|
+
coinbaseApp: 'coinbaseApp',
|
|
15
|
+
/** Coinbase Exchange API */
|
|
16
|
+
exchange: 'exchange',
|
|
17
|
+
/** Coinbase Prime API */
|
|
18
|
+
prime: 'prime',
|
|
19
|
+
/** Coinbase International API */
|
|
20
|
+
international: 'international',
|
|
21
|
+
/** Coinbase Commerce API */
|
|
22
|
+
commerce: 'commerce',
|
|
23
|
+
};
|
|
24
|
+
const exchangeBaseURLMap = {
|
|
25
|
+
[exports.REST_CLIENT_TYPE_ENUM.advancedTrade]: 'https://api.coinbase.com',
|
|
26
|
+
[exports.REST_CLIENT_TYPE_ENUM.coinbaseApp]: 'https://api.coinbase.com',
|
|
27
|
+
[exports.REST_CLIENT_TYPE_ENUM.exchange]: 'https://api.exchange.coinbase.com',
|
|
28
|
+
[exports.REST_CLIENT_TYPE_ENUM.prime]: 'https://api.prime.coinbase.com',
|
|
29
|
+
[exports.REST_CLIENT_TYPE_ENUM.international]: 'https://api.international.coinbase.com',
|
|
30
|
+
[exports.REST_CLIENT_TYPE_ENUM.commerce]: 'https://api.commerce.coinbase.com',
|
|
31
|
+
};
|
|
32
|
+
const exchangeSandboxURLMap = {
|
|
33
|
+
[exports.REST_CLIENT_TYPE_ENUM.exchange]: 'https://api-public.sandbox.exchange.coinbase.com',
|
|
34
|
+
[exports.REST_CLIENT_TYPE_ENUM.international]: 'https://api-n5e1.coinbase.com',
|
|
35
|
+
[exports.REST_CLIENT_TYPE_ENUM.advancedTrade]: 'NoSandboxAvailable',
|
|
36
|
+
[exports.REST_CLIENT_TYPE_ENUM.coinbaseApp]: 'NoSandboxAvailable',
|
|
37
|
+
[exports.REST_CLIENT_TYPE_ENUM.prime]: 'NoSandboxAvailable',
|
|
38
|
+
[exports.REST_CLIENT_TYPE_ENUM.commerce]: 'NoSandboxAvailable',
|
|
39
|
+
};
|
|
40
|
+
function serializeParams(params, strict_validation, encodeValues, prefixWith) {
|
|
41
|
+
if (!params) {
|
|
42
|
+
return '';
|
|
43
|
+
}
|
|
44
|
+
const queryString = Object.keys(params)
|
|
45
|
+
.sort()
|
|
46
|
+
.map((key) => {
|
|
47
|
+
const value = params[key];
|
|
48
|
+
if (strict_validation === true && typeof value === 'undefined') {
|
|
49
|
+
throw new Error('Failed to sign API request due to undefined parameter');
|
|
50
|
+
}
|
|
51
|
+
const encodedValue = encodeValues ? encodeURIComponent(value) : value;
|
|
52
|
+
return `${key}=${encodedValue}`;
|
|
53
|
+
})
|
|
54
|
+
.join('&');
|
|
55
|
+
// Only prefix if there's a value
|
|
56
|
+
return queryString ? prefixWith + queryString : queryString;
|
|
57
|
+
}
|
|
58
|
+
exports.APIIDPrefix = 'cbnode';
|
|
59
|
+
function logInvalidOrderId(orderIdProperty, expectedOrderIdPrefix, params) {
|
|
60
|
+
console.error(`'${orderIdProperty}' must be prefixed with ${expectedOrderIdPrefix}. Use the 'client.generateNewOrderId()' REST client utility method to generate a fresh order ID on demand. Original request: ${JSON.stringify(params)}`);
|
|
61
|
+
}
|
|
62
|
+
function getRestBaseUrl(restClientOptions, restClientType) {
|
|
63
|
+
const exchangeBaseUrls = {
|
|
64
|
+
livenet: exchangeBaseURLMap[restClientType],
|
|
65
|
+
testnet: exchangeSandboxURLMap[restClientType],
|
|
66
|
+
};
|
|
67
|
+
if (restClientOptions.baseUrl) {
|
|
68
|
+
return restClientOptions.baseUrl;
|
|
69
|
+
}
|
|
70
|
+
if (restClientOptions.useSandbox === true) {
|
|
71
|
+
return exchangeBaseUrls.testnet;
|
|
72
|
+
}
|
|
73
|
+
return exchangeBaseUrls.livenet;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=requestUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestUtils.js","sourceRoot":"","sources":["../../../src/lib/requestUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type SignEncodeMethod = 'hex' | 'base64';
|
|
2
|
+
export type SignAlgorithm = 'SHA-256' | 'SHA-512';
|
|
3
|
+
/**
|
|
4
|
+
* Similar to node crypto's `createHash()` function
|
|
5
|
+
*/
|
|
6
|
+
export declare function hashMessage(message: string, method: SignEncodeMethod, algorithm: SignAlgorithm): Promise<string>;
|
|
7
|
+
/**
|
|
8
|
+
* Sign a message, with a secret, using the Web Crypto API
|
|
9
|
+
*/
|
|
10
|
+
export declare function signMessage(message: string, secret: string, method: SignEncodeMethod, algorithm: SignAlgorithm, secretEncodeMethod: 'base64:web' | 'utf'): Promise<string>;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hashMessage = hashMessage;
|
|
4
|
+
exports.signMessage = signMessage;
|
|
5
|
+
const misc_util_js_1 = require("./misc-util.js");
|
|
6
|
+
function bufferToB64(buffer) {
|
|
7
|
+
let binary = '';
|
|
8
|
+
const bytes = new Uint8Array(buffer);
|
|
9
|
+
const len = bytes.byteLength;
|
|
10
|
+
for (let i = 0; i < len; i++) {
|
|
11
|
+
binary += String.fromCharCode(bytes[i]);
|
|
12
|
+
}
|
|
13
|
+
return globalThis.btoa(binary);
|
|
14
|
+
}
|
|
15
|
+
function b64StringToBuffer(input) {
|
|
16
|
+
const binaryString = atob(input); // Decode base64 string
|
|
17
|
+
const buffer = new Uint8Array(binaryString.length);
|
|
18
|
+
// Convert binary string to a Uint8Array
|
|
19
|
+
for (let i = 0; i < binaryString.length; i++) {
|
|
20
|
+
buffer[i] = binaryString.charCodeAt(i);
|
|
21
|
+
}
|
|
22
|
+
return buffer;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Similar to node crypto's `createHash()` function
|
|
26
|
+
*/
|
|
27
|
+
async function hashMessage(message, method, algorithm) {
|
|
28
|
+
const encoder = new TextEncoder();
|
|
29
|
+
const buffer = await globalThis.crypto.subtle.digest(algorithm, encoder.encode(message));
|
|
30
|
+
switch (method) {
|
|
31
|
+
case 'hex': {
|
|
32
|
+
return Array.from(new Uint8Array(buffer))
|
|
33
|
+
.map((byte) => byte.toString(16).padStart(2, '0'))
|
|
34
|
+
.join('');
|
|
35
|
+
}
|
|
36
|
+
case 'base64': {
|
|
37
|
+
return bufferToB64(buffer);
|
|
38
|
+
}
|
|
39
|
+
default: {
|
|
40
|
+
throw (0, misc_util_js_1.neverGuard)(method, `Unhandled sign method: "${method}"`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Sign a message, with a secret, using the Web Crypto API
|
|
46
|
+
*/
|
|
47
|
+
async function signMessage(message, secret, method, algorithm, secretEncodeMethod) {
|
|
48
|
+
const encoder = new TextEncoder();
|
|
49
|
+
let encodedSecret;
|
|
50
|
+
switch (secretEncodeMethod) {
|
|
51
|
+
// case 'base64:node': {
|
|
52
|
+
// encodedSecret = Buffer.from(secret, 'base64');
|
|
53
|
+
// break;
|
|
54
|
+
// }
|
|
55
|
+
case 'base64:web': {
|
|
56
|
+
encodedSecret = b64StringToBuffer(secret);
|
|
57
|
+
break;
|
|
58
|
+
}
|
|
59
|
+
case 'utf': {
|
|
60
|
+
encodedSecret = encoder.encode(secret);
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
default: {
|
|
64
|
+
throw new Error(`Unhandled encoding: "${secretEncodeMethod}"`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
const key = await globalThis.crypto.subtle.importKey('raw', encodedSecret, { name: 'HMAC', hash: algorithm }, false, ['sign']);
|
|
68
|
+
const buffer = await globalThis.crypto.subtle.sign('HMAC', key, encoder.encode(message));
|
|
69
|
+
switch (method) {
|
|
70
|
+
case 'hex': {
|
|
71
|
+
return Array.from(new Uint8Array(buffer))
|
|
72
|
+
.map((byte) => byte.toString(16).padStart(2, '0'))
|
|
73
|
+
.join('');
|
|
74
|
+
}
|
|
75
|
+
case 'base64': {
|
|
76
|
+
return bufferToB64(buffer);
|
|
77
|
+
}
|
|
78
|
+
default: {
|
|
79
|
+
throw (0, misc_util_js_1.neverGuard)(method, `Unhandled sign method: "${method}"`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=webCryptoAPI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webCryptoAPI.js","sourceRoot":"","sources":["../../../src/lib/webCryptoAPI.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import WebSocket from 'isomorphic-ws';
|
|
2
|
+
import { DefaultLogger } from './logger.js';
|
|
3
|
+
import { DeferredPromise, WSConnectedResult, WsConnectionStateEnum, WsStoredState } from './WsStore.types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Simple comparison of two objects, only checks 1-level deep (nested objects won't match)
|
|
6
|
+
*/
|
|
7
|
+
export declare function isDeepObjectMatch(object1: unknown, object2: unknown): boolean;
|
|
8
|
+
declare const DEFERRED_PROMISE_REF: {
|
|
9
|
+
readonly CONNECTION_IN_PROGRESS: "CONNECTION_IN_PROGRESS";
|
|
10
|
+
};
|
|
11
|
+
type DeferredPromiseRef = (typeof DEFERRED_PROMISE_REF)[keyof typeof DEFERRED_PROMISE_REF];
|
|
12
|
+
export declare class WsStore<WsKey extends string, TWSTopicSubscribeEventArgs extends string | object> {
|
|
13
|
+
private wsState;
|
|
14
|
+
private logger;
|
|
15
|
+
constructor(logger: typeof DefaultLogger);
|
|
16
|
+
/** Get WS stored state for key, optionally create if missing */
|
|
17
|
+
get(key: WsKey, createIfMissing?: true): WsStoredState<TWSTopicSubscribeEventArgs>;
|
|
18
|
+
get(key: WsKey, createIfMissing?: false): WsStoredState<TWSTopicSubscribeEventArgs> | undefined;
|
|
19
|
+
getKeys(): WsKey[];
|
|
20
|
+
create(key: WsKey): WsStoredState<TWSTopicSubscribeEventArgs> | undefined;
|
|
21
|
+
delete(key: WsKey): void;
|
|
22
|
+
hasExistingActiveConnection(key: WsKey): boolean;
|
|
23
|
+
getWs(key: WsKey): WebSocket | undefined;
|
|
24
|
+
setWs(key: WsKey, wsConnection: WebSocket): WebSocket;
|
|
25
|
+
getDeferredPromise<TSuccessResult = any>(wsKey: WsKey, promiseRef: string | DeferredPromiseRef): DeferredPromise<TSuccessResult> | undefined;
|
|
26
|
+
createDeferredPromise<TSuccessResult = any>(wsKey: WsKey, promiseRef: string | DeferredPromiseRef, throwIfExists: boolean): DeferredPromise<TSuccessResult>;
|
|
27
|
+
resolveDeferredPromise(wsKey: WsKey, promiseRef: string | DeferredPromiseRef, value: unknown, removeAfter: boolean): void;
|
|
28
|
+
rejectDeferredPromise(wsKey: WsKey, promiseRef: string | DeferredPromiseRef, value: unknown, removeAfter: boolean): void;
|
|
29
|
+
removeDeferredPromise(wsKey: WsKey, promiseRef: string | DeferredPromiseRef): void;
|
|
30
|
+
rejectAllDeferredPromises(wsKey: WsKey, reason: string): void;
|
|
31
|
+
/** Get promise designed to track a connection attempt in progress. Resolves once connected. */
|
|
32
|
+
getConnectionInProgressPromise(wsKey: WsKey): DeferredPromise<WSConnectedResult> | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* Create a deferred promise designed to track a connection attempt in progress.
|
|
35
|
+
*
|
|
36
|
+
* Will throw if existing promise is found.
|
|
37
|
+
*/
|
|
38
|
+
createConnectionInProgressPromise(wsKey: WsKey, throwIfExists: boolean): DeferredPromise<WSConnectedResult>;
|
|
39
|
+
/** Remove promise designed to track a connection attempt in progress */
|
|
40
|
+
removeConnectingInProgressPromise(wsKey: WsKey): void;
|
|
41
|
+
isWsOpen(key: WsKey): boolean;
|
|
42
|
+
getConnectionState(key: WsKey): WsConnectionStateEnum;
|
|
43
|
+
setConnectionState(key: WsKey, state: WsConnectionStateEnum): void;
|
|
44
|
+
isConnectionState(key: WsKey, state: WsConnectionStateEnum): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Check if we're currently in the process of opening a connection for any reason. Safer than only checking "CONNECTING" as the state
|
|
47
|
+
* @param key
|
|
48
|
+
* @returns
|
|
49
|
+
*/
|
|
50
|
+
isConnectionAttemptInProgress(key: WsKey): boolean;
|
|
51
|
+
getTopics(key: WsKey): Set<TWSTopicSubscribeEventArgs>;
|
|
52
|
+
getTopicsByKey(): Record<string, Set<TWSTopicSubscribeEventArgs>>;
|
|
53
|
+
/**
|
|
54
|
+
* Find matching "topic" request from the store
|
|
55
|
+
* @param key
|
|
56
|
+
* @param topic
|
|
57
|
+
* @returns
|
|
58
|
+
*/
|
|
59
|
+
getMatchingTopic(key: WsKey, topic: TWSTopicSubscribeEventArgs): TWSTopicSubscribeEventArgs | undefined;
|
|
60
|
+
addTopic(key: WsKey, topic: TWSTopicSubscribeEventArgs): Set<TWSTopicSubscribeEventArgs>;
|
|
61
|
+
deleteTopic(key: WsKey, topic: TWSTopicSubscribeEventArgs): Set<TWSTopicSubscribeEventArgs>;
|
|
62
|
+
}
|
|
63
|
+
export {};
|