@motherbase/cli 0.2.5 → 0.2.6
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/LICENSE +21 -0
- package/README.md +247 -247
- package/bin/motherbase.js +10 -10
- package/package.json +35 -26
- package/src/api.js +233 -241
- package/src/commands/_util.js +106 -93
- package/src/commands/backups.js +16 -16
- package/src/commands/branches.js +113 -113
- package/src/commands/completion.js +90 -90
- package/src/commands/config.js +47 -47
- package/src/commands/cron.js +65 -65
- package/src/commands/db-catalog.js +326 -326
- package/src/commands/db.js +103 -103
- package/src/commands/domains.js +124 -124
- package/src/commands/functions.js +304 -297
- package/src/commands/gen.js +172 -172
- package/src/commands/import.js +55 -55
- package/src/commands/index.js +85 -85
- package/src/commands/inspect.js +178 -178
- package/src/commands/keys.js +72 -72
- package/src/commands/link.js +35 -35
- package/src/commands/local.js +294 -273
- package/src/commands/login.js +39 -39
- package/src/commands/logout.js +16 -16
- package/src/commands/mcp.js +61 -61
- package/src/commands/migrate.js +207 -179
- package/src/commands/migration.js +108 -108
- package/src/commands/network.js +83 -83
- package/src/commands/orgs.js +40 -40
- package/src/commands/postgres-config.js +113 -113
- package/src/commands/projects.js +130 -130
- package/src/commands/queues.js +133 -133
- package/src/commands/realtime.js +35 -35
- package/src/commands/rls.js +176 -176
- package/src/commands/secrets.js +66 -66
- package/src/commands/signing.js +130 -130
- package/src/commands/snippets.js +44 -44
- package/src/commands/status.js +42 -42
- package/src/commands/storage.js +261 -261
- package/src/commands/test.js +9 -9
- package/src/commands/unlink.js +15 -15
- package/src/commands/users.js +142 -142
- package/src/commands/vault.js +82 -82
- package/src/commands/webhooks.js +62 -62
- package/src/commands/whoami.js +20 -20
- package/src/commands/wrappers.js +150 -150
- package/src/config.js +98 -98
- package/src/context.js +106 -102
- package/src/docs.js +68 -0
- package/src/edge-templates.js +194 -194
- package/src/format.js +92 -92
- package/src/inspect/csv.js +22 -22
- package/src/inspect/queries.js +562 -562
- package/src/main.js +224 -194
- package/src/mcp/platform-tools.js +233 -233
- package/src/mcp/protocol.js +152 -149
- package/src/mcp/storage-tools.js +93 -93
- package/src/mcp/tools.js +478 -478
- package/src/migration/commands.js +375 -375
- package/src/migration/files.js +245 -245
- package/src/prompt.js +91 -91
- package/src/storage/remote.js +62 -62
- package/src/ui.js +111 -111
package/src/commands/config.js
CHANGED
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const api = require('../api');
|
|
4
|
-
const { output, requireArg, parseKeyValues } = require('./_util');
|
|
5
|
-
|
|
6
|
-
const subcommands = {
|
|
7
|
-
list: {
|
|
8
|
-
summary: 'List setting groups',
|
|
9
|
-
usage: 'motherbase config list',
|
|
10
|
-
async run(ctx) {
|
|
11
|
-
const data = await api.adminRequest(ctx, 'GET', '/settings');
|
|
12
|
-
const groups = (data && data.groups) || [];
|
|
13
|
-
output(ctx, data, (_d, ui) =>
|
|
14
|
-
ui.table(groups, [
|
|
15
|
-
{ key: 'key', label: 'GROUP' },
|
|
16
|
-
{ key: 'label', label: 'LABEL' },
|
|
17
|
-
{ key: 'source', label: 'SOURCE' },
|
|
18
|
-
]),
|
|
19
|
-
);
|
|
20
|
-
},
|
|
21
|
-
},
|
|
22
|
-
get: {
|
|
23
|
-
summary: 'Get a settings group',
|
|
24
|
-
usage: 'motherbase config get <group>',
|
|
25
|
-
async run(ctx, args) {
|
|
26
|
-
const group = requireArg(args[0], 'group');
|
|
27
|
-
const data = await api.adminRequest(ctx, 'GET', `/settings/${group}`);
|
|
28
|
-
output(ctx, data, (d, ui) => ui.keyValue(d || {}));
|
|
29
|
-
},
|
|
30
|
-
},
|
|
31
|
-
set: {
|
|
32
|
-
summary: 'Set values in a settings group',
|
|
33
|
-
usage: 'motherbase config set <group> key=value [key2=value2 ...]',
|
|
34
|
-
async run(ctx, args) {
|
|
35
|
-
const group = requireArg(args[0], 'group');
|
|
36
|
-
const body = parseKeyValues(args.slice(1));
|
|
37
|
-
const data = await api.adminRequest(ctx, 'PUT', `/settings/${group}`, { body });
|
|
38
|
-
output(ctx, data, (d, ui) => ui.success(`Saved settings for ${group}`));
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
module.exports = {
|
|
44
|
-
summary: 'Project settings groups',
|
|
45
|
-
usage: 'motherbase config <list|get|set> ...',
|
|
46
|
-
subcommands,
|
|
47
|
-
};
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const api = require('../api');
|
|
4
|
+
const { output, requireArg, parseKeyValues } = require('./_util');
|
|
5
|
+
|
|
6
|
+
const subcommands = {
|
|
7
|
+
list: {
|
|
8
|
+
summary: 'List setting groups',
|
|
9
|
+
usage: 'motherbase config list',
|
|
10
|
+
async run(ctx) {
|
|
11
|
+
const data = await api.adminRequest(ctx, 'GET', '/settings');
|
|
12
|
+
const groups = (data && data.groups) || [];
|
|
13
|
+
output(ctx, data, (_d, ui) =>
|
|
14
|
+
ui.table(groups, [
|
|
15
|
+
{ key: 'key', label: 'GROUP' },
|
|
16
|
+
{ key: 'label', label: 'LABEL' },
|
|
17
|
+
{ key: 'source', label: 'SOURCE' },
|
|
18
|
+
]),
|
|
19
|
+
);
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
get: {
|
|
23
|
+
summary: 'Get a settings group',
|
|
24
|
+
usage: 'motherbase config get <group>',
|
|
25
|
+
async run(ctx, args) {
|
|
26
|
+
const group = requireArg(args[0], 'group');
|
|
27
|
+
const data = await api.adminRequest(ctx, 'GET', `/settings/${group}`);
|
|
28
|
+
output(ctx, data, (d, ui) => ui.keyValue(d || {}));
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
set: {
|
|
32
|
+
summary: 'Set values in a settings group',
|
|
33
|
+
usage: 'motherbase config set <group> key=value [key2=value2 ...]',
|
|
34
|
+
async run(ctx, args) {
|
|
35
|
+
const group = requireArg(args[0], 'group');
|
|
36
|
+
const body = parseKeyValues(args.slice(1));
|
|
37
|
+
const data = await api.adminRequest(ctx, 'PUT', `/settings/${group}`, { body });
|
|
38
|
+
output(ctx, data, (d, ui) => ui.success(`Saved settings for ${group}`));
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
module.exports = {
|
|
44
|
+
summary: 'Project settings groups',
|
|
45
|
+
usage: 'motherbase config <list|get|set> ...',
|
|
46
|
+
subcommands,
|
|
47
|
+
};
|
package/src/commands/cron.js
CHANGED
|
@@ -1,65 +1,65 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const api = require('../api');
|
|
4
|
-
const { output, requireArg } = require('./_util');
|
|
5
|
-
const { CliError } = require('../context');
|
|
6
|
-
|
|
7
|
-
const subcommands = {
|
|
8
|
-
list: {
|
|
9
|
-
summary: 'List pg_cron jobs (and app jobs with --app)',
|
|
10
|
-
usage: 'motherbase cron list [--app]',
|
|
11
|
-
async run(ctx, args, flags) {
|
|
12
|
-
if (flags.app) {
|
|
13
|
-
const data = await api.adminRequest(ctx, 'GET', '/cron/app/jobs');
|
|
14
|
-
const jobs = (data && data.jobs) || [];
|
|
15
|
-
output(ctx, data, (_d, ui) => ui.table(jobs, [{ key: 'name', label: 'NAME' }, { key: 'schedule', label: 'SCHEDULE' }]));
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
const data = await api.adminRequest(ctx, 'GET', '/cron/pg/jobs');
|
|
19
|
-
const jobs = Array.isArray(data) ? data : (data && data.jobs) || [];
|
|
20
|
-
output(ctx, data, (_d, ui) =>
|
|
21
|
-
ui.table(jobs, [
|
|
22
|
-
{ key: 'jobid', label: 'ID' },
|
|
23
|
-
{ key: 'jobname', label: 'NAME' },
|
|
24
|
-
{ key: 'schedule', label: 'SCHEDULE' },
|
|
25
|
-
{ key: 'active', label: 'ACTIVE' },
|
|
26
|
-
]),
|
|
27
|
-
);
|
|
28
|
-
},
|
|
29
|
-
},
|
|
30
|
-
create: {
|
|
31
|
-
summary: 'Create a pg_cron job',
|
|
32
|
-
usage: 'motherbase cron create --name <n> --schedule "<cron>" --command "<sql>"',
|
|
33
|
-
async run(ctx, args, flags) {
|
|
34
|
-
if (!flags.name || !flags.schedule || !flags.command) throw new CliError('--name, --schedule and --command are required');
|
|
35
|
-
const body = { name: flags.name, schedule: flags.schedule, command: flags.command };
|
|
36
|
-
const data = await api.adminRequest(ctx, 'POST', '/cron/pg/jobs', { body });
|
|
37
|
-
output(ctx, data, (d, ui) => ui.success(`Created cron job ${flags.name}`));
|
|
38
|
-
},
|
|
39
|
-
},
|
|
40
|
-
delete: {
|
|
41
|
-
summary: 'Delete a pg_cron job by numeric id',
|
|
42
|
-
usage: 'motherbase cron delete <id>',
|
|
43
|
-
async run(ctx, args) {
|
|
44
|
-
const id = requireArg(args[0], 'id');
|
|
45
|
-
const data = await api.adminRequest(ctx, 'DELETE', `/cron/pg/jobs/${id}`);
|
|
46
|
-
output(ctx, data, (d, ui) => ui.success(`Deleted cron job ${id}`));
|
|
47
|
-
},
|
|
48
|
-
},
|
|
49
|
-
toggle: {
|
|
50
|
-
summary: 'Enable/disable a pg_cron job',
|
|
51
|
-
usage: 'motherbase cron toggle <id> --active <true|false>',
|
|
52
|
-
async run(ctx, args, flags) {
|
|
53
|
-
const id = requireArg(args[0], 'id');
|
|
54
|
-
const active = flags.active === undefined ? true : flags.active === 'true' || flags.active === true;
|
|
55
|
-
const data = await api.adminRequest(ctx, 'PATCH', `/cron/pg/jobs/${id}`, { body: { active } });
|
|
56
|
-
output(ctx, data, (d, ui) => ui.success(`Cron job ${id} active=${active}`));
|
|
57
|
-
},
|
|
58
|
-
},
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
module.exports = {
|
|
62
|
-
summary: 'Scheduled jobs (pg_cron)',
|
|
63
|
-
usage: 'motherbase cron <list|create|delete|toggle> ...',
|
|
64
|
-
subcommands,
|
|
65
|
-
};
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const api = require('../api');
|
|
4
|
+
const { output, requireArg } = require('./_util');
|
|
5
|
+
const { CliError } = require('../context');
|
|
6
|
+
|
|
7
|
+
const subcommands = {
|
|
8
|
+
list: {
|
|
9
|
+
summary: 'List pg_cron jobs (and app jobs with --app)',
|
|
10
|
+
usage: 'motherbase cron list [--app]',
|
|
11
|
+
async run(ctx, args, flags) {
|
|
12
|
+
if (flags.app) {
|
|
13
|
+
const data = await api.adminRequest(ctx, 'GET', '/cron/app/jobs');
|
|
14
|
+
const jobs = (data && data.jobs) || [];
|
|
15
|
+
output(ctx, data, (_d, ui) => ui.table(jobs, [{ key: 'name', label: 'NAME' }, { key: 'schedule', label: 'SCHEDULE' }]));
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
const data = await api.adminRequest(ctx, 'GET', '/cron/pg/jobs');
|
|
19
|
+
const jobs = Array.isArray(data) ? data : (data && data.jobs) || [];
|
|
20
|
+
output(ctx, data, (_d, ui) =>
|
|
21
|
+
ui.table(jobs, [
|
|
22
|
+
{ key: 'jobid', label: 'ID' },
|
|
23
|
+
{ key: 'jobname', label: 'NAME' },
|
|
24
|
+
{ key: 'schedule', label: 'SCHEDULE' },
|
|
25
|
+
{ key: 'active', label: 'ACTIVE' },
|
|
26
|
+
]),
|
|
27
|
+
);
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
create: {
|
|
31
|
+
summary: 'Create a pg_cron job',
|
|
32
|
+
usage: 'motherbase cron create --name <n> --schedule "<cron>" --command "<sql>"',
|
|
33
|
+
async run(ctx, args, flags) {
|
|
34
|
+
if (!flags.name || !flags.schedule || !flags.command) throw new CliError('--name, --schedule and --command are required');
|
|
35
|
+
const body = { name: flags.name, schedule: flags.schedule, command: flags.command };
|
|
36
|
+
const data = await api.adminRequest(ctx, 'POST', '/cron/pg/jobs', { body });
|
|
37
|
+
output(ctx, data, (d, ui) => ui.success(`Created cron job ${flags.name}`));
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
delete: {
|
|
41
|
+
summary: 'Delete a pg_cron job by numeric id',
|
|
42
|
+
usage: 'motherbase cron delete <id>',
|
|
43
|
+
async run(ctx, args) {
|
|
44
|
+
const id = requireArg(args[0], 'id');
|
|
45
|
+
const data = await api.adminRequest(ctx, 'DELETE', `/cron/pg/jobs/${id}`);
|
|
46
|
+
output(ctx, data, (d, ui) => ui.success(`Deleted cron job ${id}`));
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
toggle: {
|
|
50
|
+
summary: 'Enable/disable a pg_cron job',
|
|
51
|
+
usage: 'motherbase cron toggle <id> --active <true|false>',
|
|
52
|
+
async run(ctx, args, flags) {
|
|
53
|
+
const id = requireArg(args[0], 'id');
|
|
54
|
+
const active = flags.active === undefined ? true : flags.active === 'true' || flags.active === true;
|
|
55
|
+
const data = await api.adminRequest(ctx, 'PATCH', `/cron/pg/jobs/${id}`, { body: { active } });
|
|
56
|
+
output(ctx, data, (d, ui) => ui.success(`Cron job ${id} active=${active}`));
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
module.exports = {
|
|
62
|
+
summary: 'Scheduled jobs (pg_cron)',
|
|
63
|
+
usage: 'motherbase cron <list|create|delete|toggle> ...',
|
|
64
|
+
subcommands,
|
|
65
|
+
};
|