@toa.io/extensions.realtime 1.0.0-alpha.270 → 1.0.0-alpha.273
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 +20 -0
- package/components/realtime.streams/manifest.toa.yaml +17 -5
- package/components/realtime.streams/operations/create.js +4 -1
- package/components/realtime.streams/operations/create.js.map +1 -1
- package/components/realtime.streams/operations/lib/Stash.js +16 -2
- package/components/realtime.streams/operations/lib/Stash.js.map +1 -1
- package/components/realtime.streams/operations/lib/Stream.d.ts +3 -0
- package/components/realtime.streams/operations/lib/Stream.js +12 -0
- package/components/realtime.streams/operations/lib/Stream.js.map +1 -1
- package/components/realtime.streams/operations/tsconfig.tsbuildinfo +1 -1
- package/components/realtime.streams/source/create.ts +4 -1
- package/components/realtime.streams/source/lib/Stash.ts +23 -2
- package/components/realtime.streams/source/lib/Stream.ts +15 -0
- package/features/steps/Components.ts +3 -3
- package/features/steps/Realtime.ts +1 -2
- package/features/steps/Streams.ts +2 -2
- package/features/steps/components/messages/manifest.toa.yaml +37 -8
- package/package.json +4 -4
- package/source/Factory.ts +1 -2
- package/source/Realtime.ts +6 -3
- package/source/Routes.ts +1 -2
- package/source/extension.ts +2 -3
- package/transpiled/Factory.js +1 -2
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Realtime.d.ts +1 -1
- package/transpiled/Realtime.js +4 -1
- package/transpiled/Realtime.js.map +1 -1
- package/transpiled/Routes.js +1 -2
- package/transpiled/Routes.js.map +1 -1
- package/transpiled/extension.js +2 -3
- package/transpiled/extension.js.map +1 -1
- package/transpiled/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,26 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [1.0.0-alpha.273](https://github.com/toa-io/toa/compare/v1.0.0-alpha.272...v1.0.0-alpha.273) (2026-09-02)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **exposition:** green the feature suite ([67c25ad](https://github.com/toa-io/toa/commit/67c25ad627db3b3779b09405c5a3c319ecd47722))
|
|
12
|
+
* **realtime:** green the feature suite ([6b4650b](https://github.com/toa-io/toa/commit/6b4650bad9e1d53dabd0b7775966694bdb05f236))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# [1.0.0-alpha.272](https://github.com/toa-io/toa/compare/v1.0.0-alpha.271...v1.0.0-alpha.272) (2026-09-01)
|
|
19
|
+
|
|
20
|
+
**Note:** Version bump only for package @toa.io/extensions.realtime
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
6
26
|
# [1.0.0-alpha.270](https://github.com/toa-io/toa/compare/v1.0.0-alpha.269...v1.0.0-alpha.270) (2026-08-31)
|
|
7
27
|
|
|
8
28
|
**Note:** Version bump only for package @toa.io/extensions.realtime
|
|
@@ -4,14 +4,25 @@ name: streams
|
|
|
4
4
|
operations:
|
|
5
5
|
create:
|
|
6
6
|
input:
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
properties:
|
|
8
|
+
key:
|
|
9
|
+
type: string
|
|
10
|
+
token:
|
|
11
|
+
type: string
|
|
12
|
+
type: object
|
|
9
13
|
push:
|
|
10
14
|
bindings: ~ # only for internal use
|
|
11
15
|
input:
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
16
|
+
properties:
|
|
17
|
+
data: {}
|
|
18
|
+
key:
|
|
19
|
+
type: string
|
|
20
|
+
event:
|
|
21
|
+
type: string
|
|
22
|
+
type: object
|
|
23
|
+
required:
|
|
24
|
+
- key
|
|
25
|
+
- event
|
|
15
26
|
|
|
16
27
|
configuration:
|
|
17
28
|
schema:
|
|
@@ -22,6 +33,7 @@ configuration:
|
|
|
22
33
|
expire:
|
|
23
34
|
type: number
|
|
24
35
|
default: 300
|
|
36
|
+
type: object
|
|
25
37
|
|
|
26
38
|
state: ~
|
|
27
39
|
stash: ~
|
|
@@ -14,8 +14,11 @@ class Effect {
|
|
|
14
14
|
}
|
|
15
15
|
unmount() {
|
|
16
16
|
this.logs.info('Destroying streams', { count: this.streams.size });
|
|
17
|
+
// closed, not destroyed: destroying a stream that is still piped to a response
|
|
18
|
+
// makes end-of-stream report a premature close, which reaches no one and takes
|
|
19
|
+
// the process down.
|
|
17
20
|
for (const stream of this.streams.values())
|
|
18
|
-
stream.
|
|
21
|
+
stream.close();
|
|
19
22
|
}
|
|
20
23
|
async execute(input) {
|
|
21
24
|
const key = input.key;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../source/create.ts"],"names":[],"mappings":";;;AAGA,+BAAqC;AAErC,MAAa,MAAM;IACA,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;IAC5C,KAAK,CAAQ;IACb,IAAI,CAAK;IAEV,KAAK,CAAE,OAAgB;QAC5B,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAA;QACpC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,WAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;QAEnF,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;QACxB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAA;IAClC,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;QAElE,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACxC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../source/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,9 +25,9 @@ class Stash {
|
|
|
25
25
|
return ERR_NO_RESULTS;
|
|
26
26
|
if (results instanceof Error)
|
|
27
27
|
return results;
|
|
28
|
-
|
|
28
|
+
const items = entries(results);
|
|
29
|
+
if (items === null)
|
|
29
30
|
return null;
|
|
30
|
-
const [, items] = results[0];
|
|
31
31
|
const events = [];
|
|
32
32
|
let lastStamp = null;
|
|
33
33
|
for (const item of items) {
|
|
@@ -69,6 +69,20 @@ class Stash {
|
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
exports.Stash = Stash;
|
|
72
|
+
/**
|
|
73
|
+
* `xread` answers with an array of `[stream, entries]` pairs over RESP2 and with an
|
|
74
|
+
* object keyed by stream name over RESP3. One stream is read, so either way it is the
|
|
75
|
+
* first, and an empty answer means nothing has been added since the token.
|
|
76
|
+
*/
|
|
77
|
+
function entries(results) {
|
|
78
|
+
if (Array.isArray(results))
|
|
79
|
+
return results.length === 0 ? null : results[0][1];
|
|
80
|
+
if (typeof results === 'object' && results !== null) {
|
|
81
|
+
const streams = Object.values(results);
|
|
82
|
+
return streams.length === 0 ? null : streams[0];
|
|
83
|
+
}
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
72
86
|
class NoResultsError extends Error {
|
|
73
87
|
code = 'NO_RESULTS';
|
|
74
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stash.js","sourceRoot":"","sources":["../../source/lib/Stash.ts"],"names":[],"mappings":";;;AAEA,MAAa,KAAK;IACC,KAAK,CAAO;IACZ,aAAa,CAAe;IAC5B,IAAI,CAAK;IAE1B,YAAoB,KAAU,EAAE,aAA4B,EAAE,IAAS;QACrE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAA;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;IAClB,CAAC;IAEM,KAAK,CAAC,OAAO,CAAE,GAAW;QAC/B,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;IACxC,CAAC;IAEM,KAAK,CAAC,IAAI,CAAE,GAAW,EAAE,KAAa,EAAE,IAAa;QAC1D,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAA;IAC1C,CAAC;IAEM,KAAK,CAAC,GAAG,CAAE,GAAW,EAAE,KAAa;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAEhC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK;aAC7B,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC;aAC5B,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;QAEjC,IAAI,OAAO,KAAK,IAAI;YAClB,OAAO,cAAc,CAAA;QAEvB,IAAI,OAAO,YAAY,KAAK;YAC1B,OAAO,OAAO,CAAA;QAEhB,
|
|
1
|
+
{"version":3,"file":"Stash.js","sourceRoot":"","sources":["../../source/lib/Stash.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,11 @@ import { EventEmitter, Readable } from 'node:stream';
|
|
|
4
4
|
export declare class Stream extends Readable {
|
|
5
5
|
events: EventEmitter<[never]>;
|
|
6
6
|
private interval;
|
|
7
|
+
private ended;
|
|
7
8
|
constructor();
|
|
8
9
|
_read(): void;
|
|
9
10
|
_destroy(error: Error | null, callback: (error?: (Error | null)) => void): void;
|
|
11
|
+
/** Ends the stream: whoever reads it gets EOF rather than a broken pipe. */
|
|
12
|
+
close(): void;
|
|
10
13
|
heartbeat(stream?: Readable): boolean;
|
|
11
14
|
}
|
|
@@ -5,6 +5,7 @@ const node_stream_1 = require("node:stream");
|
|
|
5
5
|
class Stream extends node_stream_1.Readable {
|
|
6
6
|
events = new node_stream_1.EventEmitter();
|
|
7
7
|
interval = null;
|
|
8
|
+
ended = false;
|
|
8
9
|
constructor() {
|
|
9
10
|
super(objectMode);
|
|
10
11
|
}
|
|
@@ -19,7 +20,18 @@ class Stream extends node_stream_1.Readable {
|
|
|
19
20
|
this.events.emit('destroy');
|
|
20
21
|
super._destroy(error, callback);
|
|
21
22
|
}
|
|
23
|
+
/** Ends the stream: whoever reads it gets EOF rather than a broken pipe. */
|
|
24
|
+
close() {
|
|
25
|
+
this.ended = true;
|
|
26
|
+
if (this.interval !== null) {
|
|
27
|
+
clearInterval(this.interval);
|
|
28
|
+
this.interval = null;
|
|
29
|
+
}
|
|
30
|
+
this.push(null);
|
|
31
|
+
}
|
|
22
32
|
heartbeat(stream = this) {
|
|
33
|
+
if (this.ended)
|
|
34
|
+
return false;
|
|
23
35
|
const resume = stream.push('heartbeat ' + Date.now());
|
|
24
36
|
if (!resume && this.interval !== null) {
|
|
25
37
|
clearInterval(this.interval);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stream.js","sourceRoot":"","sources":["../../source/lib/Stream.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAEpD,MAAa,MAAO,SAAQ,sBAAQ;IAC3B,MAAM,GAAG,IAAI,0BAAY,EAAE,CAAA;IAE1B,QAAQ,GAA0B,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"Stream.js","sourceRoot":"","sources":["../../source/lib/Stream.ts"],"names":[],"mappings":";;;AAAA,6CAAoD;AAEpD,MAAa,MAAO,SAAQ,sBAAQ;IAC3B,MAAM,GAAG,IAAI,0BAAY,EAAE,CAAA;IAE1B,QAAQ,GAA0B,IAAI,CAAA;IACtC,KAAK,GAAG,KAAK,CAAA;IAErB;QACE,KAAK,CAAC,UAAU,CAAC,CAAA;IACnB,CAAC;IAED,iBAAiB;IACD,KAAK;QACnB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;YACxB,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,kBAAkB,CAAC,CAAA;IAC3E,CAAC;IAEe,QAAQ,CAAE,KAAmB,EAAE,QAA0C;QACvF,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;YACxB,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAE9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAE3B,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;IACjC,CAAC;IAED,4EAA4E;IACrE,KAAK;QACV,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QAEjB,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC3B,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACtB,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjB,CAAC;IAEM,SAAS,CAAE,SAAmB,IAAI;QACvC,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAA;QAE5B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QAErD,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACtB,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAjDD,wBAiDC;AAED,MAAM,kBAAkB,GAAG,MAAM,CAAA,CAAC,OAAO;AACzC,MAAM,UAAU,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,CAAA"}
|