@vertesia/api-fetch-client 1.3.0 → 1.4.0-dev.20260614.160504Z

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 (80) hide show
  1. package/README.md +25 -0
  2. package/lib/base.d.ts +135 -0
  3. package/lib/base.d.ts.map +1 -0
  4. package/lib/base.js +374 -0
  5. package/lib/base.js.map +1 -0
  6. package/lib/{types/client.d.ts → client.d.ts} +7 -8
  7. package/lib/client.d.ts.map +1 -0
  8. package/lib/{esm/client.js → client.js} +24 -11
  9. package/lib/client.js.map +1 -0
  10. package/lib/{types/errors.d.ts → errors.d.ts} +5 -5
  11. package/lib/errors.d.ts.map +1 -0
  12. package/lib/{esm/errors.js → errors.js} +22 -9
  13. package/lib/errors.js.map +1 -0
  14. package/lib/index.d.ts +5 -0
  15. package/lib/index.d.ts.map +1 -0
  16. package/lib/index.js +5 -0
  17. package/lib/index.js.map +1 -0
  18. package/lib/{types/sse → sse}/EventSourceParserStream.d.ts +4 -1
  19. package/lib/sse/EventSourceParserStream.d.ts.map +1 -0
  20. package/lib/{esm/sse → sse}/EventSourceParserStream.js +5 -4
  21. package/lib/sse/EventSourceParserStream.js.map +1 -0
  22. package/lib/sse/TextDecoderStream.d.ts.map +1 -0
  23. package/lib/{esm/sse → sse}/TextDecoderStream.js +2 -2
  24. package/lib/sse/TextDecoderStream.js.map +1 -0
  25. package/lib/{types/sse → sse}/index.d.ts +7 -2
  26. package/lib/sse/index.d.ts.map +1 -0
  27. package/lib/{esm/sse → sse}/index.js +3 -3
  28. package/lib/sse/index.js.map +1 -0
  29. package/lib/{types/utils.d.ts → utils.d.ts} +1 -1
  30. package/lib/utils.d.ts.map +1 -0
  31. package/lib/{esm/utils.js → utils.js} +3 -3
  32. package/lib/utils.js.map +1 -0
  33. package/package.json +21 -25
  34. package/src/base.ts +297 -79
  35. package/src/client.ts +46 -24
  36. package/src/errors.ts +28 -15
  37. package/src/index.ts +4 -4
  38. package/src/sse/EventSourceParserStream.ts +13 -10
  39. package/src/sse/TextDecoderStream.ts +16 -11
  40. package/src/sse/index.ts +14 -8
  41. package/src/utils.ts +5 -6
  42. package/lib/cjs/base.js +0 -240
  43. package/lib/cjs/base.js.map +0 -1
  44. package/lib/cjs/client.js +0 -115
  45. package/lib/cjs/client.js.map +0 -1
  46. package/lib/cjs/errors.js +0 -63
  47. package/lib/cjs/errors.js.map +0 -1
  48. package/lib/cjs/index.js +0 -21
  49. package/lib/cjs/index.js.map +0 -1
  50. package/lib/cjs/package.json +0 -3
  51. package/lib/cjs/sse/EventSourceParserStream.js +0 -41
  52. package/lib/cjs/sse/EventSourceParserStream.js.map +0 -1
  53. package/lib/cjs/sse/TextDecoderStream.js +0 -53
  54. package/lib/cjs/sse/TextDecoderStream.js.map +0 -1
  55. package/lib/cjs/sse/index.js +0 -27
  56. package/lib/cjs/sse/index.js.map +0 -1
  57. package/lib/cjs/utils.js +0 -38
  58. package/lib/cjs/utils.js.map +0 -1
  59. package/lib/esm/base.js +0 -235
  60. package/lib/esm/base.js.map +0 -1
  61. package/lib/esm/client.js.map +0 -1
  62. package/lib/esm/errors.js.map +0 -1
  63. package/lib/esm/index.js +0 -5
  64. package/lib/esm/index.js.map +0 -1
  65. package/lib/esm/sse/EventSourceParserStream.js.map +0 -1
  66. package/lib/esm/sse/TextDecoderStream.js.map +0 -1
  67. package/lib/esm/sse/index.js.map +0 -1
  68. package/lib/esm/utils.js.map +0 -1
  69. package/lib/tsconfig.tsbuildinfo +0 -1
  70. package/lib/types/base.d.ts +0 -83
  71. package/lib/types/base.d.ts.map +0 -1
  72. package/lib/types/client.d.ts.map +0 -1
  73. package/lib/types/errors.d.ts.map +0 -1
  74. package/lib/types/index.d.ts +0 -5
  75. package/lib/types/index.d.ts.map +0 -1
  76. package/lib/types/sse/EventSourceParserStream.d.ts.map +0 -1
  77. package/lib/types/sse/TextDecoderStream.d.ts.map +0 -1
  78. package/lib/types/sse/index.d.ts.map +0 -1
  79. package/lib/types/utils.d.ts.map +0 -1
  80. /package/lib/{types/sse → sse}/TextDecoderStream.d.ts +0 -0
@@ -1,8 +1,15 @@
1
- import { ClientBase } from "./base.js";
1
+ import { ClientBase } from './base.js';
2
2
  function isAuthorizationHeaderSet(headers) {
3
3
  if (!headers)
4
4
  return false;
5
- return "authorization" in headers;
5
+ return 'authorization' in headers;
6
+ }
7
+ function isServerFetchRuntime() {
8
+ const runtime = globalThis;
9
+ return (typeof runtime.window === 'undefined' &&
10
+ (typeof runtime.process?.versions?.node === 'string' ||
11
+ typeof runtime.process?.versions?.bun === 'string' ||
12
+ typeof runtime.Bun !== 'undefined'));
6
13
  }
7
14
  export class AbstractFetchClient extends ClientBase {
8
15
  headers;
@@ -18,7 +25,11 @@ export class AbstractFetchClient extends ClientBase {
18
25
  this.headers = this.initialHeaders;
19
26
  }
20
27
  get initialHeaders() {
21
- return { accept: 'application/json' };
28
+ const headers = { accept: 'application/json' };
29
+ if (isServerFetchRuntime()) {
30
+ headers['accept-encoding'] = 'br, gzip, deflate';
31
+ }
32
+ return headers;
22
33
  }
23
34
  /**
24
35
  * Install an auth callback. If the callback is undefined or null then remove the auth callback.
@@ -66,24 +77,20 @@ export class AbstractFetchClient extends ClientBase {
66
77
  init.headers = headers;
67
78
  const auth = await this._auth();
68
79
  if (auth) {
69
- init.headers["authorization"] = auth;
80
+ init.headers.authorization = auth;
70
81
  }
71
82
  }
72
83
  this.response = undefined;
73
84
  const request = await super.createRequest(url, init);
74
- this.onRequest && this.onRequest(request);
85
+ this.onRequest?.(request);
75
86
  return request;
76
87
  }
77
- async handleResponse(req, res, params) {
88
+ handleFetchResponse(req, res) {
78
89
  this.response = res; // store last response
79
- this.onResponse && this.onResponse(res, req);
80
- return super.handleResponse(req, res, params);
90
+ this.onResponse?.(res, req);
81
91
  }
82
92
  }
83
93
  export class FetchClient extends AbstractFetchClient {
84
- constructor(baseUrl, fetchImpl) {
85
- super(baseUrl, fetchImpl);
86
- }
87
94
  }
88
95
  export class ApiTopic extends ClientBase {
89
96
  client;
@@ -102,6 +109,12 @@ export class ApiTopic extends ClientBase {
102
109
  handleResponse(req, res, params) {
103
110
  return this.client.handleResponse(req, res, params);
104
111
  }
112
+ handleFetchResponse(req, res) {
113
+ this.client.handleFetchResponse(req, res);
114
+ }
115
+ getRetryPolicy() {
116
+ return this.client.getRetryPolicy();
117
+ }
105
118
  get headers() {
106
119
  return this.client.headers;
107
120
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,16 @@
1
1
  export declare class RequestError extends Error {
2
2
  status: number;
3
- payload: any;
3
+ payload: unknown;
4
4
  request: Request;
5
5
  request_info: string;
6
6
  displayDetails: boolean;
7
7
  original_message: string;
8
- constructor(message: string, request: Request, status: number, payload: any, displayDetails?: boolean);
9
- get details(): any;
8
+ constructor(message: string, request: Request, status: number, payload: unknown, displayDetails?: boolean);
9
+ get details(): unknown;
10
10
  }
11
11
  export declare class ServerError extends RequestError {
12
- constructor(message: string, req: Request, status: number, payload: any, displayDetails?: boolean);
13
- updateDetails(details: any): ServerError;
12
+ constructor(message: string, req: Request, status: number, payload: unknown, displayDetails?: boolean);
13
+ updateDetails(details: unknown): ServerError;
14
14
  }
15
15
  export declare class ConnectionError extends RequestError {
16
16
  constructor(req: Request, err: Error);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAgCA,qBAAa,YAAa,SAAQ,KAAK;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;gBACb,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,UAAO;IAUtG,IAAI,OAAO,YAEV;CACJ;AAED,qBAAa,WAAY,SAAQ,YAAY;gBAC7B,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,cAAc,UAAO;IAIlG,aAAa,CAAC,OAAO,EAAE,OAAO;CAQjC;AAED,qBAAa,eAAgB,SAAQ,YAAY;gBACjC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK;CAGvC"}
@@ -1,15 +1,27 @@
1
+ function isRecord(value) {
2
+ return value !== null && typeof value === 'object';
3
+ }
4
+ function getDetails(payload) {
5
+ if (!isRecord(payload)) {
6
+ return undefined;
7
+ }
8
+ if (payload.details) {
9
+ return payload.details;
10
+ }
11
+ return isRecord(payload.error) ? payload.error.details : undefined;
12
+ }
1
13
  function createMessage(message, request, status, payload, displayDetails) {
2
14
  let msg = message;
3
15
  if (displayDetails) {
4
- msg += '\nRequest: ' + request.method + ' ' + request.url + ' => ' + status;
5
- const details = payload?.details || payload?.error?.details;
16
+ msg += `\nRequest: ${request.method} ${request.url} => ${status}`;
17
+ const details = getDetails(payload);
6
18
  if (details) {
7
19
  const detailsType = typeof details;
8
20
  if (detailsType === 'string') {
9
- msg += '\nDetails: ' + details;
21
+ msg += `\nDetails: ${details}`;
10
22
  }
11
- else if (detailsType === "object") {
12
- msg += '\nDetails: ' + JSON.stringify(details, undefined, 2);
23
+ else if (detailsType === 'object') {
24
+ msg += `\nDetails: ${JSON.stringify(details, undefined, 2)}`;
13
25
  }
14
26
  }
15
27
  msg += '\nStack Trace: ';
@@ -29,11 +41,11 @@ export class RequestError extends Error {
29
41
  this.request = request;
30
42
  this.status = status;
31
43
  this.payload = payload;
32
- this.request_info = request.method + ' ' + request.url + ' => ' + status;
44
+ this.request_info = `${request.method} ${request.url} => ${status}`;
33
45
  this.displayDetails = displayDetails;
34
46
  }
35
47
  get details() {
36
- return this.payload?.details || this.payload?.error?.details;
48
+ return getDetails(this.payload);
37
49
  }
38
50
  }
39
51
  export class ServerError extends RequestError {
@@ -42,7 +54,8 @@ export class ServerError extends RequestError {
42
54
  }
43
55
  updateDetails(details) {
44
56
  if (details !== this.details) {
45
- return new ServerError(this.original_message, this.request, this.status, { ...this.payload, details }, this.displayDetails);
57
+ const payload = isRecord(this.payload) ? { ...this.payload, details } : { details };
58
+ return new ServerError(this.original_message, this.request, this.status, payload, this.displayDetails);
46
59
  }
47
60
  else {
48
61
  return this;
@@ -51,7 +64,7 @@ export class ServerError extends RequestError {
51
64
  }
52
65
  export class ConnectionError extends RequestError {
53
66
  constructor(req, err) {
54
- super("Failed to connect to server: " + err.message, req, 0, err);
67
+ super(`Failed to connect to server: ${err.message}`, req, 0, err);
55
68
  }
56
69
  }
57
70
  //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from './base.js';
2
+ export * from './client.js';
3
+ export * from './errors.js';
4
+ export * from './sse/index.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export * from './base.js';
2
+ export * from './client.js';
3
+ export * from './errors.js';
4
+ export * from './sse/index.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
@@ -1,4 +1,7 @@
1
- import { type ParsedEvent } from 'eventsource-parser';
1
+ import { type EventSourceMessage } from 'eventsource-parser';
2
+ export type ParsedEvent = EventSourceMessage & {
3
+ type: 'event';
4
+ };
2
5
  /**
3
6
  * We copied this file from the eventsource-parser/stream package and made it a part of our project.
4
7
  * because importing the eventsource-parser/stream breaks tsc build when building the commonjs version
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventSourceParserStream.d.ts","sourceRoot":"","sources":["../../src/sse/EventSourceParserStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,kBAAkB,EAA0B,MAAM,oBAAoB,CAAC;AAEnG,MAAM,MAAM,WAAW,GAAG,kBAAkB,GAAG;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAEjE;;;;;GAKG;AAEH;;;;;;;;;;;GAWG;AACH,qBAAa,uBAAwB,SAAQ,eAAe,CAAC,MAAM,EAAE,WAAW,CAAC;;CAkBhF"}
@@ -22,10 +22,11 @@ export class EventSourceParserStream extends TransformStream {
22
22
  let parser;
23
23
  super({
24
24
  start(controller) {
25
- parser = createParser((event) => {
26
- if (event.type === 'event') {
27
- controller.enqueue(event);
28
- }
25
+ parser = createParser({
26
+ onEvent(event) {
27
+ const parsedEvent = { type: 'event', ...event };
28
+ controller.enqueue(parsedEvent);
29
+ },
29
30
  });
30
31
  },
31
32
  transform(chunk) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventSourceParserStream.js","sourceRoot":"","sources":["../../src/sse/EventSourceParserStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAmD,MAAM,oBAAoB,CAAC;AAInG;;;;;GAKG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,uBAAwB,SAAQ,eAAoC;IAC7E;QACI,IAAI,MAA0B,CAAC;QAE/B,KAAK,CAAC;YACF,KAAK,CAAC,UAAU;gBACZ,MAAM,GAAG,YAAY,CAAC;oBAClB,OAAO,CAAC,KAAK;wBACT,MAAM,WAAW,GAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,CAAC;wBAC7D,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;oBACpC,CAAC;iBACJ,CAAC,CAAC;YACP,CAAC;YACD,SAAS,CAAC,KAAK;gBACX,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;CACJ"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextDecoderStream.d.ts","sourceRoot":"","sources":["../../src/sse/TextDecoderStream.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,QAAA,IAAI,kBAAkB,EAAE,OAAO,iBAAiB,CAAC;AA6DjD,OAAO,EAAE,kBAAkB,IAAI,iBAAiB,EAAE,CAAC"}
@@ -10,7 +10,7 @@ if (globalThis.TextDecoderStream && typeof globalThis.TextDecoderStream === 'fun
10
10
  else {
11
11
  class MyTextDecoderStream extends TransformStream {
12
12
  _options;
13
- constructor(encoding = "utf-8", { fatal = false, ignoreBOM = false } = {}) {
13
+ constructor(encoding = 'utf-8', { fatal = false, ignoreBOM = false, } = {}) {
14
14
  super(new TextDecodeTransformer(new TextDecoder(encoding, { fatal, ignoreBOM })));
15
15
  this._options = { fatal, ignoreBOM, encoding };
16
16
  }
@@ -31,7 +31,7 @@ else {
31
31
  }
32
32
  transform(chunk, controller) {
33
33
  if (!(chunk instanceof ArrayBuffer || ArrayBuffer.isView(chunk))) {
34
- throw new TypeError("Input must be a compatible with: ArrayBuffer | Uint8Array");
34
+ throw new TypeError('Input must be a compatible with: ArrayBuffer | Uint8Array');
35
35
  }
36
36
  const text = this.decoder.decode(chunk, { stream: true });
37
37
  if (text.length !== 0) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextDecoderStream.js","sourceRoot":"","sources":["../../src/sse/TextDecoderStream.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,IAAI,kBAA4C,CAAC;AACjD,IAAI,UAAU,CAAC,iBAAiB,IAAI,OAAO,UAAU,CAAC,iBAAiB,KAAK,UAAU,EAAE,CAAC;IACrF,kBAAkB,GAAG,UAAU,CAAC,iBAAiB,CAAC;AACtD,CAAC;KAAM,CAAC;IACJ,MAAM,mBAAoB,SAAQ,eAAiD;QACvE,QAAQ,CAId;QACF,YACI,QAAQ,GAAG,OAAO,EAClB,EACI,KAAK,GAAG,KAAK,EACb,SAAS,GAAG,KAAK,MAIjB,EAAE;YAEN,KAAK,CAAC,IAAI,qBAAqB,CAAC,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;YAClF,IAAI,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;QACnD,CAAC;QAED,IAAI,QAAQ;YACR,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAClC,CAAC;QACD,IAAI,KAAK;YACL,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC/B,CAAC;QACD,IAAI,SAAS;YACT,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QACnC,CAAC;KACJ;IACD,MAAM,qBAAqB;QACf,OAAO,CAAc;QAE7B,YAAY,OAAoB;YAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAC3B,CAAC;QAED,SAAS,CAAC,KAA+B,EAAE,UAAoD;YAC3F,IAAI,CAAC,CAAC,KAAK,YAAY,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC/D,MAAM,IAAI,SAAS,CAAC,2DAA2D,CAAC,CAAC;YACrF,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpB,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC;QAED,KAAK,CAAC,UAAoD;YACtD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpB,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC;KACJ;IACD,kBAAkB,GAAG,mBAA+C,CAAC;AACzE,CAAC;AAED,OAAO,EAAE,kBAAkB,IAAI,iBAAiB,EAAE,CAAC"}
@@ -1,5 +1,10 @@
1
- import { TextDecoderStream } from "./TextDecoderStream.js";
2
- import { ParsedEvent, ReconnectInterval } from "eventsource-parser";
1
+ import { type ParsedEvent } from './EventSourceParserStream.js';
2
+ import { TextDecoderStream } from './TextDecoderStream.js';
3
+ export type { ParsedEvent };
4
+ export interface ReconnectInterval {
5
+ type: 'reconnect-interval';
6
+ value: number;
7
+ }
3
8
  export type ServerSentEvent = ParsedEvent | ReconnectInterval;
4
9
  /**
5
10
  * A SSE response reader.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sse/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,eAAe,GAAG,WAAW,GAAG,iBAAiB,CAAC;AAC9D;;;;;;GAMG;AACH,wBAAsB,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAWtF;AAGD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -1,5 +1,5 @@
1
- import { TextDecoderStream } from "./TextDecoderStream.js";
2
- import { EventSourceParserStream } from "./EventSourceParserStream.js";
1
+ import { EventSourceParserStream } from './EventSourceParserStream.js';
2
+ import { TextDecoderStream } from './TextDecoderStream.js';
3
3
  /**
4
4
  * A SSE response reader.
5
5
  * Usage client.get('/path', {reader: sse}) or client.post('/path', {reader: sse})
@@ -10,7 +10,7 @@ import { EventSourceParserStream } from "./EventSourceParserStream.js";
10
10
  export async function sse(response) {
11
11
  if (!response.ok) {
12
12
  const text = await response.text();
13
- const error = new Error("SSE error: " + response.status + ". Content:\n" + text);
13
+ const error = new Error(`SSE error: ${response.status}. Content:\n${text}`);
14
14
  error.status = response.status;
15
15
  throw error;
16
16
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sse/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAoB,MAAM,8BAA8B,CAAC;AACzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAU3D;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,QAAkB;IACxC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,cAAc,QAAQ,CAAC,MAAM,eAAe,IAAI,EAAE,CAAgC,CAAC;QAC3G,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC/B,MAAM,KAAK,CAAC;IAChB,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,iBAAiB,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,uBAAuB,EAAE,CAAC,CAAC;AACzG,CAAC;AAED,0DAA0D;AAC1D,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -1,4 +1,4 @@
1
- export declare function buildQueryString(query: any): string;
1
+ export declare function buildQueryString(query: Record<string, unknown>): string;
2
2
  export declare function join(left: string, right: string): string;
3
3
  export declare function removeTrailingSlash(path: string): string;
4
4
  //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAS9D;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,UAY/C;AACD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,UAK/C"}
@@ -3,10 +3,10 @@ export function buildQueryString(query) {
3
3
  for (const key of Object.keys(query)) {
4
4
  const val = query[key];
5
5
  if (val != null) {
6
- parts.push(encodeURIComponent(key) + "=" + encodeURIComponent(String(val)));
6
+ parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(val))}`);
7
7
  }
8
8
  }
9
- return parts.join("&");
9
+ return parts.join('&');
10
10
  }
11
11
  export function join(left, right) {
12
12
  if (left.endsWith('/')) {
@@ -21,7 +21,7 @@ export function join(left, right) {
21
21
  return left + right;
22
22
  }
23
23
  else {
24
- return left + '/' + right;
24
+ return `${left}/${right}`;
25
25
  }
26
26
  }
27
27
  export function removeTrailingSlash(path) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,KAA8B;IAC3D,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACd,KAAK,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAChF,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,KAAa;IAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,GAAG,KAAK,CAAC;QACxB,CAAC;IACL,CAAC;SAAM,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,GAAG,KAAK,CAAC;IACxB,CAAC;SAAM,CAAC;QACJ,OAAO,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;IAC9B,CAAC;AACL,CAAC;AACD,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC5C,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC"}
package/package.json CHANGED
@@ -1,20 +1,19 @@
1
1
  {
2
2
  "name": "@vertesia/api-fetch-client",
3
- "version": "1.3.0",
3
+ "version": "1.4.0-dev.20260614.160504Z",
4
4
  "description": "HTTP client which wraps a fetch implementation and simplify the creation of REST API clients. Works both in browser and in node.",
5
5
  "type": "module",
6
- "types": "./lib/types/index.d.ts",
6
+ "main": "./lib/index.js",
7
+ "types": "./lib/index.d.ts",
7
8
  "files": [
8
9
  "lib",
9
10
  "src"
10
11
  ],
11
- "ts_dual_module": {
12
- "outDir": "lib"
13
- },
14
12
  "exports": {
15
- "types": "./lib/types/index.d.ts",
16
- "import": "./lib/esm/index.js",
17
- "require": "./lib/cjs/index.js"
13
+ ".": {
14
+ "types": "./lib/index.d.ts",
15
+ "default": "./lib/index.js"
16
+ }
18
17
  },
19
18
  "repository": {
20
19
  "type": "git",
@@ -39,28 +38,25 @@
39
38
  },
40
39
  "homepage": "https://github.com/vertesia/composableai/tree/main/packages/api-fetch-client#readme",
41
40
  "devDependencies": {
42
- "@eslint/js": "^10.0.1",
43
- "@koa-stack/router": "^0.24.0",
44
- "@koa-stack/server": "^0.24.0",
45
- "@types/koa": "^2.15.0",
41
+ "@types/koa": "^3.0.3",
46
42
  "@types/mocha": "^10.0.10",
47
- "eslint": "^10.0.2",
48
- "koa": "^2.16.4",
49
- "mocha": "^10.2.0",
50
- "ts-dual-module": "^0.6.3",
51
- "ts-node": "^10.9.2",
52
- "tsx": "^4.8.1",
53
- "typescript": "^6.0.2",
54
- "typescript-eslint": "^8.58.1",
55
- "vitest": "^4.0.16"
43
+ "@types/node": "^24.12.4",
44
+ "koa": "^3.2.1",
45
+ "mocha": "^11.7.6",
46
+ "tsx": "^4.22.4",
47
+ "typescript": "^6.0.3",
48
+ "@koa-stack/router": "0.24.0",
49
+ "@koa-stack/server": "0.24.0",
50
+ "@vertesia/tsconfig": "0.1.0"
56
51
  },
57
52
  "dependencies": {
58
- "eventsource-parser": "^1.1.1"
53
+ "eventsource-parser": "^3.1.0"
59
54
  },
60
55
  "scripts": {
61
56
  "test": "ESBK_TSCONFIG_PATH=./test/tsconfig.json pnpm exec mocha -r tsx --exit ./test/**/*.ts",
62
- "lint": "eslint './src/**/*.{jsx,js,tsx,ts}'",
63
- "build": "pnpm exec tsmod build",
64
- "clean": "rimraf ./node_modules ./lib ./tsconfig.tsbuildinfo"
57
+ "lint": "biome lint src",
58
+ "typecheck:test": "tsc -p test/tsconfig.json --noEmit",
59
+ "build": "rm -rf ./lib ./tsconfig.tsbuildinfo && tsc",
60
+ "clean": "rm -rf ./node_modules ./lib ./tsconfig.tsbuildinfo"
65
61
  }
66
62
  }