@aurora-blue/signalk-connector 0.2.0-dev.20
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/LICENSE +21 -0
- package/README.md +122 -0
- package/THIRD_PARTY_NOTICES.md +11 -0
- package/VERSION +1 -0
- package/dist/src/backoff.d.ts +1 -0
- package/dist/src/backoff.js +9 -0
- package/dist/src/config.d.ts +192 -0
- package/dist/src/config.js +317 -0
- package/dist/src/connector.d.ts +69 -0
- package/dist/src/connector.js +487 -0
- package/dist/src/delta.d.ts +4 -0
- package/dist/src/delta.js +137 -0
- package/dist/src/geometry.d.ts +3 -0
- package/dist/src/geometry.js +25 -0
- package/dist/src/http-client.d.ts +22 -0
- package/dist/src/http-client.js +158 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.js +93 -0
- package/dist/src/safety/anchor-alarm.d.ts +33 -0
- package/dist/src/safety/anchor-alarm.js +79 -0
- package/dist/src/state-store.d.ts +45 -0
- package/dist/src/state-store.js +491 -0
- package/dist/src/storage-budget.d.ts +35 -0
- package/dist/src/storage-budget.js +88 -0
- package/dist/src/telemetry-catalog.d.ts +19 -0
- package/dist/src/telemetry-catalog.js +93 -0
- package/dist/src/telemetry-reducer.d.ts +22 -0
- package/dist/src/telemetry-reducer.js +150 -0
- package/dist/src/types.d.ts +115 -0
- package/dist/src/types.js +5 -0
- package/dist/src/version.d.ts +1 -0
- package/dist/src/version.js +4 -0
- package/package.json +60 -0
- package/public/aurora-blue-aboard-mark.svg +19 -0
- package/public/aurora-blue-archipelago-dark.svg +32 -0
- package/public/aurora-blue-archipelago-light.svg +81 -0
- package/public/ci-brand.css +77 -0
- package/public/ci-fonts.css +28 -0
- package/public/ci-tokens.css +139 -0
- package/public/favicon.svg +19 -0
- package/public/fonts/LICENSE +96 -0
- package/public/fonts/ubuntu-latin-300-normal.woff2 +0 -0
- package/public/fonts/ubuntu-latin-400-normal.woff2 +0 -0
- package/public/fonts/ubuntu-latin-500-normal.woff2 +0 -0
- package/public/fonts/ubuntu-latin-700-normal.woff2 +0 -0
- package/public/index.html +177 -0
- package/public/locales/de.json +82 -0
- package/public/locales/en.json +82 -0
- package/public/locales/es.json +82 -0
- package/public/locales/fr.json +82 -0
- package/public/status.css +262 -0
- package/public/status.js +237 -0
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pluginUiSchema = exports.pluginSchema = exports.resolveConfig = void 0;
|
|
4
|
+
const integer = (value, fallback, minimum, maximum, name) => {
|
|
5
|
+
const resolved = value === undefined ? fallback : value;
|
|
6
|
+
if (typeof resolved !== "number" ||
|
|
7
|
+
!Number.isInteger(resolved) ||
|
|
8
|
+
resolved < minimum ||
|
|
9
|
+
resolved > maximum) {
|
|
10
|
+
throw new Error(`${name} must be an integer between ${minimum} and ${maximum}.`);
|
|
11
|
+
}
|
|
12
|
+
return resolved;
|
|
13
|
+
};
|
|
14
|
+
const finiteNumber = (value, minimum, maximum, name) => {
|
|
15
|
+
if (value === undefined || value === null || value === "") {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
if (typeof value !== "number" ||
|
|
19
|
+
!Number.isFinite(value) ||
|
|
20
|
+
value < minimum ||
|
|
21
|
+
value > maximum) {
|
|
22
|
+
throw new Error(`${name} must be between ${minimum} and ${maximum}.`);
|
|
23
|
+
}
|
|
24
|
+
return value;
|
|
25
|
+
};
|
|
26
|
+
const isLocalDevelopmentHost = (hostname) => {
|
|
27
|
+
const host = hostname.toLowerCase().replace(/^\[|\]$/g, "");
|
|
28
|
+
if (host === "localhost" ||
|
|
29
|
+
host.endsWith(".localhost") ||
|
|
30
|
+
host.endsWith(".local") ||
|
|
31
|
+
!host.includes(".") ||
|
|
32
|
+
host === "::1" ||
|
|
33
|
+
host.startsWith("fc") ||
|
|
34
|
+
host.startsWith("fd") ||
|
|
35
|
+
host.startsWith("fe80:")) {
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
const parts = host.split(".").map(Number);
|
|
39
|
+
if (parts.length !== 4 || parts.some((part) => !Number.isInteger(part))) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
return (parts[0] === 10 ||
|
|
43
|
+
parts[0] === 127 ||
|
|
44
|
+
(parts[0] === 169 && parts[1] === 254) ||
|
|
45
|
+
(parts[0] === 192 && parts[1] === 168) ||
|
|
46
|
+
(parts[0] === 172 &&
|
|
47
|
+
parts[1] !== undefined &&
|
|
48
|
+
parts[1] >= 16 &&
|
|
49
|
+
parts[1] <= 31));
|
|
50
|
+
};
|
|
51
|
+
const resolveConfig = (input) => {
|
|
52
|
+
const raw = input;
|
|
53
|
+
const targetUrl = typeof raw.targetUrl === "string" ? raw.targetUrl.trim() : "";
|
|
54
|
+
if (targetUrl === "") {
|
|
55
|
+
throw new Error("Aurora Blue target URL is required.");
|
|
56
|
+
}
|
|
57
|
+
let parsedUrl;
|
|
58
|
+
try {
|
|
59
|
+
parsedUrl = new URL(targetUrl);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
throw new Error("Aurora Blue target URL is invalid.");
|
|
63
|
+
}
|
|
64
|
+
if (!["http:", "https:"].includes(parsedUrl.protocol)) {
|
|
65
|
+
throw new Error("Aurora Blue target URL must use HTTP or HTTPS.");
|
|
66
|
+
}
|
|
67
|
+
if (parsedUrl.username !== "" || parsedUrl.password !== "") {
|
|
68
|
+
throw new Error("Aurora Blue target URL must not contain credentials.");
|
|
69
|
+
}
|
|
70
|
+
const allowInsecureHttp = raw.allowInsecureHttp === true;
|
|
71
|
+
if (parsedUrl.protocol === "http:" && !allowInsecureHttp) {
|
|
72
|
+
throw new Error("HTTPS is required unless insecure HTTP is explicitly enabled for local development.");
|
|
73
|
+
}
|
|
74
|
+
if (parsedUrl.protocol === "http:" &&
|
|
75
|
+
!isLocalDevelopmentHost(parsedUrl.hostname)) {
|
|
76
|
+
throw new Error("Insecure HTTP is limited to local development targets and cannot be enabled for cloud targets.");
|
|
77
|
+
}
|
|
78
|
+
if (parsedUrl.search !== "" || parsedUrl.hash !== "") {
|
|
79
|
+
throw new Error("Aurora Blue target URL must not contain a query or fragment.");
|
|
80
|
+
}
|
|
81
|
+
const retryMinimumMs = integer(raw.retryMinimumMs, 1_000, 250, 60_000, "Retry minimum");
|
|
82
|
+
const retryMaximumMs = integer(raw.retryMaximumMs, 60_000, 1_000, 900_000, "Retry maximum");
|
|
83
|
+
if (retryMaximumMs < retryMinimumMs) {
|
|
84
|
+
throw new Error("Retry maximum must be greater than or equal to retry minimum.");
|
|
85
|
+
}
|
|
86
|
+
const deviceName = typeof raw.deviceName === "string" ? raw.deviceName.trim() : "";
|
|
87
|
+
const operatingProfile = raw.operatingProfile ?? "underway";
|
|
88
|
+
if (!["anchored", "moored", "underway"].includes(String(operatingProfile))) {
|
|
89
|
+
throw new Error("Operating profile is invalid.");
|
|
90
|
+
}
|
|
91
|
+
const storageProfile = raw.storageProfile ?? "auto";
|
|
92
|
+
if (!["auto", "constrained", "standard", "extended", "custom"].includes(String(storageProfile))) {
|
|
93
|
+
throw new Error("Storage profile is invalid.");
|
|
94
|
+
}
|
|
95
|
+
const anchorAlarmEnabled = raw.anchorAlarmEnabled === true;
|
|
96
|
+
const anchorLatitude = finiteNumber(raw.anchorLatitude, -90, 90, "Anchor latitude");
|
|
97
|
+
const anchorLongitude = finiteNumber(raw.anchorLongitude, -180, 180, "Anchor longitude");
|
|
98
|
+
if (anchorAlarmEnabled &&
|
|
99
|
+
(anchorLatitude === null || anchorLongitude === null)) {
|
|
100
|
+
throw new Error("Anchor latitude and longitude are required when the anchor alarm is enabled.");
|
|
101
|
+
}
|
|
102
|
+
const anchorRadiusMeters = integer(raw.anchorRadiusMeters, 30, 5, 2_000, "Anchor radius");
|
|
103
|
+
const anchorHysteresisMeters = integer(raw.anchorHysteresisMeters, 5, 0, 500, "Anchor hysteresis");
|
|
104
|
+
if (anchorHysteresisMeters >= anchorRadiusMeters) {
|
|
105
|
+
throw new Error("Anchor hysteresis must be smaller than the anchor radius.");
|
|
106
|
+
}
|
|
107
|
+
return {
|
|
108
|
+
targetUrl: parsedUrl.toString().replace(/\/$/, ""),
|
|
109
|
+
deviceName: deviceName || "Aurora Blue Signal K",
|
|
110
|
+
pairingCode: typeof raw.pairingCode === "string" && raw.pairingCode.trim() !== ""
|
|
111
|
+
? raw.pairingCode.trim()
|
|
112
|
+
: undefined,
|
|
113
|
+
allowInsecureHttp,
|
|
114
|
+
batchSize: integer(raw.batchSize, 250, 1, 500, "Batch size"),
|
|
115
|
+
flushIntervalMs: integer(raw.flushIntervalMs, 5_000, 250, 60_000, "Flush interval"),
|
|
116
|
+
samplePeriodMs: integer(raw.samplePeriodMs, 1_000, 250, 60_000, "Sample period"),
|
|
117
|
+
aisEnabled: raw.aisEnabled !== false,
|
|
118
|
+
aisSamplePeriodMs: integer(raw.aisSamplePeriodMs, 5_000, 1_000, 120_000, "AIS sample period"),
|
|
119
|
+
safetySamplePeriodMs: integer(raw.safetySamplePeriodMs, 250, 100, 5_000, "Safety sample period"),
|
|
120
|
+
requestTimeoutMs: integer(raw.requestTimeoutMs, 10_000, 1_000, 120_000, "Request timeout"),
|
|
121
|
+
retryMinimumMs,
|
|
122
|
+
retryMaximumMs,
|
|
123
|
+
storageProfile: storageProfile,
|
|
124
|
+
maxBufferEvents: integer(raw.maxBufferEvents, 1_000_000, 500, 1_000_000, "Buffer event safety limit"),
|
|
125
|
+
maxBufferBytes: integer(raw.maxBufferMegabytes, 64, 4, 1_024, "Buffer size in megabytes") *
|
|
126
|
+
1024 *
|
|
127
|
+
1024,
|
|
128
|
+
storageReserveBytes: integer(raw.storageReserveMegabytes, 256, 32, 16_384, "Storage reserve in megabytes") *
|
|
129
|
+
1024 *
|
|
130
|
+
1024,
|
|
131
|
+
storageMaximumFraction: integer(raw.storageMaximumPercent, 5, 1, 50, "Maximum storage percentage") / 100,
|
|
132
|
+
bufferSegmentBytes: integer(raw.bufferSegmentKilobytes, 256, 64, 2_048, "Buffer segment size in kilobytes") * 1024,
|
|
133
|
+
compressionEnabled: raw.compressionEnabled !== false,
|
|
134
|
+
compressionThresholdBytes: integer(raw.compressionThresholdBytes, 1_024, 256, 65_536, "Compression threshold"),
|
|
135
|
+
adaptiveTelemetryEnabled: raw.adaptiveTelemetryEnabled !== false,
|
|
136
|
+
operatingProfile: operatingProfile,
|
|
137
|
+
anchorAlarm: {
|
|
138
|
+
enabled: anchorAlarmEnabled,
|
|
139
|
+
anchor: anchorLatitude === null || anchorLongitude === null
|
|
140
|
+
? null
|
|
141
|
+
: { latitude: anchorLatitude, longitude: anchorLongitude },
|
|
142
|
+
radiusMeters: anchorRadiusMeters,
|
|
143
|
+
hysteresisMeters: anchorHysteresisMeters,
|
|
144
|
+
confirmationMs: integer(raw.anchorConfirmationSeconds, 10, 0, 300, "Anchor confirmation") * 1_000,
|
|
145
|
+
stalePositionMs: integer(raw.anchorStalePositionSeconds, 30, 5, 600, "Anchor stale-position timeout") * 1_000,
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
};
|
|
149
|
+
exports.resolveConfig = resolveConfig;
|
|
150
|
+
exports.pluginSchema = {
|
|
151
|
+
type: "object",
|
|
152
|
+
required: ["targetUrl"],
|
|
153
|
+
properties: {
|
|
154
|
+
targetUrl: {
|
|
155
|
+
type: "string",
|
|
156
|
+
title: "Aurora Blue target URL",
|
|
157
|
+
description: "Base URL of Aurora Blue Server or Aurora Blue Cloud. [Open connector status](/aurora-blue-signalk-connector/).",
|
|
158
|
+
},
|
|
159
|
+
deviceName: {
|
|
160
|
+
type: "string",
|
|
161
|
+
title: "Device name",
|
|
162
|
+
default: "Aurora Blue Signal K",
|
|
163
|
+
},
|
|
164
|
+
pairingCode: {
|
|
165
|
+
type: "string",
|
|
166
|
+
title: "Pairing code",
|
|
167
|
+
description: "Short-lived code from Aurora Blue. Cleared after successful pairing.",
|
|
168
|
+
},
|
|
169
|
+
allowInsecureHttp: {
|
|
170
|
+
type: "boolean",
|
|
171
|
+
title: "Allow insecure HTTP for local development",
|
|
172
|
+
default: false,
|
|
173
|
+
},
|
|
174
|
+
batchSize: {
|
|
175
|
+
type: "integer",
|
|
176
|
+
title: "Maximum events per batch",
|
|
177
|
+
minimum: 1,
|
|
178
|
+
maximum: 500,
|
|
179
|
+
default: 250,
|
|
180
|
+
},
|
|
181
|
+
samplePeriodMs: {
|
|
182
|
+
type: "integer",
|
|
183
|
+
title: "Signal K sample period in milliseconds",
|
|
184
|
+
minimum: 250,
|
|
185
|
+
maximum: 60000,
|
|
186
|
+
default: 1000,
|
|
187
|
+
},
|
|
188
|
+
aisEnabled: {
|
|
189
|
+
type: "boolean",
|
|
190
|
+
title: "Collect AIS targets",
|
|
191
|
+
description: "Collect selected dynamic and identity data for other vessels with conservative transfer reduction.",
|
|
192
|
+
default: true,
|
|
193
|
+
},
|
|
194
|
+
aisSamplePeriodMs: {
|
|
195
|
+
type: "integer",
|
|
196
|
+
title: "AIS sample period in milliseconds",
|
|
197
|
+
minimum: 1000,
|
|
198
|
+
maximum: 120000,
|
|
199
|
+
default: 5000,
|
|
200
|
+
},
|
|
201
|
+
adaptiveTelemetryEnabled: {
|
|
202
|
+
type: "boolean",
|
|
203
|
+
title: "Reduce telemetry by change or heartbeat",
|
|
204
|
+
default: true,
|
|
205
|
+
},
|
|
206
|
+
operatingProfile: {
|
|
207
|
+
type: "string",
|
|
208
|
+
title: "Telemetry operating profile",
|
|
209
|
+
enum: ["anchored", "moored", "underway"],
|
|
210
|
+
default: "underway",
|
|
211
|
+
},
|
|
212
|
+
storageProfile: {
|
|
213
|
+
type: "string",
|
|
214
|
+
title: "Offline storage profile",
|
|
215
|
+
description: "Auto selects a capacity class from the filesystem size. Explicit profiles use capacity-oriented limits and custom uses the advanced limits below.",
|
|
216
|
+
enum: ["auto", "constrained", "standard", "extended", "custom"],
|
|
217
|
+
enumNames: [
|
|
218
|
+
"Auto (recommended)",
|
|
219
|
+
"Constrained flash",
|
|
220
|
+
"Standard embedded storage",
|
|
221
|
+
"Extended or external storage",
|
|
222
|
+
"Custom",
|
|
223
|
+
],
|
|
224
|
+
default: "auto",
|
|
225
|
+
},
|
|
226
|
+
anchorAlarmEnabled: {
|
|
227
|
+
type: "boolean",
|
|
228
|
+
title: "Enable experimental local anchor alarm",
|
|
229
|
+
description: "Evaluation remains local, but this development version is not approved as a sole safety device.",
|
|
230
|
+
default: false,
|
|
231
|
+
},
|
|
232
|
+
anchorLatitude: {
|
|
233
|
+
type: "number",
|
|
234
|
+
title: "Anchor latitude",
|
|
235
|
+
minimum: -90,
|
|
236
|
+
maximum: 90,
|
|
237
|
+
},
|
|
238
|
+
anchorLongitude: {
|
|
239
|
+
type: "number",
|
|
240
|
+
title: "Anchor longitude",
|
|
241
|
+
minimum: -180,
|
|
242
|
+
maximum: 180,
|
|
243
|
+
},
|
|
244
|
+
anchorRadiusMeters: {
|
|
245
|
+
type: "integer",
|
|
246
|
+
title: "Anchor radius in meters",
|
|
247
|
+
minimum: 5,
|
|
248
|
+
maximum: 2000,
|
|
249
|
+
default: 30,
|
|
250
|
+
},
|
|
251
|
+
anchorHysteresisMeters: {
|
|
252
|
+
type: "integer",
|
|
253
|
+
title: "Anchor clear hysteresis in meters",
|
|
254
|
+
minimum: 0,
|
|
255
|
+
maximum: 500,
|
|
256
|
+
default: 5,
|
|
257
|
+
},
|
|
258
|
+
anchorConfirmationSeconds: {
|
|
259
|
+
type: "integer",
|
|
260
|
+
title: "Seconds outside radius before alarm",
|
|
261
|
+
minimum: 0,
|
|
262
|
+
maximum: 300,
|
|
263
|
+
default: 10,
|
|
264
|
+
},
|
|
265
|
+
anchorStalePositionSeconds: {
|
|
266
|
+
type: "integer",
|
|
267
|
+
title: "Seconds without position before alarm",
|
|
268
|
+
minimum: 5,
|
|
269
|
+
maximum: 600,
|
|
270
|
+
default: 30,
|
|
271
|
+
},
|
|
272
|
+
maxBufferEvents: {
|
|
273
|
+
type: "integer",
|
|
274
|
+
title: "Custom event safety limit",
|
|
275
|
+
description: "Absolute secondary safety limit for the custom profile. The effective event limit is derived from the byte budget and measured event size.",
|
|
276
|
+
minimum: 500,
|
|
277
|
+
maximum: 1000000,
|
|
278
|
+
default: 1000000,
|
|
279
|
+
},
|
|
280
|
+
maxBufferMegabytes: {
|
|
281
|
+
type: "integer",
|
|
282
|
+
title: "Custom maximum journal size in megabytes",
|
|
283
|
+
minimum: 4,
|
|
284
|
+
maximum: 1024,
|
|
285
|
+
default: 64,
|
|
286
|
+
},
|
|
287
|
+
storageReserveMegabytes: {
|
|
288
|
+
type: "integer",
|
|
289
|
+
title: "Custom free-space reserve in megabytes",
|
|
290
|
+
minimum: 32,
|
|
291
|
+
maximum: 16384,
|
|
292
|
+
default: 256,
|
|
293
|
+
},
|
|
294
|
+
storageMaximumPercent: {
|
|
295
|
+
type: "integer",
|
|
296
|
+
title: "Custom maximum filesystem percentage",
|
|
297
|
+
minimum: 1,
|
|
298
|
+
maximum: 50,
|
|
299
|
+
default: 5,
|
|
300
|
+
},
|
|
301
|
+
compressionEnabled: {
|
|
302
|
+
type: "boolean",
|
|
303
|
+
title: "Compress larger batches",
|
|
304
|
+
default: true,
|
|
305
|
+
},
|
|
306
|
+
},
|
|
307
|
+
};
|
|
308
|
+
exports.pluginUiSchema = {
|
|
309
|
+
targetUrl: {
|
|
310
|
+
"ui:options": {
|
|
311
|
+
enableMarkdownInDescription: true,
|
|
312
|
+
},
|
|
313
|
+
},
|
|
314
|
+
pairingCode: {
|
|
315
|
+
"ui:widget": "password",
|
|
316
|
+
},
|
|
317
|
+
};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { Delta, ServerAPI } from "@signalk/server-api";
|
|
2
|
+
import { type ConnectorConfig } from "./config";
|
|
3
|
+
import { type SubscriptionScope } from "./delta";
|
|
4
|
+
import { type AuroraBlueClient } from "./http-client";
|
|
5
|
+
import { StateStore } from "./state-store";
|
|
6
|
+
import type { ConnectorStatus } from "./types";
|
|
7
|
+
export { CONNECTOR_VERSION } from "./version";
|
|
8
|
+
export interface ConnectorRuntimeOptions {
|
|
9
|
+
now?: () => string;
|
|
10
|
+
uuid?: () => string;
|
|
11
|
+
random?: () => number;
|
|
12
|
+
client?: AuroraBlueClient;
|
|
13
|
+
autoSchedule?: boolean;
|
|
14
|
+
monotonicNow?: () => number;
|
|
15
|
+
}
|
|
16
|
+
export declare class ConnectorRuntime {
|
|
17
|
+
private readonly app;
|
|
18
|
+
private readonly store;
|
|
19
|
+
private readonly config;
|
|
20
|
+
private readonly bootId;
|
|
21
|
+
private readonly now;
|
|
22
|
+
private readonly random;
|
|
23
|
+
private readonly unsubscribes;
|
|
24
|
+
private timer;
|
|
25
|
+
private safetyTimer;
|
|
26
|
+
private runtimeConfigurationTimer;
|
|
27
|
+
private stopped;
|
|
28
|
+
private retryAttempt;
|
|
29
|
+
private droppedEvents;
|
|
30
|
+
private suppressedEvents;
|
|
31
|
+
private transferNotice;
|
|
32
|
+
private operatingMode;
|
|
33
|
+
private runtimeConfigurationPollMs;
|
|
34
|
+
private runtimeConfigurationState;
|
|
35
|
+
private runtimeConfigurationUpdatedAt;
|
|
36
|
+
private client;
|
|
37
|
+
private readonly autoSchedule;
|
|
38
|
+
private readonly anchorAlarm;
|
|
39
|
+
private readonly telemetryReducer;
|
|
40
|
+
private readonly monotonicNow;
|
|
41
|
+
private filesystemCapacity;
|
|
42
|
+
private nextCapacityRefreshAt;
|
|
43
|
+
private storageBudget;
|
|
44
|
+
private readonly emissionTimes;
|
|
45
|
+
private captureTail;
|
|
46
|
+
private pendingCaptureEvents;
|
|
47
|
+
private nextCaptureStatusAt;
|
|
48
|
+
constructor(app: ServerAPI, store: StateStore, config: ConnectorConfig, options?: ConnectorRuntimeOptions);
|
|
49
|
+
start(): Promise<void>;
|
|
50
|
+
stop(): Promise<void>;
|
|
51
|
+
capture(delta: Delta, subscriptionScope?: SubscriptionScope): Promise<void>;
|
|
52
|
+
private captureEvents;
|
|
53
|
+
status(): Promise<ConnectorStatus>;
|
|
54
|
+
flush(): Promise<void>;
|
|
55
|
+
private configureSubscriptions;
|
|
56
|
+
private subscribeToContext;
|
|
57
|
+
private startSafetyTimer;
|
|
58
|
+
private publishAnchorTransition;
|
|
59
|
+
private publishAnchorState;
|
|
60
|
+
private schedule;
|
|
61
|
+
private scheduleRuntimeConfigurationPoll;
|
|
62
|
+
private pollRuntimeConfiguration;
|
|
63
|
+
private applyRuntimeConfiguration;
|
|
64
|
+
private updateStatus;
|
|
65
|
+
private storageBudgetPolicy;
|
|
66
|
+
private refreshStorageBudget;
|
|
67
|
+
private recordEmission;
|
|
68
|
+
private emittedPerHour;
|
|
69
|
+
}
|