@kvasar/openclaw-storyblok-plugin 0.1.14 → 0.1.16

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.
@@ -0,0 +1,12 @@
1
+ /**
2
+ * index.ts — OpenClaw Storyblok Plugin
3
+ */
4
+ declare const _default: {
5
+ id: string;
6
+ name: string;
7
+ description: string;
8
+ configSchema: import("openclaw/plugin-sdk/plugin-entry").OpenClawPluginConfigSchema;
9
+ register: NonNullable<import("openclaw/plugin-sdk/plugin-entry").OpenClawPluginDefinition["register"]>;
10
+ } & Pick<import("openclaw/plugin-sdk/plugin-entry").OpenClawPluginDefinition, "kind" | "reload" | "nodeHostCommands" | "securityAuditCollectors">;
11
+ export default _default;
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;GAEG;;;;;;;;AAiDH,wBAiOG"}
package/dist/index.js ADDED
@@ -0,0 +1,203 @@
1
+ /**
2
+ * index.ts — OpenClaw Storyblok Plugin
3
+ */
4
+ import { Type } from "@sinclair/typebox";
5
+ import { definePluginEntry, } from "openclaw/plugin-sdk/plugin-entry";
6
+ import { StoryblokClient } from "./src/client.js";
7
+ import { redactTokens } from "./src/config.js";
8
+ function ok(data) {
9
+ return {
10
+ content: [
11
+ {
12
+ type: "text",
13
+ text: JSON.stringify(data, null, 2),
14
+ },
15
+ ],
16
+ details: data,
17
+ metadata: {
18
+ storyblok: true,
19
+ },
20
+ };
21
+ }
22
+ function fail(error) {
23
+ return {
24
+ content: [
25
+ {
26
+ type: "text",
27
+ text: `❌ Storyblok: ${String(error)}`,
28
+ },
29
+ ],
30
+ details: {
31
+ error: String(error),
32
+ },
33
+ isError: true,
34
+ };
35
+ }
36
+ export default definePluginEntry({
37
+ id: "openclaw-storyblok",
38
+ name: "Storyblok Integration",
39
+ description: "Interact with Storyblok CMS: manage stories, components, and space information.",
40
+ register(api) {
41
+ function resolveClient() {
42
+ const rawCfg = (api.pluginConfig ??
43
+ api.config ??
44
+ {});
45
+ const cfg = {
46
+ baseUrl: rawCfg.baseUrl ?? "https://api.storyblok.com",
47
+ spaceId: rawCfg.spaceId,
48
+ managementToken: rawCfg.managementToken,
49
+ previewToken: rawCfg.previewToken,
50
+ };
51
+ const clientCfg = {
52
+ baseUrl: cfg.baseUrl,
53
+ spaceId: cfg.spaceId ?? "",
54
+ managementToken: cfg.managementToken ?? "",
55
+ previewToken: cfg.previewToken,
56
+ };
57
+ return {
58
+ client: new StoryblokClient(clientCfg),
59
+ cfg,
60
+ };
61
+ }
62
+ async function executeSafely(handler, params) {
63
+ const { client, cfg } = resolveClient();
64
+ try {
65
+ return ok(await handler(client, params));
66
+ }
67
+ catch (error) {
68
+ return fail(redactTokens(String(error?.message ?? error), cfg));
69
+ }
70
+ }
71
+ api.registerTool({
72
+ name: "storyblok_get_space",
73
+ label: "Get Storyblok Space",
74
+ description: "Retrieve Storyblok space details.",
75
+ parameters: Type.Object({}),
76
+ async execute() {
77
+ return executeSafely((client) => client.getSpace());
78
+ },
79
+ });
80
+ api.registerTool({
81
+ name: "storyblok_get_story",
82
+ label: "Get Storyblok Story",
83
+ description: "Retrieve a story by ID, UUID, or slug.",
84
+ parameters: Type.Object({
85
+ identifier: Type.String({
86
+ description: "Story ID, UUID, or slug",
87
+ }),
88
+ version: Type.Optional(Type.String({
89
+ description: "'draft' or 'published'",
90
+ })),
91
+ language: Type.Optional(Type.String()),
92
+ svg_render: Type.Optional(Type.Boolean()),
93
+ }),
94
+ async execute(_toolCallId, params) {
95
+ return executeSafely((client, p) => client.getStory(p.identifier, {
96
+ version: p.version,
97
+ language: p.language,
98
+ svg_render: p.svg_render,
99
+ }), params);
100
+ },
101
+ });
102
+ api.registerTool({
103
+ name: "storyblok_list_stories",
104
+ label: "List Storyblok Stories",
105
+ description: "List stories with optional filters.",
106
+ parameters: Type.Object({
107
+ folder_id: Type.Optional(Type.Number()),
108
+ parent_id: Type.Optional(Type.Number()),
109
+ status: Type.Optional(Type.String()),
110
+ tag: Type.Optional(Type.String()),
111
+ per_page: Type.Optional(Type.Number()),
112
+ page: Type.Optional(Type.Number()),
113
+ sort_by: Type.Optional(Type.String()),
114
+ direction: Type.Optional(Type.String()),
115
+ }),
116
+ async execute(_toolCallId, params) {
117
+ return executeSafely((client, p) => client.listStories(p), params);
118
+ },
119
+ });
120
+ api.registerTool({
121
+ name: "storyblok_create_story",
122
+ label: "Create Storyblok Story",
123
+ description: "Create a new story.",
124
+ parameters: Type.Object({
125
+ title: Type.String(),
126
+ slug: Type.Optional(Type.String()),
127
+ folder_id: Type.Optional(Type.Number()),
128
+ parent_id: Type.Optional(Type.Number()),
129
+ content: Type.Optional(Type.Record(Type.String(), Type.Any())),
130
+ tags: Type.Optional(Type.Array(Type.String())),
131
+ is_folder: Type.Optional(Type.Boolean()),
132
+ language: Type.Optional(Type.String()),
133
+ }),
134
+ async execute(_toolCallId, params) {
135
+ return executeSafely((client, p) => client.createStory(p), params);
136
+ },
137
+ });
138
+ api.registerTool({
139
+ name: "storyblok_update_story",
140
+ label: "Update Storyblok Story",
141
+ description: "Update an existing story.",
142
+ parameters: Type.Object({
143
+ story_id: Type.String(),
144
+ title: Type.Optional(Type.String()),
145
+ slug: Type.Optional(Type.String()),
146
+ content: Type.Optional(Type.Record(Type.String(), Type.Any())),
147
+ parent_id: Type.Optional(Type.Number()),
148
+ tags: Type.Optional(Type.Array(Type.String())),
149
+ language: Type.Optional(Type.String()),
150
+ version: Type.Optional(Type.String()),
151
+ }),
152
+ async execute(_toolCallId, params) {
153
+ return executeSafely((client, p) => {
154
+ const { story_id, ...update } = p;
155
+ return client.updateStory(story_id, update);
156
+ }, params);
157
+ },
158
+ });
159
+ api.registerTool({
160
+ name: "storyblok_publish_story",
161
+ label: "Publish Storyblok Story",
162
+ description: "Publish a story.",
163
+ parameters: Type.Object({
164
+ story_id: Type.String(),
165
+ version: Type.Optional(Type.String()),
166
+ language: Type.Optional(Type.String()),
167
+ publish_notes: Type.Optional(Type.String()),
168
+ }),
169
+ async execute(_toolCallId, params) {
170
+ return executeSafely((client, p) => client.publishStory(p.story_id, {
171
+ version: p.version,
172
+ language: p.language,
173
+ publish_notes: p.publish_notes,
174
+ }), params);
175
+ },
176
+ });
177
+ api.registerTool({
178
+ name: "storyblok_unpublish_story",
179
+ label: "Unpublish Storyblok Story",
180
+ description: "Unpublish a story.",
181
+ parameters: Type.Object({
182
+ story_id: Type.String(),
183
+ language: Type.Optional(Type.String()),
184
+ }),
185
+ async execute(_toolCallId, params) {
186
+ return executeSafely((client, p) => client.unpublishStory(p.story_id, p.language), params);
187
+ },
188
+ });
189
+ api.registerTool({
190
+ name: "storyblok_get_components",
191
+ label: "Get Storyblok Components",
192
+ description: "Get component schemas.",
193
+ parameters: Type.Object({
194
+ version: Type.Optional(Type.String()),
195
+ language: Type.Optional(Type.String()),
196
+ }),
197
+ async execute(_toolCallId, params) {
198
+ return executeSafely((client, p) => client.getComponents(p.version, p.language), params);
199
+ },
200
+ });
201
+ },
202
+ });
203
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EACL,iBAAiB,GAElB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,EAAE,eAAe,EAAwB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAS/C,SAAS,EAAE,CAAC,IAAa;IACvB,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aACpC;SACF;QACD,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE;YACR,SAAS,EAAE,IAAI;SAChB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,IAAI,CAAC,KAAc;IAC1B,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,gBAAgB,MAAM,CAAC,KAAK,CAAC,EAAE;aACtC;SACF;QACD,OAAO,EAAE;YACP,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC;SACrB;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,eAAe,iBAAiB,CAAC;IAC/B,EAAE,EAAE,oBAAoB;IACxB,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACT,iFAAiF;IAEnF,QAAQ,CAAC,GAAsB;QAC7B,SAAS,aAAa;YACpB,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,YAAY;gBAC9B,GAAG,CAAC,MAAM;gBACV,EAAE,CAA0B,CAAC;YAE/B,MAAM,GAAG,GAA0B;gBACjC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,2BAA2B;gBACtD,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,eAAe,EAAE,MAAM,CAAC,eAAe;gBACvC,YAAY,EAAE,MAAM,CAAC,YAAY;aAClC,CAAC;YAEF,MAAM,SAAS,GAAoB;gBACjC,OAAO,EAAE,GAAG,CAAC,OAAQ;gBACrB,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE;gBAC1B,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,EAAE;gBAC1C,YAAY,EAAE,GAAG,CAAC,YAAY;aAC/B,CAAC;YAEF,OAAO;gBACL,MAAM,EAAE,IAAI,eAAe,CAAC,SAAS,CAAC;gBACtC,GAAG;aACJ,CAAC;QACJ,CAAC;QAED,KAAK,UAAU,aAAa,CAC1B,OAAkE,EAClE,MAAU;YAEV,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;YAExC,IAAI,CAAC;gBACH,OAAO,EAAE,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,IAAI,CACT,YAAY,CAAC,MAAM,CAAE,KAAa,EAAE,OAAO,IAAI,KAAK,CAAC,EAAE,GAAG,CAAC,CAC5D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,GAAG,CAAC,YAAY,CAAC;YACf,IAAI,EAAE,qBAAqB;YAC3B,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EAAE,mCAAmC;YAChD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,OAAO;gBACX,OAAO,aAAa,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACtD,CAAC;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,YAAY,CAAC;YACf,IAAI,EAAE,qBAAqB;YAC3B,KAAK,EAAE,qBAAqB;YAC5B,WAAW,EAAE,wCAAwC;YACrD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;gBACtB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;oBACtB,WAAW,EAAE,yBAAyB;iBACvC,CAAC;gBACF,OAAO,EAAE,IAAI,CAAC,QAAQ,CACpB,IAAI,CAAC,MAAM,CAAC;oBACV,WAAW,EAAE,wBAAwB;iBACtC,CAAC,CACH;gBACD,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACtC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;aAC1C,CAAC;YAEF,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAW;gBACpC,OAAO,aAAa,CAClB,CAAC,MAAM,EAAE,CAAM,EAAE,EAAE,CACjB,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,EAAE;oBAC5B,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,UAAU,EAAE,CAAC,CAAC,UAAU;iBACzB,CAAC,EACJ,MAAM,CACP,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,YAAY,CAAC;YACf,IAAI,EAAE,wBAAwB;YAC9B,KAAK,EAAE,wBAAwB;YAC/B,WAAW,EAAE,qCAAqC;YAElD,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;gBACtB,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACvC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACvC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACpC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACtC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAClC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACrC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;aACxC,CAAC;YAEF,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAW;gBACpC,OAAO,aAAa,CAClB,CAAC,MAAM,EAAE,CAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EACzC,MAAM,CACP,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,YAAY,CAAC;YACf,IAAI,EAAE,wBAAwB;YAC9B,KAAK,EAAE,wBAAwB;YAC/B,WAAW,EAAE,qBAAqB;YAElC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;gBACtB,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE;gBACpB,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAClC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACvC,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACvC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC9D,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9C,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACxC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;aACvC,CAAC;YAEF,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAW;gBACpC,OAAO,aAAa,CAClB,CAAC,MAAM,EAAE,CAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EACzC,MAAM,CACP,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,YAAY,CAAC;YACf,IAAI,EAAE,wBAAwB;YAC9B,KAAK,EAAE,wBAAwB;YAC/B,WAAW,EAAE,2BAA2B;YAExC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;gBACtB,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;gBACvB,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACnC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBAClC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC9D,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACvC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC9C,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACtC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;aACtC,CAAC;YAEF,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAW;gBACpC,OAAO,aAAa,CAClB,CAAC,MAAM,EAAE,CAAM,EAAE,EAAE;oBACjB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC;oBAClC,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBAC9C,CAAC,EACD,MAAM,CACP,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,YAAY,CAAC;YACf,IAAI,EAAE,yBAAyB;YAC/B,KAAK,EAAE,yBAAyB;YAChC,WAAW,EAAE,kBAAkB;YAE/B,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;gBACtB,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;gBACvB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACtC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;aAC5C,CAAC;YAEF,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAW;gBACpC,OAAO,aAAa,CAClB,CAAC,MAAM,EAAE,CAAM,EAAE,EAAE,CACjB,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE;oBAC9B,OAAO,EAAE,CAAC,CAAC,OAAO;oBAClB,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,aAAa,EAAE,CAAC,CAAC,aAAa;iBAC/B,CAAC,EACJ,MAAM,CACP,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,YAAY,CAAC;YACf,IAAI,EAAE,2BAA2B;YACjC,KAAK,EAAE,2BAA2B;YAClC,WAAW,EAAE,oBAAoB;YAEjC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;gBACtB,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE;gBACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;aACvC,CAAC;YAEF,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAW;gBACpC,OAAO,aAAa,CAClB,CAAC,MAAM,EAAE,CAAM,EAAE,EAAE,CACjB,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,EAC/C,MAAM,CACP,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,YAAY,CAAC;YACf,IAAI,EAAE,0BAA0B;YAChC,KAAK,EAAE,0BAA0B;YACjC,WAAW,EAAE,wBAAwB;YAErC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC;gBACtB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;aACvC,CAAC;YAEF,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,MAAW;gBACpC,OAAO,aAAa,CAClB,CAAC,MAAM,EAAE,CAAM,EAAE,EAAE,CACjB,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,EAC7C,MAAM,CACP,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Storyblok client for OpenClaw plugin.
3
+ *
4
+ * Wraps Storyblok Management API (v1) and optionally Delivery API (v2) for reads.
5
+ */
6
+ export interface StoryblokConfig {
7
+ baseUrl: string;
8
+ spaceId: string;
9
+ managementToken: string;
10
+ previewToken?: string;
11
+ }
12
+ export declare class StoryblokClient {
13
+ private cfg;
14
+ constructor(cfg: StoryblokConfig);
15
+ private request;
16
+ private managementUrl;
17
+ private deliveryUrl;
18
+ getSpace(): Promise<any>;
19
+ getStory(identifier: string, opts?: {
20
+ version?: string;
21
+ language?: string;
22
+ svg_render?: boolean;
23
+ }): Promise<any>;
24
+ listStories(params?: {
25
+ folder_id?: number;
26
+ parent_id?: number;
27
+ status?: string;
28
+ tag?: string;
29
+ per_page?: number;
30
+ page?: number;
31
+ sort_by?: string;
32
+ direction?: string;
33
+ }): Promise<any>;
34
+ createStory(data: {
35
+ title: string;
36
+ slug?: string;
37
+ folder_id?: number;
38
+ parent_id?: number;
39
+ content?: Record<string, any>;
40
+ tags?: string[];
41
+ is_folder?: boolean;
42
+ language?: string;
43
+ }): Promise<any>;
44
+ updateStory(storyId: string, data: {
45
+ title?: string;
46
+ slug?: string;
47
+ content?: Record<string, any>;
48
+ parent_id?: number;
49
+ tags?: string[];
50
+ language?: string;
51
+ version?: string;
52
+ }): Promise<any>;
53
+ publishStory(storyId: string, opts?: {
54
+ version?: string;
55
+ language?: string;
56
+ publish_notes?: string;
57
+ }): Promise<any>;
58
+ unpublishStory(storyId: string, language?: string): Promise<any>;
59
+ getComponents(version?: string, language?: string): Promise<any>;
60
+ }
61
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,GAAG,CAAkB;gBAEjB,GAAG,EAAE,eAAe;YAIlB,OAAO;IAmBrB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,WAAW;IAUb,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;IAMxB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,OAAO,CAAA;KAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAmBpH,WAAW,CAAC,MAAM,GAAE;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,GAAG,CAAC;IAef,WAAW,CAAC,IAAI,EAAE;QACtB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,GAAG,CAAC;IAcV,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE;QACvC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,GAAG,CAAC;IAcV,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAUvH,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAOhE,aAAa,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;CAOvE"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Storyblok client for OpenClaw plugin.
3
+ *
4
+ * Wraps Storyblok Management API (v1) and optionally Delivery API (v2) for reads.
5
+ */
6
+ export class StoryblokClient {
7
+ cfg;
8
+ constructor(cfg) {
9
+ this.cfg = cfg;
10
+ }
11
+ async request(url, options = {}) {
12
+ const res = await fetch(url, {
13
+ ...options,
14
+ headers: {
15
+ "Content-Type": "application/json",
16
+ ...options.headers,
17
+ },
18
+ });
19
+ if (!res.ok) {
20
+ const text = await res.text();
21
+ throw new Error(`HTTP ${res.status}: ${text}`);
22
+ }
23
+ // For 204 No Content, return null
24
+ if (res.status === 204)
25
+ return null;
26
+ return res.json();
27
+ }
28
+ managementUrl(path, params = {}) {
29
+ const base = this.cfg.baseUrl.replace(/\/$/, "");
30
+ const url = `${base}/v1/spaces/${this.cfg.spaceId}${path}`;
31
+ params.token = this.cfg.managementToken;
32
+ const qs = new URLSearchParams(params).toString();
33
+ return `${url}?${qs}`;
34
+ }
35
+ deliveryUrl(path, params = {}) {
36
+ const base = this.cfg.baseUrl.replace(/\/$/, "");
37
+ const url = `${base}/v2/cdn${path}`;
38
+ if (this.cfg.previewToken) {
39
+ params.token = this.cfg.previewToken;
40
+ }
41
+ const qs = new URLSearchParams(params).toString();
42
+ return qs ? `${url}?${qs}` : url;
43
+ }
44
+ async getSpace() {
45
+ // Management API: GET /v1/spaces/:space_id
46
+ const url = this.managementUrl("");
47
+ return this.request(url);
48
+ }
49
+ async getStory(identifier, opts = {}) {
50
+ // Decide API based on version: if version === 'published' and previewToken exists, use Delivery API; else Management API.
51
+ const version = opts.version === 'published' ? 'published' : 'draft';
52
+ const params = {};
53
+ // Management API endpoint: /v1/stories/:id
54
+ // Delivery API endpoint: /v2/cdn/stories/:slug or /v2/cdn/stories/:id
55
+ // We'll use Management API for flexibility and to support both versions.
56
+ // But note: Management API returns full content; Delivery API returns rendered content.
57
+ // The description mentions "svg_render" which is a Feature of Management API? Actually Storyblok management has an option to render as SVG.
58
+ if (opts.svg_render)
59
+ params.svg = 'true';
60
+ if (opts.language)
61
+ params.language = opts.language;
62
+ if (version)
63
+ params.version = version;
64
+ // Use Management API (it allows version selection)
65
+ const url = this.managementUrl(`/stories/${encodeURIComponent(identifier)}`, params);
66
+ return this.request(url);
67
+ }
68
+ async listStories(params = {}) {
69
+ const q = {};
70
+ if (params.folder_id !== undefined)
71
+ q.folder_id = String(params.folder_id);
72
+ if (params.parent_id !== undefined)
73
+ q.parent_id = String(params.parent_id);
74
+ if (params.status)
75
+ q.status = params.status;
76
+ if (params.tag)
77
+ q.tag = params.tag;
78
+ if (params.per_page)
79
+ q.per_page = String(params.per_page);
80
+ if (params.page)
81
+ q.page = String(params.page);
82
+ if (params.sort_by)
83
+ q.sort_by = params.sort_by;
84
+ if (params.direction)
85
+ q.direction = params.direction;
86
+ const url = this.managementUrl("/stories", q);
87
+ return this.request(url);
88
+ }
89
+ async createStory(data) {
90
+ const body = { title: data.title };
91
+ if (data.slug)
92
+ body.slug = data.slug;
93
+ if (data.folder_id !== undefined)
94
+ body.folder_id = data.folder_id;
95
+ if (data.parent_id !== undefined)
96
+ body.parent_id = data.parent_id;
97
+ if (data.content)
98
+ body.content = data.content;
99
+ if (data.tags)
100
+ body.tags = data.tags;
101
+ if (data.is_folder !== undefined)
102
+ body.is_folder = data.is_folder;
103
+ if (data.language)
104
+ body.language = data.language;
105
+ const url = this.managementUrl("/stories");
106
+ return this.request(url, { method: "POST", body: JSON.stringify(body) });
107
+ }
108
+ async updateStory(storyId, data) {
109
+ const body = {};
110
+ if (data.title)
111
+ body.title = data.title;
112
+ if (data.slug)
113
+ body.slug = data.slug;
114
+ if (data.content)
115
+ body.content = data.content;
116
+ if (data.parent_id !== undefined)
117
+ body.parent_id = data.parent_id;
118
+ if (data.tags)
119
+ body.tags = data.tags;
120
+ if (data.language)
121
+ body.language = data.language;
122
+ if (data.version)
123
+ body.version = data.version;
124
+ const url = this.managementUrl(`/stories/${encodeURIComponent(storyId)}`);
125
+ return this.request(url, { method: "PUT", body: JSON.stringify(body) });
126
+ }
127
+ async publishStory(storyId, opts = {}) {
128
+ const body = {};
129
+ if (opts.version)
130
+ body.version = opts.version;
131
+ if (opts.language)
132
+ body.language = opts.language;
133
+ if (opts.publish_notes)
134
+ body.publish_notes = opts.publish_notes;
135
+ const url = this.managementUrl(`/stories/${encodeURIComponent(storyId)}/publish`);
136
+ return this.request(url, { method: "POST", body: JSON.stringify(body) });
137
+ }
138
+ async unpublishStory(storyId, language) {
139
+ const body = {};
140
+ if (language)
141
+ body.language = language;
142
+ const url = this.managementUrl(`/stories/${encodeURIComponent(storyId)}/unpublish`);
143
+ return this.request(url, { method: "POST", body: JSON.stringify(body) });
144
+ }
145
+ async getComponents(version, language) {
146
+ const params = {};
147
+ if (version)
148
+ params.version = version;
149
+ if (language)
150
+ params.language = language;
151
+ const url = this.managementUrl("/components", params);
152
+ return this.request(url);
153
+ }
154
+ }
155
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Config validation and redaction helpers.
3
+ */
4
+ export declare function validateConfig(cfg: Record<string, any>): void;
5
+ export declare function redactTokens(message: string, cfg: {
6
+ managementToken?: string;
7
+ previewToken?: string;
8
+ }): string;
9
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAmB7D;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAS9G"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Config validation and redaction helpers.
3
+ */
4
+ export function validateConfig(cfg) {
5
+ const errors = [];
6
+ if (!cfg.baseUrl || typeof cfg.baseUrl !== "string") {
7
+ errors.push("baseUrl is required and must be a string");
8
+ }
9
+ if (!cfg.spaceId && cfg.spaceId !== 0) {
10
+ errors.push("spaceId is required");
11
+ }
12
+ if (!cfg.managementToken || typeof cfg.managementToken !== "string") {
13
+ errors.push("managementToken is required and must be a string");
14
+ }
15
+ if (cfg.previewToken && typeof cfg.previewToken !== "string") {
16
+ errors.push("previewToken, if provided, must be a string");
17
+ }
18
+ if (errors.length > 0) {
19
+ throw new Error(`Invalid configuration for Storyblok plugin: ${errors.join("; ")}`);
20
+ }
21
+ }
22
+ export function redactTokens(message, cfg) {
23
+ let redacted = message;
24
+ if (cfg.managementToken) {
25
+ redacted = redacted.replace(new RegExp(cfg.managementToken, "g"), "[REDACTED]");
26
+ }
27
+ if (cfg.previewToken) {
28
+ redacted = redacted.replace(new RegExp(cfg.previewToken, "g"), "[REDACTED]");
29
+ }
30
+ return redacted;
31
+ }
32
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,cAAc,CAAC,GAAwB;IACrD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACpD,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,GAAG,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;QACpE,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,GAAG,CAAC,YAAY,IAAI,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,+CAA+C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,GAAwD;IACpG,IAAI,QAAQ,GAAG,OAAO,CAAC;IACvB,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;QACxB,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACrB,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC;IAC/E,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "openclaw-storyblok",
3
3
  "name": "Storyblok Integration",
4
- "version": "0.1.14",
4
+ "version": "0.1.16",
5
5
  "description": "Provides tools to interact with Storyblok CMS via Management API and Delivery API. Supports stories, components, and space management.",
6
6
  "activation": {
7
7
  "onStartup": false
package/package.json CHANGED
@@ -1,12 +1,11 @@
1
1
  {
2
2
  "name": "@kvasar/openclaw-storyblok-plugin",
3
- "version": "0.1.14",
3
+ "version": "0.1.16",
4
4
  "description": "OpenClaw plugin — interact with Storyblok CMS via Management API and Delivery API",
5
5
  "type": "module",
6
- "main": "./index.ts",
6
+ "main": "./dist/index.js",
7
7
  "files": [
8
- "index.ts",
9
- "src/",
8
+ "dist/",
10
9
  "openclaw.plugin.json",
11
10
  "skills/",
12
11
  "tsconfig.json",
@@ -21,7 +20,7 @@
21
20
  },
22
21
  "openclaw": {
23
22
  "extensions": [
24
- "./index.ts"
23
+ "./dist/index.js"
25
24
  ],
26
25
  "compat": {
27
26
  "pluginApi": ">=2026.3.13",
@@ -38,7 +37,8 @@
38
37
  "devDependencies": {
39
38
  "typescript": "^5.4.0",
40
39
  "@types/node": "^22.0.0",
41
- "vitest": "^1.6.0"
40
+ "vitest": "^1.6.0",
41
+ "openclaw": ">=2026.4.2"
42
42
  },
43
43
  "peerDependencies": {
44
44
  "openclaw": ">=2026.4.2"