@superblocksteam/sdk-api 2.0.156 → 2.0.157-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) 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/rest-api-client-base.d.ts +0 -27
  14. package/dist/integrations/base/rest-api-client-base.d.ts.map +1 -1
  15. package/dist/integrations/base/rest-api-client-base.js +23 -46
  16. package/dist/integrations/base/rest-api-client-base.js.map +1 -1
  17. package/dist/integrations/base/rest-api-integration-client.d.ts +7 -19
  18. package/dist/integrations/base/rest-api-integration-client.d.ts.map +1 -1
  19. package/dist/integrations/base/rest-api-integration-client.js +2 -29
  20. package/dist/integrations/base/rest-api-integration-client.js.map +1 -1
  21. package/dist/integrations/base/types.d.ts +36 -43
  22. package/dist/integrations/base/types.d.ts.map +1 -1
  23. package/dist/integrations/base/types.js +1 -26
  24. package/dist/integrations/base/types.js.map +1 -1
  25. package/dist/integrations/documentation-resolver.test.js +11 -5
  26. package/dist/integrations/documentation-resolver.test.js.map +1 -1
  27. package/dist/integrations/restapiintegration/client.test.d.ts +0 -10
  28. package/dist/integrations/restapiintegration/client.test.d.ts.map +1 -1
  29. package/dist/integrations/restapiintegration/client.test.js +146 -69
  30. package/dist/integrations/restapiintegration/client.test.js.map +1 -1
  31. package/dist/integrations/slack/client.test.js +26 -1
  32. package/dist/integrations/slack/client.test.js.map +1 -1
  33. package/package.json +2 -2
  34. package/src/errors.ts +33 -5
  35. package/src/integrations/anthropic/README.md +7 -0
  36. package/src/integrations/base/decode-worker-binary-response.test.ts +107 -0
  37. package/src/integrations/base/decode-worker-binary-response.ts +62 -0
  38. package/src/integrations/base/rest-api-client-base.ts +28 -56
  39. package/src/integrations/base/rest-api-integration-client.ts +14 -33
  40. package/src/integrations/base/types.ts +41 -45
  41. package/src/integrations/bigquery/README.md +1 -0
  42. package/src/integrations/box/README.md +3 -0
  43. package/src/integrations/cohere/README.md +7 -0
  44. package/src/integrations/documentation-resolver.test.ts +13 -6
  45. package/src/integrations/fireworks/README.md +7 -0
  46. package/src/integrations/gemini/README.md +8 -0
  47. package/src/integrations/groq/README.md +7 -0
  48. package/src/integrations/mistral/README.md +7 -0
  49. package/src/integrations/openai_v2/README.md +7 -0
  50. package/src/integrations/perplexity/README.md +7 -0
  51. package/src/integrations/restapiintegration/client.test.ts +207 -86
  52. package/src/integrations/restapiintegration/docs.manifest.json +5 -1
  53. package/src/integrations/restapiintegration/overlays/response-types-binary.md +51 -0
  54. package/src/integrations/s3/README.md +1 -0
  55. package/src/integrations/slack/client.test.ts +36 -1
  56. package/src/integrations/snowflakecortex/README.md +8 -0
  57. package/src/integrations/stabilityai/README.md +7 -0
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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"}
@@ -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 - Request configuration (see {@link ApiRequestOptions})
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;AAE5E,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;CAuFpB"}
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,22 +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";
3
+ import { decodeWorkerBinaryResponse } from "./decode-worker-binary-response.js";
12
4
  import { REST_API_RESPONSE_TYPES } from "./types.js";
13
- /**
14
- * Shared base for all REST API Integration clients.
15
- *
16
- * Provides config fields, parameter helpers, body validation, request
17
- * building, and query execution. Does NOT define `apiRequest` — each
18
- * concrete subclass supplies its own return-type contract.
19
- */
20
5
  export class RestApiClientBase {
21
6
  name;
22
7
  pluginId;
@@ -37,19 +22,7 @@ export class RestApiClientBase {
37
22
  value: typeof value === "string" ? value : JSON.stringify(value),
38
23
  };
39
24
  }
40
- /**
41
- * Validate the request body, build the proto request, and execute it.
42
- *
43
- * Returns the raw (unvalidated) response from the orchestrator.
44
- * Subclasses call this, then apply their own response handling.
45
- *
46
- * @param options - Request configuration (see {@link ApiRequestOptions})
47
- * @param bodySchema - Optional Zod schema for body validation
48
- * @param metadata - Optional trace metadata for observability
49
- * @returns Raw response from the orchestrator
50
- */
51
25
  async executeApiRequest(options, bodySchema, metadata) {
52
- // Validate request body if both body and schema are present.
53
26
  if (options.body !== undefined && bodySchema) {
54
27
  const bodyParseResult = bodySchema.safeParse(options.body);
55
28
  if (!bodyParseResult.success) {
@@ -71,15 +44,11 @@ export class RestApiClientBase {
71
44
  params.push(this.createParam(key, value));
72
45
  }
73
46
  }
74
- // The RestApiResponseType union is erased in the bundled JS user APIs
75
- // run as, so values outside it (including wire values the orchestrator
76
- // implements but the SDK deliberately does not expose, like "auto")
77
- // must also be rejected at runtime, before the request is issued.
78
47
  const responseTypeResult = z
79
48
  .enum(REST_API_RESPONSE_TYPES)
80
49
  .safeParse(options.responseType ?? "json");
81
50
  if (!responseTypeResult.success) {
82
- throw new RestApiValidationError(`Unsupported responseType ${JSON.stringify(options.responseType)} expected one of: ${REST_API_RESPONSE_TYPES.join(", ")}`, {
51
+ throw new RestApiValidationError(`Unsupported responseType ${JSON.stringify(options.responseType)} - expected one of: ${REST_API_RESPONSE_TYPES.join(", ")}`, {
83
52
  zodError: responseTypeResult.error,
84
53
  data: options.responseType,
85
54
  });
@@ -97,22 +66,30 @@ export class RestApiClientBase {
97
66
  request.body = JSON.stringify(options.body);
98
67
  request.bodyType = "jsonBody";
99
68
  }
100
- const result = await this.executeQuery(request, undefined, metadata);
101
- // Neither `null` nor `undefined` is a legitimate decode result for the
102
- // exposed response types: JSON parses to a value the schema sees, and
103
- // an empty text body decodes to "". Either value only arises from a
104
- // broken execution contract, so both throw. (If "auto" is ever exposed,
105
- // `null` becomes legitimate — it parses a literal `null` JSON body.)
69
+ const result = await this.executeQuery({ ...request }, undefined, metadata);
106
70
  if (result === null || result === undefined) {
107
- const nonNullResult = z.object({}).safeParse(result);
108
- if (!nonNullResult.success) {
109
- throw new RestApiValidationError(`Integration query returned ${String(result)} for responseType "${responseType}" — expected a response value`, {
110
- zodError: nonNullResult.error,
111
- data: result,
112
- });
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;
113
91
  }
114
92
  }
115
- return result;
116
93
  }
117
94
  }
118
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":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAKrD;;;;;;GAMG;AACH,MAAM,OAAgB,iBAAiB;IAC5B,IAAI,CAAS;IACb,QAAQ,CAAS;IACjB,MAAM,CAAoB;IAEhB,YAAY,CAAgB;IAE/C,YAAY,MAAyB,EAAE,YAA2B;QAChE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;IAED;;OAEG;IACO,WAAW,CAAC,GAAW,EAAE,KAAc;QAC/C,OAAO;YACL,GAAG;YACH,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SACjE,CAAC;IACJ,CAAC;IAED;;;;;;;;;;OAUG;IACO,KAAK,CAAC,iBAAiB,CAC/B,OAAiC,EACjC,UAA+B,EAC/B,QAAwB;QAExB,6DAA6D;QAC7D,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,UAAU,EAAE,CAAC;YAC7C,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3D,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;gBAC7B,MAAM,IAAI,sBAAsB,CAC9B,mCAAmC,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,EAClE;oBACE,QAAQ,EAAE,eAAe,CAAC,KAAK;oBAC/B,IAAI,EAAE,OAAO,CAAC,IAAI;iBACnB,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAA+B,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAA+B,EAAE,CAAC;QAC9C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,sEAAsE;QACtE,uEAAuE;QACvE,oEAAoE;QACpE,kEAAkE;QAClE,MAAM,kBAAkB,GAAG,CAAC;aACzB,IAAI,CAAC,uBAAuB,CAAC;aAC7B,SAAS,CAAC,OAAO,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,IAAI,sBAAsB,CAC9B,4BAA4B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,CAAC,uBAAuB,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAC3H;gBACE,QAAQ,EAAE,kBAAkB,CAAC,KAAK;gBAClC,IAAI,EAAE,OAAO,CAAC,YAAY;aAC3B,CACF,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC;QAE7C,MAAM,OAAO,GAAmB;YAC9B,aAAa,EAAE,oBAAoB;YACnC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE;YACxC,OAAO,EAAE,OAAO,CAAC,IAAI;YACrB,OAAO;YACP,MAAM;YACN,YAAY;SACb,CAAC;QAEF,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5C,OAAO,CAAC,QAAQ,GAAG,UAAU,CAAC;QAChC,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CACpC,OAAkC,EAClC,SAAS,EACT,QAAQ,CACT,CAAC;QAEF,uEAAuE;QACvE,sEAAsE;QACtE,oEAAoE;QACpE,wEAAwE;QACxE,qEAAqE;QACrE,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;gBAC3B,MAAM,IAAI,sBAAsB,CAC9B,8BAA8B,MAAM,CAAC,MAAM,CAAC,sBAAsB,YAAY,+BAA+B,EAC7G;oBACE,QAAQ,EAAE,aAAa,CAAC,KAAK;oBAC7B,IAAI,EAAE,MAAM;iBACb,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
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,30 +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. When no response schema is
7
- * provided, the raw result is returned without validation — useful for
8
- * non-JSON responses (e.g. XML), which can alternatively be validated
9
- * with a schema matching the decoded value (e.g. z.string()).
10
- */
11
1
  import { z } from "zod";
12
2
  import type { TraceMetadata } from "../registry.js";
13
3
  import { RestApiClientBase } from "./rest-api-client-base.js";
14
4
  import type { ApiRequestOptions, ApiRequestSchema, RestApiResponseType, SupportsApiRequest } from "./types.js";
15
- /**
16
- * Base implementation for REST API Integration clients.
17
- *
18
- * All OpenAPI-based integration clients (except those with
19
- * integration-specific response handling) extend this class to
20
- * inherit the generic apiRequest() method with runtime Zod validation.
21
- */
22
5
  export declare abstract class RestApiIntegrationClient extends RestApiClientBase implements SupportsApiRequest {
23
- 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> & {
24
9
  response: z.ZodSchema<TResponse>;
25
10
  }, metadata?: TraceMetadata): Promise<TResponse>;
26
11
  apiRequest<TBody>(options: ApiRequestOptions<TBody> & {
27
- responseType: Exclude<RestApiResponseType, "json">;
12
+ responseType: "binary";
13
+ }, schema?: ApiRequestSchema<TBody, Uint8Array>, metadata?: TraceMetadata): Promise<Uint8Array>;
14
+ apiRequest<TBody>(options: ApiRequestOptions<TBody> & {
15
+ responseType: "text";
28
16
  }, schema?: ApiRequestSchema<TBody, unknown>, metadata?: TraceMetadata): Promise<unknown>;
29
17
  }
30
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;;;;;;;;;GASG;AAEH,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;;;;;;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;IACf,UAAU,CAAC,KAAK,EACpB,OAAO,EAAE,iBAAiB,CAAC,KAAK,CAAC,GAAG;QAClC,YAAY,EAAE,OAAO,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;KACpD,EACD,MAAM,CAAC,EAAE,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,EACzC,QAAQ,CAAC,EAAE,aAAa,GACvB,OAAO,CAAC,OAAO,CAAC;CAwDpB"}
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,30 +1,10 @@
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. When no response schema is
7
- * provided, the raw result is returned without validation — useful for
8
- * non-JSON responses (e.g. XML), which can alternatively be validated
9
- * with a schema matching the decoded value (e.g. z.string()).
10
- */
11
1
  import { z } from "zod";
12
2
  import { RestApiValidationError } from "../../errors.js";
13
3
  import { RestApiClientBase } from "./rest-api-client-base.js";
14
- /**
15
- * Base implementation for REST API Integration clients.
16
- *
17
- * All OpenAPI-based integration clients (except those with
18
- * integration-specific response handling) extend this class to
19
- * inherit the generic apiRequest() method with runtime Zod validation.
20
- */
21
4
  export class RestApiIntegrationClient extends RestApiClientBase {
22
5
  async apiRequest(options, schema, metadata) {
23
- // The overloads make schema-less JSON unrepresentable in TypeScript,
24
- // but user API code executes as bundled JS with no type enforcement —
25
- // enforce the same contract at runtime, before issuing the request.
26
6
  if ((options.responseType ?? "json") === "json" && !schema?.response) {
27
- throw new RestApiValidationError('apiRequest() with responseType "json" requires a response schema provide one, or set responseType: "text" to receive a non-JSON payload unvalidated', {
7
+ throw new RestApiValidationError('apiRequest() with responseType "json" requires a response schema. Provide one, or set responseType to "text" or "binary"', {
28
8
  zodError: new z.ZodError([
29
9
  {
30
10
  code: z.ZodIssueCode.custom,
@@ -36,21 +16,14 @@ export class RestApiIntegrationClient extends RestApiClientBase {
36
16
  });
37
17
  }
38
18
  const result = await this.executeApiRequest(options, schema?.body, metadata);
39
- // Without a response schema the raw result is returned as-is (typed
40
- // unknown). Non-JSON responses (e.g. responseType "text" returning
41
- // XML) can either omit the schema or pass one matching the decoded
42
- // value, such as z.string(). Request-body validation is opt-in:
43
- // executeApiRequest only validates options.body when schema.body is
44
- // provided (unchanged from the previous contract, where schema.body
45
- // was already optional).
46
19
  if (!schema?.response) {
47
20
  return result;
48
21
  }
49
22
  const responseParseResult = schema.response.safeParse(result);
50
23
  if (!responseParseResult.success) {
51
24
  throw new RestApiValidationError(`Response validation failed: ${responseParseResult.error.message}`, {
52
- zodError: responseParseResult.error,
53
25
  data: result,
26
+ zodError: responseParseResult.error,
54
27
  });
55
28
  }
56
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;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAQ9D;;;;;;GAMG;AACH,MAAM,OAAgB,wBACpB,SAAQ,iBAAiB;IAiBzB,KAAK,CAAC,UAAU,CACd,OAAiC,EACjC,MAA2C,EAC3C,QAAwB;QAExB,qEAAqE;QACrE,sEAAsE;QACtE,oEAAoE;QACpE,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,MAAM,CAAC,KAAK,MAAM,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;YACrE,MAAM,IAAI,sBAAsB,CAC9B,uJAAuJ,EACvJ;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,oEAAoE;QACpE,mEAAmE;QACnE,mEAAmE;QACnE,gEAAgE;QAChE,oEAAoE;QACpE,oEAAoE;QACpE,yBAAyB;QACzB,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,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"}