eitri-cli 1.0.2

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.
Files changed (122) hide show
  1. package/README.md +54 -0
  2. package/bitbucket-pipelines.toBeChanged.yml +64 -0
  3. package/boilerplate/mini-app-cafe-madeira.zip +0 -0
  4. package/check-version.js +12 -0
  5. package/config/default-eitri.js +1 -0
  6. package/config/dev.js +91 -0
  7. package/config/k8s-eitri.js +92 -0
  8. package/config/loc-eitri.js +92 -0
  9. package/config/prod-eitri.js +92 -0
  10. package/config/test-eitri.js +2 -0
  11. package/index-eitri.js +6 -0
  12. package/index.js +182 -0
  13. package/install-dev.bat +1 -0
  14. package/install-dev.sh +1 -0
  15. package/jest.config.js +6 -0
  16. package/jsconfig.json +9 -0
  17. package/package.json +80 -0
  18. package/publisher.js +53 -0
  19. package/src/cmd/clean.js +179 -0
  20. package/src/cmd/create.js +281 -0
  21. package/src/cmd/credentials.js +105 -0
  22. package/src/cmd/invite.js +87 -0
  23. package/src/cmd/list.js +36 -0
  24. package/src/cmd/login.js +51 -0
  25. package/src/cmd/manage-env.js +129 -0
  26. package/src/cmd/open-share.js +6 -0
  27. package/src/cmd/order-details.js +6 -0
  28. package/src/cmd/push-version.js +182 -0
  29. package/src/cmd/show-message-if-outdated-package.js +32 -0
  30. package/src/cmd/signup.js +69 -0
  31. package/src/cmd/start.js +171 -0
  32. package/src/cmd/tail-logs.js +26 -0
  33. package/src/cmd/test-initialization-params.js +6 -0
  34. package/src/cmd/validate.js +170 -0
  35. package/src/cmd/version.js +29 -0
  36. package/src/enum/WatcherOpts.js +3 -0
  37. package/src/enum/target.js +6 -0
  38. package/src/helpers/request-listener-helper.js +55 -0
  39. package/src/model/Payload.js +45 -0
  40. package/src/model/Target.js +76 -0
  41. package/src/model/User.js +11 -0
  42. package/src/service/AuthConfig.js +88 -0
  43. package/src/service/BlindGuardian.js +134 -0
  44. package/src/service/CliLogin.js +47 -0
  45. package/src/service/ConfigService.js +16 -0
  46. package/src/service/CredentialsService.js +47 -0
  47. package/src/service/GATrackingStrategy.js +16 -0
  48. package/src/service/HashFolder.js +79 -0
  49. package/src/service/Http.js +234 -0
  50. package/src/service/InviteService.js +45 -0
  51. package/src/service/ManageEnvService.js +10 -0
  52. package/src/service/MiniLog.js +132 -0
  53. package/src/service/QRCodeFactory.js +43 -0
  54. package/src/service/Server.js +239 -0
  55. package/src/service/StarterService.js +31 -0
  56. package/src/service/TagTree.js +101 -0
  57. package/src/service/TargetService.js +97 -0
  58. package/src/service/TrackService.js +11 -0
  59. package/src/service/TrackingEitriAnalytics.js +32 -0
  60. package/src/service/TrackingService.js +183 -0
  61. package/src/service/ValidateResult.js +57 -0
  62. package/src/service/Watcher.js +119 -0
  63. package/src/service/Workspace.js +1069 -0
  64. package/src/service/WorkspaceManager.js +74 -0
  65. package/src/service/factories/DoubtsStarterFactory.js +25 -0
  66. package/src/service/factories/MiniWebAppFactory.js +43 -0
  67. package/src/service/factories/QRCodeStarterFactory.js +78 -0
  68. package/src/service/factories/WebStarterFactory.js +88 -0
  69. package/src/service/factories/WoodCoffeeFactory.js +230 -0
  70. package/src/util/AboutTemplate.jsx +14 -0
  71. package/src/util/UrlUtils.js +12 -0
  72. package/src/util/UserLocalCredential.js +122 -0
  73. package/src/util/error-messages/error-messages.js +24 -0
  74. package/src/util/error-messages/invite/invite-error-messages.js +14 -0
  75. package/src/util/getCliVersion.js +13 -0
  76. package/src/util/getCreateFactory.js +9 -0
  77. package/src/util/ipv4.js +19 -0
  78. package/src/util/manage-env.js +65 -0
  79. package/src/util/open-docs.js +7 -0
  80. package/src/util/os.js +39 -0
  81. package/src/util/server-url.js +15 -0
  82. package/src/util/template-utils.js +21 -0
  83. package/src/view/index.html +19 -0
  84. package/targetMobileStickyness.md +47 -0
  85. package/targetWebStickyness.md +40 -0
  86. package/test/_fixtures/factory.js +30 -0
  87. package/test/_fixtures/miniWebApp/miniapp.conf.js +4 -0
  88. package/test/_fixtures/miniapp.conf.js +5 -0
  89. package/test/_fixtures/server/HelloWorldBackend.js +7 -0
  90. package/test/_fixtures/src/Home.js +5 -0
  91. package/test/_fixtures/src/Home2.js +5 -0
  92. package/test/_fixtures/src/commons/util.js +3 -0
  93. package/test/_fixtures/src/components/TagA.jsx +4 -0
  94. package/test/_fixtures/src/components/TagB.jsx +4 -0
  95. package/test/_fixtures/src/components/TagC.jsx +3 -0
  96. package/test/_fixtures/src/components/TagD.jsx +3 -0
  97. package/test/_fixtures/src/server/foo.js +7 -0
  98. package/test/_fixtures/src/views/AboutTemplate.jsx +14 -0
  99. package/test/_fixtures/woodcoffee/miniapp.conf.js +3 -0
  100. package/test/ame.conf.js +3 -0
  101. package/test/cmd/clean.test.js +66 -0
  102. package/test/cmd/create.test.js +252 -0
  103. package/test/cmd/credentials.test.js +159 -0
  104. package/test/cmd/list.test.js +74 -0
  105. package/test/cmd/manage-env.test.js +168 -0
  106. package/test/cmd/signup.test.js +20 -0
  107. package/test/cmd/start.test.js +5 -0
  108. package/test/miniapp.conf.js +3 -0
  109. package/test/model/Payload.test.js +35 -0
  110. package/test/service/BlindGuardian.test.js +84 -0
  111. package/test/service/CheckAmeConf.test.js +313 -0
  112. package/test/service/Http.test.js +312 -0
  113. package/test/service/InviteService.test.js +117 -0
  114. package/test/service/MiniWebAppFactory.test.js +40 -0
  115. package/test/service/TagTree.test.js +81 -0
  116. package/test/service/TargetService.test.js +48 -0
  117. package/test/service/TrackingService.test.js +105 -0
  118. package/test/service/UserAmeConf.test.js +47 -0
  119. package/test/service/WoodCoffeeFactory.test.js +148 -0
  120. package/test/service/Workspace.test.js +364 -0
  121. package/thinQrCode.md +58 -0
  122. package/v1.5.0.md +3 -0
package/index.js ADDED
@@ -0,0 +1,182 @@
1
+ require('./check-version')
2
+ process.env['NODE_CONFIG_DIR'] = __dirname + '/config/'
3
+ const commander = require('commander')
4
+ const program = new commander.Command()
5
+ const emoji = require('emojilib')
6
+ const path = require('path')
7
+ const {workspace} = require('./src/service/Workspace')
8
+ const config = require('config')
9
+
10
+ const run = async () => {
11
+ try {
12
+
13
+ const srcFolder2watch = path.join(process.cwd(), 'src')
14
+ workspace.setFolder2Watch(srcFolder2watch)
15
+ workspace.setServerUrl(`${config.get('workspace').url}`)
16
+ } catch (e) {
17
+ if (process.env.LOG_LEVEL === 'full') {
18
+ console.log('Current directory listening has failed', e)
19
+ }
20
+ // Continuando como antes...
21
+ }
22
+
23
+ program.option('-v, --version', 'Mostra a versao da CLI', () => {
24
+ const {version} = require('./src/cmd/version')
25
+ version()
26
+ })
27
+
28
+ program
29
+ .command('login')
30
+ .description('Configura suas credenciais de desenvolvedor no dispositivo local')
31
+ .action(async (cmdObj) => {
32
+ require('./src/cmd/login')(cmdObj)
33
+ })
34
+
35
+ program
36
+ .command('create <project-name>')
37
+ .description(`Cria um projeto com um mini app totalmente funcional. Mais detalhes em ${config?.doc?.createUrl}`)
38
+ .option('--yes', 'Aceita os valores default para nome titulo e organizacao')
39
+ .option('--template <template-name>', 'Define um boilerplate para a criação do projeto')
40
+ .option('--target', 'Define a plataforma de execução do Mini App')
41
+ .option('-v, --verbose', 'Exibe mais logs')
42
+ .action((projectName, cmdObj) => {
43
+ require('./src/cmd/create')(projectName, cmdObj)
44
+ })
45
+
46
+ let startProgram = program
47
+ .command('start')
48
+ .description('Inicia o seu mini app em um workspace online')
49
+ .option('-A, --upload-all', '(Obsoleto) Sobe todos os arquivos. O mesmo funcionamento é garantido usando-o ou não')
50
+ .option('-v, --verbose', 'Exibe mais logs')
51
+ .option('-N, --new-qrcode', '(Obsoleto) Novo qrcode. O mesmo funcionamento é garantido usando-o ou não')
52
+ .option('-Q, --old-qrcode', 'QR Code legado')
53
+ .option('-f, --force', 'Força o start')
54
+ .option('-S, --show-deeplink', 'Exibe o deep link do workspace')
55
+ .option('-z, --zip', '(Obsoleto) Envia os arquivos do projeto compactados para o compilador. O mesmo funcionamento é garantido usando-o ou não')
56
+ .option('-U, --unzip', 'Faz o upload descompactado, arquivo a arquivo, para o compilador')
57
+ .option('-P, --qr-printer <qrPrinter>', 'Indica qual programa imprimirá o QR Code. Se omitido, abre o browser default do usuário. Valores válidos: terminal|chrome|msedge|firefox')
58
+ .option('-e, --emulator', 'Simula o ambiente de exibição do Mini App.')
59
+ .option('-c, --target-config <config>', 'Define uma configuração específica para o target do mini-app. Visite nossa documentação on-line para conhecer os cenários em que é necessário utilizar um target-config.', 'default')
60
+ .option('-l, --list-target-configs', 'Exibe lista de configurações cadastradas para o target do miniapp')
61
+
62
+
63
+ startProgram.action(cmdObj => {
64
+ if (cmdObj.zip) {
65
+ console.log('Uso de -z ou --zip é redundante. O eitri-app-tools já envia para o compilador os arquivos compactados.')
66
+ }
67
+
68
+ if (cmdObj.newQrcode) {
69
+ console.log('Uso de -N ou --new-qrcode é redundante. O eitri-app-tools já otimiza o Qr Code.')
70
+ }
71
+
72
+ if (cmdObj.uploadAll) {
73
+ console.log('Uso de -A ou --upload-all é redundante. O eitri-app-tools já faz o envio em lote dos arquivos do projeto')
74
+ }
75
+
76
+ require('./src/cmd/start')(cmdObj)
77
+ })
78
+
79
+ // program
80
+ // .command('test-initialization-params <initializationParams>')
81
+ // .description('Passa parâmetros em querystring para a inicialização do mini app. ex: "stringChave1=stringValor1&stringChave2=stringValor2..."')
82
+ // .option('-Q, --old-qrcode', 'QR Code legado')
83
+ // .option('-N, --new-qrcode', '(Obsoleto) Novo qrcode')
84
+ // .option('-S, --show-deeplink', 'Exibe o deep link do workspace')
85
+ // .option('-V, --verbose', 'Exibe mais logs')
86
+ // .action((initializationParams, cmdObj) => {
87
+ // if (cmdObj.newQrcode) {
88
+ // console.log('Uso de -N ou --new-qrcode é redundante. O "eitri" já otimiza o Qr Code.')
89
+ // }
90
+
91
+ // require('./src/cmd/test-initialization-params')(initializationParams, cmdObj)
92
+ // })
93
+
94
+ // program
95
+ // .command('order-details <orderId>')
96
+ // .description('Abre o mini app na tela de detalhes da ordem')
97
+ // .option('-l, --local', 'Aponta para o servidor local')
98
+ // .option('-A, --upload-all', 'Sobe todos os arquivos')
99
+ // .action((orderId, cmdObj) => {
100
+ // require('./src/cmd/order-details')(orderId, cmdObj)
101
+ // })
102
+
103
+ program
104
+ .command('push-version')
105
+ .description('Cria e envia um build do mini app para ser avaliado por um revisor antes de ser publicado')
106
+ .option('-l, --local', 'Aponta para o servidor local')
107
+ .option('-v, --verbose', 'Exibe mais logs')
108
+ .option('-m, --message <revision-message>', 'Adiciona comentários ao build')
109
+ .option('-y, --yes', 'Aceita automaticamente as respostas do prompt.')
110
+ .action(cmdObj => {
111
+ require('./src/cmd/push-version')(cmdObj)
112
+ })
113
+
114
+ // program
115
+ // .command('clean')
116
+ // .description(
117
+ // 'Realiza a limpeza do workspace remoto do desenvolvedor. Útil quando há mal fucionamento na compilação em nuvem do eitri-app.'
118
+ // )
119
+ // .option('-v, --verbose', 'Exibe mais logs')
120
+ // .action(cmdObj => {
121
+ // require('./src/cmd/clean')(cmdObj)
122
+ // })
123
+
124
+ program
125
+ .command('self-update')
126
+ .description('Desinstala a versao antiga e instala a mais nova')
127
+ .action(() => {
128
+ require('child_process').execSync(
129
+ 'npm uninstall -g eitri && npm i eitri -g',
130
+ {stdio: 'inherit'}
131
+ )
132
+ })
133
+
134
+ // program
135
+ // .command('open-share <share-id>')
136
+ // .description('Abre um compartilhamento do share-api')
137
+ // .action((shareId, cmdObj) =>
138
+ // require('./src/cmd/open-share')(shareId, cmdObj)
139
+ // )
140
+
141
+ // program
142
+ // .command('tail-logs <email>')
143
+ // .description('Para ler logs de prod do email')
144
+ // .action((email, cmdObj) => {
145
+ // require('./src/cmd/tail-logs')(email, cmdObj)
146
+ // })
147
+
148
+ // program
149
+ // .command('invite [email]')
150
+ // .option('--remove', 'Remove o desenvolvedor')
151
+ // .option('--list', 'Lista todos os desenvolvedores')
152
+ // .option('--accept', 'Aceita um convite')
153
+ // .option('-v, --verbose', 'Exibe mais logs')
154
+ // .description('Convida um desenvolvedor para contribuir com o seu miniapp')
155
+ // .action((email, cmdObj) => require('./src/cmd/invite')(email, cmdObj))
156
+
157
+ // program
158
+ // .command('list')
159
+ // .description('Lista as opções de um determinado comando')
160
+ // .option('--template', 'exibe os tipos de templates disponíveis, para gerar um exemplo de projeto.')
161
+ // .action((cmdObj) =>
162
+ // require('./src/cmd/list')(cmdObj))
163
+
164
+ // if (!process.argv.slice(2).length) {
165
+ // program.outputHelp()
166
+ // }
167
+ if (
168
+ process.argv.length > 2 &&
169
+ !program.commands.map(cmd => cmd._name).includes(process.argv[2])
170
+ ) {
171
+ if (!process.argv[2].startsWith('-')) {
172
+ console.log(
173
+ `\n ${emoji.lib.rotating_light.char} Comando ${process.argv[2]} inexistente.\n`
174
+ )
175
+ program.help()
176
+ }
177
+ }
178
+
179
+ program.parse(process.argv)
180
+ }
181
+
182
+ module.exports = run
@@ -0,0 +1 @@
1
+ npm uninstall eitri -g && npm i -g
package/install-dev.sh ADDED
@@ -0,0 +1 @@
1
+ npm uninstall eitri -g && npm i -g
package/jest.config.js ADDED
@@ -0,0 +1,6 @@
1
+ module.exports = {
2
+ testPathIgnorePatterns: ['<rootDir>/node_modules/', '<rootDir>/config/'],
3
+ watchPathIgnorePatterns: ['<rootDir>/apagar-pasta/', '<rootDir>/cookie.json'],
4
+ testEnvironment: 'node',
5
+ testTimeout: 100000
6
+ }
package/jsconfig.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES6"
4
+ },
5
+ "exclude": [
6
+ "node_modules",
7
+ "**/node_modules/*"
8
+ ]
9
+ }
package/package.json ADDED
@@ -0,0 +1,80 @@
1
+ {
2
+ "name": "eitri-cli",
3
+ "version": "1.0.2",
4
+ "description": "Command Line Interface to make \"eitri app\" with code and fire.",
5
+ "main": "index.js",
6
+ "bin": {
7
+ "eitri": "index-eitri.js"
8
+ },
9
+ "scripts": {
10
+ "test-eitri": "NODE_APP_INSTANCE=eitri jest --detectOpenHandles",
11
+ "linter": "./node_modules/.bin/eslint --fix ./src/**/*.js",
12
+ "docsify:run": "cd docsify && docsify serve",
13
+ "build": "echo \"no build\""
14
+ },
15
+ "engines": {
16
+ "node": ">=10.0.0",
17
+ "npm": ">=3.0.0"
18
+ },
19
+ "keywords": [],
20
+ "author": "Calindra",
21
+ "license": "ISC",
22
+ "lint-staged": {
23
+ "*.js": [
24
+ "./node_modules/.bin/eslint --fix",
25
+ "git add"
26
+ ]
27
+ },
28
+ "dependencies": {
29
+ "adm-zip": "^0.5.9",
30
+ "axios": "0.21.3",
31
+ "axios-cookiejar-support": "^0.5.1",
32
+ "base-64": "^0.1.0",
33
+ "base64url": "^3.0.1",
34
+ "chalk": "^3.0.0",
35
+ "cheerio": "^1.0.0-rc.3",
36
+ "cli-progress": "^3.4.0",
37
+ "commander": "^9.2.0",
38
+ "config": "^3.3.0",
39
+ "emojilib": "^2.4.0",
40
+ "express": "^4.17.3",
41
+ "express-rate-limit": "^6.3.0",
42
+ "figlet": "^1.2.4",
43
+ "folder-hash": "^3.3.0",
44
+ "form-data": "^3.0.0",
45
+ "inquirer": "^7.0.0",
46
+ "jsonwebtoken": "^8.5.1",
47
+ "lz-string": "^1.5.0",
48
+ "node-watch": "^0.6.3",
49
+ "open": "^7.0.0",
50
+ "ps-node": "^0.1.6",
51
+ "qrcode": "^1.4.4",
52
+ "qrcode-terminal": "^0.12.0",
53
+ "semver": "^7.1.3",
54
+ "slugify": "^1.4.0",
55
+ "socket.io-client": "^4.5.2",
56
+ "temp-dir": "^2.0.0",
57
+ "tmp": "^0.1.0",
58
+ "tough-cookie": "^3.0.1",
59
+ "tough-cookie-file-store": "^2.0.2",
60
+ "uuid": "^7.0.2"
61
+ },
62
+ "devDependencies": {
63
+ "@faker-js/faker": "^7.6.0",
64
+ "docsify-cli": "^4.4.4",
65
+ "eslint": "^6.7.2",
66
+ "eslint-config-google": "^0.14.0",
67
+ "husky": "^3.1.0",
68
+ "jest": "^24.9.0",
69
+ "lint-staged": "^9.5.0",
70
+ "nock": "^13.3.0"
71
+ },
72
+ "resolutions": {
73
+ "lodash": "4.17.21",
74
+ "minimist": "1.2.6",
75
+ "ansi-regex": "5.0.1",
76
+ "merge": "2.1.1",
77
+ "tar": "6.1.9",
78
+ "handlebars": "4.7.7"
79
+ }
80
+ }
package/publisher.js ADDED
@@ -0,0 +1,53 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+ const { execSync, exec } = require('child_process');
4
+
5
+ publishAsNeeded();
6
+
7
+ function publishAsNeeded() {
8
+ fs.readFile(path.join(__dirname, 'package.json'), 'utf8', (err, data) => {
9
+ if (err) {
10
+ console.error('Error:', err);
11
+ return;
12
+ }
13
+ let packageJson = JSON.parse(data);
14
+ let localVersion = packageJson.version;
15
+ let publishedVersions = JSON.parse(execSync('npm show ' + packageJson.name + ' versions --json').toString());
16
+ if (publishedVersions.includes(localVersion)) {
17
+ console.log('published version is the same of package.json:', localVersion);
18
+ return;
19
+ }
20
+
21
+ console.log('publishing new version', localVersion, '...');
22
+
23
+ const branch = process.env.BITBUCKET_BRANCH
24
+ console.log('current branch on build', branch);
25
+
26
+ //apenas beta e alpha pode ser publicado fora da master
27
+ if("master" !== branch && !(/beta|alpha/.test(localVersion))){
28
+ console.log('main channel out of master branch SKIPPED...');
29
+ return;
30
+ }
31
+
32
+ let commandSuffix = "";
33
+
34
+ if(/beta/.test(localVersion)) {
35
+ commandSuffix = "--tag beta";
36
+ } else if(/alpha/.test(localVersion)) {
37
+ commandSuffix = "--tag alpha";
38
+ }
39
+
40
+ exec('npm run build && npm publish ' + commandSuffix, (err, stdout, stderr) => {
41
+ if (err) {
42
+ // node couldn't execute the command
43
+ console.log('Error:', err);
44
+ process.exit(2);
45
+ return;
46
+ }
47
+
48
+ // the *entire* stdout and stderr (buffered)
49
+ console.log(`stdout: ${stdout}`);
50
+ console.log(`stderr: ${stderr}`);
51
+ });
52
+ });
53
+ }
@@ -0,0 +1,179 @@
1
+ const { workspace } = require('../service/Workspace')
2
+ const validator = require('./validate')
3
+ const TrackingService = require('../service/TrackingService')
4
+ const config = require('../service/ConfigService')
5
+ const TargetService = require('../service/TargetService')
6
+ const inquirer = require('inquirer')
7
+ const TrackingEitriAnalytics = require('../service/TrackingEitriAnalytics')
8
+
9
+ const blindGuardian = workspace.blindGuardian
10
+ const trackingService = new TrackingService(blindGuardian)
11
+ const targetService = new TargetService(workspace)
12
+
13
+ module.exports = async function clean(cmdObj) {
14
+ try {
15
+ const start = Date.now()
16
+ await validator.assertCommandNotRunning('clean')
17
+ let miniConf = workspace.getMiniConf()
18
+ let validateResult = checkErros(miniConf)
19
+
20
+ if (!validateResult.isSuccess()) {
21
+ console.log(
22
+ 'Por favor, verifique atentamente os erros exibidos acima. Siga o exemplo abaixo: ' +
23
+ `
24
+ module.exports = {
25
+
26
+ // Dados da sua empresa
27
+ organization: {
28
+ "name": "Minha Empresa"
29
+ },
30
+
31
+ // Nome do seu mini app
32
+ "name": "Meu Mini App",
33
+
34
+ // Titulo do mini app, que vai em baixo do botao na pagina de transacoes
35
+ "title": "Meu super mini app",
36
+
37
+ // Chave para gerar a ordem/qrcode de pagamento (opcional)
38
+ "public-key": "",
39
+
40
+ // Identificador amigavel para colocar em uma url
41
+ "slug": "com.eitri.loja",
42
+
43
+ // Versao do mini app
44
+ "version": "1.0.0",
45
+
46
+ ${await targetService.getAppConfExampleSnippet()}
47
+ };
48
+
49
+
50
+ `
51
+ )
52
+
53
+ return
54
+ }
55
+
56
+ blindGuardian.readConf()
57
+ workspace.setServerUrl(config.get('workspace').url)
58
+ await workspace.init()
59
+
60
+ console.log('Limpando compilador')
61
+
62
+ await workspace.clean()
63
+
64
+ console.log('[1] Limpo.')
65
+
66
+ await track(miniConf, start)
67
+ TrackingEitriAnalytics.sendEvent({
68
+ command: "clean",
69
+ success: true,
70
+ })
71
+ process.exit(0)
72
+ } catch (e) {
73
+ TrackingEitriAnalytics.sendEvent({
74
+ command: "clean",
75
+ success: false,
76
+ errorMessage: e?.message || ""
77
+ })
78
+
79
+ if(!e) {
80
+ console.error('Erro desconhecido')
81
+ process.exit(1)
82
+ }
83
+
84
+ if (cmdObj.verbose) {
85
+ console.error('Falha deletando workspace remoto', e)
86
+ }
87
+
88
+ const exit = async () => {
89
+ await trackingService.sendError(e)
90
+ process.exit(1)
91
+ }
92
+
93
+ const { httpStatus, response } = e
94
+
95
+ if(response){
96
+ const { data } = response
97
+
98
+ const transactionId = data.req_id
99
+
100
+ const printError = (message) => console.error(`${transactionId}: ${message}`)
101
+
102
+ const tryExitWithFriendlyMessage = async () => {
103
+ if(data && data.friendlyMessage) {
104
+ const {friendlyMessage} = data
105
+ printError(friendlyMessage)
106
+ await exit()
107
+ }
108
+ }
109
+
110
+ if(httpStatus === 403) {
111
+ await tryExitWithFriendlyMessage()
112
+ printError('Acesso negado! Confira se vc está registrado como desenvolvedor deste eitri-app?')
113
+ await exit()
114
+ }
115
+ if(httpStatus === 500) {
116
+ if(data && data.error.includes('ENOENT: no such file or directory')) {
117
+ // O workspace remoto ja nao existe, portanto nada fazemos.
118
+ console.log('[2] Limpeza finalizada com sucesso.')
119
+ await exit()
120
+ }
121
+ await tryExitWithFriendlyMessage()
122
+ printError('Erro interno!')
123
+ await exit()
124
+ }
125
+ printError('Ops: ocorreu um erro inesperado realizar a limpeza :-(')
126
+ }
127
+ console.error(`Ops: ocorreu um erro durante a limpeza: ${e.message}`)
128
+ await exit()
129
+ }
130
+ }
131
+
132
+ function printAvailableWebhooks(webhooks) {
133
+ if(!webhooks || webhooks.length === 0) return
134
+ console.log('\nWebhooks do MiniApp.')
135
+ console.table(webhooks)
136
+ }
137
+
138
+ async function track(miniConf, start) {
139
+ let libs = await targetService.getLibs()
140
+ let event = {
141
+ superClientVersion: miniConf[libs.superAppClientLibName],
142
+ componentsVersion: miniConf[libs.componentsLibName],
143
+ miniAppSlug: miniConf.slug,
144
+ miniAppVersion: miniConf.version,
145
+ timeMs: Date.now() - start,
146
+ }
147
+ await trackingService.sendPushedVersion(event)
148
+ }
149
+
150
+ function checkErros(miniConf) {
151
+ let validateResult = validator.validate(miniConf)
152
+ validateResult.errors.forEach(message => console.log(message))
153
+ return validateResult
154
+ }
155
+
156
+ async function logPermissionsAndOpenPrompt(addedPermissions, removedPermissions, cmdObj) {
157
+ const GREEN_COLOR = '\x1b[32m'
158
+ const RED_COLOR = '\x1b[31m'
159
+ const MINIMAL_LENGTH = 0
160
+ if(addedPermissions.length > MINIMAL_LENGTH) {
161
+ console.log(`${GREEN_COLOR}\nPermissões adicionadas: ${addedPermissions}${GREEN_COLOR}`)
162
+ }
163
+ if(removedPermissions.length > MINIMAL_LENGTH) {
164
+ console.log(`${RED_COLOR}Permissões removidas: ${removedPermissions}\n${RED_COLOR}`)
165
+ }
166
+ if(!cmdObj.yes && (addedPermissions.length > MINIMAL_LENGTH || removedPermissions.length > MINIMAL_LENGTH)) {
167
+ const answer = await inquirer.prompt([
168
+ {
169
+ name: 'option',
170
+ message: 'Houve uma alteração nas permissões em relação a versão publicada. Deseja Continuar?',
171
+ type: 'rawlist',
172
+ choices: ['Sim', 'Não']
173
+ }
174
+ ])
175
+ if(answer.option === 'Não') {
176
+ process.exit(0)
177
+ }
178
+ }
179
+ }