push neon reactor

This commit is contained in:
2026-07-12 15:11:38 +02:00
parent 172e72dbcd
commit aeab5f7820
9597 changed files with 2407488 additions and 0 deletions
@@ -0,0 +1,27 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
import type { IHttpClient, ILogger, Scenario } from '@microsoft/power-apps-actions';
import type { CliSettings, IAuthenticationProvider } from '../Types/Cli.types.js';
/**
* Logger implementation for the CLI
* The logger depends on the CLISettings, HttpClient and authenticationProvider to initialize the OneDS writer
*/
export declare class CliLogger implements ILogger {
private _telemetryWriters;
private _oneDSConfig?;
private constructor();
static create(cliSettings: CliSettings, httpClient: IHttpClient): Promise<CliLogger>;
/**
* Initialize OneDS telemetry after authentication is ready.
* Must be called after authenticationProvider.initAsync() completes.
*/
initializeTelemetry(authenticationProvider: IAuthenticationProvider): Promise<void>;
setCustomDimension(_key: string, _value: string): void;
trackActivityEvent(eventName: string, eventData?: object): void;
trackErrorEvent(eventName: string, eventData?: object): void;
trackScenario(eventName: string, eventData?: object): Scenario;
stringifyError(err: unknown): string | null | undefined;
flush(): Promise<void>;
}
//# sourceMappingURL=CliLogger.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"CliLogger.d.ts","sourceRoot":"","sources":["../../src/Logger/CliLogger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAMpF,OAAO,KAAK,EACV,WAAW,EACX,uBAAuB,EAExB,MAAM,oBAAoB,CAAC;AAqF5B;;;GAGG;AACH,qBAAa,SAAU,YAAW,OAAO;IACvC,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,YAAY,CAAC,CAOnB;IAEF,OAAO;WAIa,MAAM,CACxB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,WAAW,GACtB,OAAO,CAAC,SAAS,CAAC;IAoCrB;;;OAGG;IACU,mBAAmB,CAAC,sBAAsB,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+CzF,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAatD,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAW/D,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAW5D,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ;IAuB9D,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS;IAcvD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAK9B"}
@@ -0,0 +1,222 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
import { getEnvironmentByName, initializePlayerServices } from '@microsoft/power-apps-actions';
import { randomUUID } from 'crypto';
import packageJson from '../../package.json' with { type: 'json' };
import { printError } from '../Utils/ConsoleOutput.js';
import { ConsoleWriter } from './ConsoleWriter.js';
import { EUGeoRegions } from './Constants.js';
import { resolveUserTelemetrySettings } from './LoggerSettings.js';
import { OneDSWriter } from './OneDSWriter.js';
/**
* Utility method to create a Scenario
*
* @param {ITelemetryWriter[]} telemetryWriters
* @param {string} name
* @param {object} [data]
* @returns {Scenario}
*/
function createScenarioLogger(telemetryWriters, name, data) {
const scenarioGuid = randomUUID();
const _start = Date.now();
try {
telemetryWriters.forEach((writer) => writer.startScenario(name, { scenarioGuid, ...data, scenarioStartTime: _start }));
}
catch {
// No-op. Telemetry failures should not block CLI operations
}
const base = {
scenarioId: scenarioGuid,
complete: (completeData) => {
try {
telemetryWriters.forEach((writer) => writer.completeScenario(name, {
scenarioGuid,
elapsedTime: Date.now() - _start,
totalElapsedTime: Date.now() - _start,
...completeData,
}));
}
catch {
// No-op. Telemetry failures should not block CLI operations
}
},
failure: (failureData) => {
try {
telemetryWriters.forEach((writer) => writer.scenarioFailed(name, {
scenarioGuid,
elapsedTime: Date.now() - _start,
totalElapsedTime: Date.now() - _start,
...failureData,
}));
}
catch {
// No-op. Telemetry failures should not block CLI operations
}
},
completeWithError: (dataWithErr) => {
try {
telemetryWriters.forEach((writer) => writer.scenarioCompletedWithError(name, {
scenarioGuid,
elapsedTime: Date.now() - _start,
totalElapsedTime: Date.now() - _start,
...dataWithErr,
}));
}
catch {
// No-op. Telemetry failures should not block CLI operations
}
},
};
base._start = _start;
return base;
}
/**
* Logger implementation for the CLI
* The logger depends on the CLISettings, HttpClient and authenticationProvider to initialize the OneDS writer
*/
export class CliLogger {
_telemetryWriters = [];
_oneDSConfig;
constructor(telemetryWriters) {
this._telemetryWriters = telemetryWriters;
}
static async create(cliSettings, httpClient) {
const environmentId = cliSettings.appConfig?.environmentId;
const region = cliSettings.appConfig?.region;
const appId = cliSettings.appConfig?.appId;
const sessionId = randomUUID();
const telemetryWriters = [];
const userTelemetrySettings = resolveUserTelemetrySettings();
const addConsoleWriter = () => telemetryWriters.push(new ConsoleWriter());
if (userTelemetrySettings.consoleOnly) {
addConsoleWriter();
return new CliLogger(telemetryWriters);
}
if (userTelemetrySettings.outputToConsole) {
addConsoleWriter();
}
const instance = new CliLogger(telemetryWriters);
if (userTelemetrySettings.enabled && region && environmentId) {
// Store config for deferred initialization via initializeTelemetry()
instance._oneDSConfig = {
sessionId,
region,
environmentId,
appId,
httpClient,
cliSettings,
};
}
return instance;
}
/**
* Initialize OneDS telemetry after authentication is ready.
* Must be called after authenticationProvider.initAsync() completes.
*/
async initializeTelemetry(authenticationProvider) {
if (!this._oneDSConfig) {
return;
}
const { sessionId, region, environmentId, appId, httpClient, cliSettings } = this._oneDSConfig;
this._oneDSConfig = undefined;
try {
// Initialize player services to get environment metadata
initializePlayerServices({
httpClient,
environmentName: cliSettings.appConfig?.environmentId || 'default',
region: cliSettings.appConfig?.region || 'prod',
// eslint-disable-next-line @typescript-eslint/no-explicit-any
});
const metadata = await getEnvironmentByName(environmentId);
let telemetryLocation = 'global';
if (metadata?.properties?.location && EUGeoRegions.has(metadata.properties.location)) {
telemetryLocation = 'eu';
}
this._telemetryWriters.push(new OneDSWriter(sessionId, region, telemetryLocation, environmentId, appId ?? '', metadata?.properties?.cluster?.geoShortName, packageJson.version, cliSettings.source));
}
catch (error) {
printError(`CliLogger: failed to initialize OneDS telemetry writer: ${String(error)}`);
}
if (authenticationProvider.getUserTenantId()) {
// At this point if the auth provider has fetched a token, we can set the tenantId dimension
this.setCustomDimension('tenantId', authenticationProvider.getUserTenantId());
}
}
setCustomDimension(_key, _value) {
try {
if (!_key || !_value) {
return;
}
this._telemetryWriters.forEach((writer) => {
writer.setCustomDimension(_key, _value);
});
}
catch {
// No-op. Telemetry failures should not block CLI operations
}
}
trackActivityEvent(eventName, eventData) {
try {
if (this._telemetryWriters.length === 0) {
return;
}
this._telemetryWriters.forEach((writer) => writer.trackActivityEvent(eventName, eventData));
}
catch {
// No-op. Telemetry failures should not block CLI operations
}
}
trackErrorEvent(eventName, eventData) {
try {
if (this._telemetryWriters.length === 0) {
return;
}
this._telemetryWriters.forEach((writer) => writer.trackErrorEvent(eventName, eventData));
}
catch {
// No-op. Telemetry failures should not block CLI operations
}
}
trackScenario(eventName, eventData) {
try {
if (this._telemetryWriters.length === 0) {
// Return a no-op scenario so callers don't have to check telemetry state
return {
scenarioId: 'disabled',
complete: () => undefined,
failure: () => undefined,
completeWithError: () => undefined,
};
}
return createScenarioLogger(this._telemetryWriters, eventName, eventData);
}
catch {
// No-op. Telemetry failures should not block CLI operations
return {
scenarioId: 'error',
complete: () => undefined,
failure: () => undefined,
completeWithError: () => undefined,
};
}
}
stringifyError(err) {
if (!err) {
return undefined;
}
if (err instanceof Error) {
return `${err.name}: ${err.message}${err.stack ? '\n' + err.stack : ''}`;
}
try {
return JSON.stringify(err);
}
catch {
return String(err);
}
}
flush() {
return Promise.all(this._telemetryWriters.map((writer) => writer.flush())).then(() => undefined);
}
}
//# sourceMappingURL=CliLogger.js.map
File diff suppressed because one or more lines are too long
@@ -0,0 +1,15 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
import type { ITelemetryWriter } from '../Types/LoggerTypes.types.js';
export declare class ConsoleWriter implements ITelemetryWriter {
trackActivityEvent(eventName: string, eventData?: object): void;
trackErrorEvent(eventName: string, eventData?: object): void;
startScenario(scenarioName: string, startData?: object): void;
completeScenario(scenarioName: string, completeData?: object): void;
scenarioFailed(scenarioName: string, failureData?: object): void;
scenarioCompletedWithError(scenarioName: string, completeWithErrorData?: object): void;
flush(): void;
setCustomDimension(_key: string, _value: string): void;
}
//# sourceMappingURL=ConsoleWriter.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"ConsoleWriter.d.ts","sourceRoot":"","sources":["../../src/Logger/ConsoleWriter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAoBnE,qBAAa,aAAc,YAAW,gBAAgB;IAC7C,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAI/D,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAI5D,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAI7D,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI;IAInE,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAIhE,0BAA0B,CAAC,YAAY,EAAE,MAAM,EAAE,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI;IAItF,KAAK,IAAI,IAAI;IAIb,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAG9D"}
@@ -0,0 +1,45 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
import chalk from 'chalk';
/* eslint-disable @typescript-eslint/no-explicit-any */
// Logger function factory
function loggerFn(color, log = console.log.bind(console)) {
return (scenarioName, ...data) => {
const time = new Date().toISOString().split('T')[1];
const prefix = `${chalk.gray(time)}: [${color(scenarioName)}]: `;
log(prefix, ...data);
};
}
const activity = loggerFn(chalk.white.bold);
const scenario = loggerFn(chalk.cyan.bold);
const error = loggerFn(chalk.red.bold, console.error.bind(console));
const warn = loggerFn(chalk.yellow.bold);
export class ConsoleWriter {
trackActivityEvent(eventName, eventData) {
activity(eventName, eventData || {});
}
trackErrorEvent(eventName, eventData) {
error(eventName, eventData || {});
}
startScenario(scenarioName, startData) {
scenario(`[scenario:start] ${scenarioName}`, startData || {});
}
completeScenario(scenarioName, completeData) {
scenario(`[scenario:complete] ${scenarioName}`, completeData || {});
}
scenarioFailed(scenarioName, failureData) {
error(`[scenario:failure] ${scenarioName}`, failureData || {});
}
scenarioCompletedWithError(scenarioName, completeWithErrorData) {
warn(`[scenario:completeWithError] ${scenarioName}`, completeWithErrorData || {});
}
flush() {
// No-op for console writer
}
setCustomDimension(_key, _value) {
// No-op for console writer
}
}
/* eslint-enable @typescript-eslint/no-explicit-any */
//# sourceMappingURL=ConsoleWriter.js.map
@@ -0,0 +1 @@
{"version":3,"file":"ConsoleWriter.js","sourceRoot":"","sources":["../../src/Logger/ConsoleWriter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,uDAAuD;AACvD,0BAA0B;AAC1B,SAAS,QAAQ,CACf,KAAkB,EAClB,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;IAE/B,OAAO,CAAC,YAAoB,EAAE,GAAG,IAAW,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC;QACjE,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACpE,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAEzC,MAAM,OAAO,aAAa;IACjB,kBAAkB,CAAC,SAAiB,EAAE,SAAkB;QAC7D,QAAQ,CAAC,SAAS,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAEM,eAAe,CAAC,SAAiB,EAAE,SAAkB;QAC1D,KAAK,CAAC,SAAS,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IAEM,aAAa,CAAC,YAAoB,EAAE,SAAkB;QAC3D,QAAQ,CAAC,oBAAoB,YAAY,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAEM,gBAAgB,CAAC,YAAoB,EAAE,YAAqB;QACjE,QAAQ,CAAC,uBAAuB,YAAY,EAAE,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC;IAEM,cAAc,CAAC,YAAoB,EAAE,WAAoB;QAC9D,KAAK,CAAC,sBAAsB,YAAY,EAAE,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAEM,0BAA0B,CAAC,YAAoB,EAAE,qBAA8B;QACpF,IAAI,CAAC,gCAAgC,YAAY,EAAE,EAAE,qBAAqB,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC;IAEM,KAAK;QACV,2BAA2B;IAC7B,CAAC;IAEM,kBAAkB,CAAC,IAAY,EAAE,MAAc;QACpD,2BAA2B;IAC7B,CAAC;CACF;AACD,sDAAsD"}
@@ -0,0 +1,6 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
export type { TelemetryLocation } from '@microsoft/power-apps-common/telemetry';
export declare const EUGeoRegions: Set<string>;
//# sourceMappingURL=Constants.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"Constants.d.ts","sourceRoot":"","sources":["../../src/Logger/Constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,iBAAiB,EAAE,MAAM,wCAAwC,CAAC;AAEhF,eAAO,MAAM,YAAY,aAUvB,CAAC"}
@@ -0,0 +1,15 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
export const EUGeoRegions = new Set([
'europe',
'france',
'germany',
'italy',
'poland',
'norway',
'sweden',
'switzerland',
'unitedkingdom',
]);
//# sourceMappingURL=Constants.js.map
@@ -0,0 +1 @@
{"version":3,"file":"Constants.js","sourceRoot":"","sources":["../../src/Logger/Constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAS;IAC1C,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,aAAa;IACb,eAAe;CAChB,CAAC,CAAC"}
@@ -0,0 +1,18 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
import type { UserTelemetrySettings } from '../Types/Cli.types.js';
/**
* Resolves the effective user telemetry settings by merging defaults, user config file, and environment overrides.
*
* Resolution priority (highest to lowest):
* 1. Environment variable overrides:
* - POWERAPPS_CLI_TELEMETRY=0/false/no/off forces `enabled: false`
* - PAC_CLI_TELEMETRY_OPTOUT or PAC CLI usersettings.json `telemetryEnabled: false` forces `enabled: false`
* 2. PowerApps CLI user settings file (~/.powerapps-cli/settings.json)
* 3. Default values: `{ enabled: true, consoleOnly: false, outputToConsole: false }`
*
* @returns Resolved telemetry configuration with enabled, consoleOnly, and outputToConsole flags
*/
export declare function resolveUserTelemetrySettings(): UserTelemetrySettings;
//# sourceMappingURL=LoggerSettings.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"LoggerSettings.d.ts","sourceRoot":"","sources":["../../src/Logger/LoggerSettings.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAkEhE;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,IAAI,qBAAqB,CAiCpE"}
@@ -0,0 +1,100 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
import * as fs from 'fs';
import * as path from 'path';
import { CLI_CONFIG_DIRECTORY, USER_SETTINGS_FILE } from '../Constants.js';
import { printWarning } from '../Utils/ConsoleOutput.js';
/**
* Checks if a string represents a truthy value (1, true, yes, on).
*/
function isTruthy(value) {
if (!value) {
return false;
}
const normalized = value.trim().toLowerCase();
return normalized === '1' || normalized === 'true' || normalized === 'yes' || normalized === 'on';
}
/**
* Checks if a string represents a falsy value (0, false, no, off).
*/
function isFalsy(value) {
if (!value) {
return false;
}
const normalized = value.trim().toLowerCase();
return (normalized === '0' || normalized === 'false' || normalized === 'no' || normalized === 'off');
}
/**
* Determines whether PAC CLI telemetry is enabled by checking environment variables and PAC CLI config.
*
* Checks in order:
* 1. PAC_CLI_TELEMETRY_OPTOUT environment variable (if truthy, returns false)
* 2. PAC CLI usersettings.json file in %LOCALAPPDATA%\Microsoft\PowerAppsCli
*
* @returns `false` if explicitly disabled, `true` if explicitly enabled, `undefined` if not configured
*/
function isPacCliTelemetryEnabled() {
if (isTruthy(process.env.PAC_CLI_TELEMETRY_OPTOUT)) {
return false;
}
const localAppData = process.env.LOCALAPPDATA;
if (!localAppData) {
return undefined;
}
const userSettingsPath = path.join(localAppData, 'Microsoft', 'PowerAppsCli', 'usersettings.json');
if (!fs.existsSync(userSettingsPath)) {
return undefined;
}
try {
const raw = fs.readFileSync(userSettingsPath, 'utf-8');
const parsed = JSON.parse(raw);
return typeof parsed.telemetryEnabled === 'boolean' ? parsed.telemetryEnabled : undefined;
}
catch (error) {
printWarning(`Failed to read PAC CLI telemetry settings: ${error.message}`);
return undefined;
}
}
/**
* Resolves the effective user telemetry settings by merging defaults, user config file, and environment overrides.
*
* Resolution priority (highest to lowest):
* 1. Environment variable overrides:
* - POWERAPPS_CLI_TELEMETRY=0/false/no/off forces `enabled: false`
* - PAC_CLI_TELEMETRY_OPTOUT or PAC CLI usersettings.json `telemetryEnabled: false` forces `enabled: false`
* 2. PowerApps CLI user settings file (~/.powerapps-cli/settings.json)
* 3. Default values: `{ enabled: true, consoleOnly: false, outputToConsole: false }`
*
* @returns Resolved telemetry configuration with enabled, consoleOnly, and outputToConsole flags
*/
export function resolveUserTelemetrySettings() {
const resolved = {
enabled: true,
consoleOnly: false,
outputToConsole: false,
};
const cliUserSettingsPath = path.join(CLI_CONFIG_DIRECTORY, USER_SETTINGS_FILE);
if (fs.existsSync(cliUserSettingsPath)) {
try {
const fileContents = fs.readFileSync(cliUserSettingsPath, 'utf-8');
const parsed = JSON.parse(fileContents);
resolved.enabled = parsed.enabled ?? resolved.enabled;
resolved.consoleOnly = parsed.consoleOnly ?? resolved.consoleOnly;
resolved.outputToConsole = parsed.outputToConsole ?? resolved.outputToConsole;
}
catch (error) {
printWarning(`Failed to read CLI telemetry settings: ${error.message}`);
}
}
if (process.env.POWERAPPS_CLI_TELEMETRY !== undefined &&
isFalsy(process.env.POWERAPPS_CLI_TELEMETRY)) {
resolved.enabled = false;
}
const pacCliSetting = isPacCliTelemetryEnabled();
if (typeof pacCliSetting === 'boolean' && pacCliSetting === false) {
resolved.enabled = false;
}
return resolved;
}
//# sourceMappingURL=LoggerSettings.js.map
@@ -0,0 +1 @@
{"version":3,"file":"LoggerSettings.js","sourceRoot":"","sources":["../../src/Logger/LoggerSettings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
import type { Region } from '@microsoft/power-apps-common/services';
import { type TelemetryLocation } from '@microsoft/power-apps-common/telemetry';
import type { ITelemetryWriter } from '../Types/LoggerTypes.types.js';
export declare class OneDSWriter implements ITelemetryWriter {
private _provider;
private _sequenceNumber;
constructor(sessionId: string, region: Region, telemetryLocation: TelemetryLocation, environmentId: string, appId: string, geoLocation: string | undefined, cliVersion: string, cliSource: string);
trackActivityEvent(operationName: string, eventData?: object): void;
trackErrorEvent(operationName: string, eventData?: object): void;
startScenario(scenarioName: string, startData?: object): void;
completeScenario(scenarioName: string, completeData?: object): void;
scenarioFailed(scenarioName: string, failureData?: object): void;
scenarioCompletedWithError(scenarioName: string, completeWithErrorData?: object): void;
flush(): void;
setCustomDimension(_key: string, _value: string): void;
private static readonly _EVENT_PREFIX;
private _trackEvent;
}
//# sourceMappingURL=OneDSWriter.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"OneDSWriter.d.ts","sourceRoot":"","sources":["../../src/Logger/OneDSWriter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AACpE,OAAO,EAIL,KAAK,iBAAiB,EACvB,MAAM,wCAAwC,CAAC;AAGhD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAgBnE,qBAAa,WAAY,YAAW,gBAAgB;IAClD,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,eAAe,CAAa;gBAGlC,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;IAoDZ,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;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,IAAI;IAIb,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAI7D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAkB;IAEvD,OAAO,CAAC,WAAW;CA0BpB"}
@@ -0,0 +1,137 @@
import { OneDsTelemetryProvider, ScenarioResults, TelemetryEventNames, } from '@microsoft/power-apps-common/telemetry';
import { getScrubbedCustomDimensions } from './Scrubber/ScrubCustomDimensions.js';
function regionToClusterCategory(region) {
switch (region) {
case 'preview':
return 'prod';
case 'gccmoderate':
return 'gov';
case 'gcchigh':
return 'high';
default:
return region;
}
}
export class OneDSWriter {
_provider;
_sequenceNumber = 1;
constructor(sessionId, region, telemetryLocation, environmentId, appId, geoLocation, cliVersion, cliSource) {
const commonProperties = {
environmentId,
isOnePlayer: 'false',
webPlayerScenario: 'CodeApp_CLI_Authoring',
cloud: region === 'preview' ? 'prod' : region,
sessionStartTime: new Date().toISOString(),
station: 'Unknown',
telemetryLocation,
cliVersion,
cliSource,
};
if (appId) {
commonProperties.playerAppId = `/providers/Microsoft.PowerApps/apps/${appId}`;
}
if (geoLocation) {
commonProperties.geoLocation = geoLocation;
}
this._provider = new OneDsTelemetryProvider({
clientType: cliSource === 'pac-cli' ? 'PacCLI' : 'NodeCLI',
clusterCategory: regionToClusterCategory(region),
telemetryLocation,
commonProperties,
propertyColumnMap: {
latencyInMs: 'duration',
elapsedTime: 'duration',
updateCadence: 'updateCadence',
requestedUrl: 'url',
status: 'httpStatus',
statusCode: 'httpStatus',
},
channelConfig: {
maxEvtPerBatch: 500,
maxEventRetryAttempts: 6,
eventsLimitInMem: 10000,
},
});
this._provider.sessionId = sessionId;
// Sync 1DS session id with CLI session id in Part A extension
this._provider.addTelemetryInitializer((envelope) => {
const ext = (envelope.ext = envelope.ext ?? {});
const app = (ext.app = ext.app ?? {});
app.sesId = sessionId;
});
}
trackActivityEvent(operationName, eventData) {
this._trackEvent(TelemetryEventNames.Activity, {
...eventData,
operationName,
});
}
trackErrorEvent(operationName, eventData) {
this._trackEvent(TelemetryEventNames.Error, {
...eventData,
operationName,
});
}
startScenario(scenarioName, startData) {
this._trackEvent(TelemetryEventNames.StartScenario, {
operationName: scenarioName,
...startData,
scenarioName,
});
}
completeScenario(scenarioName, completeData) {
this._trackEvent(TelemetryEventNames.EndScenario, {
operationName: scenarioName,
...completeData,
scenarioName,
scenarioResult: ScenarioResults.Success,
});
}
scenarioFailed(scenarioName, failureData) {
this._trackEvent(TelemetryEventNames.EndScenario, {
operationName: scenarioName,
...failureData,
scenarioName,
scenarioResult: ScenarioResults.Failed,
});
}
scenarioCompletedWithError(scenarioName, completeWithErrorData) {
this._trackEvent(TelemetryEventNames.EndScenario, {
operationName: scenarioName,
...completeWithErrorData,
scenarioName,
scenarioResult: ScenarioResults.SuccessWithErrors,
});
}
flush() {
this._provider.flush();
}
setCustomDimension(_key, _value) {
this._provider.setDefaultProperty(_key, _value);
}
static _EVENT_PREFIX = 'CodeAppsCLI.';
_trackEvent(eventName, eventData) {
const operationName = eventData.operationName || '';
const scrubbed = getScrubbedCustomDimensions(eventName, operationName, eventData);
const properties = {};
for (const [key, value] of Object.entries(scrubbed)) {
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
properties[key] = value;
}
else {
properties[key] = String(value);
}
}
if (operationName) {
properties.operationName = `${OneDSWriter._EVENT_PREFIX}${operationName}`;
}
this._provider.track({
eventName,
timestamp: new Date().toISOString(),
severity: 'info',
sequenceNumber: this._sequenceNumber++,
properties,
});
}
}
//# sourceMappingURL=OneDSWriter.js.map
@@ -0,0 +1 @@
{"version":3,"file":"OneDSWriter.js","sourceRoot":"","sources":["../../src/Logger/OneDSWriter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
export declare function getScrubbedCustomDimensions(eventName: string, operationName: string, customDimensions: object): object;
//# sourceMappingURL=ScrubCustomDimensions.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"ScrubCustomDimensions.d.ts","sourceRoot":"","sources":["../../../src/Logger/Scrubber/ScrubCustomDimensions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAwCR"}
@@ -0,0 +1,46 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
import { EventsToScrubConfig } from './ScrubCustomDimensionsConfig.js';
// note: This code is copied from powerapps-telemetry-utils package
// to avoid adding that package as a dependency to powerapps-player-cli package
// powerapps-player-cli is a published package, and powerapps-telemetry-utils is not => pa-client-build does not support this scenario yet
export function getScrubbedCustomDimensions(eventName, operationName, customDimensions) {
// To avoid the performance impact of scrubbing all events, we want to target specific events to scrub
const eventConfig = EventsToScrubConfig[eventName];
if (eventConfig) {
const scenarioName = customDimensions.scenarioName || '';
const scrubConfigList = eventConfig['*'] ||
eventConfig.operations?.[operationName] ||
eventConfig.scenarios?.[scenarioName];
if (scrubConfigList) {
let currentScrubberName;
try {
const value = JSON.stringify(customDimensions);
for (const { scrubberName, shouldScrubValue } of scrubConfigList) {
currentScrubberName = scrubberName;
if (shouldScrubValue(value)) {
return {
eventName,
operationName,
scenarioName,
scrubber: currentScrubberName,
message: '_scrubbedByPowerAppsTelemetryUtils_: Custom dimensions were scrubbed by host',
};
}
}
}
catch (error) {
return {
eventName,
operationName,
scenarioName,
scrubber: currentScrubberName,
message: '_scrubbedByPowerAppsTelemetryUtils_: Failed to parse custom dimensions while scrubbing',
};
}
}
}
return customDimensions;
}
//# sourceMappingURL=ScrubCustomDimensions.js.map
@@ -0,0 +1 @@
{"version":3,"file":"ScrubCustomDimensions.js","sourceRoot":"","sources":["../../../src/Logger/Scrubber/ScrubCustomDimensions.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,mEAAmE;AACnE,+EAA+E;AAC/E,0IAA0I;AAC1I,MAAM,UAAU,2BAA2B,CACzC,SAAiB,EACjB,aAAqB,EACrB,gBAAwB;IAExB,sGAAsG;IACtG,MAAM,WAAW,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,YAAY,GAAI,gBAA8C,CAAC,YAAY,IAAI,EAAE,CAAC;QACxF,MAAM,eAAe,GACnB,WAAW,CAAC,GAAG,CAAC;YAChB,WAAW,CAAC,UAAU,EAAE,CAAC,aAAa,CAAC;YACvC,WAAW,CAAC,SAAS,EAAE,CAAC,YAAY,CAAC,CAAC;QACxC,IAAI,eAAe,EAAE,CAAC;YACpB,IAAI,mBAAuC,CAAC;YAC5C,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;gBAC/C,KAAK,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,IAAI,eAAe,EAAE,CAAC;oBACjE,mBAAmB,GAAG,YAAY,CAAC;oBACnC,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC5B,OAAO;4BACL,SAAS;4BACT,aAAa;4BACb,YAAY;4BACZ,QAAQ,EAAE,mBAAmB;4BAC7B,OAAO,EACL,8EAA8E;yBACjF,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,SAAS;oBACT,aAAa;oBACb,YAAY;oBACZ,QAAQ,EAAE,mBAAmB;oBAC7B,OAAO,EACL,wFAAwF;iBAC3F,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,27 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
export type ScrubConfig = {
scrubberName: string;
shouldScrubValue: (value: string) => boolean;
};
export type ScrubConfigList = ScrubConfig[];
export type EventConfig = {
/** When assigned, this will apply the given scrub config list if the event_Name matches */
['*']?: ScrubConfigList;
/**
* This configuration is a mapping of Record<operation_Name, ScrubConfigList>
* When assigned, any event that matches the event_Name and operation_Name will be scrubbed
*/
operations?: Record<string, ScrubConfigList>;
/**
* This configuration is a mapping of Record<scenarioName, ScrubConfigList>
* When assigned, any event that matches the event_Name and scenarioName will be scrubbed
*/
scenarios?: Record<string, ScrubConfigList>;
};
/**
* This configuration is a mapping of Record<event_Name, EventConfig>
*/
export declare const EventsToScrubConfig: Record<string, EventConfig>;
//# sourceMappingURL=ScrubCustomDimensionsConfig.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"ScrubCustomDimensionsConfig.d.ts","sourceRoot":"","sources":["../../../src/Logger/Scrubber/ScrubCustomDimensionsConfig.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,MAAM,MAAM,WAAW,GAAG;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,WAAW,EAAE,CAAC;AAE5C,MAAM,MAAM,WAAW,GAAG;IACxB,2FAA2F;IAC3F,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC7C;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC7C,CAAC;AAyBF;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA8I3D,CAAC"}
@@ -0,0 +1,168 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
import { containsEmail, containsGoogleApiKey, containsSasKeySig, containsSymmKey256, } from './ScrubUtils.js';
const EmailScrubConfig = {
scrubberName: 'email',
shouldScrubValue: containsEmail,
};
const GoogleApiKeyScrubConfig = {
scrubberName: 'googleApiKey',
shouldScrubValue: containsGoogleApiKey,
};
const SasKeySigScrubConfig = {
scrubberName: 'sasKeySig',
shouldScrubValue: containsSasKeySig,
};
const SymmKey256ScrubConfig = {
scrubberName: 'symmKey256',
shouldScrubValue: containsSymmKey256,
};
/** A scrub config list for handling events with sas keys. Currently this just scrubs the sig */
const SasKeyScrubConfigList = [SasKeySigScrubConfig];
/**
* This configuration is a mapping of Record<event_Name, EventConfig>
*/
export const EventsToScrubConfig = {
'AppHostClientSDK.getCanvasAppMetadataAsync': {
'*': SasKeyScrubConfigList,
},
'AppModuleMetadataProvider.getCanvasAppMetadataAsync.Failure': {
'*': SasKeyScrubConfigList,
},
'AppModuleMetadataProvider.getRootAppMetadataAsync.Failure': {
'*': SasKeyScrubConfigList,
},
CustomPageInlineRendering: {
'*': SasKeyScrubConfigList,
},
'DefaultCanvasAppContainer.renderAsync': {
'*': SasKeyScrubConfigList,
},
'FilePluginService.GetFileOrDirectory': {
'*': SasKeyScrubConfigList,
},
'Player.CanvasAppGlue.openErrorDialog': {
'*': SasKeyScrubConfigList,
},
'PlayerCordovaPlugin.onPluginRequestFailure': {
'*': SasKeyScrubConfigList,
},
'PowerAppsClient.Activity': {
operations: {
'App.disposeAsync': SasKeyScrubConfigList,
'GlobalControlProperty.setModelValueInternal': SasKeyScrubConfigList,
'IDataRuntime.reportRuntimeError': SasKeyScrubConfigList,
'IDataRuntime.tryCreateGatedReportRuntimeError': [
GoogleApiKeyScrubConfig,
SasKeySigScrubConfig,
],
'PassThroughWebUriResolver.getAsBinaryAsync': SasKeyScrubConfigList,
'PerEndpointRetryPipeline._xhrWithRetryAsync': SasKeyScrubConfigList,
'Player.AppCatalog.GetAppDetailByIDSuccess': SasKeyScrubConfigList,
'Player.CanvasAppGlue.exitAppHost': SasKeyScrubConfigList,
'Player.CustomBranding.RPResponse': SasKeyScrubConfigList,
'Player.CustomBranding.Save': SasKeyScrubConfigList,
'Player.PublishedApp.Open.AppInfo': SasKeyScrubConfigList,
'Player.PublishedApp.WebServer.Start': SasKeyScrubConfigList,
'PlayerLifecycle.WebPlayer.Play.ErrorPage': SasKeyScrubConfigList,
'PowerAppsClient.PcfComponent.Failure': SasKeyScrubConfigList,
'PowerAppsClient.Performance.PerformanceObserver': SasKeyScrubConfigList,
'PowerAppsEmbedding.Automation.Player': SasKeyScrubConfigList,
'CachedQueryDataProvider._onDataDownloaded': [EmailScrubConfig],
'CachedQueryDataProvider._getDataForExpiredCacheAsync': [EmailScrubConfig],
},
},
'PowerAppsClient.AllApps.App.DismissedWithError': {
'*': SasKeyScrubConfigList,
},
'PowerAppsClient.App.GalleryPagingManagerError': {
'*': SasKeyScrubConfigList,
},
'PowerAppsClient.ControlsActivity': {
operations: {
'Attachments.OnView': SasKeyScrubConfigList,
},
},
'PowerAppsClient.EndScenario': {
scenarios: {
'PowerAppsClient.Scenario.ContextLoadApp': SasKeyScrubConfigList,
'PowerAppsClient.Scenario.DocumentVmInitialize': SasKeyScrubConfigList,
'PowerAppsClient.Scenario.ScreenCreation': SasKeyScrubConfigList,
'PlayerLifecycle.PlayerSDK.PlayApp.LoadApp.CreateAppFrame': SasKeyScrubConfigList,
'PlayerLifecycle.PlayerSDK.PlayApp.LoadApp': SasKeyScrubConfigList,
'PlayerLifecycle.PlayerSDK.PlayApp.LoadMetadata.FetchAppPackageMetadata': SasKeyScrubConfigList,
'PlayerLifecycle.PlayerSDK.PlayApp': SasKeyScrubConfigList,
'PlayerLifecycle.WebPlayer.Play.PlayApp': SasKeyScrubConfigList,
'PlayerLifecycle.WebPlayer.Play': SasKeyScrubConfigList,
'PowerAppsClient.Scenario.CachedQueryDataProviderNotify': [EmailScrubConfig],
},
},
'PowerAppsClient.Error': {
operations: {
'AppInfoParser.parseAppInfo': SasKeyScrubConfigList,
'AppLifecyclePlugin.notifyAppFailed': SasKeyScrubConfigList,
'AttachmentsView._viewItem': SasKeyScrubConfigList,
'BaseWebPlayerHost._onAppFailure': SasKeyScrubConfigList,
'Context.loadAppAsync': SasKeyScrubConfigList,
'DocumentViewModel.initializeAsync': SasKeyScrubConfigList,
'GeneratedCode.ReportAndContinue': SasKeyScrubConfigList,
'MediaRuntime.getMediaAsBinaryAsync': SasKeyScrubConfigList,
'NestedAppModuleMetadataProvider.getCanvasAppMetadataAsync.Failure': SasKeyScrubConfigList,
'Player.SessionSummary.Failure': SasKeyScrubConfigList,
'PlayerLaunchService.playerLaunchAppAsync': SasKeyScrubConfigList,
'PlayerPublishedApp._onInitializationError': SasKeyScrubConfigList,
'PowerAppsClient.PublishedApp.ErrorLoadingScript': SasKeyScrubConfigList,
'PublishedAppHostActions.handleErrorDuringInstall': SasKeyScrubConfigList,
'PublishedAppInstance.runAllScreensInitFnsAsync': SasKeyScrubConfigList,
'RNSendHttpPipeline._performXhrRequestAsync': [SymmKey256ScrubConfig],
'RequirementsManager.loadRequirement': SasKeyScrubConfigList,
'runtimebase._onCallFailed': SasKeyScrubConfigList,
'Text._validateTextWithCharacters': SasKeyScrubConfigList,
'Url.constructor': SasKeyScrubConfigList,
},
},
'PowerAppsClient.Functions.InternalError': {
'*': SasKeyScrubConfigList,
},
'PowerAppsClient.MessageDialog.Dismissed': {
operations: {
'Studio.Reducers.STUDIO_UPDATE_CONNECTION_TABLES_LOADING_ERROR_INFO': SasKeyScrubConfigList,
},
},
'PowerAppsClient.MessageDialog.ShowAsync': {
operations: {
'Studio.Reducers.STUDIO_UPDATE_CONNECTION_TABLES_LOADING_ERROR_INFO': SasKeyScrubConfigList,
},
},
'PowerAppsClient.StartScenario': {
scenarios: {
'PowerAppsClient.Scenario.CachedQueryDataProviderNotify': [EmailScrubConfig],
},
},
'PowerAppsClient.Verbose': {
operations: {
'ReactRedux.HandleActionsWithReset': SasKeyScrubConfigList,
},
},
'PowerAppsClient.WebPlayer.Load': {
operations: {
'PowerAppsClient._notifyAppFailed': SasKeyScrubConfigList,
'PowerAppsClient.AppDetailsRetriever._getAppDetailsInternal.Failure': SasKeyScrubConfigList,
'PowerAppsClient.ResourcePathResolution': SasKeyScrubConfigList,
},
},
'PublishedAppLoader.ScriptError': {
operations: {
'GlobalErrorHandler:UnhandledError': SasKeyScrubConfigList,
'PowerAppsClient.AppDetailsRetriever._getAppDetailsInternal.Failure': SasKeyScrubConfigList,
},
},
'RuntimeTelemetry.logException': {
'*': SasKeyScrubConfigList,
},
'TestOrchestrator.setupTestsAsync': {
'*': SasKeyScrubConfigList,
},
};
//# sourceMappingURL=ScrubCustomDimensionsConfig.js.map
@@ -0,0 +1 @@
{"version":3,"file":"ScrubCustomDimensionsConfig.js","sourceRoot":"","sources":["../../../src/Logger/Scrubber/ScrubCustomDimensionsConfig.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
export declare function containsEmail(value: string): boolean;
export declare function containsGoogleApiKey(value: string): boolean;
export declare function containsSasKeySig(value: string): boolean;
export declare function containsSymmKey256(value: string): boolean;
//# sourceMappingURL=ScrubUtils.d.ts.map
@@ -0,0 +1 @@
{"version":3,"file":"ScrubUtils.d.ts","sourceRoot":"","sources":["../../../src/Logger/Scrubber/ScrubUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyBH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzD"}
@@ -0,0 +1,34 @@
/*!
* Copyright (C) Microsoft Corporation. All rights reserved.
*/
// These values should align with cred scan: https://msazure.visualstudio.com/One/_git/SecEng-CredScan-Core?path=/KnowledgeBase/Prefilter/CredScan-Kusto-UDF.kql
const GoogleApiKeyRegex = /AIza[a-z0-9_\\-]{35}/i;
const SymmKey256Regex = /[a-z0-9\/+]{43}=/i; // eslint-disable-line no-useless-escape
// Regex adapted from CredScan:
// https://dev.azure.com/msazure/One/_git/SecEng-CredScan-Core?path=/KnowledgeBase/samples/CredScanClientHelloWorld/Security.SharedStrings.Internal.txt&version=GC0612bfb7be3c3f60b1896992118f1a110013320d&line=225&lineEnd=226&lineStartColumn=1&lineEndColumn=1&lineStyle=plain&_a=contents
// Modifications from original:
// 1. Converted from PCRE to JS regex
// 2. Replaced named captures with non-capturing groups
// 3. Remove the URL and just leave the sig=
// 4. Add _ and & to the negated char (handles sig=_scrubbedSensitiveData_)
// 5. Require 8 characters after the sig= (handles things like sig=43chars)
const SasKeyRegex = /(?:dsas_secret|sig)=[^#\)\(<>\r\n\s'",\\_&]{8}/i; // eslint-disable-line no-useless-escape
// RFC 6530 spec https://tools.ietf.org/html/rfc6530
// A nice set of test cases: http://isemail.info/_system/is_email/test/?all
// How to compile ranges of Unicode characters that are likely to be used in email addresses: http://apps.timwhitlock.info/js/regex
/* eslint-disable no-misleading-character-class, no-useless-escape */
const emailRegExp = new RegExp(/[a-zA-Z0-9\u0080-\u00FF\u0100-\u017F\u0180-\u024F\u0250-\u02AF\u0300-\u036F\u0370-\u03FF\u0400-\u04FF\u0500-\u052F\u0530-\u058F\u0590-\u05FF\u0600-\u06FF\u0700-\u074F\u0750-\u077F\u0780-\u07BF\u07C0-\u07FF\u0900-\u097F\u0980-\u09FF\u0A00-\u0A7F\u0A80-\u0AFF\u0B00-\u0B7F\u0B80-\u0BFF\u0C00-\u0C7F\u0C80-\u0CFF\u0D00-\u0D7F\u0D80-\u0DFF\u0E00-\u0E7F\u0E80-\u0EFF\u0F00-\u0FFF\u1000-\u109F\u10A0-\u10FF\u1100-\u11FF\u1200-\u137F\u1380-\u139F\u13A0-\u13FF\u1400-\u167F\u1680-\u169F\u16A0-\u16FF\u1700-\u171F\u1720-\u173F\u1740-\u175F\u1760-\u177F\u1780-\u17FF\u1800-\u18AF\u1900-\u194F\u1950-\u197F\u1980-\u19DF\u19E0-\u19FF\u1A00-\u1A1F\u1B00-\u1B7F\u1D00-\u1D7F\u1D80-\u1DBF\u1DC0-\u1DFF\u1E00-\u1EFF\u1F00-\u1FFF\u20D0-\u20FF\u2100-\u214F\u2C00-\u2C5F\u2C60-\u2C7F\u2C80-\u2CFF\u2D00-\u2D2F\u2D30-\u2D7F\u2D80-\u2DDF\u2F00-\u2FDF\u2FF0-\u2FFF\u3040-\u309F\u30A0-\u30FF\u3100-\u312F\u3130-\u318F\u3190-\u319F\u31C0-\u31EF\u31F0-\u31FF\u3200-\u32FF\u3300-\u33FF\u3400-\u4DBF\u4DC0-\u4DFF\u4E00-\u9FFF\uA000-\uA48F\uA490-\uA4CF\uA700-\uA71F\uA800-\uA82F\uA840-\uA87F\uAC00-\uD7AF\uF900-\uFAFF\.!#$%&'*+?^_{|}~\-\d]+(@|%40)[a-zA-Z0-9\u0080-\u00FF\u0100-\u017F\u0180-\u024F\u0250-\u02AF\u0300-\u036F\u0370-\u03FF\u0400-\u04FF\u0500-\u052F\u0530-\u058F\u0590-\u05FF\u0600-\u06FF\u0700-\u074F\u0750-\u077F\u0780-\u07BF\u07C0-\u07FF\u0900-\u097F\u0980-\u09FF\u0A00-\u0A7F\u0A80-\u0AFF\u0B00-\u0B7F\u0B80-\u0BFF\u0C00-\u0C7F\u0C80-\u0CFF\u0D00-\u0D7F\u0D80-\u0DFF\u0E00-\u0E7F\u0E80-\u0EFF\u0F00-\u0FFF\u1000-\u109F\u10A0-\u10FF\u1100-\u11FF\u1200-\u137F\u1380-\u139F\u13A0-\u13FF\u1400-\u167F\u1680-\u169F\u16A0-\u16FF\u1700-\u171F\u1720-\u173F\u1740-\u175F\u1760-\u177F\u1780-\u17FF\u1800-\u18AF\u1900-\u194F\u1950-\u197F\u1980-\u19DF\u19E0-\u19FF\u1A00-\u1A1F\u1B00-\u1B7F\u1D00-\u1D7F\u1D80-\u1DBF\u1DC0-\u1DFF\u1E00-\u1EFF\u1F00-\u1FFF\u20D0-\u20FF\u2100-\u214F\u2C00-\u2C5F\u2C60-\u2C7F\u2C80-\u2CFF\u2D00-\u2D2F\u2D30-\u2D7F\u2D80-\u2DDF\u2F00-\u2FDF\u2FF0-\u2FFF\u3040-\u309F\u30A0-\u30FF\u3100-\u312F\u3130-\u318F\u3190-\u319F\u31C0-\u31EF\u31F0-\u31FF\u3200-\u32FF\u3300-\u33FF\u3400-\u4DBF\u4DC0-\u4DFF\u4E00-\u9FFF\uA000-\uA48F\uA490-\uA4CF\uA700-\uA71F\uA800-\uA82F\uA840-\uA87F\uAC00-\uD7AF\uF900-\uFAFF\-\.\d]+\.[a-zA-Z\u0080-\u00FF\u0100-\u017F\u0180-\u024F\u0250-\u02AF\u0300-\u036F\u0370-\u03FF\u0400-\u04FF\u0500-\u052F\u0530-\u058F\u0590-\u05FF\u0600-\u06FF\u0700-\u074F\u0750-\u077F\u0780-\u07BF\u07C0-\u07FF\u0900-\u097F\u0980-\u09FF\u0A00-\u0A7F\u0A80-\u0AFF\u0B00-\u0B7F\u0B80-\u0BFF\u0C00-\u0C7F\u0C80-\u0CFF\u0D00-\u0D7F\u0D80-\u0DFF\u0E00-\u0E7F\u0E80-\u0EFF\u0F00-\u0FFF\u1000-\u109F\u10A0-\u10FF\u1100-\u11FF\u1200-\u137F\u1380-\u139F\u13A0-\u13FF\u1400-\u167F\u1680-\u169F\u16A0-\u16FF\u1700-\u171F\u1720-\u173F\u1740-\u175F\u1760-\u177F\u1780-\u17FF\u1800-\u18AF\u1900-\u194F\u1950-\u197F\u1980-\u19DF\u19E0-\u19FF\u1A00-\u1A1F\u1B00-\u1B7F\u1D00-\u1D7F\u1D80-\u1DBF\u1DC0-\u1DFF\u1E00-\u1EFF\u1F00-\u1FFF\u20D0-\u20FF\u2100-\u214F\u2C00-\u2C5F\u2C60-\u2C7F\u2C80-\u2CFF\u2D00-\u2D2F\u2D30-\u2D7F\u2D80-\u2DDF\u2F00-\u2FDF\u2FF0-\u2FFF\u3040-\u309F\u30A0-\u30FF\u3100-\u312F\u3130-\u318F\u3190-\u319F\u31C0-\u31EF\u31F0-\u31FF\u3200-\u32FF\u3300-\u33FF\u3400-\u4DBF\u4DC0-\u4DFF\u4E00-\u9FFF\uA000-\uA48F\uA490-\uA4CF\uA700-\uA71F\uA800-\uA82F\uA840-\uA87F\uAC00-\uD7AF\uF900-\uFAFF]{2,63}/);
/* eslint-enable no-misleading-character-class, no-useless-escape */
export function containsEmail(value) {
return emailRegExp.test(value);
}
export function containsGoogleApiKey(value) {
return GoogleApiKeyRegex.test(value);
}
export function containsSasKeySig(value) {
return SasKeyRegex.test(value);
}
export function containsSymmKey256(value) {
return SymmKey256Regex.test(value);
}
//# sourceMappingURL=ScrubUtils.js.map
@@ -0,0 +1 @@
{"version":3,"file":"ScrubUtils.js","sourceRoot":"","sources":["../../../src/Logger/Scrubber/ScrubUtils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,gKAAgK;AAChK,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAClD,MAAM,eAAe,GAAG,mBAAmB,CAAC,CAAC,wCAAwC;AAErF,+BAA+B;AAC/B,6RAA6R;AAC7R,+BAA+B;AAC/B,qCAAqC;AACrC,uDAAuD;AACvD,4CAA4C;AAC5C,2EAA2E;AAC3E,2EAA2E;AAC3E,MAAM,WAAW,GAAG,iDAAiD,CAAC,CAAC,wCAAwC;AAE/G,qDAAqD;AACrD,2EAA2E;AAC3E,mIAAmI;AACnI,qEAAqE;AACrE,MAAM,WAAW,GAAG,IAAI,MAAM,CAC5B,ivGAAivG,CAClvG,CAAC;AACF,oEAAoE;AAEpE,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC"}