@servicenow/sdk-build-core 4.2.0 → 4.3.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.
Files changed (79) hide show
  1. package/dist/compiler.d.ts +5 -1
  2. package/dist/compiler.js +104 -7
  3. package/dist/compiler.js.map +1 -1
  4. package/dist/now-config-dependencies.d.ts +2 -1
  5. package/dist/now-config.d.ts +5 -0
  6. package/dist/now-config.js +2 -4
  7. package/dist/now-config.js.map +1 -1
  8. package/dist/plugins/cache.d.ts +8 -13
  9. package/dist/plugins/cache.js +2 -26
  10. package/dist/plugins/cache.js.map +1 -1
  11. package/dist/plugins/data-shape.d.ts +24 -33
  12. package/dist/plugins/data-shape.js +83 -73
  13. package/dist/plugins/data-shape.js.map +1 -1
  14. package/dist/plugins/plugin.d.ts +43 -1
  15. package/dist/plugins/plugin.js +49 -5
  16. package/dist/plugins/plugin.js.map +1 -1
  17. package/dist/plugins/shape.d.ts +19 -11
  18. package/dist/plugins/shape.js +61 -23
  19. package/dist/plugins/shape.js.map +1 -1
  20. package/dist/taxonomy.js +53 -1
  21. package/dist/taxonomy.js.map +1 -1
  22. package/dist/telemetry/clients/abstract-client.d.ts +25 -0
  23. package/dist/telemetry/clients/abstract-client.js +55 -0
  24. package/dist/telemetry/clients/abstract-client.js.map +1 -0
  25. package/dist/telemetry/clients/browser-client.d.ts +20 -0
  26. package/dist/telemetry/clients/browser-client.js +136 -0
  27. package/dist/telemetry/clients/browser-client.js.map +1 -0
  28. package/dist/telemetry/clients/node-client.d.ts +15 -0
  29. package/dist/telemetry/clients/node-client.js +159 -0
  30. package/dist/telemetry/clients/node-client.js.map +1 -0
  31. package/dist/telemetry/clients/noop-client.d.ts +10 -0
  32. package/dist/telemetry/clients/noop-client.js +18 -0
  33. package/dist/telemetry/clients/noop-client.js.map +1 -0
  34. package/dist/telemetry/clients/util.d.ts +11 -0
  35. package/dist/telemetry/clients/util.js +34 -0
  36. package/dist/telemetry/clients/util.js.map +1 -0
  37. package/dist/telemetry/config.d.ts +2 -0
  38. package/dist/telemetry/config.js +28 -0
  39. package/dist/telemetry/config.js.map +1 -0
  40. package/dist/telemetry/factory.d.ts +13 -0
  41. package/dist/telemetry/factory.js +29 -0
  42. package/dist/telemetry/factory.js.map +1 -0
  43. package/dist/telemetry/index.d.ts +2 -25
  44. package/dist/telemetry/index.js +3 -15
  45. package/dist/telemetry/index.js.map +1 -1
  46. package/dist/telemetry/types.d.ts +55 -0
  47. package/dist/telemetry/types.js +12 -0
  48. package/dist/telemetry/types.js.map +1 -0
  49. package/dist/typescript.d.ts +10 -0
  50. package/dist/typescript.js +18 -0
  51. package/dist/typescript.js.map +1 -1
  52. package/dist/util/delete-multiple.d.ts +5 -0
  53. package/dist/util/delete-multiple.js +30 -0
  54. package/dist/util/delete-multiple.js.map +1 -0
  55. package/dist/util/index.d.ts +1 -0
  56. package/dist/util/index.js +1 -0
  57. package/dist/util/index.js.map +1 -1
  58. package/now.config.schema.json +38 -0
  59. package/package.json +13 -9
  60. package/src/compiler.ts +121 -7
  61. package/src/now-config-dependencies.ts +2 -1
  62. package/src/now-config.ts +3 -4
  63. package/src/plugins/cache.ts +5 -27
  64. package/src/plugins/data-shape.ts +95 -84
  65. package/src/plugins/plugin.ts +116 -9
  66. package/src/plugins/shape.ts +64 -30
  67. package/src/taxonomy.ts +53 -1
  68. package/src/telemetry/clients/abstract-client.ts +63 -0
  69. package/src/telemetry/clients/browser-client.ts +160 -0
  70. package/src/telemetry/clients/node-client.ts +151 -0
  71. package/src/telemetry/clients/noop-client.ts +15 -0
  72. package/src/telemetry/clients/util.ts +33 -0
  73. package/src/telemetry/config.ts +12 -0
  74. package/src/telemetry/factory.ts +34 -0
  75. package/src/telemetry/index.ts +2 -27
  76. package/src/telemetry/types.ts +61 -0
  77. package/src/typescript.ts +17 -0
  78. package/src/util/delete-multiple.ts +35 -0
  79. package/src/util/index.ts +1 -0
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AbstractAppSeeClient = void 0;
4
+ const util_1 = require("./util");
5
+ class AbstractAppSeeClient {
6
+ config;
7
+ telemetryAttributes;
8
+ sdkVersion;
9
+ clientName;
10
+ hostname;
11
+ session;
12
+ startPromise;
13
+ constructor(config, telemetryAttributes) {
14
+ this.config = config;
15
+ this.telemetryAttributes = telemetryAttributes;
16
+ this.sdkVersion = telemetryAttributes.sdkVersion;
17
+ this.clientName = telemetryAttributes.clientName;
18
+ this.hostname = telemetryAttributes.hostname;
19
+ }
20
+ startTimerEvent(name) {
21
+ return new util_1.AppSeeTimerMetric(name);
22
+ }
23
+ start() {
24
+ if (!this.startPromise) {
25
+ this.startPromise = this.doStart();
26
+ }
27
+ return this.startPromise;
28
+ }
29
+ sendEvent(events) {
30
+ //we fire and forget the telemetry events
31
+ this.start()
32
+ .then(() => this.doSendEvent(events))
33
+ .catch(() => { });
34
+ }
35
+ error(event, error, data) {
36
+ this.sendEvent([
37
+ {
38
+ name: 'error',
39
+ data: {
40
+ event,
41
+ ...(error instanceof Error
42
+ ? {
43
+ name: error.name,
44
+ message: error.message,
45
+ stack: error.stack,
46
+ }
47
+ : { message: error?.toString() }),
48
+ ...data,
49
+ },
50
+ },
51
+ ]);
52
+ }
53
+ }
54
+ exports.AbstractAppSeeClient = AbstractAppSeeClient;
55
+ //# sourceMappingURL=abstract-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract-client.js","sourceRoot":"","sources":["../../../src/telemetry/clients/abstract-client.ts"],"names":[],"mappings":";;;AACA,iCAA0C;AAE1C,MAAsB,oBAAoB;IAQf;IACT;IARK,UAAU,CAAqB;IAC/B,UAAU,CAAwB;IAClC,QAAQ,CAAqB;IACtC,OAAO,CAAU;IACjB,YAAY,CAAgB;IAEtC,YACuB,MAAwB,EACjC,mBAIT;QALkB,WAAM,GAAN,MAAM,CAAkB;QACjC,wBAAmB,GAAnB,mBAAmB,CAI5B;QAED,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAA;QAChD,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,UAAU,CAAA;QAChD,IAAI,CAAC,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAA;IAChD,CAAC;IAED,eAAe,CAAC,IAA4B;QACxC,OAAO,IAAI,wBAAiB,CAAC,IAAI,CAAC,CAAA;IACtC,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,CAAA;QACtC,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAA;IAC5B,CAAC;IAEM,SAAS,CAAC,MAAyC;QACtD,yCAAyC;QACzC,IAAI,CAAC,KAAK,EAAE;aACP,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;aACpC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,KAAa,EAAE,KAAc,EAAE,IAAyB;QACjE,IAAI,CAAC,SAAS,CAAC;YACX;gBACI,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE;oBACF,KAAK;oBACL,GAAG,CAAC,KAAK,YAAY,KAAK;wBACtB,CAAC,CAAC;4BACI,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,OAAO,EAAE,KAAK,CAAC,OAAO;4BACtB,KAAK,EAAE,KAAK,CAAC,KAAK;yBACrB;wBACH,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC;oBACrC,GAAG,IAAI;iBACV;aACJ;SACJ,CAAC,CAAA;IACN,CAAC;CAIJ;AA3DD,oDA2DC"}
@@ -0,0 +1,20 @@
1
+ import type { TelemetryEvent } from '../types';
2
+ import { type InstanceSettings } from '../types';
3
+ import { AbstractAppSeeClient } from './abstract-client';
4
+ export declare class BrowserTelemetryClient extends AbstractAppSeeClient {
5
+ constructor(config: InstanceSettings, telemetryAttributes?: {
6
+ sdkVersion?: string;
7
+ clientName?: 'ide' | string;
8
+ hostname?: string;
9
+ ideVersion?: string;
10
+ });
11
+ private readonly ideVersion;
12
+ private userId?;
13
+ private getUserHash;
14
+ private getUserIdentifier;
15
+ private generateHexString;
16
+ doStart(): Promise<void>;
17
+ doSendEvent(events: TelemetryEvent | TelemetryEvent[]): void;
18
+ private getHeaders;
19
+ private getDefaultDataValues;
20
+ }
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BrowserTelemetryClient = void 0;
4
+ const types_1 = require("../types");
5
+ const abstract_client_1 = require("./abstract-client");
6
+ class BrowserTelemetryClient extends abstract_client_1.AbstractAppSeeClient {
7
+ constructor(config, telemetryAttributes) {
8
+ const { ideVersion, ...baseAttributes } = telemetryAttributes ?? {};
9
+ super(config, {
10
+ ...baseAttributes,
11
+ clientName: telemetryAttributes?.clientName ?? 'ide',
12
+ });
13
+ this.ideVersion = ideVersion;
14
+ }
15
+ ideVersion;
16
+ userId;
17
+ async getUserHash() {
18
+ const userUniqueId = await this.getUserIdentifier();
19
+ const bytes = new TextEncoder().encode(userUniqueId);
20
+ const byteHash = await crypto.subtle.digest('SHA-256', bytes);
21
+ const hashArray = Array.from(new Uint8Array(byteHash));
22
+ return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
23
+ }
24
+ async getUserIdentifier() {
25
+ if (typeof window === 'undefined') {
26
+ return 'unknown';
27
+ }
28
+ const storageKey = 'sdk_telemetry_user_id';
29
+ try {
30
+ let userId = localStorage.getItem(storageKey);
31
+ if (!userId) {
32
+ userId = `anon_${Date.now()}_${Math.random().toString(36).substring(2, 15)}`;
33
+ localStorage.setItem(storageKey, userId);
34
+ }
35
+ return userId;
36
+ }
37
+ catch {
38
+ return `temp_${Math.random().toString(36).substring(2, 15)}`;
39
+ }
40
+ }
41
+ generateHexString() {
42
+ return crypto.randomUUID();
43
+ }
44
+ async doStart() {
45
+ try {
46
+ if (this.session) {
47
+ return;
48
+ }
49
+ this.userId = await this.getUserHash();
50
+ const tabId = this.generateHexString();
51
+ const body = {
52
+ RequestId: this.generateHexString(),
53
+ TabId: tabId,
54
+ SystemLocale: navigator.language ?? 'unknown',
55
+ AppUserId: this.userId,
56
+ ScreenHeight: typeof screen !== 'undefined' ? screen.height : 0,
57
+ ScreenWidth: typeof screen !== 'undefined' ? screen.width : 0,
58
+ ClientTime: new Date().toISOString(),
59
+ TrackingLevel: 'Full',
60
+ };
61
+ const response = await fetch(new URL('/web/config', this.config.BaseUrl), {
62
+ method: 'POST',
63
+ headers: this.getHeaders(),
64
+ body: JSON.stringify(body),
65
+ signal: AbortSignal.timeout(types_1.NETWORK_TIMEOUT_MS),
66
+ });
67
+ const bodyResponse = await response.json();
68
+ if (response.ok) {
69
+ this.session = { ...bodyResponse, TabId: tabId };
70
+ }
71
+ else {
72
+ throw new Error(`Failed to start session with status ${response.status}: ${bodyResponse.Error}`);
73
+ }
74
+ }
75
+ catch (_error) { }
76
+ }
77
+ doSendEvent(events) {
78
+ try {
79
+ if (!this.session) {
80
+ return;
81
+ }
82
+ const defaultValues = this.getDefaultDataValues();
83
+ const eventData = Array.isArray(events) ? events : [events];
84
+ const now = Date.now();
85
+ const hostname = this.hostname ? { hostname: this.hostname } : {};
86
+ const dataPoints = eventData.map((d) => ({
87
+ t: types_1.DatapointType.Event,
88
+ d: now,
89
+ n: d.name,
90
+ p: { scopeId: d.appInfo?.scopeId, ...hostname, ...defaultValues, ...d.data },
91
+ }));
92
+ const userProps = { hostname }; //does CI make sense for browser environment ??
93
+ dataPoints.push({
94
+ t: types_1.DatapointType.User,
95
+ d: now,
96
+ n: this.userId,
97
+ p: userProps,
98
+ });
99
+ const body = {
100
+ SessionId: this.session.SessionId,
101
+ DataPoints: dataPoints,
102
+ TabId: this.session.TabId || '0',
103
+ ClientTime: new Date().toISOString(),
104
+ ConfigReceivedTime: new Date().toISOString(),
105
+ };
106
+ fetch(new URL('/web/heartbeat', this.config.BaseUrl), {
107
+ method: 'POST',
108
+ headers: this.getHeaders(),
109
+ body: JSON.stringify(body),
110
+ signal: AbortSignal.timeout(types_1.NETWORK_TIMEOUT_MS),
111
+ }).catch(() => { });
112
+ }
113
+ catch (_error) { }
114
+ }
115
+ getHeaders() {
116
+ return {
117
+ APIKey: this.config.APIKey,
118
+ APIAuth: this.config.APIAuth,
119
+ BrowserId: '0',
120
+ ClientId: this.session?.ClientId || '0',
121
+ Version: this.sdkVersion || 'unknown',
122
+ 'Content-Type': 'application/json',
123
+ };
124
+ }
125
+ getDefaultDataValues() {
126
+ const defaultValues = {
127
+ browser: navigator.userAgent || 'unknown',
128
+ version: this.sdkVersion || 'unknown',
129
+ clientName: this.clientName,
130
+ ideVersion: this.ideVersion || 'unknown',
131
+ };
132
+ return defaultValues;
133
+ }
134
+ }
135
+ exports.BrowserTelemetryClient = BrowserTelemetryClient;
136
+ //# sourceMappingURL=browser-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-client.js","sourceRoot":"","sources":["../../../src/telemetry/clients/browser-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { TelemetryEvent, InstanceSettings } from '../types';
2
+ import { AbstractAppSeeClient } from './abstract-client';
3
+ export declare class NodeTelemetryClient extends AbstractAppSeeClient {
4
+ constructor(config: InstanceSettings, telemetryAttributes?: {
5
+ sdkVersion?: string;
6
+ clientName?: 'cli' | string;
7
+ hostname?: string;
8
+ });
9
+ private userId?;
10
+ doStart(): Promise<void>;
11
+ doSendEvent(events: TelemetryEvent | TelemetryEvent[]): void;
12
+ private getHeaders;
13
+ private getDefaultDataValues;
14
+ private applyCITelemetry;
15
+ }
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.NodeTelemetryClient = void 0;
30
+ const os = __importStar(require("os"));
31
+ const ci_info_1 = __importDefault(require("ci-info"));
32
+ const types_1 = require("../types");
33
+ const abstract_client_1 = require("./abstract-client");
34
+ function generateHexString() {
35
+ // biome-ignore lint/style/noRestrictedImports: <explanation>
36
+ const crypto = require('node:crypto');
37
+ return crypto.randomBytes(16).toString('hex');
38
+ }
39
+ async function getUserHash() {
40
+ const user = `${os.userInfo().username}:${os.hostname()}`;
41
+ if (!user) {
42
+ return 'unknown';
43
+ }
44
+ const bytes = new TextEncoder().encode(user);
45
+ const byteHash = await crypto.subtle.digest('SHA-256', bytes);
46
+ return Buffer.from(byteHash).toString('hex');
47
+ }
48
+ class NodeTelemetryClient extends abstract_client_1.AbstractAppSeeClient {
49
+ constructor(config, telemetryAttributes) {
50
+ super(config, {
51
+ ...(telemetryAttributes ?? {}),
52
+ clientName: telemetryAttributes?.clientName ?? 'cli',
53
+ });
54
+ }
55
+ userId;
56
+ async doStart() {
57
+ try {
58
+ if (this.session) {
59
+ return;
60
+ }
61
+ this.userId = await getUserHash();
62
+ const tabId = generateHexString();
63
+ const body = {
64
+ RequestId: generateHexString(),
65
+ TabId: tabId,
66
+ SystemLocale: (process.env['LANG'] || 'unknown').split('.')[0],
67
+ AppUserId: this.userId,
68
+ ScreenHeight: 0,
69
+ ScreenWidth: 0,
70
+ ClientTime: new Date().toISOString(),
71
+ TrackingLevel: 'Full',
72
+ };
73
+ const response = await fetch(new URL('/web/config', this.config.BaseUrl), {
74
+ method: 'POST',
75
+ headers: this.getHeaders(),
76
+ body: JSON.stringify(body),
77
+ signal: AbortSignal.timeout(types_1.NETWORK_TIMEOUT_MS),
78
+ });
79
+ const bodyResponse = await response.json();
80
+ if (response.ok) {
81
+ this.session = { ...bodyResponse, TabId: tabId };
82
+ }
83
+ else {
84
+ throw new Error(`Failed to start session with status ${response.status}: ${bodyResponse.Error}`);
85
+ }
86
+ }
87
+ catch (_error) {
88
+ //ignore
89
+ }
90
+ }
91
+ doSendEvent(events) {
92
+ try {
93
+ //Check if we have a session
94
+ if (!this.session) {
95
+ return;
96
+ }
97
+ const defaultValues = this.getDefaultDataValues();
98
+ const eventData = Array.isArray(events) ? events : [events];
99
+ const now = Date.now();
100
+ const hostname = this.hostname ? { hostname: this.hostname } : {};
101
+ const dataPoints = eventData.map((d) => ({
102
+ t: types_1.DatapointType.Event,
103
+ d: now,
104
+ n: d.name,
105
+ p: { scopeId: d.appInfo?.scopeId, ...hostname, ...defaultValues, ...d.data },
106
+ }));
107
+ const userProps = this.applyCITelemetry({ ...hostname });
108
+ dataPoints.push({
109
+ t: types_1.DatapointType.User,
110
+ d: now,
111
+ n: this.userId,
112
+ p: userProps,
113
+ });
114
+ const body = {
115
+ SessionId: this.session.SessionId,
116
+ DataPoints: dataPoints,
117
+ TabId: this.session.TabId || '0',
118
+ ClientTime: new Date().toISOString(),
119
+ ConfigReceivedTime: new Date().toISOString(),
120
+ };
121
+ fetch(new URL('/web/heartbeat', this.config.BaseUrl), {
122
+ method: 'POST',
123
+ headers: this.getHeaders(),
124
+ body: JSON.stringify(body),
125
+ signal: AbortSignal.timeout(types_1.NETWORK_TIMEOUT_MS),
126
+ }).catch(() => { });
127
+ }
128
+ catch (_error) {
129
+ //ignore errors from telemetry
130
+ }
131
+ }
132
+ getHeaders() {
133
+ return {
134
+ APIKey: this.config.APIKey,
135
+ APIAuth: this.config.APIAuth,
136
+ BrowserId: '0',
137
+ ClientId: this.session?.ClientId || '0',
138
+ Version: this.sdkVersion || 'unknown',
139
+ 'Content-Type': 'application/json',
140
+ };
141
+ }
142
+ getDefaultDataValues() {
143
+ const defaultValues = {
144
+ os: os.type(),
145
+ version: this.sdkVersion || 'unknown',
146
+ nodeVersion: process.version,
147
+ clientName: this.clientName,
148
+ };
149
+ return this.applyCITelemetry(defaultValues);
150
+ }
151
+ applyCITelemetry(data) {
152
+ if (ci_info_1.default.isCI) {
153
+ return { ...data, ci: true, ciName: ci_info_1.default.name, ciPR: ci_info_1.default.isPR };
154
+ }
155
+ return data;
156
+ }
157
+ }
158
+ exports.NodeTelemetryClient = NodeTelemetryClient;
159
+ //# sourceMappingURL=node-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-client.js","sourceRoot":"","sources":["../../../src/telemetry/clients/node-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Telemetry, TimerMetric } from '../types';
2
+ /**
3
+ * This is a no-op telemetry implementation that does nothing.
4
+ */
5
+ export declare class NoOpTelemetry implements Telemetry {
6
+ startTimerEvent(): TimerMetric;
7
+ start: () => void;
8
+ sendEvent: () => void;
9
+ error: () => void;
10
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NoOpTelemetry = void 0;
4
+ /**
5
+ * This is a no-op telemetry implementation that does nothing.
6
+ */
7
+ class NoOpTelemetry {
8
+ startTimerEvent() {
9
+ return {
10
+ end: () => ({ name: '', data: {} }),
11
+ };
12
+ }
13
+ start = () => { };
14
+ sendEvent = () => { };
15
+ error = () => { };
16
+ }
17
+ exports.NoOpTelemetry = NoOpTelemetry;
18
+ //# sourceMappingURL=noop-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noop-client.js","sourceRoot":"","sources":["../../../src/telemetry/clients/noop-client.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACH,MAAa,aAAa;IACtB,eAAe;QACX,OAAO;YACH,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;SACtC,CAAA;IACL,CAAC;IACD,KAAK,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;IAChB,SAAS,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;IACpB,KAAK,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;CACnB;AATD,sCASC"}
@@ -0,0 +1,11 @@
1
+ import type { TelemetryEvent, TimerMetric } from '../types';
2
+ export declare class AppSeeTimerMetric implements TimerMetric {
3
+ private readonly name;
4
+ private readonly startTime;
5
+ constructor(name: TelemetryEvent['name']);
6
+ getDurationMs(): {
7
+ duration: number;
8
+ now: number;
9
+ };
10
+ end(eventData?: Pick<TelemetryEvent, 'appInfo' | 'data'>): TelemetryEvent;
11
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AppSeeTimerMetric = void 0;
4
+ class AppSeeTimerMetric {
5
+ name;
6
+ startTime;
7
+ constructor(name) {
8
+ this.name = name;
9
+ this.startTime = Date.now();
10
+ }
11
+ getDurationMs() {
12
+ const now = Date.now();
13
+ return {
14
+ duration: now - this.startTime,
15
+ now,
16
+ };
17
+ }
18
+ end(eventData) {
19
+ const durationMs = Date.now() - this.startTime;
20
+ /**
21
+ * Create a an event containing the duration and all checkpoint durations
22
+ */
23
+ return {
24
+ name: this.name,
25
+ appInfo: eventData?.appInfo || {},
26
+ data: {
27
+ ...eventData?.data,
28
+ durationMs,
29
+ },
30
+ };
31
+ }
32
+ }
33
+ exports.AppSeeTimerMetric = AppSeeTimerMetric;
34
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/telemetry/clients/util.ts"],"names":[],"mappings":";;;AAEA,MAAa,iBAAiB;IAGG;IAFZ,SAAS,CAAQ;IAElC,YAA6B,IAA4B;QAA5B,SAAI,GAAJ,IAAI,CAAwB;QACrD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC/B,CAAC;IAED,aAAa;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,OAAO;YACH,QAAQ,EAAE,GAAG,GAAG,IAAI,CAAC,SAAS;YAC9B,GAAG;SACN,CAAA;IACL,CAAC;IAED,GAAG,CAAC,SAAoD;QACpD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;QAC9C;;WAEG;QAEH,OAAO;YACH,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,EAAE;YACjC,IAAI,EAAE;gBACF,GAAG,SAAS,EAAE,IAAI;gBAClB,UAAU;aACb;SACJ,CAAA;IACL,CAAC;CACJ;AA9BD,8CA8BC"}
@@ -0,0 +1,2 @@
1
+ import type { InstanceSettings } from './types';
2
+ export declare const getAppSeeConfig: () => InstanceSettings;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var config_exports = {};
20
+ __export(config_exports, {
21
+ getAppSeeConfig: () => getAppSeeConfig
22
+ });
23
+ module.exports = __toCommonJS(config_exports);
24
+ const getAppSeeConfig = () => ({
25
+ APIKey: "demonightlycrf:6488f3cdc18547c19b2c8852b276a210",
26
+ APIAuth: "f3bfba5cdd1f417589a0b1b290fd3346",
27
+ BaseUrl: "https://api-appsee.service-now.com"
28
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/telemetry/config.ts"],"names":[],"mappings":";;;AAMA,uDAAuD;AAChD,MAAM,eAAe,GAAG,GAAqB,EAAE,CAAC,CAAC;IACpD,MAAM,EAAE,kBAAkB;IAC1B,OAAO,EAAE,mBAAmB;IAC5B,OAAO,EAAE,cAAc;CAC1B,CAAC,CAAA;AAJW,QAAA,eAAe,mBAI1B"}
@@ -0,0 +1,13 @@
1
+ /** biome-ignore-all lint/complexity/noStaticOnlyClass: <explanation> */
2
+ import type { Telemetry } from './types';
3
+ export declare class TelemetryFactory {
4
+ static create(options?: {
5
+ type?: 'node' | 'browser';
6
+ attributes?: {
7
+ sdkVersion?: string;
8
+ clientName?: string;
9
+ hostname?: string;
10
+ ideVersion?: string;
11
+ };
12
+ }): Telemetry;
13
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TelemetryFactory = void 0;
4
+ const noop_client_1 = require("./clients/noop-client");
5
+ const node_client_1 = require("./clients/node-client");
6
+ const browser_client_1 = require("./clients/browser-client");
7
+ const config_1 = require("./config");
8
+ class TelemetryFactory {
9
+ static create(options) {
10
+ const config = (0, config_1.getAppSeeConfig)();
11
+ if (process.env['NODE_ENV'] === 'test' ||
12
+ !options ||
13
+ !options.type ||
14
+ !config.APIKey ||
15
+ !config.APIAuth ||
16
+ !config.BaseUrl) {
17
+ return new noop_client_1.NoOpTelemetry();
18
+ }
19
+ if (options.type === 'node') {
20
+ return new node_client_1.NodeTelemetryClient(config, options.attributes);
21
+ }
22
+ else if (options.type === 'browser') {
23
+ return new browser_client_1.BrowserTelemetryClient(config, options.attributes);
24
+ }
25
+ throw new Error('Invalid telemetry type.');
26
+ }
27
+ }
28
+ exports.TelemetryFactory = TelemetryFactory;
29
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/telemetry/factory.ts"],"names":[],"mappings":";;;AAEA,uDAAqD;AACrD,uDAA2D;AAC3D,6DAAiE;AACjE,qCAA0C;AAE1C,MAAa,gBAAgB;IACzB,MAAM,CAAC,MAAM,CAAC,OAGb;QACG,MAAM,MAAM,GAAG,IAAA,wBAAe,GAAE,CAAA;QAEhC,IACI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,MAAM;YAClC,CAAC,OAAO;YACR,CAAC,OAAO,CAAC,IAAI;YACb,CAAC,MAAM,CAAC,MAAM;YACd,CAAC,MAAM,CAAC,OAAO;YACf,CAAC,MAAM,CAAC,OAAO,EACjB,CAAC;YACC,OAAO,IAAI,2BAAa,EAAE,CAAA;QAC9B,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,IAAI,iCAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;QAC9D,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YACpC,OAAO,IAAI,uCAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAA;QACjE,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAA;IAC9C,CAAC;CACJ;AA1BD,4CA0BC"}
@@ -1,25 +1,2 @@
1
- export interface Telemetry {
2
- sendEvent(eventData: TelemetryEvent | TelemetryEvent[]): Promise<void>;
3
- error(event: string, error: unknown, data?: TelemetryEventData): Promise<void>;
4
- startTimerEvent(name: TelemetryEvent['name']): TimerMetric;
5
- }
6
- export interface TimerMetric {
7
- end(eventData?: Pick<TelemetryEvent, 'appInfo' | 'data'>): TelemetryEvent;
8
- }
9
- export type TelemetryEventData = Record<string, unknown>;
10
- export type TelemetryEvent = {
11
- name: string;
12
- appInfo?: {
13
- scopeId?: string;
14
- };
15
- data?: TelemetryEventData;
16
- };
17
- /**
18
- * This is a no-op telemetry implementation that does nothing.
19
- */
20
- export declare class NoOpTelemetry implements Telemetry {
21
- startTimerEvent(): TimerMetric;
22
- start: () => Promise<void>;
23
- sendEvent: () => Promise<void>;
24
- error: () => Promise<void>;
25
- }
1
+ export type { Telemetry, TelemetryEvent } from './types';
2
+ export { TelemetryFactory } from './factory';
@@ -1,18 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NoOpTelemetry = void 0;
4
- /**
5
- * This is a no-op telemetry implementation that does nothing.
6
- */
7
- class NoOpTelemetry {
8
- startTimerEvent() {
9
- return {
10
- end: () => ({ name: '', data: {} }),
11
- };
12
- }
13
- start = () => Promise.resolve();
14
- sendEvent = () => Promise.resolve();
15
- error = () => Promise.resolve();
16
- }
17
- exports.NoOpTelemetry = NoOpTelemetry;
3
+ exports.TelemetryFactory = void 0;
4
+ var factory_1 = require("./factory");
5
+ Object.defineProperty(exports, "TelemetryFactory", { enumerable: true, get: function () { return factory_1.TelemetryFactory; } });
18
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":";;;AAcA;;GAEG;AACH,MAAa,aAAa;IACtB,eAAe;QACX,OAAO;YACH,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;SACtC,CAAA;IACL,CAAC;IACD,KAAK,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;IAC/B,SAAS,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;IACnC,KAAK,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,CAAA;CAClC;AATD,sCASC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":";;;AACA,qCAA4C;AAAnC,2GAAA,gBAAgB,OAAA"}