@microsoft/managed-apps-cli 0.17.0 → 0.19.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 (109) hide show
  1. package/dist/ArgumentProvider.d.ts +25 -1
  2. package/dist/ArgumentProvider.d.ts.map +1 -1
  3. package/dist/ArgumentProvider.js +80 -23
  4. package/dist/ArgumentProvider.js.map +1 -1
  5. package/dist/Authentication/ActiveAccountStore.d.ts +1 -1
  6. package/dist/Authentication/ActiveAccountStore.d.ts.map +1 -1
  7. package/dist/Authentication/ActiveAccountStore.js +3 -3
  8. package/dist/Authentication/ActiveAccountStore.js.map +1 -1
  9. package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts +16 -1
  10. package/dist/Authentication/NodeMsalAuthenticationProvider.d.ts.map +1 -1
  11. package/dist/Authentication/NodeMsalAuthenticationProvider.js +72 -11
  12. package/dist/Authentication/NodeMsalAuthenticationProvider.js.map +1 -1
  13. package/dist/Cli.d.ts.map +1 -1
  14. package/dist/Cli.js +24 -10
  15. package/dist/Cli.js.map +1 -1
  16. package/dist/CliSettings.d.ts +2 -0
  17. package/dist/CliSettings.d.ts.map +1 -1
  18. package/dist/CliSettings.js +32 -8
  19. package/dist/CliSettings.js.map +1 -1
  20. package/dist/CliUtils.d.ts +4 -7
  21. package/dist/CliUtils.d.ts.map +1 -1
  22. package/dist/CliUtils.js +2 -12
  23. package/dist/CliUtils.js.map +1 -1
  24. package/dist/Constants/HelpStrings.d.ts +1 -0
  25. package/dist/Constants/HelpStrings.d.ts.map +1 -1
  26. package/dist/Constants/HelpStrings.js +8 -5
  27. package/dist/Constants/HelpStrings.js.map +1 -1
  28. package/dist/Constants.d.ts +4 -0
  29. package/dist/Constants.d.ts.map +1 -1
  30. package/dist/Constants.js +11 -1
  31. package/dist/Constants.js.map +1 -1
  32. package/dist/Errors/GitHubErrorMap.d.ts.map +1 -1
  33. package/dist/Errors/GitHubErrorMap.js +2 -0
  34. package/dist/Errors/GitHubErrorMap.js.map +1 -1
  35. package/dist/HttpClient/CliHttpClient.d.ts +2 -15
  36. package/dist/HttpClient/CliHttpClient.d.ts.map +1 -1
  37. package/dist/HttpClient/CliHttpClient.js +5 -91
  38. package/dist/HttpClient/CliHttpClient.js.map +1 -1
  39. package/dist/HttpClient/HttpForward.d.ts +9 -0
  40. package/dist/HttpClient/HttpForward.d.ts.map +1 -0
  41. package/dist/HttpClient/HttpForward.js +56 -0
  42. package/dist/HttpClient/HttpForward.js.map +1 -0
  43. package/dist/Logger/BufferedTelemetryWriter.d.ts +20 -0
  44. package/dist/Logger/BufferedTelemetryWriter.d.ts.map +1 -0
  45. package/dist/Logger/BufferedTelemetryWriter.js +163 -0
  46. package/dist/Logger/BufferedTelemetryWriter.js.map +1 -0
  47. package/dist/Logger/CliLogger.d.ts +29 -50
  48. package/dist/Logger/CliLogger.d.ts.map +1 -1
  49. package/dist/Logger/CliLogger.js +152 -116
  50. package/dist/Logger/CliLogger.js.map +1 -1
  51. package/dist/Logger/OneDSWriter.d.ts +15 -11
  52. package/dist/Logger/OneDSWriter.d.ts.map +1 -1
  53. package/dist/Logger/OneDSWriter.js +96 -23
  54. package/dist/Logger/OneDSWriter.js.map +1 -1
  55. package/dist/Types/Cli.types.d.ts +3 -2
  56. package/dist/Types/Cli.types.d.ts.map +1 -1
  57. package/dist/Types/Datasource.types.d.ts +1 -14
  58. package/dist/Types/Datasource.types.d.ts.map +1 -1
  59. package/dist/Types/LoggerTypes.types.d.ts +7 -7
  60. package/dist/Types/LoggerTypes.types.d.ts.map +1 -1
  61. package/dist/Utils/EnvironmentRoutingUtils.d.ts +1 -1
  62. package/dist/Utils/EnvironmentRoutingUtils.js +5 -5
  63. package/dist/Utils/EnvironmentRoutingUtils.js.map +1 -1
  64. package/dist/Utils/FindAvailablePort.d.ts +39 -0
  65. package/dist/Utils/FindAvailablePort.d.ts.map +1 -0
  66. package/dist/Utils/FindAvailablePort.js +105 -0
  67. package/dist/Utils/FindAvailablePort.js.map +1 -0
  68. package/dist/Verbs/AddConnectorFlows.d.ts +4 -4
  69. package/dist/Verbs/AddConnectorFlows.d.ts.map +1 -1
  70. package/dist/Verbs/AddConnectorFlows.js +10 -7
  71. package/dist/Verbs/AddConnectorFlows.js.map +1 -1
  72. package/dist/Verbs/AddFlow.d.ts.map +1 -1
  73. package/dist/Verbs/AddFlow.js +1 -7
  74. package/dist/Verbs/AddFlow.js.map +1 -1
  75. package/dist/Verbs/CreateMaafApp.d.ts.map +1 -1
  76. package/dist/Verbs/CreateMaafApp.js +5 -6
  77. package/dist/Verbs/CreateMaafApp.js.map +1 -1
  78. package/dist/Verbs/DeleteMaafApp.d.ts.map +1 -1
  79. package/dist/Verbs/DeleteMaafApp.js +6 -10
  80. package/dist/Verbs/DeleteMaafApp.js.map +1 -1
  81. package/dist/Verbs/Dev.d.ts.map +1 -1
  82. package/dist/Verbs/Dev.js +44 -13
  83. package/dist/Verbs/Dev.js.map +1 -1
  84. package/dist/Verbs/GetMaafApp.js +2 -3
  85. package/dist/Verbs/GetMaafApp.js.map +1 -1
  86. package/dist/Verbs/Init.d.ts.map +1 -1
  87. package/dist/Verbs/Init.js +2 -2
  88. package/dist/Verbs/Init.js.map +1 -1
  89. package/dist/Verbs/ListMaafApps.d.ts +22 -10
  90. package/dist/Verbs/ListMaafApps.d.ts.map +1 -1
  91. package/dist/Verbs/ListMaafApps.js +77 -31
  92. package/dist/Verbs/ListMaafApps.js.map +1 -1
  93. package/dist/Verbs/Login.d.ts.map +1 -1
  94. package/dist/Verbs/Login.js +9 -1
  95. package/dist/Verbs/Login.js.map +1 -1
  96. package/dist/Verbs/MaafAppPermissions.d.ts +1 -1
  97. package/dist/Verbs/MaafAppPermissions.js +15 -14
  98. package/dist/Verbs/MaafAppPermissions.js.map +1 -1
  99. package/dist/Verbs/RefreshGitAuth.d.ts.map +1 -1
  100. package/dist/Verbs/RefreshGitAuth.js +2 -3
  101. package/dist/Verbs/RefreshGitAuth.js.map +1 -1
  102. package/dist/Verbs/RemoveFlow.d.ts.map +1 -1
  103. package/dist/Verbs/RemoveFlow.js +1 -7
  104. package/dist/Verbs/RemoveFlow.js.map +1 -1
  105. package/dist/Verbs/VerbConstants.d.ts +5 -1
  106. package/dist/Verbs/VerbConstants.d.ts.map +1 -1
  107. package/dist/Verbs/VerbConstants.js +10 -1
  108. package/dist/Verbs/VerbConstants.js.map +1 -1
  109. package/package.json +4 -4
@@ -1,15 +1,41 @@
1
1
  /*!
2
2
  * Copyright (C) Microsoft Corporation. All rights reserved.
3
3
  */
4
+ import { randomUUID } from 'node:crypto';
4
5
  import { getEnvironmentByName } from '@microsoft/managed-apps-actions';
5
- import { cloudToRegionSafe } from '@microsoft/managed-apps-common/services';
6
- import { randomUUID } from 'crypto';
6
+ import { regionToClusterCategory } from '@microsoft/managed-apps-common/services';
7
7
  import packageJson from '../../package.json' with { type: 'json' };
8
8
  import { getCliEnvVarBool } from '../Utils/EnvVars.js';
9
+ import { BufferedTelemetryWriter } from './BufferedTelemetryWriter.js';
9
10
  import { ConsoleWriter } from './ConsoleWriter.js';
10
11
  import { EUGeoRegions } from './Constants.js';
11
12
  import { resolveUserTelemetrySettings } from './LoggerSettings.js';
12
13
  import { OneDSWriter } from './OneDSWriter.js';
14
+ const environmentlessIdentifierDimensions = new Set(['environmentid', 'tenantid', 'objectid']);
15
+ function isEnvironmentlessIdentifierDimension(key) {
16
+ return environmentlessIdentifierDimensions.has(key.toLowerCase());
17
+ }
18
+ function removeEnvironmentlessIdentifierDimensions(eventData) {
19
+ if (!eventData) {
20
+ return eventData;
21
+ }
22
+ return Object.fromEntries(Object.entries(eventData).filter(([key]) => !isEnvironmentlessIdentifierDimension(key)));
23
+ }
24
+ /**
25
+ * Returns true if the environment's cluster category is compatible with the region's cluster
26
+ * category. First Release environments are part of the public production cloud.
27
+ * If the environment has no cluster category, it is considered a match for all regions.
28
+ *
29
+ * This is required to handle the edge case when a command is run against a non-prod environment
30
+ * without providing the --cloud param.
31
+ */
32
+ function doesEnvironmentMatchRegion(metadata, region) {
33
+ const environmentClusterCategory = metadata?.properties.cluster?.category?.toLowerCase();
34
+ const regionClusterCategory = regionToClusterCategory(region);
35
+ return (!environmentClusterCategory ||
36
+ environmentClusterCategory === regionClusterCategory ||
37
+ (regionClusterCategory === 'prod' && environmentClusterCategory === 'firstrelease'));
38
+ }
13
39
  function stringifyErrorWithStack(error) {
14
40
  if (!error)
15
41
  return undefined;
@@ -99,162 +125,161 @@ function createScenarioLogger(telemetryWriters, name, data) {
99
125
  /**
100
126
  * Logger implementation for the CLI.
101
127
  *
102
- * Telemetry is **unauthenticated by default**: the OneDS writer is constructed at
103
- * `create()` time with `telemetryLocation: 'global'` and no `geoLocation`, so events
104
- * start flowing immediately without any auth dependency. The writer is then upgraded to
105
- * the EU-aware authed version via one of two paths:
106
- *
107
- * - `tryEagerUpgradeAsync` — called from `runVerb` after MSAL is initialized. If a
108
- * cached account already exists, the upgrade runs synchronously before the first event
109
- * so signed-in users get authed telemetry for the entire session.
110
- * - `CliHttpClient.onFirstAuth` callback — registered in `create()`, fires (background)
111
- * after the verb's first successful authed HTTP call. Handles users who sign in
112
- * mid-session via MSAL.
113
- *
114
- * Verbs that never make an authed HTTP call and have no cached account stay on the
115
- * unauthenticated writer for their whole lifetime — events still reach 1DS, just on
116
- * the global endpoint with no `geoLocation` or `tenantId`.
117
- *
118
- * 1DS event submission uses its own ingestion credentials (not the Entra bearer token),
119
- * so events can be sent regardless of sign-in state.
128
+ * Remote telemetry is buffered until the command resolves its target environment and region.
129
+ * Console telemetry is initialized immediately when enabled.
120
130
  */
121
131
  export class CliLogger {
122
132
  _telemetryWriters = [];
123
- _unauthWriter;
133
+ _bufferedWriter;
134
+ _remoteWriter;
124
135
  _customDimensions = {};
125
- _upgradeFired = false;
126
136
  _sessionId;
127
- _upgradeConfig;
128
- constructor(telemetryWriters, sessionId) {
137
+ _origin;
138
+ _authenticationProvider;
139
+ _appId;
140
+ _httpForwardOptions;
141
+ _telemetryContext;
142
+ _environmentMetadataPromise;
143
+ _isRemoteTelemetrySuppressed = false;
144
+ _isEnvironmentlessTelemetry = false;
145
+ constructor(telemetryWriters, sessionId, origin, authenticationProvider, appId, httpForwardOptions) {
129
146
  this._telemetryWriters = telemetryWriters;
130
147
  this._sessionId = sessionId;
148
+ this._origin = origin;
149
+ this._authenticationProvider = authenticationProvider;
150
+ this._appId = appId ?? '';
151
+ this._httpForwardOptions = httpForwardOptions;
131
152
  }
132
- static async create(cliSettings, httpClient, authenticationProvider) {
133
- const environmentId = cliSettings.appConfig?.environmentId;
134
- const region = cloudToRegionSafe(cliSettings.appConfig?.cloud);
135
- const appId = cliSettings.appConfig?.appId;
153
+ static async create(cliSettings, authenticationProvider, httpForwardOptions) {
136
154
  const sessionId = randomUUID();
137
155
  const telemetryWriters = [];
138
156
  const userTelemetrySettings = resolveUserTelemetrySettings();
139
157
  if (userTelemetrySettings.console) {
140
158
  telemetryWriters.push(new ConsoleWriter(sessionId, cliSettings.origin));
141
159
  }
142
- const instance = new CliLogger(telemetryWriters, sessionId);
160
+ const instance = new CliLogger(telemetryWriters, sessionId, cliSettings.origin, authenticationProvider, cliSettings.appConfig?.appId, httpForwardOptions);
143
161
  // In mocked-backend mode (E2E) never open a real 1DS/remote telemetry channel: it bypasses
144
162
  // the injected mock HttpClient and would attempt live network egress, hanging the CLI on
145
163
  // flush at exit. This keeps "mock all backend calls" complete for E2E runs.
146
164
  const suppressRemoteTelemetry = getCliEnvVarBool('MOCK_BACKEND');
147
- if (userTelemetrySettings.remote && region && environmentId && !suppressRemoteTelemetry) {
148
- // Push the unauthenticated writer immediately. Defaults to the global 1DS endpoint
149
- // and omits `geoLocation`; if/when auth succeeds, the upgrade swaps in the EU-aware
150
- // writer below.
151
- const unauth = new OneDSWriter(sessionId, region, 'global', environmentId, appId ?? '', undefined, packageJson.version, cliSettings.origin);
152
- instance._unauthWriter = unauth;
153
- instance._telemetryWriters.push(unauth);
154
- instance._upgradeConfig = { sessionId, region, environmentId, appId, cliSettings };
155
- // Register the lazy upgrade: fires once when the verb makes its first successful
156
- // authed HTTP call. By that point we know auth works, so the metadata fetch can't
157
- // pop a browser.
158
- httpClient.onFirstAuth(() => instance._upgradeToAuthedWriterAsync(authenticationProvider));
165
+ if (userTelemetrySettings.remote && !suppressRemoteTelemetry) {
166
+ instance._bufferedWriter = new BufferedTelemetryWriter();
167
+ instance._telemetryWriters.push(instance._bufferedWriter);
159
168
  }
160
169
  // Emit the first-party embedding host correlation id (if supplied via
161
170
  // MS_CLI_EMBEDDING_HOST_CORRELATION_ID) on every event. It is injected as a default
162
171
  // property here and promoted to a dedicated top-level telemetry column
163
- // (`embeddingHostCorrelationId`) by the OneDS writer's propertyColumnMap. Set after the
164
- // writers exist so it lands on the console + unauth writers immediately and survives the
165
- // authed-writer swap (re-applied from `_customDimensions`). The internal per-invocation
166
- // `sessionId` is intentionally left untouched.
172
+ // (`embeddingHostCorrelationId`) by the OneDS writer's propertyColumnMap. Preserve it until
173
+ // the delayed remote writer is created, while applying it to the console writer immediately.
174
+ // The internal per-invocation `sessionId` is intentionally left untouched.
167
175
  if (cliSettings.embeddingHostCorrelationId) {
168
176
  instance.setCustomDimension('embeddingHostCorrelationId', cliSettings.embeddingHostCorrelationId);
169
177
  }
170
178
  return instance;
171
179
  }
172
- /**
173
- * Eagerly run the upgrade when a cached account already exists at verb-start time,
174
- * so even the first telemetry event of the session lands on the authenticated writer.
175
- * Called from `ArgumentProvider.runVerb` after `authProvider.initAsync(region)` but
176
- * before any event is emitted.
177
- *
178
- * No-op if no cached account is present (we don't want to block CLI startup on a
179
- * network call when the user isn't even signed in), or if the upgrade has already
180
- * fired. For not-signed-in users the lazy `onFirstAuth` path still handles things
181
- * later if the verb itself triggers a sign-in.
182
- *
183
- * Cost: ~100-500ms for signed-in users — the time `getEnvironmentByName` takes.
184
- * Signed-in-but-offline users will block on the default fetch timeout before
185
- * falling through; events still flow to the unauthenticated writer in that case.
186
- */
187
- async tryEagerUpgradeAsync(authenticationProvider) {
188
- if (this._upgradeFired || !this._upgradeConfig) {
189
- return;
180
+ setCustomDimension(_key, _value) {
181
+ try {
182
+ if (!_key || !_value) {
183
+ return;
184
+ }
185
+ if (this._isEnvironmentlessTelemetry && isEnvironmentlessIdentifierDimension(_key)) {
186
+ return;
187
+ }
188
+ this._customDimensions[_key] = _value;
189
+ this._telemetryWriters.forEach((writer) => {
190
+ writer.setCustomDimension(_key, _value);
191
+ });
190
192
  }
191
- if (await authenticationProvider.getCachedAccountAsync()) {
192
- await this._upgradeToAuthedWriterAsync(authenticationProvider);
193
+ catch {
194
+ // No-op. Telemetry failures should not block CLI operations
193
195
  }
194
196
  }
195
197
  /**
196
- * Replaces the unauthenticated OneDS writer with an EU-aware authed one. Called from
197
- * two paths:
198
- * - `tryEagerUpgradeAsync` (blocking, before the first event) when a cached account
199
- * is already present at verb-start time.
200
- * - `CliHttpClient.onFirstAuth` (fire-and-forget) after the verb's first successful
201
- * authed HTTP call, when the user signed in mid-session.
202
- * Best-effort — on any failure the unauthenticated writer stays in place and events
203
- * keep flowing to the global endpoint.
198
+ * Records the command's resolved routing context and activates the remote writer once the
199
+ * environment metadata is available.
204
200
  */
205
- async _upgradeToAuthedWriterAsync(authenticationProvider) {
206
- if (this._upgradeFired || !this._upgradeConfig || !this._unauthWriter) {
201
+ async setTelemetryContext(context) {
202
+ if (!this._telemetryContext) {
203
+ this._telemetryContext = context;
204
+ }
205
+ else if (!this._telemetryContext.environmentId && context.environmentId) {
206
+ // The initial region is authoritative. Environment resolution may happen later.
207
+ this._telemetryContext = {
208
+ ...this._telemetryContext,
209
+ environmentId: context.environmentId,
210
+ };
211
+ }
212
+ else {
213
+ // Context already complete; avoid redundant metadata lookups.
207
214
  return;
208
215
  }
209
- this._upgradeFired = true;
210
- const { sessionId, region, environmentId, appId, cliSettings } = this._upgradeConfig;
211
- try {
212
- const metadata = await getEnvironmentByName(environmentId);
213
- let telemetryLocation = 'global';
214
- if (metadata?.properties?.location && EUGeoRegions.has(metadata.properties.location)) {
215
- telemetryLocation = 'eu';
216
- }
217
- const authed = new OneDSWriter(sessionId, region, telemetryLocation, environmentId, appId ?? '', metadata?.properties?.cluster?.geoShortName, packageJson.version, cliSettings.origin);
218
- // Replace the unauth writer in place. Pre-upgrade events have already been
219
- // dispatched to the unauth writer's channel; we don't re-send them.
220
- const idx = this._telemetryWriters.indexOf(this._unauthWriter);
221
- if (idx >= 0) {
222
- this._telemetryWriters[idx] = authed;
223
- }
224
- else {
225
- this._telemetryWriters.push(authed);
226
- }
227
- this._unauthWriter = authed;
228
- // Re-apply previously set dimensions to the replacement writer.
229
- for (const [key, value] of Object.entries(this._customDimensions)) {
230
- authed.setCustomDimension(key, value);
231
- }
232
- // Set the tenantId dimension AFTER the swap so it lands on the authed writer
233
- // (and any ConsoleWriter that's still in the list), not the discarded unauth one.
234
- const tenantId = authenticationProvider.getUserTenantId();
235
- if (tenantId) {
236
- this.setCustomDimension('tenantId', tenantId);
216
+ if (this._telemetryContext.environmentId) {
217
+ const metadata = await this._getEnvironmentMetadataAsync(this._telemetryContext.environmentId, this._telemetryContext.region);
218
+ await this._activateRemoteWriter(metadata);
219
+ }
220
+ }
221
+ async _getEnvironmentMetadataAsync(environmentId, region) {
222
+ this._environmentMetadataPromise ??= getEnvironmentByName(environmentId)
223
+ .then((metadata) => {
224
+ if (!metadata.location || !doesEnvironmentMatchRegion(metadata, region)) {
225
+ this._isRemoteTelemetrySuppressed = true;
226
+ return undefined;
237
227
  }
228
+ return metadata;
229
+ })
230
+ .catch(() => {
231
+ this._isRemoteTelemetrySuppressed = true;
232
+ return undefined;
233
+ });
234
+ return this._environmentMetadataPromise;
235
+ }
236
+ async _activateRemoteWriter(environmentMetadata) {
237
+ if (!this._bufferedWriter ||
238
+ !this._telemetryContext?.environmentId ||
239
+ !environmentMetadata ||
240
+ !environmentMetadata.location ||
241
+ this._isRemoteTelemetrySuppressed) {
242
+ // Keep unresolved or mismatched-environment events buffered for CLI teardown to persist.
243
+ return;
238
244
  }
239
- catch {
240
- // Best-effort. Unauth writer stays in place; subsequent events keep going to global.
245
+ const telemetryLocation = EUGeoRegions.has(environmentMetadata.location) ? 'eu' : 'global';
246
+ this._createRemoteWriterAndReplay(this._telemetryContext.region, telemetryLocation, this._telemetryContext.environmentId, environmentMetadata.properties.cluster?.geoShortName);
247
+ }
248
+ _activateEnvironmentlessRemoteWriter() {
249
+ if (!this._bufferedWriter || this._telemetryContext?.environmentId) {
250
+ return;
241
251
  }
252
+ this._isEnvironmentlessTelemetry = true;
253
+ this._createRemoteWriterAndReplay(this._telemetryContext?.region ?? 'prod', 'global', undefined, undefined);
242
254
  }
243
- setCustomDimension(_key, _value) {
255
+ _createRemoteWriterAndReplay(region, telemetryLocation, environmentId, geoLocation) {
256
+ if (!this._bufferedWriter || this._remoteWriter) {
257
+ return;
258
+ }
244
259
  try {
245
- if (!_key || !_value) {
246
- return;
260
+ const remoteWriter = new OneDSWriter(this._sessionId, region, telemetryLocation, environmentId, this._appId, geoLocation, packageJson.version, this._origin, this._httpForwardOptions);
261
+ this._remoteWriter = remoteWriter;
262
+ for (const [key, value] of Object.entries(this._customDimensions)) {
263
+ if (!this._isEnvironmentlessTelemetry || !isEnvironmentlessIdentifierDimension(key)) {
264
+ remoteWriter.setCustomDimension(key, value);
265
+ }
247
266
  }
248
- // not guarding on _upgradeFired to preserve dimensions set before the swap is complete
249
- this._customDimensions[_key] = _value;
250
- this._telemetryWriters.forEach((writer) => {
251
- writer.setCustomDimension(_key, _value);
252
- });
267
+ if (!this._isEnvironmentlessTelemetry) {
268
+ const tenantId = this._authenticationProvider.getUserTenantId();
269
+ if (tenantId) {
270
+ remoteWriter.setCustomDimension('tenantId', tenantId);
271
+ }
272
+ }
273
+ this._bufferedWriter.replay(remoteWriter, this._isEnvironmentlessTelemetry ? removeEnvironmentlessIdentifierDimensions : undefined);
274
+ this._telemetryWriters.push(remoteWriter);
253
275
  }
254
276
  catch {
255
- // No-op. Telemetry failures should not block CLI operations
277
+ // Keep the buffer intact; CLI teardown persists it after the command session ends.
256
278
  }
257
279
  }
280
+ writeBufferedTelemetryToFile(directory) {
281
+ return this._bufferedWriter?.writeToTemporaryFile(directory);
282
+ }
258
283
  trackActivityEvent(eventName, eventData) {
259
284
  try {
260
285
  if (this._telemetryWriters.length === 0) {
@@ -312,8 +337,19 @@ export class CliLogger {
312
337
  set sessionId(_value) {
313
338
  // No-op
314
339
  }
315
- flush() {
316
- return Promise.all(this._telemetryWriters.map((writer) => writer.flush())).then(() => undefined);
340
+ async flush(retainBufferedTelemetry = false) {
341
+ if (this._environmentMetadataPromise) {
342
+ // Ensure any in-flight metadata lookup can activate and replay buffered remote telemetry.
343
+ const metadata = await this._environmentMetadataPromise;
344
+ await this._activateRemoteWriter(metadata);
345
+ }
346
+ else {
347
+ this._activateEnvironmentlessRemoteWriter();
348
+ }
349
+ await Promise.all(this._telemetryWriters.map((writer) => writer.flush()));
350
+ if (this._remoteWriter && !retainBufferedTelemetry) {
351
+ this._bufferedWriter?.clear();
352
+ }
317
353
  }
318
354
  withDefaults(_extras) {
319
355
  // No-op — CLI logger does not implement local scope defaults today.
@@ -1 +1 @@
1
- {"version":3,"file":"CliLogger.js","sourceRoot":"","sources":["../../src/Logger/CliLogger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAe,MAAM,yCAAyC,CAAC;AAEzF,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,WAAW,MAAM,oBAAoB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAQnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;IAC1D,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,oBAAoB,CAC3B,gBAAoC,EACpC,IAAY,EACZ,IAAa;IAEb,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC1B,IAAI,CAAC;QACH,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAClC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,GAAG,IAAI,EAAE,iBAAiB,EAAE,MAAM,EAAE,CAAC,CACjF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;IAC9D,CAAC;IACD,MAAM,IAAI,GAAG;QACX,QAAQ,EAAE,CAAC,YAAqB,EAAE,EAAE;YAClC,IAAI,CAAC;gBACH,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAClC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;oBAC5B,YAAY;oBACZ,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM;oBAChC,GAAG,YAAY;iBAChB,CAAC,CACH,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,4DAA4D;YAC9D,CAAC;QACH,CAAC;QACD,QAAQ,EAAE,CAAC,YAAqB,EAAE,EAAE;YAClC,IAAI,CAAC;gBACH,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAClC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE;oBAC5B,YAAY;oBACZ,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM;oBAChC,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM;oBACrC,GAAG,YAAY;iBAChB,CAAC,CACH,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,4DAA4D;YAC9D,CAAC;QACH,CAAC;QACD,OAAO,EAAE,CAAC,KAAe,EAAE,WAAoB,EAAE,EAAE;YACjD,IAAI,CAAC;gBACH,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAClC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE;oBAC1B,YAAY;oBACZ,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM;oBAChC,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM;oBACrC,KAAK,EAAE,uBAAuB,CAAC,KAAK,CAAC;oBACrC,GAAG,WAAW;iBACf,CAAC,CACH,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,4DAA4D;YAC9D,CAAC;QACH,CAAC;QACD,iBAAiB,EAAE,CAAC,WAAoB,EAAE,EAAE;YAC1C,IAAI,CAAC;gBACH,gBAAgB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAClC,MAAM,CAAC,0BAA0B,CAAC,IAAI,EAAE;oBACtC,YAAY;oBACZ,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM;oBAChC,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM;oBACrC,GAAG,WAAW;iBACf,CAAC,CACH,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,4DAA4D;YAC9D,CAAC;QACH,CAAC;KACF,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAO,SAAS;IACZ,iBAAiB,GAAuB,EAAE,CAAC;IAC3C,aAAa,CAAe;IACnB,iBAAiB,GAA2B,EAAE,CAAC;IACxD,aAAa,GAAG,KAAK,CAAC;IACb,UAAU,CAAS;IAC5B,cAAc,CAMpB;IAEF,YAAoB,gBAAoC,EAAE,SAAiB;QACzE,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,MAAM,CACxB,WAAwB,EACxB,UAAyB,EACzB,sBAA+C;QAE/C,MAAM,aAAa,GAAG,WAAW,CAAC,SAAS,EAAE,aAAa,CAAC;QAC3D,MAAM,MAAM,GAAuB,iBAAiB,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACnF,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC;QAC3C,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;QAC/B,MAAM,gBAAgB,GAAuB,EAAE,CAAC;QAChD,MAAM,qBAAqB,GAA0B,4BAA4B,EAAE,CAAC;QAEpF,IAAI,qBAAqB,CAAC,OAAO,EAAE,CAAC;YAClC,gBAAgB,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,SAAS,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;QAE5D,2FAA2F;QAC3F,yFAAyF;QACzF,4EAA4E;QAC5E,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,cAAc,CAAC,CAAC;QAEjE,IAAI,qBAAqB,CAAC,MAAM,IAAI,MAAM,IAAI,aAAa,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACxF,mFAAmF;YACnF,oFAAoF;YACpF,gBAAgB;YAChB,MAAM,MAAM,GAAG,IAAI,WAAW,CAC5B,SAAS,EACT,MAAM,EACN,QAAQ,EACR,aAAa,EACb,KAAK,IAAI,EAAE,EACX,SAAS,EACT,WAAW,CAAC,OAAO,EACnB,WAAW,CAAC,MAAM,CACnB,CAAC;YACF,QAAQ,CAAC,aAAa,GAAG,MAAM,CAAC;YAChC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAExC,QAAQ,CAAC,cAAc,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;YAEnF,iFAAiF;YACjF,kFAAkF;YAClF,iBAAiB;YACjB,UAAU,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAC7F,CAAC;QAED,sEAAsE;QACtE,oFAAoF;QACpF,uEAAuE;QACvE,wFAAwF;QACxF,yFAAyF;QACzF,wFAAwF;QACxF,+CAA+C;QAC/C,IAAI,WAAW,CAAC,0BAA0B,EAAE,CAAC;YAC3C,QAAQ,CAAC,kBAAkB,CACzB,4BAA4B,EAC5B,WAAW,CAAC,0BAA0B,CACvC,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACI,KAAK,CAAC,oBAAoB,CAC/B,sBAA+C;QAE/C,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;YAC/C,OAAO;QACT,CAAC;QACD,IAAI,MAAM,sBAAsB,CAAC,qBAAqB,EAAE,EAAE,CAAC;YACzD,MAAM,IAAI,CAAC,2BAA2B,CAAC,sBAAsB,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACK,KAAK,CAAC,2BAA2B,CACvC,sBAA+C;QAE/C,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACtE,OAAO;QACT,CAAC;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAE1B,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,cAAc,CAAC;QAErF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,oBAAoB,CAAC,aAAa,CAAC,CAAC;YAE3D,IAAI,iBAAiB,GAAsB,QAAQ,CAAC;YACpD,IAAI,QAAQ,EAAE,UAAU,EAAE,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrF,iBAAiB,GAAG,IAAI,CAAC;YAC3B,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,WAAW,CAC5B,SAAS,EACT,MAAM,EACN,iBAAiB,EACjB,aAAa,EACb,KAAK,IAAI,EAAE,EACX,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAC3C,WAAW,CAAC,OAAO,EACnB,WAAW,CAAC,MAAM,CACnB,CAAC;YAEF,2EAA2E;YAC3E,oEAAoE;YACpE,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC/D,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;gBACb,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC;YACD,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;YAE5B,gEAAgE;YAChE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAClE,MAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACxC,CAAC;YAED,6EAA6E;YAC7E,kFAAkF;YAClF,MAAM,QAAQ,GAAG,sBAAsB,CAAC,eAAe,EAAE,CAAC;YAC1D,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qFAAqF;QACvF,CAAC;IACH,CAAC;IAEM,kBAAkB,CAAC,IAAY,EAAE,MAAc;QACpD,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACrB,OAAO;YACT,CAAC;YACD,uFAAuF;YACvF,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;YACtC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACxC,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;QAC9D,CAAC;IACH,CAAC;IAEM,kBAAkB,CAAC,SAAiB,EAAE,SAAkB;QAC7D,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxC,OAAO;YACT,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC9F,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;QAC9D,CAAC;IACH,CAAC;IAEM,eAAe,CAAC,SAAiB,EAAE,SAAkB;QAC1D,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxC,OAAO;YACT,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;QAC3F,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;QAC9D,CAAC;IACH,CAAC;IAEM,aAAa,CAAC,SAAiB,EAAE,SAAkB;QACxD,IAAI,CAAC;YACH,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxC,yEAAyE;gBACzE,OAAO;oBACL,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;oBACzB,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;oBACzB,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;oBACxB,iBAAiB,EAAE,GAAG,EAAE,CAAC,SAAS;iBACnC,CAAC;YACJ,CAAC;YACD,OAAO,oBAAoB,CAAC,IAAI,CAAC,iBAAiB,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC5E,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;YAC5D,OAAO;gBACL,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;gBACzB,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS;gBACzB,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS;gBACxB,iBAAiB,EAAE,GAAG,EAAE,CAAC,SAAS;aACnC,CAAC;QACJ,CAAC;IACH,CAAC;IAEM,iBAAiB,CAAC,KAAa,EAAE,WAAoB;QAC1D,gEAAgE;IAClE,CAAC;IAEM,YAAY,CAAC,SAAiD;QACnE,sDAAsD;IACxD,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAW,SAAS,CAAC,MAAc;QACjC,QAAQ;IACV,CAAC;IAEM,KAAK;QACV,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAC7E,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;IACJ,CAAC;IAEM,YAAY,CAAC,OAAkD;QACpE,oEAAoE;QACpE,wEAAwE;QACxE,+CAA+C;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,WAAW,CAAC,OAAkD;QACnE,oEAAoE;IACtE,CAAC;CACF"}
1
+ {"version":3,"file":"CliLogger.js","sourceRoot":"","sources":["../../src/Logger/CliLogger.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,23 @@
1
- /*!
2
- * Copyright (C) Microsoft Corporation. All rights reserved.
3
- */
1
+ import type { IXHROverride } from '@microsoft/1ds-post-js';
4
2
  import { type Region } from '@microsoft/managed-apps-common/services';
5
3
  import { type TelemetryLocation } from '@microsoft/managed-apps-common/telemetry';
6
4
  import type { ITelemetryWriter } from '../Types/LoggerTypes.types.js';
5
+ export interface OneDsHttpForwardOptions {
6
+ forwardUrl: string;
7
+ authToken?: string;
8
+ customForwardHeadersJson?: string;
9
+ }
10
+ export declare function createOneDsHttpForwardOverride(options: OneDsHttpForwardOptions): IXHROverride;
7
11
  export declare class OneDSWriter implements ITelemetryWriter {
8
12
  private _provider;
9
- constructor(sessionId: string, region: Region, telemetryLocation: TelemetryLocation, environmentId: string, appId: string, geoLocation: string | undefined, cliVersion: string, cliSource: string);
10
- trackActivityEvent(operationName: string, eventData?: object): void;
11
- trackErrorEvent(operationName: string, eventData?: object): void;
12
- startScenario(scenarioName: string, startData?: object): void;
13
- progressScenario(scenarioName: string, progressData?: object): void;
14
- completeScenario(scenarioName: string, completeData?: object): void;
15
- scenarioFailed(scenarioName: string, failureData?: object): void;
16
- scenarioCompletedWithError(scenarioName: string, completeWithErrorData?: object): void;
13
+ constructor(sessionId: string, region: Region, telemetryLocation: TelemetryLocation, environmentId: string | undefined, appId: string, geoLocation: string | undefined, cliVersion: string, cliSource: string, httpForwardOptions?: OneDsHttpForwardOptions);
14
+ trackActivityEvent(operationName: string, eventData?: object, timestamp?: string): void;
15
+ trackErrorEvent(operationName: string, eventData?: object, timestamp?: string): void;
16
+ startScenario(scenarioName: string, startData?: object, timestamp?: string): void;
17
+ progressScenario(scenarioName: string, progressData?: object, timestamp?: string): void;
18
+ completeScenario(scenarioName: string, completeData?: object, timestamp?: string): void;
19
+ scenarioFailed(scenarioName: string, failureData?: object, timestamp?: string): void;
20
+ scenarioCompletedWithError(scenarioName: string, completeWithErrorData?: object, timestamp?: string): void;
17
21
  flush(): Promise<void>;
18
22
  setCustomDimension(_key: string, _value: string): void;
19
23
  private static readonly _EVENT_PREFIX;
@@ -1 +1 @@
1
- {"version":3,"file":"OneDSWriter.d.ts","sourceRoot":"","sources":["../../src/Logger/OneDSWriter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,KAAK,MAAM,EAA2B,MAAM,yCAAyC,CAAC;AAC/F,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,0CAA0C,CAAC;AAElD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,qBAAa,WAAY,YAAW,gBAAgB;IAClD,OAAO,CAAC,SAAS,CAAyB;gBAGxC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM;IAwDZ,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAOnE,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAOhE,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ7D,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAQnE,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IASnE,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAShE,0BAA0B,CAAC,YAAY,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI;IAStF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAqB;IAE1D,OAAO,CAAC,WAAW;CAyBpB"}
1
+ {"version":3,"file":"OneDSWriter.d.ts","sourceRoot":"","sources":["../../src/Logger/OneDSWriter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAgB,YAAY,EAAsB,MAAM,wBAAwB,CAAC;AAC7F,OAAO,EAAE,KAAK,MAAM,EAA2B,MAAM,yCAAyC,CAAC;AAC/F,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,0CAA0C,CAAC;AAIlD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAuED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,uBAAuB,GAAG,YAAY,CAM7F;AAED,qBAAa,WAAY,YAAW,gBAAgB;IAClD,OAAO,CAAC,SAAS,CAAyB;gBAGxC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,kBAAkB,CAAC,EAAE,uBAAuB;IAiEvC,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAWvF,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAWpF,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAYjF,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAYvF,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAavF,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAapF,0BAA0B,CAC/B,YAAY,EAAE,MAAM,EACpB,qBAAqB,CAAC,EAAE,MAAM,EAC9B,SAAS,CAAC,EAAE,MAAM,GACjB,IAAI;IAaA,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAqB;IAE1D,OAAO,CAAC,WAAW;CAyBpB"}
@@ -1,14 +1,79 @@
1
1
  /*!
2
2
  * Copyright (C) Microsoft Corporation. All rights reserved.
3
3
  */
4
+ import { randomUUID } from 'node:crypto';
4
5
  import { regionToClusterCategory } from '@microsoft/managed-apps-common/services';
5
6
  import { OneDsTelemetryProvider, ScenarioResults, TelemetryEventNames, } from '@microsoft/managed-apps-common/telemetry';
7
+ import { MS_CLIENT_REQUESTID, MS_TARGET_URL, USER_AGENT } from '../Constants.js';
8
+ import { applyStaticForwardHeaders, parseForwardHeaders } from '../HttpClient/HttpForward.js';
6
9
  import { getScrubbedCustomDimensions } from './Scrubber/ScrubCustomDimensions.js';
10
+ function appendUserAgent(headers) {
11
+ let existingUserAgent = '';
12
+ for (const name of Object.keys(headers)) {
13
+ if (name.toLowerCase() === 'user-agent') {
14
+ if (headers[name]) {
15
+ existingUserAgent = existingUserAgent
16
+ ? `${existingUserAgent} ${headers[name]}`
17
+ : headers[name];
18
+ }
19
+ delete headers[name];
20
+ }
21
+ }
22
+ headers['User-Agent'] = existingUserAgent ? `${existingUserAgent} ${USER_AGENT}` : USER_AGENT;
23
+ }
24
+ function buildForwardedTelemetryHeaders(payloadHeaders, forwardHeaders) {
25
+ const headers = {};
26
+ applyStaticForwardHeaders(headers, forwardHeaders);
27
+ for (const [name, value] of Object.entries(payloadHeaders ?? {})) {
28
+ if (name.toLowerCase() !== 'user-agent') {
29
+ for (const existingName of Object.keys(headers)) {
30
+ if (existingName.toLowerCase() === name.toLowerCase()) {
31
+ delete headers[existingName];
32
+ }
33
+ }
34
+ }
35
+ headers[name] = value;
36
+ }
37
+ return headers;
38
+ }
39
+ async function sendForwardedTelemetry(payload, oncomplete, options, forwardHeaders) {
40
+ const headers = buildForwardedTelemetryHeaders(payload.headers, forwardHeaders);
41
+ headers[MS_TARGET_URL] = payload.urlString;
42
+ headers[MS_CLIENT_REQUESTID] = randomUUID();
43
+ if (options.authToken) {
44
+ headers.Authorization = 'Bearer ' + options.authToken;
45
+ }
46
+ appendUserAgent(headers);
47
+ try {
48
+ const response = await globalThis.fetch(options.forwardUrl, {
49
+ method: 'POST',
50
+ headers,
51
+ body: payload.data,
52
+ signal: payload.timeout ? AbortSignal.timeout(payload.timeout) : undefined,
53
+ });
54
+ const responseHeaders = {};
55
+ response.headers.forEach((value, name) => {
56
+ responseHeaders[name] = value;
57
+ });
58
+ const oneDsStatus = response.ok && response.status !== 204 ? 200 : response.status;
59
+ oncomplete(oneDsStatus, responseHeaders, await response.text());
60
+ return true;
61
+ }
62
+ catch (error) {
63
+ oncomplete(0, {}, error instanceof Error ? error.message : String(error));
64
+ return false;
65
+ }
66
+ }
67
+ export function createOneDsHttpForwardOverride(options) {
68
+ const forwardHeaders = parseForwardHeaders(options.customForwardHeadersJson);
69
+ return {
70
+ sendPOST: (payload, oncomplete) => sendForwardedTelemetry(payload, oncomplete, options, forwardHeaders),
71
+ };
72
+ }
7
73
  export class OneDSWriter {
8
74
  _provider;
9
- constructor(sessionId, region, telemetryLocation, environmentId, appId, geoLocation, cliVersion, cliSource) {
75
+ constructor(sessionId, region, telemetryLocation, environmentId, appId, geoLocation, cliVersion, cliSource, httpForwardOptions) {
10
76
  const commonProperties = {
11
- environmentId,
12
77
  isOnePlayer: 'false',
13
78
  webPlayerScenario: 'ManagedApps_CLI_Authoring',
14
79
  cloud: region === 'preview' ? 'prod' : region,
@@ -18,12 +83,24 @@ export class OneDSWriter {
18
83
  cliVersion,
19
84
  cliSource,
20
85
  };
86
+ if (environmentId) {
87
+ commonProperties.environmentId = environmentId;
88
+ }
21
89
  if (appId) {
22
90
  commonProperties.playerAppId = appId;
23
91
  }
24
92
  if (geoLocation) {
25
93
  commonProperties.geoLocation = geoLocation;
26
94
  }
95
+ const channelConfig = {
96
+ maxEvtPerBatch: 500,
97
+ maxEventRetryAttempts: 6,
98
+ eventsLimitInMem: 10000,
99
+ };
100
+ if (httpForwardOptions) {
101
+ channelConfig.httpXHROverride = createOneDsHttpForwardOverride(httpForwardOptions);
102
+ channelConfig.alwaysUseXhrOverride = true;
103
+ }
27
104
  this._provider = new OneDsTelemetryProvider({
28
105
  clientType: 'ManagedAppsCLI',
29
106
  clusterCategory: regionToClusterCategory(region),
@@ -41,11 +118,7 @@ export class OneDSWriter {
41
118
  // leaving it only inside the customDimensions blob.
42
119
  embeddingHostCorrelationId: 'embeddingHostCorrelationId',
43
120
  },
44
- channelConfig: {
45
- maxEvtPerBatch: 500,
46
- maxEventRetryAttempts: 6,
47
- eventsLimitInMem: 10000,
48
- },
121
+ channelConfig,
49
122
  });
50
123
  this._provider.sessionId = sessionId;
51
124
  // Sync 1DS session id with CLI session id in Part A extension
@@ -55,55 +128,55 @@ export class OneDSWriter {
55
128
  app.sesId = sessionId;
56
129
  });
57
130
  }
58
- trackActivityEvent(operationName, eventData) {
131
+ trackActivityEvent(operationName, eventData, timestamp) {
59
132
  this._trackEvent(TelemetryEventNames.Activity, {
60
133
  ...eventData,
61
134
  operationName,
62
- });
135
+ }, timestamp);
63
136
  }
64
- trackErrorEvent(operationName, eventData) {
137
+ trackErrorEvent(operationName, eventData, timestamp) {
65
138
  this._trackEvent(TelemetryEventNames.Error, {
66
139
  ...eventData,
67
140
  operationName,
68
- });
141
+ }, timestamp);
69
142
  }
70
- startScenario(scenarioName, startData) {
143
+ startScenario(scenarioName, startData, timestamp) {
71
144
  this._trackEvent(TelemetryEventNames.StartScenario, {
72
145
  operationName: scenarioName,
73
146
  ...startData,
74
147
  scenarioName,
75
- });
148
+ }, timestamp);
76
149
  }
77
- progressScenario(scenarioName, progressData) {
150
+ progressScenario(scenarioName, progressData, timestamp) {
78
151
  this._trackEvent(TelemetryEventNames.ProgressScenario, {
79
152
  operationName: scenarioName,
80
153
  ...progressData,
81
154
  scenarioName,
82
- });
155
+ }, timestamp);
83
156
  }
84
- completeScenario(scenarioName, completeData) {
157
+ completeScenario(scenarioName, completeData, timestamp) {
85
158
  this._trackEvent(TelemetryEventNames.EndScenario, {
86
159
  operationName: scenarioName,
87
160
  ...completeData,
88
161
  scenarioName,
89
162
  scenarioResult: ScenarioResults.Success,
90
- });
163
+ }, timestamp);
91
164
  }
92
- scenarioFailed(scenarioName, failureData) {
165
+ scenarioFailed(scenarioName, failureData, timestamp) {
93
166
  this._trackEvent(TelemetryEventNames.EndScenario, {
94
167
  operationName: scenarioName,
95
168
  ...failureData,
96
169
  scenarioName,
97
170
  scenarioResult: ScenarioResults.Failed,
98
- });
171
+ }, timestamp);
99
172
  }
100
- scenarioCompletedWithError(scenarioName, completeWithErrorData) {
173
+ scenarioCompletedWithError(scenarioName, completeWithErrorData, timestamp) {
101
174
  this._trackEvent(TelemetryEventNames.EndScenario, {
102
175
  operationName: scenarioName,
103
176
  ...completeWithErrorData,
104
177
  scenarioName,
105
178
  scenarioResult: ScenarioResults.SuccessWithErrors,
106
- });
179
+ }, timestamp);
107
180
  }
108
181
  flush() {
109
182
  return this._provider.flush();
@@ -112,7 +185,7 @@ export class OneDSWriter {
112
185
  this._provider.setDefaultProperty(_key, _value);
113
186
  }
114
187
  static _EVENT_PREFIX = 'ManagedAppsCLI.';
115
- _trackEvent(eventName, eventData) {
188
+ _trackEvent(eventName, eventData, timestamp) {
116
189
  const operationName = eventData.operationName || '';
117
190
  const scrubbed = getScrubbedCustomDimensions(eventName, operationName, eventData);
118
191
  const properties = {};
@@ -129,7 +202,7 @@ export class OneDSWriter {
129
202
  }
130
203
  this._provider.track({
131
204
  eventName,
132
- timestamp: new Date().toISOString(),
205
+ timestamp: timestamp ?? new Date().toISOString(),
133
206
  severity: 'info',
134
207
  properties,
135
208
  });