@rivalis/fleet 8.0.0
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/README.md +417 -0
- package/bin/rivalis-fleet.js +10 -0
- package/lib/AgentAuthenticator.js +56 -0
- package/lib/CommandEngine.js +258 -0
- package/lib/EventReconciler.js +90 -0
- package/lib/FleetAgent.js +1217 -0
- package/lib/FleetControl.js +139 -0
- package/lib/FleetState.js +865 -0
- package/lib/Orchestrator.js +2834 -0
- package/lib/Poller.js +113 -0
- package/lib/Snapshot.js +471 -0
- package/lib/canonical.js +82 -0
- package/lib/cli.js +3076 -0
- package/lib/domain.js +97 -0
- package/lib/env.js +99 -0
- package/lib/main.d.ts +592 -0
- package/lib/main.js +3618 -0
- package/lib/module.js +3582 -0
- package/lib/routers.js +598 -0
- package/lib/wire.js +507 -0
- package/package.json +78 -0
package/lib/domain.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/domain/index.ts
|
|
21
|
+
var domain_exports = {};
|
|
22
|
+
__export(domain_exports, {
|
|
23
|
+
EndpointError: () => import_node.EndpointError,
|
|
24
|
+
FleetError: () => FleetError,
|
|
25
|
+
NAMESPACE_SEPARATOR: () => NAMESPACE_SEPARATOR,
|
|
26
|
+
ROOM_ID_PATTERN: () => ROOM_ID_PATTERN,
|
|
27
|
+
encodeRoomId: () => encodeRoomId,
|
|
28
|
+
isValidRoomId: () => isValidRoomId,
|
|
29
|
+
namespaceRoomId: () => namespaceRoomId,
|
|
30
|
+
roomCreateSchema: () => roomCreateSchema
|
|
31
|
+
});
|
|
32
|
+
module.exports = __toCommonJS(domain_exports);
|
|
33
|
+
|
|
34
|
+
// src/domain/roomId.ts
|
|
35
|
+
var ROOM_ID_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
|
|
36
|
+
var NAMESPACE_SEPARATOR = "~";
|
|
37
|
+
var ROOM_ID_CHAR = /[A-Za-z0-9_-]/;
|
|
38
|
+
function isValidRoomId(id) {
|
|
39
|
+
return ROOM_ID_PATTERN.test(id);
|
|
40
|
+
}
|
|
41
|
+
function encodeRoomId(id) {
|
|
42
|
+
if (isValidRoomId(id)) {
|
|
43
|
+
return id;
|
|
44
|
+
}
|
|
45
|
+
let out = "";
|
|
46
|
+
for (const byte of Buffer.from(id, "utf8")) {
|
|
47
|
+
const ch = String.fromCharCode(byte);
|
|
48
|
+
out += ROOM_ID_CHAR.test(ch) ? ch : "%" + byte.toString(16).toUpperCase().padStart(2, "0");
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
function namespaceRoomId(processUid, encodedRoomId) {
|
|
53
|
+
return processUid + NAMESPACE_SEPARATOR + encodedRoomId;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// src/domain/roomCreate.ts
|
|
57
|
+
var roomCreateSchema = {
|
|
58
|
+
type: { type: "string", required: true, min: 1 },
|
|
59
|
+
roomId: { type: "string", pattern: ROOM_ID_PATTERN.source },
|
|
60
|
+
placement: { type: "object" }
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// src/domain/errors.ts
|
|
64
|
+
var import_node = require("@toolcase/node");
|
|
65
|
+
var CODE_TO_STATUS = {
|
|
66
|
+
VALIDATION: 400,
|
|
67
|
+
UNAUTHORIZED: 401,
|
|
68
|
+
INSTANCE_NOT_FOUND: 404,
|
|
69
|
+
ROOM_NOT_FOUND: 404,
|
|
70
|
+
NO_CANDIDATE: 409,
|
|
71
|
+
ROOM_EXISTS: 409,
|
|
72
|
+
INSTANCE_DRAINING: 409,
|
|
73
|
+
PAYLOAD_TOO_LARGE: 413,
|
|
74
|
+
INSTANCE_BUSY: 429,
|
|
75
|
+
AUTH_THROTTLED: 429,
|
|
76
|
+
SSE_LIMIT: 429,
|
|
77
|
+
COMMAND_FAILED: 502,
|
|
78
|
+
INSTANCE_DISCONNECTED: 502,
|
|
79
|
+
COMMAND_TIMEOUT: 504
|
|
80
|
+
};
|
|
81
|
+
var FleetError = class extends import_node.EndpointError {
|
|
82
|
+
constructor(code, message) {
|
|
83
|
+
super(CODE_TO_STATUS[code], code, message);
|
|
84
|
+
this.name = "FleetError";
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
88
|
+
0 && (module.exports = {
|
|
89
|
+
EndpointError,
|
|
90
|
+
FleetError,
|
|
91
|
+
NAMESPACE_SEPARATOR,
|
|
92
|
+
ROOM_ID_PATTERN,
|
|
93
|
+
encodeRoomId,
|
|
94
|
+
isValidRoomId,
|
|
95
|
+
namespaceRoomId,
|
|
96
|
+
roomCreateSchema
|
|
97
|
+
});
|
package/lib/env.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/env.ts
|
|
21
|
+
var env_exports = {};
|
|
22
|
+
__export(env_exports, {
|
|
23
|
+
DEFAULT_COMMAND_TIMEOUT_MS: () => DEFAULT_COMMAND_TIMEOUT_MS,
|
|
24
|
+
DEFAULT_HEARTBEAT_MS: () => DEFAULT_HEARTBEAT_MS,
|
|
25
|
+
DEFAULT_LOG_LEVEL: () => DEFAULT_LOG_LEVEL,
|
|
26
|
+
DEFAULT_PORT: () => DEFAULT_PORT,
|
|
27
|
+
nodeEnv: () => nodeEnv,
|
|
28
|
+
readEnv: () => readEnv,
|
|
29
|
+
splitCsv: () => splitCsv
|
|
30
|
+
});
|
|
31
|
+
module.exports = __toCommonJS(env_exports);
|
|
32
|
+
var DEFAULT_PORT = 7350;
|
|
33
|
+
var DEFAULT_HEARTBEAT_MS = 5e3;
|
|
34
|
+
var DEFAULT_COMMAND_TIMEOUT_MS = 1e4;
|
|
35
|
+
var DEFAULT_LOG_LEVEL = "info";
|
|
36
|
+
function env(key, defaultValue = null, type = "string") {
|
|
37
|
+
if (typeof process === "undefined") {
|
|
38
|
+
throw new Error("env works only with NodeJS");
|
|
39
|
+
}
|
|
40
|
+
const value = process.env[key];
|
|
41
|
+
if (type === "number") {
|
|
42
|
+
if (value === void 0) {
|
|
43
|
+
return defaultValue;
|
|
44
|
+
}
|
|
45
|
+
const numberValue = parseInt(value, 10);
|
|
46
|
+
return numberValue.toString() === value ? numberValue : defaultValue;
|
|
47
|
+
}
|
|
48
|
+
if (type === "boolean") {
|
|
49
|
+
const boolValue = `${value}`.toLowerCase();
|
|
50
|
+
if (boolValue === "true") {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
if (boolValue === "false") {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return defaultValue;
|
|
57
|
+
}
|
|
58
|
+
return value !== void 0 ? value : defaultValue;
|
|
59
|
+
}
|
|
60
|
+
function splitCsv(raw) {
|
|
61
|
+
if (raw === void 0 || raw === null) {
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
return raw.split(",").map((part) => part.trim()).filter((part) => part.length > 0);
|
|
65
|
+
}
|
|
66
|
+
function readEnv(source = process.env) {
|
|
67
|
+
const previous = process.env;
|
|
68
|
+
process.env = source;
|
|
69
|
+
try {
|
|
70
|
+
return {
|
|
71
|
+
NODE_ENV: env("NODE_ENV"),
|
|
72
|
+
FLEET_HOST: env("FLEET_HOST"),
|
|
73
|
+
FLEET_PORT: env("FLEET_PORT", DEFAULT_PORT, "number"),
|
|
74
|
+
FLEET_TRUST_PROXY: env("FLEET_TRUST_PROXY", false, "boolean"),
|
|
75
|
+
FLEET_AGENT_KEY: env("FLEET_AGENT_KEY"),
|
|
76
|
+
FLEET_ADMIN_KEY: env("FLEET_ADMIN_KEY"),
|
|
77
|
+
FLEET_HEARTBEAT_MS: env("FLEET_HEARTBEAT_MS", DEFAULT_HEARTBEAT_MS, "number"),
|
|
78
|
+
FLEET_COMMAND_TIMEOUT_MS: env("FLEET_COMMAND_TIMEOUT_MS", DEFAULT_COMMAND_TIMEOUT_MS, "number"),
|
|
79
|
+
FLEET_CORS_ORIGINS: env("FLEET_CORS_ORIGINS"),
|
|
80
|
+
FLEET_SSE_QUERY_AUTH: env("FLEET_SSE_QUERY_AUTH", false, "boolean"),
|
|
81
|
+
FLEET_LOG_LEVEL: env("FLEET_LOG_LEVEL", DEFAULT_LOG_LEVEL, "string")
|
|
82
|
+
};
|
|
83
|
+
} finally {
|
|
84
|
+
process.env = previous;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function nodeEnv() {
|
|
88
|
+
return env("NODE_ENV");
|
|
89
|
+
}
|
|
90
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
91
|
+
0 && (module.exports = {
|
|
92
|
+
DEFAULT_COMMAND_TIMEOUT_MS,
|
|
93
|
+
DEFAULT_HEARTBEAT_MS,
|
|
94
|
+
DEFAULT_LOG_LEVEL,
|
|
95
|
+
DEFAULT_PORT,
|
|
96
|
+
nodeEnv,
|
|
97
|
+
readEnv,
|
|
98
|
+
splitCsv
|
|
99
|
+
});
|