eitri-cli 1.38.0-beta.9 → 1.39.0-beta.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/.husky/pre-commit +0 -0
- package/eitri-cli-v2/eitri-cli-v2.darwin-arm64.node +0 -0
- package/eitri-cli-v2/eitri-cli-v2.darwin-x64.node +0 -0
- package/eitri-cli-v2/eitri-cli-v2.linux-x64-gnu.node +0 -0
- package/eitri-cli-v2/eitri-cli-v2.win32-x64-msvc.node +0 -0
- package/eitri-cli-v2/index.d.ts +11 -1
- package/index.js +4 -21
- package/package.json +3 -49
- package/src/modules/app/AppCommand.js +1 -1
- package/src/modules/vegvisir/VegvisirCommand.js +7 -13
- package/.eslintrc.json +0 -26
- package/.prettierrc +0 -6
- package/src/cmd/clean.js +0 -144
- package/src/cmd/create.js +0 -332
- package/src/cmd/credentials.js +0 -105
- package/src/cmd/doctor.js +0 -70
- package/src/cmd/invite.js +0 -87
- package/src/cmd/list.js +0 -36
- package/src/cmd/login.js +0 -70
- package/src/cmd/loginV2.js +0 -89
- package/src/cmd/manage-env.js +0 -129
- package/src/cmd/open-share.js +0 -6
- package/src/cmd/order-details.js +0 -6
- package/src/cmd/push-version.js +0 -260
- package/src/cmd/show-message-if-outdated-package.js +0 -32
- package/src/cmd/signup.js +0 -71
- package/src/cmd/start.js +0 -181
- package/src/cmd/tail-logs.js +0 -26
- package/src/cmd/test-initialization-params.js +0 -6
- package/src/cmd/validate.js +0 -164
- package/src/cmd/version.js +0 -18
- package/src/enum/WatcherOpts.js +0 -3
- package/src/enum/target.js +0 -6
- package/src/helpers/request-listener-helper.js +0 -55
- package/src/model/EitriAppType.js +0 -4
- package/src/model/Payload.js +0 -45
- package/src/model/Target.js +0 -61
- package/src/model/User.js +0 -11
- package/src/service/AuthConfig.js +0 -85
- package/src/service/BlindGuardian.js +0 -131
- package/src/service/CliLogin.js +0 -52
- package/src/service/ConfigService.js +0 -9
- package/src/service/CredentialsService.js +0 -47
- package/src/service/EitriAppManager.js +0 -32
- package/src/service/EitriAppService.js +0 -49
- package/src/service/Emulator/AndroidEmulatorService.js +0 -132
- package/src/service/Emulator/IOSEmulatorService.js +0 -71
- package/src/service/EmulatorService.js +0 -17
- package/src/service/GATrackingStrategy.js +0 -16
- package/src/service/HashFolder.js +0 -79
- package/src/service/Http.js +0 -300
- package/src/service/HuginService.js +0 -38
- package/src/service/InviteService.js +0 -45
- package/src/service/LibsService.js +0 -191
- package/src/service/ManageEnvService.js +0 -10
- package/src/service/MiniLog.js +0 -166
- package/src/service/PrerequisitesValidator.js +0 -99
- package/src/service/QRCodeFactory.js +0 -81
- package/src/service/ReleaseService.js +0 -126
- package/src/service/Server.js +0 -220
- package/src/service/StarterService.js +0 -31
- package/src/service/TagTree.js +0 -101
- package/src/service/TargetService.js +0 -97
- package/src/service/TrackService.js +0 -11
- package/src/service/TrackingEitriAnalytics.js +0 -26
- package/src/service/TrackingService.js +0 -183
- package/src/service/ValidateResult.js +0 -57
- package/src/service/Watcher.js +0 -118
- package/src/service/Workspace.js +0 -1045
- package/src/service/WorkspaceManager.js +0 -76
- package/src/service/factories/DoubtsStarterFactory.js +0 -25
- package/src/service/factories/MiniWebAppFactory.js +0 -44
- package/src/service/factories/QRCodeStarterFactory.js +0 -154
- package/src/service/factories/WebStarterFactory.js +0 -88
- package/src/service/factories/WoodCoffeeFactory.js +0 -292
- package/src/util/AboutTemplate.jsx +0 -14
- package/src/util/FileUtils.js +0 -25
- package/src/util/GenericUtils.js +0 -41
- package/src/util/LibUtil.js +0 -32
- package/src/util/LogUtil.js +0 -14
- package/src/util/UrlUtils.js +0 -12
- package/src/util/UserLocalCredential.js +0 -128
- package/src/util/convertKeysToCamelCase.js +0 -26
- package/src/util/error-messages/error-messages.js +0 -24
- package/src/util/error-messages/invite/invite-error-messages.js +0 -14
- package/src/util/getCliVersion.js +0 -13
- package/src/util/getCreateFactory.js +0 -9
- package/src/util/getWorkspace.js +0 -37
- package/src/util/ipv4.js +0 -19
- package/src/util/manage-env.js +0 -65
- package/src/util/open-docs.js +0 -7
- package/src/util/os.js +0 -39
- package/src/util/server-url.js +0 -15
- package/src/util/template-utils.js +0 -21
- package/src/view/index.html +0 -19
package/src/service/MiniLog.js
DELETED
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
const io = require('socket.io-client')
|
|
2
|
-
const chalk = require('chalk')
|
|
3
|
-
|
|
4
|
-
class MiniLog {
|
|
5
|
-
constructor(config) {
|
|
6
|
-
if (!config) {
|
|
7
|
-
throw new Error('MiniLog config is required')
|
|
8
|
-
}
|
|
9
|
-
this._config = config
|
|
10
|
-
this.verbose = false
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
connect(roomName, silentOnConnect) {
|
|
14
|
-
return new Promise((resolve, reject) => {
|
|
15
|
-
const socket = this.createSocket()
|
|
16
|
-
socket.on('connect', () => {
|
|
17
|
-
if (!silentOnConnect) console.log('✓ Construindo para Workspace Temporário: ', roomName)
|
|
18
|
-
socket.emit('joinRoom', roomName)
|
|
19
|
-
resolve()
|
|
20
|
-
})
|
|
21
|
-
socket.on('connect_error', (e) => {
|
|
22
|
-
if (silentOnConnect) console.error('Não foi possível conectar ao compilador', roomName)
|
|
23
|
-
else console.error('Não foi possível conectar ao compilador', roomName, `${this._config.url} ${this._config.path}`)
|
|
24
|
-
reject(e)
|
|
25
|
-
})
|
|
26
|
-
socket.on('onLog', (data) => {
|
|
27
|
-
this.printLog(data)
|
|
28
|
-
})
|
|
29
|
-
this.socket = socket
|
|
30
|
-
})
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
connectGeneric({roomName, args, skipLogs}) {
|
|
34
|
-
return new Promise((resolve, reject) => {
|
|
35
|
-
const socket = this.createSocket()
|
|
36
|
-
socket.on('connect', () => {
|
|
37
|
-
if(args?.verbose) {
|
|
38
|
-
console.log('🔗 Conectando em: ', {roomName, args})
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
socket.emit('joinRoom', roomName)
|
|
42
|
-
resolve()
|
|
43
|
-
})
|
|
44
|
-
socket.on('connect_error', (e) => {
|
|
45
|
-
if (args?.verbose) {
|
|
46
|
-
console.error('Não foi possível conectar em: ', {roomName})
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
reject(e)
|
|
50
|
-
})
|
|
51
|
-
socket.on('onLog', (data) => {
|
|
52
|
-
if(!skipLogs){
|
|
53
|
-
const message = this._colorizeMessage(data?.msg, data.method)
|
|
54
|
-
const consoleProp = data?.method ? data.method : "log"
|
|
55
|
-
console[consoleProp](message);
|
|
56
|
-
}
|
|
57
|
-
})
|
|
58
|
-
this.socket = socket
|
|
59
|
-
})
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
awaitForPushVersion() {
|
|
63
|
-
return new Promise((resolve, reject) => {
|
|
64
|
-
this.socket.on('onLog', (event) => {
|
|
65
|
-
if (!event.publish) {
|
|
66
|
-
return
|
|
67
|
-
}
|
|
68
|
-
if (event.publish.ok) {
|
|
69
|
-
resolve(event)
|
|
70
|
-
} else {
|
|
71
|
-
this.pushVersionErrorFriendlyMessage(event)
|
|
72
|
-
return process.exit(1)
|
|
73
|
-
}
|
|
74
|
-
})
|
|
75
|
-
})
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
pushVersionErrorFriendlyMessage(event) {
|
|
79
|
-
const errorMessage = event.publish.friendlyMessage || event.publish.error
|
|
80
|
-
|
|
81
|
-
const withoutOrganizationError = "Request failed with status code 403"
|
|
82
|
-
|
|
83
|
-
console.log("\n\n")
|
|
84
|
-
|
|
85
|
-
if (errorMessage.includes(withoutOrganizationError)) {
|
|
86
|
-
const messages = [
|
|
87
|
-
"Você não faz parte da organização ou não está associado a este Eitri-App",
|
|
88
|
-
"Por favor, entre em contato com o administrador da organização."
|
|
89
|
-
]
|
|
90
|
-
console.error(messages.join("\n"))
|
|
91
|
-
} else {
|
|
92
|
-
console.error(errorMessage)
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
awaitForGenerateLoginCredentials() {
|
|
97
|
-
return new Promise((resolve) => {
|
|
98
|
-
this.socket.on('onLog', (event) => {
|
|
99
|
-
if(event.eventKey === "loginCredentials"){
|
|
100
|
-
console.log("\n\n Iniciando configuração das suas credenciais...\n\n")
|
|
101
|
-
resolve(event.credentials)
|
|
102
|
-
}
|
|
103
|
-
})
|
|
104
|
-
})
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
createSocket() {
|
|
108
|
-
if (this._config.path) {
|
|
109
|
-
return io.connect(this._config.url, { path: this._config.path, transport: 'websocket' })
|
|
110
|
-
} else {
|
|
111
|
-
return io(this._config.url)
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
printLog(data) {
|
|
116
|
-
if (typeof data.msg === 'undefined') {
|
|
117
|
-
return
|
|
118
|
-
}
|
|
119
|
-
if (
|
|
120
|
-
typeof data.msg === 'string' &&
|
|
121
|
-
data.msg.includes(
|
|
122
|
-
'Download the React DevTools for a better development experience'
|
|
123
|
-
)
|
|
124
|
-
) {
|
|
125
|
-
return
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
if (this.verbose) {
|
|
129
|
-
console.log(`\x1b[34meitri ${data.userAgent}\n\x1b[0m\x1b[90m${data.msg}\x1b[0m`);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
if (/^START RequestId/.test(data.msg)) {
|
|
133
|
-
let msg = data.msg
|
|
134
|
-
.replace(/Version: \$LATEST/, '')
|
|
135
|
-
.split('\n')
|
|
136
|
-
.map((line) => line.replace(/^[0-9]+[^\t]+\t.*?\t/, ''))
|
|
137
|
-
.join('\n')
|
|
138
|
-
console.log(chalk.cyan(msg))
|
|
139
|
-
} else {
|
|
140
|
-
// A propriedade userFriendlyMessage deve ser tratada pelo Eitri-App. Logaremos da forma como o Eitri-App nos fornecer o objeto.
|
|
141
|
-
if (!data.method) {
|
|
142
|
-
console.log(`\x1b[34meitri:\x1b[0m\x1b[97m${data.msg}\x1b[0m`);
|
|
143
|
-
} else {
|
|
144
|
-
const message = this._colorizeMessage(data.msg, data.method)
|
|
145
|
-
console[data.method](`\x1b[34meitri [${data.slug}]:\x1b[0m${message}`);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
if (data.stopCLI) {
|
|
149
|
-
process.exit(1)
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
_colorizeMessage(message, method) {
|
|
154
|
-
const colorizedMessage = {
|
|
155
|
-
log: chalk.hex("#95DB00")(message),
|
|
156
|
-
warn: chalk.yellow(message),
|
|
157
|
-
error: chalk.red(message),
|
|
158
|
-
info: chalk.green(message),
|
|
159
|
-
debug: chalk.blue(message),
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
return colorizedMessage[method] || colorizedMessage.log
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
module.exports = MiniLog
|
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
const configService = require('./ConfigService')
|
|
2
|
-
const UserLocalCredential = require('../util/UserLocalCredential');
|
|
3
|
-
const Http = require('./Http');
|
|
4
|
-
const TrackingEitriAnalytics = require('./TrackingEitriAnalytics');
|
|
5
|
-
const MANAGER_URL = configService.get('eitriManager')?.url
|
|
6
|
-
const { workspace } = require('../service/Workspace')
|
|
7
|
-
const debug = require('debug')('eitri:PrerequisitesValidator')
|
|
8
|
-
class PrerequisitesValidator {
|
|
9
|
-
|
|
10
|
-
constructor(workspace) {
|
|
11
|
-
this.workspace = workspace
|
|
12
|
-
this.blindGuardian = workspace.blindGuardian;
|
|
13
|
-
this.http = new Http(workspace.blindGuardian);
|
|
14
|
-
this.userInfo = { id: "", email: "" }
|
|
15
|
-
this.userOrgsData = []
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
async checkAll(args = {}) {
|
|
19
|
-
this.checkCredentials(args)
|
|
20
|
-
await this.isUserInOrg()
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
checkCredentials(args) {
|
|
24
|
-
try {
|
|
25
|
-
UserLocalCredential.checkForCredentials()
|
|
26
|
-
debug("Sucesso na checagem de credenciais")
|
|
27
|
-
} catch (error) {
|
|
28
|
-
this.sendErrorToAnalytics("checkCredentials.error", error)
|
|
29
|
-
|
|
30
|
-
const friendlyErrorMessage = `Por favor, execute o comando 'eitri login' para configurar suas credenciais`
|
|
31
|
-
console.log(`\n\x1b[1m\x1b[31m${friendlyErrorMessage}\x1b[0m\n`);
|
|
32
|
-
|
|
33
|
-
if (args?.verbose) {
|
|
34
|
-
debug("ERRO na checagem de credenciais", { message: error?.message, error })
|
|
35
|
-
console.error("\nError: ", { message: error?.message, error })
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
process.exit(1);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
async isUserInOrg() {
|
|
43
|
-
try {
|
|
44
|
-
const eitriAppConf = workspace.getMiniConf();
|
|
45
|
-
|
|
46
|
-
const respEitriAppData = await this.http.get(`${MANAGER_URL}/v2/eitri-apps/${eitriAppConf.id}`);
|
|
47
|
-
const respMyOrgsData = this.userOrgsData
|
|
48
|
-
|
|
49
|
-
const belongTo = respMyOrgsData?.some(org => org?.id === respEitriAppData?.organizationId)
|
|
50
|
-
const myOrgs = respMyOrgsData?.length > 0
|
|
51
|
-
if (myOrgs && belongTo) {
|
|
52
|
-
return
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
} catch (error) {
|
|
56
|
-
this.sendErrorToAnalytics("isUserInOrg.error", { organizations: this.userOrgsData })
|
|
57
|
-
|
|
58
|
-
if (args?.verbose) {
|
|
59
|
-
debug("ERRO na verificação de conexão", { message: error?.message, error })
|
|
60
|
-
console.error("\nError: \n", { message: error?.message, errorData: error?.response?.data })
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
const friendlyErrorMessage = `Você ainda não foi registrado em nenhuma organização ou não pertence a organização deste Eitri-App. \n Por favor, entre em contato com o administrador da sua organização.`
|
|
64
|
-
console.log(`\n\x1b[1m\x1b[31m ${friendlyErrorMessage} \x1b[0m\n`)
|
|
65
|
-
process.exit(1)
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
async getUserBasicInfo() {
|
|
70
|
-
if (this.userInfo.id && this.userInfo.email) {
|
|
71
|
-
return this.userInfo
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
const token = await this.blindGuardian.getToken().then(res => res).catch(_err => null)
|
|
75
|
-
this.userInfo = {
|
|
76
|
-
id: token?.id || "",
|
|
77
|
-
email: token?.email || ""
|
|
78
|
-
}
|
|
79
|
-
return {
|
|
80
|
-
id: token?.id || "",
|
|
81
|
-
email: token?.email || ""
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
sendErrorToAnalytics(eventName = "", data = {}) {
|
|
87
|
-
TrackingEitriAnalytics.sendEvent({
|
|
88
|
-
eventName,
|
|
89
|
-
userId: this.userInfo.id,
|
|
90
|
-
data: {
|
|
91
|
-
userData: this.userInfo,
|
|
92
|
-
...data
|
|
93
|
-
}
|
|
94
|
-
}).catch(_err => null)
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
module.exports = PrerequisitesValidator
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
const tmp = require('tmp')
|
|
2
|
-
const qrcode = require('qrcode')
|
|
3
|
-
const GenericUtils = require('../util/GenericUtils')
|
|
4
|
-
const open = require('open')
|
|
5
|
-
|
|
6
|
-
// Fabrica de QR code :-)
|
|
7
|
-
class QRCodeFactory {
|
|
8
|
-
|
|
9
|
-
generate(args) {
|
|
10
|
-
if (args?.qrPrinter) {
|
|
11
|
-
console.log(`Abrindo QR-Code no ${args?.qrPrinter}`)
|
|
12
|
-
open(args?.qrCodePath, {app: args?.qrPrinter})
|
|
13
|
-
return
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
qrcode.toString(args?.fullUrl, {type:"terminal", small: true}, function(_, qrCode) {
|
|
17
|
-
console.log(qrCode)
|
|
18
|
-
})
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
async create(data, eitriAppSlug = "", args = {}) {
|
|
22
|
-
this.displayQrCodeInstruction(args?.playground)
|
|
23
|
-
|
|
24
|
-
let qrCodeTempPath = `${eitriAppSlug}::${new Date().getTime()}`
|
|
25
|
-
if(args?.qrPrinter){
|
|
26
|
-
qrCodeTempPath = await this.tempFile(eitriAppSlug)
|
|
27
|
-
await this.createQRCodeImage(qrCodeTempPath, data)
|
|
28
|
-
}
|
|
29
|
-
return qrCodeTempPath
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
createQRCodeImage(qrCodeTempPath, data) {
|
|
33
|
-
return new Promise((resolve, reject) => {
|
|
34
|
-
qrcode.toFile(
|
|
35
|
-
qrCodeTempPath,
|
|
36
|
-
data,
|
|
37
|
-
{small: true},
|
|
38
|
-
(err) => {
|
|
39
|
-
if (err) {
|
|
40
|
-
return reject(err)
|
|
41
|
-
}
|
|
42
|
-
resolve()
|
|
43
|
-
})
|
|
44
|
-
})
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
tempFile(eitriAppSlug = "") {
|
|
48
|
-
return new Promise((resolve, reject) => {
|
|
49
|
-
const currentDateTime = GenericUtils.formatQrCodeCurrentDateTime()
|
|
50
|
-
const qrCodeName = `[eitri] ${eitriAppSlug} ${currentDateTime}.png`
|
|
51
|
-
tmp.file(
|
|
52
|
-
{ name: qrCodeName, keep: true },
|
|
53
|
-
function (err, tempPath) {
|
|
54
|
-
if (err) {
|
|
55
|
-
return reject(err)
|
|
56
|
-
}
|
|
57
|
-
resolve(tempPath)
|
|
58
|
-
}
|
|
59
|
-
)
|
|
60
|
-
})
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
displayQrCodeInstruction(playGroundMode = false) {
|
|
64
|
-
const separator = "=================================================="
|
|
65
|
-
console.log("\n" + separator)
|
|
66
|
-
|
|
67
|
-
if (playGroundMode) {
|
|
68
|
-
console.log('Para iniciar seu Eitri-App, escaneie o QR Code')
|
|
69
|
-
console.log('exibido usando o Eitri Playground')
|
|
70
|
-
console.log(separator)
|
|
71
|
-
return
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
console.log("Para iniciar seu Eitri-App, escaneie o QR Code exibido.")
|
|
75
|
-
console.log('Certifique-se de usar o leitor de QR Code')
|
|
76
|
-
console.log('do aplicativo destinado ao seu Eitri-App.')
|
|
77
|
-
console.log(separator)
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
module.exports = QRCodeFactory
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
const path = require('path')
|
|
2
|
-
const fs = require('fs')
|
|
3
|
-
const childProcess = require('child_process')
|
|
4
|
-
const rimraf = require('rimraf');
|
|
5
|
-
|
|
6
|
-
const TEMP_FOLDER_NAME = "temp_eitri_ci"
|
|
7
|
-
const TEMP_CHANGELOG_FILE_NAME = "CHANGELOG_TEMP"
|
|
8
|
-
const CHANGELOG_FILE_NAME = "CHANGELOG.md"
|
|
9
|
-
|
|
10
|
-
module.exports = async function releaseService() {
|
|
11
|
-
_printLog(`\x1b[1m\x1b[32mIniciando Geração Automática de Versão\x1b[0m`)
|
|
12
|
-
await _factoryTempFolder()
|
|
13
|
-
await _factoryReleaseConfig()
|
|
14
|
-
await _downloadDependencies()
|
|
15
|
-
await _installDependencies()
|
|
16
|
-
await _updateChangeLog()
|
|
17
|
-
await _clearResources()
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
async function _factoryTempFolder() {
|
|
21
|
-
try {
|
|
22
|
-
fs.mkdirSync(TEMP_FOLDER_NAME, {recursive: true})
|
|
23
|
-
} catch (error) {
|
|
24
|
-
_throwError("Erro ao gerar pasta temporária", error?.message)
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
async function _factoryReleaseConfig() {
|
|
29
|
-
try {
|
|
30
|
-
const releasercContent = {
|
|
31
|
-
"branches": [
|
|
32
|
-
"main",
|
|
33
|
-
"master",
|
|
34
|
-
],
|
|
35
|
-
"plugins": [
|
|
36
|
-
"@semantic-release/commit-analyzer",
|
|
37
|
-
"@semantic-release/release-notes-generator",
|
|
38
|
-
[
|
|
39
|
-
"@semantic-release/changelog",
|
|
40
|
-
{
|
|
41
|
-
"changelogFile": `${TEMP_CHANGELOG_FILE_NAME}.md`
|
|
42
|
-
}
|
|
43
|
-
],
|
|
44
|
-
[
|
|
45
|
-
"@semantic-release/git",
|
|
46
|
-
{
|
|
47
|
-
"assets": [
|
|
48
|
-
`${CHANGELOG_FILE_NAME}`,
|
|
49
|
-
"eitri-app.conf.js",
|
|
50
|
-
`!${TEMP_FOLDER_NAME}`
|
|
51
|
-
],
|
|
52
|
-
"message": "chore(release): ${nextRelease.version}[skip ci]\n\n${nextRelease.notes}"
|
|
53
|
-
}
|
|
54
|
-
]
|
|
55
|
-
]
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
const releasercFilePath = path.join(TEMP_FOLDER_NAME, '.releaserc.json');
|
|
59
|
-
fs.writeFileSync(releasercFilePath, JSON.stringify(releasercContent, null, 2));
|
|
60
|
-
} catch (error) {
|
|
61
|
-
_throwError("Erro ao criar o arquivo de configuração da release", error?.message)
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
async function _downloadDependencies() {
|
|
66
|
-
_printLog("Baixando as configurações. Este processo pode demorar alguns segundos.")
|
|
67
|
-
childProcess.execSync(`cd ${TEMP_FOLDER_NAME}/ && npm i semantic-release @semantic-release/git @semantic-release/changelog`)
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
async function _installDependencies() {
|
|
71
|
-
_printLog("Instalando configuração temporária de CI. Este processo pode demorar alguns segundos.")
|
|
72
|
-
childProcess.execSync(`cd ${TEMP_FOLDER_NAME}/ && npx semantic-release --no-ci --no-npm-publish --no-github-publish --working-directory=${TEMP_FOLDER_NAME} --skip-verify-conditions`)
|
|
73
|
-
_printLog("Configuração de CI instalada", TEMP_CHANGELOG_FILE_NAME)
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
async function _updateChangeLog() {
|
|
77
|
-
const hasTempChangelog = fs.existsSync(`${TEMP_FOLDER_NAME}/${TEMP_CHANGELOG_FILE_NAME}.md`)
|
|
78
|
-
if (hasTempChangelog) {
|
|
79
|
-
_printLog(`Iniciando atualização do ${CHANGELOG_FILE_NAME}`)
|
|
80
|
-
const contentNewChangelog = fs.readFileSync(`${TEMP_FOLDER_NAME}/${TEMP_CHANGELOG_FILE_NAME}.md`, "utf-8");
|
|
81
|
-
const newPath = path.join(`${CHANGELOG_FILE_NAME}`)
|
|
82
|
-
|
|
83
|
-
if (!fs.existsSync(newPath)) {
|
|
84
|
-
await _createChangeLogMd()
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
const contentOriginalChangelog = fs.readFileSync(newPath, "utf-8")
|
|
88
|
-
const newContent = contentNewChangelog + "\n\n" + contentOriginalChangelog
|
|
89
|
-
fs.writeFileSync(newPath, newContent)
|
|
90
|
-
|
|
91
|
-
_printLog(`Arquivo ${CHANGELOG_FILE_NAME} atualizado`)
|
|
92
|
-
return
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
_throwError("Arquivo temporário de Changelog não gerado", {hasTempChangelog})
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
async function _clearResources() {
|
|
99
|
-
rimraf(TEMP_FOLDER_NAME, (error) => {
|
|
100
|
-
if (error) {
|
|
101
|
-
_throwError(`Erro ao remover a pasta ${TEMP_FOLDER_NAME}:`, error?.message)
|
|
102
|
-
} else {
|
|
103
|
-
_printLog(`Limpando pasta temporária ${TEMP_FOLDER_NAME}`);
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
async function _createChangeLogMd(newPath) {
|
|
109
|
-
_printLog(`Arquivo de ${CHANGELOG_FILE_NAME} inexistente. [Changelog: ${newPath}]`)
|
|
110
|
-
_printLog("Criando arquivo")
|
|
111
|
-
fs.writeFileSync(`${CHANGELOG_FILE_NAME}`, "");
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
function _printLog(text = "", isError = false) {
|
|
115
|
-
if (isError) {
|
|
116
|
-
console.error("\n" + text)
|
|
117
|
-
} else {
|
|
118
|
-
console.log("\n" + text)
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
function _throwError(text = "", errorMessage = "") {
|
|
123
|
-
const error = `${text} [message: ${errorMessage}]`
|
|
124
|
-
_printLog(error, !!error)
|
|
125
|
-
throw new Error(error)
|
|
126
|
-
}
|
package/src/service/Server.js
DELETED
|
@@ -1,220 +0,0 @@
|
|
|
1
|
-
const fs = require('fs')
|
|
2
|
-
const open = require('open')
|
|
3
|
-
const path = require('path')
|
|
4
|
-
const configService = require('./ConfigService')
|
|
5
|
-
const { URL } = require('url')
|
|
6
|
-
const Express = require('express')
|
|
7
|
-
const rateLimit = require('express-rate-limit')
|
|
8
|
-
const host = 'localhost'
|
|
9
|
-
const port = process.env.AME_APP_TOOLS_PORT || 3333
|
|
10
|
-
const TERMINAL_PRINTER_NAME = 'terminal'
|
|
11
|
-
let serverInstance
|
|
12
|
-
const requestListenerHelper = require('../helpers/request-listener-helper')
|
|
13
|
-
const CliLogin = require('./CliLogin')
|
|
14
|
-
const cors = require("cors")
|
|
15
|
-
|
|
16
|
-
const WHITE_LIST = ["https://admin.eitri.calindra.com.br", "https://admin.dev.eitri.calindra.com.br", "https://console.eitri.tech"]
|
|
17
|
-
|
|
18
|
-
const expressRateLimiter = rateLimit({
|
|
19
|
-
windowMs: 15 * 60 * 1000,
|
|
20
|
-
max: 100,
|
|
21
|
-
standardHeaders: true,
|
|
22
|
-
legacyHeaders: false,
|
|
23
|
-
})
|
|
24
|
-
class Server {
|
|
25
|
-
static stop(args) {
|
|
26
|
-
try {
|
|
27
|
-
if (serverInstance) {
|
|
28
|
-
serverInstance.close()
|
|
29
|
-
}
|
|
30
|
-
} catch (e) {
|
|
31
|
-
if (args.verbose) {
|
|
32
|
-
console.log(`Erro ao parar servidor local: ${e.message}`)
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
static startServer(args) {
|
|
38
|
-
Server.stop(args)
|
|
39
|
-
const { qrCodePath, qrPrinter, verbose } = args
|
|
40
|
-
|
|
41
|
-
if (!qrPrinter && !process.env.AAT_QRCODE_PRINTER) {
|
|
42
|
-
open(qrCodePath)
|
|
43
|
-
} else if (qrPrinter && qrPrinter !== TERMINAL_PRINTER_NAME) {
|
|
44
|
-
open(qrCodePath, { app: qrPrinter })
|
|
45
|
-
} else if (
|
|
46
|
-
process.env.AAT_QRCODE_PRINTER &&
|
|
47
|
-
process.env.AAT_QRCODE_PRINTER !== TERMINAL_PRINTER_NAME
|
|
48
|
-
) {
|
|
49
|
-
open(qrCodePath, {
|
|
50
|
-
app: process.env.AAT_QRCODE_PRINTER,
|
|
51
|
-
})
|
|
52
|
-
}
|
|
53
|
-
if (verbose) {
|
|
54
|
-
console.log(`Server is running on http://${host}:${port}`)
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
static startServerMinhaContaEmulator(args) {
|
|
59
|
-
Server.stop(args)
|
|
60
|
-
const { browser, verbose, bootstrapUrl, slug, http: workspaceHttp } = args
|
|
61
|
-
const ameSuperAppWebConfig = configService.get('ameSuperAppWeb')
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Paramêtros do request listener definidos para o create server
|
|
65
|
-
* @param {Express.Request} req
|
|
66
|
-
* @param {Express.Response} res
|
|
67
|
-
* @returns
|
|
68
|
-
*/
|
|
69
|
-
const requestListener = function (req, res) {
|
|
70
|
-
if (req.url.startsWith('/workspace')) {
|
|
71
|
-
const url = `${configService.workspace.url}${req.url}`
|
|
72
|
-
workspaceHttp
|
|
73
|
-
.get(url)
|
|
74
|
-
.then((workspaceRes) => {
|
|
75
|
-
res.header('Content-Type', 'text/html; charset=utf-8')
|
|
76
|
-
res.status(200).send(workspaceRes)
|
|
77
|
-
})
|
|
78
|
-
.catch((e) => {
|
|
79
|
-
console.log(e)
|
|
80
|
-
})
|
|
81
|
-
} else {
|
|
82
|
-
// res.header('Content-Type', 'text/html; charset=utf-8')
|
|
83
|
-
// res.writeHead(200)
|
|
84
|
-
|
|
85
|
-
let data = fs.readFileSync(
|
|
86
|
-
path.resolve(__dirname, '../view/ame_minha_conta_emulator.html'),
|
|
87
|
-
'utf8'
|
|
88
|
-
)
|
|
89
|
-
const _url = new URL(bootstrapUrl)
|
|
90
|
-
const finalUrl = bootstrapUrl.replace(
|
|
91
|
-
_url.origin,
|
|
92
|
-
`http://localhost:${port}`
|
|
93
|
-
)
|
|
94
|
-
|
|
95
|
-
data = data.replace('##ENVIRONMENT##', process.env.NODE_ENV === 'dev' ? 'dev' : 'hml' )
|
|
96
|
-
data = data.replace(
|
|
97
|
-
'##AME_SUPER_APP_SRC##',
|
|
98
|
-
ameSuperAppWebConfig.url
|
|
99
|
-
)
|
|
100
|
-
data = data.replace('##IFRAME_SRC##', finalUrl)
|
|
101
|
-
//TODO configurar o slug do Eitri-App corrente
|
|
102
|
-
data = data.replace('##SLUG##', slug)
|
|
103
|
-
return res.send(data)
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
serverInstance = Express().disable('x-powered-by')
|
|
107
|
-
serverInstance.use(expressRateLimiter)
|
|
108
|
-
serverInstance.use(requestListener)
|
|
109
|
-
|
|
110
|
-
serverInstance.listen(port, host, () => {
|
|
111
|
-
open(`http://${host}:${port}`, { app: browser })
|
|
112
|
-
if (verbose) {
|
|
113
|
-
console.log(`Server is running on http://${host}:${port}`)
|
|
114
|
-
}
|
|
115
|
-
})
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
static startServerEmulator(args) {
|
|
119
|
-
Server.stop(args)
|
|
120
|
-
const { browser, verbose, bootstrapUrl, slug, http: workspaceHttp } = args
|
|
121
|
-
const ameSuperAppWebConfig = configService.get('ameSuperAppWeb')
|
|
122
|
-
console.log(bootstrapUrl)
|
|
123
|
-
|
|
124
|
-
const requestListener = function (req, res) {
|
|
125
|
-
if (req.url.startsWith('/workspace')) {
|
|
126
|
-
const url = `${configService.workspace.url}${req.url}`
|
|
127
|
-
return requestListenerHelper(workspaceHttp, req.url, res, url)
|
|
128
|
-
} else {
|
|
129
|
-
res.setHeader('Content-Type', 'text/html; charset=utf-8')
|
|
130
|
-
res.writeHead(200)
|
|
131
|
-
|
|
132
|
-
let data = fs.readFileSync(
|
|
133
|
-
path.resolve(__dirname, '../view/emulator.html'),
|
|
134
|
-
'utf8'
|
|
135
|
-
)
|
|
136
|
-
const _url = new URL(bootstrapUrl)
|
|
137
|
-
const finalUrl = bootstrapUrl.replace(
|
|
138
|
-
_url.origin,
|
|
139
|
-
`http://localhost:${port}`
|
|
140
|
-
)
|
|
141
|
-
|
|
142
|
-
data = data.replace('##ENVIRONMENT##', process.env.NODE_ENV === 'dev' ? 'dev' : 'hml' )
|
|
143
|
-
data = data.replace('##IFRAME_SRC##', finalUrl)
|
|
144
|
-
data = data.replace(
|
|
145
|
-
'##AME_SUPER_APP_SRC##',
|
|
146
|
-
ameSuperAppWebConfig.url
|
|
147
|
-
)
|
|
148
|
-
//TODO configurar o slug do Eitri-App corrente
|
|
149
|
-
data = data.replace('##SLUG##', slug)
|
|
150
|
-
|
|
151
|
-
res.send(data)
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
serverInstance = Express().disable('x-powered-by')
|
|
156
|
-
serverInstance.use(expressRateLimiter)
|
|
157
|
-
serverInstance.use(requestListener)
|
|
158
|
-
|
|
159
|
-
serverInstance.listen(port, host, () => {
|
|
160
|
-
open(`http://${host}:${port}`, { app: browser })
|
|
161
|
-
if (verbose) {
|
|
162
|
-
console.log(`Server is running on http://${host}:${port}`)
|
|
163
|
-
}
|
|
164
|
-
})
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
static startMiniAppProxyServerAndOpenTarget(args) {
|
|
168
|
-
Server.stop(args)
|
|
169
|
-
const { verbose, openPath, http: workspaceHttp } = args
|
|
170
|
-
/**
|
|
171
|
-
* Paramêtros do request listener definidos para o create server
|
|
172
|
-
* @param {Express.Request} req
|
|
173
|
-
* @param {Express.Response} res
|
|
174
|
-
* @returns
|
|
175
|
-
*/
|
|
176
|
-
const requestListener = function (req, res) {
|
|
177
|
-
let url = `${configService.workspace.url}${req.url}`
|
|
178
|
-
return requestListenerHelper(workspaceHttp, req.url, res, url, verbose)
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
serverInstance = Express().disable('x-powered-by')
|
|
182
|
-
serverInstance.use(expressRateLimiter)
|
|
183
|
-
serverInstance.use(requestListener)
|
|
184
|
-
serverInstance.listen(port, host, () => {
|
|
185
|
-
if (verbose) {
|
|
186
|
-
console.log(`Server is running on http://${host}:${port}`)
|
|
187
|
-
}
|
|
188
|
-
open(openPath)
|
|
189
|
-
})
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
static startCliLogin(args) {
|
|
193
|
-
Server.stop(args)
|
|
194
|
-
const verbose = args?.verbose || ""
|
|
195
|
-
|
|
196
|
-
serverInstance = Express().disable('x-powered-by')
|
|
197
|
-
serverInstance.use(expressRateLimiter)
|
|
198
|
-
serverInstance.listen(port, host, () => {
|
|
199
|
-
if (verbose) {
|
|
200
|
-
console.log(`Server is running on http://${host}:${port}`)
|
|
201
|
-
}
|
|
202
|
-
})
|
|
203
|
-
|
|
204
|
-
const myRouteOptions = {
|
|
205
|
-
origin: WHITE_LIST,
|
|
206
|
-
}
|
|
207
|
-
serverInstance.get('/cli-login', cors(myRouteOptions) ,async (req, res) => {
|
|
208
|
-
const {email, credential} = req?.query || {}
|
|
209
|
-
res.send('hello world')
|
|
210
|
-
await new CliLogin().saveCredentials({
|
|
211
|
-
email,
|
|
212
|
-
credential
|
|
213
|
-
})
|
|
214
|
-
})
|
|
215
|
-
|
|
216
|
-
return {host, port}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
module.exports = Server
|