@pterodoc/wordpress 0.2.0

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 @@
1
+ {"version":3,"file":"index.js","sources":["../src/client.ts","../src/media.ts","../src/pages.ts","../src/url.ts","../src/plugin.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null],"names":[],"mappings":"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"}
package/lib/media.d.ts ADDED
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The WordPress media library.
3
+ *
4
+ * A file's identity is the hash of its contents, carried in the media slug.
5
+ * Keeping the identity on the server rather than in a local cache is what lets
6
+ * a fresh checkout, or a CI runner that has never seen the site, avoid
7
+ * uploading everything again.
8
+ */
9
+ import type { MediaRef, MediaUpload } from '@pterodoc/core/target';
10
+ import type { WpClient } from './client';
11
+ /** The slug that identifies a file uploaded by pterodoc. */
12
+ export declare function mediaSlug(prefix: string, hash: string): string;
13
+ /** Read the hash back out of a slug, when the slug is one of ours. */
14
+ export declare function hashFromSlug(prefix: string, slug: string): string | undefined;
15
+ /**
16
+ * Everything pterodoc has already uploaded to this site, by content hash.
17
+ */
18
+ export declare function loadMediaIndex(client: WpClient, prefix: string): Promise<Map<string, MediaRef>>;
19
+ /**
20
+ * Upload one file.
21
+ *
22
+ * WordPress derives a slug from the filename on create, so the identifying
23
+ * slug has to be set in a second request.
24
+ */
25
+ export declare function uploadMedia(client: WpClient, upload: MediaUpload, prefix: string): Promise<MediaRef>;
26
+ //# sourceMappingURL=media.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../src/media.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAUzC,4DAA4D;AAC5D,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK7E;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAmBhC;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,CAAC,CAkCnB"}
package/lib/pages.d.ts ADDED
@@ -0,0 +1,87 @@
1
+ /**
2
+ * WordPress pages: finding them, comparing them, writing them, removing them.
3
+ *
4
+ * A page's identity is its parent and its slug, which is what makes a re-run
5
+ * rewrite only what actually differs.
6
+ */
7
+ import type { RemotePage, RenderedPage } from '@pterodoc/core/target';
8
+ import { type WpClient } from './client';
9
+ /** WordPress's own page shape, narrowed to what is read. */
10
+ interface WpPage {
11
+ id: number;
12
+ parent: number;
13
+ slug: string;
14
+ status: string;
15
+ link: string;
16
+ title?: {
17
+ raw?: string;
18
+ rendered?: string;
19
+ };
20
+ content?: {
21
+ raw?: string;
22
+ };
23
+ excerpt?: {
24
+ raw?: string;
25
+ };
26
+ menu_order: number;
27
+ template: string;
28
+ meta?: Record<string, unknown>;
29
+ }
30
+ /** Convert a WordPress page into the shape the reconciler compares. */
31
+ export declare function toRemotePage(page: WpPage): RemotePage;
32
+ /** Fetch every page on the site. */
33
+ export declare function fetchPageIndex(client: WpClient): Promise<RemotePage[]>;
34
+ /** Fetch one page with the fields needed to compare it. */
35
+ export declare function fetchPage(client: WpClient, id: number): Promise<RemotePage>;
36
+ /**
37
+ * Find a page by its position in the tree.
38
+ *
39
+ * The index is searched when one was supplied, because a whole-site index is
40
+ * one request where per-page lookups are hundreds.
41
+ */
42
+ export declare function findPage(client: WpClient, parent: number, slug: string, index?: RemotePage[], log?: (message: string) => void): Promise<RemotePage | undefined>;
43
+ /** Body sent when creating or updating a page. */
44
+ export interface PageInput {
45
+ title?: string;
46
+ content?: string;
47
+ excerpt?: string;
48
+ parent?: number;
49
+ slug?: string;
50
+ status?: string;
51
+ menu_order?: number;
52
+ template?: string;
53
+ meta?: Record<string, unknown>;
54
+ }
55
+ /** Create a page, checking that WordPress honoured the slug we asked for. */
56
+ export declare function createPage(client: WpClient, input: PageInput): Promise<RemotePage>;
57
+ /** Update a page. */
58
+ export declare function updatePage(client: WpClient, id: number, input: PageInput): Promise<RemotePage>;
59
+ /**
60
+ * Move a page to the trash.
61
+ *
62
+ * Never a permanent delete: recovering from a mistaken prune should not
63
+ * require a database backup.
64
+ */
65
+ export declare function trashPage(client: WpClient, id: number): Promise<void>;
66
+ /**
67
+ * Which fields of an existing page differ from the rendered one.
68
+ *
69
+ * @param remote The page as WordPress holds it.
70
+ * @param rendered The page as pterodoc would publish it.
71
+ * @param context The expected parent, slug, status and template.
72
+ */
73
+ export declare function diffPage(remote: RemotePage, rendered: RenderedPage, context: {
74
+ parentId: number;
75
+ status: string;
76
+ template: string;
77
+ isRoot: boolean;
78
+ slug: string;
79
+ }): string[];
80
+ /**
81
+ * Pages below a root that no rendered page accounts for.
82
+ *
83
+ * Deepest first, so a parent is never trashed before its children.
84
+ */
85
+ export declare function computePrune(index: RemotePage[], rootId: number, keepIds: Set<number>): RemotePage[];
86
+ export {};
87
+ //# sourceMappingURL=pages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../src/pages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Finding out whether the pterodoc WordPress plugin is installed.
3
+ *
4
+ * The plugin registers one option and exposes it over REST, so asking for the
5
+ * site's settings answers both questions at once: whether it is there, and what
6
+ * it is configured with. That second half matters, because the plugin styles a
7
+ * site by class prefix and a prefix that disagrees with the one pterodoc writes
8
+ * is a setup that looks broken for no visible reason.
9
+ */
10
+ import type { WpClient } from './client';
11
+ /** What the site said about the plugin. */
12
+ export interface PluginStatus {
13
+ /** Whether the plugin answered. */
14
+ installed: boolean;
15
+ /**
16
+ * Why the answer is not known.
17
+ *
18
+ * Set when the site could not be asked — usually because the credentials
19
+ * belong to someone without `manage_options` — rather than when the plugin is
20
+ * known to be absent.
21
+ */
22
+ unknown?: string;
23
+ /** The class prefix the plugin is styling, when it is installed. */
24
+ classPrefix?: string;
25
+ }
26
+ /**
27
+ * Ask a site whether the plugin is installed.
28
+ *
29
+ * Never throws: an unreachable or unauthorised site is a thing to report in a
30
+ * diagnostic, not a reason to fail one.
31
+ *
32
+ * @param client A client for the site.
33
+ */
34
+ export declare function detectPlugin(client: WpClient): Promise<PluginStatus>;
35
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,2CAA2C;AAC3C,MAAM,WAAW,YAAY;IAC3B,mCAAmC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAOD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CA0B1E"}
package/lib/url.d.ts ADDED
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Where pages live on WordPress.
3
+ *
4
+ * URL policy belongs to the target: the renderer asks for a path and gets one
5
+ * back, without knowing whether the site nests pages, uses a subdirectory
6
+ * install, or publishes versions under their own segment.
7
+ */
8
+ /** How a WordPress site's documentation tree is addressed. */
9
+ export interface WordpressUrlPolicy {
10
+ /** Segments of the path the tree hangs from, e.g. ['docstack']. */
11
+ rootSegments: string[];
12
+ /** Segments below the root holding the docs, e.g. ['docs']. May be empty. */
13
+ baseSegments: string[];
14
+ /** Name of the version published at the base, which needs no segment of its own. */
15
+ primaryVersion?: string | undefined;
16
+ /** Locale published at the base; other locales get a segment. */
17
+ primaryLocale?: string | undefined;
18
+ }
19
+ /**
20
+ * Segments that come before a page's own path.
21
+ *
22
+ * A version or a locale only earns a segment when it is not the primary one,
23
+ * so a single-version, single-locale site publishes exactly where it did
24
+ * before any of this existed.
25
+ */
26
+ export declare function prefixSegments(policy: WordpressUrlPolicy, context: {
27
+ versionName: string;
28
+ locale: string;
29
+ }): string[];
30
+ /** The absolute site path of a page. */
31
+ export declare function hrefFor(policy: WordpressUrlPolicy, treePath: string, context: {
32
+ versionName: string;
33
+ locale: string;
34
+ }): string;
35
+ /**
36
+ * The path pages hang from, and the slug of the page that owns the tree.
37
+ *
38
+ * Everything above the owned page is created once if missing and never edited;
39
+ * the owned page is the documentation root itself.
40
+ */
41
+ export declare function splitOwnership(policy: WordpressUrlPolicy): {
42
+ stubSegments: string[];
43
+ rootSlug: string;
44
+ };
45
+ //# sourceMappingURL=url.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../src/url.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,mEAAmE;IACnE,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,6EAA6E;IAC7E,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC/C,MAAM,EAAE,CASV;AAED,wCAAwC;AACxC,wBAAgB,OAAO,CACrB,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC/C,MAAM,CAER;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG;IAC1D,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAOA"}
package/package.json ADDED
@@ -0,0 +1,24 @@
1
+ {
2
+ "name": "@pterodoc/wordpress",
3
+ "version": "0.2.0",
4
+ "description": "The WordPress REST target for pterodoc.",
5
+ "type": "module",
6
+ "main": "./lib/index.js",
7
+ "types": "./lib/index.d.ts",
8
+ "exports": {
9
+ ".": { "types": "./lib/index.d.ts", "default": "./lib/index.js" },
10
+ "./package.json": "./package.json"
11
+ },
12
+ "files": ["lib", "src", "README.md", "LICENCE.md"],
13
+ "engines": { "node": ">=20.11" },
14
+ "scripts": {
15
+ "build": "tsc -b --force && rollup -c",
16
+ "test": "node ../../scripts/tests.mjs unit"
17
+ },
18
+ "dependencies": {
19
+ "@pterodoc/core": "0.2.0"
20
+ },
21
+ "repository": { "type": "git", "url": "git+https://github.com/onyx-ac/pterodoc.git" },
22
+ "license": "CC-BY-SA-4.0",
23
+ "publishConfig": { "access": "public" }
24
+ }
package/src/client.ts ADDED
@@ -0,0 +1,215 @@
1
+ /**
2
+ * A small WordPress REST client, scoped to what publishing needs.
3
+ *
4
+ * Authentication is an Application Password over HTTP Basic. `fetch` and the
5
+ * clock are injectable so the whole sync can be tested without a network.
6
+ */
7
+
8
+ import { TargetError, USER_AGENT } from '@pterodoc/core/util';
9
+
10
+ /** Fields needed to compare a remote page with a rendered one. */
11
+ export const PAGE_FIELDS = 'id,parent,slug,status,link,title,menu_order,template';
12
+
13
+ /** Those, plus the content only fetched when a page is about to be compared. */
14
+ export const FULL_PAGE_FIELDS = `${PAGE_FIELDS},content,excerpt,meta`;
15
+
16
+ /** How hard to try again when WordPress is busy. */
17
+ export interface RetryPolicy {
18
+ /** Extra attempts after the first. */
19
+ attempts: number;
20
+ /** Delay before the first retry, doubling after that. */
21
+ baseDelayMs: number;
22
+ /** Longest delay to wait, however far the backoff has grown. */
23
+ maxDelayMs: number;
24
+ }
25
+
26
+ /** The retry policy used when a site configures none. */
27
+ export const DEFAULT_RETRY: RetryPolicy = { attempts: 4, baseDelayMs: 1000, maxDelayMs: 30_000 };
28
+
29
+ /** What the client needs to reach a site. */
30
+ export interface WpClientOptions {
31
+ /** Site origin, without a trailing slash. */
32
+ baseUrl: string;
33
+ /** WordPress username. */
34
+ user?: string;
35
+ /** An Application Password; display spaces are removed. */
36
+ appPassword?: string;
37
+ /** Polylang language code, sent as a `lang` parameter. */
38
+ lang?: string;
39
+ /** Send DELETE as POST with an override header, for hosts that block DELETE. */
40
+ methodOverride?: boolean;
41
+ /** How hard to retry. */
42
+ retry?: RetryPolicy;
43
+ /** Injected for tests. */
44
+ fetch?: typeof globalThis.fetch;
45
+ /** Injected for tests. */
46
+ sleep?: (ms: number) => Promise<void>;
47
+ /** Called with progress worth seeing under `--verbose`. */
48
+ log?: (message: string) => void;
49
+ }
50
+
51
+ /** One request, before it is sent. */
52
+ interface RequestOptions {
53
+ query?: Record<string, string | number | undefined>;
54
+ body?: unknown;
55
+ /** A multipart body, used for media uploads. */
56
+ form?: FormData;
57
+ }
58
+
59
+ export class WpClient {
60
+ private readonly baseUrl: string;
61
+ private readonly user: string;
62
+ private readonly appPassword: string;
63
+ private readonly lang: string;
64
+ private readonly methodOverride: boolean;
65
+ private readonly retry: RetryPolicy;
66
+ private readonly doFetch: typeof globalThis.fetch;
67
+ private readonly sleep: (ms: number) => Promise<void>;
68
+ private readonly log: (message: string) => void;
69
+
70
+ /** How many requests have been made, for the run summary. */
71
+ requestCount = 0;
72
+
73
+ constructor(options: WpClientOptions) {
74
+ this.baseUrl = options.baseUrl.replace(/\/+$/, '');
75
+ this.user = options.user ?? '';
76
+ this.appPassword = (options.appPassword ?? '').replace(/\s+/g, '');
77
+ this.lang = options.lang ?? '';
78
+ this.methodOverride = options.methodOverride === true;
79
+ this.retry = options.retry ?? DEFAULT_RETRY;
80
+ this.doFetch = options.fetch ?? globalThis.fetch;
81
+ this.sleep = options.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
82
+ this.log = options.log ?? ((): void => {});
83
+ }
84
+
85
+ /** Headers every request carries. */
86
+ private headers(): Record<string, string> {
87
+ const token = Buffer.from(`${this.user}:${this.appPassword}`, 'utf8').toString('base64');
88
+ return {
89
+ Authorization: `Basic ${token}`,
90
+ Accept: 'application/json',
91
+ 'User-Agent': USER_AGENT,
92
+ };
93
+ }
94
+
95
+ /**
96
+ * Perform one REST call, retrying only what is worth retrying.
97
+ */
98
+ async request<T = unknown>(
99
+ method: 'GET' | 'POST' | 'DELETE',
100
+ path: string,
101
+ options: RequestOptions = {},
102
+ ): Promise<{ data: T; headers: Headers }> {
103
+ const url = new URL(`${this.baseUrl}/wp-json/wp/v2${path}`);
104
+ for (const [key, value] of Object.entries(options.query ?? {})) {
105
+ if (value !== undefined && value !== '') url.searchParams.set(key, String(value));
106
+ }
107
+ if (this.lang) url.searchParams.set('lang', this.lang);
108
+
109
+ const headers = this.headers();
110
+ const init: RequestInit = { method, headers, redirect: 'error' };
111
+ if (options.form) {
112
+ init.body = options.form;
113
+ } else if (options.body !== undefined) {
114
+ headers['Content-Type'] = 'application/json';
115
+ init.body = JSON.stringify(options.body);
116
+ }
117
+ if (this.methodOverride && method === 'DELETE') {
118
+ init.method = 'POST';
119
+ headers['X-HTTP-Method-Override'] = 'DELETE';
120
+ }
121
+
122
+ let lastError: TargetError | undefined;
123
+ let retryAfterMs: number | undefined;
124
+
125
+ for (let attempt = 0; attempt <= this.retry.attempts; attempt += 1) {
126
+ if (attempt > 0) {
127
+ // Retry-After applies to the response that carried it, not to every
128
+ // later attempt, so it is consumed rather than remembered.
129
+ const backoff = Math.min(this.retry.baseDelayMs * 2 ** (attempt - 1), this.retry.maxDelayMs);
130
+ const wait = retryAfterMs ?? backoff;
131
+ retryAfterMs = undefined;
132
+ this.log(`retry ${attempt}/${this.retry.attempts} in ${wait}ms: ${method} ${url.pathname}`);
133
+ await this.sleep(wait);
134
+ }
135
+
136
+ this.requestCount += 1;
137
+ let response: Response;
138
+ try {
139
+ response = await this.doFetch(url.href, init);
140
+ } catch (error) {
141
+ const message = error instanceof Error ? error.message : String(error);
142
+ lastError = new TargetError(
143
+ /redirect/i.test(message)
144
+ ? `${method} ${url.pathname} was redirected. Check that WP_URL matches the site exactly, including https and www.`
145
+ : `${method} ${url.pathname} failed: ${message}`,
146
+ { status: 0, method, url: url.href },
147
+ );
148
+ if (/redirect/i.test(message)) throw lastError;
149
+ continue;
150
+ }
151
+
152
+ const text = await response.text();
153
+
154
+ if (response.ok) {
155
+ try {
156
+ return { data: (text ? JSON.parse(text) : null) as T, headers: response.headers };
157
+ } catch {
158
+ throw new TargetError(`${method} ${url.pathname} returned a success body that is not JSON.`, {
159
+ status: response.status,
160
+ method,
161
+ url: url.href,
162
+ bodySnippet: text.slice(0, 200),
163
+ });
164
+ }
165
+ }
166
+
167
+ let code: string | undefined;
168
+ let message = `${response.status} ${response.statusText}`;
169
+ const contentType = response.headers.get('content-type') ?? '';
170
+ if (contentType.includes('json')) {
171
+ try {
172
+ const parsed = JSON.parse(text) as { code?: string; message?: string };
173
+ code = parsed.code;
174
+ if (parsed.message) message = `${message}: ${parsed.message}`;
175
+ } catch {
176
+ /* fall through to the snippet */
177
+ }
178
+ } else if (text) {
179
+ message = `${message} (the response was not JSON; a firewall or security plugin may be blocking the REST API)`;
180
+ }
181
+
182
+ lastError = new TargetError(`${method} ${url.pathname} — ${message}`, {
183
+ status: response.status,
184
+ code,
185
+ method,
186
+ url: url.href,
187
+ bodySnippet: text.slice(0, 200),
188
+ });
189
+
190
+ const retryAfter = Number(response.headers.get('retry-after'));
191
+ if (Number.isFinite(retryAfter) && retryAfter > 0) retryAfterMs = retryAfter * 1000;
192
+
193
+ if (response.status !== 429 && response.status < 500) throw lastError;
194
+ }
195
+
196
+ throw lastError ?? new TargetError(`${method} ${url.pathname} failed.`, { status: 0, method, url: url.href });
197
+ }
198
+
199
+ /** Follow `X-WP-TotalPages` to the end of a collection. */
200
+ async listAll<T>(path: string, query: Record<string, string | number>): Promise<T[]> {
201
+ const all: T[] = [];
202
+ let page = 1;
203
+ let totalPages = 1;
204
+ do {
205
+ const { data, headers } = await this.request<T[]>('GET', path, {
206
+ query: { ...query, per_page: 100, page },
207
+ });
208
+ if (Array.isArray(data)) all.push(...data);
209
+ const header = Number(headers.get('x-wp-totalpages'));
210
+ totalPages = Number.isFinite(header) && header > 0 ? header : 1;
211
+ page += 1;
212
+ } while (page <= totalPages);
213
+ return all;
214
+ }
215
+ }