@mondaydotcomorg/z2h-shared-utils 0.3.3 → 0.3.4
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/esm/observability/__tests__/tracker.test.d.ts +2 -0
- package/dist/esm/observability/__tests__/tracker.test.d.ts.map +1 -0
- package/dist/esm/observability/tracker.d.ts.map +1 -1
- package/dist/esm/observability/tracker.mjs +4 -3
- package/dist/observability/__tests__/tracker.test.d.ts +2 -0
- package/dist/observability/__tests__/tracker.test.d.ts.map +1 -0
- package/dist/observability/tracker.d.ts.map +1 -1
- package/dist/observability/tracker.js +4 -3
- package/package.json +4 -2
- package/src/observability/__tests__/tracker.test.ts +71 -0
- package/src/observability/tracker.ts +4 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.test.d.ts","sourceRoot":"","sources":["../../../../src/observability/__tests__/tracker.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../../src/observability/tracker.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../../src/observability/tracker.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAW5F"}
|
|
@@ -13,13 +13,14 @@ function getUserContext() {
|
|
|
13
13
|
* standalone processes (e.g. CLIs) that never bootstrap the Trident runtime.
|
|
14
14
|
*/
|
|
15
15
|
function trackEvent(name, data, source) {
|
|
16
|
-
const
|
|
17
|
-
if (!
|
|
16
|
+
const tracker = Api.getPart('bigbrain')?.tracker;
|
|
17
|
+
if (!tracker) {
|
|
18
18
|
// eslint-disable-next-line no-console
|
|
19
19
|
console.warn('[z2h-shared-utils] trackEvent: bigbrain API part unavailable, was Runtime.init() called? Dropping event.');
|
|
20
20
|
return;
|
|
21
21
|
}
|
|
22
|
-
|
|
22
|
+
// Call through `tracker`, not a destructured reference — sendBiEvent relies on `this` internally.
|
|
23
|
+
tracker.sendBiEvent({ name, source, data: { ...getUserContext(), ...data } });
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
export { trackEvent };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.test.d.ts","sourceRoot":"","sources":["../../../src/observability/__tests__/tracker.test.ts"],"names":[],"mappings":""}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/observability/tracker.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/observability/tracker.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAW5F"}
|
|
@@ -15,13 +15,14 @@ function getUserContext() {
|
|
|
15
15
|
* standalone processes (e.g. CLIs) that never bootstrap the Trident runtime.
|
|
16
16
|
*/
|
|
17
17
|
function trackEvent(name, data, source) {
|
|
18
|
-
const
|
|
19
|
-
if (!
|
|
18
|
+
const tracker = tridentBackendApi.Api.getPart('bigbrain')?.tracker;
|
|
19
|
+
if (!tracker) {
|
|
20
20
|
// eslint-disable-next-line no-console
|
|
21
21
|
console.warn('[z2h-shared-utils] trackEvent: bigbrain API part unavailable, was Runtime.init() called? Dropping event.');
|
|
22
22
|
return;
|
|
23
23
|
}
|
|
24
|
-
|
|
24
|
+
// Call through `tracker`, not a destructured reference — sendBiEvent relies on `this` internally.
|
|
25
|
+
tracker.sendBiEvent({ name, source, data: { ...getUserContext(), ...data } });
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
exports.trackEvent = trackEvent;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mondaydotcomorg/z2h-shared-utils",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -29,6 +29,7 @@
|
|
|
29
29
|
]
|
|
30
30
|
},
|
|
31
31
|
"scripts": {
|
|
32
|
+
"test": "trident-library test",
|
|
32
33
|
"build": "trident-library build",
|
|
33
34
|
"watch": "trident-library build -w",
|
|
34
35
|
"lint": "trident-library lint"
|
|
@@ -50,7 +51,8 @@
|
|
|
50
51
|
"@mondaydotcomorg/trident-backend-api": "^0.24.3",
|
|
51
52
|
"@mondaydotcomorg/trident-library": "^1.2.7",
|
|
52
53
|
"@types/node": "^22.19.0",
|
|
53
|
-
"typescript": "^5.7.2"
|
|
54
|
+
"typescript": "^5.7.2",
|
|
55
|
+
"vitest": "^2.1.8"
|
|
54
56
|
},
|
|
55
57
|
"engines": {
|
|
56
58
|
"node": ">=24"
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { trackEvent } from '../tracker';
|
|
3
|
+
|
|
4
|
+
const { getPartMock } = vi.hoisted(() => ({ getPartMock: vi.fn() }));
|
|
5
|
+
vi.mock('@mondaydotcomorg/trident-backend-api', () => ({ Api: { getPart: getPartMock } }));
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Mirrors @mondaydotcomorg/bigbrain-tracker-node: sendBiEvent is a prototype method that
|
|
9
|
+
* delegates to this.sendBiEventAsync. A plain-object double would pass even when trackEvent
|
|
10
|
+
* detaches the method from its tracker, which is how that bug reached production —
|
|
11
|
+
* it only surfaces once Runtime.init() has supplied a real bigbrain part.
|
|
12
|
+
*/
|
|
13
|
+
class FakeTracker {
|
|
14
|
+
readonly sent: { name: string; source: string; data: Record<string, unknown> }[] = [];
|
|
15
|
+
|
|
16
|
+
async sendBiEventAsync(event: { name: string; source: string; data: Record<string, unknown> }): Promise<void> {
|
|
17
|
+
this.sent.push(event);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
sendBiEvent(event: { name: string; source: string; data: Record<string, unknown> }): void {
|
|
21
|
+
void this.sendBiEventAsync(event);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function mockParts({ tracker, user }: { tracker?: FakeTracker; user?: { name: string } }) {
|
|
26
|
+
getPartMock.mockImplementation((part: string) => {
|
|
27
|
+
if (part === 'bigbrain') {
|
|
28
|
+
return tracker ? { tracker } : undefined;
|
|
29
|
+
}
|
|
30
|
+
if (part === 'context') {
|
|
31
|
+
return { execution: { get: () => (user ? { user } : undefined) } };
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
describe('trackEvent', () => {
|
|
38
|
+
beforeEach(() => {
|
|
39
|
+
getPartMock.mockReset();
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
it('sends the event through the tracker', () => {
|
|
43
|
+
const tracker = new FakeTracker();
|
|
44
|
+
mockParts({ tracker });
|
|
45
|
+
|
|
46
|
+
trackEvent('z2h_agent_tool_call', { tool_name: 'write_file' }, 'z2h-agent');
|
|
47
|
+
|
|
48
|
+
expect(tracker.sent).toEqual([
|
|
49
|
+
{ name: 'z2h_agent_tool_call', source: 'z2h-agent', data: { tool_name: 'write_file' } },
|
|
50
|
+
]);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
it('attaches the current user to the event', () => {
|
|
54
|
+
const tracker = new FakeTracker();
|
|
55
|
+
mockParts({ tracker, user: { name: 'Arielle' } });
|
|
56
|
+
|
|
57
|
+
trackEvent('z2h_agent_tool_call', { tool_name: 'execute' }, 'z2h-agent');
|
|
58
|
+
|
|
59
|
+
expect(tracker.sent[0].data).toEqual({ user_name: 'Arielle', tool_name: 'execute' });
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('drops the event with a warning when the bigbrain part is unavailable', () => {
|
|
63
|
+
mockParts({});
|
|
64
|
+
const warn = vi.spyOn(console, 'warn').mockImplementation(() => {});
|
|
65
|
+
|
|
66
|
+
expect(() => trackEvent('z2h_agent_tool_call', { tool_name: 'task' }, 'z2h-agent')).not.toThrow();
|
|
67
|
+
|
|
68
|
+
expect(warn).toHaveBeenCalledOnce();
|
|
69
|
+
warn.mockRestore();
|
|
70
|
+
});
|
|
71
|
+
});
|
|
@@ -15,13 +15,14 @@ function getUserContext(): { user_name?: string } {
|
|
|
15
15
|
* standalone processes (e.g. CLIs) that never bootstrap the Trident runtime.
|
|
16
16
|
*/
|
|
17
17
|
export function trackEvent(name: string, data: Record<string, unknown>, source: string): void {
|
|
18
|
-
const
|
|
19
|
-
if (!
|
|
18
|
+
const tracker = Api.getPart('bigbrain')?.tracker;
|
|
19
|
+
if (!tracker) {
|
|
20
20
|
// eslint-disable-next-line no-console
|
|
21
21
|
console.warn(
|
|
22
22
|
'[z2h-shared-utils] trackEvent: bigbrain API part unavailable, was Runtime.init() called? Dropping event.'
|
|
23
23
|
);
|
|
24
24
|
return;
|
|
25
25
|
}
|
|
26
|
-
|
|
26
|
+
// Call through `tracker`, not a destructured reference — sendBiEvent relies on `this` internally.
|
|
27
|
+
tracker.sendBiEvent({ name, source, data: { ...getUserContext(), ...data } });
|
|
27
28
|
}
|