@stack-spot/portal-network 0.39.2 → 0.40.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/CHANGELOG.md +7 -0
- package/dist/api/ai.d.ts +445 -542
- package/dist/api/ai.d.ts.map +1 -1
- package/dist/api/ai.js +181 -318
- package/dist/api/ai.js.map +1 -1
- package/dist/client/ai.d.ts +89 -0
- package/dist/client/ai.d.ts.map +1 -0
- package/dist/client/ai.js +108 -0
- package/dist/client/ai.js.map +1 -0
- package/dist/client/cloud-account.d.ts +5 -5
- package/dist/client/cloud-platform.d.ts +13 -13
- package/dist/client/content.d.ts +5 -5
- package/dist/client/notification.d.ts +1 -1
- package/dist/client/types.d.ts +17 -0
- package/dist/client/types.d.ts.map +1 -1
- package/dist/client/workflow.d.ts +8 -8
- package/dist/error/StackspotAPIError.d.ts +1 -1
- package/dist/error/StackspotAPIError.d.ts.map +1 -1
- package/dist/error/StreamCanceledError.d.ts +5 -0
- package/dist/error/StreamCanceledError.d.ts.map +1 -0
- package/dist/error/StreamCanceledError.js +9 -0
- package/dist/error/StreamCanceledError.js.map +1 -0
- package/dist/error/StreamError.d.ts +5 -0
- package/dist/error/StreamError.d.ts.map +1 -0
- package/dist/error/StreamError.js +7 -0
- package/dist/error/StreamError.js.map +1 -0
- package/dist/error/StreamJsonError.d.ts +5 -0
- package/dist/error/StreamJsonError.d.ts.map +1 -0
- package/dist/error/StreamJsonError.js +9 -0
- package/dist/error/StreamJsonError.js.map +1 -0
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/network/NetworkClient.d.ts +17 -1
- package/dist/network/NetworkClient.d.ts.map +1 -1
- package/dist/network/NetworkClient.js +29 -0
- package/dist/network/NetworkClient.js.map +1 -1
- package/dist/network/types.d.ts +5 -3
- package/dist/network/types.d.ts.map +1 -1
- package/dist/utils/StreamedJson.d.ts +48 -0
- package/dist/utils/StreamedJson.d.ts.map +1 -0
- package/dist/utils/StreamedJson.js +162 -0
- package/dist/utils/StreamedJson.js.map +1 -0
- package/package.json +2 -1
- package/src/api/ai.ts +652 -935
- package/src/client/ai.ts +69 -0
- package/src/client/types.ts +18 -1
- package/src/error/StackspotAPIError.ts +1 -1
- package/src/error/StreamCanceledError.ts +10 -0
- package/src/error/StreamError.ts +7 -0
- package/src/error/StreamJsonError.ts +10 -0
- package/src/index.ts +7 -1
- package/src/network/NetworkClient.ts +30 -1
- package/src/network/types.ts +6 -3
- package/src/utils/StreamedJson.tsx +135 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { CompletablePromise } from '@stack-spot/opa';
|
|
2
|
+
import { StreamCanceledError } from '../error/StreamCanceledError.js';
|
|
3
|
+
import { StreamError } from '../error/StreamError.js';
|
|
4
|
+
import { StreamJsonError } from '../error/StreamJsonError.js';
|
|
5
|
+
/**
|
|
6
|
+
* An object represented by a JSON stream. This can be watched as the stream runs.
|
|
7
|
+
*/
|
|
8
|
+
export class StreamedJson {
|
|
9
|
+
/**
|
|
10
|
+
* @param response the fetch response.
|
|
11
|
+
* @param minChangeIntervalMS a stream can be too fast. This sets a minimum interval between running the listeners. The default is 50ms.
|
|
12
|
+
*/
|
|
13
|
+
constructor(eventsPromise, abortController, minChangeIntervalMS = 50) {
|
|
14
|
+
Object.defineProperty(this, "onChangeListeners", {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
configurable: true,
|
|
17
|
+
writable: true,
|
|
18
|
+
value: []
|
|
19
|
+
});
|
|
20
|
+
Object.defineProperty(this, "error", {
|
|
21
|
+
enumerable: true,
|
|
22
|
+
configurable: true,
|
|
23
|
+
writable: true,
|
|
24
|
+
value: void 0
|
|
25
|
+
});
|
|
26
|
+
Object.defineProperty(this, "data", {
|
|
27
|
+
enumerable: true,
|
|
28
|
+
configurable: true,
|
|
29
|
+
writable: true,
|
|
30
|
+
value: {}
|
|
31
|
+
});
|
|
32
|
+
Object.defineProperty(this, "fullPromise", {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
configurable: true,
|
|
35
|
+
writable: true,
|
|
36
|
+
value: new CompletablePromise()
|
|
37
|
+
});
|
|
38
|
+
Object.defineProperty(this, "abortController", {
|
|
39
|
+
enumerable: true,
|
|
40
|
+
configurable: true,
|
|
41
|
+
writable: true,
|
|
42
|
+
value: void 0
|
|
43
|
+
});
|
|
44
|
+
this.abortController = abortController;
|
|
45
|
+
this.run(eventsPromise, minChangeIntervalMS);
|
|
46
|
+
}
|
|
47
|
+
async run(eventsPromise, minChangeIntervalMS) {
|
|
48
|
+
let lastChangeCall = 0;
|
|
49
|
+
try {
|
|
50
|
+
const events = await eventsPromise;
|
|
51
|
+
let flushed = true;
|
|
52
|
+
for await (const event of events) {
|
|
53
|
+
if (this.error)
|
|
54
|
+
return;
|
|
55
|
+
if (event.data) {
|
|
56
|
+
const json = JSON.parse(event.data);
|
|
57
|
+
StreamedJson.merge(json, this.data);
|
|
58
|
+
if (new Date().getTime() - lastChangeCall >= minChangeIntervalMS) {
|
|
59
|
+
this.onChangeListeners.forEach(l => l(this.data));
|
|
60
|
+
lastChangeCall = new Date().getTime();
|
|
61
|
+
flushed = true;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
flushed = false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (!flushed)
|
|
69
|
+
this.onChangeListeners.forEach(l => l(this.data));
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
if (error instanceof DOMException && error.name === 'AbortError')
|
|
73
|
+
this.fail(new StreamCanceledError());
|
|
74
|
+
if (error instanceof SyntaxError)
|
|
75
|
+
this.fail(new StreamJsonError());
|
|
76
|
+
else if (error instanceof StreamError)
|
|
77
|
+
this.fail(error);
|
|
78
|
+
else
|
|
79
|
+
this.fail(new StreamError(error?.message || `${error}`));
|
|
80
|
+
}
|
|
81
|
+
if (!this.error)
|
|
82
|
+
this.complete();
|
|
83
|
+
}
|
|
84
|
+
static merge(source, target) {
|
|
85
|
+
Object.keys(source).forEach((k) => {
|
|
86
|
+
if (typeof source[k] !== typeof target[k])
|
|
87
|
+
target[k] = source[k];
|
|
88
|
+
else if (typeof source[k] === 'string')
|
|
89
|
+
target[k] += source[k];
|
|
90
|
+
else if (Array.isArray(source[k]))
|
|
91
|
+
target[k].push(...source[k]);
|
|
92
|
+
else if (typeof source[k] === 'number')
|
|
93
|
+
parseFloat(target[k] + source[k]);
|
|
94
|
+
else if (typeof source[k] === 'object')
|
|
95
|
+
this.merge(source[k], target[k]);
|
|
96
|
+
else
|
|
97
|
+
target[k] = source[k];
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
clear() {
|
|
101
|
+
this.onChangeListeners = [];
|
|
102
|
+
this.abortController = undefined;
|
|
103
|
+
}
|
|
104
|
+
fail(error) {
|
|
105
|
+
this.error = error;
|
|
106
|
+
this.fullPromise.reject(this.error);
|
|
107
|
+
this.clear();
|
|
108
|
+
}
|
|
109
|
+
complete() {
|
|
110
|
+
this.fullPromise.resolve(this.data);
|
|
111
|
+
this.clear();
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Returns the full value of the object once the stream finishes.
|
|
115
|
+
*/
|
|
116
|
+
getValue() {
|
|
117
|
+
return this.fullPromise.promise;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Returns the streamed object with everything already streamed. This will be the complete object if the stream has finished.
|
|
121
|
+
*/
|
|
122
|
+
getPartialValue() {
|
|
123
|
+
return this.data;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Watches the object as it's streamed. This doesn't wait for the value to be complete.
|
|
127
|
+
*
|
|
128
|
+
* The listener is called whenever the value changes.
|
|
129
|
+
*
|
|
130
|
+
* @param listener the function to call with the new value.
|
|
131
|
+
* @returns a function that, when called, removes the listener.
|
|
132
|
+
*/
|
|
133
|
+
onChange(listener) {
|
|
134
|
+
if (this.fullPromise.resolved) {
|
|
135
|
+
listener(this.data);
|
|
136
|
+
return () => { };
|
|
137
|
+
}
|
|
138
|
+
this.onChangeListeners.push(listener);
|
|
139
|
+
return () => {
|
|
140
|
+
const index = this.onChangeListeners?.findIndex(l => l === listener);
|
|
141
|
+
if (index !== undefined && index >= 0)
|
|
142
|
+
this.onChangeListeners?.splice(index, 1);
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
getStatus() {
|
|
146
|
+
if (this.error)
|
|
147
|
+
return 'error';
|
|
148
|
+
if (this.fullPromise.resolved)
|
|
149
|
+
return 'success';
|
|
150
|
+
return 'pending';
|
|
151
|
+
}
|
|
152
|
+
getError() {
|
|
153
|
+
return this.error;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* If this is a stream and it's not yet finished, calling this function cancels the stream.
|
|
157
|
+
*/
|
|
158
|
+
cancel() {
|
|
159
|
+
this.abortController?.abort(new StreamCanceledError());
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=StreamedJson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StreamedJson.js","sourceRoot":"","sources":["../../src/utils/StreamedJson.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAM1D;;GAEG;AACH,MAAM,OAAO,YAAY;IAOvB;;;OAGG;IACH,YAAY,aAAwC,EAAE,eAAgC,EAAE,mBAAmB,GAAG,EAAE;QAVxG;;;;mBAA2C,EAAE;WAAA;QAC7C;;;;;WAA8B;QAC9B;;;;mBAAmB,EAAE;WAAA;QACrB;;;;mBAAc,IAAI,kBAAkB,EAAK;WAAA;QACzC;;;;;WAA4C;QAOlD,IAAI,CAAC,eAAe,GAAG,eAAe,CAAA;QACtC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAA;IAC9C,CAAC;IAEO,KAAK,CAAC,GAAG,CAAC,aAAwC,EAAE,mBAA2B;QACrF,IAAI,cAAc,GAAG,CAAC,CAAA;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAA;YAClC,IAAI,OAAO,GAAG,IAAI,CAAA;YAClB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBACjC,IAAI,IAAI,CAAC,KAAK;oBAAE,OAAM;gBACtB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACf,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;oBACnC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;oBACnC,IAAI,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,cAAc,IAAI,mBAAmB,EAAE,CAAC;wBACjE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;wBACjD,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;wBACrC,OAAO,GAAG,IAAI,CAAA;oBAChB,CAAC;yBAAM,CAAC;wBACN,OAAO,GAAG,KAAK,CAAA;oBACjB,CAAC;gBACH,CAAC;YACH,CAAC;YACD,IAAI,CAAC,OAAO;gBAAE,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QACjE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAA;YACtG,IAAI,KAAK,YAAY,WAAW;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,eAAe,EAAE,CAAC,CAAA;iBAC7D,IAAI,KAAK,YAAY,WAAW;gBAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;;gBAClD,IAAI,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,OAAO,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAA;QAC/D,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,QAAQ,EAAE,CAAA;IAClC,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,MAA2B,EAAE,MAA2B;QAC3E,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YAChC,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;iBAC3D,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAAE,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAA;iBACzD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;iBAC1D,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;iBACpE,IAAI,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,QAAQ;gBAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;;gBACnE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QAC5B,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,KAAK;QACX,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAA;QAC3B,IAAI,CAAC,eAAe,GAAG,SAAS,CAAA;IAClC,CAAC;IAEO,IAAI,CAAC,KAAU;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACnC,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAEO,QAAQ;QACd,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,IAAS,CAAC,CAAA;QACxC,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAA;IACjC,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,IAAI,CAAA;IAClB,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAqC;QAC5C,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACnB,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;QACjB,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACrC,OAAO,GAAG,EAAE;YACV,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAA;YACpE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC;gBAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QACjF,CAAC,CAAA;IACH,CAAC;IAED,SAAS;QACP,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,OAAO,CAAA;QAC9B,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAA;QAC/C,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAA;IACxD,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stack-spot/portal-network",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.40.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"@oazapfts/runtime": "^1.0.3",
|
|
56
|
+
"fetch-event-stream": "^0.1.5",
|
|
56
57
|
"lodash": "^4.17.21"
|
|
57
58
|
}
|
|
58
59
|
}
|