Socket
Socket
Sign inDemoInstall

@dynatrace/cordova-plugin

Package Overview
Dependencies
Maintainers
3
Versions
55
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@dynatrace/cordova-plugin - npm Package Compare versions

Comparing version 1.259.2 to 1.261.2

10

package.json
{
"name": "@dynatrace/cordova-plugin",
"version": "1.259.2",
"version": "1.261.2",
"description": "This plugin gives you the ability to use the Dynatrace instrumentation in your hybrid application (Cordova, Ionic, ..). It uses the Mobile Agent, the JavaScript Agent. The Mobile Agent will give you all device specific values containing lifecycle information and the Javascript Agent will allow you to manually instrument your JavaScript/TypeScript code out of the box (Typescript definitions included). The JavaScript Agent will cover the network calls and will automatically detect them.",

@@ -37,9 +37,8 @@ "cordova": {

"dependencies": {
"axios": "^1.3.3",
"axios": "^1.3.4",
"cordova-common": "^4.1.0",
"jsdom": "^21.1.0",
"jsdom": "^21.1.1",
"plist": "^3.0.6"
},
"devDependencies": {
"@types/fs-extra": "^9.0.12",
"@types/jest": "^29.2.0",

@@ -59,5 +58,4 @@ "@types/jsdom": "^20.0.1",

"cordova": "^11.0.0",
"fs-extra": "^10.0.0",
"jest": "^29.2.2",
"mock-fs": "^4.14.0",
"mock-fs": "^5.2.0",
"npm-check-updates": "^12.5.8",

@@ -64,0 +62,0 @@ "prettier": "^2.6.1",

33

README.md

@@ -18,2 +18,3 @@ [![N|Solid](https://assets.dynatrace.com/content/dam/dynatrace/misc/dynatrace_web.png)](https://dynatrace.com)

* Android Gradle plugin version 4.0+
* Java 11
* For iOS users: Minimum iOS 11

@@ -27,4 +28,4 @@ * For JavaScript Agent: access to API of cluster

* iOS Agent: 8.259.1.1009
* Android Agent: 8.259.1.1008
* iOS Agent: 8.261.1.1006
* Android Agent: 8.261.2.1013
## Quick Setup

@@ -51,2 +52,3 @@

* [JavaScript Agent Snippet Mode](#javascript-agent-snippet-mode)
* [HTML Instrumentation Requirements](#html-instrumentation-requirements)
* [Allow any certificate](#allow-any-certificate)

@@ -266,6 +268,7 @@ * [Manual instrumentation](#manual-instrumentation)

Basically all needed properties for the JavaScript Agent are predefined by the downloadable `dynatrace.config.js`. There are three available properties:
Basically all needed properties for the JavaScript Agent are predefined by the downloadable `dynatrace.config.js`. There are four available properties:
* `url` - Dynatrace API url to retrieve the JS agent script tag.
* `mode` - Values can be numbers 0-4 depending on what JavaScript Agent code snippet you want to use.
* `allowanycert` - Allows the plugin to ignore certificate issues when retrieving the JavaScript Agent.
* `htmlFiles` - A string array which allows you to specify .html files to be instrumented. **Note**: The `htmlFiles` property should only be used if you have html files that are not automatically instrumented by the plugin.

@@ -298,2 +301,20 @@

### HTML Instrumentation Requirements
When doing a build, the plugin searches through the assets folders of each platform (Android & iOS) to find suitable HTML files and instrument them. Currently, the instrumentation of an HTML file is triggered by the following patterns:
* HTML file contains a script with the src `cordova.js`
* HTML file contains an ionic tag like `ion-app` or `app-root`
* HTML files defined via dynatrace.config.js property `htmlFiles`
```js
module.exports = {
js : {
htmlFiles : ['public/index.html']
},
}
```
Be aware that relative paths will always be used based on the assets folder. Cordova or Capacitor will automatically sync your .html files to the assets folder of the platform used. For example, in Android this is usually `platforms/android/app/src/main/assets`.
### Allow any certificate

@@ -789,2 +810,8 @@

1.261.2
* Updated Android (8.261.2.1013) & iOS Agent (8.261.1.1006)
* Fixed file not found during doctor command
* Minimum Java Version was raised to 11
* Added [htmlFiles](#html-instrumentation-requirements) to dynatrace.config.js to customize instrumented html files
1.259.2

@@ -791,0 +818,0 @@ * Updated Android (8.259.1.1008) & iOS Agent (8.259.1.1009)

@@ -5,2 +5,3 @@ "use strict";

var path_1 = require("path");
var fs_1 = require("fs");
var FileHelper_1 = require("./helpers/FileHelper");

@@ -18,7 +19,11 @@ var Logger_1 = require("./logger/Logger");

var instrumentAndroidPlatform = function (pathToGradle, remove) {
var path = (0, FileHelper_1.checkIfFileExistsSync)(pathToGradle);
if (!path.endsWith('.gradle')) {
if ((0, fs_1.existsSync)(pathToGradle)) {
if (!pathToGradle.endsWith('.gradle')) {
throw new Error("Can't find .gradle file. gradle path must also include the gradle file!");
}
changeCordovaBuildGradleFile(pathToGradle, remove);
}
else {
throw new Error("Can't find .gradle file. gradle path must also include the gradle file!");
}
changeCordovaBuildGradleFile(path, remove);
};

@@ -25,0 +30,0 @@ exports.instrumentAndroidPlatform = instrumentAndroidPlatform;

@@ -40,2 +40,3 @@ "use strict";

exports.checkConfiguration = void 0;
var fs_1 = require("fs");
var FileHelper_1 = require("../helpers/FileHelper");

@@ -45,3 +46,3 @@ var Logger_1 = require("../logger/Logger");

var checkConfiguration = function () { return __awaiter(void 0, void 0, void 0, function () {
var pathToDynatraceConfig, e_1, defaultConfigContent;
var pathToDynatraceConfig, defaultConfigContent;
return __generator(this, function (_a) {

@@ -51,20 +52,12 @@ switch (_a.label) {

pathToDynatraceConfig = (0, PathHelper_1.getConfigFilePath)();
_a.label = 1;
if (!!(0, fs_1.existsSync)(pathToDynatraceConfig)) return [3, 3];
return [4, (0, FileHelper_1.readTextFromFile)((0, PathHelper_1.getDefaultConfig)())];
case 1:
_a.trys.push([1, 3, , 6]);
return [4, (0, FileHelper_1.checkIfFileExists)(pathToDynatraceConfig)];
case 2:
_a.sent();
return [3, 6];
case 3:
e_1 = _a.sent();
return [4, (0, FileHelper_1.readTextFromFile)((0, PathHelper_1.getDefaultConfig)())];
case 4:
defaultConfigContent = _a.sent();
return [4, (0, FileHelper_1.writeTextToFile)(pathToDynatraceConfig, defaultConfigContent)];
case 5:
case 2:
_a.sent();
Logger_1.Logger.getInstance().logInfo('Created dynatrace.config.js - Please insert your configuration and update the file!');
return [3, 6];
case 6: return [2];
_a.label = 3;
case 3: return [2];
}

@@ -71,0 +64,0 @@ });

@@ -6,6 +6,7 @@ "use strict";

var JavaScriptAgentConfiguration = (function () {
function JavaScriptAgentConfiguration(agentUrl, agentMode, allowAnyCertificate) {
function JavaScriptAgentConfiguration(agentUrl, agentMode, allowAnyCertificate, htmlFiles) {
this.agentUrl = agentUrl.replace(JavaScriptAgentMode_1.JAVA_SCRIPT_AGENT_MODE_NAMES[0], JavaScriptAgentMode_1.JAVA_SCRIPT_AGENT_MODE_NAMES[agentMode]);
this.agentMode = agentMode;
this.allowAnyCertificate = allowAnyCertificate;
this.htmlFiles = htmlFiles;
}

@@ -33,4 +34,7 @@ JavaScriptAgentConfiguration.prototype.getAgentUrl = function () {

};
JavaScriptAgentConfiguration.prototype.getHtmlFiles = function () {
return this.htmlFiles;
};
return JavaScriptAgentConfiguration;
}());
exports.JavaScriptAgentConfiguration = JavaScriptAgentConfiguration;

@@ -11,2 +11,3 @@ "use strict";

this.anyCertificateAllowed = JavaScriptAgentConfigurationConstants_1.DEFAULT_IS_ANY_CERTIFICATE_ALLOWED;
this.htmlFiles = [];
this.agentUrl = this.patchIncorrectJSUrl(agentUrl);

@@ -24,4 +25,8 @@ }

};
JavaScriptAgentConfigurationBuilder.prototype.setHtmlFiles = function (htmlFiles) {
this.htmlFiles = htmlFiles;
return this;
};
JavaScriptAgentConfigurationBuilder.prototype.build = function () {
return new JavaScriptAgentConfiguration_1.JavaScriptAgentConfiguration(this.agentUrl, this.agentMode, this.anyCertificateAllowed);
return new JavaScriptAgentConfiguration_1.JavaScriptAgentConfiguration(this.agentUrl, this.agentMode, this.anyCertificateAllowed, this.htmlFiles);
};

@@ -28,0 +33,0 @@ JavaScriptAgentConfigurationBuilder.prototype.patchIncorrectJSUrl = function (url) {

@@ -40,2 +40,3 @@ "use strict";

exports.DoctorAnalyzer = void 0;
var fs_1 = require("fs");
var Logger_1 = require("../logger/Logger");

@@ -56,3 +57,3 @@ var FileHelper_1 = require("../helpers/FileHelper");

_c.trys.push([0, 2, , 3]);
if (!(0, FileHelper_1.checkIfFileExistsSync)((0, PathHelper_1.getLogPath)())) {
if (!(0, fs_1.existsSync)((0, PathHelper_1.getLogPath)())) {
(0, FileHelper_1.createDirectorySync)((0, PathHelper_1.getLogPath)());

@@ -59,0 +60,0 @@ }

@@ -39,3 +39,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.getProjectBuilderAsString = exports.getDynatraceConfigAsObject = exports.getPlistAsPath = exports.isGradleAvailable = exports.isPlatformAvailable = exports.copyFileSync = exports.copyFile = exports.renameFileSync = exports.renameFile = exports.deleteFileSync = exports.deleteFile = exports.deleteDirectory = exports.createDirectorySync = exports.createDirectory = exports.writeTextToFileSync = exports.writeTextToFile = exports.readTextFromFile = exports.readTextFromFileSync = exports.checkIfFileExistsSync = exports.checkIfFileExists = exports.appendFileSync = exports.searchFileExtInDirectoryNonRecursive = exports.searchFileExtInDirectoryRecursive = exports.searchFilesInDirectoryRecursive = void 0;
exports.getProjectBuilderAsString = exports.getDynatraceConfigAsObject = exports.getPlistAsPath = exports.isGradleAvailable = exports.isPlatformAvailable = exports.copyFileSync = exports.copyFile = exports.renameFileSync = exports.renameFile = exports.deleteFileSync = exports.deleteFile = exports.deleteDirectory = exports.createDirectorySync = exports.createDirectory = exports.writeTextToFileSync = exports.writeTextToFile = exports.readTextFromFile = exports.readTextFromFileSync = exports.appendFileSync = exports.searchFileExtInDirectoryNonRecursive = exports.searchFileExtInDirectoryRecursive = exports.searchFilesInDirectoryRecursive = void 0;
var fs_1 = require("fs");

@@ -142,20 +142,2 @@ var path_1 = require("path");

exports.appendFileSync = appendFileSync;
var checkIfFileExists = function (_file) { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2, new Promise(function (resolve, reject) {
(0, fs_1.stat)(_file, function (err) {
if (err) {
reject("".concat(err, " - File doesn't exist: ").concat((0, path_1.resolve)(_file)));
}
resolve(_file);
});
})];
});
}); };
exports.checkIfFileExists = checkIfFileExists;
var checkIfFileExistsSync = function (_file) {
(0, fs_1.statSync)(_file);
return _file;
};
exports.checkIfFileExistsSync = checkIfFileExistsSync;
var readTextFromFileSync = function (_file) { return (0, fs_1.readFileSync)(_file, 'utf8'); };

@@ -332,10 +314,7 @@ exports.readTextFromFileSync = readTextFromFileSync;

var isPlatformAvailable = function (path, platform) {
try {
(0, exports.checkIfFileExistsSync)(path);
return true;
}
catch (e) {
if (!(0, fs_1.existsSync)(path)) {
Logger_1.Logger.getInstance().logWarning("".concat(platform, " Location doesn't exist - Skip ").concat(platform, " instrumentation and configuration."));
return false;
}
return true;
};

@@ -369,7 +348,6 @@ exports.isPlatformAvailable = isPlatformAvailable;

var getDynatraceConfigAsObject = function () {
try {
(0, exports.checkIfFileExistsSync)((0, PathHelper_1.getConfigFilePath)());
if ((0, fs_1.existsSync)((0, PathHelper_1.getConfigFilePath)())) {
return require((0, PathHelper_1.getConfigFilePath)());
}
catch (e) {
else {
return undefined;

@@ -380,7 +358,6 @@ }

var getProjectBuilderAsString = function () {
try {
(0, exports.checkIfFileExistsSync)((0, PathHelper_1.getAndroidGradleVersion)());
if ((0, fs_1.existsSync)((0, PathHelper_1.getAndroidGradleVersion)())) {
return (0, exports.readTextFromFileSync)((0, PathHelper_1.getAndroidGradleVersion)());
}
catch (e) {
else {
return undefined;

@@ -387,0 +364,0 @@ }

@@ -41,2 +41,3 @@ "use strict";

var path_1 = require("path");
var fs_1 = require("fs");
var Android_1 = require("../Android");

@@ -148,18 +149,13 @@ var Ios_1 = require("../Ios");

var removeGradleModification = function () { return __awaiter(void 0, void 0, void 0, function () {
var path, e_3;
var path;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 5, , 6]);
path = void 0;
if (!(0, PathHelper_1.isCapacitorApp)()) return [3, 2];
return [4, (0, FileHelper_1.checkIfFileExists)((0, PathHelper_1.getAndroidGradleFile)((0, PathHelper_1.getAndroidPathCapacitor)()))];
case 1:
path = _a.sent();
return [3, 4];
case 2: return [4, (0, FileHelper_1.checkIfFileExists)((0, PathHelper_1.getAndroidGradleFile)((0, PathHelper_1.getAndroidPath)()))];
case 3:
path = _a.sent();
_a.label = 4;
case 4:
try {
path = void 0;
if ((0, PathHelper_1.isCapacitorApp)()) {
path = (0, PathHelper_1.getAndroidGradleFile)((0, PathHelper_1.getAndroidPathCapacitor)());
}
else {
path = (0, PathHelper_1.getAndroidGradleFile)((0, PathHelper_1.getAndroidPath)());
}
if ((0, fs_1.existsSync)(path)) {
try {

@@ -171,8 +167,7 @@ (0, Android_1.instrumentAndroidPlatform)(path, true);

}
return [3, 6];
case 5:
e_3 = _a.sent();
return [3, 6];
case 6: return [2];
}
}
catch (e) {
}
return [2];
});

@@ -182,38 +177,33 @@ }); };

var removePListModification = function () { return __awaiter(void 0, void 0, void 0, function () {
var isCapacitor, e_4, e_5;
var isCapacitor, e_3, e_4;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 11, , 12]);
_a.trys.push([0, 8, , 9]);
isCapacitor = (0, PathHelper_1.isCapacitorApp)();
if (!isCapacitor) return [3, 2];
return [4, (0, FileHelper_1.checkIfFileExists)((0, PathHelper_1.getIosPlistPathCapacitor)())];
if (!(0, fs_1.existsSync)(isCapacitor ? (0, PathHelper_1.getIosPlistPathCapacitor)() : (0, PathHelper_1.getIosPath)())) {
return [2];
}
_a.label = 1;
case 1:
_a.trys.push([1, 6, , 7]);
if (!isCapacitor) return [3, 3];
return [4, (0, Ios_1.modifyPListFile)((0, PathHelper_1.getIosPlistPathCapacitor)(), undefined, true)];
case 2:
_a.sent();
return [3, 4];
case 2: return [4, (0, FileHelper_1.checkIfFileExists)((0, PathHelper_1.getIosPath)())];
case 3:
_a.sent();
_a.label = 4;
return [3, 5];
case 3: return [4, (0, Ios_1.modifyPListFile)(undefined, undefined, true)];
case 4:
_a.trys.push([4, 9, , 10]);
if (!isCapacitor) return [3, 6];
return [4, (0, Ios_1.modifyPListFile)((0, PathHelper_1.getIosPlistPathCapacitor)(), undefined, true)];
case 5:
_a.sent();
return [3, 8];
case 6: return [4, (0, Ios_1.modifyPListFile)(undefined, undefined, true)];
case 7:
_a.sent();
_a.label = 8;
case 8: return [3, 10];
case 9:
_a.label = 5;
case 5: return [3, 7];
case 6:
e_3 = _a.sent();
Logger_1.Logger.getInstance().logError("Removal of PList modification didn't work!");
return [3, 7];
case 7: return [3, 9];
case 8:
e_4 = _a.sent();
Logger_1.Logger.getInstance().logError("Removal of PList modification didn't work!");
return [3, 10];
case 10: return [3, 12];
case 11:
e_5 = _a.sent();
return [3, 12];
case 12: return [2];
return [3, 9];
case 9: return [2];
}

@@ -255,4 +245,4 @@ });

var isCapVersionThreeOneOrHigher = function (packageJson) {
var version = packageJson["version"];
return Number(version.substring(0, version.lastIndexOf("."))) >= 3.1;
var version = packageJson.version;
return Number(version.substring(0, version.lastIndexOf('.'))) >= 3.1;
};

@@ -285,3 +275,3 @@ exports.isCapVersionThreeOneOrHigher = isCapVersionThreeOneOrHigher;

var parsedPackageJson = function (path) { return __awaiter(void 0, void 0, void 0, function () {
var _a, _b, e_6;
var _a, _b, e_5;
return __generator(this, function (_c) {

@@ -295,4 +285,4 @@ switch (_c.label) {

case 2:
e_6 = _c.sent();
Logger_1.Logger.getInstance().logWarning('Error in parsedPackageJson => \n' + e_6 + '\nCould not find package.json!');
e_5 = _c.sent();
Logger_1.Logger.getInstance().logWarning('Error in parsedPackageJson => \n' + e_5 + '\nCould not find package.json!');
return [3, 3];

@@ -299,0 +289,0 @@ case 3: return [2];

@@ -85,5 +85,5 @@ "use strict";

var instrument = function (process) { return __awaiter(void 0, void 0, void 0, function () {
var _a, cliBuildArgs, jsagentContent, configJson, buildProperties, _b, _c, htmlInstrumentation, e_1, _d, htmlInstrumentation, e_2, e_3;
return __generator(this, function (_e) {
switch (_e.label) {
var _a, cliBuildArgs, jsagentContent, configJson, buildProperties, htmlFiles, htmlInstrumentation, e_1, htmlInstrumentation, e_2, e_3;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:

@@ -94,14 +94,14 @@ Logger_1.Logger.getInstance().logInfo('Starting Configuration of application ..');

case 1:
_a.apply(void 0, [_e.sent()]);
_a.apply(void 0, [_b.sent()]);
cliBuildArgs = (0, InstrumentUtil_1.setCliBuildArgs)(process);
buildProperties = (0, InstrumentUtil_1.setBuildProperties)(instrumentHelper.parseCommandLine(process.argv.slice(2)));
if (!((buildProperties.iosAvailable === true) || (buildProperties.androidAvailable === true))) return [3, 31];
if (!((buildProperties.iosAvailable === true) || (buildProperties.androidAvailable === true))) return [3, 26];
if (buildProperties.isCapacitor === false) {
(0, HtmlUtil_1.removeOldDtAgent)((0, PathHelper_1.getDownloadJSAgentPath)());
}
_e.label = 2;
_b.label = 2;
case 2:
_e.trys.push([2, 29, , 30]);
_b.trys.push([2, 24, , 25]);
Logger_1.Logger.getInstance().logInfo('Trying to read configuration file: ' + buildProperties.pathToConfig);
if (!(buildProperties.pathToConfig !== undefined)) return [3, 28];
if (!(buildProperties.pathToConfig !== undefined)) return [3, 23];
configJson = new ConfigurationReader_1.ConfigurationReader().readConfiguration(buildProperties.pathToConfig);

@@ -113,14 +113,18 @@ Logger_1.Logger.setType(LoggerType_1.LoggerType.FileLogger, configJson.getCordovaPluginConfiguration().isDebugEnabled());

case 3:
jsagentContent = _e.sent();
jsagentContent = _b.sent();
return [3, 6];
case 4: return [4, (0, DownloadAgent_1.downloadAgent)(configJson)];
case 5:
jsagentContent = _e.sent();
_e.label = 6;
jsagentContent = _b.sent();
_b.label = 6;
case 6:
htmlFiles = [];
if (configJson.getJavaScriptAgentConfiguration() !== undefined) {
htmlFiles = configJson.getJavaScriptAgentConfiguration().getHtmlFiles();
}
if (!((buildProperties.androidAvailable === true) &&
((cliBuildArgs.android === true) || cliBuildArgs.capacitor === 'android'))) return [3, 18];
_e.label = 7;
((cliBuildArgs.android === true) || cliBuildArgs.capacitor === 'android'))) return [3, 14];
_b.label = 7;
case 7:
_e.trys.push([7, 16, 17, 18]);
_b.trys.push([7, 12, 13, 14]);
Logger_1.Logger.getInstance().logInfo('Starting Android Configuration with Dynatrace!');

@@ -131,83 +135,70 @@ if (buildProperties.pathToGradle != null) {

(0, Android_1.writeGradleConfig)(configJson.getAndroidConfiguration());
_b = buildProperties;
if (!(buildProperties.isCapacitor === true)) return [3, 9];
return [4, (0, PathHelper_1.getAndroidAssetsPathCapacitor)()];
case 8:
_c = _e.sent();
return [3, 11];
case 9: return [4, (0, PathHelper_1.getAndroidAssetsPath)()];
case 10:
_c = _e.sent();
_e.label = 11;
case 11:
_b.androidAssetPath = _c;
buildProperties.androidAssetPath = (buildProperties.isCapacitor === true) ?
(0, PathHelper_1.getAndroidAssetsPathCapacitor)() : (0, PathHelper_1.getAndroidAssetsPath)();
if ((buildProperties.isCapacitor === false) && buildProperties.androidAssetPath) {
(0, HtmlUtil_1.removeOldDtAgent)((0, path_1.join)(buildProperties.androidAssetPath, 'assets', 'dtAgent.js'));
}
if (!(jsagentContent === undefined)) return [3, 12];
if (!(jsagentContent === undefined)) return [3, 8];
Logger_1.Logger.getInstance()
.logWarning('Not instrumenting HTML files since there is no available JSAgent to inject!');
return [3, 15];
case 12:
htmlInstrumentation = new HtmlInstrumentation_1.HTMLInstrumentation(buildProperties.androidAssetPath, jsagentContent, configJson.getCordovaPluginConfiguration().isCookieProxyEnabled());
return [3, 11];
case 8:
htmlInstrumentation = new HtmlInstrumentation_1.HTMLInstrumentation(buildProperties.androidAssetPath, jsagentContent, configJson.getCordovaPluginConfiguration().isCookieProxyEnabled(), htmlFiles);
return [4, htmlInstrumentation.instrument()];
case 13:
_e.sent();
case 9:
_b.sent();
return [4, (0, UpdateSecurity_1.updateSecurity)(buildProperties.androidAssetPath, configJson)];
case 14:
_e.sent();
_e.label = 15;
case 15: return [3, 18];
case 16:
e_1 = _e.sent();
case 10:
_b.sent();
_b.label = 11;
case 11: return [3, 14];
case 12:
e_1 = _b.sent();
if (e_1 instanceof Error) {
Logger_1.Logger.getInstance().logError(e_1.message);
}
return [3, 18];
case 17:
return [3, 14];
case 13:
Logger_1.Logger.getInstance().logInfo('Finished Android Configuration with Dynatrace!');
return [7];
case 18:
if (!((buildProperties.iosAvailable === true) && ((cliBuildArgs.ios === true) || cliBuildArgs.capacitor === 'ios'))) return [3, 28];
_e.label = 19;
case 19:
_e.trys.push([19, 26, 27, 28]);
case 14:
if (!((buildProperties.iosAvailable === true) && ((cliBuildArgs.ios === true) || cliBuildArgs.capacitor === 'ios'))) return [3, 23];
_b.label = 15;
case 15:
_b.trys.push([15, 21, 22, 23]);
Logger_1.Logger.getInstance().logInfo('Starting iOS Configuration with Dynatrace!');
return [4, (0, Ios_1.modifyPListFile)(buildProperties.pathToPList, configJson.getIosConfiguration(), false)];
case 20:
_e.sent();
_d = buildProperties;
return [4, (0, PathHelper_1.getIOSAssetsPath)()];
case 21:
_d.iosAssetsPath = _e.sent();
case 16:
_b.sent();
buildProperties.iosAssetsPath = (0, PathHelper_1.getIOSAssetsPath)();
if ((buildProperties.isCapacitor === false) && buildProperties.iosAssetsPath !== undefined) {
(0, HtmlUtil_1.removeOldDtAgent)((0, path_1.join)(buildProperties.iosAssetsPath, 'assets', 'dtAgent.js'));
}
if (!(jsagentContent === undefined)) return [3, 22];
if (!(jsagentContent === undefined)) return [3, 17];
Logger_1.Logger.getInstance().
logWarning('Not instrumenting HTML files since there is no available JSAgent to inject!');
return [3, 25];
case 22:
if (!(buildProperties.iosAssetsPath !== undefined)) return [3, 25];
htmlInstrumentation = new HtmlInstrumentation_1.HTMLInstrumentation(buildProperties.iosAssetsPath, jsagentContent, configJson.getCordovaPluginConfiguration().isCookieProxyEnabled());
return [3, 20];
case 17:
if (!(buildProperties.iosAssetsPath !== undefined)) return [3, 20];
htmlInstrumentation = new HtmlInstrumentation_1.HTMLInstrumentation(buildProperties.iosAssetsPath, jsagentContent, configJson.getCordovaPluginConfiguration().isCookieProxyEnabled(), htmlFiles);
return [4, htmlInstrumentation.instrument()];
case 23:
_e.sent();
case 18:
_b.sent();
return [4, (0, UpdateSecurity_1.updateSecurity)(buildProperties.iosAssetsPath, configJson)];
case 24:
_e.sent();
_e.label = 25;
case 25: return [3, 28];
case 26:
e_2 = _e.sent();
case 19:
_b.sent();
_b.label = 20;
case 20: return [3, 23];
case 21:
e_2 = _b.sent();
if (e_2 instanceof Error) {
Logger_1.Logger.getInstance().logError(e_2.message);
}
return [3, 28];
case 27:
return [3, 23];
case 22:
Logger_1.Logger.getInstance().logInfo('Finished iOS Configuration with Dynatrace!');
return [7];
case 28: return [3, 30];
case 29:
e_3 = _e.sent();
case 23: return [3, 25];
case 24:
e_3 = _b.sent();
if (e_3 instanceof Error) {

@@ -219,8 +210,8 @@ Logger_1.Logger.getInstance().logError(e_3.message);

}
return [3, 30];
case 30: return [3, 32];
case 31:
return [3, 25];
case 25: return [3, 27];
case 26:
Logger_1.Logger.getInstance().logWarning('Both Android and iOS Folder are not available - Skip Configuration.');
_e.label = 32;
case 32:
_b.label = 27;
case 27:
Logger_1.Logger.getInstance().logInfo('Finished Configuration of Cordova application ..');

@@ -227,0 +218,0 @@ Logger_1.Logger.getInstance().closeLogger();

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });

@@ -42,3 +6,2 @@ exports.isCapacitorApp = exports.getCapacitorConfig = exports.getCapCliPackage = exports.getIosAssetsPathCapacitor = exports.getAndroidAssetsPathCapacitor = exports.getIosPlistPathCapacitor = exports.getAndroidPathCapacitor = exports.getIosPathCapacitor = exports.getDynatracePluginGradleFile = exports.getDynatraceGradleFile = exports.getLogPath = exports.getCurrentLogPath = exports.getCookieProxyPath = exports.getSwallowApiPath = exports.getDownloadJSAgentPath = exports.getIOSAssetsPath = exports.getAndroidAssetsPath = exports.getConfigFilePath = exports.getDefaultConfig = exports.getAndroidGradleVersion = exports.dynatraceConfigExists = exports.isIonic = exports.getIonicConfig = exports.getDoctorLogPath = exports.getAndroidGradleFile = exports.getPluginPath = exports.getPluginPackage = exports.getAndroidPath = exports.getIosPath = exports.getApplicationPackage = exports.getApplicationPath = exports.setRoot = exports.FILE_COOKIE_PROXY = exports.FILE_SWALLOW_API = exports.FILE_JSAGENT = exports.FOLDER_ASSETS = void 0;

var fs_1 = require("fs");
var FileHelper_1 = require("./FileHelper");
var FOLDER_PLATFORMS = 'platforms';

@@ -79,3 +42,3 @@ exports.FOLDER_ASSETS = 'assets';

exports.getApplicationPackage = getApplicationPackage;
var getCapCliPackage = function () { return (0, path_1.join)(getApplicationPath(), FOLDER_NODE_MODULES, "@capacitor", "cli", FILE_PACKAGE); };
var getCapCliPackage = function () { return (0, path_1.join)(getApplicationPath(), FOLDER_NODE_MODULES, '@capacitor', 'cli', FILE_PACKAGE); };
exports.getCapCliPackage = getCapCliPackage;

@@ -90,49 +53,29 @@ var getIosPath = function () { return isCapacitorApp() ? getIosPathCapacitor() : (0, path_1.join)(getApplicationPath(), FOLDER_PLATFORMS, 'ios'); };

exports.getConfigFilePath = getConfigFilePath;
var getAndroidAssetsPath = function () { return __awaiter(void 0, void 0, void 0, function () {
var e_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 5, , 6]);
if (!isCapacitorApp()) return [3, 2];
return [4, (0, FileHelper_1.checkIfFileExists)((0, path_1.join)(getAndroidPathCapacitor(), FOLDER_ANDROID_APP, 'src', 'main', exports.FOLDER_ASSETS, 'public'))];
case 1: return [2, _a.sent()];
case 2: return [4, (0, FileHelper_1.checkIfFileExists)((0, path_1.join)(getAndroidPath(), exports.FOLDER_ASSETS, FOLDER_WWW))];
case 3: return [2, _a.sent()];
case 4: return [3, 6];
case 5:
e_1 = _a.sent();
if (isCapacitorApp()) {
return [2, (0, path_1.join)(getAndroidPathCapacitor(), FOLDER_ANDROID_APP, 'src', 'main', exports.FOLDER_ASSETS, 'public')];
}
else {
return [2, (0, path_1.join)(getAndroidPath(), FOLDER_ANDROID_APP, 'src', 'main', exports.FOLDER_ASSETS, FOLDER_WWW)];
}
return [3, 6];
case 6: return [2];
var getAndroidAssetsPath = function () {
if (isCapacitorApp()) {
if ((0, fs_1.existsSync)((0, path_1.join)(getAndroidPathCapacitor(), FOLDER_ANDROID_APP, 'src', 'main', exports.FOLDER_ASSETS, 'public'))) {
return (0, path_1.join)(getAndroidPathCapacitor(), FOLDER_ANDROID_APP, 'src', 'main', exports.FOLDER_ASSETS, 'public');
}
});
}); };
else {
return (0, path_1.join)(getAndroidPathCapacitor(), FOLDER_ANDROID_APP, 'src', 'main', exports.FOLDER_ASSETS, 'public');
}
}
else {
if ((0, fs_1.existsSync)((0, path_1.join)(getAndroidPath(), exports.FOLDER_ASSETS, FOLDER_WWW))) {
return (0, path_1.join)(getAndroidPath(), exports.FOLDER_ASSETS, FOLDER_WWW);
}
else {
return (0, path_1.join)(getAndroidPath(), FOLDER_ANDROID_APP, 'src', 'main', exports.FOLDER_ASSETS, FOLDER_WWW);
}
}
};
exports.getAndroidAssetsPath = getAndroidAssetsPath;
var getIOSAssetsPath = function () { return __awaiter(void 0, void 0, void 0, function () {
var _a, e_2;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
_b.trys.push([0, 4, , 5]);
if (!isCapacitorApp()) return [3, 1];
_a = getIosAssetsPathCapacitor();
return [3, 3];
case 1: return [4, (0, FileHelper_1.checkIfFileExists)((0, path_1.join)(getIosPath(), FOLDER_WWW))];
case 2:
_a = _b.sent();
_b.label = 3;
case 3: return [2, _a];
case 4:
e_2 = _b.sent();
return [2, isCapacitorApp() ? getIosAssetsPathCapacitor() : (0, path_1.join)(getIosPath(), FOLDER_WWW)];
case 5: return [2];
}
});
}); };
var getIOSAssetsPath = function () {
if (isCapacitorApp()) {
return getIosAssetsPathCapacitor();
}
else {
return (0, path_1.join)(getIosPath(), FOLDER_WWW);
}
};
exports.getIOSAssetsPath = getIOSAssetsPath;

@@ -155,5 +98,5 @@ var getDownloadJSAgentPath = function () { return (0, path_1.join)(getPluginPath(), FOLDER_FILES, exports.FILE_JSAGENT); };

exports.getIonicConfig = getIonicConfig;
var isIonic = function () { return (0, FileHelper_1.checkIfFileExistsSync)(getIonicConfig()) ? true : false; };
var isIonic = function () { return (0, fs_1.existsSync)(getIonicConfig()); };
exports.isIonic = isIonic;
var dynatraceConfigExists = function () { return (0, FileHelper_1.checkIfFileExistsSync)(getConfigFilePath()) ? true : false; };
var dynatraceConfigExists = function () { return (0, fs_1.existsSync)(getConfigFilePath()); };
exports.dynatraceConfigExists = dynatraceConfigExists;

@@ -166,13 +109,10 @@ var getIosPathCapacitor = function () { return (0, path_1.join)(getApplicationPath(), 'ios', 'App'); };

exports.getIosPlistPathCapacitor = getIosPlistPathCapacitor;
var getAndroidAssetsPathCapacitor = function () { return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_a) {
try {
return [2, (0, FileHelper_1.checkIfFileExists)((0, path_1.join)(getAndroidPathCapacitor(), FOLDER_ANDROID_APP, 'src', 'main', exports.FOLDER_ASSETS, 'public'))];
}
catch (e) {
return [2, (0, path_1.join)(getAndroidPathCapacitor(), FOLDER_ANDROID_APP, 'src', 'main', exports.FOLDER_ASSETS, 'public')];
}
return [2];
});
}); };
var getAndroidAssetsPathCapacitor = function () {
if ((0, fs_1.existsSync)((0, path_1.join)(getAndroidPathCapacitor(), FOLDER_ANDROID_APP, 'src', 'main', exports.FOLDER_ASSETS, 'public'))) {
return (0, path_1.join)(getAndroidPathCapacitor(), FOLDER_ANDROID_APP, 'src', 'main', exports.FOLDER_ASSETS, 'public');
}
else {
return (0, path_1.join)(getAndroidPathCapacitor(), FOLDER_ANDROID_APP, 'src', 'main', exports.FOLDER_ASSETS, 'public');
}
};
exports.getAndroidAssetsPathCapacitor = getAndroidAssetsPathCapacitor;

@@ -194,3 +134,3 @@ var getIosAssetsPathCapacitor = function () {

exports.getCapacitorConfig = getCapacitorConfig;
var isCapacitorApp = function () { return (0, fs_1.existsSync)(getCapacitorConfig()) || (0, fs_1.existsSync)(getCapacitorConfig(true)) ? true : false; };
var isCapacitorApp = function () { return (0, fs_1.existsSync)(getCapacitorConfig()) || (0, fs_1.existsSync)(getCapacitorConfig(true)); };
exports.isCapacitorApp = isCapacitorApp;

@@ -44,23 +44,28 @@ "use strict";

var HTMLInstrumentation = (function () {
function HTMLInstrumentation(folder, jsAgentContent, cookieProxyEnabled) {
function HTMLInstrumentation(folder, jsAgentContent, cookieProxyEnabled, htmlPathsConfigured) {
this.folder = folder;
this.jsAgentContent = jsAgentContent;
this.cookieProxyEnabled = cookieProxyEnabled;
this.htmlPathsConfigured = htmlPathsConfigured;
}
HTMLInstrumentation.prototype.instrument = function () {
return __awaiter(this, void 0, void 0, function () {
var htmlFiles, _i, htmlFiles_1, htmlFile, htmlModifier;
return __generator(this, function (_a) {
switch (_a.label) {
var htmlFiles, _a, _b, _i, htmlFiles_1, htmlFile, htmlModifier;
return __generator(this, function (_c) {
switch (_c.label) {
case 0: return [4, (0, HtmlUtil_1.searchHTMLFiles)(this.folder)];
case 1:
htmlFiles = _a.sent();
if (!(htmlFiles.length === 0)) return [3, 2];
htmlFiles = _c.sent();
_b = (_a = htmlFiles).concat;
return [4, (0, HtmlUtil_1.checkHTMLPaths)(this.folder, this.htmlPathsConfigured)];
case 2:
_b.apply(_a, [_c.sent()]);
if (!(htmlFiles.length === 0)) return [3, 3];
Logger_1.Logger.getInstance().logInfo('No HTML files to instrument!');
return [3, 7];
case 2:
return [3, 8];
case 3:
_i = 0, htmlFiles_1 = htmlFiles;
_a.label = 3;
case 3:
if (!(_i < htmlFiles_1.length)) return [3, 6];
_c.label = 4;
case 4:
if (!(_i < htmlFiles_1.length)) return [3, 7];
htmlFile = htmlFiles_1[_i];

@@ -72,12 +77,12 @@ htmlModifier = new HtmlModifier_1.HTMLModifier(htmlFile);

return [4, htmlModifier.modify()];
case 4:
_a.sent();
_a.label = 5;
case 5:
_c.sent();
_c.label = 6;
case 6:
_i++;
return [3, 3];
case 6:
return [3, 4];
case 7:
Logger_1.Logger.getInstance().logInfo('Successfully updated the JSAgent in HTML file!');
_a.label = 7;
case 7: return [2];
_c.label = 8;
case 8: return [2];
}

@@ -84,0 +89,0 @@ });

@@ -39,3 +39,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.HTMLReader = void 0;
var fs_1 = require("fs");
var jsdom_1 = require("jsdom");

@@ -50,21 +50,13 @@ var FileHelper_1 = require("../helpers/FileHelper");

return __awaiter(this, void 0, void 0, function () {
var error_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (this.htmlFile === undefined || !String(this.htmlFile).endsWith('.html')) {
return [2, false];
}
_a.label = 1;
case 1:
_a.trys.push([1, 3, , 4]);
return [4, (0, FileHelper_1.checkIfFileExists)(this.htmlFile)];
case 2:
_a.sent();
return [2, true];
case 3:
error_1 = _a.sent();
return [2, false];
case 4: return [2];
if (this.htmlFile === undefined || !String(this.htmlFile).endsWith('.html')) {
return [2, false];
}
try {
return [2, (0, fs_1.existsSync)(this.htmlFile)];
}
catch (error) {
return [2, false];
}
return [2];
});

@@ -92,2 +84,2 @@ });

}());
exports.HTMLReader = HTMLReader;
exports.default = HTMLReader;

@@ -39,4 +39,5 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.removeOldDtAgent = exports.copyCookieProxy = exports.copySwallowAPI = exports.searchHTMLFiles = void 0;
exports.removeOldDtAgent = exports.copyCookieProxy = exports.copySwallowAPI = exports.checkHTMLPaths = exports.searchHTMLFiles = void 0;
var path_1 = require("path");
var fs_1 = require("fs");
var FileHelper_1 = require("../helpers/FileHelper");

@@ -66,3 +67,3 @@ var Logger_1 = require("../logger/Logger");

htmlFile = htmlFiles_1[_i];
htmlReader = new HtmlReader_1.HTMLReader(htmlFile);
htmlReader = new HtmlReader_1.default(htmlFile);
return [4, htmlReader.isAvailable()];

@@ -92,2 +93,37 @@ case 4:

exports.searchHTMLFiles = searchHTMLFiles;
var checkHTMLPaths = function (assetsFolder, htmlPaths) { return __awaiter(void 0, void 0, void 0, function () {
var checkedHTML, _i, htmlPaths_1, htmlPath, htmlPathToCheck, htmlReader, _a, _b;
return __generator(this, function (_c) {
switch (_c.label) {
case 0:
checkedHTML = [];
_i = 0, htmlPaths_1 = htmlPaths;
_c.label = 1;
case 1:
if (!(_i < htmlPaths_1.length)) return [3, 6];
htmlPath = htmlPaths_1[_i];
htmlPathToCheck = htmlPath;
if (!(0, path_1.isAbsolute)(htmlPath)) {
htmlPathToCheck = (0, path_1.join)(assetsFolder, htmlPath);
}
htmlReader = new HtmlReader_1.default(htmlPathToCheck);
return [4, htmlReader.isAvailable()];
case 2:
if (!!(_c.sent())) return [3, 3];
Logger_1.Logger.getInstance().logDebug('Custom defined .html file could not be found: ' + htmlPathToCheck, LogLevel_1.LogLevel.ERROR);
return [3, 5];
case 3:
_b = (_a = checkedHTML).push;
return [4, htmlReader.read()];
case 4:
_b.apply(_a, [_c.sent()]);
_c.label = 5;
case 5:
_i++;
return [3, 1];
case 6: return [2, checkedHTML];
}
});
}); };
exports.checkHTMLPaths = checkHTMLPaths;
var copySwallowAPI = function (destinationDirectory) { return __awaiter(void 0, void 0, void 0, function () {

@@ -146,3 +182,3 @@ var destAssets, swallowApi, e_1;

var createAssetsDirectory = function (destinationDirectory) { return __awaiter(void 0, void 0, void 0, function () {
var destAssets, e_3;
var destAssets;
return __generator(this, function (_a) {

@@ -152,16 +188,8 @@ switch (_a.label) {

destAssets = (0, path_1.join)(destinationDirectory, PathHelper_1.FOLDER_ASSETS);
_a.label = 1;
if (!!(0, fs_1.existsSync)(destAssets)) return [3, 2];
return [4, (0, FileHelper_1.createDirectory)(destAssets)];
case 1:
_a.trys.push([1, 3, , 5]);
return [4, (0, FileHelper_1.checkIfFileExists)(destAssets)];
case 2:
_a.sent();
return [3, 5];
case 3:
e_3 = _a.sent();
return [4, (0, FileHelper_1.createDirectory)(destAssets)];
case 4:
_a.sent();
return [3, 5];
case 5: return [2, destAssets];
_a.label = 2;
case 2: return [2, destAssets];
}

@@ -168,0 +196,0 @@ });

@@ -52,2 +52,3 @@ "use strict";

var path_1 = require("path");
var fs_1 = require("fs");
var plist_1 = require("plist");

@@ -70,6 +71,3 @@ var FileHelper_1 = require("./helpers/FileHelper");

}
try {
(0, FileHelper_1.checkIfFileExistsSync)(pathToPList);
}
catch (e) {
if (!(0, fs_1.existsSync)(pathToPList)) {
throw new Error('Could not read plist file: ' + pathToPList);

@@ -76,0 +74,0 @@ }

@@ -20,2 +20,3 @@ "use strict";

var path_1 = require("path");
var fs_1 = require("fs");
var FileHelper_1 = require("../helpers/FileHelper");

@@ -60,16 +61,13 @@ var PathHelper_1 = require("../helpers/PathHelper");

FileLogger.prototype.closeLogger = function () {
var logFileName = (0, LogUtil_1.currentDate)().split(':').join('-') + '.txt';
try {
(0, FileHelper_1.checkIfFileExistsSync)((0, PathHelper_1.getCurrentLogPath)());
var logFileName = (0, LogUtil_1.currentDate)().split(':').join('-') + '.txt';
(0, FileHelper_1.checkIfFileExistsSync)((0, path_1.join)((0, PathHelper_1.getLogPath)(), logFileName));
(0, FileHelper_1.renameFileSync)((0, PathHelper_1.getCurrentLogPath)(), (0, path_1.join)((0, PathHelper_1.getLogPath)(), logFileName));
if ((0, fs_1.existsSync)((0, PathHelper_1.getCurrentLogPath)()) && !(0, fs_1.existsSync)((0, path_1.join)((0, PathHelper_1.getLogPath)(), logFileName))) {
(0, FileHelper_1.renameFileSync)((0, PathHelper_1.getCurrentLogPath)(), (0, path_1.join)((0, PathHelper_1.getLogPath)(), logFileName));
}
}
catch (e) {
catch (error) {
}
};
FileLogger.prototype.createLogPath = function () {
try {
(0, FileHelper_1.checkIfFileExistsSync)((0, PathHelper_1.getLogPath)());
}
catch (error) {
if (!(0, fs_1.existsSync)((0, PathHelper_1.getLogPath)())) {
(0, FileHelper_1.createDirectorySync)((0, PathHelper_1.getLogPath)());

@@ -76,0 +74,0 @@ }

@@ -30,3 +30,2 @@ "use strict";

var buildProperties = {};
var configJson;
buildProperties.isCapacitor = (0, PathHelper_1.isCapacitorApp)();

@@ -37,3 +36,3 @@ buildProperties.pathToConfig = (0, PathHelper_1.getConfigFilePath)();

}
configJson = new ConfigurationReader_1.ConfigurationReader().readConfiguration(buildProperties.pathToConfig);
var configJson = new ConfigurationReader_1.ConfigurationReader().readConfiguration(buildProperties.pathToConfig);
if (argv.gradle !== undefined) {

@@ -40,0 +39,0 @@ buildProperties.pathToGradle = (0, path_1.resolve)(argv.gradle);

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc