@axiom-lattice/gateway 4.2.4 → 4.2.5
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/embed/{embed-page-AgentDetailSideApp-3LBCEKFU.js → embed-page-AgentDetailSideApp-YPN3NDEA.js} +1 -1
- package/dist/embed/{embed-page-AgentGovernanceWorkbench-K3JUQNBW.js → embed-page-AgentGovernanceWorkbench-FAZQNPAM.js} +1 -1
- package/dist/embed/{embed-page-MessageGraph-3X4ROEN6.js → embed-page-MessageGraph-CEOPX4GM.js} +1 -1
- package/dist/embed/{embed-page-ReactChart-F6VYCIYY.js → embed-page-ReactChart-NZAYQOQH.js} +1 -1
- package/dist/embed/{embed-page-SkillFlow-3CF7R3CW.js → embed-page-SkillFlow-TPESM4DI.js} +1 -1
- package/dist/embed/{embed-page-TasksSideApp-3WRDBZU3.js → embed-page-TasksSideApp-3EAPMISU.js} +1 -1
- package/dist/embed/{embed-page-TeamWorkspace-6JSMZYUF.js → embed-page-TeamWorkspace-HB7ER45L.js} +1 -1
- package/dist/embed/{embed-page-TopologyRuntimeView-YDFENLHH.js → embed-page-TopologyRuntimeView-O7JPR22B.js} +1 -1
- package/dist/embed/{embed-page-WorkflowAutomationView-MP5B7Q2Q.js → embed-page-WorkflowAutomationView-OUXOBHXC.js} +1 -1
- package/dist/embed/{embed-page-chunk-YMJGPA3F.js → embed-page-chunk-4SKSUBXL.js} +93 -102
- package/dist/embed/{embed-page-chunk-B2E2XOH2.js → embed-page-chunk-5XKUKLZQ.js} +1 -1
- package/dist/embed/{embed-page-chunk-UOL6CUAL.js → embed-page-chunk-6C2UZV63.js} +1 -1
- package/dist/embed/{embed-page-chunk-IRP6JSSX.js → embed-page-chunk-GCDGRO6A.js} +1 -1
- package/dist/embed/{embed-page-chunk-GDTBDOUE.js → embed-page-chunk-ILNGM4RN.js} +38 -38
- package/dist/embed/embed-page-chunk-KFUAWYJ7.js +5 -0
- package/dist/embed/{embed-page-chunk-FFO7CAYL.js → embed-page-chunk-RTVQJYET.js} +1 -1
- package/dist/embed/{embed-page-chunk-QEYWJHEK.js → embed-page-chunk-TQPMRDLI.js} +1 -1
- package/dist/embed/{embed-page-chunk-PAJ5NG2Z.js → embed-page-chunk-U6JBLAYD.js} +1 -1
- package/dist/embed/{embed-page-chunk-RVXX5HKF.js → embed-page-chunk-ZTRCHYWV.js} +1 -1
- package/dist/embed/embed-page.js +1 -1
- package/dist/index.js +101 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +101 -0
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
- package/dist/embed/embed-page-chunk-URNZX66S.js +0 -5
package/dist/index.mjs
CHANGED
|
@@ -15991,6 +15991,98 @@ function readSourceMessageId(context) {
|
|
|
15991
15991
|
return typeof value === "string" && value.length > 0 ? value : void 0;
|
|
15992
15992
|
}
|
|
15993
15993
|
|
|
15994
|
+
// src/services/collaboration/RoomMessageRetentionJob.ts
|
|
15995
|
+
var DAY_MS = 24 * 60 * 60 * 1e3;
|
|
15996
|
+
var DEFAULT_INTERVAL_MS = 6 * 60 * 60 * 1e3;
|
|
15997
|
+
var DEFAULT_INITIAL_DELAY_MS = 6e4;
|
|
15998
|
+
var DEFAULT_BATCH_SIZE = 500;
|
|
15999
|
+
var MAX_BATCHES_PER_RUN = 1e3;
|
|
16000
|
+
var DEFAULT_RETENTION_DAYS = 60;
|
|
16001
|
+
function parseRetentionDays(value) {
|
|
16002
|
+
if (value === void 0 || value === null) return DEFAULT_RETENTION_DAYS;
|
|
16003
|
+
if (typeof value !== "string") return void 0;
|
|
16004
|
+
const trimmed = value.trim();
|
|
16005
|
+
if (trimmed.length === 0) return DEFAULT_RETENTION_DAYS;
|
|
16006
|
+
const parsed = Number(trimmed);
|
|
16007
|
+
return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : void 0;
|
|
16008
|
+
}
|
|
16009
|
+
var RoomMessageRetentionJob = class {
|
|
16010
|
+
/**
|
|
16011
|
+
* Creates a retention sweep job.
|
|
16012
|
+
*
|
|
16013
|
+
* @param deps Message store slice, positive retention days, and logger.
|
|
16014
|
+
* @param options Optional interval, initial delay, batch size, and clock overrides.
|
|
16015
|
+
*/
|
|
16016
|
+
constructor(deps, options = {}) {
|
|
16017
|
+
this.deps = deps;
|
|
16018
|
+
this.disposed = false;
|
|
16019
|
+
this.running = false;
|
|
16020
|
+
this.intervalMs = options.intervalMs ?? DEFAULT_INTERVAL_MS;
|
|
16021
|
+
this.initialDelayMs = options.initialDelayMs ?? DEFAULT_INITIAL_DELAY_MS;
|
|
16022
|
+
this.batchSize = options.batchSize ?? DEFAULT_BATCH_SIZE;
|
|
16023
|
+
this.now = options.now ?? (() => /* @__PURE__ */ new Date());
|
|
16024
|
+
for (const [name, value] of Object.entries({ intervalMs: this.intervalMs, initialDelayMs: this.initialDelayMs, batchSize: this.batchSize })) {
|
|
16025
|
+
if (!Number.isSafeInteger(value) || value < 1) throw new RangeError(`Room message retention ${name} must be a positive safe integer`);
|
|
16026
|
+
}
|
|
16027
|
+
}
|
|
16028
|
+
/** Schedules one delayed initial sweep plus the recurring interval (both unref'd). */
|
|
16029
|
+
start() {
|
|
16030
|
+
if (this.disposed || this.initial !== void 0 || this.interval !== void 0) return;
|
|
16031
|
+
this.initial = setTimeout(() => {
|
|
16032
|
+
this.initial = void 0;
|
|
16033
|
+
void this.runOnce();
|
|
16034
|
+
}, this.initialDelayMs);
|
|
16035
|
+
this.initial.unref?.();
|
|
16036
|
+
this.interval = setInterval(() => void this.runOnce(), this.intervalMs);
|
|
16037
|
+
this.interval.unref?.();
|
|
16038
|
+
}
|
|
16039
|
+
/**
|
|
16040
|
+
* Runs one bounded sweep: batches until a short batch or the per-run batch cap.
|
|
16041
|
+
*
|
|
16042
|
+
* @returns The number of deleted rows (0 on disabled/overlapping runs or failures).
|
|
16043
|
+
*/
|
|
16044
|
+
async runOnce() {
|
|
16045
|
+
if (this.disposed || this.running) return 0;
|
|
16046
|
+
this.running = true;
|
|
16047
|
+
try {
|
|
16048
|
+
const before = new Date(this.now().getTime() - this.deps.days * DAY_MS);
|
|
16049
|
+
let deleted = 0;
|
|
16050
|
+
for (let batch = 0; batch < MAX_BATCHES_PER_RUN; batch += 1) {
|
|
16051
|
+
const removed = await this.deps.messages.deleteChatOlderThan({ before, limit: this.batchSize });
|
|
16052
|
+
deleted += removed;
|
|
16053
|
+
if (removed < this.batchSize) break;
|
|
16054
|
+
}
|
|
16055
|
+
if (deleted > 0) this.deps.log.info?.("project-room:message-retention-swept", { deleted, days: this.deps.days });
|
|
16056
|
+
return deleted;
|
|
16057
|
+
} catch (error) {
|
|
16058
|
+
this.deps.log.warn("project-room:message-retention-failed", {
|
|
16059
|
+
days: this.deps.days,
|
|
16060
|
+
error: error instanceof Error ? error.name : "UnknownError"
|
|
16061
|
+
});
|
|
16062
|
+
return 0;
|
|
16063
|
+
} finally {
|
|
16064
|
+
this.running = false;
|
|
16065
|
+
}
|
|
16066
|
+
}
|
|
16067
|
+
/** Stops the timers; an in-flight sweep finishes on its own. */
|
|
16068
|
+
dispose() {
|
|
16069
|
+
this.disposed = true;
|
|
16070
|
+
if (this.initial !== void 0) {
|
|
16071
|
+
clearTimeout(this.initial);
|
|
16072
|
+
this.initial = void 0;
|
|
16073
|
+
}
|
|
16074
|
+
if (this.interval !== void 0) {
|
|
16075
|
+
clearInterval(this.interval);
|
|
16076
|
+
this.interval = void 0;
|
|
16077
|
+
}
|
|
16078
|
+
}
|
|
16079
|
+
};
|
|
16080
|
+
function createRoomMessageRetentionJob(input) {
|
|
16081
|
+
const days = parseRetentionDays(input.days);
|
|
16082
|
+
if (days === void 0) return void 0;
|
|
16083
|
+
return new RoomMessageRetentionJob({ messages: input.messages, days, log: input.log }, input.options);
|
|
16084
|
+
}
|
|
16085
|
+
|
|
15994
16086
|
// src/services/collaboration/ProjectTaskExecutionMutex.ts
|
|
15995
16087
|
import { snapshotExactRecord as snapshotExactRecord7 } from "@axiom-lattice/protocols";
|
|
15996
16088
|
function machineKey(scope) {
|
|
@@ -19304,6 +19396,15 @@ var registerLatticeRoutes = (app2, channelDeps, options = {}) => {
|
|
|
19304
19396
|
const accessService = new ProjectAccessService({ projectStore, membershipStore: projectMembershipStore, userTenantLinkStore });
|
|
19305
19397
|
const realtimeMode = resolveProjectRoomRealtimeMode();
|
|
19306
19398
|
const realtimeLog = options.projectTaskLog ?? { warn: () => void 0 };
|
|
19399
|
+
const roomMessageRetention = createRoomMessageRetentionJob({
|
|
19400
|
+
messages: projectRoomMessageStore,
|
|
19401
|
+
days: process.env.PROJECT_ROOM_MESSAGE_RETENTION_DAYS,
|
|
19402
|
+
log: realtimeLog
|
|
19403
|
+
});
|
|
19404
|
+
if (roomMessageRetention) {
|
|
19405
|
+
roomMessageRetention.start();
|
|
19406
|
+
app2.addHook("onClose", () => roomMessageRetention.dispose());
|
|
19407
|
+
}
|
|
19307
19408
|
const roomPushNotifier = createRoomPushNotifier({
|
|
19308
19409
|
subscriptionStore: userPushSubscriptionStore,
|
|
19309
19410
|
membershipStore: projectMembershipStore,
|