Skip to content

Commit 1f0e5c2

Browse files
authored
Merge pull request #98 from takker99/fix-watchlist
✨ Support External links at /api/pages/:project/:title
2 parents 04980af + 95bfc32 commit 1f0e5c2

File tree

1 file changed

+29
-5
lines changed

1 file changed

+29
-5
lines changed

rest/pages.ts

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type {
2+
ErrorLike,
23
NotFoundError,
34
NotLoggedInError,
45
NotMemberError,
@@ -12,18 +13,32 @@ import { BaseOptions, Result, setDefaults } from "./util.ts";
1213

1314
/** Options for `getPage()` */
1415
export interface GetPageOption extends BaseOptions {
15-
/** use `followRename` */ followRename?: boolean;
16+
/** use `followRename` */
17+
followRename?: boolean;
18+
19+
/** project ids to get External links */
20+
projects?: string[];
21+
}
22+
23+
export interface TooLongURIError extends ErrorLike {
24+
name: "TooLongURIError";
1625
}
1726

1827
const getPage_toRequest: GetPage["toRequest"] = (
1928
project,
2029
title,
2130
options,
2231
) => {
23-
const { sid, hostName, followRename } = setDefaults(options ?? {});
32+
const { sid, hostName, followRename, projects } = setDefaults(options ?? {});
33+
const params = new URLSearchParams();
34+
params.append("followRename", `${followRename ?? true}`);
35+
for (const id of projects ?? []) {
36+
params.append("projects", id);
37+
}
2438
const path = `https://${hostName}/api/pages/${project}/${
2539
encodeTitleURI(title)
26-
}?followRename=${followRename ?? true}`;
40+
}?${params.toString()}`;
41+
2742
return new Request(
2843
path,
2944
sid ? { headers: { Cookie: cookie(sid) } } : undefined,
@@ -32,6 +47,15 @@ const getPage_toRequest: GetPage["toRequest"] = (
3247

3348
const getPage_fromResponse: GetPage["fromResponse"] = async (res) => {
3449
if (!res.ok) {
50+
if (res.status === 414) {
51+
return {
52+
ok: false,
53+
value: {
54+
name: "TooLongURIError",
55+
message: "project ids may be too much.",
56+
},
57+
};
58+
}
3559
return makeError<NotFoundError | NotLoggedInError | NotMemberError>(res);
3660
}
3761
const value = (await res.json()) as Page;
@@ -60,14 +84,14 @@ export interface GetPage {
6084
fromResponse: (res: Response) => Promise<
6185
Result<
6286
Page,
63-
NotFoundError | NotLoggedInError | NotMemberError
87+
NotFoundError | NotLoggedInError | NotMemberError | TooLongURIError
6488
>
6589
>;
6690

6791
(project: string, title: string, options?: GetPageOption): Promise<
6892
Result<
6993
Page,
70-
NotFoundError | NotLoggedInError | NotMemberError
94+
NotFoundError | NotLoggedInError | NotMemberError | TooLongURIError
7195
>
7296
>;
7397
}

0 commit comments

Comments
 (0)