@coinbase/cdp-sdk 1.1.2 → 1.2.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 +79 -0
- package/LICENSE +21 -0
- package/{dist → _cjs}/accounts/evm/toEvmServerAccount.js +1 -0
- package/_cjs/accounts/evm/toEvmServerAccount.js.map +1 -0
- package/{dist → _cjs}/accounts/evm/toEvmSmartAccount.js +1 -0
- package/_cjs/accounts/evm/toEvmSmartAccount.js.map +1 -0
- package/{dist → _cjs}/accounts/types.js +1 -0
- package/_cjs/accounts/types.js.map +1 -0
- package/{dist → _cjs}/actions/evm/sendUserOperation.js +1 -0
- package/_cjs/actions/evm/sendUserOperation.js.map +1 -0
- package/{dist → _cjs}/actions/evm/waitForUserOperation.js +10 -9
- package/_cjs/actions/evm/waitForUserOperation.js.map +1 -0
- package/{dist → _cjs}/analytics.js +7 -6
- package/_cjs/analytics.js.map +1 -0
- package/{dist → _cjs}/auth/errors.js +1 -0
- package/_cjs/auth/errors.js.map +1 -0
- package/{dist → _cjs}/auth/hooks/axios/index.js +2 -1
- package/_cjs/auth/hooks/axios/index.js.map +1 -0
- package/{dist → _cjs}/auth/hooks/axios/withAuth.js +3 -2
- package/_cjs/auth/hooks/axios/withAuth.js.map +1 -0
- package/{dist → _cjs}/auth/index.js +4 -3
- package/_cjs/auth/index.js.map +1 -0
- package/{dist → _cjs}/auth/utils/http.js +6 -5
- package/_cjs/auth/utils/http.js.map +1 -0
- package/{dist → _cjs}/auth/utils/index.js +3 -2
- package/_cjs/auth/utils/index.js.map +1 -0
- package/{dist → _cjs}/auth/utils/jwt.js +4 -3
- package/_cjs/auth/utils/jwt.js.map +1 -0
- package/{dist → _cjs}/client/cdp.js +13 -8
- package/_cjs/client/cdp.js.map +1 -0
- package/{dist → _cjs}/client/evm/evm.js +26 -25
- package/_cjs/client/evm/evm.js.map +1 -0
- package/{dist → _cjs}/client/evm/evm.types.js +1 -0
- package/_cjs/client/evm/evm.types.js.map +1 -0
- package/{dist → _cjs}/client/solana/index.js +3 -2
- package/_cjs/client/solana/index.js.map +1 -0
- package/{dist → _cjs}/client/solana/solana.js +9 -8
- package/_cjs/client/solana/solana.js.map +1 -0
- package/{dist → _cjs}/client/solana/solana.types.js +1 -0
- package/_cjs/client/solana/solana.types.js.map +1 -0
- package/{dist → _cjs}/constants.js +1 -0
- package/_cjs/constants.js.map +1 -0
- package/{dist → _cjs}/errors.js +1 -0
- package/_cjs/errors.js.map +1 -0
- package/{dist → _cjs}/index.js +4 -3
- package/_cjs/index.js.map +1 -0
- package/{dist → _cjs}/openapi-client/cdpApiClient.js +18 -14
- package/_cjs/openapi-client/cdpApiClient.js.map +1 -0
- package/{dist → _cjs}/openapi-client/errors.js +6 -0
- package/_cjs/openapi-client/errors.js.map +1 -0
- package/{dist → _cjs}/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js +31 -30
- package/_cjs/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js.map +1 -0
- package/{dist → _cjs}/openapi-client/generated/evm-accounts/evm-accounts.js +46 -41
- package/_cjs/openapi-client/generated/evm-accounts/evm-accounts.js.map +1 -0
- package/{dist → _cjs}/openapi-client/generated/evm-accounts/evm-accounts.msw.js +73 -40
- package/_cjs/openapi-client/generated/evm-accounts/evm-accounts.msw.js.map +1 -0
- package/_cjs/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js +69 -0
- package/_cjs/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js.map +1 -0
- package/_cjs/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js +188 -0
- package/_cjs/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js.map +1 -0
- package/{dist → _cjs}/openapi-client/generated/faucets/faucets.js +18 -13
- package/_cjs/openapi-client/generated/faucets/faucets.js.map +1 -0
- package/{dist → _cjs}/openapi-client/generated/faucets/faucets.msw.js +16 -12
- package/_cjs/openapi-client/generated/faucets/faucets.msw.js.map +1 -0
- package/{dist → _cjs}/openapi-client/generated/index.msw.js +5 -4
- package/_cjs/openapi-client/generated/index.msw.js.map +1 -0
- package/{dist → _cjs}/openapi-client/generated/solana-accounts/solana-accounts.js +38 -35
- package/_cjs/openapi-client/generated/solana-accounts/solana-accounts.js.map +1 -0
- package/{dist → _cjs}/openapi-client/generated/solana-accounts/solana-accounts.msw.js +68 -35
- package/_cjs/openapi-client/generated/solana-accounts/solana-accounts.msw.js.map +1 -0
- package/{dist → _cjs}/openapi-client/index.js +12 -11
- package/_cjs/openapi-client/index.js.map +1 -0
- package/_cjs/package.json +1 -0
- package/{dist → _cjs}/types/calls.js +1 -0
- package/_cjs/types/calls.js.map +1 -0
- package/{dist → _cjs}/types/contract.js +1 -0
- package/_cjs/types/contract.js.map +1 -0
- package/{dist → _cjs}/types/misc.js +1 -0
- package/_cjs/types/misc.js.map +1 -0
- package/{dist → _cjs}/types/multicall.js +1 -0
- package/_cjs/types/multicall.js.map +1 -0
- package/{dist → _cjs}/types/utils.js +1 -0
- package/_cjs/types/utils.js.map +1 -0
- package/{dist → _cjs}/utils/wait.js +3 -2
- package/_cjs/utils/wait.js.map +1 -0
- package/_cjs/version.js +5 -0
- package/_cjs/version.js.map +1 -0
- package/_esm/accounts/evm/toEvmServerAccount.js +40 -0
- package/_esm/accounts/evm/toEvmServerAccount.js.map +1 -0
- package/_esm/accounts/evm/toEvmSmartAccount.js +22 -0
- package/_esm/accounts/evm/toEvmSmartAccount.js.map +1 -0
- package/_esm/accounts/types.js +2 -0
- package/_esm/accounts/types.js.map +1 -0
- package/_esm/actions/evm/sendUserOperation.js +85 -0
- package/_esm/actions/evm/sendUserOperation.js.map +1 -0
- package/_esm/actions/evm/waitForUserOperation.js +58 -0
- package/_esm/actions/evm/waitForUserOperation.js.map +1 -0
- package/_esm/analytics.js +84 -0
- package/_esm/analytics.js.map +1 -0
- package/_esm/auth/errors.js +57 -0
- package/_esm/auth/errors.js.map +1 -0
- package/_esm/auth/hooks/axios/index.js +2 -0
- package/_esm/auth/hooks/axios/index.js.map +1 -0
- package/_esm/auth/hooks/axios/withAuth.js +71 -0
- package/_esm/auth/hooks/axios/withAuth.js.map +1 -0
- package/_esm/auth/index.js +5 -0
- package/_esm/auth/index.js.map +1 -0
- package/_esm/auth/utils/http.js +70 -0
- package/_esm/auth/utils/http.js.map +1 -0
- package/_esm/auth/utils/index.js +3 -0
- package/_esm/auth/utils/index.js.map +1 -0
- package/_esm/auth/utils/jwt.js +199 -0
- package/_esm/auth/utils/jwt.js.map +1 -0
- package/_esm/client/cdp.js +95 -0
- package/_esm/client/cdp.js.map +1 -0
- package/_esm/client/evm/evm.js +518 -0
- package/_esm/client/evm/evm.js.map +1 -0
- package/_esm/client/evm/evm.types.js +2 -0
- package/_esm/client/evm/evm.types.js.map +1 -0
- package/_esm/client/solana/index.js +2 -0
- package/_esm/client/solana/index.js.map +1 -0
- package/_esm/client/solana/solana.js +204 -0
- package/_esm/client/solana/solana.js.map +1 -0
- package/_esm/client/solana/solana.types.js +2 -0
- package/_esm/client/solana/solana.types.js.map +1 -0
- package/_esm/constants.js +5 -0
- package/_esm/constants.js.map +1 -0
- package/_esm/errors.js +18 -0
- package/_esm/errors.js.map +1 -0
- package/_esm/index.js +3 -0
- package/_esm/index.js.map +1 -0
- package/_esm/openapi-client/cdpApiClient.js +112 -0
- package/_esm/openapi-client/cdpApiClient.js.map +1 -0
- package/_esm/openapi-client/errors.js +71 -0
- package/_esm/openapi-client/errors.js.map +1 -0
- package/_esm/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js +52 -0
- package/_esm/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js.map +1 -0
- package/_esm/openapi-client/generated/evm-accounts/evm-accounts.js +80 -0
- package/_esm/openapi-client/generated/evm-accounts/evm-accounts.js.map +1 -0
- package/_esm/openapi-client/generated/evm-accounts/evm-accounts.msw.js +128 -0
- package/_esm/openapi-client/generated/evm-accounts/evm-accounts.msw.js.map +1 -0
- package/_esm/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js +60 -0
- package/_esm/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js.map +1 -0
- package/_esm/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js +172 -0
- package/_esm/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js.map +1 -0
- package/_esm/openapi-client/generated/faucets/faucets.js +51 -0
- package/_esm/openapi-client/generated/faucets/faucets.js.map +1 -0
- package/_esm/openapi-client/generated/faucets/faucets.msw.js +39 -0
- package/_esm/openapi-client/generated/faucets/faucets.msw.js.map +1 -0
- package/_esm/openapi-client/generated/index.msw.js +5 -0
- package/_esm/openapi-client/generated/index.msw.js.map +1 -0
- package/_esm/openapi-client/generated/solana-accounts/solana-accounts.js +73 -0
- package/_esm/openapi-client/generated/solana-accounts/solana-accounts.js.map +1 -0
- package/_esm/openapi-client/generated/solana-accounts/solana-accounts.msw.js +116 -0
- package/_esm/openapi-client/generated/solana-accounts/solana-accounts.msw.js.map +1 -0
- package/_esm/openapi-client/index.js +27 -0
- package/_esm/openapi-client/index.js.map +1 -0
- package/_esm/package.json +1 -0
- package/_esm/types/calls.js +4 -0
- package/_esm/types/calls.js.map +1 -0
- package/_esm/types/contract.js +4 -0
- package/_esm/types/contract.js.map +1 -0
- package/_esm/types/misc.js +3 -0
- package/_esm/types/misc.js.map +1 -0
- package/_esm/types/multicall.js +2 -0
- package/_esm/types/multicall.js.map +1 -0
- package/_esm/types/utils.js +4 -0
- package/_esm/types/utils.js.map +1 -0
- package/_esm/utils/wait.js +32 -0
- package/_esm/utils/wait.js.map +1 -0
- package/_esm/version.js +2 -0
- package/_esm/version.js.map +1 -0
- package/{dist → _types}/accounts/evm/toEvmServerAccount.d.ts +3 -2
- package/_types/accounts/evm/toEvmServerAccount.d.ts.map +1 -0
- package/{dist → _types}/accounts/evm/toEvmSmartAccount.d.ts +3 -2
- package/_types/accounts/evm/toEvmSmartAccount.d.ts.map +1 -0
- package/{dist → _types}/accounts/types.d.ts +3 -2
- package/_types/accounts/types.d.ts.map +1 -0
- package/{dist → _types}/actions/evm/sendUserOperation.d.ts +5 -5
- package/_types/actions/evm/sendUserOperation.d.ts.map +1 -0
- package/{dist → _types}/actions/evm/waitForUserOperation.d.ts +4 -3
- package/_types/actions/evm/waitForUserOperation.d.ts.map +1 -0
- package/{dist → _types}/analytics.d.ts +1 -0
- package/_types/analytics.d.ts.map +1 -0
- package/{dist → _types}/auth/errors.d.ts +1 -0
- package/_types/auth/errors.d.ts.map +1 -0
- package/_types/auth/hooks/axios/index.d.ts +2 -0
- package/_types/auth/hooks/axios/index.d.ts.map +1 -0
- package/{dist → _types}/auth/hooks/axios/withAuth.d.ts +1 -0
- package/_types/auth/hooks/axios/withAuth.d.ts.map +1 -0
- package/_types/auth/index.d.ts +5 -0
- package/_types/auth/index.d.ts.map +1 -0
- package/{dist → _types}/auth/utils/http.d.ts +1 -0
- package/_types/auth/utils/http.d.ts.map +1 -0
- package/_types/auth/utils/index.d.ts +3 -0
- package/_types/auth/utils/index.d.ts.map +1 -0
- package/{dist → _types}/auth/utils/jwt.d.ts +1 -0
- package/_types/auth/utils/jwt.d.ts.map +1 -0
- package/{dist → _types}/client/cdp.d.ts +3 -2
- package/_types/client/cdp.d.ts.map +1 -0
- package/{dist → _types}/client/evm/evm.d.ts +4 -3
- package/_types/client/evm/evm.d.ts.map +1 -0
- package/{dist → _types}/client/evm/evm.types.d.ts +7 -6
- package/_types/client/evm/evm.types.d.ts.map +1 -0
- package/_types/client/solana/index.d.ts +2 -0
- package/_types/client/solana/index.d.ts.map +1 -0
- package/{dist → _types}/client/solana/solana.d.ts +2 -1
- package/_types/client/solana/solana.d.ts.map +1 -0
- package/{dist → _types}/client/solana/solana.types.d.ts +2 -1
- package/_types/client/solana/solana.types.d.ts.map +1 -0
- package/{dist → _types}/constants.d.ts +1 -0
- package/_types/constants.d.ts.map +1 -0
- package/{dist → _types}/errors.d.ts +1 -0
- package/_types/errors.d.ts.map +1 -0
- package/_types/index.d.ts +4 -0
- package/_types/index.d.ts.map +1 -0
- package/{dist → _types}/openapi-client/cdpApiClient.d.ts +1 -0
- package/_types/openapi-client/cdpApiClient.d.ts.map +1 -0
- package/{dist → _types}/openapi-client/errors.d.ts +2 -1
- package/_types/openapi-client/errors.d.ts.map +1 -0
- package/{dist → _types}/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.d.ts +13 -12
- package/_types/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.d.ts.map +1 -0
- package/{dist → _types}/openapi-client/generated/evm-accounts/evm-accounts.d.ts +24 -23
- package/_types/openapi-client/generated/evm-accounts/evm-accounts.d.ts.map +1 -0
- package/{dist → _types}/openapi-client/generated/evm-accounts/evm-accounts.msw.d.ts +3 -2
- package/_types/openapi-client/generated/evm-accounts/evm-accounts.msw.d.ts.map +1 -0
- package/{dist → _types}/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.d.ts +21 -20
- package/_types/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.d.ts.map +1 -0
- package/{dist → _types}/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.d.ts +3 -2
- package/_types/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.d.ts.map +1 -0
- package/{dist → _types}/openapi-client/generated/faucets/faucets.d.ts +9 -8
- package/_types/openapi-client/generated/faucets/faucets.d.ts.map +1 -0
- package/{dist → _types}/openapi-client/generated/faucets/faucets.msw.d.ts +3 -2
- package/_types/openapi-client/generated/faucets/faucets.msw.d.ts.map +1 -0
- package/_types/openapi-client/generated/index.msw.d.ts +5 -0
- package/_types/openapi-client/generated/index.msw.d.ts.map +1 -0
- package/{dist → _types}/openapi-client/generated/solana-accounts/solana-accounts.d.ts +21 -20
- package/_types/openapi-client/generated/solana-accounts/solana-accounts.d.ts.map +1 -0
- package/{dist → _types}/openapi-client/generated/solana-accounts/solana-accounts.msw.d.ts +3 -2
- package/_types/openapi-client/generated/solana-accounts/solana-accounts.msw.d.ts.map +1 -0
- package/_types/openapi-client/index.d.ts +56 -0
- package/_types/openapi-client/index.d.ts.map +1 -0
- package/{dist → _types}/types/calls.d.ts +4 -3
- package/_types/types/calls.d.ts.map +1 -0
- package/{dist → _types}/types/contract.d.ts +3 -2
- package/_types/types/contract.d.ts.map +1 -0
- package/{dist → _types}/types/misc.d.ts +1 -0
- package/_types/types/misc.d.ts.map +1 -0
- package/{dist → _types}/types/multicall.d.ts +2 -1
- package/_types/types/multicall.d.ts.map +1 -0
- package/{dist → _types}/types/utils.d.ts +1 -0
- package/_types/types/utils.d.ts.map +1 -0
- package/{dist → _types}/utils/wait.d.ts +1 -0
- package/_types/utils/wait.d.ts.map +1 -0
- package/_types/version.d.ts +2 -0
- package/_types/version.d.ts.map +1 -0
- package/accounts/evm/toEvmServerAccount.ts +60 -0
- package/accounts/evm/toEvmSmartAccount.ts +37 -0
- package/accounts/types.ts +53 -0
- package/actions/evm/sendUserOperation.ts +163 -0
- package/actions/evm/waitForUserOperation.ts +115 -0
- package/analytics.ts +123 -0
- package/auth/README.md +145 -0
- package/auth/errors.ts +59 -0
- package/auth/hooks/axios/index.ts +1 -0
- package/auth/hooks/axios/withAuth.ts +120 -0
- package/auth/index.ts +5 -0
- package/auth/utils/http.ts +146 -0
- package/auth/utils/index.ts +2 -0
- package/auth/utils/jwt.ts +324 -0
- package/client/cdp.ts +113 -0
- package/client/evm/evm.ts +606 -0
- package/client/evm/evm.types.ts +303 -0
- package/client/solana/index.ts +1 -0
- package/client/solana/solana.ts +237 -0
- package/client/solana/solana.types.ts +114 -0
- package/constants.ts +4 -0
- package/errors.ts +17 -0
- package/index.ts +4 -0
- package/openapi-client/cdpApiClient.ts +214 -0
- package/openapi-client/errors.ts +96 -0
- package/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.ts +411 -0
- package/openapi-client/generated/evm-accounts/evm-accounts.msw.ts +242 -0
- package/openapi-client/generated/evm-accounts/evm-accounts.ts +150 -0
- package/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.ts +283 -0
- package/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.ts +131 -0
- package/openapi-client/generated/faucets/faucets.msw.ts +76 -0
- package/openapi-client/generated/faucets/faucets.ts +83 -0
- package/openapi-client/generated/index.msw.ts +4 -0
- package/openapi-client/generated/solana-accounts/solana-accounts.msw.ts +219 -0
- package/openapi-client/generated/solana-accounts/solana-accounts.ts +143 -0
- package/openapi-client/index.ts +32 -0
- package/package.json +31 -66
- package/types/calls.ts +40 -0
- package/types/contract.ts +126 -0
- package/types/misc.ts +5 -0
- package/types/multicall.ts +29 -0
- package/types/utils.ts +288 -0
- package/utils/wait.ts +52 -0
- package/version.ts +1 -0
- package/dist/auth/hooks/axios/index.d.ts +0 -1
- package/dist/auth/index.d.ts +0 -4
- package/dist/auth/utils/index.d.ts +0 -2
- package/dist/client/evm/index.d.ts +0 -1
- package/dist/client/evm/index.js +0 -5
- package/dist/client/solana/index.d.ts +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.js +0 -66
- package/dist/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js +0 -99
- package/dist/openapi-client/generated/index.msw.d.ts +0 -4
- package/dist/openapi-client/index.d.ts +0 -55
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { EvmUserOperationStatus, } from "../../openapi-client/index.js";
|
|
2
|
+
import { wait } from "../../utils/wait.js";
|
|
3
|
+
/**
|
|
4
|
+
* Waits for a user operation to complete or fail.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { waitForUserOperation } from "@coinbase/cdp-sdk";
|
|
9
|
+
*
|
|
10
|
+
* const result = await waitForUserOperation(client, {
|
|
11
|
+
* userOpHash: "0x1234567890123456789012345678901234567890",
|
|
12
|
+
* smartAccountAddress: "0x1234567890123456789012345678901234567890",
|
|
13
|
+
* waitOptions: {
|
|
14
|
+
* timeoutSeconds: 30,
|
|
15
|
+
* },
|
|
16
|
+
* });
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @param {CdpOpenApiClientType} client - The client to use to wait for the user operation.
|
|
20
|
+
* @param {WaitForUserOperationOptions} options - The options for the wait operation.
|
|
21
|
+
* @returns {Promise<WaitForUserOperationReturnType>} The result of the user operation.
|
|
22
|
+
*/
|
|
23
|
+
export async function waitForUserOperation(client, options) {
|
|
24
|
+
const { userOpHash, smartAccountAddress } = options;
|
|
25
|
+
const reload = async () => {
|
|
26
|
+
const response = await client.getUserOperation(smartAccountAddress, userOpHash);
|
|
27
|
+
return response;
|
|
28
|
+
};
|
|
29
|
+
const transform = (operation) => {
|
|
30
|
+
if (operation.status === EvmUserOperationStatus.failed) {
|
|
31
|
+
return {
|
|
32
|
+
smartAccountAddress: smartAccountAddress,
|
|
33
|
+
status: EvmUserOperationStatus.failed,
|
|
34
|
+
userOpHash: operation.userOpHash,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
else if (operation.status === EvmUserOperationStatus.complete) {
|
|
38
|
+
return {
|
|
39
|
+
smartAccountAddress: smartAccountAddress,
|
|
40
|
+
transactionHash: operation.transactionHash,
|
|
41
|
+
status: EvmUserOperationStatus.complete,
|
|
42
|
+
userOpHash: operation.userOpHash,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
throw new Error("User operation is not terminal");
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const waitOptions = options.waitOptions || {
|
|
50
|
+
timeoutSeconds: 30,
|
|
51
|
+
};
|
|
52
|
+
return await wait(reload, isTerminal, transform, waitOptions);
|
|
53
|
+
}
|
|
54
|
+
const isTerminal = (operation) => {
|
|
55
|
+
return (operation.status === EvmUserOperationStatus.complete ||
|
|
56
|
+
operation.status === EvmUserOperationStatus.failed);
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=waitForUserOperation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"waitForUserOperation.js","sourceRoot":"","sources":["../../../actions/evm/waitForUserOperation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,GAGvB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,IAAI,EAAe,MAAM,qBAAqB,CAAC;AA+CxD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAA4B,EAC5B,OAAoC;IAEpC,MAAM,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC;IAEpD,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;QACxB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;QAChF,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,SAA2B,EAAkC,EAAE;QAChF,IAAI,SAAS,CAAC,MAAM,KAAK,sBAAsB,CAAC,MAAM,EAAE,CAAC;YACvD,OAAO;gBACL,mBAAmB,EAAE,mBAAmB;gBACxC,MAAM,EAAE,sBAAsB,CAAC,MAAM;gBACrC,UAAU,EAAE,SAAS,CAAC,UAAiB;aACd,CAAC;QAC9B,CAAC;aAAM,IAAI,SAAS,CAAC,MAAM,KAAK,sBAAsB,CAAC,QAAQ,EAAE,CAAC;YAChE,OAAO;gBACL,mBAAmB,EAAE,mBAAmB;gBACxC,eAAe,EAAE,SAAS,CAAC,eAAgB;gBAC3C,MAAM,EAAE,sBAAsB,CAAC,QAAQ;gBACvC,UAAU,EAAE,SAAS,CAAC,UAAiB;aACX,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI;QACzC,cAAc,EAAE,EAAE;KACnB,CAAC;IAEF,OAAO,MAAM,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,SAA2B,EAAW,EAAE;IAC1D,OAAO,CACL,SAAS,CAAC,MAAM,KAAK,sBAAsB,CAAC,QAAQ;QACpD,SAAS,CAAC,MAAM,KAAK,sBAAsB,CAAC,MAAM,CACnD,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
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
|
+
/**
|
|
6
|
+
* Sends an analytics event to the default endpoint
|
|
7
|
+
*
|
|
8
|
+
* @param event - The event data containing event-specific fields
|
|
9
|
+
* @returns Promise that resolves when the event is sent
|
|
10
|
+
*/
|
|
11
|
+
export async function sendEvent(event) {
|
|
12
|
+
const timestamp = Date.now();
|
|
13
|
+
const enhancedEvent = {
|
|
14
|
+
event_type: event.name,
|
|
15
|
+
platform: "server",
|
|
16
|
+
event_properties: {
|
|
17
|
+
platform: "server",
|
|
18
|
+
project_name: "cdp-sdk",
|
|
19
|
+
time_start: timestamp,
|
|
20
|
+
cdp_sdk_language: "typescript",
|
|
21
|
+
...event,
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
const events = [enhancedEvent];
|
|
25
|
+
const stringifiedEventData = JSON.stringify(events);
|
|
26
|
+
const uploadTime = timestamp.toString();
|
|
27
|
+
const checksum = md5(stringifiedEventData + uploadTime);
|
|
28
|
+
const analyticsServiceData = {
|
|
29
|
+
e: stringifiedEventData,
|
|
30
|
+
checksum,
|
|
31
|
+
};
|
|
32
|
+
const apiEndpoint = "https://cca-lite.coinbase.com";
|
|
33
|
+
const eventPath = "/amp";
|
|
34
|
+
const eventEndPoint = `${apiEndpoint}${eventPath}`;
|
|
35
|
+
const response = await fetch(eventEndPoint, {
|
|
36
|
+
method: "POST",
|
|
37
|
+
mode: "no-cors",
|
|
38
|
+
headers: {
|
|
39
|
+
"Content-Type": "application/json",
|
|
40
|
+
},
|
|
41
|
+
body: JSON.stringify(analyticsServiceData),
|
|
42
|
+
});
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
throw new Error(`HTTP error! status: ${response.status}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Wraps all methods of a class with error tracking.
|
|
49
|
+
*
|
|
50
|
+
* @param ClassToWrap - The class whose prototype methods should be wrapped.
|
|
51
|
+
*/
|
|
52
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
53
|
+
function wrapClassWithErrorTracking(ClassToWrap) {
|
|
54
|
+
const methodNames = Object.getOwnPropertyNames(ClassToWrap.prototype).filter(name => name !== "constructor" && typeof ClassToWrap.prototype[name] === "function");
|
|
55
|
+
for (const methodName of methodNames) {
|
|
56
|
+
const originalMethod = ClassToWrap.prototype[methodName];
|
|
57
|
+
ClassToWrap.prototype[methodName] = async function (...args) {
|
|
58
|
+
try {
|
|
59
|
+
return await originalMethod.apply(this, args);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (!(error instanceof Error)) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const { message, stack } = error;
|
|
66
|
+
if (process.env.DISABLE_CDP_ERROR_REPORTING !== "true") {
|
|
67
|
+
sendEvent({
|
|
68
|
+
method: String(methodName),
|
|
69
|
+
message,
|
|
70
|
+
stack,
|
|
71
|
+
name: "error",
|
|
72
|
+
}).catch(() => {
|
|
73
|
+
// ignore error
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
throw error;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
wrapClassWithErrorTracking(CdpClient);
|
|
82
|
+
wrapClassWithErrorTracking(EvmClient);
|
|
83
|
+
wrapClassWithErrorTracking(SolanaClient);
|
|
84
|
+
//# sourceMappingURL=analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analytics.js","sourceRoot":"","sources":["../analytics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A class of errors for capturing stack traces.
|
|
3
|
+
*/
|
|
4
|
+
class BaseError extends Error {
|
|
5
|
+
/**
|
|
6
|
+
* Base error constructor.
|
|
7
|
+
*
|
|
8
|
+
* @param message - The message to display.
|
|
9
|
+
*/
|
|
10
|
+
constructor(message) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = this.constructor.name;
|
|
13
|
+
if (Error.captureStackTrace) {
|
|
14
|
+
Error.captureStackTrace(this, this.constructor);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* An error for invalid API key format.
|
|
20
|
+
*/
|
|
21
|
+
export class InvalidAPIKeyFormatError extends BaseError {
|
|
22
|
+
/**
|
|
23
|
+
* Invalid API key format error constructor.
|
|
24
|
+
*
|
|
25
|
+
* @param message - The message to display.
|
|
26
|
+
*/
|
|
27
|
+
constructor(message) {
|
|
28
|
+
super("Invalid API key format: " + message);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* An error for invalid Wallet Secret format.
|
|
33
|
+
*/
|
|
34
|
+
export class InvalidWalletSecretFormatError extends BaseError {
|
|
35
|
+
/**
|
|
36
|
+
* Invalid Wallet Secret format error constructor.
|
|
37
|
+
*
|
|
38
|
+
* @param message - The message to display.
|
|
39
|
+
*/
|
|
40
|
+
constructor(message) {
|
|
41
|
+
super("Invalid Wallet Secret format: " + message);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* An error for an undefined Wallet Secret.
|
|
46
|
+
*/
|
|
47
|
+
export class UndefinedWalletSecretError extends BaseError {
|
|
48
|
+
/**
|
|
49
|
+
* Undefined Wallet Secret error constructor.
|
|
50
|
+
*
|
|
51
|
+
* @param message - The message to display.
|
|
52
|
+
*/
|
|
53
|
+
constructor(message) {
|
|
54
|
+
super("Undefined Wallet Secret: " + message);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../auth/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,SAAU,SAAQ,KAAK;IAC3B;;;;OAIG;IACH,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,wBAAyB,SAAQ,SAAS;IACrD;;;;OAIG;IACH,YAAY,OAAe;QACzB,KAAK,CAAC,0BAA0B,GAAG,OAAO,CAAC,CAAC;IAC9C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,8BAA+B,SAAQ,SAAS;IAC3D;;;;OAIG;IACH,YAAY,OAAe;QACzB,KAAK,CAAC,gCAAgC,GAAG,OAAO,CAAC,CAAC;IACpD,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,0BAA2B,SAAQ,SAAS;IACvD;;;;OAIG;IACH,YAAY,OAAe;QACzB,KAAK,CAAC,2BAA2B,GAAG,OAAO,CAAC,CAAC;IAC/C,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../auth/hooks/axios/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { AxiosHeaders } from "axios";
|
|
2
|
+
import { getAuthHeaders } from "../../utils/http.js";
|
|
3
|
+
/**
|
|
4
|
+
* Axios interceptor for adding the JWT to the Authorization header.
|
|
5
|
+
*
|
|
6
|
+
* @param axiosClient - The Axios client instance to add the interceptor to
|
|
7
|
+
* @param options - Options for the request including API keys and debug flag
|
|
8
|
+
* @returns The modified request configuration with the Authorization header added
|
|
9
|
+
*/
|
|
10
|
+
export function withAuth(axiosClient, options) {
|
|
11
|
+
axiosClient.interceptors.request.use(async (axiosConfig) => {
|
|
12
|
+
const method = axiosConfig.method?.toString().toUpperCase() || "GET";
|
|
13
|
+
if (!axiosConfig.url) {
|
|
14
|
+
throw new Error("URL is required for authentication");
|
|
15
|
+
}
|
|
16
|
+
const fullyQualifiedURL = axiosClient.getUri() + axiosConfig.url;
|
|
17
|
+
// Parse URL to get host and path
|
|
18
|
+
const url = new URL(fullyQualifiedURL);
|
|
19
|
+
// Get authentication headers
|
|
20
|
+
const headers = await getAuthHeaders({
|
|
21
|
+
apiKeyId: options.apiKeyId,
|
|
22
|
+
apiKeySecret: options.apiKeySecret,
|
|
23
|
+
requestMethod: method,
|
|
24
|
+
requestHost: url.host,
|
|
25
|
+
requestPath: url.pathname,
|
|
26
|
+
requestBody: axiosConfig.data,
|
|
27
|
+
walletSecret: options.walletSecret,
|
|
28
|
+
source: options.source,
|
|
29
|
+
sourceVersion: options.sourceVersion,
|
|
30
|
+
expiresIn: options.expiresIn,
|
|
31
|
+
});
|
|
32
|
+
// Add headers to request config
|
|
33
|
+
axiosConfig.headers = new AxiosHeaders({
|
|
34
|
+
...axiosConfig.headers,
|
|
35
|
+
...headers,
|
|
36
|
+
});
|
|
37
|
+
if (options.debug) {
|
|
38
|
+
console.log("Request:", {
|
|
39
|
+
method,
|
|
40
|
+
url: fullyQualifiedURL,
|
|
41
|
+
headers: axiosConfig.headers,
|
|
42
|
+
data: axiosConfig.data,
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return axiosConfig;
|
|
46
|
+
});
|
|
47
|
+
if (options.debug) {
|
|
48
|
+
axiosClient.interceptors.response.use(response => {
|
|
49
|
+
console.log("Response:", {
|
|
50
|
+
status: response.status,
|
|
51
|
+
statusText: response.statusText,
|
|
52
|
+
headers: response.headers,
|
|
53
|
+
data: response.data,
|
|
54
|
+
});
|
|
55
|
+
return response;
|
|
56
|
+
}, error => {
|
|
57
|
+
// Ensure we have access to the error response details
|
|
58
|
+
const errorDetails = {
|
|
59
|
+
status: error.response?.status,
|
|
60
|
+
statusText: error.response?.statusText,
|
|
61
|
+
headers: error.response?.headers,
|
|
62
|
+
data: error.response?.data,
|
|
63
|
+
message: error.message,
|
|
64
|
+
};
|
|
65
|
+
console.error("Response Error:", errorDetails);
|
|
66
|
+
return Promise.reject(error);
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return axiosClient;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=withAuth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"withAuth.js","sourceRoot":"","sources":["../../../../auth/hooks/axios/withAuth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAE,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAqCrD;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,WAA0B,EAAE,OAA+B;IAClF,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAC,WAAW,EAAC,EAAE;QACvD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,WAAW,EAAE,IAAI,KAAK,CAAC;QAErE,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC;QAEjE,iCAAiC;QACjC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAEvC,6BAA6B;QAC7B,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC;YACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,aAAa,EAAE,MAAM;YACrB,WAAW,EAAE,GAAG,CAAC,IAAI;YACrB,WAAW,EAAE,GAAG,CAAC,QAAQ;YACzB,WAAW,EAAE,WAAW,CAAC,IAAI;YAC7B,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC,CAAC;QAEH,gCAAgC;QAChC,WAAW,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC;YACrC,GAAG,WAAW,CAAC,OAAO;YACtB,GAAG,OAAO;SACX,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE;gBACtB,MAAM;gBACN,GAAG,EAAE,iBAAiB;gBACtB,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,IAAI,EAAE,WAAW,CAAC,IAAI;aACvB,CAAC,CAAC;QACL,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACnC,QAAQ,CAAC,EAAE;YACT,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE;gBACvB,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;aACpB,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;QAClB,CAAC,EACD,KAAK,CAAC,EAAE;YACN,sDAAsD;YACtD,MAAM,YAAY,GAAG;gBACnB,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM;gBAC9B,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,UAAU;gBACtC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO;gBAChC,IAAI,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI;gBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC;YAEF,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAC;YAC/C,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CACF,CAAC;IACJ,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { generateWalletJwt, generateJwt } from "./jwt.js";
|
|
2
|
+
import { version } from "../../version.js";
|
|
3
|
+
/**
|
|
4
|
+
* Gets authentication headers for a request.
|
|
5
|
+
*
|
|
6
|
+
* @param options - The configuration options for generating auth headers
|
|
7
|
+
* @returns Object containing the authentication headers
|
|
8
|
+
*/
|
|
9
|
+
export async function getAuthHeaders(options) {
|
|
10
|
+
const headers = {};
|
|
11
|
+
// Generate and add JWT token
|
|
12
|
+
const jwt = await generateJwt({
|
|
13
|
+
apiKeyId: options.apiKeyId,
|
|
14
|
+
apiKeySecret: options.apiKeySecret,
|
|
15
|
+
requestMethod: options.requestMethod,
|
|
16
|
+
requestHost: options.requestHost,
|
|
17
|
+
requestPath: options.requestPath,
|
|
18
|
+
expiresIn: options.expiresIn,
|
|
19
|
+
});
|
|
20
|
+
headers["Authorization"] = `Bearer ${jwt}`;
|
|
21
|
+
headers["Content-Type"] = "application/json";
|
|
22
|
+
// Add wallet auth if needed
|
|
23
|
+
if (requiresWalletAuth(options.requestMethod, options.requestPath)) {
|
|
24
|
+
if (!options.walletSecret) {
|
|
25
|
+
throw new Error("Wallet Secret not configured. Please set the CDP_WALLET_SECRET environment variable, or pass it as an option to the CdpClient constructor.");
|
|
26
|
+
}
|
|
27
|
+
const walletAuthToken = await generateWalletJwt({
|
|
28
|
+
walletSecret: options.walletSecret,
|
|
29
|
+
requestMethod: options.requestMethod,
|
|
30
|
+
requestHost: options.requestHost,
|
|
31
|
+
requestPath: options.requestPath,
|
|
32
|
+
requestData: options.requestBody || {},
|
|
33
|
+
});
|
|
34
|
+
headers["X-Wallet-Auth"] = walletAuthToken;
|
|
35
|
+
}
|
|
36
|
+
// Add correlation data
|
|
37
|
+
headers["Correlation-Context"] = getCorrelationData(options.source, options.sourceVersion);
|
|
38
|
+
return headers;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Returns true if the request indicated by the method and URL requires wallet authentication.
|
|
42
|
+
*
|
|
43
|
+
* @param requestMethod - The HTTP method of the request
|
|
44
|
+
* @param requestPath - The URL path of the request
|
|
45
|
+
* @returns True if the request requires wallet authentication, false otherwise
|
|
46
|
+
*/
|
|
47
|
+
function requiresWalletAuth(requestMethod, requestPath) {
|
|
48
|
+
return (requestPath?.includes("/accounts") && (requestMethod === "POST" || requestMethod === "DELETE"));
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Returns encoded correlation data including the SDK version and language.
|
|
52
|
+
*
|
|
53
|
+
* @param source - The source identifier for the request
|
|
54
|
+
* @param sourceVersion - The version of the source making the request
|
|
55
|
+
* @returns Encoded correlation data as a query string
|
|
56
|
+
*/
|
|
57
|
+
function getCorrelationData(source, sourceVersion) {
|
|
58
|
+
const data = {
|
|
59
|
+
sdk_version: version,
|
|
60
|
+
sdk_language: "typescript",
|
|
61
|
+
source: source || "sdk-auth",
|
|
62
|
+
};
|
|
63
|
+
if (sourceVersion) {
|
|
64
|
+
data["source_version"] = sourceVersion;
|
|
65
|
+
}
|
|
66
|
+
return Object.keys(data)
|
|
67
|
+
.map(key => `${key}=${encodeURIComponent(data[key])}`)
|
|
68
|
+
.join(",");
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=http.js.map
|
|
@@ -0,0 +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;AAiE3C;;;;;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;KAC7B,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,SAAS,kBAAkB,CAAC,MAAe,EAAE,aAAsB;IACjE,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../auth/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import * as crypto from "crypto";
|
|
2
|
+
import { createPrivateKey } from "crypto";
|
|
3
|
+
import { SignJWT, importPKCS8, importJWK } from "jose";
|
|
4
|
+
import { InvalidWalletSecretFormatError, UndefinedWalletSecretError } from "../errors.js";
|
|
5
|
+
/**
|
|
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.
|
|
8
|
+
*
|
|
9
|
+
* @param options - The configuration options for generating the JWT
|
|
10
|
+
* @returns The generated JWT (Bearer token) string
|
|
11
|
+
* @throws {Error} If required parameters are missing, invalid, or if JWT signing fails
|
|
12
|
+
*/
|
|
13
|
+
export async function generateJwt(options) {
|
|
14
|
+
// Validate required parameters
|
|
15
|
+
if (!options.apiKeyId) {
|
|
16
|
+
throw new Error("Key name is required");
|
|
17
|
+
}
|
|
18
|
+
if (!options.apiKeySecret) {
|
|
19
|
+
throw new Error("Private key is required");
|
|
20
|
+
}
|
|
21
|
+
if (!options.requestMethod || !options.requestHost || !options.requestPath) {
|
|
22
|
+
throw new Error("Request details (method, host, path) are required");
|
|
23
|
+
}
|
|
24
|
+
const now = Math.floor(Date.now() / 1000);
|
|
25
|
+
const expiresIn = options.expiresIn || 120; // Default to 120 seconds if not specified
|
|
26
|
+
const uri = `${options.requestMethod} ${options.requestHost}${options.requestPath}`;
|
|
27
|
+
// Prepare the JWT payload
|
|
28
|
+
const claims = {
|
|
29
|
+
sub: options.apiKeyId,
|
|
30
|
+
iss: "cdp",
|
|
31
|
+
aud: ["cdp_service"],
|
|
32
|
+
uris: [uri],
|
|
33
|
+
};
|
|
34
|
+
// Generate random nonce for the header
|
|
35
|
+
const randomNonce = nonce();
|
|
36
|
+
// Determine if we're using EC or Edwards key based on the key format
|
|
37
|
+
if (isValidECKey(options.apiKeySecret)) {
|
|
38
|
+
return await buildECJWT(options.apiKeySecret, options.apiKeyId, claims, now, expiresIn, randomNonce);
|
|
39
|
+
}
|
|
40
|
+
else if (isValidEd25519Key(options.apiKeySecret)) {
|
|
41
|
+
return await buildEdwardsJWT(options.apiKeySecret, options.apiKeyId, claims, now, expiresIn, randomNonce);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
throw new Error("Invalid key format - must be either PEM EC key or base64 Ed25519 key");
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Generates a wallet authentication JWT for the given API endpoint URL.
|
|
49
|
+
* Used for authenticating with specific endpoints that require wallet authentication.
|
|
50
|
+
*
|
|
51
|
+
* @param options - The configuration options for generating the JWT
|
|
52
|
+
* @returns The generated JWT (Bearer token) string
|
|
53
|
+
* @throws {UndefinedWalletSecretError} If the Wallet Secret is not defined.
|
|
54
|
+
* @throws {InvalidWalletSecretFormatError} If the private key is not in the correct format or signing fails.
|
|
55
|
+
*/
|
|
56
|
+
export async function generateWalletJwt(options) {
|
|
57
|
+
if (!options.walletSecret) {
|
|
58
|
+
throw new UndefinedWalletSecretError("Wallet Secret is not defined");
|
|
59
|
+
}
|
|
60
|
+
const uri = `${options.requestMethod} ${options.requestHost}${options.requestPath}`;
|
|
61
|
+
const now = Math.floor(Date.now() / 1000);
|
|
62
|
+
const claims = {
|
|
63
|
+
uris: [uri],
|
|
64
|
+
};
|
|
65
|
+
if (Object.keys(options.requestData).length > 0) {
|
|
66
|
+
claims.req = options.requestData;
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
const ecKey = createPrivateKey({
|
|
70
|
+
key: options.walletSecret,
|
|
71
|
+
format: "der",
|
|
72
|
+
type: "pkcs8",
|
|
73
|
+
encoding: "base64",
|
|
74
|
+
});
|
|
75
|
+
return await new SignJWT(claims)
|
|
76
|
+
.setProtectedHeader({ alg: "ES256", typ: "JWT" })
|
|
77
|
+
.setIssuedAt(now)
|
|
78
|
+
.setNotBefore(now)
|
|
79
|
+
.setJti(nonce())
|
|
80
|
+
.sign(ecKey);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
throw new InvalidWalletSecretFormatError("Could not create the EC key: " + error);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Determines if a string could be a valid Ed25519 key
|
|
88
|
+
*
|
|
89
|
+
* @param str - The string to test
|
|
90
|
+
* @returns True if the string could be a valid Ed25519 key, false otherwise
|
|
91
|
+
*/
|
|
92
|
+
function isValidEd25519Key(str) {
|
|
93
|
+
try {
|
|
94
|
+
const decoded = Buffer.from(str, "base64");
|
|
95
|
+
return decoded.length === 64;
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Determines if a string is a valid EC private key in PEM format
|
|
103
|
+
*
|
|
104
|
+
* @param str - The string to test
|
|
105
|
+
* @returns True if the string is a valid EC private key in PEM format
|
|
106
|
+
*/
|
|
107
|
+
function isValidECKey(str) {
|
|
108
|
+
try {
|
|
109
|
+
// Attempt to create a private key object - will throw if invalid
|
|
110
|
+
const key = createPrivateKey(str);
|
|
111
|
+
// Check if it's an EC key by examining its asymmetric key type
|
|
112
|
+
return key.asymmetricKeyType === "ec";
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Builds a JWT using an EC key.
|
|
120
|
+
*
|
|
121
|
+
* @param privateKey - The EC private key in PEM format
|
|
122
|
+
* @param keyName - The key name/ID
|
|
123
|
+
* @param claims - The JWT claims
|
|
124
|
+
* @param now - Current timestamp in seconds
|
|
125
|
+
* @param expiresIn - Number of seconds until the token expires
|
|
126
|
+
* @param nonce - Random nonce for the JWT header
|
|
127
|
+
* @returns A JWT token signed with an EC key
|
|
128
|
+
* @throws {Error} If key conversion, import, or signing fails
|
|
129
|
+
*/
|
|
130
|
+
async function buildECJWT(privateKey, keyName, claims, now, expiresIn, nonce) {
|
|
131
|
+
try {
|
|
132
|
+
// Convert to PKCS8 format
|
|
133
|
+
const keyObj = createPrivateKey(privateKey);
|
|
134
|
+
const pkcs8Key = keyObj.export({ type: "pkcs8", format: "pem" }).toString();
|
|
135
|
+
// Import the key for signing
|
|
136
|
+
const ecKey = await importPKCS8(pkcs8Key, "ES256");
|
|
137
|
+
// Sign and return the JWT
|
|
138
|
+
return await new SignJWT(claims)
|
|
139
|
+
.setProtectedHeader({ alg: "ES256", kid: keyName, typ: "JWT", nonce })
|
|
140
|
+
.setIssuedAt(Math.floor(now))
|
|
141
|
+
.setNotBefore(Math.floor(now))
|
|
142
|
+
.setExpirationTime(Math.floor(now + expiresIn))
|
|
143
|
+
.sign(ecKey);
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
throw new Error(`Failed to generate EC JWT: ${error.message}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Builds a JWT using an Ed25519 key.
|
|
151
|
+
*
|
|
152
|
+
* @param privateKey - The Ed25519 private key in base64 format
|
|
153
|
+
* @param keyName - The key name/ID
|
|
154
|
+
* @param claims - The JWT claims
|
|
155
|
+
* @param now - Current timestamp in seconds
|
|
156
|
+
* @param expiresIn - Number of seconds until the token expires
|
|
157
|
+
* @param nonce - Random nonce for the JWT header
|
|
158
|
+
* @returns A JWT token using an Ed25519 key
|
|
159
|
+
* @throws {Error} If key parsing, import, or signing fails
|
|
160
|
+
*/
|
|
161
|
+
async function buildEdwardsJWT(privateKey, keyName, claims, now, expiresIn, nonce) {
|
|
162
|
+
try {
|
|
163
|
+
// Decode the base64 key (expecting 64 bytes: 32 for seed + 32 for public key)
|
|
164
|
+
const decoded = Buffer.from(privateKey, "base64");
|
|
165
|
+
if (decoded.length !== 64) {
|
|
166
|
+
throw new Error("Invalid Ed25519 key length");
|
|
167
|
+
}
|
|
168
|
+
const seed = decoded.subarray(0, 32);
|
|
169
|
+
const publicKey = decoded.subarray(32);
|
|
170
|
+
// Create JWK from the key components
|
|
171
|
+
const jwk = {
|
|
172
|
+
kty: "OKP",
|
|
173
|
+
crv: "Ed25519",
|
|
174
|
+
d: seed.toString("base64url"),
|
|
175
|
+
x: publicKey.toString("base64url"),
|
|
176
|
+
};
|
|
177
|
+
// Import the key for signing
|
|
178
|
+
const key = await importJWK(jwk, "EdDSA");
|
|
179
|
+
// Sign and return the JWT
|
|
180
|
+
return await new SignJWT(claims)
|
|
181
|
+
.setProtectedHeader({ alg: "EdDSA", kid: keyName, typ: "JWT", nonce })
|
|
182
|
+
.setIssuedAt(Math.floor(now))
|
|
183
|
+
.setNotBefore(Math.floor(now))
|
|
184
|
+
.setExpirationTime(Math.floor(now + expiresIn))
|
|
185
|
+
.sign(key);
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
throw new Error(`Failed to generate Ed25519 JWT: ${error.message}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Generates a random nonce for the JWT.
|
|
193
|
+
*
|
|
194
|
+
* @returns {string} The generated nonce.
|
|
195
|
+
*/
|
|
196
|
+
function nonce() {
|
|
197
|
+
return crypto.randomBytes(16).toString("hex");
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=jwt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt.js","sourceRoot":"","sources":["../../../auth/utils/jwt.ts"],"names":[],"mappings":"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"}
|