@waline/client 2.11.2 → 2.12.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.
Files changed (51) hide show
  1. package/dist/api.cjs +1 -1
  2. package/dist/api.cjs.map +1 -1
  3. package/dist/api.d.cts +194 -0
  4. package/dist/api.d.mts +194 -0
  5. package/dist/api.d.ts +194 -0
  6. package/dist/api.mjs +1 -1
  7. package/dist/api.mjs.map +1 -1
  8. package/dist/comment.cjs +1 -1
  9. package/dist/comment.cjs.map +1 -1
  10. package/dist/comment.js +1 -1
  11. package/dist/comment.js.map +1 -1
  12. package/dist/comment.mjs +1 -1
  13. package/dist/comment.mjs.map +1 -1
  14. package/dist/component.mjs +1 -1
  15. package/dist/component.mjs.map +1 -1
  16. package/dist/legacy.umd.d.ts +57 -30
  17. package/dist/legacy.umd.js +1 -1
  18. package/dist/legacy.umd.js.map +1 -1
  19. package/dist/pageview.cjs +1 -1
  20. package/dist/pageview.cjs.map +1 -1
  21. package/dist/pageview.js +1 -1
  22. package/dist/pageview.js.map +1 -1
  23. package/dist/pageview.mjs +1 -1
  24. package/dist/pageview.mjs.map +1 -1
  25. package/dist/shim.cjs +1 -1
  26. package/dist/shim.cjs.map +1 -1
  27. package/dist/shim.d.cts +58 -31
  28. package/dist/shim.d.mts +58 -31
  29. package/dist/shim.mjs +1 -1
  30. package/dist/shim.mjs.map +1 -1
  31. package/dist/waline.cjs +1 -1
  32. package/dist/waline.cjs.map +1 -1
  33. package/dist/waline.d.cts +58 -31
  34. package/dist/waline.d.mts +58 -31
  35. package/dist/waline.d.ts +58 -31
  36. package/dist/waline.js +1 -1
  37. package/dist/waline.js.map +1 -1
  38. package/dist/waline.mjs +1 -1
  39. package/dist/waline.mjs.map +1 -1
  40. package/package.json +22 -20
  41. package/src/compact/convert.ts +2 -2
  42. package/src/components/ArticleReaction.vue +36 -24
  43. package/src/components/CommentBox.vue +6 -5
  44. package/src/components/ImageWall.vue +7 -2
  45. package/src/composables/vote.ts +5 -2
  46. package/src/config/default.ts +45 -83
  47. package/src/entrys/api.ts +1 -1
  48. package/src/typings/base.ts +33 -7
  49. package/src/typings/locale.ts +37 -23
  50. package/src/utils/config.ts +10 -4
  51. package/LICENSE +0 -339
package/dist/api.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});const e={"Content-Type":"application/json"},t=(e,t="")=>{if("object"==typeof e&&e.errno)throw new TypeError(`Fetch ${t} failed with ${e.errno}: ${e.errmsg}`);return e},n=({serverURL:e,lang:n,paths:o,type:r,signal:a})=>fetch(`${e}/article?path=${encodeURIComponent(o.join(","))}&type=${encodeURIComponent(r.join(","))}&lang=${n}`,{signal:a}).then((e=>e.json())).then((e=>t(e,"article count"))),o=({serverURL:n,lang:o,path:r,type:a,action:s})=>fetch(`${n}/article?lang=${o}`,{method:"POST",headers:e,body:JSON.stringify({path:r,type:a,action:s})}).then((e=>e.json())).then((e=>t(e,"article count")));exports.deleteComment=({serverURL:e,lang:t,token:n,objectId:o})=>fetch(`${e}/comment/${o}?lang=${t}`,{method:"DELETE",headers:{Authorization:`Bearer ${n}`}}).then((e=>e.json())),exports.fetchArticleCounter=n,exports.fetchComment=({serverURL:e,lang:n,path:o,page:r,pageSize:a,sortBy:s,signal:i,token:h})=>{const c={};return h&&(c.Authorization=`Bearer ${h}`),fetch(`${e}/comment?path=${encodeURIComponent(o)}&pageSize=${a}&page=${r}&lang=${n}&sortBy=${s}`,{signal:i,headers:c}).then((e=>e.json())).then((e=>t(e,"comment data")))},exports.fetchCommentCount=({serverURL:e,lang:n,paths:o,signal:r})=>fetch(`${e}/comment?type=count&url=${encodeURIComponent(o.join(","))}&lang=${n}`,{signal:r,headers:{}}).then((e=>e.json())).then((e=>t(e,"comment count"))).then((e=>Array.isArray(e)?e:[e])),exports.fetchPageviews=({serverURL:e,lang:t,paths:o,signal:r})=>n({serverURL:e,lang:t,paths:o,type:["time"],signal:r}).then((e=>Array.isArray(e)?e:[e])),exports.fetchRecentComment=({serverURL:e,lang:n,count:o,signal:r,token:a})=>{const s={};return a&&(s.Authorization=`Bearer ${a}`),fetch(`${e}/comment?type=recent&count=${o}&lang=${n}`,{signal:r,headers:s}).then((e=>e.json())).then((e=>t(e,"recent comment")))},exports.likeComment=({serverURL:t,lang:n,objectId:o,like:r})=>fetch(`${t}/comment/${o}?lang=${n}`,{method:"PUT",headers:e,body:JSON.stringify({like:r})}).then((e=>e.json())),exports.login=({lang:e,serverURL:t})=>{const n=(window.innerWidth-450)/2,o=(window.innerHeight-450)/2,r=window.open(`${t}/ui/login?lng=${encodeURIComponent(e)}`,"_blank",`width=450,height=450,left=${n},top=${o},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`);return r?.postMessage({type:"TOKEN",data:null},"*"),new Promise((e=>{const t=({data:n})=>{n&&"object"==typeof n&&"userInfo"===n.type&&n.data.token&&(r?.close(),window.removeEventListener("message",t),e(n.data))};window.addEventListener("message",t)}))},exports.postComment=({serverURL:e,lang:t,token:n,comment:o})=>{const r={"Content-Type":"application/json"};return n&&(r.Authorization=`Bearer ${n}`),o.eid?fetch(`${e}/comment/${o.eid}?lang=${t}`,{method:"PUT",headers:r,body:JSON.stringify(o)}).then((e=>e.json())):fetch(`${e}/comment?lang=${t}`,{method:"POST",headers:r,body:JSON.stringify(o)}).then((e=>e.json()))},exports.updateArticleCounter=o,exports.updateComment=({serverURL:t,lang:n,token:o,objectId:r,...a})=>fetch(`${t}/comment/${r}?lang=${n}`,{method:"PUT",headers:{...e,Authorization:`Bearer ${o}`},body:JSON.stringify(a)}).then((e=>e.json())),exports.updatePageviews=e=>o({...e,type:"time"});
2
2
  //# sourceMappingURL=api.cjs.map
package/dist/api.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"api.cjs","sources":["../src/api/utils.ts","../src/api/articleCounter.ts","../src/api/comment.ts","../src/api/commentCount.ts","../src/api/pageview.ts","../src/api/recentComment.ts","../src/api/login.ts"],"sourcesContent":["export interface FetchErrorData {\n errno: number;\n errmsg: string;\n}\n\nexport const JSON_HEADERS: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n};\n\nexport const errorCheck = <T = unknown>(\n data: T | FetchErrorData,\n name = ''\n): T => {\n if (typeof data === 'object' && (data as FetchErrorData).errno)\n throw new TypeError(\n `Fetch ${name} failed with ${(data as FetchErrorData).errno}: ${\n (data as FetchErrorData).errmsg\n }`\n );\n\n return data as T;\n};\n","import { JSON_HEADERS, errorCheck } from './utils';\n\nexport interface FetchArticleCounterOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n type: string[];\n}\n\nexport const fetchArticleCounter = ({\n serverURL,\n lang,\n paths,\n type,\n signal,\n}: FetchArticleCounterOptions): Promise<\n Record<string, number>[] | Record<string, number> | number[] | number\n> =>\n fetch(\n `${serverURL}/article?path=${encodeURIComponent(\n paths.join(',')\n )}&type=${encodeURIComponent(type.join(','))}&lang=${lang}`,\n { signal }\n )\n .then(\n (resp) =>\n resp.json() as Promise<Record<string, number>[] | number[] | number>\n )\n .then((data) => errorCheck(data, 'article count'));\n\nexport interface UpdateArticleCounterOptions {\n serverURL: string;\n lang: string;\n path: string;\n type: string;\n action?: 'inc' | 'desc';\n}\n\nexport const updateArticleCounter = ({\n serverURL,\n lang,\n path,\n type,\n action,\n}: UpdateArticleCounterOptions): Promise<number> =>\n fetch(`${serverURL}/article?lang=${lang}`, {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({ path, type, action }),\n })\n .then((resp) => resp.json() as Promise<number>)\n .then((data) => errorCheck(data, 'article count'));\n","import { JSON_HEADERS, errorCheck } from './utils';\nimport type { WalineComment, WalineCommentData } from '../typings';\n\nexport interface FetchCommentOptions {\n serverURL: string;\n path: string;\n page: number;\n pageSize: number;\n sortBy: string;\n signal: AbortSignal;\n token?: string;\n lang: string;\n}\n\nexport interface CommentData {\n count: number;\n data: WalineComment[];\n totalPages: number;\n}\n\nexport const fetchComment = ({\n serverURL,\n lang,\n path,\n page,\n pageSize,\n sortBy,\n signal,\n token,\n}: FetchCommentOptions): Promise<CommentData> => {\n const headers: Record<string, string> = {};\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(\n `${serverURL}/comment?path=${encodeURIComponent(\n path\n )}&pageSize=${pageSize}&page=${page}&lang=${lang}&sortBy=${sortBy}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<CommentData>)\n .then((data) => errorCheck(data, 'comment data'));\n};\n\nexport interface PostCommentOptions {\n serverURL: string;\n lang: string;\n token?: string;\n comment: WalineCommentData;\n}\n\nexport interface PostCommentResponse {\n data?: WalineComment;\n errmsg?: string;\n}\n\nexport const postComment = ({\n serverURL,\n lang,\n token,\n comment,\n}: PostCommentOptions): Promise<PostCommentResponse> => {\n const headers: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n };\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n if (comment.eid) {\n return fetch(`${serverURL}/comment/${comment.eid}?lang=${lang}`, {\n method: 'PUT',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n }\n\n return fetch(`${serverURL}/comment?lang=${lang}`, {\n method: 'POST',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n};\n\nexport interface DeleteCommentOptions {\n serverURL: string;\n lang: string;\n token: string;\n objectId: string | number;\n}\n\nexport const deleteComment = ({\n serverURL,\n lang,\n token,\n objectId,\n}: DeleteCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'DELETE',\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }).then((resp) => resp.json() as Promise<void>);\n\nexport interface LikeCommentOptions {\n serverURL: string;\n lang: string;\n objectId: number | string;\n like: boolean;\n}\n\nexport const likeComment = ({\n serverURL,\n lang,\n objectId,\n like,\n}: LikeCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify({ like }),\n }).then((resp) => resp.json() as Promise<void>);\n\nexport interface UpdateCommentOptions {\n serverURL: string;\n lang: string;\n token: string;\n objectId: number | string;\n status?: 'approved' | 'waiting' | 'spam';\n sticky?: number;\n}\n\nexport const updateComment = ({\n serverURL,\n lang,\n token,\n objectId,\n ...data\n}: UpdateCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'PUT',\n headers: {\n ...JSON_HEADERS,\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(data),\n }).then((resp) => resp.json() as Promise<void>);\n","import { errorCheck } from './utils';\n\nexport interface FetchCommentCountOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchCommentCount = ({\n serverURL,\n lang,\n paths,\n signal,\n}: FetchCommentCountOptions): Promise<number[]> => {\n const headers: Record<string, string> = {};\n\n return (\n fetch(\n `${serverURL}/comment?type=count&url=${encodeURIComponent(\n paths.join(',')\n )}&lang=${lang}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<number | number[]>)\n .then((data) => errorCheck(data, 'comment count'))\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]))\n );\n};\n","import { fetchArticleCounter, updateArticleCounter } from './articleCounter';\n\ninterface FetchPageviewOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchPageviews = ({\n serverURL,\n lang,\n paths,\n signal,\n}: FetchPageviewOptions): Promise<number[]> =>\n fetchArticleCounter({\n serverURL,\n lang,\n paths,\n type: ['time'],\n signal,\n })\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts])) as Promise<\n number[]\n >;\n\nexport interface UpdatePageviewOptions {\n serverURL: string;\n lang: string;\n path: string;\n action?: 'inc' | 'desc';\n}\n\nexport const updatePageviews = (\n options: UpdatePageviewOptions\n): Promise<number> =>\n updateArticleCounter({\n ...options,\n type: 'time',\n });\n","import { errorCheck } from './utils';\nimport type { WalineComment } from '../typings';\n\nexport interface FetchRecentCommentOptions {\n serverURL: string;\n lang: string;\n count: number;\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchRecentComment = ({\n serverURL,\n lang,\n count,\n signal,\n token,\n}: FetchRecentCommentOptions): Promise<WalineComment[]> => {\n const headers: Record<string, string> = {};\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?type=recent&count=${count}&lang=${lang}`, {\n signal,\n headers,\n })\n .then((resp) => resp.json() as Promise<WalineComment[]>)\n .then((data) => errorCheck(data, 'recent comment'));\n};\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nexport interface LoginOptions {\n lang: string;\n serverURL: string;\n}\n\nexport interface UserInfo {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n display_name: string;\n email: string;\n url: string;\n token: string;\n avatar: string;\n mailMd5: string;\n objectId: string | number;\n type: 'administrator' | 'guest';\n}\n\nexport const login = ({\n lang,\n serverURL,\n}: LoginOptions): Promise<UserInfo & { remember: boolean }> => {\n const width = 450;\n const height = 450;\n const left = (window.innerWidth - width) / 2;\n const top = (window.innerHeight - height) / 2;\n\n const handler = window.open(\n `${serverURL}/ui/login?lng=${encodeURIComponent(lang)}`,\n '_blank',\n `width=${width},height=${height},left=${left},top=${top},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`\n );\n\n handler?.postMessage({ type: 'TOKEN', data: null }, '*');\n\n return new Promise((resolve) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const receiver = ({ data }: any): void => {\n if (!data || typeof data !== 'object' || data.type !== 'userInfo') return;\n\n if (data.data.token) {\n handler?.close();\n\n window.removeEventListener('message', receiver);\n\n resolve(data.data as UserInfo & { remember: boolean });\n }\n };\n\n window.addEventListener('message', receiver);\n });\n};\n"],"names":["JSON_HEADERS","errorCheck","data","name","errno","TypeError","errmsg","fetchArticleCounter","serverURL","lang","paths","type","signal","fetch","encodeURIComponent","join","then","resp","json","updateArticleCounter","path","action","method","headers","body","JSON","stringify","token","objectId","Authorization","page","pageSize","sortBy","counts","Array","isArray","count","like","left","window","innerWidth","top","innerHeight","handler","open","postMessage","Promise","resolve","receiver","close","removeEventListener","addEventListener","comment","eid","options"],"mappings":"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"}
package/dist/api.d.cts CHANGED
@@ -1 +1,195 @@
1
+ interface FetchArticleCounterOptions {
2
+ serverURL: string;
3
+ lang: string;
4
+ paths: string[];
5
+ signal: AbortSignal;
6
+ type: string[];
7
+ }
8
+ declare const fetchArticleCounter: ({ serverURL, lang, paths, type, signal, }: FetchArticleCounterOptions) => Promise<Record<string, number>[] | Record<string, number> | number[] | number>;
9
+ interface UpdateArticleCounterOptions {
10
+ serverURL: string;
11
+ lang: string;
12
+ path: string;
13
+ type: string;
14
+ action?: 'inc' | 'desc';
15
+ }
16
+ declare const updateArticleCounter: ({ serverURL, lang, path, type, action, }: UpdateArticleCounterOptions) => Promise<number>;
1
17
 
18
+ interface WalineCommentData {
19
+ /**
20
+ * User Nickname
21
+ */
22
+ nick: string;
23
+ /**
24
+ * User email
25
+ */
26
+ mail: string;
27
+ /**
28
+ * User link
29
+ */
30
+ link?: string;
31
+ /**
32
+ * Content of comment
33
+ */
34
+ comment: string;
35
+ /**
36
+ * User Agent
37
+ */
38
+ ua: string;
39
+ /**
40
+ * Parent comment id
41
+ */
42
+ pid?: string;
43
+ /**
44
+ * Root comment id
45
+ */
46
+ rid?: string;
47
+ /**
48
+ * User id being at
49
+ */
50
+ at?: string;
51
+ /**
52
+ * edit comment id
53
+ */
54
+ eid?: string;
55
+ /**
56
+ * Comment link
57
+ */
58
+ url: string;
59
+ /**
60
+ * Recaptcha Token
61
+ */
62
+ recaptchaV3?: string;
63
+ }
64
+ declare type WalineCommentStatus = 'approved' | 'waiting' | 'spam';
65
+ interface WalineComment extends Exclude<WalineCommentData, 'ua'> {
66
+ /**
67
+ * User avatar
68
+ */
69
+ avatar: string;
70
+ /**
71
+ * User type
72
+ */
73
+ type?: 'administrator' | 'guest' | `verify:${string}`;
74
+ objectId: string;
75
+ /**
76
+ * Time ISOString when the comment is created
77
+ */
78
+ createdAt: string;
79
+ insertedAt: string;
80
+ updatedAt: string;
81
+ children: WalineComment[];
82
+ sticky?: boolean;
83
+ browser?: string;
84
+ os?: string;
85
+ level?: number;
86
+ addr?: string;
87
+ label?: string;
88
+ user_id?: string | number;
89
+ status?: WalineCommentStatus;
90
+ like?: number;
91
+ orig?: string;
92
+ }
93
+
94
+ interface FetchCommentOptions {
95
+ serverURL: string;
96
+ path: string;
97
+ page: number;
98
+ pageSize: number;
99
+ sortBy: string;
100
+ signal: AbortSignal;
101
+ token?: string;
102
+ lang: string;
103
+ }
104
+ interface CommentData {
105
+ count: number;
106
+ data: WalineComment[];
107
+ totalPages: number;
108
+ }
109
+ declare const fetchComment: ({ serverURL, lang, path, page, pageSize, sortBy, signal, token, }: FetchCommentOptions) => Promise<CommentData>;
110
+ interface PostCommentOptions {
111
+ serverURL: string;
112
+ lang: string;
113
+ token?: string;
114
+ comment: WalineCommentData;
115
+ }
116
+ interface PostCommentResponse {
117
+ data?: WalineComment;
118
+ errmsg?: string;
119
+ }
120
+ declare const postComment: ({ serverURL, lang, token, comment, }: PostCommentOptions) => Promise<PostCommentResponse>;
121
+ interface DeleteCommentOptions {
122
+ serverURL: string;
123
+ lang: string;
124
+ token: string;
125
+ objectId: string | number;
126
+ }
127
+ declare const deleteComment: ({ serverURL, lang, token, objectId, }: DeleteCommentOptions) => Promise<void>;
128
+ interface LikeCommentOptions {
129
+ serverURL: string;
130
+ lang: string;
131
+ objectId: number | string;
132
+ like: boolean;
133
+ }
134
+ declare const likeComment: ({ serverURL, lang, objectId, like, }: LikeCommentOptions) => Promise<void>;
135
+ interface UpdateCommentOptions {
136
+ serverURL: string;
137
+ lang: string;
138
+ token: string;
139
+ objectId: number | string;
140
+ status?: 'approved' | 'waiting' | 'spam';
141
+ sticky?: number;
142
+ }
143
+ declare const updateComment: ({ serverURL, lang, token, objectId, ...data }: UpdateCommentOptions) => Promise<void>;
144
+
145
+ interface FetchCommentCountOptions {
146
+ serverURL: string;
147
+ lang: string;
148
+ paths: string[];
149
+ signal: AbortSignal;
150
+ }
151
+ declare const fetchCommentCount: ({ serverURL, lang, paths, signal, }: FetchCommentCountOptions) => Promise<number[]>;
152
+
153
+ interface LoginOptions {
154
+ lang: string;
155
+ serverURL: string;
156
+ }
157
+ interface UserInfo {
158
+ display_name: string;
159
+ email: string;
160
+ url: string;
161
+ token: string;
162
+ avatar: string;
163
+ mailMd5: string;
164
+ objectId: string | number;
165
+ type: 'administrator' | 'guest';
166
+ }
167
+ declare const login: ({ lang, serverURL, }: LoginOptions) => Promise<UserInfo & {
168
+ remember: boolean;
169
+ }>;
170
+
171
+ interface FetchPageviewOptions {
172
+ serverURL: string;
173
+ lang: string;
174
+ paths: string[];
175
+ signal: AbortSignal;
176
+ }
177
+ declare const fetchPageviews: ({ serverURL, lang, paths, signal, }: FetchPageviewOptions) => Promise<number[]>;
178
+ interface UpdatePageviewOptions {
179
+ serverURL: string;
180
+ lang: string;
181
+ path: string;
182
+ action?: 'inc' | 'desc';
183
+ }
184
+ declare const updatePageviews: (options: UpdatePageviewOptions) => Promise<number>;
185
+
186
+ interface FetchRecentCommentOptions {
187
+ serverURL: string;
188
+ lang: string;
189
+ count: number;
190
+ signal: AbortSignal;
191
+ token?: string;
192
+ }
193
+ declare const fetchRecentComment: ({ serverURL, lang, count, signal, token, }: FetchRecentCommentOptions) => Promise<WalineComment[]>;
194
+
195
+ export { CommentData, DeleteCommentOptions, FetchArticleCounterOptions, FetchCommentCountOptions, FetchCommentOptions, FetchRecentCommentOptions, LikeCommentOptions, LoginOptions, PostCommentOptions, PostCommentResponse, UpdateArticleCounterOptions, UpdateCommentOptions, UpdatePageviewOptions, UserInfo, deleteComment, fetchArticleCounter, fetchComment, fetchCommentCount, fetchPageviews, fetchRecentComment, likeComment, login, postComment, updateArticleCounter, updateComment, updatePageviews };
package/dist/api.d.mts CHANGED
@@ -1 +1,195 @@
1
+ interface FetchArticleCounterOptions {
2
+ serverURL: string;
3
+ lang: string;
4
+ paths: string[];
5
+ signal: AbortSignal;
6
+ type: string[];
7
+ }
8
+ declare const fetchArticleCounter: ({ serverURL, lang, paths, type, signal, }: FetchArticleCounterOptions) => Promise<Record<string, number>[] | Record<string, number> | number[] | number>;
9
+ interface UpdateArticleCounterOptions {
10
+ serverURL: string;
11
+ lang: string;
12
+ path: string;
13
+ type: string;
14
+ action?: 'inc' | 'desc';
15
+ }
16
+ declare const updateArticleCounter: ({ serverURL, lang, path, type, action, }: UpdateArticleCounterOptions) => Promise<number>;
1
17
 
18
+ interface WalineCommentData {
19
+ /**
20
+ * User Nickname
21
+ */
22
+ nick: string;
23
+ /**
24
+ * User email
25
+ */
26
+ mail: string;
27
+ /**
28
+ * User link
29
+ */
30
+ link?: string;
31
+ /**
32
+ * Content of comment
33
+ */
34
+ comment: string;
35
+ /**
36
+ * User Agent
37
+ */
38
+ ua: string;
39
+ /**
40
+ * Parent comment id
41
+ */
42
+ pid?: string;
43
+ /**
44
+ * Root comment id
45
+ */
46
+ rid?: string;
47
+ /**
48
+ * User id being at
49
+ */
50
+ at?: string;
51
+ /**
52
+ * edit comment id
53
+ */
54
+ eid?: string;
55
+ /**
56
+ * Comment link
57
+ */
58
+ url: string;
59
+ /**
60
+ * Recaptcha Token
61
+ */
62
+ recaptchaV3?: string;
63
+ }
64
+ declare type WalineCommentStatus = 'approved' | 'waiting' | 'spam';
65
+ interface WalineComment extends Exclude<WalineCommentData, 'ua'> {
66
+ /**
67
+ * User avatar
68
+ */
69
+ avatar: string;
70
+ /**
71
+ * User type
72
+ */
73
+ type?: 'administrator' | 'guest' | `verify:${string}`;
74
+ objectId: string;
75
+ /**
76
+ * Time ISOString when the comment is created
77
+ */
78
+ createdAt: string;
79
+ insertedAt: string;
80
+ updatedAt: string;
81
+ children: WalineComment[];
82
+ sticky?: boolean;
83
+ browser?: string;
84
+ os?: string;
85
+ level?: number;
86
+ addr?: string;
87
+ label?: string;
88
+ user_id?: string | number;
89
+ status?: WalineCommentStatus;
90
+ like?: number;
91
+ orig?: string;
92
+ }
93
+
94
+ interface FetchCommentOptions {
95
+ serverURL: string;
96
+ path: string;
97
+ page: number;
98
+ pageSize: number;
99
+ sortBy: string;
100
+ signal: AbortSignal;
101
+ token?: string;
102
+ lang: string;
103
+ }
104
+ interface CommentData {
105
+ count: number;
106
+ data: WalineComment[];
107
+ totalPages: number;
108
+ }
109
+ declare const fetchComment: ({ serverURL, lang, path, page, pageSize, sortBy, signal, token, }: FetchCommentOptions) => Promise<CommentData>;
110
+ interface PostCommentOptions {
111
+ serverURL: string;
112
+ lang: string;
113
+ token?: string;
114
+ comment: WalineCommentData;
115
+ }
116
+ interface PostCommentResponse {
117
+ data?: WalineComment;
118
+ errmsg?: string;
119
+ }
120
+ declare const postComment: ({ serverURL, lang, token, comment, }: PostCommentOptions) => Promise<PostCommentResponse>;
121
+ interface DeleteCommentOptions {
122
+ serverURL: string;
123
+ lang: string;
124
+ token: string;
125
+ objectId: string | number;
126
+ }
127
+ declare const deleteComment: ({ serverURL, lang, token, objectId, }: DeleteCommentOptions) => Promise<void>;
128
+ interface LikeCommentOptions {
129
+ serverURL: string;
130
+ lang: string;
131
+ objectId: number | string;
132
+ like: boolean;
133
+ }
134
+ declare const likeComment: ({ serverURL, lang, objectId, like, }: LikeCommentOptions) => Promise<void>;
135
+ interface UpdateCommentOptions {
136
+ serverURL: string;
137
+ lang: string;
138
+ token: string;
139
+ objectId: number | string;
140
+ status?: 'approved' | 'waiting' | 'spam';
141
+ sticky?: number;
142
+ }
143
+ declare const updateComment: ({ serverURL, lang, token, objectId, ...data }: UpdateCommentOptions) => Promise<void>;
144
+
145
+ interface FetchCommentCountOptions {
146
+ serverURL: string;
147
+ lang: string;
148
+ paths: string[];
149
+ signal: AbortSignal;
150
+ }
151
+ declare const fetchCommentCount: ({ serverURL, lang, paths, signal, }: FetchCommentCountOptions) => Promise<number[]>;
152
+
153
+ interface LoginOptions {
154
+ lang: string;
155
+ serverURL: string;
156
+ }
157
+ interface UserInfo {
158
+ display_name: string;
159
+ email: string;
160
+ url: string;
161
+ token: string;
162
+ avatar: string;
163
+ mailMd5: string;
164
+ objectId: string | number;
165
+ type: 'administrator' | 'guest';
166
+ }
167
+ declare const login: ({ lang, serverURL, }: LoginOptions) => Promise<UserInfo & {
168
+ remember: boolean;
169
+ }>;
170
+
171
+ interface FetchPageviewOptions {
172
+ serverURL: string;
173
+ lang: string;
174
+ paths: string[];
175
+ signal: AbortSignal;
176
+ }
177
+ declare const fetchPageviews: ({ serverURL, lang, paths, signal, }: FetchPageviewOptions) => Promise<number[]>;
178
+ interface UpdatePageviewOptions {
179
+ serverURL: string;
180
+ lang: string;
181
+ path: string;
182
+ action?: 'inc' | 'desc';
183
+ }
184
+ declare const updatePageviews: (options: UpdatePageviewOptions) => Promise<number>;
185
+
186
+ interface FetchRecentCommentOptions {
187
+ serverURL: string;
188
+ lang: string;
189
+ count: number;
190
+ signal: AbortSignal;
191
+ token?: string;
192
+ }
193
+ declare const fetchRecentComment: ({ serverURL, lang, count, signal, token, }: FetchRecentCommentOptions) => Promise<WalineComment[]>;
194
+
195
+ export { CommentData, DeleteCommentOptions, FetchArticleCounterOptions, FetchCommentCountOptions, FetchCommentOptions, FetchRecentCommentOptions, LikeCommentOptions, LoginOptions, PostCommentOptions, PostCommentResponse, UpdateArticleCounterOptions, UpdateCommentOptions, UpdatePageviewOptions, UserInfo, deleteComment, fetchArticleCounter, fetchComment, fetchCommentCount, fetchPageviews, fetchRecentComment, likeComment, login, postComment, updateArticleCounter, updateComment, updatePageviews };
package/dist/api.d.ts CHANGED
@@ -1 +1,195 @@
1
+ interface FetchArticleCounterOptions {
2
+ serverURL: string;
3
+ lang: string;
4
+ paths: string[];
5
+ signal: AbortSignal;
6
+ type: string[];
7
+ }
8
+ declare const fetchArticleCounter: ({ serverURL, lang, paths, type, signal, }: FetchArticleCounterOptions) => Promise<Record<string, number>[] | Record<string, number> | number[] | number>;
9
+ interface UpdateArticleCounterOptions {
10
+ serverURL: string;
11
+ lang: string;
12
+ path: string;
13
+ type: string;
14
+ action?: 'inc' | 'desc';
15
+ }
16
+ declare const updateArticleCounter: ({ serverURL, lang, path, type, action, }: UpdateArticleCounterOptions) => Promise<number>;
1
17
 
18
+ interface WalineCommentData {
19
+ /**
20
+ * User Nickname
21
+ */
22
+ nick: string;
23
+ /**
24
+ * User email
25
+ */
26
+ mail: string;
27
+ /**
28
+ * User link
29
+ */
30
+ link?: string;
31
+ /**
32
+ * Content of comment
33
+ */
34
+ comment: string;
35
+ /**
36
+ * User Agent
37
+ */
38
+ ua: string;
39
+ /**
40
+ * Parent comment id
41
+ */
42
+ pid?: string;
43
+ /**
44
+ * Root comment id
45
+ */
46
+ rid?: string;
47
+ /**
48
+ * User id being at
49
+ */
50
+ at?: string;
51
+ /**
52
+ * edit comment id
53
+ */
54
+ eid?: string;
55
+ /**
56
+ * Comment link
57
+ */
58
+ url: string;
59
+ /**
60
+ * Recaptcha Token
61
+ */
62
+ recaptchaV3?: string;
63
+ }
64
+ declare type WalineCommentStatus = 'approved' | 'waiting' | 'spam';
65
+ interface WalineComment extends Exclude<WalineCommentData, 'ua'> {
66
+ /**
67
+ * User avatar
68
+ */
69
+ avatar: string;
70
+ /**
71
+ * User type
72
+ */
73
+ type?: 'administrator' | 'guest' | `verify:${string}`;
74
+ objectId: string;
75
+ /**
76
+ * Time ISOString when the comment is created
77
+ */
78
+ createdAt: string;
79
+ insertedAt: string;
80
+ updatedAt: string;
81
+ children: WalineComment[];
82
+ sticky?: boolean;
83
+ browser?: string;
84
+ os?: string;
85
+ level?: number;
86
+ addr?: string;
87
+ label?: string;
88
+ user_id?: string | number;
89
+ status?: WalineCommentStatus;
90
+ like?: number;
91
+ orig?: string;
92
+ }
93
+
94
+ interface FetchCommentOptions {
95
+ serverURL: string;
96
+ path: string;
97
+ page: number;
98
+ pageSize: number;
99
+ sortBy: string;
100
+ signal: AbortSignal;
101
+ token?: string;
102
+ lang: string;
103
+ }
104
+ interface CommentData {
105
+ count: number;
106
+ data: WalineComment[];
107
+ totalPages: number;
108
+ }
109
+ declare const fetchComment: ({ serverURL, lang, path, page, pageSize, sortBy, signal, token, }: FetchCommentOptions) => Promise<CommentData>;
110
+ interface PostCommentOptions {
111
+ serverURL: string;
112
+ lang: string;
113
+ token?: string;
114
+ comment: WalineCommentData;
115
+ }
116
+ interface PostCommentResponse {
117
+ data?: WalineComment;
118
+ errmsg?: string;
119
+ }
120
+ declare const postComment: ({ serverURL, lang, token, comment, }: PostCommentOptions) => Promise<PostCommentResponse>;
121
+ interface DeleteCommentOptions {
122
+ serverURL: string;
123
+ lang: string;
124
+ token: string;
125
+ objectId: string | number;
126
+ }
127
+ declare const deleteComment: ({ serverURL, lang, token, objectId, }: DeleteCommentOptions) => Promise<void>;
128
+ interface LikeCommentOptions {
129
+ serverURL: string;
130
+ lang: string;
131
+ objectId: number | string;
132
+ like: boolean;
133
+ }
134
+ declare const likeComment: ({ serverURL, lang, objectId, like, }: LikeCommentOptions) => Promise<void>;
135
+ interface UpdateCommentOptions {
136
+ serverURL: string;
137
+ lang: string;
138
+ token: string;
139
+ objectId: number | string;
140
+ status?: 'approved' | 'waiting' | 'spam';
141
+ sticky?: number;
142
+ }
143
+ declare const updateComment: ({ serverURL, lang, token, objectId, ...data }: UpdateCommentOptions) => Promise<void>;
144
+
145
+ interface FetchCommentCountOptions {
146
+ serverURL: string;
147
+ lang: string;
148
+ paths: string[];
149
+ signal: AbortSignal;
150
+ }
151
+ declare const fetchCommentCount: ({ serverURL, lang, paths, signal, }: FetchCommentCountOptions) => Promise<number[]>;
152
+
153
+ interface LoginOptions {
154
+ lang: string;
155
+ serverURL: string;
156
+ }
157
+ interface UserInfo {
158
+ display_name: string;
159
+ email: string;
160
+ url: string;
161
+ token: string;
162
+ avatar: string;
163
+ mailMd5: string;
164
+ objectId: string | number;
165
+ type: 'administrator' | 'guest';
166
+ }
167
+ declare const login: ({ lang, serverURL, }: LoginOptions) => Promise<UserInfo & {
168
+ remember: boolean;
169
+ }>;
170
+
171
+ interface FetchPageviewOptions {
172
+ serverURL: string;
173
+ lang: string;
174
+ paths: string[];
175
+ signal: AbortSignal;
176
+ }
177
+ declare const fetchPageviews: ({ serverURL, lang, paths, signal, }: FetchPageviewOptions) => Promise<number[]>;
178
+ interface UpdatePageviewOptions {
179
+ serverURL: string;
180
+ lang: string;
181
+ path: string;
182
+ action?: 'inc' | 'desc';
183
+ }
184
+ declare const updatePageviews: (options: UpdatePageviewOptions) => Promise<number>;
185
+
186
+ interface FetchRecentCommentOptions {
187
+ serverURL: string;
188
+ lang: string;
189
+ count: number;
190
+ signal: AbortSignal;
191
+ token?: string;
192
+ }
193
+ declare const fetchRecentComment: ({ serverURL, lang, count, signal, token, }: FetchRecentCommentOptions) => Promise<WalineComment[]>;
194
+
195
+ export { CommentData, DeleteCommentOptions, FetchArticleCounterOptions, FetchCommentCountOptions, FetchCommentOptions, FetchRecentCommentOptions, LikeCommentOptions, LoginOptions, PostCommentOptions, PostCommentResponse, UpdateArticleCounterOptions, UpdateCommentOptions, UpdatePageviewOptions, UserInfo, deleteComment, fetchArticleCounter, fetchComment, fetchCommentCount, fetchPageviews, fetchRecentComment, likeComment, login, postComment, updateArticleCounter, updateComment, updatePageviews };
package/dist/api.mjs CHANGED
@@ -1,2 +1,2 @@
1
-
1
+ const e={"Content-Type":"application/json"},n=(e,n="")=>{if("object"==typeof e&&e.errno)throw new TypeError(`Fetch ${n} failed with ${e.errno}: ${e.errmsg}`);return e},t=({serverURL:e,lang:t,paths:o,type:r,signal:a})=>fetch(`${e}/article?path=${encodeURIComponent(o.join(","))}&type=${encodeURIComponent(r.join(","))}&lang=${t}`,{signal:a}).then((e=>e.json())).then((e=>n(e,"article count"))),o=({serverURL:t,lang:o,path:r,type:a,action:s})=>fetch(`${t}/article?lang=${o}`,{method:"POST",headers:e,body:JSON.stringify({path:r,type:a,action:s})}).then((e=>e.json())).then((e=>n(e,"article count"))),r=({serverURL:e,lang:t,path:o,page:r,pageSize:a,sortBy:s,signal:i,token:h})=>{const c={};return h&&(c.Authorization=`Bearer ${h}`),fetch(`${e}/comment?path=${encodeURIComponent(o)}&pageSize=${a}&page=${r}&lang=${t}&sortBy=${s}`,{signal:i,headers:c}).then((e=>e.json())).then((e=>n(e,"comment data")))},a=({serverURL:e,lang:n,token:t,comment:o})=>{const r={"Content-Type":"application/json"};return t&&(r.Authorization=`Bearer ${t}`),o.eid?fetch(`${e}/comment/${o.eid}?lang=${n}`,{method:"PUT",headers:r,body:JSON.stringify(o)}).then((e=>e.json())):fetch(`${e}/comment?lang=${n}`,{method:"POST",headers:r,body:JSON.stringify(o)}).then((e=>e.json()))},s=({serverURL:e,lang:n,token:t,objectId:o})=>fetch(`${e}/comment/${o}?lang=${n}`,{method:"DELETE",headers:{Authorization:`Bearer ${t}`}}).then((e=>e.json())),i=({serverURL:n,lang:t,objectId:o,like:r})=>fetch(`${n}/comment/${o}?lang=${t}`,{method:"PUT",headers:e,body:JSON.stringify({like:r})}).then((e=>e.json())),h=({serverURL:n,lang:t,token:o,objectId:r,...a})=>fetch(`${n}/comment/${r}?lang=${t}`,{method:"PUT",headers:{...e,Authorization:`Bearer ${o}`},body:JSON.stringify(a)}).then((e=>e.json())),c=({serverURL:e,lang:t,paths:o,signal:r})=>fetch(`${e}/comment?type=count&url=${encodeURIComponent(o.join(","))}&lang=${t}`,{signal:r,headers:{}}).then((e=>e.json())).then((e=>n(e,"comment count"))).then((e=>Array.isArray(e)?e:[e])),l=({lang:e,serverURL:n})=>{const t=(window.innerWidth-450)/2,o=(window.innerHeight-450)/2,r=window.open(`${n}/ui/login?lng=${encodeURIComponent(e)}`,"_blank",`width=450,height=450,left=${t},top=${o},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`);return r?.postMessage({type:"TOKEN",data:null},"*"),new Promise((e=>{const n=({data:t})=>{t&&"object"==typeof t&&"userInfo"===t.type&&t.data.token&&(r?.close(),window.removeEventListener("message",n),e(t.data))};window.addEventListener("message",n)}))},g=({serverURL:e,lang:n,paths:o,signal:r})=>t({serverURL:e,lang:n,paths:o,type:["time"],signal:r}).then((e=>Array.isArray(e)?e:[e])),d=e=>o({...e,type:"time"}),$=({serverURL:e,lang:t,count:o,signal:r,token:a})=>{const s={};return a&&(s.Authorization=`Bearer ${a}`),fetch(`${e}/comment?type=recent&count=${o}&lang=${t}`,{signal:r,headers:s}).then((e=>e.json())).then((e=>n(e,"recent comment")))};export{s as deleteComment,t as fetchArticleCounter,r as fetchComment,c as fetchCommentCount,g as fetchPageviews,$ as fetchRecentComment,i as likeComment,l as login,a as postComment,o as updateArticleCounter,h as updateComment,d as updatePageviews};
2
2
  //# sourceMappingURL=api.mjs.map
package/dist/api.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"api.mjs","sources":["../src/api/utils.ts","../src/api/articleCounter.ts","../src/api/comment.ts","../src/api/commentCount.ts","../src/api/login.ts","../src/api/pageview.ts","../src/api/recentComment.ts"],"sourcesContent":["export interface FetchErrorData {\n errno: number;\n errmsg: string;\n}\n\nexport const JSON_HEADERS: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n};\n\nexport const errorCheck = <T = unknown>(\n data: T | FetchErrorData,\n name = ''\n): T => {\n if (typeof data === 'object' && (data as FetchErrorData).errno)\n throw new TypeError(\n `Fetch ${name} failed with ${(data as FetchErrorData).errno}: ${\n (data as FetchErrorData).errmsg\n }`\n );\n\n return data as T;\n};\n","import { JSON_HEADERS, errorCheck } from './utils';\n\nexport interface FetchArticleCounterOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n type: string[];\n}\n\nexport const fetchArticleCounter = ({\n serverURL,\n lang,\n paths,\n type,\n signal,\n}: FetchArticleCounterOptions): Promise<\n Record<string, number>[] | Record<string, number> | number[] | number\n> =>\n fetch(\n `${serverURL}/article?path=${encodeURIComponent(\n paths.join(',')\n )}&type=${encodeURIComponent(type.join(','))}&lang=${lang}`,\n { signal }\n )\n .then(\n (resp) =>\n resp.json() as Promise<Record<string, number>[] | number[] | number>\n )\n .then((data) => errorCheck(data, 'article count'));\n\nexport interface UpdateArticleCounterOptions {\n serverURL: string;\n lang: string;\n path: string;\n type: string;\n action?: 'inc' | 'desc';\n}\n\nexport const updateArticleCounter = ({\n serverURL,\n lang,\n path,\n type,\n action,\n}: UpdateArticleCounterOptions): Promise<number> =>\n fetch(`${serverURL}/article?lang=${lang}`, {\n method: 'POST',\n headers: JSON_HEADERS,\n body: JSON.stringify({ path, type, action }),\n })\n .then((resp) => resp.json() as Promise<number>)\n .then((data) => errorCheck(data, 'article count'));\n","import { JSON_HEADERS, errorCheck } from './utils';\nimport type { WalineComment, WalineCommentData } from '../typings';\n\nexport interface FetchCommentOptions {\n serverURL: string;\n path: string;\n page: number;\n pageSize: number;\n sortBy: string;\n signal: AbortSignal;\n token?: string;\n lang: string;\n}\n\nexport interface CommentData {\n count: number;\n data: WalineComment[];\n totalPages: number;\n}\n\nexport const fetchComment = ({\n serverURL,\n lang,\n path,\n page,\n pageSize,\n sortBy,\n signal,\n token,\n}: FetchCommentOptions): Promise<CommentData> => {\n const headers: Record<string, string> = {};\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(\n `${serverURL}/comment?path=${encodeURIComponent(\n path\n )}&pageSize=${pageSize}&page=${page}&lang=${lang}&sortBy=${sortBy}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<CommentData>)\n .then((data) => errorCheck(data, 'comment data'));\n};\n\nexport interface PostCommentOptions {\n serverURL: string;\n lang: string;\n token?: string;\n comment: WalineCommentData;\n}\n\nexport interface PostCommentResponse {\n data?: WalineComment;\n errmsg?: string;\n}\n\nexport const postComment = ({\n serverURL,\n lang,\n token,\n comment,\n}: PostCommentOptions): Promise<PostCommentResponse> => {\n const headers: Record<string, string> = {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'Content-Type': 'application/json',\n };\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n if (comment.eid) {\n return fetch(`${serverURL}/comment/${comment.eid}?lang=${lang}`, {\n method: 'PUT',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n }\n\n return fetch(`${serverURL}/comment?lang=${lang}`, {\n method: 'POST',\n headers,\n body: JSON.stringify(comment),\n }).then((resp) => resp.json() as Promise<PostCommentResponse>);\n};\n\nexport interface DeleteCommentOptions {\n serverURL: string;\n lang: string;\n token: string;\n objectId: string | number;\n}\n\nexport const deleteComment = ({\n serverURL,\n lang,\n token,\n objectId,\n}: DeleteCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'DELETE',\n headers: {\n Authorization: `Bearer ${token}`,\n },\n }).then((resp) => resp.json() as Promise<void>);\n\nexport interface LikeCommentOptions {\n serverURL: string;\n lang: string;\n objectId: number | string;\n like: boolean;\n}\n\nexport const likeComment = ({\n serverURL,\n lang,\n objectId,\n like,\n}: LikeCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'PUT',\n headers: JSON_HEADERS,\n body: JSON.stringify({ like }),\n }).then((resp) => resp.json() as Promise<void>);\n\nexport interface UpdateCommentOptions {\n serverURL: string;\n lang: string;\n token: string;\n objectId: number | string;\n status?: 'approved' | 'waiting' | 'spam';\n sticky?: number;\n}\n\nexport const updateComment = ({\n serverURL,\n lang,\n token,\n objectId,\n ...data\n}: UpdateCommentOptions): Promise<void> =>\n fetch(`${serverURL}/comment/${objectId}?lang=${lang}`, {\n method: 'PUT',\n headers: {\n ...JSON_HEADERS,\n Authorization: `Bearer ${token}`,\n },\n body: JSON.stringify(data),\n }).then((resp) => resp.json() as Promise<void>);\n","import { errorCheck } from './utils';\n\nexport interface FetchCommentCountOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchCommentCount = ({\n serverURL,\n lang,\n paths,\n signal,\n}: FetchCommentCountOptions): Promise<number[]> => {\n const headers: Record<string, string> = {};\n\n return (\n fetch(\n `${serverURL}/comment?type=count&url=${encodeURIComponent(\n paths.join(',')\n )}&lang=${lang}`,\n { signal, headers }\n )\n .then((resp) => resp.json() as Promise<number | number[]>)\n .then((data) => errorCheck(data, 'comment count'))\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts]))\n );\n};\n","/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n\nexport interface LoginOptions {\n lang: string;\n serverURL: string;\n}\n\nexport interface UserInfo {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n display_name: string;\n email: string;\n url: string;\n token: string;\n avatar: string;\n mailMd5: string;\n objectId: string | number;\n type: 'administrator' | 'guest';\n}\n\nexport const login = ({\n lang,\n serverURL,\n}: LoginOptions): Promise<UserInfo & { remember: boolean }> => {\n const width = 450;\n const height = 450;\n const left = (window.innerWidth - width) / 2;\n const top = (window.innerHeight - height) / 2;\n\n const handler = window.open(\n `${serverURL}/ui/login?lng=${encodeURIComponent(lang)}`,\n '_blank',\n `width=${width},height=${height},left=${left},top=${top},scrollbars=no,resizable=no,status=no,location=no,toolbar=no,menubar=no`\n );\n\n handler?.postMessage({ type: 'TOKEN', data: null }, '*');\n\n return new Promise((resolve) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const receiver = ({ data }: any): void => {\n if (!data || typeof data !== 'object' || data.type !== 'userInfo') return;\n\n if (data.data.token) {\n handler?.close();\n\n window.removeEventListener('message', receiver);\n\n resolve(data.data as UserInfo & { remember: boolean });\n }\n };\n\n window.addEventListener('message', receiver);\n });\n};\n","import { fetchArticleCounter, updateArticleCounter } from './articleCounter';\n\ninterface FetchPageviewOptions {\n serverURL: string;\n lang: string;\n paths: string[];\n signal: AbortSignal;\n}\n\nexport const fetchPageviews = ({\n serverURL,\n lang,\n paths,\n signal,\n}: FetchPageviewOptions): Promise<number[]> =>\n fetchArticleCounter({\n serverURL,\n lang,\n paths,\n type: ['time'],\n signal,\n })\n // TODO: Improve this API\n .then((counts) => (Array.isArray(counts) ? counts : [counts])) as Promise<\n number[]\n >;\n\nexport interface UpdatePageviewOptions {\n serverURL: string;\n lang: string;\n path: string;\n action?: 'inc' | 'desc';\n}\n\nexport const updatePageviews = (\n options: UpdatePageviewOptions\n): Promise<number> =>\n updateArticleCounter({\n ...options,\n type: 'time',\n });\n","import { errorCheck } from './utils';\nimport type { WalineComment } from '../typings';\n\nexport interface FetchRecentCommentOptions {\n serverURL: string;\n lang: string;\n count: number;\n signal: AbortSignal;\n token?: string;\n}\n\nexport const fetchRecentComment = ({\n serverURL,\n lang,\n count,\n signal,\n token,\n}: FetchRecentCommentOptions): Promise<WalineComment[]> => {\n const headers: Record<string, string> = {};\n\n if (token) headers.Authorization = `Bearer ${token}`;\n\n return fetch(`${serverURL}/comment?type=recent&count=${count}&lang=${lang}`, {\n signal,\n headers,\n })\n .then((resp) => resp.json() as Promise<WalineComment[]>)\n .then((data) => errorCheck(data, 'recent comment'));\n};\n"],"names":["JSON_HEADERS","errorCheck","data","name","errno","TypeError","errmsg","fetchArticleCounter","serverURL","lang","paths","type","signal","fetch","encodeURIComponent","join","then","resp","json","updateArticleCounter","path","action","method","headers","body","JSON","stringify","fetchComment","page","pageSize","sortBy","token","Authorization","postComment","comment","eid","deleteComment","objectId","likeComment","like","updateComment","fetchCommentCount","counts","Array","isArray","login","left","window","innerWidth","top","innerHeight","handler","open","postMessage","Promise","resolve","receiver","close","removeEventListener","addEventListener","fetchPageviews","updatePageviews","options","fetchRecentComment","count"],"mappings":"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"}