@onivoro/onix 20.5.47 → 20.5.49

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/executors.json CHANGED
@@ -10,6 +10,11 @@
10
10
  "schema": "./src/executors/typeorm/schema.json",
11
11
  "description": "typeorm"
12
12
  },
13
+ "typeorm-db-client": {
14
+ "implementation": "./src/executors/typeorm-db-client/executor",
15
+ "schema": "./src/executors/typeorm/schema.json",
16
+ "description": "typeorm-db-client"
17
+ },
13
18
  "docker-run": {
14
19
  "implementation": "./src/executors/docker-run/executor",
15
20
  "schema": "./src/executors/docker-run/schema.json",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onivoro/onix",
3
- "version": "20.5.47",
3
+ "version": "20.5.49",
4
4
  "type": "commonjs",
5
5
  "main": "./src/index.js",
6
6
  "typings": "./src/index.d.ts",
@@ -13,10 +13,14 @@
13
13
  "@aws-sdk/credential-providers": "^3.782.0",
14
14
  "@nx/devkit": "20.5.0",
15
15
  "@nx/js": "20.5.0",
16
+ "@onivoro/server-html": "24.25.1",
16
17
  "@playwright/test": "^1.51.1",
18
+ "@types/express": "^4.17.21",
17
19
  "adm-zip": "^0.5.16",
18
20
  "esbuild": "^0.25.2",
19
- "esbuild-node-externals": "^1.18.0"
21
+ "esbuild-node-externals": "^1.18.0",
22
+ "express": "^4.18.2",
23
+ "typeorm": "^0.3.20"
20
24
  },
21
25
  "types": "./src/index.d.ts"
22
26
  }
@@ -0,0 +1,3 @@
1
+ import { ExecutorSchema } from './schema';
2
+ declare const _default: import("@nx/devkit").PromiseExecutor<ExecutorSchema>;
3
+ export default _default;
@@ -0,0 +1,492 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const devkit_1 = require("@nx/devkit");
5
+ const load_env_file_function_1 = require("../../functions/load-env-file.function");
6
+ const executor_factory_function_1 = require("../../functions/executor-factory.function");
7
+ const server_html_1 = require("@onivoro/server-html");
8
+ const typeorm_1 = require("typeorm");
9
+ const express = require("express");
10
+ exports.default = (0, executor_factory_function_1.executorFactory)((options, context) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
11
+ const { envFile = '/Users/leenorris/github.com/silvertek-us/silvertek/.env.colleran.collerancompanies.com', host = 'PG_HOST', database = 'PG_DB', password = 'PG_PASSWORD', port = 'PG_PORT', username = 'PG_USER', type = 'postgres' } = options || {};
12
+ // Load environment file if provided
13
+ if (envFile) {
14
+ (0, load_env_file_function_1.loadEnvFile)(envFile);
15
+ }
16
+ // Extract database configuration from options or environment variables
17
+ const dbConfig = {
18
+ host: process.env[host],
19
+ port: process.env[port],
20
+ username: process.env[username],
21
+ password: process.env[password],
22
+ database: process.env[database],
23
+ type: type,
24
+ ssl: (options === null || options === void 0 ? void 0 : options.ssl) !== undefined ? options.ssl : (process.env.DB_SSL === 'true' || process.env.DB_SSL === '1')
25
+ };
26
+ // Create TypeORM DataSource configuration
27
+ const dataSourceConfig = {
28
+ type: dbConfig.type,
29
+ host: dbConfig.host,
30
+ port: dbConfig.port,
31
+ username: dbConfig.username,
32
+ password: dbConfig.password,
33
+ database: dbConfig.database,
34
+ synchronize: false, // Never auto-sync in production
35
+ logging: process.env.DB_LOGGING === 'true',
36
+ ssl: dbConfig.ssl ? { rejectUnauthorized: false } : false,
37
+ // Empty entities array since we're doing raw queries for database introspection
38
+ entities: [],
39
+ // Set reasonable connection pool settings
40
+ extra: {
41
+ max: 10,
42
+ min: 1,
43
+ acquireTimeoutMillis: 30000,
44
+ createTimeoutMillis: 30000,
45
+ destroyTimeoutMillis: 5000,
46
+ idleTimeoutMillis: 30000,
47
+ reapIntervalMillis: 1000,
48
+ createRetryIntervalMillis: 100
49
+ }
50
+ };
51
+ devkit_1.logger.info(`Creating DataSource with configuration:`);
52
+ devkit_1.logger.info(`- Type: ${dataSourceConfig.type}`);
53
+ devkit_1.logger.info(`- Host: ${dataSourceConfig.host}`);
54
+ devkit_1.logger.info(`- Port: ${dataSourceConfig.port}`);
55
+ devkit_1.logger.info(`- Database: ${dataSourceConfig.database}`);
56
+ devkit_1.logger.info(`- Username: ${dataSourceConfig.username}`);
57
+ devkit_1.logger.info(`- SSL: ${dataSourceConfig.ssl ? 'enabled' : 'disabled'}`);
58
+ const dataSource = new typeorm_1.DataSource(dataSourceConfig);
59
+ try {
60
+ yield dataSource.initialize();
61
+ devkit_1.logger.info('Database connection established');
62
+ // Create Express server
63
+ const app = express();
64
+ app.use(express.json());
65
+ app.use(express.urlencoded({ extended: true }));
66
+ // Routes
67
+ app.get('/', (req, res) => {
68
+ res.send(getDatabaseClientUI());
69
+ });
70
+ app.get('/api/tables', (req, res) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
71
+ const tablesHtml = yield getTables(dataSource);
72
+ res.send(tablesHtml);
73
+ }));
74
+ app.get('/api/table/:tableName', (req, res) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
75
+ const tableDataHtml = yield getTableData(dataSource, req.params.tableName);
76
+ res.send(tableDataHtml);
77
+ }));
78
+ app.get('/api/table/:tableName/structure', (req, res) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
79
+ const structureHtml = yield getTableStructure(dataSource, req.params.tableName);
80
+ res.send(structureHtml);
81
+ }));
82
+ app.post('/api/query', (req, res) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
83
+ const queryResultHtml = yield executeQuery(dataSource, req.body.query);
84
+ res.send(queryResultHtml);
85
+ }));
86
+ const server = app.listen(3000, () => {
87
+ devkit_1.logger.info('Database client UI available at http://localhost:3000');
88
+ });
89
+ // Keep the process running
90
+ process.on('SIGINT', () => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
91
+ devkit_1.logger.info('Shutting down database client...');
92
+ server.close();
93
+ yield dataSource.destroy();
94
+ process.exit(0);
95
+ }));
96
+ }
97
+ catch (error) {
98
+ devkit_1.logger.error('Failed to connect to database: ' + error.message);
99
+ throw error;
100
+ }
101
+ }));
102
+ function getDatabaseClientUI() {
103
+ return (0, server_html_1.$html)({
104
+ lang: 'en',
105
+ children: [
106
+ (0, server_html_1.$head)({
107
+ children: [
108
+ (0, server_html_1.$meta)({ charset: 'UTF-8' }),
109
+ (0, server_html_1.$meta)({ name: 'viewport', content: 'width=device-width, initial-scale=1.0' }),
110
+ (0, server_html_1.$title)({ textContent: 'TypeORM Database Client' }),
111
+ (0, server_html_1.$script)({ src: 'https://unpkg.com/htmx.org@1.9.10' }),
112
+ (0, server_html_1.$script)({ src: 'https://unpkg.com/alpinejs@3.13.5/dist/cdn.min.js', defer: true }),
113
+ (0, server_html_1.$style)({
114
+ textContent: `
115
+ * { margin: 0; padding: 0; box-sizing: border-box; }
116
+ body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: #f5f5f5; }
117
+ .container { display: flex; height: 100vh; }
118
+ .sidebar { width: 300px; background: #fff; border-right: 1px solid #e0e0e0; overflow-y: auto; }
119
+ .main { flex: 1; display: flex; flex-direction: column; }
120
+ .header { background: #fff; padding: 1rem; border-bottom: 1px solid #e0e0e0; }
121
+ .content { flex: 1; padding: 1rem; overflow: auto; }
122
+ .table-list { padding: 1rem; }
123
+ .table-item { padding: 0.5rem; cursor: pointer; border-radius: 4px; margin-bottom: 0.25rem; }
124
+ .table-item:hover { background: #f0f0f0; }
125
+ .table-item.active { background: #007acc; color: white; }
126
+ .query-editor { margin-bottom: 1rem; }
127
+ .query-editor textarea { width: 100%; height: 100px; padding: 0.5rem; border: 1px solid #ccc; border-radius: 4px; font-family: monospace; }
128
+ .btn { padding: 0.5rem 1rem; background: #007acc; color: white; border: none; border-radius: 4px; cursor: pointer; }
129
+ .btn:hover { background: #005a9e; }
130
+ .table-container { background: white; border-radius: 4px; overflow: hidden; }
131
+ table { width: 100%; border-collapse: collapse; }
132
+ th, td { padding: 0.5rem; text-align: left; border-bottom: 1px solid #e0e0e0; }
133
+ th { background: #f8f9fa; font-weight: 600; }
134
+ .loading { text-align: center; padding: 2rem; color: #666; }
135
+ .error { background: #fee; color: #c33; padding: 1rem; border-radius: 4px; margin-bottom: 1rem; }
136
+ .tabs { display: flex; border-bottom: 1px solid #e0e0e0; }
137
+ .tab { padding: 0.75rem 1rem; cursor: pointer; border-bottom: 2px solid transparent; }
138
+ .tab.active { border-bottom-color: #007acc; color: #007acc; font-weight: 600; }
139
+ .tab-content { display: none; }
140
+ .tab-content.active { display: block; }
141
+ `
142
+ })
143
+ ]
144
+ }),
145
+ (0, server_html_1.$body)({
146
+ 'x-data': 'dbClient()',
147
+ children: [
148
+ (0, server_html_1.$div)({
149
+ className: 'container',
150
+ children: [
151
+ // Sidebar
152
+ (0, server_html_1.$div)({
153
+ className: 'sidebar',
154
+ children: [
155
+ (0, server_html_1.$div)({
156
+ className: 'table-list',
157
+ children: [
158
+ (0, server_html_1.$h3)({
159
+ textContent: 'Tables',
160
+ style: { marginBottom: '1rem', color: '#333' }
161
+ }),
162
+ (0, server_html_1.$div)({
163
+ 'hx-get': '/api/tables',
164
+ 'hx-trigger': 'load',
165
+ 'hx-target': '#table-list',
166
+ children: [
167
+ (0, server_html_1.$div)({
168
+ id: 'table-list',
169
+ className: 'loading',
170
+ textContent: 'Loading tables...'
171
+ })
172
+ ]
173
+ })
174
+ ]
175
+ })
176
+ ]
177
+ }),
178
+ // Main Content
179
+ (0, server_html_1.$div)({
180
+ className: 'main',
181
+ children: [
182
+ (0, server_html_1.$div)({
183
+ className: 'header',
184
+ children: [
185
+ (0, server_html_1.$h1)({ textContent: 'TypeORM Database Client' })
186
+ ]
187
+ }),
188
+ (0, server_html_1.$div)({
189
+ className: 'content',
190
+ children: [
191
+ // Query Editor
192
+ (0, server_html_1.$div)({
193
+ className: 'query-editor',
194
+ children: [
195
+ (0, server_html_1.$textarea)({
196
+ 'x-model': 'query',
197
+ placeholder: 'Enter SQL query...'
198
+ }),
199
+ (0, server_html_1.$button)({
200
+ className: 'btn',
201
+ '@click': 'executeQuery()',
202
+ style: { marginTop: '0.5rem' },
203
+ textContent: 'Execute Query'
204
+ })
205
+ ]
206
+ }),
207
+ // Results Area
208
+ (0, server_html_1.$div)({
209
+ id: 'results-area',
210
+ children: [
211
+ (0, server_html_1.$div)({
212
+ className: 'loading',
213
+ textContent: 'Select a table or execute a query to see results'
214
+ })
215
+ ]
216
+ })
217
+ ]
218
+ })
219
+ ]
220
+ })
221
+ ]
222
+ }),
223
+ (0, server_html_1.$script)({
224
+ textContent: `
225
+ function dbClient() {
226
+ return {
227
+ query: '',
228
+ selectedTable: '',
229
+
230
+ selectTable(tableName) {
231
+ this.selectedTable = tableName;
232
+
233
+ // Update table list active state
234
+ document.querySelectorAll('.table-item').forEach(item => {
235
+ item.classList.remove('active');
236
+ });
237
+ event.target.classList.add('active');
238
+
239
+ // Load table data with tabs
240
+ htmx.ajax('GET', '/api/table/' + tableName, {
241
+ target: '#results-area'
242
+ });
243
+ },
244
+
245
+ executeQuery() {
246
+ if (!this.query.trim()) return;
247
+
248
+ htmx.ajax('POST', '/api/query', {
249
+ target: '#results-area',
250
+ values: { query: this.query }
251
+ });
252
+ },
253
+
254
+ switchTab(tabName) {
255
+ // Handle tab switching
256
+ document.querySelectorAll('.tab').forEach(tab => {
257
+ tab.classList.remove('active');
258
+ });
259
+ document.querySelectorAll('.tab-content').forEach(content => {
260
+ content.classList.remove('active');
261
+ });
262
+
263
+ event.target.classList.add('active');
264
+ document.getElementById(tabName + '-content').classList.add('active');
265
+
266
+ // Load structure if structure tab is clicked
267
+ if (tabName === 'structure' && this.selectedTable) {
268
+ htmx.ajax('GET', '/api/table/' + this.selectedTable + '/structure', {
269
+ target: '#structure-content'
270
+ });
271
+ }
272
+ }
273
+ }
274
+ }
275
+
276
+ // Make selectTable and switchTab globally available for HTMX
277
+ window.selectTable = function(tableName) {
278
+ document.querySelector('[x-data]').__x.$data.selectTable(tableName);
279
+ };
280
+
281
+ window.switchTab = function(tabName) {
282
+ document.querySelector('[x-data]').__x.$data.switchTab(tabName);
283
+ };
284
+ `
285
+ })
286
+ ]
287
+ })
288
+ ]
289
+ });
290
+ }
291
+ function getTables(dataSource) {
292
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
293
+ try {
294
+ const tables = yield dataSource.query(`
295
+ SELECT table_name
296
+ FROM information_schema.tables
297
+ WHERE table_schema = 'public'
298
+ ORDER BY table_name
299
+ `);
300
+ const tableElements = tables.map(table => (0, server_html_1.$div)({
301
+ className: 'table-item',
302
+ onclick: `selectTable('${table.table_name}')`,
303
+ textContent: table.table_name
304
+ }));
305
+ return tableElements.join('');
306
+ }
307
+ catch (error) {
308
+ return (0, server_html_1.$div)({
309
+ className: 'error',
310
+ textContent: `Error loading tables: ${error.message}`
311
+ });
312
+ }
313
+ });
314
+ }
315
+ function getTableData(dataSource, tableName) {
316
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
317
+ try {
318
+ const data = yield dataSource.query(`SELECT * FROM "${tableName}" LIMIT 100`);
319
+ if (data.length === 0) {
320
+ const tabs = (0, server_html_1.$div)({
321
+ className: 'tabs',
322
+ children: [
323
+ (0, server_html_1.$div)({
324
+ className: 'tab active',
325
+ onclick: "switchTab('data')",
326
+ textContent: 'Data'
327
+ }),
328
+ (0, server_html_1.$div)({
329
+ className: 'tab',
330
+ onclick: "switchTab('structure')",
331
+ textContent: 'Structure'
332
+ })
333
+ ]
334
+ });
335
+ const dataContent = (0, server_html_1.$div)({
336
+ id: 'data-content',
337
+ className: 'tab-content active',
338
+ children: [
339
+ (0, server_html_1.$p)({
340
+ style: { padding: '2rem', textAlign: 'center', color: '#666' },
341
+ textContent: `No data found in table "${tableName}"`
342
+ })
343
+ ]
344
+ });
345
+ const structureContent = (0, server_html_1.$div)({
346
+ id: 'structure-content',
347
+ className: 'tab-content'
348
+ });
349
+ return tabs + dataContent + structureContent;
350
+ }
351
+ const columns = Object.keys(data[0]);
352
+ const headerRow = (0, server_html_1.$tr)({
353
+ children: columns.map(col => (0, server_html_1.$th)({ textContent: col }))
354
+ });
355
+ const rows = data.map(row => (0, server_html_1.$tr)({
356
+ children: columns.map(col => (0, server_html_1.$td)({
357
+ innerHTML: row[col] !== null ? String(row[col]) : '<em>NULL</em>'
358
+ }))
359
+ }));
360
+ const tabs = (0, server_html_1.$div)({
361
+ className: 'tabs',
362
+ children: [
363
+ (0, server_html_1.$div)({
364
+ className: 'tab active',
365
+ onclick: "switchTab('data')",
366
+ textContent: 'Data'
367
+ }),
368
+ (0, server_html_1.$div)({
369
+ className: 'tab',
370
+ onclick: "switchTab('structure')",
371
+ textContent: 'Structure'
372
+ })
373
+ ]
374
+ });
375
+ const dataContent = (0, server_html_1.$div)({
376
+ id: 'data-content',
377
+ className: 'tab-content active',
378
+ children: [
379
+ (0, server_html_1.$div)({
380
+ className: 'table-container',
381
+ children: [
382
+ (0, server_html_1.$table)({
383
+ children: [
384
+ (0, server_html_1.$thead)({ children: [headerRow] }),
385
+ (0, server_html_1.$tbody)({ children: rows })
386
+ ]
387
+ })
388
+ ]
389
+ })
390
+ ]
391
+ });
392
+ const structureContent = (0, server_html_1.$div)({
393
+ id: 'structure-content',
394
+ className: 'tab-content'
395
+ });
396
+ return tabs + dataContent + structureContent;
397
+ }
398
+ catch (error) {
399
+ return (0, server_html_1.$div)({
400
+ className: 'error',
401
+ textContent: `Error loading table data: ${error.message}`
402
+ });
403
+ }
404
+ });
405
+ }
406
+ function getTableStructure(dataSource, tableName) {
407
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
408
+ try {
409
+ const columns = yield dataSource.query(`
410
+ SELECT column_name, data_type, is_nullable, column_default
411
+ FROM information_schema.columns
412
+ WHERE table_name = $1
413
+ ORDER BY ordinal_position
414
+ `, [tableName]);
415
+ const headerRow = (0, server_html_1.$tr)({
416
+ children: [
417
+ (0, server_html_1.$th)({ textContent: 'Column' }),
418
+ (0, server_html_1.$th)({ textContent: 'Type' }),
419
+ (0, server_html_1.$th)({ textContent: 'Nullable' }),
420
+ (0, server_html_1.$th)({ textContent: 'Default' })
421
+ ]
422
+ });
423
+ const rows = columns.map(col => (0, server_html_1.$tr)({
424
+ children: [
425
+ (0, server_html_1.$td)({ textContent: col.column_name }),
426
+ (0, server_html_1.$td)({ textContent: col.data_type }),
427
+ (0, server_html_1.$td)({ textContent: col.is_nullable }),
428
+ (0, server_html_1.$td)({
429
+ innerHTML: col.column_default || '<em>NULL</em>'
430
+ })
431
+ ]
432
+ }));
433
+ return (0, server_html_1.$div)({
434
+ className: 'table-container',
435
+ children: [
436
+ (0, server_html_1.$table)({
437
+ children: [
438
+ (0, server_html_1.$thead)({ children: [headerRow] }),
439
+ (0, server_html_1.$tbody)({ children: rows })
440
+ ]
441
+ })
442
+ ]
443
+ });
444
+ }
445
+ catch (error) {
446
+ return (0, server_html_1.$div)({
447
+ className: 'error',
448
+ textContent: `Error loading table structure: ${error.message}`
449
+ });
450
+ }
451
+ });
452
+ }
453
+ function executeQuery(dataSource, query) {
454
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
455
+ try {
456
+ const result = yield dataSource.query(query);
457
+ if (!Array.isArray(result) || result.length === 0) {
458
+ return (0, server_html_1.$div)({
459
+ style: { padding: '2rem', textAlign: 'center', color: '#666' },
460
+ textContent: 'Query executed successfully. No results to display.'
461
+ });
462
+ }
463
+ const columns = Object.keys(result[0]);
464
+ const headerRow = (0, server_html_1.$tr)({
465
+ children: columns.map(col => (0, server_html_1.$th)({ textContent: col }))
466
+ });
467
+ const rows = result.map(row => (0, server_html_1.$tr)({
468
+ children: columns.map(col => (0, server_html_1.$td)({
469
+ innerHTML: row[col] !== null ? String(row[col]) : '<em>NULL</em>'
470
+ }))
471
+ }));
472
+ return (0, server_html_1.$div)({
473
+ className: 'table-container',
474
+ children: [
475
+ (0, server_html_1.$table)({
476
+ children: [
477
+ (0, server_html_1.$thead)({ children: [headerRow] }),
478
+ (0, server_html_1.$tbody)({ children: rows })
479
+ ]
480
+ })
481
+ ]
482
+ });
483
+ }
484
+ catch (error) {
485
+ return (0, server_html_1.$div)({
486
+ className: 'error',
487
+ textContent: `Query error: ${error.message}`
488
+ });
489
+ }
490
+ });
491
+ }
492
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../../../onix/src/executors/typeorm-db-client/executor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface ExecutorSchema {
2
+ envFile?: string;
3
+ host?: string;
4
+ port?: number;
5
+ username?: string;
6
+ password?: string;
7
+ database?: string;
8
+ type?: string;
9
+ ssl?: boolean;
10
+ }
@@ -0,0 +1,50 @@
1
+ {
2
+ "$schema": "https://json-schema.org/schema",
3
+ "version": 2,
4
+ "title": "TypeORM DB Client",
5
+ "description": "A database client UI for TypeORM that creates a web-based interface for database exploration",
6
+ "type": "object",
7
+ "properties": {
8
+ "envFile": {
9
+ "type": "string",
10
+ "description": "Path to the .env file to load environment variables from"
11
+ },
12
+ "host": {
13
+ "type": "string",
14
+ "description": "Database host (defaults to localhost or DB_HOST env var)",
15
+ "default": "localhost"
16
+ },
17
+ "port": {
18
+ "type": "number",
19
+ "description": "Database port (defaults to 5432 or DB_PORT env var)",
20
+ "default": 5432
21
+ },
22
+ "username": {
23
+ "type": "string",
24
+ "description": "Database username (defaults to postgres or DB_USERNAME/DB_USER env var)",
25
+ "default": "postgres"
26
+ },
27
+ "password": {
28
+ "type": "string",
29
+ "description": "Database password (defaults to empty or DB_PASSWORD env var)",
30
+ "default": ""
31
+ },
32
+ "database": {
33
+ "type": "string",
34
+ "description": "Database name (defaults to postgres or DB_DATABASE/DB_NAME env var)",
35
+ "default": "postgres"
36
+ },
37
+ "type": {
38
+ "type": "string",
39
+ "description": "Database type (defaults to postgres or DB_TYPE env var)",
40
+ "default": "postgres",
41
+ "enum": ["postgres", "mysql", "mariadb", "sqlite", "mssql", "oracle"]
42
+ },
43
+ "ssl": {
44
+ "type": "boolean",
45
+ "description": "Enable SSL connection (defaults to false or DB_SSL env var)",
46
+ "default": false
47
+ }
48
+ },
49
+ "required": []
50
+ }