@kvasar/openclaw-storyblok-plugin 0.1.11 → 0.1.13

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,11 @@
1
+ /**
2
+ * index.ts — OpenClaw Storyblok Plugin
3
+ *
4
+ * Tools for interacting with Storyblok Management API and Delivery API.
5
+ * Authentication:
6
+ * - managementToken required for write operations
7
+ * - previewToken optional for read operations
8
+ */
9
+ declare const _default: unknown;
10
+ export default _default;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;;AAkDH,wBA6LG"}
package/dist/index.js ADDED
@@ -0,0 +1,192 @@
1
+ /**
2
+ * index.ts — OpenClaw Storyblok Plugin
3
+ *
4
+ * Tools for interacting with Storyblok Management API and Delivery API.
5
+ * Authentication:
6
+ * - managementToken required for write operations
7
+ * - previewToken optional for read operations
8
+ */
9
+ import { Type } from "@sinclair/typebox";
10
+ import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
11
+ import { StoryblokClient } from "./src/client.js";
12
+ import { redactTokens } from "./src/config.js";
13
+ function ok(data) {
14
+ return {
15
+ content: [
16
+ {
17
+ type: "text",
18
+ text: JSON.stringify(data, null, 2),
19
+ },
20
+ ],
21
+ metadata: { storyblok: true },
22
+ };
23
+ }
24
+ function fail(error) {
25
+ return {
26
+ content: [
27
+ {
28
+ type: "text",
29
+ text: `❌ Storyblok: ${String(error)}`,
30
+ },
31
+ ],
32
+ isError: true,
33
+ };
34
+ }
35
+ export default definePluginEntry({
36
+ id: "openclaw-storyblok",
37
+ name: "Storyblok Integration",
38
+ description: "Interact with Storyblok CMS: manage stories, components, and space information.",
39
+ register(api) {
40
+ function resolveClient() {
41
+ const rawCfg = (api.pluginConfig ?? api.config ?? {});
42
+ const cfg = {
43
+ baseUrl: rawCfg.baseUrl ?? "https://api.storyblok.com",
44
+ spaceId: rawCfg.spaceId,
45
+ managementToken: rawCfg.managementToken,
46
+ previewToken: rawCfg.previewToken,
47
+ };
48
+ const clientCfg = {
49
+ baseUrl: cfg.baseUrl,
50
+ spaceId: cfg.spaceId ?? "",
51
+ managementToken: cfg.managementToken ?? "",
52
+ previewToken: cfg.previewToken,
53
+ };
54
+ return {
55
+ client: new StoryblokClient(clientCfg),
56
+ cfg,
57
+ };
58
+ }
59
+ async function executeSafely(handler, params) {
60
+ const { client, cfg } = resolveClient();
61
+ try {
62
+ return ok(await handler(client, params));
63
+ }
64
+ catch (error) {
65
+ return fail(redactTokens(String(error?.message ?? error), cfg));
66
+ }
67
+ }
68
+ api.registerTool({
69
+ name: "storyblok_get_space",
70
+ description: "Retrieve Storyblok space details.",
71
+ parameters: Type.Object({}),
72
+ execute() {
73
+ return executeSafely((client) => client.getSpace());
74
+ },
75
+ });
76
+ api.registerTool({
77
+ name: "storyblok_get_story",
78
+ description: "Retrieve a story by ID, UUID, or slug.",
79
+ parameters: Type.Object({
80
+ identifier: Type.String({
81
+ description: "Story ID, UUID, or slug",
82
+ }),
83
+ version: Type.Optional(Type.String({
84
+ description: "'draft' or 'published'",
85
+ })),
86
+ language: Type.Optional(Type.String()),
87
+ svg_render: Type.Optional(Type.Boolean()),
88
+ }),
89
+ execute(_id, params) {
90
+ return executeSafely((client, p) => client.getStory(p.identifier, {
91
+ version: p.version,
92
+ language: p.language,
93
+ svg_render: p.svg_render,
94
+ }), params);
95
+ },
96
+ });
97
+ api.registerTool({
98
+ name: "storyblok_list_stories",
99
+ description: "List stories with optional filters.",
100
+ parameters: Type.Object({
101
+ folder_id: Type.Optional(Type.Number()),
102
+ parent_id: Type.Optional(Type.Number()),
103
+ status: Type.Optional(Type.String()),
104
+ tag: Type.Optional(Type.String()),
105
+ per_page: Type.Optional(Type.Number()),
106
+ page: Type.Optional(Type.Number()),
107
+ sort_by: Type.Optional(Type.String()),
108
+ direction: Type.Optional(Type.String()),
109
+ }),
110
+ execute(_id, params) {
111
+ return executeSafely((client, p) => client.listStories(p), params);
112
+ },
113
+ });
114
+ api.registerTool({
115
+ name: "storyblok_create_story",
116
+ description: "Create a new story.",
117
+ parameters: Type.Object({
118
+ title: Type.String(),
119
+ slug: Type.Optional(Type.String()),
120
+ folder_id: Type.Optional(Type.Number()),
121
+ parent_id: Type.Optional(Type.Number()),
122
+ content: Type.Optional(Type.Record(Type.String(), Type.Any())),
123
+ tags: Type.Optional(Type.Array(Type.String())),
124
+ is_folder: Type.Optional(Type.Boolean()),
125
+ language: Type.Optional(Type.String()),
126
+ }),
127
+ execute(_id, params) {
128
+ return executeSafely((client, p) => client.createStory(p), params);
129
+ },
130
+ });
131
+ api.registerTool({
132
+ name: "storyblok_update_story",
133
+ description: "Update an existing story.",
134
+ parameters: Type.Object({
135
+ story_id: Type.String(),
136
+ title: Type.Optional(Type.String()),
137
+ slug: Type.Optional(Type.String()),
138
+ content: Type.Optional(Type.Record(Type.String(), Type.Any())),
139
+ parent_id: Type.Optional(Type.Number()),
140
+ tags: Type.Optional(Type.Array(Type.String())),
141
+ language: Type.Optional(Type.String()),
142
+ version: Type.Optional(Type.String()),
143
+ }),
144
+ execute(_id, params) {
145
+ return executeSafely((client, p) => {
146
+ const { story_id, ...update } = p;
147
+ return client.updateStory(story_id, update);
148
+ }, params);
149
+ },
150
+ });
151
+ api.registerTool({
152
+ name: "storyblok_publish_story",
153
+ description: "Publish a story.",
154
+ parameters: Type.Object({
155
+ story_id: Type.String(),
156
+ version: Type.Optional(Type.String()),
157
+ language: Type.Optional(Type.String()),
158
+ publish_notes: Type.Optional(Type.String()),
159
+ }),
160
+ execute(_id, params) {
161
+ return executeSafely((client, p) => client.publishStory(p.story_id, {
162
+ version: p.version,
163
+ language: p.language,
164
+ publish_notes: p.publish_notes,
165
+ }), params);
166
+ },
167
+ });
168
+ api.registerTool({
169
+ name: "storyblok_unpublish_story",
170
+ description: "Unpublish a story.",
171
+ parameters: Type.Object({
172
+ story_id: Type.String(),
173
+ language: Type.Optional(Type.String()),
174
+ }),
175
+ execute(_id, params) {
176
+ return executeSafely((client, p) => client.unpublishStory(p.story_id, p.language), params);
177
+ },
178
+ });
179
+ api.registerTool({
180
+ name: "storyblok_get_components",
181
+ description: "Get component schemas.",
182
+ parameters: Type.Object({
183
+ version: Type.Optional(Type.String()),
184
+ language: Type.Optional(Type.String()),
185
+ }),
186
+ execute(_id, params) {
187
+ return executeSafely((client, p) => client.getComponents(p.version, p.language), params);
188
+ },
189
+ });
190
+ },
191
+ });
192
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
@@ -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.11",
4
+ "version": "0.1.13",
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
@@ -28,6 +28,16 @@
28
28
  "description": "Storyblok Preview/Delivery token (for read-only operations). Optional if only using management token for reads."
29
29
  }
30
30
  }
31
+ },
32
+ "contracts": {
33
+ "tools": ["storyblok_get_story",
34
+ "storyblok_get_space",
35
+ "storyblok_list_stories",
36
+ "storyblok_create_story",
37
+ "storyblok_update_story",
38
+ "storyblok_publish_story",
39
+ "storyblok_unpublish_story",
40
+ "storyblok_get_components"]
31
41
  },
32
42
  "uiHints": {
33
43
  "baseUrl": {
package/package.json CHANGED
@@ -1,12 +1,11 @@
1
1
  {
2
2
  "name": "@kvasar/openclaw-storyblok-plugin",
3
- "version": "0.1.11",
3
+ "version": "0.1.13",
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",
@@ -40,6 +39,9 @@
40
39
  "@types/node": "^22.0.0",
41
40
  "vitest": "^1.6.0"
42
41
  },
42
+ "peerDependencies": {
43
+ "openclaw": ">=2026.4.2"
44
+ },
43
45
  "keywords": [
44
46
  "openclaw",
45
47
  "plugin",