@blocklet/discuss-kit 2.6.21 → 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 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.21",
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.28.3",
31
- "@blocklet/js-sdk": "^1.17.8-beta-20260106-113136-b3c09e14",
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.21",
53
- "@blocklet/editor": "2.6.21"
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",