@sprid/cli 0.1.2 → 0.1.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/CHANGELOG.md +25 -0
- package/README-post.md +0 -1
- package/package.json +1 -1
- package/src/cli.mjs +2 -2
- package/src/commands/auth.mjs +7 -1
- package/src/commands/family.mjs +33 -43
- package/src/commands/init.mjs +1 -0
- package/src/commands/reviews.mjs +26 -17
- package/src/commands/studio.mjs +4 -2
- package/src/docs/commands.mjs +4 -11
- package/src/docs/guides.generated.mjs +267 -255
- package/src/docs/queries.mjs +1 -1
- package/src/post/cli.mjs +3 -8
package/src/docs/queries.mjs
CHANGED
|
@@ -63,7 +63,7 @@ op('lemonsqueezy', 'subscription-invoices', 'Read initial, renewal and update in
|
|
|
63
63
|
op('paddle', 'transactions', 'Read billed transactions by time, status, customer or subscription.', { ...dates, status: array(choice('Status.', ['draft', 'ready', 'billed', 'paid', 'completed', 'canceled', 'past_due']), 7), customer_id: id('Paddle customer ID.'), subscription_id: id('Paddle subscription ID.'), limit, cursor }, [], { start: '2026-08-01', end: '2026-09-01', status: ['completed'], limit: 100 });
|
|
64
64
|
op('paddle', 'subscriptions', 'Read subscription lifecycles by status or price; optional creation dates filter each returned page locally.', { ...dates, status: array(choice('Status.', ['active', 'canceled', 'past_due', 'paused', 'trialing']), 5), customer_id: id('Paddle customer ID.'), price_id: id('Paddle price ID.'), limit, cursor }, [], { status: ['trialing'], limit: 100 });
|
|
65
65
|
for (const source of Object.keys(QUERY_SOURCES).filter(s => QUERY_SOURCES[s].stored)) {
|
|
66
|
-
op(source, 'posts', 'Filter stored publishing outcomes with the latest metric snapshot before the exclusive end.', { ...dates, status: choice('Publishing status.', ['published', 'failed', 'missed', 'scheduled', 'pending', 'rendering', 'publishing', 'awaiting_runner']),
|
|
66
|
+
op(source, 'posts', 'Filter stored publishing outcomes with the latest metric snapshot before the exclusive end.', { ...dates, status: choice('Publishing status.', ['published', 'failed', 'missed', 'scheduled', 'pending', 'rendering', 'publishing', 'awaiting_runner']), contentType: choice('Post type.', ['carousel', 'reel']), limit, offset: integer('Zero-based offset.', 100000, 0) }, ['start', 'end'], { start: '2026-08-01', end: '2026-09-01', status: 'published', limit: 100 });
|
|
67
67
|
op(source, 'comments', 'Read feedback already collected into Sprid’s Inbox, with optional post and reply filters.', { ...dates, postId: integer('Sprid post ID.', 1000000000), replied: { type: 'boolean', description: 'Filter comments by reply state.' }, limit, offset: integer('Zero-based offset.', 100000, 0) }, ['start', 'end'], { start: '2026-08-01', end: '2026-09-01', replied: false, limit: 100 });
|
|
68
68
|
}
|
|
69
69
|
|
package/src/post/cli.mjs
CHANGED
|
@@ -179,7 +179,7 @@ const LANE_KEYS = new Set([
|
|
|
179
179
|
// opening card is still arriving there says so. See `coverFrame`.
|
|
180
180
|
"coverAtMs",
|
|
181
181
|
// composed lanes: what Sprid is asked to render, and what may not be said
|
|
182
|
-
"
|
|
182
|
+
"template", "contentType", "neverSay", "sourcesRequired", "platforms",
|
|
183
183
|
]);
|
|
184
184
|
|
|
185
185
|
/**
|
|
@@ -515,9 +515,7 @@ export default {
|
|
|
515
515
|
carousels: {
|
|
516
516
|
kind: "composed",
|
|
517
517
|
spec: "social/specs/<slug>.json",
|
|
518
|
-
// Optional: the
|
|
519
|
-
// every card renders through.
|
|
520
|
-
// format: <format id from this account>,
|
|
518
|
+
// Optional: the template every card renders through.
|
|
521
519
|
// template: <template id from this account>,
|
|
522
520
|
expect: { slides: [5, 9], words: [0, 30] },
|
|
523
521
|
hashtags: [3, 6],
|
|
@@ -1462,15 +1460,12 @@ async function cmdDraft(cfg, argv) {
|
|
|
1462
1460
|
// Public titles come from approved copy; identifiers stay in internalName.
|
|
1463
1461
|
title: m.post?.title ?? postTitle(caption, m.slug),
|
|
1464
1462
|
internalName: m.post?.internalName ?? m.slug,
|
|
1465
|
-
// A composed lane may name the Sprid format its posts are made from,
|
|
1466
|
-
// and creating with it is what scaffolds the right slide roles.
|
|
1467
|
-
...(cfg.lanes[m.lane]?.format ? { formatId: cfg.lanes[m.lane].format } : {}),
|
|
1468
1463
|
}));
|
|
1469
1464
|
const carousel = (m.kind ?? "reel") === "carousel";
|
|
1470
1465
|
const composed = isComposed(m);
|
|
1471
1466
|
|
|
1472
1467
|
// **A new post already has slides, and `POST /posts` does not return
|
|
1473
|
-
// them.** It scaffolds one row
|
|
1468
|
+
// them.** It scaffolds one row and
|
|
1474
1469
|
// answers with the post alone, so `post.slides?.[0]` was always undefined
|
|
1475
1470
|
// and every draft this package made carried an EMPTY leading slide with
|
|
1476
1471
|
// the real media behind it - a blank first frame on a reel, a blank first
|