Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
970 changes: 377 additions & 593 deletions common/config/rush/npm-shrinkwrap.json

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions tools/applicationinsights-web-snippet/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
src/aiSnippet.ts
src/oneDSSnippet.ts
47 changes: 47 additions & 0 deletions tools/applicationinsights-web-snippet/createAiSnippet.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// createFile.js
const fs = require('fs');
const path = require('path');

// Define the path to the snippet.js file
const filePath = path.join(__dirname, 'src/snippet.ts'); // Adjust the path if necessary
const aiFilePath = path.join(__dirname, 'src/aiSnippet.ts');
const oneDSFilePath = path.join(__dirname, 'src/oneDSSnippet.ts');
// Read the snippet.js file
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error('Error reading file:', err);
process.exit(1);
}


let remove = data.replace(/let\s+isOneDS\s*=\s*\w+;/i, '');
// Check if the replace did anything
if (remove === data) {
// If no change was made, throw an error to break the build
throw new Error("Failed to remove 'let isOneDS' assignment. Possible content change.");
}

// Replace all occurrences of "checkplace" with "true"
let ai = remove.replace(/isOneDS/g, 'false');
ai = "// DO NOT EDIT - Automatically Generated\n" + ai;

// Write the modified content back to the file (or a new file if you prefer)
fs.writeFile(aiFilePath, ai, 'utf8', (err) => {
if (err) {
console.error('Error writing file:', err);
process.exit(1);
}
console.log('New File created successfully:', aiFilePath);
});

let oneDS = remove.replace(/isOneDS/g, 'true');
oneDS = "// DO NOT EDIT - Automatically Generated\n" + oneDS;
fs.writeFile(oneDSFilePath, oneDS, 'utf8', (err) => {
if (err) {
console.error('Error writing file:', err);
process.exit(1);
}
console.log('New File created successfully:', oneDSFilePath);
});
}
);
6 changes: 4 additions & 2 deletions tools/applicationinsights-web-snippet/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,15 @@
},
"scripts": {
"clean": "git clean -xdf",
"build": "npm run build:esm && npm run snippet-generate && npm run build:browser && npm run dtsgen",
"build": "npm run createIndividualSnippet && npm run build:esm && npm run snippet-generate && npm run build:browser && npm run dtsgen",
"createIndividualSnippet": "node createAiSnippet.js",
"build:esm": "grunt websnippet ",
"dtsgen": "api-extractor run --local && node ../../scripts/dtsgen.js \"Microsoft Application Insights Web Snippet\"",
"snippet-generate": "npm run build:snippet && npm run originSnippetCopy && npm run replace && npm run snippetCopy",
"snippet-generate": "npm run build:snippet && npm run build:oneDSsnippet && npm run originSnippetCopy && npm run replace && npm run snippetCopy",
"snippetCopy": "grunt snippetCopy",
"originSnippetCopy": "grunt originSnippetCopy",
"build:snippet": "rollup -c rollupSnippet.config.js --bundleConfigAsCjs",
"build:oneDSsnippet": "rollup -c rollupOneDSSnippet.config.js --bundleConfigAsCjs",
"replace": "grunt websnippetReplace",
"build:browser": "rollup -c rollup.config.js --bundleConfigAsCjs",
"rebuild": "npm run build",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { createUnVersionedConfig } from "../../rollup.base.config";

const snippetOutputName = "oneDSSnippet";
const snippetOutputPath = "../../build/output/oneDSSnippet";

export default createUnVersionedConfig("",
{
namespace: "oneDS",
version: "",
browser: {
entryPoint: snippetOutputName,
outputName: snippetOutputPath,
inputPath: "build/output",
formats: [{ format: 'cjs', postfix: '', useStrict: false, topLevel: true }],
},
},
[ "applicationinsights-web-snippet" ],
false
);
104 changes: 104 additions & 0 deletions tools/applicationinsights-web-snippet/src/1dsSupport.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
import { oneDsEnvelope } from "./1dsType";
import { _getTime } from "./support";


export function _createOneDsEnvelope(iKey: string, theType: string, _epoch: number, _sequence: number, sv: string): oneDsEnvelope {
let UInt32Mask = 0x100000000;
if (_epoch === 0) {
_epoch = Math.floor((UInt32Mask * Math.random()) | 0) >>> 0;
}
let envelope: oneDsEnvelope = {
data: {
baseData: {
ver: 2
}
},
ext: {
app: { sesId: "0000" },
intweb: {},
sdk: {
ver: "javascript:" + sv,
epoch: "" + _epoch,
seq: _sequence++
},
utc: {
popSample: 100
},
web: {
userConsent: false
}
},
time: _getTime(),
iKey: "o:" + _getTenantId(iKey),
name: theType,
ver: "4.0"
};
_addTimeZone(envelope);
_addUser(envelope);
return envelope;
}

function _getTenantId(apiKey: string): string {
let result: string = "";

if (apiKey) {
const indexTenantId: number = apiKey.indexOf("-");
if (indexTenantId > -1) {
result = apiKey.substring(0, indexTenantId);
}
}
return result;
}

function _addTimeZone(envelope: any): void {
// Add time zone
const timeZone: number = new Date().getTimezoneOffset();
let minutes: number = timeZone % 60;
let hours: number = (timeZone - minutes) / 60;
let timeZonePrefix: string = "+";
if (hours > 0) {
timeZonePrefix = "-";
}
hours = Math.abs(hours);
minutes = Math.abs(minutes);

envelope.ext = envelope.ext || {};
envelope.ext.loc = { // Add time zone
tz: timeZonePrefix + (hours < 10 ? "0" + hours : hours.toString()) + ":" + (minutes < 10 ? "0" + minutes : minutes.toString())
};
}

function _addUser(envelope: any): void {
const strUndefined: string = "undefined";
// Add user language
if (typeof navigator !== strUndefined) {
const nav: Navigator & { userLanguage?: string } = navigator;
envelope.ext = envelope.ext || {};
envelope.ext.user = {
locale: nav.userLanguage || nav.language
};
}
}

let track = "track";
let trackPage = "TrackPage";
let capturePage = "capturePage";


export const oneDsMethods = [
track + "Event",
track + "Exception",
trackPage + "View",
trackPage + "ViewPerformance",
"addTelemetryInitializer",
track,
trackPage + "Action",
track + "ContentUpdate",
trackPage + "Unload",
capturePage + "View",
capturePage + "ViewPerformance",
capturePage + "Action",
capturePage + "Unload",
"captureContentUpdate"
]

8 changes: 8 additions & 0 deletions tools/applicationinsights-web-snippet/src/1dsType.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export interface oneDsEnvelope {
data: any;
ext: any;
time: string;
iKey: string;
name: string;
ver: string;
}
59 changes: 59 additions & 0 deletions tools/applicationinsights-web-snippet/src/aiSupport.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import { IEnvelope } from "@microsoft/applicationinsights-common";
import { _getTime } from "./support";

let strEmpty = "";



export function _createAiEnvelope(iKey: string, theType: string, sv: string, version: number, locn: Location): IEnvelope {
let tags = {};
let type = "Browser";
let strAiDevice = "ai.device.";
let strAiOperationName = "ai.operation.name";
let strAiSdkVersion = "ai.internal.sdkVersion";
let strToLowerCase = "toLowerCase";
tags[strAiDevice + "id"] = type[strToLowerCase]();
tags[strAiDevice + "type"] = type;
tags[strAiOperationName] = locn && locn.pathname || "_unknown_";
tags[strAiSdkVersion] = "javascript:snippet_" + (sv || version);

let envelope:IEnvelope = {
time: _getTime(),
iKey: iKey,
name: "Microsoft.ApplicationInsights." + iKey.replace(/-/g, strEmpty) + "." + theType,
sampleRate: 100,
tags: tags,
data: {
baseData: {
ver: 2
}
},
ver: undefined,
seq: "1",
aiDataContract: undefined
};
return envelope;
}

let track = "track";
let trackPage = "TrackPage";
let trackEvent = "TrackEvent";

export const aiMethod = [
track + "Event",
track + "Exception",
trackPage + "View",
trackPage + "ViewPerformance",
"addTelemetryInitializer",
track + "Trace",
track + "DependencyData",
track + "Metric",
"start" + trackPage,
"stop" + trackPage,
"start" + trackEvent,
"stop" + trackEvent,
"setAuthenticatedUserContext",
"clearAuthenticatedUserContext",
"flush"
]

Loading