@butterbase/cli 0.2.2 → 0.3.3

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 (72) hide show
  1. package/README.md +118 -0
  2. package/dist/bin/butterbase.js +367 -1
  3. package/dist/bin/butterbase.js.map +1 -1
  4. package/dist/src/commands/ai.d.ts +36 -0
  5. package/dist/src/commands/ai.d.ts.map +1 -0
  6. package/dist/src/commands/ai.js +131 -0
  7. package/dist/src/commands/ai.js.map +1 -0
  8. package/dist/src/commands/app-billing.d.ts +62 -0
  9. package/dist/src/commands/app-billing.d.ts.map +1 -0
  10. package/dist/src/commands/app-billing.js +220 -0
  11. package/dist/src/commands/app-billing.js.map +1 -0
  12. package/dist/src/commands/app-config.d.ts +37 -0
  13. package/dist/src/commands/app-config.d.ts.map +1 -0
  14. package/dist/src/commands/app-config.js +152 -0
  15. package/dist/src/commands/app-config.js.map +1 -0
  16. package/dist/src/commands/audit.d.ts +15 -0
  17. package/dist/src/commands/audit.d.ts.map +1 -0
  18. package/dist/src/commands/audit.js +49 -0
  19. package/dist/src/commands/audit.js.map +1 -0
  20. package/dist/src/commands/do.js +1 -1
  21. package/dist/src/commands/do.js.map +1 -1
  22. package/dist/src/commands/functions.d.ts +4 -0
  23. package/dist/src/commands/functions.d.ts.map +1 -1
  24. package/dist/src/commands/functions.js +28 -2
  25. package/dist/src/commands/functions.js.map +1 -1
  26. package/dist/src/commands/integrations.d.ts +2 -0
  27. package/dist/src/commands/integrations.d.ts.map +1 -1
  28. package/dist/src/commands/integrations.js +2 -2
  29. package/dist/src/commands/integrations.js.map +1 -1
  30. package/dist/src/commands/keys.d.ts +1 -0
  31. package/dist/src/commands/keys.d.ts.map +1 -1
  32. package/dist/src/commands/keys.js +1 -1
  33. package/dist/src/commands/keys.js.map +1 -1
  34. package/dist/src/commands/kv.d.ts +56 -0
  35. package/dist/src/commands/kv.d.ts.map +1 -0
  36. package/dist/src/commands/kv.js +189 -0
  37. package/dist/src/commands/kv.js.map +1 -0
  38. package/dist/src/commands/move.d.ts +25 -0
  39. package/dist/src/commands/move.d.ts.map +1 -0
  40. package/dist/src/commands/move.js +157 -0
  41. package/dist/src/commands/move.js.map +1 -0
  42. package/dist/src/commands/oauth.d.ts +33 -0
  43. package/dist/src/commands/oauth.d.ts.map +1 -0
  44. package/dist/src/commands/oauth.js +122 -0
  45. package/dist/src/commands/oauth.js.map +1 -0
  46. package/dist/src/commands/regions.d.ts +4 -0
  47. package/dist/src/commands/regions.d.ts.map +1 -0
  48. package/dist/src/commands/regions.js +16 -0
  49. package/dist/src/commands/regions.js.map +1 -0
  50. package/dist/src/commands/rls.d.ts +1 -0
  51. package/dist/src/commands/rls.d.ts.map +1 -1
  52. package/dist/src/commands/rls.js +1 -0
  53. package/dist/src/commands/rls.js.map +1 -1
  54. package/dist/src/lib/api-client.d.ts +46 -3
  55. package/dist/src/lib/api-client.d.ts.map +1 -1
  56. package/dist/src/lib/api-client.js +167 -9
  57. package/dist/src/lib/api-client.js.map +1 -1
  58. package/dist/src/lib/errors.d.ts +8 -0
  59. package/dist/src/lib/errors.d.ts.map +1 -0
  60. package/dist/src/lib/errors.js +24 -0
  61. package/dist/src/lib/errors.js.map +1 -0
  62. package/dist/src/lib/kv-api.d.ts +15 -0
  63. package/dist/src/lib/kv-api.d.ts.map +1 -0
  64. package/dist/src/lib/kv-api.js +14 -0
  65. package/dist/src/lib/kv-api.js.map +1 -0
  66. package/dist/src/lib/load-kv-config.d.ts +14 -0
  67. package/dist/src/lib/load-kv-config.d.ts.map +1 -0
  68. package/dist/src/lib/load-kv-config.js +27 -0
  69. package/dist/src/lib/load-kv-config.js.map +1 -0
  70. package/dist/tsconfig.tsbuildinfo +1 -0
  71. package/package.json +16 -4
  72. package/templates/react-vite/.mcp.json +10 -10
@@ -0,0 +1,56 @@
1
+ import { type KvExposeRule } from '../lib/load-kv-config.js';
2
+ export declare function kvGetCommand(key: string, opts: {
3
+ app?: string;
4
+ raw?: boolean;
5
+ }): Promise<void>;
6
+ export declare function kvSetCommand(key: string, value: string, opts: {
7
+ app?: string;
8
+ ttl?: string;
9
+ ephemeral?: boolean;
10
+ }): Promise<void>;
11
+ export declare function kvDelCommand(key: string, opts: {
12
+ app?: string;
13
+ }): Promise<void>;
14
+ export declare function kvLsCommand(opts: {
15
+ app?: string;
16
+ prefix?: string;
17
+ limit?: string;
18
+ }): Promise<void>;
19
+ export declare function kvStatsCommand(opts: {
20
+ app?: string;
21
+ }): Promise<void>;
22
+ export declare function kvFlushCommand(opts: {
23
+ app?: string;
24
+ confirm?: boolean;
25
+ includeConfig?: boolean;
26
+ }): Promise<void>;
27
+ export declare function kvRulesCommand(opts: {
28
+ app?: string;
29
+ }): Promise<void>;
30
+ export declare function kvExposeCommand(pattern: string, opts: {
31
+ app?: string;
32
+ read: string;
33
+ write: string;
34
+ }): Promise<void>;
35
+ export declare function kvUnexposeCommand(pattern: string, opts: {
36
+ app?: string;
37
+ }): Promise<void>;
38
+ export interface KvDiff {
39
+ add: KvExposeRule[];
40
+ remove: KvExposeRule[];
41
+ change: Array<KvExposeRule & {
42
+ from: KvExposeRule;
43
+ }>;
44
+ }
45
+ /**
46
+ * Pure function: compute the diff between live rules and declared rules.
47
+ * Keyed by pattern.
48
+ */
49
+ export declare function computeDiff(live: KvExposeRule[], declared: KvExposeRule[]): KvDiff;
50
+ export declare function kvApplyCommand(opts: {
51
+ app?: string;
52
+ file: string;
53
+ dryRun?: boolean;
54
+ yes?: boolean;
55
+ }): Promise<void>;
56
+ //# sourceMappingURL=kv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kv.d.ts","sourceRoot":"","sources":["../../../src/commands/kv.ts"],"names":[],"mappings":"AAKA,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AA4B3E,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,iBAIpF;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,iBAKvH;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,iBAIrE;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,iBAMxF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,iBAG1D;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,iBAUtG;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,iBAK1D;AAED,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,iBAIzG;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,iBAI9E;AAMD,MAAM,WAAW,MAAM;IACrB,GAAG,EAAE,YAAY,EAAE,CAAC;IACpB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,MAAM,EAAE,KAAK,CAAC,YAAY,GAAG;QAAE,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC,CAAC;CACtD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,CAwBlF;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,iBA2EA"}
@@ -0,0 +1,189 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import prompts from 'prompts';
4
+ import { kvApi } from '../lib/kv-api.js';
5
+ import { getCurrentAppId } from '../lib/config.js';
6
+ import { loadKvConfig } from '../lib/load-kv-config.js';
7
+ async function requireAppId(opt) {
8
+ if (opt)
9
+ return opt;
10
+ const cur = await getCurrentAppId();
11
+ if (!cur) {
12
+ console.log(chalk.red('✗ no app — use `butterbase apps use <id>` or --app'));
13
+ process.exit(1);
14
+ return undefined;
15
+ }
16
+ return cur;
17
+ }
18
+ function parseValue(raw) {
19
+ try {
20
+ return JSON.parse(raw);
21
+ }
22
+ catch {
23
+ return raw;
24
+ }
25
+ }
26
+ function parseTtl(t) {
27
+ if (t === undefined)
28
+ return undefined;
29
+ if (t === 'null' || t === 'forever')
30
+ return null;
31
+ // Support shorthand like 30d / 1h / 60s
32
+ const m = /^(\d+)\s*([smhd])?$/.exec(t.trim());
33
+ if (!m) {
34
+ console.log(chalk.red(`✗ bad --ttl: ${t}`));
35
+ process.exit(1);
36
+ }
37
+ const n = Number(m[1]);
38
+ const mult = { s: 1, m: 60, h: 3600, d: 86400 }[m[2] ?? 's'] ?? 1;
39
+ return n * mult;
40
+ }
41
+ export async function kvGetCommand(key, opts) {
42
+ const appId = await requireAppId(opts.app);
43
+ const res = await kvApi.get(appId, key, opts.raw);
44
+ console.log(typeof res === 'string' ? res : JSON.stringify(res, null, 2));
45
+ }
46
+ export async function kvSetCommand(key, value, opts) {
47
+ const appId = await requireAppId(opts.app);
48
+ const ttl = parseTtl(opts.ttl);
49
+ await kvApi.set(appId, key, parseValue(value), { ttl, ephemeral: opts.ephemeral });
50
+ console.log(chalk.green(`✓ set ${key}`));
51
+ }
52
+ export async function kvDelCommand(key, opts) {
53
+ const appId = await requireAppId(opts.app);
54
+ const res = await kvApi.del(appId, key);
55
+ console.log(chalk.green(`✓ del — ${JSON.stringify(res)}`));
56
+ }
57
+ export async function kvLsCommand(opts) {
58
+ const appId = await requireAppId(opts.app);
59
+ const limit = Number(opts.limit ?? '100');
60
+ const res = await kvApi.scan(appId, opts.prefix ?? '', limit);
61
+ for (const k of res.keys)
62
+ console.log(k);
63
+ if (res.cursor !== '0')
64
+ console.log(chalk.gray(`-- next cursor: ${res.cursor}`));
65
+ }
66
+ export async function kvStatsCommand(opts) {
67
+ const appId = await requireAppId(opts.app);
68
+ console.log(JSON.stringify(await kvApi.stats(appId), null, 2));
69
+ }
70
+ export async function kvFlushCommand(opts) {
71
+ if (!opts.confirm) {
72
+ console.log(chalk.red('✗ refusing to flush without --confirm'));
73
+ process.exit(1);
74
+ return;
75
+ }
76
+ const appId = await requireAppId(opts.app);
77
+ const spinner = ora('Flushing KV…').start();
78
+ const res = await kvApi.flush(appId, opts.includeConfig);
79
+ spinner.succeed(`Flushed (${JSON.stringify(res)})`);
80
+ }
81
+ export async function kvRulesCommand(opts) {
82
+ const appId = await requireAppId(opts.app);
83
+ const { rules } = await kvApi.listRules(appId);
84
+ if (rules.length === 0) {
85
+ console.log(chalk.gray('(no rules)'));
86
+ return;
87
+ }
88
+ for (const r of rules)
89
+ console.log(`${r.pattern.padEnd(40)} read=${r.read} write=${r.write}`);
90
+ }
91
+ export async function kvExposeCommand(pattern, opts) {
92
+ const appId = await requireAppId(opts.app);
93
+ await kvApi.expose(appId, pattern, opts.read, opts.write);
94
+ console.log(chalk.green(`✓ exposed ${pattern}`));
95
+ }
96
+ export async function kvUnexposeCommand(pattern, opts) {
97
+ const appId = await requireAppId(opts.app);
98
+ await kvApi.unexpose(appId, pattern);
99
+ console.log(chalk.green(`✓ unexposed ${pattern}`));
100
+ }
101
+ /**
102
+ * Pure function: compute the diff between live rules and declared rules.
103
+ * Keyed by pattern.
104
+ */
105
+ export function computeDiff(live, declared) {
106
+ const liveMap = new Map(live.map((r) => [r.pattern, r]));
107
+ const declaredMap = new Map(declared.map((r) => [r.pattern, r]));
108
+ const add = [];
109
+ const remove = [];
110
+ const change = [];
111
+ for (const [pattern, decl] of declaredMap) {
112
+ const liveRule = liveMap.get(pattern);
113
+ if (!liveRule) {
114
+ add.push(decl);
115
+ }
116
+ else if (liveRule.read !== decl.read || liveRule.write !== decl.write) {
117
+ change.push({ ...decl, from: liveRule });
118
+ }
119
+ }
120
+ for (const [pattern, liveRule] of liveMap) {
121
+ if (!declaredMap.has(pattern)) {
122
+ remove.push(liveRule);
123
+ }
124
+ }
125
+ return { add, remove, change };
126
+ }
127
+ export async function kvApplyCommand(opts) {
128
+ const appId = await requireAppId(opts.app);
129
+ // 1. Load config
130
+ const config = await loadKvConfig(opts.file);
131
+ const declared = config.expose;
132
+ // 2. Fetch live rules
133
+ const { rules: live } = await kvApi.listRules(appId);
134
+ // 3. Compute diff
135
+ const diff = computeDiff(live, declared);
136
+ const hasChanges = diff.add.length + diff.remove.length + diff.change.length > 0;
137
+ // 4. Print preview
138
+ if (!hasChanges) {
139
+ console.log(chalk.gray('No changes — already up-to-date.'));
140
+ return;
141
+ }
142
+ for (const r of diff.remove) {
143
+ console.log(chalk.red(` - ${r.pattern} read=${r.read} write=${r.write}`));
144
+ }
145
+ for (const r of diff.change) {
146
+ console.log(chalk.yellow(` ~ ${r.pattern} read=${r.from.read}->${r.read} write=${r.from.write}->${r.write}`));
147
+ }
148
+ for (const r of diff.add) {
149
+ console.log(chalk.green(` + ${r.pattern} read=${r.read} write=${r.write}`));
150
+ }
151
+ // 5. Dry-run stops here
152
+ if (opts.dryRun) {
153
+ console.log(chalk.gray('\n(dry-run — no changes applied)'));
154
+ return;
155
+ }
156
+ // 6. Confirm unless --yes
157
+ if (!opts.yes) {
158
+ const { confirmed } = await prompts({
159
+ type: 'confirm',
160
+ name: 'confirmed',
161
+ message: 'Apply these changes?',
162
+ initial: false,
163
+ });
164
+ if (!confirmed) {
165
+ console.log(chalk.gray('Aborted.'));
166
+ return;
167
+ }
168
+ }
169
+ // 7. Apply: removes first, then changes (unexpose→expose), then pure adds
170
+ const spinner = ora('Applying…').start();
171
+ try {
172
+ for (const r of diff.remove) {
173
+ await kvApi.unexpose(appId, r.pattern);
174
+ }
175
+ // For changed rules: delete first (gateway rejects PUT on existing pattern with different read/write)
176
+ for (const r of diff.change) {
177
+ await kvApi.unexpose(appId, r.pattern);
178
+ }
179
+ for (const r of [...diff.add, ...diff.change]) {
180
+ await kvApi.expose(appId, r.pattern, r.read, r.write);
181
+ }
182
+ spinner.succeed(`Applied: ${diff.remove.length} removed, ${diff.add.length} added, ${diff.change.length} changed.`);
183
+ }
184
+ catch (err) {
185
+ spinner.fail('Apply failed');
186
+ throw err;
187
+ }
188
+ }
189
+ //# sourceMappingURL=kv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kv.js","sourceRoot":"","sources":["../../../src/commands/kv.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAqB,MAAM,0BAA0B,CAAC;AAE3E,KAAK,UAAU,YAAY,CAAC,GAAY;IACtC,IAAI,GAAG;QAAE,OAAO,GAAG,CAAC;IACpB,MAAM,GAAG,GAAG,MAAM,eAAe,EAAE,CAAC;IACpC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO,SAA8B,CAAC;IACxC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,GAAG,CAAC;IAAC,CAAC;AACvD,CAAC;AAED,SAAS,QAAQ,CAAC,CAAqB;IACrC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IACtC,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IACjD,wCAAwC;IACxC,MAAM,CAAC,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/C,IAAI,CAAC,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IACzE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,IAAI,GAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9F,OAAO,CAAC,GAAG,IAAI,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,IAAqC;IACnF,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,KAAa,EAAE,IAAyD;IACtH,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW,EAAE,IAAsB;IACpE,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAuD;IACvF,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,KAAK,CAAuC,CAAC;IACpG,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACnF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAsB;IACzD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAkE;IACrG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,CAAC;IAC5C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACzD,OAAO,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAsB;IACzD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,CAAkE,CAAC;IAChH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAC1E,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;AAClG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAe,EAAE,IAAmD;IACxG,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAe,EAAE,IAAsB;IAC7E,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC,CAAC;AACrD,CAAC;AAYD;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,IAAoB,EAAE,QAAwB;IACxE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAEjE,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,MAAM,MAAM,GAAiD,EAAE,CAAC;IAEhE,KAAK,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;aAAM,IAAI,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACxE,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,OAAO,EAAE,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAKpC;IACC,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE3C,iBAAiB;IACjB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC;IAE/B,sBAAsB;IACtB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,KAAK,CAA8B,CAAC;IAElF,kBAAkB;IAClB,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAEzC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAEjF,mBAAmB;IACnB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC/E,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE,CACtF,CACF,CAAC;IACJ,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,UAAU,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,wBAAwB;IACxB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC5D,OAAO;IACT,CAAC;IAED,0BAA0B;IAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,OAAO,CAAC;YAClC,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,sBAAsB;YAC/B,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YACpC,OAAO;QACT,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC;IACzC,IAAI,CAAC;QACH,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QACD,sGAAsG;QACtG,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,MAAM,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,OAAO,CACb,YAAY,IAAI,CAAC,MAAM,CAAC,MAAM,aAAa,IAAI,CAAC,GAAG,CAAC,MAAM,WAAW,IAAI,CAAC,MAAM,CAAC,MAAM,WAAW,CACnG,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC7B,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,25 @@
1
+ export declare function moveCommand(appId: string | undefined, destRegion: string, options: {
2
+ app?: string;
3
+ follow?: boolean;
4
+ json?: boolean;
5
+ }): Promise<void>;
6
+ export declare function migrationStatusCommand(appId: string, migrationId: string, options: {
7
+ json?: boolean;
8
+ }): Promise<void>;
9
+ export declare function migrationActiveCommand(appId: string | undefined, options: {
10
+ app?: string;
11
+ json?: boolean;
12
+ }): Promise<void>;
13
+ export declare function migrationAbortCommand(appId: string, migrationId: string, options: {
14
+ json?: boolean;
15
+ }): Promise<void>;
16
+ export declare function migrationReverseCommand(appId: string, migrationId: string, options: {
17
+ json?: boolean;
18
+ }): Promise<void>;
19
+ export declare function replicasListCommand(options: {
20
+ json?: boolean;
21
+ }): Promise<void>;
22
+ export declare function replicaTeardownCommand(migrationId: string, options: {
23
+ json?: boolean;
24
+ }): Promise<void>;
25
+ //# sourceMappingURL=move.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move.d.ts","sourceRoot":"","sources":["../../../src/commands/move.ts"],"names":[],"mappings":"AAmBA,wBAAsB,WAAW,CAC/B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,iBA+C5D;AAED,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,iBAQ3G;AAED,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,iBAchH;AAED,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,iBAW1G;AAED,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,iBAW5G;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,iBAgBpE;AAED,wBAAsB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,iBAW5F"}
@@ -0,0 +1,157 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { moveApp, getMigration, getActiveMigration, abortMigration, reverseMigration, listSourceReplicas, tearDownSourceReplica, listRegions, } from '../lib/api-client.js';
4
+ import { getCurrentAppId } from '../lib/config.js';
5
+ async function requireAppId(appId) {
6
+ if (appId)
7
+ return appId;
8
+ const current = await getCurrentAppId();
9
+ if (!current) {
10
+ console.log(chalk.red('No app specified and no current app set'));
11
+ console.log(chalk.gray('Use: butterbase apps use <app-id>'));
12
+ process.exit(1);
13
+ }
14
+ return current;
15
+ }
16
+ export async function moveCommand(appId, destRegion, options) {
17
+ const resolvedApp = await requireAppId(appId ?? options.app);
18
+ // Validate region client-side
19
+ try {
20
+ const reg = await listRegions();
21
+ if (!reg.regions?.includes(destRegion)) {
22
+ console.log(chalk.red(`Unknown region '${destRegion}'. Valid: ${(reg.regions ?? []).join(', ')}`));
23
+ process.exit(1);
24
+ }
25
+ }
26
+ catch (e) {
27
+ console.log(chalk.yellow(`Could not validate region (proceeding anyway): ${e.message}`));
28
+ }
29
+ const spinner = ora(`Starting migration to ${destRegion}...`).start();
30
+ let migrationId;
31
+ try {
32
+ const r = await moveApp(resolvedApp, destRegion);
33
+ spinner.succeed(`Migration started: ${r.migration_id} (${r.status})`);
34
+ if (options.json)
35
+ console.log(JSON.stringify(r, null, 2));
36
+ migrationId = r.migration_id;
37
+ }
38
+ catch (e) {
39
+ spinner.fail('Move failed');
40
+ console.error(chalk.red(e.message));
41
+ process.exit(1);
42
+ }
43
+ if (!options.follow)
44
+ return;
45
+ const TERMINAL = new Set(['completed', 'aborted', 'failed']);
46
+ while (true) {
47
+ await new Promise((res) => setTimeout(res, 3000));
48
+ try {
49
+ const s = await getMigration(resolvedApp, migrationId);
50
+ process.stdout.write(`\r[${s.current_step}] `);
51
+ if (TERMINAL.has(s.current_step)) {
52
+ process.stdout.write('\n');
53
+ if (s.current_step === 'completed') {
54
+ console.log(chalk.green(`✓ Migration complete (source replica retained — teardown with: butterbase apps replicas teardown ${migrationId})`));
55
+ }
56
+ else {
57
+ console.log(chalk.red(`✗ Migration ${s.current_step}${s.last_error ? `: ${s.last_error}` : ''}`));
58
+ }
59
+ break;
60
+ }
61
+ }
62
+ catch (e) {
63
+ process.stdout.write('\n');
64
+ console.error(chalk.red(e.message));
65
+ break;
66
+ }
67
+ }
68
+ }
69
+ export async function migrationStatusCommand(appId, migrationId, options) {
70
+ try {
71
+ const r = await getMigration(appId, migrationId);
72
+ console.log(options.json ? JSON.stringify(r, null, 2) : r);
73
+ }
74
+ catch (e) {
75
+ console.error(chalk.red(e.message));
76
+ process.exit(1);
77
+ }
78
+ }
79
+ export async function migrationActiveCommand(appId, options) {
80
+ const resolvedApp = await requireAppId(appId ?? options.app);
81
+ try {
82
+ const r = await getActiveMigration(resolvedApp);
83
+ if (options.json)
84
+ return console.log(JSON.stringify(r, null, 2));
85
+ if (!r.migration) {
86
+ console.log(chalk.gray('No active migration.'));
87
+ return;
88
+ }
89
+ console.log(`${r.migration.id} step=${r.migration.current_step} ${r.migration.source_region}→${r.migration.dest_region}`);
90
+ }
91
+ catch (e) {
92
+ console.error(chalk.red(e.message));
93
+ process.exit(1);
94
+ }
95
+ }
96
+ export async function migrationAbortCommand(appId, migrationId, options) {
97
+ const spinner = ora('Aborting migration...').start();
98
+ try {
99
+ const r = await abortMigration(appId, migrationId);
100
+ spinner.succeed('Abort requested');
101
+ if (options.json)
102
+ console.log(JSON.stringify(r, null, 2));
103
+ }
104
+ catch (e) {
105
+ spinner.fail('Abort failed');
106
+ console.error(chalk.red(e.message));
107
+ process.exit(1);
108
+ }
109
+ }
110
+ export async function migrationReverseCommand(appId, migrationId, options) {
111
+ const spinner = ora('Reversing migration...').start();
112
+ try {
113
+ const r = await reverseMigration(appId, migrationId);
114
+ spinner.succeed('Reverse migration enqueued');
115
+ if (options.json)
116
+ console.log(JSON.stringify(r, null, 2));
117
+ }
118
+ catch (e) {
119
+ spinner.fail('Reverse failed');
120
+ console.error(chalk.red(e.message));
121
+ process.exit(1);
122
+ }
123
+ }
124
+ export async function replicasListCommand(options) {
125
+ try {
126
+ const r = await listSourceReplicas();
127
+ if (options.json)
128
+ return console.log(JSON.stringify(r, null, 2));
129
+ const list = r.source_replicas ?? [];
130
+ if (list.length === 0) {
131
+ console.log(chalk.gray('No retained source replicas.'));
132
+ return;
133
+ }
134
+ for (const sr of list) {
135
+ console.log(`${sr.migration_id} app=${sr.app_id} ${sr.source_region}→${sr.dest_region} state=${sr.state}`);
136
+ }
137
+ }
138
+ catch (e) {
139
+ console.error(chalk.red(e.message));
140
+ process.exit(1);
141
+ }
142
+ }
143
+ export async function replicaTeardownCommand(migrationId, options) {
144
+ const spinner = ora('Tearing down source replica...').start();
145
+ try {
146
+ const r = await tearDownSourceReplica(migrationId);
147
+ spinner.succeed('Source replica torn down');
148
+ if (options.json)
149
+ console.log(JSON.stringify(r, null, 2));
150
+ }
151
+ catch (e) {
152
+ spinner.fail('Teardown failed');
153
+ console.error(chalk.red(e.message));
154
+ process.exit(1);
155
+ }
156
+ }
157
+ //# sourceMappingURL=move.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move.js","sourceRoot":"","sources":["../../../src/commands/move.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export declare function oauthConfigureCommand(provider: string, options: {
2
+ app?: string;
3
+ clientId: string;
4
+ clientSecret: string;
5
+ redirectUri?: string[];
6
+ scope?: string[];
7
+ authorizationUrl?: string;
8
+ tokenUrl?: string;
9
+ userinfoUrl?: string;
10
+ json?: boolean;
11
+ }): Promise<void>;
12
+ export declare function oauthListCommand(options: {
13
+ app?: string;
14
+ json?: boolean;
15
+ }): Promise<void>;
16
+ export declare function oauthGetCommand(provider: string, options: {
17
+ app?: string;
18
+ json?: boolean;
19
+ }): Promise<void>;
20
+ export declare function oauthUpdateCommand(provider: string, options: {
21
+ app?: string;
22
+ clientId?: string;
23
+ clientSecret?: string;
24
+ redirectUri?: string[];
25
+ scope?: string[];
26
+ enabled?: boolean;
27
+ json?: boolean;
28
+ }): Promise<void>;
29
+ export declare function oauthDeleteCommand(provider: string, options: {
30
+ app?: string;
31
+ json?: boolean;
32
+ }): Promise<void>;
33
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../src/commands/oauth.ts"],"names":[],"mappings":"AAgBA,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IACrD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACzC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IACnE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,iBAuBF;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,iBAiB/E;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,iBAShG;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IACvD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC5D,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,iBAuBF;AAED,wBAAsB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,iBAYnG"}
@@ -0,0 +1,122 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { oauthCreate, oauthList, oauthGet, oauthUpdate, oauthDelete } from '../lib/api-client.js';
4
+ import { getCurrentAppId } from '../lib/config.js';
5
+ async function requireAppId(appId) {
6
+ if (appId)
7
+ return appId;
8
+ const current = await getCurrentAppId();
9
+ if (!current) {
10
+ console.log(chalk.red('No app specified and no current app set'));
11
+ console.log(chalk.gray('Use: butterbase apps use <app-id>'));
12
+ process.exit(1);
13
+ }
14
+ return current;
15
+ }
16
+ export async function oauthConfigureCommand(provider, options) {
17
+ const appId = await requireAppId(options.app);
18
+ const body = {
19
+ provider,
20
+ client_id: options.clientId,
21
+ client_secret: options.clientSecret,
22
+ };
23
+ if (options.redirectUri)
24
+ body.redirect_uris = options.redirectUri;
25
+ if (options.scope)
26
+ body.scopes = options.scope;
27
+ if (options.authorizationUrl)
28
+ body.authorization_url = options.authorizationUrl;
29
+ if (options.tokenUrl)
30
+ body.token_url = options.tokenUrl;
31
+ if (options.userinfoUrl)
32
+ body.userinfo_url = options.userinfoUrl;
33
+ const spinner = ora(`Configuring OAuth provider: ${provider}`).start();
34
+ try {
35
+ const r = await oauthCreate(appId, body);
36
+ spinner.succeed(`Configured ${provider}`);
37
+ if (options.json)
38
+ console.log(JSON.stringify(r, null, 2));
39
+ }
40
+ catch (e) {
41
+ spinner.fail('Configure failed');
42
+ console.error(chalk.red(e.message));
43
+ process.exit(1);
44
+ }
45
+ }
46
+ export async function oauthListCommand(options) {
47
+ const appId = await requireAppId(options.app);
48
+ try {
49
+ const r = await oauthList(appId);
50
+ if (options.json)
51
+ return console.log(JSON.stringify(r, null, 2));
52
+ const providers = r.providers ?? r;
53
+ if (!Array.isArray(providers) || providers.length === 0) {
54
+ console.log(chalk.gray('No OAuth providers configured.'));
55
+ return;
56
+ }
57
+ for (const p of providers) {
58
+ console.log(`${p.provider} enabled=${p.enabled}`);
59
+ }
60
+ }
61
+ catch (e) {
62
+ console.error(chalk.red(e.message));
63
+ process.exit(1);
64
+ }
65
+ }
66
+ export async function oauthGetCommand(provider, options) {
67
+ const appId = await requireAppId(options.app);
68
+ try {
69
+ const r = await oauthGet(appId, provider);
70
+ console.log(options.json ? JSON.stringify(r, null, 2) : r);
71
+ }
72
+ catch (e) {
73
+ console.error(chalk.red(e.message));
74
+ process.exit(1);
75
+ }
76
+ }
77
+ export async function oauthUpdateCommand(provider, options) {
78
+ const appId = await requireAppId(options.app);
79
+ const body = {};
80
+ if (options.clientId)
81
+ body.client_id = options.clientId;
82
+ if (options.clientSecret)
83
+ body.client_secret = options.clientSecret;
84
+ if (options.redirectUri)
85
+ body.redirect_uris = options.redirectUri;
86
+ if (options.scope)
87
+ body.scopes = options.scope;
88
+ if (options.enabled !== undefined)
89
+ body.enabled = options.enabled;
90
+ if (Object.keys(body).length === 0) {
91
+ console.log(chalk.yellow('Nothing to update — pass at least one field.'));
92
+ process.exit(1);
93
+ }
94
+ const spinner = ora(`Updating ${provider}...`).start();
95
+ try {
96
+ const r = await oauthUpdate(appId, provider, body);
97
+ spinner.succeed(`Updated ${provider}`);
98
+ if (options.json)
99
+ console.log(JSON.stringify(r, null, 2));
100
+ }
101
+ catch (e) {
102
+ spinner.fail('Update failed');
103
+ console.error(chalk.red(e.message));
104
+ process.exit(1);
105
+ }
106
+ }
107
+ export async function oauthDeleteCommand(provider, options) {
108
+ const appId = await requireAppId(options.app);
109
+ const spinner = ora(`Deleting ${provider}...`).start();
110
+ try {
111
+ await oauthDelete(appId, provider);
112
+ spinner.succeed(`Deleted ${provider}`);
113
+ if (options.json)
114
+ console.log(JSON.stringify({ deleted: true }));
115
+ }
116
+ catch (e) {
117
+ spinner.fail('Delete failed');
118
+ console.error(chalk.red(e.message));
119
+ process.exit(1);
120
+ }
121
+ }
122
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/commands/oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function regionsListCommand(options: {
2
+ json?: boolean;
3
+ }): Promise<void>;
4
+ //# sourceMappingURL=regions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regions.d.ts","sourceRoot":"","sources":["../../../src/commands/regions.ts"],"names":[],"mappings":"AAGA,wBAAsB,kBAAkB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,iBASnE"}