@toa.io/definitions 1.0.0-alpha.331 → 1.0.0-alpha.333
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/digest/extensions.chronicles.json +1 -0
- package/digest/extensions.exposition.json +1 -1
- package/package.json +12 -12
- package/schemas/extensions.chronicles/annotation.cos.yaml +52 -0
- package/schemas/extensions.chronicles/declaration.cos.yaml +60 -0
- package/schemas/extensions.exposition/annotation.cos.yaml +10 -17
- package/transpiled/definition.js +1 -0
- package/transpiled/definition.js.map +1 -1
- package/transpiled/digest/generate.js +1 -0
- package/transpiled/digest/generate.js.map +1 -1
- package/transpiled/extensions.chronicles/components.d.ts +7 -0
- package/transpiled/extensions.chronicles/components.js +10 -0
- package/transpiled/extensions.chronicles/components.js.map +1 -0
- package/transpiled/extensions.chronicles/const.d.ts +20 -0
- package/transpiled/extensions.chronicles/const.js +26 -0
- package/transpiled/extensions.chronicles/const.js.map +1 -0
- package/transpiled/extensions.chronicles/context.d.ts +3 -0
- package/transpiled/extensions.chronicles/context.js +11 -0
- package/transpiled/extensions.chronicles/context.js.map +1 -0
- package/transpiled/extensions.chronicles/contract.d.ts +7 -0
- package/transpiled/extensions.chronicles/contract.js +69 -0
- package/transpiled/extensions.chronicles/contract.js.map +1 -0
- package/transpiled/extensions.chronicles/deployment.d.ts +12 -0
- package/transpiled/extensions.chronicles/deployment.js +84 -0
- package/transpiled/extensions.chronicles/deployment.js.map +1 -0
- package/transpiled/extensions.chronicles/index.d.ts +7 -0
- package/transpiled/extensions.chronicles/index.js +7 -0
- package/transpiled/extensions.chronicles/index.js.map +1 -0
- package/transpiled/extensions.chronicles/manifest.d.ts +12 -0
- package/transpiled/extensions.chronicles/manifest.js +63 -0
- package/transpiled/extensions.chronicles/manifest.js.map +1 -0
- package/transpiled/extensions.chronicles/schemas.d.ts +4 -0
- package/transpiled/extensions.chronicles/schemas.js +7 -0
- package/transpiled/extensions.chronicles/schemas.js.map +1 -0
- package/transpiled/extensions.chronicles/types.d.ts +81 -0
- package/transpiled/extensions.chronicles/types.js +2 -0
- package/transpiled/extensions.chronicles/types.js.map +1 -0
- package/transpiled/extensions.exposition/Annotation.d.ts +5 -7
- package/transpiled/extensions.exposition/deployment.js +8 -0
- package/transpiled/extensions.exposition/deployment.js.map +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../source/extensions.chronicles/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAIrC;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CACtB,QAA8B,EAC9B,SAAmB;IAEnB,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;IAEvC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAc,WAAW,EAAE,gCAAgC,CAAC,CAAA;IAExF,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;IAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IAE9C,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAEzE,KAAK,MAAM,KAAK,IAAI,MAAM;QACxB,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,SAAS;YACzC,MAAM,IAAI,KAAK,CACb,kBAAkB,IAAI,WAAW,KAAK,4CAA4C,CACnF,CAAA;IAEL,KAAK,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC;QAChE,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC,CAAA;IAErC,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS;QACjC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAA;IAEhE,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;QAC9D,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAA;IAEpC,8FAA8F;IAC9F,8CAA8C;IAC9C,MAAM,KAAK,GAAG,QAAQ,EAAE,QAAQ,KAAK,SAAS,CAAA;IAC9C,MAAM,UAAU,GAAI,SAAS,CAAC,MAA8C,EAAE,UAAU,CAAA;IAExF,IACE,KAAK;QACL,WAAW,CAAC,QAAQ,KAAK,IAAI;QAC7B,UAAU,KAAK,SAAS;QACxB,CAAC,CAAC,WAAW,CAAC,QAAQ,IAAI,UAAU,CAAC;QAErC,MAAM,IAAI,KAAK,CACb,kBAAkB,IAAI,wBAAwB,WAAW,CAAC,QAAQ,KAAK;YACrE,wCAAwC,CAC3C,CAAA;IAEH,OAAO,WAAW,CAAA;AACpB,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,QAA8B;IAC/C,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS;QAC7C,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,CAAA;IAE5E,OAAO;QACL,GAAG,QAAQ;QACX,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,EAAE;QAC7B,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,EAAE;QAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ;QACxE,SAAS,EAAE,QAAQ,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS;KAC7E,CAAA;AACH,CAAC;AAED,MAAM,QAAQ,GAAG,UAAU,CAAA;AAE3B,+DAA+D;AAC/D,MAAM,SAAS,GAAG,SAAS,CAAA;AAE3B,SAAS,EAAE,CAAC,SAAmB;IAC7B,OAAO,SAAS,CAAC,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS;QAC3E,CAAC,CAAC,SAAS,CAAC,IAAI;QAChB,CAAC,CAAC,GAAG,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,CAAA;AAChD,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import * as schemas from '@toa.io/schemas';
|
|
3
|
+
const path = resolve(import.meta.dirname, '../../schemas/extensions.chronicles');
|
|
4
|
+
const namespace = schemas.namespace(path);
|
|
5
|
+
export const declaration = namespace.schema('declaration');
|
|
6
|
+
export const annotation = namespace.schema('annotation');
|
|
7
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../source/extensions.chronicles/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,KAAK,OAAO,MAAM,iBAAiB,CAAA;AAI1C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,EAAE,qCAAqC,CAAC,CAAA;AAChF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;AAEzC,MAAM,CAAC,MAAM,WAAW,GAAwB,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;AAC/E,MAAM,CAAC,MAAM,UAAU,GAAuB,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { Resources } from '@toa.io/operations';
|
|
2
|
+
/** The `chronicles` annotation of a context. */
|
|
3
|
+
export interface Annotation {
|
|
4
|
+
/** the AMQP address of the broker the rows are published to */
|
|
5
|
+
broker: string;
|
|
6
|
+
/** where the log is read, by the provider that keeps it */
|
|
7
|
+
store: Store;
|
|
8
|
+
/** days a row of `events` and of `encounters` is kept; absent, kept */
|
|
9
|
+
retention?: number;
|
|
10
|
+
/** whether the routes clients send encounters to are served */
|
|
11
|
+
encounters?: boolean;
|
|
12
|
+
/** how much of a client's address the log keeps; `truncated` unless it says `full` */
|
|
13
|
+
ip?: Address;
|
|
14
|
+
/** what the service may take; `null`, which the schema admits, deploys it without any */
|
|
15
|
+
resources?: Resources;
|
|
16
|
+
}
|
|
17
|
+
export type Address = 'truncated' | 'full';
|
|
18
|
+
export interface Store {
|
|
19
|
+
provider: 'clickhouse';
|
|
20
|
+
/** the provider's own address of it */
|
|
21
|
+
url: string;
|
|
22
|
+
}
|
|
23
|
+
/** What the service is given of the annotation, its credentials aside. */
|
|
24
|
+
export interface Settings {
|
|
25
|
+
broker: string;
|
|
26
|
+
store: Store;
|
|
27
|
+
retention?: number;
|
|
28
|
+
encounters: boolean;
|
|
29
|
+
ip: Address;
|
|
30
|
+
/** the contracts of the events whose renderings are rows of `events`, by label */
|
|
31
|
+
events: Record<string, Contract>;
|
|
32
|
+
/** the contracts of the events whose payloads are the states of entities, one per component */
|
|
33
|
+
states: Record<string, Contract>;
|
|
34
|
+
/** the contracts of the facts the components send, by label */
|
|
35
|
+
facts: Record<string, Contract>;
|
|
36
|
+
/** the property of its payloads that names the identity a row is of, by component */
|
|
37
|
+
identities: Record<string, string>;
|
|
38
|
+
/**
|
|
39
|
+
* the property of its payloads that says when a change was made, by component; `null` where
|
|
40
|
+
* the time a message carries is when, always
|
|
41
|
+
*/
|
|
42
|
+
timestamps: Record<string, string | null>;
|
|
43
|
+
}
|
|
44
|
+
/** What a label of the log means, and what of its payload is written. */
|
|
45
|
+
export interface Contract {
|
|
46
|
+
description: string;
|
|
47
|
+
properties: Record<string, Property>;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* A property of a payload, as JSON Schema of the types the log has: every one described, and
|
|
51
|
+
* nothing a store could not read as a type of its own.
|
|
52
|
+
*/
|
|
53
|
+
export interface Property {
|
|
54
|
+
type: 'string' | 'integer' | 'number' | 'boolean' | 'object' | 'array';
|
|
55
|
+
description?: string;
|
|
56
|
+
enum?: string[];
|
|
57
|
+
format?: string;
|
|
58
|
+
properties?: Record<string, Property>;
|
|
59
|
+
items?: Property;
|
|
60
|
+
}
|
|
61
|
+
/** The `chronicles` declaration of a component, normalised. */
|
|
62
|
+
export interface Declaration {
|
|
63
|
+
/** the contracts of the events whose renderings are rows of `events`, by event */
|
|
64
|
+
events: Record<string, Contract>;
|
|
65
|
+
/** the contract of the event whose payload is the entity as it stands, and which event it is */
|
|
66
|
+
state?: State;
|
|
67
|
+
/** the contracts of the facts the component sends, by name */
|
|
68
|
+
facts: Record<string, Contract>;
|
|
69
|
+
/** the property of the payloads that names the identity a row is of; `null` where none does */
|
|
70
|
+
identity: string | null;
|
|
71
|
+
/** the property of the payloads that says when the change was made; `null` where none does */
|
|
72
|
+
timestamp: string | null;
|
|
73
|
+
}
|
|
74
|
+
export interface State extends Contract {
|
|
75
|
+
event: string;
|
|
76
|
+
}
|
|
77
|
+
/** What a component writes: the declaration, or nothing. */
|
|
78
|
+
export type Declared = (Partial<Omit<Declaration, 'identity' | 'timestamp'>> & {
|
|
79
|
+
identity?: string | null;
|
|
80
|
+
timestamp?: string | null;
|
|
81
|
+
}) | null;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../source/extensions.chronicles/types.ts"],"names":[],"mappings":""}
|
|
@@ -18,9 +18,11 @@ export interface Annotation {
|
|
|
18
18
|
debug?: boolean;
|
|
19
19
|
/** The header the client address is read from; the connection's without one. See `ip.md`. */
|
|
20
20
|
ip?: string;
|
|
21
|
+
/** The header the client's country is read from; none without one. See `ip.md`. */
|
|
22
|
+
country?: string;
|
|
21
23
|
/** Failed authentications an address may make; none are metered unless set. See `identity.md`. */
|
|
22
24
|
bouncer?: Bouncer;
|
|
23
|
-
/**
|
|
25
|
+
/** The countries a request is answered 451 from; none is refused without it. See `censor.md`. */
|
|
24
26
|
censor?: Censor;
|
|
25
27
|
/** The authorization server this context exposes; none is exposed without it. */
|
|
26
28
|
oauth?: OAuth;
|
|
@@ -84,9 +86,5 @@ export interface Bouncer {
|
|
|
84
86
|
/** seconds it takes to earn them back, 60 by default */
|
|
85
87
|
interval?: number;
|
|
86
88
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
header: string;
|
|
90
|
-
/** What the header holds for a request to be answered 451, compared exactly. */
|
|
91
|
-
values: string[];
|
|
92
|
-
}
|
|
89
|
+
/** The countries, as the header `country` names holds them, compared exactly. */
|
|
90
|
+
export type Censor = string[];
|
|
@@ -10,6 +10,12 @@ export const image = 'ghcr.io/toa-io/extension-exposition-gateway';
|
|
|
10
10
|
export function deployment(_, annotation) {
|
|
11
11
|
if (annotation === undefined)
|
|
12
12
|
throw new Error('Exposition context annotation is required');
|
|
13
|
+
// what `censor` was before the country was the gateway's to read, said in so many words rather
|
|
14
|
+
// than as a schema's
|
|
15
|
+
const censor = annotation.censor;
|
|
16
|
+
if (typeof censor === 'object' && censor !== null && !Array.isArray(censor))
|
|
17
|
+
throw new Error('`exposition.censor` is the list of countries, and `exposition.country` names the header ' +
|
|
18
|
+
'they are read from. See migrations/332.md.');
|
|
13
19
|
schemas.annotation.validate(annotation);
|
|
14
20
|
const labels = components().labels;
|
|
15
21
|
const service = {
|
|
@@ -51,6 +57,8 @@ export function deployment(_, annotation) {
|
|
|
51
57
|
properties.protocol = annotation.protocol;
|
|
52
58
|
if (annotation.ip !== undefined)
|
|
53
59
|
properties.ip = annotation.ip;
|
|
60
|
+
if (annotation.country !== undefined)
|
|
61
|
+
properties.country = annotation.country;
|
|
54
62
|
if (annotation.bouncer !== undefined)
|
|
55
63
|
properties.bouncer = annotation.bouncer;
|
|
56
64
|
if (annotation.censor !== undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../source/extensions.exposition/deployment.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC;oFACoF;AACpF,MAAM,CAAC,MAAM,KAAK,GAAG,6CAA6C,CAAA;AAElE,MAAM,UAAU,UAAU,CAAC,CAAU,EAAE,UAAuB;IAC5D,IAAI,UAAU,KAAK,SAAS;QAC1B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../source/extensions.exposition/deployment.ts"],"names":[],"mappings":"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"}
|