@superblocksteam/sdk-api 0.0.7 → 0.0.9

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.
Files changed (62) hide show
  1. package/dist/errors.d.ts +6 -6
  2. package/dist/errors.d.ts.map +1 -1
  3. package/dist/errors.js +23 -2
  4. package/dist/errors.js.map +1 -1
  5. package/dist/integrations/base/decode-worker-binary-response.d.ts +4 -0
  6. package/dist/integrations/base/decode-worker-binary-response.d.ts.map +1 -0
  7. package/dist/integrations/base/decode-worker-binary-response.js +49 -0
  8. package/dist/integrations/base/decode-worker-binary-response.js.map +1 -0
  9. package/dist/integrations/base/decode-worker-binary-response.test.d.ts +2 -0
  10. package/dist/integrations/base/decode-worker-binary-response.test.d.ts.map +1 -0
  11. package/dist/integrations/base/decode-worker-binary-response.test.js +81 -0
  12. package/dist/integrations/base/decode-worker-binary-response.test.js.map +1 -0
  13. package/dist/integrations/base/index.d.ts +1 -1
  14. package/dist/integrations/base/index.d.ts.map +1 -1
  15. package/dist/integrations/base/rest-api-client-base.d.ts +0 -27
  16. package/dist/integrations/base/rest-api-client-base.d.ts.map +1 -1
  17. package/dist/integrations/base/rest-api-client-base.js +34 -37
  18. package/dist/integrations/base/rest-api-client-base.js.map +1 -1
  19. package/dist/integrations/base/rest-api-integration-client.d.ts +11 -17
  20. package/dist/integrations/base/rest-api-integration-client.d.ts.map +1 -1
  21. package/dist/integrations/base/rest-api-integration-client.js +18 -17
  22. package/dist/integrations/base/rest-api-integration-client.js.map +1 -1
  23. package/dist/integrations/base/types.d.ts +72 -13
  24. package/dist/integrations/base/types.d.ts.map +1 -1
  25. package/dist/integrations/base/types.js +1 -4
  26. package/dist/integrations/base/types.js.map +1 -1
  27. package/dist/integrations/documentation-resolver.test.js +173 -1
  28. package/dist/integrations/documentation-resolver.test.js.map +1 -1
  29. package/dist/integrations/documentation.d.ts +1 -0
  30. package/dist/integrations/documentation.d.ts.map +1 -1
  31. package/dist/integrations/documentation.js +31 -8
  32. package/dist/integrations/documentation.js.map +1 -1
  33. package/dist/integrations/postgres/client.d.ts +0 -7
  34. package/dist/integrations/postgres/client.d.ts.map +1 -1
  35. package/dist/integrations/restapiintegration/client.test.d.ts +2 -0
  36. package/dist/integrations/restapiintegration/client.test.d.ts.map +1 -0
  37. package/dist/integrations/restapiintegration/client.test.js +313 -0
  38. package/dist/integrations/restapiintegration/client.test.js.map +1 -0
  39. package/dist/integrations/slack/client.test.js +26 -1
  40. package/dist/integrations/slack/client.test.js.map +1 -1
  41. package/dist/integrations/slack/types.d.ts +2 -2
  42. package/dist/integrations/slack/types.d.ts.map +1 -1
  43. package/package.json +6 -6
  44. package/src/errors.ts +33 -5
  45. package/src/integrations/base/decode-worker-binary-response.test.ts +107 -0
  46. package/src/integrations/base/decode-worker-binary-response.ts +62 -0
  47. package/src/integrations/base/index.ts +1 -0
  48. package/src/integrations/base/rest-api-client-base.ts +42 -46
  49. package/src/integrations/base/rest-api-integration-client.ts +51 -21
  50. package/src/integrations/base/types.ts +85 -15
  51. package/src/integrations/documentation-resolver.test.ts +197 -1
  52. package/src/integrations/documentation.ts +63 -11
  53. package/src/integrations/graphql/docs.manifest.json +6 -1
  54. package/src/integrations/graphql/overlays/dynamic-headers.md +34 -0
  55. package/src/integrations/postgres/client.ts +1 -1
  56. package/src/integrations/restapiintegration/client.test.ts +480 -0
  57. package/src/integrations/restapiintegration/docs.manifest.json +14 -1
  58. package/src/integrations/restapiintegration/overlays/response-types-binary.md +51 -0
  59. package/src/integrations/restapiintegration/overlays/response-types-unsupported.md +7 -0
  60. package/src/integrations/restapiintegration/overlays/response-types.md +26 -0
  61. package/src/integrations/slack/client.test.ts +36 -1
  62. package/src/integrations/slack/types.ts +2 -2
package/dist/errors.d.ts CHANGED
@@ -2,6 +2,10 @@
2
2
  * Error classes for SDK runtime errors.
3
3
  */
4
4
  import type { z } from "zod";
5
+ export declare const REDACTED_BINARY_RESPONSE_DATA: Readonly<{
6
+ dataType: "binary";
7
+ redacted: true;
8
+ }>;
5
9
  /**
6
10
  * Error thrown when REST API response or request body validation fails.
7
11
  *
@@ -10,16 +14,12 @@ import type { z } from "zod";
10
14
  */
11
15
  export declare class RestApiValidationError extends Error {
12
16
  readonly details: {
13
- /** The complete Zod error object with all validation information */
14
- zodError: z.ZodError;
15
- /** The actual data that failed validation (request body or response) */
16
17
  data: unknown;
18
+ zodError: z.ZodError;
17
19
  };
18
20
  constructor(message: string, details: {
19
- /** The complete Zod error object with all validation information */
20
- zodError: z.ZodError;
21
- /** The actual data that failed validation (request body or response) */
22
21
  data: unknown;
22
+ zodError: z.ZodError;
23
23
  });
24
24
  }
25
25
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B;;;;;GAKG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;aAG7B,OAAO,EAAE;QACvB,oEAAoE;QACpE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC;QACrB,wEAAwE;QACxE,IAAI,EAAE,OAAO,CAAC;KACf;gBAND,OAAO,EAAE,MAAM,EACC,OAAO,EAAE;QACvB,oEAAoE;QACpE,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC;QACrB,wEAAwE;QACxE,IAAI,EAAE,OAAO,CAAC;KACf;CAOJ;AAED;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;aAG3B,OAAO,EAAE;QACvB,wDAAwD;QACxD,QAAQ,EAAE,MAAM,CAAC;QACjB,sDAAsD;QACtD,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC9D,8CAA8C;QAC9C,GAAG,EAAE,OAAO,CAAC;KACd;gBARD,OAAO,EAAE,MAAM,EACC,OAAO,EAAE;QACvB,wDAAwD;QACxD,QAAQ,EAAE,MAAM,CAAC;QACjB,sDAAsD;QACtD,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC9D,8CAA8C;QAC9C,GAAG,EAAE,OAAO,CAAC;KACd;CAOJ;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;aAGzB,OAAO,CAAC,EAAE;QACxB,iCAAiC;QACjC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,4CAA4C;QAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,+CAA+C;QAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,gDAAgD;QAChD,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;QACtB,gDAAgD;QAChD,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB;gBAZD,OAAO,EAAE,MAAM,EACC,OAAO,CAAC,EAAE;QACxB,iCAAiC;QACjC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,4CAA4C;QAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,+CAA+C;QAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,gDAAgD;QAChD,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;QACtB,gDAAgD;QAChD,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,YAAA;CAOJ"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,eAAO,MAAM,6BAA6B;;;EAGxC,CAAC;AAmBH;;;;;GAKG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,QAAQ,CAAC,OAAO,EAAE;QAChB,IAAI,EAAE,OAAO,CAAC;QACd,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC;KACtB,CAAC;gBAGA,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QACP,IAAI,EAAE,OAAO,CAAC;QACd,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC;KACtB;CAUJ;AAED;;;;;GAKG;AACH,qBAAa,oBAAqB,SAAQ,KAAK;aAG3B,OAAO,EAAE;QACvB,wDAAwD;QACxD,QAAQ,EAAE,MAAM,CAAC;QACjB,sDAAsD;QACtD,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC9D,8CAA8C;QAC9C,GAAG,EAAE,OAAO,CAAC;KACd;gBARD,OAAO,EAAE,MAAM,EACC,OAAO,EAAE;QACvB,wDAAwD;QACxD,QAAQ,EAAE,MAAM,CAAC;QACjB,sDAAsD;QACtD,MAAM,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC9D,8CAA8C;QAC9C,GAAG,EAAE,OAAO,CAAC;KACd;CAOJ;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;aAGzB,OAAO,CAAC,EAAE;QACxB,iCAAiC;QACjC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,4CAA4C;QAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,+CAA+C;QAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,gDAAgD;QAChD,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;QACtB,gDAAgD;QAChD,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB;gBAZD,OAAO,EAAE,MAAM,EACC,OAAO,CAAC,EAAE;QACxB,iCAAiC;QACjC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,4CAA4C;QAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,+CAA+C;QAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,gDAAgD;QAChD,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC;QACtB,gDAAgD;QAChD,aAAa,CAAC,EAAE,OAAO,CAAC;KACzB,YAAA;CAOJ"}
package/dist/errors.js CHANGED
@@ -1,6 +1,25 @@
1
1
  /**
2
2
  * Error classes for SDK runtime errors.
3
3
  */
4
+ export const REDACTED_BINARY_RESPONSE_DATA = Object.freeze({
5
+ dataType: "binary",
6
+ redacted: true,
7
+ });
8
+ function isWorkerBufferJson(data) {
9
+ if (typeof data !== "object" || data === null) {
10
+ return false;
11
+ }
12
+ if (!("data" in data) || !("type" in data)) {
13
+ return false;
14
+ }
15
+ return data.type === "Buffer" && Array.isArray(data.data);
16
+ }
17
+ function redactBinaryValidationData(data) {
18
+ if (data instanceof Uint8Array || isWorkerBufferJson(data)) {
19
+ return REDACTED_BINARY_RESPONSE_DATA;
20
+ }
21
+ return data;
22
+ }
4
23
  /**
5
24
  * Error thrown when REST API response or request body validation fails.
6
25
  *
@@ -11,9 +30,11 @@ export class RestApiValidationError extends Error {
11
30
  details;
12
31
  constructor(message, details) {
13
32
  super(message);
14
- this.details = details;
15
33
  this.name = "RestApiValidationError";
16
- // Ensure proper prototype chain for instanceof checks
34
+ this.details = {
35
+ data: redactBinaryValidationData(details.data),
36
+ zodError: details.zodError,
37
+ };
17
38
  Object.setPrototypeOf(this, RestApiValidationError.prototype);
18
39
  }
19
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;GAKG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAG7B;IAFlB,YACE,OAAe,EACC,OAKf;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QAPC,YAAO,GAAP,OAAO,CAKtB;QAGD,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,sDAAsD;QACtD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAG3B;IAFlB,YACE,OAAe,EACC,OAOf;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QATC,YAAO,GAAP,OAAO,CAOtB;QAGD,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,sDAAsD;QACtD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAGzB;IAFlB,YACE,OAAe,EACC,OAWf;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QAbC,YAAO,GAAP,OAAO,CAWtB;QAGD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,sDAAsD;QACtD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,MAAM,CAAC;IACzD,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,IAAI;CACf,CAAC,CAAC;AAEH,SAAS,kBAAkB,CAAC,IAAa;IACvC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,IAAI,IAAI,CAAC,EAAE,CAAC;QAC3C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAa;IAC/C,IAAI,IAAI,YAAY,UAAU,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,OAAO,6BAA6B,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IACtC,OAAO,CAGd;IAEF,YACE,OAAe,EACf,OAGC;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG;YACb,IAAI,EAAE,0BAA0B,CAAC,OAAO,CAAC,IAAI,CAAC;YAC9C,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC;QACF,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAG3B;IAFlB,YACE,OAAe,EACC,OAOf;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QATC,YAAO,GAAP,OAAO,CAOtB;QAGD,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,sDAAsD;QACtD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IAC9D,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAGzB;IAFlB,YACE,OAAe,EACC,OAWf;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QAbC,YAAO,GAAP,OAAO,CAWtB;QAGD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,sDAAsD;QACtD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import { REDACTED_BINARY_RESPONSE_DATA } from "../../errors.js";
2
+ export { REDACTED_BINARY_RESPONSE_DATA };
3
+ export declare function decodeWorkerBinaryResponse(value: unknown): Uint8Array;
4
+ //# sourceMappingURL=decode-worker-binary-response.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode-worker-binary-response.d.ts","sourceRoot":"","sources":["../../../src/integrations/base/decode-worker-binary-response.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,6BAA6B,EAE9B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,6BAA6B,EAAE,CAAC;AA0CzC,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,UAAU,CAYrE"}
@@ -0,0 +1,49 @@
1
+ import { z } from "zod";
2
+ import { REDACTED_BINARY_RESPONSE_DATA, RestApiValidationError, } from "../../errors.js";
3
+ export { REDACTED_BINARY_RESPONSE_DATA };
4
+ const workerBinaryResponseSchema = z.union([
5
+ z.instanceof(Uint8Array).transform((value) => new Uint8Array(value)),
6
+ z
7
+ .object({
8
+ data: z.unknown(),
9
+ type: z.literal("Buffer"),
10
+ })
11
+ .transform((value, context) => {
12
+ if (!Array.isArray(value.data)) {
13
+ context.addIssue({
14
+ code: z.ZodIssueCode.custom,
15
+ message: "data must be an array of bytes",
16
+ path: ["data"],
17
+ });
18
+ return z.NEVER;
19
+ }
20
+ const bytes = new Uint8Array(value.data.length);
21
+ for (let index = 0; index < value.data.length; index += 1) {
22
+ const item = value.data[index];
23
+ if (typeof item !== "number" ||
24
+ !Number.isInteger(item) ||
25
+ item < 0 ||
26
+ item > 255) {
27
+ context.addIssue({
28
+ code: z.ZodIssueCode.custom,
29
+ message: "byte must be an integer from 0 through 255",
30
+ path: ["data", index],
31
+ });
32
+ return z.NEVER;
33
+ }
34
+ bytes[index] = item;
35
+ }
36
+ return bytes;
37
+ }),
38
+ ]);
39
+ export function decodeWorkerBinaryResponse(value) {
40
+ const result = workerBinaryResponseSchema.safeParse(value);
41
+ if (!result.success) {
42
+ throw new RestApiValidationError(`Binary response is malformed: ${result.error.message}`, {
43
+ data: REDACTED_BINARY_RESPONSE_DATA,
44
+ zodError: result.error,
45
+ });
46
+ }
47
+ return result.data;
48
+ }
49
+ //# sourceMappingURL=decode-worker-binary-response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode-worker-binary-response.js","sourceRoot":"","sources":["../../../src/integrations/base/decode-worker-binary-response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,6BAA6B,EAAE,CAAC;AAEzC,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC;IACzC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IACpE,CAAC;SACE,MAAM,CAAC;QACN,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE;QACjB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;KAC1B,CAAC;SACD,SAAS,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,QAAQ,CAAC;gBACf,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;gBAC3B,OAAO,EAAE,gCAAgC;gBACzC,IAAI,EAAE,CAAC,MAAM,CAAC;aACf,CAAC,CAAC;YACH,OAAO,CAAC,CAAC,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC/B,IACE,OAAO,IAAI,KAAK,QAAQ;gBACxB,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;gBACvB,IAAI,GAAG,CAAC;gBACR,IAAI,GAAG,GAAG,EACV,CAAC;gBACD,OAAO,CAAC,QAAQ,CAAC;oBACf,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;oBAC3B,OAAO,EAAE,4CAA4C;oBACrD,IAAI,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC;iBACtB,CAAC,CAAC;gBACH,OAAO,CAAC,CAAC,KAAK,CAAC;YACjB,CAAC;YACD,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QACtB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;CACL,CAAC,CAAC;AAEH,MAAM,UAAU,0BAA0B,CAAC,KAAc;IACvD,MAAM,MAAM,GAAG,0BAA0B,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,sBAAsB,CAC9B,iCAAiC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,EACvD;YACE,IAAI,EAAE,6BAA6B;YACnC,QAAQ,EAAE,MAAM,CAAC,KAAK;SACvB,CACF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=decode-worker-binary-response.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode-worker-binary-response.test.d.ts","sourceRoot":"","sources":["../../../src/integrations/base/decode-worker-binary-response.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,81 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { RestApiValidationError } from "../../errors.js";
3
+ import { decodeWorkerBinaryResponse } from "./decode-worker-binary-response.js";
4
+ describe("decodeWorkerBinaryResponse", () => {
5
+ it("copies a Uint8Array into a plain Uint8Array with the same bytes", () => {
6
+ const source = new Uint8Array([1, 2, 255]);
7
+ const result = decodeWorkerBinaryResponse(source);
8
+ expect(result).toBeInstanceOf(Uint8Array);
9
+ expect(result.constructor).toBe(Uint8Array);
10
+ expect(Array.from(result)).toEqual([1, 2, 255]);
11
+ source[0] = 9;
12
+ expect(result[0]).toBe(1);
13
+ });
14
+ it("converts worker Buffer JSON into a plain Uint8Array", () => {
15
+ const result = decodeWorkerBinaryResponse({
16
+ type: "Buffer",
17
+ data: [37, 80, 68, 70],
18
+ });
19
+ expect(result.constructor).toBe(Uint8Array);
20
+ expect(Array.from(result)).toEqual([37, 80, 68, 70]);
21
+ });
22
+ it("converts empty Buffer JSON into a zero-length Uint8Array", () => {
23
+ const result = decodeWorkerBinaryResponse({ type: "Buffer", data: [] });
24
+ expect(result).toBeInstanceOf(Uint8Array);
25
+ expect(result.byteLength).toBe(0);
26
+ });
27
+ it("rejects a missing discriminant", () => {
28
+ expect(() => decodeWorkerBinaryResponse({ data: [1] })).toThrow(RestApiValidationError);
29
+ });
30
+ it("rejects a non-Buffer discriminant", () => {
31
+ expect(() => decodeWorkerBinaryResponse({ type: "Array", data: [1] })).toThrow(RestApiValidationError);
32
+ });
33
+ it("rejects a non-array data field", () => {
34
+ expect(() => decodeWorkerBinaryResponse({ type: "Buffer", data: "00ff" })).toThrow(RestApiValidationError);
35
+ });
36
+ it("rejects a byte outside 0 through 255", () => {
37
+ expect(() => decodeWorkerBinaryResponse({ type: "Buffer", data: [256] })).toThrow(RestApiValidationError);
38
+ });
39
+ it("rejects a negative byte", () => {
40
+ expect(() => decodeWorkerBinaryResponse({ type: "Buffer", data: [-1] })).toThrow(RestApiValidationError);
41
+ });
42
+ it("reports the index of a non-integer byte", () => {
43
+ try {
44
+ decodeWorkerBinaryResponse({ type: "Buffer", data: [1, 1.5] });
45
+ }
46
+ catch (error) {
47
+ expect(error).toBeInstanceOf(RestApiValidationError);
48
+ if (!(error instanceof RestApiValidationError)) {
49
+ throw error;
50
+ }
51
+ expect(error.details.zodError.issues).toEqual([
52
+ expect.objectContaining({ path: ["data", 1] }),
53
+ ]);
54
+ return;
55
+ }
56
+ throw new Error("Expected binary response validation to fail");
57
+ });
58
+ it("redacts malformed binary data from validation errors", () => {
59
+ const data = Array.from({ length: 4096 }, () => 0);
60
+ data[4095] = 256;
61
+ try {
62
+ decodeWorkerBinaryResponse({ type: "Buffer", data });
63
+ }
64
+ catch (error) {
65
+ expect(error).toBeInstanceOf(RestApiValidationError);
66
+ if (!(error instanceof RestApiValidationError)) {
67
+ throw error;
68
+ }
69
+ expect(error.details.data).toEqual({
70
+ dataType: "binary",
71
+ redacted: true,
72
+ });
73
+ return;
74
+ }
75
+ throw new Error("Expected malformed binary response to fail");
76
+ });
77
+ it("rejects a string payload", () => {
78
+ expect(() => decodeWorkerBinaryResponse("not-binary")).toThrow(RestApiValidationError);
79
+ });
80
+ });
81
+ //# sourceMappingURL=decode-worker-binary-response.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decode-worker-binary-response.test.js","sourceRoot":"","sources":["../../../src/integrations/base/decode-worker-binary-response.test.ts"],"names":[],"mappings":"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"}
@@ -5,5 +5,5 @@ export { RestApiClientBase } from "./rest-api-client-base.js";
5
5
  export { RestApiIntegrationClient } from "./rest-api-integration-client.js";
6
6
  export type { RestApiRequest } from "./rest-api-client-base.js";
7
7
  export { GraphQLIntegrationClient } from "./graphql-integration-client.js";
8
- export type { ApiRequestOptions, ApiRequestSchema, SupportsApiRequest, } from "./types.js";
8
+ export type { ApiRequestOptions, ApiRequestSchema, RestApiResponseType, SupportsApiRequest, } from "./types.js";
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/base/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/base/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,YAAY,EACV,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
@@ -1,12 +1,3 @@
1
- /**
2
- * Abstract base for REST API Integration clients.
3
- *
4
- * Owns the shared infrastructure that every REST-API-backed integration
5
- * needs: config storage, parameter helpers, body validation, request
6
- * construction, and query execution. Subclasses add their own
7
- * `apiRequest` with whatever response-handling strategy they need
8
- * (e.g. direct Zod validation, discriminated-union wrapping).
9
- */
10
1
  import type { PartialMessage } from "@bufbuild/protobuf";
11
2
  import { z } from "zod";
12
3
  import type { Property } from "@superblocksteam/types/dist/src/common/v1/plugin_pb";
@@ -15,13 +6,6 @@ import type { QueryExecutor, TraceMetadata } from "../registry.js";
15
6
  import type { IntegrationConfig, IntegrationClientImpl } from "../types.js";
16
7
  import type { ApiRequestOptions } from "./types.js";
17
8
  export type RestApiRequest = PartialMessage<RestApiIntegrationPlugin>;
18
- /**
19
- * Shared base for all REST API Integration clients.
20
- *
21
- * Provides config fields, parameter helpers, body validation, request
22
- * building, and query execution. Does NOT define `apiRequest` — each
23
- * concrete subclass supplies its own return-type contract.
24
- */
25
9
  export declare abstract class RestApiClientBase implements IntegrationClientImpl {
26
10
  readonly name: string;
27
11
  readonly pluginId: string;
@@ -32,17 +16,6 @@ export declare abstract class RestApiClientBase implements IntegrationClientImpl
32
16
  * Create a Property object for query params / headers.
33
17
  */
34
18
  protected createParam(key: string, value: unknown): PartialMessage<Property>;
35
- /**
36
- * Validate the request body, build the proto request, and execute it.
37
- *
38
- * Returns the raw (unvalidated) response from the orchestrator.
39
- * Subclasses call this, then apply their own response handling.
40
- *
41
- * @param options - HTTP method, path, body, params, headers
42
- * @param bodySchema - Optional Zod schema for body validation
43
- * @param metadata - Optional trace metadata for observability
44
- * @returns Raw response from the orchestrator
45
- */
46
19
  protected executeApiRequest<TBody>(options: ApiRequestOptions<TBody>, bodySchema?: z.ZodSchema<TBody>, metadata?: TraceMetadata): Promise<unknown>;
47
20
  }
48
21
  //# sourceMappingURL=rest-api-client-base.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rest-api-client-base.d.ts","sourceRoot":"","sources":["../../../src/integrations/base/rest-api-client-base.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qDAAqD,CAAC;AACpF,OAAO,KAAK,EAAE,MAAM,IAAI,wBAAwB,EAAE,MAAM,yEAAyE,CAAC;AAGlI,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,wBAAwB,CAAC,CAAC;AAEtE;;;;;;GAMG;AACH,8BAAsB,iBAAkB,YAAW,qBAAqB;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAEnC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC;gBAEnC,MAAM,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa;IAOlE;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC;IAO5E;;;;;;;;;;OAUG;cACa,iBAAiB,CAAC,KAAK,EACrC,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,EACjC,UAAU,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,EAC/B,QAAQ,CAAC,EAAE,aAAa,GACvB,OAAO,CAAC,OAAO,CAAC;CAgEpB"}
1
+ {"version":3,"file":"rest-api-client-base.d.ts","sourceRoot":"","sources":["../../../src/integrations/base/rest-api-client-base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,qDAAqD,CAAC;AACpF,OAAO,KAAK,EAAE,MAAM,IAAI,wBAAwB,EAAE,MAAM,yEAAyE,CAAC;AAGlI,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAG5E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,MAAM,cAAc,GAAG,cAAc,CAAC,wBAAwB,CAAC,CAAC;AAEtE,8BAAsB,iBAAkB,YAAW,qBAAqB;IACtE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;IAEnC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,aAAa,CAAC;gBAEnC,MAAM,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa;IAOlE;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC;cAO5D,iBAAiB,CAAC,KAAK,EACrC,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,EACjC,UAAU,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,EAC/B,QAAQ,CAAC,EAAE,aAAa,GACvB,OAAO,CAAC,OAAO,CAAC;CAsFpB"}
@@ -1,21 +1,7 @@
1
- /**
2
- * Abstract base for REST API Integration clients.
3
- *
4
- * Owns the shared infrastructure that every REST-API-backed integration
5
- * needs: config storage, parameter helpers, body validation, request
6
- * construction, and query execution. Subclasses add their own
7
- * `apiRequest` with whatever response-handling strategy they need
8
- * (e.g. direct Zod validation, discriminated-union wrapping).
9
- */
10
1
  import { z } from "zod";
11
2
  import { RestApiValidationError } from "../../errors.js";
12
- /**
13
- * Shared base for all REST API Integration clients.
14
- *
15
- * Provides config fields, parameter helpers, body validation, request
16
- * building, and query execution. Does NOT define `apiRequest` — each
17
- * concrete subclass supplies its own return-type contract.
18
- */
3
+ import { decodeWorkerBinaryResponse } from "./decode-worker-binary-response.js";
4
+ import { REST_API_RESPONSE_TYPES } from "./types.js";
19
5
  export class RestApiClientBase {
20
6
  name;
21
7
  pluginId;
@@ -36,19 +22,7 @@ export class RestApiClientBase {
36
22
  value: typeof value === "string" ? value : JSON.stringify(value),
37
23
  };
38
24
  }
39
- /**
40
- * Validate the request body, build the proto request, and execute it.
41
- *
42
- * Returns the raw (unvalidated) response from the orchestrator.
43
- * Subclasses call this, then apply their own response handling.
44
- *
45
- * @param options - HTTP method, path, body, params, headers
46
- * @param bodySchema - Optional Zod schema for body validation
47
- * @param metadata - Optional trace metadata for observability
48
- * @returns Raw response from the orchestrator
49
- */
50
25
  async executeApiRequest(options, bodySchema, metadata) {
51
- // Validate request body if both body and schema are present.
52
26
  if (options.body !== undefined && bodySchema) {
53
27
  const bodyParseResult = bodySchema.safeParse(options.body);
54
28
  if (!bodyParseResult.success) {
@@ -70,29 +44,52 @@ export class RestApiClientBase {
70
44
  params.push(this.createParam(key, value));
71
45
  }
72
46
  }
47
+ const responseTypeResult = z
48
+ .enum(REST_API_RESPONSE_TYPES)
49
+ .safeParse(options.responseType ?? "json");
50
+ if (!responseTypeResult.success) {
51
+ throw new RestApiValidationError(`Unsupported responseType ${JSON.stringify(options.responseType)} - expected one of: ${REST_API_RESPONSE_TYPES.join(", ")}`, {
52
+ zodError: responseTypeResult.error,
53
+ data: options.responseType,
54
+ });
55
+ }
56
+ const responseType = responseTypeResult.data;
73
57
  const request = {
74
58
  openApiAction: "genericHttpRequest",
75
59
  httpMethod: options.method.toUpperCase(),
76
60
  urlPath: options.path,
77
61
  headers,
78
62
  params,
79
- responseType: "json",
63
+ responseType,
80
64
  };
81
65
  if (options.body !== undefined) {
82
66
  request.body = JSON.stringify(options.body);
83
67
  request.bodyType = "jsonBody";
84
68
  }
85
- const result = await this.executeQuery(request, undefined, metadata);
69
+ const result = await this.executeQuery({ ...request }, undefined, metadata);
86
70
  if (result === null || result === undefined) {
87
- const nonNullResult = z.object({}).safeParse(result);
88
- if (!nonNullResult.success) {
89
- throw new RestApiValidationError(`Integration query returned ${String(result)} — expected a JSON response object`, {
90
- zodError: nonNullResult.error,
91
- data: result,
92
- });
71
+ throw new RestApiValidationError(`Integration query returned ${String(result)} for responseType "${responseType}" - expected a response value`, {
72
+ zodError: new z.ZodError([
73
+ {
74
+ code: z.ZodIssueCode.custom,
75
+ message: "response value is required",
76
+ path: [],
77
+ },
78
+ ]),
79
+ data: result,
80
+ });
81
+ }
82
+ switch (responseType) {
83
+ case "binary":
84
+ return decodeWorkerBinaryResponse(result);
85
+ case "json":
86
+ case "text":
87
+ return result;
88
+ default: {
89
+ const _exhaustive = responseType;
90
+ return _exhaustive;
93
91
  }
94
92
  }
95
- return result;
96
93
  }
97
94
  }
98
95
  //# sourceMappingURL=rest-api-client-base.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rest-api-client-base.js","sourceRoot":"","sources":["../../../src/integrations/base/rest-api-client-base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rest-api-client-base.js","sourceRoot":"","sources":["../../../src/integrations/base/rest-api-client-base.ts"],"names":[],"mappings":"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"}
@@ -1,24 +1,18 @@
1
- /**
2
- * Generic REST API Integration client with Zod response validation.
3
- *
4
- * Extends RestApiClientBase with an apiRequest() that validates the
5
- * full response against a caller-supplied Zod schema and throws
6
- * RestApiValidationError on mismatch.
7
- */
8
- import type { z } from "zod";
1
+ import { z } from "zod";
9
2
  import type { TraceMetadata } from "../registry.js";
10
3
  import { RestApiClientBase } from "./rest-api-client-base.js";
11
- import type { ApiRequestOptions, ApiRequestSchema, SupportsApiRequest } from "./types.js";
12
- /**
13
- * Base implementation for REST API Integration clients.
14
- *
15
- * All OpenAPI-based integration clients (except those with
16
- * integration-specific response handling) extend this class to
17
- * inherit the generic apiRequest() method with runtime Zod validation.
18
- */
4
+ import type { ApiRequestOptions, ApiRequestSchema, RestApiResponseType, SupportsApiRequest } from "./types.js";
19
5
  export declare abstract class RestApiIntegrationClient extends RestApiClientBase implements SupportsApiRequest {
20
- apiRequest<TBody, TResponse>(options: ApiRequestOptions<TBody>, schema: ApiRequestSchema<TBody, TResponse> & {
6
+ apiRequest<TBody, TResponse>(options: ApiRequestOptions<TBody> & {
7
+ responseType?: Exclude<RestApiResponseType, "binary">;
8
+ }, schema: ApiRequestSchema<TBody, TResponse> & {
21
9
  response: z.ZodSchema<TResponse>;
22
10
  }, metadata?: TraceMetadata): Promise<TResponse>;
11
+ apiRequest<TBody>(options: ApiRequestOptions<TBody> & {
12
+ responseType: "binary";
13
+ }, schema?: ApiRequestSchema<TBody, Uint8Array>, metadata?: TraceMetadata): Promise<Uint8Array>;
14
+ apiRequest<TBody>(options: ApiRequestOptions<TBody> & {
15
+ responseType: "text";
16
+ }, schema?: ApiRequestSchema<TBody, unknown>, metadata?: TraceMetadata): Promise<unknown>;
23
17
  }
24
18
  //# sourceMappingURL=rest-api-integration-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rest-api-integration-client.d.ts","sourceRoot":"","sources":["../../../src/integrations/base/rest-api-integration-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAG7B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,8BAAsB,wBACpB,SAAQ,iBACR,YAAW,kBAAkB;IAEvB,UAAU,CAAC,KAAK,EAAE,SAAS,EAC/B,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,EACjC,MAAM,EAAE,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG;QAC3C,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;KAClC,EACD,QAAQ,CAAC,EAAE,aAAa,GACvB,OAAO,CAAC,SAAS,CAAC;CAkBtB"}
1
+ {"version":3,"file":"rest-api-integration-client.d.ts","sourceRoot":"","sources":["../../../src/integrations/base/rest-api-integration-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,8BAAsB,wBACpB,SAAQ,iBACR,YAAW,kBAAkB;IAEvB,UAAU,CAAC,KAAK,EAAE,SAAS,EAC/B,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG;QAClC,YAAY,CAAC,EAAE,OAAO,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;KACvD,EACD,MAAM,EAAE,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,GAAG;QAC3C,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;KAClC,EACD,QAAQ,CAAC,EAAE,aAAa,GACvB,OAAO,CAAC,SAAS,CAAC;IACf,UAAU,CAAC,KAAK,EACpB,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG;QAClC,YAAY,EAAE,QAAQ,CAAC;KACxB,EACD,MAAM,CAAC,EAAE,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,EAC5C,QAAQ,CAAC,EAAE,aAAa,GACvB,OAAO,CAAC,UAAU,CAAC;IAChB,UAAU,CAAC,KAAK,EACpB,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG;QAClC,YAAY,EAAE,MAAM,CAAC;KACtB,EACD,MAAM,CAAC,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,EACzC,QAAQ,CAAC,EAAE,aAAa,GACvB,OAAO,CAAC,OAAO,CAAC;CA8CpB"}
@@ -1,28 +1,29 @@
1
- /**
2
- * Generic REST API Integration client with Zod response validation.
3
- *
4
- * Extends RestApiClientBase with an apiRequest() that validates the
5
- * full response against a caller-supplied Zod schema and throws
6
- * RestApiValidationError on mismatch.
7
- */
1
+ import { z } from "zod";
8
2
  import { RestApiValidationError } from "../../errors.js";
9
3
  import { RestApiClientBase } from "./rest-api-client-base.js";
10
- /**
11
- * Base implementation for REST API Integration clients.
12
- *
13
- * All OpenAPI-based integration clients (except those with
14
- * integration-specific response handling) extend this class to
15
- * inherit the generic apiRequest() method with runtime Zod validation.
16
- */
17
4
  export class RestApiIntegrationClient extends RestApiClientBase {
18
5
  async apiRequest(options, schema, metadata) {
19
- const result = await this.executeApiRequest(options, schema.body, metadata);
20
- // Response schema is REQUIRED - always validate
6
+ if ((options.responseType ?? "json") === "json" && !schema?.response) {
7
+ throw new RestApiValidationError('apiRequest() with responseType "json" requires a response schema. Provide one, or set responseType to "text" or "binary"', {
8
+ zodError: new z.ZodError([
9
+ {
10
+ code: z.ZodIssueCode.custom,
11
+ message: "response schema is required for JSON responses",
12
+ path: ["response"],
13
+ },
14
+ ]),
15
+ data: undefined,
16
+ });
17
+ }
18
+ const result = await this.executeApiRequest(options, schema?.body, metadata);
19
+ if (!schema?.response) {
20
+ return result;
21
+ }
21
22
  const responseParseResult = schema.response.safeParse(result);
22
23
  if (!responseParseResult.success) {
23
24
  throw new RestApiValidationError(`Response validation failed: ${responseParseResult.error.message}`, {
24
- zodError: responseParseResult.error,
25
25
  data: result,
26
+ zodError: responseParseResult.error,
26
27
  });
27
28
  }
28
29
  return responseParseResult.data;
@@ -1 +1 @@
1
- {"version":3,"file":"rest-api-integration-client.js","sourceRoot":"","sources":["../../../src/integrations/base/rest-api-integration-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAO9D;;;;;;GAMG;AACH,MAAM,OAAgB,wBACpB,SAAQ,iBAAiB;IAGzB,KAAK,CAAC,UAAU,CACd,OAAiC,EACjC,MAEC,EACD,QAAwB;QAExB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAE5E,gDAAgD;QAChD,MAAM,mBAAmB,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAE9D,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,sBAAsB,CAC9B,+BAA+B,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE,EAClE;gBACE,QAAQ,EAAE,mBAAmB,CAAC,KAAK;gBACnC,IAAI,EAAE,MAAM;aACb,CACF,CAAC;QACJ,CAAC;QAED,OAAO,mBAAmB,CAAC,IAAI,CAAC;IAClC,CAAC;CACF"}
1
+ {"version":3,"file":"rest-api-integration-client.js","sourceRoot":"","sources":["../../../src/integrations/base/rest-api-integration-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAQ9D,MAAM,OAAgB,wBACpB,SAAQ,iBAAiB;IA0BzB,KAAK,CAAC,UAAU,CACd,OAAiC,EACjC,MAA2C,EAC3C,QAAwB;QAExB,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,MAAM,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;YACrE,MAAM,IAAI,sBAAsB,CAC9B,0HAA0H,EAC1H;gBACE,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC;oBACvB;wBACE,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;wBAC3B,OAAO,EAAE,gDAAgD;wBACzD,IAAI,EAAE,CAAC,UAAU,CAAC;qBACnB;iBACF,CAAC;gBACF,IAAI,EAAE,SAAS;aAChB,CACF,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CACzC,OAAO,EACP,MAAM,EAAE,IAAI,EACZ,QAAQ,CACT,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;YACtB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,mBAAmB,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAE9D,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;YACjC,MAAM,IAAI,sBAAsB,CAC9B,+BAA+B,mBAAmB,CAAC,KAAK,CAAC,OAAO,EAAE,EAClE;gBACE,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,mBAAmB,CAAC,KAAK;aACpC,CACF,CAAC;QACJ,CAAC;QAED,OAAO,mBAAmB,CAAC,IAAI,CAAC;IAClC,CAAC;CACF"}