peak6-x-publishing-plugin 0.1.2
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/manifest.js +485 -0
- package/dist/manifest.js.map +7 -0
- package/dist/ui/index.js +151 -0
- package/dist/ui/index.js.map +7 -0
- package/dist/worker.js +1990 -0
- package/dist/worker.js.map +7 -0
- package/package.json +47 -0
package/dist/ui/index.js
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
// src/ui/index.tsx
|
|
2
|
+
import { usePluginData } from "@paperclipai/plugin-sdk/ui";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
4
|
+
function DashboardWidget(_props) {
|
|
5
|
+
const { data, loading, error } = usePluginData("dashboard-summary");
|
|
6
|
+
if (loading) return /* @__PURE__ */ jsx("div", { style: { padding: "1rem" }, children: "Loading X Publishing..." });
|
|
7
|
+
if (error) return /* @__PURE__ */ jsxs("div", { style: { padding: "1rem", color: "#ef4444" }, children: [
|
|
8
|
+
"Error: ",
|
|
9
|
+
error.message
|
|
10
|
+
] });
|
|
11
|
+
return /* @__PURE__ */ jsxs("div", { style: { display: "grid", gap: "0.75rem", padding: "0.5rem" }, children: [
|
|
12
|
+
/* @__PURE__ */ jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center" }, children: [
|
|
13
|
+
/* @__PURE__ */ jsx("strong", { children: "X Publishing" }),
|
|
14
|
+
/* @__PURE__ */ jsxs("span", { style: { fontSize: "0.75rem", opacity: 0.5 }, children: [
|
|
15
|
+
"Token: ",
|
|
16
|
+
data?.token_health ?? "unknown"
|
|
17
|
+
] })
|
|
18
|
+
] }),
|
|
19
|
+
/* @__PURE__ */ jsxs("div", { style: { display: "grid", gridTemplateColumns: "1fr 1fr 1fr", gap: "0.5rem" }, children: [
|
|
20
|
+
/* @__PURE__ */ jsx(StatCard, { label: "Today", value: `${data?.today_post_count ?? 0}/${data?.daily_limit ?? 25}` }),
|
|
21
|
+
/* @__PURE__ */ jsx(StatCard, { label: "Pending", value: data?.pending_drafts ?? 0 }),
|
|
22
|
+
/* @__PURE__ */ jsx(StatCard, { label: "Token", value: data?.token_health === "valid" ? "OK" : "!" })
|
|
23
|
+
] }),
|
|
24
|
+
data?.recent_posts && data.recent_posts.length > 0 && /* @__PURE__ */ jsxs("div", { children: [
|
|
25
|
+
/* @__PURE__ */ jsx("div", { style: { fontSize: "0.75rem", fontWeight: 600, marginBottom: "0.25rem" }, children: "Recent Posts" }),
|
|
26
|
+
data.recent_posts.slice(0, 3).map((post) => /* @__PURE__ */ jsxs(
|
|
27
|
+
"div",
|
|
28
|
+
{
|
|
29
|
+
style: {
|
|
30
|
+
padding: "0.4rem",
|
|
31
|
+
marginBottom: "0.25rem",
|
|
32
|
+
background: "rgba(128,128,128,0.1)",
|
|
33
|
+
borderRadius: "4px",
|
|
34
|
+
fontSize: "0.8rem"
|
|
35
|
+
},
|
|
36
|
+
children: [
|
|
37
|
+
/* @__PURE__ */ jsx("div", { style: { opacity: 0.7 }, children: post.text.length > 100 ? `${post.text.slice(0, 100)}...` : post.text || `[${post.format}]` }),
|
|
38
|
+
/* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: "0.5rem", fontSize: "0.7rem", opacity: 0.5, marginTop: "0.15rem" }, children: [
|
|
39
|
+
/* @__PURE__ */ jsx("span", { children: post.format }),
|
|
40
|
+
post.metrics && /* @__PURE__ */ jsxs("span", { children: [
|
|
41
|
+
post.metrics.likes,
|
|
42
|
+
"L ",
|
|
43
|
+
post.metrics.retweets,
|
|
44
|
+
"RT ",
|
|
45
|
+
post.metrics.replies,
|
|
46
|
+
"Re"
|
|
47
|
+
] }),
|
|
48
|
+
/* @__PURE__ */ jsx(
|
|
49
|
+
"a",
|
|
50
|
+
{
|
|
51
|
+
href: `https://x.com/i/status/${post.tweet_id}`,
|
|
52
|
+
target: "_blank",
|
|
53
|
+
rel: "noopener noreferrer",
|
|
54
|
+
style: { color: "#2563eb", textDecoration: "none" },
|
|
55
|
+
children: "View"
|
|
56
|
+
}
|
|
57
|
+
)
|
|
58
|
+
] })
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
post.tweet_id
|
|
62
|
+
))
|
|
63
|
+
] }),
|
|
64
|
+
(!data?.recent_posts || data.recent_posts.length === 0) && /* @__PURE__ */ jsx("div", { style: { opacity: 0.5, fontSize: "0.85rem" }, children: "No posts yet. Use draft-post or publish-post tools to get started." })
|
|
65
|
+
] });
|
|
66
|
+
}
|
|
67
|
+
function SettingsPage() {
|
|
68
|
+
const { data, loading, error } = usePluginData("plugin-config");
|
|
69
|
+
if (loading) return /* @__PURE__ */ jsx("div", { children: "Loading settings..." });
|
|
70
|
+
if (error) return /* @__PURE__ */ jsxs("div", { children: [
|
|
71
|
+
"Error: ",
|
|
72
|
+
error.message
|
|
73
|
+
] });
|
|
74
|
+
return /* @__PURE__ */ jsxs("div", { style: { padding: "1rem" }, children: [
|
|
75
|
+
/* @__PURE__ */ jsx("h2", { children: "X Publishing Settings" }),
|
|
76
|
+
/* @__PURE__ */ jsx("p", { style: { opacity: 0.5 }, children: "Configure OAuth, approval modes, and publishing limits via the plugin configuration panel." }),
|
|
77
|
+
/* @__PURE__ */ jsx("pre", { style: { background: "rgba(128,128,128,0.1)", padding: "1rem", borderRadius: "4px", overflow: "auto", fontSize: "0.8rem" }, children: JSON.stringify(data, null, 2) })
|
|
78
|
+
] });
|
|
79
|
+
}
|
|
80
|
+
function ContentPage() {
|
|
81
|
+
const { data, loading, error } = usePluginData("content-queue");
|
|
82
|
+
if (loading) return /* @__PURE__ */ jsx("div", { style: { padding: "1rem" }, children: "Loading content queue..." });
|
|
83
|
+
if (error) return /* @__PURE__ */ jsxs("div", { style: { padding: "1rem", color: "#ef4444" }, children: [
|
|
84
|
+
"Error: ",
|
|
85
|
+
error.message
|
|
86
|
+
] });
|
|
87
|
+
return /* @__PURE__ */ jsxs("div", { style: { padding: "1rem", display: "grid", gap: "1.5rem" }, children: [
|
|
88
|
+
/* @__PURE__ */ jsx("h2", { children: "Content Queue" }),
|
|
89
|
+
/* @__PURE__ */ jsxs("section", { children: [
|
|
90
|
+
/* @__PURE__ */ jsx("h3", { style: { fontSize: "0.9rem", fontWeight: 600, marginBottom: "0.5rem" }, children: "Pending Drafts" }),
|
|
91
|
+
data?.drafts && data.drafts.length > 0 ? data.drafts.map((d) => /* @__PURE__ */ jsxs(
|
|
92
|
+
"div",
|
|
93
|
+
{
|
|
94
|
+
style: {
|
|
95
|
+
padding: "0.5rem",
|
|
96
|
+
marginBottom: "0.25rem",
|
|
97
|
+
background: "rgba(128,128,128,0.1)",
|
|
98
|
+
borderRadius: "4px",
|
|
99
|
+
fontSize: "0.85rem"
|
|
100
|
+
},
|
|
101
|
+
children: [
|
|
102
|
+
/* @__PURE__ */ jsx("div", { children: d.text.length > 120 ? `${d.text.slice(0, 120)}...` : d.text }),
|
|
103
|
+
/* @__PURE__ */ jsxs("div", { style: { fontSize: "0.7rem", opacity: 0.5, marginTop: "0.15rem" }, children: [
|
|
104
|
+
d.format,
|
|
105
|
+
" \xB7 ",
|
|
106
|
+
d.status,
|
|
107
|
+
d.schedule_at ? ` · scheduled ${d.schedule_at}` : ""
|
|
108
|
+
] })
|
|
109
|
+
]
|
|
110
|
+
},
|
|
111
|
+
d.id
|
|
112
|
+
)) : /* @__PURE__ */ jsx("div", { style: { opacity: 0.5, fontSize: "0.85rem" }, children: "No pending drafts." })
|
|
113
|
+
] }),
|
|
114
|
+
/* @__PURE__ */ jsxs("section", { children: [
|
|
115
|
+
/* @__PURE__ */ jsx("h3", { style: { fontSize: "0.9rem", fontWeight: 600, marginBottom: "0.5rem" }, children: "Scheduled Posts" }),
|
|
116
|
+
data?.scheduled && data.scheduled.length > 0 ? data.scheduled.map((s) => /* @__PURE__ */ jsxs(
|
|
117
|
+
"div",
|
|
118
|
+
{
|
|
119
|
+
style: {
|
|
120
|
+
padding: "0.5rem",
|
|
121
|
+
marginBottom: "0.25rem",
|
|
122
|
+
background: "rgba(128,128,128,0.1)",
|
|
123
|
+
borderRadius: "4px",
|
|
124
|
+
fontSize: "0.85rem"
|
|
125
|
+
},
|
|
126
|
+
children: [
|
|
127
|
+
/* @__PURE__ */ jsx("div", { children: s.text.length > 120 ? `${s.text.slice(0, 120)}...` : s.text }),
|
|
128
|
+
/* @__PURE__ */ jsxs("div", { style: { fontSize: "0.7rem", opacity: 0.5, marginTop: "0.15rem" }, children: [
|
|
129
|
+
"Scheduled: ",
|
|
130
|
+
s.schedule_at
|
|
131
|
+
] })
|
|
132
|
+
]
|
|
133
|
+
},
|
|
134
|
+
s.id
|
|
135
|
+
)) : /* @__PURE__ */ jsx("div", { style: { opacity: 0.5, fontSize: "0.85rem" }, children: "No scheduled posts." })
|
|
136
|
+
] }),
|
|
137
|
+
/* @__PURE__ */ jsx("p", { style: { opacity: 0.4, fontSize: "0.75rem" }, children: "Approve/reject actions will be available in a future release. Use the Paperclip issue board for approvals." })
|
|
138
|
+
] });
|
|
139
|
+
}
|
|
140
|
+
function StatCard({ label, value }) {
|
|
141
|
+
return /* @__PURE__ */ jsxs("div", { style: { textAlign: "center", padding: "0.5rem", background: "rgba(128,128,128,0.1)", borderRadius: "4px" }, children: [
|
|
142
|
+
/* @__PURE__ */ jsx("div", { style: { fontSize: "1.1rem", fontWeight: 600 }, children: value }),
|
|
143
|
+
/* @__PURE__ */ jsx("div", { style: { fontSize: "0.7rem", opacity: 0.5 }, children: label })
|
|
144
|
+
] });
|
|
145
|
+
}
|
|
146
|
+
export {
|
|
147
|
+
ContentPage,
|
|
148
|
+
DashboardWidget,
|
|
149
|
+
SettingsPage
|
|
150
|
+
};
|
|
151
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/ui/index.tsx"],
|
|
4
|
+
"sourcesContent": ["import { usePluginData, type PluginWidgetProps } from \"@paperclipai/plugin-sdk/ui\";\nimport type { PublishedPostData } from \"../types.js\";\n\ntype DashboardData = {\n today_post_count: number;\n daily_limit: number;\n pending_drafts: number;\n token_health: string;\n recent_posts: PublishedPostData[];\n};\n\nexport function DashboardWidget(_props: PluginWidgetProps) {\n const { data, loading, error } = usePluginData<DashboardData>(\"dashboard-summary\");\n\n if (loading) return <div style={{ padding: \"1rem\" }}>Loading X Publishing...</div>;\n if (error) return <div style={{ padding: \"1rem\", color: \"#ef4444\" }}>Error: {error.message}</div>;\n\n return (\n <div style={{ display: \"grid\", gap: \"0.75rem\", padding: \"0.5rem\" }}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", alignItems: \"center\" }}>\n <strong>X Publishing</strong>\n <span style={{ fontSize: \"0.75rem\", opacity: 0.5 }}>\n Token: {data?.token_health ?? \"unknown\"}\n </span>\n </div>\n\n <div style={{ display: \"grid\", gridTemplateColumns: \"1fr 1fr 1fr\", gap: \"0.5rem\" }}>\n <StatCard label=\"Today\" value={`${data?.today_post_count ?? 0}/${data?.daily_limit ?? 25}`} />\n <StatCard label=\"Pending\" value={data?.pending_drafts ?? 0} />\n <StatCard label=\"Token\" value={data?.token_health === \"valid\" ? \"OK\" : \"!\"} />\n </div>\n\n {data?.recent_posts && data.recent_posts.length > 0 && (\n <div>\n <div style={{ fontSize: \"0.75rem\", fontWeight: 600, marginBottom: \"0.25rem\" }}>Recent Posts</div>\n {data.recent_posts.slice(0, 3).map((post) => (\n <div\n key={post.tweet_id}\n style={{\n padding: \"0.4rem\",\n marginBottom: \"0.25rem\",\n background: \"rgba(128,128,128,0.1)\",\n borderRadius: \"4px\",\n fontSize: \"0.8rem\",\n }}\n >\n <div style={{ opacity: 0.7 }}>\n {post.text.length > 100 ? `${post.text.slice(0, 100)}...` : post.text || `[${post.format}]`}\n </div>\n <div style={{ display: \"flex\", gap: \"0.5rem\", fontSize: \"0.7rem\", opacity: 0.5, marginTop: \"0.15rem\" }}>\n <span>{post.format}</span>\n {post.metrics && (\n <span>\n {post.metrics.likes}L {post.metrics.retweets}RT {post.metrics.replies}Re\n </span>\n )}\n <a\n href={`https://x.com/i/status/${post.tweet_id}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ color: \"#2563eb\", textDecoration: \"none\" }}\n >\n View\n </a>\n </div>\n </div>\n ))}\n </div>\n )}\n\n {(!data?.recent_posts || data.recent_posts.length === 0) && (\n <div style={{ opacity: 0.5, fontSize: \"0.85rem\" }}>\n No posts yet. Use draft-post or publish-post tools to get started.\n </div>\n )}\n </div>\n );\n}\n\nexport function SettingsPage() {\n const { data, loading, error } = usePluginData<Record<string, unknown>>(\"plugin-config\");\n\n if (loading) return <div>Loading settings...</div>;\n if (error) return <div>Error: {error.message}</div>;\n\n return (\n <div style={{ padding: \"1rem\" }}>\n <h2>X Publishing Settings</h2>\n <p style={{ opacity: 0.5 }}>\n Configure OAuth, approval modes, and publishing limits via the plugin configuration panel.\n </p>\n <pre style={{ background: \"rgba(128,128,128,0.1)\", padding: \"1rem\", borderRadius: \"4px\", overflow: \"auto\", fontSize: \"0.8rem\" }}>\n {JSON.stringify(data, null, 2)}\n </pre>\n </div>\n );\n}\n\ntype ContentData = {\n drafts: Array<{ id: string; text: string; format: string; status: string; schedule_at?: string }>;\n scheduled: Array<{ id: string; text: string; schedule_at: string }>;\n};\n\nexport function ContentPage() {\n const { data, loading, error } = usePluginData<ContentData>(\"content-queue\");\n\n if (loading) return <div style={{ padding: \"1rem\" }}>Loading content queue...</div>;\n if (error) return <div style={{ padding: \"1rem\", color: \"#ef4444\" }}>Error: {error.message}</div>;\n\n return (\n <div style={{ padding: \"1rem\", display: \"grid\", gap: \"1.5rem\" }}>\n <h2>Content Queue</h2>\n\n <section>\n <h3 style={{ fontSize: \"0.9rem\", fontWeight: 600, marginBottom: \"0.5rem\" }}>Pending Drafts</h3>\n {data?.drafts && data.drafts.length > 0 ? (\n data.drafts.map((d) => (\n <div\n key={d.id}\n style={{\n padding: \"0.5rem\",\n marginBottom: \"0.25rem\",\n background: \"rgba(128,128,128,0.1)\",\n borderRadius: \"4px\",\n fontSize: \"0.85rem\",\n }}\n >\n <div>{d.text.length > 120 ? `${d.text.slice(0, 120)}...` : d.text}</div>\n <div style={{ fontSize: \"0.7rem\", opacity: 0.5, marginTop: \"0.15rem\" }}>\n {d.format} · {d.status}{d.schedule_at ? ` · scheduled ${d.schedule_at}` : \"\"}\n </div>\n </div>\n ))\n ) : (\n <div style={{ opacity: 0.5, fontSize: \"0.85rem\" }}>No pending drafts.</div>\n )}\n </section>\n\n <section>\n <h3 style={{ fontSize: \"0.9rem\", fontWeight: 600, marginBottom: \"0.5rem\" }}>Scheduled Posts</h3>\n {data?.scheduled && data.scheduled.length > 0 ? (\n data.scheduled.map((s) => (\n <div\n key={s.id}\n style={{\n padding: \"0.5rem\",\n marginBottom: \"0.25rem\",\n background: \"rgba(128,128,128,0.1)\",\n borderRadius: \"4px\",\n fontSize: \"0.85rem\",\n }}\n >\n <div>{s.text.length > 120 ? `${s.text.slice(0, 120)}...` : s.text}</div>\n <div style={{ fontSize: \"0.7rem\", opacity: 0.5, marginTop: \"0.15rem\" }}>\n Scheduled: {s.schedule_at}\n </div>\n </div>\n ))\n ) : (\n <div style={{ opacity: 0.5, fontSize: \"0.85rem\" }}>No scheduled posts.</div>\n )}\n </section>\n\n <p style={{ opacity: 0.4, fontSize: \"0.75rem\" }}>\n Approve/reject actions will be available in a future release. Use the Paperclip issue board for approvals.\n </p>\n </div>\n );\n}\n\nfunction StatCard({ label, value }: { label: string; value: string | number }) {\n return (\n <div style={{ textAlign: \"center\", padding: \"0.5rem\", background: \"rgba(128,128,128,0.1)\", borderRadius: \"4px\" }}>\n <div style={{ fontSize: \"1.1rem\", fontWeight: 600 }}>{value}</div>\n <div style={{ fontSize: \"0.7rem\", opacity: 0.5 }}>{label}</div>\n </div>\n );\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|