postiz 2.0.14 → 2.0.15

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/README.md CHANGED
@@ -74,9 +74,17 @@ export POSTIZ_API_URL=https://your-custom-api.com
74
74
  **List all connected integrations**
75
75
  ```bash
76
76
  postiz integrations:list
77
+ postiz integrations:list --group "customer-id"
77
78
  ```
78
79
 
79
- Returns integration IDs, provider names, and metadata.
80
+ Returns integration IDs, provider names, and metadata. Use `--group` to return only the channels assigned to a specific group (customer).
81
+
82
+ **List all groups (customers)**
83
+ ```bash
84
+ postiz integrations:groups
85
+ ```
86
+
87
+ Returns all groups (customers) for your organization as `{id, name}`. Use a group's `id` with `integrations:list --group` to filter channels.
80
88
 
81
89
  **Get integration settings schema**
82
90
  ```bash
@@ -554,7 +562,8 @@ The CLI interacts with these Postiz API endpoints:
554
562
  | `/public/v1/posts/:id` | DELETE | Delete a post |
555
563
  | `/public/v1/posts/:id/missing` | GET | Get missing content from provider |
556
564
  | `/public/v1/posts/:id/release-id` | PUT | Update release ID for a post |
557
- | `/public/v1/integrations` | GET | List integrations |
565
+ | `/public/v1/integrations` | GET | List integrations (optional `?group=` filter) |
566
+ | `/public/v1/groups` | GET | List groups (customers) |
558
567
  | `/public/v1/integration-settings/:id` | GET | Get integration settings |
559
568
  | `/public/v1/integration-trigger/:id` | POST | Trigger integration tool |
560
569
  | `/public/v1/analytics/:integration` | GET | Get platform analytics |
@@ -652,6 +661,8 @@ export POSTIZ_API_KEY=your_key # Or use API key
652
661
 
653
662
  # Discovery
654
663
  postiz integrations:list # List integrations
664
+ postiz integrations:list --group "<group-id>" # List integrations in a group
665
+ postiz integrations:groups # List groups (customers)
655
666
  postiz integrations:settings <id> # Get settings
656
667
  postiz integrations:trigger <id> <method> -d '{}' # Fetch data
657
668
 
package/SKILL.md CHANGED
@@ -136,6 +136,12 @@ export POSTIZ_API_URL=https://custom-api-url.com
136
136
  # List all connected integrations
137
137
  postiz integrations:list
138
138
 
139
+ # List integrations belonging to a specific group (customer)
140
+ postiz integrations:list --group <group-id>
141
+
142
+ # List all groups (customers) as {id, name}
143
+ postiz integrations:groups
144
+
139
145
  # Get settings schema for specific integration
140
146
  postiz integrations:settings <integration-id>
141
147
 
@@ -757,6 +763,8 @@ export POSTIZ_API_KEY=key # Or use API key
757
763
 
758
764
  # Discovery (only after auth is confirmed)
759
765
  postiz integrations:list # Get integration IDs
766
+ postiz integrations:list --group <group-id> # Get integration IDs in a group
767
+ postiz integrations:groups # List groups (customers)
760
768
  postiz integrations:settings <id> # Get settings schema
761
769
  postiz integrations:trigger <id> <method> -d '{}' # Fetch dynamic data
762
770
 
package/dist/index.js CHANGED
@@ -178,8 +178,14 @@ var PostizAPI = class {
178
178
  method: "GET"
179
179
  });
180
180
  }
181
- async listIntegrations() {
182
- return this.request("/public/v1/integrations", {
181
+ async listIntegrations(group) {
182
+ const query = group ? `?group=${encodeURIComponent(group)}` : "";
183
+ return this.request(`/public/v1/integrations${query}`, {
184
+ method: "GET"
185
+ });
186
+ }
187
+ async listGroups() {
188
+ return this.request("/public/v1/groups", {
183
189
  method: "GET"
184
190
  });
185
191
  }
@@ -583,11 +589,11 @@ async function deletePost(args) {
583
589
  }
584
590
 
585
591
  // src/commands/integrations.ts
586
- async function listIntegrations() {
592
+ async function listIntegrations(args) {
587
593
  const config = getConfig();
588
594
  const api = new PostizAPI(config);
589
595
  try {
590
- const result = await api.listIntegrations();
596
+ const result = await api.listIntegrations(args == null ? void 0 : args.group);
591
597
  console.log("\u{1F50C} Connected Integrations:");
592
598
  console.log(JSON.stringify(result, null, 2));
593
599
  return result;
@@ -596,6 +602,19 @@ async function listIntegrations() {
596
602
  process.exit(1);
597
603
  }
598
604
  }
605
+ async function listGroups() {
606
+ const config = getConfig();
607
+ const api = new PostizAPI(config);
608
+ try {
609
+ const result = await api.listGroups();
610
+ console.log("\u{1F465} Groups (Customers):");
611
+ console.log(JSON.stringify(result, null, 2));
612
+ return result;
613
+ } catch (error) {
614
+ console.error("\u274C Failed to list groups:", error.message);
615
+ process.exit(1);
616
+ }
617
+ }
599
618
  async function getIntegrationSettings(args) {
600
619
  const config = getConfig();
601
620
  const api = new PostizAPI(config);
@@ -878,8 +897,21 @@ async function uploadFile(args) {
878
897
  ).command(
879
898
  "integrations:list",
880
899
  "List all connected integrations",
881
- {},
900
+ (yargs2) => {
901
+ return yargs2.option("group", {
902
+ describe: "Filter integrations by group (customer) ID",
903
+ type: "string"
904
+ }).example("$0 integrations:list", "List all connected integrations").example(
905
+ '$0 integrations:list --group "customer-id"',
906
+ "List integrations for a specific group"
907
+ );
908
+ },
882
909
  listIntegrations
910
+ ).command(
911
+ "integrations:groups",
912
+ "List all groups (customers)",
913
+ {},
914
+ listGroups
883
915
  ).command(
884
916
  "integrations:settings <id>",
885
917
  "Get settings schema for a specific integration",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/api.ts","../src/commands/auth.ts","../src/config.ts","../src/commands/posts.ts","../src/commands/integrations.ts","../src/commands/analytics.ts","../src/commands/upload.ts"],"sourcesContent":["import yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { createPost, listPosts, deletePost, getMissingContent, connectPost, changePostStatus } from './commands/posts';\nimport { listIntegrations, getIntegrationSettings, triggerIntegrationTool } from './commands/integrations';\nimport { getAnalytics, getPostAnalytics } from './commands/analytics';\nimport { uploadFile } from './commands/upload';\nimport { authLogin, authLogout, authStatus } from './commands/auth';\nimport type { Argv } from 'yargs';\n\nyargs(hideBin(process.argv))\n .scriptName('postiz')\n .usage('$0 <command> [options]')\n .command(\n 'posts:create',\n 'Create a new post',\n (yargs: Argv) => {\n return yargs\n .option('content', {\n alias: 'c',\n describe: 'Post/comment content (can be used multiple times)',\n type: 'string',\n })\n .option('media', {\n alias: 'm',\n describe: 'Comma-separated media URLs for the corresponding -c (can be used multiple times)',\n type: 'string',\n })\n .option('integrations', {\n alias: 'i',\n describe: 'Comma-separated list of integration IDs',\n type: 'string',\n })\n .option('date', {\n alias: 's',\n describe: 'Schedule date (ISO 8601 format) - REQUIRED',\n type: 'string',\n })\n .option('type', {\n alias: 't',\n describe: 'Post type: \"schedule\" or \"draft\"',\n type: 'string',\n choices: ['schedule', 'draft'],\n default: 'schedule',\n })\n .option('delay', {\n alias: 'd',\n describe: 'Delay in minutes between comments (default: 0)',\n type: 'number',\n default: 0,\n })\n .option('json', {\n alias: 'j',\n describe: 'Path to JSON file with full post structure',\n type: 'string',\n })\n .option('shortLink', {\n describe: 'Use short links',\n type: 'boolean',\n default: true,\n })\n .option('settings', {\n describe: 'Platform-specific settings as JSON string',\n type: 'string',\n })\n .check((argv) => {\n if (!argv.json && !argv.content) {\n throw new Error('Either --content or --json is required');\n }\n if (!argv.json && !argv.integrations) {\n throw new Error('--integrations is required when not using --json');\n }\n if (!argv.json && !argv.date) {\n throw new Error('--date is required when not using --json');\n }\n return true;\n })\n .example(\n '$0 posts:create -c \"Hello World!\" -s \"2024-12-31T12:00:00Z\" -i \"twitter-123\"',\n 'Simple scheduled post'\n )\n .example(\n '$0 posts:create -c \"Draft post\" -s \"2024-12-31T12:00:00Z\" -t draft -i \"twitter-123\"',\n 'Create draft post'\n )\n .example(\n '$0 posts:create -c \"Main post\" -m \"img1.jpg,img2.jpg\" -s \"2024-12-31T12:00:00Z\" -i \"twitter-123\"',\n 'Post with multiple images'\n )\n .example(\n '$0 posts:create -c \"Main post\" -m \"img1.jpg\" -c \"First comment\" -m \"img2.jpg\" -c \"Second comment\" -m \"img3.jpg,img4.jpg\" -s \"2024-12-31T12:00:00Z\" -i \"twitter-123\"',\n 'Post with comments, each having their own media'\n )\n .example(\n '$0 posts:create -c \"Main\" -c \"Comment with semicolon; see?\" -c \"Another!\" -s \"2024-12-31T12:00:00Z\" -i \"twitter-123\"',\n 'Comments can contain semicolons'\n )\n .example(\n '$0 posts:create -c \"Thread 1/3\" -c \"Thread 2/3\" -c \"Thread 3/3\" -d 5 -s \"2024-12-31T12:00:00Z\" -i \"twitter-123\"',\n 'Twitter thread with 5 minute delay'\n )\n .example(\n '$0 posts:create --json ./post.json',\n 'Complex post from JSON file'\n )\n .example(\n '$0 posts:create -c \"Post to subreddit\" -s \"2024-12-31T12:00:00Z\" --settings \\'{\"subreddit\":[{\"value\":{\"subreddit\":\"programming\",\"title\":\"My Title\",\"type\":\"text\",\"url\":\"\",\"is_flair_required\":false}}]}\\' -i \"reddit-123\"',\n 'Reddit post with specific subreddit settings'\n )\n .example(\n '$0 posts:create -c \"Video description\" -s \"2024-12-31T12:00:00Z\" --settings \\'{\"title\":\"My Video\",\"type\":\"public\",\"tags\":[{\"value\":\"tech\",\"label\":\"Tech\"}]}\\' -i \"youtube-123\"',\n 'YouTube post with title and tags'\n )\n .example(\n '$0 posts:create -c \"Tweet content\" -s \"2024-12-31T12:00:00Z\" --settings \\'{\"who_can_reply_post\":\"everyone\"}\\' -i \"twitter-123\"',\n 'X (Twitter) post with reply settings'\n );\n },\n createPost as any\n )\n .command(\n 'posts:list',\n 'List all posts',\n (yargs: Argv) => {\n return yargs\n .option('startDate', {\n describe: 'Start date (ISO 8601 format). Default: 30 days ago',\n type: 'string',\n })\n .option('endDate', {\n describe: 'End date (ISO 8601 format). Default: 30 days from now',\n type: 'string',\n })\n .option('customer', {\n describe: 'Customer ID (optional)',\n type: 'string',\n })\n .example('$0 posts:list', 'List all posts (last 30 days to next 30 days)')\n .example(\n '$0 posts:list --startDate \"2024-01-01T00:00:00Z\" --endDate \"2024-12-31T23:59:59Z\"',\n 'List posts for a specific date range'\n )\n .example(\n '$0 posts:list --customer \"customer-id\"',\n 'List posts for a specific customer'\n );\n },\n listPosts as any\n )\n .command(\n 'posts:delete <id>',\n 'Delete a post',\n (yargs: Argv) => {\n return yargs\n .positional('id', {\n describe: 'Post ID to delete',\n type: 'string',\n })\n .example('$0 posts:delete abc123', 'Delete post with ID abc123');\n },\n deletePost as any\n )\n .command(\n 'posts:missing <id>',\n 'List available content from the provider for a post with missing release ID',\n (yargs: Argv) => {\n return yargs\n .positional('id', {\n describe: 'Post ID',\n type: 'string',\n })\n .example(\n '$0 posts:missing post-123',\n 'Get available content to connect to a post'\n );\n },\n getMissingContent as any\n )\n .command(\n 'posts:status <id>',\n 'Change a post status between draft and schedule',\n (yargs: Argv) => {\n return yargs\n .positional('id', {\n describe: 'Post ID',\n type: 'string',\n })\n .option('status', {\n alias: 's',\n describe: 'New status: \"draft\" or \"schedule\"',\n type: 'string',\n choices: ['draft', 'schedule'],\n demandOption: true,\n })\n .example(\n '$0 posts:status post-123 --status draft',\n 'Move a scheduled post back to draft (stops the running workflow)'\n )\n .example(\n '$0 posts:status post-123 --status schedule',\n 'Schedule a draft post so it is queued for publishing'\n );\n },\n changePostStatus as any\n )\n .command(\n 'posts:connect <id>',\n 'Connect a post to its published content by updating the release ID',\n (yargs: Argv) => {\n return yargs\n .positional('id', {\n describe: 'Post ID',\n type: 'string',\n })\n .option('release-id', {\n describe: 'The platform-specific content ID to connect',\n type: 'string',\n demandOption: true,\n })\n .example(\n '$0 posts:connect post-123 --release-id \"7321456789012345678\"',\n 'Connect a post to its published content'\n );\n },\n connectPost as any\n )\n .command(\n 'integrations:list',\n 'List all connected integrations',\n {},\n listIntegrations as any\n )\n .command(\n 'integrations:settings <id>',\n 'Get settings schema for a specific integration',\n (yargs: Argv) => {\n return yargs\n .positional('id', {\n describe: 'Integration ID',\n type: 'string',\n })\n .example(\n '$0 integrations:settings reddit-123',\n 'Get settings schema for Reddit integration'\n )\n .example(\n '$0 integrations:settings youtube-456',\n 'Get settings schema for YouTube integration'\n );\n },\n getIntegrationSettings as any\n )\n .command(\n 'integrations:trigger <id> <method>',\n 'Trigger an integration tool to fetch additional data',\n (yargs: Argv) => {\n return yargs\n .positional('id', {\n describe: 'Integration ID',\n type: 'string',\n })\n .positional('method', {\n describe: 'Method name from the integration tools',\n type: 'string',\n })\n .option('data', {\n alias: 'd',\n describe: 'Data to pass to the tool as JSON string',\n type: 'string',\n })\n .example(\n '$0 integrations:trigger reddit-123 getSubreddits',\n 'Get list of subreddits'\n )\n .example(\n '$0 integrations:trigger reddit-123 searchSubreddits -d \\'{\"query\":\"programming\"}\\'',\n 'Search for subreddits'\n )\n .example(\n '$0 integrations:trigger youtube-123 getPlaylists',\n 'Get YouTube playlists'\n );\n },\n triggerIntegrationTool as any\n )\n .command(\n 'analytics:platform <id>',\n 'Get analytics for a specific integration/channel',\n (yargs: Argv) => {\n return yargs\n .positional('id', {\n describe: 'Integration ID',\n type: 'string',\n })\n .option('date', {\n alias: 'd',\n describe: 'Number of days to look back (default: 7)',\n type: 'string',\n default: '7',\n })\n .example(\n '$0 analytics:platform integration-123',\n 'Get last 7 days of analytics'\n )\n .example(\n '$0 analytics:platform integration-123 -d 30',\n 'Get last 30 days of analytics'\n );\n },\n getAnalytics as any\n )\n .command(\n 'analytics:post <id>',\n 'Get analytics for a specific post',\n (yargs: Argv) => {\n return yargs\n .positional('id', {\n describe: 'Post ID',\n type: 'string',\n })\n .option('date', {\n alias: 'd',\n describe: 'Number of days to look back (default: 7)',\n type: 'string',\n default: '7',\n })\n .example(\n '$0 analytics:post post-123',\n 'Get last 7 days of post analytics'\n )\n .example(\n '$0 analytics:post post-123 -d 30',\n 'Get last 30 days of post analytics'\n );\n },\n getPostAnalytics as any\n )\n .command(\n 'upload <file>',\n 'Upload a file',\n (yargs: Argv) => {\n return yargs\n .positional('file', {\n describe: 'File path to upload',\n type: 'string',\n })\n .example('$0 upload ./image.png', 'Upload an image');\n },\n uploadFile as any\n )\n .command(\n 'auth:login',\n 'Authenticate using OAuth2 (device flow)',\n (yargs: Argv) => {\n return yargs\n .option('auth-server', {\n describe: 'Auth server URL (default: https://cli-auth.postiz.com)',\n type: 'string',\n })\n .example(\n '$0 auth:login',\n 'Login via OAuth2 device flow'\n );\n },\n authLogin as any\n )\n .command(\n 'auth:logout',\n 'Remove stored OAuth2 credentials',\n {},\n authLogout as any\n )\n .command(\n 'auth:status',\n 'Show current authentication status',\n {},\n authStatus as any\n )\n .demandCommand(1, 'You need at least one command')\n .help()\n .alias('h', 'help')\n .version()\n .alias('v', 'version')\n .epilogue(\n 'For more information, visit: https://postiz.com\\n\\nAuthentication:\\n OAuth2: postiz auth:login\\n API Key: export POSTIZ_API_KEY=your_api_key\\n\\nšŸ“½ļø Recommendation: Use agent-media to generate AI videos & images (Kling, Veo, Sora, Seedance, Flux, Grok) and post them directly with Postiz.\\n Install: npm install -g agent-media-cli\\n Learn more: https://agent-media.ai'\n )\n .parse();\n","import fetch, { FormData } from 'node-fetch';\n\nexport interface PostizConfig {\n apiKey: string;\n apiUrl?: string;\n}\n\nexport class PostizAPI {\n private apiKey: string;\n private apiUrl: string;\n\n constructor(config: PostizConfig) {\n this.apiKey = config.apiKey;\n this.apiUrl = config.apiUrl || 'https://api.postiz.com';\n }\n\n private async request(endpoint: string, options: any = {}) {\n const url = `${this.apiUrl}${endpoint}`;\n const headers = {\n 'Content-Type': 'application/json',\n Authorization: this.apiKey,\n ...options.headers,\n };\n\n try {\n const response = await fetch(url, {\n ...options,\n headers,\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`API Error (${response.status}): ${error}`);\n }\n\n return await response.json();\n } catch (error: any) {\n throw new Error(`Request failed: ${error.message}`);\n }\n }\n\n async createPost(data: any) {\n return this.request('/public/v1/posts', {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n async listPosts(filters: any = {}) {\n const queryString = new URLSearchParams(\n Object.entries(filters).reduce((acc, [key, value]) => {\n if (value !== undefined && value !== null) {\n acc[key] = String(value);\n }\n return acc;\n }, {} as Record<string, string>)\n ).toString();\n\n const endpoint = queryString\n ? `/public/v1/posts?${queryString}`\n : '/public/v1/posts';\n\n return this.request(endpoint, {\n method: 'GET',\n });\n }\n\n async deletePost(id: string) {\n return this.request(`/public/v1/posts/${id}`, {\n method: 'DELETE',\n });\n }\n\n async upload(file: Buffer, filename: string) {\n const formData = new FormData();\n const extension = filename.split('.').pop()?.toLowerCase() || '';\n\n // Determine MIME type based on file extension\n const mimeTypes: Record<string, string> = {\n // Images\n 'png': 'image/png',\n 'jpg': 'image/jpeg',\n 'jpeg': 'image/jpeg',\n 'gif': 'image/gif',\n 'webp': 'image/webp',\n 'svg': 'image/svg+xml',\n 'bmp': 'image/bmp',\n 'ico': 'image/x-icon',\n\n // Videos\n 'mp4': 'video/mp4',\n 'mov': 'video/quicktime',\n 'avi': 'video/x-msvideo',\n 'mkv': 'video/x-matroska',\n 'webm': 'video/webm',\n 'flv': 'video/x-flv',\n 'wmv': 'video/x-ms-wmv',\n 'm4v': 'video/x-m4v',\n 'mpeg': 'video/mpeg',\n 'mpg': 'video/mpeg',\n '3gp': 'video/3gpp',\n\n // Audio\n 'mp3': 'audio/mpeg',\n 'wav': 'audio/wav',\n 'ogg': 'audio/ogg',\n 'aac': 'audio/aac',\n 'flac': 'audio/flac',\n 'm4a': 'audio/mp4',\n\n // Documents\n 'pdf': 'application/pdf',\n 'doc': 'application/msword',\n 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n };\n\n const type = mimeTypes[extension] || 'application/octet-stream';\n\n const blob = new Blob([file], { type });\n formData.append('file', blob, filename);\n\n const url = `${this.apiUrl}/public/v1/upload`;\n const response = await fetch(url, {\n method: 'POST',\n // @ts-ignore\n body: formData,\n headers: {\n Authorization: this.apiKey,\n },\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Upload failed (${response.status}): ${error}`);\n }\n\n return await response.json();\n }\n\n async getMissingContent(postId: string) {\n return this.request(`/public/v1/posts/${postId}/missing`, {\n method: 'GET',\n });\n }\n\n async updateReleaseId(postId: string, releaseId: string) {\n return this.request(`/public/v1/posts/${postId}/release-id`, {\n method: 'PUT',\n body: JSON.stringify({ releaseId }),\n });\n }\n\n async changePostStatus(postId: string, status: 'draft' | 'schedule') {\n return this.request(`/public/v1/posts/${postId}/status`, {\n method: 'PUT',\n body: JSON.stringify({ status }),\n });\n }\n\n async getAnalytics(integrationId: string, date: string) {\n return this.request(`/public/v1/analytics/${integrationId}?date=${encodeURIComponent(date)}`, {\n method: 'GET',\n });\n }\n\n async getPostAnalytics(postId: string, date: string) {\n return this.request(`/public/v1/analytics/post/${postId}?date=${encodeURIComponent(date)}`, {\n method: 'GET',\n });\n }\n\n async listIntegrations() {\n return this.request('/public/v1/integrations', {\n method: 'GET',\n });\n }\n\n async getIntegrationSettings(integrationId: string) {\n return this.request(`/public/v1/integration-settings/${integrationId}`, {\n method: 'GET',\n });\n }\n\n async triggerIntegrationTool(\n integrationId: string,\n methodName: string,\n data: Record<string, string>\n ) {\n return this.request(`/public/v1/integration-trigger/${integrationId}`, {\n method: 'POST',\n body: JSON.stringify({ methodName, data }),\n });\n }\n}\n","import { readFileSync, writeFileSync, mkdirSync, existsSync, unlinkSync, chmodSync } from 'fs';\nimport { join } from 'path';\nimport { homedir } from 'os';\nimport fetch from 'node-fetch';\n\nconst CREDENTIALS_DIR = join(homedir(), '.postiz');\nconst CREDENTIALS_FILE = join(CREDENTIALS_DIR, 'credentials.json');\n\nconst DEFAULT_AUTH_SERVER = 'https://cli-auth.postiz.com';\n\ninterface StoredCredentials {\n accessToken: string;\n apiUrl: string;\n organizationId?: string;\n}\n\nexport function loadCredentials(): StoredCredentials | null {\n try {\n if (!existsSync(CREDENTIALS_FILE)) return null;\n const data = JSON.parse(readFileSync(CREDENTIALS_FILE, 'utf-8'));\n if (!data.accessToken) return null;\n return data;\n } catch {\n return null;\n }\n}\n\nfunction saveCredentials(credentials: StoredCredentials): void {\n if (!existsSync(CREDENTIALS_DIR)) {\n mkdirSync(CREDENTIALS_DIR, { recursive: true, mode: 0o700 });\n }\n writeFileSync(CREDENTIALS_FILE, JSON.stringify(credentials, null, 2), { encoding: 'utf-8', mode: 0o600 });\n // Ensure permissions even if file already existed\n chmodSync(CREDENTIALS_FILE, 0o600);\n}\n\nfunction deleteCredentials(): void {\n if (existsSync(CREDENTIALS_FILE)) {\n unlinkSync(CREDENTIALS_FILE);\n }\n}\n\nfunction openBrowser(url: string): void {\n const { exec } = require('child_process');\n const platform = process.platform;\n\n if (platform === 'darwin') {\n exec(`open \"${url}\"`);\n } else if (platform === 'win32') {\n exec(`start \"\" \"${url}\"`);\n } else {\n exec(`xdg-open \"${url}\"`);\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function authLogin(argv: any) {\n const authServer = argv.authServer || process.env.POSTIZ_AUTH_SERVER || DEFAULT_AUTH_SERVER;\n\n console.log('šŸ” Starting device authorization flow...\\n');\n\n // Step 1: Request a device code from the auth server\n let deviceCode: string;\n let userCode: string;\n let verificationUri: string;\n let expiresIn: number;\n let interval: number;\n\n try {\n const response = await fetch(`${authServer}/device/code`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n });\n\n if (!response.ok) {\n const error = await response.text();\n console.error(`āŒ Failed to start authorization (${response.status}): ${error}`);\n process.exit(1);\n }\n\n const data = (await response.json()) as any;\n deviceCode = data.device_code;\n userCode = data.user_code;\n verificationUri = data.verification_uri;\n expiresIn = data.expires_in;\n interval = data.interval || 5;\n } catch (error: any) {\n console.error(`āŒ Could not reach auth server at ${authServer}: ${error.message}`);\n process.exit(1);\n }\n\n // Step 2: Show the user code and open browser\n console.log(' Your authorization code:\\n');\n console.log(` ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”`);\n console.log(` │ ${userCode} │`);\n console.log(` ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜\\n`);\n console.log(` Open this URL and enter the code above:`);\n console.log(` ${verificationUri}\\n`);\n\n openBrowser(`${verificationUri}?code=${encodeURIComponent(userCode)}`);\n\n console.log(' Waiting for authorization...\\n');\n\n // Step 3: Poll for the token\n const deadline = Date.now() + expiresIn * 1000;\n\n while (Date.now() < deadline) {\n await sleep(interval * 1000);\n\n try {\n const response = await fetch(`${authServer}/device/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ device_code: deviceCode }),\n });\n\n const data = (await response.json()) as any;\n\n if (response.ok && data.access_token) {\n saveCredentials({\n accessToken: data.access_token,\n apiUrl: data.api_url || 'https://api.postiz.com',\n organizationId: data.organization_id,\n });\n\n console.log('āœ… Successfully authenticated!');\n console.log(`šŸ“ Credentials saved to ${CREDENTIALS_FILE}`);\n if (data.organization_id) {\n console.log(`šŸ¢ Organization ID: ${data.organization_id}`);\n }\n return;\n }\n\n if (data.error === 'authorization_pending') {\n continue;\n }\n\n if (data.error === 'expired_token') {\n console.error('āŒ Authorization expired. Please try again.');\n process.exit(1);\n }\n\n // Unknown error\n console.error(`āŒ Authorization failed: ${data.error}`);\n process.exit(1);\n } catch {\n // Network error during poll — keep trying\n continue;\n }\n }\n\n console.error('āŒ Authorization timed out. Please try again.');\n process.exit(1);\n}\n\nexport async function authLogout() {\n const creds = loadCredentials();\n if (!creds) {\n console.log('ā„¹ļø No stored credentials found.');\n return;\n }\n\n deleteCredentials();\n console.log('āœ… Credentials removed.');\n}\n\nexport async function authStatus() {\n const envKey = process.env.POSTIZ_API_KEY;\n const creds = loadCredentials();\n\n let apiKey: string | undefined;\n let apiUrl: string;\n\n if (creds) {\n console.log('šŸ” Authentication method: OAuth2');\n console.log(`šŸ“” API URL: ${creds.apiUrl}`);\n console.log(`šŸ”‘ Token: ${creds.accessToken.substring(0, 8)}...`);\n if (creds.organizationId) {\n console.log(`šŸ¢ Organization: ${creds.organizationId}`);\n }\n console.log(`šŸ“ Credentials file: ${CREDENTIALS_FILE}`);\n apiKey = creds.accessToken;\n apiUrl = creds.apiUrl;\n } else if (envKey) {\n console.log('šŸ”‘ Authentication method: API Key (environment variable)');\n console.log(`šŸ”‘ Key: ${envKey.substring(0, 8)}...`);\n apiKey = envKey;\n apiUrl = process.env.POSTIZ_API_URL || 'https://api.postiz.com';\n } else {\n console.log('āŒ Not authenticated.');\n console.log('\\nOptions:');\n console.log(' 1. OAuth2: postiz auth:login');\n console.log(' 2. API Key: export POSTIZ_API_KEY=your_api_key');\n return;\n }\n\n // Verify credentials by calling the integrations endpoint\n console.log('\\nšŸ”„ Verifying credentials...');\n try {\n const response = await fetch(`${apiUrl}/public/v1/integrations`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: apiKey,\n },\n });\n\n if (response.ok) {\n const integrations = (await response.json()) as any[];\n console.log(`āœ… Credentials are valid. ${integrations.length} integration(s) connected.`);\n } else if (response.status === 401 || response.status === 403) {\n console.log('āŒ Credentials are expired or invalid. Please re-authenticate.');\n if (creds) {\n console.log(' Run: postiz auth:login');\n } else {\n console.log(' Update your POSTIZ_API_KEY environment variable.');\n }\n } else {\n const error = await response.text();\n console.log(`āš ļø Could not verify credentials (HTTP ${response.status}): ${error}`);\n }\n } catch (error: any) {\n console.log(`āš ļø Could not reach API to verify credentials: ${error.message}`);\n }\n}\n","import { PostizConfig } from './api';\nimport { loadCredentials } from './commands/auth';\n\nexport function getConfig(): PostizConfig {\n // Check for stored OAuth credentials first\n const creds = loadCredentials();\n if (creds) {\n return {\n apiKey: creds.accessToken,\n apiUrl: creds.apiUrl,\n };\n }\n\n // Fall back to environment variable\n const apiKey = process.env.POSTIZ_API_KEY;\n const apiUrl = process.env.POSTIZ_API_URL;\n\n if (!apiKey) {\n console.error('āŒ Error: No authentication found.');\n console.error('Options:');\n console.error(' 1. OAuth2: postiz auth:login --client-id <id> --client-secret <secret>');\n console.error(' 2. API Key: export POSTIZ_API_KEY=your_api_key');\n process.exit(1);\n }\n\n return {\n apiKey,\n apiUrl,\n };\n}\n","import { PostizAPI } from '../api';\nimport { getConfig } from '../config';\nimport { readFileSync, existsSync } from 'fs';\n\nexport async function getMissingContent(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.id) {\n console.error('āŒ Post ID is required');\n process.exit(1);\n }\n\n try {\n const result = await api.getMissingContent(args.id);\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to get missing content:', error.message);\n process.exit(1);\n }\n}\n\nexport async function connectPost(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.id) {\n console.error('āŒ Post ID is required');\n process.exit(1);\n }\n\n if (!args.releaseId) {\n console.error('āŒ --release-id is required');\n process.exit(1);\n }\n\n try {\n const result = await api.updateReleaseId(args.id, args.releaseId);\n console.log(`āœ… Post ${args.id} connected to release ${args.releaseId}`);\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to connect post:', error.message);\n process.exit(1);\n }\n}\n\nexport async function createPost(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n // Support both simple and complex post creation\n let postData: any;\n\n if (args.json) {\n // Load from JSON file for complex posts with comments and media\n try {\n const jsonPath = args.json;\n if (!existsSync(jsonPath)) {\n console.error(`āŒ JSON file not found: ${jsonPath}`);\n process.exit(1);\n }\n const jsonContent = readFileSync(jsonPath, 'utf-8');\n postData = JSON.parse(jsonContent);\n } catch (error: any) {\n console.error('āŒ Failed to parse JSON file:', error.message);\n process.exit(1);\n }\n } else {\n const integrations = args.integrations\n ? args.integrations.split(',').map((id: string) => id.trim())\n : [];\n\n if (integrations.length === 0) {\n console.error('āŒ At least one integration ID is required');\n console.error('Use -i or --integrations to specify integration IDs');\n console.error('Run \"postiz integrations:list\" to see available integrations');\n process.exit(1);\n }\n\n // Support multiple -c and -m flags\n // Normalize to arrays\n const contents = Array.isArray(args.content) ? args.content : [args.content];\n const medias = Array.isArray(args.media) ? args.media : (args.media ? [args.media] : []);\n\n if (!contents[0]) {\n console.error('āŒ At least one -c/--content is required');\n process.exit(1);\n }\n\n // Build value array by pairing contents with their media\n const values = contents.map((content: string, index: number) => {\n const mediaForThisContent = medias[index];\n const images = mediaForThisContent\n ? mediaForThisContent.split(',').map((img: string) => ({\n id: Math.random().toString(36).substring(7),\n path: img.trim(),\n }))\n : [];\n\n return {\n content: content,\n image: images,\n delay: args?.delay || 0,\n };\n });\n\n // Parse provider-specific settings if provided\n // Note: __type is automatically added by the backend based on integration ID\n let settings: any = undefined;\n\n if (args.settings) {\n try {\n settings = typeof args.settings === 'string'\n ? JSON.parse(args.settings)\n : args.settings;\n } catch (error: any) {\n console.error('āŒ Failed to parse settings JSON:', error.message);\n process.exit(1);\n }\n }\n\n // Build the proper post structure\n postData = {\n type: args.type || 'schedule', // 'schedule' or 'draft'\n creationMethod: 'CLI',\n date: args.date, // Required date field\n shortLink: args.shortLink !== false,\n tags: [],\n posts: integrations.map((integrationId: string) => ({\n integration: { id: integrationId },\n value: values,\n settings: settings,\n })),\n };\n }\n\n try {\n const result = await api.createPost(postData);\n console.log('āœ… Post created successfully!');\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to create post:', error.message);\n process.exit(1);\n }\n}\n\nexport async function listPosts(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n // Set default date range: last 30 days to 30 days in the future\n const defaultStartDate = new Date();\n defaultStartDate.setDate(defaultStartDate.getDate() - 30);\n\n const defaultEndDate = new Date();\n defaultEndDate.setDate(defaultEndDate.getDate() + 30);\n\n // Only send fields that are in GetPostsDto\n const filters: any = {\n startDate: args.startDate || defaultStartDate.toISOString(),\n endDate: args.endDate || defaultEndDate.toISOString(),\n };\n\n // customer is optional in the DTO\n if (args.customer) {\n filters.customer = args.customer;\n }\n\n try {\n const result = await api.listPosts(filters);\n console.log('šŸ“‹ Posts:');\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to list posts:', error.message);\n process.exit(1);\n }\n}\n\nexport async function changePostStatus(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.id) {\n console.error('āŒ Post ID is required');\n process.exit(1);\n }\n\n if (args.status !== 'draft' && args.status !== 'schedule') {\n console.error('āŒ --status must be either \"draft\" or \"schedule\"');\n process.exit(1);\n }\n\n try {\n const result = await api.changePostStatus(args.id, args.status);\n console.log(`āœ… Post ${args.id} status changed to ${args.status}`);\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to change post status:', error.message);\n process.exit(1);\n }\n}\n\nexport async function deletePost(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.id) {\n console.error('āŒ Post ID is required');\n process.exit(1);\n }\n\n try {\n await api.deletePost(args.id);\n console.log(`āœ… Post ${args.id} deleted successfully!`);\n } catch (error: any) {\n console.error('āŒ Failed to delete post:', error.message);\n process.exit(1);\n }\n}\n","import { PostizAPI } from '../api';\nimport { getConfig } from '../config';\n\nexport async function listIntegrations() {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n try {\n const result = await api.listIntegrations();\n console.log('šŸ”Œ Connected Integrations:');\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to list integrations:', error.message);\n process.exit(1);\n }\n}\n\nexport async function getIntegrationSettings(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.id) {\n console.error('āŒ Integration ID is required');\n process.exit(1);\n }\n\n try {\n const result = await api.getIntegrationSettings(args.id);\n console.log(`āš™ļø Settings for integration: ${args.id}`);\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to get integration settings:', error.message);\n process.exit(1);\n }\n}\n\nexport async function triggerIntegrationTool(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.id) {\n console.error('āŒ Integration ID is required');\n process.exit(1);\n }\n\n if (!args.method) {\n console.error('āŒ Method name is required');\n process.exit(1);\n }\n\n // Parse data from JSON string or use empty object\n let data: Record<string, string> = {};\n if (args.data) {\n try {\n data = JSON.parse(args.data);\n } catch (error: any) {\n console.error('āŒ Failed to parse data JSON:', error.message);\n process.exit(1);\n }\n }\n\n try {\n const result = await api.triggerIntegrationTool(args.id, args.method, data);\n console.log(`šŸ”§ Tool result for ${args.method}:`);\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to trigger tool:', error.message);\n process.exit(1);\n }\n}\n","import { PostizAPI } from '../api';\nimport { getConfig } from '../config';\n\nexport async function getAnalytics(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.id) {\n console.error('āŒ Integration ID is required');\n process.exit(1);\n }\n\n const date = args.date || '7';\n\n try {\n const result = await api.getAnalytics(args.id, date);\n console.log(`šŸ“Š Analytics for integration: ${args.id}`);\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to get analytics:', error.message);\n process.exit(1);\n }\n}\n\nexport async function getPostAnalytics(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.id) {\n console.error('āŒ Post ID is required');\n process.exit(1);\n }\n\n const date = args.date || '7';\n\n try {\n const result = await api.getPostAnalytics(args.id, date);\n console.log(`šŸ“Š Analytics for post: ${args.id}`);\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to get post analytics:', error.message);\n process.exit(1);\n }\n}\n","import { PostizAPI } from '../api';\nimport { getConfig } from '../config';\nimport { readFileSync } from 'fs';\n\nexport async function uploadFile(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.file) {\n console.error('āŒ File path is required');\n process.exit(1);\n }\n\n try {\n const fileBuffer = readFileSync(args.file);\n const filename = args.file.split('/').pop() || 'file';\n\n const result = await api.upload(fileBuffer, filename);\n console.log('āœ… File uploaded successfully!');\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to upload file:', error.message);\n process.exit(1);\n }\n}\n"],"mappings":"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","names":["fetch","import_node_fetch","fetch","import_fs","import_fs","yargs"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/api.ts","../src/commands/auth.ts","../src/config.ts","../src/commands/posts.ts","../src/commands/integrations.ts","../src/commands/analytics.ts","../src/commands/upload.ts"],"sourcesContent":["import yargs from 'yargs';\nimport { hideBin } from 'yargs/helpers';\nimport { createPost, listPosts, deletePost, getMissingContent, connectPost, changePostStatus } from './commands/posts';\nimport { listIntegrations, listGroups, getIntegrationSettings, triggerIntegrationTool } from './commands/integrations';\nimport { getAnalytics, getPostAnalytics } from './commands/analytics';\nimport { uploadFile } from './commands/upload';\nimport { authLogin, authLogout, authStatus } from './commands/auth';\nimport type { Argv } from 'yargs';\n\nyargs(hideBin(process.argv))\n .scriptName('postiz')\n .usage('$0 <command> [options]')\n .command(\n 'posts:create',\n 'Create a new post',\n (yargs: Argv) => {\n return yargs\n .option('content', {\n alias: 'c',\n describe: 'Post/comment content (can be used multiple times)',\n type: 'string',\n })\n .option('media', {\n alias: 'm',\n describe: 'Comma-separated media URLs for the corresponding -c (can be used multiple times)',\n type: 'string',\n })\n .option('integrations', {\n alias: 'i',\n describe: 'Comma-separated list of integration IDs',\n type: 'string',\n })\n .option('date', {\n alias: 's',\n describe: 'Schedule date (ISO 8601 format) - REQUIRED',\n type: 'string',\n })\n .option('type', {\n alias: 't',\n describe: 'Post type: \"schedule\" or \"draft\"',\n type: 'string',\n choices: ['schedule', 'draft'],\n default: 'schedule',\n })\n .option('delay', {\n alias: 'd',\n describe: 'Delay in minutes between comments (default: 0)',\n type: 'number',\n default: 0,\n })\n .option('json', {\n alias: 'j',\n describe: 'Path to JSON file with full post structure',\n type: 'string',\n })\n .option('shortLink', {\n describe: 'Use short links',\n type: 'boolean',\n default: true,\n })\n .option('settings', {\n describe: 'Platform-specific settings as JSON string',\n type: 'string',\n })\n .check((argv) => {\n if (!argv.json && !argv.content) {\n throw new Error('Either --content or --json is required');\n }\n if (!argv.json && !argv.integrations) {\n throw new Error('--integrations is required when not using --json');\n }\n if (!argv.json && !argv.date) {\n throw new Error('--date is required when not using --json');\n }\n return true;\n })\n .example(\n '$0 posts:create -c \"Hello World!\" -s \"2024-12-31T12:00:00Z\" -i \"twitter-123\"',\n 'Simple scheduled post'\n )\n .example(\n '$0 posts:create -c \"Draft post\" -s \"2024-12-31T12:00:00Z\" -t draft -i \"twitter-123\"',\n 'Create draft post'\n )\n .example(\n '$0 posts:create -c \"Main post\" -m \"img1.jpg,img2.jpg\" -s \"2024-12-31T12:00:00Z\" -i \"twitter-123\"',\n 'Post with multiple images'\n )\n .example(\n '$0 posts:create -c \"Main post\" -m \"img1.jpg\" -c \"First comment\" -m \"img2.jpg\" -c \"Second comment\" -m \"img3.jpg,img4.jpg\" -s \"2024-12-31T12:00:00Z\" -i \"twitter-123\"',\n 'Post with comments, each having their own media'\n )\n .example(\n '$0 posts:create -c \"Main\" -c \"Comment with semicolon; see?\" -c \"Another!\" -s \"2024-12-31T12:00:00Z\" -i \"twitter-123\"',\n 'Comments can contain semicolons'\n )\n .example(\n '$0 posts:create -c \"Thread 1/3\" -c \"Thread 2/3\" -c \"Thread 3/3\" -d 5 -s \"2024-12-31T12:00:00Z\" -i \"twitter-123\"',\n 'Twitter thread with 5 minute delay'\n )\n .example(\n '$0 posts:create --json ./post.json',\n 'Complex post from JSON file'\n )\n .example(\n '$0 posts:create -c \"Post to subreddit\" -s \"2024-12-31T12:00:00Z\" --settings \\'{\"subreddit\":[{\"value\":{\"subreddit\":\"programming\",\"title\":\"My Title\",\"type\":\"text\",\"url\":\"\",\"is_flair_required\":false}}]}\\' -i \"reddit-123\"',\n 'Reddit post with specific subreddit settings'\n )\n .example(\n '$0 posts:create -c \"Video description\" -s \"2024-12-31T12:00:00Z\" --settings \\'{\"title\":\"My Video\",\"type\":\"public\",\"tags\":[{\"value\":\"tech\",\"label\":\"Tech\"}]}\\' -i \"youtube-123\"',\n 'YouTube post with title and tags'\n )\n .example(\n '$0 posts:create -c \"Tweet content\" -s \"2024-12-31T12:00:00Z\" --settings \\'{\"who_can_reply_post\":\"everyone\"}\\' -i \"twitter-123\"',\n 'X (Twitter) post with reply settings'\n );\n },\n createPost as any\n )\n .command(\n 'posts:list',\n 'List all posts',\n (yargs: Argv) => {\n return yargs\n .option('startDate', {\n describe: 'Start date (ISO 8601 format). Default: 30 days ago',\n type: 'string',\n })\n .option('endDate', {\n describe: 'End date (ISO 8601 format). Default: 30 days from now',\n type: 'string',\n })\n .option('customer', {\n describe: 'Customer ID (optional)',\n type: 'string',\n })\n .example('$0 posts:list', 'List all posts (last 30 days to next 30 days)')\n .example(\n '$0 posts:list --startDate \"2024-01-01T00:00:00Z\" --endDate \"2024-12-31T23:59:59Z\"',\n 'List posts for a specific date range'\n )\n .example(\n '$0 posts:list --customer \"customer-id\"',\n 'List posts for a specific customer'\n );\n },\n listPosts as any\n )\n .command(\n 'posts:delete <id>',\n 'Delete a post',\n (yargs: Argv) => {\n return yargs\n .positional('id', {\n describe: 'Post ID to delete',\n type: 'string',\n })\n .example('$0 posts:delete abc123', 'Delete post with ID abc123');\n },\n deletePost as any\n )\n .command(\n 'posts:missing <id>',\n 'List available content from the provider for a post with missing release ID',\n (yargs: Argv) => {\n return yargs\n .positional('id', {\n describe: 'Post ID',\n type: 'string',\n })\n .example(\n '$0 posts:missing post-123',\n 'Get available content to connect to a post'\n );\n },\n getMissingContent as any\n )\n .command(\n 'posts:status <id>',\n 'Change a post status between draft and schedule',\n (yargs: Argv) => {\n return yargs\n .positional('id', {\n describe: 'Post ID',\n type: 'string',\n })\n .option('status', {\n alias: 's',\n describe: 'New status: \"draft\" or \"schedule\"',\n type: 'string',\n choices: ['draft', 'schedule'],\n demandOption: true,\n })\n .example(\n '$0 posts:status post-123 --status draft',\n 'Move a scheduled post back to draft (stops the running workflow)'\n )\n .example(\n '$0 posts:status post-123 --status schedule',\n 'Schedule a draft post so it is queued for publishing'\n );\n },\n changePostStatus as any\n )\n .command(\n 'posts:connect <id>',\n 'Connect a post to its published content by updating the release ID',\n (yargs: Argv) => {\n return yargs\n .positional('id', {\n describe: 'Post ID',\n type: 'string',\n })\n .option('release-id', {\n describe: 'The platform-specific content ID to connect',\n type: 'string',\n demandOption: true,\n })\n .example(\n '$0 posts:connect post-123 --release-id \"7321456789012345678\"',\n 'Connect a post to its published content'\n );\n },\n connectPost as any\n )\n .command(\n 'integrations:list',\n 'List all connected integrations',\n (yargs: Argv) => {\n return yargs\n .option('group', {\n describe: 'Filter integrations by group (customer) ID',\n type: 'string',\n })\n .example('$0 integrations:list', 'List all connected integrations')\n .example(\n '$0 integrations:list --group \"customer-id\"',\n 'List integrations for a specific group'\n );\n },\n listIntegrations as any\n )\n .command(\n 'integrations:groups',\n 'List all groups (customers)',\n {},\n listGroups as any\n )\n .command(\n 'integrations:settings <id>',\n 'Get settings schema for a specific integration',\n (yargs: Argv) => {\n return yargs\n .positional('id', {\n describe: 'Integration ID',\n type: 'string',\n })\n .example(\n '$0 integrations:settings reddit-123',\n 'Get settings schema for Reddit integration'\n )\n .example(\n '$0 integrations:settings youtube-456',\n 'Get settings schema for YouTube integration'\n );\n },\n getIntegrationSettings as any\n )\n .command(\n 'integrations:trigger <id> <method>',\n 'Trigger an integration tool to fetch additional data',\n (yargs: Argv) => {\n return yargs\n .positional('id', {\n describe: 'Integration ID',\n type: 'string',\n })\n .positional('method', {\n describe: 'Method name from the integration tools',\n type: 'string',\n })\n .option('data', {\n alias: 'd',\n describe: 'Data to pass to the tool as JSON string',\n type: 'string',\n })\n .example(\n '$0 integrations:trigger reddit-123 getSubreddits',\n 'Get list of subreddits'\n )\n .example(\n '$0 integrations:trigger reddit-123 searchSubreddits -d \\'{\"query\":\"programming\"}\\'',\n 'Search for subreddits'\n )\n .example(\n '$0 integrations:trigger youtube-123 getPlaylists',\n 'Get YouTube playlists'\n );\n },\n triggerIntegrationTool as any\n )\n .command(\n 'analytics:platform <id>',\n 'Get analytics for a specific integration/channel',\n (yargs: Argv) => {\n return yargs\n .positional('id', {\n describe: 'Integration ID',\n type: 'string',\n })\n .option('date', {\n alias: 'd',\n describe: 'Number of days to look back (default: 7)',\n type: 'string',\n default: '7',\n })\n .example(\n '$0 analytics:platform integration-123',\n 'Get last 7 days of analytics'\n )\n .example(\n '$0 analytics:platform integration-123 -d 30',\n 'Get last 30 days of analytics'\n );\n },\n getAnalytics as any\n )\n .command(\n 'analytics:post <id>',\n 'Get analytics for a specific post',\n (yargs: Argv) => {\n return yargs\n .positional('id', {\n describe: 'Post ID',\n type: 'string',\n })\n .option('date', {\n alias: 'd',\n describe: 'Number of days to look back (default: 7)',\n type: 'string',\n default: '7',\n })\n .example(\n '$0 analytics:post post-123',\n 'Get last 7 days of post analytics'\n )\n .example(\n '$0 analytics:post post-123 -d 30',\n 'Get last 30 days of post analytics'\n );\n },\n getPostAnalytics as any\n )\n .command(\n 'upload <file>',\n 'Upload a file',\n (yargs: Argv) => {\n return yargs\n .positional('file', {\n describe: 'File path to upload',\n type: 'string',\n })\n .example('$0 upload ./image.png', 'Upload an image');\n },\n uploadFile as any\n )\n .command(\n 'auth:login',\n 'Authenticate using OAuth2 (device flow)',\n (yargs: Argv) => {\n return yargs\n .option('auth-server', {\n describe: 'Auth server URL (default: https://cli-auth.postiz.com)',\n type: 'string',\n })\n .example(\n '$0 auth:login',\n 'Login via OAuth2 device flow'\n );\n },\n authLogin as any\n )\n .command(\n 'auth:logout',\n 'Remove stored OAuth2 credentials',\n {},\n authLogout as any\n )\n .command(\n 'auth:status',\n 'Show current authentication status',\n {},\n authStatus as any\n )\n .demandCommand(1, 'You need at least one command')\n .help()\n .alias('h', 'help')\n .version()\n .alias('v', 'version')\n .epilogue(\n 'For more information, visit: https://postiz.com\\n\\nAuthentication:\\n OAuth2: postiz auth:login\\n API Key: export POSTIZ_API_KEY=your_api_key\\n\\nšŸ“½ļø Recommendation: Use agent-media to generate AI videos & images (Kling, Veo, Sora, Seedance, Flux, Grok) and post them directly with Postiz.\\n Install: npm install -g agent-media-cli\\n Learn more: https://agent-media.ai'\n )\n .parse();\n","import fetch, { FormData } from 'node-fetch';\n\nexport interface PostizConfig {\n apiKey: string;\n apiUrl?: string;\n}\n\nexport class PostizAPI {\n private apiKey: string;\n private apiUrl: string;\n\n constructor(config: PostizConfig) {\n this.apiKey = config.apiKey;\n this.apiUrl = config.apiUrl || 'https://api.postiz.com';\n }\n\n private async request(endpoint: string, options: any = {}) {\n const url = `${this.apiUrl}${endpoint}`;\n const headers = {\n 'Content-Type': 'application/json',\n Authorization: this.apiKey,\n ...options.headers,\n };\n\n try {\n const response = await fetch(url, {\n ...options,\n headers,\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`API Error (${response.status}): ${error}`);\n }\n\n return await response.json();\n } catch (error: any) {\n throw new Error(`Request failed: ${error.message}`);\n }\n }\n\n async createPost(data: any) {\n return this.request('/public/v1/posts', {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n async listPosts(filters: any = {}) {\n const queryString = new URLSearchParams(\n Object.entries(filters).reduce((acc, [key, value]) => {\n if (value !== undefined && value !== null) {\n acc[key] = String(value);\n }\n return acc;\n }, {} as Record<string, string>)\n ).toString();\n\n const endpoint = queryString\n ? `/public/v1/posts?${queryString}`\n : '/public/v1/posts';\n\n return this.request(endpoint, {\n method: 'GET',\n });\n }\n\n async deletePost(id: string) {\n return this.request(`/public/v1/posts/${id}`, {\n method: 'DELETE',\n });\n }\n\n async upload(file: Buffer, filename: string) {\n const formData = new FormData();\n const extension = filename.split('.').pop()?.toLowerCase() || '';\n\n // Determine MIME type based on file extension\n const mimeTypes: Record<string, string> = {\n // Images\n 'png': 'image/png',\n 'jpg': 'image/jpeg',\n 'jpeg': 'image/jpeg',\n 'gif': 'image/gif',\n 'webp': 'image/webp',\n 'svg': 'image/svg+xml',\n 'bmp': 'image/bmp',\n 'ico': 'image/x-icon',\n\n // Videos\n 'mp4': 'video/mp4',\n 'mov': 'video/quicktime',\n 'avi': 'video/x-msvideo',\n 'mkv': 'video/x-matroska',\n 'webm': 'video/webm',\n 'flv': 'video/x-flv',\n 'wmv': 'video/x-ms-wmv',\n 'm4v': 'video/x-m4v',\n 'mpeg': 'video/mpeg',\n 'mpg': 'video/mpeg',\n '3gp': 'video/3gpp',\n\n // Audio\n 'mp3': 'audio/mpeg',\n 'wav': 'audio/wav',\n 'ogg': 'audio/ogg',\n 'aac': 'audio/aac',\n 'flac': 'audio/flac',\n 'm4a': 'audio/mp4',\n\n // Documents\n 'pdf': 'application/pdf',\n 'doc': 'application/msword',\n 'docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n };\n\n const type = mimeTypes[extension] || 'application/octet-stream';\n\n const blob = new Blob([file], { type });\n formData.append('file', blob, filename);\n\n const url = `${this.apiUrl}/public/v1/upload`;\n const response = await fetch(url, {\n method: 'POST',\n // @ts-ignore\n body: formData,\n headers: {\n Authorization: this.apiKey,\n },\n });\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Upload failed (${response.status}): ${error}`);\n }\n\n return await response.json();\n }\n\n async getMissingContent(postId: string) {\n return this.request(`/public/v1/posts/${postId}/missing`, {\n method: 'GET',\n });\n }\n\n async updateReleaseId(postId: string, releaseId: string) {\n return this.request(`/public/v1/posts/${postId}/release-id`, {\n method: 'PUT',\n body: JSON.stringify({ releaseId }),\n });\n }\n\n async changePostStatus(postId: string, status: 'draft' | 'schedule') {\n return this.request(`/public/v1/posts/${postId}/status`, {\n method: 'PUT',\n body: JSON.stringify({ status }),\n });\n }\n\n async getAnalytics(integrationId: string, date: string) {\n return this.request(`/public/v1/analytics/${integrationId}?date=${encodeURIComponent(date)}`, {\n method: 'GET',\n });\n }\n\n async getPostAnalytics(postId: string, date: string) {\n return this.request(`/public/v1/analytics/post/${postId}?date=${encodeURIComponent(date)}`, {\n method: 'GET',\n });\n }\n\n async listIntegrations(group?: string) {\n const query = group ? `?group=${encodeURIComponent(group)}` : '';\n return this.request(`/public/v1/integrations${query}`, {\n method: 'GET',\n });\n }\n\n async listGroups() {\n return this.request('/public/v1/groups', {\n method: 'GET',\n });\n }\n\n async getIntegrationSettings(integrationId: string) {\n return this.request(`/public/v1/integration-settings/${integrationId}`, {\n method: 'GET',\n });\n }\n\n async triggerIntegrationTool(\n integrationId: string,\n methodName: string,\n data: Record<string, string>\n ) {\n return this.request(`/public/v1/integration-trigger/${integrationId}`, {\n method: 'POST',\n body: JSON.stringify({ methodName, data }),\n });\n }\n}\n","import { readFileSync, writeFileSync, mkdirSync, existsSync, unlinkSync, chmodSync } from 'fs';\nimport { join } from 'path';\nimport { homedir } from 'os';\nimport fetch from 'node-fetch';\n\nconst CREDENTIALS_DIR = join(homedir(), '.postiz');\nconst CREDENTIALS_FILE = join(CREDENTIALS_DIR, 'credentials.json');\n\nconst DEFAULT_AUTH_SERVER = 'https://cli-auth.postiz.com';\n\ninterface StoredCredentials {\n accessToken: string;\n apiUrl: string;\n organizationId?: string;\n}\n\nexport function loadCredentials(): StoredCredentials | null {\n try {\n if (!existsSync(CREDENTIALS_FILE)) return null;\n const data = JSON.parse(readFileSync(CREDENTIALS_FILE, 'utf-8'));\n if (!data.accessToken) return null;\n return data;\n } catch {\n return null;\n }\n}\n\nfunction saveCredentials(credentials: StoredCredentials): void {\n if (!existsSync(CREDENTIALS_DIR)) {\n mkdirSync(CREDENTIALS_DIR, { recursive: true, mode: 0o700 });\n }\n writeFileSync(CREDENTIALS_FILE, JSON.stringify(credentials, null, 2), { encoding: 'utf-8', mode: 0o600 });\n // Ensure permissions even if file already existed\n chmodSync(CREDENTIALS_FILE, 0o600);\n}\n\nfunction deleteCredentials(): void {\n if (existsSync(CREDENTIALS_FILE)) {\n unlinkSync(CREDENTIALS_FILE);\n }\n}\n\nfunction openBrowser(url: string): void {\n const { exec } = require('child_process');\n const platform = process.platform;\n\n if (platform === 'darwin') {\n exec(`open \"${url}\"`);\n } else if (platform === 'win32') {\n exec(`start \"\" \"${url}\"`);\n } else {\n exec(`xdg-open \"${url}\"`);\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function authLogin(argv: any) {\n const authServer = argv.authServer || process.env.POSTIZ_AUTH_SERVER || DEFAULT_AUTH_SERVER;\n\n console.log('šŸ” Starting device authorization flow...\\n');\n\n // Step 1: Request a device code from the auth server\n let deviceCode: string;\n let userCode: string;\n let verificationUri: string;\n let expiresIn: number;\n let interval: number;\n\n try {\n const response = await fetch(`${authServer}/device/code`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n });\n\n if (!response.ok) {\n const error = await response.text();\n console.error(`āŒ Failed to start authorization (${response.status}): ${error}`);\n process.exit(1);\n }\n\n const data = (await response.json()) as any;\n deviceCode = data.device_code;\n userCode = data.user_code;\n verificationUri = data.verification_uri;\n expiresIn = data.expires_in;\n interval = data.interval || 5;\n } catch (error: any) {\n console.error(`āŒ Could not reach auth server at ${authServer}: ${error.message}`);\n process.exit(1);\n }\n\n // Step 2: Show the user code and open browser\n console.log(' Your authorization code:\\n');\n console.log(` ā”Œā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”`);\n console.log(` │ ${userCode} │`);\n console.log(` ā””ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”€ā”˜\\n`);\n console.log(` Open this URL and enter the code above:`);\n console.log(` ${verificationUri}\\n`);\n\n openBrowser(`${verificationUri}?code=${encodeURIComponent(userCode)}`);\n\n console.log(' Waiting for authorization...\\n');\n\n // Step 3: Poll for the token\n const deadline = Date.now() + expiresIn * 1000;\n\n while (Date.now() < deadline) {\n await sleep(interval * 1000);\n\n try {\n const response = await fetch(`${authServer}/device/token`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ device_code: deviceCode }),\n });\n\n const data = (await response.json()) as any;\n\n if (response.ok && data.access_token) {\n saveCredentials({\n accessToken: data.access_token,\n apiUrl: data.api_url || 'https://api.postiz.com',\n organizationId: data.organization_id,\n });\n\n console.log('āœ… Successfully authenticated!');\n console.log(`šŸ“ Credentials saved to ${CREDENTIALS_FILE}`);\n if (data.organization_id) {\n console.log(`šŸ¢ Organization ID: ${data.organization_id}`);\n }\n return;\n }\n\n if (data.error === 'authorization_pending') {\n continue;\n }\n\n if (data.error === 'expired_token') {\n console.error('āŒ Authorization expired. Please try again.');\n process.exit(1);\n }\n\n // Unknown error\n console.error(`āŒ Authorization failed: ${data.error}`);\n process.exit(1);\n } catch {\n // Network error during poll — keep trying\n continue;\n }\n }\n\n console.error('āŒ Authorization timed out. Please try again.');\n process.exit(1);\n}\n\nexport async function authLogout() {\n const creds = loadCredentials();\n if (!creds) {\n console.log('ā„¹ļø No stored credentials found.');\n return;\n }\n\n deleteCredentials();\n console.log('āœ… Credentials removed.');\n}\n\nexport async function authStatus() {\n const envKey = process.env.POSTIZ_API_KEY;\n const creds = loadCredentials();\n\n let apiKey: string | undefined;\n let apiUrl: string;\n\n if (creds) {\n console.log('šŸ” Authentication method: OAuth2');\n console.log(`šŸ“” API URL: ${creds.apiUrl}`);\n console.log(`šŸ”‘ Token: ${creds.accessToken.substring(0, 8)}...`);\n if (creds.organizationId) {\n console.log(`šŸ¢ Organization: ${creds.organizationId}`);\n }\n console.log(`šŸ“ Credentials file: ${CREDENTIALS_FILE}`);\n apiKey = creds.accessToken;\n apiUrl = creds.apiUrl;\n } else if (envKey) {\n console.log('šŸ”‘ Authentication method: API Key (environment variable)');\n console.log(`šŸ”‘ Key: ${envKey.substring(0, 8)}...`);\n apiKey = envKey;\n apiUrl = process.env.POSTIZ_API_URL || 'https://api.postiz.com';\n } else {\n console.log('āŒ Not authenticated.');\n console.log('\\nOptions:');\n console.log(' 1. OAuth2: postiz auth:login');\n console.log(' 2. API Key: export POSTIZ_API_KEY=your_api_key');\n return;\n }\n\n // Verify credentials by calling the integrations endpoint\n console.log('\\nšŸ”„ Verifying credentials...');\n try {\n const response = await fetch(`${apiUrl}/public/v1/integrations`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: apiKey,\n },\n });\n\n if (response.ok) {\n const integrations = (await response.json()) as any[];\n console.log(`āœ… Credentials are valid. ${integrations.length} integration(s) connected.`);\n } else if (response.status === 401 || response.status === 403) {\n console.log('āŒ Credentials are expired or invalid. Please re-authenticate.');\n if (creds) {\n console.log(' Run: postiz auth:login');\n } else {\n console.log(' Update your POSTIZ_API_KEY environment variable.');\n }\n } else {\n const error = await response.text();\n console.log(`āš ļø Could not verify credentials (HTTP ${response.status}): ${error}`);\n }\n } catch (error: any) {\n console.log(`āš ļø Could not reach API to verify credentials: ${error.message}`);\n }\n}\n","import { PostizConfig } from './api';\nimport { loadCredentials } from './commands/auth';\n\nexport function getConfig(): PostizConfig {\n // Check for stored OAuth credentials first\n const creds = loadCredentials();\n if (creds) {\n return {\n apiKey: creds.accessToken,\n apiUrl: creds.apiUrl,\n };\n }\n\n // Fall back to environment variable\n const apiKey = process.env.POSTIZ_API_KEY;\n const apiUrl = process.env.POSTIZ_API_URL;\n\n if (!apiKey) {\n console.error('āŒ Error: No authentication found.');\n console.error('Options:');\n console.error(' 1. OAuth2: postiz auth:login --client-id <id> --client-secret <secret>');\n console.error(' 2. API Key: export POSTIZ_API_KEY=your_api_key');\n process.exit(1);\n }\n\n return {\n apiKey,\n apiUrl,\n };\n}\n","import { PostizAPI } from '../api';\nimport { getConfig } from '../config';\nimport { readFileSync, existsSync } from 'fs';\n\nexport async function getMissingContent(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.id) {\n console.error('āŒ Post ID is required');\n process.exit(1);\n }\n\n try {\n const result = await api.getMissingContent(args.id);\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to get missing content:', error.message);\n process.exit(1);\n }\n}\n\nexport async function connectPost(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.id) {\n console.error('āŒ Post ID is required');\n process.exit(1);\n }\n\n if (!args.releaseId) {\n console.error('āŒ --release-id is required');\n process.exit(1);\n }\n\n try {\n const result = await api.updateReleaseId(args.id, args.releaseId);\n console.log(`āœ… Post ${args.id} connected to release ${args.releaseId}`);\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to connect post:', error.message);\n process.exit(1);\n }\n}\n\nexport async function createPost(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n // Support both simple and complex post creation\n let postData: any;\n\n if (args.json) {\n // Load from JSON file for complex posts with comments and media\n try {\n const jsonPath = args.json;\n if (!existsSync(jsonPath)) {\n console.error(`āŒ JSON file not found: ${jsonPath}`);\n process.exit(1);\n }\n const jsonContent = readFileSync(jsonPath, 'utf-8');\n postData = JSON.parse(jsonContent);\n } catch (error: any) {\n console.error('āŒ Failed to parse JSON file:', error.message);\n process.exit(1);\n }\n } else {\n const integrations = args.integrations\n ? args.integrations.split(',').map((id: string) => id.trim())\n : [];\n\n if (integrations.length === 0) {\n console.error('āŒ At least one integration ID is required');\n console.error('Use -i or --integrations to specify integration IDs');\n console.error('Run \"postiz integrations:list\" to see available integrations');\n process.exit(1);\n }\n\n // Support multiple -c and -m flags\n // Normalize to arrays\n const contents = Array.isArray(args.content) ? args.content : [args.content];\n const medias = Array.isArray(args.media) ? args.media : (args.media ? [args.media] : []);\n\n if (!contents[0]) {\n console.error('āŒ At least one -c/--content is required');\n process.exit(1);\n }\n\n // Build value array by pairing contents with their media\n const values = contents.map((content: string, index: number) => {\n const mediaForThisContent = medias[index];\n const images = mediaForThisContent\n ? mediaForThisContent.split(',').map((img: string) => ({\n id: Math.random().toString(36).substring(7),\n path: img.trim(),\n }))\n : [];\n\n return {\n content: content,\n image: images,\n delay: args?.delay || 0,\n };\n });\n\n // Parse provider-specific settings if provided\n // Note: __type is automatically added by the backend based on integration ID\n let settings: any = undefined;\n\n if (args.settings) {\n try {\n settings = typeof args.settings === 'string'\n ? JSON.parse(args.settings)\n : args.settings;\n } catch (error: any) {\n console.error('āŒ Failed to parse settings JSON:', error.message);\n process.exit(1);\n }\n }\n\n // Build the proper post structure\n postData = {\n type: args.type || 'schedule', // 'schedule' or 'draft'\n creationMethod: 'CLI',\n date: args.date, // Required date field\n shortLink: args.shortLink !== false,\n tags: [],\n posts: integrations.map((integrationId: string) => ({\n integration: { id: integrationId },\n value: values,\n settings: settings,\n })),\n };\n }\n\n try {\n const result = await api.createPost(postData);\n console.log('āœ… Post created successfully!');\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to create post:', error.message);\n process.exit(1);\n }\n}\n\nexport async function listPosts(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n // Set default date range: last 30 days to 30 days in the future\n const defaultStartDate = new Date();\n defaultStartDate.setDate(defaultStartDate.getDate() - 30);\n\n const defaultEndDate = new Date();\n defaultEndDate.setDate(defaultEndDate.getDate() + 30);\n\n // Only send fields that are in GetPostsDto\n const filters: any = {\n startDate: args.startDate || defaultStartDate.toISOString(),\n endDate: args.endDate || defaultEndDate.toISOString(),\n };\n\n // customer is optional in the DTO\n if (args.customer) {\n filters.customer = args.customer;\n }\n\n try {\n const result = await api.listPosts(filters);\n console.log('šŸ“‹ Posts:');\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to list posts:', error.message);\n process.exit(1);\n }\n}\n\nexport async function changePostStatus(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.id) {\n console.error('āŒ Post ID is required');\n process.exit(1);\n }\n\n if (args.status !== 'draft' && args.status !== 'schedule') {\n console.error('āŒ --status must be either \"draft\" or \"schedule\"');\n process.exit(1);\n }\n\n try {\n const result = await api.changePostStatus(args.id, args.status);\n console.log(`āœ… Post ${args.id} status changed to ${args.status}`);\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to change post status:', error.message);\n process.exit(1);\n }\n}\n\nexport async function deletePost(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.id) {\n console.error('āŒ Post ID is required');\n process.exit(1);\n }\n\n try {\n await api.deletePost(args.id);\n console.log(`āœ… Post ${args.id} deleted successfully!`);\n } catch (error: any) {\n console.error('āŒ Failed to delete post:', error.message);\n process.exit(1);\n }\n}\n","import { PostizAPI } from '../api';\nimport { getConfig } from '../config';\n\nexport async function listIntegrations(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n try {\n const result = await api.listIntegrations(args?.group);\n console.log('šŸ”Œ Connected Integrations:');\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to list integrations:', error.message);\n process.exit(1);\n }\n}\n\nexport async function listGroups() {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n try {\n const result = await api.listGroups();\n console.log('šŸ‘„ Groups (Customers):');\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to list groups:', error.message);\n process.exit(1);\n }\n}\n\nexport async function getIntegrationSettings(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.id) {\n console.error('āŒ Integration ID is required');\n process.exit(1);\n }\n\n try {\n const result = await api.getIntegrationSettings(args.id);\n console.log(`āš™ļø Settings for integration: ${args.id}`);\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to get integration settings:', error.message);\n process.exit(1);\n }\n}\n\nexport async function triggerIntegrationTool(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.id) {\n console.error('āŒ Integration ID is required');\n process.exit(1);\n }\n\n if (!args.method) {\n console.error('āŒ Method name is required');\n process.exit(1);\n }\n\n // Parse data from JSON string or use empty object\n let data: Record<string, string> = {};\n if (args.data) {\n try {\n data = JSON.parse(args.data);\n } catch (error: any) {\n console.error('āŒ Failed to parse data JSON:', error.message);\n process.exit(1);\n }\n }\n\n try {\n const result = await api.triggerIntegrationTool(args.id, args.method, data);\n console.log(`šŸ”§ Tool result for ${args.method}:`);\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to trigger tool:', error.message);\n process.exit(1);\n }\n}\n","import { PostizAPI } from '../api';\nimport { getConfig } from '../config';\n\nexport async function getAnalytics(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.id) {\n console.error('āŒ Integration ID is required');\n process.exit(1);\n }\n\n const date = args.date || '7';\n\n try {\n const result = await api.getAnalytics(args.id, date);\n console.log(`šŸ“Š Analytics for integration: ${args.id}`);\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to get analytics:', error.message);\n process.exit(1);\n }\n}\n\nexport async function getPostAnalytics(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.id) {\n console.error('āŒ Post ID is required');\n process.exit(1);\n }\n\n const date = args.date || '7';\n\n try {\n const result = await api.getPostAnalytics(args.id, date);\n console.log(`šŸ“Š Analytics for post: ${args.id}`);\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to get post analytics:', error.message);\n process.exit(1);\n }\n}\n","import { PostizAPI } from '../api';\nimport { getConfig } from '../config';\nimport { readFileSync } from 'fs';\n\nexport async function uploadFile(args: any) {\n const config = getConfig();\n const api = new PostizAPI(config);\n\n if (!args.file) {\n console.error('āŒ File path is required');\n process.exit(1);\n }\n\n try {\n const fileBuffer = readFileSync(args.file);\n const filename = args.file.split('/').pop() || 'file';\n\n const result = await api.upload(fileBuffer, filename);\n console.log('āœ… File uploaded successfully!');\n console.log(JSON.stringify(result, null, 2));\n return result;\n } catch (error: any) {\n console.error('āŒ Failed to upload file:', error.message);\n process.exit(1);\n }\n}\n"],"mappings":"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","names":["fetch","import_node_fetch","fetch","import_fs","import_fs","yargs"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "postiz",
3
- "version": "2.0.14",
3
+ "version": "2.0.15",
4
4
  "description": "Postiz CLI - Command line interface for the Postiz social media scheduling API",
5
5
  "main": "dist/index.js",
6
6
  "bin": {