user-posts.js
1 import { cli, Strategy } from '@jackwener/opencli/registry'; 2 import { DOMAIN, SITE, gqlEscape, gqlRequest, resolveUserId } from './_helpers.js'; 3 cli({ 4 site: SITE, 5 name: 'user-posts', 6 description: "List a user's posts", 7 domain: DOMAIN, 8 strategy: Strategy.PUBLIC, 9 browser: false, 10 args: [ 11 { 12 name: 'username', 13 type: 'string', 14 required: true, 15 positional: true, 16 help: 'LessWrong username or slug', 17 }, 18 { name: 'limit', type: 'int', default: 10, help: 'Number of results' }, 19 ], 20 columns: ['rank', 'title', 'karma', 'comments', 'date', 'url'], 21 func: async (_page, kwargs) => { 22 const username = String(kwargs.username); 23 const limit = Number(kwargs.limit ?? 10); 24 const user = await resolveUserId(username); 25 const query = `query UserPosts { 26 posts(input: {terms: {view: "userPosts", userId: "${gqlEscape(user._id)}", limit: ${limit}}}) { 27 results { _id title baseScore commentCount slug postedAt } 28 } 29 }`; 30 const data = await gqlRequest(query); 31 const posts = (data?.posts?.results ?? []); 32 return posts.map((item, i) => ({ 33 rank: i + 1, 34 title: item.title ?? '', 35 karma: item.baseScore ?? 0, 36 comments: item.commentCount ?? 0, 37 date: item.postedAt ?? '', 38 url: `https://${DOMAIN}/posts/${item._id}/${item.slug}`, 39 })); 40 }, 41 });