@blokjs/api-call 0.6.20 → 0.6.21

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/dist/index.d.ts CHANGED
@@ -37,15 +37,15 @@ declare const _default: import("@blokjs/runner").FunctionNode<z.ZodObject<{
37
37
  responseType: z.ZodDefault<z.ZodOptional<z.ZodString>>;
38
38
  }, "strip", z.ZodTypeAny, {
39
39
  url: string;
40
+ body: Record<string, unknown>;
40
41
  method: string;
41
42
  headers: Record<string, string>;
42
- body: Record<string, unknown>;
43
43
  responseType: string;
44
44
  }, {
45
45
  url: string;
46
+ body?: Record<string, unknown> | undefined;
46
47
  method?: string | undefined;
47
48
  headers?: Record<string, string> | undefined;
48
- body?: Record<string, unknown> | undefined;
49
49
  responseType?: string | undefined;
50
50
  }>, z.ZodUnion<[z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnknown>]>>;
51
51
  export default _default;
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Tests for runApiCall's HTTP-error handling — it must NOT discard the upstream
3
+ * status, body, or Retry-After header on a >=400 response.
4
+ */
5
+ export {};
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Tests for runApiCall's HTTP-error handling — it must NOT discard the upstream
3
+ * status, body, or Retry-After header on a >=400 response.
4
+ */
5
+ import { GlobalError } from "@blokjs/shared";
6
+ import { afterEach, describe, expect, it, vi } from "vitest";
7
+ import { runApiCall } from "../util";
8
+ function mockFetchResponse(opts) {
9
+ const headers = new Headers(opts.headers ?? {});
10
+ return {
11
+ status: opts.status,
12
+ statusText: opts.statusText ?? "",
13
+ ok: opts.status < 400,
14
+ headers,
15
+ json: async () => opts.json,
16
+ text: async () => opts.body ?? "",
17
+ };
18
+ }
19
+ describe("runApiCall — HTTP error handling", () => {
20
+ afterEach(() => {
21
+ vi.restoreAllMocks();
22
+ });
23
+ it("throws a GlobalError carrying the upstream status code on >=400 (not a generic 500)", async () => {
24
+ vi.stubGlobal("fetch", vi.fn(async () => mockFetchResponse({
25
+ status: 429,
26
+ statusText: "Too Many Requests",
27
+ headers: { "content-type": "application/json", "retry-after": "30" },
28
+ json: { error: "rate_limited" },
29
+ })));
30
+ const err = await runApiCall("https://api.example.com/x", "GET", {}, {}, "json").catch((e) => e);
31
+ expect(err).toBeInstanceOf(GlobalError);
32
+ const ge = err;
33
+ expect(ge.context.code).toBe(429);
34
+ expect(ge.context.name).toBe("ApiCallError");
35
+ expect(ge.context.json).toMatchObject({
36
+ status: 429,
37
+ statusText: "Too Many Requests",
38
+ retryAfter: "30",
39
+ retryAfterSeconds: 30,
40
+ body: { error: "rate_limited" },
41
+ });
42
+ });
43
+ it("captures a text body and an HTTP-date Retry-After", async () => {
44
+ const future = new Date(Date.now() + 60_000).toUTCString();
45
+ vi.stubGlobal("fetch", vi.fn(async () => mockFetchResponse({
46
+ status: 503,
47
+ statusText: "Service Unavailable",
48
+ headers: { "content-type": "text/plain", "retry-after": future },
49
+ body: "down for maintenance",
50
+ })));
51
+ const err = (await runApiCall("https://api.example.com/y", "GET", {}, {}, "json").catch((e) => e));
52
+ expect(err.context.code).toBe(503);
53
+ const json = err.context.json;
54
+ expect(json.body).toBe("down for maintenance");
55
+ expect(typeof json.retryAfterSeconds).toBe("number");
56
+ expect(json.retryAfterSeconds).toBeGreaterThan(50);
57
+ });
58
+ it("omits retry fields when no Retry-After header is present", async () => {
59
+ vi.stubGlobal("fetch", vi.fn(async () => mockFetchResponse({
60
+ status: 404,
61
+ statusText: "Not Found",
62
+ headers: { "content-type": "application/json" },
63
+ json: { message: "missing" },
64
+ })));
65
+ const err = (await runApiCall("https://api.example.com/z", "GET", {}, {}, "json").catch((e) => e));
66
+ expect(err.context.code).toBe(404);
67
+ const json = err.context.json;
68
+ expect(json).not.toHaveProperty("retryAfter");
69
+ expect(json.body).toMatchObject({ message: "missing" });
70
+ });
71
+ it("returns the parsed JSON body on a 2xx response", async () => {
72
+ vi.stubGlobal("fetch", vi.fn(async () => mockFetchResponse({
73
+ status: 200,
74
+ headers: { "content-type": "application/json" },
75
+ json: { ok: true },
76
+ })));
77
+ const result = await runApiCall("https://api.example.com/ok", "GET", {}, {}, "json");
78
+ expect(result).toEqual({ ok: true });
79
+ });
80
+ });
81
+ //# sourceMappingURL=util.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.test.js","sourceRoot":"","sources":["../../test/util.test.ts"],"names":[],"mappings":"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"}
package/dist/util.js CHANGED
@@ -1,3 +1,19 @@
1
+ import { GlobalError } from "@blokjs/shared";
2
+ /**
3
+ * Parse a `Retry-After` header into seconds. The header is either a number of
4
+ * seconds (delta) or an HTTP-date; returns `undefined` when absent/unparseable.
5
+ */
6
+ function parseRetryAfterSeconds(value) {
7
+ if (!value)
8
+ return undefined;
9
+ const asNumber = Number(value);
10
+ if (Number.isFinite(asNumber))
11
+ return Math.max(0, asNumber);
12
+ const asDate = Date.parse(value);
13
+ if (!Number.isNaN(asDate))
14
+ return Math.max(0, Math.round((asDate - Date.now()) / 1000));
15
+ return undefined;
16
+ }
1
17
  export const runApiCall = async (url, method, headers, body, responseType) => {
2
18
  const options = {
3
19
  method,
@@ -10,7 +26,34 @@ export const runApiCall = async (url, method, headers, body, responseType) => {
10
26
  options.body = undefined;
11
27
  const response = await fetch(url, options);
12
28
  if (response.status >= 400 && response.ok === false) {
13
- throw new Error(response.statusText);
29
+ // Don't discard the upstream signal. Capture the body and the rate-limit
30
+ // headers, and throw a GlobalError carrying the *upstream* status code so a
31
+ // 429/503 surfaces as a retryable 429/503 (not a generic 500) and callers
32
+ // (or a `tryCatch` arm) can honor `Retry-After` instead of hammering the
33
+ // provider. The framework preserves a thrown GlobalError's code verbatim.
34
+ const contentType = response.headers.get("content-type") ?? "";
35
+ let responseBody;
36
+ try {
37
+ responseBody = contentType.includes("application/json")
38
+ ? (await response.json())
39
+ : await response.text();
40
+ }
41
+ catch {
42
+ responseBody = undefined;
43
+ }
44
+ const retryAfterRaw = response.headers.get("retry-after");
45
+ const retryAfterSeconds = parseRetryAfterSeconds(retryAfterRaw);
46
+ const error = new GlobalError(`API call to ${url} failed: ${response.status} ${response.statusText || ""}`.trim());
47
+ error.setName("ApiCallError");
48
+ error.setCode(response.status);
49
+ error.setJson({
50
+ status: response.status,
51
+ statusText: response.statusText,
52
+ url,
53
+ ...(retryAfterRaw !== null ? { retryAfter: retryAfterRaw, retryAfterSeconds } : {}),
54
+ ...(responseBody !== undefined ? { body: responseBody } : {}),
55
+ });
56
+ throw error;
14
57
  }
15
58
  let parsedResponse;
16
59
  if (response.headers.get("content-type")?.includes("application/json")) {
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../util.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC9B,GAAW,EACX,MAAc,EACd,OAAuB,EACvB,IAAoB,EACpB,YAAoB,EACe,EAAE;IACrC,MAAM,OAAO,GAMT;QACH,MAAM;QACN,OAAO;QACP,QAAQ,EAAE,QAAQ;QAClB,YAAY;QACZ,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC5D,CAAC;IAEF,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC;IAC/C,MAAM,QAAQ,GAAa,MAAM,KAAK,CAAC,GAAG,EAAE,OAAsB,CAAC,CAAC;IAEpE,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,cAAuC,CAAC;IAC5C,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACxE,cAAc,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;SAAM,CAAC;QACP,cAAc,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;IAED,OAAO,cAAc,CAAC;AACvB,CAAC,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blokjs/api-call",
3
- "version": "0.6.20",
3
+ "version": "0.6.21",
4
4
  "files": ["dist"],
5
5
  "description": "Node module for making API calls",
6
6
  "type": "module",
@@ -26,8 +26,8 @@
26
26
  "vitest": "^4.0.18"
27
27
  },
28
28
  "dependencies": {
29
- "@blokjs/runner": "^0.6.20",
30
- "@blokjs/shared": "^0.6.20",
29
+ "@blokjs/runner": "^0.6.21",
30
+ "@blokjs/shared": "^0.6.21",
31
31
  "lodash": "^4.17.21",
32
32
  "zod": "^3.24.2"
33
33
  },