@agendapanda/cli 0.3.1 → 0.4.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.
- package/LICENSE +21 -0
- package/README.md +1 -1
- package/dist/bin/ap.js +32 -0
- package/dist/bin/ap.js.map +1 -1
- package/dist/src/commands/alias.d.ts +2 -0
- package/dist/src/commands/alias.js +84 -0
- package/dist/src/commands/alias.js.map +1 -0
- package/dist/src/commands/auth.d.ts +4 -0
- package/dist/src/commands/auth.js +224 -20
- package/dist/src/commands/auth.js.map +1 -1
- package/dist/src/commands/calendar.js +8 -3
- package/dist/src/commands/calendar.js.map +1 -1
- package/dist/src/commands/completion.d.ts +2 -0
- package/dist/src/commands/completion.js +197 -0
- package/dist/src/commands/completion.js.map +1 -0
- package/dist/src/commands/connections.js +171 -26
- package/dist/src/commands/connections.js.map +1 -1
- package/dist/src/commands/context.js +10 -2
- package/dist/src/commands/context.js.map +1 -1
- package/dist/src/commands/init.d.ts +2 -0
- package/dist/src/commands/init.js +249 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/post.js +253 -9
- package/dist/src/commands/post.js.map +1 -1
- package/dist/src/commands/projects.js +8 -2
- package/dist/src/commands/projects.js.map +1 -1
- package/dist/src/index.js +24 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/config.d.ts +18 -0
- package/dist/src/lib/config.js +48 -0
- package/dist/src/lib/config.js.map +1 -1
- package/dist/src/lib/errors.d.ts +4 -0
- package/dist/src/lib/errors.js +5 -0
- package/dist/src/lib/errors.js.map +1 -0
- package/dist/src/lib/platform-rules.js +2 -0
- package/dist/src/lib/platform-rules.js.map +1 -1
- package/dist/src/lib/poll.d.ts +11 -0
- package/dist/src/lib/poll.js +42 -0
- package/dist/src/lib/poll.js.map +1 -0
- package/dist/src/lib/update-check.d.ts +2 -0
- package/dist/src/lib/update-check.js +66 -0
- package/dist/src/lib/update-check.js.map +1 -0
- package/dist/src/lib/utils.d.ts +2 -0
- package/dist/src/lib/utils.js +27 -0
- package/dist/src/lib/utils.js.map +1 -0
- package/package.json +25 -2
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** Shared error message suffixes appended to contextual errors across commands. */
|
|
2
|
+
export const API_KEY_URL_SUFFIX = '\nGet your key at: agendapanda.com/settings?tab=security';
|
|
3
|
+
export const MISSING_PROJECT_MSG = 'No project set. Use --project, AP_PROJECT env, or `ap projects use <id>`.\nRun: ap projects list → ap projects use <id>';
|
|
4
|
+
export const MISSING_CONNECTION_SUFFIX = '\nRun: ap connections list to find your connection IDs';
|
|
5
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,MAAM,CAAC,MAAM,kBAAkB,GAAG,0DAA0D,CAAC;AAC7F,MAAM,CAAC,MAAM,mBAAmB,GAAG,2HAA2H,CAAC;AAC/J,MAAM,CAAC,MAAM,yBAAyB,GAAG,yDAAyD,CAAC"}
|
|
@@ -5,5 +5,7 @@ export const PLATFORM_RULES = {
|
|
|
5
5
|
facebook: { id: 'facebook', label: 'Facebook Pages', max_chars: 63206, media_required: false, media_support: 'image_and_video', media_formats: 'JPEG, PNG, GIF, WebP, MP4, MOV, WebM', notes: 'Pages only' },
|
|
6
6
|
instagram: { id: 'instagram', label: 'Instagram', max_chars: 2200, media_required: true, media_support: 'image_only', media_formats: 'JPEG, PNG, GIF, WebP', notes: 'Image required; no clickable links in captions' },
|
|
7
7
|
threads: { id: 'threads', label: 'Threads', max_chars: 500, media_required: false, media_support: 'image_and_video', media_formats: 'JPEG, PNG, GIF, WebP, MP4, MOV, WebM', notes: 'Text-first, conversational' },
|
|
8
|
+
bluesky: { id: 'bluesky', label: 'Bluesky', max_chars: 300, media_required: false, media_support: 'image_and_video', media_formats: 'JPEG, PNG, GIF, WebP, MP4', notes: 'Decentralized; 300 char limit; max 4 images or 1 video' },
|
|
9
|
+
tiktok: { id: 'tiktok', label: 'TikTok', max_chars: 2200, media_required: false, media_support: 'image_and_video', media_formats: 'MP4, WebM, MOV', notes: 'Video-first; direct post API' },
|
|
8
10
|
};
|
|
9
11
|
//# sourceMappingURL=platform-rules.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-rules.js","sourceRoot":"","sources":["../../../src/lib/platform-rules.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAY5D,MAAM,CAAC,MAAM,cAAc,GAAiC;IAC3D,OAAO,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,sCAAsC,EAAE,KAAK,EAAE,kBAAkB,EAAE;IAC3M,QAAQ,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,mBAAmB,EAAE,KAAK,EAAE,8BAA8B,EAAE;IACzL,QAAQ,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,sCAAsC,EAAE,KAAK,EAAE,YAAY,EAAE;IAC5M,SAAS,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,KAAK,EAAE,gDAAgD,EAAE;IACtN,OAAO,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,sCAAsC,EAAE,KAAK,EAAE,4BAA4B,EAAE;
|
|
1
|
+
{"version":3,"file":"platform-rules.js","sourceRoot":"","sources":["../../../src/lib/platform-rules.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAY5D,MAAM,CAAC,MAAM,cAAc,GAAiC;IAC3D,OAAO,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,sCAAsC,EAAE,KAAK,EAAE,kBAAkB,EAAE;IAC3M,QAAQ,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,mBAAmB,EAAE,KAAK,EAAE,8BAA8B,EAAE;IACzL,QAAQ,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,sCAAsC,EAAE,KAAK,EAAE,YAAY,EAAE;IAC5M,SAAS,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,KAAK,EAAE,gDAAgD,EAAE;IACtN,OAAO,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,sCAAsC,EAAE,KAAK,EAAE,4BAA4B,EAAE;IACjN,OAAO,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,2BAA2B,EAAE,KAAK,EAAE,wDAAwD,EAAE;IAClO,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,KAAK,EAAE,8BAA8B,EAAE;CAC3L,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Connection } from '../types.js';
|
|
2
|
+
interface PollResult {
|
|
3
|
+
connection: Connection | null;
|
|
4
|
+
cancelled: boolean;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Poll /api/connections every 2s for up to 60s waiting for a new connection
|
|
8
|
+
* on the given platform to appear. Handles Ctrl+C gracefully via SIGINT.
|
|
9
|
+
*/
|
|
10
|
+
export declare function pollForNewConnection(platform: string, existingIds: Set<string>): Promise<PollResult>;
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { api } from './api.js';
|
|
2
|
+
const POLL_TIMEOUT_MS = 60_000;
|
|
3
|
+
const POLL_INTERVAL_MS = 2_000;
|
|
4
|
+
function sleep(ms) {
|
|
5
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Poll /api/connections every 2s for up to 60s waiting for a new connection
|
|
9
|
+
* on the given platform to appear. Handles Ctrl+C gracefully via SIGINT.
|
|
10
|
+
*/
|
|
11
|
+
export async function pollForNewConnection(platform, existingIds) {
|
|
12
|
+
let cancelled = false;
|
|
13
|
+
let found = null;
|
|
14
|
+
const pollStart = Date.now();
|
|
15
|
+
const onSigint = () => {
|
|
16
|
+
cancelled = true;
|
|
17
|
+
};
|
|
18
|
+
process.on('SIGINT', onSigint);
|
|
19
|
+
try {
|
|
20
|
+
while (Date.now() - pollStart < POLL_TIMEOUT_MS && !cancelled) {
|
|
21
|
+
await sleep(POLL_INTERVAL_MS);
|
|
22
|
+
if (cancelled)
|
|
23
|
+
break;
|
|
24
|
+
try {
|
|
25
|
+
const after = await api.get('/api/connections');
|
|
26
|
+
const newConn = after.connections.find((c) => c.platform === platform && !existingIds.has(c.id));
|
|
27
|
+
if (newConn) {
|
|
28
|
+
found = newConn;
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// Ignore transient poll errors, keep trying
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
finally {
|
|
38
|
+
process.removeListener('SIGINT', onSigint);
|
|
39
|
+
}
|
|
40
|
+
return { connection: found, cancelled };
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=poll.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poll.js","sourceRoot":"","sources":["../../../src/lib/poll.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAQ/B,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAE/B,SAAS,KAAK,CAAC,EAAU;IACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,QAAgB,EAChB,WAAwB;IAExB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,KAAK,GAAsB,IAAI,CAAC;IACpC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,MAAM,QAAQ,GAAG,GAAG,EAAE;QACrB,SAAS,GAAG,IAAI,CAAC;IAClB,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE/B,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,eAAe,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/D,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC9B,IAAI,SAAS;gBAAE,MAAM;YACrB,IAAI,CAAC;gBACJ,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,GAAG,CAAgC,kBAAkB,CAAC,CAAC;gBAC/E,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CACxD,CAAC;gBACF,IAAI,OAAO,EAAE,CAAC;oBACb,KAAK,GAAG,OAAO,CAAC;oBAChB,MAAM;gBACP,CAAC;YACF,CAAC;YAAC,MAAM,CAAC;gBACR,4CAA4C;YAC7C,CAAC;QACF,CAAC;IACF,CAAC;YAAS,CAAC;QACV,OAAO,CAAC,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import Conf from 'conf';
|
|
2
|
+
import { createRequire } from 'module';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
import { dirname, join } from 'path';
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
const _require = createRequire(import.meta.url);
|
|
8
|
+
const { version: currentVersion } = _require(join(__dirname, '../../../package.json'));
|
|
9
|
+
const cache = new Conf({
|
|
10
|
+
projectName: 'agendapanda',
|
|
11
|
+
configName: 'update-check',
|
|
12
|
+
schema: {
|
|
13
|
+
last_check: { type: 'number', default: 0 },
|
|
14
|
+
latest_version: { type: 'string', default: '' },
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
const ONE_HOUR = 60 * 60 * 1000;
|
|
18
|
+
const FETCH_TIMEOUT_MS = 5_000;
|
|
19
|
+
function isNewer(latest, current) {
|
|
20
|
+
// Strip pre-release suffixes (e.g. "1.0.0-beta.1" → "1.0.0")
|
|
21
|
+
const a = latest.split('-')[0].split('.').map(Number);
|
|
22
|
+
const b = current.split('-')[0].split('.').map(Number);
|
|
23
|
+
for (let i = 0; i < 3; i++) {
|
|
24
|
+
if ((a[i] || 0) > (b[i] || 0))
|
|
25
|
+
return true;
|
|
26
|
+
if ((a[i] || 0) < (b[i] || 0))
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
export async function checkForUpdate() {
|
|
32
|
+
try {
|
|
33
|
+
const lastCheck = cache.get('last_check');
|
|
34
|
+
const cachedVersion = cache.get('latest_version');
|
|
35
|
+
if (Date.now() - lastCheck < ONE_HOUR && cachedVersion) {
|
|
36
|
+
return isNewer(cachedVersion, currentVersion) ? cachedVersion : null;
|
|
37
|
+
}
|
|
38
|
+
const controller = new AbortController();
|
|
39
|
+
const timeout = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
|
|
40
|
+
const res = await fetch('https://registry.npmjs.org/@agendapanda/cli/latest', {
|
|
41
|
+
signal: controller.signal,
|
|
42
|
+
});
|
|
43
|
+
clearTimeout(timeout);
|
|
44
|
+
if (!res.ok)
|
|
45
|
+
return null;
|
|
46
|
+
const data = (await res.json());
|
|
47
|
+
const latest = data.version;
|
|
48
|
+
if (!latest)
|
|
49
|
+
return null;
|
|
50
|
+
cache.set('last_check', Date.now());
|
|
51
|
+
cache.set('latest_version', latest);
|
|
52
|
+
return isNewer(latest, currentVersion) ? latest : null;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export function printUpdateBanner(latestVersion) {
|
|
59
|
+
if (!process.stdout.isTTY)
|
|
60
|
+
return;
|
|
61
|
+
console.log('');
|
|
62
|
+
console.log(chalk.yellow(` Update available: ${currentVersion} -> ${latestVersion}`));
|
|
63
|
+
console.log(chalk.yellow(' Run: npm i -g @agendapanda/cli'));
|
|
64
|
+
console.log('');
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=update-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../../src/lib/update-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
export function openInBrowser(url) {
|
|
3
|
+
return new Promise((resolve, reject) => {
|
|
4
|
+
let cmd;
|
|
5
|
+
let args;
|
|
6
|
+
if (process.platform === 'darwin') {
|
|
7
|
+
cmd = 'open';
|
|
8
|
+
args = [url];
|
|
9
|
+
}
|
|
10
|
+
else if (process.platform === 'win32') {
|
|
11
|
+
cmd = 'cmd';
|
|
12
|
+
args = ['/c', 'start', '', url];
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
cmd = 'xdg-open';
|
|
16
|
+
args = [url];
|
|
17
|
+
}
|
|
18
|
+
const child = spawn(cmd, args, { stdio: 'ignore', detached: true });
|
|
19
|
+
child.on('error', reject);
|
|
20
|
+
child.unref();
|
|
21
|
+
resolve();
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export function sleep(ms) {
|
|
25
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,UAAU,aAAa,CAAC,GAAW;IACxC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACtC,IAAI,GAAW,CAAC;QAChB,IAAI,IAAc,CAAC;QACnB,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACnC,GAAG,GAAG,MAAM,CAAC;YACb,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACzC,GAAG,GAAG,KAAK,CAAC;YACZ,IAAI,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACP,GAAG,GAAG,UAAU,CAAC;YACjB,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACpE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,EAAE,CAAC;IACX,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAU;IAC/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agendapanda/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Agenda Panda CLI - schedule social media posts from the terminal",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Agenda Panda <hello@agendapanda.com> (https://agendapanda.com)",
|
|
7
|
+
"homepage": "https://agendapanda.com",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/nicejobhq/agendapanda-cli"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/nicejobhq/agendapanda-cli/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"social-media",
|
|
17
|
+
"scheduler",
|
|
18
|
+
"cli",
|
|
19
|
+
"twitter",
|
|
20
|
+
"linkedin",
|
|
21
|
+
"instagram",
|
|
22
|
+
"threads",
|
|
23
|
+
"facebook",
|
|
24
|
+
"content-calendar",
|
|
25
|
+
"automation"
|
|
26
|
+
],
|
|
5
27
|
"bin": {
|
|
6
28
|
"ap": "dist/bin/ap.js"
|
|
7
29
|
},
|
|
@@ -10,7 +32,8 @@
|
|
|
10
32
|
"node": ">=20.0.0"
|
|
11
33
|
},
|
|
12
34
|
"files": [
|
|
13
|
-
"dist/"
|
|
35
|
+
"dist/",
|
|
36
|
+
"README.md"
|
|
14
37
|
],
|
|
15
38
|
"scripts": {
|
|
16
39
|
"build": "tsc",
|