@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.
- package/dist/api.cjs +1 -1
- package/dist/api.cjs.map +1 -1
- package/dist/api.d.cts +194 -0
- package/dist/api.d.mts +194 -0
- package/dist/api.d.ts +194 -0
- package/dist/api.mjs +1 -1
- package/dist/api.mjs.map +1 -1
- package/dist/comment.cjs +1 -1
- package/dist/comment.cjs.map +1 -1
- package/dist/comment.js +1 -1
- package/dist/comment.js.map +1 -1
- package/dist/comment.mjs +1 -1
- package/dist/comment.mjs.map +1 -1
- package/dist/component.mjs +1 -1
- package/dist/component.mjs.map +1 -1
- package/dist/legacy.umd.d.ts +57 -30
- package/dist/legacy.umd.js +1 -1
- package/dist/legacy.umd.js.map +1 -1
- package/dist/pageview.cjs +1 -1
- package/dist/pageview.cjs.map +1 -1
- package/dist/pageview.js +1 -1
- package/dist/pageview.js.map +1 -1
- package/dist/pageview.mjs +1 -1
- package/dist/pageview.mjs.map +1 -1
- package/dist/shim.cjs +1 -1
- package/dist/shim.cjs.map +1 -1
- package/dist/shim.d.cts +58 -31
- package/dist/shim.d.mts +58 -31
- package/dist/shim.mjs +1 -1
- package/dist/shim.mjs.map +1 -1
- package/dist/waline.cjs +1 -1
- package/dist/waline.cjs.map +1 -1
- package/dist/waline.d.cts +58 -31
- package/dist/waline.d.mts +58 -31
- package/dist/waline.d.ts +58 -31
- package/dist/waline.js +1 -1
- package/dist/waline.js.map +1 -1
- package/dist/waline.mjs +1 -1
- package/dist/waline.mjs.map +1 -1
- package/package.json +22 -20
- package/src/compact/convert.ts +2 -2
- package/src/components/ArticleReaction.vue +36 -24
- package/src/components/CommentBox.vue +6 -5
- package/src/components/ImageWall.vue +7 -2
- package/src/composables/vote.ts +5 -2
- package/src/config/default.ts +45 -83
- package/src/entrys/api.ts +1 -1
- package/src/typings/base.ts +33 -7
- package/src/typings/locale.ts +37 -23
- package/src/utils/config.ts +10 -4
- 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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"}
|