@vertesia/api-fetch-client 0.78.0-dev-9372725 → 0.78.0-dev.1

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 (51) hide show
  1. package/lib/cjs/base.js +190 -0
  2. package/lib/cjs/base.js.map +1 -0
  3. package/lib/cjs/client.js +107 -0
  4. package/lib/cjs/client.js.map +1 -0
  5. package/lib/cjs/errors.js +57 -0
  6. package/lib/cjs/errors.js.map +1 -0
  7. package/lib/cjs/index.js +21 -0
  8. package/lib/cjs/index.js.map +1 -0
  9. package/lib/cjs/package.json +3 -0
  10. package/lib/cjs/sse/EventSourceParserStream.js +41 -0
  11. package/lib/cjs/sse/EventSourceParserStream.js.map +1 -0
  12. package/lib/cjs/sse/TextDecoderStream.js +51 -0
  13. package/lib/cjs/sse/TextDecoderStream.js.map +1 -0
  14. package/lib/cjs/sse/index.js +27 -0
  15. package/lib/cjs/sse/index.js.map +1 -0
  16. package/lib/cjs/utils.js +38 -0
  17. package/lib/cjs/utils.js.map +1 -0
  18. package/lib/esm/base.js +185 -0
  19. package/lib/esm/base.js.map +1 -0
  20. package/lib/esm/client.js +101 -0
  21. package/lib/esm/client.js.map +1 -0
  22. package/lib/esm/errors.js +51 -0
  23. package/lib/esm/errors.js.map +1 -0
  24. package/lib/esm/index.js +5 -0
  25. package/lib/esm/index.js.map +1 -0
  26. package/lib/esm/sse/EventSourceParserStream.js +37 -0
  27. package/lib/esm/sse/EventSourceParserStream.js.map +1 -0
  28. package/lib/esm/sse/TextDecoderStream.js +49 -0
  29. package/lib/esm/sse/TextDecoderStream.js.map +1 -0
  30. package/lib/esm/sse/index.js +24 -0
  31. package/lib/esm/sse/index.js.map +1 -0
  32. package/lib/esm/utils.js +33 -0
  33. package/lib/esm/utils.js.map +1 -0
  34. package/lib/tsconfig.tsbuildinfo +1 -0
  35. package/lib/types/base.d.ts +67 -0
  36. package/lib/types/base.d.ts.map +1 -0
  37. package/lib/types/client.d.ts +36 -0
  38. package/lib/types/client.d.ts.map +1 -0
  39. package/lib/types/errors.d.ts +18 -0
  40. package/lib/types/errors.d.ts.map +1 -0
  41. package/lib/types/index.d.ts +5 -0
  42. package/lib/types/index.d.ts.map +1 -0
  43. package/lib/types/sse/EventSourceParserStream.d.ts +23 -0
  44. package/lib/types/sse/EventSourceParserStream.d.ts.map +1 -0
  45. package/lib/types/sse/TextDecoderStream.d.ts +8 -0
  46. package/lib/types/sse/TextDecoderStream.d.ts.map +1 -0
  47. package/lib/types/sse/index.d.ts +13 -0
  48. package/lib/types/sse/index.d.ts.map +1 -0
  49. package/lib/types/utils.d.ts +4 -0
  50. package/lib/types/utils.d.ts.map +1 -0
  51. package/package.json +8 -8
@@ -0,0 +1,185 @@
1
+ import { ConnectionError, ServerError } from "./errors.js";
2
+ import { sse } from "./sse/index.js";
3
+ import { buildQueryString, join, removeTrailingSlash } from "./utils.js";
4
+ export function fetchPromise(fetchImpl) {
5
+ if (fetchImpl) {
6
+ return Promise.resolve(fetchImpl);
7
+ }
8
+ else if (typeof globalThis.fetch === 'function') {
9
+ return Promise.resolve(globalThis.fetch);
10
+ }
11
+ else {
12
+ // install an error impl
13
+ return Promise.resolve(() => {
14
+ throw new Error('No Fetch implementation found');
15
+ });
16
+ }
17
+ }
18
+ export class ClientBase {
19
+ constructor(baseUrl, fetchImpl) {
20
+ this.errorFactory = (err) => err;
21
+ this.verboseErrors = true;
22
+ this.baseUrl = removeTrailingSlash(baseUrl);
23
+ this._fetch = fetchPromise(fetchImpl);
24
+ }
25
+ /**
26
+ * Can be subclassed to map to custom errors
27
+ * @param err
28
+ */
29
+ throwError(err) {
30
+ throw this.errorFactory(err);
31
+ }
32
+ getUrl(path) {
33
+ return removeTrailingSlash(join(this.baseUrl, path));
34
+ }
35
+ get(path, params) {
36
+ return this.request('GET', path, params);
37
+ }
38
+ del(path, params) {
39
+ return this.request('DELETE', path, params);
40
+ }
41
+ delete(path, params) {
42
+ return this.request('DELETE', path, params);
43
+ }
44
+ post(path, params) {
45
+ return this.request('POST', path, params);
46
+ }
47
+ put(path, params) {
48
+ return this.request('PUT', path, params);
49
+ }
50
+ /**
51
+ * You can customize the json parser by overriding this method
52
+ * @param text
53
+ * @returns
54
+ */
55
+ jsonParse(text) {
56
+ return JSON.parse(text);
57
+ }
58
+ /**
59
+ * Can be overridden to create the request
60
+ * @param fetch
61
+ * @param url
62
+ * @param init
63
+ * @returns
64
+ */
65
+ createRequest(url, init) {
66
+ return Promise.resolve(new Request(url, init));
67
+ }
68
+ createServerError(req, res, payload) {
69
+ const status = res.status;
70
+ let message = 'Server Error: ' + status;
71
+ if (payload) {
72
+ if (payload.message) {
73
+ message = String(payload.message);
74
+ }
75
+ else if (payload.error) {
76
+ if (typeof payload.error === 'string') {
77
+ message = String(payload.error);
78
+ }
79
+ else if (typeof payload.error.message === 'string') {
80
+ message = String(payload.error.message);
81
+ }
82
+ }
83
+ }
84
+ return new ServerError(message, req, res.status, payload, this.verboseErrors);
85
+ }
86
+ async readJSONPayload(res) {
87
+ return res.text().then(text => {
88
+ if (!text) {
89
+ return undefined;
90
+ }
91
+ else {
92
+ try {
93
+ return this.jsonParse(text);
94
+ }
95
+ catch (err) {
96
+ return {
97
+ status: res.status,
98
+ error: "Not a valid JSON payload",
99
+ message: err.message,
100
+ text: text,
101
+ };
102
+ }
103
+ }
104
+ }).catch((err) => {
105
+ return {
106
+ status: res.status,
107
+ error: "Unable to load response content",
108
+ message: err.message,
109
+ };
110
+ });
111
+ }
112
+ /**
113
+ * Subclasses You can override this to do something with the response
114
+ * @param res
115
+ */
116
+ handleResponse(req, res, params) {
117
+ res.url;
118
+ if (params && params.reader) {
119
+ if (params.reader === 'sse') {
120
+ return sse(res);
121
+ }
122
+ else {
123
+ return params.reader.call(this, res);
124
+ }
125
+ }
126
+ else {
127
+ return this.readJSONPayload(res).then((payload) => {
128
+ if (res.ok) {
129
+ return payload;
130
+ }
131
+ else {
132
+ this.throwError(this.createServerError(req, res, payload));
133
+ }
134
+ });
135
+ }
136
+ }
137
+ async request(method, path, params) {
138
+ let url = this.getUrl(path);
139
+ if (params?.query) {
140
+ url += '?' + buildQueryString(params.query);
141
+ }
142
+ const headers = this.headers ? Object.assign({}, this.headers) : {};
143
+ const paramsHeaders = params?.headers;
144
+ if (paramsHeaders) {
145
+ for (const key in paramsHeaders) {
146
+ headers[key.toLowerCase()] = paramsHeaders[key];
147
+ }
148
+ }
149
+ let body;
150
+ const payload = params?.payload;
151
+ if (payload) {
152
+ if (params && params.jsonPayload === false) {
153
+ body = payload;
154
+ }
155
+ else {
156
+ body = (typeof payload !== 'string') ? JSON.stringify(payload) : payload;
157
+ if (!('content-type' in headers)) {
158
+ headers['content-type'] = 'application/json';
159
+ }
160
+ }
161
+ }
162
+ const init = {
163
+ method: method,
164
+ headers: headers,
165
+ body: body,
166
+ };
167
+ const req = await this.createRequest(url, init);
168
+ return this._fetch.then(fetch => fetch(req).catch(err => {
169
+ console.error(`Failed to connect to ${url}`, err);
170
+ this.throwError(new ConnectionError(req, err));
171
+ }).then(res => {
172
+ return this.handleResponse(req, res, params);
173
+ }));
174
+ }
175
+ /**
176
+ * Expose the fetch method
177
+ * @param input
178
+ * @param init
179
+ * @returns
180
+ */
181
+ fetch(input, init) {
182
+ return this._fetch.then(fetch => fetch(input, init));
183
+ }
184
+ }
185
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ import { ClientBase } from "./base.js";
2
+ function isAuthorizationHeaderSet(headers) {
3
+ if (!headers)
4
+ return false;
5
+ return "authorization" in headers;
6
+ }
7
+ export class AbstractFetchClient extends ClientBase {
8
+ constructor(baseUrl, fetchImpl) {
9
+ super(baseUrl, fetchImpl);
10
+ this.baseUrl = baseUrl[baseUrl.length - 1] === '/' ? baseUrl.substring(0, baseUrl.length - 1) : baseUrl;
11
+ this.headers = this.initialHeaders;
12
+ }
13
+ get initialHeaders() {
14
+ return { accept: 'application/json' };
15
+ }
16
+ /**
17
+ * Install an auth callback. If the callback is undefined or null then remove the auth callback.
18
+ * @param authCb a function returning a promise that resolves to the value to use for the authorization header
19
+ * @returns the client instance
20
+ */
21
+ withAuthCallback(authCb) {
22
+ this._auth = authCb || undefined;
23
+ return this;
24
+ }
25
+ withErrorFactory(factory) {
26
+ this.errorFactory = factory;
27
+ return this;
28
+ }
29
+ withLang(locale) {
30
+ if (locale) {
31
+ this.headers['accept-language'] = locale;
32
+ }
33
+ else {
34
+ delete this.headers['accept-language'];
35
+ }
36
+ return this;
37
+ }
38
+ withHeaders(headers) {
39
+ const thisHeaders = this.headers;
40
+ for (const key in headers) {
41
+ const value = headers[key];
42
+ if (value != null) {
43
+ thisHeaders[key.toLowerCase()] = value;
44
+ }
45
+ }
46
+ return this;
47
+ }
48
+ setHeader(key, value) {
49
+ if (!value) {
50
+ delete this.headers[key.toLowerCase()];
51
+ }
52
+ else {
53
+ this.headers[key.toLowerCase()] = value;
54
+ }
55
+ }
56
+ async createRequest(url, init) {
57
+ if (this._auth && !isAuthorizationHeaderSet(init.headers)) {
58
+ const headers = (init.headers ? init.headers : {});
59
+ init.headers = headers;
60
+ const auth = await this._auth();
61
+ if (auth) {
62
+ init.headers["authorization"] = auth;
63
+ }
64
+ }
65
+ this.response = undefined;
66
+ const request = await super.createRequest(url, init);
67
+ this.onRequest && this.onRequest(request);
68
+ return request;
69
+ }
70
+ async handleResponse(req, res, params) {
71
+ this.response = res; // store last response
72
+ this.onResponse && this.onResponse(res, req);
73
+ return super.handleResponse(req, res, params);
74
+ }
75
+ }
76
+ export class FetchClient extends AbstractFetchClient {
77
+ constructor(baseUrl, fetchImpl) {
78
+ super(baseUrl, fetchImpl);
79
+ }
80
+ }
81
+ export class ApiTopic extends ClientBase {
82
+ constructor(client, basePath) {
83
+ //TODO we should refactor the way ClientBase and ApiTopic is created
84
+ // to avoid cloning all customizations
85
+ super(client.getUrl(basePath), client._fetch);
86
+ this.client = client;
87
+ this.createServerError = client.createServerError;
88
+ this.errorFactory = client.errorFactory;
89
+ this.verboseErrors = client.verboseErrors;
90
+ }
91
+ createRequest(url, init) {
92
+ return this.client.createRequest(url, init);
93
+ }
94
+ handleResponse(req, res, params) {
95
+ return this.client.handleResponse(req, res, params);
96
+ }
97
+ get headers() {
98
+ return this.client.headers;
99
+ }
100
+ }
101
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ function createMessage(message, request, status, payload, displayDetails) {
2
+ let msg = message;
3
+ if (displayDetails) {
4
+ msg += '\nRequest: ' + request.method + ' ' + request.url + ' => ' + status;
5
+ const details = payload?.details || payload?.error?.details;
6
+ if (details) {
7
+ const detailsType = typeof details;
8
+ if (detailsType === 'string') {
9
+ msg += '\nDetails: ' + details;
10
+ }
11
+ else if (detailsType === "object") {
12
+ msg += '\nDetails: ' + JSON.stringify(details, undefined, 2);
13
+ }
14
+ }
15
+ msg += '\nStack Trace: ';
16
+ }
17
+ return msg;
18
+ }
19
+ export class RequestError extends Error {
20
+ constructor(message, request, status, payload, displayDetails = true) {
21
+ super(createMessage(message, request, status, payload, displayDetails));
22
+ this.original_message = message;
23
+ this.request = request;
24
+ this.status = status;
25
+ this.payload = payload;
26
+ this.request_info = request.method + ' ' + request.url + ' => ' + status;
27
+ this.displayDetails = displayDetails;
28
+ }
29
+ get details() {
30
+ return this.payload?.details || this.payload?.error?.details;
31
+ }
32
+ }
33
+ export class ServerError extends RequestError {
34
+ constructor(message, req, status, payload, displayDetails = true) {
35
+ super(message, req, status, payload, displayDetails);
36
+ }
37
+ updateDetails(details) {
38
+ if (details !== this.details) {
39
+ return new ServerError(this.original_message, this.request, this.status, { ...this.payload, details }, this.displayDetails);
40
+ }
41
+ else {
42
+ return this;
43
+ }
44
+ }
45
+ }
46
+ export class ConnectionError extends RequestError {
47
+ constructor(req, err) {
48
+ super("Failed to connect to server: " + err.message, req, 0, err);
49
+ }
50
+ }
51
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AACA,SAAS,aAAa,CAAC,OAAe,EAAE,OAAgB,EAAE,MAAc,EAAE,OAAY,EAAE,cAAuB;IAC3G,IAAI,GAAG,GAAG,OAAO,CAAC;IAClB,IAAI,cAAc,EAAE,CAAC;QACjB,GAAG,IAAI,aAAa,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC;QAC5E,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC;QAC5D,IAAI,OAAO,EAAE,CAAC;YACV,MAAM,WAAW,GAAG,OAAO,OAAO,CAAC;YACnC,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;gBAC3B,GAAG,IAAI,aAAa,GAAG,OAAO,CAAC;YACnC,CAAC;iBAAM,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;gBAClC,GAAG,IAAI,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;YACjE,CAAC;QACL,CAAC;QACD,GAAG,IAAI,iBAAiB,CAAC;IAC7B,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED,MAAM,OAAO,YAAa,SAAQ,KAAK;IAOnC,YAAY,OAAe,EAAE,OAAgB,EAAE,MAAc,EAAE,OAAY,EAAE,cAAc,GAAG,IAAI;QAC9F,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;QACxE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC;QACzE,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACzC,CAAC;IAED,IAAI,OAAO;QACP,OAAO,IAAI,CAAC,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC;IACjE,CAAC;CAEJ;AAED,MAAM,OAAO,WAAY,SAAQ,YAAY;IACzC,YAAY,OAAe,EAAE,GAAY,EAAE,MAAc,EAAE,OAAY,EAAE,cAAc,GAAG,IAAI;QAC1F,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,CAAC;IACzD,CAAC;IAED,aAAa,CAAC,OAAY;QACtB,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3B,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QAC/H,CAAC;aAAM,CAAC;YACJ,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC;CACJ;AAED,MAAM,OAAO,eAAgB,SAAQ,YAAY;IAC7C,YAAY,GAAY,EAAE,GAAU;QAChC,KAAK,CAAC,+BAA+B,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;CACJ"}
@@ -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"}
@@ -0,0 +1,37 @@
1
+ import { createParser } from 'eventsource-parser';
2
+ /**
3
+ * We copied this file from the eventsource-parser/stream package and made it a part of our project.
4
+ * because importing the eventsource-parser/stream breaks tsc build when building the commonjs version
5
+ * see for a similar error:
6
+ * https://stackoverflow.com/questions/77280140/why-typescript-dont-see-exports-of-package-with-module-commonjs-and-moduleres
7
+ */
8
+ /**
9
+ * A TransformStream that ingests a stream of strings and produces a stream of ParsedEvents.
10
+ *
11
+ * @example
12
+ * ```
13
+ * const eventStream =
14
+ * response.body
15
+ * .pipeThrough(new TextDecoderStream())
16
+ * .pipeThrough(new EventSourceParserStream())
17
+ * ```
18
+ * @public
19
+ */
20
+ export class EventSourceParserStream extends TransformStream {
21
+ constructor() {
22
+ let parser;
23
+ super({
24
+ start(controller) {
25
+ parser = createParser((event) => {
26
+ if (event.type === 'event') {
27
+ controller.enqueue(event);
28
+ }
29
+ });
30
+ },
31
+ transform(chunk) {
32
+ parser.feed(chunk);
33
+ },
34
+ });
35
+ }
36
+ }
37
+ //# sourceMappingURL=EventSourceParserStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventSourceParserStream.js","sourceRoot":"","sources":["../../../src/sse/EventSourceParserStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA+D,MAAM,oBAAoB,CAAA;AAE9G;;;;;GAKG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,uBAAwB,SAAQ,eAAoC;IAC7E;QACI,IAAI,MAA0B,CAAA;QAE9B,KAAK,CAAC;YACF,KAAK,CAAC,UAAU;gBACZ,MAAM,GAAG,YAAY,CAAC,CAAC,KAAsC,EAAE,EAAE;oBAC7D,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBACzB,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;oBAC7B,CAAC;gBACL,CAAC,CAAC,CAAA;YACN,CAAC;YACD,SAAS,CAAC,KAAK;gBACX,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACtB,CAAC;SACJ,CAAC,CAAA;IACN,CAAC;CACJ"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Decode a stream of bytes into a stream of characters.
3
+ * Some javascript env like Bun.js doesn't supports the TextDecoderStream (as for jan 2024)
4
+ * This is a polyfill for bunJS
5
+ */
6
+ let _TextDecoderStream;
7
+ if (globalThis.TextDecoderStream && typeof globalThis.TextDecoderStream === 'function') {
8
+ _TextDecoderStream = globalThis.TextDecoderStream;
9
+ }
10
+ else {
11
+ class MyTextDecoderStream extends TransformStream {
12
+ constructor(encoding = "utf-8", { fatal = false, ignoreBOM = false } = {}) {
13
+ super(new TextDecodeTransformer(new TextDecoder(encoding, { fatal, ignoreBOM })));
14
+ this._options = { fatal, ignoreBOM, encoding };
15
+ }
16
+ get encoding() {
17
+ return this._options.encoding;
18
+ }
19
+ get fatal() {
20
+ return this._options.fatal;
21
+ }
22
+ get ignoreBOM() {
23
+ return this._options.ignoreBOM;
24
+ }
25
+ }
26
+ class TextDecodeTransformer {
27
+ constructor(decoder) {
28
+ this.decoder = decoder;
29
+ }
30
+ transform(chunk, controller) {
31
+ if (!(chunk instanceof ArrayBuffer || ArrayBuffer.isView(chunk))) {
32
+ throw new TypeError("Input must be a compatible with: ArrayBuffer | Uint8Array");
33
+ }
34
+ const text = this.decoder.decode(chunk, { stream: true });
35
+ if (text.length !== 0) {
36
+ controller.enqueue(text);
37
+ }
38
+ }
39
+ flush(controller) {
40
+ const text = this.decoder.decode();
41
+ if (text.length !== 0) {
42
+ controller.enqueue(text);
43
+ }
44
+ }
45
+ }
46
+ _TextDecoderStream = MyTextDecoderStream;
47
+ }
48
+ export { _TextDecoderStream as TextDecoderStream };
49
+ //# sourceMappingURL=TextDecoderStream.js.map
@@ -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;QAM/E,YAAY,QAAQ,GAAG,OAAO,EAAE,EAAE,KAAK,GAAG,KAAK,EAAE,SAAS,GAAG,KAAK,KAG9D,EAAE;YACF,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;QAGvB,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,mBAA0B,CAAC;AACpD,CAAC;AAED,OAAO,EAAE,kBAAkB,IAAI,iBAAiB,EAAE,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { TextDecoderStream } from "./TextDecoderStream.js";
2
+ import { EventSourceParserStream } from "./EventSourceParserStream.js";
3
+ /**
4
+ * A SSE response reader.
5
+ * Usage client.get('/path', {reader: sse}) or client.post('/path', {reader: sse})
6
+ * where sse is this function
7
+ * @param response
8
+ * @returns
9
+ */
10
+ export async function sse(response) {
11
+ if (!response.ok) {
12
+ const text = await response.text();
13
+ const error = new Error("SSE error: " + response.status + ". Content:\n" + text);
14
+ error.status = response.status;
15
+ throw error;
16
+ }
17
+ if (!response.body) {
18
+ throw new Error('No body in response');
19
+ }
20
+ return response.body.pipeThrough(new TextDecoderStream()).pipeThrough(new EventSourceParserStream());
21
+ }
22
+ // re-export TextDecoderStream (in case it was polyfilled)
23
+ export { TextDecoderStream };
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/sse/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAIvE;;;;;;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,aAAa,GAAG,QAAQ,CAAC,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC,CAAC;QAChF,KAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QACxC,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,CAAA"}
@@ -0,0 +1,33 @@
1
+ export function buildQueryString(query) {
2
+ const parts = [];
3
+ for (const key of Object.keys(query)) {
4
+ const val = query[key];
5
+ if (val != null) {
6
+ parts.push(encodeURIComponent(key) + "=" + encodeURIComponent(String(val)));
7
+ }
8
+ }
9
+ return parts.join("&");
10
+ }
11
+ export function join(left, right) {
12
+ if (left.endsWith('/')) {
13
+ if (right.startsWith('/')) {
14
+ return left + right.substring(1);
15
+ }
16
+ else {
17
+ return left + right;
18
+ }
19
+ }
20
+ else if (right.startsWith('/')) {
21
+ return left + right;
22
+ }
23
+ else {
24
+ return left + '/' + right;
25
+ }
26
+ }
27
+ export function removeTrailingSlash(path) {
28
+ if (path[path.length - 1] === '/') {
29
+ return path.slice(0, -1);
30
+ }
31
+ return path;
32
+ }
33
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,gBAAgB,CAAC,KAAU;IACvC,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,kBAAkB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,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,IAAI,GAAG,GAAG,GAAG,KAAK,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"}