@coinbase/cdp-sdk 1.33.0 → 1.34.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +19 -0
  3. package/_cjs/accounts/evm/toEvmServerAccount.js +1 -1
  4. package/_cjs/accounts/evm/toEvmServerAccount.js.map +1 -1
  5. package/_cjs/accounts/evm/toEvmSmartAccount.js +1 -1
  6. package/_cjs/accounts/evm/toEvmSmartAccount.js.map +1 -1
  7. package/_cjs/accounts/evm/toNetworkScopedEvmServerAccount.js +2 -2
  8. package/_cjs/accounts/evm/toNetworkScopedEvmServerAccount.js.map +1 -1
  9. package/_cjs/accounts/evm/toNetworkScopedEvmSmartAccount.js +2 -2
  10. package/_cjs/accounts/evm/toNetworkScopedEvmSmartAccount.js.map +1 -1
  11. package/_cjs/actions/evm/listSpendPermissions.js +19 -1
  12. package/_cjs/actions/evm/listSpendPermissions.js.map +1 -1
  13. package/_cjs/actions/evm/spend-permissions/resolveSpendPermission.js +64 -0
  14. package/_cjs/actions/evm/spend-permissions/resolveSpendPermission.js.map +1 -0
  15. package/_cjs/client/cdp.js +4 -0
  16. package/_cjs/client/cdp.js.map +1 -1
  17. package/_cjs/client/end-user/endUser.js +28 -0
  18. package/_cjs/client/end-user/endUser.js.map +1 -0
  19. package/_cjs/client/end-user/endUser.types.js +3 -0
  20. package/_cjs/client/end-user/endUser.types.js.map +1 -0
  21. package/_cjs/client/evm/evm.js +12 -11
  22. package/_cjs/client/evm/evm.js.map +1 -1
  23. package/_cjs/index.js.map +1 -1
  24. package/_cjs/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js +121 -2
  25. package/_cjs/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js.map +1 -1
  26. package/_cjs/openapi-client/generated/end-user-accounts/end-user-accounts.js +20 -0
  27. package/_cjs/openapi-client/generated/end-user-accounts/end-user-accounts.js.map +1 -0
  28. package/_cjs/openapi-client/generated/end-user-accounts/end-user-accounts.msw.js +61 -0
  29. package/_cjs/openapi-client/generated/end-user-accounts/end-user-accounts.msw.js.map +1 -0
  30. package/_cjs/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js +79 -20
  31. package/_cjs/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js.map +1 -1
  32. package/_cjs/openapi-client/generated/evm-token-balances/evm-token-balances.js +1 -2
  33. package/_cjs/openapi-client/generated/evm-token-balances/evm-token-balances.js.map +1 -1
  34. package/_cjs/openapi-client/generated/index.msw.js +3 -0
  35. package/_cjs/openapi-client/generated/index.msw.js.map +1 -1
  36. package/_cjs/openapi-client/generated/onchain-data/onchain-data.js +63 -0
  37. package/_cjs/openapi-client/generated/onchain-data/onchain-data.js.map +1 -0
  38. package/_cjs/openapi-client/generated/onchain-data/onchain-data.msw.js +139 -0
  39. package/_cjs/openapi-client/generated/onchain-data/onchain-data.msw.js.map +1 -0
  40. package/_cjs/openapi-client/generated/policy-engine/policy-engine.msw.js +48 -4
  41. package/_cjs/openapi-client/generated/policy-engine/policy-engine.msw.js.map +1 -1
  42. package/_cjs/openapi-client/generated/x402-facilitator/x402-facilitator.js +39 -0
  43. package/_cjs/openapi-client/generated/x402-facilitator/x402-facilitator.js.map +1 -0
  44. package/_cjs/openapi-client/generated/x402-facilitator/x402-facilitator.msw.js +84 -0
  45. package/_cjs/openapi-client/generated/x402-facilitator/x402-facilitator.msw.js.map +1 -0
  46. package/_cjs/openapi-client/index.js +5 -0
  47. package/_cjs/openapi-client/index.js.map +1 -1
  48. package/_cjs/spend-permissions/utils.js +26 -0
  49. package/_cjs/spend-permissions/utils.js.map +1 -0
  50. package/_cjs/version.js +1 -1
  51. package/_esm/accounts/evm/toEvmServerAccount.js +1 -1
  52. package/_esm/accounts/evm/toEvmServerAccount.js.map +1 -1
  53. package/_esm/accounts/evm/toEvmSmartAccount.js +1 -1
  54. package/_esm/accounts/evm/toEvmSmartAccount.js.map +1 -1
  55. package/_esm/accounts/evm/toNetworkScopedEvmServerAccount.js +2 -2
  56. package/_esm/accounts/evm/toNetworkScopedEvmServerAccount.js.map +1 -1
  57. package/_esm/accounts/evm/toNetworkScopedEvmSmartAccount.js +2 -2
  58. package/_esm/accounts/evm/toNetworkScopedEvmSmartAccount.js.map +1 -1
  59. package/_esm/actions/evm/listSpendPermissions.js +19 -1
  60. package/_esm/actions/evm/listSpendPermissions.js.map +1 -1
  61. package/_esm/actions/evm/spend-permissions/resolveSpendPermission.js +61 -0
  62. package/_esm/actions/evm/spend-permissions/resolveSpendPermission.js.map +1 -0
  63. package/_esm/client/cdp.js +4 -0
  64. package/_esm/client/cdp.js.map +1 -1
  65. package/_esm/client/end-user/endUser.js +24 -0
  66. package/_esm/client/end-user/endUser.js.map +1 -0
  67. package/_esm/client/end-user/endUser.types.js +2 -0
  68. package/_esm/client/end-user/endUser.types.js.map +1 -0
  69. package/_esm/client/evm/evm.js +13 -12
  70. package/_esm/client/evm/evm.js.map +1 -1
  71. package/_esm/index.js.map +1 -1
  72. package/_esm/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js +119 -0
  73. package/_esm/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.js.map +1 -1
  74. package/_esm/openapi-client/generated/end-user-accounts/end-user-accounts.js +16 -0
  75. package/_esm/openapi-client/generated/end-user-accounts/end-user-accounts.js.map +1 -0
  76. package/_esm/openapi-client/generated/end-user-accounts/end-user-accounts.msw.js +52 -0
  77. package/_esm/openapi-client/generated/end-user-accounts/end-user-accounts.msw.js.map +1 -0
  78. package/_esm/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js +79 -20
  79. package/_esm/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.js.map +1 -1
  80. package/_esm/openapi-client/generated/evm-token-balances/evm-token-balances.js +1 -2
  81. package/_esm/openapi-client/generated/evm-token-balances/evm-token-balances.js.map +1 -1
  82. package/_esm/openapi-client/generated/index.msw.js +3 -0
  83. package/_esm/openapi-client/generated/index.msw.js.map +1 -1
  84. package/_esm/openapi-client/generated/onchain-data/onchain-data.js +57 -0
  85. package/_esm/openapi-client/generated/onchain-data/onchain-data.js.map +1 -0
  86. package/_esm/openapi-client/generated/onchain-data/onchain-data.msw.js +129 -0
  87. package/_esm/openapi-client/generated/onchain-data/onchain-data.msw.js.map +1 -0
  88. package/_esm/openapi-client/generated/policy-engine/policy-engine.msw.js +48 -4
  89. package/_esm/openapi-client/generated/policy-engine/policy-engine.msw.js.map +1 -1
  90. package/_esm/openapi-client/generated/x402-facilitator/x402-facilitator.js +33 -0
  91. package/_esm/openapi-client/generated/x402-facilitator/x402-facilitator.js.map +1 -0
  92. package/_esm/openapi-client/generated/x402-facilitator/x402-facilitator.msw.js +74 -0
  93. package/_esm/openapi-client/generated/x402-facilitator/x402-facilitator.msw.js.map +1 -0
  94. package/_esm/openapi-client/index.js +5 -0
  95. package/_esm/openapi-client/index.js.map +1 -1
  96. package/_esm/spend-permissions/utils.js +23 -0
  97. package/_esm/spend-permissions/utils.js.map +1 -0
  98. package/_esm/version.js +1 -1
  99. package/_types/accounts/evm/toEvmServerAccount.d.ts.map +1 -1
  100. package/_types/accounts/evm/toNetworkScopedEvmSmartAccount.d.ts.map +1 -1
  101. package/_types/accounts/evm/types.d.ts +5 -5
  102. package/_types/accounts/evm/types.d.ts.map +1 -1
  103. package/_types/actions/evm/listSpendPermissions.d.ts +10 -2
  104. package/_types/actions/evm/listSpendPermissions.d.ts.map +1 -1
  105. package/_types/actions/evm/spend-permissions/resolveSpendPermission.d.ts +12 -0
  106. package/_types/actions/evm/spend-permissions/resolveSpendPermission.d.ts.map +1 -0
  107. package/_types/actions/evm/spend-permissions/types.d.ts +3 -2
  108. package/_types/actions/evm/spend-permissions/types.d.ts.map +1 -1
  109. package/_types/actions/evm/types.d.ts +4 -8
  110. package/_types/actions/evm/types.d.ts.map +1 -1
  111. package/_types/auth/utils/jwt.d.ts +1 -1
  112. package/_types/client/cdp.d.ts +3 -0
  113. package/_types/client/cdp.d.ts.map +1 -1
  114. package/_types/client/end-user/endUser.d.ts +16 -0
  115. package/_types/client/end-user/endUser.d.ts.map +1 -0
  116. package/_types/client/end-user/endUser.types.d.ts +10 -0
  117. package/_types/client/end-user/endUser.types.d.ts.map +1 -0
  118. package/_types/client/evm/evm.d.ts +3 -2
  119. package/_types/client/evm/evm.d.ts.map +1 -1
  120. package/_types/client/evm/evm.types.d.ts +7 -44
  121. package/_types/client/evm/evm.types.d.ts.map +1 -1
  122. package/_types/index.d.ts +2 -1
  123. package/_types/index.d.ts.map +1 -1
  124. package/_types/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.d.ts +520 -39
  125. package/_types/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.d.ts.map +1 -1
  126. package/_types/openapi-client/generated/end-user-accounts/end-user-accounts.d.ts +20 -0
  127. package/_types/openapi-client/generated/end-user-accounts/end-user-accounts.d.ts.map +1 -0
  128. package/_types/openapi-client/generated/end-user-accounts/end-user-accounts.msw.d.ts +9 -0
  129. package/_types/openapi-client/generated/end-user-accounts/end-user-accounts.msw.d.ts.map +1 -0
  130. package/_types/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.d.ts.map +1 -1
  131. package/_types/openapi-client/generated/evm-token-balances/evm-token-balances.d.ts +1 -2
  132. package/_types/openapi-client/generated/evm-token-balances/evm-token-balances.d.ts.map +1 -1
  133. package/_types/openapi-client/generated/index.msw.d.ts +3 -0
  134. package/_types/openapi-client/generated/index.msw.d.ts.map +1 -1
  135. package/_types/openapi-client/generated/onchain-data/onchain-data.d.ts +59 -0
  136. package/_types/openapi-client/generated/onchain-data/onchain-data.d.ts.map +1 -0
  137. package/_types/openapi-client/generated/onchain-data/onchain-data.msw.d.ts +10 -0
  138. package/_types/openapi-client/generated/onchain-data/onchain-data.msw.d.ts.map +1 -0
  139. package/_types/openapi-client/generated/policy-engine/policy-engine.msw.d.ts.map +1 -1
  140. package/_types/openapi-client/generated/x402-facilitator/x402-facilitator.d.ts +30 -0
  141. package/_types/openapi-client/generated/x402-facilitator/x402-facilitator.d.ts.map +1 -0
  142. package/_types/openapi-client/generated/x402-facilitator/x402-facilitator.msw.d.ts +10 -0
  143. package/_types/openapi-client/generated/x402-facilitator/x402-facilitator.msw.d.ts.map +1 -0
  144. package/_types/openapi-client/index.d.ts +4 -0
  145. package/_types/openapi-client/index.d.ts.map +1 -1
  146. package/_types/spend-permissions/types.d.ts +40 -5
  147. package/_types/spend-permissions/types.d.ts.map +1 -1
  148. package/_types/spend-permissions/utils.d.ts +12 -0
  149. package/_types/spend-permissions/utils.d.ts.map +1 -0
  150. package/_types/version.d.ts +1 -1
  151. package/accounts/evm/toEvmServerAccount.ts +1 -3
  152. package/accounts/evm/toEvmSmartAccount.ts +1 -1
  153. package/accounts/evm/toNetworkScopedEvmServerAccount.ts +4 -4
  154. package/accounts/evm/toNetworkScopedEvmSmartAccount.ts +4 -4
  155. package/accounts/evm/types.ts +5 -5
  156. package/actions/evm/listSpendPermissions.ts +42 -3
  157. package/actions/evm/spend-permissions/resolveSpendPermission.ts +85 -0
  158. package/actions/evm/spend-permissions/types.ts +3 -2
  159. package/actions/evm/types.ts +4 -12
  160. package/auth/utils/jwt.ts +1 -1
  161. package/client/cdp.ts +5 -0
  162. package/client/end-user/endUser.ts +27 -0
  163. package/client/end-user/endUser.types.ts +9 -0
  164. package/client/evm/evm.ts +25 -16
  165. package/client/evm/evm.types.ts +6 -48
  166. package/index.ts +2 -1
  167. package/openapi-client/generated/coinbaseDeveloperPlatformAPIs.schemas.ts +614 -40
  168. package/openapi-client/generated/end-user-accounts/end-user-accounts.msw.ts +95 -0
  169. package/openapi-client/generated/end-user-accounts/end-user-accounts.ts +39 -0
  170. package/openapi-client/generated/evm-smart-accounts/evm-smart-accounts.msw.ts +79 -20
  171. package/openapi-client/generated/evm-token-balances/evm-token-balances.ts +1 -2
  172. package/openapi-client/generated/index.msw.ts +3 -0
  173. package/openapi-client/generated/onchain-data/onchain-data.msw.ts +185 -0
  174. package/openapi-client/generated/onchain-data/onchain-data.ts +103 -0
  175. package/openapi-client/generated/policy-engine/policy-engine.msw.ts +48 -4
  176. package/openapi-client/generated/x402-facilitator/x402-facilitator.msw.ts +136 -0
  177. package/openapi-client/generated/x402-facilitator/x402-facilitator.ts +70 -0
  178. package/openapi-client/index.ts +5 -0
  179. package/package.json +1 -1
  180. package/spend-permissions/types.ts +46 -16
  181. package/spend-permissions/utils.ts +35 -0
  182. package/version.ts +1 -1
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Generated by orval v7.6.0 🍺
3
+ * Do not edit manually.
4
+ * Coinbase Developer Platform APIs
5
+ * The Coinbase Developer Platform APIs - leading the world's transition onchain.
6
+ * OpenAPI spec version: 2.0.0
7
+ */
8
+ import { faker } from "@faker-js/faker";
9
+
10
+ import { HttpResponse, delay, http } from "msw";
11
+
12
+ import type {
13
+ DeveloperJWTAuthentication,
14
+ EmailAuthentication,
15
+ EndUser,
16
+ SmsAuthentication,
17
+ } from "../coinbaseDeveloperPlatformAPIs.schemas.js";
18
+
19
+ export const getValidateEndUserAccessTokenResponseEmailAuthenticationMock = (
20
+ overrideResponse: Partial<EmailAuthentication> = {},
21
+ ): EmailAuthentication => ({
22
+ ...{ type: faker.helpers.arrayElement(["email"] as const), email: faker.internet.email() },
23
+ ...overrideResponse,
24
+ });
25
+
26
+ export const getValidateEndUserAccessTokenResponseSmsAuthenticationMock = (
27
+ overrideResponse: Partial<SmsAuthentication> = {},
28
+ ): SmsAuthentication => ({
29
+ ...{
30
+ type: faker.helpers.arrayElement(["sms"] as const),
31
+ phoneNumber: faker.helpers.fromRegExp("^\+[1-9]\d{1,14}$"),
32
+ },
33
+ ...overrideResponse,
34
+ });
35
+
36
+ export const getValidateEndUserAccessTokenResponseDeveloperJWTAuthenticationMock = (
37
+ overrideResponse: Partial<DeveloperJWTAuthentication> = {},
38
+ ): DeveloperJWTAuthentication => ({
39
+ ...{
40
+ type: faker.helpers.arrayElement(["jwt"] as const),
41
+ kid: faker.string.alpha(20),
42
+ sub: faker.string.alpha(20),
43
+ },
44
+ ...overrideResponse,
45
+ });
46
+
47
+ export const getValidateEndUserAccessTokenResponseMock = (
48
+ overrideResponse: Partial<EndUser> = {},
49
+ ): EndUser => ({
50
+ userId: faker.helpers.fromRegExp("^[a-zA-Z0-9-]{1,100}$"),
51
+ authenticationMethods: Array.from(
52
+ { length: faker.number.int({ min: 1, max: 10 }) },
53
+ (_, i) => i + 1,
54
+ ).map(() =>
55
+ faker.helpers.arrayElement([
56
+ { ...getValidateEndUserAccessTokenResponseEmailAuthenticationMock() },
57
+ { ...getValidateEndUserAccessTokenResponseSmsAuthenticationMock() },
58
+ { ...getValidateEndUserAccessTokenResponseDeveloperJWTAuthenticationMock() },
59
+ ]),
60
+ ),
61
+ evmAccounts: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(
62
+ () => faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
63
+ ),
64
+ evmSmartAccounts: Array.from(
65
+ { length: faker.number.int({ min: 1, max: 10 }) },
66
+ (_, i) => i + 1,
67
+ ).map(() => faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$")),
68
+ solanaAccounts: Array.from(
69
+ { length: faker.number.int({ min: 1, max: 10 }) },
70
+ (_, i) => i + 1,
71
+ ).map(() => faker.helpers.fromRegExp("^[1-9A-HJ-NP-Za-km-z]{32,44}$")),
72
+ ...overrideResponse,
73
+ });
74
+
75
+ export const getValidateEndUserAccessTokenMockHandler = (
76
+ overrideResponse?:
77
+ | EndUser
78
+ | ((info: Parameters<Parameters<typeof http.post>[1]>[0]) => Promise<EndUser> | EndUser),
79
+ ) => {
80
+ return http.post("*/v2/end-users/auth/validate-token", async info => {
81
+ await delay(0);
82
+
83
+ return new HttpResponse(
84
+ JSON.stringify(
85
+ overrideResponse !== undefined
86
+ ? typeof overrideResponse === "function"
87
+ ? await overrideResponse(info)
88
+ : overrideResponse
89
+ : getValidateEndUserAccessTokenResponseMock(),
90
+ ),
91
+ { status: 200, headers: { "Content-Type": "application/json" } },
92
+ );
93
+ });
94
+ };
95
+ export const getEndUserAccountsMock = () => [getValidateEndUserAccessTokenMockHandler()];
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Generated by orval v7.6.0 🍺
3
+ * Do not edit manually.
4
+ * Coinbase Developer Platform APIs
5
+ * The Coinbase Developer Platform APIs - leading the world's transition onchain.
6
+ * OpenAPI spec version: 2.0.0
7
+ */
8
+ import type {
9
+ EndUser,
10
+ ValidateEndUserAccessTokenBody,
11
+ } from "../coinbaseDeveloperPlatformAPIs.schemas.js";
12
+
13
+ import { cdpApiClient } from "../../cdpApiClient.js";
14
+
15
+ type SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];
16
+
17
+ /**
18
+ * Validates the end user's access token and returns the end user's information. Returns an error if the access token is invalid or expired.
19
+
20
+ This API is intended to be used by the developer's own backend, and is authenticated using the developer's CDP API key.
21
+ * @summary Validate end user access token
22
+ */
23
+ export const validateEndUserAccessToken = (
24
+ validateEndUserAccessTokenBody: ValidateEndUserAccessTokenBody,
25
+ options?: SecondParameter<typeof cdpApiClient>,
26
+ ) => {
27
+ return cdpApiClient<EndUser>(
28
+ {
29
+ url: `/v2/end-users/auth/validate-token`,
30
+ method: "POST",
31
+ headers: { "Content-Type": "application/json" },
32
+ data: validateEndUserAccessTokenBody,
33
+ },
34
+ options,
35
+ );
36
+ };
37
+ export type ValidateEndUserAccessTokenResult = NonNullable<
38
+ Awaited<ReturnType<typeof validateEndUserAccessToken>>
39
+ >;
@@ -199,6 +199,19 @@ export const getPrepareUserOperationResponseMock = (
199
199
  { data: faker.helpers.fromRegExp("^0x[0-9a-fA-F]*$"), message: faker.string.alpha(20) },
200
200
  undefined,
201
201
  ]),
202
+ transactionHash: faker.helpers.arrayElement([
203
+ faker.helpers.fromRegExp("^0x[a-fA-F0-9]{64}$"),
204
+ undefined,
205
+ ]),
206
+ blockHash: faker.helpers.arrayElement([
207
+ faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$|^$"),
208
+ undefined,
209
+ ]),
210
+ blockNumber: faker.helpers.arrayElement([
211
+ faker.number.int({ min: undefined, max: undefined }),
212
+ undefined,
213
+ ]),
214
+ gasUsed: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
202
215
  })),
203
216
  undefined,
204
217
  ]),
@@ -233,6 +246,19 @@ export const getGetUserOperationResponseMock = (
233
246
  { data: faker.helpers.fromRegExp("^0x[0-9a-fA-F]*$"), message: faker.string.alpha(20) },
234
247
  undefined,
235
248
  ]),
249
+ transactionHash: faker.helpers.arrayElement([
250
+ faker.helpers.fromRegExp("^0x[a-fA-F0-9]{64}$"),
251
+ undefined,
252
+ ]),
253
+ blockHash: faker.helpers.arrayElement([
254
+ faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$|^$"),
255
+ undefined,
256
+ ]),
257
+ blockNumber: faker.helpers.arrayElement([
258
+ faker.number.int({ min: undefined, max: undefined }),
259
+ undefined,
260
+ ]),
261
+ gasUsed: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
236
262
  })),
237
263
  undefined,
238
264
  ]),
@@ -267,6 +293,19 @@ export const getSendUserOperationResponseMock = (
267
293
  { data: faker.helpers.fromRegExp("^0x[0-9a-fA-F]*$"), message: faker.string.alpha(20) },
268
294
  undefined,
269
295
  ]),
296
+ transactionHash: faker.helpers.arrayElement([
297
+ faker.helpers.fromRegExp("^0x[a-fA-F0-9]{64}$"),
298
+ undefined,
299
+ ]),
300
+ blockHash: faker.helpers.arrayElement([
301
+ faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$|^$"),
302
+ undefined,
303
+ ]),
304
+ blockNumber: faker.helpers.arrayElement([
305
+ faker.number.int({ min: undefined, max: undefined }),
306
+ undefined,
307
+ ]),
308
+ gasUsed: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
270
309
  })),
271
310
  undefined,
272
311
  ]),
@@ -301,6 +340,19 @@ export const getCreateSpendPermissionResponseMock = (
301
340
  { data: faker.helpers.fromRegExp("^0x[0-9a-fA-F]*$"), message: faker.string.alpha(20) },
302
341
  undefined,
303
342
  ]),
343
+ transactionHash: faker.helpers.arrayElement([
344
+ faker.helpers.fromRegExp("^0x[a-fA-F0-9]{64}$"),
345
+ undefined,
346
+ ]),
347
+ blockHash: faker.helpers.arrayElement([
348
+ faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$|^$"),
349
+ undefined,
350
+ ]),
351
+ blockNumber: faker.helpers.arrayElement([
352
+ faker.number.int({ min: undefined, max: undefined }),
353
+ undefined,
354
+ ]),
355
+ gasUsed: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
304
356
  })),
305
357
  undefined,
306
358
  ]),
@@ -313,30 +365,24 @@ export const getListSpendPermissionsResponseMock = (): ListSpendPermissions200 =
313
365
  { length: faker.number.int({ min: 1, max: 10 }) },
314
366
  (_, i) => i + 1,
315
367
  ).map(() => ({
316
- permission: faker.helpers.arrayElement([
317
- {
318
- account: faker.helpers.fromRegExp("^0x[a-fA-F0-9]{40}$"),
319
- spender: faker.helpers.fromRegExp("^0x[a-fA-F0-9]{40}$"),
320
- token: faker.helpers.fromRegExp("^0x[a-fA-F0-9]{40}$"),
321
- allowance: faker.string.alpha(20),
322
- period: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
323
- start: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
324
- end: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
325
- salt: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
326
- extraData: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
327
- },
328
- undefined,
329
- ]),
330
- permissionHash: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
331
- revoked: faker.helpers.arrayElement([faker.datatype.boolean(), undefined]),
368
+ permission: {
369
+ account: faker.helpers.fromRegExp("^0x[a-fA-F0-9]{40}$"),
370
+ spender: faker.helpers.fromRegExp("^0x[a-fA-F0-9]{40}$"),
371
+ token: faker.helpers.fromRegExp("^0x[a-fA-F0-9]{40}$"),
372
+ allowance: faker.string.alpha(20),
373
+ period: faker.string.alpha(20),
374
+ start: faker.string.alpha(20),
375
+ end: faker.string.alpha(20),
376
+ salt: faker.string.alpha(20),
377
+ extraData: faker.string.alpha(20),
378
+ },
379
+ permissionHash: faker.string.alpha(20),
380
+ revoked: faker.datatype.boolean(),
332
381
  revokedAt: faker.helpers.arrayElement([
333
382
  `${faker.date.past().toISOString().split(".")[0]}Z`,
334
383
  undefined,
335
384
  ]),
336
- createdAt: faker.helpers.arrayElement([
337
- `${faker.date.past().toISOString().split(".")[0]}Z`,
338
- undefined,
339
- ]),
385
+ createdAt: `${faker.date.past().toISOString().split(".")[0]}Z`,
340
386
  })),
341
387
  },
342
388
  ...{ nextPageToken: faker.helpers.arrayElement([faker.string.alpha(20), undefined]) },
@@ -370,6 +416,19 @@ export const getRevokeSpendPermissionResponseMock = (
370
416
  { data: faker.helpers.fromRegExp("^0x[0-9a-fA-F]*$"), message: faker.string.alpha(20) },
371
417
  undefined,
372
418
  ]),
419
+ transactionHash: faker.helpers.arrayElement([
420
+ faker.helpers.fromRegExp("^0x[a-fA-F0-9]{64}$"),
421
+ undefined,
422
+ ]),
423
+ blockHash: faker.helpers.arrayElement([
424
+ faker.helpers.fromRegExp("^0x[0-9a-fA-F]{64}$|^$"),
425
+ undefined,
426
+ ]),
427
+ blockNumber: faker.helpers.arrayElement([
428
+ faker.number.int({ min: undefined, max: undefined }),
429
+ undefined,
430
+ ]),
431
+ gasUsed: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
373
432
  })),
374
433
  undefined,
375
434
  ]),
@@ -17,8 +17,7 @@ type SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];
17
17
 
18
18
  /**
19
19
  * Lists the token balances of an EVM address on a given network. The balances include ERC-20 tokens and the native gas token (usually ETH). The response is paginated, and by default, returns 20 balances per page.
20
-
21
- **Note:** This endpoint is still under development and does not yet provide strong freshness guarantees. Specifically, balances of new tokens can, on occasion, take up to ~30 seconds to appear, while balances of tokens already belonging to an address will generally be close to chain tip. Freshness of new token balances will improve over the coming weeks.
20
+ **Note:** This endpoint is still under development and does not yet provide strong freshness guarantees. Specifically, balances of new tokens can, on occasion, take up to ~30 seconds to appear, while balances of tokens already belonging to an address will generally be close to chain tip. Freshness of new token balances will improve over the coming weeks.
22
21
  * @summary List EVM token balances
23
22
  */
24
23
  export const listEvmTokenBalances = (
@@ -1,10 +1,13 @@
1
+ export * from "./end-user-accounts/end-user-accounts.msw.js";
1
2
  export * from "./evm-accounts/evm-accounts.msw.js";
2
3
  export * from "./evm-smart-accounts/evm-smart-accounts.msw.js";
3
4
  export * from "./evm-swaps/evm-swaps.msw.js";
4
5
  export * from "./evm-token-balances/evm-token-balances.msw.js";
5
6
  export * from "./faucets/faucets.msw.js";
7
+ export * from "./onchain-data/onchain-data.msw.js";
6
8
  export * from "./onramp/onramp.msw.js";
7
9
  export * from "./payments-alpha/payments-alpha.msw.js";
8
10
  export * from "./policy-engine/policy-engine.msw.js";
9
11
  export * from "./solana-accounts/solana-accounts.msw.js";
10
12
  export * from "./solana-token-balances/solana-token-balances.msw.js";
13
+ export * from "./x402-facilitator/x402-facilitator.msw.js";
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Generated by orval v7.6.0 🍺
3
+ * Do not edit manually.
4
+ * Coinbase Developer Platform APIs
5
+ * The Coinbase Developer Platform APIs - leading the world's transition onchain.
6
+ * OpenAPI spec version: 2.0.0
7
+ */
8
+ import { faker } from "@faker-js/faker";
9
+
10
+ import { HttpResponse, delay, http } from "msw";
11
+
12
+ import { ListEvmTokenBalancesNetwork } from "../coinbaseDeveloperPlatformAPIs.schemas.js";
13
+ import type {
14
+ AccountTokenAddressesResponse,
15
+ ListDataTokenBalances200,
16
+ OnchainDataResult,
17
+ } from "../coinbaseDeveloperPlatformAPIs.schemas.js";
18
+
19
+ export const getRunSQLQueryResponseMock = (
20
+ overrideResponse: Partial<OnchainDataResult> = {},
21
+ ): OnchainDataResult => ({
22
+ result: faker.helpers.arrayElement([
23
+ Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({})),
24
+ undefined,
25
+ ]),
26
+ schema: faker.helpers.arrayElement([
27
+ {
28
+ columns: faker.helpers.arrayElement([
29
+ Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() => ({
30
+ name: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
31
+ type: faker.helpers.arrayElement([
32
+ faker.helpers.arrayElement([
33
+ "String",
34
+ "UInt8",
35
+ "UInt16",
36
+ "UInt32",
37
+ "UInt64",
38
+ "UInt128",
39
+ "UInt256",
40
+ "Int8",
41
+ "Int16",
42
+ "Int32",
43
+ "Int64",
44
+ "Int128",
45
+ "Int256",
46
+ "Float32",
47
+ "Float64",
48
+ "Bool",
49
+ "Date",
50
+ "DateTime",
51
+ "DateTime64",
52
+ "UUID",
53
+ ] as const),
54
+ undefined,
55
+ ]),
56
+ })),
57
+ undefined,
58
+ ]),
59
+ },
60
+ undefined,
61
+ ]),
62
+ metadata: faker.helpers.arrayElement([
63
+ {
64
+ cached: faker.helpers.arrayElement([faker.datatype.boolean(), undefined]),
65
+ executionTimeMs: faker.helpers.arrayElement([
66
+ faker.number.int({ min: undefined, max: undefined }),
67
+ undefined,
68
+ ]),
69
+ rowCount: faker.helpers.arrayElement([
70
+ faker.number.int({ min: undefined, max: undefined }),
71
+ undefined,
72
+ ]),
73
+ },
74
+ undefined,
75
+ ]),
76
+ ...overrideResponse,
77
+ });
78
+
79
+ export const getListTokensForAccountResponseMock = (
80
+ overrideResponse: Partial<AccountTokenAddressesResponse> = {},
81
+ ): AccountTokenAddressesResponse => ({
82
+ accountAddress: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
83
+ tokenAddresses: faker.helpers.arrayElement([
84
+ Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(() =>
85
+ faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
86
+ ),
87
+ undefined,
88
+ ]),
89
+ totalCount: faker.helpers.arrayElement([faker.number.int({ min: 0, max: undefined }), undefined]),
90
+ ...overrideResponse,
91
+ });
92
+
93
+ export const getListDataTokenBalancesResponseMock = (): ListDataTokenBalances200 => ({
94
+ ...{
95
+ balances: Array.from({ length: faker.number.int({ min: 1, max: 10 }) }, (_, i) => i + 1).map(
96
+ () => ({
97
+ amount: {
98
+ amount: faker.helpers.fromRegExp("^[0-9]+$"),
99
+ decimals: faker.number.int({ min: undefined, max: undefined }),
100
+ },
101
+ token: {
102
+ network: faker.helpers.arrayElement(Object.values(ListEvmTokenBalancesNetwork)),
103
+ symbol: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
104
+ name: faker.helpers.arrayElement([faker.string.alpha(20), undefined]),
105
+ contractAddress: faker.helpers.fromRegExp("^0x[0-9a-fA-F]{40}$"),
106
+ },
107
+ }),
108
+ ),
109
+ },
110
+ ...{ nextPageToken: faker.helpers.arrayElement([faker.string.alpha(20), undefined]) },
111
+ });
112
+
113
+ export const getRunSQLQueryMockHandler = (
114
+ overrideResponse?:
115
+ | OnchainDataResult
116
+ | ((
117
+ info: Parameters<Parameters<typeof http.post>[1]>[0],
118
+ ) => Promise<OnchainDataResult> | OnchainDataResult),
119
+ ) => {
120
+ return http.post("*/v2/data/query/run", async info => {
121
+ await delay(0);
122
+
123
+ return new HttpResponse(
124
+ JSON.stringify(
125
+ overrideResponse !== undefined
126
+ ? typeof overrideResponse === "function"
127
+ ? await overrideResponse(info)
128
+ : overrideResponse
129
+ : getRunSQLQueryResponseMock(),
130
+ ),
131
+ { status: 200, headers: { "Content-Type": "application/json" } },
132
+ );
133
+ });
134
+ };
135
+
136
+ export const getListTokensForAccountMockHandler = (
137
+ overrideResponse?:
138
+ | AccountTokenAddressesResponse
139
+ | ((
140
+ info: Parameters<Parameters<typeof http.get>[1]>[0],
141
+ ) => Promise<AccountTokenAddressesResponse> | AccountTokenAddressesResponse),
142
+ ) => {
143
+ return http.get("*/v2/data/evm/token-ownership/:network/:address", async info => {
144
+ await delay(0);
145
+
146
+ return new HttpResponse(
147
+ JSON.stringify(
148
+ overrideResponse !== undefined
149
+ ? typeof overrideResponse === "function"
150
+ ? await overrideResponse(info)
151
+ : overrideResponse
152
+ : getListTokensForAccountResponseMock(),
153
+ ),
154
+ { status: 200, headers: { "Content-Type": "application/json" } },
155
+ );
156
+ });
157
+ };
158
+
159
+ export const getListDataTokenBalancesMockHandler = (
160
+ overrideResponse?:
161
+ | ListDataTokenBalances200
162
+ | ((
163
+ info: Parameters<Parameters<typeof http.get>[1]>[0],
164
+ ) => Promise<ListDataTokenBalances200> | ListDataTokenBalances200),
165
+ ) => {
166
+ return http.get("*/v2/data/evm/token-balances/:network/:address", async info => {
167
+ await delay(0);
168
+
169
+ return new HttpResponse(
170
+ JSON.stringify(
171
+ overrideResponse !== undefined
172
+ ? typeof overrideResponse === "function"
173
+ ? await overrideResponse(info)
174
+ : overrideResponse
175
+ : getListDataTokenBalancesResponseMock(),
176
+ ),
177
+ { status: 200, headers: { "Content-Type": "application/json" } },
178
+ );
179
+ });
180
+ };
181
+ export const getOnchainDataMock = () => [
182
+ getRunSQLQueryMockHandler(),
183
+ getListTokensForAccountMockHandler(),
184
+ getListDataTokenBalancesMockHandler(),
185
+ ];
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Generated by orval v7.6.0 🍺
3
+ * Do not edit manually.
4
+ * Coinbase Developer Platform APIs
5
+ * The Coinbase Developer Platform APIs - leading the world's transition onchain.
6
+ * OpenAPI spec version: 2.0.0
7
+ */
8
+ import type {
9
+ AccountTokenAddressesResponse,
10
+ ListDataTokenBalances200,
11
+ ListDataTokenBalancesParams,
12
+ ListEvmTokenBalancesNetwork,
13
+ OnchainDataQuery,
14
+ OnchainDataResult,
15
+ } from "../coinbaseDeveloperPlatformAPIs.schemas.js";
16
+
17
+ import { cdpApiClient } from "../../cdpApiClient.js";
18
+
19
+ type SecondParameter<T extends (...args: never) => unknown> = Parameters<T>[1];
20
+
21
+ /**
22
+ * Run a read-only SQL query against indexed blockchain data including transactions, events, and decoded logs.
23
+
24
+ This endpoint provides direct SQL access to comprehensive blockchain data across supported networks.
25
+ Queries are executed against optimized data structures for high-performance analytics.
26
+
27
+ ### Allowed Queries
28
+
29
+ - Standard SQL syntax (ClickHouse dialect)
30
+ - Read-only queries (SELECT statements)
31
+ - No DDL or DML operations
32
+ - No cartesian products
33
+
34
+ ### Supported Tables
35
+
36
+ - `base.events` - Base mainnet decoded event logs with parameters, event signature, topics, and more.
37
+ - `base.transactions` - Base mainnet transaction data including hash, block number, gas usage.
38
+ - `base.blocks` - Base mainnet block information.
39
+ - `base.encoded_logs` - Encoded log data of event logs that aren't able to be decoded by our event decoder (ex: log0 opcode).
40
+ - `base.transfers` - All event logs with event signature `Transfer(address,address,uint256)`. ERC-20, ERC-721, and ERC-1155 transfers are all included.
41
+
42
+ ### Query Limits
43
+
44
+ - Maximum result set: 10,000 rows
45
+ - Query timeout: 30 seconds
46
+ - Maximum JOINs: 5
47
+
48
+ * @summary Run SQL Query
49
+ */
50
+ export const runSQLQuery = (
51
+ onchainDataQuery: OnchainDataQuery,
52
+ options?: SecondParameter<typeof cdpApiClient>,
53
+ ) => {
54
+ return cdpApiClient<OnchainDataResult>(
55
+ {
56
+ url: `/v2/data/query/run`,
57
+ method: "POST",
58
+ headers: { "Content-Type": "application/json" },
59
+ data: onchainDataQuery,
60
+ },
61
+ options,
62
+ );
63
+ };
64
+ /**
65
+ * Retrieve all ERC-20 token contract addresses that an account has ever received tokens from.
66
+ Analyzes transaction history to discover token interactions.
67
+
68
+ * @summary List token addresses for account
69
+ */
70
+ export const listTokensForAccount = (
71
+ network: "base" | "base-sepolia",
72
+ address: string,
73
+ options?: SecondParameter<typeof cdpApiClient>,
74
+ ) => {
75
+ return cdpApiClient<AccountTokenAddressesResponse>(
76
+ { url: `/v2/data/evm/token-ownership/${network}/${address}`, method: "GET" },
77
+ options,
78
+ );
79
+ };
80
+ /**
81
+ * Lists the token balances of an EVM address on a given network. The balances include ERC-20 tokens and the native gas token (usually ETH). The response is paginated, and by default, returns 20 balances per page.
82
+
83
+ **Note:** This endpoint provides <1 second freshness from chain tip, <500ms response latency for wallets with reasonable token history, and 99.9% uptime for production use.
84
+ * @summary List EVM token balances
85
+ */
86
+ export const listDataTokenBalances = (
87
+ network: ListEvmTokenBalancesNetwork,
88
+ address: string,
89
+ params?: ListDataTokenBalancesParams,
90
+ options?: SecondParameter<typeof cdpApiClient>,
91
+ ) => {
92
+ return cdpApiClient<ListDataTokenBalances200>(
93
+ { url: `/v2/data/evm/token-balances/${network}/${address}`, method: "GET", params },
94
+ options,
95
+ );
96
+ };
97
+ export type RunSQLQueryResult = NonNullable<Awaited<ReturnType<typeof runSQLQuery>>>;
98
+ export type ListTokensForAccountResult = NonNullable<
99
+ Awaited<ReturnType<typeof listTokensForAccount>>
100
+ >;
101
+ export type ListDataTokenBalancesResult = NonNullable<
102
+ Awaited<ReturnType<typeof listDataTokenBalances>>
103
+ >;
@@ -180,7 +180,18 @@ export const getListPoliciesResponseEvmNetworkCriterionMock = (
180
180
  ): EvmNetworkCriterion => ({
181
181
  ...{
182
182
  type: faker.helpers.arrayElement(["evmNetwork"] as const),
183
- networks: faker.helpers.arrayElements(["base-sepolia", "base"] as const),
183
+ networks: faker.helpers.arrayElements([
184
+ "base-sepolia",
185
+ "base",
186
+ "ethereum",
187
+ "ethereum-sepolia",
188
+ "avalanche",
189
+ "polygon",
190
+ "optimism",
191
+ "arbitrum",
192
+ "zora",
193
+ "bnb",
194
+ ] as const),
184
195
  operator: faker.helpers.arrayElement(["in", "not in"] as const),
185
196
  },
186
197
  ...overrideResponse,
@@ -618,7 +629,18 @@ export const getCreatePolicyResponseEvmNetworkCriterionMock = (
618
629
  ): EvmNetworkCriterion => ({
619
630
  ...{
620
631
  type: faker.helpers.arrayElement(["evmNetwork"] as const),
621
- networks: faker.helpers.arrayElements(["base-sepolia", "base"] as const),
632
+ networks: faker.helpers.arrayElements([
633
+ "base-sepolia",
634
+ "base",
635
+ "ethereum",
636
+ "ethereum-sepolia",
637
+ "avalanche",
638
+ "polygon",
639
+ "optimism",
640
+ "arbitrum",
641
+ "zora",
642
+ "bnb",
643
+ ] as const),
622
644
  operator: faker.helpers.arrayElement(["in", "not in"] as const),
623
645
  },
624
646
  ...overrideResponse,
@@ -1047,7 +1069,18 @@ export const getGetPolicyByIdResponseEvmNetworkCriterionMock = (
1047
1069
  ): EvmNetworkCriterion => ({
1048
1070
  ...{
1049
1071
  type: faker.helpers.arrayElement(["evmNetwork"] as const),
1050
- networks: faker.helpers.arrayElements(["base-sepolia", "base"] as const),
1072
+ networks: faker.helpers.arrayElements([
1073
+ "base-sepolia",
1074
+ "base",
1075
+ "ethereum",
1076
+ "ethereum-sepolia",
1077
+ "avalanche",
1078
+ "polygon",
1079
+ "optimism",
1080
+ "arbitrum",
1081
+ "zora",
1082
+ "bnb",
1083
+ ] as const),
1051
1084
  operator: faker.helpers.arrayElement(["in", "not in"] as const),
1052
1085
  },
1053
1086
  ...overrideResponse,
@@ -1476,7 +1509,18 @@ export const getUpdatePolicyResponseEvmNetworkCriterionMock = (
1476
1509
  ): EvmNetworkCriterion => ({
1477
1510
  ...{
1478
1511
  type: faker.helpers.arrayElement(["evmNetwork"] as const),
1479
- networks: faker.helpers.arrayElements(["base-sepolia", "base"] as const),
1512
+ networks: faker.helpers.arrayElements([
1513
+ "base-sepolia",
1514
+ "base",
1515
+ "ethereum",
1516
+ "ethereum-sepolia",
1517
+ "avalanche",
1518
+ "polygon",
1519
+ "optimism",
1520
+ "arbitrum",
1521
+ "zora",
1522
+ "bnb",
1523
+ ] as const),
1480
1524
  operator: faker.helpers.arrayElement(["in", "not in"] as const),
1481
1525
  },
1482
1526
  ...overrideResponse,