@coinbase/cdp-sdk 1.3.1 → 1.4.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/CHANGELOG.md +12 -0
- package/README.md +26 -0
- package/_cjs/analytics.js +17 -41
- package/_cjs/analytics.js.map +1 -1
- package/_cjs/auth/index.js +1 -0
- package/_cjs/auth/index.js.map +1 -1
- package/_cjs/auth/utils/http.js +2 -0
- package/_cjs/auth/utils/http.js.map +1 -1
- package/_cjs/auth/utils/index.js +1 -0
- package/_cjs/auth/utils/index.js.map +1 -1
- package/_cjs/auth/utils/jwt.js +16 -6
- package/_cjs/auth/utils/jwt.js.map +1 -1
- package/_cjs/auth/utils/ws.js +31 -0
- package/_cjs/auth/utils/ws.js.map +1 -0
- package/_cjs/client/cdp.js +5 -1
- package/_cjs/client/cdp.js.map +1 -1
- package/_cjs/index.js +0 -1
- package/_cjs/index.js.map +1 -1
- package/_cjs/version.js +1 -1
- package/_esm/analytics.js +16 -39
- package/_esm/analytics.js.map +1 -1
- package/_esm/auth/index.js +1 -0
- package/_esm/auth/index.js.map +1 -1
- package/_esm/auth/utils/http.js +2 -1
- package/_esm/auth/utils/http.js.map +1 -1
- package/_esm/auth/utils/index.js +1 -0
- package/_esm/auth/utils/index.js.map +1 -1
- package/_esm/auth/utils/jwt.js +16 -6
- package/_esm/auth/utils/jwt.js.map +1 -1
- package/_esm/auth/utils/ws.js +28 -0
- package/_esm/auth/utils/ws.js.map +1 -0
- package/_esm/client/cdp.js +6 -2
- package/_esm/client/cdp.js.map +1 -1
- package/_esm/index.js +0 -1
- package/_esm/index.js.map +1 -1
- package/_esm/version.js +1 -1
- package/_types/analytics.d.ts +10 -16
- package/_types/analytics.d.ts.map +1 -1
- package/_types/auth/index.d.ts +1 -0
- package/_types/auth/index.d.ts.map +1 -1
- package/_types/auth/utils/http.d.ts +12 -0
- package/_types/auth/utils/http.d.ts.map +1 -1
- package/_types/auth/utils/index.d.ts +1 -0
- package/_types/auth/utils/index.d.ts.map +1 -1
- package/_types/auth/utils/jwt.d.ts +13 -7
- package/_types/auth/utils/jwt.d.ts.map +1 -1
- package/_types/auth/utils/ws.d.ts +45 -0
- package/_types/auth/utils/ws.d.ts.map +1 -0
- package/_types/client/cdp.d.ts.map +1 -1
- package/_types/index.d.ts +0 -1
- package/_types/index.d.ts.map +1 -1
- package/_types/version.d.ts +1 -1
- package/analytics.ts +19 -44
- package/auth/README.md +18 -3
- package/auth/index.ts +1 -0
- package/auth/utils/http.ts +7 -1
- package/auth/utils/index.ts +1 -0
- package/auth/utils/jwt.ts +36 -13
- package/auth/utils/ws.ts +76 -0
- package/client/cdp.ts +6 -2
- package/index.ts +0 -2
- package/package.json +1 -1
- package/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# CDP SDK Changelog
|
|
2
2
|
|
|
3
|
+
## 1.4.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#75](https://github.com/coinbase/cdp-sdk/pull/75) [`bb056f6`](https://github.com/coinbase/cdp-sdk/commit/bb056f60c3873a399f8721a953edeaed2a868d76) Thanks [@derek-cb](https://github.com/derek-cb)! - Added the ability to generate JWTs intended for Websocket connections Added the ability to pass the "audience" JWT claim as an optional param
|
|
8
|
+
|
|
9
|
+
## 1.3.2
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#76](https://github.com/coinbase/cdp-sdk/pull/76) [`24463f0`](https://github.com/coinbase/cdp-sdk/commit/24463f0e5a3c4463a287cc5305bcc0d07f4f9654) Thanks [@0xRAG](https://github.com/0xRAG)! - Fix circular dependency when importing @coinbase/cdp-sdk
|
|
14
|
+
|
|
3
15
|
## 1.3.1
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -314,3 +314,29 @@ export NODE_OPTIONS="--network-family-autoselection-attempt-timeout=500"
|
|
|
314
314
|
### Error [ERR_REQUIRE_ESM]: require() of ES modules is not supported.
|
|
315
315
|
|
|
316
316
|
Use Node v20.19.0 or higher. CDP SDK depends on [jose](https://github.com/panva/jose) v6, which ships only ESM. Jose supports CJS style imports in Node.js versions where the require(esm) feature is enabled by default (^20.19.0 || ^22.12.0 || >= 23.0.0). [See here for more info](https://github.com/panva/jose?tab=readme-ov-file#user-content-fn-cjs-705c79d785ca9bc0f9ec1e8ce0825c74).
|
|
317
|
+
|
|
318
|
+
### Jest encountered an unexpected token
|
|
319
|
+
|
|
320
|
+
If you're using Jest and see an error like this:
|
|
321
|
+
|
|
322
|
+
```
|
|
323
|
+
Details:
|
|
324
|
+
|
|
325
|
+
/Users/.../node_modules/jose/dist/webapi/index.js:1
|
|
326
|
+
({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,jest){export { compactDecrypt } from './jwe/compact/decrypt.js';
|
|
327
|
+
^^^^^^
|
|
328
|
+
|
|
329
|
+
SyntaxError: Unexpected token 'export'
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
Add a file called `jest.setup.ts` next to your `jest.config` file with the following content:
|
|
333
|
+
|
|
334
|
+
```typescript
|
|
335
|
+
jest.mock("jose", () => {});
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
Then, add the following line to your `jest.config` file:
|
|
339
|
+
|
|
340
|
+
```typescript
|
|
341
|
+
setupFilesAfterEnv: ["<rootDir>/jest.setup.ts"],
|
|
342
|
+
```
|
package/_cjs/analytics.js
CHANGED
|
@@ -3,32 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.AnalyticsConfig = void 0;
|
|
7
6
|
exports.sendEvent = sendEvent;
|
|
7
|
+
exports.wrapClassWithErrorTracking = wrapClassWithErrorTracking;
|
|
8
8
|
const md5_1 = __importDefault(require("md5"));
|
|
9
|
-
const cdp_js_1 = require("./client/cdp.js");
|
|
10
|
-
const evm_js_1 = require("./client/evm/evm.js");
|
|
11
|
-
const solana_js_1 = require("./client/solana/solana.js");
|
|
12
9
|
// This is a public client id for the analytics service
|
|
13
10
|
const publicClientId = "54f2ee2fb3d2b901a829940d70fbfc13";
|
|
14
|
-
/**
|
|
15
|
-
* AnalyticsConfig singleton class for holding the API key ID
|
|
16
|
-
*/
|
|
17
|
-
class AnalyticsConfig {
|
|
18
|
-
/**
|
|
19
|
-
* The API key ID
|
|
20
|
-
*/
|
|
21
|
-
static apiKeyId;
|
|
22
|
-
/**
|
|
23
|
-
* Sets the API key ID
|
|
24
|
-
*
|
|
25
|
-
* @param apiKeyId - The API key ID
|
|
26
|
-
*/
|
|
27
|
-
static set(apiKeyId) {
|
|
28
|
-
AnalyticsConfig.apiKeyId = apiKeyId;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
exports.AnalyticsConfig = AnalyticsConfig;
|
|
32
11
|
/**
|
|
33
12
|
* Sends an analytics event to the default endpoint
|
|
34
13
|
*
|
|
@@ -38,7 +17,7 @@ exports.AnalyticsConfig = AnalyticsConfig;
|
|
|
38
17
|
async function sendEvent(event) {
|
|
39
18
|
const timestamp = Date.now();
|
|
40
19
|
const enhancedEvent = {
|
|
41
|
-
user_id:
|
|
20
|
+
user_id: event.apiKeyId,
|
|
42
21
|
event_type: event.name,
|
|
43
22
|
platform: "server",
|
|
44
23
|
timestamp,
|
|
@@ -73,13 +52,14 @@ async function sendEvent(event) {
|
|
|
73
52
|
* Wraps all methods of a class with error tracking.
|
|
74
53
|
*
|
|
75
54
|
* @param ClassToWrap - The class whose prototype methods should be wrapped.
|
|
55
|
+
* @param apiKeyId - The API key ID to use for the error tracking.
|
|
76
56
|
*/
|
|
77
57
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
78
|
-
function wrapClassWithErrorTracking(ClassToWrap) {
|
|
79
|
-
const
|
|
80
|
-
for (const
|
|
81
|
-
const originalMethod = ClassToWrap.prototype[
|
|
82
|
-
ClassToWrap.prototype[
|
|
58
|
+
function wrapClassWithErrorTracking(ClassToWrap, apiKeyId) {
|
|
59
|
+
const methods = Object.getOwnPropertyNames(ClassToWrap.prototype).filter(name => name !== "constructor" && typeof ClassToWrap.prototype[name] === "function");
|
|
60
|
+
for (const method of methods) {
|
|
61
|
+
const originalMethod = ClassToWrap.prototype[method];
|
|
62
|
+
ClassToWrap.prototype[method] = async function (...args) {
|
|
83
63
|
try {
|
|
84
64
|
return await originalMethod.apply(this, args);
|
|
85
65
|
}
|
|
@@ -88,22 +68,18 @@ function wrapClassWithErrorTracking(ClassToWrap) {
|
|
|
88
68
|
return;
|
|
89
69
|
}
|
|
90
70
|
const { message, stack } = error;
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
71
|
+
sendEvent({
|
|
72
|
+
apiKeyId,
|
|
73
|
+
method,
|
|
74
|
+
message,
|
|
75
|
+
stack,
|
|
76
|
+
name: "error",
|
|
77
|
+
}).catch(() => {
|
|
78
|
+
// ignore error
|
|
79
|
+
});
|
|
101
80
|
throw error;
|
|
102
81
|
}
|
|
103
82
|
};
|
|
104
83
|
}
|
|
105
84
|
}
|
|
106
|
-
wrapClassWithErrorTracking(cdp_js_1.CdpClient);
|
|
107
|
-
wrapClassWithErrorTracking(evm_js_1.EvmClient);
|
|
108
|
-
wrapClassWithErrorTracking(solana_js_1.SolanaClient);
|
|
109
85
|
//# sourceMappingURL=analytics.js.map
|
package/_cjs/analytics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../analytics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../analytics.ts"],"names":[],"mappings":";;;;;AAqCA,8BAuCC;AASD,gEA+BC;AApHD,8CAAsB;AA4BtB,uDAAuD;AACvD,MAAM,cAAc,GAAG,kCAAkC,CAAC;AAE1D;;;;;GAKG;AACI,KAAK,UAAU,SAAS,CAAC,KAAgB;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,MAAM,aAAa,GAAG;QACpB,OAAO,EAAE,KAAK,CAAC,QAAQ;QACvB,UAAU,EAAE,KAAK,CAAC,IAAI;QACtB,QAAQ,EAAE,QAAQ;QAClB,SAAS;QACT,gBAAgB,EAAE;YAChB,YAAY,EAAE,SAAS;YACvB,gBAAgB,EAAE,YAAY;YAC9B,GAAG,KAAK;SACT;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/B,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;IAExC,MAAM,QAAQ,GAAG,IAAA,aAAG,EAAC,oBAAoB,GAAG,UAAU,CAAC,CAAC;IAExD,MAAM,oBAAoB,GAAG;QAC3B,MAAM,EAAE,cAAc;QACtB,CAAC,EAAE,oBAAoB;QACvB,QAAQ;KACT,CAAC;IAEF,MAAM,WAAW,GAAG,+BAA+B,CAAC;IACpD,MAAM,SAAS,GAAG,MAAM,CAAC;IACzB,MAAM,aAAa,GAAG,GAAG,WAAW,GAAG,SAAS,EAAE,CAAC;IAEnD,MAAM,KAAK,CAAC,aAAa,EAAE;QACzB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,SAAS;QACf,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;KAC3C,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,8DAA8D;AAC9D,SAAgB,0BAA0B,CAAC,WAAgB,EAAE,QAAgB;IAC3E,MAAM,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CACtE,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,UAAU,CACpF,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACrD,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,KAAK,WAAW,GAAG,IAAe;YAChE,IAAI,CAAC;gBACH,OAAO,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;oBAC9B,OAAO;gBACT,CAAC;gBAED,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;gBAEjC,SAAS,CAAC;oBACR,QAAQ;oBACR,MAAM;oBACN,OAAO;oBACP,KAAK;oBACL,IAAI,EAAE,OAAO;iBACd,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBACZ,eAAe;gBACjB,CAAC,CAAC,CAAC;gBAEH,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/_cjs/auth/index.js
CHANGED
|
@@ -41,4 +41,5 @@ const axiosHooks = __importStar(require("./hooks/axios/index.js"));
|
|
|
41
41
|
exports.axiosHooks = axiosHooks;
|
|
42
42
|
__exportStar(require("./utils/http.js"), exports);
|
|
43
43
|
__exportStar(require("./utils/jwt.js"), exports);
|
|
44
|
+
__exportStar(require("./utils/ws.js"), exports);
|
|
44
45
|
//# sourceMappingURL=index.js.map
|
package/_cjs/auth/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../auth/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mEAAqD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../auth/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mEAAqD;AAK5C,gCAAU;AAHnB,kDAAgC;AAChC,iDAA+B;AAC/B,gDAA8B"}
|
package/_cjs/auth/utils/http.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.getAuthHeaders = getAuthHeaders;
|
|
4
|
+
exports.getCorrelationData = getCorrelationData;
|
|
4
5
|
const jwt_js_1 = require("./jwt.js");
|
|
5
6
|
const version_js_1 = require("../../version.js");
|
|
6
7
|
/**
|
|
@@ -19,6 +20,7 @@ async function getAuthHeaders(options) {
|
|
|
19
20
|
requestHost: options.requestHost,
|
|
20
21
|
requestPath: options.requestPath,
|
|
21
22
|
expiresIn: options.expiresIn,
|
|
23
|
+
audience: options.audience,
|
|
22
24
|
});
|
|
23
25
|
headers["Authorization"] = `Bearer ${jwt}`;
|
|
24
26
|
headers["Content-Type"] = "application/json";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../auth/utils/http.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../auth/utils/http.ts"],"names":[],"mappings":";;AA6EA,wCAwCC;AAsBD,gDAYC;AAvJD,qCAA0D;AAC1D,iDAA2C;AAsE3C;;;;;GAKG;AACI,KAAK,UAAU,cAAc,CAClC,OAA8B;IAE9B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,6BAA6B;IAC7B,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAW,EAAC;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC;IACH,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,GAAG,EAAE,CAAC;IAC3C,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;IAE7C,4BAA4B;IAC5B,IAAI,kBAAkB,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,4IAA4I,CAC7I,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,IAAA,0BAAiB,EAAC;YAC9C,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;SACvC,CAAC,CAAC;QACH,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC;IAC7C,CAAC;IAED,uBAAuB;IACvB,OAAO,CAAC,qBAAqB,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAE3F,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,aAAqB,EAAE,WAAmB;IACpE,OAAO,CACL,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,KAAK,MAAM,IAAI,aAAa,KAAK,QAAQ,CAAC,CAC/F,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,kBAAkB,CAAC,MAAe,EAAE,aAAsB;IACxE,MAAM,IAAI,GAAG;QACX,WAAW,EAAE,oBAAO;QACpB,YAAY,EAAE,YAAY;QAC1B,MAAM,EAAE,MAAM,IAAI,UAAU;KAC7B,CAAC;IACF,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,CAAC,gBAAgB,CAAC,GAAG,aAAa,CAAC;IACzC,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;SACrB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;SACrD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
|
package/_cjs/auth/utils/index.js
CHANGED
|
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./http.js"), exports);
|
|
18
18
|
__exportStar(require("./jwt.js"), exports);
|
|
19
|
+
__exportStar(require("./ws.js"), exports);
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../auth/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,2CAAyB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../auth/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,2CAAyB;AACzB,0CAAwB"}
|
package/_cjs/auth/utils/jwt.js
CHANGED
|
@@ -41,7 +41,9 @@ const jose_1 = require("jose");
|
|
|
41
41
|
const errors_js_1 = require("../errors.js");
|
|
42
42
|
/**
|
|
43
43
|
* Generates a JWT (also known as a Bearer token) for authenticating with Coinbase's REST APIs.
|
|
44
|
-
* Supports both EC (ES256) and Ed25519 (EdDSA) keys.
|
|
44
|
+
* Supports both EC (ES256) and Ed25519 (EdDSA) keys. Also supports JWTs meant for
|
|
45
|
+
* websocket connections by allowing requestMethod, requestHost, and requestPath to all be
|
|
46
|
+
* null, in which case the 'uris' claim is omitted from the JWT.
|
|
45
47
|
*
|
|
46
48
|
* @param options - The configuration options for generating the JWT
|
|
47
49
|
* @returns The generated JWT (Bearer token) string
|
|
@@ -55,19 +57,27 @@ async function generateJwt(options) {
|
|
|
55
57
|
if (!options.apiKeySecret) {
|
|
56
58
|
throw new Error("Private key is required");
|
|
57
59
|
}
|
|
58
|
-
if
|
|
59
|
-
|
|
60
|
+
// Check if we have a REST API request or a websocket connection
|
|
61
|
+
const hasAllRequestParams = Boolean(options.requestMethod && options.requestHost && options.requestPath);
|
|
62
|
+
const hasNoRequestParams = (options.requestMethod === undefined || options.requestMethod === null) &&
|
|
63
|
+
(options.requestHost === undefined || options.requestHost === null) &&
|
|
64
|
+
(options.requestPath === undefined || options.requestPath === null);
|
|
65
|
+
// Ensure we either have all request parameters or none (for websocket)
|
|
66
|
+
if (!hasAllRequestParams && !hasNoRequestParams) {
|
|
67
|
+
throw new Error("Either all request details (method, host, path) must be provided, or all must be null for JWTs intended for websocket connections");
|
|
60
68
|
}
|
|
61
69
|
const now = Math.floor(Date.now() / 1000);
|
|
62
70
|
const expiresIn = options.expiresIn || 120; // Default to 120 seconds if not specified
|
|
63
|
-
const uri = `${options.requestMethod} ${options.requestHost}${options.requestPath}`;
|
|
64
71
|
// Prepare the JWT payload
|
|
65
72
|
const claims = {
|
|
66
73
|
sub: options.apiKeyId,
|
|
67
74
|
iss: "cdp",
|
|
68
|
-
aud: ["cdp_service"],
|
|
69
|
-
uris: [uri],
|
|
75
|
+
aud: options.audience || ["cdp_service"],
|
|
70
76
|
};
|
|
77
|
+
// Add the uris claim only for REST API requests
|
|
78
|
+
if (hasAllRequestParams) {
|
|
79
|
+
claims.uris = [`${options.requestMethod} ${options.requestHost}${options.requestPath}`];
|
|
80
|
+
}
|
|
71
81
|
// Generate random nonce for the header
|
|
72
82
|
const randomNonce = nonce();
|
|
73
83
|
// Determine if we're using EC or Edwards key based on the key format
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../../auth/utils/jwt.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../../auth/utils/jwt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getWebSocketAuthHeaders = getWebSocketAuthHeaders;
|
|
4
|
+
const http_js_1 = require("./http.js");
|
|
5
|
+
const jwt_js_1 = require("./jwt.js");
|
|
6
|
+
/**
|
|
7
|
+
* Gets authentication headers for a WebSocket connection.
|
|
8
|
+
*
|
|
9
|
+
* @param options - The configuration options for generating WebSocket auth headers
|
|
10
|
+
* @returns Object containing the authentication headers
|
|
11
|
+
*/
|
|
12
|
+
async function getWebSocketAuthHeaders(options) {
|
|
13
|
+
const headers = {};
|
|
14
|
+
// Generate and add JWT token without request parameters for WebSocket
|
|
15
|
+
const jwt = await (0, jwt_js_1.generateJwt)({
|
|
16
|
+
apiKeyId: options.apiKeyId,
|
|
17
|
+
apiKeySecret: options.apiKeySecret,
|
|
18
|
+
// All request parameters are null for WebSocket
|
|
19
|
+
requestMethod: null,
|
|
20
|
+
requestHost: null,
|
|
21
|
+
requestPath: null,
|
|
22
|
+
expiresIn: options.expiresIn,
|
|
23
|
+
audience: options.audience,
|
|
24
|
+
});
|
|
25
|
+
headers["Authorization"] = `Bearer ${jwt}`;
|
|
26
|
+
headers["Content-Type"] = "application/json";
|
|
27
|
+
// Add correlation data
|
|
28
|
+
headers["Correlation-Context"] = (0, http_js_1.getCorrelationData)(options.source, options.sourceVersion);
|
|
29
|
+
return headers;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=ws.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ws.js","sourceRoot":"","sources":["../../../auth/utils/ws.ts"],"names":[],"mappings":";;AAoDA,0DAuBC;AA3ED,uCAA+C;AAC/C,qCAAuC;AA6CvC;;;;;GAKG;AACI,KAAK,UAAU,uBAAuB,CAC3C,OAAuC;IAEvC,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,sEAAsE;IACtE,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAW,EAAC;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,gDAAgD;QAChD,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC;IACH,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,GAAG,EAAE,CAAC;IAC3C,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;IAE7C,uBAAuB;IACvB,OAAO,CAAC,qBAAqB,CAAC,GAAG,IAAA,4BAAkB,EAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAE3F,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/_cjs/client/cdp.js
CHANGED
|
@@ -92,7 +92,11 @@ For more information, see: https://github.com/coinbase/cdp-sdk/blob/main/typescr
|
|
|
92
92
|
source: "sdk",
|
|
93
93
|
sourceVersion: version_js_1.version,
|
|
94
94
|
});
|
|
95
|
-
|
|
95
|
+
if (process.env.DISABLE_CDP_ERROR_REPORTING !== "true") {
|
|
96
|
+
(0, analytics_js_1.wrapClassWithErrorTracking)(CdpClient, apiKeyId);
|
|
97
|
+
(0, analytics_js_1.wrapClassWithErrorTracking)(evm_js_1.EvmClient, apiKeyId);
|
|
98
|
+
(0, analytics_js_1.wrapClassWithErrorTracking)(solana_js_1.SolanaClient, apiKeyId);
|
|
99
|
+
}
|
|
96
100
|
this.evm = new evm_js_1.EvmClient();
|
|
97
101
|
this.solana = new solana_js_1.SolanaClient();
|
|
98
102
|
}
|
package/_cjs/client/cdp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdp.js","sourceRoot":"","sources":["../../client/cdp.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"cdp.js","sourceRoot":"","sources":["../../client/cdp.ts"],"names":[],"mappings":";;;AAAA,kDAA6D;AAC7D,yDAA8D;AAC9D,8CAAwC;AACxC,yCAAyC;AACzC,kDAAkD;AAelD;;GAEG;AACH,MAAa,SAAS;IACpB,4CAA4C;IACrC,GAAG,CAAY;IAEtB,+CAA+C;IACxC,MAAM,CAAe;IAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,YAAY,UAA4B,EAAE;QACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAChG,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAC5E,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAE3E,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BrB,CAAC,CAAC;QACC,CAAC;QAED,2BAAgB,CAAC,SAAS,CAAC;YACzB,GAAG,OAAO;YACV,QAAQ;YACR,YAAY;YACZ,YAAY;YACZ,MAAM,EAAE,KAAK;YACb,aAAa,EAAE,oBAAO;SACvB,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,GAAG,CAAC,2BAA2B,KAAK,MAAM,EAAE,CAAC;YACvD,IAAA,yCAA0B,EAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAChD,IAAA,yCAA0B,EAAC,kBAAS,EAAE,QAAQ,CAAC,CAAC;YAChD,IAAA,yCAA0B,EAAC,wBAAY,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,CAAC,GAAG,GAAG,IAAI,kBAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,wBAAY,EAAE,CAAC;IACnC,CAAC;CACF;AAjGD,8BAiGC"}
|
package/_cjs/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CdpClient = void 0;
|
|
4
|
-
require("./analytics.js");
|
|
5
4
|
var cdp_js_1 = require("./client/cdp.js");
|
|
6
5
|
Object.defineProperty(exports, "CdpClient", { enumerable: true, get: function () { return cdp_js_1.CdpClient; } });
|
|
7
6
|
//# sourceMappingURL=index.js.map
|
package/_cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAAnC,mGAAA,SAAS,OAAA"}
|
package/_cjs/version.js
CHANGED
package/_esm/analytics.js
CHANGED
|
@@ -1,26 +1,6 @@
|
|
|
1
1
|
import md5 from "md5";
|
|
2
|
-
import { CdpClient } from "./client/cdp.js";
|
|
3
|
-
import { EvmClient } from "./client/evm/evm.js";
|
|
4
|
-
import { SolanaClient } from "./client/solana/solana.js";
|
|
5
2
|
// This is a public client id for the analytics service
|
|
6
3
|
const publicClientId = "54f2ee2fb3d2b901a829940d70fbfc13";
|
|
7
|
-
/**
|
|
8
|
-
* AnalyticsConfig singleton class for holding the API key ID
|
|
9
|
-
*/
|
|
10
|
-
export class AnalyticsConfig {
|
|
11
|
-
/**
|
|
12
|
-
* The API key ID
|
|
13
|
-
*/
|
|
14
|
-
static apiKeyId;
|
|
15
|
-
/**
|
|
16
|
-
* Sets the API key ID
|
|
17
|
-
*
|
|
18
|
-
* @param apiKeyId - The API key ID
|
|
19
|
-
*/
|
|
20
|
-
static set(apiKeyId) {
|
|
21
|
-
AnalyticsConfig.apiKeyId = apiKeyId;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
4
|
/**
|
|
25
5
|
* Sends an analytics event to the default endpoint
|
|
26
6
|
*
|
|
@@ -30,7 +10,7 @@ export class AnalyticsConfig {
|
|
|
30
10
|
export async function sendEvent(event) {
|
|
31
11
|
const timestamp = Date.now();
|
|
32
12
|
const enhancedEvent = {
|
|
33
|
-
user_id:
|
|
13
|
+
user_id: event.apiKeyId,
|
|
34
14
|
event_type: event.name,
|
|
35
15
|
platform: "server",
|
|
36
16
|
timestamp,
|
|
@@ -65,13 +45,14 @@ export async function sendEvent(event) {
|
|
|
65
45
|
* Wraps all methods of a class with error tracking.
|
|
66
46
|
*
|
|
67
47
|
* @param ClassToWrap - The class whose prototype methods should be wrapped.
|
|
48
|
+
* @param apiKeyId - The API key ID to use for the error tracking.
|
|
68
49
|
*/
|
|
69
50
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
70
|
-
function wrapClassWithErrorTracking(ClassToWrap) {
|
|
71
|
-
const
|
|
72
|
-
for (const
|
|
73
|
-
const originalMethod = ClassToWrap.prototype[
|
|
74
|
-
ClassToWrap.prototype[
|
|
51
|
+
export function wrapClassWithErrorTracking(ClassToWrap, apiKeyId) {
|
|
52
|
+
const methods = Object.getOwnPropertyNames(ClassToWrap.prototype).filter(name => name !== "constructor" && typeof ClassToWrap.prototype[name] === "function");
|
|
53
|
+
for (const method of methods) {
|
|
54
|
+
const originalMethod = ClassToWrap.prototype[method];
|
|
55
|
+
ClassToWrap.prototype[method] = async function (...args) {
|
|
75
56
|
try {
|
|
76
57
|
return await originalMethod.apply(this, args);
|
|
77
58
|
}
|
|
@@ -80,22 +61,18 @@ function wrapClassWithErrorTracking(ClassToWrap) {
|
|
|
80
61
|
return;
|
|
81
62
|
}
|
|
82
63
|
const { message, stack } = error;
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
64
|
+
sendEvent({
|
|
65
|
+
apiKeyId,
|
|
66
|
+
method,
|
|
67
|
+
message,
|
|
68
|
+
stack,
|
|
69
|
+
name: "error",
|
|
70
|
+
}).catch(() => {
|
|
71
|
+
// ignore error
|
|
72
|
+
});
|
|
93
73
|
throw error;
|
|
94
74
|
}
|
|
95
75
|
};
|
|
96
76
|
}
|
|
97
77
|
}
|
|
98
|
-
wrapClassWithErrorTracking(CdpClient);
|
|
99
|
-
wrapClassWithErrorTracking(EvmClient);
|
|
100
|
-
wrapClassWithErrorTracking(SolanaClient);
|
|
101
78
|
//# sourceMappingURL=analytics.js.map
|
package/_esm/analytics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../analytics.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../analytics.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AA4BtB,uDAAuD;AACvD,MAAM,cAAc,GAAG,kCAAkC,CAAC;AAE1D;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAgB;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,MAAM,aAAa,GAAG;QACpB,OAAO,EAAE,KAAK,CAAC,QAAQ;QACvB,UAAU,EAAE,KAAK,CAAC,IAAI;QACtB,QAAQ,EAAE,QAAQ;QAClB,SAAS;QACT,gBAAgB,EAAE;YAChB,YAAY,EAAE,SAAS;YACvB,gBAAgB,EAAE,YAAY;YAC9B,GAAG,KAAK;SACT;KACF,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,aAAa,CAAC,CAAC;IAC/B,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC;IAExC,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB,GAAG,UAAU,CAAC,CAAC;IAExD,MAAM,oBAAoB,GAAG;QAC3B,MAAM,EAAE,cAAc;QACtB,CAAC,EAAE,oBAAoB;QACvB,QAAQ;KACT,CAAC;IAEF,MAAM,WAAW,GAAG,+BAA+B,CAAC;IACpD,MAAM,SAAS,GAAG,MAAM,CAAC;IACzB,MAAM,aAAa,GAAG,GAAG,WAAW,GAAG,SAAS,EAAE,CAAC;IAEnD,MAAM,KAAK,CAAC,aAAa,EAAE;QACzB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,SAAS;QACf,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC;KAC3C,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,8DAA8D;AAC9D,MAAM,UAAU,0BAA0B,CAAC,WAAgB,EAAE,QAAgB;IAC3E,MAAM,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CACtE,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,UAAU,CACpF,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACrD,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,KAAK,WAAW,GAAG,IAAe;YAChE,IAAI,CAAC;gBACH,OAAO,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAChD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;oBAC9B,OAAO;gBACT,CAAC;gBAED,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;gBAEjC,SAAS,CAAC;oBACR,QAAQ;oBACR,MAAM;oBACN,OAAO;oBACP,KAAK;oBACL,IAAI,EAAE,OAAO;iBACd,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;oBACZ,eAAe;gBACjB,CAAC,CAAC,CAAC;gBAEH,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;AACH,CAAC"}
|
package/_esm/auth/index.js
CHANGED
package/_esm/auth/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AAErD,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAC;AAErD,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
package/_esm/auth/utils/http.js
CHANGED
|
@@ -16,6 +16,7 @@ export async function getAuthHeaders(options) {
|
|
|
16
16
|
requestHost: options.requestHost,
|
|
17
17
|
requestPath: options.requestPath,
|
|
18
18
|
expiresIn: options.expiresIn,
|
|
19
|
+
audience: options.audience,
|
|
19
20
|
});
|
|
20
21
|
headers["Authorization"] = `Bearer ${jwt}`;
|
|
21
22
|
headers["Content-Type"] = "application/json";
|
|
@@ -54,7 +55,7 @@ function requiresWalletAuth(requestMethod, requestPath) {
|
|
|
54
55
|
* @param sourceVersion - The version of the source making the request
|
|
55
56
|
* @returns Encoded correlation data as a query string
|
|
56
57
|
*/
|
|
57
|
-
function getCorrelationData(source, sourceVersion) {
|
|
58
|
+
export function getCorrelationData(source, sourceVersion) {
|
|
58
59
|
const data = {
|
|
59
60
|
sdk_version: version,
|
|
60
61
|
sdk_language: "typescript",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../auth/utils/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"http.js","sourceRoot":"","sources":["../../../auth/utils/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAsE3C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAA8B;IAE9B,MAAM,OAAO,GAA2B,EAAE,CAAC;IAE3C,6BAA6B;IAC7B,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC,CAAC;IACH,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,GAAG,EAAE,CAAC;IAC3C,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB,CAAC;IAE7C,4BAA4B;IAC5B,IAAI,kBAAkB,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACnE,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,4IAA4I,CAC7I,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAG,MAAM,iBAAiB,CAAC;YAC9C,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,EAAE;SACvC,CAAC,CAAC;QACH,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC;IAC7C,CAAC;IAED,uBAAuB;IACvB,OAAO,CAAC,qBAAqB,CAAC,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAE3F,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kBAAkB,CAAC,aAAqB,EAAE,WAAmB;IACpE,OAAO,CACL,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,KAAK,MAAM,IAAI,aAAa,KAAK,QAAQ,CAAC,CAC/F,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAe,EAAE,aAAsB;IACxE,MAAM,IAAI,GAAG;QACX,WAAW,EAAE,OAAO;QACpB,YAAY,EAAE,YAAY;QAC1B,MAAM,EAAE,MAAM,IAAI,UAAU;KAC7B,CAAC;IACF,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,CAAC,gBAAgB,CAAC,GAAG,aAAa,CAAC;IACzC,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;SACrB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;SACrD,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC"}
|
package/_esm/auth/utils/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../auth/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../auth/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC"}
|
package/_esm/auth/utils/jwt.js
CHANGED
|
@@ -4,7 +4,9 @@ import { SignJWT, importPKCS8, importJWK } from "jose";
|
|
|
4
4
|
import { InvalidWalletSecretFormatError, UndefinedWalletSecretError } from "../errors.js";
|
|
5
5
|
/**
|
|
6
6
|
* Generates a JWT (also known as a Bearer token) for authenticating with Coinbase's REST APIs.
|
|
7
|
-
* Supports both EC (ES256) and Ed25519 (EdDSA) keys.
|
|
7
|
+
* Supports both EC (ES256) and Ed25519 (EdDSA) keys. Also supports JWTs meant for
|
|
8
|
+
* websocket connections by allowing requestMethod, requestHost, and requestPath to all be
|
|
9
|
+
* null, in which case the 'uris' claim is omitted from the JWT.
|
|
8
10
|
*
|
|
9
11
|
* @param options - The configuration options for generating the JWT
|
|
10
12
|
* @returns The generated JWT (Bearer token) string
|
|
@@ -18,19 +20,27 @@ export async function generateJwt(options) {
|
|
|
18
20
|
if (!options.apiKeySecret) {
|
|
19
21
|
throw new Error("Private key is required");
|
|
20
22
|
}
|
|
21
|
-
if
|
|
22
|
-
|
|
23
|
+
// Check if we have a REST API request or a websocket connection
|
|
24
|
+
const hasAllRequestParams = Boolean(options.requestMethod && options.requestHost && options.requestPath);
|
|
25
|
+
const hasNoRequestParams = (options.requestMethod === undefined || options.requestMethod === null) &&
|
|
26
|
+
(options.requestHost === undefined || options.requestHost === null) &&
|
|
27
|
+
(options.requestPath === undefined || options.requestPath === null);
|
|
28
|
+
// Ensure we either have all request parameters or none (for websocket)
|
|
29
|
+
if (!hasAllRequestParams && !hasNoRequestParams) {
|
|
30
|
+
throw new Error("Either all request details (method, host, path) must be provided, or all must be null for JWTs intended for websocket connections");
|
|
23
31
|
}
|
|
24
32
|
const now = Math.floor(Date.now() / 1000);
|
|
25
33
|
const expiresIn = options.expiresIn || 120; // Default to 120 seconds if not specified
|
|
26
|
-
const uri = `${options.requestMethod} ${options.requestHost}${options.requestPath}`;
|
|
27
34
|
// Prepare the JWT payload
|
|
28
35
|
const claims = {
|
|
29
36
|
sub: options.apiKeyId,
|
|
30
37
|
iss: "cdp",
|
|
31
|
-
aud: ["cdp_service"],
|
|
32
|
-
uris: [uri],
|
|
38
|
+
aud: options.audience || ["cdp_service"],
|
|
33
39
|
};
|
|
40
|
+
// Add the uris claim only for REST API requests
|
|
41
|
+
if (hasAllRequestParams) {
|
|
42
|
+
claims.uris = [`${options.requestMethod} ${options.requestHost}${options.requestPath}`];
|
|
43
|
+
}
|
|
34
44
|
// Generate random nonce for the header
|
|
35
45
|
const randomNonce = nonce();
|
|
36
46
|
// Determine if we're using EC or Edwards key based on the key format
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../../auth/utils/jwt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAE1C,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAc,MAAM,MAAM,CAAC;AAEnE,OAAO,EAAE,8BAA8B,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../../auth/utils/jwt.ts"],"names":[],"mappings":"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"}
|