dbgate-api-premium 5.5.7-alpha.45

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 (125) hide show
  1. package/.env +19 -0
  2. package/.yarnrc +2 -0
  3. package/README.md +1 -0
  4. package/env/dblogin/.env +14 -0
  5. package/env/portal/.env +70 -0
  6. package/env/singledb/.env +17 -0
  7. package/env/storage/.env +43 -0
  8. package/package.json +89 -0
  9. package/src/auth/authCommon.js +16 -0
  10. package/src/auth/authProvider.js +343 -0
  11. package/src/auth/storageAuthProvider.js +393 -0
  12. package/src/controllers/apps.js +280 -0
  13. package/src/controllers/archive.js +217 -0
  14. package/src/controllers/auth.js +136 -0
  15. package/src/controllers/config.js +271 -0
  16. package/src/controllers/connections.js +486 -0
  17. package/src/controllers/databaseConnections.js +561 -0
  18. package/src/controllers/files.js +222 -0
  19. package/src/controllers/jsldata.js +296 -0
  20. package/src/controllers/metadata.js +47 -0
  21. package/src/controllers/plugins.js +216 -0
  22. package/src/controllers/queryHistory.js +54 -0
  23. package/src/controllers/runners.js +234 -0
  24. package/src/controllers/scheduler.js +46 -0
  25. package/src/controllers/serverConnections.js +271 -0
  26. package/src/controllers/sessions.js +243 -0
  27. package/src/controllers/storage.js +380 -0
  28. package/src/controllers/storageDb.js +215 -0
  29. package/src/controllers/uploads.js +133 -0
  30. package/src/currentVersion.js +5 -0
  31. package/src/gistSecret.js +2 -0
  32. package/src/index.js +139 -0
  33. package/src/main.js +202 -0
  34. package/src/packagedPluginsContent.js +1 -0
  35. package/src/proc/connectProcess.js +38 -0
  36. package/src/proc/databaseConnectionProcess.js +431 -0
  37. package/src/proc/index.js +15 -0
  38. package/src/proc/jslDatastoreProcess.js +60 -0
  39. package/src/proc/serverConnectionProcess.js +188 -0
  40. package/src/proc/sessionProcess.js +390 -0
  41. package/src/proc/sshForwardProcess.js +75 -0
  42. package/src/shell/archiveReader.js +11 -0
  43. package/src/shell/archiveWriter.js +22 -0
  44. package/src/shell/autoIndexForeignKeysTransform.js +19 -0
  45. package/src/shell/collectorWriter.js +33 -0
  46. package/src/shell/consoleObjectWriter.js +16 -0
  47. package/src/shell/copyStream.js +48 -0
  48. package/src/shell/dataDuplicator.js +63 -0
  49. package/src/shell/dataTypeMapperTransform.js +21 -0
  50. package/src/shell/dbModelToJson.js +16 -0
  51. package/src/shell/deployDb.js +56 -0
  52. package/src/shell/download.js +15 -0
  53. package/src/shell/dropAllDbObjects.js +42 -0
  54. package/src/shell/dumpDatabase.js +49 -0
  55. package/src/shell/executeQuery.js +39 -0
  56. package/src/shell/fakeObjectReader.js +35 -0
  57. package/src/shell/finalizer.js +12 -0
  58. package/src/shell/generateDeploySql.js +95 -0
  59. package/src/shell/generateModelSql.js +30 -0
  60. package/src/shell/importDatabase.js +85 -0
  61. package/src/shell/index.js +80 -0
  62. package/src/shell/initializeApiEnvironment.js +9 -0
  63. package/src/shell/jslDataReader.js +9 -0
  64. package/src/shell/jsonLinesReader.js +52 -0
  65. package/src/shell/jsonLinesWriter.js +36 -0
  66. package/src/shell/jsonReader.js +84 -0
  67. package/src/shell/jsonToDbModel.js +9 -0
  68. package/src/shell/jsonWriter.js +97 -0
  69. package/src/shell/loadDatabase.js +27 -0
  70. package/src/shell/loadFile.js +10 -0
  71. package/src/shell/modifyJsonLinesReader.js +148 -0
  72. package/src/shell/queryReader.js +30 -0
  73. package/src/shell/registerPlugins.js +9 -0
  74. package/src/shell/requirePlugin.js +43 -0
  75. package/src/shell/runScript.js +19 -0
  76. package/src/shell/sqlDataWriter.js +52 -0
  77. package/src/shell/sqlTextReplacementTransform.js +32 -0
  78. package/src/shell/tableReader.js +39 -0
  79. package/src/shell/tableWriter.js +18 -0
  80. package/src/storageModel.js +819 -0
  81. package/src/utility/ColumnMapTransformStream.js +21 -0
  82. package/src/utility/DatastoreProxy.js +106 -0
  83. package/src/utility/EnsureStreamHeaderStream.js +31 -0
  84. package/src/utility/JsonLinesDatabase.js +148 -0
  85. package/src/utility/JsonLinesDatastore.js +232 -0
  86. package/src/utility/LineReader.js +88 -0
  87. package/src/utility/SSHConnection.js +251 -0
  88. package/src/utility/authProxy.js +133 -0
  89. package/src/utility/checkLicense.js +186 -0
  90. package/src/utility/childProcessChecker.js +21 -0
  91. package/src/utility/cleanDirectory.js +24 -0
  92. package/src/utility/cloudUpgrade.js +61 -0
  93. package/src/utility/connectUtility.js +111 -0
  94. package/src/utility/crypting.js +105 -0
  95. package/src/utility/diff2htmlPage.js +8 -0
  96. package/src/utility/directories.js +179 -0
  97. package/src/utility/downloadPackage.js +51 -0
  98. package/src/utility/downloader.js +25 -0
  99. package/src/utility/exceptions.js +9 -0
  100. package/src/utility/exportDbModel.js +31 -0
  101. package/src/utility/exportDbModelSql.js +80 -0
  102. package/src/utility/getChartExport.js +55 -0
  103. package/src/utility/getDiagramExport.js +25 -0
  104. package/src/utility/getExpressPath.js +10 -0
  105. package/src/utility/getJslFileName.js +16 -0
  106. package/src/utility/getMapExport.js +77 -0
  107. package/src/utility/hardwareFingerprint.js +89 -0
  108. package/src/utility/hasPermission.js +101 -0
  109. package/src/utility/importDbModel.js +9 -0
  110. package/src/utility/loadFilesRecursive.js +20 -0
  111. package/src/utility/loadModelFolder.js +29 -0
  112. package/src/utility/loadModelTransform.js +36 -0
  113. package/src/utility/pipeForkLogs.js +19 -0
  114. package/src/utility/platformInfo.js +62 -0
  115. package/src/utility/processArgs.js +39 -0
  116. package/src/utility/processComm.js +18 -0
  117. package/src/utility/requireEngineDriver.js +26 -0
  118. package/src/utility/requirePluginFunction.js +16 -0
  119. package/src/utility/socket.js +68 -0
  120. package/src/utility/sshTunnel.js +106 -0
  121. package/src/utility/sshTunnelProxy.js +36 -0
  122. package/src/utility/timingSafeCheckToken.js +9 -0
  123. package/src/utility/useController.js +99 -0
  124. package/tsconfig.json +13 -0
  125. package/webpack.config.js +55 -0
@@ -0,0 +1,133 @@
1
+ const crypto = require('crypto');
2
+ const path = require('path');
3
+ const { uploadsdir, getLogsFilePath } = require('../utility/directories');
4
+ const { getLogger, extractErrorLogData } = require('dbgate-tools');
5
+ const logger = getLogger('uploads');
6
+ const axios = require('axios');
7
+ const os = require('os');
8
+ const fs = require('fs/promises');
9
+ const { read } = require('./queryHistory');
10
+ const platformInfo = require('../utility/platformInfo');
11
+ const _ = require('lodash');
12
+ const serverConnections = require('./serverConnections');
13
+ const config = require('./config');
14
+ const gistSecret = require('../gistSecret');
15
+ const currentVersion = require('../currentVersion');
16
+
17
+ module.exports = {
18
+ upload_meta: {
19
+ method: 'post',
20
+ raw: true,
21
+ },
22
+ upload(req, res) {
23
+ const { data } = req.files || {};
24
+ if (!data) {
25
+ res.json(null);
26
+ return;
27
+ }
28
+ const uploadName = crypto.randomUUID();
29
+ const filePath = path.join(uploadsdir(), uploadName);
30
+ logger.info(`Uploading file ${data.name}, size=${data.size}`);
31
+
32
+ data.mv(filePath, () => {
33
+ res.json({
34
+ originalName: data.name,
35
+ uploadName,
36
+ filePath,
37
+ });
38
+ });
39
+ },
40
+
41
+ get_meta: {
42
+ method: 'get',
43
+ raw: true,
44
+ },
45
+ get(req, res) {
46
+ res.sendFile(path.join(uploadsdir(), req.query.file));
47
+ },
48
+
49
+ async getGistToken() {
50
+ const settings = await config.getSettings();
51
+
52
+ return settings['other.gistCreateToken'] || gistSecret;
53
+ },
54
+
55
+ uploadErrorToGist_meta: true,
56
+ async uploadErrorToGist() {
57
+ const logs = await fs.readFile(getLogsFilePath(), { encoding: 'utf-8' });
58
+ const connections = await serverConnections.getOpenedConnectionReport();
59
+ try {
60
+ const response = await axios.default.post(
61
+ 'https://api.github.com/gists',
62
+ {
63
+ description: `DbGate ${currentVersion.version} error report`,
64
+ public: false,
65
+ files: {
66
+ 'logs.jsonl': {
67
+ content: logs,
68
+ },
69
+ 'os.json': {
70
+ content: JSON.stringify(
71
+ {
72
+ release: os.release(),
73
+ arch: os.arch(),
74
+ machine: os.machine(),
75
+ platform: os.platform(),
76
+ type: os.type(),
77
+ },
78
+ null,
79
+ 2
80
+ ),
81
+ },
82
+ 'platform.json': {
83
+ content: JSON.stringify(
84
+ _.omit(
85
+ {
86
+ ...platformInfo,
87
+ },
88
+ ['defaultKeyfile', 'sshAuthSock']
89
+ ),
90
+ null,
91
+ 2
92
+ ),
93
+ },
94
+ 'connections.json': {
95
+ content: JSON.stringify(connections, null, 2),
96
+ },
97
+ 'version.json': {
98
+ content: JSON.stringify(currentVersion, null, 2),
99
+ },
100
+ },
101
+ },
102
+ {
103
+ headers: {
104
+ Authorization: `token ${await this.getGistToken()}`,
105
+ 'Content-Type': 'application/json',
106
+ Accept: 'application/vnd.github.v3+json',
107
+ },
108
+ }
109
+ );
110
+
111
+ return response.data;
112
+ } catch (err) {
113
+ logger.error(extractErrorLogData(err), 'Error uploading gist');
114
+
115
+ return {
116
+ apiErrorMessage: err.message,
117
+ };
118
+ // console.error('Error creating gist:', error.response ? error.response.data : error.message);
119
+ }
120
+ },
121
+
122
+ deleteGist_meta: true,
123
+ async deleteGist({ url }) {
124
+ const response = await axios.default.delete(url, {
125
+ headers: {
126
+ Authorization: `token ${await this.getGistToken()}`,
127
+ 'Content-Type': 'application/json',
128
+ Accept: 'application/vnd.github.v3+json',
129
+ },
130
+ });
131
+ return true;
132
+ },
133
+ };
@@ -0,0 +1,5 @@
1
+
2
+ module.exports = {
3
+ version: '5.5.7-alpha.45',
4
+ buildTime: '2024-11-14T07:29:43.540Z'
5
+ };
@@ -0,0 +1,2 @@
1
+
2
+ module.exports = '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';
package/src/index.js ADDED
@@ -0,0 +1,139 @@
1
+ const { setLogConfig, getLogger, setLoggerName, extractErrorLogData } = require('dbgate-tools');
2
+ const processArgs = require('./utility/processArgs');
3
+ const fs = require('fs');
4
+ const moment = require('moment');
5
+ const path = require('path');
6
+ const { logsdir, setLogsFilePath, getLogsFilePath } = require('./utility/directories');
7
+ const currentVersion = require('./currentVersion');
8
+
9
+ const logger = getLogger('apiIndex');
10
+
11
+ process.on('uncaughtException', err => {
12
+ logger.fatal(extractErrorLogData(err), 'Uncaught exception, exiting process');
13
+ process.exit(1);
14
+ });
15
+
16
+ if (processArgs.startProcess) {
17
+ setLoggerName(processArgs.startProcess.replace(/Process$/, ''));
18
+ }
19
+ if (processArgs.processDisplayName) {
20
+ setLoggerName(processArgs.processDisplayName);
21
+ }
22
+
23
+ // function loadLogsContent(maxLines) {
24
+ // const text = fs.readFileSync(getLogsFilePath(), { encoding: 'utf8' });
25
+ // if (maxLines) {
26
+ // const lines = text
27
+ // .split('\n')
28
+ // .map(x => x.trim())
29
+ // .filter(x => x);
30
+ // return lines.slice(-maxLines).join('\n');
31
+ // }
32
+ // return text;
33
+ // }
34
+
35
+ function configureLogger() {
36
+ const logsFilePath = path.join(logsdir(), `${moment().format('YYYY-MM-DD-HH-mm')}-${process.pid}.ndjson`);
37
+ setLogsFilePath(logsFilePath);
38
+ setLoggerName('main');
39
+
40
+ const consoleLogLevel = process.env.CONSOLE_LOG_LEVEL || process.env.LOG_LEVEL || 'info';
41
+ const fileLogLevel = process.env.FILE_LOG_LEVEL || process.env.LOG_LEVEL || 'debug';
42
+
43
+ const logConfig = {
44
+ base: { pid: process.pid },
45
+ targets: [
46
+ {
47
+ type: 'console',
48
+ // @ts-ignore
49
+ level: consoleLogLevel,
50
+ },
51
+ {
52
+ type: 'stream',
53
+ // @ts-ignore
54
+ level: fileLogLevel,
55
+ stream: fs.createWriteStream(logsFilePath, { flags: 'a' }),
56
+ },
57
+ ],
58
+ };
59
+
60
+ // logger.info(`Initialized logging, console log level: ${consoleLogLevel}, file log level: ${fileLogLevel}`);
61
+
62
+ // const streams = [];
63
+ // if (!platformInfo.isElectron) {
64
+ // streams.push({
65
+ // stream: process.stdout,
66
+ // level: process.env.CONSOLE_LOG_LEVEL || process.env.LOG_LEVEL || 'info',
67
+ // });
68
+ // }
69
+
70
+ // streams.push({
71
+ // stream: fs.createWriteStream(logsFilePath),
72
+ // level: process.env.FILE_LOG_LEVEL || process.env.LOG_LEVEL || 'info',
73
+ // });
74
+
75
+ // let logger = pinoms({
76
+ // redact: { paths: ['hostname'], remove: true },
77
+ // streams,
78
+ // });
79
+
80
+ // // @ts-ignore
81
+ // let logger = pino({
82
+ // redact: { paths: ['hostname'], remove: true },
83
+ // transport: {
84
+ // targets: [
85
+ // {
86
+ // level: process.env.CONSOLE_LOG_LEVEL || process.env.LOG_LEVEL || 'info',
87
+ // target: 'pino/file',
88
+ // },
89
+ // {
90
+ // level: process.env.FILE_LOG_LEVEL || process.env.LOG_LEVEL || 'info',
91
+ // target: 'pino/file',
92
+ // options: { destination: logsFilePath },
93
+ // },
94
+ // ],
95
+ // },
96
+ // });
97
+
98
+ // @ts-ignore
99
+ setLogConfig(logConfig);
100
+ }
101
+
102
+ if (processArgs.listenApi) {
103
+ configureLogger();
104
+ logger.info(`Starting API process version ${currentVersion.version}`);
105
+
106
+ if (process.env.DEBUG_PRINT_ENV_VARIABLES) {
107
+ logger.info('Debug print environment variables:');
108
+ for (const key of Object.keys(process.env)) {
109
+ logger.info(` ${key}: ${JSON.stringify(process.env[key])}`);
110
+ }
111
+ }
112
+ }
113
+
114
+ const shell = require('./shell/index');
115
+
116
+ global.DBGATE_PACKAGES = {
117
+ 'dbgate-tools': require('dbgate-tools'),
118
+ 'dbgate-sqltree': require('dbgate-sqltree'),
119
+ };
120
+
121
+ if (processArgs.startProcess) {
122
+ const proc = require('./proc');
123
+ const module = proc[processArgs.startProcess];
124
+ module.start();
125
+ }
126
+
127
+ if (processArgs.listenApi) {
128
+ const main = require('./main');
129
+ main.start();
130
+ }
131
+
132
+ module.exports = {
133
+ ...shell,
134
+ getLogger,
135
+ configureLogger,
136
+ currentVersion,
137
+ // loadLogsContent,
138
+ getMainModule: () => require('./main'),
139
+ };
package/src/main.js ADDED
@@ -0,0 +1,202 @@
1
+ const express = require('express');
2
+ const basicAuth = require('express-basic-auth');
3
+ const bodyParser = require('body-parser');
4
+ const fileUpload = require('express-fileupload');
5
+ const http = require('http');
6
+ const cors = require('cors');
7
+ const getPort = require('get-port');
8
+ const path = require('path');
9
+
10
+ const useController = require('./utility/useController');
11
+ const socket = require('./utility/socket');
12
+
13
+ const connections = require('./controllers/connections');
14
+ const serverConnections = require('./controllers/serverConnections');
15
+ const databaseConnections = require('./controllers/databaseConnections');
16
+ const metadata = require('./controllers/metadata');
17
+ const sessions = require('./controllers/sessions');
18
+ const runners = require('./controllers/runners');
19
+ const jsldata = require('./controllers/jsldata');
20
+ const config = require('./controllers/config');
21
+ const storage = require('./controllers/storage');
22
+ const archive = require('./controllers/archive');
23
+ const apps = require('./controllers/apps');
24
+ const auth = require('./controllers/auth');
25
+ const uploads = require('./controllers/uploads');
26
+ const plugins = require('./controllers/plugins');
27
+ const files = require('./controllers/files');
28
+ const scheduler = require('./controllers/scheduler');
29
+ const queryHistory = require('./controllers/queryHistory');
30
+ const onFinished = require('on-finished');
31
+
32
+ const { rundir } = require('./utility/directories');
33
+ const platformInfo = require('./utility/platformInfo');
34
+ const getExpressPath = require('./utility/getExpressPath');
35
+ const _ = require('lodash');
36
+ const { getLogger } = require('dbgate-tools');
37
+ const { getDefaultAuthProvider } = require('./auth/authProvider');
38
+ const startCloudUpgradeTimer = require('./utility/cloudUpgrade');
39
+
40
+ const logger = getLogger('main');
41
+
42
+ function start() {
43
+ // console.log('process.argv', process.argv);
44
+
45
+ const app = express();
46
+
47
+ const server = http.createServer(app);
48
+
49
+ if (process.env.BASIC_AUTH && !process.env.STORAGE_DATABASE) {
50
+ async function authorizer(username, password, cb) {
51
+ try {
52
+ const resp = await getDefaultAuthProvider().login(username, password);
53
+ if (resp.accessToken) {
54
+ cb(null, true);
55
+ } else {
56
+ cb(null, false);
57
+ }
58
+ } catch (err) {
59
+ cb(err, false);
60
+ }
61
+ }
62
+ app.use(
63
+ basicAuth({
64
+ authorizer,
65
+ authorizeAsync: true,
66
+ challenge: true,
67
+ realm: 'DbGate Web App',
68
+ })
69
+ );
70
+ }
71
+
72
+ app.use(cors());
73
+
74
+ if (platformInfo.isDocker) {
75
+ // server static files inside docker container
76
+ app.use(getExpressPath('/'), express.static('/home/dbgate-docker/public'));
77
+ } else if (platformInfo.isAwsUbuntuLayout) {
78
+ app.use(getExpressPath('/'), express.static('/home/ubuntu/build/public'));
79
+ } else if (platformInfo.isNpmDist) {
80
+ app.use(getExpressPath('/'), express.static(path.join(__dirname, '../../dbgate-web/public')));
81
+ } else if (process.env.DEVWEB) {
82
+ // console.log('__dirname', __dirname);
83
+ // console.log(path.join(__dirname, '../../web/public/build'));
84
+ app.use(getExpressPath('/'), express.static(path.join(__dirname, '../../web/public')));
85
+ } else {
86
+ app.get(getExpressPath('/'), (req, res) => {
87
+ res.send('DbGate API');
88
+ });
89
+ }
90
+
91
+ app.use(auth.authMiddleware);
92
+
93
+ app.get(getExpressPath('/stream'), async function (req, res) {
94
+ const strmid = req.query.strmid;
95
+ res.set({
96
+ 'Cache-Control': 'no-cache',
97
+ 'Content-Type': 'text/event-stream',
98
+ 'X-Accel-Buffering': 'no',
99
+ Connection: 'keep-alive',
100
+ });
101
+ res.flushHeaders();
102
+
103
+ // Tell the client to retry every 10 seconds if connectivity is lost
104
+ res.write('retry: 10000\n\n');
105
+ socket.addSseResponse(res, strmid);
106
+ onFinished(req, () => {
107
+ socket.removeSseResponse(strmid);
108
+ });
109
+ });
110
+
111
+ app.use(bodyParser.json({ limit: '50mb' }));
112
+
113
+ app.use(
114
+ getExpressPath('/uploads'),
115
+ fileUpload({
116
+ limits: { fileSize: 4 * 1024 * 1024 },
117
+ })
118
+ );
119
+
120
+ useAllControllers(app, null);
121
+
122
+ // if (process.env.PAGES_DIRECTORY) {
123
+ // app.use('/pages', express.static(process.env.PAGES_DIRECTORY));
124
+ // }
125
+
126
+ app.use(getExpressPath('/runners/data'), express.static(rundir()));
127
+
128
+ if (platformInfo.isDocker) {
129
+ const port = process.env.PORT || 3000;
130
+ logger.info(`DbGate API listening on port ${port} (docker build)`);
131
+ server.listen(port);
132
+ } else if (platformInfo.isAwsUbuntuLayout) {
133
+ const port = process.env.PORT || 3000;
134
+ logger.info(`DbGate API listening on port ${port} (AWS AMI build)`);
135
+ server.listen(port);
136
+ } else if (platformInfo.isNpmDist) {
137
+ getPort({
138
+ port: parseInt(
139
+ // @ts-ignore
140
+ process.env.PORT || 3000
141
+ ),
142
+ }).then(port => {
143
+ server.listen(port, () => {
144
+ logger.info(`DbGate API listening on port ${port} (NPM build)`);
145
+ });
146
+ });
147
+ } else if (process.env.DEVWEB) {
148
+ const port = process.env.PORT || 3000;
149
+ logger.info(`DbGate API & web listening on port ${port} (dev web build)`);
150
+ server.listen(port);
151
+ } else {
152
+ const port = process.env.PORT || 3000;
153
+ logger.info(`DbGate API listening on port ${port} (dev API build)`);
154
+ server.listen(port);
155
+ }
156
+
157
+ function shutdown() {
158
+ logger.info('\nShutting down DbGate API server');
159
+ server.close(() => {
160
+ logger.info('Server shut down, terminating');
161
+ process.exit(0);
162
+ });
163
+ setTimeout(() => {
164
+ logger.info('Server close timeout, terminating');
165
+ process.exit(0);
166
+ }, 1000);
167
+ }
168
+
169
+ process.on('SIGINT', shutdown);
170
+ process.on('SIGTERM', shutdown);
171
+ process.on('SIGBREAK', shutdown);
172
+
173
+ if (process.env.CLOUD_UPGRADE_FILE) {
174
+ startCloudUpgradeTimer();
175
+ }
176
+ }
177
+
178
+ function useAllControllers(app, electron) {
179
+ useController(app, electron, '/connections', connections);
180
+ useController(app, electron, '/server-connections', serverConnections);
181
+ useController(app, electron, '/database-connections', databaseConnections);
182
+ useController(app, electron, '/metadata', metadata);
183
+ useController(app, electron, '/sessions', sessions);
184
+ useController(app, electron, '/runners', runners);
185
+ useController(app, electron, '/jsldata', jsldata);
186
+ useController(app, electron, '/config', config);
187
+ useController(app, electron, '/storage', storage);
188
+ useController(app, electron, '/archive', archive);
189
+ useController(app, electron, '/uploads', uploads);
190
+ useController(app, electron, '/plugins', plugins);
191
+ useController(app, electron, '/files', files);
192
+ useController(app, electron, '/scheduler', scheduler);
193
+ useController(app, electron, '/query-history', queryHistory);
194
+ useController(app, electron, '/apps', apps);
195
+ useController(app, electron, '/auth', auth);
196
+ }
197
+
198
+ function setElectronSender(electronSender) {
199
+ socket.setElectronSender(electronSender);
200
+ }
201
+
202
+ module.exports = { start, useAllControllers, setElectronSender, configController: config };
@@ -0,0 +1 @@
1
+ module.exports = () => null;
@@ -0,0 +1,38 @@
1
+ const childProcessChecker = require('../utility/childProcessChecker');
2
+ const requireEngineDriver = require('../utility/requireEngineDriver');
3
+ const connectUtility = require('../utility/connectUtility');
4
+ const { handleProcessCommunication } = require('../utility/processComm');
5
+ const { pickSafeConnectionInfo } = require('../utility/crypting');
6
+ const _ = require('lodash');
7
+
8
+ const formatErrorDetail = (e, connection) => `${e.stack}
9
+
10
+ Error JSON: ${JSON.stringify(e, undefined, 2)}
11
+
12
+ Connection: ${JSON.stringify(pickSafeConnectionInfo(connection), undefined, 2)}
13
+
14
+ Platform: ${process.platform}
15
+ `;
16
+
17
+ function start() {
18
+ childProcessChecker();
19
+ process.on('message', async connection => {
20
+ if (handleProcessCommunication(connection)) return;
21
+ try {
22
+ const driver = requireEngineDriver(connection);
23
+ const dbhan = await connectUtility(driver, connection, 'app');
24
+ const res = await driver.getVersion(dbhan);
25
+ process.send({ msgtype: 'connected', ...res });
26
+ await driver.close(dbhan);
27
+ } catch (e) {
28
+ console.error(e);
29
+ process.send({
30
+ msgtype: 'error',
31
+ error: e.message,
32
+ detail: formatErrorDetail(e, connection),
33
+ });
34
+ }
35
+ });
36
+ }
37
+
38
+ module.exports = { start };