@xenon-device-management/xenon 1.1.3 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/lib/package.json +4 -2
- package/lib/src/data-service/prisma-service.js +9 -12
- package/lib/src/data-service/prisma-store.js +4 -4
- package/lib/src/data-service/queue-service.js +3 -3
- package/lib/src/prisma.js +28 -6
- package/lib/src/services/NotificationService.js +3 -3
- package/lib/test/e2e/startup-verification.spec.js +54 -0
- package/lib/test/unit/prisma.spec.js +23 -0
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -2
package/README.md
CHANGED
package/lib/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xenon-device-management/xenon",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.6",
|
|
4
4
|
"description": "Xenon - Intelligent Mobile Infrastructure. A self-healing device orchestration platform for Appium.",
|
|
5
5
|
"main": "./lib/src/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"./package.json": "./package.json"
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
|
-
"
|
|
12
|
+
"postinstall": "npx prisma generate",
|
|
13
|
+
"build": "npx prisma generate && tsc -b && npm run build:copy",
|
|
13
14
|
"build:all": "npm run build:xenon && npm run build",
|
|
14
15
|
"build:copy": "rm -rf lib/public && mkdir -p lib && cp -R src/public lib/ && cp schema.json lib/",
|
|
15
16
|
"build:schema": "node scripts/generate-types-from-schema.js",
|
|
@@ -29,6 +30,7 @@
|
|
|
29
30
|
"format": "prettier --write \"{src,web,test}/**/*.{ts,tsx,json,md}\" --single-quote",
|
|
30
31
|
"db:migrate": "path-exists lib/src/scripts/initialize-database.js && node lib/src/scripts/initialize-database.js || ts-node src/scripts/initialize-database.ts",
|
|
31
32
|
"db:generate": "ts-node src/scripts/generate-database-migration.ts",
|
|
33
|
+
"prepare": "npx prisma generate",
|
|
32
34
|
"prepublishOnly": "npm run build:all"
|
|
33
35
|
},
|
|
34
36
|
"repository": {
|
|
@@ -9,19 +9,13 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.PrismaService = void 0;
|
|
13
|
-
const
|
|
14
|
-
const config_1 = require("../config");
|
|
12
|
+
exports.getPrismaService = exports.PrismaService = void 0;
|
|
13
|
+
const prisma_1 = require("../prisma");
|
|
15
14
|
const typedi_1 = require("typedi");
|
|
16
|
-
let PrismaService = class PrismaService
|
|
17
|
-
constructor() {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
db: {
|
|
21
|
-
url: config_1.config.databaseUrl,
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
});
|
|
15
|
+
let PrismaService = class PrismaService {
|
|
16
|
+
constructor() { }
|
|
17
|
+
get client() {
|
|
18
|
+
return prisma_1.prisma;
|
|
25
19
|
}
|
|
26
20
|
};
|
|
27
21
|
exports.PrismaService = PrismaService;
|
|
@@ -29,3 +23,6 @@ exports.PrismaService = PrismaService = __decorate([
|
|
|
29
23
|
(0, typedi_1.Service)(),
|
|
30
24
|
__metadata("design:paramtypes", [])
|
|
31
25
|
], PrismaService);
|
|
26
|
+
// For compatibility with parts of the code that might expect PrismaService to be the client
|
|
27
|
+
const getPrismaService = () => prisma_1.prisma;
|
|
28
|
+
exports.getPrismaService = getPrismaService;
|
|
@@ -52,7 +52,7 @@ const semver = __importStar(require("semver"));
|
|
|
52
52
|
const logger_1 = __importDefault(require("../logger"));
|
|
53
53
|
class PrismaDeviceStore {
|
|
54
54
|
constructor() {
|
|
55
|
-
this.prisma = typedi_1.Container.get(prisma_service_1.PrismaService);
|
|
55
|
+
this.prisma = typedi_1.Container.get(prisma_service_1.PrismaService).client;
|
|
56
56
|
}
|
|
57
57
|
toIDevice(device) {
|
|
58
58
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
@@ -276,7 +276,7 @@ class PrismaDeviceStore {
|
|
|
276
276
|
exports.PrismaDeviceStore = PrismaDeviceStore;
|
|
277
277
|
class PrismaPendingSessionStore {
|
|
278
278
|
constructor() {
|
|
279
|
-
this.prisma = typedi_1.Container.get(prisma_service_1.PrismaService);
|
|
279
|
+
this.prisma = typedi_1.Container.get(prisma_service_1.PrismaService).client;
|
|
280
280
|
}
|
|
281
281
|
addPendingSession(capability) {
|
|
282
282
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -328,7 +328,7 @@ class PrismaPendingSessionStore {
|
|
|
328
328
|
exports.PrismaPendingSessionStore = PrismaPendingSessionStore;
|
|
329
329
|
class PrismaCLIArgsStore {
|
|
330
330
|
constructor() {
|
|
331
|
-
this.prisma = typedi_1.Container.get(prisma_service_1.PrismaService);
|
|
331
|
+
this.prisma = typedi_1.Container.get(prisma_service_1.PrismaService).client;
|
|
332
332
|
}
|
|
333
333
|
addCLIArgs(args) {
|
|
334
334
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -349,7 +349,7 @@ class PrismaCLIArgsStore {
|
|
|
349
349
|
exports.PrismaCLIArgsStore = PrismaCLIArgsStore;
|
|
350
350
|
class PrismaHealEtalonStore {
|
|
351
351
|
constructor() {
|
|
352
|
-
this.prisma = typedi_1.Container.get(prisma_service_1.PrismaService);
|
|
352
|
+
this.prisma = typedi_1.Container.get(prisma_service_1.PrismaService).client;
|
|
353
353
|
}
|
|
354
354
|
saveSignature(etalon) {
|
|
355
355
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -27,8 +27,8 @@ const prisma_service_1 = require("./prisma-service");
|
|
|
27
27
|
const logger_1 = __importDefault(require("../logger"));
|
|
28
28
|
const typedi_1 = require("typedi");
|
|
29
29
|
let QueueService = class QueueService {
|
|
30
|
-
constructor(
|
|
31
|
-
this.
|
|
30
|
+
constructor(prismaService) {
|
|
31
|
+
this.prismaService = prismaService;
|
|
32
32
|
this.deviceStore = device_store_1.DeviceStoreFactory.getStore();
|
|
33
33
|
this.pendingStore = device_store_1.DeviceStoreFactory.getPendingSessionStore();
|
|
34
34
|
}
|
|
@@ -39,7 +39,7 @@ let QueueService = class QueueService {
|
|
|
39
39
|
getAverageSessionDuration(platform) {
|
|
40
40
|
return __awaiter(this, void 0, void 0, function* () {
|
|
41
41
|
try {
|
|
42
|
-
const recentSessions = yield this.
|
|
42
|
+
const recentSessions = yield this.prismaService.client.session.findMany({
|
|
43
43
|
where: {
|
|
44
44
|
device_platform: platform.toLowerCase(),
|
|
45
45
|
endTime: { not: null },
|
package/lib/src/prisma.js
CHANGED
|
@@ -1,12 +1,34 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.prisma = void 0;
|
|
6
|
+
exports.prisma = exports.getPrismaClient = void 0;
|
|
4
7
|
const client_1 = require("@prisma/client");
|
|
5
8
|
const config_1 = require("./config");
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
const logger_1 = __importDefault(require("./logger"));
|
|
10
|
+
let _prisma;
|
|
11
|
+
const getPrismaClient = () => {
|
|
12
|
+
if (!_prisma) {
|
|
13
|
+
try {
|
|
14
|
+
_prisma = new client_1.PrismaClient({
|
|
15
|
+
datasources: {
|
|
16
|
+
db: {
|
|
17
|
+
url: config_1.config.databaseUrl,
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
logger_1.default.error('❌ [Prisma] Failed to initialize PrismaClient. Ensure "npx prisma generate" has been run.', error);
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return _prisma;
|
|
28
|
+
};
|
|
29
|
+
exports.getPrismaClient = getPrismaClient;
|
|
30
|
+
exports.prisma = new Proxy({}, {
|
|
31
|
+
get: (target, prop) => {
|
|
32
|
+
return (0, exports.getPrismaClient)()[prop];
|
|
11
33
|
},
|
|
12
34
|
});
|
|
@@ -32,12 +32,12 @@ let NotificationService = class NotificationService {
|
|
|
32
32
|
}
|
|
33
33
|
getConfigs() {
|
|
34
34
|
return __awaiter(this, void 0, void 0, function* () {
|
|
35
|
-
return this.prisma.webhookConfig.findMany();
|
|
35
|
+
return this.prisma.client.webhookConfig.findMany();
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
38
|
saveConfig(url_1, events_1) {
|
|
39
39
|
return __awaiter(this, arguments, void 0, function* (url, events, type = 'slack', payloadTemplate) {
|
|
40
|
-
return this.prisma.webhookConfig.create({
|
|
40
|
+
return this.prisma.client.webhookConfig.create({
|
|
41
41
|
data: {
|
|
42
42
|
url,
|
|
43
43
|
events: JSON.stringify(events),
|
|
@@ -50,7 +50,7 @@ let NotificationService = class NotificationService {
|
|
|
50
50
|
}
|
|
51
51
|
deleteConfig(id) {
|
|
52
52
|
return __awaiter(this, void 0, void 0, function* () {
|
|
53
|
-
yield this.prisma.webhookConfig.delete({ where: { id } });
|
|
53
|
+
yield this.prisma.client.webhookConfig.delete({ where: { id } });
|
|
54
54
|
});
|
|
55
55
|
}
|
|
56
56
|
dispatchEvent(eventType, payload) {
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const chai_1 = __importDefault(require("chai"));
|
|
16
|
+
chai_1.default.should();
|
|
17
|
+
const axios_1 = __importDefault(require("axios"));
|
|
18
|
+
const e2ehelper_1 = require("./e2ehelper");
|
|
19
|
+
const plugin_test_support_1 = require("@appium/plugin-test-support");
|
|
20
|
+
const ip_1 = __importDefault(require("ip"));
|
|
21
|
+
describe('Startup Verification E2E Test', () => {
|
|
22
|
+
// dump hub config into a file
|
|
23
|
+
const hub_config_file = (0, e2ehelper_1.ensureHubConfig)('both');
|
|
24
|
+
// setup appium home
|
|
25
|
+
const APPIUM_HOME = (0, e2ehelper_1.ensureAppiumHome)('startup-verify');
|
|
26
|
+
// run hub
|
|
27
|
+
(0, plugin_test_support_1.pluginE2EHarness)({
|
|
28
|
+
before: global.before,
|
|
29
|
+
after: global.after,
|
|
30
|
+
serverArgs: {
|
|
31
|
+
subcommand: 'server',
|
|
32
|
+
configFile: hub_config_file,
|
|
33
|
+
},
|
|
34
|
+
pluginName: 'xenon',
|
|
35
|
+
port: e2ehelper_1.HUB_APPIUM_PORT,
|
|
36
|
+
driverSource: 'npm',
|
|
37
|
+
driverName: 'uiautomator2',
|
|
38
|
+
driverSpec: 'appium-uiautomator2-driver',
|
|
39
|
+
pluginSource: 'local',
|
|
40
|
+
pluginSpec: e2ehelper_1.PLUGIN_PATH,
|
|
41
|
+
appiumHome: APPIUM_HOME,
|
|
42
|
+
});
|
|
43
|
+
const hub_url = `http://${ip_1.default.address()}:${e2ehelper_1.HUB_APPIUM_PORT}`;
|
|
44
|
+
it('Should start Appium server and load Xenon plugin without crashing', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
45
|
+
const response = yield axios_1.default.get(`${hub_url}/xenon`);
|
|
46
|
+
response.status.should.eql(200);
|
|
47
|
+
}));
|
|
48
|
+
it('Should have operational REST API (Swagger verification)', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
49
|
+
// This confirms that the swagger YAML parsing succeeded
|
|
50
|
+
const response = yield axios_1.default.get(`${hub_url}/xenon/api/device`);
|
|
51
|
+
response.status.should.eql(200);
|
|
52
|
+
response.data.should.be.an('array');
|
|
53
|
+
}));
|
|
54
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const chai_1 = require("chai");
|
|
4
|
+
const prisma_1 = require("../../src/prisma");
|
|
5
|
+
const client_1 = require("@prisma/client");
|
|
6
|
+
describe('Prisma Client Unit Tests', () => {
|
|
7
|
+
it('getPrismaClient should return an instance of PrismaClient', () => {
|
|
8
|
+
const client = (0, prisma_1.getPrismaClient)();
|
|
9
|
+
(0, chai_1.expect)(client).to.be.an.instanceOf(client_1.PrismaClient);
|
|
10
|
+
});
|
|
11
|
+
it('getPrismaClient should be idempotent', () => {
|
|
12
|
+
const client1 = (0, prisma_1.getPrismaClient)();
|
|
13
|
+
const client2 = (0, prisma_1.getPrismaClient)();
|
|
14
|
+
(0, chai_1.expect)(client1).to.equal(client2);
|
|
15
|
+
});
|
|
16
|
+
it('prisma proxy should forward properties to getPrismaClient', () => {
|
|
17
|
+
// We don't need to call actual DB methods, just check if property access works
|
|
18
|
+
// and returns the same thing as the client itself.
|
|
19
|
+
const client = (0, prisma_1.getPrismaClient)();
|
|
20
|
+
(0, chai_1.expect)(prisma_1.prisma.device).to.equal(client.device);
|
|
21
|
+
(0, chai_1.expect)(prisma_1.prisma.$connect).to.be.a('function');
|
|
22
|
+
});
|
|
23
|
+
});
|
package/lib/tsconfig.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/InternalHttpClient.ts","../src/PluginContext.ts","../src/XenonCapabilityManager.ts","../src/chromeUtils.ts","../src/config.ts","../src/device-utils.ts","../src/index.ts","../src/logger.ts","../src/plugin.ts","../src/prisma.ts","../src/app/index.ts","../src/app/swagger-docs.ts","../src/app/swagger.ts","../src/app/routers/apps.ts","../src/app/routers/config.ts","../src/app/routers/control.ts","../src/app/routers/dashboard.ts","../src/app/routers/grid.ts","../src/app/routers/reservation.ts","../src/app/routers/webhook.ts","../src/commands/handle.ts","../src/commands/index.ts","../src/dashboard/asset-manager.ts","../src/dashboard/commands.ts","../src/dashboard/event-manager.ts","../src/dashboard/services/app-service.ts","../src/dashboard/services/failure-analysis-service.ts","../src/dashboard/services/session-service.ts","../src/data-service/CircuitBreaker.ts","../src/data-service/config-service.ts","../src/data-service/db.ts","../src/data-service/device-service.ts","../src/data-service/device-store.interface.ts","../src/data-service/device-store.ts","../src/data-service/pending-sessions-service.ts","../src/data-service/pluginArgs.ts","../src/data-service/prisma-service.ts","../src/data-service/prisma-store.ts","../src/data-service/queue-service.ts","../src/data-service/web-config-service.ts","../src/device-managers/AndroidDeviceManager.ts","../src/device-managers/ChromeDriverManager.ts","../src/device-managers/HealthMonitorService.ts","../src/device-managers/IOSDeviceManager.ts","../src/device-managers/NodeDevices.ts","../src/device-managers/iOSTracker.ts","../src/device-managers/index.ts","../src/device-managers/android/AndroidStreamService.ts","../src/device-managers/android/DeviceLockManager.ts","../src/device-managers/cloud/CapabilityManager.ts","../src/device-managers/cloud/Devices.ts","../src/device-managers/ios/IOSDiscoveryService.ts","../src/device-managers/ios/IOSStreamService.ts","../src/device-managers/ios/WDAClient.ts","../src/enums/Capabilities.ts","../src/enums/Cloud.ts","../src/enums/Platform.ts","../src/enums/SessionType.ts","../src/enums/SocketEvents.ts","../src/helpers/UniversalMjpegProxy.ts","../src/helpers/index.ts","../src/interceptors/CommandInterceptor.ts","../src/interfaces/ICloudManager.ts","../src/interfaces/IDevice.ts","../src/interfaces/IDeviceFilterOptions.ts","../src/interfaces/IDeviceManager.ts","../src/interfaces/IOptions.ts","../src/interfaces/IPluginArgs.ts","../src/interfaces/ISessionCapability.ts","../src/profiling/AndroidAppProfiler.ts","../src/proxy/wd-command-proxy.ts","../src/scripts/generate-database-migration.ts","../src/scripts/initialize-database.ts","../src/scripts/install-go-ios.ts","../src/scripts/prepare-prisma.ts","../src/services/AICommandService.ts","../src/services/AIService.ts","../src/services/CleanupService.ts","../src/services/EventBus.ts","../src/services/InspectorService.ts","../src/services/MetricsService.ts","../src/services/NetworkConditioningService.ts","../src/services/NotificationService.ts","../src/services/RequestLogService.ts","../src/services/ResourceIsolationService.ts","../src/services/SecurityService.ts","../src/services/ServerManager.ts","../src/services/SessionHeartbeatService.ts","../src/services/SessionLifecycleService.ts","../src/services/SocketClient.ts","../src/services/SocketServer.ts","../src/services/TracingService.ts","../src/services/VideoPipelineService.ts","../src/services/healing/FuzzyXmlHealingProvider.ts","../src/services/healing/HealEtalonService.ts","../src/services/healing/HealedLocatorGenerator.ts","../src/services/healing/HealingOrchestrator.ts","../src/services/healing/LlmHealingProvider.ts","../src/services/healing/OcrHealingProvider.ts","../src/services/healing/ResilioTreeHealingProvider.ts","../src/services/healing/VisualAiHealingProvider.ts","../src/services/healing/types.ts","../src/services/omni-vision/OmniVisionService.ts","../src/services/omni-vision/VisionAssertionService.ts","../src/sessions/CloudSession.ts","../src/sessions/LocalSession.ts","../src/sessions/RemoteSession.ts","../src/sessions/SessionManager.ts","../src/sessions/XenonSession.ts","../src/types/CLIArgs.ts","../src/types/CloudArgs.ts","../src/types/CloudSchema.ts","../src/types/DeviceType.ts","../src/types/DeviceUpdate.ts","../src/types/IOSDevice.ts","../src/types/Platform.ts","../src/types/SessionStatus.ts","../src/types/healing.d.ts","../src/validators/CapabilityValidator.ts","../test/e2e/e2ehelper.ts","../test/e2e/plugin-harness.ts","../test/e2e/plugin.spec.ts","../test/e2e/telemetry_verification.spec.ts","../test/e2e/video-recording-test.spec.js","../test/e2e/android/conf.spec.js","../test/e2e/android/conf2.spec.js","../test/e2e/android/conf3.spec.js","../test/e2e/hubnode/forward-request.spec.ts","../test/e2e/hubnode/hubnode.spec.ts","../test/e2e/ios/conf1.spec.js","../test/e2e/ios/conf2.spec.js","../test/helpers/test-container.ts","../test/integration/androidDevices.spec.ts","../test/integration/cliArgs.js","../test/integration/testHelpers.js","../test/integration/ios/01iOSSimulator.spec.ts","../test/integration/ios/02iOSDevices.spec.ts","../test/unit/AndroidDeviceManager.spec.ts","../test/unit/ChromeDriverManager.spec.js","../test/unit/CleanupService.spec.ts","../test/unit/DeviceModel.spec.ts","../test/unit/FuzzyXmlHealingProvider.test.ts","../test/unit/GetAdbOriginal.js","../test/unit/HealingCascade.test.ts","../test/unit/IOSDeviceManager.spec.js","../test/unit/RemoteIOs.spec.js","../test/unit/ResilioTreeHealingProvider.test.ts","../test/unit/commands.spec.js","../test/unit/config.spec.js","../test/unit/device-service.spec.ts","../test/unit/device-utils.spec.ts","../test/unit/helpers.spec.ts","../test/unit/omni-vision.spec.ts","../test/unit/plugin.spec.ts","../test/unit/fixtures/device.config.js","../test/unit/fixtures/devices.js"],"version":"5.9.3"}
|
|
1
|
+
{"root":["../src/InternalHttpClient.ts","../src/PluginContext.ts","../src/XenonCapabilityManager.ts","../src/chromeUtils.ts","../src/config.ts","../src/device-utils.ts","../src/index.ts","../src/logger.ts","../src/plugin.ts","../src/prisma.ts","../src/app/index.ts","../src/app/swagger-docs.ts","../src/app/swagger.ts","../src/app/routers/apps.ts","../src/app/routers/config.ts","../src/app/routers/control.ts","../src/app/routers/dashboard.ts","../src/app/routers/grid.ts","../src/app/routers/reservation.ts","../src/app/routers/webhook.ts","../src/commands/handle.ts","../src/commands/index.ts","../src/dashboard/asset-manager.ts","../src/dashboard/commands.ts","../src/dashboard/event-manager.ts","../src/dashboard/services/app-service.ts","../src/dashboard/services/failure-analysis-service.ts","../src/dashboard/services/session-service.ts","../src/data-service/CircuitBreaker.ts","../src/data-service/config-service.ts","../src/data-service/db.ts","../src/data-service/device-service.ts","../src/data-service/device-store.interface.ts","../src/data-service/device-store.ts","../src/data-service/pending-sessions-service.ts","../src/data-service/pluginArgs.ts","../src/data-service/prisma-service.ts","../src/data-service/prisma-store.ts","../src/data-service/queue-service.ts","../src/data-service/web-config-service.ts","../src/device-managers/AndroidDeviceManager.ts","../src/device-managers/ChromeDriverManager.ts","../src/device-managers/HealthMonitorService.ts","../src/device-managers/IOSDeviceManager.ts","../src/device-managers/NodeDevices.ts","../src/device-managers/iOSTracker.ts","../src/device-managers/index.ts","../src/device-managers/android/AndroidStreamService.ts","../src/device-managers/android/DeviceLockManager.ts","../src/device-managers/cloud/CapabilityManager.ts","../src/device-managers/cloud/Devices.ts","../src/device-managers/ios/IOSDiscoveryService.ts","../src/device-managers/ios/IOSStreamService.ts","../src/device-managers/ios/WDAClient.ts","../src/enums/Capabilities.ts","../src/enums/Cloud.ts","../src/enums/Platform.ts","../src/enums/SessionType.ts","../src/enums/SocketEvents.ts","../src/helpers/UniversalMjpegProxy.ts","../src/helpers/index.ts","../src/interceptors/CommandInterceptor.ts","../src/interfaces/ICloudManager.ts","../src/interfaces/IDevice.ts","../src/interfaces/IDeviceFilterOptions.ts","../src/interfaces/IDeviceManager.ts","../src/interfaces/IOptions.ts","../src/interfaces/IPluginArgs.ts","../src/interfaces/ISessionCapability.ts","../src/profiling/AndroidAppProfiler.ts","../src/proxy/wd-command-proxy.ts","../src/scripts/generate-database-migration.ts","../src/scripts/initialize-database.ts","../src/scripts/install-go-ios.ts","../src/scripts/prepare-prisma.ts","../src/services/AICommandService.ts","../src/services/AIService.ts","../src/services/CleanupService.ts","../src/services/EventBus.ts","../src/services/InspectorService.ts","../src/services/MetricsService.ts","../src/services/NetworkConditioningService.ts","../src/services/NotificationService.ts","../src/services/RequestLogService.ts","../src/services/ResourceIsolationService.ts","../src/services/SecurityService.ts","../src/services/ServerManager.ts","../src/services/SessionHeartbeatService.ts","../src/services/SessionLifecycleService.ts","../src/services/SocketClient.ts","../src/services/SocketServer.ts","../src/services/TracingService.ts","../src/services/VideoPipelineService.ts","../src/services/healing/FuzzyXmlHealingProvider.ts","../src/services/healing/HealEtalonService.ts","../src/services/healing/HealedLocatorGenerator.ts","../src/services/healing/HealingOrchestrator.ts","../src/services/healing/LlmHealingProvider.ts","../src/services/healing/OcrHealingProvider.ts","../src/services/healing/ResilioTreeHealingProvider.ts","../src/services/healing/VisualAiHealingProvider.ts","../src/services/healing/types.ts","../src/services/omni-vision/OmniVisionService.ts","../src/services/omni-vision/VisionAssertionService.ts","../src/sessions/CloudSession.ts","../src/sessions/LocalSession.ts","../src/sessions/RemoteSession.ts","../src/sessions/SessionManager.ts","../src/sessions/XenonSession.ts","../src/types/CLIArgs.ts","../src/types/CloudArgs.ts","../src/types/CloudSchema.ts","../src/types/DeviceType.ts","../src/types/DeviceUpdate.ts","../src/types/IOSDevice.ts","../src/types/Platform.ts","../src/types/SessionStatus.ts","../src/types/healing.d.ts","../src/validators/CapabilityValidator.ts","../test/e2e/e2ehelper.ts","../test/e2e/plugin-harness.ts","../test/e2e/plugin.spec.ts","../test/e2e/startup-verification.spec.ts","../test/e2e/telemetry_verification.spec.ts","../test/e2e/video-recording-test.spec.js","../test/e2e/android/conf.spec.js","../test/e2e/android/conf2.spec.js","../test/e2e/android/conf3.spec.js","../test/e2e/hubnode/forward-request.spec.ts","../test/e2e/hubnode/hubnode.spec.ts","../test/e2e/ios/conf1.spec.js","../test/e2e/ios/conf2.spec.js","../test/helpers/test-container.ts","../test/integration/androidDevices.spec.ts","../test/integration/cliArgs.js","../test/integration/testHelpers.js","../test/integration/ios/01iOSSimulator.spec.ts","../test/integration/ios/02iOSDevices.spec.ts","../test/unit/AndroidDeviceManager.spec.ts","../test/unit/ChromeDriverManager.spec.js","../test/unit/CleanupService.spec.ts","../test/unit/DeviceModel.spec.ts","../test/unit/FuzzyXmlHealingProvider.test.ts","../test/unit/GetAdbOriginal.js","../test/unit/HealingCascade.test.ts","../test/unit/IOSDeviceManager.spec.js","../test/unit/RemoteIOs.spec.js","../test/unit/ResilioTreeHealingProvider.test.ts","../test/unit/commands.spec.js","../test/unit/config.spec.js","../test/unit/device-service.spec.ts","../test/unit/device-utils.spec.ts","../test/unit/helpers.spec.ts","../test/unit/omni-vision.spec.ts","../test/unit/plugin.spec.ts","../test/unit/prisma.spec.ts","../test/unit/fixtures/device.config.js","../test/unit/fixtures/devices.js"],"version":"5.9.3"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xenon-device-management/xenon",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.6",
|
|
4
4
|
"description": "Xenon - Intelligent Mobile Infrastructure. A self-healing device orchestration platform for Appium.",
|
|
5
5
|
"main": "./lib/src/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"./package.json": "./package.json"
|
|
10
10
|
},
|
|
11
11
|
"scripts": {
|
|
12
|
-
"
|
|
12
|
+
"postinstall": "npx prisma generate",
|
|
13
|
+
"build": "npx prisma generate && tsc -b && npm run build:copy",
|
|
13
14
|
"build:all": "npm run build:xenon && npm run build",
|
|
14
15
|
"build:copy": "rm -rf lib/public && mkdir -p lib && cp -R src/public lib/ && cp schema.json lib/",
|
|
15
16
|
"build:schema": "node scripts/generate-types-from-schema.js",
|
|
@@ -29,6 +30,7 @@
|
|
|
29
30
|
"format": "prettier --write \"{src,web,test}/**/*.{ts,tsx,json,md}\" --single-quote",
|
|
30
31
|
"db:migrate": "path-exists lib/src/scripts/initialize-database.js && node lib/src/scripts/initialize-database.js || ts-node src/scripts/initialize-database.ts",
|
|
31
32
|
"db:generate": "ts-node src/scripts/generate-database-migration.ts",
|
|
33
|
+
"prepare": "npx prisma generate",
|
|
32
34
|
"prepublishOnly": "npm run build:all"
|
|
33
35
|
},
|
|
34
36
|
"repository": {
|