@contractspec/lib.personalization 1.57.0 → 1.58.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/dist/adapter.d.ts +15 -19
- package/dist/adapter.d.ts.map +1 -1
- package/dist/adapter.js +43 -38
- package/dist/analyzer.d.ts +15 -19
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +69 -51
- package/dist/browser/adapter.js +46 -0
- package/dist/browser/analyzer.js +72 -0
- package/dist/browser/docs/behavior-tracking.docblock.js +97 -0
- package/dist/browser/docs/index.js +271 -0
- package/dist/browser/docs/overlay-engine.docblock.js +98 -0
- package/dist/browser/docs/workflow-composition.docblock.js +83 -0
- package/dist/browser/index.js +555 -0
- package/dist/browser/store.js +75 -0
- package/dist/browser/tracker.js +94 -0
- package/dist/browser/types.js +0 -0
- package/dist/docs/behavior-tracking.docblock.d.ts +2 -6
- package/dist/docs/behavior-tracking.docblock.d.ts.map +1 -1
- package/dist/docs/behavior-tracking.docblock.js +95 -15
- package/dist/docs/index.d.ts +4 -3
- package/dist/docs/index.d.ts.map +1 -0
- package/dist/docs/index.js +272 -3
- package/dist/docs/overlay-engine.docblock.d.ts +2 -6
- package/dist/docs/overlay-engine.docblock.d.ts.map +1 -1
- package/dist/docs/overlay-engine.docblock.js +96 -15
- package/dist/docs/workflow-composition.docblock.d.ts +2 -6
- package/dist/docs/workflow-composition.docblock.d.ts.map +1 -1
- package/dist/docs/workflow-composition.docblock.js +81 -15
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +555 -6
- package/dist/node/adapter.js +46 -0
- package/dist/node/analyzer.js +72 -0
- package/dist/node/docs/behavior-tracking.docblock.js +97 -0
- package/dist/node/docs/index.js +271 -0
- package/dist/node/docs/overlay-engine.docblock.js +98 -0
- package/dist/node/docs/workflow-composition.docblock.js +83 -0
- package/dist/node/index.js +555 -0
- package/dist/node/store.js +75 -0
- package/dist/node/tracker.js +94 -0
- package/dist/node/types.js +0 -0
- package/dist/store.d.ts +14 -18
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +74 -57
- package/dist/tracker.d.ts +42 -46
- package/dist/tracker.d.ts.map +1 -1
- package/dist/tracker.js +93 -91
- package/dist/types.d.ts +48 -51
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +1 -0
- package/package.json +104 -37
- package/dist/adapter.js.map +0 -1
- package/dist/analyzer.js.map +0 -1
- package/dist/docs/behavior-tracking.docblock.js.map +0 -1
- package/dist/docs/overlay-engine.docblock.js.map +0 -1
- package/dist/docs/workflow-composition.docblock.js.map +0 -1
- package/dist/store.js.map +0 -1
- package/dist/tracker.js.map +0 -1
|
File without changes
|
package/dist/store.d.ts
CHANGED
|
@@ -1,21 +1,17 @@
|
|
|
1
|
-
import { BehaviorEvent, BehaviorQuery, BehaviorSummary } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
summarize(query: BehaviorQuery): Promise<BehaviorSummary>;
|
|
9
|
-
clear?(): Promise<void> | void;
|
|
1
|
+
import type { BehaviorEvent, BehaviorQuery, BehaviorSummary } from './types';
|
|
2
|
+
export interface BehaviorStore {
|
|
3
|
+
record(event: BehaviorEvent): Promise<void> | void;
|
|
4
|
+
bulkRecord(events: BehaviorEvent[]): Promise<void> | void;
|
|
5
|
+
query(query: BehaviorQuery): Promise<BehaviorEvent[]>;
|
|
6
|
+
summarize(query: BehaviorQuery): Promise<BehaviorSummary>;
|
|
7
|
+
clear?(): Promise<void> | void;
|
|
10
8
|
}
|
|
11
|
-
declare class InMemoryBehaviorStore implements BehaviorStore {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
9
|
+
export declare class InMemoryBehaviorStore implements BehaviorStore {
|
|
10
|
+
private events;
|
|
11
|
+
record(event: BehaviorEvent): Promise<void>;
|
|
12
|
+
bulkRecord(events: BehaviorEvent[]): Promise<void>;
|
|
13
|
+
query(query: BehaviorQuery): Promise<BehaviorEvent[]>;
|
|
14
|
+
summarize(query: BehaviorQuery): Promise<BehaviorSummary>;
|
|
15
|
+
clear(): Promise<void>;
|
|
18
16
|
}
|
|
19
|
-
//#endregion
|
|
20
|
-
export { BehaviorStore, InMemoryBehaviorStore };
|
|
21
17
|
//# sourceMappingURL=store.d.ts.map
|
package/dist/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE7E,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACnD,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC1D,KAAK,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IACtD,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAChC;AAED,qBAAa,qBAAsB,YAAW,aAAa;IACzD,OAAO,CAAC,MAAM,CAAuB;IAE/B,MAAM,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD,KAAK,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAIrD,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;IAgCzD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
package/dist/store.js
CHANGED
|
@@ -1,59 +1,76 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
1
|
+
// @bun
|
|
2
|
+
// src/store.ts
|
|
3
|
+
class InMemoryBehaviorStore {
|
|
4
|
+
events = [];
|
|
5
|
+
async record(event) {
|
|
6
|
+
this.events.push(event);
|
|
7
|
+
}
|
|
8
|
+
async bulkRecord(events) {
|
|
9
|
+
this.events.push(...events);
|
|
10
|
+
}
|
|
11
|
+
async query(query) {
|
|
12
|
+
return filterEvents(this.events, query);
|
|
13
|
+
}
|
|
14
|
+
async summarize(query) {
|
|
15
|
+
const events = await this.query(query);
|
|
16
|
+
const summary = {
|
|
17
|
+
fieldCounts: {},
|
|
18
|
+
featureCounts: {},
|
|
19
|
+
workflowStepCounts: {},
|
|
20
|
+
totalEvents: events.length
|
|
21
|
+
};
|
|
22
|
+
events.forEach((event) => {
|
|
23
|
+
switch (event.type) {
|
|
24
|
+
case "field_access":
|
|
25
|
+
summary.fieldCounts[event.field] = (summary.fieldCounts[event.field] ?? 0) + 1;
|
|
26
|
+
break;
|
|
27
|
+
case "feature_usage":
|
|
28
|
+
summary.featureCounts[event.feature] = (summary.featureCounts[event.feature] ?? 0) + 1;
|
|
29
|
+
break;
|
|
30
|
+
case "workflow_step": {
|
|
31
|
+
const workflow = summary.workflowStepCounts[event.workflow] ??= {};
|
|
32
|
+
workflow[event.step] = (workflow[event.step] ?? 0) + 1;
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
default:
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
return summary;
|
|
40
|
+
}
|
|
41
|
+
async clear() {
|
|
42
|
+
this.events = [];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
43
45
|
function filterEvents(events, query) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
46
|
+
return events.filter((event) => {
|
|
47
|
+
if (query.tenantId && event.tenantId !== query.tenantId) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
if (query.userId && event.userId !== query.userId) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
if (query.role && event.role !== query.role) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
if (query.since && event.timestamp < query.since) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
if (query.until && event.timestamp > query.until) {
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
if (query.operation && event.type === "field_access" && event.operation !== query.operation) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
if (query.feature && event.type === "feature_usage" && event.feature !== query.feature) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
if (query.workflow && event.type === "workflow_step" && event.workflow !== query.workflow) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
return true;
|
|
72
|
+
});
|
|
55
73
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
//# sourceMappingURL=store.js.map
|
|
74
|
+
export {
|
|
75
|
+
InMemoryBehaviorStore
|
|
76
|
+
};
|
package/dist/tracker.d.ts
CHANGED
|
@@ -1,53 +1,49 @@
|
|
|
1
|
-
import { BehaviorStore } from
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
device?: string;
|
|
9
|
-
metadata?: Record<string, unknown>;
|
|
1
|
+
import type { BehaviorStore } from './store';
|
|
2
|
+
export interface BehaviorTrackerContext {
|
|
3
|
+
tenantId: string;
|
|
4
|
+
userId?: string;
|
|
5
|
+
role?: string;
|
|
6
|
+
device?: string;
|
|
7
|
+
metadata?: Record<string, unknown>;
|
|
10
8
|
}
|
|
11
|
-
interface BehaviorTrackerOptions {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
export interface BehaviorTrackerOptions {
|
|
10
|
+
store: BehaviorStore;
|
|
11
|
+
context: BehaviorTrackerContext;
|
|
12
|
+
tracerName?: string;
|
|
13
|
+
autoFlushIntervalMs?: number;
|
|
14
|
+
bufferSize?: number;
|
|
17
15
|
}
|
|
18
|
-
interface TrackFieldAccessInput {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
export interface TrackFieldAccessInput {
|
|
17
|
+
operation: string;
|
|
18
|
+
field: string;
|
|
19
|
+
metadata?: Record<string, unknown>;
|
|
22
20
|
}
|
|
23
|
-
interface TrackFeatureUsageInput {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
export interface TrackFeatureUsageInput {
|
|
22
|
+
feature: string;
|
|
23
|
+
action: 'opened' | 'completed' | 'dismissed';
|
|
24
|
+
metadata?: Record<string, unknown>;
|
|
27
25
|
}
|
|
28
|
-
interface TrackWorkflowStepInput {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
26
|
+
export interface TrackWorkflowStepInput {
|
|
27
|
+
workflow: string;
|
|
28
|
+
step: string;
|
|
29
|
+
status: 'entered' | 'completed' | 'skipped' | 'errored';
|
|
30
|
+
metadata?: Record<string, unknown>;
|
|
33
31
|
}
|
|
34
|
-
declare class BehaviorTracker {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
32
|
+
export declare class BehaviorTracker {
|
|
33
|
+
private readonly store;
|
|
34
|
+
private readonly context;
|
|
35
|
+
private readonly tracer;
|
|
36
|
+
private readonly counter;
|
|
37
|
+
private buffer;
|
|
38
|
+
private readonly bufferSize;
|
|
39
|
+
private flushTimer?;
|
|
40
|
+
constructor(options: BehaviorTrackerOptions);
|
|
41
|
+
trackFieldAccess(input: TrackFieldAccessInput): void;
|
|
42
|
+
trackFeatureUsage(input: TrackFeatureUsageInput): void;
|
|
43
|
+
trackWorkflowStep(input: TrackWorkflowStepInput): void;
|
|
44
|
+
flush(): Promise<void>;
|
|
45
|
+
dispose(): Promise<void>;
|
|
46
|
+
private enqueue;
|
|
49
47
|
}
|
|
50
|
-
declare const createBehaviorTracker: (options: BehaviorTrackerOptions) => BehaviorTracker;
|
|
51
|
-
//#endregion
|
|
52
|
-
export { BehaviorTracker, BehaviorTrackerContext, BehaviorTrackerOptions, TrackFeatureUsageInput, TrackFieldAccessInput, TrackWorkflowStepInput, createBehaviorTracker };
|
|
48
|
+
export declare const createBehaviorTracker: (options: BehaviorTrackerOptions) => BehaviorTracker;
|
|
53
49
|
//# sourceMappingURL=tracker.d.ts.map
|
package/dist/tracker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.d.ts","
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,aAAa,CAAC;IACrB,OAAO,EAAE,sBAAsB,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;IACjD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoD;IAC3E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAInB;IAEL,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,UAAU,CAAC,CAAiC;gBAExC,OAAO,EAAE,sBAAsB;IAY3C,gBAAgB,CAAC,KAAK,EAAE,qBAAqB;IAY7C,iBAAiB,CAAC,KAAK,EAAE,sBAAsB;IAY/C,iBAAiB,CAAC,KAAK,EAAE,sBAAsB;IAazC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOtB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAO9B,OAAO,CAAC,OAAO;CAmBhB;AAED,eAAO,MAAM,qBAAqB,GAAI,SAAS,sBAAsB,oBACvC,CAAC"}
|
package/dist/tracker.js
CHANGED
|
@@ -1,93 +1,95 @@
|
|
|
1
|
-
|
|
1
|
+
// @bun
|
|
2
|
+
// src/tracker.ts
|
|
3
|
+
import { trace, metrics } from "@opentelemetry/api";
|
|
4
|
+
var DEFAULT_BUFFER_SIZE = 25;
|
|
2
5
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
6
|
+
class BehaviorTracker {
|
|
7
|
+
store;
|
|
8
|
+
context;
|
|
9
|
+
tracer = trace.getTracer("lssm.personalization", "1.0.0");
|
|
10
|
+
counter = metrics.getMeter("lssm.personalization", "1.0.0").createCounter("lssm.personalization.events", {
|
|
11
|
+
description: "Behavior events tracked for personalization"
|
|
12
|
+
});
|
|
13
|
+
buffer = [];
|
|
14
|
+
bufferSize;
|
|
15
|
+
flushTimer;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.store = options.store;
|
|
18
|
+
this.context = options.context;
|
|
19
|
+
this.bufferSize = options.bufferSize ?? DEFAULT_BUFFER_SIZE;
|
|
20
|
+
if (options.autoFlushIntervalMs) {
|
|
21
|
+
this.flushTimer = setInterval(() => {
|
|
22
|
+
this.flush();
|
|
23
|
+
}, options.autoFlushIntervalMs);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
trackFieldAccess(input) {
|
|
27
|
+
const event = {
|
|
28
|
+
type: "field_access",
|
|
29
|
+
operation: input.operation,
|
|
30
|
+
field: input.field,
|
|
31
|
+
timestamp: Date.now(),
|
|
32
|
+
...this.context,
|
|
33
|
+
metadata: { ...this.context.metadata, ...input.metadata }
|
|
34
|
+
};
|
|
35
|
+
this.enqueue(event);
|
|
36
|
+
}
|
|
37
|
+
trackFeatureUsage(input) {
|
|
38
|
+
const event = {
|
|
39
|
+
type: "feature_usage",
|
|
40
|
+
feature: input.feature,
|
|
41
|
+
action: input.action,
|
|
42
|
+
timestamp: Date.now(),
|
|
43
|
+
...this.context,
|
|
44
|
+
metadata: { ...this.context.metadata, ...input.metadata }
|
|
45
|
+
};
|
|
46
|
+
this.enqueue(event);
|
|
47
|
+
}
|
|
48
|
+
trackWorkflowStep(input) {
|
|
49
|
+
const event = {
|
|
50
|
+
type: "workflow_step",
|
|
51
|
+
workflow: input.workflow,
|
|
52
|
+
step: input.step,
|
|
53
|
+
status: input.status,
|
|
54
|
+
timestamp: Date.now(),
|
|
55
|
+
...this.context,
|
|
56
|
+
metadata: { ...this.context.metadata, ...input.metadata }
|
|
57
|
+
};
|
|
58
|
+
this.enqueue(event);
|
|
59
|
+
}
|
|
60
|
+
async flush() {
|
|
61
|
+
if (!this.buffer.length)
|
|
62
|
+
return;
|
|
63
|
+
const events = this.buffer;
|
|
64
|
+
this.buffer = [];
|
|
65
|
+
await this.store.bulkRecord(events);
|
|
66
|
+
}
|
|
67
|
+
async dispose() {
|
|
68
|
+
if (this.flushTimer) {
|
|
69
|
+
clearInterval(this.flushTimer);
|
|
70
|
+
}
|
|
71
|
+
await this.flush();
|
|
72
|
+
}
|
|
73
|
+
enqueue(event) {
|
|
74
|
+
this.buffer.push(event);
|
|
75
|
+
this.counter.add(1, {
|
|
76
|
+
tenantId: this.context.tenantId,
|
|
77
|
+
type: event.type
|
|
78
|
+
});
|
|
79
|
+
this.tracer.startActiveSpan(`personalization.${event.type}`, (span) => {
|
|
80
|
+
span.setAttribute("tenant.id", this.context.tenantId);
|
|
81
|
+
if (this.context.userId)
|
|
82
|
+
span.setAttribute("user.id", this.context.userId);
|
|
83
|
+
span.setAttribute("personalization.event_type", event.type);
|
|
84
|
+
span.end();
|
|
85
|
+
});
|
|
86
|
+
if (this.buffer.length >= this.bufferSize) {
|
|
87
|
+
this.flush();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
var createBehaviorTracker = (options) => new BehaviorTracker(options);
|
|
92
|
+
export {
|
|
93
|
+
createBehaviorTracker,
|
|
94
|
+
BehaviorTracker
|
|
88
95
|
};
|
|
89
|
-
const createBehaviorTracker = (options) => new BehaviorTracker(options);
|
|
90
|
-
|
|
91
|
-
//#endregion
|
|
92
|
-
export { BehaviorTracker, createBehaviorTracker };
|
|
93
|
-
//# sourceMappingURL=tracker.js.map
|
package/dist/types.d.ts
CHANGED
|
@@ -1,59 +1,56 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
metadata?: Record<string, unknown>;
|
|
1
|
+
export type BehaviorEventType = 'field_access' | 'feature_usage' | 'workflow_step';
|
|
2
|
+
export interface BehaviorEventBase {
|
|
3
|
+
id?: string;
|
|
4
|
+
tenantId: string;
|
|
5
|
+
userId?: string;
|
|
6
|
+
role?: string;
|
|
7
|
+
device?: string;
|
|
8
|
+
timestamp: number;
|
|
9
|
+
metadata?: Record<string, unknown>;
|
|
11
10
|
}
|
|
12
|
-
interface FieldAccessEvent extends BehaviorEventBase {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
export interface FieldAccessEvent extends BehaviorEventBase {
|
|
12
|
+
type: 'field_access';
|
|
13
|
+
operation: string;
|
|
14
|
+
field: string;
|
|
16
15
|
}
|
|
17
|
-
interface FeatureUsageEvent extends BehaviorEventBase {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
export interface FeatureUsageEvent extends BehaviorEventBase {
|
|
17
|
+
type: 'feature_usage';
|
|
18
|
+
feature: string;
|
|
19
|
+
action: 'opened' | 'completed' | 'dismissed';
|
|
21
20
|
}
|
|
22
|
-
interface WorkflowStepEvent extends BehaviorEventBase {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
export interface WorkflowStepEvent extends BehaviorEventBase {
|
|
22
|
+
type: 'workflow_step';
|
|
23
|
+
workflow: string;
|
|
24
|
+
step: string;
|
|
25
|
+
status: 'entered' | 'completed' | 'skipped' | 'errored';
|
|
27
26
|
}
|
|
28
|
-
type BehaviorEvent = FieldAccessEvent | FeatureUsageEvent | WorkflowStepEvent;
|
|
29
|
-
interface BehaviorQuery {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
27
|
+
export type BehaviorEvent = FieldAccessEvent | FeatureUsageEvent | WorkflowStepEvent;
|
|
28
|
+
export interface BehaviorQuery {
|
|
29
|
+
tenantId?: string;
|
|
30
|
+
userId?: string;
|
|
31
|
+
role?: string;
|
|
32
|
+
feature?: string;
|
|
33
|
+
operation?: string;
|
|
34
|
+
workflow?: string;
|
|
35
|
+
since?: number;
|
|
36
|
+
until?: number;
|
|
37
|
+
limit?: number;
|
|
39
38
|
}
|
|
40
|
-
interface BehaviorSummary {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
39
|
+
export interface BehaviorSummary {
|
|
40
|
+
fieldCounts: Record<string, number>;
|
|
41
|
+
featureCounts: Record<string, number>;
|
|
42
|
+
workflowStepCounts: Record<string, Record<string, number>>;
|
|
43
|
+
totalEvents: number;
|
|
45
44
|
}
|
|
46
|
-
interface BehaviorInsights {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
45
|
+
export interface BehaviorInsights {
|
|
46
|
+
unusedFields: string[];
|
|
47
|
+
frequentlyUsedFields: string[];
|
|
48
|
+
suggestedHiddenFields: string[];
|
|
49
|
+
workflowBottlenecks: {
|
|
50
|
+
workflow: string;
|
|
51
|
+
step: string;
|
|
52
|
+
dropRate: number;
|
|
53
|
+
}[];
|
|
54
|
+
layoutPreference?: 'form' | 'grid' | 'list' | 'table';
|
|
56
55
|
}
|
|
57
|
-
//#endregion
|
|
58
|
-
export { BehaviorEvent, BehaviorEventBase, BehaviorEventType, BehaviorInsights, BehaviorQuery, BehaviorSummary, FeatureUsageEvent, FieldAccessEvent, WorkflowStepEvent };
|
|
59
56
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GACzB,cAAc,GACd,eAAe,GACf,eAAe,CAAC;AAEpB,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,gBAAiB,SAAQ,iBAAiB;IACzD,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAkB,SAAQ,iBAAiB;IAC1D,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;CACzD;AAED,MAAM,MAAM,aAAa,GACrB,gBAAgB,GAChB,iBAAiB,GACjB,iBAAiB,CAAC;AAEtB,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,mBAAmB,EAAE;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,EAAE,CAAC;IACJ,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CACvD"}
|
package/dist/types.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
// @bun
|