@distilled.cloud/core 0.25.0 → 0.25.2
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 +31 -8
- package/lib/client.d.ts.map +1 -1
- package/lib/client.js +96 -32
- package/lib/client.js.map +1 -1
- package/lib/pagination.d.ts +4 -4
- package/lib/pagination.d.ts.map +1 -1
- package/lib/pagination.js +11 -11
- package/lib/pagination.js.map +1 -1
- package/package.json +1 -1
- package/src/client.ts +202 -47
- package/src/pagination.ts +43 -12
package/lib/client.d.ts
CHANGED
|
@@ -10,7 +10,7 @@ import * as Traits from "./traits.ts";
|
|
|
10
10
|
* 1. Direct call: `yield* operation(input)` - returns Effect with requirements
|
|
11
11
|
* 2. Yield first: `const fn = yield* operation` - captures services, returns requirement-free function
|
|
12
12
|
*/
|
|
13
|
-
export type OperationMethod<I, A, E, R> = Effect.Effect<(input: I) => Effect.Effect<A, E, never>, never, R> & ((input: I) => Effect.Effect<A, E, R>);
|
|
13
|
+
export type OperationMethod<I, A, E, R, RequestOptions = never> = Effect.Effect<(input: I, requestOptions?: RequestOptions) => Effect.Effect<A, E, never>, never, R> & ((input: I, requestOptions?: RequestOptions) => Effect.Effect<A, E, R>);
|
|
14
14
|
/**
|
|
15
15
|
* A paginated operation that additionally has `.pages()` and `.items()` methods.
|
|
16
16
|
*/
|
|
@@ -27,22 +27,34 @@ type PaginatedItem<A> = A extends ReadonlyArray<infer Item> ? Item : A extends {
|
|
|
27
27
|
items?: ReadonlyArray<infer Item> | null | undefined;
|
|
28
28
|
} | null | undefined;
|
|
29
29
|
} ? Item : unknown;
|
|
30
|
-
export type PaginatedOperationMethod<I, A, E, R> = OperationMethod<I, A, E, R> & {
|
|
31
|
-
pages: (input: I) => Stream.Stream<A, E, R>;
|
|
32
|
-
items: (input: I) => Stream.Stream<PaginatedItem<A>, E, R>;
|
|
30
|
+
export type PaginatedOperationMethod<I, A, E, R, RequestOptions = never> = OperationMethod<I, A, E, R, RequestOptions> & {
|
|
31
|
+
pages: (input: I, requestOptions?: RequestOptions) => Stream.Stream<A, E, R>;
|
|
32
|
+
items: (input: I, requestOptions?: RequestOptions) => Stream.Stream<PaginatedItem<A>, E, R>;
|
|
33
33
|
};
|
|
34
34
|
type ResolvedClientCredentials<Creds> = Creds extends Effect.Effect<infer Resolved, any, any> ? Resolved : Creds;
|
|
35
35
|
/**
|
|
36
36
|
* Configuration for the API client factory.
|
|
37
37
|
* SDKs provide this to customize how errors are matched and credentials are applied.
|
|
38
38
|
*/
|
|
39
|
-
export interface ClientConfig<Creds> {
|
|
39
|
+
export interface ClientConfig<Creds, RequestOptions = never> {
|
|
40
40
|
/** The credentials service tag */
|
|
41
41
|
credentials: Context.ServiceClass<any, any, Effect.Effect<Creds>>;
|
|
42
42
|
/** Get the base URL from credentials */
|
|
43
43
|
getBaseUrl: (creds: ResolvedClientCredentials<Creds>) => string;
|
|
44
44
|
/** Get authorization header(s) from credentials */
|
|
45
45
|
getAuthHeaders: (creds: ResolvedClientCredentials<Creds>) => Record<string, string>;
|
|
46
|
+
/**
|
|
47
|
+
* Map provider-specific per-call request options into transport headers.
|
|
48
|
+
* Request options are intentionally separate from the operation input and
|
|
49
|
+
* are never passed through the body/query/path schema encoder.
|
|
50
|
+
*/
|
|
51
|
+
getRequestHeaders?: (requestOptions: RequestOptions | undefined, context: {
|
|
52
|
+
input: Record<string, unknown>;
|
|
53
|
+
method: string;
|
|
54
|
+
pathTemplate: string;
|
|
55
|
+
parts: Traits.RequestParts;
|
|
56
|
+
credentials: ResolvedClientCredentials<Creds>;
|
|
57
|
+
}) => Record<string, string>;
|
|
46
58
|
/** Match an error response body to a typed error.
|
|
47
59
|
* Should return Effect.fail(error) for known errors,
|
|
48
60
|
* or Effect.fail(fallbackError) for unknown errors.
|
|
@@ -68,6 +80,16 @@ export interface ClientConfig<Creds> {
|
|
|
68
80
|
* For example, Cloudflare wraps responses in `{ result: <data>, ... }`.
|
|
69
81
|
*/
|
|
70
82
|
transformResponse?: (body: unknown) => unknown;
|
|
83
|
+
/**
|
|
84
|
+
* Optional predicate identifying a successful-status (2xx) response whose
|
|
85
|
+
* body is actually an error envelope. Some APIs (notably Cloudflare) return
|
|
86
|
+
* errors with HTTP 200 and a `success: false` flag instead of a 4xx status.
|
|
87
|
+
* When this returns `true`, the body is routed through {@link matchError}
|
|
88
|
+
* (with the operation's typed `errors`) exactly like a status>=400 response,
|
|
89
|
+
* so per-operation typed error matchers still apply. SDKs that always signal
|
|
90
|
+
* errors via status codes leave this unset (the default no-ops).
|
|
91
|
+
*/
|
|
92
|
+
isErrorEnvelope?: (body: unknown) => boolean;
|
|
71
93
|
/**
|
|
72
94
|
* Optional transform applied to encoded request parts before building the
|
|
73
95
|
* outbound HTTP request.
|
|
@@ -77,6 +99,7 @@ export interface ClientConfig<Creds> {
|
|
|
77
99
|
method: string;
|
|
78
100
|
pathTemplate: string;
|
|
79
101
|
parts: Traits.RequestParts;
|
|
102
|
+
requestOptions: RequestOptions | undefined;
|
|
80
103
|
}) => Traits.RequestParts;
|
|
81
104
|
/**
|
|
82
105
|
* The SDK's `Retry` Context.Service tag. Each per-SDK client wires its
|
|
@@ -136,9 +159,9 @@ export interface PaginatedOperationConfig<I extends Schema.Top, O extends Schema
|
|
|
136
159
|
* });
|
|
137
160
|
* ```
|
|
138
161
|
*/
|
|
139
|
-
export declare const makeAPI: <Creds>(config: ClientConfig<Creds>) => {
|
|
140
|
-
make: <I extends Schema.Top, O extends Schema.Top, const E extends readonly ApiErrorClass[] = readonly []>(configFn: () => OperationConfig<I, O, E>) => OperationMethod<Schema.Schema.Type<I>, Schema.Schema.Type<O>, InstanceType<E[number]>, Creds>;
|
|
141
|
-
makePaginated: <I extends Schema.Top, O extends Schema.Top, const E extends readonly ApiErrorClass[] = readonly []>(configFn: () => PaginatedOperationConfig<I, O, E>, paginateFn?: PaginationStrategy) => PaginatedOperationMethod<Schema.Schema.Type<I>, Schema.Schema.Type<O>, InstanceType<E[number]>, Creds>;
|
|
162
|
+
export declare const makeAPI: <Creds, RequestOptions = never>(config: ClientConfig<Creds, RequestOptions>) => {
|
|
163
|
+
make: <I extends Schema.Top, O extends Schema.Top, const E extends readonly ApiErrorClass[] = readonly []>(configFn: () => OperationConfig<I, O, E>) => OperationMethod<Schema.Schema.Type<I>, Schema.Schema.Type<O>, InstanceType<E[number]>, Creds, RequestOptions>;
|
|
164
|
+
makePaginated: <I extends Schema.Top, O extends Schema.Top, const E extends readonly ApiErrorClass[] = readonly []>(configFn: () => PaginatedOperationConfig<I, O, E>, paginateFn?: PaginationStrategy) => PaginatedOperationMethod<Schema.Schema.Type<I>, Schema.Schema.Type<O>, InstanceType<E[number]>, Creds, RequestOptions>;
|
|
142
165
|
};
|
|
143
166
|
export {};
|
|
144
167
|
//# sourceMappingURL=client.d.ts.map
|
package/lib/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAMxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAOxC,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACxB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAe,KAAK,MAAM,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAgBtC;;;;GAIG;AACH,MAAM,MAAM,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/lib/client.js
CHANGED
|
@@ -73,6 +73,19 @@ function isArrayAST(ast) {
|
|
|
73
73
|
return isArrayAST(ast.encoding[0].to);
|
|
74
74
|
return false;
|
|
75
75
|
}
|
|
76
|
+
/**
|
|
77
|
+
* Resolve a (possibly `Schema.suspend`-wrapped) AST down to the concrete
|
|
78
|
+
* underlying node by forcing the memoized thunk. Generated SDK schemas may
|
|
79
|
+
* wrap each request/response struct in `Schema.suspend(() => ...)` so the
|
|
80
|
+
* (expensive) schema construction is deferred from module-load time to the
|
|
81
|
+
* first time the operation is actually called. Trait extraction needs the
|
|
82
|
+
* real node, so we force it here. `Suspend.thunk` memoizes, so this only
|
|
83
|
+
* pays the construction cost once per operation. Returns the input AST
|
|
84
|
+
* untouched when it isn't a Suspend (the common case for non-suspended SDKs).
|
|
85
|
+
*/
|
|
86
|
+
function resolveAst(ast) {
|
|
87
|
+
return ast._tag === "Suspend" ? resolveAst(ast.thunk()) : ast;
|
|
88
|
+
}
|
|
76
89
|
// ============================================================================
|
|
77
90
|
// Form URL-Encoded Builder (Stripe deepObject style)
|
|
78
91
|
// ============================================================================
|
|
@@ -247,21 +260,38 @@ function setBinaryBody(request, body) {
|
|
|
247
260
|
export const makeAPI = (config) => {
|
|
248
261
|
return {
|
|
249
262
|
make: (configFn) => {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
263
|
+
let prepared;
|
|
264
|
+
const prepare = () => {
|
|
265
|
+
if (prepared)
|
|
266
|
+
return prepared;
|
|
267
|
+
const opConfig = configFn();
|
|
268
|
+
// Support both input/output and inputSchema/outputSchema aliases
|
|
269
|
+
const inputSchema = (opConfig.inputSchema ?? opConfig.input);
|
|
270
|
+
const outputSchema = (opConfig.outputSchema ?? opConfig.output);
|
|
271
|
+
const inputAst = resolveAst(inputSchema.ast);
|
|
272
|
+
const outputAst = resolveAst(outputSchema.ast);
|
|
273
|
+
const httpTrait = Traits.getHttpTrait(inputAst);
|
|
274
|
+
if (!httpTrait) {
|
|
275
|
+
throw new Error("Input schema must have Http trait");
|
|
276
|
+
}
|
|
277
|
+
const method = httpTrait.method;
|
|
278
|
+
prepared = {
|
|
279
|
+
opConfig,
|
|
280
|
+
inputSchema,
|
|
281
|
+
outputSchema,
|
|
282
|
+
inputAst,
|
|
283
|
+
outputAst,
|
|
284
|
+
responsePath: Traits.getResponsePath(outputAst),
|
|
285
|
+
graphqlOp: Traits.getGraphQLOp(inputAst),
|
|
286
|
+
noFollowRedirect: Traits.getNoFollowRedirect(inputAst),
|
|
287
|
+
httpTrait,
|
|
288
|
+
method,
|
|
289
|
+
spanName: `${method} ${httpTrait.path}`,
|
|
290
|
+
};
|
|
291
|
+
return prepared;
|
|
292
|
+
};
|
|
293
|
+
const innerFn = (input, requestOptions) => Effect.gen(function* () {
|
|
294
|
+
const { opConfig, inputSchema, outputSchema, inputAst, outputAst, responsePath, graphqlOp, noFollowRedirect, httpTrait, method, } = prepare();
|
|
265
295
|
const credentials = yield* config.credentials;
|
|
266
296
|
const creds = isEffectLike(credentials)
|
|
267
297
|
? yield* credentials
|
|
@@ -271,14 +301,14 @@ export const makeAPI = (config) => {
|
|
|
271
301
|
// `getBaseUrl` empty (per-service hosts rather than per-credentials).
|
|
272
302
|
let baseUrl = config.getBaseUrl(creds);
|
|
273
303
|
if (!baseUrl) {
|
|
274
|
-
const svcTrait = Traits.getServiceTrait(
|
|
304
|
+
const svcTrait = Traits.getServiceTrait(inputAst);
|
|
275
305
|
if (svcTrait?.rootUrl) {
|
|
276
306
|
baseUrl = svcTrait.rootUrl + (svcTrait.servicePath ?? "");
|
|
277
307
|
}
|
|
278
308
|
}
|
|
279
309
|
const authHeaders = config.getAuthHeaders(creds);
|
|
280
310
|
// Use schema-aware request builder for proper camelCase → wire_name mapping
|
|
281
|
-
let parts = Traits.buildRequestParts(
|
|
311
|
+
let parts = Traits.buildRequestParts(inputAst, httpTrait, input, inputSchema);
|
|
282
312
|
// GraphQL: wrap variables in the standard GraphQL request envelope.
|
|
283
313
|
// All input fields become `variables`; `query` and `operationName`
|
|
284
314
|
// come from the trait (baked in at generation time).
|
|
@@ -298,6 +328,7 @@ export const makeAPI = (config) => {
|
|
|
298
328
|
method,
|
|
299
329
|
pathTemplate: httpTrait.path,
|
|
300
330
|
parts,
|
|
331
|
+
requestOptions,
|
|
301
332
|
});
|
|
302
333
|
}
|
|
303
334
|
// Inject a baked-in `api-version` query param for versioned APIs
|
|
@@ -311,7 +342,14 @@ export const makeAPI = (config) => {
|
|
|
311
342
|
query: { ...parts.query, "api-version": httpTrait.apiVersion },
|
|
312
343
|
};
|
|
313
344
|
}
|
|
314
|
-
|
|
345
|
+
const requestHeaders = config.getRequestHeaders?.(requestOptions, {
|
|
346
|
+
input: input,
|
|
347
|
+
method,
|
|
348
|
+
pathTemplate: httpTrait.path,
|
|
349
|
+
parts,
|
|
350
|
+
credentials: creds,
|
|
351
|
+
}) ?? {};
|
|
352
|
+
let request = HttpClientRequest.make(method)(baseUrl + parts.path).pipe(HttpClientRequest.setHeaders(authHeaders), HttpClientRequest.setHeaders(parts.headers), HttpClientRequest.setHeaders(requestHeaders), HttpClientRequest.setHeader("Accept", "application/json"));
|
|
315
353
|
// Set Content-Type based on body type
|
|
316
354
|
// - Skip for FormData (multipart) — browser sets boundary
|
|
317
355
|
// - Skip for binary — `parts.headers` already carries a caller-supplied
|
|
@@ -410,7 +448,7 @@ export const makeAPI = (config) => {
|
|
|
410
448
|
return yield* config.matchError(response.status, errorBody, opConfig.errors, response.headers);
|
|
411
449
|
}
|
|
412
450
|
// For void-returning operations (e.g. DELETE 204 No Content)
|
|
413
|
-
if (AST.isVoid(
|
|
451
|
+
if (AST.isVoid(outputAst)) {
|
|
414
452
|
return undefined;
|
|
415
453
|
}
|
|
416
454
|
// Raw octet-stream download (`responseContentType: "binary"`):
|
|
@@ -427,12 +465,12 @@ export const makeAPI = (config) => {
|
|
|
427
465
|
if (httpTrait.responseContentType === "binary") {
|
|
428
466
|
const bytes = yield* response.arrayBuffer;
|
|
429
467
|
const stream = Stream.succeed(new Uint8Array(bytes));
|
|
430
|
-
return Traits.buildBinaryResponse(
|
|
468
|
+
return Traits.buildBinaryResponse(outputAst, stream, response.headers);
|
|
431
469
|
}
|
|
432
470
|
// For 204 No Content: if schema is not Unknown, return undefined.
|
|
433
471
|
// If schema IS Unknown, return empty string (so callers get a defined value).
|
|
434
472
|
if (response.status === 204) {
|
|
435
|
-
if (
|
|
473
|
+
if (outputAst._tag === "Unknown") {
|
|
436
474
|
return "";
|
|
437
475
|
}
|
|
438
476
|
return undefined;
|
|
@@ -468,16 +506,35 @@ export const makeAPI = (config) => {
|
|
|
468
506
|
// leave as string for callers that expect raw text
|
|
469
507
|
}
|
|
470
508
|
}
|
|
509
|
+
// Some APIs (Cloudflare) answer with a 2xx status but an error
|
|
510
|
+
// envelope (`success: false`) rather than a 4xx. Route those through
|
|
511
|
+
// `matchError` with the operation's typed `errors` so per-operation
|
|
512
|
+
// matchers fire — otherwise the envelope falls through to schema
|
|
513
|
+
// decoding and surfaces as an opaque ParseError.
|
|
514
|
+
if (config.isErrorEnvelope?.(responseBody)) {
|
|
515
|
+
return yield* config.matchError(response.status, responseBody, opConfig.errors, response.headers);
|
|
516
|
+
}
|
|
517
|
+
// Tracks a `result: null` success that we optimistically coerce to
|
|
518
|
+
// `{}` below. Some ops legitimately return `null` (e.g. a per-zone
|
|
519
|
+
// singleton that was never configured) and declare a nullable
|
|
520
|
+
// output schema — for those, decoding `{}` fails, so we retry the
|
|
521
|
+
// decode with `null` (see the decode block).
|
|
522
|
+
let resultWasNull = false;
|
|
471
523
|
if (responsePath) {
|
|
472
524
|
const nested = getPath(responseBody, responsePath);
|
|
473
525
|
if (nested !== undefined) {
|
|
474
|
-
|
|
475
|
-
|
|
526
|
+
if (responsePath === "result" && nested === null) {
|
|
527
|
+
responseBody = {};
|
|
528
|
+
resultWasNull = true;
|
|
529
|
+
}
|
|
530
|
+
else {
|
|
531
|
+
responseBody = nested;
|
|
532
|
+
}
|
|
476
533
|
}
|
|
477
534
|
}
|
|
478
535
|
// Handle Cloudflare-style paginated responses where result is
|
|
479
536
|
// { items: [...] } but the schema expects an array
|
|
480
|
-
if (isArrayAST(
|
|
537
|
+
if (isArrayAST(outputAst) &&
|
|
481
538
|
!Array.isArray(responseBody) &&
|
|
482
539
|
typeof responseBody === "object" &&
|
|
483
540
|
responseBody !== null &&
|
|
@@ -485,7 +542,13 @@ export const makeAPI = (config) => {
|
|
|
485
542
|
Array.isArray(responseBody.items)) {
|
|
486
543
|
responseBody = responseBody.items;
|
|
487
544
|
}
|
|
488
|
-
return yield* Schema.decodeUnknownEffect(outputSchema)(responseBody).pipe(Effect.catchTag("SchemaError", (cause) =>
|
|
545
|
+
return yield* Schema.decodeUnknownEffect(outputSchema)(responseBody).pipe(Effect.catchTag("SchemaError", (cause) =>
|
|
546
|
+
// A `result: null` success coerced to `{}` that the schema
|
|
547
|
+
// rejects: retry decoding the genuine `null` (the schema may be
|
|
548
|
+
// a nullable union). Only then surface the parse error.
|
|
549
|
+
resultWasNull
|
|
550
|
+
? Schema.decodeUnknownEffect(outputSchema)(null).pipe(Effect.catchTag("SchemaError", () => Effect.fail(new config.ParseError({ body: rawBody, cause }))))
|
|
551
|
+
: Effect.fail(new config.ParseError({ body: rawBody, cause }))));
|
|
489
552
|
});
|
|
490
553
|
// Auto-retry every operation using the SDK's per-client `Retry`
|
|
491
554
|
// Context.Service. The policy is read with `Effect.serviceOption`
|
|
@@ -496,11 +559,12 @@ export const makeAPI = (config) => {
|
|
|
496
559
|
// install a blanket policy at the layer level instead of wrapping
|
|
497
560
|
// every call site with `Effect.retry(...)`.
|
|
498
561
|
const retryTag = config.retry;
|
|
499
|
-
const fn = (input) => {
|
|
562
|
+
const fn = (input, requestOptions) => {
|
|
563
|
+
const { spanName, method, httpTrait } = prepare();
|
|
500
564
|
const withRetry = Effect.gen(function* () {
|
|
501
565
|
const lastError = yield* Ref.make(undefined);
|
|
502
566
|
const policy = (yield* Effect.serviceOption(retryTag)).pipe(Option.map((value) => typeof value === "function" ? value(lastError) : value), Option.getOrElse(() => makeDefault(lastError)));
|
|
503
|
-
return yield* pipe(innerFn(input), Effect.tapError((error) => Ref.set(lastError, error)), policy.while
|
|
567
|
+
return yield* pipe(innerFn(input, requestOptions), Effect.tapError((error) => Ref.set(lastError, error)), policy.while
|
|
504
568
|
? (eff) => Effect.retry(eff, {
|
|
505
569
|
while: policy.while,
|
|
506
570
|
schedule: policy.schedule,
|
|
@@ -525,7 +589,7 @@ export const makeAPI = (config) => {
|
|
|
525
589
|
return pipeArguments(this.asEffect(), arguments);
|
|
526
590
|
},
|
|
527
591
|
asEffect() {
|
|
528
|
-
return Effect.map(Effect.context(), (context) => (input) => Effect.provideContext(fn(input), context));
|
|
592
|
+
return Effect.map(Effect.context(), (context) => (input, requestOptions) => Effect.provideContext(fn(input, requestOptions), context));
|
|
529
593
|
},
|
|
530
594
|
};
|
|
531
595
|
return Object.assign(fn, Proto);
|
|
@@ -541,11 +605,11 @@ export const makeAPI = (config) => {
|
|
|
541
605
|
}));
|
|
542
606
|
const paginate = paginateFn ?? paginateWithDefaults;
|
|
543
607
|
// Stream all pages
|
|
544
|
-
const pagesFn = (input) => paginate(baseFn, input, pagination);
|
|
608
|
+
const pagesFn = (input, requestOptions) => paginate(baseFn, input, pagination, requestOptions);
|
|
545
609
|
// Stream individual items
|
|
546
|
-
const itemsFn = (input) => pagination.items
|
|
547
|
-
? extractItems(pagesFn(input), pagination.items)
|
|
548
|
-
: pagesFn(input);
|
|
610
|
+
const itemsFn = (input, requestOptions) => pagination.items
|
|
611
|
+
? extractItems(pagesFn(input, requestOptions), pagination.items)
|
|
612
|
+
: pagesFn(input, requestOptions);
|
|
549
613
|
const result = baseFn;
|
|
550
614
|
result.pages = pagesFn;
|
|
551
615
|
result.items = itemsFn;
|
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/pagination.d.ts
CHANGED
|
@@ -38,7 +38,7 @@ export interface PaginatedTrait {
|
|
|
38
38
|
/** The name of the input member that limits page size */
|
|
39
39
|
pageSize?: string;
|
|
40
40
|
}
|
|
41
|
-
export type PaginationStrategy = <Input extends Record<string, unknown>, Output, E, R>(operation: (input: Input) => Effect.Effect<Output, E, R>, input: Input, pagination: PaginatedTrait) => Stream.Stream<Output, E, R>;
|
|
41
|
+
export type PaginationStrategy = <Input extends Record<string, unknown>, Output, E, R, RequestOptions = never>(operation: (input: Input, requestOptions?: RequestOptions) => Effect.Effect<Output, E, R>, input: Input, pagination: PaginatedTrait, requestOptions?: RequestOptions) => Stream.Stream<Output, E, R>;
|
|
42
42
|
/**
|
|
43
43
|
* Creates a stream for single-shot list endpoints that still expose the paginated API surface.
|
|
44
44
|
*/
|
|
@@ -51,7 +51,7 @@ export declare const paginateSingle: PaginationStrategy;
|
|
|
51
51
|
* @param pagination - The pagination trait configuration
|
|
52
52
|
* @returns A Stream of full page responses
|
|
53
53
|
*/
|
|
54
|
-
export declare const paginatePageNumber: <Input extends Record<string, unknown>, Output, E, R>(operation: (input: Input) => Effect.Effect<Output, E, R>, input: Omit<Input, string>, pagination: PaginatedTrait) => Stream.Stream<Output, E, R>;
|
|
54
|
+
export declare const paginatePageNumber: <Input extends Record<string, unknown>, Output, E, R, RequestOptions = never>(operation: (input: Input, requestOptions?: RequestOptions) => Effect.Effect<Output, E, R>, input: Omit<Input, string>, pagination: PaginatedTrait, requestOptions?: RequestOptions) => Stream.Stream<Output, E, R>;
|
|
55
55
|
/**
|
|
56
56
|
* Creates a stream of pages using cursor-based pagination.
|
|
57
57
|
*
|
|
@@ -60,7 +60,7 @@ export declare const paginatePageNumber: <Input extends Record<string, unknown>,
|
|
|
60
60
|
* @param pagination - The pagination trait configuration
|
|
61
61
|
* @returns A Stream of full page responses
|
|
62
62
|
*/
|
|
63
|
-
export declare const paginateCursor: <Input extends Record<string, unknown>, Output, E, R>(operation: (input: Input) => Effect.Effect<Output, E, R>, input: Omit<Input, string>, pagination: PaginatedTrait) => Stream.Stream<Output, E, R>;
|
|
63
|
+
export declare const paginateCursor: <Input extends Record<string, unknown>, Output, E, R, RequestOptions = never>(operation: (input: Input, requestOptions?: RequestOptions) => Effect.Effect<Output, E, R>, input: Omit<Input, string>, pagination: PaginatedTrait, requestOptions?: RequestOptions) => Stream.Stream<Output, E, R>;
|
|
64
64
|
/**
|
|
65
65
|
* Creates a stream of pages using token-based pagination.
|
|
66
66
|
*
|
|
@@ -69,7 +69,7 @@ export declare const paginateCursor: <Input extends Record<string, unknown>, Out
|
|
|
69
69
|
* @param pagination - The pagination trait configuration
|
|
70
70
|
* @returns A Stream of full page responses
|
|
71
71
|
*/
|
|
72
|
-
export declare const paginateToken: <Input extends Record<string, unknown>, Output, E, R>(operation: (input: Input) => Effect.Effect<Output, E, R>, input: Input, pagination: PaginatedTrait) => Stream.Stream<Output, E, R>;
|
|
72
|
+
export declare const paginateToken: <Input extends Record<string, unknown>, Output, E, R, RequestOptions = never>(operation: (input: Input, requestOptions?: RequestOptions) => Effect.Effect<Output, E, R>, input: Input, pagination: PaginatedTrait, requestOptions?: RequestOptions) => Stream.Stream<Output, E, R>;
|
|
73
73
|
/**
|
|
74
74
|
* Shared default pagination dispatcher for SDKs that use generic token/cursor/page traversal.
|
|
75
75
|
*/
|
package/lib/pagination.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAOxC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC9C,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAC/B,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,MAAM,EACN,CAAC,EACD,CAAC,
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"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"}
|
package/lib/pagination.js
CHANGED
|
@@ -28,7 +28,7 @@ const missingPaginationConfig = (kind) => Stream.die(new Error(kind));
|
|
|
28
28
|
/**
|
|
29
29
|
* Creates a stream for single-shot list endpoints that still expose the paginated API surface.
|
|
30
30
|
*/
|
|
31
|
-
export const paginateSingle = (operation, input) => Stream.make(input).pipe(Stream.mapEffect((requestPayload) => operation(requestPayload)));
|
|
31
|
+
export const paginateSingle = (operation, input, _pagination, requestOptions) => Stream.make(input).pipe(Stream.mapEffect((requestPayload) => operation(requestPayload, requestOptions)));
|
|
32
32
|
// ============================================================================
|
|
33
33
|
// Page-based Pagination (PlanetScale style)
|
|
34
34
|
// ============================================================================
|
|
@@ -40,7 +40,7 @@ export const paginateSingle = (operation, input) => Stream.make(input).pipe(Stre
|
|
|
40
40
|
* @param pagination - The pagination trait configuration
|
|
41
41
|
* @returns A Stream of full page responses
|
|
42
42
|
*/
|
|
43
|
-
export const paginatePageNumber = (operation, input, pagination) => {
|
|
43
|
+
export const paginatePageNumber = (operation, input, pagination, requestOptions) => {
|
|
44
44
|
const inputToken = pagination.inputToken;
|
|
45
45
|
const outputToken = pagination.outputToken;
|
|
46
46
|
const inputRecord = input;
|
|
@@ -58,7 +58,7 @@ export const paginatePageNumber = (operation, input, pagination) => {
|
|
|
58
58
|
...input,
|
|
59
59
|
[inputToken]: state.page,
|
|
60
60
|
};
|
|
61
|
-
const response = yield* operation(requestPayload);
|
|
61
|
+
const response = yield* operation(requestPayload, requestOptions);
|
|
62
62
|
const nextPage = getPath(response, outputToken);
|
|
63
63
|
// Some APIs report the CURRENT page at `outputToken` rather than
|
|
64
64
|
// the next one (e.g. Cloudflare's `result_info.page`). Taking that
|
|
@@ -92,7 +92,7 @@ export const paginatePageNumber = (operation, input, pagination) => {
|
|
|
92
92
|
* @param pagination - The pagination trait configuration
|
|
93
93
|
* @returns A Stream of full page responses
|
|
94
94
|
*/
|
|
95
|
-
export const paginateCursor = (operation, input, pagination) => {
|
|
95
|
+
export const paginateCursor = (operation, input, pagination, requestOptions) => {
|
|
96
96
|
const inputToken = pagination.inputToken;
|
|
97
97
|
const outputToken = pagination.outputToken;
|
|
98
98
|
const inputRecord = input;
|
|
@@ -110,7 +110,7 @@ export const paginateCursor = (operation, input, pagination) => {
|
|
|
110
110
|
...input,
|
|
111
111
|
...(state.cursor ? { [inputToken]: state.cursor } : {}),
|
|
112
112
|
};
|
|
113
|
-
const response = yield* operation(requestPayload);
|
|
113
|
+
const response = yield* operation(requestPayload, requestOptions);
|
|
114
114
|
const nextCursor = getPath(response, outputToken);
|
|
115
115
|
const nextState = {
|
|
116
116
|
cursor: nextCursor ?? undefined,
|
|
@@ -131,7 +131,7 @@ export const paginateCursor = (operation, input, pagination) => {
|
|
|
131
131
|
* @param pagination - The pagination trait configuration
|
|
132
132
|
* @returns A Stream of full page responses
|
|
133
133
|
*/
|
|
134
|
-
export const paginateToken = (operation, input, pagination) => {
|
|
134
|
+
export const paginateToken = (operation, input, pagination, requestOptions) => {
|
|
135
135
|
const inputToken = pagination.inputToken;
|
|
136
136
|
const outputToken = pagination.outputToken;
|
|
137
137
|
const inputRecord = input;
|
|
@@ -146,7 +146,7 @@ export const paginateToken = (operation, input, pagination) => {
|
|
|
146
146
|
const requestPayload = state.token !== undefined
|
|
147
147
|
? { ...input, [inputToken]: state.token }
|
|
148
148
|
: input;
|
|
149
|
-
const response = yield* operation(requestPayload);
|
|
149
|
+
const response = yield* operation(requestPayload, requestOptions);
|
|
150
150
|
const nextToken = getPath(response, outputToken);
|
|
151
151
|
const nextState = {
|
|
152
152
|
token: nextToken,
|
|
@@ -159,18 +159,18 @@ export const paginateToken = (operation, input, pagination) => {
|
|
|
159
159
|
/**
|
|
160
160
|
* Shared default pagination dispatcher for SDKs that use generic token/cursor/page traversal.
|
|
161
161
|
*/
|
|
162
|
-
export const paginateWithDefaults = (operation, input, pagination) => {
|
|
162
|
+
export const paginateWithDefaults = (operation, input, pagination, requestOptions) => {
|
|
163
163
|
const mode = pagination.mode ?? "token";
|
|
164
164
|
switch (mode) {
|
|
165
165
|
case "page":
|
|
166
|
-
return paginatePageNumber(operation, input, pagination);
|
|
166
|
+
return paginatePageNumber(operation, input, pagination, requestOptions);
|
|
167
167
|
case "cursor":
|
|
168
|
-
return paginateCursor(operation, input, pagination);
|
|
168
|
+
return paginateCursor(operation, input, pagination, requestOptions);
|
|
169
169
|
case "single":
|
|
170
170
|
return missingPaginationConfig("Single-page pagination requires a provider-specific pagination strategy");
|
|
171
171
|
case "token":
|
|
172
172
|
default:
|
|
173
|
-
return paginateToken(operation, input, pagination);
|
|
173
|
+
return paginateToken(operation, input, pagination, requestOptions);
|
|
174
174
|
}
|
|
175
175
|
};
|
|
176
176
|
// ============================================================================
|
package/lib/pagination.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/client.ts
CHANGED
|
@@ -70,12 +70,12 @@ const distilledDebugConfig: Effect.Effect<boolean> = Config.string(
|
|
|
70
70
|
* 1. Direct call: `yield* operation(input)` - returns Effect with requirements
|
|
71
71
|
* 2. Yield first: `const fn = yield* operation` - captures services, returns requirement-free function
|
|
72
72
|
*/
|
|
73
|
-
export type OperationMethod<I, A, E, R> = Effect.Effect<
|
|
74
|
-
(input: I) => Effect.Effect<A, E, never>,
|
|
73
|
+
export type OperationMethod<I, A, E, R, RequestOptions = never> = Effect.Effect<
|
|
74
|
+
(input: I, requestOptions?: RequestOptions) => Effect.Effect<A, E, never>,
|
|
75
75
|
never,
|
|
76
76
|
R
|
|
77
77
|
> &
|
|
78
|
-
((input: I) => Effect.Effect<A, E, R>);
|
|
78
|
+
((input: I, requestOptions?: RequestOptions) => Effect.Effect<A, E, R>);
|
|
79
79
|
|
|
80
80
|
/**
|
|
81
81
|
* A paginated operation that additionally has `.pages()` and `.items()` methods.
|
|
@@ -100,14 +100,18 @@ type PaginatedItem<A> =
|
|
|
100
100
|
? Item
|
|
101
101
|
: unknown;
|
|
102
102
|
|
|
103
|
-
export type PaginatedOperationMethod<
|
|
103
|
+
export type PaginatedOperationMethod<
|
|
104
104
|
I,
|
|
105
105
|
A,
|
|
106
106
|
E,
|
|
107
|
-
R
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
107
|
+
R,
|
|
108
|
+
RequestOptions = never,
|
|
109
|
+
> = OperationMethod<I, A, E, R, RequestOptions> & {
|
|
110
|
+
pages: (input: I, requestOptions?: RequestOptions) => Stream.Stream<A, E, R>;
|
|
111
|
+
items: (
|
|
112
|
+
input: I,
|
|
113
|
+
requestOptions?: RequestOptions,
|
|
114
|
+
) => Stream.Stream<PaginatedItem<A>, E, R>;
|
|
111
115
|
};
|
|
112
116
|
|
|
113
117
|
type ResolvedClientCredentials<Creds> =
|
|
@@ -124,7 +128,7 @@ const isEffectLike = (value: unknown): value is Effect.Effect<unknown> =>
|
|
|
124
128
|
* Configuration for the API client factory.
|
|
125
129
|
* SDKs provide this to customize how errors are matched and credentials are applied.
|
|
126
130
|
*/
|
|
127
|
-
export interface ClientConfig<Creds> {
|
|
131
|
+
export interface ClientConfig<Creds, RequestOptions = never> {
|
|
128
132
|
/** The credentials service tag */
|
|
129
133
|
credentials: Context.ServiceClass<any, any, Effect.Effect<Creds>>;
|
|
130
134
|
|
|
@@ -136,6 +140,22 @@ export interface ClientConfig<Creds> {
|
|
|
136
140
|
creds: ResolvedClientCredentials<Creds>,
|
|
137
141
|
) => Record<string, string>;
|
|
138
142
|
|
|
143
|
+
/**
|
|
144
|
+
* Map provider-specific per-call request options into transport headers.
|
|
145
|
+
* Request options are intentionally separate from the operation input and
|
|
146
|
+
* are never passed through the body/query/path schema encoder.
|
|
147
|
+
*/
|
|
148
|
+
getRequestHeaders?: (
|
|
149
|
+
requestOptions: RequestOptions | undefined,
|
|
150
|
+
context: {
|
|
151
|
+
input: Record<string, unknown>;
|
|
152
|
+
method: string;
|
|
153
|
+
pathTemplate: string;
|
|
154
|
+
parts: Traits.RequestParts;
|
|
155
|
+
credentials: ResolvedClientCredentials<Creds>;
|
|
156
|
+
},
|
|
157
|
+
) => Record<string, string>;
|
|
158
|
+
|
|
139
159
|
/** Match an error response body to a typed error.
|
|
140
160
|
* Should return Effect.fail(error) for known errors,
|
|
141
161
|
* or Effect.fail(fallbackError) for unknown errors.
|
|
@@ -166,6 +186,17 @@ export interface ClientConfig<Creds> {
|
|
|
166
186
|
*/
|
|
167
187
|
transformResponse?: (body: unknown) => unknown;
|
|
168
188
|
|
|
189
|
+
/**
|
|
190
|
+
* Optional predicate identifying a successful-status (2xx) response whose
|
|
191
|
+
* body is actually an error envelope. Some APIs (notably Cloudflare) return
|
|
192
|
+
* errors with HTTP 200 and a `success: false` flag instead of a 4xx status.
|
|
193
|
+
* When this returns `true`, the body is routed through {@link matchError}
|
|
194
|
+
* (with the operation's typed `errors`) exactly like a status>=400 response,
|
|
195
|
+
* so per-operation typed error matchers still apply. SDKs that always signal
|
|
196
|
+
* errors via status codes leave this unset (the default no-ops).
|
|
197
|
+
*/
|
|
198
|
+
isErrorEnvelope?: (body: unknown) => boolean;
|
|
199
|
+
|
|
169
200
|
/**
|
|
170
201
|
* Optional transform applied to encoded request parts before building the
|
|
171
202
|
* outbound HTTP request.
|
|
@@ -175,6 +206,7 @@ export interface ClientConfig<Creds> {
|
|
|
175
206
|
method: string;
|
|
176
207
|
pathTemplate: string;
|
|
177
208
|
parts: Traits.RequestParts;
|
|
209
|
+
requestOptions: RequestOptions | undefined;
|
|
178
210
|
}) => Traits.RequestParts;
|
|
179
211
|
|
|
180
212
|
/**
|
|
@@ -248,6 +280,20 @@ function isArrayAST(ast: AST.AST): boolean {
|
|
|
248
280
|
return false;
|
|
249
281
|
}
|
|
250
282
|
|
|
283
|
+
/**
|
|
284
|
+
* Resolve a (possibly `Schema.suspend`-wrapped) AST down to the concrete
|
|
285
|
+
* underlying node by forcing the memoized thunk. Generated SDK schemas may
|
|
286
|
+
* wrap each request/response struct in `Schema.suspend(() => ...)` so the
|
|
287
|
+
* (expensive) schema construction is deferred from module-load time to the
|
|
288
|
+
* first time the operation is actually called. Trait extraction needs the
|
|
289
|
+
* real node, so we force it here. `Suspend.thunk` memoizes, so this only
|
|
290
|
+
* pays the construction cost once per operation. Returns the input AST
|
|
291
|
+
* untouched when it isn't a Suspend (the common case for non-suspended SDKs).
|
|
292
|
+
*/
|
|
293
|
+
function resolveAst(ast: AST.AST): AST.AST {
|
|
294
|
+
return ast._tag === "Suspend" ? resolveAst(ast.thunk()) : ast;
|
|
295
|
+
}
|
|
296
|
+
|
|
251
297
|
// ============================================================================
|
|
252
298
|
// Form URL-Encoded Builder (Stripe deepObject style)
|
|
253
299
|
// ============================================================================
|
|
@@ -472,7 +518,9 @@ function setBinaryBody(
|
|
|
472
518
|
* });
|
|
473
519
|
* ```
|
|
474
520
|
*/
|
|
475
|
-
export const makeAPI = <Creds
|
|
521
|
+
export const makeAPI = <Creds, RequestOptions = never>(
|
|
522
|
+
config: ClientConfig<Creds, RequestOptions>,
|
|
523
|
+
) => {
|
|
476
524
|
type _ClientErrors = HttpClientError.HttpClientError | HttpBody.HttpBodyError;
|
|
477
525
|
type ResolvedCreds = ResolvedClientCredentials<Creds>;
|
|
478
526
|
|
|
@@ -487,30 +535,81 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
|
|
|
487
535
|
Schema.Schema.Type<I>,
|
|
488
536
|
Schema.Schema.Type<O>,
|
|
489
537
|
InstanceType<E[number]>,
|
|
490
|
-
Creds
|
|
538
|
+
Creds,
|
|
539
|
+
RequestOptions
|
|
491
540
|
> => {
|
|
492
|
-
const opConfig = configFn();
|
|
493
|
-
// Support both input/output and inputSchema/outputSchema aliases
|
|
494
|
-
const inputSchema = (opConfig.inputSchema ?? opConfig.input)!;
|
|
495
|
-
const outputSchema = (opConfig.outputSchema ?? opConfig.output)!;
|
|
496
|
-
const responsePath = Traits.getResponsePath(outputSchema.ast);
|
|
497
|
-
const graphqlOp = Traits.getGraphQLOp(inputSchema.ast);
|
|
498
|
-
const noFollowRedirect = Traits.getNoFollowRedirect(inputSchema.ast);
|
|
499
541
|
type Input = Schema.Schema.Type<I>;
|
|
500
542
|
|
|
501
|
-
//
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
543
|
+
// Lazily resolve the operation config + schema traits on first use,
|
|
544
|
+
// not at module-load time. Generated SDKs may wrap each request/response
|
|
545
|
+
// schema in `Schema.suspend(() => ...)`; forcing them here (rather than
|
|
546
|
+
// when the `export const` is evaluated) keeps importing a service module
|
|
547
|
+
// cheap and only pays the schema-construction cost for operations that
|
|
548
|
+
// are actually called. The result is memoized so subsequent calls are
|
|
549
|
+
// free, and non-suspended SDKs are unaffected (resolveAst is a no-op).
|
|
550
|
+
type HttpTraitResolved = NonNullable<
|
|
551
|
+
ReturnType<typeof Traits.getHttpTrait>
|
|
552
|
+
>;
|
|
553
|
+
interface Prepared {
|
|
554
|
+
opConfig: OperationConfig<I, O, E>;
|
|
555
|
+
inputSchema: I;
|
|
556
|
+
outputSchema: O;
|
|
557
|
+
inputAst: AST.AST;
|
|
558
|
+
outputAst: AST.AST;
|
|
559
|
+
responsePath: string | undefined;
|
|
560
|
+
graphqlOp: ReturnType<typeof Traits.getGraphQLOp>;
|
|
561
|
+
noFollowRedirect: ReturnType<typeof Traits.getNoFollowRedirect>;
|
|
562
|
+
httpTrait: HttpTraitResolved;
|
|
563
|
+
method: HttpTraitResolved["method"];
|
|
564
|
+
spanName: string;
|
|
506
565
|
}
|
|
566
|
+
let prepared: Prepared | undefined;
|
|
567
|
+
const prepare = (): Prepared => {
|
|
568
|
+
if (prepared) return prepared;
|
|
569
|
+
const opConfig = configFn();
|
|
570
|
+
// Support both input/output and inputSchema/outputSchema aliases
|
|
571
|
+
const inputSchema = (opConfig.inputSchema ?? opConfig.input)!;
|
|
572
|
+
const outputSchema = (opConfig.outputSchema ?? opConfig.output)!;
|
|
573
|
+
const inputAst = resolveAst(inputSchema.ast);
|
|
574
|
+
const outputAst = resolveAst(outputSchema.ast);
|
|
575
|
+
const httpTrait = Traits.getHttpTrait(inputAst);
|
|
576
|
+
if (!httpTrait) {
|
|
577
|
+
throw new Error("Input schema must have Http trait");
|
|
578
|
+
}
|
|
579
|
+
const method = httpTrait.method;
|
|
580
|
+
prepared = {
|
|
581
|
+
opConfig,
|
|
582
|
+
inputSchema,
|
|
583
|
+
outputSchema,
|
|
584
|
+
inputAst,
|
|
585
|
+
outputAst,
|
|
586
|
+
responsePath: Traits.getResponsePath(outputAst),
|
|
587
|
+
graphqlOp: Traits.getGraphQLOp(inputAst),
|
|
588
|
+
noFollowRedirect: Traits.getNoFollowRedirect(inputAst),
|
|
589
|
+
httpTrait,
|
|
590
|
+
method,
|
|
591
|
+
spanName: `${method} ${httpTrait.path}`,
|
|
592
|
+
};
|
|
593
|
+
return prepared;
|
|
594
|
+
};
|
|
507
595
|
|
|
508
|
-
const
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
const innerFn = (input: Input): Effect.Effect<any, any, any> =>
|
|
596
|
+
const innerFn = (
|
|
597
|
+
input: Input,
|
|
598
|
+
requestOptions?: RequestOptions,
|
|
599
|
+
): Effect.Effect<any, any, any> =>
|
|
513
600
|
Effect.gen(function* () {
|
|
601
|
+
const {
|
|
602
|
+
opConfig,
|
|
603
|
+
inputSchema,
|
|
604
|
+
outputSchema,
|
|
605
|
+
inputAst,
|
|
606
|
+
outputAst,
|
|
607
|
+
responsePath,
|
|
608
|
+
graphqlOp,
|
|
609
|
+
noFollowRedirect,
|
|
610
|
+
httpTrait,
|
|
611
|
+
method,
|
|
612
|
+
} = prepare();
|
|
514
613
|
const credentials = yield* config.credentials;
|
|
515
614
|
const creds = isEffectLike(credentials)
|
|
516
615
|
? yield* credentials
|
|
@@ -521,7 +620,7 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
|
|
|
521
620
|
// `getBaseUrl` empty (per-service hosts rather than per-credentials).
|
|
522
621
|
let baseUrl = config.getBaseUrl(creds as ResolvedCreds);
|
|
523
622
|
if (!baseUrl) {
|
|
524
|
-
const svcTrait = Traits.getServiceTrait(
|
|
623
|
+
const svcTrait = Traits.getServiceTrait(inputAst);
|
|
525
624
|
if (svcTrait?.rootUrl) {
|
|
526
625
|
baseUrl = svcTrait.rootUrl + (svcTrait.servicePath ?? "");
|
|
527
626
|
}
|
|
@@ -530,7 +629,7 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
|
|
|
530
629
|
|
|
531
630
|
// Use schema-aware request builder for proper camelCase → wire_name mapping
|
|
532
631
|
let parts = Traits.buildRequestParts(
|
|
533
|
-
|
|
632
|
+
inputAst,
|
|
534
633
|
httpTrait,
|
|
535
634
|
input as Record<string, unknown>,
|
|
536
635
|
inputSchema,
|
|
@@ -556,6 +655,7 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
|
|
|
556
655
|
method,
|
|
557
656
|
pathTemplate: httpTrait.path,
|
|
558
657
|
parts,
|
|
658
|
+
requestOptions,
|
|
559
659
|
});
|
|
560
660
|
}
|
|
561
661
|
|
|
@@ -573,11 +673,21 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
|
|
|
573
673
|
};
|
|
574
674
|
}
|
|
575
675
|
|
|
676
|
+
const requestHeaders =
|
|
677
|
+
config.getRequestHeaders?.(requestOptions, {
|
|
678
|
+
input: input as Record<string, unknown>,
|
|
679
|
+
method,
|
|
680
|
+
pathTemplate: httpTrait.path,
|
|
681
|
+
parts,
|
|
682
|
+
credentials: creds as ResolvedCreds,
|
|
683
|
+
}) ?? {};
|
|
684
|
+
|
|
576
685
|
let request = HttpClientRequest.make(method)(
|
|
577
686
|
baseUrl + parts.path,
|
|
578
687
|
).pipe(
|
|
579
688
|
HttpClientRequest.setHeaders(authHeaders),
|
|
580
689
|
HttpClientRequest.setHeaders(parts.headers),
|
|
690
|
+
HttpClientRequest.setHeaders(requestHeaders),
|
|
581
691
|
HttpClientRequest.setHeader("Accept", "application/json"),
|
|
582
692
|
);
|
|
583
693
|
|
|
@@ -737,7 +847,7 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
|
|
|
737
847
|
}
|
|
738
848
|
|
|
739
849
|
// For void-returning operations (e.g. DELETE 204 No Content)
|
|
740
|
-
if (AST.isVoid(
|
|
850
|
+
if (AST.isVoid(outputAst)) {
|
|
741
851
|
return undefined;
|
|
742
852
|
}
|
|
743
853
|
|
|
@@ -756,7 +866,7 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
|
|
|
756
866
|
const bytes = yield* response.arrayBuffer;
|
|
757
867
|
const stream = Stream.succeed(new Uint8Array(bytes));
|
|
758
868
|
return Traits.buildBinaryResponse(
|
|
759
|
-
|
|
869
|
+
outputAst,
|
|
760
870
|
stream,
|
|
761
871
|
response.headers as Record<string, string>,
|
|
762
872
|
) as unknown;
|
|
@@ -765,7 +875,7 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
|
|
|
765
875
|
// For 204 No Content: if schema is not Unknown, return undefined.
|
|
766
876
|
// If schema IS Unknown, return empty string (so callers get a defined value).
|
|
767
877
|
if (response.status === 204) {
|
|
768
|
-
if (
|
|
878
|
+
if (outputAst._tag === "Unknown") {
|
|
769
879
|
return "";
|
|
770
880
|
}
|
|
771
881
|
return undefined;
|
|
@@ -819,18 +929,42 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
|
|
|
819
929
|
}
|
|
820
930
|
}
|
|
821
931
|
|
|
932
|
+
// Some APIs (Cloudflare) answer with a 2xx status but an error
|
|
933
|
+
// envelope (`success: false`) rather than a 4xx. Route those through
|
|
934
|
+
// `matchError` with the operation's typed `errors` so per-operation
|
|
935
|
+
// matchers fire — otherwise the envelope falls through to schema
|
|
936
|
+
// decoding and surfaces as an opaque ParseError.
|
|
937
|
+
if (config.isErrorEnvelope?.(responseBody)) {
|
|
938
|
+
return yield* config.matchError(
|
|
939
|
+
response.status,
|
|
940
|
+
responseBody,
|
|
941
|
+
opConfig.errors,
|
|
942
|
+
response.headers,
|
|
943
|
+
);
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
// Tracks a `result: null` success that we optimistically coerce to
|
|
947
|
+
// `{}` below. Some ops legitimately return `null` (e.g. a per-zone
|
|
948
|
+
// singleton that was never configured) and declare a nullable
|
|
949
|
+
// output schema — for those, decoding `{}` fails, so we retry the
|
|
950
|
+
// decode with `null` (see the decode block).
|
|
951
|
+
let resultWasNull = false;
|
|
822
952
|
if (responsePath) {
|
|
823
953
|
const nested = getPath(responseBody, responsePath);
|
|
824
954
|
if (nested !== undefined) {
|
|
825
|
-
|
|
826
|
-
|
|
955
|
+
if (responsePath === "result" && nested === null) {
|
|
956
|
+
responseBody = {};
|
|
957
|
+
resultWasNull = true;
|
|
958
|
+
} else {
|
|
959
|
+
responseBody = nested;
|
|
960
|
+
}
|
|
827
961
|
}
|
|
828
962
|
}
|
|
829
963
|
|
|
830
964
|
// Handle Cloudflare-style paginated responses where result is
|
|
831
965
|
// { items: [...] } but the schema expects an array
|
|
832
966
|
if (
|
|
833
|
-
isArrayAST(
|
|
967
|
+
isArrayAST(outputAst) &&
|
|
834
968
|
!Array.isArray(responseBody) &&
|
|
835
969
|
typeof responseBody === "object" &&
|
|
836
970
|
responseBody !== null &&
|
|
@@ -844,7 +978,18 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
|
|
|
844
978
|
responseBody,
|
|
845
979
|
).pipe(
|
|
846
980
|
Effect.catchTag("SchemaError", (cause) =>
|
|
847
|
-
|
|
981
|
+
// A `result: null` success coerced to `{}` that the schema
|
|
982
|
+
// rejects: retry decoding the genuine `null` (the schema may be
|
|
983
|
+
// a nullable union). Only then surface the parse error.
|
|
984
|
+
resultWasNull
|
|
985
|
+
? Schema.decodeUnknownEffect(outputSchema)(null).pipe(
|
|
986
|
+
Effect.catchTag("SchemaError", () =>
|
|
987
|
+
Effect.fail(
|
|
988
|
+
new config.ParseError({ body: rawBody, cause }),
|
|
989
|
+
),
|
|
990
|
+
),
|
|
991
|
+
)
|
|
992
|
+
: Effect.fail(new config.ParseError({ body: rawBody, cause })),
|
|
848
993
|
),
|
|
849
994
|
);
|
|
850
995
|
});
|
|
@@ -858,7 +1003,11 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
|
|
|
858
1003
|
// install a blanket policy at the layer level instead of wrapping
|
|
859
1004
|
// every call site with `Effect.retry(...)`.
|
|
860
1005
|
const retryTag = config.retry;
|
|
861
|
-
const fn = (
|
|
1006
|
+
const fn = (
|
|
1007
|
+
input: Input,
|
|
1008
|
+
requestOptions?: RequestOptions,
|
|
1009
|
+
): Effect.Effect<any, any, any> => {
|
|
1010
|
+
const { spanName, method, httpTrait } = prepare();
|
|
862
1011
|
const withRetry = Effect.gen(function* () {
|
|
863
1012
|
const lastError = yield* Ref.make<unknown>(undefined);
|
|
864
1013
|
const policy = (yield* Effect.serviceOption(retryTag)).pipe(
|
|
@@ -869,7 +1018,7 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
|
|
|
869
1018
|
);
|
|
870
1019
|
|
|
871
1020
|
return yield* pipe(
|
|
872
|
-
innerFn(input),
|
|
1021
|
+
innerFn(input, requestOptions),
|
|
873
1022
|
Effect.tapError((error) => Ref.set(lastError, error)),
|
|
874
1023
|
policy.while
|
|
875
1024
|
? (eff) =>
|
|
@@ -906,8 +1055,8 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
|
|
|
906
1055
|
asEffect() {
|
|
907
1056
|
return Effect.map(
|
|
908
1057
|
Effect.context(),
|
|
909
|
-
(context) => (input: Input) =>
|
|
910
|
-
Effect.provideContext(fn(input), context),
|
|
1058
|
+
(context) => (input: Input, requestOptions?: RequestOptions) =>
|
|
1059
|
+
Effect.provideContext(fn(input, requestOptions), context),
|
|
911
1060
|
);
|
|
912
1061
|
},
|
|
913
1062
|
};
|
|
@@ -926,7 +1075,8 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
|
|
|
926
1075
|
Schema.Schema.Type<I>,
|
|
927
1076
|
Schema.Schema.Type<O>,
|
|
928
1077
|
InstanceType<E[number]>,
|
|
929
|
-
Creds
|
|
1078
|
+
Creds,
|
|
1079
|
+
RequestOptions
|
|
930
1080
|
> => {
|
|
931
1081
|
const opConfig = configFn();
|
|
932
1082
|
const pagination = opConfig.pagination!;
|
|
@@ -943,14 +1093,19 @@ export const makeAPI = <Creds>(config: ClientConfig<Creds>) => {
|
|
|
943
1093
|
const paginate = paginateFn ?? paginateWithDefaults;
|
|
944
1094
|
|
|
945
1095
|
// Stream all pages
|
|
946
|
-
const pagesFn = (
|
|
947
|
-
|
|
1096
|
+
const pagesFn = (
|
|
1097
|
+
input: Omit<Input, string>,
|
|
1098
|
+
requestOptions?: RequestOptions,
|
|
1099
|
+
) => paginate(baseFn as any, input, pagination, requestOptions);
|
|
948
1100
|
|
|
949
1101
|
// Stream individual items
|
|
950
|
-
const itemsFn = (
|
|
1102
|
+
const itemsFn = (
|
|
1103
|
+
input: Omit<Input, string>,
|
|
1104
|
+
requestOptions?: RequestOptions,
|
|
1105
|
+
) =>
|
|
951
1106
|
pagination.items
|
|
952
|
-
? extractItems(pagesFn(input), pagination.items)
|
|
953
|
-
: pagesFn(input);
|
|
1107
|
+
? extractItems(pagesFn(input, requestOptions), pagination.items)
|
|
1108
|
+
: pagesFn(input, requestOptions);
|
|
954
1109
|
|
|
955
1110
|
const result = baseFn as typeof baseFn & {
|
|
956
1111
|
pages: typeof pagesFn;
|
package/src/pagination.ts
CHANGED
|
@@ -50,10 +50,15 @@ export type PaginationStrategy = <
|
|
|
50
50
|
Output,
|
|
51
51
|
E,
|
|
52
52
|
R,
|
|
53
|
+
RequestOptions = never,
|
|
53
54
|
>(
|
|
54
|
-
operation: (
|
|
55
|
+
operation: (
|
|
56
|
+
input: Input,
|
|
57
|
+
requestOptions?: RequestOptions,
|
|
58
|
+
) => Effect.Effect<Output, E, R>,
|
|
55
59
|
input: Input,
|
|
56
60
|
pagination: PaginatedTrait,
|
|
61
|
+
requestOptions?: RequestOptions,
|
|
57
62
|
) => Stream.Stream<Output, E, R>;
|
|
58
63
|
|
|
59
64
|
const missingPaginationConfig = (kind: string) => Stream.die(new Error(kind));
|
|
@@ -61,9 +66,16 @@ const missingPaginationConfig = (kind: string) => Stream.die(new Error(kind));
|
|
|
61
66
|
/**
|
|
62
67
|
* Creates a stream for single-shot list endpoints that still expose the paginated API surface.
|
|
63
68
|
*/
|
|
64
|
-
export const paginateSingle: PaginationStrategy = (
|
|
69
|
+
export const paginateSingle: PaginationStrategy = (
|
|
70
|
+
operation,
|
|
71
|
+
input,
|
|
72
|
+
_pagination,
|
|
73
|
+
requestOptions,
|
|
74
|
+
) =>
|
|
65
75
|
Stream.make(input).pipe(
|
|
66
|
-
Stream.mapEffect((requestPayload) =>
|
|
76
|
+
Stream.mapEffect((requestPayload) =>
|
|
77
|
+
operation(requestPayload, requestOptions),
|
|
78
|
+
),
|
|
67
79
|
);
|
|
68
80
|
|
|
69
81
|
// ============================================================================
|
|
@@ -83,10 +95,15 @@ export const paginatePageNumber = <
|
|
|
83
95
|
Output,
|
|
84
96
|
E,
|
|
85
97
|
R,
|
|
98
|
+
RequestOptions = never,
|
|
86
99
|
>(
|
|
87
|
-
operation: (
|
|
100
|
+
operation: (
|
|
101
|
+
input: Input,
|
|
102
|
+
requestOptions?: RequestOptions,
|
|
103
|
+
) => Effect.Effect<Output, E, R>,
|
|
88
104
|
input: Omit<Input, string>,
|
|
89
105
|
pagination: PaginatedTrait,
|
|
106
|
+
requestOptions?: RequestOptions,
|
|
90
107
|
): Stream.Stream<Output, E, R> => {
|
|
91
108
|
const inputToken = pagination.inputToken;
|
|
92
109
|
const outputToken = pagination.outputToken;
|
|
@@ -113,7 +130,7 @@ export const paginatePageNumber = <
|
|
|
113
130
|
[inputToken]: state.page,
|
|
114
131
|
} as Input;
|
|
115
132
|
|
|
116
|
-
const response = yield* operation(requestPayload);
|
|
133
|
+
const response = yield* operation(requestPayload, requestOptions);
|
|
117
134
|
|
|
118
135
|
const nextPage = getPath(response, outputToken) as
|
|
119
136
|
| number
|
|
@@ -166,10 +183,15 @@ export const paginateCursor = <
|
|
|
166
183
|
Output,
|
|
167
184
|
E,
|
|
168
185
|
R,
|
|
186
|
+
RequestOptions = never,
|
|
169
187
|
>(
|
|
170
|
-
operation: (
|
|
188
|
+
operation: (
|
|
189
|
+
input: Input,
|
|
190
|
+
requestOptions?: RequestOptions,
|
|
191
|
+
) => Effect.Effect<Output, E, R>,
|
|
171
192
|
input: Omit<Input, string>,
|
|
172
193
|
pagination: PaginatedTrait,
|
|
194
|
+
requestOptions?: RequestOptions,
|
|
173
195
|
): Stream.Stream<Output, E, R> => {
|
|
174
196
|
const inputToken = pagination.inputToken;
|
|
175
197
|
const outputToken = pagination.outputToken;
|
|
@@ -196,7 +218,7 @@ export const paginateCursor = <
|
|
|
196
218
|
...(state.cursor ? { [inputToken]: state.cursor } : {}),
|
|
197
219
|
} as Input;
|
|
198
220
|
|
|
199
|
-
const response = yield* operation(requestPayload);
|
|
221
|
+
const response = yield* operation(requestPayload, requestOptions);
|
|
200
222
|
|
|
201
223
|
const nextCursor = getPath(response, outputToken) as
|
|
202
224
|
| string
|
|
@@ -231,10 +253,15 @@ export const paginateToken = <
|
|
|
231
253
|
Output,
|
|
232
254
|
E,
|
|
233
255
|
R,
|
|
256
|
+
RequestOptions = never,
|
|
234
257
|
>(
|
|
235
|
-
operation: (
|
|
258
|
+
operation: (
|
|
259
|
+
input: Input,
|
|
260
|
+
requestOptions?: RequestOptions,
|
|
261
|
+
) => Effect.Effect<Output, E, R>,
|
|
236
262
|
input: Input,
|
|
237
263
|
pagination: PaginatedTrait,
|
|
264
|
+
requestOptions?: RequestOptions,
|
|
238
265
|
): Stream.Stream<Output, E, R> => {
|
|
239
266
|
const inputToken = pagination.inputToken;
|
|
240
267
|
const outputToken = pagination.outputToken;
|
|
@@ -258,7 +285,10 @@ export const paginateToken = <
|
|
|
258
285
|
? { ...input, [inputToken]: state.token }
|
|
259
286
|
: input;
|
|
260
287
|
|
|
261
|
-
const response = yield* operation(
|
|
288
|
+
const response = yield* operation(
|
|
289
|
+
requestPayload as Input,
|
|
290
|
+
requestOptions,
|
|
291
|
+
);
|
|
262
292
|
|
|
263
293
|
const nextToken = getPath(response, outputToken);
|
|
264
294
|
|
|
@@ -280,21 +310,22 @@ export const paginateWithDefaults: PaginationStrategy = (
|
|
|
280
310
|
operation,
|
|
281
311
|
input,
|
|
282
312
|
pagination,
|
|
313
|
+
requestOptions,
|
|
283
314
|
) => {
|
|
284
315
|
const mode = pagination.mode ?? "token";
|
|
285
316
|
|
|
286
317
|
switch (mode) {
|
|
287
318
|
case "page":
|
|
288
|
-
return paginatePageNumber(operation, input, pagination);
|
|
319
|
+
return paginatePageNumber(operation, input, pagination, requestOptions);
|
|
289
320
|
case "cursor":
|
|
290
|
-
return paginateCursor(operation, input, pagination);
|
|
321
|
+
return paginateCursor(operation, input, pagination, requestOptions);
|
|
291
322
|
case "single":
|
|
292
323
|
return missingPaginationConfig(
|
|
293
324
|
"Single-page pagination requires a provider-specific pagination strategy",
|
|
294
325
|
);
|
|
295
326
|
case "token":
|
|
296
327
|
default:
|
|
297
|
-
return paginateToken(operation, input, pagination);
|
|
328
|
+
return paginateToken(operation, input, pagination, requestOptions);
|
|
298
329
|
}
|
|
299
330
|
};
|
|
300
331
|
|