@forzalabs/remora 1.0.21 → 1.1.1
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/actions/automap.js +26 -42
- package/actions/compile.js +27 -43
- package/actions/create_consumer.js +24 -40
- package/actions/create_producer.js +16 -32
- package/actions/debug.js +18 -34
- package/actions/deploy.js +30 -46
- package/actions/discover.js +13 -29
- package/actions/init.js +29 -45
- package/actions/mock.js +16 -32
- package/actions/run.js +34 -52
- package/actions/sample.js +42 -58
- package/index.js +38 -43
- package/package.json +4 -4
- package/workers/ExecutorWorker.js +18 -32
- package/Constants.js +0 -34
- package/core/Affirm.js +0 -42
- package/core/Algo.js +0 -160
- package/core/dste/DSTE.js +0 -113
- package/core/logger/DebugLogService.js +0 -48
- package/core/logger/DevelopmentLogService.js +0 -70
- package/core/logger/LocalLogService.js +0 -70
- package/core/logger/Logger.js +0 -54
- package/database/DatabaseEngine.js +0 -149
- package/database/DatabaseStructure.js +0 -27
- package/definitions/DatasetDefinitions.js +0 -2
- package/definitions/ExecutorDefinitions.js +0 -2
- package/definitions/ProcessENV.js +0 -2
- package/definitions/agents/DestinationDriver.js +0 -2
- package/definitions/agents/SourceDriver.js +0 -2
- package/definitions/cli.js +0 -2
- package/definitions/database/ApiKeys.js +0 -2
- package/definitions/database/Stored.js +0 -7
- package/definitions/database/UsageStat.js +0 -2
- package/definitions/database/User.js +0 -2
- package/definitions/json_schemas/consumer-schema.json +0 -1226
- package/definitions/json_schemas/producer-schema.json +0 -308
- package/definitions/json_schemas/project-schema.json +0 -100
- package/definitions/json_schemas/source-schema.json +0 -249
- package/definitions/requests/ConsumerRequest.js +0 -2
- package/definitions/requests/Developer.js +0 -2
- package/definitions/requests/Mapping.js +0 -2
- package/definitions/requests/ProducerRequest.js +0 -2
- package/definitions/requests/Request.js +0 -2
- package/definitions/resources/Compiled.js +0 -2
- package/definitions/resources/Consumer.js +0 -2
- package/definitions/resources/Environment.js +0 -2
- package/definitions/resources/Library.js +0 -2
- package/definitions/resources/Producer.js +0 -2
- package/definitions/resources/Project.js +0 -2
- package/definitions/resources/Schema.js +0 -2
- package/definitions/resources/Source.js +0 -2
- package/definitions/temp.js +0 -2
- package/definitions/transform/Transformations.js +0 -2
- package/drivers/DeltaShareDriver.js +0 -186
- package/drivers/DriverFactory.js +0 -72
- package/drivers/DriverHelper.js +0 -248
- package/drivers/HttpApiDriver.js +0 -208
- package/drivers/RedshiftDriver.js +0 -184
- package/drivers/files/LocalDestinationDriver.js +0 -146
- package/drivers/files/LocalSourceDriver.js +0 -405
- package/drivers/s3/S3DestinationDriver.js +0 -197
- package/drivers/s3/S3SourceDriver.js +0 -495
- package/engines/CryptoEngine.js +0 -75
- package/engines/Environment.js +0 -170
- package/engines/ProcessENVManager.js +0 -83
- package/engines/RandomEngine.js +0 -47
- package/engines/SecretManager.js +0 -23
- package/engines/UserManager.js +0 -66
- package/engines/ai/AutoMapperEngine.js +0 -37
- package/engines/ai/DeveloperEngine.js +0 -497
- package/engines/ai/LLM.js +0 -255
- package/engines/consumer/ConsumerManager.js +0 -218
- package/engines/consumer/ConsumerOnFinishManager.js +0 -202
- package/engines/dataset/Dataset.js +0 -824
- package/engines/dataset/DatasetManager.js +0 -211
- package/engines/dataset/DatasetRecord.js +0 -120
- package/engines/dataset/DatasetRecordPool.js +0 -77
- package/engines/execution/RequestExecutor.js +0 -67
- package/engines/parsing/CSVParser.js +0 -60
- package/engines/parsing/LineParser.js +0 -71
- package/engines/parsing/ParseCompression.js +0 -101
- package/engines/parsing/ParseHelper.js +0 -18
- package/engines/parsing/ParseManager.js +0 -54
- package/engines/parsing/XLSParser.js +0 -87
- package/engines/parsing/XMLParser.js +0 -115
- package/engines/producer/ProducerEngine.js +0 -127
- package/engines/producer/ProducerManager.js +0 -43
- package/engines/scheduler/CronScheduler.js +0 -222
- package/engines/scheduler/QueueManager.js +0 -314
- package/engines/schema/SchemaValidator.js +0 -67
- package/engines/transform/JoinEngine.js +0 -232
- package/engines/transform/TransformationEngine.js +0 -277
- package/engines/transform/TypeCaster.js +0 -59
- package/engines/usage/DataframeManager.js +0 -55
- package/engines/usage/UsageDataManager.js +0 -151
- package/engines/usage/UsageManager.js +0 -65
- package/engines/validation/Validator.js +0 -216
- package/executors/ConsumerExecutor.js +0 -280
- package/executors/Executor.js +0 -177
- package/executors/ExecutorOrchestrator.js +0 -331
- package/executors/ExecutorPerformance.js +0 -17
- package/executors/ExecutorProgress.js +0 -54
- package/executors/ExecutorScope.js +0 -52
- package/executors/OutputExecutor.js +0 -118
- package/executors/ProducerExecutor.js +0 -108
- package/helper/Helper.js +0 -149
- package/helper/Logger.js +0 -84
- package/helper/Runtime.js +0 -20
- package/helper/Settings.js +0 -13
- package/licencing/LicenceManager.js +0 -64
- package/settings.js +0 -12
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
const Affirm_1 = __importDefault(require("../core/Affirm"));
|
|
16
|
-
const DriverFactory_1 = __importDefault(require("../drivers/DriverFactory"));
|
|
17
|
-
const Environment_1 = __importDefault(require("../engines/Environment"));
|
|
18
|
-
const CSVParser_1 = __importDefault(require("../engines/parsing/CSVParser"));
|
|
19
|
-
const ProducerManager_1 = __importDefault(require("../engines/producer/ProducerManager"));
|
|
20
|
-
const Algo_1 = __importDefault(require("../core/Algo"));
|
|
21
|
-
const LineParser_1 = __importDefault(require("../engines/parsing/LineParser"));
|
|
22
|
-
const CryptoEngine_1 = __importDefault(require("../engines/CryptoEngine"));
|
|
23
|
-
const path_1 = __importDefault(require("path"));
|
|
24
|
-
class ProducerExecutorClass {
|
|
25
|
-
constructor() {
|
|
26
|
-
this.ready = (producer, scope) => __awaiter(this, void 0, void 0, function* () {
|
|
27
|
-
(0, Affirm_1.default)(producer, 'Invalid producer');
|
|
28
|
-
const source = Environment_1.default.getSource(producer.source);
|
|
29
|
-
(0, Affirm_1.default)(source, `Invalid source ${producer.source} on producer ${producer.name}`);
|
|
30
|
-
const driver = yield DriverFactory_1.default.instantiateSource(source);
|
|
31
|
-
return yield driver.ready({ producer, scope });
|
|
32
|
-
});
|
|
33
|
-
this.processHeader = (line, producer) => {
|
|
34
|
-
const { settings: { fileType, hasHeaderRow, delimiter } } = producer;
|
|
35
|
-
switch (fileType) {
|
|
36
|
-
case 'PARQUET':
|
|
37
|
-
case 'XML':
|
|
38
|
-
case 'XLS':
|
|
39
|
-
case 'XLSX':
|
|
40
|
-
case 'CSV': {
|
|
41
|
-
const parts = CSVParser_1.default.parseRow(line, delimiter);
|
|
42
|
-
return parts;
|
|
43
|
-
}
|
|
44
|
-
case 'TXT': {
|
|
45
|
-
if (hasHeaderRow) {
|
|
46
|
-
const parts = CSVParser_1.default.parseRow(line, delimiter);
|
|
47
|
-
return parts;
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
return producer.dimensions.map(x => { var _a; return (_a = x.alias) !== null && _a !== void 0 ? _a : x.name; });
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
case 'JSON':
|
|
54
|
-
case 'JSONL': {
|
|
55
|
-
const keys = Object.keys(JSON.parse(line));
|
|
56
|
-
return keys;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
this.reconcileHeader = (header, producer) => {
|
|
61
|
-
var _a;
|
|
62
|
-
const myHeader = [...header];
|
|
63
|
-
const producerDimensions = producer.dimensions;
|
|
64
|
-
if (producerDimensions.some(x => x.sourceFilename === true))
|
|
65
|
-
myHeader.push(...producerDimensions.filter(x => x.sourceFilename === true).map(x => x.name));
|
|
66
|
-
const dimensions = [];
|
|
67
|
-
for (const dimension of producerDimensions) {
|
|
68
|
-
const key = (_a = dimension.alias) !== null && _a !== void 0 ? _a : dimension.name;
|
|
69
|
-
const index = myHeader.findIndex(x => x === key);
|
|
70
|
-
if (index < 0)
|
|
71
|
-
throw new Error(`The dimension "${dimension.name}" (with key "${key}") of producer "${producer.name}" doesn't exist in the underlying dataset.`);
|
|
72
|
-
dimensions.push({
|
|
73
|
-
index,
|
|
74
|
-
name: dimension.name,
|
|
75
|
-
prodDimension: dimension
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
return dimensions;
|
|
79
|
-
};
|
|
80
|
-
this.processLine = (options) => {
|
|
81
|
-
var _a;
|
|
82
|
-
const { line, dimensions, index, producer, tracker, chunk } = options;
|
|
83
|
-
Affirm_1.default.hasValue(line, 'Invalid line');
|
|
84
|
-
Affirm_1.default.hasValue(index, 'Invalid index');
|
|
85
|
-
(0, Affirm_1.default)(producer, 'Invalid producer');
|
|
86
|
-
if (!line)
|
|
87
|
-
return null;
|
|
88
|
-
// 1. map the underlying aliases to the new names AND cast to the correct type
|
|
89
|
-
let counter = performance.now();
|
|
90
|
-
const record = LineParser_1.default.parse(line.trim(), producer, dimensions, tracker);
|
|
91
|
-
tracker.measure('process-line:line-parse', performance.now() - counter);
|
|
92
|
-
counter = performance.now();
|
|
93
|
-
for (const dimension of dimensions) {
|
|
94
|
-
// 2. apply source file name
|
|
95
|
-
if (dimension.prodDimension.sourceFilename === true)
|
|
96
|
-
record[dimension.name] = path_1.default.basename(chunk.fileUri);
|
|
97
|
-
// 3. mask
|
|
98
|
-
const maskType = ProducerManager_1.default.getMask(dimension.prodDimension);
|
|
99
|
-
if (Algo_1.default.hasVal(maskType))
|
|
100
|
-
record[dimension.name] = CryptoEngine_1.default.hashValue(maskType, (_a = record[dimension.name]) === null || _a === void 0 ? void 0 : _a.toString(), dimension.prodDimension.type);
|
|
101
|
-
}
|
|
102
|
-
tracker.measure('process-line:dimensions-filename-mask', performance.now() - counter);
|
|
103
|
-
return record;
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
const ProducerExecutor = new ProducerExecutorClass();
|
|
108
|
-
exports.default = ProducerExecutor;
|
package/helper/Helper.js
DELETED
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
const fs = __importStar(require("fs"));
|
|
40
|
-
const path = __importStar(require("path"));
|
|
41
|
-
const uuid_1 = require("uuid");
|
|
42
|
-
const ProcessENVManager_1 = __importDefault(require("../engines/ProcessENVManager"));
|
|
43
|
-
const Helper = {
|
|
44
|
-
isDev: () => ProcessENVManager_1.default.getEnvVariable('NODE_ENV') !== 'production',
|
|
45
|
-
uuid: () => (0, uuid_1.v4)(),
|
|
46
|
-
asError: (error) => error instanceof Error ? error : new Error(error),
|
|
47
|
-
readFile: (directory) => {
|
|
48
|
-
const functionFiles = [];
|
|
49
|
-
function read(directory) {
|
|
50
|
-
const files = fs.readdirSync(directory);
|
|
51
|
-
files.forEach(filename => {
|
|
52
|
-
const fullPath = path.join(directory, filename);
|
|
53
|
-
if (fs.statSync(fullPath).isDirectory()) {
|
|
54
|
-
read(fullPath);
|
|
55
|
-
}
|
|
56
|
-
else if (filename.endsWith('.json')) {
|
|
57
|
-
functionFiles.push({
|
|
58
|
-
name: path.parse(filename).name,
|
|
59
|
-
relativePath: directory
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
read(directory);
|
|
65
|
-
return functionFiles;
|
|
66
|
-
},
|
|
67
|
-
formatDateToYYYYMM(date) {
|
|
68
|
-
if (!date)
|
|
69
|
-
return '';
|
|
70
|
-
const year = date.getFullYear();
|
|
71
|
-
const month = ('0' + (date.getMonth() + 1)).slice(-2);
|
|
72
|
-
return `${year}-${month}`;
|
|
73
|
-
},
|
|
74
|
-
formatDuration: (milliseconds) => {
|
|
75
|
-
if (!milliseconds || milliseconds < 0)
|
|
76
|
-
return '0ms';
|
|
77
|
-
if (milliseconds < 1000) {
|
|
78
|
-
return `${Math.round(milliseconds)}ms`;
|
|
79
|
-
}
|
|
80
|
-
const seconds = milliseconds / 1000;
|
|
81
|
-
if (seconds < 60) {
|
|
82
|
-
return `${seconds.toFixed(1)}s`;
|
|
83
|
-
}
|
|
84
|
-
const minutes = Math.floor(seconds / 60);
|
|
85
|
-
const remainingSeconds = seconds % 60;
|
|
86
|
-
if (minutes < 60) {
|
|
87
|
-
return `${minutes}m ${remainingSeconds.toFixed(1)}s`;
|
|
88
|
-
}
|
|
89
|
-
const hours = Math.floor(minutes / 60);
|
|
90
|
-
const remainingMinutes = minutes % 60;
|
|
91
|
-
return `${hours}h ${remainingMinutes}m`;
|
|
92
|
-
},
|
|
93
|
-
matchPattern: (pattern, items) => {
|
|
94
|
-
let patternParts = [];
|
|
95
|
-
let hasWildcard = false;
|
|
96
|
-
let result = [...items];
|
|
97
|
-
if (pattern) {
|
|
98
|
-
if (pattern.includes('%')) {
|
|
99
|
-
hasWildcard = true;
|
|
100
|
-
const parts = pattern.split('%').filter(part => part.length > 0);
|
|
101
|
-
// Store all non-empty parts for pattern matching
|
|
102
|
-
patternParts = parts;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
// Apply additional filtering for patterns with wildcards
|
|
106
|
-
if (hasWildcard && patternParts.length > 0) {
|
|
107
|
-
result = result.filter(key => {
|
|
108
|
-
// Create a function to check if the key matches the SQL-like pattern
|
|
109
|
-
const matchesPattern = (fileName, pattern) => {
|
|
110
|
-
if (!pattern.includes('%')) {
|
|
111
|
-
return fileName === pattern;
|
|
112
|
-
}
|
|
113
|
-
const parts = pattern.split('%');
|
|
114
|
-
let currentIndex = 0;
|
|
115
|
-
for (let i = 0; i < parts.length; i++) {
|
|
116
|
-
const part = parts[i];
|
|
117
|
-
if (part === '')
|
|
118
|
-
continue; // Skip empty parts from consecutive %% or leading/trailing %
|
|
119
|
-
if (i === 0 && !pattern.startsWith('%')) {
|
|
120
|
-
// First part must be at the beginning
|
|
121
|
-
if (!fileName.startsWith(part)) {
|
|
122
|
-
return false;
|
|
123
|
-
}
|
|
124
|
-
currentIndex = part.length;
|
|
125
|
-
}
|
|
126
|
-
else if (i === parts.length - 1 && !pattern.endsWith('%')) {
|
|
127
|
-
// Last part must be at the end
|
|
128
|
-
if (!fileName.endsWith(part)) {
|
|
129
|
-
return false;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
// Middle parts must exist somewhere after the current position
|
|
134
|
-
const foundIndex = fileName.indexOf(part, currentIndex);
|
|
135
|
-
if (foundIndex === -1) {
|
|
136
|
-
return false;
|
|
137
|
-
}
|
|
138
|
-
currentIndex = foundIndex + part.length;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
return true;
|
|
142
|
-
};
|
|
143
|
-
return matchesPattern(key, pattern);
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
return result;
|
|
147
|
-
}
|
|
148
|
-
};
|
|
149
|
-
exports.default = Helper;
|
package/helper/Logger.js
DELETED
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
7
|
-
class Logger {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.setLevel = (level) => this._level = level;
|
|
10
|
-
this.log = (message, level) => {
|
|
11
|
-
const myLevel = level !== null && level !== void 0 ? level : this._level;
|
|
12
|
-
if (myLevel !== 'debug')
|
|
13
|
-
return;
|
|
14
|
-
console.log(chalk_1.default.cyanBright('DEBUG'), message);
|
|
15
|
-
};
|
|
16
|
-
this.info = (message) => {
|
|
17
|
-
console.info(message);
|
|
18
|
-
};
|
|
19
|
-
this.error = (error) => {
|
|
20
|
-
console.error(error);
|
|
21
|
-
};
|
|
22
|
-
this.formatObject = (obj, depth = 0) => {
|
|
23
|
-
if (obj === null || obj === undefined)
|
|
24
|
-
return chalk_1.default.gray(String(obj));
|
|
25
|
-
if (typeof obj !== 'object')
|
|
26
|
-
return String(obj);
|
|
27
|
-
if (Array.isArray(obj))
|
|
28
|
-
return this.formatList(obj);
|
|
29
|
-
try {
|
|
30
|
-
const keys = Object.keys(obj);
|
|
31
|
-
if (keys.length === 0)
|
|
32
|
-
return chalk_1.default.gray('{}');
|
|
33
|
-
const indent = ' '.repeat(depth);
|
|
34
|
-
// Calculate column widths
|
|
35
|
-
const keyWidth = Math.max(...keys.map(key => key.length), 8) + 2;
|
|
36
|
-
const valueWidth = 40;
|
|
37
|
-
const rows = keys.map(key => {
|
|
38
|
-
const value = obj[key];
|
|
39
|
-
const formattedKey = chalk_1.default.yellow(key.padEnd(keyWidth));
|
|
40
|
-
if (value === null || value === undefined) {
|
|
41
|
-
const formattedValue = chalk_1.default.gray(String(value));
|
|
42
|
-
return `${indent} ${formattedKey} : ${formattedValue}`;
|
|
43
|
-
}
|
|
44
|
-
if (typeof value === 'object' && !Array.isArray(value)) {
|
|
45
|
-
const nestedObject = this.formatObject(value, depth + 1);
|
|
46
|
-
const lines = nestedObject.split('\n');
|
|
47
|
-
const firstLine = `${indent} ${formattedKey} : ${''.padEnd(valueWidth)}`;
|
|
48
|
-
const nestedLines = lines.map(line => `${indent} ${''.padEnd(keyWidth)} : ${line.padEnd(valueWidth)}`);
|
|
49
|
-
return [firstLine, ...nestedLines].join('\n');
|
|
50
|
-
}
|
|
51
|
-
if (Array.isArray(value)) {
|
|
52
|
-
const arrayData = this.formatList(value);
|
|
53
|
-
const nested = `${arrayData}`;
|
|
54
|
-
return `${indent} ${formattedKey} : ${nested}`;
|
|
55
|
-
}
|
|
56
|
-
const formattedValue = String(value).padEnd(valueWidth);
|
|
57
|
-
return `${indent} ${formattedKey} : ${formattedValue}`;
|
|
58
|
-
});
|
|
59
|
-
const result = rows.join('\n');
|
|
60
|
-
return result;
|
|
61
|
-
}
|
|
62
|
-
catch (error) {
|
|
63
|
-
return chalk_1.default.red('Error formatting object: ') + String(error) + '\n' + String(obj);
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
this.formatList = (list) => {
|
|
67
|
-
if (!Array.isArray(list)) {
|
|
68
|
-
return chalk_1.default.yellow('Warning: formatList called with non-array') + '\n' + this.formatObject(list);
|
|
69
|
-
}
|
|
70
|
-
const header = chalk_1.default.blue(`Array (${list.length} items):`);
|
|
71
|
-
if (list.length === 0)
|
|
72
|
-
return header;
|
|
73
|
-
const items = list.map((item, index) => {
|
|
74
|
-
const formattedItem = this.formatObject(item);
|
|
75
|
-
const indentedItem = formattedItem.split('\n').map(line => ' ' + line).join('\n');
|
|
76
|
-
return chalk_1.default.cyan(` [${index}]:`) + '\n' + indentedItem;
|
|
77
|
-
});
|
|
78
|
-
return header + '\n' + items.join('\n');
|
|
79
|
-
};
|
|
80
|
-
this._level = 'prod';
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
const logger = new Logger();
|
|
84
|
-
exports.default = logger;
|
package/helper/Runtime.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const node_v8_1 = __importDefault(require("node:v8"));
|
|
7
|
-
class RuntimeClass {
|
|
8
|
-
constructor() {
|
|
9
|
-
this.getHeap = () => {
|
|
10
|
-
const { heap_size_limit, used_heap_size } = node_v8_1.default.getHeapStatistics();
|
|
11
|
-
return {
|
|
12
|
-
heapSizeMB: this._toMB(heap_size_limit),
|
|
13
|
-
usedHeapMB: this._toMB(used_heap_size)
|
|
14
|
-
};
|
|
15
|
-
};
|
|
16
|
-
this._toMB = (bytes) => Math.round(bytes / (1024 * 1024) * 100) / 100;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
const Runtime = new RuntimeClass();
|
|
20
|
-
exports.default = Runtime;
|
package/helper/Settings.js
DELETED
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const crypto_1 = __importDefault(require("crypto"));
|
|
7
|
-
const PUBLICK_KEY = `-----BEGIN PUBLIC KEY-----
|
|
8
|
-
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7BWugM83YKGzTyZ6kJyy
|
|
9
|
-
M01JoGYBQYn/9H9utQQyC/uugV4g9d7vv87I2yUfqiHtx7BQj0mOGctqnK7vuRcg
|
|
10
|
-
py7fghTjsUj0MDhs8cEpc+47m0xdsU9MQQ8Xze8B3FcdvCc4xtT5nruTAUWMGIAM
|
|
11
|
-
WLHG8lWxkHjTSZn4S0RdpRBB7fw4jyVkc+vXCTtVtYQwMWjcErNFrdCenvci4Vus
|
|
12
|
-
nKlyfKS6ccLQphOc/I2w6zllFwD/l90vQeQ6kDO01aJLOmJPzvlU/TSP/lcxCYTA
|
|
13
|
-
TgQJQxd5UdnTSDjNw+Uu/jzZ5mVlCbtYH1RoJ6cGNglzN8Q50mVk/iVyoZCZ94b4
|
|
14
|
-
bwIDAQAB
|
|
15
|
-
-----END PUBLIC KEY-----`;
|
|
16
|
-
class LicenceManagerClass {
|
|
17
|
-
constructor() {
|
|
18
|
-
this.generate = (customer, expirationDays, features, privateKey) => {
|
|
19
|
-
const now = new Date();
|
|
20
|
-
const expirationDate = new Date(now.getTime() + expirationDays * 24 * 60 * 60 * 1000);
|
|
21
|
-
const licenceData = {
|
|
22
|
-
customer,
|
|
23
|
-
features,
|
|
24
|
-
issued: now.toISOString(),
|
|
25
|
-
expires: expirationDate.toISOString()
|
|
26
|
-
};
|
|
27
|
-
const licenceString = JSON.stringify(licenceData);
|
|
28
|
-
const sign = crypto_1.default.createSign('SHA256');
|
|
29
|
-
sign.update(licenceString);
|
|
30
|
-
sign.end();
|
|
31
|
-
const signature = sign.sign(privateKey, 'base64');
|
|
32
|
-
const licence = { data: licenceData, signature };
|
|
33
|
-
return Buffer.from(JSON.stringify(licence)).toString('base64');
|
|
34
|
-
};
|
|
35
|
-
this.validate = (licence) => {
|
|
36
|
-
try {
|
|
37
|
-
const licenceJSON = Buffer.from(licence, 'base64').toString();
|
|
38
|
-
const licenceData = JSON.parse(licenceJSON);
|
|
39
|
-
const { data, signature } = licenceData;
|
|
40
|
-
const now = new Date();
|
|
41
|
-
const expirationDate = new Date(data.expires);
|
|
42
|
-
if (now > expirationDate)
|
|
43
|
-
return { valid: false, reason: 'License expired', expiryDate: expirationDate };
|
|
44
|
-
const verify = crypto_1.default.createVerify('SHA256');
|
|
45
|
-
verify.update(JSON.stringify(data));
|
|
46
|
-
const isSignatureValid = verify.verify(PUBLICK_KEY, signature, 'base64');
|
|
47
|
-
if (!isSignatureValid)
|
|
48
|
-
return { valid: false, reason: 'Invalid license signature' };
|
|
49
|
-
return {
|
|
50
|
-
valid: true,
|
|
51
|
-
expiryDate: expirationDate,
|
|
52
|
-
daysRemaining: Math.ceil((expirationDate.getTime() - now.getTime()) / (24 * 60 * 60 * 1000)),
|
|
53
|
-
features: data.features,
|
|
54
|
-
customer: data.customer
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
return { valid: false, reason: 'License parsing error', details: error.message };
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
const LicenceManager = new LicenceManagerClass();
|
|
64
|
-
exports.default = LicenceManager;
|
package/settings.js
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.REMORA_WORKER_USER = void 0;
|
|
4
|
-
exports.REMORA_WORKER_USER = {
|
|
5
|
-
_id: '__remora_worker__',
|
|
6
|
-
auth: { oid: '', provider: 'internal' },
|
|
7
|
-
email: '',
|
|
8
|
-
name: 'Remora Worker',
|
|
9
|
-
roles: ['root'],
|
|
10
|
-
_signature: '',
|
|
11
|
-
lastLogin: new Date().toJSON()
|
|
12
|
-
};
|