directual-api 1.4.1 → 1.5.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.
package/README.md CHANGED
@@ -2,60 +2,130 @@
2
2
  The Directual Web Library serves as the base JavaScript library for Directual based projects.
3
3
  https://directual.com/
4
4
 
5
- ## Support
6
- * Explorer 11
7
- * Chrome 43+
8
- * Node 8.9+
9
-
10
5
  ## Install
11
6
  ```sh
12
7
  npm install directual-api
13
8
  ```
14
9
 
15
- ## Usage in Node
10
+ ## Usage
11
+
16
12
  ```js
17
- const directual = require('directual-api');
13
+ const Directual = require('directual-api');
18
14
 
19
- const config = {
15
+ const api = new Directual.default({
20
16
  appID: '...',
21
- //apiHost: 'http://localhost:8081'
22
- }
23
- const api = new Directual.default(config)
17
+ // apiHost: 'https://api.directual.com' // optional, default
18
+ // streamApiHost: 'https://api.alfa.directual.com' // optional, default (streaming is on alfa for now)
19
+ });
20
+ ```
21
+
22
+ ### Authentication
24
23
 
24
+ ```js
25
+ // Login
26
+ api.auth.login('username', 'password').then((token) => {
27
+ console.log('sessionID: ' + token.sessionID);
28
+ });
29
+
30
+ // Check session
31
+ api.auth.isAuthorize(sessionID, (isAuth, token) => {
32
+ console.log('authorized:', isAuth);
33
+ });
34
+
35
+ // Logout
36
+ api.auth.logout(sessionID);
37
+ ```
25
38
 
26
- //example auth user
27
- api.auth.login("test", "test").then((res)=>{
28
- console.log("sessionID" + res.sessionID)
29
- })
39
+ ### Read data (GET)
30
40
 
31
- //example read data from API-endpoint with name `test` from structure UsageHistory
41
+ ```js
32
42
  api
33
43
  .structure('UsageHistory')
34
- .getData('test', {sessionID:"", page:0})
44
+ .getData('test', { sessionID: '...', page: 0 })
35
45
  .then((response) => {
36
- console.dir(response, { depth: null })
46
+ console.dir(response, { depth: null });
37
47
  })
38
48
  .catch((e) => {
39
- if(e.response.status === 403){
40
- //todo: api endpoint required authorisation
49
+ if (e.response.status === 403) {
50
+ // API endpoint requires authorization
41
51
  }
42
- if(e.response.status === 400){
43
- //todo: api endpoint not found
52
+ if (e.response.status === 400) {
53
+ // API endpoint not found
44
54
  }
45
- })
55
+ });
56
+ ```
57
+
58
+ ### Write data (POST)
46
59
 
47
- //example for write data {id:1} to Api-endpoint with name `test` from structure UsageHistory
60
+ ```js
48
61
  api
49
62
  .structure('UsageHistory')
50
- .setData('test', { id: 1 }, {sessionID:""})
63
+ .setData('test', { id: 1 }, { sessionID: '...' })
51
64
  .then((response) => {
52
- console.dir(response, { depth: null })
65
+ console.dir(response, { depth: null });
53
66
  })
54
67
  .catch((e) => {
55
68
  if (e.response.status === 403) {
56
- //todo: api endpoint required authorisation
69
+ // API endpoint requires authorization
57
70
  }
58
71
  if (e.response.status === 400) {
59
- //todo: api endpoint not found
72
+ // API endpoint not found
60
73
  }
61
- })
74
+ });
75
+ ```
76
+
77
+ ### Streaming (SSE)
78
+
79
+ Streaming methods use Server-Sent Events over HTTP.
80
+ Endpoint URL: `/good/api/v5/stream/{structure}/{method}` (instead of `/data/`).
81
+ Default stream host: `https://api.alfa.directual.com` (override via `streamApiHost` config).
82
+
83
+ #### POST stream (`setStream`)
84
+
85
+ ```js
86
+ const stream = api
87
+ .structure('UsageHistory')
88
+ .setStream(
89
+ 'test',
90
+ { prompt: 'hello' }, // request body
91
+ { sessionID: '...' }, // query params
92
+ {
93
+ onData: (data, event) => {
94
+ // event: 'start' | 'chunk' | 'done'
95
+ // data is auto-parsed from JSON (double-encoding handled)
96
+ console.log(event, data);
97
+ },
98
+ onError: (error) => {
99
+ console.error('stream error:', error);
100
+ },
101
+ onComplete: () => {
102
+ console.log('stream finished');
103
+ },
104
+ },
105
+ );
106
+
107
+ // abort the stream at any time
108
+ stream.abort();
109
+
110
+ // or await completion
111
+ stream.promise.then(() => {
112
+ console.log('done');
113
+ });
114
+ ```
115
+
116
+ #### Types
117
+
118
+ ```ts
119
+ import { StreamCallbacks, StreamResponse } from 'directual-api';
120
+
121
+ interface StreamCallbacks {
122
+ onData: (data: any, event: string) => void;
123
+ onError?: (error: Error) => void;
124
+ onComplete?: () => void;
125
+ }
126
+
127
+ interface StreamResponse {
128
+ abort: () => void;
129
+ promise: Promise<void>;
130
+ }
131
+ ```
package/lib/api.js CHANGED
@@ -22,6 +22,7 @@ exports.__useDefault = exports.Structure = exports.Config = void 0;
22
22
  var endpoint_1 = __importDefault(require("./endpoint"));
23
23
  var auth_1 = require("./auth");
24
24
  var defaultApiHost = 'https://api.directual.com';
25
+ var defaultStreamApiHost = 'https://api.alfa.directual.com';
25
26
  var Config = /** @class */ (function () {
26
27
  function Config(config) {
27
28
  this.config = config;
@@ -47,6 +48,9 @@ var Api = /** @class */ (function () {
47
48
  if (!config.apiHost) {
48
49
  this.config.apiHost = defaultApiHost;
49
50
  }
51
+ if (!config.streamApiHost) {
52
+ this.config.streamApiHost = defaultStreamApiHost;
53
+ }
50
54
  this.auth = new auth_1.Auth(config);
51
55
  }
52
56
  Api.prototype.structure = function (name) {
package/lib/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAEA,wDAAkC;AAClC,+BAA8B;AAC9B,IAAM,cAAc,GAAG,2BAA2B,CAAC;AAEnD;IAGE,gBAAY,MAAW;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IACH,aAAC;AAAD,CAAC,AAND,IAMC;AANY,wBAAM;AAQnB;IAA+B,6BAAQ;IACrC,mBAAY,IAAY,EAAE,MAAW;QACnC,YAAA,MAAK,WAAE,SAAC;QAER,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;;IACvB,CAAC;IACH,gBAAC;AAAD,CAAC,AAPD,CAA+B,kBAAQ,GAOtC;AAPY,8BAAS;AAStB;IAIE,aAAY,MAAW;QAHvB,WAAM,GAAQ,EAAE,CAAC;QAIf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,cAAc,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,WAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,uBAAS,GAAT,UAAU,IAAY;QACpB,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IACH,UAAC;AAAD,CAAC,AAfD,IAeC;AAED,kBAAe,GAAG,CAAC;AACR,QAAA,YAAY,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAEA,wDAAkC;AAClC,+BAA8B;AAC9B,IAAM,cAAc,GAAG,2BAA2B,CAAC;AACnD,IAAM,oBAAoB,GAAG,gCAAgC,CAAC;AAE9D;IAGE,gBAAY,MAAW;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IACH,aAAC;AAAD,CAAC,AAND,IAMC;AANY,wBAAM;AAQnB;IAA+B,6BAAQ;IACrC,mBAAY,IAAY,EAAE,MAAW;QACnC,YAAA,MAAK,WAAE,SAAC;QAER,KAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,KAAI,CAAC,MAAM,GAAG,MAAM,CAAC;;IACvB,CAAC;IACH,gBAAC;AAAD,CAAC,AAPD,CAA+B,kBAAQ,GAOtC;AAPY,8BAAS;AAStB;IAIE,aAAY,MAAW;QAHvB,WAAM,GAAQ,EAAE,CAAC;QAIf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,cAAc,CAAC;QACvC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAC1B,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,oBAAoB,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,WAAI,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED,uBAAS,GAAT,UAAU,IAAY;QACpB,OAAO,IAAI,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IACH,UAAC;AAAD,CAAC,AAlBD,IAkBC;AAED,kBAAe,GAAG,CAAC;AACR,QAAA,YAAY,GAAG,IAAI,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import Api from './api';
2
2
  export { compareStringByField, extractResponseArray, extractResponseData, extractResponseObject, isDef, isEmptyString, isNotEmpty, isNotEmptyString, numberOfDigitsGreaterThan, stringToArray, } from './utils';
3
+ export { StreamCallbacks, StreamResponse } from './endpoint';
3
4
  export { EventType } from './events/EventType';
4
5
  export { KeyCodes } from './events/KeyCodes';
5
6
  export { HttpStatus, isSuccess } from './net/HttpStatus';
@@ -1 +1 @@
1
- {"version":3,"file":"directual.js","sourceRoot":"","sources":["../src/directual.ts"],"names":[],"mappings":";;;;;;AAAA,8CAA0C;AAG1C,iCAWiB;AAVf,6GAAA,oBAAoB,OAAA;AACpB,6GAAA,oBAAoB,OAAA;AACpB,4GAAA,mBAAmB,OAAA;AACnB,8GAAA,qBAAqB,OAAA;AACrB,8FAAA,KAAK,OAAA;AACL,sGAAA,aAAa,OAAA;AACb,mGAAA,UAAU,OAAA;AACV,yGAAA,gBAAgB,OAAA;AAChB,kHAAA,yBAAyB,OAAA;AACzB,sGAAA,aAAa,OAAA;AAGf,gDAA+C;AAAtC,sGAAA,SAAS,OAAA;AAClB,8CAA6C;AAApC,oGAAA,QAAQ,OAAA;AAEjB,+CAAyD;AAAhD,wGAAA,UAAU,OAAA;AAAE,uGAAA,SAAS,OAAA;AAE9B,kBAAe,aAAG,CAAC"}
1
+ {"version":3,"file":"directual.js","sourceRoot":"","sources":["../src/directual.ts"],"names":[],"mappings":";;;;;;AAAA,8CAA0C;AAG1C,iCAWiB;AAVf,6GAAA,oBAAoB,OAAA;AACpB,6GAAA,oBAAoB,OAAA;AACpB,4GAAA,mBAAmB,OAAA;AACnB,8GAAA,qBAAqB,OAAA;AACrB,8FAAA,KAAK,OAAA;AACL,sGAAA,aAAa,OAAA;AACb,mGAAA,UAAU,OAAA;AACV,yGAAA,gBAAgB,OAAA;AAChB,kHAAA,yBAAyB,OAAA;AACzB,sGAAA,aAAa,OAAA;AAKf,gDAA+C;AAAtC,sGAAA,SAAS,OAAA;AAClB,8CAA6C;AAApC,oGAAA,QAAQ,OAAA;AAEjB,+CAAyD;AAAhD,wGAAA,UAAU,OAAA;AAAE,uGAAA,SAAS,OAAA;AAE9B,kBAAe,aAAG,CAAC"}
package/lib/endpoint.d.ts CHANGED
@@ -1,3 +1,14 @@
1
+ /** Коллбэки для SSE-стрима */
2
+ export interface StreamCallbacks {
3
+ onData: (data: any, event: string) => void;
4
+ onError?: (error: Error) => void;
5
+ onComplete?: () => void;
6
+ }
7
+ /** Управление стримом: abort + промис завершения */
8
+ export interface StreamResponse {
9
+ abort: () => void;
10
+ promise: Promise<void>;
11
+ }
1
12
  export default class Endpoint {
2
13
  name: string;
3
14
  config: any;
@@ -13,4 +24,20 @@ export default class Endpoint {
13
24
  * @return {Promise}
14
25
  */
15
26
  setData(name: string, data?: object, params?: object): Promise<any>;
27
+ /**
28
+ * POST-стрим через SSE.
29
+ * URL: /good/api/v5/stream/{структура}/{метод}
30
+ *
31
+ * @return {StreamResponse} — abort() для отмены, promise для ожидания завершения
32
+ */
33
+ setStream(name: string, data?: object, params?: object, callbacks?: StreamCallbacks): StreamResponse;
34
+ /**
35
+ * Собирает URL для стрим-эндпоинта с query-параметрами
36
+ */
37
+ private buildStreamUrl;
38
+ /**
39
+ * Читает SSE-стрим, парсит события, дёргает коллбэки.
40
+ * При abort тихо завершается без ошибки.
41
+ */
42
+ private processStream;
16
43
  }
package/lib/endpoint.js CHANGED
@@ -10,6 +10,42 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
24
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
13
49
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
50
  return (mod && mod.__esModule) ? mod : { "default": mod };
15
51
  };
@@ -23,6 +59,64 @@ var axiosInstance = axios_1.default.create({
23
59
  },
24
60
  },
25
61
  });
62
+ /**
63
+ * Парсит буфер SSE-событий.
64
+ * Разбивает по двойному переводу строки, вытаскивает event: и data: поля.
65
+ * Directual шлёт двойную JSON-кодировку (data:"<json-строка>"),
66
+ * поэтому парсим рекурсивно — если после первого parse получили строку, парсим ещё раз.
67
+ */
68
+ function parseSSEBuffer(buffer) {
69
+ var events = [];
70
+ var parts = buffer.split('\n\n');
71
+ // Последний кусок может быть незавершённым
72
+ var remaining = parts.pop() || '';
73
+ for (var i = 0; i < parts.length; i++) {
74
+ var part = parts[i];
75
+ if (!part.trim())
76
+ continue;
77
+ var lines = part.split('\n');
78
+ var dataLines = [];
79
+ var eventType = 'message';
80
+ for (var j = 0; j < lines.length; j++) {
81
+ var line = lines[j];
82
+ // event-тип (start, chunk, done)
83
+ if (line.indexOf('event: ') === 0) {
84
+ eventType = line.slice(7).trim();
85
+ }
86
+ else if (line.indexOf('event:') === 0) {
87
+ eventType = line.slice(6).trim();
88
+ // data-поле
89
+ }
90
+ else if (line.indexOf('data: ') === 0) {
91
+ dataLines.push(line.slice(6));
92
+ }
93
+ else if (line.indexOf('data:') === 0) {
94
+ dataLines.push(line.slice(5));
95
+ }
96
+ }
97
+ if (dataLines.length > 0) {
98
+ var rawData = dataLines.join('\n');
99
+ var parsed = rawData;
100
+ try {
101
+ parsed = JSON.parse(rawData);
102
+ // Двойная кодировка — если получили строку, пробуем распарсить ещё раз
103
+ if (typeof parsed === 'string') {
104
+ try {
105
+ parsed = JSON.parse(parsed);
106
+ }
107
+ catch (e) {
108
+ // Не JSON внутри — ну и хуй с ним, оставляем строку
109
+ }
110
+ }
111
+ }
112
+ catch (e) {
113
+ // Совсем не JSON — отдаём как есть
114
+ }
115
+ events.push({ type: eventType, data: parsed });
116
+ }
117
+ }
118
+ return { events: events, remaining: remaining };
119
+ }
26
120
  var Endpoint = /** @class */ (function () {
27
121
  function Endpoint() {
28
122
  }
@@ -52,6 +146,126 @@ var Endpoint = /** @class */ (function () {
52
146
  })
53
147
  .then(utils_1.extractResponseData);
54
148
  };
149
+ /**
150
+ * POST-стрим через SSE.
151
+ * URL: /good/api/v5/stream/{структура}/{метод}
152
+ *
153
+ * @return {StreamResponse} — abort() для отмены, promise для ожидания завершения
154
+ */
155
+ Endpoint.prototype.setStream = function (name, data, params, callbacks) {
156
+ var url = this.buildStreamUrl(name, params);
157
+ var controller = new AbortController();
158
+ var promise = this.processStream(url, {
159
+ method: 'POST',
160
+ headers: {
161
+ 'Content-Type': 'application/json',
162
+ Accept: 'text/event-stream',
163
+ },
164
+ body: data ? JSON.stringify(data) : undefined,
165
+ signal: controller.signal,
166
+ }, callbacks);
167
+ return { abort: function () { return controller.abort(); }, promise: promise };
168
+ };
169
+ /**
170
+ * Собирает URL для стрим-эндпоинта с query-параметрами
171
+ */
172
+ Endpoint.prototype.buildStreamUrl = function (method, params) {
173
+ var allParams = __assign(__assign({}, this.config), params);
174
+ var query = new URLSearchParams();
175
+ Object.keys(allParams).forEach(function (key) {
176
+ if (allParams[key] !== undefined && allParams[key] !== null) {
177
+ query.append(key, String(allParams[key]));
178
+ }
179
+ });
180
+ return "".concat(this.config.streamApiHost, "/good/api/v5/stream/").concat(this.name, "/").concat(method, "?").concat(query.toString());
181
+ };
182
+ /**
183
+ * Читает SSE-стрим, парсит события, дёргает коллбэки.
184
+ * При abort тихо завершается без ошибки.
185
+ */
186
+ Endpoint.prototype.processStream = function (url, init, callbacks) {
187
+ return __awaiter(this, void 0, void 0, function () {
188
+ var response, error_1, err, err, body, err, reader, decoder, buffer, chunk, parsed, i, parsed, i, error_2, err;
189
+ return __generator(this, function (_a) {
190
+ switch (_a.label) {
191
+ case 0:
192
+ _a.trys.push([0, 2, , 3]);
193
+ return [4 /*yield*/, fetch(url, init)];
194
+ case 1:
195
+ response = _a.sent();
196
+ return [3 /*break*/, 3];
197
+ case 2:
198
+ error_1 = _a.sent();
199
+ if (error_1 instanceof Error && error_1.name === 'AbortError')
200
+ return [2 /*return*/];
201
+ err = error_1 instanceof Error ? error_1 : new Error(String(error_1));
202
+ if (callbacks && callbacks.onError)
203
+ callbacks.onError(err);
204
+ throw err;
205
+ case 3:
206
+ if (!response.ok) {
207
+ err = new Error("HTTP ".concat(response.status, ": ").concat(response.statusText));
208
+ if (callbacks && callbacks.onError)
209
+ callbacks.onError(err);
210
+ throw err;
211
+ }
212
+ body = response.body;
213
+ if (!body) {
214
+ err = new Error('Response body is null — стрим недоступен');
215
+ if (callbacks && callbacks.onError)
216
+ callbacks.onError(err);
217
+ throw err;
218
+ }
219
+ reader = body.getReader();
220
+ decoder = new TextDecoder();
221
+ buffer = '';
222
+ _a.label = 4;
223
+ case 4:
224
+ _a.trys.push([4, 8, , 9]);
225
+ _a.label = 5;
226
+ case 5:
227
+ if (!true) return [3 /*break*/, 7];
228
+ return [4 /*yield*/, reader.read()];
229
+ case 6:
230
+ chunk = _a.sent();
231
+ if (chunk.done)
232
+ return [3 /*break*/, 7];
233
+ buffer += decoder.decode(chunk.value, { stream: true });
234
+ parsed = parseSSEBuffer(buffer);
235
+ buffer = parsed.remaining;
236
+ for (i = 0; i < parsed.events.length; i++) {
237
+ if (callbacks && callbacks.onData) {
238
+ callbacks.onData(parsed.events[i].data, parsed.events[i].type);
239
+ }
240
+ }
241
+ return [3 /*break*/, 5];
242
+ case 7:
243
+ // Дочитываем остатки буфера
244
+ if (buffer.trim()) {
245
+ parsed = parseSSEBuffer(buffer + '\n\n');
246
+ for (i = 0; i < parsed.events.length; i++) {
247
+ if (callbacks && callbacks.onData) {
248
+ callbacks.onData(parsed.events[i].data, parsed.events[i].type);
249
+ }
250
+ }
251
+ }
252
+ if (callbacks && callbacks.onComplete) {
253
+ callbacks.onComplete();
254
+ }
255
+ return [3 /*break*/, 9];
256
+ case 8:
257
+ error_2 = _a.sent();
258
+ if (error_2 instanceof Error && error_2.name === 'AbortError')
259
+ return [2 /*return*/];
260
+ err = error_2 instanceof Error ? error_2 : new Error(String(error_2));
261
+ if (callbacks && callbacks.onError)
262
+ callbacks.onError(err);
263
+ throw err;
264
+ case 9: return [2 /*return*/];
265
+ }
266
+ });
267
+ });
268
+ };
55
269
  return Endpoint;
56
270
  }());
57
271
  exports.default = Endpoint;
@@ -1 +1 @@
1
- {"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../src/endpoint.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iCAA8C;AAC9C,gDAA0B;AAE1B,IAAM,aAAa,GAAG,eAAK,CAAC,MAAM,CAAC;IACjC,OAAO,EAAE;QACP,IAAI,EAAE;YACJ,cAAc,EAAE,kBAAkB;SACnC;KACF;CACF,CAAC,CAAC;AAEH;IAAA;IAqCA,CAAC;IAjCC;;;;OAIG;IACH,0BAAO,GAAP,UAAQ,IAAY,EAAE,MAAe,EAAE,OAAgB;QACrD,OAAO,aAAa;aACjB,OAAO,YACN,MAAM,EAAE,KAAK,EACb,GAAG,EAAE,4BAAqB,IAAI,CAAC,IAAI,cAAI,IAAI,CAAE,EAC7C,OAAO,EAAE,UAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAE,EACjC,MAAM,wBAAO,IAAI,CAAC,MAAM,GAAK,MAAM,KAChC,OAAO,EACV;aACD,IAAI,CAAC,2BAAmB,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,0BAAO,GAAP,UAAQ,IAAY,EAAE,IAAa,EAAE,MAAe;QAClD,OAAO,aAAa;aACjB,OAAO,CAAC;YACP,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,4BAAqB,IAAI,CAAC,IAAI,cAAI,IAAI,CAAE;YAC7C,OAAO,EAAE,UAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAE;YACjC,MAAM,wBAAO,IAAI,CAAC,MAAM,GAAK,MAAM,CAAE;YACrC,IAAI,MAAA;SACL,CAAC;aACD,IAAI,CAAC,2BAAmB,CAAC,CAAC;IAC/B,CAAC;IACH,eAAC;AAAD,CAAC,AArCD,IAqCC"}
1
+ {"version":3,"file":"endpoint.js","sourceRoot":"","sources":["../src/endpoint.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "directual-api",
3
- "version": "1.4.1",
3
+ "version": "1.5.0",
4
4
  "description": "Directual API for JavaScript",
5
5
  "main": "lib/directual.js",
6
6
  "typings": "lib/directual.d.ts",