@distilled.cloud/coinbase 0.16.1 → 0.16.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAYxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAgOnD;;;;GAIG;AACH,eAAO,MAAM,GAAG;;;CAYd,CAAC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAkCA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAcxC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAwOnD;;;;GAIG;AACH,eAAO,MAAM,GAAG;;;CAad,CAAC"}
package/lib/client.js CHANGED
@@ -35,6 +35,8 @@ import * as Redacted from "effect/Redacted";
35
35
  import * as Schema from "effect/Schema";
36
36
  import * as crypto from "node:crypto";
37
37
  import { makeAPI } from "@distilled.cloud/core/client";
38
+ import { parseRetryAfterForStatus } from "@distilled.cloud/core/retry-after";
39
+ import { Retry } from "./retry.js";
38
40
  import { HTTP_STATUS_MAP, COINBASE_HTTP_STATUS_MAP, ERROR_TYPE_MAP, STANDARD_ERROR_TYPE_MAP, UnknownCoinbaseError, CoinbaseParseError, } from "./errors.js";
39
41
  import { Credentials } from "./credentials.js";
40
42
  // Re-export for convenience
@@ -179,7 +181,7 @@ const CoinbaseErrorResponse = Schema.Struct({
179
181
  * 4. Coinbase-specific HTTP status codes (402)
180
182
  * 5. Falls back to UnknownCoinbaseError for unrecognized errors
181
183
  */
182
- const matchError = (status, errorBody) => {
184
+ const matchError = (status, errorBody, _errors, headers) => {
183
185
  try {
184
186
  const parsed = Schema.decodeUnknownSync(CoinbaseErrorResponse)(errorBody);
185
187
  const errorProps = {
@@ -199,12 +201,18 @@ const matchError = (status, errorBody) => {
199
201
  // to their corresponding core HTTP error classes.
200
202
  const StandardErrorClass = STANDARD_ERROR_TYPE_MAP[parsed.errorType];
201
203
  if (StandardErrorClass) {
202
- return Effect.fail(new StandardErrorClass({ message: parsed.errorMessage ?? "" }));
204
+ return Effect.fail(new StandardErrorClass({
205
+ message: parsed.errorMessage ?? "",
206
+ retryAfter: parseRetryAfterForStatus(status, headers),
207
+ }));
203
208
  }
204
209
  // 3. Fall back to HTTP status code mapping from core
205
210
  const CoreErrorClass = HTTP_STATUS_MAP[status];
206
211
  if (CoreErrorClass) {
207
- return Effect.fail(new CoreErrorClass({ message: parsed.errorMessage ?? "" }));
212
+ return Effect.fail(new CoreErrorClass({
213
+ message: parsed.errorMessage ?? "",
214
+ retryAfter: parseRetryAfterForStatus(status, headers),
215
+ }));
208
216
  }
209
217
  // 4. Coinbase-specific HTTP status codes (402)
210
218
  const CoinbaseErrorClass = COINBASE_HTTP_STATUS_MAP[status];
@@ -241,5 +249,6 @@ export const API = makeAPI({
241
249
  },
242
250
  matchError,
243
251
  ParseError: CoinbaseParseError,
252
+ retry: Retry,
244
253
  });
245
254
  //# sourceMappingURL=client.js.map
package/lib/client.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/lib/retry.d.ts CHANGED
@@ -1,22 +1,33 @@
1
1
  /**
2
2
  * Coinbase retry configuration.
3
+ *
4
+ * Defines the per-SDK `Retry` Context.Service tag that
5
+ * `packages/coinbase/src/client.ts` wires into `makeAPI`. Callers can
6
+ * install a blanket retry policy at the layer level and have every
7
+ * Coinbase API call below it pick it up:
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import * as Coinbase from "@distilled.cloud/coinbase";
12
+ *
13
+ * myEffect.pipe(Coinbase.Retry.transient);
14
+ * Effect.provide(myEffect, Layer.succeed(Coinbase.Retry.Retry, customPolicy));
15
+ * ```
3
16
  */
4
- import * as Effect from "effect/Effect";
5
17
  import * as Context from "effect/Context";
6
- export { type Options, type Factory, type Policy, makeDefault, jittered, capped, throttlingOptions, transientOptions, } from "@distilled.cloud/core/retry";
7
- import type { Policy } from "@distilled.cloud/core/retry";
18
+ import * as Effect from "effect/Effect";
19
+ import { type Policy } from "@distilled.cloud/core/retry";
20
+ export { type Options, type Factory, type Policy, makeDefault, jittered, capped, throttlingOptions, transientOptions, throttlingFactory, transientFactory, } from "@distilled.cloud/core/retry";
8
21
  declare const Retry_base: Context.ServiceClass<Retry, "CoinbaseRetry", Policy>;
9
- /**
10
- * Context tag for configuring retry behavior of Coinbase API calls.
11
- */
22
+ /** Context tag for configuring retry behavior of Coinbase API calls. */
12
23
  export declare class Retry extends Retry_base {
13
24
  }
14
- /**
15
- * Provides a custom retry policy to all Coinbase API calls.
16
- */
25
+ /** Provides a custom retry policy to every Coinbase API call below it. */
17
26
  export declare const policy: (optionsOrFactory: Policy) => <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Retry>>;
18
- /**
19
- * Disables all automatic retries.
20
- */
27
+ /** Disables all automatic retries. */
21
28
  export declare const none: <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Retry>>;
29
+ /** Apply the throttling retry policy (retries throttling errors indefinitely). */
30
+ export declare const throttling: <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Retry>>;
31
+ /** Apply the transient retry policy (retries all transient errors indefinitely). */
32
+ export declare const transient: <A, E, R>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E, Exclude<R, Retry>>;
22
33
  //# sourceMappingURL=retry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,WAAW,EACX,QAAQ,EACR,MAAM,EACN,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;;AAE1D;;GAEG;AACH,qBAAa,KAAM,SAAQ,UAAiD;CAAG;AAE/E;;GAEG;AACH,eAAO,MAAM,MAAM,qBAAsB,MAAM,sFACS,CAAC;AAEzD;;GAEG;AACH,eAAO,MAAM,IAAI,mFAEhB,CAAC"}
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EACL,KAAK,MAAM,EAGZ,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,WAAW,EACX,QAAQ,EACR,MAAM,EACN,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;;AAErC,wEAAwE;AACxE,qBAAa,KAAM,SAAQ,UAAiD;CAAG;AAE/E,0EAA0E;AAC1E,eAAO,MAAM,MAAM,qBAAsB,MAAM,sFACS,CAAC;AAEzD,sCAAsC;AACtC,eAAO,MAAM,IAAI,mFAEhB,CAAC;AAEF,kFAAkF;AAClF,eAAO,MAAM,UAAU,mFAA4B,CAAC;AAEpD,oFAAoF;AACpF,eAAO,MAAM,SAAS,mFAA2B,CAAC"}
package/lib/retry.js CHANGED
@@ -1,21 +1,33 @@
1
1
  /**
2
2
  * Coinbase retry configuration.
3
+ *
4
+ * Defines the per-SDK `Retry` Context.Service tag that
5
+ * `packages/coinbase/src/client.ts` wires into `makeAPI`. Callers can
6
+ * install a blanket retry policy at the layer level and have every
7
+ * Coinbase API call below it pick it up:
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import * as Coinbase from "@distilled.cloud/coinbase";
12
+ *
13
+ * myEffect.pipe(Coinbase.Retry.transient);
14
+ * Effect.provide(myEffect, Layer.succeed(Coinbase.Retry.Retry, customPolicy));
15
+ * ```
3
16
  */
17
+ import * as Context from "effect/Context";
4
18
  import * as Effect from "effect/Effect";
5
19
  import * as Layer from "effect/Layer";
6
- import * as Context from "effect/Context";
7
- export { makeDefault, jittered, capped, throttlingOptions, transientOptions, } from "@distilled.cloud/core/retry";
8
- /**
9
- * Context tag for configuring retry behavior of Coinbase API calls.
10
- */
20
+ import { throttlingFactory, transientFactory, } from "@distilled.cloud/core/retry";
21
+ export { makeDefault, jittered, capped, throttlingOptions, transientOptions, throttlingFactory, transientFactory, } from "@distilled.cloud/core/retry";
22
+ /** Context tag for configuring retry behavior of Coinbase API calls. */
11
23
  export class Retry extends Context.Service()("CoinbaseRetry") {
12
24
  }
13
- /**
14
- * Provides a custom retry policy to all Coinbase API calls.
15
- */
25
+ /** Provides a custom retry policy to every Coinbase API call below it. */
16
26
  export const policy = (optionsOrFactory) => Effect.provide(Layer.succeed(Retry, optionsOrFactory));
17
- /**
18
- * Disables all automatic retries.
19
- */
27
+ /** Disables all automatic retries. */
20
28
  export const none = Effect.provide(Layer.succeed(Retry, { while: () => false }));
29
+ /** Apply the throttling retry policy (retries throttling errors indefinitely). */
30
+ export const throttling = policy(throttlingFactory);
31
+ /** Apply the transient retry policy (retries all transient errors indefinitely). */
32
+ export const transient = policy(transientFactory);
21
33
  //# sourceMappingURL=retry.js.map
package/lib/retry.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAIL,WAAW,EACX,QAAQ,EACR,MAAM,EACN,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAGrC;;GAEG;AACH,MAAM,OAAO,KAAM,SAAQ,OAAO,CAAC,OAAO,EAAiB,CAAC,eAAe,CAAC;CAAG;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,gBAAwB,EAAE,EAAE,CACjD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAEzD;;GAEG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAChC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAC7C,CAAC"}
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,EAEL,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAIL,WAAW,EACX,QAAQ,EACR,MAAM,EACN,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AAErC,wEAAwE;AACxE,MAAM,OAAO,KAAM,SAAQ,OAAO,CAAC,OAAO,EAAiB,CAAC,eAAe,CAAC;CAAG;AAE/E,0EAA0E;AAC1E,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,gBAAwB,EAAE,EAAE,CACjD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAEzD,sCAAsC;AACtC,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAChC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAC7C,CAAC;AAEF,kFAAkF;AAClF,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAEpD,oFAAoF;AACpF,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@distilled.cloud/coinbase",
3
- "version": "0.16.1",
3
+ "version": "0.16.3",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/alchemy-run/distilled",
@@ -73,7 +73,7 @@
73
73
  "specs:update": "git -C specs/cdp-sdk fetch && git -C specs/cdp-sdk checkout main && git -C specs/cdp-sdk pull"
74
74
  },
75
75
  "dependencies": {
76
- "@distilled.cloud/core": "0.16.1",
76
+ "@distilled.cloud/core": "0.16.3",
77
77
  "effect": "4.0.0-beta.58"
78
78
  },
79
79
  "devDependencies": {
package/src/client.ts CHANGED
@@ -35,6 +35,8 @@ import * as Redacted from "effect/Redacted";
35
35
  import * as Schema from "effect/Schema";
36
36
  import * as crypto from "node:crypto";
37
37
  import { makeAPI } from "@distilled.cloud/core/client";
38
+ import { parseRetryAfterForStatus } from "@distilled.cloud/core/retry-after";
39
+ import { Retry } from "./retry.ts";
38
40
  import {
39
41
  HTTP_STATUS_MAP,
40
42
  COINBASE_HTTP_STATUS_MAP,
@@ -214,6 +216,8 @@ const CoinbaseErrorResponse = Schema.Struct({
214
216
  const matchError = (
215
217
  status: number,
216
218
  errorBody: unknown,
219
+ _errors?: readonly unknown[],
220
+ headers?: Record<string, string | undefined>,
217
221
  ): Effect.Effect<never, unknown> => {
218
222
  try {
219
223
  const parsed = Schema.decodeUnknownSync(CoinbaseErrorResponse)(errorBody);
@@ -237,7 +241,10 @@ const matchError = (
237
241
  const StandardErrorClass = STANDARD_ERROR_TYPE_MAP[parsed.errorType];
238
242
  if (StandardErrorClass) {
239
243
  return Effect.fail(
240
- new StandardErrorClass({ message: parsed.errorMessage ?? "" }),
244
+ new StandardErrorClass({
245
+ message: parsed.errorMessage ?? "",
246
+ retryAfter: parseRetryAfterForStatus(status, headers),
247
+ }),
241
248
  );
242
249
  }
243
250
 
@@ -245,7 +252,10 @@ const matchError = (
245
252
  const CoreErrorClass = (HTTP_STATUS_MAP as any)[status];
246
253
  if (CoreErrorClass) {
247
254
  return Effect.fail(
248
- new CoreErrorClass({ message: parsed.errorMessage ?? "" }),
255
+ new CoreErrorClass({
256
+ message: parsed.errorMessage ?? "",
257
+ retryAfter: parseRetryAfterForStatus(status, headers),
258
+ }),
249
259
  );
250
260
  }
251
261
 
@@ -288,4 +298,5 @@ export const API = makeAPI<Credentials>({
288
298
  },
289
299
  matchError,
290
300
  ParseError: CoinbaseParseError as any,
301
+ retry: Retry as any,
291
302
  });
package/src/retry.ts CHANGED
@@ -1,9 +1,28 @@
1
1
  /**
2
2
  * Coinbase retry configuration.
3
+ *
4
+ * Defines the per-SDK `Retry` Context.Service tag that
5
+ * `packages/coinbase/src/client.ts` wires into `makeAPI`. Callers can
6
+ * install a blanket retry policy at the layer level and have every
7
+ * Coinbase API call below it pick it up:
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import * as Coinbase from "@distilled.cloud/coinbase";
12
+ *
13
+ * myEffect.pipe(Coinbase.Retry.transient);
14
+ * Effect.provide(myEffect, Layer.succeed(Coinbase.Retry.Retry, customPolicy));
15
+ * ```
3
16
  */
17
+ import * as Context from "effect/Context";
4
18
  import * as Effect from "effect/Effect";
5
19
  import * as Layer from "effect/Layer";
6
- import * as Context from "effect/Context";
20
+ import {
21
+ type Policy,
22
+ throttlingFactory,
23
+ transientFactory,
24
+ } from "@distilled.cloud/core/retry";
25
+
7
26
  export {
8
27
  type Options,
9
28
  type Factory,
@@ -13,23 +32,24 @@ export {
13
32
  capped,
14
33
  throttlingOptions,
15
34
  transientOptions,
35
+ throttlingFactory,
36
+ transientFactory,
16
37
  } from "@distilled.cloud/core/retry";
17
- import type { Policy } from "@distilled.cloud/core/retry";
18
38
 
19
- /**
20
- * Context tag for configuring retry behavior of Coinbase API calls.
21
- */
39
+ /** Context tag for configuring retry behavior of Coinbase API calls. */
22
40
  export class Retry extends Context.Service<Retry, Policy>()("CoinbaseRetry") {}
23
41
 
24
- /**
25
- * Provides a custom retry policy to all Coinbase API calls.
26
- */
42
+ /** Provides a custom retry policy to every Coinbase API call below it. */
27
43
  export const policy = (optionsOrFactory: Policy) =>
28
44
  Effect.provide(Layer.succeed(Retry, optionsOrFactory));
29
45
 
30
- /**
31
- * Disables all automatic retries.
32
- */
46
+ /** Disables all automatic retries. */
33
47
  export const none = Effect.provide(
34
48
  Layer.succeed(Retry, { while: () => false }),
35
49
  );
50
+
51
+ /** Apply the throttling retry policy (retries throttling errors indefinitely). */
52
+ export const throttling = policy(throttlingFactory);
53
+
54
+ /** Apply the transient retry policy (retries all transient errors indefinitely). */
55
+ export const transient = policy(transientFactory);