@coinbase/agentkit 0.7.1 → 0.8.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 CHANGED
@@ -65,8 +65,8 @@ npm install @coinbase/agentkit
65
65
 
66
66
  ```typescript
67
67
  const agentKit = await AgentKit.from({
68
- cdpApiKeyName: "CDP API KEY NAME",
69
- cdpApiKeyPrivate: "CDP API KEY PRIVATE KEY",
68
+ cdpApiKeyId: "CDP API KEY NAME",
69
+ cdpApiKeyPrivate: "CDP API KEY SECRET",
70
70
  });
71
71
  ```
72
72
 
@@ -76,8 +76,8 @@ If no wallet or action provider are specified, the agent will use the `CdpWallet
76
76
 
77
77
  ```typescript
78
78
  const agentKit = await AgentKit.from({
79
- cdpApiKeyName: "CDP API KEY NAME",
80
- cdpApiKeyPrivate: "CDP API KEY PRIVATE KEY",
79
+ cdpApiKeyId: "CDP API KEY NAME",
80
+ cdpApiKeyPrivate: "CDP API KEY SECRET",
81
81
  });
82
82
  ```
83
83
 
@@ -87,8 +87,8 @@ const agentKit = await AgentKit.from({
87
87
  import { CdpWalletProvider } from "@coinbase/agentkit";
88
88
 
89
89
  const walletProvider = await CdpWalletProvider.configureWithWallet({
90
- apiKeyName: "CDP API KEY NAME",
91
- apiKeyPrivate: "CDP API KEY PRIVATE KEY",
90
+ apiKeyId: "CDP API KEY NAME",
91
+ apiKeyPrivate: "CDP API KEY SECRET",
92
92
  networkId: "base-mainnet",
93
93
  });
94
94
 
@@ -106,8 +106,8 @@ const agentKit = await AgentKit.from({
106
106
  walletProvider,
107
107
  actionProviders: [
108
108
  cdpApiActionProvider({
109
- apiKeyName: "CDP API KEY NAME",
110
- apiKeyPrivate: "CDP API KEY PRIVATE KEY",
109
+ apiKeyId: "CDP API KEY NAME",
110
+ apiKeyPrivate: "CDP API KEY SECRET",
111
111
  }),
112
112
  pythActionProvider(),
113
113
  ],
@@ -528,8 +528,8 @@ This gives your agent access to the actions defined in the action provider.
528
528
 
529
529
  ```typescript
530
530
  const agentKit = new AgentKit({
531
- cdpApiKeyName: "CDP API KEY NAME",
532
- cdpApiKeyPrivate: "CDP API KEY PRIVATE KEY",
531
+ cdpApiKeyId: "CDP API KEY NAME",
532
+ cdpApiKeyPrivate: "CDP API KEY SECRET",
533
533
  actionProviders: [myActionProvider()],
534
534
  });
535
535
  ```
@@ -621,8 +621,8 @@ The `CdpWalletProvider` can be configured to use a specific network by passing t
621
621
  import { CdpWalletProvider } from "@coinbase/agentkit";
622
622
 
623
623
  const walletProvider = await CdpWalletProvider.configureWithWallet({
624
- apiKeyName: "CDP API KEY NAME",
625
- apiKeyPrivate: "CDP API KEY PRIVATE KEY",
624
+ apiKeyId: "CDP API KEY NAME",
625
+ apiKeyPrivate: "CDP API KEY SECRET",
626
626
  networkId: "base-mainnet",
627
627
  });
628
628
  ```
@@ -636,8 +636,8 @@ import { CdpWalletProvider } from "@coinbase/agentkit";
636
636
  import { Wallet } from "@coinbase/coinbase-sdk";
637
637
  const walletProvider = await CdpWalletProvider.configureWithWallet({
638
638
  wallet,
639
- apiKeyName: "CDP API KEY NAME",
640
- apiKeyPrivate: "CDP API KEY PRIVATE KEY",
639
+ apiKeyId: "CDP API KEY NAME",
640
+ apiKeyPrivate: "CDP API KEY SECRET",
641
641
  });
642
642
  ```
643
643
 
@@ -678,8 +678,8 @@ import { CdpWalletProvider } from "@coinbase/agentkit";
678
678
 
679
679
  const walletProvider = await CdpWalletProvider.configureWithWallet({
680
680
  cdpWalletData: "WALLET DATA JSON STRING",
681
- apiKeyName: "CDP API KEY NAME",
682
- apiKeyPrivate: "CDP API KEY PRIVATE KEY",
681
+ apiKeyId: "CDP API KEY NAME",
682
+ apiKeyPrivate: "CDP API KEY SECRET",
683
683
  });
684
684
  ```
685
685
 
@@ -692,8 +692,8 @@ import { CdpWalletProvider } from "@coinbase/agentkit";
692
692
 
693
693
  const walletProvider = await CdpWalletProvider.configureWithWallet({
694
694
  cdpWalletData: "WALLET DATA JSON STRING",
695
- apiKeyName: "CDP API KEY NAME",
696
- apiKeyPrivate: "CDP API KEY PRIVATE KEY",
695
+ apiKeyId: "CDP API KEY NAME",
696
+ apiKeyPrivate: "CDP API KEY SECRET",
697
697
  gas: {
698
698
  gasLimitMultiplier: 2.0, // Adjusts gas limit estimation
699
699
  feePerGasMultiplier: 2.0, // Adjusts max fee per gas
@@ -879,8 +879,8 @@ import { ZeroDevWalletProvider, CdpWalletProvider } from "@coinbase/agentkit";
879
879
 
880
880
  // First create a CDP wallet provider as the signer
881
881
  const cdpWalletProvider = await CdpWalletProvider.configureWithWallet({
882
- apiKeyName: "CDP API KEY NAME",
883
- apiKeyPrivate: "CDP API KEY PRIVATE KEY",
882
+ apiKeyId: "CDP API KEY NAME",
883
+ apiKeyPrivate: "CDP API KEY SECRET",
884
884
  networkId: "base-mainnet",
885
885
  });
886
886
 
@@ -39,10 +39,10 @@ class CdpApiActionProvider extends actionProvider_1.ActionProvider {
39
39
  * @returns True if the Cdp action provider supports the network, false otherwise.
40
40
  */
41
41
  this.supportsNetwork = (_) => true;
42
- if (config.apiKeyName && config.apiKeyPrivateKey) {
42
+ if (config.apiKeyId && config.apiKeySecret) {
43
43
  coinbase_sdk_1.Coinbase.configure({
44
- apiKeyName: config.apiKeyName,
45
- privateKey: config.apiKeyPrivateKey?.replace(/\\n/g, "\n"),
44
+ apiKeyName: config.apiKeyId,
45
+ privateKey: config.apiKeySecret?.replace(/\\n/g, "\n"),
46
46
  source: "agentkit",
47
47
  sourceVersion: package_json_1.version,
48
48
  });
@@ -38,10 +38,10 @@ class CdpWalletActionProvider extends actionProvider_1.ActionProvider {
38
38
  * @returns True if the Cdp action provider supports the network, false otherwise.
39
39
  */
40
40
  this.supportsNetwork = (network) => network.protocolFamily === "evm";
41
- if (config.apiKeyName && config.apiKeyPrivateKey) {
41
+ if (config.apiKeyId && config.apiKeySecret) {
42
42
  coinbase_sdk_1.Coinbase.configure({
43
- apiKeyName: config.apiKeyName,
44
- privateKey: config.apiKeyPrivateKey?.replace(/\\n/g, "\n"),
43
+ apiKeyName: config.apiKeyId,
44
+ privateKey: config.apiKeySecret?.replace(/\\n/g, "\n"),
45
45
  source: "agentkit",
46
46
  sourceVersion: package_json_1.version,
47
47
  });
@@ -1,16 +1,14 @@
1
1
  import { z } from "zod";
2
2
  import { Network } from "../../network";
3
3
  import { WalletProvider } from "../../wallet-providers";
4
- import { WalletProviderWithClient } from "../../wallet-providers/cdpV2Shared";
5
4
  import { ActionProvider } from "../actionProvider";
6
5
  import { RequestFaucetFundsV2Schema } from "./schemas";
7
- type CdpV2WalletProviderWithClient = WalletProvider & WalletProviderWithClient;
8
6
  /**
9
7
  * CdpApiActionProvider is an action provider for CDP API.
10
8
  *
11
9
  * This provider is used for any action that uses the CDP API, but does not require a CDP Wallet.
12
10
  */
13
- export declare class CdpApiV2ActionProvider extends ActionProvider<CdpV2WalletProviderWithClient> {
11
+ export declare class CdpApiV2ActionProvider extends ActionProvider<WalletProvider> {
14
12
  /**
15
13
  * Constructor for the CdpApiActionProvider class.
16
14
  */
@@ -22,7 +20,7 @@ export declare class CdpApiV2ActionProvider extends ActionProvider<CdpV2WalletPr
22
20
  * @param args - The input arguments for the action.
23
21
  * @returns A confirmation message with transaction details.
24
22
  */
25
- faucet(walletProvider: CdpV2WalletProviderWithClient, args: z.infer<typeof RequestFaucetFundsV2Schema>): Promise<string>;
23
+ faucet(walletProvider: WalletProvider, args: z.infer<typeof RequestFaucetFundsV2Schema>): Promise<string>;
26
24
  /**
27
25
  * Checks if the Cdp action provider supports the given network.
28
26
  *
@@ -34,4 +32,3 @@ export declare class CdpApiV2ActionProvider extends ActionProvider<CdpV2WalletPr
34
32
  supportsNetwork: (_: Network) => boolean;
35
33
  }
36
34
  export declare const cdpApiV2ActionProvider: () => CdpApiV2ActionProvider;
37
- export {};
@@ -11,6 +11,8 @@ var __metadata = (this && this.__metadata) || function (k, v) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.cdpApiV2ActionProvider = exports.CdpApiV2ActionProvider = void 0;
13
13
  const zod_1 = require("zod");
14
+ const wallet_providers_1 = require("../../wallet-providers");
15
+ const cdpV2Shared_1 = require("../../wallet-providers/cdpV2Shared");
14
16
  const actionDecorator_1 = require("../actionDecorator");
15
17
  const actionProvider_1 = require("../actionProvider");
16
18
  const schemas_1 = require("./schemas");
@@ -45,29 +47,34 @@ class CdpApiV2ActionProvider extends actionProvider_1.ActionProvider {
45
47
  async faucet(walletProvider, args) {
46
48
  const network = walletProvider.getNetwork();
47
49
  const networkId = network.networkId;
48
- if (network.protocolFamily === "evm") {
49
- if (networkId !== "base-sepolia" && networkId !== "ethereum-sepolia") {
50
- throw new Error("Faucet is only supported on 'base-sepolia' or 'ethereum-sepolia' evm networks.");
50
+ if ((0, cdpV2Shared_1.isWalletProviderWithClient)(walletProvider)) {
51
+ if (network.protocolFamily === "evm") {
52
+ if (networkId !== "base-sepolia" && networkId !== "ethereum-sepolia") {
53
+ throw new Error("Faucet is only supported on 'base-sepolia' or 'ethereum-sepolia' evm networks.");
54
+ }
55
+ const faucetTx = await walletProvider.getClient().evm.requestFaucet({
56
+ address: walletProvider.getAddress(),
57
+ token: (args.assetId || "eth"),
58
+ network: networkId,
59
+ });
60
+ return `Received ${args.assetId || "ETH"} from the faucet. Transaction hash: ${faucetTx.transactionHash}`;
51
61
  }
52
- const faucetTx = await walletProvider.getClient().evm.requestFaucet({
53
- address: walletProvider.getAddress(),
54
- token: (args.assetId || "eth"),
55
- network: networkId,
56
- });
57
- return `Received ${args.assetId || "ETH"} from the faucet. Transaction hash: ${faucetTx.transactionHash}`;
58
- }
59
- else if (network.protocolFamily === "svm") {
60
- if (networkId !== "solana-devnet") {
61
- throw new Error("Faucet is only supported on 'solana-devnet' solana networks.");
62
+ else if (network.protocolFamily === "svm") {
63
+ if (networkId !== "solana-devnet") {
64
+ throw new Error("Faucet is only supported on 'solana-devnet' solana networks.");
65
+ }
66
+ const faucetTx = await walletProvider.getClient().solana.requestFaucet({
67
+ address: walletProvider.getAddress(),
68
+ token: (args.assetId || "sol"),
69
+ });
70
+ return `Received ${args.assetId || "SOL"} from the faucet. Transaction signature hash: ${faucetTx.signature}`;
71
+ }
72
+ else {
73
+ throw new Error("Faucet is only supported on Ethereum and Solana protocol families.");
62
74
  }
63
- const faucetTx = await walletProvider.getClient().solana.requestFaucet({
64
- address: walletProvider.getAddress(),
65
- token: (args.assetId || "sol"),
66
- });
67
- return `Received ${args.assetId || "SOL"} from the faucet. Transaction signature hash: ${faucetTx.signature}`;
68
75
  }
69
76
  else {
70
- throw new Error("Faucet is only supported on Ethereum and Solana protocol families.");
77
+ throw new Error("Wallet provider is not a CDP Wallet Provider.");
71
78
  }
72
79
  }
73
80
  }
@@ -84,7 +91,7 @@ from another wallet and provide the user with your wallet details.`,
84
91
  schema: schemas_1.RequestFaucetFundsV2Schema,
85
92
  }),
86
93
  __metadata("design:type", Function),
87
- __metadata("design:paramtypes", [Object, void 0]),
94
+ __metadata("design:paramtypes", [wallet_providers_1.WalletProvider, void 0]),
88
95
  __metadata("design:returntype", Promise)
89
96
  ], CdpApiV2ActionProvider.prototype, "faucet", null);
90
97
  const cdpApiV2ActionProvider = () => new CdpApiV2ActionProvider();
@@ -4,8 +4,8 @@ import { Action, ActionProvider } from "./action-providers";
4
4
  * Configuration options for AgentKit
5
5
  */
6
6
  export type AgentKitOptions = {
7
- cdpApiKeyName?: string;
8
- cdpApiKeyPrivateKey?: string;
7
+ cdpApiKeyId?: string;
8
+ cdpApiKeySecret?: string;
9
9
  walletProvider?: WalletProvider;
10
10
  actionProviders?: ActionProvider[];
11
11
  };
package/dist/agentkit.js CHANGED
@@ -32,12 +32,12 @@ class AgentKit {
32
32
  static async from(config = { actionProviders: [(0, action_providers_1.walletActionProvider)()] }) {
33
33
  let walletProvider = config.walletProvider;
34
34
  if (!config.walletProvider) {
35
- if (!config.cdpApiKeyName || !config.cdpApiKeyPrivateKey) {
36
- throw new Error("cdpApiKeyName and cdpApiKeyPrivateKey are required if not providing a walletProvider");
35
+ if (!config.cdpApiKeyId || !config.cdpApiKeySecret) {
36
+ throw new Error("cdpApiKeyId and cdpApiKeySecret are required if not providing a walletProvider");
37
37
  }
38
38
  walletProvider = await wallet_providers_1.CdpWalletProvider.configureWithWallet({
39
- apiKeyName: config.cdpApiKeyName,
40
- apiKeyPrivateKey: config.cdpApiKeyPrivateKey,
39
+ apiKeyId: config.cdpApiKeyId,
40
+ apiKeySecret: config.cdpApiKeySecret,
41
41
  });
42
42
  }
43
43
  return new AgentKit({ ...config, walletProvider: walletProvider });
@@ -118,9 +118,29 @@ class CdpV2EvmWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
118
118
  * @returns The hash of the transaction.
119
119
  */
120
120
  async sendTransaction(transaction) {
121
+ const txWithGasParams = {
122
+ ...transaction,
123
+ chainId: __classPrivateFieldGet(this, _CdpV2EvmWalletProvider_network, "f").chainId,
124
+ };
125
+ if (!txWithGasParams.maxFeePerGas && !txWithGasParams.gasPrice) {
126
+ const feeData = await __classPrivateFieldGet(this, _CdpV2EvmWalletProvider_publicClient, "f").estimateFeesPerGas();
127
+ txWithGasParams.maxFeePerGas = feeData.maxFeePerGas;
128
+ txWithGasParams.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas;
129
+ }
130
+ if (!txWithGasParams.gas) {
131
+ try {
132
+ txWithGasParams.gas = await __classPrivateFieldGet(this, _CdpV2EvmWalletProvider_publicClient, "f").estimateGas({
133
+ account: __classPrivateFieldGet(this, _CdpV2EvmWalletProvider_serverAccount, "f").address,
134
+ ...txWithGasParams,
135
+ });
136
+ }
137
+ catch (error) {
138
+ console.warn("Failed to estimate gas, continuing without gas estimation", error);
139
+ }
140
+ }
121
141
  const result = await __classPrivateFieldGet(this, _CdpV2EvmWalletProvider_cdp, "f").evm.sendTransaction({
122
142
  address: __classPrivateFieldGet(this, _CdpV2EvmWalletProvider_serverAccount, "f").address,
123
- transaction: (0, viem_1.serializeTransaction)(transaction),
143
+ transaction: (0, viem_1.serializeTransaction)(txWithGasParams),
124
144
  network: __classPrivateFieldGet(this, _CdpV2EvmWalletProvider_instances, "m", _CdpV2EvmWalletProvider_getCdpSdkNetwork).call(this),
125
145
  });
126
146
  return result.transactionHash;
@@ -39,3 +39,10 @@ export interface WalletProviderWithClient {
39
39
  */
40
40
  getClient(): CdpClient;
41
41
  }
42
+ /**
43
+ * Type guard to check if a wallet provider implements WalletProviderWithClient interface.
44
+ *
45
+ * @param provider - The provider to check
46
+ * @returns True if the provider implements WalletProviderWithClient
47
+ */
48
+ export declare function isWalletProviderWithClient(provider: unknown): provider is WalletProviderWithClient;
@@ -1,2 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isWalletProviderWithClient = isWalletProviderWithClient;
4
+ /**
5
+ * Type guard to check if a wallet provider implements WalletProviderWithClient interface.
6
+ *
7
+ * @param provider - The provider to check
8
+ * @returns True if the provider implements WalletProviderWithClient
9
+ */
10
+ function isWalletProviderWithClient(provider) {
11
+ return (provider !== null &&
12
+ typeof provider === "object" &&
13
+ "getClient" in provider &&
14
+ typeof provider.getClient === "function");
15
+ }
@@ -9,11 +9,11 @@ export interface CdpProviderConfig {
9
9
  /**
10
10
  * The CDP API Key Name.
11
11
  */
12
- apiKeyName?: string;
12
+ apiKeyId?: string;
13
13
  /**
14
14
  * The CDP API Key Private Key.
15
15
  */
16
- apiKeyPrivateKey?: string;
16
+ apiKeySecret?: string;
17
17
  }
18
18
  /**
19
19
  * Configuration options for the CdpActionProvider.
@@ -56,10 +56,10 @@ class CdpWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
56
56
  * @throws Error if required environment variables are missing or wallet initialization fails
57
57
  */
58
58
  static async configureWithWallet(config = {}) {
59
- if (config.apiKeyName && config.apiKeyPrivateKey) {
59
+ if (config.apiKeyId && config.apiKeySecret) {
60
60
  coinbase_sdk_1.Coinbase.configure({
61
- apiKeyName: config.apiKeyName,
62
- privateKey: config.apiKeyPrivateKey?.replace(/\\n/g, "\n"),
61
+ apiKeyName: config.apiKeyId,
62
+ privateKey: config.apiKeySecret?.replace(/\\n/g, "\n"),
63
63
  source: "agentkit",
64
64
  sourceVersion: package_json_1.version,
65
65
  });
@@ -199,16 +199,16 @@ describe("CdpWalletProvider", () => {
199
199
  expect(provider.getNetwork()).toEqual(MOCK_NETWORK);
200
200
  });
201
201
  it("should initialize with API keys", async () => {
202
- const apiKeyName = "test-key";
203
- const apiKeyPrivateKey = "private-key";
202
+ const apiKeyId = "test-key";
203
+ const apiKeySecret = "private-key";
204
204
  const provider = await cdpWalletProvider_1.CdpWalletProvider.configureWithWallet({
205
- apiKeyName,
206
- apiKeyPrivateKey,
205
+ apiKeyId,
206
+ apiKeySecret,
207
207
  networkId: MOCK_NETWORK_ID,
208
208
  });
209
209
  expect(coinbase_sdk_1.Coinbase.configure).toHaveBeenCalledWith({
210
- apiKeyName,
211
- privateKey: apiKeyPrivateKey,
210
+ apiKeyName: apiKeyId,
211
+ privateKey: apiKeySecret,
212
212
  source: "agentkit",
213
213
  sourceVersion: "1.0.0",
214
214
  });
@@ -3,8 +3,8 @@ import { Abi, Address, ContractFunctionArgs, ContractFunctionName, Hex, ReadCont
3
3
  import { Network } from "../network";
4
4
  import { EvmWalletProvider } from "./evmWalletProvider";
5
5
  export interface ConfigureSmartWalletOptions {
6
- cdpApiKeyName?: string;
7
- cdpApiKeyPrivateKey?: string;
6
+ cdpApiKeyId?: string;
7
+ cdpApiKeySecret?: string;
8
8
  networkId?: string;
9
9
  smartWalletAddress?: Hex;
10
10
  paymasterUrl?: string;
@@ -39,8 +39,8 @@ export declare class SmartWalletProvider extends EvmWalletProvider {
39
39
  * const smartWalletProvider = await SmartWalletProvider.configureWithWallet({
40
40
  * networkId: "base-sepolia",
41
41
  * signer: privateKeyToAccount("0xethprivatekey"),
42
- * cdpApiKeyName: "my-api-key",
43
- * cdpApiKeyPrivateKey: "my-private-key",
42
+ * cdpApiKeyId: "my-api-key",
43
+ * cdpApiKeySecret: "my-private-key",
44
44
  * smartWalletAddress: "0x123456...",
45
45
  * });
46
46
  * ```
@@ -57,8 +57,8 @@ class SmartWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
57
57
  * const smartWalletProvider = await SmartWalletProvider.configureWithWallet({
58
58
  * networkId: "base-sepolia",
59
59
  * signer: privateKeyToAccount("0xethprivatekey"),
60
- * cdpApiKeyName: "my-api-key",
61
- * cdpApiKeyPrivateKey: "my-private-key",
60
+ * cdpApiKeyId: "my-api-key",
61
+ * cdpApiKeySecret: "my-private-key",
62
62
  * smartWalletAddress: "0x123456...",
63
63
  * });
64
64
  * ```
@@ -77,12 +77,12 @@ class SmartWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
77
77
  if (!supportedChainIds.includes(network.chainId)) {
78
78
  throw new Error(`Invalid chain id ${network.chainId}. Chain id must be one of ${supportedChainIds.join(", ")}`);
79
79
  }
80
- const cdpApiKeyName = config.cdpApiKeyName || process.env.CDP_API_KEY_NAME;
81
- const cdpApiKeyPrivateKey = config.cdpApiKeyPrivateKey || process.env.CDP_API_KEY_PRIVATE_KEY;
82
- if (cdpApiKeyName && cdpApiKeyPrivateKey) {
80
+ const cdpApiKeyId = config.cdpApiKeyId || process.env.CDP_API_KEY_ID;
81
+ const cdpApiKeySecret = config.cdpApiKeySecret || process.env.CDP_API_KEY_SECRET;
82
+ if (cdpApiKeyId && cdpApiKeySecret) {
83
83
  coinbase_sdk_1.Coinbase.configure({
84
- apiKeyName: cdpApiKeyName,
85
- privateKey: cdpApiKeyPrivateKey?.replace(/\\n/g, "\n"),
84
+ apiKeyName: cdpApiKeyId,
85
+ privateKey: cdpApiKeySecret?.replace(/\\n/g, "\n"),
86
86
  source: "agentkit",
87
87
  sourceVersion: package_json_1.version,
88
88
  });
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@coinbase/agentkit",
3
3
  "description": "Coinbase AgentKit core primitives",
4
4
  "repository": "https://github.com/coinbase/agentkit",
5
- "version": "0.7.1",
5
+ "version": "0.8.0",
6
6
  "author": "Coinbase Inc.",
7
7
  "license": "Apache-2.0",
8
8
  "main": "dist/index.js",