@contenthero/cli 0.2.3 → 0.2.5
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/commands/brandkit.d.ts.map +1 -1
- package/dist/commands/brandkit.js +98 -37
- package/dist/commands/brandkit.js.map +1 -1
- package/dist/commands/connected.d.ts +6 -5
- package/dist/commands/connected.d.ts.map +1 -1
- package/dist/commands/connected.js +6 -41
- package/dist/commands/connected.js.map +1 -1
- package/dist/commands/content.d.ts +27 -0
- package/dist/commands/content.d.ts.map +1 -0
- package/dist/commands/content.js +236 -0
- package/dist/commands/content.js.map +1 -0
- package/dist/commands/favorites.d.ts +9 -9
- package/dist/commands/favorites.d.ts.map +1 -1
- package/dist/commands/favorites.js +19 -39
- package/dist/commands/favorites.js.map +1 -1
- package/dist/commands/folder.d.ts.map +1 -1
- package/dist/commands/folder.js +44 -21
- package/dist/commands/folder.js.map +1 -1
- package/dist/commands/generation.d.ts.map +1 -1
- package/dist/commands/generation.js +5 -12
- package/dist/commands/generation.js.map +1 -1
- package/dist/commands/post.d.ts.map +1 -1
- package/dist/commands/post.js +13 -117
- package/dist/commands/post.js.map +1 -1
- package/dist/program.js +4 -4
- package/dist/program.js.map +1 -1
- package/package.json +2 -2
- package/dist/commands/inspiration.d.ts +0 -17
- package/dist/commands/inspiration.d.ts.map +0 -1
- package/dist/commands/inspiration.js +0 -129
- package/dist/commands/inspiration.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inspiration.d.ts","sourceRoot":"","sources":["../../src/commands/inspiration.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EAGV,OAAO,EAEP,cAAc,EACf,MAAM,kBAAkB,CAAA;AAMzB,oEAAoE;AACpE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,MAAM,CAWnE;AAED,6CAA6C;AAC7C,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAWrD;AAKD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmG1D"}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* `contenthero inspiration` - research reads over tracked creators/competitors.
|
|
3
|
-
* inspiration accounts the creators the account tracks
|
|
4
|
-
* inspiration account <id> one tracked account + its top outliers
|
|
5
|
-
* inspiration outliers top-performing content, ranked by outlier score
|
|
6
|
-
* inspiration content <id> one item in full (incl. transcript)
|
|
7
|
-
*
|
|
8
|
-
* This is the core "what is working" research surface. Reads only.
|
|
9
|
-
*/
|
|
10
|
-
import { makeClient } from '../context.js';
|
|
11
|
-
import { emit, keyValues, table } from '../output.js';
|
|
12
|
-
import { CliError, EXIT } from '../errors.js';
|
|
13
|
-
import { toFloat, toInt } from '../args.js';
|
|
14
|
-
/** A table of tracked accounts (shared with brand-account list). */
|
|
15
|
-
export function trackedAccountsTable(rows) {
|
|
16
|
-
return table(['ID', 'PLATFORM', 'HANDLE', 'NAME', 'FOLLOWERS'], rows.map((a) => [
|
|
17
|
-
a.id.slice(0, 8),
|
|
18
|
-
a.platform ?? '',
|
|
19
|
-
a.handle ?? '',
|
|
20
|
-
a.name ?? '',
|
|
21
|
-
a.followerCount ?? '',
|
|
22
|
-
]));
|
|
23
|
-
}
|
|
24
|
-
/** A table of outliers / tracked content. */
|
|
25
|
-
export function outliersTable(rows) {
|
|
26
|
-
return table(['ID', 'PLATFORM', 'SCORE', 'VIEWS', 'TITLE'], rows.map((o) => [
|
|
27
|
-
o.id.slice(0, 8),
|
|
28
|
-
o.platform ?? '',
|
|
29
|
-
o.outlierScore != null ? o.outlierScore.toFixed(1) : '',
|
|
30
|
-
o.viewCount ?? '',
|
|
31
|
-
(o.title ?? '').replace(/\s+/g, ' ').slice(0, 50),
|
|
32
|
-
]));
|
|
33
|
-
}
|
|
34
|
-
const SORTS = ['score', 'date', 'views'];
|
|
35
|
-
export function registerInspiration(program) {
|
|
36
|
-
const inspiration = program
|
|
37
|
-
.command('inspiration')
|
|
38
|
-
.description('Research reads: tracked creators and their top content');
|
|
39
|
-
inspiration
|
|
40
|
-
.command('accounts')
|
|
41
|
-
.description('List the creators/competitors the account tracks')
|
|
42
|
-
.option('--brand-kit <id>', 'scope to the inspiration accounts linked to this brand kit')
|
|
43
|
-
.action(async (opts, command) => {
|
|
44
|
-
const { client, ctx } = makeClient(command);
|
|
45
|
-
emit(await client.listInspirationAccounts({ brandKitId: opts.brandKit }), ctx, trackedAccountsTable);
|
|
46
|
-
});
|
|
47
|
-
inspiration
|
|
48
|
-
.command('account')
|
|
49
|
-
.description('Get one tracked account with its top outliers')
|
|
50
|
-
.argument('<id>', 'the inspiration account id')
|
|
51
|
-
.action(async (id, _opts, command) => {
|
|
52
|
-
const { client, ctx } = makeClient(command);
|
|
53
|
-
const detail = await client.getInspirationAccount(id);
|
|
54
|
-
emit(detail, ctx, (d) => {
|
|
55
|
-
const head = keyValues([
|
|
56
|
-
['Name', d.account.name ?? ''],
|
|
57
|
-
['Handle', d.account.handle ?? ''],
|
|
58
|
-
['Platform', d.account.platform ?? ''],
|
|
59
|
-
['Followers', d.account.followerCount ?? ''],
|
|
60
|
-
['Tracked items', d.contentCount],
|
|
61
|
-
]);
|
|
62
|
-
const top = d.topContent.length ? '\n\nTop content:\n' + outliersTable(d.topContent) : '';
|
|
63
|
-
return head + top;
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
inspiration
|
|
67
|
-
.command('outliers')
|
|
68
|
-
.description('List top-performing content (outliers), ranked by outlier score')
|
|
69
|
-
.option('--platform <platform>', 'filter to one platform (youtube, instagram)')
|
|
70
|
-
.option('--type <type>', "content type, e.g. video, short, reel")
|
|
71
|
-
.option('--min-score <n>', 'only content at or above this outlier score', toFloat)
|
|
72
|
-
.option('--search <text>', 'text search across title, creator, handle, description')
|
|
73
|
-
.option('--sort <sort>', `sort order: ${SORTS.join(', ')} (default score)`)
|
|
74
|
-
.option('--brand-kit <id>', 'scope to the inspiration accounts linked to this brand kit')
|
|
75
|
-
.option('--favorite', 'only content the account has favorited')
|
|
76
|
-
.option('--limit <n>', 'how many to return (default 20)', toInt)
|
|
77
|
-
.option('--offset <n>', 'pagination offset', toInt)
|
|
78
|
-
.action(async (opts, command) => {
|
|
79
|
-
if (opts.sort && !SORTS.includes(opts.sort)) {
|
|
80
|
-
throw new CliError(`Invalid --sort "${opts.sort}". Expected one of: ${SORTS.join(', ')}.`, EXIT.USAGE);
|
|
81
|
-
}
|
|
82
|
-
const { client, ctx } = makeClient(command);
|
|
83
|
-
const result = await client.listOutliers({
|
|
84
|
-
platform: opts.platform,
|
|
85
|
-
contentType: opts.type,
|
|
86
|
-
minOutlierScore: opts.minScore,
|
|
87
|
-
search: opts.search,
|
|
88
|
-
sortBy: opts.sort,
|
|
89
|
-
brandKitId: opts.brandKit,
|
|
90
|
-
favorited: opts.favorite ? true : undefined,
|
|
91
|
-
limit: opts.limit,
|
|
92
|
-
offset: opts.offset,
|
|
93
|
-
});
|
|
94
|
-
emit(result, ctx, (r) => {
|
|
95
|
-
const t = outliersTable(r.outliers);
|
|
96
|
-
return `${t}\n\n${r.outliers.length} of ${r.total}${r.hasMore ? ' (more available)' : ''}`;
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
inspiration
|
|
100
|
-
.command('content')
|
|
101
|
-
.description('Get one tracked-content item in full (engagement, hashtags, transcript)')
|
|
102
|
-
.argument('<id>', 'the content id (from outliers or an account)')
|
|
103
|
-
.action(async (id, _opts, command) => {
|
|
104
|
-
const { client, ctx } = makeClient(command);
|
|
105
|
-
const content = await client.getInspirationContent(id);
|
|
106
|
-
emit(content, ctx, (c) => {
|
|
107
|
-
const pairs = [
|
|
108
|
-
['Title', c.title ?? ''],
|
|
109
|
-
['Creator', c.sourceCreator ?? ''],
|
|
110
|
-
['Platform', c.platform ?? ''],
|
|
111
|
-
['Outlier score', c.outlierScore != null ? c.outlierScore.toFixed(2) : ''],
|
|
112
|
-
['Views', c.viewCount ?? ''],
|
|
113
|
-
['Likes', c.likeCount ?? ''],
|
|
114
|
-
['Comments', c.commentCount ?? ''],
|
|
115
|
-
];
|
|
116
|
-
if (c.hashtags.length)
|
|
117
|
-
pairs.push(['Hashtags', c.hashtags.join(' ')]);
|
|
118
|
-
if (c.url)
|
|
119
|
-
pairs.push(['URL', c.url]);
|
|
120
|
-
let out = keyValues(pairs);
|
|
121
|
-
if (c.transcript) {
|
|
122
|
-
const preview = c.transcript.replace(/\s+/g, ' ').slice(0, 280);
|
|
123
|
-
out += `\n\nTranscript (${c.transcript.length} chars):\n${preview}${c.transcript.length > 280 ? '…' : ''}`;
|
|
124
|
-
}
|
|
125
|
-
return out;
|
|
126
|
-
});
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
//# sourceMappingURL=inspiration.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"inspiration.js","sourceRoot":"","sources":["../../src/commands/inspiration.ts"],"names":[],"mappings":"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"}
|