@creezio/observability 0.22.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 +328 -0
- package/dist/.creezio-src-hash.json +4 -0
- package/dist/api-endpoints/http-routes.d.ts +11 -0
- package/dist/api-endpoints/http-routes.d.ts.map +1 -0
- package/dist/api-endpoints/http-routes.js +11 -0
- package/dist/api-endpoints/http-routes.js.map +1 -0
- package/dist/api-endpoints/index.d.ts +4 -0
- package/dist/api-endpoints/index.d.ts.map +1 -0
- package/dist/api-endpoints/index.js +3 -0
- package/dist/api-endpoints/index.js.map +1 -0
- package/dist/api-endpoints/registry.d.ts +66 -0
- package/dist/api-endpoints/registry.d.ts.map +1 -0
- package/dist/api-endpoints/registry.js +102 -0
- package/dist/api-endpoints/registry.js.map +1 -0
- package/dist/api-mount.d.ts +7 -0
- package/dist/api-mount.d.ts.map +1 -0
- package/dist/api-mount.js +114 -0
- package/dist/api-mount.js.map +1 -0
- package/dist/helpers.d.ts +23 -0
- package/dist/helpers.d.ts.map +1 -0
- package/dist/helpers.js +36 -0
- package/dist/helpers.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/memory-store.d.ts +3 -0
- package/dist/memory-store.d.ts.map +1 -0
- package/dist/memory-store.js +113 -0
- package/dist/memory-store.js.map +1 -0
- package/dist/ops/emit.d.ts +8 -0
- package/dist/ops/emit.d.ts.map +1 -0
- package/dist/ops/emit.js +15 -0
- package/dist/ops/emit.js.map +1 -0
- package/dist/ops/fleet-activity.d.ts +50 -0
- package/dist/ops/fleet-activity.d.ts.map +1 -0
- package/dist/ops/fleet-activity.js +123 -0
- package/dist/ops/fleet-activity.js.map +1 -0
- package/dist/ops/fleet-agent.d.ts +102 -0
- package/dist/ops/fleet-agent.d.ts.map +1 -0
- package/dist/ops/fleet-agent.js +352 -0
- package/dist/ops/fleet-agent.js.map +1 -0
- package/dist/ops/fleet-samples.d.ts +33 -0
- package/dist/ops/fleet-samples.d.ts.map +1 -0
- package/dist/ops/fleet-samples.js +223 -0
- package/dist/ops/fleet-samples.js.map +1 -0
- package/dist/ops/journal.d.ts +56 -0
- package/dist/ops/journal.d.ts.map +1 -0
- package/dist/ops/journal.js +307 -0
- package/dist/ops/journal.js.map +1 -0
- package/dist/ops/rules.d.ts +16 -0
- package/dist/ops/rules.d.ts.map +1 -0
- package/dist/ops/rules.js +98 -0
- package/dist/ops/rules.js.map +1 -0
- package/dist/ops/types.d.ts +69 -0
- package/dist/ops/types.d.ts.map +1 -0
- package/dist/ops/types.js +119 -0
- package/dist/ops/types.js.map +1 -0
- package/dist/request-logs/config.d.ts +19 -0
- package/dist/request-logs/config.d.ts.map +1 -0
- package/dist/request-logs/config.js +36 -0
- package/dist/request-logs/config.js.map +1 -0
- package/dist/request-logs/http-routes.d.ts +8 -0
- package/dist/request-logs/http-routes.d.ts.map +1 -0
- package/dist/request-logs/http-routes.js +29 -0
- package/dist/request-logs/http-routes.js.map +1 -0
- package/dist/request-logs/index.d.ts +6 -0
- package/dist/request-logs/index.d.ts.map +1 -0
- package/dist/request-logs/index.js +5 -0
- package/dist/request-logs/index.js.map +1 -0
- package/dist/request-logs/middleware.d.ts +11 -0
- package/dist/request-logs/middleware.d.ts.map +1 -0
- package/dist/request-logs/middleware.js +198 -0
- package/dist/request-logs/middleware.js.map +1 -0
- package/dist/request-logs/request-logs.d.ts +60 -0
- package/dist/request-logs/request-logs.d.ts.map +1 -0
- package/dist/request-logs/request-logs.js +260 -0
- package/dist/request-logs/request-logs.js.map +1 -0
- package/dist/schema.d.ts +3 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +21 -0
- package/dist/schema.js.map +1 -0
- package/dist/sqlite-driver.d.ts +16 -0
- package/dist/sqlite-driver.d.ts.map +1 -0
- package/dist/sqlite-driver.js +15 -0
- package/dist/sqlite-driver.js.map +1 -0
- package/dist/sqlite-store.d.ts +12 -0
- package/dist/sqlite-store.d.ts.map +1 -0
- package/dist/sqlite-store.js +176 -0
- package/dist/sqlite-store.js.map +1 -0
- package/dist/types.d.ts +67 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/usage/adapters.d.ts +31 -0
- package/dist/usage/adapters.d.ts.map +1 -0
- package/dist/usage/adapters.js +37 -0
- package/dist/usage/adapters.js.map +1 -0
- package/dist/usage/http-routes.d.ts +23 -0
- package/dist/usage/http-routes.d.ts.map +1 -0
- package/dist/usage/http-routes.js +150 -0
- package/dist/usage/http-routes.js.map +1 -0
- package/dist/usage/index.d.ts +11 -0
- package/dist/usage/index.d.ts.map +1 -0
- package/dist/usage/index.js +7 -0
- package/dist/usage/index.js.map +1 -0
- package/dist/usage/ui-brand.d.ts +23 -0
- package/dist/usage/ui-brand.d.ts.map +1 -0
- package/dist/usage/ui-brand.js +18 -0
- package/dist/usage/ui-brand.js.map +1 -0
- package/dist/usage/usage-analytics-productivity.d.ts +73 -0
- package/dist/usage/usage-analytics-productivity.d.ts.map +1 -0
- package/dist/usage/usage-analytics-productivity.js +317 -0
- package/dist/usage/usage-analytics-productivity.js.map +1 -0
- package/dist/usage/usage-analytics-shared.d.ts +5 -0
- package/dist/usage/usage-analytics-shared.d.ts.map +1 -0
- package/dist/usage/usage-analytics-shared.js +20 -0
- package/dist/usage/usage-analytics-shared.js.map +1 -0
- package/dist/usage/usage-analytics.d.ts +127 -0
- package/dist/usage/usage-analytics.d.ts.map +1 -0
- package/dist/usage/usage-analytics.js +338 -0
- package/dist/usage/usage-analytics.js.map +1 -0
- package/dist-cjs/api-endpoints/http-routes.js +14 -0
- package/dist-cjs/api-endpoints/http-routes.js.map +1 -0
- package/dist-cjs/api-endpoints/index.js +10 -0
- package/dist-cjs/api-endpoints/index.js.map +1 -0
- package/dist-cjs/api-endpoints/registry.js +107 -0
- package/dist-cjs/api-endpoints/registry.js.map +1 -0
- package/dist-cjs/api-mount.js +117 -0
- package/dist-cjs/api-mount.js.map +1 -0
- package/dist-cjs/helpers.js +41 -0
- package/dist-cjs/helpers.js.map +1 -0
- package/dist-cjs/index.js +118 -0
- package/dist-cjs/index.js.map +1 -0
- package/dist-cjs/memory-store.js +119 -0
- package/dist-cjs/memory-store.js.map +1 -0
- package/dist-cjs/ops/emit.js +18 -0
- package/dist-cjs/ops/emit.js.map +1 -0
- package/dist-cjs/ops/fleet-activity.js +131 -0
- package/dist-cjs/ops/fleet-activity.js.map +1 -0
- package/dist-cjs/ops/fleet-agent.js +358 -0
- package/dist-cjs/ops/fleet-agent.js.map +1 -0
- package/dist-cjs/ops/fleet-samples.js +229 -0
- package/dist-cjs/ops/fleet-samples.js.map +1 -0
- package/dist-cjs/ops/journal.js +326 -0
- package/dist-cjs/ops/journal.js.map +1 -0
- package/dist-cjs/ops/rules.js +102 -0
- package/dist-cjs/ops/rules.js.map +1 -0
- package/dist-cjs/ops/types.js +126 -0
- package/dist-cjs/ops/types.js.map +1 -0
- package/dist-cjs/package.json +3 -0
- package/dist-cjs/request-logs/config.js +42 -0
- package/dist-cjs/request-logs/config.js.map +1 -0
- package/dist-cjs/request-logs/http-routes.js +32 -0
- package/dist-cjs/request-logs/http-routes.js.map +1 -0
- package/dist-cjs/request-logs/index.js +27 -0
- package/dist-cjs/request-logs/index.js.map +1 -0
- package/dist-cjs/request-logs/middleware.js +203 -0
- package/dist-cjs/request-logs/middleware.js.map +1 -0
- package/dist-cjs/request-logs/request-logs.js +277 -0
- package/dist-cjs/request-logs/request-logs.js.map +1 -0
- package/dist-cjs/schema.js +24 -0
- package/dist-cjs/schema.js.map +1 -0
- package/dist-cjs/sqlite-driver.js +18 -0
- package/dist-cjs/sqlite-driver.js.map +1 -0
- package/dist-cjs/sqlite-store.js +182 -0
- package/dist-cjs/sqlite-store.js.map +1 -0
- package/dist-cjs/types.js +12 -0
- package/dist-cjs/types.js.map +1 -0
- package/dist-cjs/usage/adapters.js +47 -0
- package/dist-cjs/usage/adapters.js.map +1 -0
- package/dist-cjs/usage/http-routes.js +154 -0
- package/dist-cjs/usage/http-routes.js.map +1 -0
- package/dist-cjs/usage/index.js +34 -0
- package/dist-cjs/usage/index.js.map +1 -0
- package/dist-cjs/usage/ui-brand.js +23 -0
- package/dist-cjs/usage/ui-brand.js.map +1 -0
- package/dist-cjs/usage/usage-analytics-productivity.js +321 -0
- package/dist-cjs/usage/usage-analytics-productivity.js.map +1 -0
- package/dist-cjs/usage/usage-analytics-shared.js +23 -0
- package/dist-cjs/usage/usage-analytics-shared.js.map +1 -0
- package/dist-cjs/usage/usage-analytics.js +353 -0
- package/dist-cjs/usage/usage-analytics.js.map +1 -0
- package/fleet-collector/AGENTS.md +7 -0
- package/fleet-collector/README.md +83 -0
- package/fleet-collector/configure-fleet-npm.sh +108 -0
- package/fleet-collector/env.mjs +174 -0
- package/fleet-collector/ops-api.mjs +455 -0
- package/fleet-collector/public/admin.html +696 -0
- package/fleet-collector/public/index.html +941 -0
- package/fleet-collector/server.mjs +564 -0
- package/fleet-collector/test-fleet-collector.mjs +413 -0
- package/fleet-collector/test-server-admin.mjs +475 -0
- package/package.json +109 -0
- package/scripts/test-api-endpoints-registry.mjs +60 -0
- package/ui/analytics-client.tsx +834 -0
- package/ui/analytics-productivity-panel.tsx +513 -0
- package/ui/api-endpoints-client.tsx +228 -0
- package/ui/index.ts +39 -0
- package/ui/primitives/badge.tsx +37 -0
- package/ui/primitives/button.tsx +44 -0
- package/ui/primitives/card.tsx +44 -0
- package/ui/primitives/cn.ts +6 -0
- package/ui/primitives/input.tsx +19 -0
- package/ui/primitives/tabs.tsx +51 -0
- package/ui/request-logs-client.tsx +327 -0
- package/ui/session-usage-analytics-provider.tsx +28 -0
- package/ui/usage-analytics-client.ts +479 -0
- package/ui/usage-analytics-provider.tsx +84 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mount API observabilité — /api/v1/platform/observability/...
|
|
3
|
+
*/
|
|
4
|
+
import { OBSERVABILITY_EVENT_KINDS } from "./types.js";
|
|
5
|
+
function asKind(v) {
|
|
6
|
+
const s = String(v || "");
|
|
7
|
+
return OBSERVABILITY_EVENT_KINDS.includes(s)
|
|
8
|
+
? s
|
|
9
|
+
: undefined;
|
|
10
|
+
}
|
|
11
|
+
export function createObservabilityApiMount(store) {
|
|
12
|
+
return {
|
|
13
|
+
handle: async ({ req, subPath }) => {
|
|
14
|
+
const method = req.method.toUpperCase();
|
|
15
|
+
const body = req.body && typeof req.body === "object"
|
|
16
|
+
? req.body
|
|
17
|
+
: {};
|
|
18
|
+
if ((subPath === "" || subPath === "events") && method === "GET") {
|
|
19
|
+
const q = req.query || {};
|
|
20
|
+
const orgId = q.orgId != null ? String(q.orgId) : undefined;
|
|
21
|
+
const pluginId = q.pluginId != null ? String(q.pluginId) : undefined;
|
|
22
|
+
const action = q.action != null ? String(q.action) : undefined;
|
|
23
|
+
const since = q.since != null ? String(q.since) : undefined;
|
|
24
|
+
const kind = asKind(q.kind);
|
|
25
|
+
const limit = q.limit != null ? Number(q.limit) : 100;
|
|
26
|
+
const events = store.list({
|
|
27
|
+
kind,
|
|
28
|
+
orgId,
|
|
29
|
+
pluginId,
|
|
30
|
+
action,
|
|
31
|
+
since,
|
|
32
|
+
limit,
|
|
33
|
+
});
|
|
34
|
+
return {
|
|
35
|
+
status: 200,
|
|
36
|
+
body: {
|
|
37
|
+
ok: true,
|
|
38
|
+
count: events.length,
|
|
39
|
+
total: store.count({ kind, orgId, pluginId }),
|
|
40
|
+
events,
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
if (subPath === "events" && method === "POST") {
|
|
45
|
+
try {
|
|
46
|
+
const kind = asKind(body.kind);
|
|
47
|
+
if (!kind) {
|
|
48
|
+
return {
|
|
49
|
+
status: 400,
|
|
50
|
+
body: { ok: false, error: "kind invalide" },
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
const event = store.record({
|
|
54
|
+
kind,
|
|
55
|
+
action: String(body.action || "custom"),
|
|
56
|
+
orgId: body.orgId != null ? String(body.orgId) : null,
|
|
57
|
+
userId: body.userId != null ? String(body.userId) : null,
|
|
58
|
+
brandId: body.brandId != null ? String(body.brandId) : null,
|
|
59
|
+
pluginId: body.pluginId != null ? String(body.pluginId) : null,
|
|
60
|
+
meta: body.meta && typeof body.meta === "object"
|
|
61
|
+
? body.meta
|
|
62
|
+
: {},
|
|
63
|
+
});
|
|
64
|
+
return { status: 201, body: { ok: true, event } };
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
return {
|
|
68
|
+
status: 400,
|
|
69
|
+
body: {
|
|
70
|
+
ok: false,
|
|
71
|
+
error: e instanceof Error ? e.message : "error",
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (subPath === "usage" && method === "GET") {
|
|
77
|
+
const q = req.query || {};
|
|
78
|
+
const usage = store.aggregatePluginUsage({
|
|
79
|
+
orgId: q.orgId != null ? String(q.orgId) : undefined,
|
|
80
|
+
since: q.since != null ? String(q.since) : undefined,
|
|
81
|
+
limit: q.limit != null ? Number(q.limit) : 50,
|
|
82
|
+
});
|
|
83
|
+
return { status: 200, body: { ok: true, usage } };
|
|
84
|
+
}
|
|
85
|
+
if (subPath === "orgs" && method === "GET") {
|
|
86
|
+
const q = req.query || {};
|
|
87
|
+
const orgs = store.aggregateOrgActivity({
|
|
88
|
+
since: q.since != null ? String(q.since) : undefined,
|
|
89
|
+
limit: q.limit != null ? Number(q.limit) : 50,
|
|
90
|
+
});
|
|
91
|
+
return { status: 200, body: { ok: true, orgs } };
|
|
92
|
+
}
|
|
93
|
+
if (subPath === "summary" && method === "GET") {
|
|
94
|
+
return {
|
|
95
|
+
status: 200,
|
|
96
|
+
body: {
|
|
97
|
+
ok: true,
|
|
98
|
+
summary: {
|
|
99
|
+
activity: store.count({ kind: "activity" }),
|
|
100
|
+
plugin_usage: store.count({ kind: "plugin_usage" }),
|
|
101
|
+
control_plane: store.count({ kind: "control_plane" }),
|
|
102
|
+
total: store.count(),
|
|
103
|
+
},
|
|
104
|
+
usage: store.aggregatePluginUsage({ limit: 20 }),
|
|
105
|
+
orgs: store.aggregateOrgActivity({ limit: 20 }),
|
|
106
|
+
recent: store.list({ limit: 20 }),
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return { status: 404, body: { ok: false, error: "not_found" } };
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=api-mount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-mount.js","sourceRoot":"","sources":["../src/api-mount.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers d'émission typés — activité / usages plugins / control-plane.
|
|
3
|
+
*/
|
|
4
|
+
import type { ObservabilityEvent, ObservabilityStore } from "./types.js";
|
|
5
|
+
import type { ActivityAction, ControlPlaneAction } from "./types.js";
|
|
6
|
+
export type EmitActor = {
|
|
7
|
+
orgId?: string | null;
|
|
8
|
+
userId?: string | null;
|
|
9
|
+
brandId?: string | null;
|
|
10
|
+
};
|
|
11
|
+
export declare function recordActivity(store: ObservabilityStore, action: ActivityAction | string, actor?: EmitActor, meta?: Record<string, unknown>): ObservabilityEvent;
|
|
12
|
+
export declare function recordPluginUsage(store: ObservabilityStore, input: {
|
|
13
|
+
pluginId: string;
|
|
14
|
+
action?: string;
|
|
15
|
+
actor?: EmitActor;
|
|
16
|
+
meta?: Record<string, unknown>;
|
|
17
|
+
}): ObservabilityEvent;
|
|
18
|
+
export declare function recordControlPlaneEvent(store: ObservabilityStore, action: ControlPlaneAction | string, input?: {
|
|
19
|
+
pluginId?: string | null;
|
|
20
|
+
actor?: EmitActor;
|
|
21
|
+
meta?: Record<string, unknown>;
|
|
22
|
+
}): ObservabilityEvent;
|
|
23
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,KAAK,EACV,cAAc,EACd,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB,CAAC;AAEF,wBAAgB,cAAc,CAC5B,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,cAAc,GAAG,MAAM,EAC/B,KAAK,CAAC,EAAE,SAAS,EACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,kBAAkB,CASpB;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,kBAAkB,EACzB,KAAK,EAAE;IACL,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GACA,kBAAkB,CAUpB;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,kBAAkB,EACzB,MAAM,EAAE,kBAAkB,GAAG,MAAM,EACnC,KAAK,CAAC,EAAE;IACN,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GACA,kBAAkB,CAUpB"}
|
package/dist/helpers.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers d'émission typés — activité / usages plugins / control-plane.
|
|
3
|
+
*/
|
|
4
|
+
export function recordActivity(store, action, actor, meta) {
|
|
5
|
+
return store.record({
|
|
6
|
+
kind: "activity",
|
|
7
|
+
action,
|
|
8
|
+
orgId: actor?.orgId,
|
|
9
|
+
userId: actor?.userId,
|
|
10
|
+
brandId: actor?.brandId,
|
|
11
|
+
meta,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
export function recordPluginUsage(store, input) {
|
|
15
|
+
return store.record({
|
|
16
|
+
kind: "plugin_usage",
|
|
17
|
+
action: input.action || "execute",
|
|
18
|
+
pluginId: input.pluginId,
|
|
19
|
+
orgId: input.actor?.orgId,
|
|
20
|
+
userId: input.actor?.userId,
|
|
21
|
+
brandId: input.actor?.brandId,
|
|
22
|
+
meta: input.meta,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
export function recordControlPlaneEvent(store, action, input) {
|
|
26
|
+
return store.record({
|
|
27
|
+
kind: "control_plane",
|
|
28
|
+
action,
|
|
29
|
+
pluginId: input?.pluginId,
|
|
30
|
+
orgId: input?.actor?.orgId,
|
|
31
|
+
userId: input?.actor?.userId,
|
|
32
|
+
brandId: input?.actor?.brandId,
|
|
33
|
+
meta: input?.meta,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,MAAM,UAAU,cAAc,CAC5B,KAAyB,EACzB,MAA+B,EAC/B,KAAiB,EACjB,IAA8B;IAE9B,OAAO,KAAK,CAAC,MAAM,CAAC;QAClB,IAAI,EAAE,UAAU;QAChB,MAAM;QACN,KAAK,EAAE,KAAK,EAAE,KAAK;QACnB,MAAM,EAAE,KAAK,EAAE,MAAM;QACrB,OAAO,EAAE,KAAK,EAAE,OAAO;QACvB,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAyB,EACzB,KAKC;IAED,OAAO,KAAK,CAAC,MAAM,CAAC;QAClB,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,SAAS;QACjC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK;QACzB,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM;QAC3B,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO;QAC7B,IAAI,EAAE,KAAK,CAAC,IAAI;KACjB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,KAAyB,EACzB,MAAmC,EACnC,KAIC;IAED,OAAO,KAAK,CAAC,MAAM,CAAC;QAClB,IAAI,EAAE,eAAe;QACrB,MAAM;QACN,QAAQ,EAAE,KAAK,EAAE,QAAQ;QACzB,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;QAC1B,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;QAC5B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;QAC9B,IAAI,EAAE,KAAK,EAAE,IAAI;KACsB,CAAC,CAAC;AAC7C,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @creezio/observability — activité / usages / CP (V2 SQLite) + boîte noire
|
|
3
|
+
* desktop ops/fleet (R4, extrait TempoFlow).
|
|
4
|
+
*/
|
|
5
|
+
export type { ActivityAction, ControlPlaneAction, ObservabilityEvent, ObservabilityEventKind, ObservabilityQuery, ObservabilityStore, OrgActivityAggregate, PluginUsageAggregate, RecordObservabilityEventInput, } from "./types.js";
|
|
6
|
+
export { OBSERVABILITY_EVENT_KINDS } from "./types.js";
|
|
7
|
+
export { OBSERVABILITY_CORE_SQL } from "./schema.js";
|
|
8
|
+
export { createMemoryObservabilityStore } from "./memory-store.js";
|
|
9
|
+
export type { CreateSqliteObservabilityStoreOptions, SqliteObservabilityStore, } from "./sqlite-store.js";
|
|
10
|
+
export { createSqliteObservabilityStore } from "./sqlite-store.js";
|
|
11
|
+
export type { OpenSqliteDatabase, SqliteDatabase } from "./sqlite-driver.js";
|
|
12
|
+
export { openNodeSqliteDatabase } from "./sqlite-driver.js";
|
|
13
|
+
export type { EmitActor } from "./helpers.js";
|
|
14
|
+
export { recordActivity, recordControlPlaneEvent, recordPluginUsage, } from "./helpers.js";
|
|
15
|
+
export { createObservabilityApiMount } from "./api-mount.js";
|
|
16
|
+
export type { OpsBootSummary, OpsEvent, OpsEventInput, OpsLevel, } from "./ops/types.js";
|
|
17
|
+
export { MAX_CTX_BYTES, OPS_EVENT_PREFIX, OPS_EVENT_PREFIXES, OPS_LEVELS, TF2EVENT_PREFIX, parseOpsLine, redactOpsCtx, sanitizeOpsEventInput, serializeOpsEvent, } from "./ops/types.js";
|
|
18
|
+
export type { OpsJournalHooks } from "./ops/journal.js";
|
|
19
|
+
export { __resetOpsJournalForTests, consumeOpsLine, currentBootSummary, drainPendingOpsEvents, getOpsBootId, getOpsDir, initOpsJournal, persistBootSummary, readPreviousBootSummaries, setOpsJournalHooks, track, trackCrashMirror, trackDecision, trackExternal, } from "./ops/journal.js";
|
|
20
|
+
export type { BootRuleFinding } from "./ops/rules.js";
|
|
21
|
+
export { evaluateBootRules, evaluateRulesPure } from "./ops/rules.js";
|
|
22
|
+
export { emitOpsEvent } from "./ops/emit.js";
|
|
23
|
+
export type { CreateFleetAgentOptions, FleetAgent, FleetAgentRuntimeHooks, FleetHealthSnapshot, FleetTelemetrySnapshot, } from "./ops/fleet-agent.js";
|
|
24
|
+
export { createFleetAgent } from "./ops/fleet-agent.js";
|
|
25
|
+
export type { FleetAction, FleetSessionContext, FleetSurface, } from "./ops/fleet-activity.js";
|
|
26
|
+
export { _resetFleetActivityForTests, drainFleetActions, getFleetSessionContext, recordFleetAction, sampleFleetActions, setFleetSessionContext, } from "./ops/fleet-activity.js";
|
|
27
|
+
export type { FleetSamples, FleetSamplesPaths } from "./ops/fleet-samples.js";
|
|
28
|
+
export { createFleetSamples } from "./ops/fleet-samples.js";
|
|
29
|
+
export { configureUsageAnalytics, getUsageAnalyticsAdapters, resetUsageAnalyticsAdaptersForTests, configureUsageAnalyticsUiBrand, getUsageAnalyticsUiBrand, resetUsageAnalyticsUiBrandForTests, formatDuration, usageAnalyticsReady, ensureUsageAnalyticsSchema, insertUsageEvents, recordUsageEvent, resolvePeriodFilters, getUsageOverview, getUsageTimeline, getTopPages, getTopClicks, getUserStats, listUsageEvents, purgeUsageEvents, BREAK_MIN_MS, BREAK_MAX_MS, getProductivityReport, createUsageAnalyticsIngestRoutes, createUsageAnalyticsAdminRoutes, } from "./usage/index.js";
|
|
30
|
+
export type { UsageAnalyticsAdapters, UsageAnalyticsSqliteDatabase, UsageAnalyticsSqliteStatement, FleetActionPayload, UsageAnalyticsUiBrand, UsagePeriod, UsageUserKind, UsageEventInput, UsageEventRow, UsageFilters, UsageOverview, TimelineBucket, PageStat, ClickStat, UserStat, HeatmapCell, DailyProductivity, BreakSpan, FocusBlock, ProductivitySummary, ProductivityReport, UsageAnalyticsSession, UsageAnalyticsRouteDeps, } from "./usage/index.js";
|
|
31
|
+
export { configureRequestLogs, getRequestLogsConfig, resetRequestLogsConfigForTests, resolveFleetStateDir, getRequestLogCapacity, _resetRequestLogsForTests, isSecretKey, redactSecrets, pushRequestLog, listRequestLogs, clearRequestLogs, parseJsonRpcMessages, summarizeMcpRequest, summarizeMcpResponse, extractApiErrorMessage, shouldSkipRequestLog, requestLogApiMiddleware, requestLogMcpMiddleware, createRequestLogsRoutes, } from "./request-logs/index.js";
|
|
32
|
+
export type { RequestLogsConfig, RequestLogSource, RequestLogDetail, RequestLogEntry, ListRequestLogsOpts, } from "./request-logs/index.js";
|
|
33
|
+
export type { ApiEndpointRecord, ApiEndpointRouteInput, ApiEndpointsRegistry, CreateApiEndpointsRoutesOptions, } from "./api-endpoints/index.js";
|
|
34
|
+
export { buildApiEndpointsRegistry, buildOpenApiDocumentFromRegistry, collectHonoRoutes, createApiEndpointsRoutes, } from "./api-endpoints/index.js";
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @creezio/observability — activité / usages / CP (V2 SQLite) + boîte noire
|
|
3
|
+
* desktop ops/fleet (R4, extrait TempoFlow).
|
|
4
|
+
*/
|
|
5
|
+
export { OBSERVABILITY_EVENT_KINDS } from "./types.js";
|
|
6
|
+
export { OBSERVABILITY_CORE_SQL } from "./schema.js";
|
|
7
|
+
export { createMemoryObservabilityStore } from "./memory-store.js";
|
|
8
|
+
export { createSqliteObservabilityStore } from "./sqlite-store.js";
|
|
9
|
+
export { openNodeSqliteDatabase } from "./sqlite-driver.js";
|
|
10
|
+
export { recordActivity, recordControlPlaneEvent, recordPluginUsage, } from "./helpers.js";
|
|
11
|
+
export { createObservabilityApiMount } from "./api-mount.js";
|
|
12
|
+
export { MAX_CTX_BYTES, OPS_EVENT_PREFIX, OPS_EVENT_PREFIXES, OPS_LEVELS, TF2EVENT_PREFIX, parseOpsLine, redactOpsCtx, sanitizeOpsEventInput, serializeOpsEvent, } from "./ops/types.js";
|
|
13
|
+
export { __resetOpsJournalForTests, consumeOpsLine, currentBootSummary, drainPendingOpsEvents, getOpsBootId, getOpsDir, initOpsJournal, persistBootSummary, readPreviousBootSummaries, setOpsJournalHooks, track, trackCrashMirror, trackDecision, trackExternal, } from "./ops/journal.js";
|
|
14
|
+
export { evaluateBootRules, evaluateRulesPure } from "./ops/rules.js";
|
|
15
|
+
export { emitOpsEvent } from "./ops/emit.js";
|
|
16
|
+
export { createFleetAgent } from "./ops/fleet-agent.js";
|
|
17
|
+
export { _resetFleetActivityForTests, drainFleetActions, getFleetSessionContext, recordFleetAction, sampleFleetActions, setFleetSessionContext, } from "./ops/fleet-activity.js";
|
|
18
|
+
export { createFleetSamples } from "./ops/fleet-samples.js";
|
|
19
|
+
/* ── N6 : usage analytics (port TempoFlow) ── */
|
|
20
|
+
export { configureUsageAnalytics, getUsageAnalyticsAdapters, resetUsageAnalyticsAdaptersForTests, configureUsageAnalyticsUiBrand, getUsageAnalyticsUiBrand, resetUsageAnalyticsUiBrandForTests, formatDuration, usageAnalyticsReady, ensureUsageAnalyticsSchema, insertUsageEvents, recordUsageEvent, resolvePeriodFilters, getUsageOverview, getUsageTimeline, getTopPages, getTopClicks, getUserStats, listUsageEvents, purgeUsageEvents, BREAK_MIN_MS, BREAK_MAX_MS, getProductivityReport, createUsageAnalyticsIngestRoutes, createUsageAnalyticsAdminRoutes, } from "./usage/index.js";
|
|
21
|
+
/* ── O5 : request-logs admin (port TempoFlow) ── */
|
|
22
|
+
export { configureRequestLogs, getRequestLogsConfig, resetRequestLogsConfigForTests, resolveFleetStateDir, getRequestLogCapacity, _resetRequestLogsForTests, isSecretKey, redactSecrets, pushRequestLog, listRequestLogs, clearRequestLogs, parseJsonRpcMessages, summarizeMcpRequest, summarizeMcpResponse, extractApiErrorMessage, shouldSkipRequestLog, requestLogApiMiddleware, requestLogMcpMiddleware, createRequestLogsRoutes, } from "./request-logs/index.js";
|
|
23
|
+
export { buildApiEndpointsRegistry, buildOpenApiDocumentFromRegistry, collectHonoRoutes, createApiEndpointsRoutes, } from "./api-endpoints/index.js";
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AAErD,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAMnE,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AAGnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAG5D,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAU7D,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,yBAAyB,EACzB,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,SAAS,EACT,cAAc,EACd,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,KAAK,EACL,gBAAgB,EAChB,aAAa,EACb,aAAa,GACd,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAS7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AASxD,OAAO,EACL,2BAA2B,EAC3B,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,iDAAiD;AAEjD,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,mCAAmC,EACnC,8BAA8B,EAC9B,wBAAwB,EACxB,kCAAkC,EAClC,cAAc,EACd,mBAAmB,EACnB,0BAA0B,EAC1B,iBAAiB,EACjB,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACrB,gCAAgC,EAChC,+BAA+B,GAChC,MAAM,kBAAkB,CAAC;AA4B1B,oDAAoD;AAEpD,OAAO,EACL,oBAAoB,EACpB,oBAAoB,EACpB,8BAA8B,EAC9B,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,WAAW,EACX,aAAa,EACb,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AAkBjC,OAAO,EACL,yBAAyB,EACzB,gCAAgC,EAChC,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../src/memory-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAGV,kBAAkB,EAInB,MAAM,YAAY,CAAC;AAiBpB,wBAAgB,8BAA8B,IAAI,kBAAkB,CAoFnE"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
function now() {
|
|
3
|
+
return new Date().toISOString();
|
|
4
|
+
}
|
|
5
|
+
function match(e, q) {
|
|
6
|
+
if (!q)
|
|
7
|
+
return true;
|
|
8
|
+
if (q.kind && e.kind !== q.kind)
|
|
9
|
+
return false;
|
|
10
|
+
if (q.orgId && e.orgId !== q.orgId)
|
|
11
|
+
return false;
|
|
12
|
+
if (q.pluginId && e.pluginId !== q.pluginId)
|
|
13
|
+
return false;
|
|
14
|
+
if (q.action && e.action !== q.action)
|
|
15
|
+
return false;
|
|
16
|
+
if (q.since && e.createdAt < q.since)
|
|
17
|
+
return false;
|
|
18
|
+
if (q.until && e.createdAt > q.until)
|
|
19
|
+
return false;
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
export function createMemoryObservabilityStore() {
|
|
23
|
+
const events = [];
|
|
24
|
+
return {
|
|
25
|
+
record(input) {
|
|
26
|
+
const event = {
|
|
27
|
+
id: input.id || crypto.randomUUID(),
|
|
28
|
+
kind: input.kind,
|
|
29
|
+
action: input.action,
|
|
30
|
+
orgId: input.orgId ?? null,
|
|
31
|
+
userId: input.userId ?? null,
|
|
32
|
+
brandId: input.brandId ?? null,
|
|
33
|
+
pluginId: input.pluginId ?? null,
|
|
34
|
+
meta: input.meta || {},
|
|
35
|
+
createdAt: input.createdAt || now(),
|
|
36
|
+
};
|
|
37
|
+
events.push(event);
|
|
38
|
+
return event;
|
|
39
|
+
},
|
|
40
|
+
list(query) {
|
|
41
|
+
const limit = query?.limit ?? 100;
|
|
42
|
+
return events
|
|
43
|
+
.filter((e) => match(e, query))
|
|
44
|
+
.sort((a, b) => b.createdAt.localeCompare(a.createdAt))
|
|
45
|
+
.slice(0, limit);
|
|
46
|
+
},
|
|
47
|
+
count(query) {
|
|
48
|
+
return events.filter((e) => match(e, query)).length;
|
|
49
|
+
},
|
|
50
|
+
aggregatePluginUsage(opts) {
|
|
51
|
+
const since = opts?.since;
|
|
52
|
+
const orgId = opts?.orgId;
|
|
53
|
+
const map = new Map();
|
|
54
|
+
for (const e of events) {
|
|
55
|
+
if (e.kind !== "plugin_usage")
|
|
56
|
+
continue;
|
|
57
|
+
if (!e.pluginId)
|
|
58
|
+
continue;
|
|
59
|
+
if (orgId && e.orgId !== orgId)
|
|
60
|
+
continue;
|
|
61
|
+
if (since && e.createdAt < since)
|
|
62
|
+
continue;
|
|
63
|
+
const key = `${e.pluginId}::${e.orgId || ""}`;
|
|
64
|
+
const cur = map.get(key);
|
|
65
|
+
if (!cur) {
|
|
66
|
+
map.set(key, {
|
|
67
|
+
pluginId: e.pluginId,
|
|
68
|
+
orgId: e.orgId,
|
|
69
|
+
count: 1,
|
|
70
|
+
lastAt: e.createdAt,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
cur.count += 1;
|
|
75
|
+
if (e.createdAt > cur.lastAt)
|
|
76
|
+
cur.lastAt = e.createdAt;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return Array.from(map.values())
|
|
80
|
+
.sort((a, b) => b.count - a.count)
|
|
81
|
+
.slice(0, opts?.limit ?? 50);
|
|
82
|
+
},
|
|
83
|
+
aggregateOrgActivity(opts) {
|
|
84
|
+
const since = opts?.since;
|
|
85
|
+
const map = new Map();
|
|
86
|
+
for (const e of events) {
|
|
87
|
+
if (e.kind !== "activity")
|
|
88
|
+
continue;
|
|
89
|
+
if (!e.orgId)
|
|
90
|
+
continue;
|
|
91
|
+
if (since && e.createdAt < since)
|
|
92
|
+
continue;
|
|
93
|
+
const cur = map.get(e.orgId);
|
|
94
|
+
if (!cur) {
|
|
95
|
+
map.set(e.orgId, {
|
|
96
|
+
orgId: e.orgId,
|
|
97
|
+
count: 1,
|
|
98
|
+
lastAt: e.createdAt,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
cur.count += 1;
|
|
103
|
+
if (e.createdAt > cur.lastAt)
|
|
104
|
+
cur.lastAt = e.createdAt;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return Array.from(map.values())
|
|
108
|
+
.sort((a, b) => b.count - a.count)
|
|
109
|
+
.slice(0, opts?.limit ?? 50);
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=memory-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../src/memory-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Émission d'événements ops depuis un SOUS-PROCESS Node vanilla
|
|
3
|
+
* (meili-indexer, migrations…) : ligne `TF2EVENT {json}` sur stdout.
|
|
4
|
+
* Extrait de TempoFlow ops-emit.ts (R4).
|
|
5
|
+
*/
|
|
6
|
+
import { type OpsEventInput } from "./types.js";
|
|
7
|
+
export declare function emitOpsEvent(evt: OpsEventInput): void;
|
|
8
|
+
//# sourceMappingURL=emit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../src/ops/emit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AAEjE,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAMrD"}
|
package/dist/ops/emit.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Émission d'événements ops depuis un SOUS-PROCESS Node vanilla
|
|
3
|
+
* (meili-indexer, migrations…) : ligne `TF2EVENT {json}` sur stdout.
|
|
4
|
+
* Extrait de TempoFlow ops-emit.ts (R4).
|
|
5
|
+
*/
|
|
6
|
+
import { TF2EVENT_PREFIX } from "./types.js";
|
|
7
|
+
export function emitOpsEvent(evt) {
|
|
8
|
+
try {
|
|
9
|
+
console.log(`${TF2EVENT_PREFIX}${JSON.stringify(evt)}`);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
/* best-effort : jamais de throw depuis l'instrumentation */
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=emit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit.js","sourceRoot":"","sources":["../../src/ops/emit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAsB,MAAM,YAAY,CAAC;AAEjE,MAAM,UAAU,YAAY,CAAC,GAAkB;IAC7C,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,GAAG,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Journal d’événements produit flotte (ring mémoire).
|
|
3
|
+
* Schema FleetProductEvent v1 — attribution session + dwell.
|
|
4
|
+
* Extrait TempoFlow fleet-activity.ts (M7).
|
|
5
|
+
*/
|
|
6
|
+
export type FleetSurface = "crm" | "supplier_tab" | "hermes" | "n8n" | "ai_workspace" | "system";
|
|
7
|
+
export type FleetAction = {
|
|
8
|
+
schemaVersion: 1;
|
|
9
|
+
id: string;
|
|
10
|
+
at: string;
|
|
11
|
+
name: string;
|
|
12
|
+
category: string;
|
|
13
|
+
type: string;
|
|
14
|
+
label: string;
|
|
15
|
+
path?: string;
|
|
16
|
+
referrerPath?: string;
|
|
17
|
+
userId?: string;
|
|
18
|
+
username?: string;
|
|
19
|
+
sessionId?: string;
|
|
20
|
+
surface?: FleetSurface;
|
|
21
|
+
durationMs?: number;
|
|
22
|
+
meta?: Record<string, unknown>;
|
|
23
|
+
};
|
|
24
|
+
export type FleetSessionContext = {
|
|
25
|
+
userId: string | null;
|
|
26
|
+
username: string | null;
|
|
27
|
+
sessionId: string | null;
|
|
28
|
+
};
|
|
29
|
+
export declare function setFleetSessionContext(next: Partial<FleetSessionContext>): void;
|
|
30
|
+
export declare function getFleetSessionContext(): FleetSessionContext;
|
|
31
|
+
/** Enregistre un événement (toujours local ; envoi flotte gate par scope actions). */
|
|
32
|
+
export declare function recordFleetAction(input: {
|
|
33
|
+
type?: string;
|
|
34
|
+
name?: string;
|
|
35
|
+
category?: string;
|
|
36
|
+
label: string;
|
|
37
|
+
path?: string;
|
|
38
|
+
referrerPath?: string;
|
|
39
|
+
userId?: string;
|
|
40
|
+
username?: string;
|
|
41
|
+
sessionId?: string;
|
|
42
|
+
surface?: FleetSurface;
|
|
43
|
+
durationMs?: number;
|
|
44
|
+
meta?: Record<string, unknown>;
|
|
45
|
+
}): FleetAction | null;
|
|
46
|
+
export declare function sampleFleetActions(limit?: number): FleetAction[];
|
|
47
|
+
/** Snapshot + optionnellement vide le ring après flush (non utilisé par défaut). */
|
|
48
|
+
export declare function drainFleetActions(limit?: number): FleetAction[];
|
|
49
|
+
export declare function _resetFleetActivityForTests(): void;
|
|
50
|
+
//# sourceMappingURL=fleet-activity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-activity.d.ts","sourceRoot":"","sources":["../../src/ops/fleet-activity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,YAAY,GACpB,KAAK,GACL,cAAc,GACd,QAAQ,GACR,KAAK,GACL,cAAc,GACd,QAAQ,CAAC;AAEb,MAAM,MAAM,WAAW,GAAG;IACxB,aAAa,EAAE,CAAC,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CAAC;AAWF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAqB/E;AAED,wBAAgB,sBAAsB,IAAI,mBAAmB,CAE5D;AA8BD,sFAAsF;AACtF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,GAAG,WAAW,GAAG,IAAI,CA6CrB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,SAAM,GAAG,WAAW,EAAE,CAE7D;AAED,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,KAAK,SAAM,GAAG,WAAW,EAAE,CAK5D;AAED,wBAAgB,2BAA2B,IAAI,IAAI,CAMlD"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Journal d’événements produit flotte (ring mémoire).
|
|
3
|
+
* Schema FleetProductEvent v1 — attribution session + dwell.
|
|
4
|
+
* Extrait TempoFlow fleet-activity.ts (M7).
|
|
5
|
+
*/
|
|
6
|
+
const MAX = 800;
|
|
7
|
+
const ring = [];
|
|
8
|
+
let seq = 0;
|
|
9
|
+
let session = {
|
|
10
|
+
userId: null,
|
|
11
|
+
username: null,
|
|
12
|
+
sessionId: null,
|
|
13
|
+
};
|
|
14
|
+
export function setFleetSessionContext(next) {
|
|
15
|
+
session = {
|
|
16
|
+
userId: next.userId !== undefined
|
|
17
|
+
? next.userId
|
|
18
|
+
? String(next.userId).slice(0, 80)
|
|
19
|
+
: null
|
|
20
|
+
: session.userId,
|
|
21
|
+
username: next.username !== undefined
|
|
22
|
+
? next.username
|
|
23
|
+
? String(next.username).slice(0, 80)
|
|
24
|
+
: null
|
|
25
|
+
: session.username,
|
|
26
|
+
sessionId: next.sessionId !== undefined
|
|
27
|
+
? next.sessionId
|
|
28
|
+
? String(next.sessionId).slice(0, 80)
|
|
29
|
+
: null
|
|
30
|
+
: session.sessionId,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function getFleetSessionContext() {
|
|
34
|
+
return { ...session };
|
|
35
|
+
}
|
|
36
|
+
function sanitizeMeta(meta) {
|
|
37
|
+
if (!meta || typeof meta !== "object")
|
|
38
|
+
return undefined;
|
|
39
|
+
const out = {};
|
|
40
|
+
let n = 0;
|
|
41
|
+
for (const [k, v] of Object.entries(meta)) {
|
|
42
|
+
if (n >= 20)
|
|
43
|
+
break;
|
|
44
|
+
const key = String(k).slice(0, 40);
|
|
45
|
+
if (/password|token|secret|authorization|cookie|api[_-]?key/i.test(key)) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (v == null || typeof v === "boolean" || typeof v === "number") {
|
|
49
|
+
out[key] = v;
|
|
50
|
+
n++;
|
|
51
|
+
}
|
|
52
|
+
else if (typeof v === "string") {
|
|
53
|
+
out[key] = v.slice(0, 200);
|
|
54
|
+
n++;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return Object.keys(out).length ? out : undefined;
|
|
58
|
+
}
|
|
59
|
+
let lastDedupeKey = "";
|
|
60
|
+
let lastDedupeAt = 0;
|
|
61
|
+
/** Enregistre un événement (toujours local ; envoi flotte gate par scope actions). */
|
|
62
|
+
export function recordFleetAction(input) {
|
|
63
|
+
const name = String(input.name || input.type || "event").slice(0, 60);
|
|
64
|
+
const type = String(input.type || name).slice(0, 40);
|
|
65
|
+
const label = String(input.label || "").slice(0, 200);
|
|
66
|
+
if (!label && !name)
|
|
67
|
+
return null;
|
|
68
|
+
// Évite les doubles (main/preload/renderer) sur une même action.
|
|
69
|
+
if (type === "page.view" ||
|
|
70
|
+
name === "page.view" ||
|
|
71
|
+
type === "ui.click" ||
|
|
72
|
+
name === "ui.click") {
|
|
73
|
+
const key = `${type}|${input.path || ""}|${label}`;
|
|
74
|
+
const now = Date.now();
|
|
75
|
+
if (key === lastDedupeKey && now - lastDedupeAt < 500)
|
|
76
|
+
return null;
|
|
77
|
+
lastDedupeKey = key;
|
|
78
|
+
lastDedupeAt = now;
|
|
79
|
+
}
|
|
80
|
+
const ev = {
|
|
81
|
+
schemaVersion: 1,
|
|
82
|
+
id: `fa_${Date.now()}_${++seq}`,
|
|
83
|
+
at: new Date().toISOString(),
|
|
84
|
+
name,
|
|
85
|
+
category: String(input.category || "ui").slice(0, 40),
|
|
86
|
+
type,
|
|
87
|
+
label: label || name,
|
|
88
|
+
path: input.path ? String(input.path).slice(0, 300) : undefined,
|
|
89
|
+
referrerPath: input.referrerPath
|
|
90
|
+
? String(input.referrerPath).slice(0, 300)
|
|
91
|
+
: undefined,
|
|
92
|
+
userId: (input.userId ?? session.userId)?.slice(0, 80) || undefined,
|
|
93
|
+
username: (input.username ?? session.username)?.slice(0, 80) || undefined,
|
|
94
|
+
sessionId: (input.sessionId ?? session.sessionId)?.slice(0, 80) || undefined,
|
|
95
|
+
surface: input.surface || "crm",
|
|
96
|
+
durationMs: typeof input.durationMs === "number" && Number.isFinite(input.durationMs)
|
|
97
|
+
? Math.max(0, Math.round(input.durationMs))
|
|
98
|
+
: undefined,
|
|
99
|
+
meta: sanitizeMeta(input.meta),
|
|
100
|
+
};
|
|
101
|
+
ring.push(ev);
|
|
102
|
+
while (ring.length > MAX)
|
|
103
|
+
ring.shift();
|
|
104
|
+
return ev;
|
|
105
|
+
}
|
|
106
|
+
export function sampleFleetActions(limit = 120) {
|
|
107
|
+
return ring.slice(-limit).reverse();
|
|
108
|
+
}
|
|
109
|
+
/** Snapshot + optionnellement vide le ring après flush (non utilisé par défaut). */
|
|
110
|
+
export function drainFleetActions(limit = 200) {
|
|
111
|
+
const out = ring.slice(-limit);
|
|
112
|
+
ring.length = 0;
|
|
113
|
+
seq = 0;
|
|
114
|
+
return out.reverse();
|
|
115
|
+
}
|
|
116
|
+
export function _resetFleetActivityForTests() {
|
|
117
|
+
ring.length = 0;
|
|
118
|
+
seq = 0;
|
|
119
|
+
session = { userId: null, username: null, sessionId: null };
|
|
120
|
+
lastDedupeKey = "";
|
|
121
|
+
lastDedupeAt = 0;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=fleet-activity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-activity.js","sourceRoot":"","sources":["../../src/ops/fleet-activity.ts"],"names":[],"mappings":"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"}
|