directual-api 1.4.1 → 1.5.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.
package/README.md CHANGED
@@ -2,60 +2,191 @@
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
+ ```
24
21
 
22
+ ### Authentication
25
23
 
26
- //example auth user
27
- api.auth.login("test", "test").then((res)=>{
28
- console.log("sessionID" + res.sessionID)
29
- })
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
+ });
30
34
 
31
- //example read data from API-endpoint with name `test` from structure UsageHistory
35
+ // Logout
36
+ api.auth.logout(sessionID);
37
+ ```
38
+
39
+ ### Read data (GET)
40
+
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
+ Default stream host: `https://api.alfa.directual.com` (override via `streamApiHost` config).
80
+
81
+ #### Init/Subscribe streaming (`initStream`) — recommended
82
+
83
+ Two-phase mechanism: POST to init returns a `streamId`, then we subscribe to the SSE stream.
84
+
85
+ - Init: `POST /good/api/v5/stream/init/{structure}/{method}`
86
+ - Subscribe: `GET /api/v5/stream/subscribe/{streamId}`
87
+
88
+ ```js
89
+ const stream = api
90
+ .structure('ai_actions')
91
+ .initStream(
92
+ 'platformAIActions',
93
+ { prompt: 'hello' }, // request body
94
+ { sessionID: '...' }, // query params
95
+ {
96
+ onData: (data, event) => {
97
+ console.log(event, data);
98
+ },
99
+ onError: (error) => {
100
+ console.error('stream error:', error);
101
+ },
102
+ onComplete: () => {
103
+ console.log('stream finished');
104
+ },
105
+ },
106
+ );
107
+
108
+ // abort the stream at any time
109
+ stream.abort();
110
+
111
+ // await completion
112
+ stream.promise.then(() => console.log('done'));
113
+
114
+ // get the streamId (resolves after init completes)
115
+ stream.streamId.then(id => console.log('stream id:', id));
116
+ ```
117
+
118
+ You can also use the two phases separately:
119
+
120
+ ```js
121
+ // Phase 1: init — get streamId
122
+ const streamId = await api
123
+ .structure('ai_actions')
124
+ .streamInit('platformAIActions', { prompt: 'hello' }, { sessionID: '...' });
125
+
126
+ // Phase 2: subscribe — read SSE events
127
+ const stream = api
128
+ .structure('ai_actions')
129
+ .streamSubscribe(streamId, {
130
+ onData: (data, event) => console.log(event, data),
131
+ onComplete: () => console.log('done'),
132
+ });
133
+ ```
134
+
135
+ #### Legacy: single-request streaming (`setStream`)
136
+
137
+ Single POST where the response body IS the SSE stream.
138
+ Endpoint: `POST /good/api/v5/stream/{structure}/{method}`.
139
+
140
+ ```js
141
+ const stream = api
142
+ .structure('UsageHistory')
143
+ .setStream(
144
+ 'test',
145
+ { prompt: 'hello' }, // request body
146
+ { sessionID: '...' }, // query params
147
+ {
148
+ onData: (data, event) => {
149
+ // event: 'start' | 'chunk' | 'done'
150
+ // data is auto-parsed from JSON (double-encoding handled)
151
+ console.log(event, data);
152
+ },
153
+ onError: (error) => {
154
+ console.error('stream error:', error);
155
+ },
156
+ onComplete: () => {
157
+ console.log('stream finished');
158
+ },
159
+ },
160
+ );
161
+
162
+ // abort the stream at any time
163
+ stream.abort();
164
+
165
+ // or await completion
166
+ stream.promise.then(() => {
167
+ console.log('done');
168
+ });
169
+ ```
170
+
171
+ #### Types
172
+
173
+ ```ts
174
+ import { InitStreamResponse, StreamCallbacks, StreamResponse } from 'directual-api';
175
+
176
+ interface StreamCallbacks {
177
+ onData: (data: any, event: string) => void;
178
+ onError?: (error: Error) => void;
179
+ onComplete?: () => void;
180
+ }
181
+
182
+ interface StreamResponse {
183
+ abort: () => void;
184
+ promise: Promise<void>;
185
+ }
186
+
187
+ interface InitStreamResponse {
188
+ abort: () => void;
189
+ promise: Promise<void>;
190
+ streamId: Promise<string>;
191
+ }
192
+ ```
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;
@@ -44,9 +45,12 @@ var Api = /** @class */ (function () {
44
45
  function Api(config) {
45
46
  this.config = {};
46
47
  this.config = config;
47
- if (!config.apiHost) {
48
+ if (config.apiHost === undefined) {
48
49
  this.config.apiHost = defaultApiHost;
49
50
  }
51
+ if (config.streamApiHost === undefined) {
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,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,cAAc,CAAC;QACvC,CAAC;QACD,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACvC,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 { InitStreamResponse, 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,20 @@
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
+ }
12
+ /** Управление стримом через init/subscribe: abort + промис + streamId */
13
+ export interface InitStreamResponse {
14
+ abort: () => void;
15
+ promise: Promise<void>;
16
+ streamId: Promise<string>;
17
+ }
1
18
  export default class Endpoint {
2
19
  name: string;
3
20
  config: any;
@@ -13,4 +30,42 @@ export default class Endpoint {
13
30
  * @return {Promise}
14
31
  */
15
32
  setData(name: string, data?: object, params?: object): Promise<any>;
33
+ /**
34
+ * POST-стрим через SSE.
35
+ * URL: /good/api/v5/stream/{структура}/{метод}
36
+ *
37
+ * @return {StreamResponse} — abort() для отмены, promise для ожидания завершения
38
+ */
39
+ setStream(name: string, data?: object, params?: object, callbacks?: StreamCallbacks): StreamResponse;
40
+ /**
41
+ * Инициализация стрима (фаза 1 нового механизма).
42
+ * POST на /good/api/v5/stream/init/{структура}/{метод} → streamId
43
+ */
44
+ streamInit(name: string, data?: object, params?: object): Promise<string>;
45
+ /**
46
+ * Подписка на стрим по streamId (фаза 2 нового механизма).
47
+ * GET на /api/v5/stream/subscribe/{streamId}
48
+ */
49
+ streamSubscribe(streamId: string, callbacks?: StreamCallbacks): StreamResponse;
50
+ /**
51
+ * Стрим через init/subscribe (новый механизм Directual).
52
+ * 1. POST на /good/api/v5/stream/init/{структура}/{метод} → streamId
53
+ * 2. GET на /api/v5/stream/subscribe/{streamId} → SSE-стрим
54
+ *
55
+ * Объединяет обе фазы, API коллбэков идентичен setStream.
56
+ */
57
+ initStream(name: string, data?: object, params?: object, callbacks?: StreamCallbacks): InitStreamResponse;
58
+ /**
59
+ * Собирает URL для стрим-эндпоинта с query-параметрами
60
+ */
61
+ private buildStreamUrl;
62
+ /**
63
+ * URL для init-эндпоинта: /good/api/v5/stream/init/{структура}/{метод}
64
+ */
65
+ private buildStreamInitUrl;
66
+ /**
67
+ * Читает SSE-стрим, парсит события, дёргает коллбэки.
68
+ * При abort тихо завершается без ошибки.
69
+ */
70
+ private processStream;
16
71
  }
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,288 @@ 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
+ * Инициализация стрима (фаза 1 нового механизма).
171
+ * POST на /good/api/v5/stream/init/{структура}/{метод} → streamId
172
+ */
173
+ Endpoint.prototype.streamInit = function (name, data, params) {
174
+ return __awaiter(this, void 0, void 0, function () {
175
+ var url, response, result;
176
+ return __generator(this, function (_a) {
177
+ switch (_a.label) {
178
+ case 0:
179
+ url = this.buildStreamInitUrl(name, params);
180
+ return [4 /*yield*/, fetch(url, {
181
+ method: 'POST',
182
+ headers: { 'Content-Type': 'application/json' },
183
+ body: data ? JSON.stringify(data) : undefined,
184
+ })];
185
+ case 1:
186
+ response = _a.sent();
187
+ if (!response.ok) {
188
+ throw new Error("HTTP ".concat(response.status, ": ").concat(response.statusText));
189
+ }
190
+ return [4 /*yield*/, response.json()];
191
+ case 2:
192
+ result = _a.sent();
193
+ if (typeof result === 'string')
194
+ return [2 /*return*/, result];
195
+ if (result && result.streamId)
196
+ return [2 /*return*/, result.streamId];
197
+ throw new Error('streamInit: streamId не найден в ответе');
198
+ }
199
+ });
200
+ });
201
+ };
202
+ /**
203
+ * Подписка на стрим по streamId (фаза 2 нового механизма).
204
+ * GET на /api/v5/stream/subscribe/{streamId}
205
+ */
206
+ Endpoint.prototype.streamSubscribe = function (streamId, callbacks) {
207
+ var host = (this.config.streamApiHost || '').replace(/\/+$/, '');
208
+ var url = "".concat(host, "/api/v5/stream/subscribe/").concat(streamId);
209
+ var controller = new AbortController();
210
+ var promise = this.processStream(url, {
211
+ method: 'GET',
212
+ headers: { Accept: 'text/event-stream' },
213
+ signal: controller.signal,
214
+ }, callbacks);
215
+ return { abort: function () { return controller.abort(); }, promise: promise };
216
+ };
217
+ /**
218
+ * Стрим через init/subscribe (новый механизм Directual).
219
+ * 1. POST на /good/api/v5/stream/init/{структура}/{метод} → streamId
220
+ * 2. GET на /api/v5/stream/subscribe/{streamId} → SSE-стрим
221
+ *
222
+ * Объединяет обе фазы, API коллбэков идентичен setStream.
223
+ */
224
+ Endpoint.prototype.initStream = function (name, data, params, callbacks) {
225
+ var _this = this;
226
+ var controller = new AbortController();
227
+ var resolveStreamId;
228
+ var rejectStreamId;
229
+ var streamIdPromise = new Promise(function (resolve, reject) {
230
+ resolveStreamId = resolve;
231
+ rejectStreamId = reject;
232
+ });
233
+ // Глушим unhandled rejection если никто не слушает streamId
234
+ streamIdPromise.catch(function () { });
235
+ var promise = (function () { return __awaiter(_this, void 0, void 0, function () {
236
+ var initUrl, initResponse, error_1, err, err, result, error_2, err, streamId, err, host, subscribeUrl;
237
+ return __generator(this, function (_a) {
238
+ switch (_a.label) {
239
+ case 0:
240
+ initUrl = this.buildStreamInitUrl(name, params);
241
+ _a.label = 1;
242
+ case 1:
243
+ _a.trys.push([1, 3, , 4]);
244
+ return [4 /*yield*/, fetch(initUrl, {
245
+ method: 'POST',
246
+ headers: { 'Content-Type': 'application/json' },
247
+ body: data ? JSON.stringify(data) : undefined,
248
+ signal: controller.signal,
249
+ })];
250
+ case 2:
251
+ initResponse = _a.sent();
252
+ return [3 /*break*/, 4];
253
+ case 3:
254
+ error_1 = _a.sent();
255
+ if (error_1 instanceof Error && error_1.name === 'AbortError') {
256
+ rejectStreamId(new Error('Aborted'));
257
+ return [2 /*return*/];
258
+ }
259
+ err = error_1 instanceof Error ? error_1 : new Error(String(error_1));
260
+ rejectStreamId(err);
261
+ if (callbacks && callbacks.onError)
262
+ callbacks.onError(err);
263
+ throw err;
264
+ case 4:
265
+ if (!initResponse.ok) {
266
+ err = new Error("HTTP ".concat(initResponse.status, ": ").concat(initResponse.statusText));
267
+ rejectStreamId(err);
268
+ if (callbacks && callbacks.onError)
269
+ callbacks.onError(err);
270
+ throw err;
271
+ }
272
+ _a.label = 5;
273
+ case 5:
274
+ _a.trys.push([5, 7, , 8]);
275
+ return [4 /*yield*/, initResponse.json()];
276
+ case 6:
277
+ result = _a.sent();
278
+ return [3 /*break*/, 8];
279
+ case 7:
280
+ error_2 = _a.sent();
281
+ err = new Error('streamInit: невалидный JSON в ответе');
282
+ rejectStreamId(err);
283
+ if (callbacks && callbacks.onError)
284
+ callbacks.onError(err);
285
+ throw err;
286
+ case 8:
287
+ streamId = typeof result === 'string' ? result : result && result.streamId;
288
+ if (!streamId) {
289
+ err = new Error('streamInit: streamId не найден в ответе');
290
+ rejectStreamId(err);
291
+ if (callbacks && callbacks.onError)
292
+ callbacks.onError(err);
293
+ throw err;
294
+ }
295
+ resolveStreamId(streamId);
296
+ host = (this.config.streamApiHost || '').replace(/\/+$/, '');
297
+ subscribeUrl = "".concat(host, "/api/v5/stream/subscribe/").concat(streamId);
298
+ return [4 /*yield*/, this.processStream(subscribeUrl, {
299
+ method: 'GET',
300
+ headers: { Accept: 'text/event-stream' },
301
+ signal: controller.signal,
302
+ }, callbacks)];
303
+ case 9:
304
+ _a.sent();
305
+ return [2 /*return*/];
306
+ }
307
+ });
308
+ }); })();
309
+ return {
310
+ abort: function () { return controller.abort(); },
311
+ promise: promise,
312
+ streamId: streamIdPromise,
313
+ };
314
+ };
315
+ /**
316
+ * Собирает URL для стрим-эндпоинта с query-параметрами
317
+ */
318
+ Endpoint.prototype.buildStreamUrl = function (method, params) {
319
+ var allParams = __assign(__assign({}, this.config), params);
320
+ var query = new URLSearchParams();
321
+ Object.keys(allParams).forEach(function (key) {
322
+ if (allParams[key] !== undefined && allParams[key] !== null) {
323
+ query.append(key, String(allParams[key]));
324
+ }
325
+ });
326
+ // Обрезаем trailing слэши, чтобы '' и '/' давали same-origin путь
327
+ var host = (this.config.streamApiHost || '').replace(/\/+$/, '');
328
+ return "".concat(host, "/good/api/v5/stream/").concat(this.name, "/").concat(method, "?").concat(query.toString());
329
+ };
330
+ /**
331
+ * URL для init-эндпоинта: /good/api/v5/stream/init/{структура}/{метод}
332
+ */
333
+ Endpoint.prototype.buildStreamInitUrl = function (method, params) {
334
+ var allParams = __assign(__assign({}, this.config), params);
335
+ var query = new URLSearchParams();
336
+ Object.keys(allParams).forEach(function (key) {
337
+ if (allParams[key] !== undefined && allParams[key] !== null) {
338
+ query.append(key, String(allParams[key]));
339
+ }
340
+ });
341
+ var host = (this.config.streamApiHost || '').replace(/\/+$/, '');
342
+ return "".concat(host, "/good/api/v5/stream/init/").concat(this.name, "/").concat(method, "?").concat(query.toString());
343
+ };
344
+ /**
345
+ * Читает SSE-стрим, парсит события, дёргает коллбэки.
346
+ * При abort тихо завершается без ошибки.
347
+ */
348
+ Endpoint.prototype.processStream = function (url, init, callbacks) {
349
+ return __awaiter(this, void 0, void 0, function () {
350
+ var response, error_3, err, err, body, err, reader, decoder, buffer, chunk, parsed, i, parsed, i, error_4, err;
351
+ return __generator(this, function (_a) {
352
+ switch (_a.label) {
353
+ case 0:
354
+ _a.trys.push([0, 2, , 3]);
355
+ return [4 /*yield*/, fetch(url, init)];
356
+ case 1:
357
+ response = _a.sent();
358
+ return [3 /*break*/, 3];
359
+ case 2:
360
+ error_3 = _a.sent();
361
+ if (error_3 instanceof Error && error_3.name === 'AbortError')
362
+ return [2 /*return*/];
363
+ err = error_3 instanceof Error ? error_3 : new Error(String(error_3));
364
+ if (callbacks && callbacks.onError)
365
+ callbacks.onError(err);
366
+ throw err;
367
+ case 3:
368
+ if (!response.ok) {
369
+ err = new Error("HTTP ".concat(response.status, ": ").concat(response.statusText));
370
+ if (callbacks && callbacks.onError)
371
+ callbacks.onError(err);
372
+ throw err;
373
+ }
374
+ body = response.body;
375
+ if (!body) {
376
+ err = new Error('Response body is null — стрим недоступен');
377
+ if (callbacks && callbacks.onError)
378
+ callbacks.onError(err);
379
+ throw err;
380
+ }
381
+ reader = body.getReader();
382
+ decoder = new TextDecoder();
383
+ buffer = '';
384
+ _a.label = 4;
385
+ case 4:
386
+ _a.trys.push([4, 8, , 9]);
387
+ _a.label = 5;
388
+ case 5:
389
+ if (!true) return [3 /*break*/, 7];
390
+ return [4 /*yield*/, reader.read()];
391
+ case 6:
392
+ chunk = _a.sent();
393
+ if (chunk.done)
394
+ return [3 /*break*/, 7];
395
+ buffer += decoder.decode(chunk.value, { stream: true });
396
+ parsed = parseSSEBuffer(buffer);
397
+ buffer = parsed.remaining;
398
+ for (i = 0; i < parsed.events.length; i++) {
399
+ if (callbacks && callbacks.onData) {
400
+ callbacks.onData(parsed.events[i].data, parsed.events[i].type);
401
+ }
402
+ }
403
+ return [3 /*break*/, 5];
404
+ case 7:
405
+ // Дочитываем остатки буфера
406
+ if (buffer.trim()) {
407
+ parsed = parseSSEBuffer(buffer + '\n\n');
408
+ for (i = 0; i < parsed.events.length; i++) {
409
+ if (callbacks && callbacks.onData) {
410
+ callbacks.onData(parsed.events[i].data, parsed.events[i].type);
411
+ }
412
+ }
413
+ }
414
+ if (callbacks && callbacks.onComplete) {
415
+ callbacks.onComplete();
416
+ }
417
+ return [3 /*break*/, 9];
418
+ case 8:
419
+ error_4 = _a.sent();
420
+ if (error_4 instanceof Error && error_4.name === 'AbortError')
421
+ return [2 /*return*/];
422
+ err = error_4 instanceof Error ? error_4 : new Error(String(error_4));
423
+ if (callbacks && callbacks.onError)
424
+ callbacks.onError(err);
425
+ throw err;
426
+ case 9: return [2 /*return*/];
427
+ }
428
+ });
429
+ });
430
+ };
55
431
  return Endpoint;
56
432
  }());
57
433
  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.1",
4
4
  "description": "Directual API for JavaScript",
5
5
  "main": "lib/directual.js",
6
6
  "typings": "lib/directual.d.ts",