@objectstack/cli 4.0.0 → 4.0.2

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 (84) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +17 -0
  3. package/dist/commands/auth/login.d.ts +13 -0
  4. package/dist/commands/auth/login.d.ts.map +1 -0
  5. package/dist/commands/auth/login.js +167 -0
  6. package/dist/commands/auth/login.js.map +1 -0
  7. package/dist/commands/auth/logout.d.ts +10 -0
  8. package/dist/commands/auth/logout.d.ts.map +1 -0
  9. package/dist/commands/auth/logout.js +46 -0
  10. package/dist/commands/auth/logout.js.map +1 -0
  11. package/dist/commands/auth/whoami.d.ts +12 -0
  12. package/dist/commands/auth/whoami.d.ts.map +1 -0
  13. package/dist/commands/auth/whoami.js +76 -0
  14. package/dist/commands/auth/whoami.js.map +1 -0
  15. package/dist/commands/data/create.d.ts +17 -0
  16. package/dist/commands/data/create.d.ts.map +1 -0
  17. package/dist/commands/data/create.js +106 -0
  18. package/dist/commands/data/create.js.map +1 -0
  19. package/dist/commands/data/delete.d.ts +16 -0
  20. package/dist/commands/data/delete.d.ts.map +1 -0
  21. package/dist/commands/data/delete.js +78 -0
  22. package/dist/commands/data/delete.js.map +1 -0
  23. package/dist/commands/data/get.d.ts +16 -0
  24. package/dist/commands/data/get.d.ts.map +1 -0
  25. package/dist/commands/data/get.js +79 -0
  26. package/dist/commands/data/get.js.map +1 -0
  27. package/dist/commands/data/query.d.ts +20 -0
  28. package/dist/commands/data/query.d.ts.map +1 -0
  29. package/dist/commands/data/query.js +118 -0
  30. package/dist/commands/data/query.js.map +1 -0
  31. package/dist/commands/data/update.d.ts +18 -0
  32. package/dist/commands/data/update.d.ts.map +1 -0
  33. package/dist/commands/data/update.js +110 -0
  34. package/dist/commands/data/update.js.map +1 -0
  35. package/dist/commands/meta/delete.d.ts +16 -0
  36. package/dist/commands/meta/delete.d.ts.map +1 -0
  37. package/dist/commands/meta/delete.js +73 -0
  38. package/dist/commands/meta/delete.js.map +1 -0
  39. package/dist/commands/meta/get.d.ts +16 -0
  40. package/dist/commands/meta/get.d.ts.map +1 -0
  41. package/dist/commands/meta/get.js +65 -0
  42. package/dist/commands/meta/get.js.map +1 -0
  43. package/dist/commands/meta/list.d.ts +15 -0
  44. package/dist/commands/meta/list.d.ts.map +1 -0
  45. package/dist/commands/meta/list.js +103 -0
  46. package/dist/commands/meta/list.js.map +1 -0
  47. package/dist/commands/meta/register.d.ts +16 -0
  48. package/dist/commands/meta/register.d.ts.map +1 -0
  49. package/dist/commands/meta/register.js +89 -0
  50. package/dist/commands/meta/register.js.map +1 -0
  51. package/dist/commands/serve.d.ts.map +1 -1
  52. package/dist/commands/serve.js +33 -0
  53. package/dist/commands/serve.js.map +1 -1
  54. package/dist/utils/api-client.d.ts +42 -0
  55. package/dist/utils/api-client.d.ts.map +1 -0
  56. package/dist/utils/api-client.js +53 -0
  57. package/dist/utils/api-client.js.map +1 -0
  58. package/dist/utils/auth-config.d.ts +50 -0
  59. package/dist/utils/auth-config.d.ts.map +1 -0
  60. package/dist/utils/auth-config.js +73 -0
  61. package/dist/utils/auth-config.js.map +1 -0
  62. package/dist/utils/output-formatter.d.ts +9 -0
  63. package/dist/utils/output-formatter.d.ts.map +1 -0
  64. package/dist/utils/output-formatter.js +80 -0
  65. package/dist/utils/output-formatter.js.map +1 -0
  66. package/package.json +17 -12
  67. package/src/commands/auth/login.ts +188 -0
  68. package/src/commands/auth/logout.ts +51 -0
  69. package/src/commands/auth/whoami.ts +85 -0
  70. package/src/commands/data/create.ts +110 -0
  71. package/src/commands/data/delete.ts +84 -0
  72. package/src/commands/data/get.ts +84 -0
  73. package/src/commands/data/query.ts +127 -0
  74. package/src/commands/data/update.ts +114 -0
  75. package/src/commands/meta/delete.ts +79 -0
  76. package/src/commands/meta/get.ts +73 -0
  77. package/src/commands/meta/list.ts +105 -0
  78. package/src/commands/meta/register.ts +97 -0
  79. package/src/commands/serve.ts +38 -0
  80. package/src/utils/api-client.ts +88 -0
  81. package/src/utils/auth-config.ts +107 -0
  82. package/src/utils/output-formatter.ts +91 -0
  83. package/test/remote-api-commands.test.ts +188 -0
  84. package/test/remote-api-utils.test.ts +196 -0
@@ -1,4 +1,4 @@
1
1
 
2
- > @objectstack/cli@4.0.0 build /home/runner/work/spec/spec/packages/cli
2
+ > @objectstack/cli@4.0.2 build /home/runner/work/framework/framework/packages/cli
3
3
  > tsc -p tsconfig.build.json
4
4
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @objectstack/cli
2
2
 
3
+ ## 4.0.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 5f659e9: fix ai
8
+ - Updated dependencies [5f659e9]
9
+ - @objectstack/plugin-hono-server@4.0.2
10
+ - @objectstack/driver-memory@4.0.2
11
+ - @objectstack/service-ai@4.0.2
12
+ - @objectstack/client@4.0.2
13
+ - @objectstack/spec@4.0.2
14
+ - @objectstack/core@4.0.2
15
+ - @objectstack/objectql@4.0.2
16
+ - @objectstack/plugin-setup@4.0.2
17
+ - @objectstack/rest@4.0.2
18
+ - @objectstack/runtime@4.0.2
19
+
3
20
  ## 4.0.0
4
21
 
5
22
  ### Patch Changes
@@ -0,0 +1,13 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class AuthLogin extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ url: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
7
+ email: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ password: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ };
11
+ run(): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AA+D7C,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,OAAgB,WAAW,SAAgD;IAE3E,OAAgB,QAAQ,WAItB;IAEF,OAAgB,KAAK;;;;;MAkBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA6F3B"}
@@ -0,0 +1,167 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ import { Command, Flags } from '@oclif/core';
3
+ import { printHeader, printSuccess, printError, printKV } from '../../utils/format.js';
4
+ import { writeAuthConfig } from '../../utils/auth-config.js';
5
+ import { ObjectStackClient } from '@objectstack/client';
6
+ import * as readline from 'node:readline/promises';
7
+ import { stdin as input, stdout as output } from 'node:process';
8
+ /**
9
+ * Prompt for a password with masked input (shows * per character).
10
+ * Falls back to plain readline.question() in non-TTY environments.
11
+ */
12
+ async function promptPassword(promptText) {
13
+ if (!process.stdin.isTTY) {
14
+ const rl = readline.createInterface({ input, output });
15
+ const answer = await rl.question(promptText);
16
+ rl.close();
17
+ return answer;
18
+ }
19
+ return new Promise((resolve) => {
20
+ const chars = [];
21
+ process.stdout.write(promptText);
22
+ process.stdin.setRawMode(true);
23
+ process.stdin.resume();
24
+ process.stdin.setEncoding('utf8');
25
+ const cleanup = () => {
26
+ process.stdin.setRawMode(false);
27
+ process.stdin.pause();
28
+ process.stdin.removeListener('data', handler);
29
+ process.stdout.write('\n');
30
+ };
31
+ const handler = (char) => {
32
+ switch (char) {
33
+ case '\u0003': // Ctrl+C
34
+ cleanup();
35
+ process.kill(process.pid, 'SIGINT');
36
+ break;
37
+ case '\r':
38
+ case '\n': // Enter
39
+ cleanup();
40
+ resolve(chars.join(''));
41
+ break;
42
+ case '\u007f': // Backspace
43
+ if (chars.length > 0) {
44
+ chars.pop();
45
+ process.stdout.clearLine(0);
46
+ process.stdout.cursorTo(0);
47
+ process.stdout.write(promptText + '*'.repeat(chars.length));
48
+ }
49
+ break;
50
+ default:
51
+ chars.push(char);
52
+ process.stdout.write('*');
53
+ break;
54
+ }
55
+ };
56
+ process.stdin.on('data', handler);
57
+ });
58
+ }
59
+ export default class AuthLogin extends Command {
60
+ static description = 'Authenticate and store session credentials';
61
+ static examples = [
62
+ '$ os auth login',
63
+ '$ os auth login --url https://api.example.com',
64
+ '$ os auth login --email user@example.com --password mypassword',
65
+ ];
66
+ static flags = {
67
+ url: Flags.string({
68
+ char: 'u',
69
+ description: 'Server URL',
70
+ default: 'http://localhost:3000',
71
+ env: 'OBJECTSTACK_URL',
72
+ }),
73
+ email: Flags.string({
74
+ char: 'e',
75
+ description: 'Email address',
76
+ }),
77
+ password: Flags.string({
78
+ char: 'p',
79
+ description: 'Password',
80
+ }),
81
+ json: Flags.boolean({
82
+ description: 'Output as JSON',
83
+ }),
84
+ };
85
+ async run() {
86
+ const { flags } = await this.parse(AuthLogin);
87
+ try {
88
+ if (!flags.json) {
89
+ printHeader('ObjectStack Login');
90
+ printKV('Server', flags.url);
91
+ console.log('');
92
+ }
93
+ // Prompt for credentials if not provided
94
+ let email = flags.email;
95
+ let password = flags.password;
96
+ if (!email || !password) {
97
+ const rl = readline.createInterface({ input, output });
98
+ if (!email) {
99
+ email = await rl.question('Email: ');
100
+ }
101
+ rl.close();
102
+ if (!password) {
103
+ password = await promptPassword('Password: ');
104
+ }
105
+ }
106
+ if (!email || !password) {
107
+ throw new Error('Email and password are required');
108
+ }
109
+ // Create client and authenticate
110
+ const client = new ObjectStackClient({
111
+ baseUrl: flags.url,
112
+ });
113
+ const response = await client.auth.login({
114
+ type: 'email',
115
+ email,
116
+ password,
117
+ });
118
+ // Check if login was successful
119
+ if (!response.data?.token && !response.data?.user) {
120
+ throw new Error('Login failed: Invalid response from server');
121
+ }
122
+ // Extract token - it might be in different locations depending on the auth system
123
+ const token = response.data?.token || response.token;
124
+ const user = response.data?.user;
125
+ if (!token) {
126
+ throw new Error('Login failed: No token received from server');
127
+ }
128
+ // Store credentials
129
+ await writeAuthConfig({
130
+ url: flags.url,
131
+ token,
132
+ email: user?.email || email,
133
+ userId: user?.id,
134
+ createdAt: new Date().toISOString(),
135
+ });
136
+ if (flags.json) {
137
+ console.log(JSON.stringify({
138
+ success: true,
139
+ email: user?.email || email,
140
+ userId: user?.id,
141
+ }, null, 2));
142
+ }
143
+ else {
144
+ printSuccess('Authentication successful');
145
+ printKV('Email', user?.email || email);
146
+ if (user?.id) {
147
+ printKV('User ID', user.id);
148
+ }
149
+ console.log('');
150
+ console.log(' Credentials stored in ~/.objectstack/credentials.json');
151
+ console.log('');
152
+ }
153
+ }
154
+ catch (error) {
155
+ if (flags.json) {
156
+ console.log(JSON.stringify({
157
+ success: false,
158
+ error: error.message,
159
+ }, null, 2));
160
+ this.exit(1);
161
+ }
162
+ printError(error.message || String(error));
163
+ this.exit(1);
164
+ }
165
+ }
166
+ }
167
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAEhE;;;GAGG;AACH,KAAK,UAAU,cAAc,CAAC,UAAkB;IAC9C,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC7C,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAElC,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE;YAC/B,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,QAAQ,EAAE,SAAS;oBACtB,OAAO,EAAE,CAAC;oBACV,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;oBACpC,MAAM;gBACR,KAAK,IAAI,CAAC;gBACV,KAAK,IAAI,EAAE,QAAQ;oBACjB,OAAO,EAAE,CAAC;oBACV,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;oBACxB,MAAM;gBACR,KAAK,QAAQ,EAAE,YAAY;oBACzB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACrB,KAAK,CAAC,GAAG,EAAE,CAAC;wBACZ,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;wBAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;wBAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC9D,CAAC;oBACD,MAAM;gBACR;oBACE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAC1B,MAAM;YACV,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IAC5C,MAAM,CAAU,WAAW,GAAG,4CAA4C,CAAC;IAE3E,MAAM,CAAU,QAAQ,GAAG;QACzB,iBAAiB;QACjB,+CAA+C;QAC/C,gEAAgE;KACjE,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC;YAChB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,YAAY;YACzB,OAAO,EAAE,uBAAuB;YAChC,GAAG,EAAE,iBAAiB;SACvB,CAAC;QACF,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,eAAe;SAC7B,CAAC;QACF,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;YACrB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,UAAU;SACxB,CAAC;QACF,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;YAClB,WAAW,EAAE,gBAAgB;SAC9B,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAE9C,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChB,WAAW,CAAC,mBAAmB,CAAC,CAAC;gBACjC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;YAED,yCAAyC;YACzC,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YACxB,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;YAE9B,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACxB,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBAEvD,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACvC,CAAC;gBAED,EAAE,CAAC,KAAK,EAAE,CAAC;gBAEX,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,QAAQ,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;YAED,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,CAAC;YAED,iCAAiC;YACjC,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC;gBACnC,OAAO,EAAE,KAAK,CAAC,GAAG;aACnB,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;gBACvC,IAAI,EAAE,OAAO;gBACb,KAAK;gBACL,QAAQ;aACT,CAAC,CAAC;YAEH,gCAAgC;YAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;gBAClD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAChE,CAAC;YAED,kFAAkF;YAClF,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,IAAK,QAAgB,CAAC,KAAK,CAAC;YAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;YAEjC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,CAAC;YAED,oBAAoB;YACpB,MAAM,eAAe,CAAC;gBACpB,GAAG,EAAE,KAAK,CAAC,GAAG;gBACd,KAAK;gBACL,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK;gBAC3B,MAAM,EAAE,IAAI,EAAE,EAAE;gBAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC,CAAC;YAEH,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACzB,OAAO,EAAE,IAAI;oBACb,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK;oBAC3B,MAAM,EAAE,IAAI,EAAE,EAAE;iBACjB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,2BAA2B,CAAC,CAAC;gBAC1C,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC,CAAC;gBACvC,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC;oBACb,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC9B,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;gBACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACzB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,KAAK,CAAC,OAAO;iBACrB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACb,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;YACD,UAAU,CAAC,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;IACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class AuthLogout extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ };
8
+ run(): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAI7C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,OAAgB,WAAW,SAA6C;IAExE,OAAgB,QAAQ,WAEtB;IAEF,OAAgB,KAAK;;MAInB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+B3B"}
@@ -0,0 +1,46 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ import { Command, Flags } from '@oclif/core';
3
+ import { printHeader, printSuccess, printError } from '../../utils/format.js';
4
+ import { deleteAuthConfig } from '../../utils/auth-config.js';
5
+ export default class AuthLogout extends Command {
6
+ static description = 'Clear stored authentication credentials';
7
+ static examples = [
8
+ '$ os auth logout',
9
+ ];
10
+ static flags = {
11
+ json: Flags.boolean({
12
+ description: 'Output as JSON',
13
+ }),
14
+ };
15
+ async run() {
16
+ const { flags } = await this.parse(AuthLogout);
17
+ try {
18
+ if (!flags.json) {
19
+ printHeader('ObjectStack Logout');
20
+ }
21
+ await deleteAuthConfig();
22
+ if (flags.json) {
23
+ console.log(JSON.stringify({
24
+ success: true,
25
+ message: 'Credentials cleared',
26
+ }, null, 2));
27
+ }
28
+ else {
29
+ printSuccess('Credentials cleared');
30
+ console.log('');
31
+ }
32
+ }
33
+ catch (error) {
34
+ if (flags.json) {
35
+ console.log(JSON.stringify({
36
+ success: false,
37
+ error: error.message,
38
+ }, null, 2));
39
+ this.exit(1);
40
+ }
41
+ printError(error.message || String(error));
42
+ this.exit(1);
43
+ }
44
+ }
45
+ }
46
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,MAAM,CAAU,WAAW,GAAG,yCAAyC,CAAC;IAExE,MAAM,CAAU,QAAQ,GAAG;QACzB,kBAAkB;KACnB,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACtB,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;YAClB,WAAW,EAAE,gBAAgB;SAC9B,CAAC;KACH,CAAC;IAEF,KAAK,CAAC,GAAG;QACP,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE/C,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBAChB,WAAW,CAAC,oBAAoB,CAAC,CAAC;YACpC,CAAC;YAED,MAAM,gBAAgB,EAAE,CAAC;YAEzB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACzB,OAAO,EAAE,IAAI;oBACb,OAAO,EAAE,qBAAqB;iBAC/B,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,qBAAqB,CAAC,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;oBACzB,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,KAAK,CAAC,OAAO;iBACrB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACb,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACf,CAAC;YACD,UAAU,CAAC,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;IACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class AuthWhoami extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ url: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
7
+ token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
9
+ };
10
+ run(): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=whoami.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/whoami.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAS,MAAM,aAAa,CAAC;AAK7C,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,OAAgB,WAAW,SAAsC;IAEjE,OAAgB,QAAQ,WAItB;IAEF,OAAgB,KAAK;;;;MAiBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAiD3B"}
@@ -0,0 +1,76 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ import { Command, Flags } from '@oclif/core';
3
+ import { printHeader, printError, printKV } from '../../utils/format.js';
4
+ import { createApiClient, requireAuth } from '../../utils/api-client.js';
5
+ import { formatOutput } from '../../utils/output-formatter.js';
6
+ export default class AuthWhoami extends Command {
7
+ static description = 'Show current session information';
8
+ static examples = [
9
+ '$ os auth whoami',
10
+ '$ os auth whoami --format json',
11
+ '$ os auth whoami --url https://api.example.com --token <token>',
12
+ ];
13
+ static flags = {
14
+ url: Flags.string({
15
+ char: 'u',
16
+ description: 'Server URL',
17
+ env: 'OBJECTSTACK_URL',
18
+ }),
19
+ token: Flags.string({
20
+ char: 't',
21
+ description: 'Authentication token',
22
+ env: 'OBJECTSTACK_TOKEN',
23
+ }),
24
+ format: Flags.string({
25
+ char: 'f',
26
+ description: 'Output format',
27
+ options: ['json', 'table', 'yaml'],
28
+ default: 'table',
29
+ }),
30
+ };
31
+ async run() {
32
+ const { flags } = await this.parse(AuthWhoami);
33
+ try {
34
+ const { client, token } = await createApiClient({
35
+ url: flags.url,
36
+ token: flags.token,
37
+ });
38
+ requireAuth(token);
39
+ // Check if we have a token
40
+ // Get current session info
41
+ const response = await client.auth.me();
42
+ const sessionData = response.data || response;
43
+ if (flags.format === 'json') {
44
+ formatOutput(sessionData, 'json');
45
+ }
46
+ else if (flags.format === 'yaml') {
47
+ formatOutput(sessionData, 'yaml');
48
+ }
49
+ else {
50
+ printHeader('Current Session');
51
+ if (sessionData.user) {
52
+ printKV('User ID', sessionData.user.id || '-');
53
+ printKV('Email', sessionData.user.email || '-');
54
+ printKV('Name', sessionData.user.name || '-');
55
+ }
56
+ if (sessionData.session) {
57
+ printKV('Session ID', sessionData.session.id || '-');
58
+ printKV('Expires At', sessionData.session.expiresAt || '-');
59
+ }
60
+ console.log('');
61
+ }
62
+ }
63
+ catch (error) {
64
+ if (flags.format === 'json') {
65
+ console.log(JSON.stringify({
66
+ success: false,
67
+ error: error.message,
68
+ }, null, 2));
69
+ this.exit(1);
70
+ }
71
+ printError(error.message || String(error));
72
+ this.exit(1);
73
+ }
74
+ }
75
+ }
76
+ //# sourceMappingURL=whoami.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../../src/commands/auth/whoami.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DataCreate extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ object: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ data: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ url: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ data: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
13
+ format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
14
+ };
15
+ run(): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/data/create.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAKnD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,OAAgB,WAAW,SAAyB;IAEpD,OAAgB,QAAQ,WAItB;IAEF,OAAgB,IAAI;;;MAQlB;IAEF,OAAgB,KAAK;;;;;MAqBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA4D3B"}
@@ -0,0 +1,106 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ import { Args, Command, Flags } from '@oclif/core';
3
+ import { printError, printSuccess } from '../../utils/format.js';
4
+ import { createApiClient, requireAuth } from '../../utils/api-client.js';
5
+ import { formatOutput } from '../../utils/output-formatter.js';
6
+ export default class DataCreate extends Command {
7
+ static description = 'Create a new record';
8
+ static examples = [
9
+ '$ os data create project_task \'{"name":"New Task","status":"open"}\'',
10
+ '$ os data create project_task --data task-data.json',
11
+ '$ os data create project_task --data task-data.json --format json',
12
+ ];
13
+ static args = {
14
+ object: Args.string({
15
+ description: 'Object name (snake_case)',
16
+ required: true,
17
+ }),
18
+ data: Args.string({
19
+ description: 'Record data as JSON string (or use --data flag for file)',
20
+ }),
21
+ };
22
+ static flags = {
23
+ url: Flags.string({
24
+ char: 'u',
25
+ description: 'Server URL',
26
+ env: 'OBJECTSTACK_URL',
27
+ }),
28
+ token: Flags.string({
29
+ char: 't',
30
+ description: 'Authentication token',
31
+ env: 'OBJECTSTACK_TOKEN',
32
+ }),
33
+ data: Flags.string({
34
+ char: 'd',
35
+ description: 'Path to JSON file containing record data',
36
+ }),
37
+ format: Flags.string({
38
+ char: 'f',
39
+ description: 'Output format',
40
+ options: ['json', 'table', 'yaml'],
41
+ default: 'table',
42
+ }),
43
+ };
44
+ async run() {
45
+ const { args, flags } = await this.parse(DataCreate);
46
+ try {
47
+ const { client, token } = await createApiClient({
48
+ url: flags.url,
49
+ token: flags.token,
50
+ });
51
+ requireAuth(token);
52
+ // Parse record data
53
+ let recordData;
54
+ if (flags.data) {
55
+ // Read from file
56
+ const { readFile } = await import('node:fs/promises');
57
+ const fileContent = await readFile(flags.data, 'utf-8');
58
+ try {
59
+ recordData = JSON.parse(fileContent);
60
+ }
61
+ catch (e) {
62
+ throw new Error(`Invalid JSON in file: ${e.message}`);
63
+ }
64
+ }
65
+ else if (args.data) {
66
+ // Parse from argument
67
+ try {
68
+ recordData = JSON.parse(args.data);
69
+ }
70
+ catch (e) {
71
+ throw new Error(`Invalid JSON: ${e.message}`);
72
+ }
73
+ }
74
+ else {
75
+ throw new Error('Record data is required (provide JSON string or use --data flag)');
76
+ }
77
+ // Create the record
78
+ const result = await client.data.create(args.object, recordData);
79
+ if (flags.format === 'json') {
80
+ formatOutput(result, 'json');
81
+ }
82
+ else if (flags.format === 'yaml') {
83
+ formatOutput(result, 'yaml');
84
+ }
85
+ else {
86
+ printSuccess(`Record created: ${result.id}`);
87
+ if (result.record) {
88
+ console.log('');
89
+ formatOutput(result.record, 'table');
90
+ }
91
+ }
92
+ }
93
+ catch (error) {
94
+ if (flags.format === 'json') {
95
+ console.log(JSON.stringify({
96
+ success: false,
97
+ error: error.message,
98
+ }, null, 2));
99
+ this.exit(1);
100
+ }
101
+ printError(error.message || String(error));
102
+ this.exit(1);
103
+ }
104
+ }
105
+ }
106
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/data/create.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class DataDelete extends Command {
3
+ static description: string;
4
+ static examples: string[];
5
+ static args: {
6
+ object: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
7
+ id: import("@oclif/core/interfaces").Arg<string, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ url: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ token: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
12
+ format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
13
+ };
14
+ run(): Promise<void>;
15
+ }
16
+ //# sourceMappingURL=delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../src/commands/data/delete.ts"],"names":[],"mappings":"AAEA,OAAO,EAAQ,OAAO,EAAS,MAAM,aAAa,CAAC;AAKnD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,OAAO;IAC7C,OAAgB,WAAW,SAAqB;IAEhD,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,IAAI;;;MASlB;IAEF,OAAgB,KAAK;;;;MAiBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAsC3B"}
@@ -0,0 +1,78 @@
1
+ // Copyright (c) 2025 ObjectStack. Licensed under the Apache-2.0 license.
2
+ import { Args, Command, Flags } from '@oclif/core';
3
+ import { printError, printSuccess } from '../../utils/format.js';
4
+ import { createApiClient, requireAuth } from '../../utils/api-client.js';
5
+ import { formatOutput } from '../../utils/output-formatter.js';
6
+ export default class DataDelete extends Command {
7
+ static description = 'Delete a record';
8
+ static examples = [
9
+ '$ os data delete project_task abc123',
10
+ '$ os data delete project_task abc123 --format json',
11
+ ];
12
+ static args = {
13
+ object: Args.string({
14
+ description: 'Object name (snake_case)',
15
+ required: true,
16
+ }),
17
+ id: Args.string({
18
+ description: 'Record ID',
19
+ required: true,
20
+ }),
21
+ };
22
+ static flags = {
23
+ url: Flags.string({
24
+ char: 'u',
25
+ description: 'Server URL',
26
+ env: 'OBJECTSTACK_URL',
27
+ }),
28
+ token: Flags.string({
29
+ char: 't',
30
+ description: 'Authentication token',
31
+ env: 'OBJECTSTACK_TOKEN',
32
+ }),
33
+ format: Flags.string({
34
+ char: 'f',
35
+ description: 'Output format',
36
+ options: ['json', 'table', 'yaml'],
37
+ default: 'table',
38
+ }),
39
+ };
40
+ async run() {
41
+ const { args, flags } = await this.parse(DataDelete);
42
+ try {
43
+ const { client, token } = await createApiClient({
44
+ url: flags.url,
45
+ token: flags.token,
46
+ });
47
+ requireAuth(token);
48
+ // Delete the record
49
+ const result = await client.data.delete(args.object, args.id);
50
+ if (flags.format === 'json') {
51
+ console.log(JSON.stringify({
52
+ success: true,
53
+ object: result.object,
54
+ id: result.id,
55
+ deleted: result.deleted,
56
+ }, null, 2));
57
+ }
58
+ else if (flags.format === 'yaml') {
59
+ formatOutput({ success: true, object: result.object, id: result.id, deleted: result.deleted }, 'yaml');
60
+ }
61
+ else {
62
+ printSuccess(`Record deleted: ${result.id}`);
63
+ }
64
+ }
65
+ catch (error) {
66
+ if (flags.format === 'json') {
67
+ console.log(JSON.stringify({
68
+ success: false,
69
+ error: error.message,
70
+ }, null, 2));
71
+ this.exit(1);
72
+ }
73
+ printError(error.message || String(error));
74
+ this.exit(1);
75
+ }
76
+ }
77
+ }
78
+ //# sourceMappingURL=delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../src/commands/data/delete.ts"],"names":[],"mappings":"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"}