Skip to content
← Public packages

@kentcdodds/x

X API v2 helpers for tweets, search, legacy DMs, and encrypted X Chat via a Fly XDK sidecar.

src/index.ts

144 lines · 3.6 KB · TypeScript
/**
 * Re-exports the public helpers for `kody:@kentcdodds/x`.
 *
 * Thin OpenAPI-scaffolded client (bearer `xBearerToken`) plus domain helpers
 * for post shaping, dry-run writes, multi-account OAuth, and token storage notes.
 *
 * Surface naming uses "post"; X API paths remain `/tweets` and `tweet.fields`.
 */
export {
	XApiError,
	bookmarkPost,
	createPost,
	deletePost,
	followUser,
	getDmConversation,
	getMe,
	getPost,
	getPostThread,
	getUserByUsername,
	getUserPosts,
	likePost,
	listDmEvents,
	listXAccounts,
	mediaUploadGuide,
	oauthTokenStorageNotes,
	parsePostId,
	postDisplayText,
	refreshOauthToken,
	removeBookmark,
	repostPost,
	resolveIntegrationName,
	resolveOAuthAccount,
	searchRecent,
	sendDm,
	shapeDmEvent,
	shapeDmEventsResponse,
	shapePost,
	shapePostsResponse,
	smokeTest,
	summarizePostMetrics,
	summarizePostMetricsFromPosts,
	summarizeUser,
	unfollowUser,
	unlikePost,
	unrepostPost,
	xRequest,
} from './client.ts'

export { getChatConversation, listChatConversations, sendChat } from './chat.ts'

export {
	createposts,
	createusersbookmark,
	deleteposts,
	deleteusersbookmark,
	followuser as followuserOp,
	getpostsbyid,
	getusersbyusername,
	getusersme,
	getusersposts,
	likepost,
	rawXRequest,
	repostpost,
	searchpostsrecent,
	unfollowuser as unfollowuserOp,
	unlikepost,
	unrepostpost,
} from './openapi-client.ts'

/** Describe the x package exports and import pattern. */
export default async function xOverview() {
	return {
		package: '@kentcdodds/x',
		kodyId: 'x',
		description:
			'X API v2 helpers: OpenAPI-scaffolded bearer client plus OAuth user-context domain helpers, including legacy DMs and encrypted X Chat. Surface uses "post"; X API resources remain tweets.',
		auth: {
			bearerSecret: 'xBearerToken',
			defaultOauthIntegration: 'x',
			accountConvention:
				"Omit account for integration `x`; account: '<purpose>' → integration `x-<purpose>`; or pass integration explicitly.",
			example: { account: 'kodykoala', resolvesTo: 'x-kodykoala' },
		},
		safety: 'Write helpers dry-run unless confirm: true is provided after explicit user approval.',
		utilities: [
			'accounts',
			'smoke-test',
			'request',
			'refresh-oauth-token',
			'get-me',
			'get-user-by-username',
			'search-recent',
			'get-post',
			'get-post-thread',
			'get-user-posts',
			'summarize-post-metrics',
			'create-post',
			'reply-post',
			'delete-post',
			'like-post',
			'unlike-post',
			'repost-post',
			'unrepost-post',
			'bookmark-post',
			'remove-bookmark',
			'follow-user',
			'unfollow-user',
			'send-dm',
			'list-dm-events',
			'get-dm-conversation',
			'list-chat-conversations',
			'get-chat-conversation',
			'send-chat',
			'adapt',
			'sidecar/source',
			'media-upload-guide',
			'upload-media',
		],
		importPattern: "import utility from 'kody:@kentcdodds/x/<utility-name>'",
		breakingRename:
			'v3: export paths and helpers use post (create-post, get-post, …). Old *-tweet paths removed. X API paths still /tweets.',
		migration:
			'@kodykoala Activity → jev → Pam wake moved to @kentcdodds/kodykoala-activity (v3.9+). Import kody:@kentcdodds/kodykoala-activity/... for handle-activity-event / subscribe-activity.',
		openapiSlugs: [
			'getusersme',
			'getusersbyusername',
			'searchpostsrecent',
			'getusersposts',
			'getpostsbyid',
			'createposts',
			'deleteposts',
			'likepost',
			'unlikepost',
			'repostpost',
			'unrepostpost',
			'createusersbookmark',
			'deleteusersbookmark',
			'followuser',
			'unfollowuser',
		],
		rateLimitNote:
			'X free tier is heavily rate-limited. Prefer one GET smoke; treat HTTP 429 as auth-plumbing-verified. Prefer get-post over raw request loops.',
	}
}