@distilled.cloud/workos 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":"AAQA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AASxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAwD/C;;GAEG;AACH,eAAO,MAAM,GAAG;;;CAQd,CAAC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAWxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA+D/C;;GAEG;AACH,eAAO,MAAM,GAAG;;;CASd,CAAC"}
package/lib/client.js CHANGED
@@ -8,6 +8,8 @@ import * as Effect from "effect/Effect";
8
8
  import * as Redacted from "effect/Redacted";
9
9
  import * as Schema from "effect/Schema";
10
10
  import { makeAPI } from "@distilled.cloud/core/client";
11
+ import { parseRetryAfterForStatus } from "@distilled.cloud/core/retry-after";
12
+ import { Retry } from "./retry.js";
11
13
  import { HTTP_STATUS_MAP, UnknownWorkosError, WorkosParseError, } from "./errors.js";
12
14
  // Re-export for backwards compatibility
13
15
  export { UnknownWorkosError } from "./errors.js";
@@ -29,7 +31,7 @@ const ApiErrorResponse = Schema.Struct({
29
31
  * Match a WorkOS API error response to the appropriate error class based on
30
32
  * HTTP status.
31
33
  */
32
- const matchError = (status, errorBody) => {
34
+ const matchError = (status, errorBody, _errors, headers) => {
33
35
  // Try to extract a message and code from the body, but fall through to
34
36
  // status-code mapping regardless of whether the body parses as the
35
37
  // canonical WorkOS error shape. Some endpoints return non-JSON or
@@ -60,7 +62,10 @@ const matchError = (status, errorBody) => {
60
62
  }
61
63
  const ErrorClass = HTTP_STATUS_MAP[status];
62
64
  if (ErrorClass) {
63
- return Effect.fail(new ErrorClass({ message }));
65
+ return Effect.fail(new ErrorClass({
66
+ message,
67
+ retryAfter: parseRetryAfterForStatus(status, headers),
68
+ }));
64
69
  }
65
70
  return Effect.fail(new UnknownWorkosError({ code, message, body: errorBody }));
66
71
  };
@@ -75,5 +80,6 @@ export const API = makeAPI({
75
80
  }),
76
81
  matchError,
77
82
  ParseError: WorkosParseError,
83
+ retry: Retry,
78
84
  });
79
85
  //# 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
- * Workos retry configuration.
2
+ * WorkOS retry configuration.
3
+ *
4
+ * Defines the per-SDK `Retry` Context.Service tag that
5
+ * `packages/workos/src/client.ts` wires into `makeAPI`. Callers can
6
+ * install a blanket retry policy at the layer level and have every
7
+ * WorkOS API call below it pick it up:
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import * as WorkOS from "@distilled.cloud/workos";
12
+ *
13
+ * myEffect.pipe(WorkOS.Retry.transient);
14
+ * Effect.provide(myEffect, Layer.succeed(WorkOS.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";
8
- declare const Retry_base: Context.ServiceClass<Retry, "WorkosRetry", Policy>;
9
- /**
10
- * Context tag for configuring retry behavior of Workos API calls.
11
- */
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";
21
+ declare const Retry_base: Context.ServiceClass<Retry, "WorkOSRetry", Policy>;
22
+ /** Context tag for configuring retry behavior of WorkOS API calls. */
12
23
  export declare class Retry extends Retry_base {
13
24
  }
14
- /**
15
- * Provides a custom retry policy to all Workos API calls.
16
- */
25
+ /** Provides a custom retry policy to every WorkOS 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,UAA+C;CAAG;AAE7E;;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,sEAAsE;AACtE,qBAAa,KAAM,SAAQ,UAA+C;CAAG;AAE7E,wEAAwE;AACxE,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
- * Workos retry configuration.
2
+ * WorkOS retry configuration.
3
+ *
4
+ * Defines the per-SDK `Retry` Context.Service tag that
5
+ * `packages/workos/src/client.ts` wires into `makeAPI`. Callers can
6
+ * install a blanket retry policy at the layer level and have every
7
+ * WorkOS API call below it pick it up:
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import * as WorkOS from "@distilled.cloud/workos";
12
+ *
13
+ * myEffect.pipe(WorkOS.Retry.transient);
14
+ * Effect.provide(myEffect, Layer.succeed(WorkOS.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 Workos API calls.
10
- */
11
- export class Retry extends Context.Service()("WorkosRetry") {
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 WorkOS API calls. */
23
+ export class Retry extends Context.Service()("WorkOSRetry") {
12
24
  }
13
- /**
14
- * Provides a custom retry policy to all Workos API calls.
15
- */
25
+ /** Provides a custom retry policy to every WorkOS 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,aAAa,CAAC;CAAG;AAE7E;;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,sEAAsE;AACtE,MAAM,OAAO,KAAM,SAAQ,OAAO,CAAC,OAAO,EAAiB,CAAC,aAAa,CAAC;CAAG;AAE7E,wEAAwE;AACxE,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/workos",
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/openapi-spec fetch && git -C specs/openapi-spec checkout main && git -C specs/openapi-spec 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
@@ -8,6 +8,8 @@ import * as Effect from "effect/Effect";
8
8
  import * as Redacted from "effect/Redacted";
9
9
  import * as Schema from "effect/Schema";
10
10
  import { makeAPI } from "@distilled.cloud/core/client";
11
+ import { parseRetryAfterForStatus } from "@distilled.cloud/core/retry-after";
12
+ import { Retry } from "./retry.ts";
11
13
  import {
12
14
  HTTP_STATUS_MAP,
13
15
  UnknownWorkosError,
@@ -39,6 +41,8 @@ const ApiErrorResponse = Schema.Struct({
39
41
  const matchError = (
40
42
  status: number,
41
43
  errorBody: unknown,
44
+ _errors?: readonly unknown[],
45
+ headers?: Record<string, string | undefined>,
42
46
  ): Effect.Effect<never, unknown> => {
43
47
  // Try to extract a message and code from the body, but fall through to
44
48
  // status-code mapping regardless of whether the body parses as the
@@ -65,7 +69,12 @@ const matchError = (
65
69
  }
66
70
  const ErrorClass = (HTTP_STATUS_MAP as any)[status];
67
71
  if (ErrorClass) {
68
- return Effect.fail(new ErrorClass({ message }));
72
+ return Effect.fail(
73
+ new ErrorClass({
74
+ message,
75
+ retryAfter: parseRetryAfterForStatus(status, headers),
76
+ }),
77
+ );
69
78
  }
70
79
  return Effect.fail(
71
80
  new UnknownWorkosError({ code, message, body: errorBody }),
@@ -83,4 +92,5 @@ export const API = makeAPI<Credentials>({
83
92
  }),
84
93
  matchError,
85
94
  ParseError: WorkosParseError as any,
95
+ retry: Retry as any,
86
96
  });
package/src/retry.ts CHANGED
@@ -1,9 +1,28 @@
1
1
  /**
2
- * Workos retry configuration.
2
+ * WorkOS retry configuration.
3
+ *
4
+ * Defines the per-SDK `Retry` Context.Service tag that
5
+ * `packages/workos/src/client.ts` wires into `makeAPI`. Callers can
6
+ * install a blanket retry policy at the layer level and have every
7
+ * WorkOS API call below it pick it up:
8
+ *
9
+ * @example
10
+ * ```ts
11
+ * import * as WorkOS from "@distilled.cloud/workos";
12
+ *
13
+ * myEffect.pipe(WorkOS.Retry.transient);
14
+ * Effect.provide(myEffect, Layer.succeed(WorkOS.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 Workos API calls.
21
- */
22
- export class Retry extends Context.Service<Retry, Policy>()("WorkosRetry") {}
39
+ /** Context tag for configuring retry behavior of WorkOS API calls. */
40
+ export class Retry extends Context.Service<Retry, Policy>()("WorkOSRetry") {}
23
41
 
24
- /**
25
- * Provides a custom retry policy to all Workos API calls.
26
- */
42
+ /** Provides a custom retry policy to every WorkOS 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);