@abtnode/webapp 1.8.8 → 1.8.9
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/blocklet.js +1 -1
- package/blocklet.yml +1 -1
- package/build/asset-manifest.json +7 -7
- package/build/index.html +1 -1
- package/build/static/js/4897.70c3ba7e.chunk.js +2 -0
- package/build/static/js/4897.70c3ba7e.chunk.js.map +1 -0
- package/build/static/js/976.ba1373c1.chunk.js +2 -0
- package/build/static/js/976.ba1373c1.chunk.js.map +1 -0
- package/build/static/js/{main.aff52eac.js → main.5b310dc7.js} +3 -3
- package/build/static/js/{main.aff52eac.js.LICENSE.txt → main.5b310dc7.js.LICENSE.txt} +0 -0
- package/build/static/js/{main.aff52eac.js.map → main.5b310dc7.js.map} +1 -1
- package/package.json +1 -1
- package/build/static/js/4897.f0832280.chunk.js +0 -2
- package/build/static/js/4897.f0832280.chunk.js.map +0 -1
- package/build/static/js/976.29f3d473.chunk.js +0 -2
- package/build/static/js/976.29f3d473.chunk.js.map +0 -1
package/blocklet.yml
CHANGED
|
@@ -9,4 +9,4 @@ author: wangshijun <shijun@arcblock.io> https://github.com/wangshijun
|
|
|
9
9
|
did: z8ia4j7CLkF3VwpQE7Ee677eostWTu2FTxsip
|
|
10
10
|
specVersion: 1.0.0
|
|
11
11
|
logo: public/images/blocklet.png
|
|
12
|
-
gitHash:
|
|
12
|
+
gitHash: 1846a1f0bae2f870f3fe635b1f17ed06867d370d
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"files": {
|
|
3
3
|
"main.css": "./static/css/main.84d6b268.css",
|
|
4
|
-
"main.js": "./static/js/main.
|
|
4
|
+
"main.js": "./static/js/main.5b310dc7.js",
|
|
5
5
|
"static/js/8174.d6f83bc6.chunk.js": "./static/js/8174.d6f83bc6.chunk.js",
|
|
6
6
|
"static/js/8271.89eec500.chunk.js": "./static/js/8271.89eec500.chunk.js",
|
|
7
7
|
"static/js/1854.e556268d.chunk.js": "./static/js/1854.e556268d.chunk.js",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"static/js/2577.19027396.chunk.js": "./static/js/2577.19027396.chunk.js",
|
|
56
56
|
"static/js/515.5e3661d7.chunk.js": "./static/js/515.5e3661d7.chunk.js",
|
|
57
57
|
"static/css/976.1eb771da.chunk.css": "./static/css/976.1eb771da.chunk.css",
|
|
58
|
-
"static/js/976.
|
|
58
|
+
"static/js/976.ba1373c1.chunk.js": "./static/js/976.ba1373c1.chunk.js",
|
|
59
59
|
"static/js/2309.85d505c1.chunk.js": "./static/js/2309.85d505c1.chunk.js",
|
|
60
60
|
"static/js/1866.6a73fb22.chunk.js": "./static/js/1866.6a73fb22.chunk.js",
|
|
61
61
|
"static/js/902.eb396a47.chunk.js": "./static/js/902.eb396a47.chunk.js",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"static/js/7363.20c4ff36.chunk.js": "./static/js/7363.20c4ff36.chunk.js",
|
|
67
67
|
"static/css/5105.35ccdcb9.chunk.css": "./static/css/5105.35ccdcb9.chunk.css",
|
|
68
68
|
"static/js/7004.547d6bfe.chunk.js": "./static/js/7004.547d6bfe.chunk.js",
|
|
69
|
-
"static/js/4897.
|
|
69
|
+
"static/js/4897.70c3ba7e.chunk.js": "./static/js/4897.70c3ba7e.chunk.js",
|
|
70
70
|
"static/js/6119.09d3ddec.chunk.js": "./static/js/6119.09d3ddec.chunk.js",
|
|
71
71
|
"static/js/3713.201b3fd8.chunk.js": "./static/js/3713.201b3fd8.chunk.js",
|
|
72
72
|
"static/media/ubuntu-mono-all-400-normal.woff": "./static/media/ubuntu-mono-all-400-normal.c879328bc62e9c68268f.woff",
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
"index.html": "./index.html",
|
|
87
87
|
"static/media/long-arrow.svg": "./static/media/long-arrow.ac9ed1f84fbdaee4f8ebb14e2827f438.svg",
|
|
88
88
|
"main.84d6b268.css.map": "./static/css/main.84d6b268.css.map",
|
|
89
|
-
"main.
|
|
89
|
+
"main.5b310dc7.js.map": "./static/js/main.5b310dc7.js.map",
|
|
90
90
|
"8174.d6f83bc6.chunk.js.map": "./static/js/8174.d6f83bc6.chunk.js.map",
|
|
91
91
|
"8271.89eec500.chunk.js.map": "./static/js/8271.89eec500.chunk.js.map",
|
|
92
92
|
"1854.e556268d.chunk.js.map": "./static/js/1854.e556268d.chunk.js.map",
|
|
@@ -140,7 +140,7 @@
|
|
|
140
140
|
"2577.19027396.chunk.js.map": "./static/js/2577.19027396.chunk.js.map",
|
|
141
141
|
"515.5e3661d7.chunk.js.map": "./static/js/515.5e3661d7.chunk.js.map",
|
|
142
142
|
"976.1eb771da.chunk.css.map": "./static/css/976.1eb771da.chunk.css.map",
|
|
143
|
-
"976.
|
|
143
|
+
"976.ba1373c1.chunk.js.map": "./static/js/976.ba1373c1.chunk.js.map",
|
|
144
144
|
"2309.85d505c1.chunk.js.map": "./static/js/2309.85d505c1.chunk.js.map",
|
|
145
145
|
"1866.6a73fb22.chunk.js.map": "./static/js/1866.6a73fb22.chunk.js.map",
|
|
146
146
|
"902.eb396a47.chunk.js.map": "./static/js/902.eb396a47.chunk.js.map",
|
|
@@ -151,12 +151,12 @@
|
|
|
151
151
|
"7363.20c4ff36.chunk.js.map": "./static/js/7363.20c4ff36.chunk.js.map",
|
|
152
152
|
"5105.35ccdcb9.chunk.css.map": "./static/css/5105.35ccdcb9.chunk.css.map",
|
|
153
153
|
"7004.547d6bfe.chunk.js.map": "./static/js/7004.547d6bfe.chunk.js.map",
|
|
154
|
-
"4897.
|
|
154
|
+
"4897.70c3ba7e.chunk.js.map": "./static/js/4897.70c3ba7e.chunk.js.map",
|
|
155
155
|
"6119.09d3ddec.chunk.js.map": "./static/js/6119.09d3ddec.chunk.js.map",
|
|
156
156
|
"3713.201b3fd8.chunk.js.map": "./static/js/3713.201b3fd8.chunk.js.map"
|
|
157
157
|
},
|
|
158
158
|
"entrypoints": [
|
|
159
159
|
"static/css/main.84d6b268.css",
|
|
160
|
-
"static/js/main.
|
|
160
|
+
"static/js/main.5b310dc7.js"
|
|
161
161
|
]
|
|
162
162
|
}
|
package/build/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!doctype html><html lang="en"><head><base href="/"/><meta charset="utf-8"/><link rel="shortcut icon" href="favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"/><meta name="theme-color" content="#000000"/><script>"https:"===window.location.protocol&&document.write('<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />')</script><link rel="manifest" href="manifest.json"/><link rel="stylesheet" href="icons/css/all.css"/><title>Blocklet Server</title><script src="api/env"></script><script defer="defer" src="./static/js/main.
|
|
1
|
+
<!doctype html><html lang="en"><head><base href="/"/><meta charset="utf-8"/><link rel="shortcut icon" href="favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"/><meta name="theme-color" content="#000000"/><script>"https:"===window.location.protocol&&document.write('<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests" />')</script><link rel="manifest" href="manifest.json"/><link rel="stylesheet" href="icons/css/all.css"/><title>Blocklet Server</title><script src="api/env"></script><script defer="defer" src="./static/js/main.5b310dc7.js"></script><link href="./static/css/main.84d6b268.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
(self.webpackChunk_abtnode_webapp=self.webpackChunk_abtnode_webapp||[]).push([[4897],{5907:function(e,t,n){"use strict";n.d(t,{Z:function(){return F}});var r=n(96234),o=n(59740),a=n(33028),i=n(30969),s=n(19611),c=n.n(s),l=n(622),u=n(51921),d=n(2834),f=n(69180),p=n(42167),h=n(32371),m=n(78685),v=n(5954),x=n(32723),k=n(34795),b=n(13026),g=n(7017),y=n(89189),w=n(43658),Z=n(61802),R=n(33359),j=n(88029),C=n(60451),S=n(32616),P=n(24883),T=n(61627),E=n(47334),N=n(91519),B=n(37574),D=["showPay","meta","lastVersion","buttonText","registryUrl","handleButtonText","handleButtonClick"];function I(e){var t=e.showPay,n=e.meta,s=e.lastVersion,c=e.buttonText,l=e.registryUrl,u=e.handleButtonText,d=e.handleButtonClick,f=(0,o.Z)(e,D),I=(0,y.useSnackbar)().enqueueSnackbar,U=(0,p.useLocaleContext)().t,A=(0,b.s0)(),L=(0,v.h6)().info,F=(0,S.y0)(),O=F.api,H=F.data.find((function(e){return e.meta.did===n.did}))||{},W=(0,i.useMemo)((function(){return!!H.status}),[H.status]),M=(0,i.useMemo)((function(){var e;return W?null===(e=H.meta)||void 0===e?void 0:e.version:null}),[W,H.meta]),z=!1===(0,g.isFreeBlocklet)(n),_=(0,i.useState)(!1),q=(0,r.Z)(_,2),K=q[0],G=q[1],Y=(0,P.Z)(n.did).hasPurchased,V=(0,i.useState)(!1),$=(0,r.Z)(V,2),J=$[0],X=$[1],Q=(0,w.default)("instant-blocklet-install",!1),ee=(0,r.Z)(Q,1)[0],te=(0,i.useMemo)((function(){return K?U(W?"blocklet.status.upgrading":z?"blocklet.status.purchasing":"blocklet.status.waiting"):(0,m.wS)(H.status)?U("common.".concat(H.status)):""}),[K,H.status,W,U,z]),ne=(0,i.useMemo)((function(){return!(!s||!M)&&!(!s||!(0,C.gt)(s,M))}),[s,M]),re=(0,a.Z)((0,a.Z)({},e),{},{state:H}),oe=(0,i.useMemo)((function(){return u&&"function"===typeof u?u(re):ne?c.upgrade:W?c.open:z?c.purchase:c.launch}),[W,ne,z,c,u]),ae=(0,i.useMemo)((function(){return!(!d||"function"!==typeof d)||!(W&&!ne)}),[W,ne,d]),ie=function(){var t=(0,k.Z)((0,x.Z)().mark((function t(r){var o,i;return(0,x.Z)().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(r.preventDefault(),r.stopPropagation(),t.prev=2,G(!0),!d||"function"!==typeof d){t.next=7;break}return d((0,a.Z)((0,a.Z)({},e),{},{state:H})),t.abrupt("return");case 7:if(W||!z){t.next=10;break}return X(!0),t.abrupt("return");case 10:if(!ee){t.next=15;break}return o=W?"upgradeBlocklet":"installBlocklet",t.next=14,O[o]({input:{did:n.did,registryUrl:l}});case 14:return t.abrupt("return");case 15:if(W||z){t.next=19;break}return i=(0,N.FM)(n,L),window.location.href=i,t.abrupt("return");case 19:if(!W){t.next=22;break}return t.next=22,O.upgradeBlocklet({input:{did:n.did,registryUrl:l}});case 22:t.next=28;break;case 24:t.prev=24,t.t0=t.catch(2),I((0,m.Z)(t.t0),{autoHideDuration:5e3,variant:"error"}),console.error("Blocklet installed failed",t.t0);case 28:return t.prev=28,G(!1),t.finish(28);case 31:case"end":return t.stop()}}),t,null,[[2,24,28,31]])})));return function(e){return t.apply(this,arguments)}}();function se(e){var t=e.disabled;return(0,B.jsx)(j.default,(0,a.Z)((0,a.Z)({onClick:ie,size:"small",disabled:Boolean(te||t),variant:"outlined",color:"primary","data-cy":"install-blocklet"},f),{},{children:te?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Z.default,{size:[16,10],style:{marginRight:3}}),te]}):oe}),n.did)}se.defaultProps={disabled:!1};return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(h.Kk,{children:ae?(0,B.jsx)(T.Z,{permission:"mutate_blocklet",children:function(e){return(0,B.jsx)(se,{disabled:!e})}}):(0,B.jsx)(j.default,{className:"action-button",variant:"outlined",color:"primary",size:"small",disabled:Boolean(te),"data-cy":"open-blocklet",onClick:function(e){var t;e.preventDefault(),e.stopPropagation(),A("/blocklets/".concat(n.did,"/").concat((t=H)&&(t.configs||[]).some((function(e){return e.required&&!e.value}))?"configuration":"overview"))},children:te?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Z.default,{size:[16,10],style:{marginRight:3}}),te]}):oe})}),W&&z&&t&&(0,B.jsx)(R.Z,{component:"small",style:{fontSize:12,color:"#666",marginLeft:4},children:U("blocklet.status.purchased")}),(Y&&!W||J)&&(0,B.jsx)(E.E0,{method:"launch",meta:n,mode:"both",onCancel:function(){G(!1),X(!1)}})]})}I.defaultProps={lastVersion:"",showPay:!0,handleButtonText:function(){return null},handleButtonClick:function(){return null}};var U=["handleButtonClick","handleButtonText","handleBlockletRegistry","handleBlockletRender","extraFilter"],A=function(e,t,n){var r=(0,N.Ti)(e,t).serverUrl;return c()(n,"/blocklets/".concat(e.did,"/?server-url=").concat(r))};function L(e){var t=e.blocklet,n=e.blocklets,r=e.handleButtonClick,o=e.handleButtonText,i=e.endpoint,s=(0,p.useLocaleContext)().t,u=(0,v.h6)(),d=c()(u.prefix,"blocklet.png"),f=i;if(f.startsWith("http")&&t.logo)d=c()(f,(0,m.lk)(t.did,t.logo));else{var x=(window.env.apiPrefix||"/").replace(/^\/+/,"").replace(/\/+$/,"");x&&(x="/".concat(x)),d=c()(x,"/blocklet/logo/".concat(t.did))}var k={meta:t,lastVersion:n.reduce((function(e,t){var n=t.did,r=t.version;return e[n]=r,e}),{})[t.did],buttonText:{purchase:s("common.purchase"),open:s("common.open"),launch:s("common.launch"),upgrade:s("common.upgrade")},registryUrl:f,handleButtonClick:!!r&&function(e){return r((0,a.Z)((0,a.Z)({},e),{},{blocklets:n}))},handleButtonText:o};return(0,B.jsx)(l.Z,{href:A(t,u.info,i),style:{color:"initial",textDecoration:"none"},onClick:function(e){return!!e.currentTarget.contains(e.target)||(e.preventDefault(),!1)},target:"_blank",children:(0,B.jsx)(h.ZP,{title:t.title||t.name,description:t.description,did:t.did,cover:t.logo?d:"",version:t.version,button:(0,B.jsx)("div",{style:{display:"flex",alignItems:"center"},children:(0,B.jsx)(I,(0,a.Z)({},k))})})})}function F(e){var t=e.handleButtonClick,n=e.handleButtonText,s=e.handleBlockletRegistry,l=e.handleBlockletRender,h=e.extraFilter,m=(0,o.Z)(e,U),x=(0,v.h6)().info,k=(0,p.useLocaleContext)().locale,b=(0,i.useState)({}),g=(0,r.Z)(b,2),y=g[0],w=g[1],Z=s||(null===x||void 0===x?void 0:x.blockletRegistry),R=x.routing.adminPath;return(0,i.useEffect)((function(){w({})}),[Z]),(0,B.jsx)(u.ErrorBoundary,{FallbackComponent:d.ErrorFallback,resetKeys:[Z],children:(0,B.jsx)("div",(0,a.Z)((0,a.Z)({},m),{},{children:(0,B.jsx)(f.Z,{blockletRender:function(e){var r=L((0,a.Z)((0,a.Z)({},e),{},{handleButtonClick:t,handleButtonText:n,endpoint:Z}));return l&&"function"===typeof l?l((0,a.Z)((0,a.Z)({},e),{},{defaultRender:r})):r},endpoint:Z,locale:k,onFilterChange:function(e){w(e)},filters:y,extraFilter:h,serverUrl:c()(window.location.origin,R)})}))})}L.defaultProps={handleButtonClick:null,handleButtonText:null,endpoint:"",blocklets:[]},F.defaultProps={handleButtonClick:null,handleButtonText:null,handleBlockletRegistry:"",handleBlockletRender:null,extraFilter:void 0,blocklets:[]}},47334:function(e,t,n){"use strict";n.d(t,{k4:function(){return G},E0:function(){return I}});var r=n(32723),o=n(34795),a=n(96234),i=n(30969),s=n(19611),c=n.n(s),l=n(95803),u=n.n(l),d=n(7017),f=n(62068),p=n(42167),h=n(7284),m=n(33359),v=n(5954),x=n(78685),k=n(91519),b=n(25071),g=n(24974),y=n.n(g),w=n(2950),Z=n(78903),R=n(86008),j=n(93310),C=n(64698),S=n(36508),P=n(88029),T=n(19996),E=n(37574),N=(y().object.isRequired,y().func.isRequired,(0,b.Z)((function(){return{dialogAuth:{padding:"0 0 24px !important","& .auth-title":{textAlign:"center !important",marginBottom:"4px !important"},"& .auth-tip--scan":{textAlign:"center !important"}},iconRoot:{minWidth:48}}})));function B(e){var t=e.action,n=e.onSelect,r=e.onNext,o=N(),a=(0,p.useLocaleContext)().t,i=[{action:"purchase",title:a("store.purchase.purchase.title"),description:a("store.purchase.purchase.description")},{action:"verify",title:a("store.purchase.verify.title"),description:a("store.purchase.verify.description")}];return(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(w.Z,{className:o.tabPanel,children:i.map((function(e){return(0,E.jsxs)(Z.ZP,{button:!0,selected:t===e.action,onClick:function(){return n(e.action)},children:[(0,E.jsx)(j.Z,{className:o.iconRoot,children:"purchase"===e.action?(0,E.jsx)(C.Z,{style:{color:"purchase"===t?T.default.primary.main:"#AAA",fontSize:32}}):(0,E.jsx)(S.Z,{style:{color:"verify"===t?T.default.primary.main:"#AAA",fontSize:32}})}),(0,E.jsx)(R.Z,{primary:e.title,secondary:e.description})]},e.action)}))}),r&&(0,E.jsx)(P.default,{fullWidth:!0,disabled:!t,variant:"contained",color:"primary",style:{marginTop:16},onClick:r,children:a("common.next")})]})}function D(e){var t=e.meta,n=e.onCancel,s=e.handlePaySuccess,l=(0,p.useLocaleContext)().t,b=(0,v.h6)().info,g=(0,i.useState)("both"),y=(0,a.Z)(g,2),w=y[0],Z=y[1],R=(0,i.useState)(1),j=(0,a.Z)(R,2),C=j[0],S=j[1],P=(0,x.yP)(b),T=b.blockletRegistry,N=(0,k.FM)(t,b),D=function(){var e=(0,o.Z)((0,r.Z)().mark((function e(t){return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t!==w){e.next=2;break}return e.abrupt("return");case 2:Z(t);case 3:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),I=function(){var e=(0,o.Z)((0,r.Z)().mark((function e(){return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(w){e.next=2;break}return e.abrupt("return");case 2:S(2),"verify"===w&&(window.location.href=N);case 4:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),U=(0,d.getDisplayName)({meta:t});if("purchase"===w&&2===C)return(0,E.jsx)(h.default,{open:!0,popup:!0,baseUrl:T,action:"acquire-asset",checkFn:u().create({baseURL:c()(T,"/store")}).get,onSuccess:function(){s(N)},onClose:n,checkTimeout:3e5,extraParams:{factory:t.nftFactory},webWalletUrl:P,disableClose:!0,saveConnect:!1,showDownload:!1,messages:{title:l("store.purchase.auth.title",{name:U}),scan:l("store.purchase.auth.scan"),confirm:l("store.purchase.auth.confirm"),success:(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(m.Z,{gutterBottom:!0,children:l("store.purchase.auth.success")}),(0,E.jsxs)(m.Z,{variant:"subtitle2",children:[" ",l("store.purchase.autoLaunch",{name:U})]})]})}});var A=f.default;return(0,E.jsx)(A,{title:l("store.purchase.title",{name:U}),disableEscapeKeyDown:!0,open:!0,fullWidth:!0,onClose:function(e,t){"backdropClick"!==t&&n()},children:(0,E.jsx)("div",{style:{marginBottom:16},children:(0,E.jsx)(B,{action:w,onNext:I,onSelect:D})})})}D.defaultProps={handlePaySuccess:function(e){setTimeout((function(){window.location.href=e}),1e3)}};var I=D,U=n(33028),A=n(61802),L=n(4485),F=n(24883);function O(e){var t=e.meta,n=e.onCancel,s=e.mode,l=e.installOpts,u=(0,p.useLocaleContext)(),k=u.t,b=u.locale,g=(0,v.h6)(),y=g.info,w=g.api,Z=(0,L.Tt)().api,R=N(),j=(0,i.useState)("both"!==s?s:""),C=(0,a.Z)(j,2),S=C[0],P=C[1],T=(0,i.useState)("both"!==s?2:1),D=(0,a.Z)(T,2),I=D[0],O=D[1],H=(0,F.Z)(t.did),W=H.session,M=H.setSession,z=H.hasCompleted,_=H.doRedirect,q=(0,x.yP)(y),K=window.env&&window.env.apiPrefix?window.env.apiPrefix:"/",G=function(){var e=(0,o.Z)((0,r.Z)().mark((function e(t){return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t!==S){e.next=2;break}return e.abrupt("return");case 2:P(t);case 3:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),Y=function(){var e=(0,o.Z)((0,r.Z)().mark((function e(){var n,a,i;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(S){e.next=2;break}return e.abrupt("return");case 2:if(2!==I){e.next=4;break}return e.abrupt("return");case 4:return n=l&&"component"===l.type?(0,U.Z)((0,U.Z)({},l),{},{blockletDid:t.did,action:S}):{registryUrl:y.blockletRegistry,blockletDid:t.did,action:S},e.next=7,w.startSession({input:{data:JSON.stringify(n)}});case 7:a=e.sent,i=a.session,M(i),O(2),"purchase"===S&&setTimeout((0,o.Z)((0,r.Z)().mark((function e(){var n,o,a,s,l,u;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return(n=new URL(window.location.href)).searchParams.delete("assetDid"),n.searchParams.set("sid",i.id),n.searchParams.set("locale",b),n.searchParams.set("did",t.did),o=encodeURIComponent(n.href),(a=new URL(window.location.href)).pathname=c()(K,"/api/did/verify-purchase/token"),a.searchParams.set("sid",i.id),a.searchParams.set("locale",b),a.searchParams.set("autoConnect","false"),e.next=13,Z.get(a.href);case 13:s=e.sent,l=s.data,u=encodeURIComponent(l.url),window.location.href=c()(y.blockletRegistry,"/store/purchase/".concat(t.nftFactory,"?cb=").concat(o,"&nw=").concat(u));case 17:case"end":return e.stop()}}),e)}))),100);case 12:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),V=function(e,t){"backdropClick"!==t&&(_(),n(),O(1))},$=(0,d.getDisplayName)({meta:t});return 2===I&&"verify"===S&&W?(0,E.jsx)(h.default,{popup:!0,open:!0,className:R.dialogAuth,action:"verify-purchase",checkFn:Z.get,checkTimeout:6e5,socketUrl:Z.socketUrl,webWalletUrl:q,extraParams:{locale:b,sid:W.id},onSuccess:function(){setTimeout(n,2e3)},onClose:V,showDownload:!1,saveConnect:!1,locale:b,messages:{title:k("store.purchase.verify.auth.title",{name:$}),scan:k("store.purchase.verify.auth.scan"),confirm:k("store.purchase.verify.auth.confirm"),success:k("store.purchase.verify.auth.success")}}):(0,E.jsxs)(f.default,{title:k("store.purchase.title",{name:$}),disableEscapeKeyDown:!0,open:!0,fullWidth:!0,onClose:V,children:[1===I&&(0,E.jsx)("div",{style:{marginBottom:16},children:(0,E.jsx)(B,{action:S,onNext:Y,onSelect:G})}),2===I&&"purchase"===S&&(0,E.jsxs)("div",{style:{textAlign:"center"},children:[!z&&(0,E.jsx)(A.default,{}),(0,E.jsx)(m.Z,{component:"p",children:function(){if(W){if("confirmed"===W.status)return k("store.purchase.confirmed");if("declined"===W.status)return k("store.purchase.declined");if("error"===W.status)return W.message}return k("store.purchase.waiting")}()})]})]})}O.defaultProps={installOpts:{type:"blocklet",rootDid:"",mountPoint:"",url:"",name:"",did:"",title:""}};var H=n(59740),W=n(54177),M=n(66604),z=n(99042),_=["mode"];function q(e){var t=e.meta,n=e.onCancel,s=e.mode,l=e.handlePaySuccess,u=(0,p.useLocaleContext)(),f=u.t,m=u.locale,k=(0,v.h6)().info,b=(0,x.yP)(k),g=(0,i.useState)(null),y=(0,a.Z)(g,2),w=y[0],Z=y[1],R=new URL(null===t||void 0===t?void 0:t.registryUrl).origin,j=(0,d.getDisplayName)({meta:t}),C=function(){var e=(0,o.Z)((0,r.Z)().mark((function e(t,a){var i,c,u,d,p,h;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(d=function(){return d=(0,o.Z)((0,r.Z)().mark((function e(t){return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,M.Z)((function(){return z.hi.get(t).then(function(){var e=(0,o.Z)((0,r.Z)().mark((function e(t){var n,o;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.data,o=null===n||void 0===n?void 0:n.downloadToken,"succeed"!==n.status){e.next=12;break}if(!o){e.next=8;break}return e.next=6,i({downloadToken:o});case 6:e.next=11;break;case 8:return e.next=10,c(f("blocklet.component.missDownloadTokenTip"));case 10:case 11:case 16:return e.abrupt("return",!0);case 12:if("error"!==n.status){e.next=17;break}return console.error("vc error: ",n),e.next=16,c(null===n||void 0===n?void 0:n.error);case 17:return e.abrupt("return",!1);case 18:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}())}),{interval:1e3}));case 1:case"end":return e.stop()}}),e)}))),d.apply(this,arguments)},u=function(e){return d.apply(this,arguments)},i=function(){var e=(0,o.Z)((0,r.Z)().mark((function e(t){var n;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=t.downloadToken,l({downloadToken:n});case 2:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),c=function(){var e=(0,o.Z)((0,r.Z)().mark((function e(t){return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:W.ZP.error(t),n(t);case 2:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),"purchase"!==s||!w){e.next=10;break}return p=(0,x.Pi)(w),h=p.statusUrl,e.next=8,u(h);case 8:e.next=12;break;case 10:return e.next=12,i({downloadToken:t.downloadToken&&a(t.downloadToken)});case 12:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}();if((0,i.useEffect)((function(){if("purchase"===s){var e=new URL(R);e.pathname="/api/did/verify-purchase-blocklet/token",e.searchParams.set("serverDid",k.did),e.searchParams.set("blockletDid",null===t||void 0===t?void 0:t.did);try{z.hi.get(e.href).then((function(e){var t=e.data,n="".concat(t.url);Z(n)}))}catch(n){console.error("get next workflow url error: ",n)}}return function(){Z(null)}}),[s]),"purchase"===s&&!w)return"";var S={verify:{action:"verify-purchase-blocklet",checkFn:z.od.create({baseURL:R}).get,extraParams:{serverDid:k.did,blockletDid:null===t||void 0===t?void 0:t.did},messages:{title:f("store.purchase.verify.auth.title",{name:j}),scan:f("store.purchase.verify.auth.scan"),confirm:f("store.purchase.verify.auth.confirm"),success:f("store.purchase.verify.auth.success")}},purchase:{action:"acquire-asset",checkFn:z.od.create({baseURL:c()(R,"/store")}).get,extraParams:{factory:t.nftFactory,nw:w},messages:{title:f("store.purchase.auth.title",{name:j}),scan:f("store.purchase.auth.scan"),confirm:f("store.purchase.auth.confirm"),success:(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)("p",{children:f("store.purchase.auth.success")}),(0,E.jsx)("p",{children:f("blocklet.component.purchaseComponentSecondCheckTip")})]})}}};return(0,E.jsx)(h.default,(0,U.Z)({open:!0,locale:m,popup:!1,saveConnect:!1,className:"connect",baseUrl:R,onSuccess:C,cancelWhenScanned:n,onClose:n,checkTimeout:3e5,webWalletUrl:b,disableClose:!0,showDownload:!1},S[s]))}q.defaultProps={handlePaySuccess:function(){}};var K=(0,i.forwardRef)((function(e,t){var n=e.mode,s=(0,H.Z)(e,_),c=(0,i.useState)("both"!==n?n:"verify"),l=(0,a.Z)(c,2),u=l[0],d=l[1],f=(0,i.useState)("both"!==n?2:1),p=(0,a.Z)(f,2),h=p[0],m=p[1],v=function(){var e=(0,o.Z)((0,r.Z)().mark((function e(t){return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t!==u){e.next=2;break}return e.abrupt("return");case 2:d(t);case 3:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),x=function(){var e=(0,o.Z)((0,r.Z)().mark((function e(){return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(u){e.next=2;break}return e.abrupt("return");case 2:if(2!==h){e.next=4;break}return e.abrupt("return");case 4:m(2);case 5:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();return(0,i.useImperativeHandle)(t,(function(){return{onNext:x,getCurrentStep:function(){return h}}})),1===h?(0,E.jsx)("div",{style:{maxWidth:520},children:(0,E.jsx)(B,{action:u,onNext:null,onSelect:v})}):(0,E.jsx)(q,(0,U.Z)((0,U.Z)({},s),{},{mode:u}))}));K.defaultProps={ref:{}};var G=K},91519:function(e,t,n){"use strict";n.d(t,{FM:function(){return P},M2:function(){return j},TT:function(){return g},Ti:function(){return S},rn:function(){return y}});var r=n(32723),o=n(34795),a=n(74082),i=n.n(a),s=n(35483),c=n.n(s),l=n(39591),u=n.n(l),d=n(34271),f=n(21918),p=n.n(f),h=n(19611),m=n.n(h),v=n(17128),x=n.n(v),k=n(9214),b=function(e){return function(e){for(var t=window.atob(e),n=new Uint8Array(t.length),r=0;r<t.length;r++)n[r]=t.charCodeAt(r);return n}((0,k.toDataURL)(e,{size:200}).replace(/^[^,]*,/,""))};function g(e){return e.replace(/[\s/@_]/g,"-").replace(/[^a-zA-Z0-9_-]/g,"").replace(/(^[-\s]+)|([-\s]+$)/g,"").toLowerCase()}function y(e,t){var n=c()(i()(t.meta),(function(e){return null!==e}));return n.name=e,n.did=x()(e),n.logo="logo.png",n.interfaces.forEach((function(e){e.services||delete e.services})),t.children.forEach((function(e){e.dynamic&&e.bundleSource&&n.children.push({name:e.meta.name,source:e.bundleSource,title:e.meta.title,mountPoint:e.mountPoint})})),n.environments=(t.configs||[]).map((function(e){return{name:e.key,description:"Automatically generated when exporting",required:!!e.required,secure:!!e.secure,default:e.secure?"":e.value||""}})),n.capabilities.component=!1,n}var w=function(e){return"Copyright \xa9 2022 ".concat(e||"","\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \u201cSoftware\u201d), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \u201cAS IS\u201d, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.")},Z=".DS_Store\n.blocklet",R="name: Deploy\n\non:\n push:\n branches:\n - main\n\njobs:\n Deploy:\n runs-on: ubuntu-latest\n\n steps:\n - name: Checkout repo\n uses: actions/checkout@v2\n\n - name: Blocklet workflow\n uses: blocklet/action-workflow@v1\n with:\n skip-upload: true\n skip-deploy: true\n bundle-command: blocklet bundle --create-release\n github-token: ${{ secrets.GITHUB_TOKEN }}";function j(e){return C.apply(this,arguments)}function C(){return C=(0,o.Z)((0,r.Z)().mark((function e(t){var n,o,a,i,s,c,l=arguments;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=l.length>1&&void 0!==l[1]?l[1]:{},o=n.holder,a="".concat(t.name.split("/").pop()),i="# ".concat(t.title,"\n\n## Introduction\n\n").concat(t.description),s=new(u()),(c=s.folder(a)).file("blocklet.yml",d.ZP.dump(t)),c.file("blocklet.md",i),c.file("README.md",i),c.file("logo.png",b(t.did)),c.file("LICENSE",w(o)),c.file(".gitignore",Z),c.folder("screenshots").file(".gitkeep",""),c.folder(".github").folder("workflows").file("main.yml",R),e.next=15,new Promise((function(e,t){s.generateAsync({type:"blob"}).then((function(t){p()(t,"".concat(a,".zip")),e()})).catch((function(e){t(e)}))}));case 15:case"end":return e.stop()}}),e)}))),C.apply(this,arguments)}var S=function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=t.routing.adminPath,o=n?encodeURIComponent(m()(window.location.origin,r)):m()(window.location.origin,r),a=m()(null===t||void 0===t?void 0:t.blockletRegistry,"/api/blocklets/".concat(e.did,"/blocklet.json"));return{serverUrl:o,metaUrl:a}},P=function(e,t){var n=S(e,t),r=n.metaUrl,o=n.serverUrl,a=new URL(m()(o,"/launch-blocklet/agreement"));return a.searchParams.set("blocklet_meta_url",r),a.searchParams.set("from",window.location.href),a.href}},30740:function(e,t,n){"use strict";n.d(t,{Z:function(){return w}});var r=n(32723),o=n(34795),a=n(96234),i=n(30969),s=n(25071),c=n(61802),l=n(62068),u=n(72807),d=n(33359),f=n(87006),p=n(78903),h=n(3715),m=n(42167),v=n(88029),x=n(98169),k=n(5954),b=n(78685),g=n(37574),y=(0,s.Z)((function(e){return{addMenuItemRoot:{justifyContent:"center",color:e.palette.primary.main,lineHeight:"3.2"}}}));function w(e){var t=e.disabled,n=e.reloadPage,s=(0,k.h6)(),w=s.api,Z=s.info,R=(0,i.useState)(!1),j=(0,a.Z)(R,2),C=j[0],S=j[1],P=(0,i.useState)(!0),T=(0,a.Z)(P,2),E=T[0],N=T[1],B=(0,i.useState)(!1),D=(0,a.Z)(B,2),I=D[0],U=D[1],A=(0,i.useState)(""),L=(0,a.Z)(A,2),F=L[0],O=L[1],H=(0,i.useState)(""),W=(0,a.Z)(H,2),M=W[0],z=W[1],_=(0,m.useLocaleContext)().t,q=y(),K=function(){var e=(0,o.Z)((0,r.Z)().mark((function e(){var t,o,a,i;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(S(!0),e.prev=1,t=(0,b.GI)(F,Z.blockletRegistryList),o=t.isNew,a=t.decoded,o){e.next=5;break}throw new Error(_("store.blockletRegistry.haveSameRegistry"));case 5:return e.next=7,w.addBlockletStore({input:{url:a}});case 7:U(!1),n&&window.location.reload(),e.next=15;break;case 11:e.prev=11,e.t0=e.catch(1),i="".concat(_("store.blockletRegistry.addFailed")," ").concat((0,b.Z)(e.t0)),z(i);case 15:return e.prev=15,S(!1),e.finish(15);case 18:case"end":return e.stop()}}),e,null,[[1,11,15,18]])})));return function(){return e.apply(this,arguments)}}();return(0,g.jsxs)(g.Fragment,{children:[(0,g.jsxs)(p.ZP,{button:!0,disabled:t,className:q.addMenuItemRoot,onClick:function(){U(!0)},children:[(0,g.jsx)(h.Z,{fontSize:"small"}),(0,g.jsx)(d.Z,{variant:"inherit",children:_("store.blockletRegistry.addRegistry")})]}),(0,g.jsxs)(l.default,{title:_("store.blockletRegistry.addRegistry"),fullWidth:!0,maxWidth:"md",open:I,onClose:function(){return U(!1)},PaperProps:{style:{minHeight:"auto"}},actions:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(v.default,{onClick:function(e){e.stopPropagation(),U(!1)},color:"inherit",size:"small",children:_("common.cancel")}),(0,g.jsxs)(v.default,{onClick:function(e){e.stopPropagation(),K()},color:"primary",size:"small","data-cy":"install-blocklet-next-step",disabled:C||!F||E,variant:"contained",autoFocus:!0,children:[C&&(0,g.jsx)(c.default,{size:[16,10]}),_("common.confirm")]})]}),children:[(0,g.jsx)("div",{style:{paddingTop:12,overflowY:"hidden"},children:(0,g.jsx)(u.Z,{component:"div",children:(0,g.jsx)(d.Z,{component:"div",children:(0,g.jsx)(f.Z,{label:_("store.blockletRegistry.registryUrl"),autoComplete:"off",variant:"outlined",name:"url",fullWidth:!0,value:F,onChange:function(e){z(null);var t=!1;e.target.value.trim()||(t=!0),e.target.value.trim()||z(_("store.blockletRegistry.registryUrlEmpty")),O(e.target.value),N(t)},disabled:C,onKeyPress:function(e){"Enter"===e.key&&(e.preventDefault(),e.target.value.trim()?K():z(_("store.blockletRegistry.registryUrlEmpty")))}})})})}),!!M&&(0,g.jsx)(x.Z,{type:"error",style:{width:"100%"},children:M})]})]})}w.defaultProps={disabled:!1,reloadPage:!0}},978:function(e,t,n){"use strict";n.d(t,{T:function(){return D},Z:function(){return U}});var r=n(33028),o=n(32723),a=n(34795),i=n(96234),s=n(30969),c=n(89189),l=n(25071),u=n(61802),d=n(62068),f=n(33359),p=n(2950),h=n(78903),m=n(86008),v=n(93310),x=n(62689),k=n(97475),b=n(11909),g=n(94551),y=n(42167),w=n(88029),Z=n(30740),R=n(94702),j=n(30291),C=n(22128),S=n(5954),P=n(78685),T=n(37574);function E(e){var t=(0,c.useSnackbar)().enqueueSnackbar,n=(0,S.h6)().api,r=(0,y.useLocaleContext)().t,l=(0,s.useState)(!1),u=(0,i.Z)(l,2),d=u[0],f=u[1],p=(0,s.useState)(null),h=(0,i.Z)(p,2),m=h[0],v=h[1],x=e.blockletRegistry,k=e.reloadPage,b=e.onDelete,w=(0,R.Z)(),Z=function(){var e=(0,a.Z)((0,o.Z)().mark((function e(){return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,f(!0),e.next=4,n.deleteBlockletStore({input:{url:x.url}});case 4:b&&"function"===typeof b&&b(),k&&window.location.reload(),e.next=11;break;case 8:e.prev=8,e.t0=e.catch(0),t("Remove Blocklet Store Error: ".concat((0,P.Z)(e.t0)),{autoHideDuration:2e3,variant:"error"});case 11:return e.prev=11,f(!1),v(null),e.finish(11);case 15:case"end":return e.stop()}}),e,null,[[0,8,11,15]])})));return function(){return e.apply(this,arguments)}}(),E={keyName:x.url,title:r("store.blockletRegistry.deleteRegistry"),description:r("store.blockletRegistry.deleteDesc",{name:"<b>".concat(x.url,"</b>"),color:w.palette.error.main}),confirmPlaceholder:r("store.blockletRegistry.confirmDesc",{name:x.url}),confirm:r("common.delConfirm"),cancel:r("common.cancel"),onConfirm:Z,onCancel:function(){f(!1),v(null)}};return(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(g.Z,{disabled:d,onClick:function(e){e.stopPropagation(),v(E)},size:"large",children:(0,T.jsx)(j.default,{})}),m&&(0,T.jsx)(C.Z,{keyName:m.keyName,title:m.title,description:m.description,confirmPlaceholder:m.confirmPlaceholder,confirm:m.confirm,cancel:m.cancel,params:m.params,onConfirm:m.onConfirm,onCancel:m.onCancel})]})}var N=n(61627),B=(0,l.Z)((function(){return{buttonText:{textTransform:"none !important"},iconRoot:{minWidth:24},menuName:{display:"flex",flexDirection:"column",marginRight:"100px","& span":{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"}}}}));function D(e){var t=B();return(0,T.jsxs)("div",{className:t.menuName,children:[(0,T.jsx)(f.Z,{component:"span",variant:"subtitle1",style:{fontWeight:"400"},children:e.name}),(0,T.jsx)(f.Z,{className:"url",component:"span",variant:"inherit",children:"".concat(e.url)}),(0,T.jsxs)(x.Z,{children:[(0,T.jsx)(g.Z,{onClick:function(t){t.stopPropagation(),window.open(e.url)},size:"large",children:(0,T.jsx)(b.Z,{})}),!e.protected&&(0,T.jsx)(E,{blockletRegistry:e,reloadPage:e.reloadPage,onDelete:e.onDelete})]})]})}D.defaultProps={protected:!1,reloadPage:!0,onDelete:function(){}};var I=(0,s.forwardRef)((function(e,t){var n=(0,S.h6)(),l=n.api,x=n.info,b=(0,y.useLocaleContext)().t,g=(0,c.useSnackbar)().enqueueSnackbar,R=(0,s.useState)(!1),j=(0,i.Z)(R,2),C=j[0],E=j[1],I=(0,s.useState)(!1),U=(0,i.Z)(I,2),A=U[0],L=U[1],F=(0,s.useState)(-1),O=(0,i.Z)(F,2),H=O[0],W=O[1],M=B(),z=x.blockletRegistryList.findIndex((function(e){return e.selected})),_=function(){var e=(0,a.Z)((0,o.Z)().mark((function e(t){var n;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,E(!0),W(t),n=x.blockletRegistryList[t],e.next=6,l.selectBlockletStore({input:{url:n.url}});case 6:L(!1),e.next=13;break;case 9:e.prev=9,e.t0=e.catch(0),console.error(e.t0),g("".concat(b("store.blockletRegistry.changeFailed")," ").concat((0,P.Z)(e.t0)),{autoHideDuration:2e3,variant:"error"});case 13:return e.prev=13,E(!1),e.finish(13);case 16:case"end":return e.stop()}}),e,null,[[0,9,13,16]])})));return function(t){return e.apply(this,arguments)}}();return(0,s.useImperativeHandle)(t,(function(){return{setOpen:L}})),(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(N.Z,{permission:"mutate_node",children:function(e){return(0,T.jsx)(w.default,{disabled:!e,classes:{text:M.buttonText},color:"secondary","data-cy":"store-toggle",onClick:function(){L(!0)},endIcon:(0,T.jsx)(k.Z,{}),children:(0,T.jsx)(f.Z,{color:"secondary",children:x.blockletRegistryList[z].name})})}}),(0,T.jsx)(d.default,{title:b("store.blockletRegistry.switchRegistry"),disableEscapeKeyDown:!0,disablePortal:!1,fullWidth:!0,open:A,onClose:function(){return L(!1)},children:(0,T.jsxs)(p.Z,{className:M.tabPanel,children:[x.blockletRegistryList.map((function(e,t){return(0,T.jsxs)(h.ZP,{button:!0,disabled:C,selected:z===t,"data-cy":"store-switch",onClick:function(){C||(t!==z?_(t):L(!1))},children:[(0,T.jsx)(v.Z,{className:M.iconRoot,children:H===t&&C&&(0,T.jsx)(u.default,{size:[16,10]})}),(0,T.jsx)(m.Z,{children:(0,T.jsx)(D,(0,r.Z)({},e))})]},e.url)})),(0,T.jsx)(Z.Z,{disabled:C})]})})]})})),U=I},24883:function(e,t,n){"use strict";n.d(t,{Z:function(){return u}});var r=n(96234),o=n(30969),a=n(13026),i=n(43658),s=n(65724),c=n(94604),l=n(50692);function u(e){var t=(0,c.Z)(),n=(0,a.s0)(),u=(0,i.default)("sid:blocklet:purchase:".concat(e)),d=(0,r.Z)(u,2),f=d[0],p=d[1],h=(0,o.useState)(!1),m=(0,r.Z)(h,2),v=m[0],x=m[1],k=(0,o.useState)(null),b=(0,r.Z)(k,2),g=b[0],y=b[1],w=function(){var e=new URL(window.location.href),t=e.pathname,r=e.searchParams,o=window.env&&window.env.apiPrefix?window.env.apiPrefix:"/";r.get("sid")&&(p(""),n(t.replace(o,"/"),{replace:!0}))},Z=!(!t.get("assetDid")||!f||t.get("sid")!==f);return(0,l.mU)(s.BlockletEvents.purchaseChange,(function(t){t.did===e&&(y(t.session),["declined","confirmed","error"].includes(t.session.status)&&(x(!0),setTimeout(w,2e3)))})),(0,o.useEffect)((function(){g&&g.id!==f&&p(g.id)}),[g]),{hasCompleted:v,hasPurchased:Z,session:g,setSession:y,doRedirect:w}}},99042:function(e,t,n){"use strict";n.d(t,{hi:function(){return a},od:function(){return o.a}});var r=n(95803),o=n.n(r);o().defaults.timeout=1e4;var a=o().create()},17128:function(e,t,n){var r=n(44765).Buffer,o=n(64029).types,a=n(2073).toHex,i=n(54186).fromPublicKey;e.exports=function(e){var t=a(r.from("string"===typeof e?e.trim():e));return i(t,{role:o.RoleType.ROLE_ANY})}}}]);
|
|
2
|
+
//# sourceMappingURL=4897.70c3ba7e.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"static/js/4897.70c3ba7e.chunk.js","mappings":"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","sources":["components/blocklet/install.js","components/blocklet/list.js","components/blocklet/purchase/common.js","components/blocklet/purchase/launch-purchase.js","components/blocklet/purchase/server-purchase.js","components/blocklet/purchase/component-purchase.js","components/blocklet/util.js","components/registry/add.js","components/registry/delete.js","components/registry/switch.js","hooks/blocklet-purchase.js","libs/api.js","../../../blocklet/meta/lib/did.js"],"sourcesContent":["/* eslint-disable react/jsx-one-expression-per-line */\nimport { useState, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { useNavigate } from 'react-router-dom';\nimport { isFreeBlocklet } from '@blocklet/meta/lib/util';\nimport { useSnackbar } from 'notistack';\nimport { ActionButton } from '@arcblock/ux/lib/Blocklet';\nimport useLocalStorage from 'react-use/lib/useLocalStorage';\n\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Typography from '@mui/material/Typography';\nimport Button from '@arcblock/ux/lib/Button';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport { gt } from 'semver';\n\nimport { useBlockletContext } from '../../contexts/blocklets';\nimport { isInstalling, formatError } from '../../libs/util';\nimport useBlockletPurchase from '../../hooks/blocklet-purchase';\nimport Permission from '../permission';\nimport { LaunchPurchaseDialog } from './purchase';\nimport { useNodeContext } from '../../contexts/node';\nimport { getLaunchAgreementUrl } from './util';\n\nexport default function InstallOrUpgrade(props) {\n const { showPay, meta, lastVersion, buttonText, registryUrl, handleButtonText, handleButtonClick, ...rest } = props;\n const { enqueueSnackbar } = useSnackbar();\n const { t } = useLocaleContext();\n const navigate = useNavigate();\n const { info } = useNodeContext();\n\n const { api, data: installedBlocklets } = useBlockletContext();\n const state = installedBlocklets.find(d => d.meta.did === meta.did) || {};\n\n const installed = useMemo(() => !!state.status, [state.status]);\n const installedVersion = useMemo(() => (installed ? state.meta?.version : null), [installed, state.meta]);\n const requirePurchase = isFreeBlocklet(meta) === false;\n\n const [loading, setLoading] = useState(false);\n const { hasPurchased } = useBlockletPurchase(meta.did);\n const [showPurchaseDialog, setShowPurchaseDialog] = useState(false);\n const [instantLaunch] = useLocalStorage('instant-blocklet-install', false);\n\n const loadingText = useMemo(() => {\n if (loading) {\n if (installed) {\n return t('blocklet.status.upgrading');\n }\n if (requirePurchase) {\n return t('blocklet.status.purchasing');\n }\n return t('blocklet.status.waiting');\n }\n if (isInstalling(state.status)) return t(`common.${state.status}`);\n return '';\n }, [loading, state.status, installed, t, requirePurchase]);\n\n const needUpgrade = useMemo(() => {\n if (!lastVersion || !installedVersion) {\n return false;\n }\n\n if (lastVersion) {\n if (gt(lastVersion, installedVersion)) {\n return true;\n }\n }\n\n return false;\n }, [lastVersion, installedVersion]);\n\n const btnProps = { ...props, state };\n\n const btnTxt = useMemo(() => {\n // use handleButtonText if provided\n if (handleButtonText && typeof handleButtonText === 'function') return handleButtonText(btnProps);\n if (needUpgrade) return buttonText.upgrade;\n if (installed) return buttonText.open;\n if (requirePurchase) return buttonText.purchase;\n return buttonText.launch;\n }, [installed, needUpgrade, requirePurchase, buttonText, handleButtonText]); // eslint-disable-line\n\n // only installed without upgrade show open button\n const showInstallBtn = useMemo(() => {\n // if provided handleButtonClick, always show install button\n if (handleButtonClick && typeof handleButtonClick === 'function') {\n return true;\n }\n return !(installed && !needUpgrade);\n }, [installed, needUpgrade, handleButtonClick]);\n\n const onAction = async e => {\n e.preventDefault();\n e.stopPropagation();\n\n try {\n setLoading(true);\n\n // use handleButtonClick if provided\n if (handleButtonClick && typeof handleButtonClick === 'function') {\n handleButtonClick({ ...props, state });\n return;\n }\n\n // The purchase dialog should only show on install\n if (!installed && requirePurchase) {\n setShowPurchaseDialog(true);\n return;\n }\n\n if (instantLaunch) {\n const fn = !installed ? 'installBlocklet' : 'upgradeBlocklet';\n await api[fn]({ input: { did: meta.did, registryUrl } });\n return;\n }\n\n if (!installed && !requirePurchase) {\n const url = getLaunchAgreementUrl(meta, info);\n window.location.href = url;\n return;\n }\n if (installed) {\n await api.upgradeBlocklet({ input: { did: meta.did, registryUrl } });\n }\n } catch (err) {\n enqueueSnackbar(formatError(err), { autoHideDuration: 5000, variant: 'error' });\n console.error('Blocklet installed failed', err);\n } finally {\n setLoading(false);\n }\n };\n\n // eslint-disable-next-line react/no-unstable-nested-components\n function InstallButton({ disabled }) {\n return (\n <Button\n key={meta.did}\n onClick={onAction}\n size=\"small\"\n disabled={Boolean(loadingText || disabled)}\n variant=\"outlined\"\n color=\"primary\"\n data-cy=\"install-blocklet\"\n {...rest}>\n {loadingText ? (\n <>\n <Spinner size={[16, 10]} style={{ marginRight: 3 }} />\n {loadingText}\n </>\n ) : (\n btnTxt\n )}\n </Button>\n );\n }\n\n InstallButton.propTypes = {\n disabled: PropTypes.bool,\n };\n\n InstallButton.defaultProps = {\n disabled: false,\n };\n const getTab = d => {\n if (d) {\n return (d.configs || []).some(x => x.required && !x.value) ? 'configuration' : 'overview';\n }\n\n return 'overview';\n };\n\n const onGoDetail = e => {\n e.preventDefault();\n e.stopPropagation();\n navigate(`/blocklets/${meta.did}/${getTab(state)}`);\n };\n\n const onCancelPurchase = () => {\n setLoading(false);\n setShowPurchaseDialog(false);\n };\n\n return (\n <>\n <ActionButton>\n {showInstallBtn ? (\n <Permission permission=\"mutate_blocklet\">\n {hasPermission => <InstallButton disabled={!hasPermission} />}\n </Permission>\n ) : (\n <Button\n className=\"action-button\"\n variant=\"outlined\"\n color=\"primary\"\n size=\"small\"\n disabled={Boolean(loadingText)}\n data-cy=\"open-blocklet\"\n onClick={onGoDetail}>\n {loadingText ? (\n <>\n <Spinner size={[16, 10]} style={{ marginRight: 3 }} />\n {loadingText}\n </>\n ) : (\n btnTxt\n )}\n </Button>\n )}\n </ActionButton>\n\n {installed && requirePurchase && showPay && (\n <Typography component=\"small\" style={{ fontSize: 12, color: '#666', marginLeft: 4 }}>\n {t('blocklet.status.purchased')}\n </Typography>\n )}\n {((hasPurchased && !installed) || showPurchaseDialog) && (\n <LaunchPurchaseDialog method=\"launch\" meta={meta} mode=\"both\" onCancel={onCancelPurchase} />\n )}\n </>\n );\n}\n\nInstallOrUpgrade.propTypes = {\n meta: PropTypes.object.isRequired,\n lastVersion: PropTypes.string,\n buttonText: PropTypes.shape({\n purchase: PropTypes.string.isRequired,\n open: PropTypes.string.isRequired,\n launch: PropTypes.string.isRequired,\n upgrade: PropTypes.string.isRequired,\n }).isRequired,\n showPay: PropTypes.bool,\n registryUrl: PropTypes.string.isRequired,\n handleButtonText: PropTypes.func,\n handleButtonClick: PropTypes.func,\n};\n\nInstallOrUpgrade.defaultProps = {\n lastVersion: '',\n showPay: true,\n handleButtonText: () => null,\n handleButtonClick: () => null,\n};\n","/* eslint-disable react/jsx-wrap-multilines */\nimport { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport joinURL from 'url-join';\nimport Link from '@mui/material/Link';\nimport { ErrorBoundary } from 'react-error-boundary';\nimport { ErrorFallback } from '@arcblock/ux/lib/ErrorBoundary';\nimport InnerList from '@blocklet/list';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Blocklet from '@arcblock/ux/lib/Blocklet';\n\nimport { formatRegistryLogoPath } from '../../libs/util';\nimport { useNodeContext } from '../../contexts/node';\nimport InstallOrUpgrade from './install';\nimport { getLaunchURL } from './util';\n\nconst getStoreDetail = (blocklet, info, endpoint) => {\n const { serverUrl } = getLaunchURL(blocklet, info);\n return joinURL(endpoint, `/blocklets/${blocklet.did}/?server-url=${serverUrl}`);\n};\n\nfunction BlockletItem({ blocklet, blocklets, handleButtonClick, handleButtonText, endpoint }) {\n const { t } = useLocaleContext();\n const node = useNodeContext();\n let logoUrl = joinURL(node.prefix, 'blocklet.png');\n\n const blockletRegistry = endpoint;\n\n if (blockletRegistry.startsWith('http') && blocklet.logo) {\n logoUrl = joinURL(blockletRegistry, formatRegistryLogoPath(blocklet.did, blocklet.logo));\n } else {\n const prefix = window.env.apiPrefix || '/';\n let apiPrefix = prefix.replace(/^\\/+/, '').replace(/\\/+$/, '');\n if (apiPrefix) {\n apiPrefix = `/${apiPrefix}`;\n }\n logoUrl = joinURL(apiPrefix, `/blocklet/logo/${blocklet.did}`);\n }\n\n const versions = blocklets.reduce((totalVal, { did, version }) => {\n totalVal[did] = version;\n return totalVal;\n }, {});\n\n const onClickLink = e => {\n if (!e.currentTarget.contains(e.target)) {\n e.preventDefault();\n return false;\n }\n return true;\n };\n\n const buttonProps = {\n meta: blocklet,\n lastVersion: versions[blocklet.did],\n buttonText: {\n purchase: t('common.purchase'),\n open: t('common.open'),\n launch: t('common.launch'),\n upgrade: t('common.upgrade'),\n },\n registryUrl: blockletRegistry,\n // handle the props of button\n handleButtonClick: handleButtonClick\n ? rest => {\n return handleButtonClick({\n ...rest,\n blocklets,\n });\n }\n : false,\n handleButtonText,\n };\n\n return (\n <Link\n href={getStoreDetail(blocklet, node.info, endpoint)}\n style={{ color: 'initial', textDecoration: 'none' }}\n onClick={onClickLink}\n target=\"_blank\">\n <Blocklet\n title={blocklet.title || blocklet.name}\n description={blocklet.description}\n did={blocklet.did}\n cover={blocklet.logo ? logoUrl : ''}\n version={blocklet.version}\n button={\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <InstallOrUpgrade {...buttonProps} />\n </div>\n }\n />\n </Link>\n );\n}\nBlockletItem.propTypes = {\n blocklet: PropTypes.object.isRequired,\n blocklets: PropTypes.array,\n handleButtonClick: PropTypes.func,\n handleButtonText: PropTypes.func,\n endpoint: PropTypes.string,\n};\n\nBlockletItem.defaultProps = {\n handleButtonClick: null,\n handleButtonText: null,\n endpoint: '',\n blocklets: [],\n};\n\nexport default function BlockletList({\n handleButtonClick,\n handleButtonText,\n handleBlockletRegistry,\n handleBlockletRender,\n extraFilter,\n ...rest\n}) {\n const { info } = useNodeContext();\n const { locale } = useLocaleContext();\n const [filters, setFilters] = useState({});\n const handleChange = changeData => {\n setFilters(changeData);\n };\n\n const endpoint = handleBlockletRegistry || info?.blockletRegistry;\n const adminPath = process.env.NODE_ENV === 'production' ? info.routing.adminPath : '';\n\n useEffect(() => {\n setFilters({});\n }, [endpoint]);\n\n return (\n <ErrorBoundary FallbackComponent={ErrorFallback} resetKeys={[endpoint]}>\n <div {...rest}>\n <InnerList\n blockletRender={blockletRenderProps => {\n const defaultRender = BlockletItem({\n ...blockletRenderProps,\n handleButtonClick,\n handleButtonText,\n endpoint,\n });\n\n // use handleBlockletRender if provided\n if (handleBlockletRender && typeof handleBlockletRender === 'function') {\n return handleBlockletRender({\n ...blockletRenderProps,\n defaultRender,\n });\n }\n\n return defaultRender;\n }}\n // use handleBlockletRegistry if provided\n endpoint={endpoint}\n locale={locale}\n onFilterChange={handleChange}\n filters={filters}\n extraFilter={extraFilter}\n serverUrl={joinURL(window.location.origin, adminPath)}\n />\n </div>\n </ErrorBoundary>\n );\n}\n\nBlockletList.propTypes = {\n blocklets: PropTypes.array,\n handleButtonClick: PropTypes.func,\n handleButtonText: PropTypes.func,\n handleBlockletRegistry: PropTypes.string,\n handleBlockletRender: PropTypes.func,\n extraFilter: PropTypes.func,\n};\n\nBlockletList.defaultProps = {\n handleButtonClick: null,\n handleButtonText: null,\n handleBlockletRegistry: '',\n handleBlockletRender: null,\n extraFilter: undefined,\n blocklets: [],\n};\n","import { makeStyles } from '@mui/styles';\nimport PropTypes from 'prop-types';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport IconPurchase from '@mui/icons-material/ShoppingCart';\nimport IconVerify from '@mui/icons-material/VerifiedUser';\nimport Button from '@arcblock/ux/lib/Button';\nimport colors from '@arcblock/ux/lib/Colors';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nconst commonProps = {\n meta: PropTypes.object.isRequired,\n onCancel: PropTypes.func.isRequired,\n};\nconst useStyles = makeStyles(() => ({\n dialogAuth: {\n padding: '0 0 24px !important',\n '& .auth-title': {\n textAlign: 'center !important',\n marginBottom: '4px !important',\n },\n '& .auth-tip--scan': {\n textAlign: 'center !important',\n },\n },\n iconRoot: {\n minWidth: 48,\n },\n}));\nfunction CustomSelect({ action, onSelect, onNext }) {\n const classes = useStyles();\n const { t } = useLocaleContext();\n const options = [\n {\n action: 'purchase',\n title: t('store.purchase.purchase.title'),\n description: t('store.purchase.purchase.description'),\n },\n {\n action: 'verify',\n title: t('store.purchase.verify.title'),\n description: t('store.purchase.verify.description'),\n },\n ];\n return (\n <>\n <List className={classes.tabPanel}>\n {options.map(x => (\n <ListItem button key={x.action} selected={action === x.action} onClick={() => onSelect(x.action)}>\n <ListItemIcon className={classes.iconRoot}>\n {x.action === 'purchase' ? (\n <IconPurchase style={{ color: action === 'purchase' ? colors.primary.main : '#AAA', fontSize: 32 }} />\n ) : (\n <IconVerify style={{ color: action === 'verify' ? colors.primary.main : '#AAA', fontSize: 32 }} />\n )}\n </ListItemIcon>\n <ListItemText primary={x.title} secondary={x.description} />\n </ListItem>\n ))}\n </List>\n {onNext && (\n <Button\n fullWidth\n disabled={!action}\n variant=\"contained\"\n color=\"primary\"\n style={{ marginTop: 16 }}\n onClick={onNext}>\n {t('common.next')}\n </Button>\n )}\n </>\n );\n}\nCustomSelect.propTypes = {\n action: PropTypes.oneOf(['both', 'purchase', 'verify']).isRequired,\n onSelect: PropTypes.func.isRequired,\n onNext: PropTypes.func.isRequired,\n};\nexport { useStyles, commonProps, CustomSelect };\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport { useState } from 'react';\nimport joinURL from 'url-join';\nimport axios from 'axios';\nimport { getDisplayName } from '@blocklet/meta/lib/util';\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport DidConnect from '@arcblock/did-connect/lib/Connect';\nimport Typography from '@mui/material/Typography';\nimport PropTypes from 'prop-types';\n\nimport { useNodeContext } from '../../../contexts/node';\nimport { getWebWalletUrl } from '../../../libs/util';\nimport { getLaunchAgreementUrl } from '../util';\nimport { commonProps, CustomSelect } from './common';\n\nfunction LaunchPurchaseDialog({ meta, onCancel, handlePaySuccess: handlePaySuccessFn }) {\n const { t } = useLocaleContext();\n const { info } = useNodeContext();\n\n const [action, setAction] = useState('both');\n const [step, setStep] = useState(1);\n const webWalletUrl = getWebWalletUrl(info);\n const registryUrl = info.blockletRegistry;\n const launchAddress = getLaunchAgreementUrl(meta, info);\n\n const onSelect = async act => {\n if (act === action) {\n return;\n }\n\n setAction(act);\n };\n\n const onNext = async () => {\n if (!action) {\n return;\n }\n setStep(2);\n if (action === 'verify') {\n window.location.href = launchAddress;\n }\n };\n\n const handleClose = (e, reason) => {\n if (reason === 'backdropClick') return;\n onCancel();\n };\n\n const handlePaySuccess = () => {\n handlePaySuccessFn(launchAddress);\n };\n\n const name = getDisplayName({ meta });\n\n if (action === 'purchase' && step === 2) {\n return (\n <DidConnect\n open\n popup\n baseUrl={registryUrl}\n action=\"acquire-asset\"\n checkFn={axios.create({ baseURL: joinURL(registryUrl, '/store') }).get}\n onSuccess={handlePaySuccess}\n onClose={onCancel}\n checkTimeout={60 * 5000}\n extraParams={{ factory: meta.nftFactory }}\n webWalletUrl={webWalletUrl}\n disableClose\n saveConnect={false}\n showDownload={false}\n messages={{\n title: t('store.purchase.auth.title', { name }),\n scan: t('store.purchase.auth.scan'),\n confirm: t('store.purchase.auth.confirm'),\n success: (\n <>\n <Typography gutterBottom>{t('store.purchase.auth.success')}</Typography>\n <Typography variant=\"subtitle2\"> {t('store.purchase.autoLaunch', { name })}</Typography>\n </>\n ),\n }}\n />\n );\n }\n\n const Wrapper = Dialog;\n\n return (\n <Wrapper title={t('store.purchase.title', { name })} disableEscapeKeyDown open fullWidth onClose={handleClose}>\n <div style={{ marginBottom: 16 }}>\n <CustomSelect action={action} onNext={onNext} onSelect={onSelect} />\n </div>\n </Wrapper>\n );\n}\nLaunchPurchaseDialog.propTypes = {\n ...commonProps,\n handlePaySuccess: PropTypes.func,\n};\n\nLaunchPurchaseDialog.defaultProps = {\n handlePaySuccess: url => {\n setTimeout(() => {\n window.location.href = url;\n }, 1000);\n },\n};\n\nexport default LaunchPurchaseDialog;\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport { useState } from 'react';\nimport joinURL from 'url-join';\nimport PropTypes from 'prop-types';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Typography from '@mui/material/Typography';\nimport Spinner from '@arcblock/ux/lib/Spinner';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport DidConnect from '@arcblock/did-connect/lib/Connect';\nimport { getDisplayName } from '@blocklet/meta/lib/util';\n\nimport { useNodeContext } from '../../../contexts/node';\nimport { getWebWalletUrl } from '../../../libs/util';\nimport { useSessionContext } from '../../../contexts/session';\nimport useBlockletPurchase from '../../../hooks/blocklet-purchase';\nimport { useStyles, commonProps, CustomSelect } from './common';\n\nfunction ServerPurchaseDialog({ meta, onCancel, mode, installOpts }) {\n const { t, locale } = useLocaleContext();\n const { info, api: gql } = useNodeContext();\n const { api } = useSessionContext();\n const classes = useStyles();\n const [action, setAction] = useState(mode !== 'both' ? mode : '');\n const [step, setStep] = useState(mode !== 'both' ? 2 : 1);\n const { session, setSession, hasCompleted, doRedirect } = useBlockletPurchase(meta.did);\n\n const webWalletUrl = getWebWalletUrl(info);\n const prefix = window.env && window.env.apiPrefix ? window.env.apiPrefix : '/';\n\n const onSelect = async act => {\n if (act === action) {\n return;\n }\n\n setAction(act);\n };\n\n const onNext = async () => {\n if (!action) {\n return;\n }\n if (step === 2) {\n return;\n }\n\n // Start a new session and persist session id to local storage\n let payload;\n if (installOpts && installOpts.type === 'component') {\n payload = { ...installOpts, blockletDid: meta.did, action };\n } else {\n payload = { registryUrl: info.blockletRegistry, blockletDid: meta.did, action };\n }\n\n const { session: initial } = await gql.startSession({ input: { data: JSON.stringify(payload) } });\n setSession(initial);\n setStep(2);\n\n if (action === 'purchase') {\n setTimeout(async () => {\n const cb = new URL(window.location.href);\n cb.searchParams.delete('assetDid');\n cb.searchParams.set('sid', initial.id);\n cb.searchParams.set('locale', locale);\n cb.searchParams.set('did', meta.did);\n const callback = encodeURIComponent(cb.href);\n\n const nw = new URL(window.location.href);\n nw.pathname = joinURL(prefix, '/api/did/verify-purchase/token');\n nw.searchParams.set('sid', initial.id);\n nw.searchParams.set('locale', locale);\n nw.searchParams.set('autoConnect', 'false');\n const { data } = await api.get(nw.href);\n const nextWorkflow = encodeURIComponent(data.url);\n\n window.location.href = joinURL(\n info.blockletRegistry,\n `/store/purchase/${meta.nftFactory}?cb=${callback}&nw=${nextWorkflow}`\n );\n }, 100);\n }\n };\n\n const onClose = (e, reason) => {\n if (reason === 'backdropClick') return;\n doRedirect();\n onCancel();\n setStep(1);\n };\n\n const onVerifySuccess = () => {\n setTimeout(onCancel, 2000);\n };\n\n const getMessage = () => {\n if (session) {\n if (session.status === 'confirmed') {\n return t('store.purchase.confirmed');\n }\n if (session.status === 'declined') {\n return t('store.purchase.declined');\n }\n if (session.status === 'error') {\n return session.message;\n }\n }\n\n return t('store.purchase.waiting');\n };\n\n const name = getDisplayName({ meta });\n\n if (step === 2 && action === 'verify' && session) {\n return (\n <DidConnect\n popup\n open\n className={classes.dialogAuth}\n action=\"verify-purchase\"\n checkFn={api.get}\n checkTimeout={10 * 60 * 1000}\n socketUrl={api.socketUrl}\n webWalletUrl={webWalletUrl}\n extraParams={{ locale, sid: session.id }}\n onSuccess={onVerifySuccess}\n onClose={onClose}\n showDownload={false}\n saveConnect={false}\n locale={locale}\n messages={{\n title: t('store.purchase.verify.auth.title', { name }),\n scan: t('store.purchase.verify.auth.scan'),\n confirm: t('store.purchase.verify.auth.confirm'),\n success: t('store.purchase.verify.auth.success'),\n }}\n />\n );\n }\n\n return (\n <Dialog title={t('store.purchase.title', { name })} disableEscapeKeyDown open fullWidth onClose={onClose}>\n {step === 1 && (\n <div style={{ marginBottom: 16 }}>\n <CustomSelect action={action} onNext={onNext} onSelect={onSelect} />\n </div>\n )}\n {step === 2 && action === 'purchase' && (\n <div style={{ textAlign: 'center' }}>\n {!hasCompleted && <Spinner />}\n <Typography component=\"p\">{getMessage()}</Typography>\n </div>\n )}\n </Dialog>\n );\n}\nconst installOptsProps = {\n // blocklet: install blocklet. component: install blocklet component\n type: 'blocklet',\n\n // component install params\n rootDid: '',\n mountPoint: '',\n url: '',\n name: '',\n did: '',\n title: '',\n};\nServerPurchaseDialog.propTypes = {\n ...commonProps,\n mode: PropTypes.oneOf(['both', 'purchase']).isRequired,\n installOpts: PropTypes.object,\n};\nServerPurchaseDialog.defaultProps = {\n installOpts: installOptsProps,\n};\n\nexport default ServerPurchaseDialog;\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport { useState, useEffect, useImperativeHandle, forwardRef } from 'react';\nimport joinURL from 'url-join';\n\nimport { getDisplayName } from '@blocklet/meta/lib/util';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport DidConnect from '@arcblock/did-connect/lib/Connect';\nimport PropTypes from 'prop-types';\nimport Toast from '@abtnode/ux/lib/toast';\nimport pWaitFor from 'p-wait-for';\nimport { useNodeContext } from '../../../contexts/node';\nimport { getWebWalletUrl, extractStatusUrlFromNextWorkflow } from '../../../libs/util';\n\nimport { commonProps, CustomSelect } from './common';\n\nimport { api as $api, axios } from '../../../libs/api';\n\nexport function ComponentPurchase({ meta, onCancel, mode, handlePaySuccess }) {\n const { t, locale } = useLocaleContext();\n const { info } = useNodeContext();\n const webWalletUrl = getWebWalletUrl(info);\n const [nw, setNw] = useState(null);\n\n const baseUrl = new URL(meta?.registryUrl).origin;\n\n const name = getDisplayName({ meta });\n\n const handleConnectSuccess = async (result, decrypt) => {\n const success = async ({ downloadToken }) => {\n handlePaySuccess({ downloadToken });\n };\n\n const failure = async errorMessage => {\n Toast.error(errorMessage);\n onCancel(errorMessage);\n };\n\n async function handleConnectSessionStatus(url) {\n return pWaitFor(\n () => {\n return $api.get(url).then(async ({ data }) => {\n const downloadToken = data?.downloadToken;\n if (data.status === 'succeed') {\n if (downloadToken) {\n await success({\n downloadToken,\n });\n } else {\n await failure(t('blocklet.component.missDownloadTokenTip'));\n return true;\n }\n\n return true;\n }\n\n if (data.status === 'error') {\n console.error('vc error: ', data);\n await failure(data?.error);\n return true;\n }\n return false;\n });\n },\n {\n interval: 1000,\n }\n );\n }\n\n if (mode === 'purchase' && nw) {\n const { statusUrl } = extractStatusUrlFromNextWorkflow(nw);\n // poll status url, to get download token\n await handleConnectSessionStatus(statusUrl);\n } else {\n await success({\n downloadToken: result.downloadToken && decrypt(result.downloadToken),\n });\n }\n };\n\n useEffect(() => {\n // only purchase mode has nw\n if (mode === 'purchase') {\n const nextWorkflowUrl = new URL(baseUrl);\n nextWorkflowUrl.pathname = '/api/did/verify-purchase-blocklet/token';\n nextWorkflowUrl.searchParams.set('serverDid', info.did);\n nextWorkflowUrl.searchParams.set('blockletDid', meta?.did);\n\n try {\n $api.get(nextWorkflowUrl.href).then(({ data }) => {\n const url = `${data.url}`;\n setNw(url);\n });\n } catch (error) {\n console.error('get next workflow url error: ', error);\n }\n }\n return () => {\n setNw(null);\n };\n }, [mode]); // eslint-disable-line\n\n // If nw does not exist, then connect should not be render\n if (mode === 'purchase' && !nw) {\n return '';\n }\n\n const modePropsMap = {\n verify: {\n action: 'verify-purchase-blocklet',\n checkFn: axios.create({ baseURL: baseUrl }).get,\n extraParams: {\n serverDid: info.did,\n blockletDid: meta?.did,\n },\n messages: {\n title: t('store.purchase.verify.auth.title', { name }),\n scan: t('store.purchase.verify.auth.scan'),\n confirm: t('store.purchase.verify.auth.confirm'),\n success: t('store.purchase.verify.auth.success'),\n },\n },\n purchase: {\n action: 'acquire-asset',\n checkFn: axios.create({ baseURL: joinURL(baseUrl, '/store') }).get,\n extraParams: {\n factory: meta.nftFactory,\n nw,\n },\n messages: {\n title: t('store.purchase.auth.title', { name }),\n scan: t('store.purchase.auth.scan'),\n confirm: t('store.purchase.auth.confirm'),\n success: (\n <>\n <p>{t('store.purchase.auth.success')}</p>\n <p>{t('blocklet.component.purchaseComponentSecondCheckTip')}</p>\n </>\n ),\n },\n },\n };\n\n return (\n <DidConnect\n open\n locale={locale}\n popup={false}\n saveConnect={false}\n className=\"connect\"\n baseUrl={baseUrl}\n onSuccess={handleConnectSuccess}\n cancelWhenScanned={onCancel}\n onClose={onCancel}\n checkTimeout={60 * 5000}\n webWalletUrl={webWalletUrl}\n disableClose\n showDownload={false}\n {...modePropsMap[mode]}\n />\n );\n}\n\nComponentPurchase.propTypes = {\n ...commonProps,\n handlePaySuccess: PropTypes.func,\n mode: PropTypes.oneOf(['verify', 'purchase']).isRequired,\n};\n\nComponentPurchase.defaultProps = {\n handlePaySuccess: () => {},\n};\n\nconst ComponentPurchaseSelect = forwardRef(({ mode, ...rest }, ref) => {\n const [action, setAction] = useState(mode !== 'both' ? mode : 'verify');\n const [step, setStep] = useState(mode !== 'both' ? 2 : 1);\n\n const onSelect = async act => {\n if (act === action) {\n return;\n }\n\n setAction(act);\n };\n\n const onNext = async () => {\n if (!action) {\n return;\n }\n if (step === 2) {\n return;\n }\n setStep(2);\n };\n\n // expose the func and activeStep\n useImperativeHandle(ref, () => ({\n onNext,\n getCurrentStep: () => {\n return step;\n },\n }));\n\n if (step === 1) {\n return (\n <div\n style={{\n maxWidth: 520,\n }}>\n <CustomSelect action={action} onNext={null} onSelect={onSelect} />\n </div>\n );\n }\n\n return <ComponentPurchase {...rest} mode={action} />;\n});\n\nComponentPurchaseSelect.propTypes = {\n mode: PropTypes.oneOf(['both', 'verify', 'purchase']).isRequired,\n ref: PropTypes.any,\n};\n\nComponentPurchaseSelect.defaultProps = {\n ref: {},\n};\n\nexport default ComponentPurchaseSelect;\n","import cloneDeep from 'lodash/cloneDeep';\nimport pickBy from 'lodash/pickBy';\nimport JSZip from 'jszip';\nimport yaml from 'js-yaml';\nimport saveAs from 'file-saver';\nimport joinURL from 'url-join';\n\nimport toBlockletDid from '@blocklet/meta/lib/did';\n\nimport { toDataURL } from '@arcblock/did-motif';\n\nconst base64ToArrayBuffer = base64 => {\n const bufStr = window.atob(base64);\n const bytes = new Uint8Array(bufStr.length);\n for (let i = 0; i < bufStr.length; i++) {\n bytes[i] = bufStr.charCodeAt(i);\n }\n return bytes;\n};\n\nconst getLogo = did => {\n const url = toDataURL(did, { size: 200 });\n const base64 = url.replace(/^[^,]*,/, '');\n return base64ToArrayBuffer(base64);\n};\n\nexport function getNameByTitle(title) {\n return title\n .replace(/[\\s/@_]/g, '-')\n .replace(/[^a-zA-Z0-9_-]/g, '')\n .replace(/(^[-\\s]+)|([-\\s]+$)/g, '')\n .toLowerCase();\n}\n\nexport function genExportedMeta(name, blocklet) {\n const meta = pickBy(cloneDeep(blocklet.meta), x => x !== null);\n\n meta.name = name;\n meta.did = toBlockletDid(name);\n meta.logo = 'logo.png';\n\n meta.interfaces.forEach(x => {\n // filter null or undefined\n if (!x.services) {\n delete x.services;\n }\n });\n\n blocklet.children.forEach(child => {\n if (child.dynamic && child.bundleSource) {\n meta.children.push({\n name: child.meta.name,\n source: child.bundleSource,\n title: child.meta.title,\n mountPoint: child.mountPoint,\n });\n }\n });\n\n meta.environments = (blocklet.configs || []).map(x => ({\n name: x.key,\n description: 'Automatically generated when exporting',\n required: !!x.required,\n secure: !!x.secure,\n default: x.secure ? '' : x.value || '',\n }));\n\n meta.capabilities.component = false;\n\n return meta;\n}\n\nconst license = holder => `Copyright © 2022 ${holder || ''}\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.`;\n\nconst Gitignore = `.DS_Store\n.blocklet`;\n\nconst GithubAction = `name: Deploy\n\non:\n push:\n branches:\n - main\n\njobs:\n Deploy:\n runs-on: ubuntu-latest\n\n steps:\n - name: Checkout repo\n uses: actions/checkout@v2\n\n - name: Blocklet workflow\n uses: blocklet/action-workflow@v1\n with:\n skip-upload: true\n skip-deploy: true\n bundle-command: blocklet bundle --create-release\n github-token: \\${{ secrets.GITHUB_TOKEN }}`;\n\nexport async function downloadExportedSource(meta, { holder } = {}) {\n const folderName = `${meta.name.split('/').pop()}`;\n const readme = `# ${meta.title}\\n\\n## Introduction\\n\\n${meta.description}`;\n\n const zip = new JSZip();\n const folder = zip.folder(folderName);\n folder.file('blocklet.yml', yaml.dump(meta));\n folder.file('blocklet.md', readme);\n folder.file('README.md', readme);\n folder.file('logo.png', getLogo(meta.did));\n folder.file('LICENSE', license(holder));\n folder.file('.gitignore', Gitignore);\n folder.folder('screenshots').file('.gitkeep', '');\n folder.folder('.github').folder('workflows').file('main.yml', GithubAction);\n await new Promise((resolve, reject) => {\n zip\n .generateAsync({ type: 'blob' })\n .then(content => {\n saveAs(content, `${folderName}.zip`);\n resolve();\n })\n .catch(err => {\n reject(err);\n });\n });\n}\nexport const getLaunchURL = (meta, info, encodeURI = false) => {\n const adminPath = process.env.NODE_ENV === 'production' ? info.routing.adminPath : '';\n const serverUrl = encodeURI\n ? encodeURIComponent(joinURL(window.location.origin, adminPath))\n : joinURL(window.location.origin, adminPath);\n const metaUrl = joinURL(info?.blockletRegistry, `/api/blocklets/${meta.did}/blocklet.json`);\n return { serverUrl, metaUrl };\n};\nexport const getLaunchAgreementUrl = (meta, info) => {\n const { metaUrl, serverUrl } = getLaunchURL(meta, info);\n\n const url = new URL(joinURL(serverUrl, '/launch-blocklet/agreement'));\n url.searchParams.set('blocklet_meta_url', metaUrl);\n url.searchParams.set('from', window.location.href);\n return url.href;\n};\n","import { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@mui/styles';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport Typography from '@mui/material/Typography';\nimport TextField from '@mui/material/TextField';\nimport ListItem from '@mui/material/ListItem';\nimport AddIcon from '@mui/icons-material/Add';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport Alert from '@arcblock/ux/lib/Alert';\n\nimport { useNodeContext } from '../../contexts/node';\nimport { formatError, isNewRegistryUrl } from '../../libs/util';\n\nconst useStyles = makeStyles(theme => ({\n addMenuItemRoot: {\n justifyContent: 'center',\n color: theme.palette.primary.main,\n lineHeight: '3.2',\n },\n}));\n\nexport default function AddBlockletRegistry({ disabled, reloadPage }) {\n const { api, info } = useNodeContext();\n const [loading, setLoading] = useState(false);\n const [disable, setDisable] = useState(true);\n const [open, setOpen] = useState(false);\n const [url, setUrl] = useState('');\n const [error, setError] = useState('');\n const { t } = useLocaleContext();\n const classes = useStyles();\n\n const onConfirm = async () => {\n setLoading(true);\n try {\n const { isNew, decoded } = isNewRegistryUrl(url, info.blockletRegistryList);\n\n if (!isNew) {\n throw new Error(t('store.blockletRegistry.haveSameRegistry'));\n }\n\n await api.addBlockletStore({ input: { url: decoded } });\n\n setOpen(false);\n if (reloadPage) {\n window.location.reload();\n }\n } catch (err) {\n const errMsg = `${t('store.blockletRegistry.addFailed')} ${formatError(err)}`;\n setError(errMsg);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <>\n <ListItem\n button\n disabled={disabled}\n className={classes.addMenuItemRoot}\n onClick={() => {\n setOpen(true);\n }}>\n <AddIcon fontSize=\"small\" />\n <Typography variant=\"inherit\">{t('store.blockletRegistry.addRegistry')}</Typography>\n </ListItem>\n <Dialog\n title={t('store.blockletRegistry.addRegistry')}\n fullWidth\n maxWidth=\"md\"\n open={open}\n onClose={() => setOpen(false)}\n PaperProps={{ style: { minHeight: 'auto' } }}\n actions={\n <>\n <Button\n onClick={e => {\n e.stopPropagation();\n setOpen(false);\n }}\n color=\"inherit\"\n size=\"small\">\n {t('common.cancel')}\n </Button>\n <Button\n onClick={e => {\n e.stopPropagation();\n onConfirm();\n }}\n color=\"primary\"\n size=\"small\"\n data-cy=\"install-blocklet-next-step\"\n disabled={loading || !url || disable}\n variant=\"contained\"\n autoFocus>\n {loading && <Spinner size={[16, 10]} />}\n {t('common.confirm')}\n </Button>\n </>\n }>\n <div style={{ paddingTop: 12, overflowY: 'hidden' }}>\n <DialogContentText component=\"div\">\n <Typography component=\"div\">\n <TextField\n label={t('store.blockletRegistry.registryUrl')}\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"url\"\n fullWidth\n value={url}\n onChange={e => {\n setError(null);\n let isDisabled = false;\n if (!e.target.value.trim()) {\n isDisabled = true;\n }\n if (!e.target.value.trim()) {\n setError(t('store.blockletRegistry.registryUrlEmpty'));\n }\n setUrl(e.target.value);\n setDisable(isDisabled);\n }}\n disabled={loading}\n onKeyPress={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n if (!e.target.value.trim()) {\n setError(t('store.blockletRegistry.registryUrlEmpty'));\n } else {\n onConfirm();\n }\n }\n }}\n />\n </Typography>\n </DialogContentText>\n </div>\n {!!error && (\n <Alert type=\"error\" style={{ width: '100%' }}>\n {error}\n </Alert>\n )}\n </Dialog>\n </>\n );\n}\n\nAddBlockletRegistry.propTypes = {\n disabled: PropTypes.bool,\n reloadPage: PropTypes.bool,\n};\n\nAddBlockletRegistry.defaultProps = {\n disabled: false,\n reloadPage: true,\n};\n","/* eslint-disable react/prop-types */\nimport { useState } from 'react';\nimport { useSnackbar } from 'notistack';\nimport IconButton from '@mui/material/IconButton';\nimport useTheme from '@mui/material/styles/useTheme';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport DeleteOutlineIcon from '@mui/icons-material/DeleteOutline';\nimport DelConfirm from '../delete-confirm';\nimport { useNodeContext } from '../../contexts/node';\nimport { formatError } from '../../libs/util';\n\nexport default function DeleteBlockletRegistry(props) {\n const { enqueueSnackbar } = useSnackbar();\n const { api } = useNodeContext();\n const { t } = useLocaleContext();\n const [loading, setLoading] = useState(false);\n const [confirmSetting, setConfirmSetting] = useState(null);\n const { blockletRegistry, reloadPage, onDelete } = props;\n const theme = useTheme();\n\n const onCancel = () => {\n setLoading(false);\n setConfirmSetting(null);\n };\n\n const onConfirm = async () => {\n try {\n setLoading(true);\n await api.deleteBlockletStore({ input: { url: blockletRegistry.url } });\n if (onDelete && typeof onDelete === 'function') {\n onDelete();\n }\n if (reloadPage) {\n window.location.reload();\n }\n } catch (err) {\n enqueueSnackbar(`Remove Blocklet Store Error: ${formatError(err)}`, {\n autoHideDuration: 2000,\n variant: 'error',\n });\n } finally {\n setLoading(false);\n setConfirmSetting(null);\n }\n };\n\n const setting = {\n keyName: blockletRegistry.url,\n title: t('store.blockletRegistry.deleteRegistry'),\n description: t('store.blockletRegistry.deleteDesc', {\n name: `<b>${blockletRegistry.url}</b>`,\n color: theme.palette.error.main,\n }),\n confirmPlaceholder: t('store.blockletRegistry.confirmDesc', { name: blockletRegistry.url }),\n confirm: t('common.delConfirm'),\n cancel: t('common.cancel'),\n onConfirm,\n onCancel,\n };\n\n const onMenuItemClick = e => {\n e.stopPropagation();\n setConfirmSetting(setting);\n };\n\n return (\n <>\n <IconButton disabled={loading} onClick={onMenuItemClick} size=\"large\">\n <DeleteOutlineIcon />\n </IconButton>\n {confirmSetting && (\n <DelConfirm\n keyName={confirmSetting.keyName}\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirmPlaceholder={confirmSetting.confirmPlaceholder}\n confirm={confirmSetting.confirm}\n cancel={confirmSetting.cancel}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n />\n )}\n </>\n );\n}\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport { forwardRef, useImperativeHandle, useState } from 'react';\n\nimport { useSnackbar } from 'notistack';\nimport { makeStyles } from '@mui/styles';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Typography from '@mui/material/Typography';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemSecondaryAction from '@mui/material/ListItemSecondaryAction';\nimport ArrowDropDownIcon from '@mui/icons-material/ArrowDropDown';\nimport LaunchIcon from '@mui/icons-material/Launch';\nimport IconButton from '@mui/material/IconButton';\nimport PropTypes from 'prop-types';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport AddBlockletRegistry from './add';\nimport DeleteBlockletRegistry from './delete';\nimport Permission from '../permission';\n\nimport { useNodeContext } from '../../contexts/node';\nimport { formatError } from '../../libs/util';\n\nconst useStyles = makeStyles(() => ({\n buttonText: {\n textTransform: 'none !important',\n },\n iconRoot: {\n minWidth: 24,\n },\n menuName: {\n display: 'flex',\n flexDirection: 'column',\n marginRight: '100px',\n '& span': { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' },\n },\n}));\n\nexport function BlockletRegistryRenderItem(props) {\n const classes = useStyles();\n return (\n <div className={classes.menuName}>\n <Typography component=\"span\" variant=\"subtitle1\" style={{ fontWeight: '400' }}>\n {props.name}\n </Typography>\n <Typography className=\"url\" component=\"span\" variant=\"inherit\">\n {`${props.url}`}\n </Typography>\n <ListItemSecondaryAction>\n <IconButton\n onClick={e => {\n e.stopPropagation();\n window.open(props.url);\n }}\n size=\"large\">\n <LaunchIcon />\n </IconButton>\n {!props.protected && (\n <DeleteBlockletRegistry blockletRegistry={props} reloadPage={props.reloadPage} onDelete={props.onDelete} />\n )}\n </ListItemSecondaryAction>\n </div>\n );\n}\n\nBlockletRegistryRenderItem.propTypes = {\n name: PropTypes.string.isRequired,\n url: PropTypes.string.isRequired,\n protected: PropTypes.bool,\n reloadPage: PropTypes.bool,\n onDelete: PropTypes.func,\n};\n\nBlockletRegistryRenderItem.defaultProps = {\n protected: false,\n reloadPage: true,\n onDelete: () => {},\n};\n\nconst SwitchBlockletRegistry = forwardRef((props, ref) => {\n const { api, info } = useNodeContext();\n const { t } = useLocaleContext();\n const { enqueueSnackbar } = useSnackbar();\n const [loading, setLoading] = useState(false);\n const [open, setOpen] = useState(false);\n const [menuIndex, setMenuIndex] = useState(-1);\n const classes = useStyles();\n const selectedIndex = info.blockletRegistryList.findIndex(x => x.selected);\n\n const onSelect = async index => {\n try {\n setLoading(true);\n setMenuIndex(index);\n\n const blockletRegistry = info.blockletRegistryList[index];\n await api.selectBlockletStore({ input: { url: blockletRegistry.url } });\n setOpen(false);\n } catch (err) {\n console.error(err);\n enqueueSnackbar(`${t('store.blockletRegistry.changeFailed')} ${formatError(err)}`, {\n autoHideDuration: 2000,\n variant: 'error',\n });\n } finally {\n setLoading(false);\n }\n };\n\n useImperativeHandle(ref, () => ({\n setOpen,\n }));\n\n return (\n <>\n <Permission permission=\"mutate_node\">\n {hasPermission => (\n <Button\n disabled={!hasPermission}\n classes={{ text: classes.buttonText }}\n color=\"secondary\"\n data-cy=\"store-toggle\"\n onClick={() => {\n setOpen(true);\n }}\n endIcon={<ArrowDropDownIcon />}>\n <Typography color=\"secondary\">{info.blockletRegistryList[selectedIndex].name}</Typography>\n </Button>\n )}\n </Permission>\n <Dialog\n title={t('store.blockletRegistry.switchRegistry')}\n disableEscapeKeyDown\n disablePortal={false}\n fullWidth\n open={open}\n onClose={() => setOpen(false)}>\n <List className={classes.tabPanel}>\n {info.blockletRegistryList.map((x, index) => (\n <ListItem\n button\n disabled={loading}\n key={x.url}\n selected={selectedIndex === index}\n data-cy=\"store-switch\"\n onClick={() => {\n if (loading) {\n return;\n }\n\n if (index === selectedIndex) {\n setOpen(false);\n return;\n }\n\n onSelect(index);\n }}>\n <ListItemIcon className={classes.iconRoot}>\n {menuIndex === index && loading && <Spinner size={[16, 10]} />}\n </ListItemIcon>\n <ListItemText>\n <BlockletRegistryRenderItem {...x} />\n </ListItemText>\n </ListItem>\n ))}\n <AddBlockletRegistry disabled={loading} />\n </List>\n </Dialog>\n </>\n );\n});\n\nSwitchBlockletRegistry.propTypes = {};\n\nexport default SwitchBlockletRegistry;\n","import { useState, useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport useLocalStorage from 'react-use/lib/useLocalStorage';\n\nimport { BlockletEvents } from '@blocklet/meta/lib/constants';\n\nimport useQuery from './query';\nimport { useSubscription } from '../libs/ws';\n\nexport default function useBlockletPurchase(did) {\n const query = useQuery();\n const navigate = useNavigate();\n const [sessionId, setSessionId] = useLocalStorage(`sid:blocklet:purchase:${did}`);\n const [hasCompleted, setCompleted] = useState(false);\n const [session, setSession] = useState(null);\n\n const doRedirect = () => {\n const { pathname, searchParams } = new URL(window.location.href);\n const prefix = window.env && window.env.apiPrefix ? window.env.apiPrefix : '/';\n if (searchParams.get('sid')) {\n setSessionId('');\n navigate(pathname.replace(prefix, '/'), { replace: true });\n }\n };\n\n const hasPurchased = !!(query.get('assetDid') && sessionId && query.get('sid') === sessionId);\n\n useSubscription(BlockletEvents.purchaseChange, e => {\n if (e.did === did) {\n setSession(e.session);\n\n if (['declined', 'confirmed', 'error'].includes(e.session.status)) {\n setCompleted(true);\n setTimeout(doRedirect, 2000);\n }\n }\n });\n\n useEffect(() => {\n if (session && session.id !== sessionId) {\n setSessionId(session.id);\n }\n }, [session]); // eslint-disable-line\n\n return {\n hasCompleted,\n hasPurchased,\n session,\n setSession,\n doRedirect,\n };\n}\n","import axios from 'axios';\n\naxios.defaults.timeout = 10 * 1000; // 超时时间设为10s\n\nconst api = axios.create();\n\nexport { axios, api };\nexport default api;\n","const { types } = require('@ocap/mcrypto');\nconst { toHex } = require('@ocap/util');\nconst { fromPublicKey } = require('@arcblock/did');\n\nconst toBlockletDid = (name) => {\n const pk = toHex(Buffer.from(typeof name === 'string' ? name.trim() : name));\n return fromPublicKey(pk, { role: types.RoleType.ROLE_ANY });\n};\n\nmodule.exports = toBlockletDid;\n"],"names":["InstallOrUpgrade","props","showPay","meta","lastVersion","buttonText","registryUrl","handleButtonText","handleButtonClick","rest","enqueueSnackbar","useSnackbar","t","useLocaleContext","navigate","useNavigate","info","useNodeContext","useBlockletContext","api","state","data","find","d","did","installed","useMemo","status","installedVersion","version","requirePurchase","isFreeBlocklet","useState","loading","setLoading","hasPurchased","useBlockletPurchase","showPurchaseDialog","setShowPurchaseDialog","useLocalStorage","instantLaunch","loadingText","isInstalling","needUpgrade","gt","btnProps","btnTxt","upgrade","open","purchase","launch","showInstallBtn","onAction","e","preventDefault","stopPropagation","fn","input","url","getLaunchAgreementUrl","window","location","href","upgradeBlocklet","formatError","autoHideDuration","variant","console","error","InstallButton","disabled","Button","onClick","size","Boolean","color","Spinner","style","marginRight","defaultProps","permission","hasPermission","className","configs","some","x","required","value","Typography","component","fontSize","marginLeft","method","mode","onCancel","getStoreDetail","blocklet","endpoint","serverUrl","getLaunchURL","joinURL","BlockletItem","blocklets","node","logoUrl","prefix","blockletRegistry","startsWith","logo","formatRegistryLogoPath","apiPrefix","env","replace","buttonProps","reduce","totalVal","Link","textDecoration","currentTarget","contains","target","Blocklet","title","name","description","cover","button","display","alignItems","BlockletList","handleBlockletRegistry","handleBlockletRender","extraFilter","locale","filters","setFilters","adminPath","routing","useEffect","ErrorBoundary","FallbackComponent","ErrorFallback","resetKeys","blockletRender","blockletRenderProps","defaultRender","onFilterChange","changeData","origin","undefined","useStyles","PropTypes","makeStyles","dialogAuth","padding","textAlign","marginBottom","iconRoot","minWidth","CustomSelect","action","onSelect","onNext","classes","options","List","tabPanel","map","ListItem","selected","ListItemIcon","colors","ListItemText","primary","secondary","fullWidth","marginTop","LaunchPurchaseDialog","handlePaySuccessFn","handlePaySuccess","setAction","step","setStep","webWalletUrl","getWebWalletUrl","launchAddress","act","getDisplayName","popup","baseUrl","checkFn","axios","baseURL","get","onSuccess","onClose","checkTimeout","extraParams","factory","nftFactory","disableClose","saveConnect","showDownload","messages","scan","confirm","success","gutterBottom","Wrapper","Dialog","disableEscapeKeyDown","reason","setTimeout","ServerPurchaseDialog","installOpts","gql","useSessionContext","session","setSession","hasCompleted","doRedirect","payload","type","blockletDid","startSession","JSON","stringify","initial","cb","URL","searchParams","delete","set","id","callback","encodeURIComponent","nw","pathname","nextWorkflow","socketUrl","sid","message","getMessage","rootDid","mountPoint","ComponentPurchase","setNw","handleConnectSuccess","result","decrypt","handleConnectSessionStatus","pWaitFor","$api","then","downloadToken","failure","interval","errorMessage","Toast","extractStatusUrlFromNextWorkflow","statusUrl","nextWorkflowUrl","modePropsMap","verify","serverDid","cancelWhenScanned","ComponentPurchaseSelect","forwardRef","ref","useImperativeHandle","getCurrentStep","maxWidth","getLogo","base64","bufStr","atob","bytes","Uint8Array","length","i","charCodeAt","base64ToArrayBuffer","toDataURL","getNameByTitle","toLowerCase","genExportedMeta","pickBy","cloneDeep","toBlockletDid","interfaces","forEach","services","children","child","dynamic","bundleSource","push","source","environments","key","secure","default","capabilities","license","holder","Gitignore","GithubAction","downloadExportedSource","folderName","split","pop","readme","zip","JSZip","folder","file","yaml","Promise","resolve","reject","generateAsync","content","saveAs","catch","err","encodeURI","metaUrl","theme","addMenuItemRoot","justifyContent","palette","main","lineHeight","AddBlockletRegistry","reloadPage","disable","setDisable","setOpen","setUrl","setError","onConfirm","isNewRegistryUrl","blockletRegistryList","isNew","decoded","Error","addBlockletStore","reload","errMsg","PaperProps","minHeight","actions","autoFocus","paddingTop","overflowY","label","autoComplete","onChange","isDisabled","trim","onKeyPress","width","DeleteBlockletRegistry","confirmSetting","setConfirmSetting","onDelete","useTheme","deleteBlockletStore","setting","keyName","confirmPlaceholder","cancel","IconButton","DeleteOutline","params","textTransform","menuName","flexDirection","overflow","textOverflow","whiteSpace","BlockletRegistryRenderItem","fontWeight","ListItemSecondaryAction","Launch","protected","SwitchBlockletRegistry","menuIndex","setMenuIndex","selectedIndex","findIndex","index","selectBlockletStore","text","endIcon","ArrowDropDown","disablePortal","query","useQuery","sessionId","setSessionId","setCompleted","useSubscription","BlockletEvents","includes","types","require","toHex","fromPublicKey","module","exports","pk","Buffer","from","role","RoleType","ROLE_ANY"],"sourceRoot":""}
|