@toa.io/extensions.exposition 1.0.0-alpha.243 → 1.0.0-alpha.245
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/features/dynamic.feature +2 -2
- package/features/etag.feature +39 -0
- package/package.json +2 -2
- package/source/Endpoint.ts +49 -23
- package/source/Factory.ts +13 -0
- package/source/Gateway.ts +0 -8
- package/source/Tenant.ts +2 -3
- package/transpiled/Endpoint.d.ts +2 -0
- package/transpiled/Endpoint.js +34 -21
- package/transpiled/Endpoint.js.map +1 -1
- package/transpiled/Factory.js +9 -0
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Gateway.d.ts +0 -1
- package/transpiled/Gateway.js +0 -6
- package/transpiled/Gateway.js.map +1 -1
- package/transpiled/Tenant.js +2 -2
- package/transpiled/Tenant.js.map +1 -1
- package/transpiled/tsconfig.tsbuildinfo +1 -1
package/features/dynamic.feature
CHANGED
|
@@ -84,7 +84,7 @@ Feature: Dynamic tree updates
|
|
|
84
84
|
"""
|
|
85
85
|
|
|
86
86
|
Scenario: Stale branch expires
|
|
87
|
-
Given the branch TTL is
|
|
87
|
+
Given the branch TTL is 5 seconds
|
|
88
88
|
And the Gateway is running
|
|
89
89
|
And the `pots` is running with the following manifest:
|
|
90
90
|
"""yaml
|
|
@@ -104,7 +104,7 @@ Feature: Dynamic tree updates
|
|
|
104
104
|
200 OK
|
|
105
105
|
"""
|
|
106
106
|
Then the `pots` is stopped
|
|
107
|
-
And after
|
|
107
|
+
And after 6 seconds
|
|
108
108
|
When the following request is received:
|
|
109
109
|
"""
|
|
110
110
|
GET /pots/ HTTP/1.1
|
package/features/etag.feature
CHANGED
|
@@ -185,6 +185,45 @@ Feature: Optimistic concurrency control
|
|
|
185
185
|
etag: "2"
|
|
186
186
|
"""
|
|
187
187
|
|
|
188
|
+
Scenario: Hash `if-none-match` on versioned resource
|
|
189
|
+
Given the `pots` is running with the following manifest:
|
|
190
|
+
"""yaml
|
|
191
|
+
exposition:
|
|
192
|
+
/:
|
|
193
|
+
io:output: true
|
|
194
|
+
POST: create
|
|
195
|
+
/:id:
|
|
196
|
+
GET: observe
|
|
197
|
+
"""
|
|
198
|
+
When the following request is received:
|
|
199
|
+
"""
|
|
200
|
+
POST /pots/ HTTP/1.1
|
|
201
|
+
host: nex.toa.io
|
|
202
|
+
accept: application/yaml
|
|
203
|
+
content-type: application/yaml
|
|
204
|
+
|
|
205
|
+
title: Hello
|
|
206
|
+
volume: 1.5
|
|
207
|
+
"""
|
|
208
|
+
Then the following reply is sent:
|
|
209
|
+
"""
|
|
210
|
+
201 Created
|
|
211
|
+
etag: "1"
|
|
212
|
+
|
|
213
|
+
id: ${{ id }}
|
|
214
|
+
"""
|
|
215
|
+
When the following request is received:
|
|
216
|
+
"""
|
|
217
|
+
GET /pots/${{ id }}/ HTTP/1.1
|
|
218
|
+
host: nex.toa.io
|
|
219
|
+
if-none-match: "ef4a2abb4c896c06d0ab3037427e6c7c3e9a32a0c982eee2df68679babd96da3"
|
|
220
|
+
"""
|
|
221
|
+
Then the following reply is sent:
|
|
222
|
+
"""
|
|
223
|
+
200 OK
|
|
224
|
+
etag: "1"
|
|
225
|
+
"""
|
|
226
|
+
|
|
188
227
|
Scenario: Unexpected `if-match` format
|
|
189
228
|
Given the `pots` is running with the following manifest:
|
|
190
229
|
"""yaml
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@toa.io/extensions.exposition",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.245",
|
|
4
4
|
"description": "Toa Exposition",
|
|
5
5
|
"author": "temich <tema.gurtovoy@gmail.com>",
|
|
6
6
|
"homepage": "https://github.com/toa-io/toa#readme",
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
},
|
|
65
65
|
"testEnvironment": "node"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "053dee53258c9adf64cb038fe638b2badd75ad09"
|
|
68
68
|
}
|
package/source/Endpoint.ts
CHANGED
|
@@ -45,27 +45,8 @@ export class Endpoint implements RTD.Endpoint {
|
|
|
45
45
|
if (reply !== null && reply !== undefined) {
|
|
46
46
|
const etag = context.request.headers['if-none-match']
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
if (typeof reply === 'object' && '_version' in reply)
|
|
51
|
-
if (etag !== undefined && reply._version === this.version(etag)) {
|
|
52
|
-
message.status = 304
|
|
53
|
-
message.headers.set('etag', etag)
|
|
54
|
-
|
|
55
|
-
return message
|
|
56
|
-
} else
|
|
57
|
-
message.headers.set('etag', `"${reply._version.toString()}"`)
|
|
58
|
-
else if (!(reply instanceof Readable)) {
|
|
59
|
-
const hash = `"${createHash('sha256').update(JSON.stringify(reply)).digest('hex')}"`
|
|
60
|
-
|
|
61
|
-
if (etag === hash) {
|
|
62
|
-
message.status = 304
|
|
63
|
-
message.headers.set('etag', etag)
|
|
64
|
-
|
|
65
|
-
return message
|
|
66
|
-
} else
|
|
67
|
-
message.headers.set('etag', hash)
|
|
68
|
-
}
|
|
48
|
+
if (this.conditionalGet(reply, etag, message))
|
|
49
|
+
return message
|
|
69
50
|
}
|
|
70
51
|
|
|
71
52
|
// last-modified
|
|
@@ -122,6 +103,42 @@ export class Endpoint implements RTD.Endpoint {
|
|
|
122
103
|
await this.remote.disconnect(INTERRUPT)
|
|
123
104
|
}
|
|
124
105
|
|
|
106
|
+
private conditionalGet (reply: unknown, etag: string | undefined, message: http.OutgoingMessage): boolean {
|
|
107
|
+
message.headers ??= new Headers()
|
|
108
|
+
|
|
109
|
+
if (typeof reply === 'object' && reply !== null && '_version' in reply) {
|
|
110
|
+
const version = reply._version as number
|
|
111
|
+
const matched = etag === undefined ? null : this.matchVersion(etag)
|
|
112
|
+
|
|
113
|
+
if (etag !== undefined && matched !== null && version === matched) {
|
|
114
|
+
message.status = 304
|
|
115
|
+
message.headers.set('etag', etag)
|
|
116
|
+
|
|
117
|
+
return true
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
message.headers.set('etag', `"${version.toString()}"`)
|
|
121
|
+
|
|
122
|
+
return false
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (reply instanceof Readable)
|
|
126
|
+
return false
|
|
127
|
+
|
|
128
|
+
const hash = `"${createHash('sha256').update(JSON.stringify(reply)).digest('hex')}"`
|
|
129
|
+
|
|
130
|
+
if (etag === hash) {
|
|
131
|
+
message.status = 304
|
|
132
|
+
message.headers.set('etag', etag)
|
|
133
|
+
|
|
134
|
+
return true
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
message.headers.set('etag', hash)
|
|
138
|
+
|
|
139
|
+
return false
|
|
140
|
+
}
|
|
141
|
+
|
|
125
142
|
private query (context: http.Context): http.Query {
|
|
126
143
|
const query: http.Query = Object.fromEntries(context.url.searchParams)
|
|
127
144
|
const etag = context.request.headers['if-match']
|
|
@@ -132,14 +149,23 @@ export class Endpoint implements RTD.Endpoint {
|
|
|
132
149
|
return query
|
|
133
150
|
}
|
|
134
151
|
|
|
135
|
-
private
|
|
152
|
+
private matchVersion (etag: string): number | null {
|
|
136
153
|
const match = etag.match(ETAG)
|
|
137
154
|
|
|
138
155
|
if (match === null)
|
|
139
|
-
|
|
156
|
+
return null
|
|
140
157
|
|
|
141
158
|
return Number.parseInt(match.groups!.version)
|
|
142
159
|
}
|
|
160
|
+
|
|
161
|
+
private version (etag: string): number {
|
|
162
|
+
const version = this.matchVersion(etag)
|
|
163
|
+
|
|
164
|
+
if (version === null)
|
|
165
|
+
throw new http.BadRequest('Invalid ETag')
|
|
166
|
+
|
|
167
|
+
return version
|
|
168
|
+
}
|
|
143
169
|
}
|
|
144
170
|
|
|
145
171
|
export class EndpointsFactory implements RTD.EndpointsFactory {
|
package/source/Factory.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import assert from 'node:assert'
|
|
2
2
|
import { createHash } from 'node:crypto'
|
|
3
|
+
import { console } from 'openspan'
|
|
3
4
|
import { decode } from '@toa.io/generic'
|
|
4
5
|
import { Tenant } from './Tenant'
|
|
5
6
|
import { Gateway } from './Gateway'
|
|
@@ -16,6 +17,7 @@ import type { Branch } from './Branch'
|
|
|
16
17
|
import type { syntax } from './RTD'
|
|
17
18
|
import type { Broadcast } from './Gateway'
|
|
18
19
|
import type { Connector, Locator, extensions } from '@toa.io/core'
|
|
20
|
+
import type { Channel } from 'openspan'
|
|
19
21
|
|
|
20
22
|
export class Factory implements extensions.Factory {
|
|
21
23
|
private readonly boot: Bootloader
|
|
@@ -43,6 +45,8 @@ export class Factory implements extensions.Factory {
|
|
|
43
45
|
assert.ok(process.env.TOA_EXPOSITION_PROPERTIES,
|
|
44
46
|
'TOA_EXPOSITION_PROPERTIES is undefined')
|
|
45
47
|
|
|
48
|
+
configureLogs()
|
|
49
|
+
|
|
46
50
|
const options = decode<http.Options>(process.env.TOA_EXPOSITION_PROPERTIES)
|
|
47
51
|
const broadcast: Broadcast = this.boot.bindings.broadcast(CHANNEL)
|
|
48
52
|
const server = http.Server.create({ ...options })
|
|
@@ -67,6 +71,15 @@ export class Factory implements extensions.Factory {
|
|
|
67
71
|
}
|
|
68
72
|
|
|
69
73
|
const CHANNEL = 'exposition'
|
|
74
|
+
const LOGS_PREFIX = 'TOA_TELEMETRY_LOGS'
|
|
75
|
+
|
|
76
|
+
function configureLogs (): void {
|
|
77
|
+
const globEnv = process.env[LOGS_PREFIX]
|
|
78
|
+
const level: Channel = process.env.TOA_DEV === '1' ? 'debug' : 'info'
|
|
79
|
+
const options = globEnv === undefined ? { level } : decode<{ level?: Channel }>(globEnv)
|
|
80
|
+
|
|
81
|
+
console.configure({ level: options.level ?? level })
|
|
82
|
+
}
|
|
70
83
|
|
|
71
84
|
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
|
|
72
85
|
export type Bootloader = typeof import('@toa.io/boot')
|
package/source/Gateway.ts
CHANGED
|
@@ -17,7 +17,6 @@ export class Gateway extends Connector {
|
|
|
17
17
|
private lastMerge = 0
|
|
18
18
|
private lastPing = 0
|
|
19
19
|
private stopped = false
|
|
20
|
-
private reconciliation: NodeJS.Timeout | null = null
|
|
21
20
|
private resolveFirstMerge: (() => void) | null = null
|
|
22
21
|
|
|
23
22
|
public constructor (broadcast: Broadcast, tree: Tree, interception: Interception) {
|
|
@@ -73,9 +72,6 @@ export class Gateway extends Connector {
|
|
|
73
72
|
protected override dispose (): void {
|
|
74
73
|
this.stopped = true
|
|
75
74
|
|
|
76
|
-
if (this.reconciliation !== null)
|
|
77
|
-
clearInterval(this.reconciliation)
|
|
78
|
-
|
|
79
75
|
this.tree.dispose()
|
|
80
76
|
|
|
81
77
|
console.info('Gateway is closed')
|
|
@@ -143,9 +139,6 @@ export class Gateway extends Connector {
|
|
|
143
139
|
void this.knock()
|
|
144
140
|
|
|
145
141
|
await this.settled(first)
|
|
146
|
-
|
|
147
|
-
this.reconciliation = setInterval(() => void this.ping(), RECONCILE_INTERVAL)
|
|
148
|
-
this.reconciliation.unref()
|
|
149
142
|
}
|
|
150
143
|
|
|
151
144
|
/**
|
|
@@ -252,5 +245,4 @@ const SETTLE_QUIET = 10_000
|
|
|
252
245
|
const SETTLE_TIMEOUT = 30_000
|
|
253
246
|
const SETTLE_POLL = 50
|
|
254
247
|
const KNOCK_DELAYS = [0, 500, 1000, 1500]
|
|
255
|
-
const RECONCILE_INTERVAL = 30_000
|
|
256
248
|
const PING_COOLDOWN = 5_000
|
package/source/Tenant.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { setTimeout } from 'node:timers/promises'
|
|
2
2
|
import { Connector } from '@toa.io/core'
|
|
3
|
+
import { BRANCH_TTL } from './const'
|
|
3
4
|
import type { bindings } from '@toa.io/core'
|
|
4
5
|
import type { Label } from './discovery'
|
|
5
6
|
import type { Branch } from './Branch'
|
|
@@ -55,9 +56,7 @@ function exposeInterval (uptime: number): number {
|
|
|
55
56
|
}
|
|
56
57
|
|
|
57
58
|
const EXPOSE_MIN = 5_000
|
|
58
|
-
|
|
59
|
-
// a refresh no longer rebuilds the branch, so exposing often is cheap
|
|
60
|
-
const EXPOSE_MAX = 120_000
|
|
59
|
+
const EXPOSE_MAX = Math.round(BRANCH_TTL / 2.1)
|
|
61
60
|
const EXPOSE_TAU = 900_000
|
|
62
61
|
|
|
63
62
|
type Broadcast = bindings.Broadcast<Label>
|
package/transpiled/Endpoint.d.ts
CHANGED
|
@@ -14,7 +14,9 @@ export declare class Endpoint implements RTD.Endpoint {
|
|
|
14
14
|
call(context: http.Context, parameters: RTD.Parameter[]): Promise<http.OutgoingMessage>;
|
|
15
15
|
explain(parameters: RTD.Parameter[]): Promise<Introspection>;
|
|
16
16
|
close(): Promise<void>;
|
|
17
|
+
private conditionalGet;
|
|
17
18
|
private query;
|
|
19
|
+
private matchVersion;
|
|
18
20
|
private version;
|
|
19
21
|
}
|
|
20
22
|
export declare class EndpointsFactory implements RTD.EndpointsFactory {
|
package/transpiled/Endpoint.js
CHANGED
|
@@ -54,25 +54,8 @@ class Endpoint {
|
|
|
54
54
|
// etag
|
|
55
55
|
if (reply !== null && reply !== undefined) {
|
|
56
56
|
const etag = context.request.headers['if-none-match'];
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
if (etag !== undefined && reply._version === this.version(etag)) {
|
|
60
|
-
message.status = 304;
|
|
61
|
-
message.headers.set('etag', etag);
|
|
62
|
-
return message;
|
|
63
|
-
}
|
|
64
|
-
else
|
|
65
|
-
message.headers.set('etag', `"${reply._version.toString()}"`);
|
|
66
|
-
else if (!(reply instanceof node_stream_1.Readable)) {
|
|
67
|
-
const hash = `"${(0, node_crypto_1.createHash)('sha256').update(JSON.stringify(reply)).digest('hex')}"`;
|
|
68
|
-
if (etag === hash) {
|
|
69
|
-
message.status = 304;
|
|
70
|
-
message.headers.set('etag', etag);
|
|
71
|
-
return message;
|
|
72
|
-
}
|
|
73
|
-
else
|
|
74
|
-
message.headers.set('etag', hash);
|
|
75
|
-
}
|
|
57
|
+
if (this.conditionalGet(reply, etag, message))
|
|
58
|
+
return message;
|
|
76
59
|
}
|
|
77
60
|
// last-modified
|
|
78
61
|
if (typeof reply === 'object' && reply !== null && ('_updated' in reply || '_created' in reply)) {
|
|
@@ -111,6 +94,30 @@ class Endpoint {
|
|
|
111
94
|
this.remote ??= await this.discovery;
|
|
112
95
|
await this.remote.disconnect(INTERRUPT);
|
|
113
96
|
}
|
|
97
|
+
conditionalGet(reply, etag, message) {
|
|
98
|
+
message.headers ??= new Headers();
|
|
99
|
+
if (typeof reply === 'object' && reply !== null && '_version' in reply) {
|
|
100
|
+
const version = reply._version;
|
|
101
|
+
const matched = etag === undefined ? null : this.matchVersion(etag);
|
|
102
|
+
if (etag !== undefined && matched !== null && version === matched) {
|
|
103
|
+
message.status = 304;
|
|
104
|
+
message.headers.set('etag', etag);
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
message.headers.set('etag', `"${version.toString()}"`);
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
if (reply instanceof node_stream_1.Readable)
|
|
111
|
+
return false;
|
|
112
|
+
const hash = `"${(0, node_crypto_1.createHash)('sha256').update(JSON.stringify(reply)).digest('hex')}"`;
|
|
113
|
+
if (etag === hash) {
|
|
114
|
+
message.status = 304;
|
|
115
|
+
message.headers.set('etag', etag);
|
|
116
|
+
return true;
|
|
117
|
+
}
|
|
118
|
+
message.headers.set('etag', hash);
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
114
121
|
query(context) {
|
|
115
122
|
const query = Object.fromEntries(context.url.searchParams);
|
|
116
123
|
const etag = context.request.headers['if-match'];
|
|
@@ -118,12 +125,18 @@ class Endpoint {
|
|
|
118
125
|
query.version = this.version(etag);
|
|
119
126
|
return query;
|
|
120
127
|
}
|
|
121
|
-
|
|
128
|
+
matchVersion(etag) {
|
|
122
129
|
const match = etag.match(ETAG);
|
|
123
130
|
if (match === null)
|
|
124
|
-
|
|
131
|
+
return null;
|
|
125
132
|
return Number.parseInt(match.groups.version);
|
|
126
133
|
}
|
|
134
|
+
version(etag) {
|
|
135
|
+
const version = this.matchVersion(etag);
|
|
136
|
+
if (version === null)
|
|
137
|
+
throw new http.BadRequest('Invalid ETag');
|
|
138
|
+
return version;
|
|
139
|
+
}
|
|
127
140
|
}
|
|
128
141
|
exports.Endpoint = Endpoint;
|
|
129
142
|
class EndpointsFactory {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Endpoint.js","sourceRoot":"","sources":["../source/Endpoint.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAAsC;AACtC,6CAAwC;AACxC,uCAAkC;AAClC,uCAAmC;AACnC,6CAA8B;AAO9B,MAAa,QAAQ;IACF,QAAQ,CAAQ;IAChB,OAAO,CAAS;IAChB,SAAS,CAAiB;IACnC,MAAM,GAAkB,IAAI,CAAA;IAEpC,YAAoB,QAAgB,EAAE,OAAgB,EAAE,SAA0B;QAChF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;IAEM,KAAK,CAAC,IAAI,CAAE,OAAqB,EAAE,UAA2B;QACnE,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAA;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA;QAEzD,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,SAAS,CAAA;QAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAA;QAE7D,kBAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;QAEzD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAE9D,kBAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,YAAY,sBAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;QAE7G,IAAI,KAAK,YAAY,KAAK;YACxB,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAA;QAE3C,MAAM,OAAO,GAAyB,EAAE,CAAA;QAExC,OAAO;QACP,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAA;YAErD,
|
|
1
|
+
{"version":3,"file":"Endpoint.js","sourceRoot":"","sources":["../source/Endpoint.ts"],"names":[],"mappings":"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"}
|
package/transpiled/Factory.js
CHANGED
|
@@ -29,6 +29,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
29
29
|
exports.Factory = void 0;
|
|
30
30
|
const node_assert_1 = __importDefault(require("node:assert"));
|
|
31
31
|
const node_crypto_1 = require("node:crypto");
|
|
32
|
+
const openspan_1 = require("openspan");
|
|
32
33
|
const generic_1 = require("@toa.io/generic");
|
|
33
34
|
const Tenant_1 = require("./Tenant");
|
|
34
35
|
const Gateway_1 = require("./Gateway");
|
|
@@ -60,6 +61,7 @@ class Factory {
|
|
|
60
61
|
}
|
|
61
62
|
service() {
|
|
62
63
|
node_assert_1.default.ok(process.env.TOA_EXPOSITION_PROPERTIES, 'TOA_EXPOSITION_PROPERTIES is undefined');
|
|
64
|
+
configureLogs();
|
|
63
65
|
const options = (0, generic_1.decode)(process.env.TOA_EXPOSITION_PROPERTIES);
|
|
64
66
|
const broadcast = this.boot.bindings.broadcast(CHANNEL);
|
|
65
67
|
const server = http.Server.create({ ...options });
|
|
@@ -80,4 +82,11 @@ class Factory {
|
|
|
80
82
|
}
|
|
81
83
|
exports.Factory = Factory;
|
|
82
84
|
const CHANNEL = 'exposition';
|
|
85
|
+
const LOGS_PREFIX = 'TOA_TELEMETRY_LOGS';
|
|
86
|
+
function configureLogs() {
|
|
87
|
+
const globEnv = process.env[LOGS_PREFIX];
|
|
88
|
+
const level = process.env.TOA_DEV === '1' ? 'debug' : 'info';
|
|
89
|
+
const options = globEnv === undefined ? { level } : (0, generic_1.decode)(globEnv);
|
|
90
|
+
openspan_1.console.configure({ level: options.level ?? level });
|
|
91
|
+
}
|
|
83
92
|
//# sourceMappingURL=Factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Factory.js","sourceRoot":"","sources":["../source/Factory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8DAAgC;AAChC,6CAAwC;AACxC,6CAAwC;AACxC,qCAAiC;AACjC,uCAAmC;AACnC,uCAAmC;AACnC,+BAA4B;AAC5B,yCAA6C;AAC7C,6CAAqD;AACrD,2CAA+C;AAC/C,+CAA2C;AAC3C,6CAA8B;AAC9B,iDAA6C;AAC7C,6CAA8B;
|
|
1
|
+
{"version":3,"file":"Factory.js","sourceRoot":"","sources":["../source/Factory.ts"],"names":[],"mappings":"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"}
|
package/transpiled/Gateway.d.ts
CHANGED
|
@@ -11,7 +11,6 @@ export declare class Gateway extends Connector {
|
|
|
11
11
|
private lastMerge;
|
|
12
12
|
private lastPing;
|
|
13
13
|
private stopped;
|
|
14
|
-
private reconciliation;
|
|
15
14
|
private resolveFirstMerge;
|
|
16
15
|
constructor(broadcast: Broadcast, tree: Tree, interception: Interception);
|
|
17
16
|
process(context: http.Context): Promise<http.OutgoingMessage>;
|
package/transpiled/Gateway.js
CHANGED
|
@@ -41,7 +41,6 @@ class Gateway extends core_1.Connector {
|
|
|
41
41
|
lastMerge = 0;
|
|
42
42
|
lastPing = 0;
|
|
43
43
|
stopped = false;
|
|
44
|
-
reconciliation = null;
|
|
45
44
|
resolveFirstMerge = null;
|
|
46
45
|
constructor(broadcast, tree, interception) {
|
|
47
46
|
super();
|
|
@@ -75,8 +74,6 @@ class Gateway extends core_1.Connector {
|
|
|
75
74
|
}
|
|
76
75
|
dispose() {
|
|
77
76
|
this.stopped = true;
|
|
78
|
-
if (this.reconciliation !== null)
|
|
79
|
-
clearInterval(this.reconciliation);
|
|
80
77
|
this.tree.dispose();
|
|
81
78
|
openspan_1.console.info('Gateway is closed');
|
|
82
79
|
}
|
|
@@ -122,8 +119,6 @@ class Gateway extends core_1.Connector {
|
|
|
122
119
|
await this.broadcast.receive('expose', this.merge.bind(this));
|
|
123
120
|
void this.knock();
|
|
124
121
|
await this.settled(first);
|
|
125
|
-
this.reconciliation = setInterval(() => void this.ping(), RECONCILE_INTERVAL);
|
|
126
|
-
this.reconciliation.unref();
|
|
127
122
|
}
|
|
128
123
|
/**
|
|
129
124
|
* A single ping is enough only if every tenant is listening by then, which is
|
|
@@ -198,6 +193,5 @@ const SETTLE_QUIET = 10_000;
|
|
|
198
193
|
const SETTLE_TIMEOUT = 30_000;
|
|
199
194
|
const SETTLE_POLL = 50;
|
|
200
195
|
const KNOCK_DELAYS = [0, 500, 1000, 1500];
|
|
201
|
-
const RECONCILE_INTERVAL = 30_000;
|
|
202
196
|
const PING_COOLDOWN = 5_000;
|
|
203
197
|
//# sourceMappingURL=Gateway.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Gateway.js","sourceRoot":"","sources":["../source/Gateway.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,8DAAgC;AAChC,mDAAiD;AACjD,uCAAkC;AAClC,uCAAuD;AACvD,6CAA8B;AAC9B,6CAAsC;AAMtC,MAAa,OAAQ,SAAQ,gBAAS;IACnB,SAAS,CAAW;IACpB,IAAI,CAAM;IACV,WAAW,CAAc;IACzB,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAA;IAC9C,SAAS,GAAG,CAAC,CAAA;IACb,QAAQ,GAAG,CAAC,CAAA;IACZ,OAAO,GAAG,KAAK,CAAA;IACf,
|
|
1
|
+
{"version":3,"file":"Gateway.js","sourceRoot":"","sources":["../source/Gateway.ts"],"names":[],"mappings":"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"}
|
package/transpiled/Tenant.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Tenant = void 0;
|
|
4
4
|
const promises_1 = require("node:timers/promises");
|
|
5
5
|
const core_1 = require("@toa.io/core");
|
|
6
|
+
const const_1 = require("./const");
|
|
6
7
|
class Tenant extends core_1.Connector {
|
|
7
8
|
broadcast;
|
|
8
9
|
branch;
|
|
@@ -41,7 +42,6 @@ function exposeInterval(uptime) {
|
|
|
41
42
|
return Math.round(EXPOSE_MAX - (EXPOSE_MAX - EXPOSE_MIN) * Math.exp(-uptime / EXPOSE_TAU));
|
|
42
43
|
}
|
|
43
44
|
const EXPOSE_MIN = 5_000;
|
|
44
|
-
|
|
45
|
-
const EXPOSE_MAX = 120_000;
|
|
45
|
+
const EXPOSE_MAX = Math.round(const_1.BRANCH_TTL / 2.1);
|
|
46
46
|
const EXPOSE_TAU = 900_000;
|
|
47
47
|
//# sourceMappingURL=Tenant.js.map
|
package/transpiled/Tenant.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tenant.js","sourceRoot":"","sources":["../source/Tenant.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AACjD,uCAAwC;
|
|
1
|
+
{"version":3,"file":"Tenant.js","sourceRoot":"","sources":["../source/Tenant.ts"],"names":[],"mappings":";;;AAAA,mDAAiD;AACjD,uCAAwC;AACxC,mCAAoC;AAKpC,MAAa,MAAO,SAAQ,gBAAS;IAClB,SAAS,CAAW;IACpB,MAAM,CAAQ;IACvB,OAAO,GAAG,CAAC,CAAA;IACX,OAAO,GAAG,KAAK,CAAA;IAEvB,YAAoB,SAAoB,EAAE,MAAc;QACtD,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;QAC1B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QAEpB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACzB,CAAC;IAEe,KAAK,CAAC,IAAI;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAEzB,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QACnB,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QAE5D,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAA;IACtB,CAAC;IAEkB,OAAO;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IACrB,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA;YAEvD,MAAM,IAAA,qBAAU,EAAC,KAAK,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAA;YAElD,IAAI,IAAI,CAAC,OAAO;gBACd,MAAK;YAEP,MAAM,IAAI,CAAC,MAAM,EAAE,CAAA;QACrB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,MAAM;QAClB,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IACtD,CAAC;CACF;AA5CD,wBA4CC;AAED,SAAS,cAAc,CAAE,MAAc;IACrC,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAA;AAC5F,CAAC;AAED,MAAM,UAAU,GAAG,KAAK,CAAA;AACxB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAU,GAAG,GAAG,CAAC,CAAA;AAC/C,MAAM,UAAU,GAAG,OAAO,CAAA"}
|