@joystick.js/cli-canary 0.0.0-canary.1
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/.build/getFilesToBuild.js +38 -0
- package/.build/index.js +69 -0
- package/HMRNOTES.txt +23 -0
- package/README.md +7 -0
- package/_package.json +55 -0
- package/canary.js +12 -0
- package/dist/cli.js +69 -0
- package/dist/functions/build/getTarIgnoreList.js +25 -0
- package/dist/functions/build/index.js +54 -0
- package/dist/functions/create/buildPackageJSON.js +20 -0
- package/dist/functions/create/index.js +193 -0
- package/dist/functions/create/templates/api/index.js +4 -0
- package/dist/functions/create/templates/i18n/en-US.js +4 -0
- package/dist/functions/create/templates/index.client.js +7 -0
- package/dist/functions/create/templates/index.css +20 -0
- package/dist/functions/create/templates/index.html +23 -0
- package/dist/functions/create/templates/index.server.js +21 -0
- package/dist/functions/create/templates/public/apple-touch-icon-152x152.png +0 -0
- package/dist/functions/create/templates/public/favicon.ico +0 -0
- package/dist/functions/create/templates/public/manifest.json +25 -0
- package/dist/functions/create/templates/public/service-worker.js +32 -0
- package/dist/functions/create/templates/public/splash-screen-1024x1024.png +0 -0
- package/dist/functions/create/templates/settings.development.json +27 -0
- package/dist/functions/create/templates/ui/components/button/index.js +50 -0
- package/dist/functions/create/templates/ui/layouts/app/index.js +13 -0
- package/dist/functions/create/templates/ui/pages/error/index.js +31 -0
- package/dist/functions/create/templates/ui/pages/index/index.js +94 -0
- package/dist/functions/index.js +243 -0
- package/dist/functions/logout/index.js +20 -0
- package/dist/functions/push/checkIfProvisionAvailable.js +19 -0
- package/dist/functions/push/deploy/index.js +173 -0
- package/dist/functions/push/deploy/initial.js +100 -0
- package/dist/functions/push/deploy/version.js +100 -0
- package/dist/functions/push/domains.js +23 -0
- package/dist/functions/push/getAvailableCDN.js +23 -0
- package/dist/functions/push/getDeployment.js +41 -0
- package/dist/functions/push/getDeploymentSummary.js +38 -0
- package/dist/functions/push/getInstanceSizeRegions.js +37 -0
- package/dist/functions/push/getInstanceSizesForRegion.js +34 -0
- package/dist/functions/push/getProviderInstanceSizes.js +34 -0
- package/dist/functions/push/getProviderRegions.js +36 -0
- package/dist/functions/push/getProvidersWithConnectionStatus.js +20 -0
- package/dist/functions/push/getSessionToken.js +23 -0
- package/dist/functions/push/getUserFromSessionToken.js +37 -0
- package/dist/functions/push/index.js +210 -0
- package/dist/functions/push/loginToCheatCode.js +33 -0
- package/dist/functions/push/pingProvisionAPI.js +31 -0
- package/dist/functions/push/prompts.js +332 -0
- package/dist/functions/push/providerMap.js +11 -0
- package/dist/functions/push/providers.js +9 -0
- package/dist/functions/reset/index.js +0 -0
- package/dist/functions/reset/reset.js +127 -0
- package/dist/functions/start/bootstrapLayoutComponent.js +54 -0
- package/dist/functions/start/bootstrapPageComponent.js +51 -0
- package/dist/functions/start/buildFile.js +85 -0
- package/dist/functions/start/buildFiles.js +76 -0
- package/dist/functions/start/buildPlugins.js +183 -0
- package/dist/functions/start/checkIfPortAvailable.js +18 -0
- package/dist/functions/start/cleanup/index.js +18 -0
- package/dist/functions/start/databases/mongodb/availableQueryParameters.js +42 -0
- package/dist/functions/start/databases/mongodb/buildConnectionString.js +22 -0
- package/dist/functions/start/databases/mongodb/buildQueryParameters.js +14 -0
- package/dist/functions/start/databases/mongodb/checkConnection.js +38 -0
- package/dist/functions/start/databases/mongodb/connect.js +25 -0
- package/dist/functions/start/databases/mongodb/index.js +93 -0
- package/dist/functions/start/databases/postgresql/checkConnection.js +41 -0
- package/dist/functions/start/databases/postgresql/connect.js +27 -0
- package/dist/functions/start/databases/postgresql/index.js +106 -0
- package/dist/functions/start/databases/redis.js +0 -0
- package/dist/functions/start/databases/startProvider.js +16 -0
- package/dist/functions/start/fileDependencyMapper.js +22 -0
- package/dist/functions/start/filesToCopy.js +18 -0
- package/dist/functions/start/generateId.js +74 -0
- package/dist/functions/start/getCodependenciesForFile.js +64 -0
- package/dist/functions/start/getFilesToBuild.js +39 -0
- package/dist/functions/start/getProcessIdFromPort.js +60 -0
- package/dist/functions/start/hmrServer.js +66 -0
- package/dist/functions/start/index.js +535 -0
- package/dist/functions/start/isWindows.js +5 -0
- package/dist/functions/start/minifyFile.js +12 -0
- package/dist/functions/start/onWarn.js +63 -0
- package/dist/functions/start/readFileDependencyMap.js +16 -0
- package/dist/functions/start/removeDeletedDependenciesFromMap.js +18 -0
- package/dist/functions/start/setComponentId.js +46 -0
- package/dist/functions/start/updateFileMap.js +67 -0
- package/dist/functions/update/index.js +21 -0
- package/dist/functions/use/index.js +61 -0
- package/dist/index.js +8 -0
- package/dist/lib/CLILog.js +49 -0
- package/dist/lib/buildResolvePlugin.js +21 -0
- package/dist/lib/checkIfValidJSON.js +11 -0
- package/dist/lib/colorLog.js +7 -0
- package/dist/lib/getArgs.js +14 -0
- package/dist/lib/getCodeFrame.js +10 -0
- package/dist/lib/getOptions.js +15 -0
- package/dist/lib/getPlatformSafePath.js +7 -0
- package/dist/lib/getProvider.js +8 -0
- package/dist/lib/help.js +56 -0
- package/dist/lib/isObject.js +6 -0
- package/dist/lib/isValidJSONString.js +11 -0
- package/dist/lib/isWindows.js +5 -0
- package/dist/lib/killProcesses.js +0 -0
- package/dist/lib/loadSettings.js +33 -0
- package/dist/lib/loader.js +82 -0
- package/dist/lib/masterIgnoreList.js +16 -0
- package/dist/lib/nodeEnvironment.js +9 -0
- package/dist/lib/nodeEnvironments.js +8 -0
- package/dist/lib/parseCookiesFromLogin.js +18 -0
- package/dist/lib/rainbowRoad.js +7 -0
- package/dist/lib/readDirectorySync.js +14 -0
- package/dist/lib/regexes.js +12 -0
- package/dist/lib/replaceBackslashesWithForwardSlashes.js +8 -0
- package/dist/lib/replaceFileProtocol.js +8 -0
- package/dist/lib/serializeQueryParameters.js +8 -0
- package/dist/lib/settings.js +4 -0
- package/dist/lib/validateDatabasesFromSettings.js +34 -0
- package/dist/lib/wait.js +8 -0
- package/package.json +54 -0
- package/release.js +40 -0
- package/src/cli.js +88 -0
- package/src/functions/build/getTarIgnoreList.js +30 -0
- package/src/functions/build/index.js +63 -0
- package/src/functions/create/buildPackageJSON.js +18 -0
- package/src/functions/create/index.js +209 -0
- package/src/functions/create/templates/api/index.js +4 -0
- package/src/functions/create/templates/i18n/en-US.js +4 -0
- package/src/functions/create/templates/index.client.js +7 -0
- package/src/functions/create/templates/index.css +20 -0
- package/src/functions/create/templates/index.html +23 -0
- package/src/functions/create/templates/index.server.js +21 -0
- package/src/functions/create/templates/public/apple-touch-icon-152x152.png +0 -0
- package/src/functions/create/templates/public/favicon.ico +0 -0
- package/src/functions/create/templates/public/manifest.json +25 -0
- package/src/functions/create/templates/public/service-worker.js +32 -0
- package/src/functions/create/templates/public/splash-screen-1024x1024.png +0 -0
- package/src/functions/create/templates/settings.development.json +27 -0
- package/src/functions/create/templates/ui/components/button/index.js +50 -0
- package/src/functions/create/templates/ui/layouts/app/index.js +13 -0
- package/src/functions/create/templates/ui/pages/error/index.js +31 -0
- package/src/functions/create/templates/ui/pages/index/index.js +94 -0
- package/src/functions/index.js +243 -0
- package/src/functions/logout/index.js +20 -0
- package/src/functions/push/checkIfProvisionAvailable.js +20 -0
- package/src/functions/push/deploy/index.js +199 -0
- package/src/functions/push/deploy/initial.js +108 -0
- package/src/functions/push/deploy/version.js +108 -0
- package/src/functions/push/domains.js +23 -0
- package/src/functions/push/getAvailableCDN.js +27 -0
- package/src/functions/push/getDeployment.js +43 -0
- package/src/functions/push/getDeploymentSummary.js +39 -0
- package/src/functions/push/getInstanceSizeRegions.js +40 -0
- package/src/functions/push/getInstanceSizesForRegion.js +35 -0
- package/src/functions/push/getProviderInstanceSizes.js +35 -0
- package/src/functions/push/getProviderRegions.js +39 -0
- package/src/functions/push/getProvidersWithConnectionStatus.js +25 -0
- package/src/functions/push/getSessionToken.js +26 -0
- package/src/functions/push/getUserFromSessionToken.js +39 -0
- package/src/functions/push/index.js +245 -0
- package/src/functions/push/loginToCheatCode.js +34 -0
- package/src/functions/push/pingProvisionAPI.js +33 -0
- package/src/functions/push/prompts.js +276 -0
- package/src/functions/push/providerMap.js +8 -0
- package/src/functions/push/providers.js +6 -0
- package/src/functions/reset/index.js +0 -0
- package/src/functions/reset/reset.js +163 -0
- package/src/functions/start/bootstrapLayoutComponent.js +57 -0
- package/src/functions/start/bootstrapPageComponent.js +54 -0
- package/src/functions/start/buildFile.js +97 -0
- package/src/functions/start/buildFiles.js +101 -0
- package/src/functions/start/buildPlugins.js +215 -0
- package/src/functions/start/checkIfPortAvailable.js +21 -0
- package/src/functions/start/cleanup/index.js +23 -0
- package/src/functions/start/databases/mongodb/availableQueryParameters.js +39 -0
- package/src/functions/start/databases/mongodb/buildConnectionString.js +28 -0
- package/src/functions/start/databases/mongodb/buildQueryParameters.js +15 -0
- package/src/functions/start/databases/mongodb/checkConnection.js +40 -0
- package/src/functions/start/databases/mongodb/connect.js +25 -0
- package/src/functions/start/databases/mongodb/index.js +108 -0
- package/src/functions/start/databases/postgresql/checkConnection.js +43 -0
- package/src/functions/start/databases/postgresql/connect.js +27 -0
- package/src/functions/start/databases/postgresql/index.js +127 -0
- package/src/functions/start/databases/redis.js +0 -0
- package/src/functions/start/databases/startProvider.js +15 -0
- package/src/functions/start/fileDependencyMapper.js +24 -0
- package/src/functions/start/filesToCopy.js +15 -0
- package/src/functions/start/generateId.js +73 -0
- package/src/functions/start/getCodependenciesForFile.js +84 -0
- package/src/functions/start/getFilesToBuild.js +49 -0
- package/src/functions/start/getProcessIdFromPort.js +92 -0
- package/src/functions/start/hmrServer.js +78 -0
- package/src/functions/start/index.js +688 -0
- package/src/functions/start/isWindows.js +3 -0
- package/src/functions/start/minifyFile.js +10 -0
- package/src/functions/start/onWarn.js +68 -0
- package/src/functions/start/readFileDependencyMap.js +19 -0
- package/src/functions/start/removeDeletedDependenciesFromMap.js +19 -0
- package/src/functions/start/setComponentId.js +58 -0
- package/src/functions/start/updateFileMap.js +100 -0
- package/src/functions/update/index.js +20 -0
- package/src/functions/use/index.js +62 -0
- package/src/index.js +13 -0
- package/src/lib/CLILog.js +40 -0
- package/src/lib/buildResolvePlugin.js +32 -0
- package/src/lib/checkIfValidJSON.js +8 -0
- package/src/lib/colorLog.js +5 -0
- package/src/lib/getArgs.js +14 -0
- package/src/lib/getCodeFrame.js +8 -0
- package/src/lib/getOptions.js +12 -0
- package/src/lib/getPlatformSafePath.js +6 -0
- package/src/lib/getProvider.js +5 -0
- package/src/lib/help.js +56 -0
- package/src/lib/isObject.js +3 -0
- package/src/lib/isValidJSONString.js +8 -0
- package/src/lib/isWindows.js +3 -0
- package/src/lib/killProcesses.js +5 -0
- package/src/lib/loadSettings.js +40 -0
- package/src/lib/loader.js +94 -0
- package/src/lib/masterIgnoreList.js +13 -0
- package/src/lib/nodeEnvironment.js +6 -0
- package/src/lib/nodeEnvironments.js +8 -0
- package/src/lib/parseCookiesFromLogin.js +21 -0
- package/src/lib/rainbowRoad.js +5 -0
- package/src/lib/readDirectorySync.js +13 -0
- package/src/lib/regexes.js +5 -0
- package/src/lib/replaceBackslashesWithForwardSlashes.js +8 -0
- package/src/lib/replaceFileProtocol.js +8 -0
- package/src/lib/serializeQueryParameters.js +5 -0
- package/src/lib/settings.js +1 -0
- package/src/lib/validateDatabasesFromSettings.js +37 -0
- package/src/lib/wait.js +5 -0
- package/storage/.verdaccio-db.json +1 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
import fetch from "node-fetch";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import _ from "lodash";
|
|
4
|
+
import fs from "fs";
|
|
5
|
+
import FormData from "form-data";
|
|
6
|
+
import Loader from "../../lib/loader.js";
|
|
7
|
+
import domains from "./domains.js";
|
|
8
|
+
import checkIfValidJSON from "../../lib/checkIfValidJSON.js";
|
|
9
|
+
import CLILog from "../../lib/CLILog.js";
|
|
10
|
+
import build from "../build/index.js";
|
|
11
|
+
import getAvailableCDN from "../getAvailableCDN.js";
|
|
12
|
+
import initialDeployment from "./initial.js";
|
|
13
|
+
import versionDeployment from "./version.js";
|
|
14
|
+
const getAppSettings = (environment = "") => {
|
|
15
|
+
try {
|
|
16
|
+
if (fs.existsSync(`settings.${environment}.json`)) {
|
|
17
|
+
const file = fs.readFileSync(`settings.${environment}.json`, "utf-8");
|
|
18
|
+
return file;
|
|
19
|
+
}
|
|
20
|
+
return "{}";
|
|
21
|
+
} catch (exception) {
|
|
22
|
+
throw new Error(`[initDeployment.getAppSettings] ${exception.message}`);
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const startDeployment = async ({
|
|
26
|
+
isInitialDeployment = false,
|
|
27
|
+
loginSessionToken = "",
|
|
28
|
+
deployment = {},
|
|
29
|
+
version = "",
|
|
30
|
+
appSettings = "",
|
|
31
|
+
environment = "production",
|
|
32
|
+
server = "production"
|
|
33
|
+
}) => {
|
|
34
|
+
try {
|
|
35
|
+
if (isInitialDeployment) {
|
|
36
|
+
return initialDeployment({
|
|
37
|
+
version,
|
|
38
|
+
deployment,
|
|
39
|
+
settings: appSettings,
|
|
40
|
+
environment,
|
|
41
|
+
loginSessionToken,
|
|
42
|
+
server
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return versionDeployment({
|
|
46
|
+
version,
|
|
47
|
+
deployment,
|
|
48
|
+
settings: appSettings,
|
|
49
|
+
environment,
|
|
50
|
+
loginSessionToken,
|
|
51
|
+
server
|
|
52
|
+
});
|
|
53
|
+
} catch (exception) {
|
|
54
|
+
throw new Error(`[initDeployment.startDeployment] ${exception.message}`);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const uploadBuildToCDN = ({
|
|
58
|
+
mirror = "",
|
|
59
|
+
domain = "",
|
|
60
|
+
loginSessionToken = "",
|
|
61
|
+
deploymentId = "",
|
|
62
|
+
version = ""
|
|
63
|
+
}) => {
|
|
64
|
+
try {
|
|
65
|
+
const formData = new FormData();
|
|
66
|
+
const timestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
67
|
+
formData.append(
|
|
68
|
+
"version_tar",
|
|
69
|
+
fs.readFileSync(`.build/build.tar.xz`),
|
|
70
|
+
`${timestamp}.tar.xz`
|
|
71
|
+
);
|
|
72
|
+
formData.append("deploymentId", deploymentId);
|
|
73
|
+
formData.append("version", version);
|
|
74
|
+
fetch(`${mirror}/api/uploads/receive`, {
|
|
75
|
+
method: "POST",
|
|
76
|
+
headers: {
|
|
77
|
+
...formData.getHeaders(),
|
|
78
|
+
"x-deployment-domain": domain,
|
|
79
|
+
"x-login-session-token": loginSessionToken
|
|
80
|
+
},
|
|
81
|
+
body: formData
|
|
82
|
+
}).then(async (response) => {
|
|
83
|
+
const data = await response.json();
|
|
84
|
+
return data?.data;
|
|
85
|
+
});
|
|
86
|
+
} catch (exception) {
|
|
87
|
+
throw new Error(`[initDeployment.uploadBuildToCDN] ${exception.message}`);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
const uploadVersionToCDN = async ({
|
|
91
|
+
loader,
|
|
92
|
+
deployment,
|
|
93
|
+
loginSessionToken,
|
|
94
|
+
version
|
|
95
|
+
}) => {
|
|
96
|
+
try {
|
|
97
|
+
const availableCDN = await getAvailableCDN();
|
|
98
|
+
if (!availableCDN) {
|
|
99
|
+
loader.stop();
|
|
100
|
+
console.log(chalk.redBright(`
|
|
101
|
+
Unable to upload version. Check status.cheatcode.co for availability.
|
|
102
|
+
`));
|
|
103
|
+
process.exit();
|
|
104
|
+
}
|
|
105
|
+
await uploadBuildToCDN({
|
|
106
|
+
mirror: availableCDN,
|
|
107
|
+
domain: deployment?.domain,
|
|
108
|
+
loginSessionToken,
|
|
109
|
+
version,
|
|
110
|
+
deploymentId: deployment?._id
|
|
111
|
+
});
|
|
112
|
+
} catch (exception) {
|
|
113
|
+
throw new Error(`[actionName.uploadVersionToCDN] ${exception.message}`);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
const buildApp = (environment = "production") => {
|
|
117
|
+
try {
|
|
118
|
+
return build({}, { isDeploy: true, type: "tar", environment });
|
|
119
|
+
} catch (exception) {
|
|
120
|
+
throw new Error(`[initDeployment.buildApp] ${exception.message}`);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
const validateOptions = (options) => {
|
|
124
|
+
try {
|
|
125
|
+
if (!options)
|
|
126
|
+
throw new Error("options object is required.");
|
|
127
|
+
if (!options.loginSessionToken)
|
|
128
|
+
throw new Error("options.loginSessionToken is required.");
|
|
129
|
+
} catch (exception) {
|
|
130
|
+
throw new Error(`[initDeployment.validateOptions] ${exception.message}`);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
const initDeployment = async (options, { resolve, reject }) => {
|
|
134
|
+
try {
|
|
135
|
+
validateOptions(options);
|
|
136
|
+
console.log("");
|
|
137
|
+
const loader = new Loader({ padding: " ", defaultMessage: "Deploying app..." });
|
|
138
|
+
loader.text("Deploying app...");
|
|
139
|
+
const deploymentTimestamp = (/* @__PURE__ */ new Date()).toISOString();
|
|
140
|
+
await buildApp(options?.deployment?.environment || options?.environment);
|
|
141
|
+
const appSettings = getAppSettings(options?.environment);
|
|
142
|
+
loader.text("Uploading deployment...");
|
|
143
|
+
await uploadVersionToCDN({
|
|
144
|
+
loader,
|
|
145
|
+
loginSessionToken: options?.loginSessionToken,
|
|
146
|
+
deployment: options?.deployment,
|
|
147
|
+
version: deploymentTimestamp
|
|
148
|
+
});
|
|
149
|
+
loader.text("Starting deployment...");
|
|
150
|
+
await startDeployment({
|
|
151
|
+
isInitialDeployment: options?.isInitialDeployment,
|
|
152
|
+
loginSessionToken: options?.loginSessionToken,
|
|
153
|
+
deployment: options.deployment,
|
|
154
|
+
version: deploymentTimestamp,
|
|
155
|
+
appSettings,
|
|
156
|
+
environment: options?.environment,
|
|
157
|
+
server: options?.server
|
|
158
|
+
});
|
|
159
|
+
loader.stop();
|
|
160
|
+
console.log(chalk.greenBright(`Your app is deploying! To monitor progress, head to ${domains?.push}/deployments/${options?.deployment?.domain}
|
|
161
|
+
`));
|
|
162
|
+
resolve();
|
|
163
|
+
} catch (exception) {
|
|
164
|
+
console.warn(exception);
|
|
165
|
+
reject(`[initDeployment] ${exception.message}`);
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
var deploy_default = (options) => new Promise((resolve, reject) => {
|
|
169
|
+
initDeployment(options, { resolve, reject });
|
|
170
|
+
});
|
|
171
|
+
export {
|
|
172
|
+
deploy_default as default
|
|
173
|
+
};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import fetch from "node-fetch";
|
|
3
|
+
import domains from "../domains.js";
|
|
4
|
+
import checkIfValidJSON from "../../../lib/checkIfValidJSON.js";
|
|
5
|
+
import CLILog from "../../../lib/CLILog.js";
|
|
6
|
+
const pushDeploymentToProvision = ({
|
|
7
|
+
deploymentPayload = null,
|
|
8
|
+
loginSessionToken,
|
|
9
|
+
server = "production"
|
|
10
|
+
}) => {
|
|
11
|
+
try {
|
|
12
|
+
return fetch(`${domains?.provision[server][0]}/api/deployments/initial`, {
|
|
13
|
+
method: "POST",
|
|
14
|
+
headers: {
|
|
15
|
+
...deploymentPayload.getHeaders(),
|
|
16
|
+
"x-login-session-token": loginSessionToken
|
|
17
|
+
},
|
|
18
|
+
body: formData
|
|
19
|
+
}).then(async (response) => {
|
|
20
|
+
const text = await response.text();
|
|
21
|
+
const data = checkIfValidJSON(text);
|
|
22
|
+
const isPayloadSizeError = text?.includes("payload");
|
|
23
|
+
if (data?.error || isPayloadSizeError) {
|
|
24
|
+
CLILog(
|
|
25
|
+
data.error?.message || text,
|
|
26
|
+
{
|
|
27
|
+
level: "danger",
|
|
28
|
+
docs: isPayloadSizeError ? "https://cheatcode.co/docs/push/considerations/payload-size" : "https://cheatcode.co/docs/push"
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
process.exit(0);
|
|
32
|
+
}
|
|
33
|
+
return data?.data;
|
|
34
|
+
});
|
|
35
|
+
} catch (exception) {
|
|
36
|
+
throw new Error(`[initialDeployment.pushDeploymentToProvision] ${exception.message}`);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const getDeploymentPayload = ({
|
|
40
|
+
version,
|
|
41
|
+
deployment,
|
|
42
|
+
settings,
|
|
43
|
+
environment
|
|
44
|
+
}) => {
|
|
45
|
+
try {
|
|
46
|
+
const formData2 = new FormData();
|
|
47
|
+
formData2.append("deployment", JSON.stringify({
|
|
48
|
+
...deployment || {},
|
|
49
|
+
version,
|
|
50
|
+
settings,
|
|
51
|
+
environment
|
|
52
|
+
}));
|
|
53
|
+
return formData2;
|
|
54
|
+
} catch (exception) {
|
|
55
|
+
throw new Error(`[initialDeployment.getDeploymentPayload] ${exception.message}`);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const validateOptions = (options) => {
|
|
59
|
+
try {
|
|
60
|
+
if (!options)
|
|
61
|
+
throw new Error("options object is required.");
|
|
62
|
+
if (!options.version)
|
|
63
|
+
throw new Error("options.version is required.");
|
|
64
|
+
if (!options.deployment)
|
|
65
|
+
throw new Error("options.deployment is required.");
|
|
66
|
+
if (!options.settings)
|
|
67
|
+
throw new Error("options.settings is required.");
|
|
68
|
+
if (!options.environment)
|
|
69
|
+
throw new Error("options.environment is required.");
|
|
70
|
+
if (!options.loginSessionToken)
|
|
71
|
+
throw new Error("options.loginSessionToken is required.");
|
|
72
|
+
} catch (exception) {
|
|
73
|
+
throw new Error(`[initialDeployment.validateOptions] ${exception.message}`);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const initialDeployment = async (options, { resolve, reject }) => {
|
|
77
|
+
try {
|
|
78
|
+
validateOptions(options);
|
|
79
|
+
const deploymentPayload = getDeploymentPayload({
|
|
80
|
+
version: options?.version,
|
|
81
|
+
deployment: options?.deployment,
|
|
82
|
+
settings: options?.settings,
|
|
83
|
+
environment: options?.environment
|
|
84
|
+
});
|
|
85
|
+
await pushDeploymentToProvision({
|
|
86
|
+
deploymentPayload,
|
|
87
|
+
loginSessionToken: options?.loginSessionToken,
|
|
88
|
+
server: options?.server
|
|
89
|
+
});
|
|
90
|
+
resolve();
|
|
91
|
+
} catch (exception) {
|
|
92
|
+
reject(`[initialDeployment] ${exception.message}`);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
var initial_default = (options) => new Promise((resolve, reject) => {
|
|
96
|
+
initialDeployment(options, { resolve, reject });
|
|
97
|
+
});
|
|
98
|
+
export {
|
|
99
|
+
initial_default as default
|
|
100
|
+
};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import fetch from "node-fetch";
|
|
3
|
+
import domains from "./domains.js";
|
|
4
|
+
import checkIfValidJSON from "../../../lib/checkIfValidJSON.js";
|
|
5
|
+
import CLILog from "../../../lib/CLILog.js";
|
|
6
|
+
const pushDeploymentToProvision = ({
|
|
7
|
+
deploymentPayload = null,
|
|
8
|
+
loginSessionToken,
|
|
9
|
+
server = "production"
|
|
10
|
+
}) => {
|
|
11
|
+
try {
|
|
12
|
+
return fetch(`${domains?.provision[server][0]}/api/deployments/version`, {
|
|
13
|
+
method: "POST",
|
|
14
|
+
headers: {
|
|
15
|
+
...deploymentPayload.getHeaders(),
|
|
16
|
+
"x-login-session-token": loginSessionToken
|
|
17
|
+
},
|
|
18
|
+
body: formData
|
|
19
|
+
}).then(async (response) => {
|
|
20
|
+
const text = await response.text();
|
|
21
|
+
const data = checkIfValidJSON(text);
|
|
22
|
+
const isPayloadSizeError = text?.includes("payload");
|
|
23
|
+
if (data?.error || isPayloadSizeError) {
|
|
24
|
+
CLILog(
|
|
25
|
+
data.error?.message || text,
|
|
26
|
+
{
|
|
27
|
+
level: "danger",
|
|
28
|
+
docs: isPayloadSizeError ? "https://cheatcode.co/docs/push/considerations/payload-size" : "https://cheatcode.co/docs/push"
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
process.exit(0);
|
|
32
|
+
}
|
|
33
|
+
return data?.data;
|
|
34
|
+
});
|
|
35
|
+
} catch (exception) {
|
|
36
|
+
throw new Error(`[versionDeployment.pushDeploymentToProvision] ${exception.message}`);
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
const getDeploymentPayload = ({
|
|
40
|
+
version,
|
|
41
|
+
deployment,
|
|
42
|
+
settings,
|
|
43
|
+
environment
|
|
44
|
+
}) => {
|
|
45
|
+
try {
|
|
46
|
+
const formData2 = new FormData();
|
|
47
|
+
formData2.append("deployment", JSON.stringify({
|
|
48
|
+
...deployment || {},
|
|
49
|
+
version,
|
|
50
|
+
settings,
|
|
51
|
+
environment
|
|
52
|
+
}));
|
|
53
|
+
return formData2;
|
|
54
|
+
} catch (exception) {
|
|
55
|
+
throw new Error(`[versionDeployment.getDeploymentPayload] ${exception.message}`);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const validateOptions = (options) => {
|
|
59
|
+
try {
|
|
60
|
+
if (!options)
|
|
61
|
+
throw new Error("options object is required.");
|
|
62
|
+
if (!options.version)
|
|
63
|
+
throw new Error("options.version is required.");
|
|
64
|
+
if (!options.deployment)
|
|
65
|
+
throw new Error("options.deployment is required.");
|
|
66
|
+
if (!options.settings)
|
|
67
|
+
throw new Error("options.settings is required.");
|
|
68
|
+
if (!options.environment)
|
|
69
|
+
throw new Error("options.environment is required.");
|
|
70
|
+
if (!options.loginSessionToken)
|
|
71
|
+
throw new Error("options.loginSessionToken is required.");
|
|
72
|
+
} catch (exception) {
|
|
73
|
+
throw new Error(`[versionDeployment.validateOptions] ${exception.message}`);
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const versionDeployment = async (options, { resolve, reject }) => {
|
|
77
|
+
try {
|
|
78
|
+
validateOptions(options);
|
|
79
|
+
const deploymentPayload = getDeploymentPayload({
|
|
80
|
+
version: options?.version,
|
|
81
|
+
deployment: options?.deployment,
|
|
82
|
+
settings: options?.settings,
|
|
83
|
+
environment: options?.environment
|
|
84
|
+
});
|
|
85
|
+
await pushDeploymentToProvision({
|
|
86
|
+
deploymentPayload,
|
|
87
|
+
loginSessionToken: options?.loginSessionToken,
|
|
88
|
+
server: options?.server
|
|
89
|
+
});
|
|
90
|
+
resolve();
|
|
91
|
+
} catch (exception) {
|
|
92
|
+
reject(`[versionDeployment] ${exception.message}`);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
var version_default = (options) => new Promise((resolve, reject) => {
|
|
96
|
+
versionDeployment(options, { resolve, reject });
|
|
97
|
+
});
|
|
98
|
+
export {
|
|
99
|
+
version_default as default
|
|
100
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const push = {
|
|
2
|
+
local: ["http://localhost:2600"],
|
|
3
|
+
staging: [],
|
|
4
|
+
production: ["https://push.cheatcode.co"]
|
|
5
|
+
};
|
|
6
|
+
const provision = {
|
|
7
|
+
local: ["http://localhost:2602"],
|
|
8
|
+
staging: [],
|
|
9
|
+
production: ["https://provision.cheatcode.co"]
|
|
10
|
+
};
|
|
11
|
+
const versions = {
|
|
12
|
+
local: ["http://localhost:2603", "http://localhost:2604", "http://localhost:2605"],
|
|
13
|
+
staging: [],
|
|
14
|
+
production: ["https://push-versions-1.cheatcode.co", "https://push-versions-2.cheatcode.co", "https://push-versions-3.cheatcode.co"]
|
|
15
|
+
};
|
|
16
|
+
var domains_default = {
|
|
17
|
+
push,
|
|
18
|
+
provision,
|
|
19
|
+
versions
|
|
20
|
+
};
|
|
21
|
+
export {
|
|
22
|
+
domains_default as default
|
|
23
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import fetch from "node-fetch";
|
|
2
|
+
import _ from "lodash";
|
|
3
|
+
import domains from "./domains.js";
|
|
4
|
+
var getAvailableCDN_default = async () => {
|
|
5
|
+
const results = (await Promise.allSettled(domains?.versions?.production?.map(async (mirror) => {
|
|
6
|
+
const controller = new AbortController();
|
|
7
|
+
setTimeout(() => controller.abort(), 2e3);
|
|
8
|
+
const result = await fetch(`${mirror}/api/ping`, { signal: controller.signal }).catch((error) => {
|
|
9
|
+
return { status: 503 };
|
|
10
|
+
});
|
|
11
|
+
return {
|
|
12
|
+
mirror,
|
|
13
|
+
status: result.status
|
|
14
|
+
};
|
|
15
|
+
})))?.map((result) => {
|
|
16
|
+
return result.value;
|
|
17
|
+
});
|
|
18
|
+
const firstAvailable = _.orderBy(results, ["status", "mirror"])[0];
|
|
19
|
+
return firstAvailable?.status === 200 ? firstAvailable?.mirror : null;
|
|
20
|
+
};
|
|
21
|
+
export {
|
|
22
|
+
getAvailableCDN_default as default
|
|
23
|
+
};
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import fetch from "node-fetch";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { URL, URLSearchParams } from "url";
|
|
4
|
+
import domains from "./domains.js";
|
|
5
|
+
import checkIfValidJSON from "./checkIfValidJSON.js";
|
|
6
|
+
import CLILog from "./CLILog.js";
|
|
7
|
+
var getDeployment_default = ({
|
|
8
|
+
domain = "",
|
|
9
|
+
environment = "production",
|
|
10
|
+
loginSessionToken = ""
|
|
11
|
+
}) => {
|
|
12
|
+
const url = new URL(`${domains?.provision}/api/deployments`);
|
|
13
|
+
url.search = new URLSearchParams({
|
|
14
|
+
domain,
|
|
15
|
+
environment
|
|
16
|
+
});
|
|
17
|
+
return fetch(url, {
|
|
18
|
+
method: "GET",
|
|
19
|
+
headers: {
|
|
20
|
+
"x-login-session-token": loginSessionToken,
|
|
21
|
+
"content-type": "application/json"
|
|
22
|
+
}
|
|
23
|
+
}).then(async (response) => {
|
|
24
|
+
const text = await response.text();
|
|
25
|
+
const data = checkIfValidJSON(text);
|
|
26
|
+
if (data?.error) {
|
|
27
|
+
CLILog(
|
|
28
|
+
data?.error?.message,
|
|
29
|
+
{
|
|
30
|
+
level: "danger",
|
|
31
|
+
docs: "https://cheatcode.co/docs/push"
|
|
32
|
+
}
|
|
33
|
+
);
|
|
34
|
+
process.exit(0);
|
|
35
|
+
}
|
|
36
|
+
return data?.data?.deployment;
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
export {
|
|
40
|
+
getDeployment_default as default
|
|
41
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import fetch from "node-fetch";
|
|
2
|
+
import domains from "./domains.js";
|
|
3
|
+
import checkIfValidJSON from "../../lib/checkIfValidJSON.js";
|
|
4
|
+
import CLILog from "../../lib/CLILog.js";
|
|
5
|
+
var getDeploymentSummary_default = (answers = {}, loginSessionToken = "", deploymentDomain = "") => {
|
|
6
|
+
return fetch(`${domains.provision}/api/deployments/summary`, {
|
|
7
|
+
method: "POST",
|
|
8
|
+
headers: {
|
|
9
|
+
"x-login-session-token": loginSessionToken,
|
|
10
|
+
"x-deployment-domain": deploymentDomain,
|
|
11
|
+
"content-type": "application/json"
|
|
12
|
+
},
|
|
13
|
+
body: JSON.stringify({
|
|
14
|
+
provider: answers?.provider,
|
|
15
|
+
sizes: [
|
|
16
|
+
{ type: "loadBalancers", quantity: answers?.loadBalancerInstances, id: answers?.loadBalancer_size },
|
|
17
|
+
{ type: "instances", quantity: answers?.appInstances, id: answers?.app_size }
|
|
18
|
+
]
|
|
19
|
+
})
|
|
20
|
+
}).then(async (response) => {
|
|
21
|
+
const text = await response.text();
|
|
22
|
+
const data = checkIfValidJSON(text);
|
|
23
|
+
if (data?.error) {
|
|
24
|
+
CLILog(
|
|
25
|
+
data.error?.message,
|
|
26
|
+
{
|
|
27
|
+
level: "danger",
|
|
28
|
+
docs: "https://cheatcode.co/docs/push"
|
|
29
|
+
}
|
|
30
|
+
);
|
|
31
|
+
process.exit(0);
|
|
32
|
+
}
|
|
33
|
+
return data?.data?.summary;
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
export {
|
|
37
|
+
getDeploymentSummary_default as default
|
|
38
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import fetch from "node-fetch";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import domains from "./domains.js";
|
|
4
|
+
import CLILog from "../../lib/CLILog.js";
|
|
5
|
+
import checkIfValidJSON from "../../lib/checkIfValidJSON.js";
|
|
6
|
+
var getInstanceSizeRegions_default = (target = "", answers = {}, loginSessionToken = "") => {
|
|
7
|
+
const url = new URL(`${domains.provision}/api/providers/${answers?.provider}/regions`);
|
|
8
|
+
const params = new URLSearchParams({
|
|
9
|
+
size: answers[target],
|
|
10
|
+
loadBalancerRegion: answers?.loadBalancer_region
|
|
11
|
+
});
|
|
12
|
+
url.search = params.toString();
|
|
13
|
+
return fetch(url, {
|
|
14
|
+
method: "GET",
|
|
15
|
+
headers: {
|
|
16
|
+
"x-login-session-token": loginSessionToken,
|
|
17
|
+
"content-type": "application/json"
|
|
18
|
+
}
|
|
19
|
+
}).then(async (response) => {
|
|
20
|
+
const text = await response.text();
|
|
21
|
+
const data = checkIfValidJSON(text);
|
|
22
|
+
if (data?.error) {
|
|
23
|
+
CLILog(
|
|
24
|
+
data.error?.message,
|
|
25
|
+
{
|
|
26
|
+
level: "danger",
|
|
27
|
+
docs: "https://cheatcode.co/docs/push/deployment-tokens"
|
|
28
|
+
}
|
|
29
|
+
);
|
|
30
|
+
process.exit(0);
|
|
31
|
+
}
|
|
32
|
+
return data?.data;
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
export {
|
|
36
|
+
getInstanceSizeRegions_default as default
|
|
37
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import fetch from "node-fetch";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import domains from "./domains.js";
|
|
4
|
+
import CLILog from "../../lib/CLILog.js";
|
|
5
|
+
import checkIfValidJSON from "../../lib/checkIfValidJSON.js";
|
|
6
|
+
var getInstanceSizesForRegion_default = (provider = "", region = "", loginSessionToken = "") => {
|
|
7
|
+
return fetch(
|
|
8
|
+
`${domains.provision}/api/providers/${provider}/sizes?region=${region}`,
|
|
9
|
+
{
|
|
10
|
+
method: "GET",
|
|
11
|
+
headers: {
|
|
12
|
+
"x-login-session-token": loginSessionToken,
|
|
13
|
+
"Content-Type": "application/json"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
).then(async (response) => {
|
|
17
|
+
const text = await response.text();
|
|
18
|
+
const data = checkIfValidJSON(text);
|
|
19
|
+
if (data?.error) {
|
|
20
|
+
CLILog(
|
|
21
|
+
data.error?.message,
|
|
22
|
+
{
|
|
23
|
+
level: "danger",
|
|
24
|
+
docs: "https://cheatcode.co/docs/push/deployment-tokens"
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
process.exit(0);
|
|
28
|
+
}
|
|
29
|
+
return data?.data?.sizes;
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
export {
|
|
33
|
+
getInstanceSizesForRegion_default as default
|
|
34
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import fetch from "node-fetch";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import domains from "./domains.js";
|
|
4
|
+
import CLILog from "../../lib/CLILog.js";
|
|
5
|
+
import checkIfValidJSON from "../../lib/checkIfValidJSON.js";
|
|
6
|
+
var getProviderInstanceSizes_default = (answers = {}, loginSessionToken = "") => {
|
|
7
|
+
return fetch(
|
|
8
|
+
`${domains.provision}/api/providers/${answers?.provider}/sizes`,
|
|
9
|
+
{
|
|
10
|
+
method: "GET",
|
|
11
|
+
headers: {
|
|
12
|
+
"x-login-session-token": loginSessionToken,
|
|
13
|
+
"Content-Type": "application/json"
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
).then(async (response) => {
|
|
17
|
+
const text = await response.text();
|
|
18
|
+
const data = checkIfValidJSON(text);
|
|
19
|
+
if (data?.error) {
|
|
20
|
+
CLILog(
|
|
21
|
+
data.error?.message,
|
|
22
|
+
{
|
|
23
|
+
level: "danger",
|
|
24
|
+
docs: "https://cheatcode.co/docs/push/deployment-tokens"
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
process.exit(0);
|
|
28
|
+
}
|
|
29
|
+
return data?.data;
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
export {
|
|
33
|
+
getProviderInstanceSizes_default as default
|
|
34
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import fetch from "node-fetch";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import domains from "./domains.js";
|
|
4
|
+
import CLILog from "../../lib/CLILog.js";
|
|
5
|
+
import checkIfValidJSON from "../../lib/checkIfValidJSON.js";
|
|
6
|
+
var getProviderRegions_default = (provider = "", loginSessionToken = "") => {
|
|
7
|
+
const url = new URL(`${domains.provision}/api/providers/${provider}/regions`);
|
|
8
|
+
const params = new URLSearchParams({
|
|
9
|
+
provider
|
|
10
|
+
});
|
|
11
|
+
url.search = params.toString();
|
|
12
|
+
return fetch(url, {
|
|
13
|
+
method: "GET",
|
|
14
|
+
headers: {
|
|
15
|
+
"x-login-session-token": loginSessionToken,
|
|
16
|
+
"content-type": "application/json"
|
|
17
|
+
}
|
|
18
|
+
}).then(async (response) => {
|
|
19
|
+
const text = await response.text();
|
|
20
|
+
const data = checkIfValidJSON(text);
|
|
21
|
+
if (data?.error) {
|
|
22
|
+
CLILog(
|
|
23
|
+
data.error?.message,
|
|
24
|
+
{
|
|
25
|
+
level: "danger",
|
|
26
|
+
docs: "https://cheatcode.co/docs/push/deployment-tokens"
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
process.exit(0);
|
|
30
|
+
}
|
|
31
|
+
return data?.data?.regions;
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
export {
|
|
35
|
+
getProviderRegions_default as default
|
|
36
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import providers from "./providers.js";
|
|
2
|
+
var getProvidersWithConnectionStatus_default = (user = {}) => {
|
|
3
|
+
return providers.map((provider) => {
|
|
4
|
+
return {
|
|
5
|
+
...provider,
|
|
6
|
+
connectedAs: {
|
|
7
|
+
// aws: user?.aws ? `Connected as ${login?.user?.aws?.username}` : null,
|
|
8
|
+
digitalOcean: user?.oauth?.digitalOcean ? `\u2714 Connected as ${user?.oauth?.digitalOcean?.info?.email}` : null,
|
|
9
|
+
// google: user?.aws ? `Connected as ${login?.user?.aws?.username}` : null,
|
|
10
|
+
// hetzner: user?.aws ? `Connected as ${login?.user?.aws?.username}` : null,
|
|
11
|
+
linode: user?.oauth?.linode ? `\u2714 Connected as ${user?.oauth?.linode?.account?.email}` : null,
|
|
12
|
+
// rackspace: user?.aws ? `Connected as ${login?.user?.aws?.username}` : null,
|
|
13
|
+
vultr: user?.oauth?.vultr ? `\u2714 Connected as ${user?.oauth?.vultr?.email}` : null
|
|
14
|
+
}[provider?.value] || "\u{1F5D9} Not connected"
|
|
15
|
+
};
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
export {
|
|
19
|
+
getProvidersWithConnectionStatus_default as default
|
|
20
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import os from "os";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import inquirer from "inquirer";
|
|
4
|
+
import prompts from "../functions/push/prompts.js";
|
|
5
|
+
import loginToCheatCode from "./loginToCheatCode.js";
|
|
6
|
+
var getSessionToken_default = async () => {
|
|
7
|
+
const homeDirectory = os.homedir();
|
|
8
|
+
const sessionTokenPath = `${homeDirectory}/.cheatcode/session`;
|
|
9
|
+
const sessionTokenExists = fs.existsSync(sessionTokenPath);
|
|
10
|
+
if (sessionTokenExists) {
|
|
11
|
+
return fs.readFileSync(sessionTokenPath, "utf-8");
|
|
12
|
+
}
|
|
13
|
+
const promptUserLogin = await inquirer.prompt(prompts.login());
|
|
14
|
+
const sessionToken = promptUserLogin?.oauth || await loginToCheatCode(promptUserLogin?.emailAddress, promptUserLogin?.password);
|
|
15
|
+
if (!fs.existsSync(`${homeDirectory}/.cheatcode`)) {
|
|
16
|
+
fs.mkdirSync(`${homeDirectory}/.cheatcode`);
|
|
17
|
+
}
|
|
18
|
+
fs.writeFileSync(`${homeDirectory}/.cheatcode/session`, sessionToken);
|
|
19
|
+
return sessionToken;
|
|
20
|
+
};
|
|
21
|
+
export {
|
|
22
|
+
getSessionToken_default as default
|
|
23
|
+
};
|