@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.d.cts
CHANGED
|
@@ -1270,6 +1270,8 @@ declare class LoggingClient {
|
|
|
1270
1270
|
private _keyListeners;
|
|
1271
1271
|
private _adapters;
|
|
1272
1272
|
private _explicitAdapters;
|
|
1273
|
+
private _loggerBuffer;
|
|
1274
|
+
private _loggerFlushTimer;
|
|
1273
1275
|
/** @internal */
|
|
1274
1276
|
constructor(apiKey: string, ensureWs: () => SharedWebSocket, timeout?: number);
|
|
1275
1277
|
/**
|
|
@@ -1328,6 +1330,8 @@ declare class LoggingClient {
|
|
|
1328
1330
|
private _applyLevels;
|
|
1329
1331
|
/** Called by adapter hooks when a new logger is created in the framework. */
|
|
1330
1332
|
private _onAdapterNewLogger;
|
|
1333
|
+
/** Flush buffered loggers to the bulk-register endpoint. */
|
|
1334
|
+
private _flushLoggerBuffer;
|
|
1331
1335
|
private _handleLoggerChanged;
|
|
1332
1336
|
private _handleGroupChanged;
|
|
1333
1337
|
private _loggerToModel;
|
package/dist/index.d.ts
CHANGED
|
@@ -1270,6 +1270,8 @@ declare class LoggingClient {
|
|
|
1270
1270
|
private _keyListeners;
|
|
1271
1271
|
private _adapters;
|
|
1272
1272
|
private _explicitAdapters;
|
|
1273
|
+
private _loggerBuffer;
|
|
1274
|
+
private _loggerFlushTimer;
|
|
1273
1275
|
/** @internal */
|
|
1274
1276
|
constructor(apiKey: string, ensureWs: () => SharedWebSocket, timeout?: number);
|
|
1275
1277
|
/**
|
|
@@ -1328,6 +1330,8 @@ declare class LoggingClient {
|
|
|
1328
1330
|
private _applyLevels;
|
|
1329
1331
|
/** Called by adapter hooks when a new logger is created in the framework. */
|
|
1330
1332
|
private _onAdapterNewLogger;
|
|
1333
|
+
/** Flush buffered loggers to the bulk-register endpoint. */
|
|
1334
|
+
private _flushLoggerBuffer;
|
|
1331
1335
|
private _handleLoggerChanged;
|
|
1332
1336
|
private _handleGroupChanged;
|
|
1333
1337
|
private _loggerToModel;
|
package/dist/index.js
CHANGED
|
@@ -18610,6 +18610,26 @@ var LogGroup = class {
|
|
|
18610
18610
|
|
|
18611
18611
|
// src/logging/client.ts
|
|
18612
18612
|
var LOGGING_BASE_URL = "https://logging.smplkit.com";
|
|
18613
|
+
var LoggerRegistrationBuffer = class {
|
|
18614
|
+
_seen = /* @__PURE__ */ new Set();
|
|
18615
|
+
_pending = [];
|
|
18616
|
+
add(id, level, resolvedLevel, service, environment) {
|
|
18617
|
+
if (this._seen.has(id)) return;
|
|
18618
|
+
this._seen.add(id);
|
|
18619
|
+
const item = { id, level, resolved_level: resolvedLevel };
|
|
18620
|
+
if (service) item.service = service;
|
|
18621
|
+
if (environment) item.environment = environment;
|
|
18622
|
+
this._pending.push(item);
|
|
18623
|
+
}
|
|
18624
|
+
drain() {
|
|
18625
|
+
const batch = this._pending;
|
|
18626
|
+
this._pending = [];
|
|
18627
|
+
return batch;
|
|
18628
|
+
}
|
|
18629
|
+
get pendingCount() {
|
|
18630
|
+
return this._pending.length;
|
|
18631
|
+
}
|
|
18632
|
+
};
|
|
18613
18633
|
async function checkError3(response, _context) {
|
|
18614
18634
|
const body = await response.text().catch(() => "");
|
|
18615
18635
|
throwForStatus(response.status, body);
|
|
@@ -18680,6 +18700,8 @@ var LoggingClient = class {
|
|
|
18680
18700
|
_keyListeners = /* @__PURE__ */ new Map();
|
|
18681
18701
|
_adapters = [];
|
|
18682
18702
|
_explicitAdapters = false;
|
|
18703
|
+
_loggerBuffer = new LoggerRegistrationBuffer();
|
|
18704
|
+
_loggerFlushTimer = null;
|
|
18683
18705
|
/** @internal */
|
|
18684
18706
|
constructor(apiKey, ensureWs, timeout) {
|
|
18685
18707
|
this._apiKey = apiKey;
|
|
@@ -18925,15 +18947,20 @@ var LoggingClient = class {
|
|
|
18925
18947
|
if (!this._explicitAdapters) {
|
|
18926
18948
|
this._adapters = this._autoLoadAdapters();
|
|
18927
18949
|
}
|
|
18928
|
-
const
|
|
18950
|
+
const service = this._parent?._service ?? null;
|
|
18951
|
+
const environment = this._parent?._environment ?? null;
|
|
18952
|
+
let discoveredCount = 0;
|
|
18929
18953
|
for (const adapter of this._adapters) {
|
|
18930
18954
|
try {
|
|
18931
18955
|
const loggers = adapter.discover();
|
|
18932
|
-
|
|
18956
|
+
for (const { name, level } of loggers) {
|
|
18957
|
+
this._loggerBuffer.add(name, level, level, service, environment);
|
|
18958
|
+
discoveredCount++;
|
|
18959
|
+
}
|
|
18933
18960
|
} catch {
|
|
18934
18961
|
}
|
|
18935
18962
|
}
|
|
18936
|
-
debug("discovery", `discovered ${
|
|
18963
|
+
debug("discovery", `discovered ${discoveredCount} logger(s) from adapters`);
|
|
18937
18964
|
for (const adapter of this._adapters) {
|
|
18938
18965
|
try {
|
|
18939
18966
|
adapter.installHook((name, level) => {
|
|
@@ -18943,39 +18970,13 @@ var LoggingClient = class {
|
|
|
18943
18970
|
} catch {
|
|
18944
18971
|
}
|
|
18945
18972
|
}
|
|
18946
|
-
if (
|
|
18973
|
+
if (discoveredCount > 0) {
|
|
18947
18974
|
const metrics = this._parent?._metrics;
|
|
18948
18975
|
if (metrics) {
|
|
18949
|
-
metrics.record("logging.loggers_discovered",
|
|
18950
|
-
}
|
|
18951
|
-
}
|
|
18952
|
-
if (discovered.length > 0) {
|
|
18953
|
-
const service = this._parent?._service ?? null;
|
|
18954
|
-
const environment = this._parent?._environment ?? null;
|
|
18955
|
-
const loggers = discovered.map(
|
|
18956
|
-
({ name, level }) => ({
|
|
18957
|
-
id: name,
|
|
18958
|
-
// For Winston/Pino there is no inherited-null distinction — both fields carry the same value.
|
|
18959
|
-
level,
|
|
18960
|
-
resolved_level: level,
|
|
18961
|
-
service: service ?? void 0,
|
|
18962
|
-
environment: environment ?? void 0
|
|
18963
|
-
})
|
|
18964
|
-
);
|
|
18965
|
-
debug("registration", `flushing ${loggers.length} logger(s) to bulk-register endpoint`);
|
|
18966
|
-
try {
|
|
18967
|
-
const result = await this._http.POST("/api/v1/loggers/bulk", {
|
|
18968
|
-
body: { loggers }
|
|
18969
|
-
});
|
|
18970
|
-
if (result.error !== void 0)
|
|
18971
|
-
await checkError3(result.response, "Failed to bulk-register loggers");
|
|
18972
|
-
debug("registration", `bulk-register complete (${loggers.length} logger(s))`);
|
|
18973
|
-
} catch (err) {
|
|
18974
|
-
console.warn(
|
|
18975
|
-
`[smplkit] Failed to bulk-register loggers: ${err instanceof Error ? err.message : String(err)}`
|
|
18976
|
-
);
|
|
18976
|
+
metrics.record("logging.loggers_discovered", discoveredCount, "loggers");
|
|
18977
18977
|
}
|
|
18978
18978
|
}
|
|
18979
|
+
await this._flushLoggerBuffer();
|
|
18979
18980
|
debug("resolution", `starting resolution pass (trigger: start())`);
|
|
18980
18981
|
try {
|
|
18981
18982
|
const [serverLoggers, serverGroups] = await Promise.all([
|
|
@@ -18994,6 +18995,9 @@ var LoggingClient = class {
|
|
|
18994
18995
|
this._wsManager.on("logger_deleted", this._handleLoggerChanged);
|
|
18995
18996
|
this._wsManager.on("group_changed", this._handleGroupChanged);
|
|
18996
18997
|
this._wsManager.on("group_deleted", this._handleGroupChanged);
|
|
18998
|
+
this._loggerFlushTimer = setInterval(() => {
|
|
18999
|
+
void this._flushLoggerBuffer();
|
|
19000
|
+
}, 3e4);
|
|
18997
19001
|
this._started = true;
|
|
18998
19002
|
}
|
|
18999
19003
|
// ------------------------------------------------------------------
|
|
@@ -19025,6 +19029,10 @@ var LoggingClient = class {
|
|
|
19025
19029
|
/** @internal */
|
|
19026
19030
|
_close() {
|
|
19027
19031
|
debug("lifecycle", "LoggingClient._close() called");
|
|
19032
|
+
if (this._loggerFlushTimer !== null) {
|
|
19033
|
+
clearInterval(this._loggerFlushTimer);
|
|
19034
|
+
this._loggerFlushTimer = null;
|
|
19035
|
+
}
|
|
19028
19036
|
for (const adapter of this._adapters) {
|
|
19029
19037
|
try {
|
|
19030
19038
|
adapter.uninstallHook();
|
|
@@ -19093,12 +19101,34 @@ var LoggingClient = class {
|
|
|
19093
19101
|
}
|
|
19094
19102
|
}
|
|
19095
19103
|
/** Called by adapter hooks when a new logger is created in the framework. */
|
|
19096
|
-
_onAdapterNewLogger(
|
|
19097
|
-
debug("discovery", `new logger intercepted at runtime: ${
|
|
19098
|
-
const
|
|
19099
|
-
|
|
19100
|
-
|
|
19101
|
-
|
|
19104
|
+
_onAdapterNewLogger(name, level) {
|
|
19105
|
+
debug("discovery", `new logger intercepted at runtime: ${name}`);
|
|
19106
|
+
const service = this._parent?._service ?? null;
|
|
19107
|
+
const environment = this._parent?._environment ?? null;
|
|
19108
|
+
this._loggerBuffer.add(name, level, level, service, environment);
|
|
19109
|
+
if (this._loggerBuffer.pendingCount >= 50) {
|
|
19110
|
+
void this._flushLoggerBuffer();
|
|
19111
|
+
}
|
|
19112
|
+
}
|
|
19113
|
+
/** Flush buffered loggers to the bulk-register endpoint. */
|
|
19114
|
+
async _flushLoggerBuffer() {
|
|
19115
|
+
const batch = this._loggerBuffer.drain();
|
|
19116
|
+
if (batch.length === 0) return;
|
|
19117
|
+
debug("registration", `flushing ${batch.length} logger(s) to bulk-register endpoint`);
|
|
19118
|
+
try {
|
|
19119
|
+
const result = await this._http.POST("/api/v1/loggers/bulk", {
|
|
19120
|
+
body: { loggers: batch }
|
|
19121
|
+
});
|
|
19122
|
+
if (result.error !== void 0) {
|
|
19123
|
+
console.warn("[smplkit] Logger bulk registration failed");
|
|
19124
|
+
} else {
|
|
19125
|
+
debug("registration", `bulk-register complete (${batch.length} logger(s))`);
|
|
19126
|
+
}
|
|
19127
|
+
} catch (err) {
|
|
19128
|
+
console.warn(
|
|
19129
|
+
`[smplkit] Logger bulk registration failed: ${err instanceof Error ? err.message : String(err)}`
|
|
19130
|
+
);
|
|
19131
|
+
}
|
|
19102
19132
|
}
|
|
19103
19133
|
// ------------------------------------------------------------------
|
|
19104
19134
|
// Internal: WebSocket handler
|