@toa.io/extensions.exposition 1.0.0-alpha.66 → 1.0.0-alpha.69
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/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
- package/documentation/protocol.md +10 -3
- package/features/realtime.feature +34 -0
- package/features/steps/Realtime.ts +151 -0
- package/features/streams.feature +4 -0
- package/package.json +6 -6
- package/source/HTTP/messages.test.ts +6 -0
- package/source/HTTP/messages.ts +16 -3
- package/source/deployment.ts +6 -6
- package/transpiled/HTTP/messages.js +15 -3
- package/transpiled/HTTP/messages.js.map +1 -1
- package/transpiled/deployment.js +4 -4
- package/transpiled/deployment.js.map +1 -1
- package/transpiled/tsconfig.tsbuildinfo +1 -1
|
@@ -95,6 +95,9 @@ describe('read', () => {
|
|
|
95
95
|
const result = await streamConsumers.text(response)
|
|
96
96
|
|
|
97
97
|
expect(result).toBe([
|
|
98
|
+
'--cut',
|
|
99
|
+
'',
|
|
100
|
+
'ACK',
|
|
98
101
|
'--cut',
|
|
99
102
|
'',
|
|
100
103
|
'Hello',
|
|
@@ -104,6 +107,9 @@ describe('read', () => {
|
|
|
104
107
|
'--cut',
|
|
105
108
|
'',
|
|
106
109
|
'World',
|
|
110
|
+
'--cut',
|
|
111
|
+
'',
|
|
112
|
+
'FIN',
|
|
107
113
|
'--cut--'].join('\r\n'))
|
|
108
114
|
})
|
|
109
115
|
})
|
package/source/HTTP/messages.ts
CHANGED
|
@@ -82,13 +82,26 @@ export function multipart
|
|
|
82
82
|
|
|
83
83
|
response.setHeader('content-type', `${encoder.multipart}; boundary=${BOUNDARY}`)
|
|
84
84
|
|
|
85
|
+
response.write(Buffer.concat([
|
|
86
|
+
CUT,
|
|
87
|
+
CRLF,
|
|
88
|
+
encoder.encode('ACK'),
|
|
89
|
+
CRLF,
|
|
90
|
+
CUT
|
|
91
|
+
]))
|
|
92
|
+
|
|
85
93
|
message.body
|
|
86
94
|
.map((part: unknown) => Buffer.concat([
|
|
87
|
-
CUT,
|
|
88
95
|
CRLF /* indicates no boundary headers */,
|
|
89
96
|
encoder.encode(part),
|
|
90
|
-
CRLF
|
|
91
|
-
|
|
97
|
+
CRLF,
|
|
98
|
+
CUT]))
|
|
99
|
+
.on('end', () => response.end(Buffer.concat([
|
|
100
|
+
CRLF,
|
|
101
|
+
encoder.encode('FIN'),
|
|
102
|
+
CRLF,
|
|
103
|
+
FINALCUT
|
|
104
|
+
])))
|
|
92
105
|
.pipe(response)
|
|
93
106
|
}
|
|
94
107
|
|
package/source/deployment.ts
CHANGED
|
@@ -6,7 +6,7 @@ import * as schemas from './schemas'
|
|
|
6
6
|
import { shortcuts } from './Directive'
|
|
7
7
|
import { components } from './Composition'
|
|
8
8
|
import { parse } from './RTD/syntax'
|
|
9
|
-
import { DELAY, PORT } from './HTTP
|
|
9
|
+
import { DELAY, PORT } from './HTTP'
|
|
10
10
|
|
|
11
11
|
export function deployment (_: unknown, annotation?: Annotation): Dependency {
|
|
12
12
|
assert.ok(annotation !== undefined, 'Exposition context annotation is required')
|
|
@@ -33,7 +33,7 @@ export function deployment (_: unknown, annotation?: Annotation): Dependency {
|
|
|
33
33
|
if (annotation?.['/'] !== undefined) {
|
|
34
34
|
const tree = parse(annotation['/'], shortcuts)
|
|
35
35
|
|
|
36
|
-
service.variables
|
|
36
|
+
service.variables!.push({
|
|
37
37
|
name: 'TOA_EXPOSITION',
|
|
38
38
|
value: encode(tree)
|
|
39
39
|
})
|
|
@@ -41,9 +41,9 @@ export function deployment (_: unknown, annotation?: Annotation): Dependency {
|
|
|
41
41
|
|
|
42
42
|
const { debug, trace, authorities } = annotation
|
|
43
43
|
|
|
44
|
-
service.ingress
|
|
45
|
-
service.ingress
|
|
46
|
-
service.ingress
|
|
44
|
+
service.ingress!.hosts = Object.values(authorities)
|
|
45
|
+
service.ingress!.class = annotation.class
|
|
46
|
+
service.ingress!.annotations = annotation.annotations
|
|
47
47
|
|
|
48
48
|
const properties: Properties = { authorities }
|
|
49
49
|
|
|
@@ -53,7 +53,7 @@ export function deployment (_: unknown, annotation?: Annotation): Dependency {
|
|
|
53
53
|
if (trace === true)
|
|
54
54
|
properties.trace = true
|
|
55
55
|
|
|
56
|
-
service.variables
|
|
56
|
+
service.variables!.push({
|
|
57
57
|
name: 'TOA_EXPOSITION_PROPERTIES',
|
|
58
58
|
value: encode(properties)
|
|
59
59
|
})
|
|
@@ -62,14 +62,26 @@ function multipart(message, context, response) {
|
|
|
62
62
|
throw new exceptions_1.NotAcceptable();
|
|
63
63
|
const encoder = context.encoder;
|
|
64
64
|
response.setHeader('content-type', `${encoder.multipart}; boundary=${BOUNDARY}`);
|
|
65
|
+
response.write(Buffer.concat([
|
|
66
|
+
CUT,
|
|
67
|
+
CRLF,
|
|
68
|
+
encoder.encode('ACK'),
|
|
69
|
+
CRLF,
|
|
70
|
+
CUT
|
|
71
|
+
]));
|
|
65
72
|
message.body
|
|
66
73
|
.map((part) => Buffer.concat([
|
|
67
|
-
CUT,
|
|
68
74
|
CRLF /* indicates no boundary headers */,
|
|
69
75
|
encoder.encode(part),
|
|
70
|
-
CRLF
|
|
76
|
+
CRLF,
|
|
77
|
+
CUT
|
|
71
78
|
]))
|
|
72
|
-
.on('end', () => response.end(
|
|
79
|
+
.on('end', () => response.end(Buffer.concat([
|
|
80
|
+
CRLF,
|
|
81
|
+
encoder.encode('FIN'),
|
|
82
|
+
CRLF,
|
|
83
|
+
FINALCUT
|
|
84
|
+
])))
|
|
73
85
|
.pipe(response);
|
|
74
86
|
}
|
|
75
87
|
exports.multipart = multipart;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../source/HTTP/messages.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../source/HTTP/messages.ts"],"names":[],"mappings":"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"}
|
package/transpiled/deployment.js
CHANGED
|
@@ -33,7 +33,7 @@ const schemas = __importStar(require("./schemas"));
|
|
|
33
33
|
const Directive_1 = require("./Directive");
|
|
34
34
|
const Composition_1 = require("./Composition");
|
|
35
35
|
const syntax_1 = require("./RTD/syntax");
|
|
36
|
-
const
|
|
36
|
+
const HTTP_1 = require("./HTTP");
|
|
37
37
|
function deployment(_, annotation) {
|
|
38
38
|
node_assert_1.default.ok(annotation !== undefined, 'Exposition context annotation is required');
|
|
39
39
|
schemas.annotation.validate(annotation);
|
|
@@ -41,7 +41,7 @@ function deployment(_, annotation) {
|
|
|
41
41
|
const service = {
|
|
42
42
|
group: 'exposition',
|
|
43
43
|
name: 'gateway',
|
|
44
|
-
port:
|
|
44
|
+
port: HTTP_1.PORT,
|
|
45
45
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
46
46
|
version: require('../package.json').version,
|
|
47
47
|
variables: [],
|
|
@@ -49,8 +49,8 @@ function deployment(_, annotation) {
|
|
|
49
49
|
ingress: { hosts: [] },
|
|
50
50
|
probe: {
|
|
51
51
|
path: '/.ready',
|
|
52
|
-
port:
|
|
53
|
-
delay:
|
|
52
|
+
port: HTTP_1.PORT,
|
|
53
|
+
delay: HTTP_1.DELAY
|
|
54
54
|
}
|
|
55
55
|
};
|
|
56
56
|
if (annotation?.['/'] !== undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployment.js","sourceRoot":"","sources":["../source/deployment.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8DAAgC;AAEhC,6CAAwC;AAExC,mDAAoC;AACpC,2CAAuC;AACvC,+CAA0C;AAC1C,yCAAoC;AACpC,
|
|
1
|
+
{"version":3,"file":"deployment.js","sourceRoot":"","sources":["../source/deployment.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8DAAgC;AAEhC,6CAAwC;AAExC,mDAAoC;AACpC,2CAAuC;AACvC,+CAA0C;AAC1C,yCAAoC;AACpC,iCAAoC;AAEpC,SAAgB,UAAU,CAAE,CAAU,EAAE,UAAuB;IAC7D,qBAAM,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,EAAE,2CAA2C,CAAC,CAAA;IAChF,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IAEvC,MAAM,MAAM,GAAG,IAAA,wBAAU,GAAE,CAAC,MAAM,CAAA;IAElC,MAAM,OAAO,GAAY;QACvB,KAAK,EAAE,YAAY;QACnB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,WAAI;QACV,8DAA8D;QAC9D,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO;QAC3C,SAAS,EAAE,EAAE;QACb,UAAU,EAAE,MAAM;QAClB,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QACtB,KAAK,EAAE;YACL,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,WAAI;YACV,KAAK,EAAE,YAAK;SACb;KACF,CAAA;IAED,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,IAAA,cAAK,EAAC,UAAU,CAAC,GAAG,CAAC,EAAE,qBAAS,CAAC,CAAA;QAE9C,OAAO,CAAC,SAAU,CAAC,IAAI,CAAC;YACtB,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,IAAA,gBAAM,EAAC,IAAI,CAAC;SACpB,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,UAAU,CAAA;IAEhD,OAAO,CAAC,OAAQ,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IACnD,OAAO,CAAC,OAAQ,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAA;IACzC,OAAO,CAAC,OAAQ,CAAC,WAAW,GAAG,UAAU,CAAC,WAAW,CAAA;IAErD,MAAM,UAAU,GAAe,EAAE,WAAW,EAAE,CAAA;IAE9C,IAAI,KAAK,KAAK,IAAI;QAChB,UAAU,CAAC,KAAK,GAAG,IAAI,CAAA;IAEzB,IAAI,KAAK,KAAK,IAAI;QAChB,UAAU,CAAC,KAAK,GAAG,IAAI,CAAA;IAEzB,OAAO,CAAC,SAAU,CAAC,IAAI,CAAC;QACtB,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,IAAA,gBAAM,EAAC,UAAU,CAAC;KAC1B,CAAC,CAAA;IAEF,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAA;AAChC,CAAC;AAnDD,gCAmDC"}
|