@airweave/sdk 0.3.46 → 0.3.47

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 (52) hide show
  1. package/dist/cjs/Client.js +2 -2
  2. package/dist/cjs/api/resources/whiteLabels/client/Client.d.ts +4 -4
  3. package/dist/cjs/api/resources/whiteLabels/client/Client.js +5 -5
  4. package/dist/cjs/api/resources/whiteLabels/client/requests/{BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodePost.d.ts → BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions.d.ts} +1 -1
  5. package/dist/cjs/api/resources/whiteLabels/client/requests/index.d.ts +1 -1
  6. package/dist/cjs/core/fetcher/BinaryResponse.d.ts +7 -4
  7. package/dist/cjs/core/fetcher/BinaryResponse.js +5 -2
  8. package/dist/cjs/core/fetcher/Fetcher.js +3 -3
  9. package/dist/cjs/core/fetcher/getErrorResponseBody.d.ts +1 -0
  10. package/dist/cjs/core/fetcher/getErrorResponseBody.js +44 -0
  11. package/dist/cjs/core/fetcher/getFetchFn.d.ts +1 -4
  12. package/dist/cjs/core/fetcher/getFetchFn.js +1 -52
  13. package/dist/cjs/core/fetcher/getResponseBody.js +3 -3
  14. package/dist/cjs/core/url/join.js +23 -3
  15. package/dist/cjs/version.d.ts +1 -1
  16. package/dist/cjs/version.js +1 -1
  17. package/dist/esm/Client.mjs +2 -2
  18. package/dist/esm/api/resources/whiteLabels/client/Client.d.mts +4 -4
  19. package/dist/esm/api/resources/whiteLabels/client/Client.mjs +5 -5
  20. package/dist/esm/api/resources/whiteLabels/client/requests/{BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodePost.d.mts → BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions.d.mts} +1 -1
  21. package/dist/esm/api/resources/whiteLabels/client/requests/index.d.mts +1 -1
  22. package/dist/esm/core/fetcher/BinaryResponse.d.mts +7 -4
  23. package/dist/esm/core/fetcher/BinaryResponse.mjs +5 -2
  24. package/dist/esm/core/fetcher/Fetcher.mjs +3 -3
  25. package/dist/esm/core/fetcher/getErrorResponseBody.d.mts +1 -0
  26. package/dist/esm/core/fetcher/getErrorResponseBody.mjs +41 -0
  27. package/dist/esm/core/fetcher/getFetchFn.d.mts +1 -4
  28. package/dist/esm/core/fetcher/getFetchFn.mjs +1 -19
  29. package/dist/esm/core/fetcher/getResponseBody.mjs +3 -3
  30. package/dist/esm/core/url/join.mjs +23 -3
  31. package/dist/esm/version.d.mts +1 -1
  32. package/dist/esm/version.mjs +1 -1
  33. package/package.json +14 -16
  34. package/reference.md +3 -3
  35. package/dist/cjs/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.d.ts +0 -30
  36. package/dist/cjs/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.js +0 -247
  37. package/dist/cjs/core/fetcher/stream-wrappers/NodePre18StreamWrapper.d.ts +0 -21
  38. package/dist/cjs/core/fetcher/stream-wrappers/NodePre18StreamWrapper.js +0 -126
  39. package/dist/cjs/core/fetcher/stream-wrappers/UndiciStreamWrapper.d.ts +0 -31
  40. package/dist/cjs/core/fetcher/stream-wrappers/UndiciStreamWrapper.js +0 -229
  41. package/dist/cjs/core/fetcher/stream-wrappers/chooseStreamWrapper.d.ts +0 -18
  42. package/dist/cjs/core/fetcher/stream-wrappers/chooseStreamWrapper.js +0 -59
  43. package/dist/esm/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.d.mts +0 -30
  44. package/dist/esm/core/fetcher/stream-wrappers/Node18UniversalStreamWrapper.mjs +0 -243
  45. package/dist/esm/core/fetcher/stream-wrappers/NodePre18StreamWrapper.d.mts +0 -21
  46. package/dist/esm/core/fetcher/stream-wrappers/NodePre18StreamWrapper.mjs +0 -122
  47. package/dist/esm/core/fetcher/stream-wrappers/UndiciStreamWrapper.d.mts +0 -31
  48. package/dist/esm/core/fetcher/stream-wrappers/UndiciStreamWrapper.mjs +0 -225
  49. package/dist/esm/core/fetcher/stream-wrappers/chooseStreamWrapper.d.mts +0 -18
  50. package/dist/esm/core/fetcher/stream-wrappers/chooseStreamWrapper.mjs +0 -23
  51. /package/dist/cjs/api/resources/whiteLabels/client/requests/{BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodePost.js → BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions.js} +0 -0
  52. /package/dist/esm/api/resources/whiteLabels/client/requests/{BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodePost.mjs → BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions.mjs} +0 -0
@@ -50,8 +50,8 @@ class AirweaveSDKClient {
50
50
  "X-Organization-ID": _options === null || _options === void 0 ? void 0 : _options.organizationId,
51
51
  "X-Fern-Language": "JavaScript",
52
52
  "X-Fern-SDK-Name": "@airweave/sdk",
53
- "X-Fern-SDK-Version": "v0.3.46",
54
- "User-Agent": "@airweave/sdk/v0.3.46",
53
+ "X-Fern-SDK-Version": "v0.3.47",
54
+ "User-Agent": "@airweave/sdk/v0.3.47",
55
55
  "X-Fern-Runtime": core.RUNTIME.type,
56
56
  "X-Fern-Runtime-Version": core.RUNTIME.version,
57
57
  }, _options === null || _options === void 0 ? void 0 : _options.headers) });
@@ -178,16 +178,16 @@ export declare class WhiteLabels {
178
178
  * tracking and branding purposes.
179
179
  *
180
180
  * @param {string} whiteLabelId - The unique identifier of the white label integration
181
- * @param {AirweaveSDK.BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodePost} request
181
+ * @param {AirweaveSDK.BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions} request
182
182
  * @param {WhiteLabels.RequestOptions} requestOptions - Request-specific configuration.
183
183
  *
184
184
  * @throws {@link AirweaveSDK.UnprocessableEntityError}
185
185
  *
186
186
  * @example
187
- * await client.whiteLabels.exchangeWhiteLabelOauth2Code("white_label_id", {
187
+ * await client.whiteLabels.exchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions("white_label_id", {
188
188
  * code: "4/P7q7W91a-oMsCeLvIaQm6bTrgtp7"
189
189
  * })
190
190
  */
191
- exchangeWhiteLabelOauth2Code(whiteLabelId: string, request: AirweaveSDK.BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodePost, requestOptions?: WhiteLabels.RequestOptions): core.HttpResponsePromise<AirweaveSDK.SourceConnection>;
192
- private __exchangeWhiteLabelOauth2Code;
191
+ exchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions(whiteLabelId: string, request: AirweaveSDK.BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions, requestOptions?: WhiteLabels.RequestOptions): core.HttpResponsePromise<AirweaveSDK.SourceConnection>;
192
+ private __exchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions;
193
193
  }
@@ -537,20 +537,20 @@ class WhiteLabels {
537
537
  * tracking and branding purposes.
538
538
  *
539
539
  * @param {string} whiteLabelId - The unique identifier of the white label integration
540
- * @param {AirweaveSDK.BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodePost} request
540
+ * @param {AirweaveSDK.BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions} request
541
541
  * @param {WhiteLabels.RequestOptions} requestOptions - Request-specific configuration.
542
542
  *
543
543
  * @throws {@link AirweaveSDK.UnprocessableEntityError}
544
544
  *
545
545
  * @example
546
- * await client.whiteLabels.exchangeWhiteLabelOauth2Code("white_label_id", {
546
+ * await client.whiteLabels.exchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions("white_label_id", {
547
547
  * code: "4/P7q7W91a-oMsCeLvIaQm6bTrgtp7"
548
548
  * })
549
549
  */
550
- exchangeWhiteLabelOauth2Code(whiteLabelId, request, requestOptions) {
551
- return core.HttpResponsePromise.fromPromise(this.__exchangeWhiteLabelOauth2Code(whiteLabelId, request, requestOptions));
550
+ exchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions(whiteLabelId, request, requestOptions) {
551
+ return core.HttpResponsePromise.fromPromise(this.__exchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions(whiteLabelId, request, requestOptions));
552
552
  }
553
- __exchangeWhiteLabelOauth2Code(whiteLabelId, request, requestOptions) {
553
+ __exchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions(whiteLabelId, request, requestOptions) {
554
554
  return __awaiter(this, void 0, void 0, function* () {
555
555
  var _a, _b, _c;
556
556
  const _response = yield core.fetcher({
@@ -8,7 +8,7 @@ import * as AirweaveSDK from "../../../../index.js";
8
8
  * code: "4/P7q7W91a-oMsCeLvIaQm6bTrgtp7"
9
9
  * }
10
10
  */
11
- export interface BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodePost {
11
+ export interface BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions {
12
12
  /** The OAuth2 authorization code received from the OAuth callback after customer authentication */
13
13
  code: string;
14
14
  /** Optional configuration for the source connection. If not provided, a source connection will be created automatically with default settings. The white label integration is automatically linked to the source connection. */
@@ -1,3 +1,3 @@
1
1
  export { type WhiteLabelCreate } from "./WhiteLabelCreate.js";
2
2
  export { type WhiteLabelUpdate } from "./WhiteLabelUpdate.js";
3
- export { type BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodePost } from "./BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodePost.js";
3
+ export { type BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions } from "./BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions.js";
@@ -1,5 +1,5 @@
1
1
  import { ResponseWithBody } from "./ResponseWithBody.js";
2
- export interface BinaryResponse {
2
+ export type BinaryResponse = {
3
3
  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/bodyUsed) */
4
4
  bodyUsed: boolean;
5
5
  /**
@@ -11,7 +11,10 @@ export interface BinaryResponse {
11
11
  arrayBuffer: () => Promise<ArrayBuffer>;
12
12
  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/blob) */
13
13
  blob: () => Promise<Blob>;
14
- /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/bytes) */
15
- bytes(): Promise<Uint8Array>;
16
- }
14
+ /**
15
+ * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/bytes)
16
+ * Some versions of the Fetch API may not support this method.
17
+ */
18
+ bytes?(): Promise<Uint8Array>;
19
+ };
17
20
  export declare function getBinaryResponse(response: ResponseWithBody): BinaryResponse;
@@ -2,13 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getBinaryResponse = getBinaryResponse;
4
4
  function getBinaryResponse(response) {
5
- return {
5
+ const binaryResponse = {
6
6
  get bodyUsed() {
7
7
  return response.bodyUsed;
8
8
  },
9
9
  stream: () => response.body,
10
10
  arrayBuffer: response.arrayBuffer.bind(response),
11
11
  blob: response.blob.bind(response),
12
- bytes: response.bytes.bind(response),
13
12
  };
13
+ if ("bytes" in response && typeof response.bytes === "function") {
14
+ binaryResponse.bytes = response.bytes.bind(response);
15
+ }
16
+ return binaryResponse;
14
17
  }
@@ -15,6 +15,7 @@ const json_js_1 = require("../json.js");
15
15
  const RawResponse_js_1 = require("./RawResponse.js");
16
16
  const Supplier_js_1 = require("./Supplier.js");
17
17
  const createRequestUrl_js_1 = require("./createRequestUrl.js");
18
+ const getErrorResponseBody_js_1 = require("./getErrorResponseBody.js");
18
19
  const getFetchFn_js_1 = require("./getFetchFn.js");
19
20
  const getRequestBody_js_1 = require("./getRequestBody.js");
20
21
  const getResponseBody_js_1 = require("./getResponseBody.js");
@@ -55,11 +56,10 @@ function fetcherImpl(args) {
55
56
  const response = yield (0, requestWithRetries_js_1.requestWithRetries)(() => __awaiter(this, void 0, void 0, function* () {
56
57
  return (0, makeRequest_js_1.makeRequest)(fetchFn, url, args.method, yield getHeaders(args), requestBody, args.timeoutMs, args.abortSignal, args.withCredentials, args.duplex);
57
58
  }), args.maxRetries);
58
- const responseBody = yield (0, getResponseBody_js_1.getResponseBody)(response, args.responseType);
59
59
  if (response.status >= 200 && response.status < 400) {
60
60
  return {
61
61
  ok: true,
62
- body: responseBody,
62
+ body: (yield (0, getResponseBody_js_1.getResponseBody)(response, args.responseType)),
63
63
  headers: response.headers,
64
64
  rawResponse: (0, RawResponse_js_1.toRawResponse)(response),
65
65
  };
@@ -70,7 +70,7 @@ function fetcherImpl(args) {
70
70
  error: {
71
71
  reason: "status-code",
72
72
  statusCode: response.status,
73
- body: responseBody,
73
+ body: yield (0, getErrorResponseBody_js_1.getErrorResponseBody)(response),
74
74
  },
75
75
  rawResponse: (0, RawResponse_js_1.toRawResponse)(response),
76
76
  };
@@ -0,0 +1 @@
1
+ export declare function getErrorResponseBody(response: Response): Promise<unknown>;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getErrorResponseBody = getErrorResponseBody;
13
+ const json_js_1 = require("../json.js");
14
+ const getResponseBody_js_1 = require("./getResponseBody.js");
15
+ function getErrorResponseBody(response) {
16
+ return __awaiter(this, void 0, void 0, function* () {
17
+ var _a, _b, _c;
18
+ let contentType = (_a = response.headers.get("Content-Type")) === null || _a === void 0 ? void 0 : _a.toLowerCase();
19
+ if (contentType == null || contentType.length === 0) {
20
+ return (0, getResponseBody_js_1.getResponseBody)(response);
21
+ }
22
+ if (contentType.indexOf(";") !== -1) {
23
+ contentType = (_c = (_b = contentType.split(";")[0]) === null || _b === void 0 ? void 0 : _b.trim()) !== null && _c !== void 0 ? _c : "";
24
+ }
25
+ switch (contentType) {
26
+ case "application/hal+json":
27
+ case "application/json":
28
+ case "application/ld+json":
29
+ case "application/problem+json":
30
+ case "application/vnd.api+json":
31
+ case "text/json":
32
+ const text = yield response.text();
33
+ return text.length > 0 ? (0, json_js_1.fromJson)(text) : undefined;
34
+ default:
35
+ if (contentType.startsWith("application/vnd.") && contentType.endsWith("+json")) {
36
+ const text = yield response.text();
37
+ return text.length > 0 ? (0, json_js_1.fromJson)(text) : undefined;
38
+ }
39
+ // Fallback to plain text if content type is not recognized
40
+ // Even if no body is present, the response will be an empty string
41
+ return yield response.text();
42
+ }
43
+ });
44
+ }
@@ -1,4 +1 @@
1
- /**
2
- * Returns a fetch function based on the runtime
3
- */
4
- export declare function getFetchFn(): Promise<any>;
1
+ export declare function getFetchFn(): Promise<typeof fetch>;
@@ -1,37 +1,4 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
2
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
3
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
4
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -43,26 +10,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
43
10
  };
44
11
  Object.defineProperty(exports, "__esModule", { value: true });
45
12
  exports.getFetchFn = getFetchFn;
46
- const index_js_1 = require("../runtime/index.js");
47
- /**
48
- * Returns a fetch function based on the runtime
49
- */
50
13
  function getFetchFn() {
51
14
  return __awaiter(this, void 0, void 0, function* () {
52
- // In Node.js 18+ environments, use native fetch
53
- if (index_js_1.RUNTIME.type === "node" && index_js_1.RUNTIME.parsedVersion != null && index_js_1.RUNTIME.parsedVersion >= 18) {
54
- return fetch;
55
- }
56
- // In Node.js 18 or lower environments, the SDK always uses`node-fetch`.
57
- if (index_js_1.RUNTIME.type === "node") {
58
- return (yield Promise.resolve().then(() => __importStar(require("node-fetch")))).default;
59
- }
60
- // Otherwise the SDK uses global fetch if available,
61
- // and falls back to node-fetch.
62
- if (typeof fetch == "function") {
63
- return fetch;
64
- }
65
- // Defaults to node `node-fetch` if global fetch isn't available
66
- return (yield Promise.resolve().then(() => __importStar(require("node-fetch")))).default;
15
+ return fetch;
67
16
  });
68
17
  }
@@ -12,7 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.getResponseBody = getResponseBody;
13
13
  const BinaryResponse_js_1 = require("./BinaryResponse.js");
14
14
  const ResponseWithBody_js_1 = require("./ResponseWithBody.js");
15
- const chooseStreamWrapper_js_1 = require("./stream-wrappers/chooseStreamWrapper.js");
15
+ const json_js_1 = require("../json.js");
16
16
  function getResponseBody(response, responseType) {
17
17
  return __awaiter(this, void 0, void 0, function* () {
18
18
  if (!(0, ResponseWithBody_js_1.isResponseWithBody)(response)) {
@@ -28,7 +28,7 @@ function getResponseBody(response, responseType) {
28
28
  case "sse":
29
29
  return response.body;
30
30
  case "streaming":
31
- return (0, chooseStreamWrapper_js_1.chooseStreamWrapper)(response.body);
31
+ return response.body;
32
32
  case "text":
33
33
  return yield response.text();
34
34
  }
@@ -36,7 +36,7 @@ function getResponseBody(response, responseType) {
36
36
  const text = yield response.text();
37
37
  if (text.length > 0) {
38
38
  try {
39
- let responseBody = JSON.parse(text);
39
+ let responseBody = (0, json_js_1.fromJson)(text);
40
40
  return responseBody;
41
41
  }
42
42
  catch (err) {
@@ -5,6 +5,9 @@ function join(base, ...segments) {
5
5
  if (!base) {
6
6
  return "";
7
7
  }
8
+ if (segments.length === 0) {
9
+ return base;
10
+ }
8
11
  if (base.includes("://")) {
9
12
  let url;
10
13
  try {
@@ -14,24 +17,37 @@ function join(base, ...segments) {
14
17
  // Fallback to path joining if URL is malformed
15
18
  return joinPath(base, ...segments);
16
19
  }
20
+ const lastSegment = segments[segments.length - 1];
21
+ const shouldPreserveTrailingSlash = lastSegment && lastSegment.endsWith("/");
17
22
  for (const segment of segments) {
18
23
  const cleanSegment = trimSlashes(segment);
19
24
  if (cleanSegment) {
20
25
  url.pathname = joinPathSegments(url.pathname, cleanSegment);
21
26
  }
22
27
  }
28
+ if (shouldPreserveTrailingSlash && !url.pathname.endsWith("/")) {
29
+ url.pathname += "/";
30
+ }
23
31
  return url.toString();
24
32
  }
25
33
  return joinPath(base, ...segments);
26
34
  }
27
35
  function joinPath(base, ...segments) {
36
+ if (segments.length === 0) {
37
+ return base;
38
+ }
28
39
  let result = base;
40
+ const lastSegment = segments[segments.length - 1];
41
+ const shouldPreserveTrailingSlash = lastSegment && lastSegment.endsWith("/");
29
42
  for (const segment of segments) {
30
43
  const cleanSegment = trimSlashes(segment);
31
44
  if (cleanSegment) {
32
45
  result = joinPathSegments(result, cleanSegment);
33
46
  }
34
47
  }
48
+ if (shouldPreserveTrailingSlash && !result.endsWith("/")) {
49
+ result += "/";
50
+ }
35
51
  return result;
36
52
  }
37
53
  function joinPathSegments(left, right) {
@@ -43,7 +59,11 @@ function joinPathSegments(left, right) {
43
59
  function trimSlashes(str) {
44
60
  if (!str)
45
61
  return str;
46
- let start = str.startsWith("/") ? 1 : 0;
47
- let end = str.endsWith("/") ? str.length - 1 : str.length;
48
- return str.slice(start, end);
62
+ let start = 0;
63
+ let end = str.length;
64
+ if (str.startsWith("/"))
65
+ start = 1;
66
+ if (str.endsWith("/"))
67
+ end = str.length - 1;
68
+ return start === 0 && end === str.length ? str : str.slice(start, end);
49
69
  }
@@ -1 +1 @@
1
- export declare const SDK_VERSION = "v0.3.46";
1
+ export declare const SDK_VERSION = "v0.3.47";
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SDK_VERSION = void 0;
4
- exports.SDK_VERSION = "v0.3.46";
4
+ exports.SDK_VERSION = "v0.3.47";
@@ -14,8 +14,8 @@ export class AirweaveSDKClient {
14
14
  "X-Organization-ID": _options === null || _options === void 0 ? void 0 : _options.organizationId,
15
15
  "X-Fern-Language": "JavaScript",
16
16
  "X-Fern-SDK-Name": "@airweave/sdk",
17
- "X-Fern-SDK-Version": "v0.3.46",
18
- "User-Agent": "@airweave/sdk/v0.3.46",
17
+ "X-Fern-SDK-Version": "v0.3.47",
18
+ "User-Agent": "@airweave/sdk/v0.3.47",
19
19
  "X-Fern-Runtime": core.RUNTIME.type,
20
20
  "X-Fern-Runtime-Version": core.RUNTIME.version,
21
21
  }, _options === null || _options === void 0 ? void 0 : _options.headers) });
@@ -178,16 +178,16 @@ export declare class WhiteLabels {
178
178
  * tracking and branding purposes.
179
179
  *
180
180
  * @param {string} whiteLabelId - The unique identifier of the white label integration
181
- * @param {AirweaveSDK.BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodePost} request
181
+ * @param {AirweaveSDK.BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions} request
182
182
  * @param {WhiteLabels.RequestOptions} requestOptions - Request-specific configuration.
183
183
  *
184
184
  * @throws {@link AirweaveSDK.UnprocessableEntityError}
185
185
  *
186
186
  * @example
187
- * await client.whiteLabels.exchangeWhiteLabelOauth2Code("white_label_id", {
187
+ * await client.whiteLabels.exchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions("white_label_id", {
188
188
  * code: "4/P7q7W91a-oMsCeLvIaQm6bTrgtp7"
189
189
  * })
190
190
  */
191
- exchangeWhiteLabelOauth2Code(whiteLabelId: string, request: AirweaveSDK.BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodePost, requestOptions?: WhiteLabels.RequestOptions): core.HttpResponsePromise<AirweaveSDK.SourceConnection>;
192
- private __exchangeWhiteLabelOauth2Code;
191
+ exchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions(whiteLabelId: string, request: AirweaveSDK.BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions, requestOptions?: WhiteLabels.RequestOptions): core.HttpResponsePromise<AirweaveSDK.SourceConnection>;
192
+ private __exchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions;
193
193
  }
@@ -501,20 +501,20 @@ export class WhiteLabels {
501
501
  * tracking and branding purposes.
502
502
  *
503
503
  * @param {string} whiteLabelId - The unique identifier of the white label integration
504
- * @param {AirweaveSDK.BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodePost} request
504
+ * @param {AirweaveSDK.BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions} request
505
505
  * @param {WhiteLabels.RequestOptions} requestOptions - Request-specific configuration.
506
506
  *
507
507
  * @throws {@link AirweaveSDK.UnprocessableEntityError}
508
508
  *
509
509
  * @example
510
- * await client.whiteLabels.exchangeWhiteLabelOauth2Code("white_label_id", {
510
+ * await client.whiteLabels.exchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions("white_label_id", {
511
511
  * code: "4/P7q7W91a-oMsCeLvIaQm6bTrgtp7"
512
512
  * })
513
513
  */
514
- exchangeWhiteLabelOauth2Code(whiteLabelId, request, requestOptions) {
515
- return core.HttpResponsePromise.fromPromise(this.__exchangeWhiteLabelOauth2Code(whiteLabelId, request, requestOptions));
514
+ exchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions(whiteLabelId, request, requestOptions) {
515
+ return core.HttpResponsePromise.fromPromise(this.__exchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions(whiteLabelId, request, requestOptions));
516
516
  }
517
- __exchangeWhiteLabelOauth2Code(whiteLabelId, request, requestOptions) {
517
+ __exchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions(whiteLabelId, request, requestOptions) {
518
518
  return __awaiter(this, void 0, void 0, function* () {
519
519
  var _a, _b, _c;
520
520
  const _response = yield core.fetcher({
@@ -8,7 +8,7 @@ import * as AirweaveSDK from "../../../../index.mjs";
8
8
  * code: "4/P7q7W91a-oMsCeLvIaQm6bTrgtp7"
9
9
  * }
10
10
  */
11
- export interface BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodePost {
11
+ export interface BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions {
12
12
  /** The OAuth2 authorization code received from the OAuth callback after customer authentication */
13
13
  code: string;
14
14
  /** Optional configuration for the source connection. If not provided, a source connection will be created automatically with default settings. The white label integration is automatically linked to the source connection. */
@@ -1,3 +1,3 @@
1
1
  export { type WhiteLabelCreate } from "./WhiteLabelCreate.mjs";
2
2
  export { type WhiteLabelUpdate } from "./WhiteLabelUpdate.mjs";
3
- export { type BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodePost } from "./BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodePost.mjs";
3
+ export { type BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions } from "./BodyExchangeWhiteLabelOauth2CodeWhiteLabelsWhiteLabelIdOauth2CodeOptions.mjs";
@@ -1,5 +1,5 @@
1
1
  import { ResponseWithBody } from "./ResponseWithBody.mjs";
2
- export interface BinaryResponse {
2
+ export type BinaryResponse = {
3
3
  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/bodyUsed) */
4
4
  bodyUsed: boolean;
5
5
  /**
@@ -11,7 +11,10 @@ export interface BinaryResponse {
11
11
  arrayBuffer: () => Promise<ArrayBuffer>;
12
12
  /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/blob) */
13
13
  blob: () => Promise<Blob>;
14
- /** [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/bytes) */
15
- bytes(): Promise<Uint8Array>;
16
- }
14
+ /**
15
+ * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Request/bytes)
16
+ * Some versions of the Fetch API may not support this method.
17
+ */
18
+ bytes?(): Promise<Uint8Array>;
19
+ };
17
20
  export declare function getBinaryResponse(response: ResponseWithBody): BinaryResponse;
@@ -1,11 +1,14 @@
1
1
  export function getBinaryResponse(response) {
2
- return {
2
+ const binaryResponse = {
3
3
  get bodyUsed() {
4
4
  return response.bodyUsed;
5
5
  },
6
6
  stream: () => response.body,
7
7
  arrayBuffer: response.arrayBuffer.bind(response),
8
8
  blob: response.blob.bind(response),
9
- bytes: response.bytes.bind(response),
10
9
  };
10
+ if ("bytes" in response && typeof response.bytes === "function") {
11
+ binaryResponse.bytes = response.bytes.bind(response);
12
+ }
13
+ return binaryResponse;
11
14
  }
@@ -11,6 +11,7 @@ import { toJson } from "../json.mjs";
11
11
  import { abortRawResponse, toRawResponse, unknownRawResponse } from "./RawResponse.mjs";
12
12
  import { Supplier } from "./Supplier.mjs";
13
13
  import { createRequestUrl } from "./createRequestUrl.mjs";
14
+ import { getErrorResponseBody } from "./getErrorResponseBody.mjs";
14
15
  import { getFetchFn } from "./getFetchFn.mjs";
15
16
  import { getRequestBody } from "./getRequestBody.mjs";
16
17
  import { getResponseBody } from "./getResponseBody.mjs";
@@ -51,11 +52,10 @@ export function fetcherImpl(args) {
51
52
  const response = yield requestWithRetries(() => __awaiter(this, void 0, void 0, function* () {
52
53
  return makeRequest(fetchFn, url, args.method, yield getHeaders(args), requestBody, args.timeoutMs, args.abortSignal, args.withCredentials, args.duplex);
53
54
  }), args.maxRetries);
54
- const responseBody = yield getResponseBody(response, args.responseType);
55
55
  if (response.status >= 200 && response.status < 400) {
56
56
  return {
57
57
  ok: true,
58
- body: responseBody,
58
+ body: (yield getResponseBody(response, args.responseType)),
59
59
  headers: response.headers,
60
60
  rawResponse: toRawResponse(response),
61
61
  };
@@ -66,7 +66,7 @@ export function fetcherImpl(args) {
66
66
  error: {
67
67
  reason: "status-code",
68
68
  statusCode: response.status,
69
- body: responseBody,
69
+ body: yield getErrorResponseBody(response),
70
70
  },
71
71
  rawResponse: toRawResponse(response),
72
72
  };
@@ -0,0 +1 @@
1
+ export declare function getErrorResponseBody(response: Response): Promise<unknown>;
@@ -0,0 +1,41 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { fromJson } from "../json.mjs";
11
+ import { getResponseBody } from "./getResponseBody.mjs";
12
+ export function getErrorResponseBody(response) {
13
+ return __awaiter(this, void 0, void 0, function* () {
14
+ var _a, _b, _c;
15
+ let contentType = (_a = response.headers.get("Content-Type")) === null || _a === void 0 ? void 0 : _a.toLowerCase();
16
+ if (contentType == null || contentType.length === 0) {
17
+ return getResponseBody(response);
18
+ }
19
+ if (contentType.indexOf(";") !== -1) {
20
+ contentType = (_c = (_b = contentType.split(";")[0]) === null || _b === void 0 ? void 0 : _b.trim()) !== null && _c !== void 0 ? _c : "";
21
+ }
22
+ switch (contentType) {
23
+ case "application/hal+json":
24
+ case "application/json":
25
+ case "application/ld+json":
26
+ case "application/problem+json":
27
+ case "application/vnd.api+json":
28
+ case "text/json":
29
+ const text = yield response.text();
30
+ return text.length > 0 ? fromJson(text) : undefined;
31
+ default:
32
+ if (contentType.startsWith("application/vnd.") && contentType.endsWith("+json")) {
33
+ const text = yield response.text();
34
+ return text.length > 0 ? fromJson(text) : undefined;
35
+ }
36
+ // Fallback to plain text if content type is not recognized
37
+ // Even if no body is present, the response will be an empty string
38
+ return yield response.text();
39
+ }
40
+ });
41
+ }
@@ -1,4 +1 @@
1
- /**
2
- * Returns a fetch function based on the runtime
3
- */
4
- export declare function getFetchFn(): Promise<any>;
1
+ export declare function getFetchFn(): Promise<typeof fetch>;
@@ -7,26 +7,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- import { RUNTIME } from "../runtime/index.mjs";
11
- /**
12
- * Returns a fetch function based on the runtime
13
- */
14
10
  export function getFetchFn() {
15
11
  return __awaiter(this, void 0, void 0, function* () {
16
- // In Node.js 18+ environments, use native fetch
17
- if (RUNTIME.type === "node" && RUNTIME.parsedVersion != null && RUNTIME.parsedVersion >= 18) {
18
- return fetch;
19
- }
20
- // In Node.js 18 or lower environments, the SDK always uses`node-fetch`.
21
- if (RUNTIME.type === "node") {
22
- return (yield import("node-fetch")).default;
23
- }
24
- // Otherwise the SDK uses global fetch if available,
25
- // and falls back to node-fetch.
26
- if (typeof fetch == "function") {
27
- return fetch;
28
- }
29
- // Defaults to node `node-fetch` if global fetch isn't available
30
- return (yield import("node-fetch")).default;
12
+ return fetch;
31
13
  });
32
14
  }
@@ -9,7 +9,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  };
10
10
  import { getBinaryResponse } from "./BinaryResponse.mjs";
11
11
  import { isResponseWithBody } from "./ResponseWithBody.mjs";
12
- import { chooseStreamWrapper } from "./stream-wrappers/chooseStreamWrapper.mjs";
12
+ import { fromJson } from "../json.mjs";
13
13
  export function getResponseBody(response, responseType) {
14
14
  return __awaiter(this, void 0, void 0, function* () {
15
15
  if (!isResponseWithBody(response)) {
@@ -25,7 +25,7 @@ export function getResponseBody(response, responseType) {
25
25
  case "sse":
26
26
  return response.body;
27
27
  case "streaming":
28
- return chooseStreamWrapper(response.body);
28
+ return response.body;
29
29
  case "text":
30
30
  return yield response.text();
31
31
  }
@@ -33,7 +33,7 @@ export function getResponseBody(response, responseType) {
33
33
  const text = yield response.text();
34
34
  if (text.length > 0) {
35
35
  try {
36
- let responseBody = JSON.parse(text);
36
+ let responseBody = fromJson(text);
37
37
  return responseBody;
38
38
  }
39
39
  catch (err) {