@kvasar/openclaw-storyblok-plugin 0.1.13 → 0.1.14

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.
@@ -1,155 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,MAAM,OAAO,eAAe;IAClB,GAAG,CAAkB;IAE7B,YAAY,GAAoB;QAC9B,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,GAAW,EAAE,UAAuB,EAAE;QAC7D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,GAAG,OAAO,CAAC,OAAO;aACnB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;QAED,kCAAkC;QAClC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,IAAW,CAAC;QAC3C,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;IACpB,CAAC;IAEO,aAAa,CAAC,IAAY,EAAE,SAAiC,EAAE;QACrE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,GAAG,IAAI,cAAc,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,EAAE,CAAC;QAC3D,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;QACxC,MAAM,EAAE,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAClD,OAAO,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC;IACxB,CAAC;IAEO,WAAW,CAAC,IAAY,EAAE,SAAiC,EAAE;QACnE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,GAAG,IAAI,UAAU,IAAI,EAAE,CAAC;QACpC,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YAC1B,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;QACvC,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;QAClD,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,2CAA2C;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,UAAkB,EAAE,OAAsE,EAAE;QACzG,0HAA0H;QAC1H,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;QACrE,MAAM,MAAM,GAA2B,EAAE,CAAC;QAE1C,2CAA2C;QAC3C,sEAAsE;QACtE,yEAAyE;QACzE,wFAAwF;QACxF,4IAA4I;QAC5I,IAAI,IAAI,CAAC,UAAU;YAAE,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC;QACzC,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QACnD,IAAI,OAAO;YAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QAEtC,mDAAmD;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,kBAAkB,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SASd,EAAE;QACJ,MAAM,CAAC,GAA2B,EAAE,CAAC;QACrC,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;YAAE,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,MAAM,CAAC,SAAS,KAAK,SAAS;YAAE,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,MAAM,CAAC,MAAM;YAAE,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5C,IAAI,MAAM,CAAC,GAAG;YAAE,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACnC,IAAI,MAAM,CAAC,QAAQ;YAAE,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,MAAM,CAAC,IAAI;YAAE,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,MAAM,CAAC,OAAO;YAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QAC/C,IAAI,MAAM,CAAC,SAAS;YAAE,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;QAErD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IASjB;QACC,MAAM,IAAI,GAAwB,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QACxD,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAClE,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAClE,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9C,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrC,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAClE,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAEjD,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe,EAAE,IAQlC;QACC,MAAM,IAAI,GAAwB,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACxC,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrC,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9C,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS;YAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAClE,IAAI,IAAI,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACrC,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjD,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE9C,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAe,EAAE,OAAwE,EAAE;QAC5G,MAAM,IAAI,GAAwB,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC9C,IAAI,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QACjD,IAAI,IAAI,CAAC,aAAa;YAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QAEhE,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,kBAAkB,CAAC,OAAO,CAAE,UAAU,CAAC,CAAC;QACnF,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,OAAe,EAAE,QAAiB;QACrD,MAAM,IAAI,GAAwB,EAAE,CAAC;QACrC,IAAI,QAAQ;YAAE,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACvC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,kBAAkB,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACpF,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAgB,EAAE,QAAiB;QACrD,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,OAAO;YAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;QACtC,IAAI,QAAQ;YAAE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;CACF"}
@@ -1,9 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,32 +0,0 @@
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
@@ -1 +0,0 @@
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"}