chirpie 1.2.2 → 1.2.4
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/dist/index.js +8 -8
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -199,8 +199,8 @@ async function resolveMediaArgs(client, media, alt) {
|
|
|
199
199
|
}
|
|
200
200
|
return items;
|
|
201
201
|
}
|
|
202
|
-
var MEDIA_OPTION_HELP = "Image or video files on this machine, or public URLs. Files are uploaded first. Image caps: X, Bluesky, LinkedIn and Mastodon 4, Threads 1, Instagram
|
|
203
|
-
var ALT_OPTION_HELP = "Describe each item for people using a screen reader, in the same order as --media. Carried to X, Bluesky, LinkedIn
|
|
202
|
+
var MEDIA_OPTION_HELP = "Image or video files on this machine, or public URLs. Files are uploaded first. Image caps: X, Bluesky, LinkedIn and Mastodon 4, Telegram 10, and (coming soon) Threads 1, Instagram and Facebook 10. Video: X, Mastodon and Telegram only, one per post, never with images. Anything a platform cannot take is refused rather than dropped.";
|
|
203
|
+
var ALT_OPTION_HELP = "Describe each item for people using a screen reader, in the same order as --media. Carried to X, Bluesky, LinkedIn and Mastodon, and to Instagram and Facebook (coming soon).";
|
|
204
204
|
|
|
205
205
|
// src/lib/accounts.ts
|
|
206
206
|
import { readFileSync } from "fs";
|
|
@@ -424,8 +424,8 @@ async function resolveNamedAccounts(client, named, configurations) {
|
|
|
424
424
|
}
|
|
425
425
|
|
|
426
426
|
// src/lib/placement.ts
|
|
427
|
-
var INSTAGRAM_PLACEMENT_HELP = 'Where the post goes on Instagram: feed (the default), story or reel. A story takes exactly one image or video, no caption (pass "" as the text) and no first comment. A reel takes exactly one video. Only pass this when the post is going to an Instagram account';
|
|
428
|
-
var FACEBOOK_PLACEMENT_HELP = "Where the post goes on a Facebook Page: feed (the default) or story. A story takes exactly one image or video, no text and no first comment. Only pass this when the post is going to a Facebook Page";
|
|
427
|
+
var INSTAGRAM_PLACEMENT_HELP = 'Where the post goes on Instagram (coming soon): feed (the default), story or reel. A story takes exactly one image or video, no caption (pass "" as the text) and no first comment. A reel takes exactly one video. Only pass this when the post is going to an Instagram account';
|
|
428
|
+
var FACEBOOK_PLACEMENT_HELP = "Where the post goes on a Facebook Page (coming soon): feed (the default) or story. A story takes exactly one image or video, no text and no first comment. Only pass this when the post is going to a Facebook Page";
|
|
429
429
|
var INSTAGRAM_PLACEMENTS = ["feed", "story", "reel"];
|
|
430
430
|
var FACEBOOK_PLACEMENTS = ["feed", "story"];
|
|
431
431
|
function placementConfiguration(opts) {
|
|
@@ -455,7 +455,7 @@ var postCommand = new Command3("post").description("Create a post").argument("<t
|
|
|
455
455
|
"-a, --account <id>",
|
|
456
456
|
"Account ID. Repeat it to publish the same post to several accounts at once (up to 25)",
|
|
457
457
|
collect
|
|
458
|
-
).option("-m, --media <files...>", MEDIA_OPTION_HELP).option("--first-comment <text>", "Post this as a comment under the post, as soon as it goes out. X, Threads, Instagram and Facebook
|
|
458
|
+
).option("-m, --media <files...>", MEDIA_OPTION_HELP).option("--first-comment <text>", "Post this as a comment under the post, as soon as it goes out. X only, and Threads, Instagram and Facebook (coming soon). It counts as one post against your monthly quota").option("--alt <text...>", ALT_OPTION_HELP).option("--instagram-placement <placement>", INSTAGRAM_PLACEMENT_HELP).option("--facebook-placement <placement>", FACEBOOK_PLACEMENT_HELP).option(
|
|
459
459
|
"--config <json-or-file>",
|
|
460
460
|
'Per-account overrides as JSON, or a path to a JSON file holding them: { "<account id>": { "text": "...", "media_urls": ["..."], "first_comment": "...", "configuration": { "instagram": { "placement": "reel" } } } }. Every key must be an account named with --account, "first_comment": "" publishes that account without the first comment the call is sending, and "configuration" replaces the placement flags for that account and is where the options a placement carries go (collaborators, user_tags, cover, video_cover_timestamp_ms, share_to_feed, trial_reel on Instagram, link on a Facebook Page)'
|
|
461
461
|
).option("-s, --schedule <datetime>", "Schedule for later. An ISO 8601 timestamp carrying a timezone (2026-04-01T14:00:00Z or 2026-04-01T16:00:00+02:00), or a local time with no offset (2026-11-01T09:30) read in --timezone or the timezone saved on your account. Posts publish within ~5 minutes of the scheduled time.").option(
|
|
@@ -568,7 +568,7 @@ function parseAltSpec(spec) {
|
|
|
568
568
|
alts: m[2].split(",").map((a) => a.trim())
|
|
569
569
|
};
|
|
570
570
|
}
|
|
571
|
-
var threadCommand = new Command4("thread").description("Create a thread").argument("[posts...]", "Thread posts (each argument is one post). Omit when using --file.").option("--first-comment <text>", "Post this as a comment under the thread's last post, as soon as it goes out. X, Threads, Instagram and Facebook
|
|
571
|
+
var threadCommand = new Command4("thread").description("Create a thread").argument("[posts...]", "Thread posts (each argument is one post). Omit when using --file.").option("--first-comment <text>", "Post this as a comment under the thread's last post, as soon as it goes out. X only, and Threads, Instagram and Facebook (coming soon). It counts as one post against your monthly quota").option(
|
|
572
572
|
"-a, --account <id>",
|
|
573
573
|
"Account ID. Repeat it to publish the same thread to several accounts at once (up to 25)",
|
|
574
574
|
collect
|
|
@@ -577,7 +577,7 @@ var threadCommand = new Command4("thread").description("Create a thread").argume
|
|
|
577
577
|
'Per-post media as "INDEX:file1,file2" (repeatable). Files on this machine are uploaded first; public URLs are used as they are. Example: -m 0:./shot.png 2:https://b.png,https://c.png'
|
|
578
578
|
).option(
|
|
579
579
|
"--alt <specs...>",
|
|
580
|
-
'Per-post alt text as "INDEX:first,second", lining up with --media. Carried to X, Bluesky, LinkedIn
|
|
580
|
+
'Per-post alt text as "INDEX:first,second", lining up with --media. Carried to X, Bluesky, LinkedIn and Mastodon, and to Instagram and Facebook (coming soon).'
|
|
581
581
|
).option(
|
|
582
582
|
"-f, --file <path>",
|
|
583
583
|
"JSON file with a full thread payload: { posts: [{ text, media_urls? }, ...], schedule_at?: string }. It may also carry account_ids and account_configurations."
|
|
@@ -1015,7 +1015,7 @@ async function readSecretFromStdin(prompt) {
|
|
|
1015
1015
|
stdin.on("data", onData);
|
|
1016
1016
|
});
|
|
1017
1017
|
}
|
|
1018
|
-
var accountsCommand = new Command6("accounts").description("List connected social accounts (X, Bluesky, LinkedIn, Threads,
|
|
1018
|
+
var accountsCommand = new Command6("accounts").description("List connected social accounts (X, Bluesky, LinkedIn, Mastodon and Telegram; Threads, Instagram and Facebook coming soon)").option("--json", "Output raw JSON").action(async (opts, cmd) => {
|
|
1019
1019
|
const client = getClient();
|
|
1020
1020
|
try {
|
|
1021
1021
|
const list = await client.listAccountsWithLimits();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chirpie",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.4",
|
|
4
4
|
"description": "Chirpie CLI: post to social media from the command line",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
],
|
|
45
45
|
"license": "MIT",
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@chirpie/sdk": "^1.2.
|
|
47
|
+
"@chirpie/sdk": "^1.2.4",
|
|
48
48
|
"commander": "^13"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|