@phystack/cli 4.4.29
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/LICENSE.md +19 -0
- package/README.md +24 -0
- package/bin/index.js +2 -0
- package/dist/commands/app/build-apps.js +66 -0
- package/dist/commands/app/build-apps.js.map +1 -0
- package/dist/commands/app/build-container-remote.js +171 -0
- package/dist/commands/app/build-container-remote.js.map +1 -0
- package/dist/commands/app/build-container.js +322 -0
- package/dist/commands/app/build-container.js.map +1 -0
- package/dist/commands/app/build.js +375 -0
- package/dist/commands/app/build.js.map +1 -0
- package/dist/commands/app/create.js +409 -0
- package/dist/commands/app/create.js.map +1 -0
- package/dist/commands/app/deploy.js +176 -0
- package/dist/commands/app/deploy.js.map +1 -0
- package/dist/commands/app/device-picker.js +150 -0
- package/dist/commands/app/device-picker.js.map +1 -0
- package/dist/commands/app/import.js +303 -0
- package/dist/commands/app/import.js.map +1 -0
- package/dist/commands/app/list.js +26 -0
- package/dist/commands/app/list.js.map +1 -0
- package/dist/commands/app/publish.js +327 -0
- package/dist/commands/app/publish.js.map +1 -0
- package/dist/commands/app/settings.js +129 -0
- package/dist/commands/app/settings.js.map +1 -0
- package/dist/commands/app/types.js +13 -0
- package/dist/commands/app/types.js.map +1 -0
- package/dist/commands/app/upload-description.js +139 -0
- package/dist/commands/app/upload-description.js.map +1 -0
- package/dist/commands/app/upload-settings.js +29 -0
- package/dist/commands/app/upload-settings.js.map +1 -0
- package/dist/commands/app/utils.js +86 -0
- package/dist/commands/app/utils.js.map +1 -0
- package/dist/commands/auth/login.js +111 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.js +19 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/descriptor/create.js +143 -0
- package/dist/commands/descriptor/create.js.map +1 -0
- package/dist/commands/descriptor/index.js +36 -0
- package/dist/commands/descriptor/index.js.map +1 -0
- package/dist/commands/descriptor/publish.js +163 -0
- package/dist/commands/descriptor/publish.js.map +1 -0
- package/dist/commands/descriptor/show.js +68 -0
- package/dist/commands/descriptor/show.js.map +1 -0
- package/dist/commands/dev/develop.js +175 -0
- package/dist/commands/dev/develop.js.map +1 -0
- package/dist/commands/dev/forward.js +118 -0
- package/dist/commands/dev/forward.js.map +1 -0
- package/dist/commands/dev/index.js +66 -0
- package/dist/commands/dev/index.js.map +1 -0
- package/dist/commands/dev/list.js +96 -0
- package/dist/commands/dev/list.js.map +1 -0
- package/dist/commands/dev/screen-devtools.js +156 -0
- package/dist/commands/dev/screen-devtools.js.map +1 -0
- package/dist/commands/dev/select.js +118 -0
- package/dist/commands/dev/select.js.map +1 -0
- package/dist/commands/dev/shell.js +171 -0
- package/dist/commands/dev/shell.js.map +1 -0
- package/dist/commands/dev/vnc.js +75 -0
- package/dist/commands/dev/vnc.js.map +1 -0
- package/dist/commands/device/select.js +118 -0
- package/dist/commands/device/select.js.map +1 -0
- package/dist/commands/flash.js +1120 -0
- package/dist/commands/flash.js.map +1 -0
- package/dist/commands/inst/create.js +55 -0
- package/dist/commands/inst/create.js.map +1 -0
- package/dist/commands/inst/index.js +15 -0
- package/dist/commands/inst/index.js.map +1 -0
- package/dist/commands/inst/list.js +26 -0
- package/dist/commands/inst/list.js.map +1 -0
- package/dist/commands/legacydev/debug.js +11 -0
- package/dist/commands/legacydev/debug.js.map +1 -0
- package/dist/commands/legacydev/deploy.js +15 -0
- package/dist/commands/legacydev/deploy.js.map +1 -0
- package/dist/commands/legacydev/dumpTwin.js +27 -0
- package/dist/commands/legacydev/dumpTwin.js.map +1 -0
- package/dist/commands/legacydev/forward.js +104 -0
- package/dist/commands/legacydev/forward.js.map +1 -0
- package/dist/commands/legacydev/index.js +188 -0
- package/dist/commands/legacydev/index.js.map +1 -0
- package/dist/commands/legacydev/invoke.js +29 -0
- package/dist/commands/legacydev/invoke.js.map +1 -0
- package/dist/commands/legacydev/js.js +69 -0
- package/dist/commands/legacydev/js.js.map +1 -0
- package/dist/commands/legacydev/list.js +196 -0
- package/dist/commands/legacydev/list.js.map +1 -0
- package/dist/commands/legacydev/logs.js +60 -0
- package/dist/commands/legacydev/logs.js.map +1 -0
- package/dist/commands/legacydev/modules.js +50 -0
- package/dist/commands/legacydev/modules.js.map +1 -0
- package/dist/commands/legacydev/move.js +23 -0
- package/dist/commands/legacydev/move.js.map +1 -0
- package/dist/commands/legacydev/ota.js +88 -0
- package/dist/commands/legacydev/ota.js.map +1 -0
- package/dist/commands/legacydev/patchTwin.js +21 -0
- package/dist/commands/legacydev/patchTwin.js.map +1 -0
- package/dist/commands/legacydev/pin.js +23 -0
- package/dist/commands/legacydev/pin.js.map +1 -0
- package/dist/commands/legacydev/pub.js +25 -0
- package/dist/commands/legacydev/pub.js.map +1 -0
- package/dist/commands/legacydev/rdp.js +64 -0
- package/dist/commands/legacydev/rdp.js.map +1 -0
- package/dist/commands/legacydev/screen-devtools.js +142 -0
- package/dist/commands/legacydev/screen-devtools.js.map +1 -0
- package/dist/commands/legacydev/settingsShow.js +89 -0
- package/dist/commands/legacydev/settingsShow.js.map +1 -0
- package/dist/commands/legacydev/settingsUpdate.js +114 -0
- package/dist/commands/legacydev/settingsUpdate.js.map +1 -0
- package/dist/commands/legacydev/shell.js +167 -0
- package/dist/commands/legacydev/shell.js.map +1 -0
- package/dist/commands/legacydev/showTwin.js +9 -0
- package/dist/commands/legacydev/showTwin.js.map +1 -0
- package/dist/commands/legacydev/statusLog.js +56 -0
- package/dist/commands/legacydev/statusLog.js.map +1 -0
- package/dist/commands/legacydev/sub.js +39 -0
- package/dist/commands/legacydev/sub.js.map +1 -0
- package/dist/commands/legacydev/vnc.js +61 -0
- package/dist/commands/legacydev/vnc.js.map +1 -0
- package/dist/commands/tenant/index.js +21 -0
- package/dist/commands/tenant/index.js.map +1 -0
- package/dist/commands/tenant/list.js +14 -0
- package/dist/commands/tenant/list.js.map +1 -0
- package/dist/commands/tenant/select.js +87 -0
- package/dist/commands/tenant/select.js.map +1 -0
- package/dist/commands/vm/create.js +718 -0
- package/dist/commands/vm/create.js.map +1 -0
- package/dist/commands/vm/index.js +130 -0
- package/dist/commands/vm/index.js.map +1 -0
- package/dist/commands/vm/list.js +124 -0
- package/dist/commands/vm/list.js.map +1 -0
- package/dist/commands/vm/logs.js +66 -0
- package/dist/commands/vm/logs.js.map +1 -0
- package/dist/commands/vm/remove.js +180 -0
- package/dist/commands/vm/remove.js.map +1 -0
- package/dist/commands/vm/shell.js +400 -0
- package/dist/commands/vm/shell.js.map +1 -0
- package/dist/commands/vm/start.js +861 -0
- package/dist/commands/vm/start.js.map +1 -0
- package/dist/commands/vm/stop.js +232 -0
- package/dist/commands/vm/stop.js.map +1 -0
- package/dist/index.js +158 -0
- package/dist/index.js.map +1 -0
- package/dist/services/admin-api/admin-api.types.js +3 -0
- package/dist/services/admin-api/admin-api.types.js.map +1 -0
- package/dist/services/admin-api/device-modules.admin-api.service.js +58 -0
- package/dist/services/admin-api/device-modules.admin-api.service.js.map +1 -0
- package/dist/services/admin-api/devices-admin-api.service.js +213 -0
- package/dist/services/admin-api/devices-admin-api.service.js.map +1 -0
- package/dist/services/admin-api/gridapps-admin-api.service.js +59 -0
- package/dist/services/admin-api/gridapps-admin-api.service.js.map +1 -0
- package/dist/services/admin-api/index.js +157 -0
- package/dist/services/admin-api/index.js.map +1 -0
- package/dist/services/admin-api/installations-admin-api.service.js +29 -0
- package/dist/services/admin-api/installations-admin-api.service.js.map +1 -0
- package/dist/services/admin-api/organizations-admin-api.service.js +53 -0
- package/dist/services/admin-api/organizations-admin-api.service.js.map +1 -0
- package/dist/services/auth/device-grant-auth.service.js +224 -0
- package/dist/services/auth/device-grant-auth.service.js.map +1 -0
- package/dist/services/phyhub/index.js +200 -0
- package/dist/services/phyhub/index.js.map +1 -0
- package/dist/services/phyhub/phyhub.types.js +3 -0
- package/dist/services/phyhub/phyhub.types.js.map +1 -0
- package/dist/utils/device-fetcher.js +92 -0
- package/dist/utils/device-fetcher.js.map +1 -0
- package/dist/utils/devices.js +41 -0
- package/dist/utils/devices.js.map +1 -0
- package/dist/utils/docker-credentials.js +546 -0
- package/dist/utils/docker-credentials.js.map +1 -0
- package/dist/utils/emulated-device.js +91 -0
- package/dist/utils/emulated-device.js.map +1 -0
- package/dist/utils/index.js +180 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/modules.js +36 -0
- package/dist/utils/modules.js.map +1 -0
- package/dist/utils/org-selector.js +108 -0
- package/dist/utils/org-selector.js.map +1 -0
- package/dist/utils/proxy.js +31 -0
- package/dist/utils/proxy.js.map +1 -0
- package/dist/utils/registry-credentials.js +113 -0
- package/dist/utils/registry-credentials.js.map +1 -0
- package/dist/utils/statuses.js +124 -0
- package/dist/utils/statuses.js.map +1 -0
- package/dist/utils/templates.js +189 -0
- package/dist/utils/templates.js.map +1 -0
- package/dist/utils/tenant-storage.js +88 -0
- package/dist/utils/tenant-storage.js.map +1 -0
- package/dist/utils/vm.js +434 -0
- package/dist/utils/vm.js.map +1 -0
- package/dist/utils/with-spinner.js +20 -0
- package/dist/utils/with-spinner.js.map +1 -0
- package/package.json +103 -0
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.selectDevice = selectDevice;
|
|
7
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
8
|
+
const inquirer_autocomplete_prompt_1 = __importDefault(require("inquirer-autocomplete-prompt"));
|
|
9
|
+
const fuzzy_1 = __importDefault(require("fuzzy"));
|
|
10
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
11
|
+
const admin_api_1 = require("../../services/admin-api");
|
|
12
|
+
const with_spinner_1 = __importDefault(require("../../utils/with-spinner"));
|
|
13
|
+
const org_selector_1 = require("../../utils/org-selector");
|
|
14
|
+
/**
|
|
15
|
+
* Device picker component that allows selecting a device from a tenant's device list
|
|
16
|
+
*
|
|
17
|
+
* @param organizationSlug - The slug/name of the organization to fetch devices for
|
|
18
|
+
* @returns A promise that resolves to the selected device or null if selection failed
|
|
19
|
+
*/
|
|
20
|
+
async function selectDevice(organizationSlug) {
|
|
21
|
+
// Register the autocomplete prompt type
|
|
22
|
+
inquirer_1.default.registerPrompt('autocomplete', inquirer_autocomplete_prompt_1.default);
|
|
23
|
+
const deviceList = [
|
|
24
|
+
{
|
|
25
|
+
type: 'autocomplete',
|
|
26
|
+
name: 'deviceLabel',
|
|
27
|
+
message: 'Select a device to associate with your app:',
|
|
28
|
+
source: undefined,
|
|
29
|
+
},
|
|
30
|
+
];
|
|
31
|
+
// Get the organization details from the slug using the shared utility function
|
|
32
|
+
const organization = await (0, org_selector_1.getOrganizationBySlug)(organizationSlug);
|
|
33
|
+
if (!organization) {
|
|
34
|
+
console.log(chalk_1.default.yellow(`Organization ${organizationSlug} not found`));
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
const { id: organizationId, phyhubUrl } = organization;
|
|
38
|
+
if (!phyhubUrl) {
|
|
39
|
+
console.log(chalk_1.default.yellow(`No PhyHub URL found for organization ${organizationSlug}`));
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
// Fetch devices using the built-in method that already handles authentication
|
|
43
|
+
const deviceResponse = await (0, with_spinner_1.default)(async () => {
|
|
44
|
+
try {
|
|
45
|
+
// Use the built-in method that handles authentication properly
|
|
46
|
+
const response = await (0, admin_api_1.adminApi)().organizations.fetchDevicesFromPhyhub(organizationId, phyhubUrl);
|
|
47
|
+
// Check if we have a valid response
|
|
48
|
+
if (response.status === 404) {
|
|
49
|
+
console.log(chalk_1.default.yellow('No devices found for this organization.'));
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
// Try to extract devices from different possible response structures
|
|
53
|
+
let devices = [];
|
|
54
|
+
if (response.data?.data?.docs) {
|
|
55
|
+
// Format: response.data.data.docs[]
|
|
56
|
+
devices = response.data.data.docs;
|
|
57
|
+
}
|
|
58
|
+
else if (response.data?.docs) {
|
|
59
|
+
// Format: response.data.docs[]
|
|
60
|
+
devices = response.data.docs;
|
|
61
|
+
}
|
|
62
|
+
else if (Array.isArray(response.data)) {
|
|
63
|
+
// Format: response.data[]
|
|
64
|
+
devices = response.data;
|
|
65
|
+
}
|
|
66
|
+
else if (response.data?.data && Array.isArray(response.data.data)) {
|
|
67
|
+
// Format: response.data.data[]
|
|
68
|
+
devices = response.data.data;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// No recognizable format
|
|
72
|
+
console.log(chalk_1.default.yellow('Could not find devices in response.'));
|
|
73
|
+
return [];
|
|
74
|
+
}
|
|
75
|
+
return devices;
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
console.error(chalk_1.default.red(`Error fetching devices: ${error.message}`));
|
|
79
|
+
if (error.response && error.response.status) {
|
|
80
|
+
console.error(chalk_1.default.red(`API Error: ${error.response.status} ${error.response.statusText}`));
|
|
81
|
+
}
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
}, 'Fetching devices for this organization. Please wait...');
|
|
85
|
+
if (!deviceResponse || deviceResponse.length === 0) {
|
|
86
|
+
console.log(chalk_1.default.yellow(`No devices found for organization ${organizationSlug}`));
|
|
87
|
+
console.log(chalk_1.default.yellow('Please make sure this organization has devices provisioned.'));
|
|
88
|
+
throw new Error('No devices found. Device selection is required for screen applications.');
|
|
89
|
+
}
|
|
90
|
+
// After fetching the devices, update the mapping to focus on the ID field
|
|
91
|
+
const mappedDevices = deviceResponse
|
|
92
|
+
.map((device) => {
|
|
93
|
+
// Always prioritize the id field
|
|
94
|
+
const deviceId = device.id || device._id;
|
|
95
|
+
const accessKey = device.accessKey || deviceId; // Use deviceId as fallback if no accessKey
|
|
96
|
+
if (!deviceId) {
|
|
97
|
+
console.log(chalk_1.default.yellow(`Warning: Device without ID found: ${JSON.stringify(device)}`));
|
|
98
|
+
}
|
|
99
|
+
return {
|
|
100
|
+
name: device.displayName ||
|
|
101
|
+
device.deviceName ||
|
|
102
|
+
device.name ||
|
|
103
|
+
device.deviceSerial ||
|
|
104
|
+
deviceId ||
|
|
105
|
+
'Unknown device',
|
|
106
|
+
value: deviceId,
|
|
107
|
+
accessKey,
|
|
108
|
+
displayName: device.displayName || device.deviceName || device.name || '',
|
|
109
|
+
deviceSerial: device.deviceSerial || device.serial || '',
|
|
110
|
+
};
|
|
111
|
+
})
|
|
112
|
+
.filter((device) => device.value); // Filter out any devices without an ID
|
|
113
|
+
deviceList[0].source = (answers, input = '') => {
|
|
114
|
+
return new Promise((resolve) => {
|
|
115
|
+
const filtered = fuzzy_1.default.filter(input || '', mappedDevices, {
|
|
116
|
+
extract: (entry) => `${entry.name} (${entry.value})`,
|
|
117
|
+
});
|
|
118
|
+
const deviceLabels = filtered.map((entry) => `${entry.original.name} (${entry.original.value})`);
|
|
119
|
+
const updatedAnswers = answers;
|
|
120
|
+
updatedAnswers.filtered = filtered;
|
|
121
|
+
resolve(deviceLabels);
|
|
122
|
+
});
|
|
123
|
+
};
|
|
124
|
+
// Show the prompt and handle empty results
|
|
125
|
+
if (mappedDevices.length === 0) {
|
|
126
|
+
console.log(chalk_1.default.yellow(`No devices with valid IDs found for organization ${organizationSlug}`));
|
|
127
|
+
throw new Error('No valid devices found. Device selection is required for screen applications.');
|
|
128
|
+
}
|
|
129
|
+
try {
|
|
130
|
+
const result = (await inquirer_1.default.prompt(deviceList));
|
|
131
|
+
const { filtered, deviceLabel } = result;
|
|
132
|
+
const filteredDevice = filtered.find((entry) => entry.string === deviceLabel);
|
|
133
|
+
if (!filteredDevice) {
|
|
134
|
+
throw new Error('Device selection is required for screen applications.');
|
|
135
|
+
}
|
|
136
|
+
const { name, value: id, accessKey, displayName, deviceSerial, } = filteredDevice.original;
|
|
137
|
+
// More detailed device information in the log
|
|
138
|
+
const deviceInfo = displayName || deviceSerial
|
|
139
|
+
? `${name} (ID: ${id}${deviceSerial ? `, Serial: ${deviceSerial}` : ''})`
|
|
140
|
+
: `${name} (${id})`;
|
|
141
|
+
console.log(chalk_1.default.green(`Selected device: ${deviceInfo}`));
|
|
142
|
+
return { id, name, accessKey, displayName, deviceSerial };
|
|
143
|
+
}
|
|
144
|
+
catch (error) {
|
|
145
|
+
console.error(chalk_1.default.red(`Error during device selection: ${error.message}`));
|
|
146
|
+
throw new Error('Device selection failed. Device is required for screen applications.');
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
exports.default = selectDevice;
|
|
150
|
+
//# sourceMappingURL=device-picker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-picker.js","sourceRoot":"","sources":["../../../src/commands/app/device-picker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
7
|
+
const path_1 = __importDefault(require("path"));
|
|
8
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
10
|
+
const cheerio_1 = __importDefault(require("cheerio"));
|
|
11
|
+
const utils_1 = require("../../utils");
|
|
12
|
+
const types_1 = require("./types");
|
|
13
|
+
const create_1 = require("./create");
|
|
14
|
+
const importApp = async (source, project) => {
|
|
15
|
+
try {
|
|
16
|
+
const sourceDir = path_1.default.dirname(source);
|
|
17
|
+
const sourceFile = path_1.default.basename(source);
|
|
18
|
+
const templatePath = path_1.default.resolve('templates/html');
|
|
19
|
+
const buildPath = path_1.default.resolve('build', project);
|
|
20
|
+
// Ensure the template and build directories exist
|
|
21
|
+
await fs_extra_1.default.ensureDir(templatePath);
|
|
22
|
+
await fs_extra_1.default.ensureDir(buildPath);
|
|
23
|
+
console.log(chalk_1.default.dim(`Importing ${project} from ${source}...`));
|
|
24
|
+
console.log(chalk_1.default.dim(`Source directory: ${sourceDir}`));
|
|
25
|
+
console.log(chalk_1.default.dim(`Source file: ${sourceFile}`));
|
|
26
|
+
console.log(chalk_1.default.dim(`Template directory: ${templatePath}`));
|
|
27
|
+
console.log(chalk_1.default.dim(`Build directory: ${buildPath}`));
|
|
28
|
+
let pname = (0, utils_1.kebabCase)(project || '');
|
|
29
|
+
let displayName = project || pname;
|
|
30
|
+
while (!pname || pname.trim() === '') {
|
|
31
|
+
const { name } = await inquirer_1.default.prompt([
|
|
32
|
+
{
|
|
33
|
+
name: 'name',
|
|
34
|
+
type: 'input',
|
|
35
|
+
message: 'Enter name for your app:',
|
|
36
|
+
},
|
|
37
|
+
]);
|
|
38
|
+
pname = (0, utils_1.kebabCase)(name);
|
|
39
|
+
displayName = name;
|
|
40
|
+
}
|
|
41
|
+
const resultInitApp = await (0, create_1.initializeProjectApp)(pname, displayName, types_1.ProjectType.Basic);
|
|
42
|
+
const { appDirectory } = resultInitApp;
|
|
43
|
+
console.log(chalk_1.default.green(`✓ Created ${appDirectory}`));
|
|
44
|
+
// Replace the index.html with the source file
|
|
45
|
+
const targetIndexPath = path_1.default.join(appDirectory, 'index.html');
|
|
46
|
+
await fs_extra_1.default.copyFile(path_1.default.join(sourceDir, sourceFile), targetIndexPath);
|
|
47
|
+
// Copy all other assets from the source directory to the build directory
|
|
48
|
+
const files = await fs_extra_1.default.readdir(sourceDir);
|
|
49
|
+
const assetFiles = files.filter((file) => file !== sourceFile);
|
|
50
|
+
for (const file of assetFiles) {
|
|
51
|
+
const sourcePath = path_1.default.join(sourceDir, file);
|
|
52
|
+
const targetPath = path_1.default.join(appDirectory, file);
|
|
53
|
+
await fs_extra_1.default.copy(sourcePath, targetPath);
|
|
54
|
+
}
|
|
55
|
+
generateSchema(appDirectory);
|
|
56
|
+
console.log(chalk_1.default.green(`✓ Import successful: ${appDirectory}`));
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
console.error(chalk_1.default.red(`❗️Error importing app: ${err.message}`));
|
|
60
|
+
throw err;
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
// Function to extract image sources
|
|
64
|
+
const extractImageSources = ($) => {
|
|
65
|
+
const images = [];
|
|
66
|
+
$('img').each((index, element) => {
|
|
67
|
+
images.push({
|
|
68
|
+
type: 'img',
|
|
69
|
+
index,
|
|
70
|
+
src: $(element).attr('src'),
|
|
71
|
+
originalSrc: $(element).attr('src'),
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
$('gwd-image').each((index, element) => {
|
|
75
|
+
images.push({
|
|
76
|
+
type: 'gwd-image',
|
|
77
|
+
index,
|
|
78
|
+
src: $(element).attr('source'),
|
|
79
|
+
originalSrc: $(element).attr('source'),
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
return images;
|
|
83
|
+
};
|
|
84
|
+
// Function to extract text content
|
|
85
|
+
const extractTextContent = ($) => {
|
|
86
|
+
const texts = [];
|
|
87
|
+
$('p, span, h1, h2, h3, h4, h5, h6').each((index, element) => {
|
|
88
|
+
const textContent = $(element).text();
|
|
89
|
+
if (textContent.trim()) {
|
|
90
|
+
texts.push({
|
|
91
|
+
type: element.tagName,
|
|
92
|
+
index,
|
|
93
|
+
text: textContent,
|
|
94
|
+
originalText: textContent,
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
return texts;
|
|
99
|
+
};
|
|
100
|
+
// Function to update an image source with a placeholder
|
|
101
|
+
const updateImageSource = ($, image, newSrc) => {
|
|
102
|
+
if (image.type === 'img') {
|
|
103
|
+
$('img')
|
|
104
|
+
.eq(image.index)
|
|
105
|
+
.attr('src', newSrc);
|
|
106
|
+
}
|
|
107
|
+
else if (image.type === 'gwd-image') {
|
|
108
|
+
$('gwd-image')
|
|
109
|
+
.eq(image.index)
|
|
110
|
+
.attr('source', newSrc);
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
// Function to update text content with a placeholder
|
|
114
|
+
const updateTextContent = ($, text, newText) => {
|
|
115
|
+
const element = $(text.type).eq(text.index);
|
|
116
|
+
element.text(newText);
|
|
117
|
+
};
|
|
118
|
+
// Function to generate JSON schema for placeholders
|
|
119
|
+
const generateJsonSchema = (placeholders) => {
|
|
120
|
+
const schema = {
|
|
121
|
+
type: 'object',
|
|
122
|
+
schema: 'http://json-schema.org/draft-07/schema#',
|
|
123
|
+
properties: {},
|
|
124
|
+
};
|
|
125
|
+
placeholders.forEach(({ type, name, description, default: defaultValue }) => {
|
|
126
|
+
if (type === 'img') {
|
|
127
|
+
schema.properties[name] = {
|
|
128
|
+
type: 'object',
|
|
129
|
+
title: description,
|
|
130
|
+
default: {
|
|
131
|
+
media: {
|
|
132
|
+
url: defaultValue,
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
properties: {
|
|
136
|
+
media: {
|
|
137
|
+
type: 'object',
|
|
138
|
+
properties: {
|
|
139
|
+
ref: {
|
|
140
|
+
type: 'string',
|
|
141
|
+
const: 'media',
|
|
142
|
+
},
|
|
143
|
+
type: {
|
|
144
|
+
type: 'string',
|
|
145
|
+
},
|
|
146
|
+
id: {
|
|
147
|
+
type: 'string',
|
|
148
|
+
},
|
|
149
|
+
url: {
|
|
150
|
+
type: 'string',
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
schema.properties[name] = {
|
|
159
|
+
type: 'string',
|
|
160
|
+
title: description,
|
|
161
|
+
default: defaultValue || undefined,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
});
|
|
165
|
+
return schema;
|
|
166
|
+
};
|
|
167
|
+
// Main function to handle the interactive menu
|
|
168
|
+
const generateSchema = async (appDirectory) => {
|
|
169
|
+
// Read the HTML file
|
|
170
|
+
const htmlFilePath = `${appDirectory}/index.html`;
|
|
171
|
+
const html = fs_extra_1.default.readFileSync(htmlFilePath, 'utf8');
|
|
172
|
+
// Load the HTML into cheerio
|
|
173
|
+
const $ = cheerio_1.default.load(html);
|
|
174
|
+
$('body').append('<script src="apply-settings.js"></script>');
|
|
175
|
+
const images = extractImageSources($);
|
|
176
|
+
const texts = extractTextContent($);
|
|
177
|
+
const placeholders = [];
|
|
178
|
+
if (images.length === 0 && texts.length === 0) {
|
|
179
|
+
console.log('No images or texts found.');
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const imageChoices = images.map((image, index) => ({
|
|
183
|
+
name: `Image ${index + 1}: ${image.src}`,
|
|
184
|
+
value: { type: 'image', index },
|
|
185
|
+
}));
|
|
186
|
+
const textChoices = texts.map((text, index) => ({
|
|
187
|
+
name: `Text ${index + 1}: "${text.text}"`,
|
|
188
|
+
value: { type: 'text', index },
|
|
189
|
+
}));
|
|
190
|
+
const choices = [
|
|
191
|
+
...imageChoices,
|
|
192
|
+
...textChoices,
|
|
193
|
+
new inquirer_1.default.Separator(),
|
|
194
|
+
{ name: 'Finish', value: 'finish' },
|
|
195
|
+
];
|
|
196
|
+
while (true) {
|
|
197
|
+
const answer = await inquirer_1.default.prompt([
|
|
198
|
+
{
|
|
199
|
+
type: 'list',
|
|
200
|
+
name: 'selectedItem',
|
|
201
|
+
message: 'Select an item to update:',
|
|
202
|
+
choices,
|
|
203
|
+
},
|
|
204
|
+
]);
|
|
205
|
+
if (answer.selectedItem === 'finish') {
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
const { type, index } = answer.selectedItem;
|
|
209
|
+
if (type === 'image') {
|
|
210
|
+
const currentImage = images[index];
|
|
211
|
+
if (currentImage.src.startsWith('{{') && currentImage.src.endsWith('}}')) {
|
|
212
|
+
// Reset to original value
|
|
213
|
+
updateImageSource($, currentImage, currentImage.originalSrc);
|
|
214
|
+
currentImage.src = currentImage.originalSrc;
|
|
215
|
+
console.log(`Image ${index + 1} reset to original URL.`);
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
const assetDetails = await inquirer_1.default.prompt([
|
|
219
|
+
{
|
|
220
|
+
type: 'input',
|
|
221
|
+
name: 'assetDescription',
|
|
222
|
+
message: `Enter asset description for Image ${index + 1}:`,
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
type: 'input',
|
|
226
|
+
name: 'defaultValue',
|
|
227
|
+
message: `Enter default value for Image ${index + 1} (optional):`,
|
|
228
|
+
validate: (input) => {
|
|
229
|
+
if (input && !/^https?:\/\/[^\s]+$/.test(input)) {
|
|
230
|
+
return 'Default value must be a valid URL';
|
|
231
|
+
}
|
|
232
|
+
return true;
|
|
233
|
+
},
|
|
234
|
+
default: '',
|
|
235
|
+
},
|
|
236
|
+
]);
|
|
237
|
+
const assetName = (0, utils_1.kebabCase)(assetDetails.assetDescription);
|
|
238
|
+
const placeholder = `{{img:${assetName}:${assetDetails.assetDescription}}}`;
|
|
239
|
+
updateImageSource($, currentImage, placeholder);
|
|
240
|
+
currentImage.src = placeholder;
|
|
241
|
+
console.log(`Image ${index + 1} updated.`);
|
|
242
|
+
placeholders.push({
|
|
243
|
+
type: 'img',
|
|
244
|
+
name: assetName,
|
|
245
|
+
description: assetDetails.assetDescription,
|
|
246
|
+
default: assetDetails.defaultValue,
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
// Update the choices with the new placeholder or original URL
|
|
250
|
+
if ('name' in choices[index]) {
|
|
251
|
+
choices[index].name = `Image ${index + 1}: ${currentImage.src}`;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
else if (type === 'text') {
|
|
255
|
+
const currentText = texts[index];
|
|
256
|
+
if (currentText.text.startsWith('{{') && currentText.text.endsWith('}}')) {
|
|
257
|
+
// Reset to original value
|
|
258
|
+
updateTextContent($, currentText, currentText.originalText);
|
|
259
|
+
currentText.text = currentText.originalText;
|
|
260
|
+
console.log(`Text ${index + 1} reset to original value.`);
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
const assetDetails = await inquirer_1.default.prompt([
|
|
264
|
+
{
|
|
265
|
+
type: 'input',
|
|
266
|
+
name: 'assetDescription',
|
|
267
|
+
message: `Enter asset description for Text ${index + 1}:`,
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
type: 'input',
|
|
271
|
+
name: 'defaultValue',
|
|
272
|
+
message: `Enter default value for Text ${index + 1} (optional):`,
|
|
273
|
+
default: '',
|
|
274
|
+
},
|
|
275
|
+
]);
|
|
276
|
+
const assetName = (0, utils_1.kebabCase)(assetDetails.assetDescription);
|
|
277
|
+
const placeholder = `{{txt:${assetName}:${assetDetails.assetDescription}}}`;
|
|
278
|
+
updateTextContent($, currentText, placeholder);
|
|
279
|
+
currentText.text = placeholder;
|
|
280
|
+
console.log(`Text ${index + 1} updated.`);
|
|
281
|
+
placeholders.push({
|
|
282
|
+
type: 'txt',
|
|
283
|
+
name: assetName,
|
|
284
|
+
description: assetDetails.assetDescription,
|
|
285
|
+
default: assetDetails.defaultValue,
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
// Update the choices with the new placeholder or original text
|
|
289
|
+
if ('name' in choices[images.length + index]) {
|
|
290
|
+
choices[images.length + index].name = `Text ${index +
|
|
291
|
+
1}: "${currentText.text}"`;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// Save the updated HTML
|
|
296
|
+
fs_extra_1.default.writeFileSync(htmlFilePath, $.html());
|
|
297
|
+
console.log('HTML file updated.');
|
|
298
|
+
// Generate and save JSON schema
|
|
299
|
+
const jsonSchema = generateJsonSchema(placeholders);
|
|
300
|
+
fs_extra_1.default.writeFileSync(`${appDirectory}/schema.json`, JSON.stringify(jsonSchema, null, 2));
|
|
301
|
+
};
|
|
302
|
+
exports.default = importApp;
|
|
303
|
+
//# sourceMappingURL=import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/commands/app/import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("../../utils");
|
|
7
|
+
const admin_api_1 = require("../../services/admin-api");
|
|
8
|
+
const org_selector_1 = require("../../utils/org-selector");
|
|
9
|
+
const with_spinner_1 = __importDefault(require("../../utils/with-spinner"));
|
|
10
|
+
exports.default = async (search) => {
|
|
11
|
+
const tenant = await (0, org_selector_1.selectOrganization)('Select a tenant to list apps for:');
|
|
12
|
+
const apps = await (0, with_spinner_1.default)(() => (0, admin_api_1.adminApi)().gridapps.listGridappsByOrganizationId(tenant.id), 'Fetching apps...');
|
|
13
|
+
const data = [];
|
|
14
|
+
apps.forEach((app) => data.push({
|
|
15
|
+
displayName: app.displayName,
|
|
16
|
+
name: `${tenant.slug}.${app.packageName}`,
|
|
17
|
+
access: app.access === 'public' ? 'public' : '',
|
|
18
|
+
}));
|
|
19
|
+
(0, utils_1.printTable)({
|
|
20
|
+
data,
|
|
21
|
+
fields: ['access', 'name', 'displayName'],
|
|
22
|
+
sort: 'displayName',
|
|
23
|
+
search,
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/app/list.ts"],"names":[],"mappings":";;;;;AAAA,uCAAyC;AACzC,wDAAoD;AACpD,2DAA8D;AAC9D,4EAAmD;AAEnD,kBAAe,KAAK,EAAE,MAAM,EAAE,EAAE;IAC9B,MAAM,MAAM,GAAG,MAAM,IAAA,iCAAkB,EAAC,mCAAmC,CAAC,CAAC;IAE7E,MAAM,IAAI,GAAG,MAAM,IAAA,sBAAW,EAC5B,GAAG,EAAE,CAAC,IAAA,oBAAQ,GAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC,MAAM,CAAC,EAAE,CAAC,EACjE,kBAAkB,CACnB,CAAC;IAEF,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACnB,IAAI,CAAC,IAAI,CAAC;QACR,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,IAAI,EAAE,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,WAAW,EAAE;QACzC,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;KAChD,CAAC,CACH,CAAC;IAEF,IAAA,kBAAU,EAAC;QACT,IAAI;QACJ,MAAM,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC;QACzC,IAAI,EAAE,aAAa;QACnB,MAAM;KACP,CAAC,CAAC;AACL,CAAC,CAAC"}
|