@salesforce/b2c-tooling-sdk 1.14.0 → 1.15.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/esm/operations/cap/install.d.ts +5 -0
- package/dist/esm/operations/cap/install.js +3 -1
- package/dist/esm/operations/cap/install.js.map +1 -1
- package/dist/esm/telemetry/app-insights-client.d.ts +82 -0
- package/dist/esm/telemetry/app-insights-client.js +229 -0
- package/dist/esm/telemetry/app-insights-client.js.map +1 -0
- package/dist/esm/telemetry/telemetry.d.ts +2 -0
- package/dist/esm/telemetry/telemetry.js +26 -35
- package/dist/esm/telemetry/telemetry.js.map +1 -1
- package/dist/esm/telemetry/types.d.ts +12 -0
- package/package.json +5 -6
|
@@ -9,6 +9,11 @@ export interface CommerceAppInstallOptions {
|
|
|
9
9
|
siteId: string;
|
|
10
10
|
/** Keep the uploaded zip on the instance after install (default: false). */
|
|
11
11
|
keepArchive?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Create a pull request against the connected Storefront Next repository
|
|
14
|
+
* when the app includes storefront content (default: false).
|
|
15
|
+
*/
|
|
16
|
+
shouldCreatePr?: boolean;
|
|
12
17
|
/** Wait options for job completion. */
|
|
13
18
|
waitOptions?: WaitForJobOptions;
|
|
14
19
|
}
|
|
@@ -39,7 +39,7 @@ const INSTALL_JOB_ID = 'sfcc-install-commerce-app';
|
|
|
39
39
|
*/
|
|
40
40
|
export async function commerceAppInstall(instance, target, options) {
|
|
41
41
|
const logger = getLogger();
|
|
42
|
-
const { siteId: rawSiteId, keepArchive = false, waitOptions } = options;
|
|
42
|
+
const { siteId: rawSiteId, keepArchive = false, shouldCreatePr = false, waitOptions } = options;
|
|
43
43
|
const siteId = normalizeSiteId(rawSiteId);
|
|
44
44
|
if (!fs.existsSync(target)) {
|
|
45
45
|
throw new Error(`Target not found: ${target}`);
|
|
@@ -81,6 +81,7 @@ export async function commerceAppInstall(instance, target, options) {
|
|
|
81
81
|
app_domain: manifest.domain,
|
|
82
82
|
site_id: siteId,
|
|
83
83
|
app_path: appPath,
|
|
84
|
+
should_create_pr: shouldCreatePr,
|
|
84
85
|
},
|
|
85
86
|
});
|
|
86
87
|
if (error?.fault?.type === 'UnknownPropertyException' &&
|
|
@@ -96,6 +97,7 @@ export async function commerceAppInstall(instance, target, options) {
|
|
|
96
97
|
{ name: 'AppDomain', value: manifest.domain },
|
|
97
98
|
{ name: 'SiteId', value: siteId },
|
|
98
99
|
{ name: 'AppPath', value: appPath },
|
|
100
|
+
{ name: 'ShouldCreatePR', value: String(shouldCreatePr) },
|
|
99
101
|
],
|
|
100
102
|
},
|
|
101
103
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../../src/operations/cap/install.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,WAAW,EAAC,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAC,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAC,UAAU,EAAE,iBAAiB,EAAE,SAAS,EAA4C,MAAM,gBAAgB,CAAC;AACnH,OAAO,EAAC,iBAAiB,EAAC,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAA0B,MAAM,eAAe,CAAC;AAEvD,MAAM,cAAc,GAAG,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../../src/operations/cap/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context tag keys, mirroring `client.context.keys` from the SDK so callers can
|
|
3
|
+
* keep using the familiar `tags[keys.userId]` idiom.
|
|
4
|
+
*/
|
|
5
|
+
export declare const contextTagKeys: {
|
|
6
|
+
readonly userId: "ai.user.id";
|
|
7
|
+
readonly cloudRoleInstance: "ai.cloud.roleInstance";
|
|
8
|
+
};
|
|
9
|
+
/** Arguments for {@link AppInsightsClient.trackEvent}. */
|
|
10
|
+
export interface TrackEventArgs {
|
|
11
|
+
name: string;
|
|
12
|
+
properties?: Record<string, string>;
|
|
13
|
+
measurements?: Record<string, number>;
|
|
14
|
+
}
|
|
15
|
+
/** Arguments for {@link AppInsightsClient.trackException}. */
|
|
16
|
+
export interface TrackExceptionArgs {
|
|
17
|
+
exception: Error;
|
|
18
|
+
properties?: Record<string, string>;
|
|
19
|
+
measurements?: Record<string, number>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Parse an Application Insights connection string into the instrumentation key
|
|
23
|
+
* and resolved ingestion `/v2.1/track` URL.
|
|
24
|
+
*
|
|
25
|
+
* The connection string is semicolon-delimited `key=value` pairs with
|
|
26
|
+
* case-insensitive keys, e.g.
|
|
27
|
+
* `InstrumentationKey=<guid>;IngestionEndpoint=https://<region>.in.applicationinsights.azure.com/`.
|
|
28
|
+
*
|
|
29
|
+
* Plain GUIDs (legacy instrumentation keys with no `=`) are also accepted.
|
|
30
|
+
*
|
|
31
|
+
* @returns the iKey and track URL, or `null` if no instrumentation key is present.
|
|
32
|
+
*/
|
|
33
|
+
export declare function parseConnectionString(connectionString: string): {
|
|
34
|
+
iKey: string;
|
|
35
|
+
trackUrl: string;
|
|
36
|
+
} | null;
|
|
37
|
+
/**
|
|
38
|
+
* A minimal, dependency-free Application Insights client.
|
|
39
|
+
*
|
|
40
|
+
* Construct with an instrumentation key or connection string, optionally set
|
|
41
|
+
* {@link AppInsightsClient.context} tags, then buffer telemetry via
|
|
42
|
+
* {@link AppInsightsClient.trackEvent}/{@link AppInsightsClient.trackException}
|
|
43
|
+
* and deliver it with {@link AppInsightsClient.flush}.
|
|
44
|
+
*
|
|
45
|
+
* If the connection string has no instrumentation key, the client becomes an
|
|
46
|
+
* inert no-op (every method silently does nothing) — it never throws into
|
|
47
|
+
* calling code.
|
|
48
|
+
*/
|
|
49
|
+
export declare class AppInsightsClient {
|
|
50
|
+
/**
|
|
51
|
+
* SDK-compatible config bag. Retained so callers can read
|
|
52
|
+
* `config.connectionString`; the SDK's auto-collection toggles are obsolete
|
|
53
|
+
* here (this client only does manual tracking) and are intentionally absent.
|
|
54
|
+
*/
|
|
55
|
+
readonly config: {
|
|
56
|
+
connectionString: string;
|
|
57
|
+
};
|
|
58
|
+
/** SDK-compatible context: per-envelope tags plus the canonical key names. */
|
|
59
|
+
readonly context: {
|
|
60
|
+
tags: Record<string, string>;
|
|
61
|
+
keys: typeof contextTagKeys;
|
|
62
|
+
};
|
|
63
|
+
private readonly iKey;
|
|
64
|
+
private readonly trackUrl;
|
|
65
|
+
private readonly timeoutMs;
|
|
66
|
+
private buffer;
|
|
67
|
+
constructor(connectionString: string, options?: {
|
|
68
|
+
timeoutMs?: number;
|
|
69
|
+
});
|
|
70
|
+
/** Buffer an event envelope. Delivered on the next {@link flush}. */
|
|
71
|
+
trackEvent(args: TrackEventArgs): void;
|
|
72
|
+
/** Buffer an exception envelope. Delivered on the next {@link flush}. */
|
|
73
|
+
trackException(args: TrackExceptionArgs): void;
|
|
74
|
+
/**
|
|
75
|
+
* POST all buffered envelopes to the ingestion endpoint in one request and
|
|
76
|
+
* clear the buffer. Best-effort: any network/HTTP error is swallowed (the
|
|
77
|
+
* buffer is still cleared) so telemetry never affects the caller.
|
|
78
|
+
*/
|
|
79
|
+
flush(): Promise<void>;
|
|
80
|
+
/** Build a Breeze envelope, stamping the current context tags and time. */
|
|
81
|
+
private envelope;
|
|
82
|
+
}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2025, Salesforce, Inc.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2
|
|
4
|
+
* For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Zero-dependency Application Insights ingestion client.
|
|
8
|
+
*
|
|
9
|
+
* This is a deliberately tiny replacement for the `applicationinsights` npm
|
|
10
|
+
* package. We only ever did manual event/exception tracking (every
|
|
11
|
+
* auto-collection feature was disabled), so the full SDK — which in v3.x pulls
|
|
12
|
+
* in ~98 transitive packages (OpenTelemetry, the Azure SDK, gRPC/protobuf, DB
|
|
13
|
+
* instrumentations) — was vastly more than we needed.
|
|
14
|
+
*
|
|
15
|
+
* Instead we POST classic "Breeze" telemetry envelopes directly to the
|
|
16
|
+
* ingestion endpoint using Node's built-in global `fetch` (Node >= 22). The
|
|
17
|
+
* wire format and `/v2.1/track` endpoint were verified by capturing what the
|
|
18
|
+
* real v3 SDK emits and by a live round-trip against the ingestion endpoint
|
|
19
|
+
* (which returned `itemsAccepted` for these exact envelopes).
|
|
20
|
+
*
|
|
21
|
+
* Only the surface the {@link Telemetry} wrapper uses is implemented:
|
|
22
|
+
* {@link AppInsightsClient.trackEvent}, {@link AppInsightsClient.trackException},
|
|
23
|
+
* and {@link AppInsightsClient.flush}. The shape mirrors the SDK's
|
|
24
|
+
* `TelemetryClient` (`config`, `context.tags`/`context.keys`) so the wrapper
|
|
25
|
+
* stays a thin adapter.
|
|
26
|
+
*
|
|
27
|
+
* @module telemetry/app-insights-client
|
|
28
|
+
* @internal
|
|
29
|
+
*/
|
|
30
|
+
/** Path appended to the ingestion endpoint. The v3 SDK uses v2.1. */
|
|
31
|
+
const TRACK_PATH = '/v2.1/track';
|
|
32
|
+
/** Default ingestion endpoint when the connection string omits one. */
|
|
33
|
+
const DEFAULT_INGESTION_ENDPOINT = 'https://dc.services.visualstudio.com';
|
|
34
|
+
/** Envelope-level schema version (Breeze `ver`). */
|
|
35
|
+
const ENVELOPE_VERSION = 1;
|
|
36
|
+
/** baseData schema version (Breeze EventData/ExceptionData `ver`). */
|
|
37
|
+
const BASE_DATA_VERSION = 2;
|
|
38
|
+
/** We never sample client-side. */
|
|
39
|
+
const SAMPLE_RATE = 100;
|
|
40
|
+
/** Default request timeout so a hung endpoint never blocks CLI exit. */
|
|
41
|
+
const DEFAULT_TIMEOUT_MS = 5000;
|
|
42
|
+
/** Breeze property/measurement limits (server truncates beyond these). */
|
|
43
|
+
const MAX_KEY_LENGTH = 150;
|
|
44
|
+
const MAX_VALUE_LENGTH = 8192;
|
|
45
|
+
/**
|
|
46
|
+
* Context tag keys, mirroring `client.context.keys` from the SDK so callers can
|
|
47
|
+
* keep using the familiar `tags[keys.userId]` idiom.
|
|
48
|
+
*/
|
|
49
|
+
export const contextTagKeys = {
|
|
50
|
+
userId: 'ai.user.id',
|
|
51
|
+
cloudRoleInstance: 'ai.cloud.roleInstance',
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Parse an Application Insights connection string into the instrumentation key
|
|
55
|
+
* and resolved ingestion `/v2.1/track` URL.
|
|
56
|
+
*
|
|
57
|
+
* The connection string is semicolon-delimited `key=value` pairs with
|
|
58
|
+
* case-insensitive keys, e.g.
|
|
59
|
+
* `InstrumentationKey=<guid>;IngestionEndpoint=https://<region>.in.applicationinsights.azure.com/`.
|
|
60
|
+
*
|
|
61
|
+
* Plain GUIDs (legacy instrumentation keys with no `=`) are also accepted.
|
|
62
|
+
*
|
|
63
|
+
* @returns the iKey and track URL, or `null` if no instrumentation key is present.
|
|
64
|
+
*/
|
|
65
|
+
export function parseConnectionString(connectionString) {
|
|
66
|
+
const fields = {};
|
|
67
|
+
let bareKey;
|
|
68
|
+
for (const part of connectionString.split(';')) {
|
|
69
|
+
const trimmed = part.trim();
|
|
70
|
+
if (!trimmed)
|
|
71
|
+
continue;
|
|
72
|
+
const eq = trimmed.indexOf('=');
|
|
73
|
+
if (eq < 0) {
|
|
74
|
+
// A bare token with no '=' — treat as a legacy instrumentation key.
|
|
75
|
+
bareKey = trimmed;
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
fields[trimmed.slice(0, eq).trim().toLowerCase()] = trimmed.slice(eq + 1).trim();
|
|
79
|
+
}
|
|
80
|
+
const iKey = fields.instrumentationkey ?? bareKey;
|
|
81
|
+
if (!iKey)
|
|
82
|
+
return null;
|
|
83
|
+
let endpoint;
|
|
84
|
+
if (fields.ingestionendpoint) {
|
|
85
|
+
endpoint = fields.ingestionendpoint;
|
|
86
|
+
}
|
|
87
|
+
else if (fields.endpointsuffix) {
|
|
88
|
+
const locationPrefix = fields.location ? `${fields.location}.` : '';
|
|
89
|
+
endpoint = `https://${locationPrefix}dc.${fields.endpointsuffix}`;
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
endpoint = DEFAULT_INGESTION_ENDPOINT;
|
|
93
|
+
}
|
|
94
|
+
// Sanitize: upgrade http -> https and strip any trailing slash, matching the SDK.
|
|
95
|
+
endpoint = endpoint.replace(/^http:\/\//i, 'https://').replace(/\/+$/, '');
|
|
96
|
+
return { iKey, trackUrl: endpoint + TRACK_PATH };
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Truncate a string to a maximum length (Breeze enforces server-side; we mirror
|
|
100
|
+
* it to keep payloads tidy).
|
|
101
|
+
*/
|
|
102
|
+
function truncate(value, max) {
|
|
103
|
+
return value.length > max ? value.slice(0, max) : value;
|
|
104
|
+
}
|
|
105
|
+
/** Clamp a Record's keys/values to Breeze limits. */
|
|
106
|
+
function clampProperties(properties) {
|
|
107
|
+
const out = {};
|
|
108
|
+
for (const [key, value] of Object.entries(properties)) {
|
|
109
|
+
out[truncate(key, MAX_KEY_LENGTH)] = truncate(value, MAX_VALUE_LENGTH);
|
|
110
|
+
}
|
|
111
|
+
return out;
|
|
112
|
+
}
|
|
113
|
+
function clampMeasurementKeys(measurements) {
|
|
114
|
+
const out = {};
|
|
115
|
+
for (const [key, value] of Object.entries(measurements)) {
|
|
116
|
+
out[truncate(key, MAX_KEY_LENGTH)] = value;
|
|
117
|
+
}
|
|
118
|
+
return out;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* A minimal, dependency-free Application Insights client.
|
|
122
|
+
*
|
|
123
|
+
* Construct with an instrumentation key or connection string, optionally set
|
|
124
|
+
* {@link AppInsightsClient.context} tags, then buffer telemetry via
|
|
125
|
+
* {@link AppInsightsClient.trackEvent}/{@link AppInsightsClient.trackException}
|
|
126
|
+
* and deliver it with {@link AppInsightsClient.flush}.
|
|
127
|
+
*
|
|
128
|
+
* If the connection string has no instrumentation key, the client becomes an
|
|
129
|
+
* inert no-op (every method silently does nothing) — it never throws into
|
|
130
|
+
* calling code.
|
|
131
|
+
*/
|
|
132
|
+
export class AppInsightsClient {
|
|
133
|
+
/**
|
|
134
|
+
* SDK-compatible config bag. Retained so callers can read
|
|
135
|
+
* `config.connectionString`; the SDK's auto-collection toggles are obsolete
|
|
136
|
+
* here (this client only does manual tracking) and are intentionally absent.
|
|
137
|
+
*/
|
|
138
|
+
config;
|
|
139
|
+
/** SDK-compatible context: per-envelope tags plus the canonical key names. */
|
|
140
|
+
context;
|
|
141
|
+
iKey;
|
|
142
|
+
trackUrl;
|
|
143
|
+
timeoutMs;
|
|
144
|
+
buffer = [];
|
|
145
|
+
constructor(connectionString, options = {}) {
|
|
146
|
+
this.config = { connectionString };
|
|
147
|
+
this.context = { tags: {}, keys: contextTagKeys };
|
|
148
|
+
this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
149
|
+
const parsed = parseConnectionString(connectionString);
|
|
150
|
+
if (parsed) {
|
|
151
|
+
this.iKey = parsed.iKey;
|
|
152
|
+
this.trackUrl = parsed.trackUrl;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/** Buffer an event envelope. Delivered on the next {@link flush}. */
|
|
156
|
+
trackEvent(args) {
|
|
157
|
+
if (!this.iKey)
|
|
158
|
+
return;
|
|
159
|
+
this.buffer.push(this.envelope('EventData', {
|
|
160
|
+
ver: BASE_DATA_VERSION,
|
|
161
|
+
name: args.name,
|
|
162
|
+
properties: clampProperties(args.properties ?? {}),
|
|
163
|
+
measurements: clampMeasurementKeys(args.measurements ?? {}),
|
|
164
|
+
}));
|
|
165
|
+
}
|
|
166
|
+
/** Buffer an exception envelope. Delivered on the next {@link flush}. */
|
|
167
|
+
trackException(args) {
|
|
168
|
+
if (!this.iKey)
|
|
169
|
+
return;
|
|
170
|
+
const { exception } = args;
|
|
171
|
+
const stack = exception.stack;
|
|
172
|
+
const details = {
|
|
173
|
+
typeName: truncate(exception.name || 'Error', 1024),
|
|
174
|
+
message: truncate(exception.message || '', 32768),
|
|
175
|
+
hasFullStack: Boolean(stack),
|
|
176
|
+
};
|
|
177
|
+
if (stack)
|
|
178
|
+
details.stack = truncate(stack, 32768);
|
|
179
|
+
this.buffer.push(this.envelope('ExceptionData', {
|
|
180
|
+
ver: BASE_DATA_VERSION,
|
|
181
|
+
exceptions: [details],
|
|
182
|
+
severityLevel: 'Error',
|
|
183
|
+
properties: clampProperties(args.properties ?? {}),
|
|
184
|
+
measurements: clampMeasurementKeys(args.measurements ?? {}),
|
|
185
|
+
}));
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* POST all buffered envelopes to the ingestion endpoint in one request and
|
|
189
|
+
* clear the buffer. Best-effort: any network/HTTP error is swallowed (the
|
|
190
|
+
* buffer is still cleared) so telemetry never affects the caller.
|
|
191
|
+
*/
|
|
192
|
+
async flush() {
|
|
193
|
+
if (!this.trackUrl || this.buffer.length === 0) {
|
|
194
|
+
this.buffer = [];
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
const body = JSON.stringify(this.buffer);
|
|
198
|
+
this.buffer = [];
|
|
199
|
+
const controller = new AbortController();
|
|
200
|
+
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
201
|
+
try {
|
|
202
|
+
await fetch(this.trackUrl, {
|
|
203
|
+
method: 'POST',
|
|
204
|
+
headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
|
|
205
|
+
body,
|
|
206
|
+
signal: controller.signal,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
// best-effort: ignore network errors, timeouts, and abort
|
|
211
|
+
}
|
|
212
|
+
finally {
|
|
213
|
+
clearTimeout(timer);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/** Build a Breeze envelope, stamping the current context tags and time. */
|
|
217
|
+
envelope(baseType, baseData) {
|
|
218
|
+
return {
|
|
219
|
+
ver: ENVELOPE_VERSION,
|
|
220
|
+
name: baseType === 'EventData' ? 'Microsoft.ApplicationInsights.Event' : 'Microsoft.ApplicationInsights.Exception',
|
|
221
|
+
time: new Date().toISOString(),
|
|
222
|
+
sampleRate: SAMPLE_RATE,
|
|
223
|
+
iKey: this.iKey,
|
|
224
|
+
tags: { ...this.context.tags },
|
|
225
|
+
data: { baseType, baseData },
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=app-insights-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-insights-client.js","sourceRoot":"","sources":["../../../src/telemetry/app-insights-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,6 +26,8 @@ export declare class Telemetry {
|
|
|
26
26
|
private version;
|
|
27
27
|
private appInsightsKey;
|
|
28
28
|
private traceLog;
|
|
29
|
+
private flushIntervalMs;
|
|
30
|
+
private flushTimer;
|
|
29
31
|
/**
|
|
30
32
|
* Check if telemetry is disabled via environment variables.
|
|
31
33
|
* Supports both SF_DISABLE_TELEMETRY (sf CLI standard) and SFCC_DISABLE_TELEMETRY.
|
|
@@ -6,12 +6,7 @@
|
|
|
6
6
|
import { randomBytes } from 'node:crypto';
|
|
7
7
|
import fs from 'node:fs';
|
|
8
8
|
import path from 'node:path';
|
|
9
|
-
|
|
10
|
-
// module whose default-export interop is not synthesized when the file is
|
|
11
|
-
// loaded as native ESM (e.g. mocha 11's tsx loader), leaving the default
|
|
12
|
-
// binding `undefined`. The namespace form resolves `TelemetryClient` correctly
|
|
13
|
-
// under every loader — mocha, tsx, and the production ESM build.
|
|
14
|
-
import * as appInsights from 'applicationinsights';
|
|
9
|
+
import { AppInsightsClient } from './app-insights-client.js';
|
|
15
10
|
import { getLogger } from '../logging/index.js';
|
|
16
11
|
const generateRandomId = () => randomBytes(20).toString('hex');
|
|
17
12
|
/**
|
|
@@ -120,6 +115,8 @@ export class Telemetry {
|
|
|
120
115
|
version;
|
|
121
116
|
appInsightsKey;
|
|
122
117
|
traceLog;
|
|
118
|
+
flushIntervalMs;
|
|
119
|
+
flushTimer;
|
|
123
120
|
/**
|
|
124
121
|
* Check if telemetry is disabled via environment variables.
|
|
125
122
|
* Supports both SF_DISABLE_TELEMETRY (sf CLI standard) and SFCC_DISABLE_TELEMETRY.
|
|
@@ -146,6 +143,7 @@ export class Telemetry {
|
|
|
146
143
|
this.sessionId = generateRandomId();
|
|
147
144
|
this.started = false;
|
|
148
145
|
this.version = options.version ?? '0.0.0';
|
|
146
|
+
this.flushIntervalMs = options.flushIntervalMs;
|
|
149
147
|
if (process.env.SFCC_TELEMETRY_LOG === 'true') {
|
|
150
148
|
this.traceLog = getLogger().child({ component: 'telemetry' });
|
|
151
149
|
}
|
|
@@ -225,6 +223,14 @@ export class Telemetry {
|
|
|
225
223
|
catch {
|
|
226
224
|
// best-effort — telemetry failure never impacts the application
|
|
227
225
|
}
|
|
226
|
+
// Long-lived hosts (e.g. the VS Code extension) buffer events for a whole
|
|
227
|
+
// session and may not get a clean shutdown flush. An opt-in periodic flush
|
|
228
|
+
// delivers events on a cadence so a dirty exit loses at most one interval.
|
|
229
|
+
// The timer is unref'd so it never keeps a short-lived process alive.
|
|
230
|
+
if (this.client && this.flushIntervalMs && this.flushIntervalMs > 0) {
|
|
231
|
+
this.flushTimer = setInterval(() => void this.flush(), this.flushIntervalMs);
|
|
232
|
+
this.flushTimer.unref?.();
|
|
233
|
+
}
|
|
228
234
|
}
|
|
229
235
|
/**
|
|
230
236
|
* Flush pending telemetry events without stopping the client.
|
|
@@ -233,9 +239,7 @@ export class Telemetry {
|
|
|
233
239
|
async flush() {
|
|
234
240
|
if (!this.started || !this.client)
|
|
235
241
|
return;
|
|
236
|
-
await
|
|
237
|
-
this.client.flush({ callback: () => resolve() });
|
|
238
|
-
});
|
|
242
|
+
await this.client.flush();
|
|
239
243
|
}
|
|
240
244
|
/**
|
|
241
245
|
* Stop the telemetry client and flush any pending events.
|
|
@@ -246,17 +250,16 @@ export class Telemetry {
|
|
|
246
250
|
return;
|
|
247
251
|
this.traceLog?.debug('telemetry stop');
|
|
248
252
|
this.started = false;
|
|
253
|
+
if (this.flushTimer) {
|
|
254
|
+
clearInterval(this.flushTimer);
|
|
255
|
+
this.flushTimer = undefined;
|
|
256
|
+
}
|
|
249
257
|
if (this.client) {
|
|
250
|
-
await
|
|
251
|
-
this.client.flush({ callback: () => resolve() });
|
|
252
|
-
});
|
|
258
|
+
await this.client.flush();
|
|
253
259
|
this.client = undefined;
|
|
254
260
|
}
|
|
255
|
-
//
|
|
256
|
-
//
|
|
257
|
-
// a delay to ensure events reach the server on fast exits.
|
|
258
|
-
// 300ms gives enough time for the HTTP request to complete even on
|
|
259
|
-
// cold starts when establishing the initial connection.
|
|
261
|
+
// flush() awaits the ingestion POST directly, but keep a small drain delay
|
|
262
|
+
// so any in-flight request started elsewhere can settle before a fast exit.
|
|
260
263
|
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
261
264
|
}
|
|
262
265
|
buildEventProperties(attributes = {}) {
|
|
@@ -277,25 +280,13 @@ export class Telemetry {
|
|
|
277
280
|
};
|
|
278
281
|
}
|
|
279
282
|
createClient() {
|
|
280
|
-
|
|
281
|
-
//
|
|
282
|
-
|
|
283
|
-
client
|
|
284
|
-
|
|
285
|
-
client.config.enableAutoCollectRequests = false;
|
|
286
|
-
client.config.enableAutoCollectDependencies = false;
|
|
287
|
-
client.config.enableAutoDependencyCorrelation = false;
|
|
288
|
-
client.config.enableAutoCollectHeartbeat = false;
|
|
289
|
-
client.config.enableAutoCollectPreAggregatedMetrics = false;
|
|
290
|
-
client.config.enableAutoCollectIncomingRequestAzureFunctions = false;
|
|
291
|
-
client.config.enableSendLiveMetrics = false;
|
|
292
|
-
client.config.enableUseDiskRetryCaching = false;
|
|
293
|
-
client.config.disableStatsbeat = true;
|
|
294
|
-
client.config.enableInternalDebugLogging = false;
|
|
295
|
-
client.config.enableInternalWarningLogging = false;
|
|
296
|
-
// Set user ID for session tracking
|
|
283
|
+
// Manual event tracking only — no auto-collection, no statsbeat, no
|
|
284
|
+
// background telemetry. This zero-dependency client POSTs Breeze envelopes
|
|
285
|
+
// directly, so there is nothing to opt out of.
|
|
286
|
+
const client = new AppInsightsClient(this.appInsightsKey);
|
|
287
|
+
// Set user ID for session tracking.
|
|
297
288
|
client.context.tags[client.context.keys.userId] = this.cliId;
|
|
298
|
-
// GDPR: hide machine-identifying cloud role instance
|
|
289
|
+
// GDPR: hide machine-identifying cloud role instance.
|
|
299
290
|
client.context.tags[client.context.keys.cloudRoleInstance] = '';
|
|
300
291
|
this.client = client;
|
|
301
292
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../../src/telemetry/telemetry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../../src/telemetry/telemetry.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,4 +59,16 @@ export interface TelemetryOptions {
|
|
|
59
59
|
* If not provided or non-writable, falls back to random ID.
|
|
60
60
|
*/
|
|
61
61
|
dataDir?: string;
|
|
62
|
+
/**
|
|
63
|
+
* Optional periodic auto-flush interval in milliseconds. When set (> 0),
|
|
64
|
+
* buffered events are delivered on this cadence in addition to explicit
|
|
65
|
+
* {@link Telemetry.flush}/{@link Telemetry.stop} calls.
|
|
66
|
+
*
|
|
67
|
+
* Intended for long-lived hosts (e.g. the VS Code extension) that buffer
|
|
68
|
+
* events for a whole session and cannot guarantee a clean shutdown flush.
|
|
69
|
+
* Short-lived processes (CLI, MCP) should leave this unset and flush
|
|
70
|
+
* deterministically. The interval timer is `unref`'d, so it never keeps a
|
|
71
|
+
* process alive on its own.
|
|
72
|
+
*/
|
|
73
|
+
flushIntervalMs?: number;
|
|
62
74
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforce/b2c-tooling-sdk",
|
|
3
3
|
"description": "Core tooling library for Salesforce B2C Commerce CLI",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.15.0",
|
|
5
5
|
"author": "Charles Lavery",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"repository": "SalesforceCommerceCloud/b2c-developer-tooling",
|
|
@@ -215,24 +215,23 @@
|
|
|
215
215
|
},
|
|
216
216
|
"dependencies": {
|
|
217
217
|
"@vscode/debugadapter": "1.68.0",
|
|
218
|
-
"applicationinsights": "2.9.8",
|
|
219
218
|
"chokidar": "5.0.0",
|
|
220
219
|
"cliui": "9.0.1",
|
|
221
220
|
"ejs": "3.1.10",
|
|
222
221
|
"fuse.js": "7.1.0",
|
|
223
222
|
"glob": "13.0.0",
|
|
224
223
|
"i18next": "25.7.4",
|
|
225
|
-
"js-yaml": "4.
|
|
224
|
+
"js-yaml": "4.2.0",
|
|
226
225
|
"jsonschema": "1.5.0",
|
|
227
226
|
"jszip": "3.10.1",
|
|
228
|
-
"minimatch": "10.
|
|
227
|
+
"minimatch": "10.2.4",
|
|
229
228
|
"open": "11.0.0",
|
|
230
229
|
"openapi-fetch": "0.15.0",
|
|
231
230
|
"pino": "10.1.0",
|
|
232
231
|
"pino-pretty": "13.1.2",
|
|
233
|
-
"protobufjs": "7.
|
|
232
|
+
"protobufjs": "7.6.4",
|
|
234
233
|
"tar-fs": "3.1.2",
|
|
235
|
-
"undici": "7.
|
|
234
|
+
"undici": "7.28.0",
|
|
236
235
|
"xml2js": "0.6.2"
|
|
237
236
|
},
|
|
238
237
|
"scripts": {
|