@kvasar/openclaw-storyblok-plugin 0.1.12 → 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.
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +192 -0
- package/dist/index.js.map +1 -0
- package/dist/src/client.d.ts +61 -0
- package/dist/src/client.d.ts.map +1 -0
- package/dist/src/client.js +155 -0
- package/dist/src/client.js.map +1 -0
- package/dist/src/config.d.ts +9 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +32 -0
- package/dist/src/config.js.map +1 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +6 -4
- package/index.ts +0 -247
- package/src/__tests__/README.md +0 -115
- package/src/__tests__/openclaw.plugin.json +0 -30
- package/src/__tests__/package-lock.json +0 -1555
- package/src/__tests__/package.json +0 -22
- package/src/__tests__/storyblok.test.ts +0 -55
- package/src/__tests__/tsconfig.json +0 -19
- package/src/client.ts +0 -176
- package/src/config.ts +0 -35
- package/src/openclaw-plugin-entry.d.ts +0 -3
package/dist/index.d.ts
ADDED
|
@@ -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"}
|
package/openclaw.plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "openclaw-storyblok",
|
|
3
3
|
"name": "Storyblok Integration",
|
|
4
|
-
"version": "0.1.
|
|
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
|
package/package.json
CHANGED
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kvasar/openclaw-storyblok-plugin",
|
|
3
|
-
"version": "0.1.
|
|
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.
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
7
|
"files": [
|
|
8
|
-
"
|
|
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",
|