@agendapanda/cli 0.1.0

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 (40) hide show
  1. package/dist/bin/ap.d.ts +2 -0
  2. package/dist/bin/ap.js +21 -0
  3. package/dist/bin/ap.js.map +1 -0
  4. package/dist/src/commands/auth.d.ts +2 -0
  5. package/dist/src/commands/auth.js +219 -0
  6. package/dist/src/commands/auth.js.map +1 -0
  7. package/dist/src/commands/calendar.d.ts +2 -0
  8. package/dist/src/commands/calendar.js +207 -0
  9. package/dist/src/commands/calendar.js.map +1 -0
  10. package/dist/src/commands/connections.d.ts +2 -0
  11. package/dist/src/commands/connections.js +198 -0
  12. package/dist/src/commands/connections.js.map +1 -0
  13. package/dist/src/commands/media.d.ts +2 -0
  14. package/dist/src/commands/media.js +44 -0
  15. package/dist/src/commands/media.js.map +1 -0
  16. package/dist/src/commands/post.d.ts +2 -0
  17. package/dist/src/commands/post.js +271 -0
  18. package/dist/src/commands/post.js.map +1 -0
  19. package/dist/src/commands/projects.d.ts +2 -0
  20. package/dist/src/commands/projects.js +66 -0
  21. package/dist/src/commands/projects.js.map +1 -0
  22. package/dist/src/index.d.ts +3 -0
  23. package/dist/src/index.js +38 -0
  24. package/dist/src/index.js.map +1 -0
  25. package/dist/src/lib/api.d.ts +13 -0
  26. package/dist/src/lib/api.js +106 -0
  27. package/dist/src/lib/api.js.map +1 -0
  28. package/dist/src/lib/config.d.ts +8 -0
  29. package/dist/src/lib/config.js +34 -0
  30. package/dist/src/lib/config.js.map +1 -0
  31. package/dist/src/lib/input.d.ts +1 -0
  32. package/dist/src/lib/input.js +10 -0
  33. package/dist/src/lib/input.js.map +1 -0
  34. package/dist/src/lib/output.d.ts +26 -0
  35. package/dist/src/lib/output.js +74 -0
  36. package/dist/src/lib/output.js.map +1 -0
  37. package/dist/src/types.d.ts +86 -0
  38. package/dist/src/types.js +3 -0
  39. package/dist/src/types.js.map +1 -0
  40. package/package.json +30 -0
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/bin/ap.js ADDED
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+ import { CommanderError } from 'commander';
3
+ import { program, earlyJsonMode } from '../src/index.js';
4
+ import { outputError } from '../src/lib/output.js';
5
+ try {
6
+ await program.parseAsync();
7
+ }
8
+ catch (err) {
9
+ if (err instanceof CommanderError) {
10
+ // In non-JSON mode, Commander already prints human-readable help/errors.
11
+ // In JSON mode, stderr output is suppressed in index.ts and we emit JSON here.
12
+ if (err.exitCode !== 0 && earlyJsonMode) {
13
+ outputError(err.message, err.code);
14
+ }
15
+ process.exitCode = err.exitCode;
16
+ }
17
+ else {
18
+ throw err;
19
+ }
20
+ }
21
+ //# sourceMappingURL=ap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ap.js","sourceRoot":"","sources":["../../bin/ap.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,IAAI,CAAC;IACJ,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;AAC5B,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACd,IAAI,GAAG,YAAY,cAAc,EAAE,CAAC;QACnC,yEAAyE;QACzE,+EAA+E;QAC/E,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,aAAa,EAAE,CAAC;YACzC,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IACjC,CAAC;SAAM,CAAC;QACP,MAAM,GAAG,CAAC;IACX,CAAC;AACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerAuthCommands(program: Command): void;
@@ -0,0 +1,219 @@
1
+ import chalk from 'chalk';
2
+ import { api, ApiError } from '../lib/api.js';
3
+ import { getApiKey, setApiKey, clearConfig, getConfigPath, getActiveProject, } from '../lib/config.js';
4
+ import { initJsonMode, isJsonMode, outputJson, outputTable, outputError, outputItems, outputMutation, } from '../lib/output.js';
5
+ export function registerAuthCommands(program) {
6
+ const auth = program.command('auth').description('Authentication and API key management');
7
+ // ap auth login
8
+ auth
9
+ .command('login')
10
+ .description('Store API key for authentication')
11
+ .option('--key <key>', 'API key (or set AP_API_KEY env var)')
12
+ .action(async (options) => {
13
+ initJsonMode({});
14
+ try {
15
+ let key = options.key;
16
+ if (!key) {
17
+ if (!process.stdin.isTTY) {
18
+ outputError('No --key provided and stdin is not interactive', 'MISSING_KEY');
19
+ process.exit(1);
20
+ }
21
+ // Simple prompt
22
+ const readline = await import('readline');
23
+ const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
24
+ key = await new Promise((resolve) => {
25
+ rl.question('Enter your API key: ', (answer) => {
26
+ rl.close();
27
+ resolve(answer.trim());
28
+ });
29
+ });
30
+ }
31
+ if (!key || !key.startsWith('ap_')) {
32
+ outputError('Invalid API key format. Keys start with "ap_"', 'INVALID_KEY');
33
+ process.exit(1);
34
+ }
35
+ // Validate key against API
36
+ // Temporarily use this key for the validation request
37
+ const originalKey = getApiKey();
38
+ setApiKey(key);
39
+ try {
40
+ const me = await api.get('/api/auth/me');
41
+ if (process.stdout.isTTY) {
42
+ console.log(chalk.green('✓') + ` Authenticated as ${chalk.bold(me.user.name)} (${me.user.email})`);
43
+ console.log(chalk.dim(`API key stored at ${getConfigPath()}`));
44
+ console.log(chalk.dim('For agent workflows, prefer using the AP_API_KEY environment variable.'));
45
+ }
46
+ else {
47
+ outputJson({ success: true, item: me.user });
48
+ }
49
+ }
50
+ catch (err) {
51
+ // Restore original key on failure
52
+ if (originalKey) {
53
+ setApiKey(originalKey);
54
+ }
55
+ else {
56
+ setApiKey('');
57
+ }
58
+ throw err;
59
+ }
60
+ }
61
+ catch (err) {
62
+ if (err instanceof ApiError) {
63
+ outputError(err.message, err.code);
64
+ }
65
+ else {
66
+ outputError(String(err));
67
+ }
68
+ process.exit(1);
69
+ }
70
+ });
71
+ // ap auth logout
72
+ auth
73
+ .command('logout')
74
+ .description('Clear stored API key and active project')
75
+ .action(() => {
76
+ initJsonMode({});
77
+ clearConfig();
78
+ if (process.stdout.isTTY) {
79
+ console.log(chalk.green('✓') + ' Logged out. Cleared API key and active project.');
80
+ }
81
+ else {
82
+ outputJson({ success: true });
83
+ }
84
+ });
85
+ // ap auth status
86
+ auth
87
+ .command('status')
88
+ .description('Show current user info and active project')
89
+ .option('--json', 'Output as JSON')
90
+ .action(async (options) => {
91
+ initJsonMode(options);
92
+ try {
93
+ const me = await api.get('/api/auth/me');
94
+ if (isJsonMode(options)) {
95
+ outputJson({
96
+ user: me.user,
97
+ active_projects_count: me.active_projects_count,
98
+ active_project: getActiveProject() || null,
99
+ });
100
+ }
101
+ else {
102
+ console.log(chalk.bold('User:'));
103
+ console.log(` Name: ${me.user.name}`);
104
+ console.log(` Email: ${me.user.email}`);
105
+ console.log(` Plan: ${me.user.plan}`);
106
+ console.log(` Projects: ${me.active_projects_count}`);
107
+ const proj = getActiveProject();
108
+ if (proj) {
109
+ console.log(` Active project: ${proj}`);
110
+ }
111
+ else {
112
+ console.log(chalk.dim(' No active project set. Run `ap projects use <id>`.'));
113
+ }
114
+ }
115
+ }
116
+ catch (err) {
117
+ if (err instanceof ApiError) {
118
+ outputError(err.message, err.code);
119
+ }
120
+ else {
121
+ outputError(String(err));
122
+ }
123
+ process.exit(1);
124
+ }
125
+ });
126
+ // ap auth api-keys
127
+ const apiKeys = auth.command('api-keys').description('Manage API keys');
128
+ // ap auth api-keys list
129
+ apiKeys
130
+ .command('list')
131
+ .description('List your API keys')
132
+ .option('--json', 'Output as JSON')
133
+ .action(async (options) => {
134
+ initJsonMode(options);
135
+ try {
136
+ const data = await api.get('/api/auth/api-keys');
137
+ if (isJsonMode(options)) {
138
+ outputItems(data.api_keys, options);
139
+ }
140
+ else {
141
+ outputTable(['ID', 'NAME', 'PREFIX', 'LAST USED', 'CREATED'], data.api_keys.map((k) => [
142
+ k.id,
143
+ k.name,
144
+ k.key_prefix,
145
+ k.last_used_at || 'never',
146
+ k.created_at,
147
+ ]));
148
+ }
149
+ }
150
+ catch (err) {
151
+ if (err instanceof ApiError) {
152
+ outputError(err.message, err.code);
153
+ }
154
+ else {
155
+ outputError(String(err));
156
+ }
157
+ process.exit(1);
158
+ }
159
+ });
160
+ // ap auth api-keys create
161
+ apiKeys
162
+ .command('create')
163
+ .description('Create a new API key')
164
+ .requiredOption('--name <name>', 'Name for the API key')
165
+ .action(async (options) => {
166
+ initJsonMode({});
167
+ try {
168
+ const data = await api.post('/api/auth/api-keys', {
169
+ name: options.name,
170
+ });
171
+ if (!process.stdout.isTTY) {
172
+ outputMutation(data.api_key, { json: true });
173
+ }
174
+ else {
175
+ console.log(chalk.green('✓') + ' API key created:');
176
+ console.log('');
177
+ console.log(` ${chalk.bold(data.api_key.key)}`);
178
+ console.log('');
179
+ console.log(chalk.yellow('Save this key - it won\'t be shown again.'));
180
+ console.log(chalk.dim(`To revoke: ap auth api-keys revoke ${data.api_key.id}`));
181
+ }
182
+ }
183
+ catch (err) {
184
+ if (err instanceof ApiError) {
185
+ outputError(err.message, err.code);
186
+ }
187
+ else {
188
+ outputError(String(err));
189
+ }
190
+ process.exit(1);
191
+ }
192
+ });
193
+ // ap auth api-keys revoke
194
+ apiKeys
195
+ .command('revoke <id>')
196
+ .description('Revoke an API key')
197
+ .action(async (id) => {
198
+ initJsonMode({});
199
+ try {
200
+ await api.delete(`/api/auth/api-keys/${id}`);
201
+ if (process.stdout.isTTY) {
202
+ console.log(chalk.green('✓') + ' API key revoked.');
203
+ }
204
+ else {
205
+ outputJson({ success: true });
206
+ }
207
+ }
208
+ catch (err) {
209
+ if (err instanceof ApiError) {
210
+ outputError(err.message, err.code);
211
+ }
212
+ else {
213
+ outputError(String(err));
214
+ }
215
+ process.exit(1);
216
+ }
217
+ });
218
+ }
219
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerCalendarCommands(program: Command): void;
@@ -0,0 +1,207 @@
1
+ import chalk from 'chalk';
2
+ import { readFile } from 'fs/promises';
3
+ import { createHash } from 'crypto';
4
+ import { api, ApiError } from '../lib/api.js';
5
+ import { getActiveProject } from '../lib/config.js';
6
+ import { initJsonMode, isJsonMode, outputJson, outputTable, outputError } from '../lib/output.js';
7
+ function computeIdempotencyKey(projectId, connectionId, content, scheduledAt) {
8
+ const normalized = [
9
+ projectId,
10
+ connectionId,
11
+ content.trim(),
12
+ new Date(scheduledAt).toISOString(),
13
+ ].join('|');
14
+ return createHash('sha256').update(normalized).digest('hex');
15
+ }
16
+ function matchesExistingPost(post, connectionId, content, scheduledAt) {
17
+ return (post.social_connection_id === connectionId &&
18
+ post.content.trim() === content.trim() &&
19
+ new Date(post.scheduled_at).toISOString() === new Date(scheduledAt).toISOString());
20
+ }
21
+ export function registerCalendarCommands(program) {
22
+ const calendar = program.command('calendar').description('Bulk content calendar operations');
23
+ // ap calendar import
24
+ calendar
25
+ .command('import')
26
+ .description('Import a content calendar from a JSON file')
27
+ .requiredOption('--file <path>', 'Path to JSON file with posts array')
28
+ .option('--project <id>', 'Override active project')
29
+ .option('--dry-run', 'Show what would be created without actually creating')
30
+ .option('--json', 'Output as JSON')
31
+ .action(async (options) => {
32
+ initJsonMode(options);
33
+ try {
34
+ // Resolve project
35
+ const projectId = options.project || getActiveProject();
36
+ if (!projectId) {
37
+ outputError('No project set. Use --project, AP_PROJECT env, or `ap projects use <id>`.', 'MISSING_PROJECT');
38
+ process.exit(1);
39
+ }
40
+ // Read and parse file
41
+ let items;
42
+ try {
43
+ const raw = await readFile(options.file, 'utf8');
44
+ items = JSON.parse(raw);
45
+ }
46
+ catch (err) {
47
+ outputError(`Failed to read/parse ${options.file}: ${err}`, 'INVALID_FILE');
48
+ process.exit(1);
49
+ }
50
+ if (!Array.isArray(items) || items.length === 0) {
51
+ outputError('File must contain a non-empty JSON array of posts', 'INVALID_FORMAT');
52
+ process.exit(1);
53
+ }
54
+ // Validate structure
55
+ for (let i = 0; i < items.length; i++) {
56
+ const item = items[i];
57
+ if (!item.content || !item.connection || !item.schedule) {
58
+ outputError(`Item ${i}: requires content, connection, and schedule fields`, 'INVALID_ITEM');
59
+ process.exit(1);
60
+ }
61
+ }
62
+ // Compute idempotency keys
63
+ const itemKeys = items.map((item) => ({
64
+ ...item,
65
+ key: item.idempotency_key || computeIdempotencyKey(projectId, item.connection, item.content, item.schedule),
66
+ }));
67
+ // Fetch existing posts to check for duplicates
68
+ const existingData = await api.get(`/api/projects/${projectId}/posts`);
69
+ const existingPosts = existingData.posts || [];
70
+ // Determine which items already exist, also dedup within the file
71
+ const results = [];
72
+ const toCreate = [];
73
+ const seenKeys = new Set();
74
+ for (let i = 0; i < itemKeys.length; i++) {
75
+ const item = itemKeys[i];
76
+ const alreadyExists = existingPosts.some((p) => matchesExistingPost(p, item.connection, item.content, item.schedule));
77
+ if (alreadyExists || seenKeys.has(item.key)) {
78
+ results.push({
79
+ status: 'skipped',
80
+ content: item.content.slice(0, 50),
81
+ connection: item.connection,
82
+ schedule: item.schedule,
83
+ });
84
+ }
85
+ else {
86
+ seenKeys.add(item.key);
87
+ toCreate.push({ ...item, index: i });
88
+ }
89
+ }
90
+ // Dry run: just show what would happen
91
+ if (options.dryRun) {
92
+ const dryResults = [
93
+ ...results,
94
+ ...toCreate.map((item) => ({
95
+ status: 'would_create',
96
+ content: item.content.slice(0, 50),
97
+ connection: item.connection,
98
+ schedule: item.schedule,
99
+ })),
100
+ ];
101
+ if (isJsonMode(options)) {
102
+ outputJson({
103
+ dry_run: true,
104
+ would_create: toCreate.length,
105
+ would_skip: results.length,
106
+ items: dryResults,
107
+ });
108
+ }
109
+ else {
110
+ console.log(chalk.bold('Dry run results:'));
111
+ console.log(` Would create: ${chalk.green(String(toCreate.length))}`);
112
+ console.log(` Would skip: ${chalk.yellow(String(results.length))} (already exist)`);
113
+ console.log('');
114
+ outputTable(['ACTION', 'CONTENT', 'SCHEDULE'], dryResults.map((r) => [
115
+ r.status === 'skipped' ? chalk.yellow('skip') : chalk.green('create'),
116
+ r.content.length > 40 ? r.content.slice(0, 37) + '...' : r.content,
117
+ r.schedule,
118
+ ]));
119
+ }
120
+ return;
121
+ }
122
+ // Process: upload images and create posts sequentially
123
+ let created = 0;
124
+ let failed = 0;
125
+ for (const item of toCreate) {
126
+ try {
127
+ // Upload image if present
128
+ let mediaUrl;
129
+ if (item.image) {
130
+ const imageData = await readFile(item.image);
131
+ const filename = item.image.split('/').pop() || 'image';
132
+ const blob = new Blob([imageData]);
133
+ const formData = new FormData();
134
+ formData.append('file', blob, filename);
135
+ const uploadResult = await api.upload('/api/media/upload', formData);
136
+ mediaUrl = uploadResult.url;
137
+ }
138
+ const scheduledAt = new Date(item.schedule).toISOString();
139
+ const data = await api.post(`/api/projects/${projectId}/posts`, {
140
+ content: item.content,
141
+ scheduled_at: scheduledAt,
142
+ social_connection_id: item.connection,
143
+ media_url: mediaUrl,
144
+ post_now: false,
145
+ });
146
+ results.push({
147
+ status: 'created',
148
+ content: item.content.slice(0, 50),
149
+ connection: item.connection,
150
+ schedule: scheduledAt,
151
+ post: data.post,
152
+ });
153
+ created++;
154
+ if (process.stdout.isTTY) {
155
+ process.stdout.write(`\r Creating posts: ${created + failed}/${toCreate.length}`);
156
+ }
157
+ }
158
+ catch (err) {
159
+ const msg = err instanceof ApiError ? err.message : String(err);
160
+ results.push({
161
+ status: 'failed',
162
+ content: item.content.slice(0, 50),
163
+ connection: item.connection,
164
+ schedule: item.schedule,
165
+ error: msg,
166
+ });
167
+ failed++;
168
+ }
169
+ }
170
+ if (process.stdout.isTTY) {
171
+ process.stdout.write('\n');
172
+ }
173
+ const skipped = results.filter((r) => r.status === 'skipped').length;
174
+ if (isJsonMode(options)) {
175
+ outputJson({
176
+ success: failed === 0,
177
+ created,
178
+ skipped,
179
+ failed,
180
+ items: results,
181
+ });
182
+ }
183
+ else {
184
+ console.log('');
185
+ console.log(chalk.bold('Calendar import complete:'));
186
+ console.log(` Created: ${chalk.green(String(created))}`);
187
+ console.log(` Skipped: ${chalk.yellow(String(skipped))} (already exist)`);
188
+ if (failed > 0) {
189
+ console.log(` Failed: ${chalk.red(String(failed))}`);
190
+ }
191
+ }
192
+ if (failed > 0) {
193
+ process.exit(1);
194
+ }
195
+ }
196
+ catch (err) {
197
+ if (err instanceof ApiError) {
198
+ outputError(err.message, err.code);
199
+ }
200
+ else {
201
+ outputError(String(err));
202
+ }
203
+ process.exit(1);
204
+ }
205
+ });
206
+ }
207
+ //# sourceMappingURL=calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../../src/commands/calendar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerConnectionsCommands(program: Command): void;