@studiometa/forge-core 0.1.0 → 0.2.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 +30 -0
- package/dist/executors/deployments/deploy-and-wait.d.ts +13 -0
- package/dist/executors/deployments/deploy-and-wait.d.ts.map +1 -0
- package/dist/executors/deployments/get-log.d.ts +7 -0
- package/dist/executors/deployments/get-log.d.ts.map +1 -0
- package/dist/executors/deployments/index.d.ts +3 -1
- package/dist/executors/deployments/index.d.ts.map +1 -1
- package/dist/executors/deployments/types.d.ts +31 -0
- package/dist/executors/deployments/types.d.ts.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +646 -1
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +32 -0
- package/dist/logger.d.ts.map +1 -0
- package/package.json +3 -2
package/dist/index.js
CHANGED
|
@@ -1,3 +1,27 @@
|
|
|
1
|
+
import { createWriteStream, mkdirSync } from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { dirname, join } from "node:path";
|
|
4
|
+
var __create = Object.create;
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
9
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
+
var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
13
|
+
key = keys[i];
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
15
|
+
get: ((k) => from[k]).bind(null, key),
|
|
16
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
22
|
+
value: mod,
|
|
23
|
+
enumerable: true
|
|
24
|
+
}) : target, mod));
|
|
1
25
|
/**
|
|
2
26
|
* All supported resources.
|
|
3
27
|
* Single source of truth — MCP schema and handlers derive from this.
|
|
@@ -42,6 +66,569 @@ const ACTIONS = [
|
|
|
42
66
|
"help",
|
|
43
67
|
"schema"
|
|
44
68
|
];
|
|
69
|
+
var require_quick_format_unescaped = /* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
70
|
+
function tryStringify(o) {
|
|
71
|
+
try {
|
|
72
|
+
return JSON.stringify(o);
|
|
73
|
+
} catch (e) {
|
|
74
|
+
return "\"[Circular]\"";
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
module.exports = format;
|
|
78
|
+
function format(f, args, opts) {
|
|
79
|
+
var ss = opts && opts.stringify || tryStringify;
|
|
80
|
+
var offset = 1;
|
|
81
|
+
if (typeof f === "object" && f !== null) {
|
|
82
|
+
var len = args.length + offset;
|
|
83
|
+
if (len === 1) return f;
|
|
84
|
+
var objects = new Array(len);
|
|
85
|
+
objects[0] = ss(f);
|
|
86
|
+
for (var index = 1; index < len; index++) objects[index] = ss(args[index]);
|
|
87
|
+
return objects.join(" ");
|
|
88
|
+
}
|
|
89
|
+
if (typeof f !== "string") return f;
|
|
90
|
+
var argLen = args.length;
|
|
91
|
+
if (argLen === 0) return f;
|
|
92
|
+
var str = "";
|
|
93
|
+
var a = 1 - offset;
|
|
94
|
+
var lastPos = -1;
|
|
95
|
+
var flen = f && f.length || 0;
|
|
96
|
+
for (var i = 0; i < flen;) {
|
|
97
|
+
if (f.charCodeAt(i) === 37 && i + 1 < flen) {
|
|
98
|
+
lastPos = lastPos > -1 ? lastPos : 0;
|
|
99
|
+
switch (f.charCodeAt(i + 1)) {
|
|
100
|
+
case 100:
|
|
101
|
+
case 102:
|
|
102
|
+
if (a >= argLen) break;
|
|
103
|
+
if (args[a] == null) break;
|
|
104
|
+
if (lastPos < i) str += f.slice(lastPos, i);
|
|
105
|
+
str += Number(args[a]);
|
|
106
|
+
lastPos = i + 2;
|
|
107
|
+
i++;
|
|
108
|
+
break;
|
|
109
|
+
case 105:
|
|
110
|
+
if (a >= argLen) break;
|
|
111
|
+
if (args[a] == null) break;
|
|
112
|
+
if (lastPos < i) str += f.slice(lastPos, i);
|
|
113
|
+
str += Math.floor(Number(args[a]));
|
|
114
|
+
lastPos = i + 2;
|
|
115
|
+
i++;
|
|
116
|
+
break;
|
|
117
|
+
case 79:
|
|
118
|
+
case 111:
|
|
119
|
+
case 106:
|
|
120
|
+
if (a >= argLen) break;
|
|
121
|
+
if (args[a] === void 0) break;
|
|
122
|
+
if (lastPos < i) str += f.slice(lastPos, i);
|
|
123
|
+
var type = typeof args[a];
|
|
124
|
+
if (type === "string") {
|
|
125
|
+
str += "'" + args[a] + "'";
|
|
126
|
+
lastPos = i + 2;
|
|
127
|
+
i++;
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
if (type === "function") {
|
|
131
|
+
str += args[a].name || "<anonymous>";
|
|
132
|
+
lastPos = i + 2;
|
|
133
|
+
i++;
|
|
134
|
+
break;
|
|
135
|
+
}
|
|
136
|
+
str += ss(args[a]);
|
|
137
|
+
lastPos = i + 2;
|
|
138
|
+
i++;
|
|
139
|
+
break;
|
|
140
|
+
case 115:
|
|
141
|
+
if (a >= argLen) break;
|
|
142
|
+
if (lastPos < i) str += f.slice(lastPos, i);
|
|
143
|
+
str += String(args[a]);
|
|
144
|
+
lastPos = i + 2;
|
|
145
|
+
i++;
|
|
146
|
+
break;
|
|
147
|
+
case 37:
|
|
148
|
+
if (lastPos < i) str += f.slice(lastPos, i);
|
|
149
|
+
str += "%";
|
|
150
|
+
lastPos = i + 2;
|
|
151
|
+
i++;
|
|
152
|
+
a--;
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
++a;
|
|
156
|
+
}
|
|
157
|
+
++i;
|
|
158
|
+
}
|
|
159
|
+
if (lastPos === -1) return f;
|
|
160
|
+
else if (lastPos < flen) str += f.slice(lastPos);
|
|
161
|
+
return str;
|
|
162
|
+
}
|
|
163
|
+
}));
|
|
164
|
+
var import_browser = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports, module) => {
|
|
165
|
+
var format = require_quick_format_unescaped();
|
|
166
|
+
module.exports = pino;
|
|
167
|
+
var _console = pfGlobalThisOrFallback().console || {};
|
|
168
|
+
var stdSerializers = {
|
|
169
|
+
mapHttpRequest: mock,
|
|
170
|
+
mapHttpResponse: mock,
|
|
171
|
+
wrapRequestSerializer: passthrough,
|
|
172
|
+
wrapResponseSerializer: passthrough,
|
|
173
|
+
wrapErrorSerializer: passthrough,
|
|
174
|
+
req: mock,
|
|
175
|
+
res: mock,
|
|
176
|
+
err: asErrValue,
|
|
177
|
+
errWithCause: asErrValue
|
|
178
|
+
};
|
|
179
|
+
function levelToValue(level, logger) {
|
|
180
|
+
return level === "silent" ? Infinity : logger.levels.values[level];
|
|
181
|
+
}
|
|
182
|
+
var baseLogFunctionSymbol = Symbol("pino.logFuncs");
|
|
183
|
+
var hierarchySymbol = Symbol("pino.hierarchy");
|
|
184
|
+
var logFallbackMap = {
|
|
185
|
+
error: "log",
|
|
186
|
+
fatal: "error",
|
|
187
|
+
warn: "error",
|
|
188
|
+
info: "log",
|
|
189
|
+
debug: "log",
|
|
190
|
+
trace: "log"
|
|
191
|
+
};
|
|
192
|
+
function appendChildLogger(parentLogger, childLogger) {
|
|
193
|
+
childLogger[hierarchySymbol] = {
|
|
194
|
+
logger: childLogger,
|
|
195
|
+
parent: parentLogger[hierarchySymbol]
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
function setupBaseLogFunctions(logger, levels, proto) {
|
|
199
|
+
const logFunctions = {};
|
|
200
|
+
levels.forEach((level) => {
|
|
201
|
+
logFunctions[level] = proto[level] ? proto[level] : _console[level] || _console[logFallbackMap[level] || "log"] || noop;
|
|
202
|
+
});
|
|
203
|
+
logger[baseLogFunctionSymbol] = logFunctions;
|
|
204
|
+
}
|
|
205
|
+
function shouldSerialize(serialize, serializers) {
|
|
206
|
+
if (Array.isArray(serialize)) return serialize.filter(function(k) {
|
|
207
|
+
return k !== "!stdSerializers.err";
|
|
208
|
+
});
|
|
209
|
+
else if (serialize === true) return Object.keys(serializers);
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
function pino(opts) {
|
|
213
|
+
opts = opts || {};
|
|
214
|
+
opts.browser = opts.browser || {};
|
|
215
|
+
const transmit = opts.browser.transmit;
|
|
216
|
+
if (transmit && typeof transmit.send !== "function") throw Error("pino: transmit option must have a send function");
|
|
217
|
+
const proto = opts.browser.write || _console;
|
|
218
|
+
if (opts.browser.write) opts.browser.asObject = true;
|
|
219
|
+
const serializers = opts.serializers || {};
|
|
220
|
+
const serialize = shouldSerialize(opts.browser.serialize, serializers);
|
|
221
|
+
let stdErrSerialize = opts.browser.serialize;
|
|
222
|
+
if (Array.isArray(opts.browser.serialize) && opts.browser.serialize.indexOf("!stdSerializers.err") > -1) stdErrSerialize = false;
|
|
223
|
+
const customLevels = Object.keys(opts.customLevels || {});
|
|
224
|
+
const levels = [
|
|
225
|
+
"error",
|
|
226
|
+
"fatal",
|
|
227
|
+
"warn",
|
|
228
|
+
"info",
|
|
229
|
+
"debug",
|
|
230
|
+
"trace"
|
|
231
|
+
].concat(customLevels);
|
|
232
|
+
if (typeof proto === "function") levels.forEach(function(level) {
|
|
233
|
+
proto[level] = proto;
|
|
234
|
+
});
|
|
235
|
+
if (opts.enabled === false || opts.browser.disabled) opts.level = "silent";
|
|
236
|
+
const level = opts.level || "info";
|
|
237
|
+
const logger = Object.create(proto);
|
|
238
|
+
if (!logger.log) logger.log = noop;
|
|
239
|
+
setupBaseLogFunctions(logger, levels, proto);
|
|
240
|
+
appendChildLogger({}, logger);
|
|
241
|
+
Object.defineProperty(logger, "levelVal", { get: getLevelVal });
|
|
242
|
+
Object.defineProperty(logger, "level", {
|
|
243
|
+
get: getLevel,
|
|
244
|
+
set: setLevel
|
|
245
|
+
});
|
|
246
|
+
const setOpts = {
|
|
247
|
+
transmit,
|
|
248
|
+
serialize,
|
|
249
|
+
asObject: opts.browser.asObject,
|
|
250
|
+
asObjectBindingsOnly: opts.browser.asObjectBindingsOnly,
|
|
251
|
+
formatters: opts.browser.formatters,
|
|
252
|
+
reportCaller: opts.browser.reportCaller,
|
|
253
|
+
levels,
|
|
254
|
+
timestamp: getTimeFunction(opts),
|
|
255
|
+
messageKey: opts.messageKey || "msg",
|
|
256
|
+
onChild: opts.onChild || noop
|
|
257
|
+
};
|
|
258
|
+
logger.levels = getLevels(opts);
|
|
259
|
+
logger.level = level;
|
|
260
|
+
logger.isLevelEnabled = function(level) {
|
|
261
|
+
if (!this.levels.values[level]) return false;
|
|
262
|
+
return this.levels.values[level] >= this.levels.values[this.level];
|
|
263
|
+
};
|
|
264
|
+
logger.setMaxListeners = logger.getMaxListeners = logger.emit = logger.addListener = logger.on = logger.prependListener = logger.once = logger.prependOnceListener = logger.removeListener = logger.removeAllListeners = logger.listeners = logger.listenerCount = logger.eventNames = logger.write = logger.flush = noop;
|
|
265
|
+
logger.serializers = serializers;
|
|
266
|
+
logger._serialize = serialize;
|
|
267
|
+
logger._stdErrSerialize = stdErrSerialize;
|
|
268
|
+
logger.child = function(...args) {
|
|
269
|
+
return child.call(this, setOpts, ...args);
|
|
270
|
+
};
|
|
271
|
+
if (transmit) logger._logEvent = createLogEventShape();
|
|
272
|
+
function getLevelVal() {
|
|
273
|
+
return levelToValue(this.level, this);
|
|
274
|
+
}
|
|
275
|
+
function getLevel() {
|
|
276
|
+
return this._level;
|
|
277
|
+
}
|
|
278
|
+
function setLevel(level) {
|
|
279
|
+
if (level !== "silent" && !this.levels.values[level]) throw Error("unknown level " + level);
|
|
280
|
+
this._level = level;
|
|
281
|
+
set(this, setOpts, logger, "error");
|
|
282
|
+
set(this, setOpts, logger, "fatal");
|
|
283
|
+
set(this, setOpts, logger, "warn");
|
|
284
|
+
set(this, setOpts, logger, "info");
|
|
285
|
+
set(this, setOpts, logger, "debug");
|
|
286
|
+
set(this, setOpts, logger, "trace");
|
|
287
|
+
customLevels.forEach((level) => {
|
|
288
|
+
set(this, setOpts, logger, level);
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
function child(setOpts, bindings, childOptions) {
|
|
292
|
+
if (!bindings) throw new Error("missing bindings for child Pino");
|
|
293
|
+
childOptions = childOptions || {};
|
|
294
|
+
if (serialize && bindings.serializers) childOptions.serializers = bindings.serializers;
|
|
295
|
+
const childOptionsSerializers = childOptions.serializers;
|
|
296
|
+
if (serialize && childOptionsSerializers) {
|
|
297
|
+
var childSerializers = Object.assign({}, serializers, childOptionsSerializers);
|
|
298
|
+
var childSerialize = opts.browser.serialize === true ? Object.keys(childSerializers) : serialize;
|
|
299
|
+
delete bindings.serializers;
|
|
300
|
+
applySerializers([bindings], childSerialize, childSerializers, this._stdErrSerialize);
|
|
301
|
+
}
|
|
302
|
+
function Child(parent) {
|
|
303
|
+
this._childLevel = (parent._childLevel | 0) + 1;
|
|
304
|
+
this.bindings = bindings;
|
|
305
|
+
if (childSerializers) {
|
|
306
|
+
this.serializers = childSerializers;
|
|
307
|
+
this._serialize = childSerialize;
|
|
308
|
+
}
|
|
309
|
+
if (transmit) this._logEvent = createLogEventShape([].concat(parent._logEvent.bindings, bindings));
|
|
310
|
+
}
|
|
311
|
+
Child.prototype = this;
|
|
312
|
+
const newLogger = new Child(this);
|
|
313
|
+
appendChildLogger(this, newLogger);
|
|
314
|
+
newLogger.child = function(...args) {
|
|
315
|
+
return child.call(this, setOpts, ...args);
|
|
316
|
+
};
|
|
317
|
+
newLogger.level = childOptions.level || this.level;
|
|
318
|
+
setOpts.onChild(newLogger);
|
|
319
|
+
return newLogger;
|
|
320
|
+
}
|
|
321
|
+
return logger;
|
|
322
|
+
}
|
|
323
|
+
function getLevels(opts) {
|
|
324
|
+
const customLevels = opts.customLevels || {};
|
|
325
|
+
return {
|
|
326
|
+
values: Object.assign({}, pino.levels.values, customLevels),
|
|
327
|
+
labels: Object.assign({}, pino.levels.labels, invertObject(customLevels))
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
function invertObject(obj) {
|
|
331
|
+
const inverted = {};
|
|
332
|
+
Object.keys(obj).forEach(function(key) {
|
|
333
|
+
inverted[obj[key]] = key;
|
|
334
|
+
});
|
|
335
|
+
return inverted;
|
|
336
|
+
}
|
|
337
|
+
pino.levels = {
|
|
338
|
+
values: {
|
|
339
|
+
fatal: 60,
|
|
340
|
+
error: 50,
|
|
341
|
+
warn: 40,
|
|
342
|
+
info: 30,
|
|
343
|
+
debug: 20,
|
|
344
|
+
trace: 10
|
|
345
|
+
},
|
|
346
|
+
labels: {
|
|
347
|
+
10: "trace",
|
|
348
|
+
20: "debug",
|
|
349
|
+
30: "info",
|
|
350
|
+
40: "warn",
|
|
351
|
+
50: "error",
|
|
352
|
+
60: "fatal"
|
|
353
|
+
}
|
|
354
|
+
};
|
|
355
|
+
pino.stdSerializers = stdSerializers;
|
|
356
|
+
pino.stdTimeFunctions = Object.assign({}, {
|
|
357
|
+
nullTime,
|
|
358
|
+
epochTime,
|
|
359
|
+
unixTime,
|
|
360
|
+
isoTime
|
|
361
|
+
});
|
|
362
|
+
function getBindingChain(logger) {
|
|
363
|
+
const bindings = [];
|
|
364
|
+
if (logger.bindings) bindings.push(logger.bindings);
|
|
365
|
+
let hierarchy = logger[hierarchySymbol];
|
|
366
|
+
while (hierarchy.parent) {
|
|
367
|
+
hierarchy = hierarchy.parent;
|
|
368
|
+
if (hierarchy.logger.bindings) bindings.push(hierarchy.logger.bindings);
|
|
369
|
+
}
|
|
370
|
+
return bindings.reverse();
|
|
371
|
+
}
|
|
372
|
+
function set(self, opts, rootLogger, level) {
|
|
373
|
+
Object.defineProperty(self, level, {
|
|
374
|
+
value: levelToValue(self.level, rootLogger) > levelToValue(level, rootLogger) ? noop : rootLogger[baseLogFunctionSymbol][level],
|
|
375
|
+
writable: true,
|
|
376
|
+
enumerable: true,
|
|
377
|
+
configurable: true
|
|
378
|
+
});
|
|
379
|
+
if (self[level] === noop) {
|
|
380
|
+
if (!opts.transmit) return;
|
|
381
|
+
const transmitValue = levelToValue(opts.transmit.level || self.level, rootLogger);
|
|
382
|
+
if (levelToValue(level, rootLogger) < transmitValue) return;
|
|
383
|
+
}
|
|
384
|
+
self[level] = createWrap(self, opts, rootLogger, level);
|
|
385
|
+
const bindings = getBindingChain(self);
|
|
386
|
+
if (bindings.length === 0) return;
|
|
387
|
+
self[level] = prependBindingsInArguments(bindings, self[level]);
|
|
388
|
+
}
|
|
389
|
+
function prependBindingsInArguments(bindings, logFunc) {
|
|
390
|
+
return function() {
|
|
391
|
+
return logFunc.apply(this, [...bindings, ...arguments]);
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
function createWrap(self, opts, rootLogger, level) {
|
|
395
|
+
return (function(write) {
|
|
396
|
+
return function LOG() {
|
|
397
|
+
const ts = opts.timestamp();
|
|
398
|
+
const args = new Array(arguments.length);
|
|
399
|
+
const proto = Object.getPrototypeOf && Object.getPrototypeOf(this) === _console ? _console : this;
|
|
400
|
+
for (var i = 0; i < args.length; i++) args[i] = arguments[i];
|
|
401
|
+
var argsIsSerialized = false;
|
|
402
|
+
if (opts.serialize) {
|
|
403
|
+
applySerializers(args, this._serialize, this.serializers, this._stdErrSerialize);
|
|
404
|
+
argsIsSerialized = true;
|
|
405
|
+
}
|
|
406
|
+
if (opts.asObject || opts.formatters) {
|
|
407
|
+
const out = asObject(this, level, args, ts, opts);
|
|
408
|
+
if (opts.reportCaller && out && out.length > 0 && out[0] && typeof out[0] === "object") try {
|
|
409
|
+
const caller = getCallerLocation();
|
|
410
|
+
if (caller) out[0].caller = caller;
|
|
411
|
+
} catch (e) {}
|
|
412
|
+
write.call(proto, ...out);
|
|
413
|
+
} else {
|
|
414
|
+
if (opts.reportCaller) try {
|
|
415
|
+
const caller = getCallerLocation();
|
|
416
|
+
if (caller) args.push(caller);
|
|
417
|
+
} catch (e) {}
|
|
418
|
+
write.apply(proto, args);
|
|
419
|
+
}
|
|
420
|
+
if (opts.transmit) {
|
|
421
|
+
const transmitLevel = opts.transmit.level || self._level;
|
|
422
|
+
const transmitValue = levelToValue(transmitLevel, rootLogger);
|
|
423
|
+
const methodValue = levelToValue(level, rootLogger);
|
|
424
|
+
if (methodValue < transmitValue) return;
|
|
425
|
+
transmit(this, {
|
|
426
|
+
ts,
|
|
427
|
+
methodLevel: level,
|
|
428
|
+
methodValue,
|
|
429
|
+
transmitLevel,
|
|
430
|
+
transmitValue: rootLogger.levels.values[opts.transmit.level || self._level],
|
|
431
|
+
send: opts.transmit.send,
|
|
432
|
+
val: levelToValue(self._level, rootLogger)
|
|
433
|
+
}, args, argsIsSerialized);
|
|
434
|
+
}
|
|
435
|
+
};
|
|
436
|
+
})(self[baseLogFunctionSymbol][level]);
|
|
437
|
+
}
|
|
438
|
+
function asObject(logger, level, args, ts, opts) {
|
|
439
|
+
const { level: levelFormatter, log: logObjectFormatter = (obj) => obj } = opts.formatters || {};
|
|
440
|
+
const argsCloned = args.slice();
|
|
441
|
+
let msg = argsCloned[0];
|
|
442
|
+
const logObject = {};
|
|
443
|
+
let lvl = (logger._childLevel | 0) + 1;
|
|
444
|
+
if (lvl < 1) lvl = 1;
|
|
445
|
+
if (ts) logObject.time = ts;
|
|
446
|
+
if (levelFormatter) {
|
|
447
|
+
const formattedLevel = levelFormatter(level, logger.levels.values[level]);
|
|
448
|
+
Object.assign(logObject, formattedLevel);
|
|
449
|
+
} else logObject.level = logger.levels.values[level];
|
|
450
|
+
if (opts.asObjectBindingsOnly) {
|
|
451
|
+
if (msg !== null && typeof msg === "object") while (lvl-- && typeof argsCloned[0] === "object") Object.assign(logObject, argsCloned.shift());
|
|
452
|
+
return [logObjectFormatter(logObject), ...argsCloned];
|
|
453
|
+
} else {
|
|
454
|
+
if (msg !== null && typeof msg === "object") {
|
|
455
|
+
while (lvl-- && typeof argsCloned[0] === "object") Object.assign(logObject, argsCloned.shift());
|
|
456
|
+
msg = argsCloned.length ? format(argsCloned.shift(), argsCloned) : void 0;
|
|
457
|
+
} else if (typeof msg === "string") msg = format(argsCloned.shift(), argsCloned);
|
|
458
|
+
if (msg !== void 0) logObject[opts.messageKey] = msg;
|
|
459
|
+
return [logObjectFormatter(logObject)];
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
function applySerializers(args, serialize, serializers, stdErrSerialize) {
|
|
463
|
+
for (const i in args) if (stdErrSerialize && args[i] instanceof Error) args[i] = pino.stdSerializers.err(args[i]);
|
|
464
|
+
else if (typeof args[i] === "object" && !Array.isArray(args[i]) && serialize) {
|
|
465
|
+
for (const k in args[i]) if (serialize.indexOf(k) > -1 && k in serializers) args[i][k] = serializers[k](args[i][k]);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
function transmit(logger, opts, args, argsIsSerialized = false) {
|
|
469
|
+
const send = opts.send;
|
|
470
|
+
const ts = opts.ts;
|
|
471
|
+
const methodLevel = opts.methodLevel;
|
|
472
|
+
const methodValue = opts.methodValue;
|
|
473
|
+
const val = opts.val;
|
|
474
|
+
const bindings = logger._logEvent.bindings;
|
|
475
|
+
if (!argsIsSerialized) applySerializers(args, logger._serialize || Object.keys(logger.serializers), logger.serializers, logger._stdErrSerialize === void 0 ? true : logger._stdErrSerialize);
|
|
476
|
+
logger._logEvent.ts = ts;
|
|
477
|
+
logger._logEvent.messages = args.filter(function(arg) {
|
|
478
|
+
return bindings.indexOf(arg) === -1;
|
|
479
|
+
});
|
|
480
|
+
logger._logEvent.level.label = methodLevel;
|
|
481
|
+
logger._logEvent.level.value = methodValue;
|
|
482
|
+
send(methodLevel, logger._logEvent, val);
|
|
483
|
+
logger._logEvent = createLogEventShape(bindings);
|
|
484
|
+
}
|
|
485
|
+
function createLogEventShape(bindings) {
|
|
486
|
+
return {
|
|
487
|
+
ts: 0,
|
|
488
|
+
messages: [],
|
|
489
|
+
bindings: bindings || [],
|
|
490
|
+
level: {
|
|
491
|
+
label: "",
|
|
492
|
+
value: 0
|
|
493
|
+
}
|
|
494
|
+
};
|
|
495
|
+
}
|
|
496
|
+
function asErrValue(err) {
|
|
497
|
+
const obj = {
|
|
498
|
+
type: err.constructor.name,
|
|
499
|
+
msg: err.message,
|
|
500
|
+
stack: err.stack
|
|
501
|
+
};
|
|
502
|
+
for (const key in err) if (obj[key] === void 0) obj[key] = err[key];
|
|
503
|
+
return obj;
|
|
504
|
+
}
|
|
505
|
+
function getTimeFunction(opts) {
|
|
506
|
+
if (typeof opts.timestamp === "function") return opts.timestamp;
|
|
507
|
+
if (opts.timestamp === false) return nullTime;
|
|
508
|
+
return epochTime;
|
|
509
|
+
}
|
|
510
|
+
function mock() {
|
|
511
|
+
return {};
|
|
512
|
+
}
|
|
513
|
+
function passthrough(a) {
|
|
514
|
+
return a;
|
|
515
|
+
}
|
|
516
|
+
function noop() {}
|
|
517
|
+
function nullTime() {
|
|
518
|
+
return false;
|
|
519
|
+
}
|
|
520
|
+
function epochTime() {
|
|
521
|
+
return Date.now();
|
|
522
|
+
}
|
|
523
|
+
function unixTime() {
|
|
524
|
+
return Math.round(Date.now() / 1e3);
|
|
525
|
+
}
|
|
526
|
+
function isoTime() {
|
|
527
|
+
return new Date(Date.now()).toISOString();
|
|
528
|
+
}
|
|
529
|
+
/* istanbul ignore next */
|
|
530
|
+
function pfGlobalThisOrFallback() {
|
|
531
|
+
function defd(o) {
|
|
532
|
+
return typeof o !== "undefined" && o;
|
|
533
|
+
}
|
|
534
|
+
try {
|
|
535
|
+
if (typeof globalThis !== "undefined") return globalThis;
|
|
536
|
+
Object.defineProperty(Object.prototype, "globalThis", {
|
|
537
|
+
get: function() {
|
|
538
|
+
delete Object.prototype.globalThis;
|
|
539
|
+
return this.globalThis = this;
|
|
540
|
+
},
|
|
541
|
+
configurable: true
|
|
542
|
+
});
|
|
543
|
+
return globalThis;
|
|
544
|
+
} catch (e) {
|
|
545
|
+
return defd(self) || defd(window) || defd(this) || {};
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
module.exports.default = pino;
|
|
549
|
+
module.exports.pino = pino;
|
|
550
|
+
/* istanbul ignore next */
|
|
551
|
+
function getCallerLocation() {
|
|
552
|
+
const stack = (/* @__PURE__ */ new Error()).stack;
|
|
553
|
+
if (!stack) return null;
|
|
554
|
+
const lines = stack.split("\n");
|
|
555
|
+
for (let i = 1; i < lines.length; i++) {
|
|
556
|
+
const l = lines[i].trim();
|
|
557
|
+
if (/(^at\s+)?(createWrap|LOG|set\s*\(|asObject|Object\.apply|Function\.apply)/.test(l)) continue;
|
|
558
|
+
if (l.indexOf("browser.js") !== -1) continue;
|
|
559
|
+
if (l.indexOf("node:internal") !== -1) continue;
|
|
560
|
+
if (l.indexOf("node_modules") !== -1) continue;
|
|
561
|
+
let m = l.match(/\((.*?):(\d+):(\d+)\)/);
|
|
562
|
+
if (!m) m = l.match(/at\s+(.*?):(\d+):(\d+)/);
|
|
563
|
+
if (m) {
|
|
564
|
+
const file = m[1];
|
|
565
|
+
const line = m[2];
|
|
566
|
+
const col = m[3];
|
|
567
|
+
return file + ":" + line + ":" + col;
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
return null;
|
|
571
|
+
}
|
|
572
|
+
})))(), 1);
|
|
573
|
+
/**
|
|
574
|
+
* Sensitive fields to strip from logged args.
|
|
575
|
+
* These are replaced with '[REDACTED]' to prevent token leakage.
|
|
576
|
+
*/
|
|
577
|
+
var SENSITIVE_KEYS = [
|
|
578
|
+
"apiToken",
|
|
579
|
+
"token",
|
|
580
|
+
"password",
|
|
581
|
+
"secret",
|
|
582
|
+
"key",
|
|
583
|
+
"credentials"
|
|
584
|
+
];
|
|
585
|
+
/**
|
|
586
|
+
* Return a shallow copy of `args` with sensitive keys replaced by '[REDACTED]'.
|
|
587
|
+
*/
|
|
588
|
+
function sanitizeArgs(args) {
|
|
589
|
+
const sanitized = { ...args };
|
|
590
|
+
for (const k of SENSITIVE_KEYS) if (k in sanitized) sanitized[k] = "[REDACTED]";
|
|
591
|
+
return sanitized;
|
|
592
|
+
}
|
|
593
|
+
/**
|
|
594
|
+
* Resolve the audit log file path.
|
|
595
|
+
*
|
|
596
|
+
* Priority:
|
|
597
|
+
* 1. `FORGE_AUDIT_LOG` environment variable
|
|
598
|
+
* 2. `~/.config/forge-tools/audit.log` (default)
|
|
599
|
+
*/
|
|
600
|
+
function getAuditLogPath() {
|
|
601
|
+
if (process.env.FORGE_AUDIT_LOG) return process.env.FORGE_AUDIT_LOG;
|
|
602
|
+
return join(homedir(), ".config", "forge-tools", "audit.log");
|
|
603
|
+
}
|
|
604
|
+
/**
|
|
605
|
+
* Create an audit logger that appends structured JSON lines to the audit log.
|
|
606
|
+
*
|
|
607
|
+
* Failures are always silent — logging must never interrupt the actual operation.
|
|
608
|
+
*
|
|
609
|
+
* @param source - Identifies who is logging ('mcp' or 'cli').
|
|
610
|
+
*/
|
|
611
|
+
function createAuditLogger(source) {
|
|
612
|
+
let logger = null;
|
|
613
|
+
try {
|
|
614
|
+
const logPath = getAuditLogPath();
|
|
615
|
+
mkdirSync(dirname(logPath), { recursive: true });
|
|
616
|
+
logger = (0, import_browser.default)({ level: "info" }, createWriteStream(logPath, { flags: "a" }));
|
|
617
|
+
} catch {}
|
|
618
|
+
return { log(entry) {
|
|
619
|
+
try {
|
|
620
|
+
if (!logger) return;
|
|
621
|
+
logger.info({
|
|
622
|
+
source,
|
|
623
|
+
resource: entry.resource,
|
|
624
|
+
action: entry.action,
|
|
625
|
+
args: sanitizeArgs(entry.args),
|
|
626
|
+
status: entry.status,
|
|
627
|
+
...entry.error !== void 0 ? { error: entry.error } : {}
|
|
628
|
+
});
|
|
629
|
+
} catch {}
|
|
630
|
+
} };
|
|
631
|
+
}
|
|
45
632
|
/**
|
|
46
633
|
* Create a test executor context with a mock HTTP client.
|
|
47
634
|
*
|
|
@@ -123,6 +710,64 @@ async function deploySite(options, ctx) {
|
|
|
123
710
|
return { data: void 0 };
|
|
124
711
|
}
|
|
125
712
|
/**
|
|
713
|
+
* Trigger a deployment and wait for it to complete.
|
|
714
|
+
*
|
|
715
|
+
* 1. POSTs to the deploy endpoint.
|
|
716
|
+
* 2. Polls GET /servers/{id}/sites/{site_id} every `poll_interval_ms` ms.
|
|
717
|
+
* 3. When `deployment_status` becomes null the deploy is done.
|
|
718
|
+
* 4. Fetches the deployment log.
|
|
719
|
+
* 5. Checks the most recent deployment status to determine success/failure.
|
|
720
|
+
*/
|
|
721
|
+
async function deploySiteAndWait(options, ctx) {
|
|
722
|
+
const { server_id, site_id, poll_interval_ms = 3e3, timeout_ms = 6e5, onProgress } = options;
|
|
723
|
+
const baseUrl = `/servers/${server_id}/sites/${site_id}`;
|
|
724
|
+
await ctx.client.post(`${baseUrl}/deployment/deploy`);
|
|
725
|
+
const startTime = Date.now();
|
|
726
|
+
await new Promise((resolve) => {
|
|
727
|
+
const tick = async () => {
|
|
728
|
+
const elapsed_ms = Date.now() - startTime;
|
|
729
|
+
if (elapsed_ms >= timeout_ms) {
|
|
730
|
+
resolve();
|
|
731
|
+
return;
|
|
732
|
+
}
|
|
733
|
+
const currentStatus = (await ctx.client.get(`/servers/${server_id}/sites/${site_id}`)).site.deployment_status;
|
|
734
|
+
if (onProgress) onProgress({
|
|
735
|
+
status: currentStatus ?? "done",
|
|
736
|
+
elapsed_ms
|
|
737
|
+
});
|
|
738
|
+
if (currentStatus === null) {
|
|
739
|
+
resolve();
|
|
740
|
+
return;
|
|
741
|
+
}
|
|
742
|
+
await new Promise((r) => setTimeout(r, poll_interval_ms));
|
|
743
|
+
await tick();
|
|
744
|
+
};
|
|
745
|
+
tick().catch(() => resolve());
|
|
746
|
+
});
|
|
747
|
+
const elapsed_ms = Date.now() - startTime;
|
|
748
|
+
let log = "";
|
|
749
|
+
try {
|
|
750
|
+
log = await ctx.client.get(`${baseUrl}/deployment/log`);
|
|
751
|
+
} catch {}
|
|
752
|
+
let deployStatus = "failed";
|
|
753
|
+
try {
|
|
754
|
+
const deployments = (await ctx.client.get(`${baseUrl}/deployments`)).deployments;
|
|
755
|
+
if (deployments.length > 0) deployStatus = deployments[0].status === "finished" ? "success" : "failed";
|
|
756
|
+
} catch {}
|
|
757
|
+
if (elapsed_ms >= timeout_ms) deployStatus = "failed";
|
|
758
|
+
return { data: {
|
|
759
|
+
status: deployStatus,
|
|
760
|
+
log,
|
|
761
|
+
elapsed_ms
|
|
762
|
+
} };
|
|
763
|
+
}
|
|
764
|
+
/**
|
|
765
|
+
* Get the deployment log for a site.
|
|
766
|
+
*/
|
|
767
|
+
async function getDeploymentLog(options, ctx) {
|
|
768
|
+
return { data: await ctx.client.get(`/servers/${options.server_id}/sites/${options.site_id}/deployment/log`) };
|
|
769
|
+
}
|
|
770
|
+
/**
|
|
126
771
|
* Get the output of a deployment.
|
|
127
772
|
*/
|
|
128
773
|
async function getDeploymentOutput(options, ctx) {
|
|
@@ -475,6 +1120,6 @@ async function listScheduledJobs(options, ctx) {
|
|
|
475
1120
|
async function getUser(_options, ctx) {
|
|
476
1121
|
return { data: (await ctx.client.get("/user")).user };
|
|
477
1122
|
}
|
|
478
|
-
export { ACTIONS, RESOURCES, activateCertificate, createBackupConfig, createCertificate, createCommand, createDaemon, createDatabase, createDatabaseUser, createFirewallRule, createMonitor, createNginxTemplate, createRecipe, createRedirectRule, createScheduledJob, createSecurityRule, createServer, createSite, createSshKey, createTestExecutorContext, deleteBackupConfig, deleteCertificate, deleteDaemon, deleteDatabase, deleteDatabaseUser, deleteFirewallRule, deleteMonitor, deleteNginxTemplate, deleteRecipe, deleteRedirectRule, deleteScheduledJob, deleteSecurityRule, deleteServer, deleteSite, deleteSshKey, deploySite, getBackupConfig, getCertificate, getCommand, getDaemon, getDatabase, getDatabaseUser, getDeploymentOutput, getDeploymentScript, getEnv, getFirewallRule, getMonitor, getNginxConfig, getNginxTemplate, getRecipe, getRedirectRule, getScheduledJob, getSecurityRule, getServer, getSite, getSshKey, getUser, listBackupConfigs, listCertificates, listCommands, listDaemons, listDatabaseUsers, listDatabases, listDeployments, listFirewallRules, listMonitors, listNginxTemplates, listRecipes, listRedirectRules, listScheduledJobs, listSecurityRules, listServers, listSites, listSshKeys, rebootServer, restartDaemon, runRecipe, updateDeploymentScript, updateEnv, updateNginxConfig, updateNginxTemplate };
|
|
1123
|
+
export { ACTIONS, RESOURCES, activateCertificate, createAuditLogger, createBackupConfig, createCertificate, createCommand, createDaemon, createDatabase, createDatabaseUser, createFirewallRule, createMonitor, createNginxTemplate, createRecipe, createRedirectRule, createScheduledJob, createSecurityRule, createServer, createSite, createSshKey, createTestExecutorContext, deleteBackupConfig, deleteCertificate, deleteDaemon, deleteDatabase, deleteDatabaseUser, deleteFirewallRule, deleteMonitor, deleteNginxTemplate, deleteRecipe, deleteRedirectRule, deleteScheduledJob, deleteSecurityRule, deleteServer, deleteSite, deleteSshKey, deploySite, deploySiteAndWait, getAuditLogPath, getBackupConfig, getCertificate, getCommand, getDaemon, getDatabase, getDatabaseUser, getDeploymentLog, getDeploymentOutput, getDeploymentScript, getEnv, getFirewallRule, getMonitor, getNginxConfig, getNginxTemplate, getRecipe, getRedirectRule, getScheduledJob, getSecurityRule, getServer, getSite, getSshKey, getUser, listBackupConfigs, listCertificates, listCommands, listDaemons, listDatabaseUsers, listDatabases, listDeployments, listFirewallRules, listMonitors, listNginxTemplates, listRecipes, listRedirectRules, listScheduledJobs, listSecurityRules, listServers, listSites, listSshKeys, rebootServer, restartDaemon, runRecipe, sanitizeArgs, updateDeploymentScript, updateEnv, updateNginxConfig, updateNginxTemplate };
|
|
479
1124
|
|
|
480
1125
|
//# sourceMappingURL=index.js.map
|