@xano/cli 0.0.95-beta.21 → 0.0.95-beta.23

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 (198) hide show
  1. package/README.md +13 -1
  2. package/dist/base-command.d.ts +11 -1
  3. package/dist/base-command.js +31 -3
  4. package/dist/commands/auth/index.d.ts +1 -0
  5. package/dist/commands/auth/index.js +15 -10
  6. package/dist/commands/branch/create/index.d.ts +1 -0
  7. package/dist/commands/branch/create/index.js +1 -4
  8. package/dist/commands/branch/delete/index.d.ts +1 -0
  9. package/dist/commands/branch/delete/index.js +1 -4
  10. package/dist/commands/branch/edit/index.d.ts +1 -0
  11. package/dist/commands/branch/edit/index.js +1 -4
  12. package/dist/commands/branch/get/index.d.ts +1 -0
  13. package/dist/commands/branch/get/index.js +1 -4
  14. package/dist/commands/branch/list/index.d.ts +1 -0
  15. package/dist/commands/branch/list/index.js +1 -4
  16. package/dist/commands/branch/set_live/index.d.ts +1 -0
  17. package/dist/commands/branch/set_live/index.js +1 -4
  18. package/dist/commands/function/create/index.d.ts +1 -0
  19. package/dist/commands/function/create/index.js +1 -2
  20. package/dist/commands/function/edit/index.d.ts +1 -0
  21. package/dist/commands/function/edit/index.js +1 -2
  22. package/dist/commands/function/get/index.d.ts +1 -0
  23. package/dist/commands/function/get/index.js +1 -4
  24. package/dist/commands/function/list/index.d.ts +1 -0
  25. package/dist/commands/function/list/index.js +1 -4
  26. package/dist/commands/platform/get/index.d.ts +1 -0
  27. package/dist/commands/platform/get/index.js +1 -4
  28. package/dist/commands/platform/list/index.d.ts +1 -0
  29. package/dist/commands/platform/list/index.js +1 -4
  30. package/dist/commands/profile/create/index.d.ts +1 -0
  31. package/dist/commands/profile/create/index.js +10 -4
  32. package/dist/commands/profile/delete/index.d.ts +1 -0
  33. package/dist/commands/profile/delete/index.js +8 -4
  34. package/dist/commands/profile/edit/index.d.ts +1 -0
  35. package/dist/commands/profile/edit/index.js +1 -4
  36. package/dist/commands/profile/get/index.d.ts +3 -0
  37. package/dist/commands/profile/get/index.js +12 -5
  38. package/dist/commands/profile/list/index.d.ts +1 -0
  39. package/dist/commands/profile/list/index.js +8 -4
  40. package/dist/commands/profile/me/index.d.ts +1 -0
  41. package/dist/commands/profile/me/index.js +1 -4
  42. package/dist/commands/profile/set/index.d.ts +3 -0
  43. package/dist/commands/profile/set/index.js +12 -6
  44. package/dist/commands/profile/token/index.d.ts +3 -0
  45. package/dist/commands/profile/token/index.js +12 -5
  46. package/dist/commands/profile/wizard/index.d.ts +1 -0
  47. package/dist/commands/profile/wizard/index.js +13 -9
  48. package/dist/commands/profile/workspace/index.d.ts +3 -0
  49. package/dist/commands/profile/workspace/index.js +12 -5
  50. package/dist/commands/profile/workspace/set/index.d.ts +1 -0
  51. package/dist/commands/profile/workspace/set/index.js +1 -3
  52. package/dist/commands/release/create/index.d.ts +1 -0
  53. package/dist/commands/release/create/index.js +1 -4
  54. package/dist/commands/release/delete/index.d.ts +1 -0
  55. package/dist/commands/release/delete/index.js +1 -4
  56. package/dist/commands/release/deploy/index.d.ts +1 -0
  57. package/dist/commands/release/edit/index.d.ts +1 -0
  58. package/dist/commands/release/edit/index.js +1 -4
  59. package/dist/commands/release/export/index.d.ts +1 -0
  60. package/dist/commands/release/export/index.js +1 -3
  61. package/dist/commands/release/get/index.d.ts +1 -0
  62. package/dist/commands/release/get/index.js +1 -4
  63. package/dist/commands/release/import/index.d.ts +1 -0
  64. package/dist/commands/release/import/index.js +1 -3
  65. package/dist/commands/release/list/index.d.ts +1 -0
  66. package/dist/commands/release/list/index.js +1 -4
  67. package/dist/commands/release/pull/index.d.ts +1 -0
  68. package/dist/commands/release/pull/index.js +1 -3
  69. package/dist/commands/release/push/index.d.ts +1 -0
  70. package/dist/commands/release/push/index.js +1 -3
  71. package/dist/commands/sandbox/delete/index.d.ts +1 -0
  72. package/dist/commands/sandbox/env/delete/index.d.ts +1 -0
  73. package/dist/commands/sandbox/env/get/index.d.ts +1 -0
  74. package/dist/commands/sandbox/env/get_all/index.d.ts +1 -0
  75. package/dist/commands/sandbox/env/list/index.d.ts +1 -0
  76. package/dist/commands/sandbox/env/set/index.d.ts +1 -0
  77. package/dist/commands/sandbox/env/set_all/index.d.ts +1 -0
  78. package/dist/commands/sandbox/get/index.d.ts +1 -0
  79. package/dist/commands/sandbox/license/get/index.d.ts +1 -0
  80. package/dist/commands/sandbox/license/set/index.d.ts +1 -0
  81. package/dist/commands/sandbox/pull/index.d.ts +1 -0
  82. package/dist/commands/sandbox/push/index.d.ts +1 -0
  83. package/dist/commands/sandbox/reset/index.d.ts +1 -0
  84. package/dist/commands/sandbox/review/index.d.ts +1 -0
  85. package/dist/commands/sandbox/unit_test/list/index.d.ts +1 -0
  86. package/dist/commands/sandbox/unit_test/run/index.d.ts +1 -0
  87. package/dist/commands/sandbox/unit_test/run_all/index.d.ts +1 -0
  88. package/dist/commands/sandbox/workflow_test/list/index.d.ts +1 -0
  89. package/dist/commands/sandbox/workflow_test/run/index.d.ts +1 -0
  90. package/dist/commands/sandbox/workflow_test/run_all/index.d.ts +1 -0
  91. package/dist/commands/static_host/build/create/index.d.ts +1 -0
  92. package/dist/commands/static_host/build/create/index.js +1 -3
  93. package/dist/commands/static_host/build/get/index.d.ts +1 -0
  94. package/dist/commands/static_host/build/get/index.js +1 -4
  95. package/dist/commands/static_host/build/list/index.d.ts +1 -0
  96. package/dist/commands/static_host/build/list/index.js +1 -4
  97. package/dist/commands/static_host/list/index.d.ts +1 -0
  98. package/dist/commands/static_host/list/index.js +1 -4
  99. package/dist/commands/tenant/backup/create/index.d.ts +1 -0
  100. package/dist/commands/tenant/backup/create/index.js +1 -4
  101. package/dist/commands/tenant/backup/delete/index.d.ts +1 -0
  102. package/dist/commands/tenant/backup/delete/index.js +1 -4
  103. package/dist/commands/tenant/backup/export/index.d.ts +1 -0
  104. package/dist/commands/tenant/backup/export/index.js +1 -3
  105. package/dist/commands/tenant/backup/import/index.d.ts +1 -0
  106. package/dist/commands/tenant/backup/import/index.js +1 -3
  107. package/dist/commands/tenant/backup/list/index.d.ts +1 -0
  108. package/dist/commands/tenant/backup/list/index.js +1 -4
  109. package/dist/commands/tenant/backup/restore/index.d.ts +1 -0
  110. package/dist/commands/tenant/backup/restore/index.js +1 -4
  111. package/dist/commands/tenant/cluster/create/index.d.ts +1 -0
  112. package/dist/commands/tenant/cluster/create/index.js +1 -3
  113. package/dist/commands/tenant/cluster/delete/index.d.ts +1 -0
  114. package/dist/commands/tenant/cluster/delete/index.js +1 -4
  115. package/dist/commands/tenant/cluster/edit/index.d.ts +1 -0
  116. package/dist/commands/tenant/cluster/edit/index.js +1 -4
  117. package/dist/commands/tenant/cluster/get/index.d.ts +1 -0
  118. package/dist/commands/tenant/cluster/get/index.js +1 -4
  119. package/dist/commands/tenant/cluster/license/get/index.d.ts +1 -0
  120. package/dist/commands/tenant/cluster/license/get/index.js +1 -3
  121. package/dist/commands/tenant/cluster/license/set/index.d.ts +1 -0
  122. package/dist/commands/tenant/cluster/license/set/index.js +1 -3
  123. package/dist/commands/tenant/cluster/list/index.d.ts +1 -0
  124. package/dist/commands/tenant/cluster/list/index.js +1 -4
  125. package/dist/commands/tenant/create/index.d.ts +1 -0
  126. package/dist/commands/tenant/create/index.js +1 -3
  127. package/dist/commands/tenant/delete/index.d.ts +1 -0
  128. package/dist/commands/tenant/delete/index.js +1 -4
  129. package/dist/commands/tenant/deploy_platform/index.d.ts +1 -0
  130. package/dist/commands/tenant/deploy_platform/index.js +1 -3
  131. package/dist/commands/tenant/deploy_release/index.d.ts +1 -1
  132. package/dist/commands/tenant/deploy_release/index.js +2 -13
  133. package/dist/commands/tenant/edit/index.d.ts +1 -0
  134. package/dist/commands/tenant/edit/index.js +1 -4
  135. package/dist/commands/tenant/env/delete/index.d.ts +1 -0
  136. package/dist/commands/tenant/env/delete/index.js +1 -4
  137. package/dist/commands/tenant/env/get/index.d.ts +1 -0
  138. package/dist/commands/tenant/env/get/index.js +1 -4
  139. package/dist/commands/tenant/env/get_all/index.d.ts +1 -0
  140. package/dist/commands/tenant/env/get_all/index.js +1 -3
  141. package/dist/commands/tenant/env/list/index.d.ts +1 -0
  142. package/dist/commands/tenant/env/list/index.js +1 -4
  143. package/dist/commands/tenant/env/set/index.d.ts +1 -0
  144. package/dist/commands/tenant/env/set/index.js +1 -4
  145. package/dist/commands/tenant/env/set_all/index.d.ts +1 -0
  146. package/dist/commands/tenant/env/set_all/index.js +1 -3
  147. package/dist/commands/tenant/get/index.d.ts +1 -0
  148. package/dist/commands/tenant/get/index.js +1 -4
  149. package/dist/commands/tenant/impersonate/index.d.ts +1 -0
  150. package/dist/commands/tenant/impersonate/index.js +1 -4
  151. package/dist/commands/tenant/license/get/index.d.ts +1 -0
  152. package/dist/commands/tenant/license/get/index.js +1 -3
  153. package/dist/commands/tenant/license/set/index.d.ts +1 -0
  154. package/dist/commands/tenant/license/set/index.js +1 -3
  155. package/dist/commands/tenant/list/index.d.ts +1 -0
  156. package/dist/commands/tenant/list/index.js +1 -4
  157. package/dist/commands/tenant/pull/index.d.ts +1 -0
  158. package/dist/commands/tenant/pull/index.js +1 -3
  159. package/dist/commands/tenant/unit_test/list/index.d.ts +1 -0
  160. package/dist/commands/tenant/unit_test/run/index.d.ts +1 -0
  161. package/dist/commands/tenant/unit_test/run_all/index.d.ts +1 -0
  162. package/dist/commands/tenant/workflow_test/list/index.d.ts +1 -0
  163. package/dist/commands/tenant/workflow_test/run/index.d.ts +1 -0
  164. package/dist/commands/tenant/workflow_test/run_all/index.d.ts +1 -0
  165. package/dist/commands/unit_test/list/index.d.ts +1 -0
  166. package/dist/commands/unit_test/list/index.js +1 -4
  167. package/dist/commands/unit_test/run/index.d.ts +1 -0
  168. package/dist/commands/unit_test/run/index.js +1 -4
  169. package/dist/commands/unit_test/run_all/index.d.ts +1 -0
  170. package/dist/commands/unit_test/run_all/index.js +1 -4
  171. package/dist/commands/update/index.d.ts +1 -0
  172. package/dist/commands/workflow_test/delete/index.d.ts +1 -0
  173. package/dist/commands/workflow_test/delete/index.js +1 -4
  174. package/dist/commands/workflow_test/get/index.d.ts +1 -0
  175. package/dist/commands/workflow_test/get/index.js +1 -4
  176. package/dist/commands/workflow_test/list/index.d.ts +1 -0
  177. package/dist/commands/workflow_test/list/index.js +1 -4
  178. package/dist/commands/workflow_test/run/index.d.ts +1 -0
  179. package/dist/commands/workflow_test/run/index.js +1 -4
  180. package/dist/commands/workflow_test/run_all/index.d.ts +1 -0
  181. package/dist/commands/workflow_test/run_all/index.js +1 -4
  182. package/dist/commands/workspace/create/index.d.ts +1 -0
  183. package/dist/commands/workspace/create/index.js +1 -4
  184. package/dist/commands/workspace/delete/index.d.ts +1 -0
  185. package/dist/commands/workspace/delete/index.js +1 -4
  186. package/dist/commands/workspace/edit/index.d.ts +1 -0
  187. package/dist/commands/workspace/edit/index.js +1 -4
  188. package/dist/commands/workspace/get/index.d.ts +1 -0
  189. package/dist/commands/workspace/get/index.js +1 -4
  190. package/dist/commands/workspace/git/pull/index.d.ts +1 -0
  191. package/dist/commands/workspace/list/index.d.ts +1 -0
  192. package/dist/commands/workspace/list/index.js +1 -4
  193. package/dist/commands/workspace/pull/index.d.ts +1 -0
  194. package/dist/commands/workspace/pull/index.js +1 -3
  195. package/dist/commands/workspace/push/index.d.ts +1 -0
  196. package/dist/commands/workspace/push/index.js +1 -3
  197. package/oclif.manifest.json +2810 -1694
  198. package/package.json +1 -1
@@ -2,5 +2,8 @@ import { Command } from '@oclif/core';
2
2
  export default class ProfileGet extends Command {
3
3
  static description: string;
4
4
  static examples: string[];
5
+ static flags: {
6
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ };
5
8
  run(): Promise<void>;
6
9
  }
@@ -1,8 +1,7 @@
1
- import { Command } from '@oclif/core';
1
+ import { Command, Flags } from '@oclif/core';
2
2
  import * as yaml from 'js-yaml';
3
3
  import * as fs from 'node:fs';
4
- import * as os from 'node:os';
5
- import * as path from 'node:path';
4
+ import { resolveCredentialsPath } from '../../../base-command.js';
6
5
  export default class ProfileGet extends Command {
7
6
  static description = 'Get the current default profile name';
8
7
  static examples = [
@@ -10,9 +9,17 @@ export default class ProfileGet extends Command {
10
9
  production
11
10
  `,
12
11
  ];
12
+ static flags = {
13
+ config: Flags.string({
14
+ char: 'c',
15
+ description: 'Path to credentials file (default: ~/.xano/credentials.yaml)',
16
+ env: 'XANO_CONFIG',
17
+ required: false,
18
+ }),
19
+ };
13
20
  async run() {
14
- const configDir = path.join(os.homedir(), '.xano');
15
- const credentialsPath = path.join(configDir, 'credentials.yaml');
21
+ const { flags } = await this.parse(ProfileGet);
22
+ const credentialsPath = resolveCredentialsPath(flags.config);
16
23
  if (!fs.existsSync(credentialsPath)) {
17
24
  this.error(`Credentials file not found at ${credentialsPath}. No profiles exist.`);
18
25
  }
@@ -3,6 +3,7 @@ export default class ProfileList extends Command {
3
3
  static description: string;
4
4
  static examples: string[];
5
5
  static flags: {
6
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
6
7
  details: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
8
  };
8
9
  run(): Promise<void>;
@@ -1,8 +1,7 @@
1
1
  import { Command, Flags, ux } from '@oclif/core';
2
2
  import * as yaml from 'js-yaml';
3
3
  import * as fs from 'node:fs';
4
- import * as os from 'node:os';
5
- import * as path from 'node:path';
4
+ import { resolveCredentialsPath } from '../../../base-command.js';
6
5
  export default class ProfileList extends Command {
7
6
  static description = 'List all available profile configurations';
8
7
  static examples = [
@@ -42,6 +41,12 @@ Profile: default
42
41
  `,
43
42
  ];
44
43
  static flags = {
44
+ config: Flags.string({
45
+ char: 'c',
46
+ description: 'Path to credentials file (default: ~/.xano/credentials.yaml)',
47
+ env: 'XANO_CONFIG',
48
+ required: false,
49
+ }),
45
50
  details: Flags.boolean({
46
51
  char: 'd',
47
52
  default: false,
@@ -51,8 +56,7 @@ Profile: default
51
56
  };
52
57
  async run() {
53
58
  const { flags } = await this.parse(ProfileList);
54
- const configDir = path.join(os.homedir(), '.xano');
55
- const credentialsPath = path.join(configDir, 'credentials.yaml');
59
+ const credentialsPath = resolveCredentialsPath(flags.config);
56
60
  // Check if credentials file exists
57
61
  if (!fs.existsSync(credentialsPath)) {
58
62
  this.log(`No profiles found. The credentials file does not exist at ${credentialsPath}`);
@@ -4,6 +4,7 @@ export default class ProfileMe extends BaseCommand {
4
4
  static examples: string[];
5
5
  static flags: {
6
6
  output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
8
  profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
9
  verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
10
  };
@@ -1,8 +1,6 @@
1
1
  import { Flags } from '@oclif/core';
2
2
  import * as yaml from 'js-yaml';
3
3
  import * as fs from 'node:fs';
4
- import * as os from 'node:os';
5
- import * as path from 'node:path';
6
4
  import BaseCommand from '../../../base-command.js';
7
5
  export default class ProfileMe extends BaseCommand {
8
6
  static description = 'Get information about the currently authenticated user';
@@ -170,8 +168,7 @@ User Information:
170
168
  .join(' ');
171
169
  }
172
170
  loadCredentials() {
173
- const configDir = path.join(os.homedir(), '.xano');
174
- const credentialsPath = path.join(configDir, 'credentials.yaml');
171
+ const credentialsPath = this.getCredentialsPath();
175
172
  // Check if credentials file exists
176
173
  if (!fs.existsSync(credentialsPath)) {
177
174
  this.error(`Credentials file not found at ${credentialsPath}\n` + `Create a profile using 'xano profile:create'`);
@@ -5,5 +5,8 @@ export default class ProfileSet extends Command {
5
5
  };
6
6
  static description: string;
7
7
  static examples: string[];
8
+ static flags: {
9
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ };
8
11
  run(): Promise<void>;
9
12
  }
@@ -1,8 +1,7 @@
1
- import { Args, Command } from '@oclif/core';
1
+ import { Args, Command, Flags } from '@oclif/core';
2
2
  import * as yaml from 'js-yaml';
3
3
  import * as fs from 'node:fs';
4
- import * as os from 'node:os';
5
- import * as path from 'node:path';
4
+ import { resolveCredentialsPath } from '../../../base-command.js';
6
5
  export default class ProfileSet extends Command {
7
6
  static args = {
8
7
  name: Args.string({
@@ -16,10 +15,17 @@ export default class ProfileSet extends Command {
16
15
  Default profile set to 'production'
17
16
  `,
18
17
  ];
18
+ static flags = {
19
+ config: Flags.string({
20
+ char: 'c',
21
+ description: 'Path to credentials file (default: ~/.xano/credentials.yaml)',
22
+ env: 'XANO_CONFIG',
23
+ required: false,
24
+ }),
25
+ };
19
26
  async run() {
20
- const { args } = await this.parse(ProfileSet);
21
- const configDir = path.join(os.homedir(), '.xano');
22
- const credentialsPath = path.join(configDir, 'credentials.yaml');
27
+ const { args, flags } = await this.parse(ProfileSet);
28
+ const credentialsPath = resolveCredentialsPath(flags.config);
23
29
  if (!fs.existsSync(credentialsPath)) {
24
30
  this.error(`Credentials file not found at ${credentialsPath}. Create a profile first using 'profile:create'.`);
25
31
  }
@@ -2,5 +2,8 @@ import { Command } from '@oclif/core';
2
2
  export default class ProfileToken extends Command {
3
3
  static description: string;
4
4
  static examples: string[];
5
+ static flags: {
6
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ };
5
8
  run(): Promise<void>;
6
9
  }
@@ -1,8 +1,7 @@
1
- import { Command } from '@oclif/core';
1
+ import { Command, Flags } from '@oclif/core';
2
2
  import * as yaml from 'js-yaml';
3
3
  import * as fs from 'node:fs';
4
- import * as os from 'node:os';
5
- import * as path from 'node:path';
4
+ import { resolveCredentialsPath } from '../../../base-command.js';
6
5
  export default class ProfileToken extends Command {
7
6
  static description = 'Print the access token for the default profile';
8
7
  static examples = [
@@ -13,9 +12,17 @@ eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
13
12
  # Copies the token to clipboard on macOS
14
13
  `,
15
14
  ];
15
+ static flags = {
16
+ config: Flags.string({
17
+ char: 'c',
18
+ description: 'Path to credentials file (default: ~/.xano/credentials.yaml)',
19
+ env: 'XANO_CONFIG',
20
+ required: false,
21
+ }),
22
+ };
16
23
  async run() {
17
- const configDir = path.join(os.homedir(), '.xano');
18
- const credentialsPath = path.join(configDir, 'credentials.yaml');
24
+ const { flags } = await this.parse(ProfileToken);
25
+ const credentialsPath = resolveCredentialsPath(flags.config);
19
26
  // Check if credentials file exists
20
27
  if (!fs.existsSync(credentialsPath)) {
21
28
  this.error(`Credentials file not found at ${credentialsPath}. Create a profile first using 'profile:create'.`);
@@ -3,6 +3,7 @@ export default class ProfileWizard extends Command {
3
3
  static description: string;
4
4
  static examples: string[];
5
5
  static flags: {
6
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
6
7
  insecure: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
8
  name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
9
  origin: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
@@ -3,9 +3,8 @@ import { Command, Flags } from '@oclif/core';
3
3
  import inquirer from 'inquirer';
4
4
  import * as yaml from 'js-yaml';
5
5
  import * as fs from 'node:fs';
6
- import * as os from 'node:os';
7
6
  import * as path from 'node:path';
8
- import { buildUserAgent } from '../../../base-command.js';
7
+ import { buildUserAgent, resolveCredentialsPath } from '../../../base-command.js';
9
8
  export default class ProfileWizard extends Command {
10
9
  static description = 'Create a new profile configuration using an interactive wizard';
11
10
  static examples = [
@@ -20,6 +19,12 @@ Profile 'production' created successfully at ~/.xano/credentials.yaml
20
19
  `,
21
20
  ];
22
21
  static flags = {
22
+ config: Flags.string({
23
+ char: 'c',
24
+ description: 'Path to credentials file (default: ~/.xano/credentials.yaml)',
25
+ env: 'XANO_CONFIG',
26
+ required: false,
27
+ }),
23
28
  insecure: Flags.boolean({
24
29
  char: 'k',
25
30
  default: false,
@@ -178,7 +183,7 @@ Profile 'production' created successfully at ~/.xano/credentials.yaml
178
183
  instance_origin: selectedInstance.origin,
179
184
  name: profileName,
180
185
  workspace,
181
- }, true);
186
+ }, true, flags.config);
182
187
  this.log('');
183
188
  this.log(`✓ Profile '${profileName}' created successfully!`);
184
189
  }
@@ -299,8 +304,7 @@ Profile 'production' created successfully at ~/.xano/credentials.yaml
299
304
  }
300
305
  getDefaultProfileName() {
301
306
  try {
302
- const configDir = path.join(os.homedir(), '.xano');
303
- const credentialsPath = path.join(configDir, 'credentials.yaml');
307
+ const credentialsPath = resolveCredentialsPath();
304
308
  if (!fs.existsSync(credentialsPath)) {
305
309
  return 'default';
306
310
  }
@@ -315,10 +319,10 @@ Profile 'production' created successfully at ~/.xano/credentials.yaml
315
319
  return 'default';
316
320
  }
317
321
  }
318
- async saveProfile(profile, setAsDefault = false) {
319
- const configDir = path.join(os.homedir(), '.xano');
320
- const credentialsPath = path.join(configDir, 'credentials.yaml');
321
- // Ensure the .xano directory exists
322
+ async saveProfile(profile, setAsDefault = false, configPath) {
323
+ const credentialsPath = resolveCredentialsPath(configPath);
324
+ const configDir = path.dirname(credentialsPath);
325
+ // Ensure the directory exists
322
326
  if (!fs.existsSync(configDir)) {
323
327
  fs.mkdirSync(configDir, { recursive: true });
324
328
  }
@@ -2,5 +2,8 @@ import { Command } from '@oclif/core';
2
2
  export default class ProfileWorkspace extends Command {
3
3
  static description: string;
4
4
  static examples: string[];
5
+ static flags: {
6
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ };
5
8
  run(): Promise<void>;
6
9
  }
@@ -1,8 +1,7 @@
1
- import { Command } from '@oclif/core';
1
+ import { Command, Flags } from '@oclif/core';
2
2
  import * as yaml from 'js-yaml';
3
3
  import * as fs from 'node:fs';
4
- import * as os from 'node:os';
5
- import * as path from 'node:path';
4
+ import { resolveCredentialsPath } from '../../../base-command.js';
6
5
  export default class ProfileWorkspace extends Command {
7
6
  static description = 'Print the workspace ID for the default profile';
8
7
  static examples = [
@@ -13,9 +12,17 @@ abc123-workspace-id
13
12
  # Copies the workspace ID to clipboard on macOS
14
13
  `,
15
14
  ];
15
+ static flags = {
16
+ config: Flags.string({
17
+ char: 'c',
18
+ description: 'Path to credentials file (default: ~/.xano/credentials.yaml)',
19
+ env: 'XANO_CONFIG',
20
+ required: false,
21
+ }),
22
+ };
16
23
  async run() {
17
- const configDir = path.join(os.homedir(), '.xano');
18
- const credentialsPath = path.join(configDir, 'credentials.yaml');
24
+ const { flags } = await this.parse(ProfileWorkspace);
25
+ const credentialsPath = resolveCredentialsPath(flags.config);
19
26
  // Check if credentials file exists
20
27
  if (!fs.existsSync(credentialsPath)) {
21
28
  this.error(`Credentials file not found at ${credentialsPath}. Create a profile first using 'profile:create'.`);
@@ -3,6 +3,7 @@ export default class ProfileWorkspaceSet extends BaseCommand {
3
3
  static description: string;
4
4
  static examples: string[];
5
5
  static flags: {
6
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
6
7
  profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
8
  verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
9
  };
@@ -1,8 +1,6 @@
1
1
  import inquirer from 'inquirer';
2
2
  import * as yaml from 'js-yaml';
3
3
  import * as fs from 'node:fs';
4
- import * as os from 'node:os';
5
- import * as path from 'node:path';
6
4
  import BaseCommand, { buildUserAgent } from '../../../../base-command.js';
7
5
  export default class ProfileWorkspaceSet extends BaseCommand {
8
6
  static description = 'Interactively select a workspace for a profile';
@@ -50,7 +48,7 @@ Workspace updated to 'Production API' (xyz789) on profile 'production'
50
48
  ]);
51
49
  profile.workspace = selectedWorkspace;
52
50
  credentials.profiles[profileName] = profile;
53
- const credentialsPath = path.join(os.homedir(), '.xano', 'credentials.yaml');
51
+ const credentialsPath = this.getCredentialsPath();
54
52
  const yamlContent = yaml.dump(credentials, {
55
53
  indent: 2,
56
54
  lineWidth: -1,
@@ -10,6 +10,7 @@ export default class ReleaseCreate extends BaseCommand {
10
10
  output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
11
  'table-ids': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
12
  workspace: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
14
  profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
15
  verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
16
  };
@@ -1,8 +1,6 @@
1
1
  import { Flags } from '@oclif/core';
2
2
  import * as yaml from 'js-yaml';
3
3
  import * as fs from 'node:fs';
4
- import * as os from 'node:os';
5
- import * as path from 'node:path';
6
4
  import BaseCommand from '../../../base-command.js';
7
5
  export default class ReleaseCreate extends BaseCommand {
8
6
  static description = 'Create a new release in a workspace';
@@ -117,8 +115,7 @@ Created release: v1.0 - ID: 10
117
115
  }
118
116
  }
119
117
  loadCredentials() {
120
- const configDir = path.join(os.homedir(), '.xano');
121
- const credentialsPath = path.join(configDir, 'credentials.yaml');
118
+ const credentialsPath = this.getCredentialsPath();
122
119
  if (!fs.existsSync(credentialsPath)) {
123
120
  this.error(`Credentials file not found at ${credentialsPath}\n` +
124
121
  `Create a profile using 'xano profile create'`);
@@ -9,6 +9,7 @@ export default class ReleaseDelete extends BaseCommand {
9
9
  force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
10
  output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
11
  workspace: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
13
  profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
14
  verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
15
  };
@@ -1,8 +1,6 @@
1
1
  import { Args, Flags } from '@oclif/core';
2
2
  import * as yaml from 'js-yaml';
3
3
  import * as fs from 'node:fs';
4
- import * as os from 'node:os';
5
- import * as path from 'node:path';
6
4
  import BaseCommand from '../../../base-command.js';
7
5
  export default class ReleaseDelete extends BaseCommand {
8
6
  static args = {
@@ -114,8 +112,7 @@ Deleted release 'v1.0'
114
112
  });
115
113
  }
116
114
  loadCredentials() {
117
- const configDir = path.join(os.homedir(), '.xano');
118
- const credentialsPath = path.join(configDir, 'credentials.yaml');
115
+ const credentialsPath = this.getCredentialsPath();
119
116
  if (!fs.existsSync(credentialsPath)) {
120
117
  this.error(`Credentials file not found at ${credentialsPath}\n` +
121
118
  `Create a profile using 'xano profile create'`);
@@ -10,6 +10,7 @@ export default class ReleaseDeploy extends BaseCommand {
10
10
  output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
11
11
  set_live: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
12
  workspace: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
14
  profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
15
  verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
16
  };
@@ -10,6 +10,7 @@ export default class ReleaseEdit extends BaseCommand {
10
10
  name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
11
  output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
12
  workspace: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
14
  profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
15
  verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
16
  };
@@ -1,8 +1,6 @@
1
1
  import { Args, Flags } from '@oclif/core';
2
2
  import * as yaml from 'js-yaml';
3
3
  import * as fs from 'node:fs';
4
- import * as os from 'node:os';
5
- import * as path from 'node:path';
6
4
  import BaseCommand from '../../../base-command.js';
7
5
  export default class ReleaseEdit extends BaseCommand {
8
6
  static args = {
@@ -116,8 +114,7 @@ Updated release: v1.0-final - ID: 10
116
114
  }
117
115
  }
118
116
  loadCredentials() {
119
- const configDir = path.join(os.homedir(), '.xano');
120
- const credentialsPath = path.join(configDir, 'credentials.yaml');
117
+ const credentialsPath = this.getCredentialsPath();
121
118
  if (!fs.existsSync(credentialsPath)) {
122
119
  this.error(`Credentials file not found at ${credentialsPath}\n` +
123
120
  `Create a profile using 'xano profile create'`);
@@ -9,6 +9,7 @@ export default class ReleaseExport extends BaseCommand {
9
9
  format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
10
  output: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
11
  workspace: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
13
  profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
14
  verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
15
  };
@@ -1,6 +1,5 @@
1
1
  import { Args, Flags } from '@oclif/core';
2
2
  import * as fs from 'node:fs';
3
- import * as os from 'node:os';
4
3
  import * as path from 'node:path';
5
4
  import * as yaml from 'js-yaml';
6
5
  import BaseCommand, { buildUserAgent } from '../../../base-command.js';
@@ -125,8 +124,7 @@ Downloaded release 'v1.0' to ./release-v1.0.tar.gz
125
124
  }
126
125
  }
127
126
  loadCredentials() {
128
- const configDir = path.join(os.homedir(), '.xano');
129
- const credentialsPath = path.join(configDir, 'credentials.yaml');
127
+ const credentialsPath = this.getCredentialsPath();
130
128
  if (!fs.existsSync(credentialsPath)) {
131
129
  this.error(`Credentials file not found at ${credentialsPath}\n` + `Create a profile using 'xano profile create'`);
132
130
  }
@@ -8,6 +8,7 @@ export default class ReleaseGet extends BaseCommand {
8
8
  static flags: {
9
9
  output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
10
10
  workspace: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
12
  profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
13
  verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
14
  };
@@ -1,8 +1,6 @@
1
1
  import { Args, Flags } from '@oclif/core';
2
2
  import * as yaml from 'js-yaml';
3
3
  import * as fs from 'node:fs';
4
- import * as os from 'node:os';
5
- import * as path from 'node:path';
6
4
  import BaseCommand from '../../../base-command.js';
7
5
  export default class ReleaseGet extends BaseCommand {
8
6
  static args = {
@@ -102,8 +100,7 @@ Release: v1.0 - ID: 10
102
100
  }
103
101
  }
104
102
  loadCredentials() {
105
- const configDir = path.join(os.homedir(), '.xano');
106
- const credentialsPath = path.join(configDir, 'credentials.yaml');
103
+ const credentialsPath = this.getCredentialsPath();
107
104
  if (!fs.existsSync(credentialsPath)) {
108
105
  this.error(`Credentials file not found at ${credentialsPath}\n` +
109
106
  `Create a profile using 'xano profile create'`);
@@ -7,6 +7,7 @@ export default class ReleaseImport extends BaseCommand {
7
7
  file: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
8
8
  output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
9
  workspace: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
11
  profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
12
  verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
13
  };
@@ -1,6 +1,5 @@
1
1
  import { Flags } from '@oclif/core';
2
2
  import * as fs from 'node:fs';
3
- import * as os from 'node:os';
4
3
  import * as path from 'node:path';
5
4
  import * as yaml from 'js-yaml';
6
5
  import BaseCommand from '../../../base-command.js';
@@ -93,8 +92,7 @@ Imported release as #15
93
92
  }
94
93
  }
95
94
  loadCredentials() {
96
- const configDir = path.join(os.homedir(), '.xano');
97
- const credentialsPath = path.join(configDir, 'credentials.yaml');
95
+ const credentialsPath = this.getCredentialsPath();
98
96
  if (!fs.existsSync(credentialsPath)) {
99
97
  this.error(`Credentials file not found at ${credentialsPath}\n` +
100
98
  `Create a profile using 'xano profile create'`);
@@ -5,6 +5,7 @@ export default class ReleaseList extends BaseCommand {
5
5
  static flags: {
6
6
  output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
7
  workspace: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
9
  profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
10
  verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
11
  };
@@ -1,8 +1,6 @@
1
1
  import { Flags } from '@oclif/core';
2
2
  import * as yaml from 'js-yaml';
3
3
  import * as fs from 'node:fs';
4
- import * as os from 'node:os';
5
- import * as path from 'node:path';
6
4
  import BaseCommand from '../../../base-command.js';
7
5
  export default class ReleaseList extends BaseCommand {
8
6
  static description = 'List all releases in a workspace';
@@ -102,8 +100,7 @@ Releases in workspace 5:
102
100
  }
103
101
  }
104
102
  loadCredentials() {
105
- const configDir = path.join(os.homedir(), '.xano');
106
- const credentialsPath = path.join(configDir, 'credentials.yaml');
103
+ const credentialsPath = this.getCredentialsPath();
107
104
  if (!fs.existsSync(credentialsPath)) {
108
105
  this.error(`Credentials file not found at ${credentialsPath}\n` + `Create a profile using 'xano profile create'`);
109
106
  }
@@ -10,6 +10,7 @@ export default class ReleasePull extends BaseCommand {
10
10
  records: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
11
  release: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
12
12
  workspace: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
14
  profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
14
15
  verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
16
  };
@@ -1,7 +1,6 @@
1
1
  import { Args, Flags } from '@oclif/core';
2
2
  import * as yaml from 'js-yaml';
3
3
  import * as fs from 'node:fs';
4
- import * as os from 'node:os';
5
4
  import * as path from 'node:path';
6
5
  import snakeCase from 'lodash.snakecase';
7
6
  import BaseCommand from '../../../base-command.js';
@@ -242,8 +241,7 @@ Pulled 58 documents from release 'v1.0' to ./backup
242
241
  this.log(`Pulled ${writtenCount} documents from release '${releaseName}' to ${args.directory}`);
243
242
  }
244
243
  loadCredentials() {
245
- const configDir = path.join(os.homedir(), '.xano');
246
- const credentialsPath = path.join(configDir, 'credentials.yaml');
244
+ const credentialsPath = this.getCredentialsPath();
247
245
  // Check if credentials file exists
248
246
  if (!fs.existsSync(credentialsPath)) {
249
247
  this.error(`Credentials file not found at ${credentialsPath}\n` + `Create a profile using 'xano profile:create'`);
@@ -13,6 +13,7 @@ export default class ReleasePush extends BaseCommand {
13
13
  output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
14
  records: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
15
  workspace: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
17
  profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
17
18
  verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
18
19
  };
@@ -1,7 +1,6 @@
1
1
  import { Args, Flags } from '@oclif/core';
2
2
  import * as yaml from 'js-yaml';
3
3
  import * as fs from 'node:fs';
4
- import * as os from 'node:os';
5
4
  import * as path from 'node:path';
6
5
  import BaseCommand from '../../../base-command.js';
7
6
  import { findFilesWithGuid } from '../../../utils/document-parser.js';
@@ -221,8 +220,7 @@ Output release details as JSON
221
220
  return files.sort();
222
221
  }
223
222
  loadCredentials() {
224
- const configDir = path.join(os.homedir(), '.xano');
225
- const credentialsPath = path.join(configDir, 'credentials.yaml');
223
+ const credentialsPath = this.getCredentialsPath();
226
224
  // Check if credentials file exists
227
225
  if (!fs.existsSync(credentialsPath)) {
228
226
  this.error(`Credentials file not found at ${credentialsPath}\n` + `Create a profile using 'xano profile:create'`);
@@ -4,6 +4,7 @@ export default class SandboxDelete extends BaseCommand {
4
4
  static examples: string[];
5
5
  static flags: {
6
6
  force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
8
  profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
9
  verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
9
10
  };
@@ -6,6 +6,7 @@ export default class SandboxEnvDelete extends BaseCommand {
6
6
  force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
7
  name: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
8
8
  output: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
10
  profile: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
10
11
  verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
12
  };