@smplkit/sdk 1.5.7 → 1.5.8
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/dist/index.cjs +68 -38
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +68 -38
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -18651,6 +18651,26 @@ var LogGroup = class {
|
|
|
18651
18651
|
|
|
18652
18652
|
// src/logging/client.ts
|
|
18653
18653
|
var LOGGING_BASE_URL = "https://logging.smplkit.com";
|
|
18654
|
+
var LoggerRegistrationBuffer = class {
|
|
18655
|
+
_seen = /* @__PURE__ */ new Set();
|
|
18656
|
+
_pending = [];
|
|
18657
|
+
add(id, level, resolvedLevel, service, environment) {
|
|
18658
|
+
if (this._seen.has(id)) return;
|
|
18659
|
+
this._seen.add(id);
|
|
18660
|
+
const item = { id, level, resolved_level: resolvedLevel };
|
|
18661
|
+
if (service) item.service = service;
|
|
18662
|
+
if (environment) item.environment = environment;
|
|
18663
|
+
this._pending.push(item);
|
|
18664
|
+
}
|
|
18665
|
+
drain() {
|
|
18666
|
+
const batch = this._pending;
|
|
18667
|
+
this._pending = [];
|
|
18668
|
+
return batch;
|
|
18669
|
+
}
|
|
18670
|
+
get pendingCount() {
|
|
18671
|
+
return this._pending.length;
|
|
18672
|
+
}
|
|
18673
|
+
};
|
|
18654
18674
|
async function checkError3(response, _context) {
|
|
18655
18675
|
const body = await response.text().catch(() => "");
|
|
18656
18676
|
throwForStatus(response.status, body);
|
|
@@ -18721,6 +18741,8 @@ var LoggingClient = class {
|
|
|
18721
18741
|
_keyListeners = /* @__PURE__ */ new Map();
|
|
18722
18742
|
_adapters = [];
|
|
18723
18743
|
_explicitAdapters = false;
|
|
18744
|
+
_loggerBuffer = new LoggerRegistrationBuffer();
|
|
18745
|
+
_loggerFlushTimer = null;
|
|
18724
18746
|
/** @internal */
|
|
18725
18747
|
constructor(apiKey, ensureWs, timeout) {
|
|
18726
18748
|
this._apiKey = apiKey;
|
|
@@ -18966,15 +18988,20 @@ var LoggingClient = class {
|
|
|
18966
18988
|
if (!this._explicitAdapters) {
|
|
18967
18989
|
this._adapters = this._autoLoadAdapters();
|
|
18968
18990
|
}
|
|
18969
|
-
const
|
|
18991
|
+
const service = this._parent?._service ?? null;
|
|
18992
|
+
const environment = this._parent?._environment ?? null;
|
|
18993
|
+
let discoveredCount = 0;
|
|
18970
18994
|
for (const adapter of this._adapters) {
|
|
18971
18995
|
try {
|
|
18972
18996
|
const loggers = adapter.discover();
|
|
18973
|
-
|
|
18997
|
+
for (const { name, level } of loggers) {
|
|
18998
|
+
this._loggerBuffer.add(name, level, level, service, environment);
|
|
18999
|
+
discoveredCount++;
|
|
19000
|
+
}
|
|
18974
19001
|
} catch {
|
|
18975
19002
|
}
|
|
18976
19003
|
}
|
|
18977
|
-
debug("discovery", `discovered ${
|
|
19004
|
+
debug("discovery", `discovered ${discoveredCount} logger(s) from adapters`);
|
|
18978
19005
|
for (const adapter of this._adapters) {
|
|
18979
19006
|
try {
|
|
18980
19007
|
adapter.installHook((name, level) => {
|
|
@@ -18984,39 +19011,13 @@ var LoggingClient = class {
|
|
|
18984
19011
|
} catch {
|
|
18985
19012
|
}
|
|
18986
19013
|
}
|
|
18987
|
-
if (
|
|
19014
|
+
if (discoveredCount > 0) {
|
|
18988
19015
|
const metrics = this._parent?._metrics;
|
|
18989
19016
|
if (metrics) {
|
|
18990
|
-
metrics.record("logging.loggers_discovered",
|
|
18991
|
-
}
|
|
18992
|
-
}
|
|
18993
|
-
if (discovered.length > 0) {
|
|
18994
|
-
const service = this._parent?._service ?? null;
|
|
18995
|
-
const environment = this._parent?._environment ?? null;
|
|
18996
|
-
const loggers = discovered.map(
|
|
18997
|
-
({ name, level }) => ({
|
|
18998
|
-
id: name,
|
|
18999
|
-
// For Winston/Pino there is no inherited-null distinction — both fields carry the same value.
|
|
19000
|
-
level,
|
|
19001
|
-
resolved_level: level,
|
|
19002
|
-
service: service ?? void 0,
|
|
19003
|
-
environment: environment ?? void 0
|
|
19004
|
-
})
|
|
19005
|
-
);
|
|
19006
|
-
debug("registration", `flushing ${loggers.length} logger(s) to bulk-register endpoint`);
|
|
19007
|
-
try {
|
|
19008
|
-
const result = await this._http.POST("/api/v1/loggers/bulk", {
|
|
19009
|
-
body: { loggers }
|
|
19010
|
-
});
|
|
19011
|
-
if (result.error !== void 0)
|
|
19012
|
-
await checkError3(result.response, "Failed to bulk-register loggers");
|
|
19013
|
-
debug("registration", `bulk-register complete (${loggers.length} logger(s))`);
|
|
19014
|
-
} catch (err) {
|
|
19015
|
-
console.warn(
|
|
19016
|
-
`[smplkit] Failed to bulk-register loggers: ${err instanceof Error ? err.message : String(err)}`
|
|
19017
|
-
);
|
|
19017
|
+
metrics.record("logging.loggers_discovered", discoveredCount, "loggers");
|
|
19018
19018
|
}
|
|
19019
19019
|
}
|
|
19020
|
+
await this._flushLoggerBuffer();
|
|
19020
19021
|
debug("resolution", `starting resolution pass (trigger: start())`);
|
|
19021
19022
|
try {
|
|
19022
19023
|
const [serverLoggers, serverGroups] = await Promise.all([
|
|
@@ -19035,6 +19036,9 @@ var LoggingClient = class {
|
|
|
19035
19036
|
this._wsManager.on("logger_deleted", this._handleLoggerChanged);
|
|
19036
19037
|
this._wsManager.on("group_changed", this._handleGroupChanged);
|
|
19037
19038
|
this._wsManager.on("group_deleted", this._handleGroupChanged);
|
|
19039
|
+
this._loggerFlushTimer = setInterval(() => {
|
|
19040
|
+
void this._flushLoggerBuffer();
|
|
19041
|
+
}, 3e4);
|
|
19038
19042
|
this._started = true;
|
|
19039
19043
|
}
|
|
19040
19044
|
// ------------------------------------------------------------------
|
|
@@ -19066,6 +19070,10 @@ var LoggingClient = class {
|
|
|
19066
19070
|
/** @internal */
|
|
19067
19071
|
_close() {
|
|
19068
19072
|
debug("lifecycle", "LoggingClient._close() called");
|
|
19073
|
+
if (this._loggerFlushTimer !== null) {
|
|
19074
|
+
clearInterval(this._loggerFlushTimer);
|
|
19075
|
+
this._loggerFlushTimer = null;
|
|
19076
|
+
}
|
|
19069
19077
|
for (const adapter of this._adapters) {
|
|
19070
19078
|
try {
|
|
19071
19079
|
adapter.uninstallHook();
|
|
@@ -19134,12 +19142,34 @@ var LoggingClient = class {
|
|
|
19134
19142
|
}
|
|
19135
19143
|
}
|
|
19136
19144
|
/** Called by adapter hooks when a new logger is created in the framework. */
|
|
19137
|
-
_onAdapterNewLogger(
|
|
19138
|
-
debug("discovery", `new logger intercepted at runtime: ${
|
|
19139
|
-
const
|
|
19140
|
-
|
|
19141
|
-
|
|
19142
|
-
|
|
19145
|
+
_onAdapterNewLogger(name, level) {
|
|
19146
|
+
debug("discovery", `new logger intercepted at runtime: ${name}`);
|
|
19147
|
+
const service = this._parent?._service ?? null;
|
|
19148
|
+
const environment = this._parent?._environment ?? null;
|
|
19149
|
+
this._loggerBuffer.add(name, level, level, service, environment);
|
|
19150
|
+
if (this._loggerBuffer.pendingCount >= 50) {
|
|
19151
|
+
void this._flushLoggerBuffer();
|
|
19152
|
+
}
|
|
19153
|
+
}
|
|
19154
|
+
/** Flush buffered loggers to the bulk-register endpoint. */
|
|
19155
|
+
async _flushLoggerBuffer() {
|
|
19156
|
+
const batch = this._loggerBuffer.drain();
|
|
19157
|
+
if (batch.length === 0) return;
|
|
19158
|
+
debug("registration", `flushing ${batch.length} logger(s) to bulk-register endpoint`);
|
|
19159
|
+
try {
|
|
19160
|
+
const result = await this._http.POST("/api/v1/loggers/bulk", {
|
|
19161
|
+
body: { loggers: batch }
|
|
19162
|
+
});
|
|
19163
|
+
if (result.error !== void 0) {
|
|
19164
|
+
console.warn("[smplkit] Logger bulk registration failed");
|
|
19165
|
+
} else {
|
|
19166
|
+
debug("registration", `bulk-register complete (${batch.length} logger(s))`);
|
|
19167
|
+
}
|
|
19168
|
+
} catch (err) {
|
|
19169
|
+
console.warn(
|
|
19170
|
+
`[smplkit] Logger bulk registration failed: ${err instanceof Error ? err.message : String(err)}`
|
|
19171
|
+
);
|
|
19172
|
+
}
|
|
19143
19173
|
}
|
|
19144
19174
|
// ------------------------------------------------------------------
|
|
19145
19175
|
// Internal: WebSocket handler
|