Setting the file. One moment. Blog Post Build Client · Rp Target Wix · wix/skills · Skills Docs41.10
Multilingual Restore
lib/blog-post-build-client.js
lib/blog-post-build-client.js
JavaScript·58 lines·3 KB
(
`Wix Blog response lacks ${
field
}`
);
9 return value;
10}
11function readUrl(surface, id) {
12 const encoded = encodeURIComponent(id);
13 return `${WIXAPIS}/blog/v3/${surface}/${encoded}?fieldsets=RICH_CONTENT&fieldsets=URL`;
14}
15function createBlogBuildClient(wix, { fetchPage, fetchImage } = {}) {
16 if (!wix || typeof wix.send !== 'function') throw new Error('blog build client needs wix.send');
17 return {
18 async createDraft(post) {
19 const response = await wix.send(writers.buildCreateBuildDraftPostRequest(post));
20 return unwrap(response, 'draftPost');
21 },
22 async updateDraft(id, projection) {
23 const response = await wix.send(writers.buildUpdateBuildDraftPostRequest(id, projection));
24 return unwrap(response, 'draftPost');
25 },
26 async publishDraft(id) { return writers.publishDraftPost(wix, id); },
27 async getDraft(id) { return unwrap(await wix.send(writers.buildBlogBuildReadRequest(readUrl('draft-posts', id))), 'draftPost'); },
28 async getPost(id) { return unwrap(await wix.send(writers.buildBlogBuildReadRequest(readUrl('posts', id))), 'post'); },
29 async listDrafts({ cursor } = {}) {
30 const params = new URLSearchParams({ 'paging.limit': '100', status: 'UNPUBLISHED' });
31 if (cursor?.startsWith('offset:')) params.set('paging.offset', cursor.slice('offset:'.length));
32 else if (cursor) params.set('paging.cursor', cursor);
33 const response = await wix.send(writers.buildBlogBuildReadRequest(`${WIXAPIS}/blog/v3/draft-posts?${params}`));
34 const drafts = response?.draftPosts;
35 if (!Array.isArray(drafts)) throw new Error('Wix Blog list response lacks draftPosts');
36 // Blog List Draft Posts exposes metaData; other Wix list APIs use pagingMetadata.
37 // Accept either documented envelope, but never silently truncate an uncertain page.
38 const metadata = response?.metaData || response?.pagingMetadata;
39 if (!metadata) throw new Error('Wix Blog list response lacks pagination metadata');
40 let nextCursor = metadata.cursors?.next || metadata.nextCursor || null;
41 if (!nextCursor && Number.isFinite(metadata.total) && Number.isFinite(metadata.offset) &&
42 metadata.offset + drafts.length < metadata.total) {
43 if (!drafts.length) throw new Error('Wix Blog list made no offset progress');
44 nextCursor = `offset:${metadata.offset + drafts.length}`;
45 }
46 if (!nextCursor && drafts.length === 100 && !Number.isFinite(metadata.total)) {
47 throw new Error('Wix Blog list ended on a full page without pagination evidence');
48 }
49 return { drafts, nextCursor };
50 },
51 async deletePost(id) { return writers.deletePost(wix, id); },
52 async deleteDraft(id) { return wix.send(writers.buildDeleteDraftPostRequest(id)); },
53 ...(fetchPage ? { fetchPage } : {}),
54 ...(fetchImage ? { fetchImage } : {}),
55 };
56}
57
58module.exports = { createBlogBuildClient };