@distilled.cloud/core 0.15.2 → 0.16.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/lib/client.d.ts CHANGED
@@ -1,30 +1,3 @@
1
- /**
2
- * REST API Client
3
- *
4
- * Provides the core API.make() factory for building typed Effect-based API operations.
5
- * This is the shared client for REST/OpenAPI-style SDKs (PlanetScale, Neon, GCP).
6
- *
7
- * AWS and Cloudflare have their own more specialized client implementations,
8
- * but they share the same OperationMethod pattern.
9
- *
10
- * @example
11
- * ```ts
12
- * import { API } from "@distilled.cloud/core/client";
13
- *
14
- * const listDatabases = API.make(() => ({
15
- * inputSchema: ListDatabasesInput,
16
- * outputSchema: ListDatabasesOutput,
17
- * errors: [NotFound, Forbidden] as const,
18
- * }));
19
- *
20
- * // Direct call
21
- * const result = yield* listDatabases({ organization: "my-org" });
22
- *
23
- * // Yield first for requirement-free function
24
- * const fn = yield* listDatabases;
25
- * const result = yield* fn({ organization: "my-org" });
26
- * ```
27
- */
28
1
  import * as Effect from "effect/Effect";
29
2
  import * as Schema from "effect/Schema";
30
3
  import * as Stream from "effect/Stream";
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/lib/client.js CHANGED
@@ -25,19 +25,35 @@
25
25
  * const result = yield* fn({ organization: "my-org" });
26
26
  * ```
27
27
  */
28
+ import * as Duration from "effect/Duration";
28
29
  import * as Effect from "effect/Effect";
29
30
  import { pipeArguments } from "effect/Pipeable";
31
+ import { MinimumLogLevel } from "effect/References";
32
+ import * as Schedule from "effect/Schedule";
30
33
  import * as Schema from "effect/Schema";
31
34
  import * as AST from "effect/SchemaAST";
32
35
  import * as Stream from "effect/Stream";
36
+ import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient";
33
37
  import * as HttpBody from "effect/unstable/http/HttpBody";
34
38
  import * as HttpClient from "effect/unstable/http/HttpClient";
35
39
  import * as HttpClientError from "effect/unstable/http/HttpClientError";
36
40
  import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest";
37
41
  import { SingleShotGen } from "effect/Utils";
38
42
  import { extractItems, paginateWithDefaults, } from "./pagination.js";
43
+ import * as Category from "./category.js";
39
44
  import * as Traits from "./traits.js";
40
45
  import { getPath } from "./traits.js";
46
+ // `DISTILLED_DEBUG=1` forces the MinimumLogLevel to Debug for SDK operations,
47
+ // independent of the caller's logger config. Users who set `MinimumLogLevel`
48
+ // to Debug themselves get the same logs without needing the env var.
49
+ const distilledDebugEnv = (() => {
50
+ try {
51
+ return (typeof process !== "undefined" && process.env?.DISTILLED_DEBUG === "1");
52
+ }
53
+ catch {
54
+ return false;
55
+ }
56
+ })();
41
57
  const isEffectLike = (value) => typeof value === "object" &&
42
58
  value !== null &&
43
59
  typeof value.pipe === "function" &&
@@ -188,13 +204,25 @@ export const makeAPI = (config) => {
188
204
  const inputSchema = (opConfig.inputSchema ?? opConfig.input);
189
205
  const outputSchema = (opConfig.outputSchema ?? opConfig.output);
190
206
  const responsePath = Traits.getResponsePath(outputSchema.ast);
207
+ const graphqlOp = Traits.getGraphQLOp(inputSchema.ast);
208
+ const noFollowRedirect = Traits.getNoFollowRedirect(inputSchema.ast);
191
209
  // Read HTTP trait from input schema annotations
192
210
  const httpTrait = Traits.getHttpTrait(inputSchema.ast);
193
211
  if (!httpTrait) {
194
212
  throw new Error("Input schema must have Http trait");
195
213
  }
196
214
  const method = httpTrait.method;
197
- const fn = (input) => Effect.gen(function* () {
215
+ // Capped exponential backoff bounded to 8 attempts so a
216
+ // pathologically rate-limited endpoint can't hang a test run.
217
+ // Effect 4's `Schedule.exponential(base, factor)` already produces
218
+ // delays of base, base*factor, base*factor^2, ...; combined with
219
+ // `Schedule.both(Schedule.recurs(8))` to cap retries. We don't
220
+ // currently honour Retry-After (would require a per-attempt Ref);
221
+ // the exponential ramp is conservative enough for the rate limits
222
+ // we hit in practice.
223
+ const throttlingRetrySchedule = Schedule.both(Schedule.exponential(Duration.seconds(1), 2), Schedule.recurs(8));
224
+ const spanName = `${method} ${httpTrait.path}`;
225
+ const innerFn = (input) => Effect.gen(function* () {
198
226
  const credentials = yield* config.credentials;
199
227
  const creds = isEffectLike(credentials)
200
228
  ? yield* credentials
@@ -204,6 +232,19 @@ export const makeAPI = (config) => {
204
232
  const authHeaders = config.getAuthHeaders(creds);
205
233
  // Use schema-aware request builder for proper camelCase → wire_name mapping
206
234
  let parts = Traits.buildRequestParts(inputSchema.ast, httpTrait, input, inputSchema);
235
+ // GraphQL: wrap variables in the standard GraphQL request envelope.
236
+ // All input fields become `variables`; `query` and `operationName`
237
+ // come from the trait (baked in at generation time).
238
+ if (graphqlOp) {
239
+ parts = {
240
+ ...parts,
241
+ body: {
242
+ query: graphqlOp.query,
243
+ operationName: graphqlOp.operationName,
244
+ variables: parts.body ?? {},
245
+ },
246
+ };
247
+ }
207
248
  if (config.transformRequestParts) {
208
249
  parts = config.transformRequestParts({
209
250
  input: input,
@@ -257,7 +298,33 @@ export const makeAPI = (config) => {
257
298
  request = HttpClientRequest.setUrlParams(request, extraQuery);
258
299
  }
259
300
  }
260
- const response = yield* client.execute(request).pipe(Effect.scoped);
301
+ const requestUrl = baseUrl + parts.path;
302
+ yield* Effect.logDebug(`→ ${method} ${requestUrl}`);
303
+ // For operations that opt out of following redirects, hand the
304
+ // underlying fetch a `redirect: "manual"` request init so the
305
+ // 3xx surfaces here instead of being chased to the IdP.
306
+ const executeRequest = noFollowRedirect
307
+ ? client.execute(request).pipe(Effect.scoped, Effect.provideService(FetchHttpClient.RequestInit, {
308
+ redirect: "manual",
309
+ }))
310
+ : client.execute(request).pipe(Effect.scoped);
311
+ const response = yield* executeRequest;
312
+ yield* Effect.logDebug(`← ${response.status} ${method} ${requestUrl}`);
313
+ // For ops that opted out of redirect-following, treat 3xx as
314
+ // success: synthesize a body containing the Location header
315
+ // value at `locationField` (default `"url"`) and feed that
316
+ // through the normal output schema decode below.
317
+ if (noFollowRedirect &&
318
+ response.status >= 300 &&
319
+ response.status < 400) {
320
+ const location = response.headers["location"] ?? response.headers["Location"];
321
+ if (location !== undefined) {
322
+ const synthBody = {
323
+ [noFollowRedirect.locationField ?? "url"]: location,
324
+ };
325
+ return yield* Schema.decodeUnknownEffect(outputSchema)(synthBody).pipe(Effect.catchTag("SchemaError", (cause) => Effect.fail(new config.ParseError({ body: synthBody, cause }))));
326
+ }
327
+ }
261
328
  if (response.status >= 400) {
262
329
  // Try to parse error body as JSON; fall back to text if not JSON
263
330
  const errorBody = yield* response.json.pipe(Effect.catchIf(() => true, () => response.text.pipe(Effect.map((text) => ({ _nonJsonError: true, body: text })), Effect.catchIf(() => true, () => Effect.succeed({
@@ -284,6 +351,20 @@ export const makeAPI = (config) => {
284
351
  let responseBody = config.transformResponse
285
352
  ? config.transformResponse(rawBody)
286
353
  : rawBody;
354
+ // GraphQL: surface errors[] (returned with HTTP 200) via matchError,
355
+ // then leave unwrap to the output schema's `T.ResponsePath` trait,
356
+ // which the generator emits with the field path from `data`. This
357
+ // handles namespaced ops (e.g. `data.channels.byId`) uniformly with
358
+ // top-level ones (e.g. `data.me`).
359
+ if (graphqlOp) {
360
+ const envelope = responseBody;
361
+ if (envelope &&
362
+ Array.isArray(envelope.errors) &&
363
+ envelope.errors.length > 0) {
364
+ return yield* config.matchError(response.status, envelope, opConfig.errors);
365
+ }
366
+ responseBody = envelope?.data ?? null;
367
+ }
287
368
  // Some APIs return a JSON *string* (double-encoded JSON). `response.json`
288
369
  // then yields a string, `getPath` bails out, and we would decode the wrong
289
370
  // shape (e.g. Cloudflare envelopes without unwrapping `result`).
@@ -314,6 +395,26 @@ export const makeAPI = (config) => {
314
395
  }
315
396
  return yield* Schema.decodeUnknownEffect(outputSchema)(responseBody).pipe(Effect.catchTag("SchemaError", (cause) => Effect.fail(new config.ParseError({ body: rawBody, cause }))));
316
397
  });
398
+ // Auto-retry whenever the SDK's matchError returns a typed error
399
+ // tagged with the throttling category (e.g. `TooManyRequests`,
400
+ // or any SDK-specific subclass marked with `withThrottlingError`
401
+ // / `withRetryable({ throttling: true })`). After retries are
402
+ // exhausted the original typed error propagates to the caller as
403
+ // usual.
404
+ const fn = (input) => {
405
+ const withRetry = innerFn(input).pipe(Effect.retry({
406
+ schedule: throttlingRetrySchedule,
407
+ while: (e) => Category.isThrottling(e),
408
+ }), Effect.withSpan(spanName, {
409
+ attributes: {
410
+ "http.method": method,
411
+ "http.route": httpTrait.path,
412
+ },
413
+ }));
414
+ return distilledDebugEnv
415
+ ? Effect.provideService(withRetry, MinimumLogLevel, "Debug")
416
+ : withRetry;
417
+ };
317
418
  const Proto = {
318
419
  [Symbol.iterator]() {
319
420
  return new SingleShotGen(this);
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/traits.d.ts CHANGED
@@ -139,6 +139,40 @@ export declare const httpBodySymbol: unique symbol;
139
139
  * (not a named field within a JSON body).
140
140
  */
141
141
  export declare const HttpBody: () => Annotation;
142
+ /** Symbol for GraphQL operation metadata (query string + operation name) */
143
+ export declare const graphqlOpSymbol: unique symbol;
144
+ /** GraphQL operation type */
145
+ export type GraphQLOpType = "query" | "mutation";
146
+ /** GraphQL operation trait configuration */
147
+ export interface GraphQLOpTrait {
148
+ /** The full GraphQL operation document (e.g., `query getUser($id: ID!) { ... }`) */
149
+ query: string;
150
+ /** The operation name — used to extract the response from `data.<operationName>` */
151
+ operationName: string;
152
+ /** Whether this is a query or a mutation */
153
+ type: GraphQLOpType;
154
+ }
155
+ /**
156
+ * GraphQLOp trait - declares an operation as GraphQL. When present, the client
157
+ * wraps the request body as `{ query, operationName, variables: <inputs> }` and
158
+ * extracts the response from `data.<operationName>`. The Http trait's path is
159
+ * still used as the GraphQL endpoint (typically `/graphql`).
160
+ *
161
+ * @example
162
+ * ```ts
163
+ * const GetUserInput = Schema.Struct({
164
+ * id: Schema.String,
165
+ * }).pipe(
166
+ * T.Http({ method: "POST", path: "/graphql" }),
167
+ * T.GraphQLOp({
168
+ * query: "query getUser($id: ID!) { user(id: $id) { id name } }",
169
+ * operationName: "getUser",
170
+ * type: "query",
171
+ * }),
172
+ * );
173
+ * ```
174
+ */
175
+ export declare const GraphQLOp: (trait: GraphQLOpTrait) => Annotation;
142
176
  /** Symbol for response body path transformation */
143
177
  export declare const responsePathSymbol: unique symbol;
144
178
  /**
@@ -153,6 +187,49 @@ export declare const httpFormDataFileSymbol: unique symbol;
153
187
  * HttpFormDataFile - marks a field as a file upload in multipart form data.
154
188
  */
155
189
  export declare const HttpFormDataFile: () => Annotation;
190
+ /** Symbol for "do not follow redirects; treat 3xx Location header as success body" */
191
+ export declare const httpNoFollowRedirectSymbol: unique symbol;
192
+ /**
193
+ * Configuration for the `NoFollowRedirect` trait.
194
+ */
195
+ export interface NoFollowRedirectTrait {
196
+ /**
197
+ * The field name on the success-side output schema that should receive the
198
+ * value of the response's `Location` header when the server returns a
199
+ * 3xx redirect. Defaults to `"url"`.
200
+ *
201
+ * Concretely: when an operation carrying this trait gets a 3xx response,
202
+ * the runtime client constructs `{ [locationField]: <Location header> }`
203
+ * and feeds that into the output schema decoder, instead of trying to
204
+ * decode the redirect body (which would normally be HTML or empty).
205
+ */
206
+ locationField?: string;
207
+ }
208
+ /**
209
+ * NoFollowRedirect trait - opts an operation out of the underlying HTTP
210
+ * client's automatic redirect-following.
211
+ *
212
+ * Some endpoints — notably OAuth/SSO authorize endpoints — return their
213
+ * useful result as a `Location` header on a 302 response. The default
214
+ * `fetch` follows that redirect to the IdP's HTML login page, so by the
215
+ * time the client sees a body it's no longer the SDK's expected JSON.
216
+ *
217
+ * Marking an operation with this trait makes the runtime client:
218
+ * 1. Issue the request with `redirect: "manual"` so the 3xx surfaces
219
+ * to user code.
220
+ * 2. On a 3xx, build a synthetic body `{ [locationField]: <Location> }`
221
+ * and decode that into the output schema (default field name `"url"`).
222
+ *
223
+ * @example
224
+ * ```ts
225
+ * const SsoAuthorizeInput = Schema.Struct({...}).pipe(
226
+ * T.Http({ method: "GET", path: "/sso/authorize" }),
227
+ * T.NoFollowRedirect(),
228
+ * );
229
+ * const SsoAuthorizeOutput = Schema.Struct({ url: Schema.String });
230
+ * ```
231
+ */
232
+ export declare const NoFollowRedirect: (trait?: NoFollowRedirectTrait) => Annotation;
156
233
  /** Symbol for API error code mapping */
157
234
  export declare const apiErrorCodeSymbol: unique symbol;
158
235
  /**
@@ -195,6 +272,14 @@ export declare const getAnnotation: <T>(ast: AST.AST, symbol: symbol) => T | und
195
272
  */
196
273
  export declare const getHttpTrait: (ast: AST.AST) => HttpTrait | undefined;
197
274
  export declare const getResponsePath: (ast: AST.AST) => string | undefined;
275
+ /**
276
+ * Get GraphQL operation trait from a schema's AST.
277
+ */
278
+ export declare const getGraphQLOp: (ast: AST.AST) => GraphQLOpTrait | undefined;
279
+ /**
280
+ * Get the `NoFollowRedirect` trait config from an input schema's AST, if any.
281
+ */
282
+ export declare const getNoFollowRedirect: (ast: AST.AST) => NoFollowRedirectTrait | undefined;
198
283
  /**
199
284
  * Check if a PropertySignature has the pathParam annotation.
200
285
  * Works for both PathParam() (annotation value = true) and HttpPath("wire_name") (annotation value = string).
@@ -253,18 +338,7 @@ export interface RequestParts {
253
338
  /** Whether the body should use multipart/form-data */
254
339
  isMultipart: boolean;
255
340
  }
256
- /**
257
- * Schema-aware request builder. Categorizes input properties into path, query, header,
258
- * and body parts using annotations on the schema AST.
259
- *
260
- * Handles camelCase → wire_name mapping for path params (HttpPath), query params (HttpQuery),
261
- * and header params (HttpHeader).
262
- *
263
- * When `inputSchema` is provided, uses `Schema.encodeSync` to encode the input through the
264
- * schema's encoding pipeline (e.g., `encodeKeys` for camelCase → snake_case mapping).
265
- * The encoded output is used for body construction, ensuring wire-format key names.
266
- */
267
- export declare const buildRequestParts: (ast: AST.AST, httpTrait: HttpTrait, input: Record<string, unknown>, inputSchema?: any) => RequestParts;
341
+ export declare const buildRequestParts: (ast: AST.AST, httpTrait: HttpTrait, rawInput: Record<string, unknown>, inputSchema?: any) => RequestParts;
268
342
  /**
269
343
  * Helper to get a value from an object using a dot-separated path.
270
344
  * Used for pagination traits and nested property access.
@@ -1 +1 @@
1
- {"version":3,"file":"traits.d.ts","sourceRoot":"","sources":["../src/traits.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"traits.d.ts","sourceRoot":"","sources":["../src/traits.ts"],"names":[],"mappings":"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"}
package/lib/traits.js CHANGED
@@ -19,6 +19,7 @@
19
19
  * );
20
20
  * ```
21
21
  */
22
+ import * as Redacted from "effect/Redacted";
22
23
  import * as Schema from "effect/Schema";
23
24
  import * as AST from "effect/SchemaAST";
24
25
  // ============================================================================
@@ -164,6 +165,29 @@ export const httpBodySymbol = Symbol.for("@distilled.cloud/http-body");
164
165
  * (not a named field within a JSON body).
165
166
  */
166
167
  export const HttpBody = () => makeAnnotation(httpBodySymbol, true);
168
+ /** Symbol for GraphQL operation metadata (query string + operation name) */
169
+ export const graphqlOpSymbol = Symbol.for("@distilled.cloud/graphql-op");
170
+ /**
171
+ * GraphQLOp trait - declares an operation as GraphQL. When present, the client
172
+ * wraps the request body as `{ query, operationName, variables: <inputs> }` and
173
+ * extracts the response from `data.<operationName>`. The Http trait's path is
174
+ * still used as the GraphQL endpoint (typically `/graphql`).
175
+ *
176
+ * @example
177
+ * ```ts
178
+ * const GetUserInput = Schema.Struct({
179
+ * id: Schema.String,
180
+ * }).pipe(
181
+ * T.Http({ method: "POST", path: "/graphql" }),
182
+ * T.GraphQLOp({
183
+ * query: "query getUser($id: ID!) { user(id: $id) { id name } }",
184
+ * operationName: "getUser",
185
+ * type: "query",
186
+ * }),
187
+ * );
188
+ * ```
189
+ */
190
+ export const GraphQLOp = (trait) => makeAnnotation(graphqlOpSymbol, trait);
167
191
  /** Symbol for response body path transformation */
168
192
  export const responsePathSymbol = Symbol.for("@distilled.cloud/response-path");
169
193
  /**
@@ -179,6 +203,36 @@ export const httpFormDataFileSymbol = Symbol.for("@distilled.cloud/http-form-dat
179
203
  */
180
204
  export const HttpFormDataFile = () => makeAnnotation(httpFormDataFileSymbol, true);
181
205
  // =============================================================================
206
+ // Redirect-as-Response Trait
207
+ // =============================================================================
208
+ /** Symbol for "do not follow redirects; treat 3xx Location header as success body" */
209
+ export const httpNoFollowRedirectSymbol = Symbol.for("@distilled.cloud/http-no-follow-redirect");
210
+ /**
211
+ * NoFollowRedirect trait - opts an operation out of the underlying HTTP
212
+ * client's automatic redirect-following.
213
+ *
214
+ * Some endpoints — notably OAuth/SSO authorize endpoints — return their
215
+ * useful result as a `Location` header on a 302 response. The default
216
+ * `fetch` follows that redirect to the IdP's HTML login page, so by the
217
+ * time the client sees a body it's no longer the SDK's expected JSON.
218
+ *
219
+ * Marking an operation with this trait makes the runtime client:
220
+ * 1. Issue the request with `redirect: "manual"` so the 3xx surfaces
221
+ * to user code.
222
+ * 2. On a 3xx, build a synthetic body `{ [locationField]: <Location> }`
223
+ * and decode that into the output schema (default field name `"url"`).
224
+ *
225
+ * @example
226
+ * ```ts
227
+ * const SsoAuthorizeInput = Schema.Struct({...}).pipe(
228
+ * T.Http({ method: "GET", path: "/sso/authorize" }),
229
+ * T.NoFollowRedirect(),
230
+ * );
231
+ * const SsoAuthorizeOutput = Schema.Struct({ url: Schema.String });
232
+ * ```
233
+ */
234
+ export const NoFollowRedirect = (trait = {}) => makeAnnotation(httpNoFollowRedirectSymbol, trait);
235
+ // =============================================================================
182
236
  // API Error Code Trait
183
237
  // =============================================================================
184
238
  /** Symbol for API error code mapping */
@@ -228,6 +282,14 @@ export const getAnnotation = (ast, symbol) => {
228
282
  */
229
283
  export const getHttpTrait = (ast) => getAnnotation(ast, httpSymbol);
230
284
  export const getResponsePath = (ast) => getAnnotation(ast, responsePathSymbol);
285
+ /**
286
+ * Get GraphQL operation trait from a schema's AST.
287
+ */
288
+ export const getGraphQLOp = (ast) => getAnnotation(ast, graphqlOpSymbol);
289
+ /**
290
+ * Get the `NoFollowRedirect` trait config from an input schema's AST, if any.
291
+ */
292
+ export const getNoFollowRedirect = (ast) => getAnnotation(ast, httpNoFollowRedirectSymbol);
231
293
  /**
232
294
  * Check if a PropertySignature has the pathParam annotation.
233
295
  * Works for both PathParam() (annotation value = true) and HttpPath("wire_name") (annotation value = string).
@@ -328,9 +390,55 @@ export const getPathParamWireName = (prop) => {
328
390
  * schema's encoding pipeline (e.g., `encodeKeys` for camelCase → snake_case mapping).
329
391
  * The encoded output is used for body construction, ensuring wire-format key names.
330
392
  */
331
- export const buildRequestParts = (ast, httpTrait, input,
393
+ /**
394
+ * Recursively unwrap any `Redacted<T>` values in a structure into their
395
+ * underlying `T`.
396
+ *
397
+ * Sensitive response fields surface to callers as `Redacted<string>` (so
398
+ * they don't accidentally land in logs). Those same values often need to be
399
+ * passed straight back into a follow-up request — e.g. WorkOS's password
400
+ * reset flow returns a redacted `password_reset_token` whose shape is
401
+ * `Redacted<string>` and which is then sent into `ResetPassword({ token })`,
402
+ * where `token` is declared as plain `Schema.String`. Without this unwrap
403
+ * the input encoder sees a `Redacted` (whose toString is `"<redacted>"`)
404
+ * and rejects the value with `Expected string, got <redacted>`.
405
+ *
406
+ * Doing the unwrap right before `Schema.encodeSync` keeps the contract
407
+ * simple: callers can hand a `Redacted` to any field and the wire payload
408
+ * still contains the underlying value. Schemas that *want* a `Redacted` on
409
+ * the wire (i.e. `SensitiveString`) handle it through their own encode
410
+ * transform, so they're unaffected — by the time encodeSync sees the value
411
+ * it's already a plain string, which is what the wire format wants anyway.
412
+ */
413
+ const unwrapRedactedDeep = (value) => {
414
+ if (Redacted.isRedacted(value))
415
+ return Redacted.value(value);
416
+ if (Array.isArray(value))
417
+ return value.map(unwrapRedactedDeep);
418
+ if (value !== null && typeof value === "object") {
419
+ // Only walk into plain objects. Builtins like File, Blob, FormData,
420
+ // ArrayBuffer, TypedArrays, Map/Set, Date, Streams, etc. don't contain
421
+ // Redacted values and would be destroyed by Object.entries() — `new
422
+ // File([], "x")` has no own enumerable keys, so a recursive copy returns
423
+ // `{}` and the schema encoder later rejects the empty object with
424
+ // "Expected File, got {}". Preserve any non-plain object as-is.
425
+ const proto = Object.getPrototypeOf(value);
426
+ if (proto !== null && proto !== Object.prototype)
427
+ return value;
428
+ const out = {};
429
+ for (const [k, v] of Object.entries(value)) {
430
+ out[k] = unwrapRedactedDeep(v);
431
+ }
432
+ return out;
433
+ }
434
+ return value;
435
+ };
436
+ export const buildRequestParts = (ast, httpTrait, rawInput,
332
437
  // biome-ignore lint: using any for generic schema parameter
333
438
  inputSchema) => {
439
+ // Unwrap any `Redacted<T>` values in the input up front so the schema
440
+ // encoder never sees them. See `unwrapRedactedDeep` for rationale.
441
+ const input = unwrapRedactedDeep(rawInput);
334
442
  let path = httpTrait.path;
335
443
  const query = {};
336
444
  const headers = {};
package/lib/traits.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"traits.js","sourceRoot":"","sources":["../src/traits.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"traits.js","sourceRoot":"","sources":["../src/traits.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@distilled.cloud/core",
3
- "version": "0.15.2",
3
+ "version": "0.16.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/alchemy-run/distilled",
@@ -56,6 +56,10 @@
56
56
  "./openapi/generate": {
57
57
  "bun": "./scripts/generate-openapi.ts",
58
58
  "default": "./scripts/generate-openapi.ts"
59
+ },
60
+ "./graphql/generate": {
61
+ "bun": "./scripts/generate-graphql.ts",
62
+ "default": "./scripts/generate-graphql.ts"
59
63
  }
60
64
  },
61
65
  "scripts": {
@@ -64,7 +68,7 @@
64
68
  "fmt": "oxfmt --write src",
65
69
  "lint": "oxlint --fix src",
66
70
  "check": "tsgo && oxlint src && oxfmt --check src",
67
- "test": "bunx vitest run test --exclude specs",
71
+ "test": "bunx vitest run test --exclude specs --passWithNoTests",
68
72
  "publish:npm": "bun run build && bun publish --access public"
69
73
  },
70
74
  "dependencies": {
package/src/client.ts CHANGED
@@ -25,11 +25,15 @@
25
25
  * const result = yield* fn({ organization: "my-org" });
26
26
  * ```
27
27
  */
28
+ import * as Duration from "effect/Duration";
28
29
  import * as Effect from "effect/Effect";
29
30
  import { pipeArguments } from "effect/Pipeable";
31
+ import { MinimumLogLevel } from "effect/References";
32
+ import * as Schedule from "effect/Schedule";
30
33
  import * as Schema from "effect/Schema";
31
34
  import * as AST from "effect/SchemaAST";
32
35
  import * as Stream from "effect/Stream";
36
+ import * as FetchHttpClient from "effect/unstable/http/FetchHttpClient";
33
37
  import * as HttpBody from "effect/unstable/http/HttpBody";
34
38
  import * as HttpClient from "effect/unstable/http/HttpClient";
35
39
  import * as HttpClientError from "effect/unstable/http/HttpClientError";
@@ -41,9 +45,23 @@ import {
41
45
  type PaginatedTrait,
42
46
  type PaginationStrategy,
43
47
  } from "./pagination.ts";
48
+ import * as Category from "./category.ts";
44
49
  import * as Traits from "./traits.ts";
45
50
  import { getPath } from "./traits.ts";
46
51
 
52
+ // `DISTILLED_DEBUG=1` forces the MinimumLogLevel to Debug for SDK operations,
53
+ // independent of the caller's logger config. Users who set `MinimumLogLevel`
54
+ // to Debug themselves get the same logs without needing the env var.
55
+ const distilledDebugEnv: boolean = (() => {
56
+ try {
57
+ return (
58
+ typeof process !== "undefined" && process.env?.DISTILLED_DEBUG === "1"
59
+ );
60
+ } catch {
61
+ return false;
62
+ }
63
+ })();
64
+
47
65
  // ============================================================================
48
66
  // Client Types
49
67
  // ============================================================================
@@ -377,6 +395,8 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
377
395
  const inputSchema = (opConfig.inputSchema ?? opConfig.input)!;
378
396
  const outputSchema = (opConfig.outputSchema ?? opConfig.output)!;
379
397
  const responsePath = Traits.getResponsePath(outputSchema.ast);
398
+ const graphqlOp = Traits.getGraphQLOp(inputSchema.ast);
399
+ const noFollowRedirect = Traits.getNoFollowRedirect(inputSchema.ast);
380
400
  type Input = Schema.Schema.Type<I>;
381
401
 
382
402
  // Read HTTP trait from input schema annotations
@@ -388,7 +408,22 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
388
408
 
389
409
  const method = httpTrait.method;
390
410
 
391
- const fn = (input: Input): Effect.Effect<any, any, any> =>
411
+ // Capped exponential backoff bounded to 8 attempts so a
412
+ // pathologically rate-limited endpoint can't hang a test run.
413
+ // Effect 4's `Schedule.exponential(base, factor)` already produces
414
+ // delays of base, base*factor, base*factor^2, ...; combined with
415
+ // `Schedule.both(Schedule.recurs(8))` to cap retries. We don't
416
+ // currently honour Retry-After (would require a per-attempt Ref);
417
+ // the exponential ramp is conservative enough for the rate limits
418
+ // we hit in practice.
419
+ const throttlingRetrySchedule = Schedule.both(
420
+ Schedule.exponential(Duration.seconds(1), 2),
421
+ Schedule.recurs(8),
422
+ );
423
+
424
+ const spanName = `${method} ${httpTrait.path}`;
425
+
426
+ const innerFn = (input: Input): Effect.Effect<any, any, any> =>
392
427
  Effect.gen(function* () {
393
428
  const credentials = yield* config.credentials as any;
394
429
  const creds = isEffectLike(credentials)
@@ -407,6 +442,20 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
407
442
  inputSchema,
408
443
  );
409
444
 
445
+ // GraphQL: wrap variables in the standard GraphQL request envelope.
446
+ // All input fields become `variables`; `query` and `operationName`
447
+ // come from the trait (baked in at generation time).
448
+ if (graphqlOp) {
449
+ parts = {
450
+ ...parts,
451
+ body: {
452
+ query: graphqlOp.query,
453
+ operationName: graphqlOp.operationName,
454
+ variables: parts.body ?? {},
455
+ },
456
+ };
457
+ }
458
+
410
459
  if (config.transformRequestParts) {
411
460
  parts = config.transformRequestParts({
412
461
  input: input as Record<string, unknown>,
@@ -481,7 +530,52 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
481
530
  }
482
531
  }
483
532
 
484
- const response = yield* client.execute(request).pipe(Effect.scoped);
533
+ const requestUrl = baseUrl + parts.path;
534
+ yield* Effect.logDebug(`→ ${method} ${requestUrl}`);
535
+
536
+ // For operations that opt out of following redirects, hand the
537
+ // underlying fetch a `redirect: "manual"` request init so the
538
+ // 3xx surfaces here instead of being chased to the IdP.
539
+ const executeRequest = noFollowRedirect
540
+ ? client.execute(request).pipe(
541
+ Effect.scoped,
542
+ Effect.provideService(FetchHttpClient.RequestInit, {
543
+ redirect: "manual",
544
+ } as RequestInit),
545
+ )
546
+ : client.execute(request).pipe(Effect.scoped);
547
+
548
+ const response = yield* executeRequest;
549
+ yield* Effect.logDebug(
550
+ `← ${response.status} ${method} ${requestUrl}`,
551
+ );
552
+
553
+ // For ops that opted out of redirect-following, treat 3xx as
554
+ // success: synthesize a body containing the Location header
555
+ // value at `locationField` (default `"url"`) and feed that
556
+ // through the normal output schema decode below.
557
+ if (
558
+ noFollowRedirect &&
559
+ response.status >= 300 &&
560
+ response.status < 400
561
+ ) {
562
+ const location =
563
+ response.headers["location"] ?? response.headers["Location"];
564
+ if (location !== undefined) {
565
+ const synthBody = {
566
+ [noFollowRedirect.locationField ?? "url"]: location,
567
+ };
568
+ return yield* Schema.decodeUnknownEffect(outputSchema)(
569
+ synthBody,
570
+ ).pipe(
571
+ Effect.catchTag("SchemaError", (cause) =>
572
+ Effect.fail(
573
+ new config.ParseError({ body: synthBody, cause }),
574
+ ),
575
+ ),
576
+ );
577
+ }
578
+ }
485
579
 
486
580
  if (response.status >= 400) {
487
581
  // Try to parse error body as JSON; fall back to text if not JSON
@@ -538,6 +632,30 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
538
632
  ? config.transformResponse(rawBody)
539
633
  : rawBody;
540
634
 
635
+ // GraphQL: surface errors[] (returned with HTTP 200) via matchError,
636
+ // then leave unwrap to the output schema's `T.ResponsePath` trait,
637
+ // which the generator emits with the field path from `data`. This
638
+ // handles namespaced ops (e.g. `data.channels.byId`) uniformly with
639
+ // top-level ones (e.g. `data.me`).
640
+ if (graphqlOp) {
641
+ const envelope = responseBody as
642
+ | { data?: Record<string, unknown> | null; errors?: unknown[] }
643
+ | null
644
+ | undefined;
645
+ if (
646
+ envelope &&
647
+ Array.isArray(envelope.errors) &&
648
+ envelope.errors.length > 0
649
+ ) {
650
+ return yield* config.matchError(
651
+ response.status,
652
+ envelope,
653
+ opConfig.errors,
654
+ );
655
+ }
656
+ responseBody = envelope?.data ?? null;
657
+ }
658
+
541
659
  // Some APIs return a JSON *string* (double-encoded JSON). `response.json`
542
660
  // then yields a string, `getPath` bails out, and we would decode the wrong
543
661
  // shape (e.g. Cloudflare envelopes without unwrapping `result`).
@@ -579,6 +697,30 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
579
697
  );
580
698
  });
581
699
 
700
+ // Auto-retry whenever the SDK's matchError returns a typed error
701
+ // tagged with the throttling category (e.g. `TooManyRequests`,
702
+ // or any SDK-specific subclass marked with `withThrottlingError`
703
+ // / `withRetryable({ throttling: true })`). After retries are
704
+ // exhausted the original typed error propagates to the caller as
705
+ // usual.
706
+ const fn = (input: Input): Effect.Effect<any, any, any> => {
707
+ const withRetry = innerFn(input).pipe(
708
+ Effect.retry({
709
+ schedule: throttlingRetrySchedule,
710
+ while: (e) => Category.isThrottling(e),
711
+ }),
712
+ Effect.withSpan(spanName, {
713
+ attributes: {
714
+ "http.method": method,
715
+ "http.route": httpTrait.path,
716
+ },
717
+ }),
718
+ );
719
+ return distilledDebugEnv
720
+ ? Effect.provideService(withRetry, MinimumLogLevel, "Debug")
721
+ : withRetry;
722
+ };
723
+
582
724
  const Proto = {
583
725
  [Symbol.iterator]() {
584
726
  return new SingleShotGen(this);
package/src/traits.ts CHANGED
@@ -19,6 +19,7 @@
19
19
  * );
20
20
  * ```
21
21
  */
22
+ import * as Redacted from "effect/Redacted";
22
23
  import * as Schema from "effect/Schema";
23
24
  import * as AST from "effect/SchemaAST";
24
25
 
@@ -236,6 +237,45 @@ export const httpBodySymbol = Symbol.for("@distilled.cloud/http-body");
236
237
  */
237
238
  export const HttpBody = () => makeAnnotation(httpBodySymbol, true);
238
239
 
240
+ /** Symbol for GraphQL operation metadata (query string + operation name) */
241
+ export const graphqlOpSymbol = Symbol.for("@distilled.cloud/graphql-op");
242
+
243
+ /** GraphQL operation type */
244
+ export type GraphQLOpType = "query" | "mutation";
245
+
246
+ /** GraphQL operation trait configuration */
247
+ export interface GraphQLOpTrait {
248
+ /** The full GraphQL operation document (e.g., `query getUser($id: ID!) { ... }`) */
249
+ query: string;
250
+ /** The operation name — used to extract the response from `data.<operationName>` */
251
+ operationName: string;
252
+ /** Whether this is a query or a mutation */
253
+ type: GraphQLOpType;
254
+ }
255
+
256
+ /**
257
+ * GraphQLOp trait - declares an operation as GraphQL. When present, the client
258
+ * wraps the request body as `{ query, operationName, variables: <inputs> }` and
259
+ * extracts the response from `data.<operationName>`. The Http trait's path is
260
+ * still used as the GraphQL endpoint (typically `/graphql`).
261
+ *
262
+ * @example
263
+ * ```ts
264
+ * const GetUserInput = Schema.Struct({
265
+ * id: Schema.String,
266
+ * }).pipe(
267
+ * T.Http({ method: "POST", path: "/graphql" }),
268
+ * T.GraphQLOp({
269
+ * query: "query getUser($id: ID!) { user(id: $id) { id name } }",
270
+ * operationName: "getUser",
271
+ * type: "query",
272
+ * }),
273
+ * );
274
+ * ```
275
+ */
276
+ export const GraphQLOp = (trait: GraphQLOpTrait) =>
277
+ makeAnnotation(graphqlOpSymbol, trait);
278
+
239
279
  /** Symbol for response body path transformation */
240
280
  export const responsePathSymbol = Symbol.for("@distilled.cloud/response-path");
241
281
 
@@ -258,6 +298,59 @@ export const httpFormDataFileSymbol = Symbol.for(
258
298
  export const HttpFormDataFile = () =>
259
299
  makeAnnotation(httpFormDataFileSymbol, true);
260
300
 
301
+ // =============================================================================
302
+ // Redirect-as-Response Trait
303
+ // =============================================================================
304
+
305
+ /** Symbol for "do not follow redirects; treat 3xx Location header as success body" */
306
+ export const httpNoFollowRedirectSymbol = Symbol.for(
307
+ "@distilled.cloud/http-no-follow-redirect",
308
+ );
309
+
310
+ /**
311
+ * Configuration for the `NoFollowRedirect` trait.
312
+ */
313
+ export interface NoFollowRedirectTrait {
314
+ /**
315
+ * The field name on the success-side output schema that should receive the
316
+ * value of the response's `Location` header when the server returns a
317
+ * 3xx redirect. Defaults to `"url"`.
318
+ *
319
+ * Concretely: when an operation carrying this trait gets a 3xx response,
320
+ * the runtime client constructs `{ [locationField]: <Location header> }`
321
+ * and feeds that into the output schema decoder, instead of trying to
322
+ * decode the redirect body (which would normally be HTML or empty).
323
+ */
324
+ locationField?: string;
325
+ }
326
+
327
+ /**
328
+ * NoFollowRedirect trait - opts an operation out of the underlying HTTP
329
+ * client's automatic redirect-following.
330
+ *
331
+ * Some endpoints — notably OAuth/SSO authorize endpoints — return their
332
+ * useful result as a `Location` header on a 302 response. The default
333
+ * `fetch` follows that redirect to the IdP's HTML login page, so by the
334
+ * time the client sees a body it's no longer the SDK's expected JSON.
335
+ *
336
+ * Marking an operation with this trait makes the runtime client:
337
+ * 1. Issue the request with `redirect: "manual"` so the 3xx surfaces
338
+ * to user code.
339
+ * 2. On a 3xx, build a synthetic body `{ [locationField]: <Location> }`
340
+ * and decode that into the output schema (default field name `"url"`).
341
+ *
342
+ * @example
343
+ * ```ts
344
+ * const SsoAuthorizeInput = Schema.Struct({...}).pipe(
345
+ * T.Http({ method: "GET", path: "/sso/authorize" }),
346
+ * T.NoFollowRedirect(),
347
+ * );
348
+ * const SsoAuthorizeOutput = Schema.Struct({ url: Schema.String });
349
+ * ```
350
+ */
351
+ export const NoFollowRedirect = (trait: NoFollowRedirectTrait = {}) =>
352
+ makeAnnotation(httpNoFollowRedirectSymbol, trait);
353
+
261
354
  // =============================================================================
262
355
  // API Error Code Trait
263
356
  // =============================================================================
@@ -339,6 +432,20 @@ export const getHttpTrait = (ast: AST.AST): HttpTrait | undefined =>
339
432
  export const getResponsePath = (ast: AST.AST): string | undefined =>
340
433
  getAnnotation<string>(ast, responsePathSymbol);
341
434
 
435
+ /**
436
+ * Get GraphQL operation trait from a schema's AST.
437
+ */
438
+ export const getGraphQLOp = (ast: AST.AST): GraphQLOpTrait | undefined =>
439
+ getAnnotation<GraphQLOpTrait>(ast, graphqlOpSymbol);
440
+
441
+ /**
442
+ * Get the `NoFollowRedirect` trait config from an input schema's AST, if any.
443
+ */
444
+ export const getNoFollowRedirect = (
445
+ ast: AST.AST,
446
+ ): NoFollowRedirectTrait | undefined =>
447
+ getAnnotation<NoFollowRedirectTrait>(ast, httpNoFollowRedirectSymbol);
448
+
342
449
  /**
343
450
  * Check if a PropertySignature has the pathParam annotation.
344
451
  * Works for both PathParam() (annotation value = true) and HttpPath("wire_name") (annotation value = string).
@@ -475,13 +582,57 @@ export interface RequestParts {
475
582
  * schema's encoding pipeline (e.g., `encodeKeys` for camelCase → snake_case mapping).
476
583
  * The encoded output is used for body construction, ensuring wire-format key names.
477
584
  */
585
+ /**
586
+ * Recursively unwrap any `Redacted<T>` values in a structure into their
587
+ * underlying `T`.
588
+ *
589
+ * Sensitive response fields surface to callers as `Redacted<string>` (so
590
+ * they don't accidentally land in logs). Those same values often need to be
591
+ * passed straight back into a follow-up request — e.g. WorkOS's password
592
+ * reset flow returns a redacted `password_reset_token` whose shape is
593
+ * `Redacted<string>` and which is then sent into `ResetPassword({ token })`,
594
+ * where `token` is declared as plain `Schema.String`. Without this unwrap
595
+ * the input encoder sees a `Redacted` (whose toString is `"<redacted>"`)
596
+ * and rejects the value with `Expected string, got <redacted>`.
597
+ *
598
+ * Doing the unwrap right before `Schema.encodeSync` keeps the contract
599
+ * simple: callers can hand a `Redacted` to any field and the wire payload
600
+ * still contains the underlying value. Schemas that *want* a `Redacted` on
601
+ * the wire (i.e. `SensitiveString`) handle it through their own encode
602
+ * transform, so they're unaffected — by the time encodeSync sees the value
603
+ * it's already a plain string, which is what the wire format wants anyway.
604
+ */
605
+ const unwrapRedactedDeep = (value: unknown): unknown => {
606
+ if (Redacted.isRedacted(value)) return Redacted.value(value);
607
+ if (Array.isArray(value)) return value.map(unwrapRedactedDeep);
608
+ if (value !== null && typeof value === "object") {
609
+ // Only walk into plain objects. Builtins like File, Blob, FormData,
610
+ // ArrayBuffer, TypedArrays, Map/Set, Date, Streams, etc. don't contain
611
+ // Redacted values and would be destroyed by Object.entries() — `new
612
+ // File([], "x")` has no own enumerable keys, so a recursive copy returns
613
+ // `{}` and the schema encoder later rejects the empty object with
614
+ // "Expected File, got {}". Preserve any non-plain object as-is.
615
+ const proto = Object.getPrototypeOf(value);
616
+ if (proto !== null && proto !== Object.prototype) return value;
617
+ const out: Record<string, unknown> = {};
618
+ for (const [k, v] of Object.entries(value as Record<string, unknown>)) {
619
+ out[k] = unwrapRedactedDeep(v);
620
+ }
621
+ return out;
622
+ }
623
+ return value;
624
+ };
625
+
478
626
  export const buildRequestParts = (
479
627
  ast: AST.AST,
480
628
  httpTrait: HttpTrait,
481
- input: Record<string, unknown>,
629
+ rawInput: Record<string, unknown>,
482
630
  // biome-ignore lint: using any for generic schema parameter
483
631
  inputSchema?: any,
484
632
  ): RequestParts => {
633
+ // Unwrap any `Redacted<T>` values in the input up front so the schema
634
+ // encoder never sees them. See `unwrapRedactedDeep` for rationale.
635
+ const input = unwrapRedactedDeep(rawInput) as Record<string, unknown>;
485
636
  let path = httpTrait.path;
486
637
  const query: Record<string, string | string[]> = {};
487
638
  const headers: Record<string, string> = {};