@blocklet/discuss-kit 2.6.22 → 2.6.23
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/lib/cjs/api.js +1 -1
- package/lib/cjs/node_modules/.pnpm/@blocklet_js-sdk@1.17.10_encoding@0.1.13/node_modules/@blocklet/js-sdk/dist/index.js +1 -0
- package/lib/es/api.js +1 -1
- package/lib/es/node_modules/.pnpm/@blocklet_js-sdk@1.17.10_encoding@0.1.13/node_modules/@blocklet/js-sdk/dist/index.js +191 -0
- package/package.json +5 -5
package/lib/cjs/api.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("@blocklet/js-sdk"),n=require("@blocklet/discuss-kit-ux"),o=require("./lib/utils.js"),s=i.createAxios({baseURL:o.discussKitApiPrefix,timeout:2e4,headers:{"x-discuss-kit-client-id":n.utils.getDiscussKitClientId()}});s.interceptors.request.use(e=>e,e=>Promise.reject(e));const a=async e=>{const{data:t}=await s.get(`/ratings/${e}`);return t},u=async e=>{try{const{data:t}=await s.get("/comments",{params:e});return t}catch(t){throw console.error(t),t}},l=async({parentId:e,content:t})=>{const{data:c}=await s.post("/comments/replies",{content:t,parentId:e});return c},d=async({commentId:e,cursor:t,limit:c=10})=>{try{const{data:r}=await s.get(`/comments/${e}/replies`,{params:{cursor:t,limit:c,embed:"rating"}});return r}catch(r){throw console.error(r),r}};exports.default=s;exports.fetchComments=u;exports.fetchMoreReplies=d;exports.fetchRatings=a;exports.reply=l;
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const i=require("./node_modules/.pnpm/@blocklet_js-sdk@1.17.10_encoding@0.1.13/node_modules/@blocklet/js-sdk/dist/index.js"),n=require("@blocklet/discuss-kit-ux"),o=require("./lib/utils.js"),s=i.createAxios({baseURL:o.discussKitApiPrefix,timeout:2e4,headers:{"x-discuss-kit-client-id":n.utils.getDiscussKitClientId()}});s.interceptors.request.use(e=>e,e=>Promise.reject(e));const a=async e=>{const{data:t}=await s.get(`/ratings/${e}`);return t},u=async e=>{try{const{data:t}=await s.get("/comments",{params:e});return t}catch(t){throw console.error(t),t}},l=async({parentId:e,content:t})=>{const{data:c}=await s.post("/comments/replies",{content:t,parentId:e});return c},d=async({commentId:e,cursor:t,limit:c=10})=>{try{const{data:r}=await s.get(`/comments/${e}/replies`,{params:{cursor:t,limit:c,embed:"rating"}});return r}catch(r){throw console.error(r),r}};exports.default=s;exports.fetchComments=u;exports.fetchMoreReplies=d;exports.fetchRatings=a;exports.reply=l;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("@abtnode/constant"),R=require("ufo"),u=require("js-cookie");require("quick-lru");require("lodash/isEmpty");const p=require("axios"),K=require("keyv"),O=require("keyv-browser"),I=require("lodash/isNumber"),b=require("lodash/omit"),C=require("lodash/isObject"),N=require("json-stable-stringify");require("is-url");var L=class{getSessionToken(e){return u.get(c.SESSION_TOKEN_STORAGE_KEY)?u.get(c.SESSION_TOKEN_STORAGE_KEY):e.sessionTokenKey?window.localStorage.getItem(e.sessionTokenKey):""}setSessionToken(e){u.set(c.SESSION_TOKEN_STORAGE_KEY,e)}removeSessionToken(){u.remove(c.SESSION_TOKEN_STORAGE_KEY)}getRefreshToken(){return localStorage.getItem(c.REFRESH_TOKEN_STORAGE_KEY)}setRefreshToken(e){localStorage.setItem(c.REFRESH_TOKEN_STORAGE_KEY,e)}removeRefreshToken(){localStorage.removeItem(c.REFRESH_TOKEN_STORAGE_KEY)}},P=class{constructor({blocklet:e=window?.blocklet}={}){this.blocklet=e}getComponent(e){return(this.blocklet?.componentMountPoints||[]).find(n=>[n.title,n.name,n.did].includes(e))}getComponentMountPoint(e){return this.getComponent(e)?.mountPoint||""}getUrl(e,...n){const o=this.getComponentMountPoint(e);return R.joinURL(this.blocklet?.appUrl||"",o,...n)}},q="1.17.9";const x=(e=0)=>new Promise(n=>{setTimeout(()=>{n()},e)}),_=e=>`Bearer ${encodeURIComponent(e)}`,A="vid",F="__visitor_id",j=()=>u.get(A)||localStorage.getItem(F),D=async(e,n,o)=>{if(C(e.data)&&e.status>=200&&e.status<300&&typeof window<"u"&&window.blocklet?.appId&&window.blocklet?.appPk){if(!o)return e;if(!e.data.$signature)throw n(),new Error("Invalid response");const{appId:k,appPk:i}=window.blocklet;if(await o(N(b(e.data,["$signature"])),e.data.$signature,i,k)===!1)throw n(),new Error("Invalid response")}return e};function g(){return u.get("x-csrf-token")}function w(){return u.get("login_token")}async function y(){const e=g();try{const n=R.joinURL(window.location.origin,c.WELLKNOWN_SERVICE_PATH_PREFIX,"/api/did/csrfToken"),{data:o}=await p.get(n,{headers:{"x-csrf-token":e}});return o}catch(n){return console.error(n),{loginToken:w(),csrfToken:null}}}let h;function G(){if(!h){const e=window?.blocklet?.settings?.session?.cacheTtl;h=new K({store:new O.KeyvLocalStorage,ttl:I(e)?e*1e3:1e3*60*60})}return h}async function E(e,n=300){e.metaData.endTime=+new Date;const{startTime:o,endTime:k}=e.metaData,i=k-o;i<n&&await x(n-i),delete e.metaData}const v=(e,n)=>{const o={...e?.headers,"x-blocklet-js-sdk-version":q},k=new P,i=p.create({...e,headers:o});return n?.lazy&&(i.interceptors.request.use(t=>(t.metaData={startTime:+new Date},t),t=>Promise.reject(t)),i.interceptors.response.use(async t=>(t.config&&await E(t.config,n?.lazyTime),t),async t=>(t.response&&await E(t.response.config,n?.lazyTime),Promise.reject(t)))),i.interceptors.request.use(async t=>{const S=n?.componentDid??window.blocklet?.componentId?.split("/").pop();t.baseURL=t.baseURL||k.getComponentMountPoint(S),t.timeout=t.timeout||20*1e3;const f=w(),m=g();if(f&&m){const l=f.slice(-32),T=G(),r=await T.get(l);if(r)t.headers["x-csrf-token"]=r;else{const{loginToken:s,csrfToken:a}=await y();a?(await T.set(s.slice(-32),a),t.headers["x-csrf-token"]=a):t.headers["x-csrf-token"]=m}t.headers["x-csrf-token"]&&t.headers["x-csrf-token"]!==g()&&u.set("x-csrf-token",t.headers["x-csrf-token"],{sameSite:"strict",secure:!0})}const d=j();return[void 0,null].includes(d)||(t.headers["x-blocklet-visitor-id"]=d),t},t=>Promise.reject(t)),i};async function U(e){if(!e)throw new Error("Refresh token not found");const{data:n}=await v({baseURL:c.WELLKNOWN_SERVICE_PATH_PREFIX,timeout:10*1e3,secure:!0,headers:{authorization:_(e)}}).post("/api/did/refreshSession");return n}function Y({getSessionToken:e,setSessionToken:n,removeSessionToken:o,getRefreshToken:k,setRefreshToken:i,removeRefreshToken:t,onRefreshTokenError:S,onRefreshTokenSuccess:f},m,d){let l=null;const T=v({timeout:30*1e3,...m},d);return T.interceptors.request.use(async r=>{if(!u.get(c.SESSION_TOKEN_STORAGE_KEY)){const s=e(r);s&&(r.headers.authorization=_(s))}return l&&await l,r},r=>Promise.reject(r)),T.interceptors.response.use(async r=>r.config?.secure?await D(r,()=>{o(),t()},d?.verifyFn):r,async r=>{const s=r.config;if(s&&(s.headers=s?.headers?{...s.headers}:{},r?.response?.status===401&&!s._retry)){s._retry=!0;try{l||(l=U(k()));const a=await l;return n(a.nextToken),i(a.nextRefreshToken),typeof f=="function"&&f(a),T(s)}catch(a){return o(),t(),typeof S=="function"&&S(a),Promise.reject(r)}finally{l=null}}return Promise.reject(r)}),T}function $(e={},n={}){const o=new L;return Y({getSessionToken:o.getSessionToken,setSessionToken:o.setSessionToken,removeSessionToken:o.removeSessionToken,getRefreshToken:o.getRefreshToken,setRefreshToken:o.setRefreshToken,removeRefreshToken:o.removeRefreshToken,onRefreshTokenError:()=>{console.error("Failed to refresh token")},onRefreshTokenSuccess:()=>{}},e,n)}exports.createAxios=$;exports.getCSRFToken=g;exports.getCSRFTokenByLoginToken=y;exports.getLoginToken=w;
|
package/lib/es/api.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createAxios as a } from "@blocklet/js-sdk";
|
|
1
|
+
import { createAxios as a } from "./node_modules/.pnpm/@blocklet_js-sdk@1.17.10_encoding@0.1.13/node_modules/@blocklet/js-sdk/dist/index.js";
|
|
2
2
|
import { utils as c } from "@blocklet/discuss-kit-ux";
|
|
3
3
|
import { discussKitApiPrefix as n } from "./lib/utils.js";
|
|
4
4
|
const s = a({
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { SESSION_TOKEN_STORAGE_KEY as d, REFRESH_TOKEN_STORAGE_KEY as h, WELLKNOWN_SERVICE_PATH_PREFIX as S } from "@abtnode/constant";
|
|
2
|
+
import { joinURL as R } from "ufo";
|
|
3
|
+
import c from "js-cookie";
|
|
4
|
+
import "quick-lru";
|
|
5
|
+
import "lodash/isEmpty";
|
|
6
|
+
import v from "axios";
|
|
7
|
+
import C from "keyv";
|
|
8
|
+
import { KeyvLocalStorage as x } from "keyv-browser";
|
|
9
|
+
import _ from "lodash/isNumber";
|
|
10
|
+
import P from "lodash/omit";
|
|
11
|
+
import K from "lodash/isObject";
|
|
12
|
+
import L from "json-stable-stringify";
|
|
13
|
+
import "is-url";
|
|
14
|
+
var D = class {
|
|
15
|
+
getSessionToken(e) {
|
|
16
|
+
return c.get(d) ? c.get(d) : e.sessionTokenKey ? window.localStorage.getItem(e.sessionTokenKey) : "";
|
|
17
|
+
}
|
|
18
|
+
setSessionToken(e) {
|
|
19
|
+
c.set(d, e);
|
|
20
|
+
}
|
|
21
|
+
removeSessionToken() {
|
|
22
|
+
c.remove(d);
|
|
23
|
+
}
|
|
24
|
+
getRefreshToken() {
|
|
25
|
+
return localStorage.getItem(h);
|
|
26
|
+
}
|
|
27
|
+
setRefreshToken(e) {
|
|
28
|
+
localStorage.setItem(h, e);
|
|
29
|
+
}
|
|
30
|
+
removeRefreshToken() {
|
|
31
|
+
localStorage.removeItem(h);
|
|
32
|
+
}
|
|
33
|
+
}, j = class {
|
|
34
|
+
constructor({ blocklet: e = window?.blocklet } = {}) {
|
|
35
|
+
this.blocklet = e;
|
|
36
|
+
}
|
|
37
|
+
getComponent(e) {
|
|
38
|
+
return (this.blocklet?.componentMountPoints || []).find((o) => [
|
|
39
|
+
o.title,
|
|
40
|
+
o.name,
|
|
41
|
+
o.did
|
|
42
|
+
].includes(e));
|
|
43
|
+
}
|
|
44
|
+
getComponentMountPoint(e) {
|
|
45
|
+
return this.getComponent(e)?.mountPoint || "";
|
|
46
|
+
}
|
|
47
|
+
getUrl(e, ...o) {
|
|
48
|
+
const n = this.getComponentMountPoint(e);
|
|
49
|
+
return R(this.blocklet?.appUrl || "", n, ...o);
|
|
50
|
+
}
|
|
51
|
+
}, F = "1.17.9";
|
|
52
|
+
const O = (e = 0) => new Promise((o) => {
|
|
53
|
+
setTimeout(() => {
|
|
54
|
+
o();
|
|
55
|
+
}, e);
|
|
56
|
+
}), b = (e) => `Bearer ${encodeURIComponent(e)}`, U = "vid", $ = "__visitor_id", N = () => c.get(U) || localStorage.getItem($), A = async (e, o, n) => {
|
|
57
|
+
if (K(e.data) && e.status >= 200 && e.status < 300 && typeof window < "u" && window.blocklet?.appId && window.blocklet?.appPk) {
|
|
58
|
+
if (!n) return e;
|
|
59
|
+
if (!e.data.$signature)
|
|
60
|
+
throw o(), new Error("Invalid response");
|
|
61
|
+
const { appId: l, appPk: i } = window.blocklet;
|
|
62
|
+
if (await n(L(P(e.data, ["$signature"])), e.data.$signature, i, l) === !1)
|
|
63
|
+
throw o(), new Error("Invalid response");
|
|
64
|
+
}
|
|
65
|
+
return e;
|
|
66
|
+
};
|
|
67
|
+
function g() {
|
|
68
|
+
return c.get("x-csrf-token");
|
|
69
|
+
}
|
|
70
|
+
function E() {
|
|
71
|
+
return c.get("login_token");
|
|
72
|
+
}
|
|
73
|
+
async function z() {
|
|
74
|
+
const e = g();
|
|
75
|
+
try {
|
|
76
|
+
const o = R(window.location.origin, S, "/api/did/csrfToken"), { data: n } = await v.get(o, { headers: { "x-csrf-token": e } });
|
|
77
|
+
return n;
|
|
78
|
+
} catch (o) {
|
|
79
|
+
return console.error(o), {
|
|
80
|
+
loginToken: E(),
|
|
81
|
+
csrfToken: null
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
let w;
|
|
86
|
+
function M() {
|
|
87
|
+
if (!w) {
|
|
88
|
+
const e = window?.blocklet?.settings?.session?.cacheTtl;
|
|
89
|
+
w = new C({
|
|
90
|
+
store: new x(),
|
|
91
|
+
ttl: _(e) ? e * 1e3 : 1e3 * 60 * 60
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return w;
|
|
95
|
+
}
|
|
96
|
+
async function y(e, o = 300) {
|
|
97
|
+
e.metaData.endTime = +/* @__PURE__ */ new Date();
|
|
98
|
+
const { startTime: n, endTime: l } = e.metaData, i = l - n;
|
|
99
|
+
i < o && await O(o - i), delete e.metaData;
|
|
100
|
+
}
|
|
101
|
+
const I = (e, o) => {
|
|
102
|
+
const n = {
|
|
103
|
+
...e?.headers,
|
|
104
|
+
"x-blocklet-js-sdk-version": F
|
|
105
|
+
}, l = new j(), i = v.create({
|
|
106
|
+
...e,
|
|
107
|
+
headers: n
|
|
108
|
+
});
|
|
109
|
+
return o?.lazy && (i.interceptors.request.use((t) => (t.metaData = { startTime: +/* @__PURE__ */ new Date() }, t), (t) => Promise.reject(t)), i.interceptors.response.use(async (t) => (t.config && await y(t.config, o?.lazyTime), t), async (t) => (t.response && await y(t.response.config, o?.lazyTime), Promise.reject(t)))), i.interceptors.request.use(async (t) => {
|
|
110
|
+
const T = o?.componentDid ?? window.blocklet?.componentId?.split("/").pop();
|
|
111
|
+
t.baseURL = t.baseURL || l.getComponentMountPoint(T), t.timeout = t.timeout || 20 * 1e3;
|
|
112
|
+
const k = E(), p = g();
|
|
113
|
+
if (k && p) {
|
|
114
|
+
const u = k.slice(-32), f = M(), r = await f.get(u);
|
|
115
|
+
if (r) t.headers["x-csrf-token"] = r;
|
|
116
|
+
else {
|
|
117
|
+
const { loginToken: s, csrfToken: a } = await z();
|
|
118
|
+
a ? (await f.set(s.slice(-32), a), t.headers["x-csrf-token"] = a) : t.headers["x-csrf-token"] = p;
|
|
119
|
+
}
|
|
120
|
+
t.headers["x-csrf-token"] && t.headers["x-csrf-token"] !== g() && c.set("x-csrf-token", t.headers["x-csrf-token"], {
|
|
121
|
+
sameSite: "strict",
|
|
122
|
+
secure: !0
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
const m = N();
|
|
126
|
+
return [void 0, null].includes(m) || (t.headers["x-blocklet-visitor-id"] = m), t;
|
|
127
|
+
}, (t) => Promise.reject(t)), i;
|
|
128
|
+
};
|
|
129
|
+
async function B(e) {
|
|
130
|
+
if (!e) throw new Error("Refresh token not found");
|
|
131
|
+
const { data: o } = await I({
|
|
132
|
+
baseURL: S,
|
|
133
|
+
timeout: 10 * 1e3,
|
|
134
|
+
secure: !0,
|
|
135
|
+
headers: { authorization: b(e) }
|
|
136
|
+
}).post("/api/did/refreshSession");
|
|
137
|
+
return o;
|
|
138
|
+
}
|
|
139
|
+
function q({ getSessionToken: e, setSessionToken: o, removeSessionToken: n, getRefreshToken: l, setRefreshToken: i, removeRefreshToken: t, onRefreshTokenError: T, onRefreshTokenSuccess: k }, p, m) {
|
|
140
|
+
let u = null;
|
|
141
|
+
const f = I({
|
|
142
|
+
timeout: 30 * 1e3,
|
|
143
|
+
...p
|
|
144
|
+
}, m);
|
|
145
|
+
return f.interceptors.request.use(async (r) => {
|
|
146
|
+
if (!c.get(d)) {
|
|
147
|
+
const s = e(r);
|
|
148
|
+
s && (r.headers.authorization = b(s));
|
|
149
|
+
}
|
|
150
|
+
return u && await u, r;
|
|
151
|
+
}, (r) => Promise.reject(r)), f.interceptors.response.use(async (r) => r.config?.secure ? await A(r, () => {
|
|
152
|
+
n(), t();
|
|
153
|
+
}, m?.verifyFn) : r, async (r) => {
|
|
154
|
+
const s = r.config;
|
|
155
|
+
if (s && (s.headers = s?.headers ? { ...s.headers } : {}, r?.response?.status === 401 && !s._retry)) {
|
|
156
|
+
s._retry = !0;
|
|
157
|
+
try {
|
|
158
|
+
u || (u = B(l()));
|
|
159
|
+
const a = await u;
|
|
160
|
+
return o(a.nextToken), i(a.nextRefreshToken), typeof k == "function" && k(a), f(s);
|
|
161
|
+
} catch (a) {
|
|
162
|
+
return n(), t(), typeof T == "function" && T(a), Promise.reject(r);
|
|
163
|
+
} finally {
|
|
164
|
+
u = null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return Promise.reject(r);
|
|
168
|
+
}), f;
|
|
169
|
+
}
|
|
170
|
+
function re(e = {}, o = {}) {
|
|
171
|
+
const n = new D();
|
|
172
|
+
return q({
|
|
173
|
+
getSessionToken: n.getSessionToken,
|
|
174
|
+
setSessionToken: n.setSessionToken,
|
|
175
|
+
removeSessionToken: n.removeSessionToken,
|
|
176
|
+
getRefreshToken: n.getRefreshToken,
|
|
177
|
+
setRefreshToken: n.setRefreshToken,
|
|
178
|
+
removeRefreshToken: n.removeRefreshToken,
|
|
179
|
+
onRefreshTokenError: () => {
|
|
180
|
+
console.error("Failed to refresh token");
|
|
181
|
+
},
|
|
182
|
+
onRefreshTokenSuccess: () => {
|
|
183
|
+
}
|
|
184
|
+
}, e, o);
|
|
185
|
+
}
|
|
186
|
+
export {
|
|
187
|
+
re as createAxios,
|
|
188
|
+
g as getCSRFToken,
|
|
189
|
+
z as getCSRFTokenByLoginToken,
|
|
190
|
+
E as getLoginToken
|
|
191
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blocklet/discuss-kit",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.23",
|
|
4
4
|
"description": "A react component for Discuss Kit blocklet.",
|
|
5
5
|
"main": "./lib/cjs/index.js",
|
|
6
6
|
"module": "./lib/es/index.js",
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"author": "Nate <nate@arcblock.io> (http://github.com/NateRobinson)",
|
|
28
28
|
"license": "MIT",
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@arcblock/ws": "^1.
|
|
31
|
-
"@blocklet/js-sdk": "^1.17.
|
|
30
|
+
"@arcblock/ws": "^1.29.9",
|
|
31
|
+
"@blocklet/js-sdk": "^1.17.10",
|
|
32
32
|
"@dnd-kit/core": "^6.1.0",
|
|
33
33
|
"@dnd-kit/sortable": "^8.0.0",
|
|
34
34
|
"@dnd-kit/utilities": "^3.2.2",
|
|
@@ -49,8 +49,8 @@
|
|
|
49
49
|
"rehype-sanitize": "^5.0.1",
|
|
50
50
|
"timeago.js": "^4.0.2",
|
|
51
51
|
"url-join": "^4.0.1",
|
|
52
|
-
"@blocklet/discuss-kit-ux": "2.6.
|
|
53
|
-
"@blocklet/editor": "2.6.
|
|
52
|
+
"@blocklet/discuss-kit-ux": "2.6.23",
|
|
53
|
+
"@blocklet/editor": "2.6.23"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
56
|
"@arcblock/did-connect-react": "^3.1.5",
|