coinbase-api 0.3.2 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 @@
|
|
|
1
|
+
{"version":3,"file":"WsStore.js","sourceRoot":"","sources":["../../../../src/lib/websocket/WsStore.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import WebSocket from 'isomorphic-ws';
|
|
2
|
+
export declare enum WsConnectionStateEnum {
|
|
3
|
+
INITIAL = 0,
|
|
4
|
+
CONNECTING = 1,
|
|
5
|
+
CONNECTED = 2,
|
|
6
|
+
CLOSING = 3,
|
|
7
|
+
RECONNECTING = 4,
|
|
8
|
+
ERROR_RECONNECTING = 5
|
|
9
|
+
}
|
|
10
|
+
export interface DeferredPromise<TSuccess = any, TError = any> {
|
|
11
|
+
resolve?: (value: TSuccess) => TSuccess;
|
|
12
|
+
reject?: (value: TError) => TError;
|
|
13
|
+
promise?: Promise<TSuccess>;
|
|
14
|
+
}
|
|
15
|
+
export interface WSConnectedResult {
|
|
16
|
+
wsKey: string;
|
|
17
|
+
}
|
|
18
|
+
export interface WsStoredState<TWSTopicSubscribeEvent extends string | object> {
|
|
19
|
+
/** The currently active websocket connection */
|
|
20
|
+
ws?: WebSocket;
|
|
21
|
+
/** The current lifecycle state of the connection (enum) */
|
|
22
|
+
connectionState?: WsConnectionStateEnum;
|
|
23
|
+
/** A timer that will send an upstream heartbeat (ping) when it expires */
|
|
24
|
+
activePingTimer?: ReturnType<typeof setTimeout> | undefined;
|
|
25
|
+
/** A timer tracking that an upstream heartbeat was sent, expecting a reply before it expires */
|
|
26
|
+
activePongTimer?: ReturnType<typeof setTimeout> | undefined;
|
|
27
|
+
/** If a reconnection is in progress, this will have the timer for the delayed reconnect */
|
|
28
|
+
activeReconnectTimer?: ReturnType<typeof setTimeout> | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* When a connection attempt is in progress (even for reconnect), a promise is stored here.
|
|
31
|
+
*
|
|
32
|
+
* This promise will resolve once connected (and will then get removed);
|
|
33
|
+
*/
|
|
34
|
+
deferredPromiseStore: Record<string, DeferredPromise>;
|
|
35
|
+
/**
|
|
36
|
+
* All the topics we are expected to be subscribed to on this connection (and we automatically resubscribe to if the connection drops)
|
|
37
|
+
*
|
|
38
|
+
* A "Set" and a deep-object-match are used to ensure we only subscribe to a topic once (tracking a list of unique topics we're expected to be connected to)
|
|
39
|
+
*/
|
|
40
|
+
subscribedTopics: Set<TWSTopicSubscribeEvent>;
|
|
41
|
+
/** Whether this connection is ready for events (welcome message received after connection) */
|
|
42
|
+
isReadyForEvents?: boolean;
|
|
43
|
+
/** Whether this connection has completed authentication (only applies to private connections) */
|
|
44
|
+
isAuthenticated?: boolean;
|
|
45
|
+
/** Whether this connection has completed authentication before for the Websocket API, so it knows to automatically reauth if reconnected */
|
|
46
|
+
didAuthWSAPI?: boolean;
|
|
47
|
+
/** To reauthenticate on the WS API, which channel do we send to? */
|
|
48
|
+
WSAPIAuthChannel?: string;
|
|
49
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export var WsConnectionStateEnum;
|
|
2
|
+
(function (WsConnectionStateEnum) {
|
|
3
|
+
WsConnectionStateEnum[WsConnectionStateEnum["INITIAL"] = 0] = "INITIAL";
|
|
4
|
+
WsConnectionStateEnum[WsConnectionStateEnum["CONNECTING"] = 1] = "CONNECTING";
|
|
5
|
+
WsConnectionStateEnum[WsConnectionStateEnum["CONNECTED"] = 2] = "CONNECTED";
|
|
6
|
+
WsConnectionStateEnum[WsConnectionStateEnum["CLOSING"] = 3] = "CLOSING";
|
|
7
|
+
WsConnectionStateEnum[WsConnectionStateEnum["RECONNECTING"] = 4] = "RECONNECTING";
|
|
8
|
+
WsConnectionStateEnum[WsConnectionStateEnum["ERROR_RECONNECTING"] = 5] = "ERROR_RECONNECTING";
|
|
9
|
+
// ERROR = 5,
|
|
10
|
+
})(WsConnectionStateEnum || (WsConnectionStateEnum = {}));
|
|
11
|
+
//# sourceMappingURL=WsStore.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WsStore.types.js","sourceRoot":"","sources":["../../../../src/lib/websocket/WsStore.types.ts"],"names":[],"mappings":"AAEA,MAAM,CAAN,IAAY,qBAQX;AARD,WAAY,qBAAqB;IAC/B,uEAAW,CAAA;IACX,6EAAc,CAAA;IACd,2EAAa,CAAA;IACb,uEAAW,CAAA;IACX,iFAAgB,CAAA;IAChB,6FAAsB,CAAA;IACtB,aAAa;AACf,CAAC,EARW,qBAAqB,KAArB,qBAAqB,QAQhC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const DefaultLogger = {
|
|
2
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
3
|
+
trace: (..._params) => {
|
|
4
|
+
// console.log(_params);
|
|
5
|
+
},
|
|
6
|
+
info: (...params) => {
|
|
7
|
+
console.info(params);
|
|
8
|
+
},
|
|
9
|
+
error: (...params) => {
|
|
10
|
+
console.error(params);
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../src/lib/websocket/logger.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,6DAA6D;IAC7D,KAAK,EAAE,CAAC,GAAG,OAAkB,EAAQ,EAAE;QACrC,wBAAwB;IAC1B,CAAC;IACD,IAAI,EAAE,CAAC,GAAG,MAAiB,EAAQ,EAAE;QACnC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IACD,KAAK,EAAE,CAAC,GAAG,MAAiB,EAAQ,EAAE;QACpC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { CBAdvancedTradeErrorEvent, CBAdvancedTradeEvent, CBExchangeBaseEvent } from '../../types/websockets/events.js';
|
|
2
|
+
import { WsExchangeRequestOperation, WsInternationalRequestOperation, WsPrimeRequestOperation } from '../../types/websockets/requests.js';
|
|
3
|
+
import { WsKey } from './websocket-util.js';
|
|
4
|
+
export declare function isCBAdvancedTradeWSEvent(event: unknown): event is CBAdvancedTradeEvent;
|
|
5
|
+
/**
|
|
6
|
+
* Type guard that checks whether this event is/extends CBExchangeBaseEvent
|
|
7
|
+
*/
|
|
8
|
+
export declare function isCBExchangeWSEvent(event: unknown, wsKey: WsKey): event is CBExchangeBaseEvent;
|
|
9
|
+
/**
|
|
10
|
+
* Type guard for error-type response events seen for the Advnaced Trade WS channel
|
|
11
|
+
*/
|
|
12
|
+
export declare function isCBAdvancedTradeErrorEvent(event: unknown): event is CBAdvancedTradeErrorEvent;
|
|
13
|
+
/**
|
|
14
|
+
* Silly type guard for the structure of events being sent to the server
|
|
15
|
+
* (e.g. when subscribing to a topic)
|
|
16
|
+
*/
|
|
17
|
+
export declare function isCBExchangeWSRequestOperation<TWSTopic extends string = string>(evt: unknown, wsKey: WsKey): evt is WsExchangeRequestOperation<TWSTopic>;
|
|
18
|
+
/**
|
|
19
|
+
* Silly type guard for the structure of events being sent to the server
|
|
20
|
+
* (e.g. when subscribing to a topic)
|
|
21
|
+
*/
|
|
22
|
+
export declare function isCBINTXWSRequestOperation<TWSTopic extends string = string>(evt: unknown, wsKey: WsKey): evt is WsInternationalRequestOperation<TWSTopic>;
|
|
23
|
+
/**
|
|
24
|
+
* Silly type guard for the structure of events being sent to the server
|
|
25
|
+
* (e.g. when subscribing to a topic)
|
|
26
|
+
*/
|
|
27
|
+
export declare function isCBPrimeWSRequestOperation<TWSTopic extends string = string>(evt: unknown, wsKey: WsKey): evt is WsPrimeRequestOperation<TWSTopic>;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { WS_KEY_MAP } from './websocket-util.js';
|
|
2
|
+
function isDefinedObject(value) {
|
|
3
|
+
return typeof value === 'object' || !value;
|
|
4
|
+
}
|
|
5
|
+
export function isCBAdvancedTradeWSEvent(event) {
|
|
6
|
+
if (!isDefinedObject(event)) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
const message = event;
|
|
10
|
+
return typeof message.channel === 'string';
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Type guard that checks whether this event is/extends CBExchangeBaseEvent
|
|
14
|
+
*/
|
|
15
|
+
export function isCBExchangeWSEvent(event, wsKey) {
|
|
16
|
+
if (!isDefinedObject(event)) {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
return (wsKey === WS_KEY_MAP.exchangeMarketData ||
|
|
20
|
+
wsKey === WS_KEY_MAP.exchangeDirectMarketData);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Type guard for error-type response events seen for the Advnaced Trade WS channel
|
|
24
|
+
*/
|
|
25
|
+
export function isCBAdvancedTradeErrorEvent(event) {
|
|
26
|
+
if (!isDefinedObject(event)) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
const message = event;
|
|
30
|
+
return message.type === 'error';
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Silly type guard for the structure of events being sent to the server
|
|
34
|
+
* (e.g. when subscribing to a topic)
|
|
35
|
+
*/
|
|
36
|
+
export function isCBExchangeWSRequestOperation(evt, wsKey) {
|
|
37
|
+
if (!isDefinedObject(evt)) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
const looselyTypedEvent = evt;
|
|
41
|
+
if (typeof looselyTypedEvent.type !== 'string' ||
|
|
42
|
+
!Array.isArray(looselyTypedEvent.channels)) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
return (wsKey === WS_KEY_MAP.exchangeDirectMarketData ||
|
|
46
|
+
wsKey === WS_KEY_MAP.exchangeMarketData);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Silly type guard for the structure of events being sent to the server
|
|
50
|
+
* (e.g. when subscribing to a topic)
|
|
51
|
+
*/
|
|
52
|
+
export function isCBINTXWSRequestOperation(evt, wsKey) {
|
|
53
|
+
if (!isDefinedObject(evt)) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
const looselyTypedEvent = evt;
|
|
57
|
+
if (typeof looselyTypedEvent.type !== 'string' ||
|
|
58
|
+
!Array.isArray(looselyTypedEvent.channels)) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
return wsKey === WS_KEY_MAP.internationalMarketData;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Silly type guard for the structure of events being sent to the server
|
|
65
|
+
* (e.g. when subscribing to a topic)
|
|
66
|
+
*/
|
|
67
|
+
export function isCBPrimeWSRequestOperation(evt, wsKey) {
|
|
68
|
+
if (!isDefinedObject(evt)) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
const looselyTypedEvent = evt;
|
|
72
|
+
if (typeof looselyTypedEvent.type !== 'string' ||
|
|
73
|
+
typeof looselyTypedEvent.channel !== 'string') {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
return wsKey === WS_KEY_MAP.internationalMarketData;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=typeGuards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeGuards.js","sourceRoot":"","sources":["../../../../src/lib/websocket/typeGuards.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,UAAU,EAAS,MAAM,qBAAqB,CAAC;AAExD,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,KAAc;IAEd,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,KAA6B,CAAC;IAC9C,OAAO,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAc,EACd,KAAY;IAEZ,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CACL,KAAK,KAAK,UAAU,CAAC,kBAAkB;QACvC,KAAK,KAAK,UAAU,CAAC,wBAAwB,CAC9C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAAc;IAEd,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,KAAkC,CAAC;IACnD,OAAO,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAE5C,GAAY,EAAE,KAAY;IAC1B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,iBAAiB,GAAG,GAA2C,CAAC;IAEtE,IACE,OAAO,iBAAiB,CAAC,IAAI,KAAK,QAAQ;QAC1C,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAC1C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CACL,KAAK,KAAK,UAAU,CAAC,wBAAwB;QAC7C,KAAK,KAAK,UAAU,CAAC,kBAAkB,CACxC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACxC,GAAY,EACZ,KAAY;IAEZ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,iBAAiB,GAAG,GAAgD,CAAC;IAE3E,IACE,OAAO,iBAAiB,CAAC,IAAI,KAAK,QAAQ;QAC1C,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAC1C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,KAAK,UAAU,CAAC,uBAAuB,CAAC;AACtD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,GAAY,EACZ,KAAY;IAEZ,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,iBAAiB,GAAG,GAAwC,CAAC;IAEnE,IACE,OAAO,iBAAiB,CAAC,IAAI,KAAK,QAAQ;QAC1C,OAAO,iBAAiB,CAAC,OAAO,KAAK,QAAQ,EAC7C,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,KAAK,KAAK,UAAU,CAAC,uBAAuB,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import WebSocket from 'isomorphic-ws';
|
|
2
|
+
import { WsExchangeRequestOperation, WsInternationalRequestOperation } from '../../types/websockets/requests.js';
|
|
3
|
+
/**
|
|
4
|
+
* Each websocket URL (domain + endpoint) is represented as a "WS Key". Authentication is handled automatically if required.
|
|
5
|
+
*/
|
|
6
|
+
export declare const WS_KEY_MAP: {
|
|
7
|
+
/**
|
|
8
|
+
* Market Data is the traditional feed that provides updates for both orders and trades.
|
|
9
|
+
* Most channels are now available without authentication.
|
|
10
|
+
*
|
|
11
|
+
* https://docs.cdp.coinbase.com/advanced-trade/docs/ws-overview
|
|
12
|
+
*/
|
|
13
|
+
readonly advTradeMarketData: "advTradeMarketData";
|
|
14
|
+
/**
|
|
15
|
+
* User Order Data provides updates for the orders of the user.
|
|
16
|
+
*
|
|
17
|
+
* https://docs.cdp.coinbase.com/advanced-trade/docs/ws-overview
|
|
18
|
+
*/
|
|
19
|
+
readonly advTradeUserData: "advTradeUserData";
|
|
20
|
+
/**
|
|
21
|
+
* Coinbase Market Data (part of Coinbase Exchange API) is the traditional feed which is available without authentication.
|
|
22
|
+
*
|
|
23
|
+
* https://docs.cdp.coinbase.com/exchange/docs/websocket-overview
|
|
24
|
+
*/
|
|
25
|
+
readonly exchangeMarketData: "exchangeMarketData";
|
|
26
|
+
/**
|
|
27
|
+
* Coinbase Direct Market Data has direct access to Coinbase Exchange servers and requires Authentication.
|
|
28
|
+
*
|
|
29
|
+
* https://docs.cdp.coinbase.com/exchange/docs/websocket-overview
|
|
30
|
+
*/
|
|
31
|
+
readonly exchangeDirectMarketData: "exchangeDirectMarketData";
|
|
32
|
+
/**
|
|
33
|
+
* The INTX WebSocket feed is publicly available and provides real-time market data updates for orders and trades.
|
|
34
|
+
* The SDK must authenticate when subscribing to the WebSocket Feed the very first time.
|
|
35
|
+
*
|
|
36
|
+
* https://docs.cdp.coinbase.com/intx/docs/websocket-overview
|
|
37
|
+
*/
|
|
38
|
+
readonly internationalMarketData: "internationalMarketData";
|
|
39
|
+
/**
|
|
40
|
+
* The Prime WebSocket feed provides real-time market data updates for orders and trades. To begin
|
|
41
|
+
* receiving feed messages, you must send a signed subscribe message to the server indicating
|
|
42
|
+
* which channels and products to receive. The SDK will handle this automatically.
|
|
43
|
+
*
|
|
44
|
+
* https://docs.cdp.coinbase.com/prime/docs/websocket-feed
|
|
45
|
+
*/
|
|
46
|
+
readonly primeMarketData: "primeMarketData";
|
|
47
|
+
};
|
|
48
|
+
/** This is used to differentiate between each of the available websocket streams */
|
|
49
|
+
export type WsKey = (typeof WS_KEY_MAP)[keyof typeof WS_KEY_MAP];
|
|
50
|
+
/**
|
|
51
|
+
* Normalised internal format for a request (subscribe/unsubscribe/etc) on a topic, with optional parameters.
|
|
52
|
+
*
|
|
53
|
+
* - Topic: the topic this event is for
|
|
54
|
+
* - Payload: the parameters to include, optional. E.g. auth requires key + sign. Some topics allow configurable parameters.
|
|
55
|
+
*/
|
|
56
|
+
export interface WsTopicRequest<TWSTopic extends string = string, TWSPayload = any> {
|
|
57
|
+
topic: TWSTopic;
|
|
58
|
+
/**
|
|
59
|
+
* Any parameters to include with the request. These are automatically merged into the request.
|
|
60
|
+
*/
|
|
61
|
+
payload?: TWSPayload;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Conveniently allow users to request a topic either as string topics or objects (containing string topic + params)
|
|
65
|
+
*/
|
|
66
|
+
export type WsTopicRequestOrStringTopic<TWSTopic extends string, TWSPayload = any> = WsTopicRequest<TWSTopic, TWSPayload> | string;
|
|
67
|
+
export interface MessageEventLike {
|
|
68
|
+
target: WebSocket;
|
|
69
|
+
type: 'message';
|
|
70
|
+
data: string;
|
|
71
|
+
}
|
|
72
|
+
export declare function isMessageEvent(msg: unknown): msg is MessageEventLike;
|
|
73
|
+
/**
|
|
74
|
+
* Some exchanges have two livenet environments, some have test environments, some dont. This allows easy flexibility for different exchanges.
|
|
75
|
+
* Examples:
|
|
76
|
+
* - One livenet and one testnet: NetworkMap<'livenet' | 'testnet'>
|
|
77
|
+
* - One livenet, sometimes two, one testnet: NetworkMap<'livenet' | 'testnet', 'livenet2'>
|
|
78
|
+
* - Only one livenet, no other networks: NetworkMap<'livenet'>
|
|
79
|
+
*/
|
|
80
|
+
type NetworkMap<TRequiredKeys extends string, TOptionalKeys extends string | undefined = undefined> = Record<TRequiredKeys, string> & (TOptionalKeys extends string ? Record<TOptionalKeys, string | undefined> : Record<TRequiredKeys, string>);
|
|
81
|
+
export declare const WS_URL_MAP: Record<WsKey, NetworkMap<'livenet' | 'testnet'>>;
|
|
82
|
+
/**
|
|
83
|
+
* Merge one or more WS Request operations (e.g. subscribe request) for
|
|
84
|
+
* CB Exchange into one, allowing them to be sent as one request
|
|
85
|
+
*/
|
|
86
|
+
export declare function getMergedCBExchangeWSRequestOperations<TWSTopic extends string = string>(operations: WsExchangeRequestOperation<TWSTopic>[]): WsExchangeRequestOperation<TWSTopic>;
|
|
87
|
+
/**
|
|
88
|
+
* Merge one or more WS Request operations (e.g. subscribe request) for
|
|
89
|
+
* CB Exchange into one, allowing them to be sent as one request
|
|
90
|
+
*/
|
|
91
|
+
export declare function getMergedCBINTXRequestOperations<TWSTopic extends string = string>(operations: WsInternationalRequestOperation<TWSTopic>[]): WsInternationalRequestOperation<TWSTopic>;
|
|
92
|
+
/**
|
|
93
|
+
* Return sign used to authenticate CB Exchange WS requests
|
|
94
|
+
*/
|
|
95
|
+
export declare function getCBExchangeWSSign(apiSecret: string): Promise<{
|
|
96
|
+
timestampInSeconds: string;
|
|
97
|
+
sign: string;
|
|
98
|
+
}>;
|
|
99
|
+
/**
|
|
100
|
+
* Return sign used to authenticate CB INTX WS requests
|
|
101
|
+
*/
|
|
102
|
+
export declare function getCBInternationalWSSign(apiKey: string, apiSecret: string, apiPassphrase: string): Promise<{
|
|
103
|
+
timestampInSeconds: string;
|
|
104
|
+
sign: string;
|
|
105
|
+
}>;
|
|
106
|
+
/**
|
|
107
|
+
* Return sign used to authenticate CB Prime WS requests
|
|
108
|
+
*/
|
|
109
|
+
export declare function getCBPrimeWSSign(params: {
|
|
110
|
+
channelName: string;
|
|
111
|
+
svcAccountId: string;
|
|
112
|
+
portfolioId: string;
|
|
113
|
+
apiKey: string;
|
|
114
|
+
apiSecret: string;
|
|
115
|
+
product_ids?: string[];
|
|
116
|
+
}): Promise<{
|
|
117
|
+
timestampInSeconds: string;
|
|
118
|
+
sign: string;
|
|
119
|
+
}>;
|
|
120
|
+
export {};
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
import { signMessage } from '../webCryptoAPI.js';
|
|
2
|
+
/**
|
|
3
|
+
* Each websocket URL (domain + endpoint) is represented as a "WS Key". Authentication is handled automatically if required.
|
|
4
|
+
*/
|
|
5
|
+
export const WS_KEY_MAP = {
|
|
6
|
+
/**
|
|
7
|
+
* Market Data is the traditional feed that provides updates for both orders and trades.
|
|
8
|
+
* Most channels are now available without authentication.
|
|
9
|
+
*
|
|
10
|
+
* https://docs.cdp.coinbase.com/advanced-trade/docs/ws-overview
|
|
11
|
+
*/
|
|
12
|
+
advTradeMarketData: 'advTradeMarketData',
|
|
13
|
+
/**
|
|
14
|
+
* User Order Data provides updates for the orders of the user.
|
|
15
|
+
*
|
|
16
|
+
* https://docs.cdp.coinbase.com/advanced-trade/docs/ws-overview
|
|
17
|
+
*/
|
|
18
|
+
advTradeUserData: 'advTradeUserData',
|
|
19
|
+
/**
|
|
20
|
+
* Coinbase Market Data (part of Coinbase Exchange API) is the traditional feed which is available without authentication.
|
|
21
|
+
*
|
|
22
|
+
* https://docs.cdp.coinbase.com/exchange/docs/websocket-overview
|
|
23
|
+
*/
|
|
24
|
+
exchangeMarketData: 'exchangeMarketData',
|
|
25
|
+
/**
|
|
26
|
+
* Coinbase Direct Market Data has direct access to Coinbase Exchange servers and requires Authentication.
|
|
27
|
+
*
|
|
28
|
+
* https://docs.cdp.coinbase.com/exchange/docs/websocket-overview
|
|
29
|
+
*/
|
|
30
|
+
exchangeDirectMarketData: 'exchangeDirectMarketData',
|
|
31
|
+
/**
|
|
32
|
+
* The INTX WebSocket feed is publicly available and provides real-time market data updates for orders and trades.
|
|
33
|
+
* The SDK must authenticate when subscribing to the WebSocket Feed the very first time.
|
|
34
|
+
*
|
|
35
|
+
* https://docs.cdp.coinbase.com/intx/docs/websocket-overview
|
|
36
|
+
*/
|
|
37
|
+
internationalMarketData: 'internationalMarketData',
|
|
38
|
+
/**
|
|
39
|
+
* The Prime WebSocket feed provides real-time market data updates for orders and trades. To begin
|
|
40
|
+
* receiving feed messages, you must send a signed subscribe message to the server indicating
|
|
41
|
+
* which channels and products to receive. The SDK will handle this automatically.
|
|
42
|
+
*
|
|
43
|
+
* https://docs.cdp.coinbase.com/prime/docs/websocket-feed
|
|
44
|
+
*/
|
|
45
|
+
primeMarketData: 'primeMarketData',
|
|
46
|
+
};
|
|
47
|
+
export function isMessageEvent(msg) {
|
|
48
|
+
if (typeof msg !== 'object' || !msg) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
const message = msg;
|
|
52
|
+
return message['type'] === 'message' && typeof message['data'] === 'string';
|
|
53
|
+
}
|
|
54
|
+
export const WS_URL_MAP = {
|
|
55
|
+
[WS_KEY_MAP.advTradeMarketData]: {
|
|
56
|
+
livenet: 'wss://advanced-trade-ws.coinbase.com',
|
|
57
|
+
testnet: 'NotAvailable',
|
|
58
|
+
},
|
|
59
|
+
[WS_KEY_MAP.advTradeUserData]: {
|
|
60
|
+
livenet: 'wss://advanced-trade-ws-user.coinbase.com',
|
|
61
|
+
testnet: 'NotAvailable',
|
|
62
|
+
},
|
|
63
|
+
[WS_KEY_MAP.exchangeMarketData]: {
|
|
64
|
+
livenet: 'wss://ws-feed.exchange.coinbase.com',
|
|
65
|
+
testnet: 'wss://ws-feed-public.sandbox.exchange.coinbase.com',
|
|
66
|
+
},
|
|
67
|
+
[WS_KEY_MAP.exchangeDirectMarketData]: {
|
|
68
|
+
livenet: 'wss://ws-direct.exchange.coinbase.com',
|
|
69
|
+
testnet: 'wss://ws-direct.sandbox.exchange.coinbase.com',
|
|
70
|
+
},
|
|
71
|
+
[WS_KEY_MAP.internationalMarketData]: {
|
|
72
|
+
livenet: 'wss://ws-md.international.coinbase.com',
|
|
73
|
+
testnet: 'wss://ws-md.n5e2.coinbase.com',
|
|
74
|
+
},
|
|
75
|
+
[WS_KEY_MAP.primeMarketData]: {
|
|
76
|
+
livenet: 'wss://ws-feed.prime.coinbase.com',
|
|
77
|
+
testnet: 'NotAvailable',
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
/**
|
|
81
|
+
* Merge one or more WS Request operations (e.g. subscribe request) for
|
|
82
|
+
* CB Exchange into one, allowing them to be sent as one request
|
|
83
|
+
*/
|
|
84
|
+
export function getMergedCBExchangeWSRequestOperations(operations) {
|
|
85
|
+
// The CB Exchange WS supports sending multiple topics in one request.
|
|
86
|
+
// Merge all requests into one
|
|
87
|
+
return operations.reduce((acc, evt) => {
|
|
88
|
+
if (!acc) {
|
|
89
|
+
const wsRequestEvent = {
|
|
90
|
+
type: evt.type,
|
|
91
|
+
channels: [...evt.channels],
|
|
92
|
+
};
|
|
93
|
+
return wsRequestEvent;
|
|
94
|
+
}
|
|
95
|
+
const wsRequestEvent = {
|
|
96
|
+
type: evt.type,
|
|
97
|
+
channels: [...acc.channels, ...evt.channels],
|
|
98
|
+
};
|
|
99
|
+
return wsRequestEvent;
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Merge one or more WS Request operations (e.g. subscribe request) for
|
|
104
|
+
* CB Exchange into one, allowing them to be sent as one request
|
|
105
|
+
*/
|
|
106
|
+
export function getMergedCBINTXRequestOperations(operations) {
|
|
107
|
+
// The CB Exchange WS supports sending multiple topics in one request.
|
|
108
|
+
// Merge all requests into one
|
|
109
|
+
return operations.reduce((acc, evt) => {
|
|
110
|
+
if (!acc) {
|
|
111
|
+
const wsRequestEvent = {
|
|
112
|
+
type: evt.type,
|
|
113
|
+
channels: [...evt.channels],
|
|
114
|
+
};
|
|
115
|
+
return wsRequestEvent;
|
|
116
|
+
}
|
|
117
|
+
const wsRequestEvent = {
|
|
118
|
+
type: evt.type,
|
|
119
|
+
channels: [...acc.channels, ...evt.channels],
|
|
120
|
+
};
|
|
121
|
+
return wsRequestEvent;
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Return sign used to authenticate CB Exchange WS requests
|
|
126
|
+
*/
|
|
127
|
+
export async function getCBExchangeWSSign(apiSecret) {
|
|
128
|
+
const timestampInMs = Date.now();
|
|
129
|
+
const timestampInSeconds = (timestampInMs / 1000).toFixed(0);
|
|
130
|
+
const signPath = '/users/self/verify';
|
|
131
|
+
const signRequestMethod = 'GET';
|
|
132
|
+
const signInput = `${timestampInSeconds}${signRequestMethod}${signPath}`;
|
|
133
|
+
const sign = await signMessage(signInput, apiSecret, 'base64', 'SHA-256', 'base64:web');
|
|
134
|
+
return { sign, timestampInSeconds };
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Return sign used to authenticate CB INTX WS requests
|
|
138
|
+
*/
|
|
139
|
+
export async function getCBInternationalWSSign(apiKey, apiSecret, apiPassphrase) {
|
|
140
|
+
const timestampInMs = Date.now();
|
|
141
|
+
const timestampInSeconds = (timestampInMs / 1000).toFixed(0);
|
|
142
|
+
const signInput = timestampInSeconds + apiKey + 'CBINTLMD' + apiPassphrase;
|
|
143
|
+
const sign = await signMessage(signInput, apiSecret, 'base64', 'SHA-256', 'base64:web');
|
|
144
|
+
return { sign, timestampInSeconds };
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Return sign used to authenticate CB Prime WS requests
|
|
148
|
+
*/
|
|
149
|
+
export async function getCBPrimeWSSign(params) {
|
|
150
|
+
const timestampInMs = Date.now();
|
|
151
|
+
const timestampInSeconds = (timestampInMs / 1000).toFixed(0);
|
|
152
|
+
// channelName + accessKey + svcAccountId + timestamp + portfolioId + products
|
|
153
|
+
const signInput = [
|
|
154
|
+
params.channelName,
|
|
155
|
+
params.apiKey,
|
|
156
|
+
params.svcAccountId,
|
|
157
|
+
timestampInSeconds,
|
|
158
|
+
params.portfolioId,
|
|
159
|
+
params.product_ids ? params.product_ids.join('') : '',
|
|
160
|
+
].join('');
|
|
161
|
+
const sign = await signMessage(signInput, params.apiSecret, 'base64', 'SHA-256', 'base64:web');
|
|
162
|
+
return { sign, timestampInSeconds };
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=websocket-util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-util.js","sourceRoot":"","sources":["../../../../src/lib/websocket/websocket-util.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB;;;;;OAKG;IACH,kBAAkB,EAAE,oBAAoB;IACxC;;;;OAIG;IACH,gBAAgB,EAAE,kBAAkB;IACpC;;;;OAIG;IACH,kBAAkB,EAAE,oBAAoB;IACxC;;;;OAIG;IACH,wBAAwB,EAAE,0BAA0B;IACpD;;;;;OAKG;IACH,uBAAuB,EAAE,yBAAyB;IAClD;;;;;;OAMG;IACH,eAAe,EAAE,iBAAiB;CAC1B,CAAC;AAoCX,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,OAAO,GAAG,GAAuB,CAAC;IACxC,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC;AAC9E,CAAC;AAiBD,MAAM,CAAC,MAAM,UAAU,GAAqD;IAC1E,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE;QAC/B,OAAO,EAAE,sCAAsC;QAC/C,OAAO,EAAE,cAAc;KACxB;IACD,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;QAC7B,OAAO,EAAE,2CAA2C;QACpD,OAAO,EAAE,cAAc;KACxB;IACD,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE;QAC/B,OAAO,EAAE,qCAAqC;QAC9C,OAAO,EAAE,oDAAoD;KAC9D;IACD,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE;QACrC,OAAO,EAAE,uCAAuC;QAChD,OAAO,EAAE,+CAA+C;KACzD;IACD,CAAC,UAAU,CAAC,uBAAuB,CAAC,EAAE;QACpC,OAAO,EAAE,wCAAwC;QACjD,OAAO,EAAE,+BAA+B;KACzC;IACD,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE;QAC5B,OAAO,EAAE,kCAAkC;QAC3C,OAAO,EAAE,cAAc;KACxB;CACO,CAAC;AAEX;;;GAGG;AACH,MAAM,UAAU,sCAAsC,CAEpD,UAAkD;IAClD,sEAAsE;IACtE,8BAA8B;IAC9B,OAAO,UAAU,CAAC,MAAM,CACtB,CACE,GAAyC,EACzC,GAAyC,EACzC,EAAE;QACF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,cAAc,GAAyC;gBAC3D,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC;aAC5B,CAAC;YAEF,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,MAAM,cAAc,GAAyC;YAC3D,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC;SAC7C,CAAC;QAEF,OAAO,cAAc,CAAC;IACxB,CAAC,CACF,CAAC;AACJ,CAAC;AACD;;;GAGG;AACH,MAAM,UAAU,gCAAgC,CAE9C,UAAuD;IACvD,sEAAsE;IACtE,8BAA8B;IAC9B,OAAO,UAAU,CAAC,MAAM,CACtB,CACE,GAA8C,EAC9C,GAA8C,EAC9C,EAAE;QACF,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,cAAc,GAA8C;gBAChE,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC;aAC5B,CAAC;YAEF,OAAO,cAAc,CAAC;QACxB,CAAC;QAED,MAAM,cAAc,GAA8C;YAChE,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,EAAE,GAAG,GAAG,CAAC,QAAQ,CAAC;SAC7C,CAAC;QAEF,OAAO,cAAc,CAAC;IACxB,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,SAAiB;IAIzD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,MAAM,kBAAkB,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAE7D,MAAM,QAAQ,GAAG,oBAAoB,CAAC;IACtC,MAAM,iBAAiB,GAAG,KAAK,CAAC;IAChC,MAAM,SAAS,GAAG,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,QAAQ,EAAE,CAAC;IAEzE,MAAM,IAAI,GAAG,MAAM,WAAW,CAC5B,SAAS,EACT,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,CACb,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAAc,EACd,SAAiB,EACjB,aAAqB;IAKrB,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,MAAM,kBAAkB,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAE7D,MAAM,SAAS,GAAG,kBAAkB,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC;IAE3E,MAAM,IAAI,GAAG,MAAM,WAAW,CAC5B,SAAS,EACT,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,CACb,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAOtC;IAIC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,MAAM,kBAAkB,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAE7D,8EAA8E;IAC9E,MAAM,SAAS,GAAG;QAChB,MAAM,CAAC,WAAW;QAClB,MAAM,CAAC,MAAM;QACb,MAAM,CAAC,YAAY;QACnB,kBAAkB;QAClB,MAAM,CAAC,WAAW;QAClB,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;KACtD,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEX,MAAM,IAAI,GAAG,MAAM,WAAW,CAC5B,SAAS,EACT,MAAM,CAAC,SAAS,EAChB,QAAQ,EACR,SAAS,EACT,YAAY,CACb,CAAC;IAEF,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;AACtC,CAAC"}
|