@abtnode/webapp 1.8.14 → 1.8.15

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.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: 4b0cee41fd03d09301e2c35af46dd9e513473ef8
12
+ gitHash: 57106db1b559b906734df5b8eac7ce87cae72980
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "./static/css/main.84d6b268.css",
4
- "main.js": "./static/js/main.88d58f76.js",
4
+ "main.js": "./static/js/main.8225dafc.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.8eb42a26.chunk.js": "./static/js/1854.8eb42a26.chunk.js",
@@ -10,12 +10,12 @@
10
10
  "static/js/9490.614bb845.chunk.js": "./static/js/9490.614bb845.chunk.js",
11
11
  "static/js/1121.944f508e.chunk.js": "./static/js/1121.944f508e.chunk.js",
12
12
  "static/css/7419.6f975ff5.chunk.css": "./static/css/7419.6f975ff5.chunk.css",
13
- "static/js/7419.055e946f.chunk.js": "./static/js/7419.055e946f.chunk.js",
13
+ "static/js/7419.3daada78.chunk.js": "./static/js/7419.3daada78.chunk.js",
14
14
  "static/js/8825.3ce251b8.chunk.js": "./static/js/8825.3ce251b8.chunk.js",
15
15
  "static/js/9991.1784059a.chunk.js": "./static/js/9991.1784059a.chunk.js",
16
16
  "static/js/8565.66e3927e.chunk.js": "./static/js/8565.66e3927e.chunk.js",
17
17
  "static/js/6128.5d9d960e.chunk.js": "./static/js/6128.5d9d960e.chunk.js",
18
- "static/js/2201.87e01974.chunk.js": "./static/js/2201.87e01974.chunk.js",
18
+ "static/js/2201.d7f0d0fb.chunk.js": "./static/js/2201.d7f0d0fb.chunk.js",
19
19
  "static/js/9518.de087035.chunk.js": "./static/js/9518.de087035.chunk.js",
20
20
  "static/js/2733.229f163a.chunk.js": "./static/js/2733.229f163a.chunk.js",
21
21
  "static/js/9335.3fcfb7fb.chunk.js": "./static/js/9335.3fcfb7fb.chunk.js",
@@ -66,7 +66,7 @@
66
66
  "static/js/7363.e4104c53.chunk.js": "./static/js/7363.e4104c53.chunk.js",
67
67
  "static/css/5105.35ccdcb9.chunk.css": "./static/css/5105.35ccdcb9.chunk.css",
68
68
  "static/js/7004.0256c5fe.chunk.js": "./static/js/7004.0256c5fe.chunk.js",
69
- "static/js/4897.9f296b57.chunk.js": "./static/js/4897.9f296b57.chunk.js",
69
+ "static/js/4897.6468b922.chunk.js": "./static/js/4897.6468b922.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.88d58f76.js.map": "./static/js/main.88d58f76.js.map",
89
+ "main.8225dafc.js.map": "./static/js/main.8225dafc.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.8eb42a26.chunk.js.map": "./static/js/1854.8eb42a26.chunk.js.map",
@@ -95,12 +95,12 @@
95
95
  "9490.614bb845.chunk.js.map": "./static/js/9490.614bb845.chunk.js.map",
96
96
  "1121.944f508e.chunk.js.map": "./static/js/1121.944f508e.chunk.js.map",
97
97
  "7419.6f975ff5.chunk.css.map": "./static/css/7419.6f975ff5.chunk.css.map",
98
- "7419.055e946f.chunk.js.map": "./static/js/7419.055e946f.chunk.js.map",
98
+ "7419.3daada78.chunk.js.map": "./static/js/7419.3daada78.chunk.js.map",
99
99
  "8825.3ce251b8.chunk.js.map": "./static/js/8825.3ce251b8.chunk.js.map",
100
100
  "9991.1784059a.chunk.js.map": "./static/js/9991.1784059a.chunk.js.map",
101
101
  "8565.66e3927e.chunk.js.map": "./static/js/8565.66e3927e.chunk.js.map",
102
102
  "6128.5d9d960e.chunk.js.map": "./static/js/6128.5d9d960e.chunk.js.map",
103
- "2201.87e01974.chunk.js.map": "./static/js/2201.87e01974.chunk.js.map",
103
+ "2201.d7f0d0fb.chunk.js.map": "./static/js/2201.d7f0d0fb.chunk.js.map",
104
104
  "9518.de087035.chunk.js.map": "./static/js/9518.de087035.chunk.js.map",
105
105
  "2733.229f163a.chunk.js.map": "./static/js/2733.229f163a.chunk.js.map",
106
106
  "9335.3fcfb7fb.chunk.js.map": "./static/js/9335.3fcfb7fb.chunk.js.map",
@@ -151,12 +151,12 @@
151
151
  "7363.e4104c53.chunk.js.map": "./static/js/7363.e4104c53.chunk.js.map",
152
152
  "5105.35ccdcb9.chunk.css.map": "./static/css/5105.35ccdcb9.chunk.css.map",
153
153
  "7004.0256c5fe.chunk.js.map": "./static/js/7004.0256c5fe.chunk.js.map",
154
- "4897.9f296b57.chunk.js.map": "./static/js/4897.9f296b57.chunk.js.map",
154
+ "4897.6468b922.chunk.js.map": "./static/js/4897.6468b922.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.88d58f76.js"
160
+ "static/js/main.8225dafc.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.88d58f76.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>
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.8225dafc.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([[2201],{91519:function(e,n,t){"use strict";t.d(n,{FM:function(){return C},M2:function(){return E},TT:function(){return v},Ti:function(){return B},rn:function(){return y}});var r=t(32723),o=t(34795),a=t(74082),i=t.n(a),l=t(35483),c=t.n(l),s=t(39591),u=t.n(s),d=t(34271),f=t(21918),p=t.n(f),m=t(19611),h=t.n(m),g=t(17128),x=t.n(g),b=t(9214),k=function(e){return function(e){for(var n=window.atob(e),t=new Uint8Array(n.length),r=0;r<n.length;r++)t[r]=n.charCodeAt(r);return t}((0,b.toDataURL)(e,{size:200}).replace(/^[^,]*,/,""))};function v(e){return e.replace(/[\s/@_]/g,"-").replace(/[^a-zA-Z0-9_-]/g,"").replace(/(^[-\s]+)|([-\s]+$)/g,"").toLowerCase()}function y(e,n){var t=c()(i()(n.meta),(function(e){return null!==e}));return t.name=e,t.did=x()(e),t.logo="logo.png",t.interfaces.forEach((function(e){e.services||delete e.services})),n.children.forEach((function(e){e.dynamic&&e.bundleSource&&t.children.push({name:e.meta.name,source:e.bundleSource,title:e.meta.title,mountPoint:e.mountPoint})})),t.environments=(n.configs||[]).map((function(e){return{name:e.key,description:"Automatically generated when exporting",required:!!e.required,secure:!!e.secure,default:e.secure?"":e.value||""}})),t.capabilities.component=!1,t}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.")},A=".DS_Store\n.blocklet",j="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 E(e){return Z.apply(this,arguments)}function Z(){return Z=(0,o.Z)((0,r.Z)().mark((function e(n){var t,o,a,i,l,c,s=arguments;return(0,r.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=s.length>1&&void 0!==s[1]?s[1]:{},o=t.holder,a="".concat(n.name.split("/").pop()),i="# ".concat(n.title,"\n\n## Introduction\n\n").concat(n.description),l=new(u()),(c=l.folder(a)).file("blocklet.yml",d.ZP.dump(n)),c.file("blocklet.md",i),c.file("README.md",i),c.file("logo.png",k(n.did)),c.file("LICENSE",w(o)),c.file(".gitignore",A),c.folder("screenshots").file(".gitkeep",""),c.folder(".github").folder("workflows").file("main.yml",j),e.next=15,new Promise((function(e,n){l.generateAsync({type:"blob"}).then((function(n){p()(n,"".concat(a,".zip")),e()})).catch((function(e){n(e)}))}));case 15:case"end":return e.stop()}}),e)}))),Z.apply(this,arguments)}var B=function(e,n){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=n.routing.adminPath,o=t?encodeURIComponent(h()(window.location.origin,r)):h()(window.location.origin,r),a=h()(null===n||void 0===n?void 0:n.blockletRegistry,"/api/blocklets/".concat(e.did,"/blocklet.json"));return{serverUrl:o,metaUrl:a}},C=function(e,n){var t=B(e,n),r=t.metaUrl,o=t.serverUrl,a=new URL(h()(o,"/launch-blocklet/agreement"));return a.searchParams.set("blocklet_meta_url",r),a.searchParams.set("from",window.location.href),a.href}},38657:function(e,n,t){"use strict";var r=t(33028),o=t(59740),a=t(30969),i=t(88029),l=t(37574),c=["children"];function s(e){var n=e.children,t=(0,o.Z)(e,c);return(0,l.jsx)(i.default,(0,r.Z)((0,r.Z)({variant:"contained",color:"primary"},t),{},{children:n}))}n.Z=(0,a.forwardRef)((function(e,n){return(0,l.jsx)(s,(0,r.Z)((0,r.Z)({},e),{},{forwardedRef:n}))}))},71927:function(e,n,t){"use strict";t.d(n,{Z:function(){return O}});var r=t(71171),o=t(32723),a=t(34795),i=t(96234),l=t(30969),c=t(13026),s=t(4716),u=t(16380),d=t(42167),f=t(7017),p=t(23426),m=t(55632),h=t(98185),g=t(61802),x=t(98169),b=t(76032),k=t.n(b),v=t(81721),y=t(47768),w=t(5954),A=t(33028),j=t(37574);function E(e){var n=Object.assign({},e);return(0,j.jsxs)("div",(0,A.Z)((0,A.Z)({},n),{},{style:{width:"100%"},children:[(0,j.jsx)("h3",{children:"End User License Agreement for Application"}),(0,j.jsx)("p",{children:"Blocklet Server License Agreement ArcBlock, Inc. version 2020-08-28"}),(0,j.jsx)("p",{children:"BLOCKLET SERVER LICENSE AGREEMENT"}),(0,j.jsx)("p",{children:"\u6682\u65e0"})]}))}var Z,B,C=t(78685),N=t(38657);function O(e){var n=e.blocklet,t=e.onClickNext,r=e.handleDescEle,u=e.showPageHeader,b=(0,c.s0)(),A=(0,l.useState)(null),Z=(0,i.Z)(A,2),B=Z[0],O=Z[1],R=(0,l.useState)(null),M=(0,i.Z)(R,2),P=M[0],S=M[1],I=(0,l.useState)(!1),D=(0,i.Z)(I,2),U=D[0],Q=D[1],F=(0,d.useLocaleContext)(),H=F.t,J=F.locale,z=(0,w.h6)(),X=z.info,K=z.api,Y=n.isRunning,G=(0,l.useMemo)((function(){return k()(n)||U}),[n,U]),W=t||function(){b("/launch-blocklet/install".concat(window.location.search))};if((0,l.useEffect)((function(){var e=function(){var e=(0,a.Z)((0,o.Z)().mark((function e(){var t,r,a,i;return(0,o.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,Q(!0),e.next=4,K.getBlocklet({input:{did:n.meta.did}});case 4:return t=e.sent,r=t.blocklet,a=r.interfaces.map((function(e){return e.url})),e.next=9,(0,C.D)(a);case 9:if((i=e.sent)||!k()(i)){e.next=13;break}return O(null),e.abrupt("return");case 13:O(new URL(i).href),e.next=19;break;case 16:e.prev=16,e.t0=e.catch(0),S(e.t0.message);case 19:return e.prev=19,Q(!1),e.finish(19);case 22:case"end":return e.stop()}}),e,null,[[0,16,19,22]])})));return function(){return e.apply(this,arguments)}}();Y&&e()}),[n]),P)return(0,j.jsx)(v.default,{relative:"parent",children:(0,j.jsx)("div",{children:(0,j.jsx)(x.Z,{style:{wordBreak:"break-all"},variant:"icon",type:"error",children:P})})});if(G)return(0,j.jsx)(v.default,{relative:"parent",children:(0,j.jsx)(g.default,{})});var V=n.meta,q={data:V};if(!V)return(0,j.jsx)(v.default,{relative:"parent",children:(0,j.jsx)(g.default,{})});if(n.isInstalled){var _=B?"alreadyRunning":"alreadyInstalled";return(0,j.jsx)(p.Z,{variant:"info",title:H("common.reminder"),subTitle:H("launchBlocklet.".concat(_),{name:(0,f.getDisplayName)(n,!0)}),footer:(0,j.jsxs)(L,{children:[(0,j.jsx)(N.Z,{"data-cy":"view-blocklet",component:s.Link,to:"/blocklets/".concat(n.meta.did,"/overview"),variant:B?"outlined":"contained",color:"primary",children:H("launchBlocklet.viewApplication")}),B&&(0,j.jsx)(N.Z,{className:"last-button",href:B,"data-cy":"open-blocklet",children:H("common.open")})]})})}return X?(0,j.jsxs)(T,{children:[u&&(0,j.jsx)(y.Z,{title:H("launchBlocklet.introduction"),subTitle:H("launchBlocklet.welcome")}),(0,j.jsx)("div",{className:"app-content",children:(0,j.jsx)("div",{className:"agreement",children:(0,j.jsx)("div",{className:"agreement-content",children:(0,j.jsx)(h.Z,{blockletMeta:q,locale:J,handleDescEle:r})})})}),(0,j.jsx)("div",{className:"button-container","data-cy":"agree-all",children:(0,j.jsx)(m.Z,{onContinue:W,description:(0,j.jsx)(E,{}),texts:{listenName:H("launchBlocklet.license"),buttonNext:H("launchBlocklet.next")}})})]}):(0,j.jsx)(v.default,{relative:"parent",children:(0,j.jsx)(g.default,{})})}O.defaultProps={onClickNext:null,handleDescEle:"",showPageHeader:!0};var T=u.default.div(Z||(Z=(0,r.Z)(["\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n height: 100%;\n\n .app-content {\n padding: 2px 24px 24px;\n "," {\n padding-top: 10px;\n }\n width: 100%;\n flex: 1;\n letter-spacing: normal;\n }\n .agreement {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n border: 1px solid ",";\n border-radius: 12px;\n\n "," {\n margin-top: 24px;\n }\n\n "," {\n margin-top: 16px;\n }\n\n .agreement-content {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n font-size: 14px;\n overflow-y: auto;\n\n "," {\n padding: 0 24px;\n }\n\n "," {\n padding: 0 16px;\n }\n\n &:after {\n display: block;\n content: '';\n height: 24px;\n }\n }\n }\n .button-container {\n padding-top: 24px;\n padding-bottom: 34px;\n "," {\n padding-right: 24px;\n margin-left: auto;\n }\n "," {\n padding-top: 0;\n padding-bottom: 16px;\n }\n }\n"])),(function(e){return e.theme.breakpoints.down("md")}),(function(e){return e.theme.palette.grey[100]}),(function(e){return e.theme.breakpoints.up("md")}),(function(e){return e.theme.breakpoints.down("md")}),(function(e){return e.theme.breakpoints.up("md")}),(function(e){return e.theme.breakpoints.down("md")}),(function(e){return e.theme.breakpoints.up("md")}),(function(e){return e.theme.breakpoints.down("md")})),L=u.default.div(B||(B=(0,r.Z)(["\n .MuiButton-root {\n "," {\n min-width: 200px;\n }\n }\n .last-button {\n margin-left: ",";\n }\n"])),(function(e){return e.theme.breakpoints.up("md")}),(function(e){return e.theme.spacing(2)}))},99042:function(e,n,t){"use strict";t.d(n,{hi:function(){return a},od:function(){return o.a}});var r=t(95803),o=t.n(r);o().defaults.timeout=1e4;var a=o().create()},24658:function(e,n,t){"use strict";t.r(n),t.d(n,{default:function(){return Ue}});var r,o,a,i=t(71171),l=t(33028),c=t(32723),s=t(34795),u=t(96234),d=t(30969),f=t(13026),p=t(70048),m=t(19611),h=t.n(m),g=t(98169),x=t(75255),b=t(16380),k=t(42167),v=t(90445),y=t(71464),w=t(56229),A=t(17912),j=t(19006),E=t(47650),Z=t(52019),B=t(27321),C=t(5954),N=t(94604),O=b.default.div(r||(r=(0,i.Z)(["\n width: 100%;\n min-height: 100vh;\n padding: 20px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n"]))),T=t(76032),L=t.n(T),R=t(7017),M=t(23426),P=t(61802),S=t(98465),I=t(81721),D=t(37574);var U=b.default.a(o||(o=(0,i.Z)(["\n display: block;\n height: 36px;\n color: ",";\n"])),(function(e){return e.theme.palette.primary.main})),Q=(0,b.default)(S.Z)(a||(a=(0,i.Z)(["\n .app-info_desc {\n font-weight: 400;\n margin-top: 40px;\n font-size: 18px;\n line-height: 21px;\n color: #222222;\n }\n\n .body {\n text-align: center;\n }\n\n "," {\n .app-info_desc {\n font-size: 16px;\n }\n }\n\n .circle_icon {\n font-size: 58px;\n color: ",";\n }\n"])),(function(e){return e.theme.breakpoints.down("md")}),(function(e){return"error"===e.variant?e.theme.palette.error.main:e.theme.palette.success.main})),F=function(e){var n=e.blocklet,t=(0,k.useLocaleContext)().t,r=(0,C.h6)().info,o=(0,N.Z)(),a=decodeURIComponent(o.get("accessUrl")||"");return L()(n)?(0,D.jsx)(I.default,{relative:"parent",children:(0,D.jsx)(P.default,{})}):(0,D.jsx)(Q,{children:(0,D.jsx)("div",{className:"body",children:(0,D.jsx)(M.Z,{variant:"success",title:(0,R.getDisplayName)(n,!0),subTitle:t("launchBlocklet.installSuccess",{serverName:r.name}),footer:(0,D.jsx)(U,{href:a,rel:"noreferrer","data-cy":"open-blocklet",children:t("common.open")})})})})},H=t(4716),J=t(15888),z=t.n(J),X=t(60451),K=t.n(X),Y=t(43658),G=t(88412),W=t(7284),V=t(51193),q=t(43685),_=t(65724),$=t(47768),ee=t(54177),ne=t(25611),te=t(70662),re=t(66604),oe=t(98585),ae=t(4485),ie=t(78685),le=t(91519),ce=t(38657);function se(e){var n=e.onCancel,t=e.onUpgrade,r=(0,k.useLocaleContext)().t;return(0,D.jsx)(M.Z,{variant:"info",title:r("launchBlocklet.newVersion"),subTitle:r("launchBlocklet.newVersionDesc"),footer:(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(ce.Z,{onClick:n,variant:"outlined",children:r("launchBlocklet.later")}),(0,D.jsx)(ce.Z,{onClick:t,style:{marginLeft:24},children:r("launchBlocklet.upgradeNow")})]})})}se.defaultProps={onCancel:function(){},onUpgrade:function(){}};var ue=t(50692),de=t(57016),fe=Object.keys(_.BlockletStatus),pe=Object.values(_.BlockletStatus);function me(e){var n=(0,de.Z)(),t=(0,d.useState)({status:null,eventName:""}),r=(0,u.Z)(t,2),o=r[0],a=r[1];(0,d.useEffect)((function(){e&&null===o.status&&n.getBlocklet({input:{did:e}}).then((function(e){a({status:e.blocklet?e.blocklet.status:"",eventName:"",runtimeBlocklet:e.blocklet,isGetBlocklet:!0})}))}),[e,o.status]);return Object.values(_.BlockletEvents).forEach((function(n){(0,ue.mU)(n,function(n){return function(t){if(t.meta.did===e){var r={status:null,eventName:n,runtimeBlocklet:t};t.error?(r.status="error",r.error=t.error):r.status=fe[pe.indexOf(t.status)],a(r)}}}(n),[e])})),o}var he=t(24974),ge=t.n(he),xe=t(74364);function be(e){var n=e.blocklet,t=e.blockletMetaUrl,r=n.meta,o=r.did,a=r.logo;return a?(0,D.jsx)(xe.default,{src:(0,ie.aZ)({did:o,logoPath:a,baseUrl:new URL(t).origin}),fallback:"data:image/png;base64,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",width:64,size:"contain",placeholder:"application logo"}):(0,D.jsx)(q.default,{did:o,size:64})}be.propTypes={blocklet:ge().object.isRequired,blockletMetaUrl:ge().string.isRequired};var ke,ve,ye,we,Ae,je,Ee,Ze=t(39404),Be=t(99042);function Ce(e){var n,t,r=e.blocklet,o=(0,N.Z)(),a=(0,k.useLocaleContext)(),i=a.t,l=a.locale,p=L()(r)?null:(0,R.getDisplayName)(r,!0),m=(0,C.h6)(),g=m.api,x=m.info,b=m.loading,v=(0,ae.Tt)().session,y=(0,f.s0)(),w=(0,Y.default)("skip-blocklet-setup",!1),A=(0,u.Z)(w,1)[0],j=(0,d.useState)(!1),E=(0,u.Z)(j,2),Z=E[0],B=E[1],O=(0,d.useState)(!1),T=(0,u.Z)(O,2),M=T[0],S=T[1],U=(0,d.useState)(!1),Q=(0,u.Z)(U,2),F=Q[0],J=Q[1],X=(0,d.useState)(""),ue=(0,u.Z)(X,2),de=ue[0],fe=ue[1],pe=(0,d.useState)(null),he=(0,u.Z)(pe,2),ge=he[0],xe=he[1],ke=(0,d.useRef)(""),ve=(0,d.useState)({action:"",baseUrl:"",checkFn:function(){},extraParams:{}}),ye=(0,u.Z)(ve,2),we=ye[0],Ae=ye[1],je=(0,d.useState)(null),Ee=(0,u.Z)(je,2),Ce=Ee[0],Ne=Ee[1],Oe=me(v.user?null===r||void 0===r||null===(n=r.meta)||void 0===n?void 0:n.did:""),De=Oe.status,Ue=o.get("blocklet_meta_url"),Qe=new URL(Ue).origin,Fe=new URL(window.location.href).searchParams.get("from");(0,d.useEffect)((function(){return B(!!De)}),[!!De]);var He=function(){var e=(0,s.Z)((0,c.Z)().mark((function e(){var n,t,o,a;return(0,c.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=r.meta.registryUrl,t=(0,ie.GI)(n,x.blockletRegistryList),o=t.isNew,a=t.decoded,!o){e.next=5;break}return e.next=5,g.addBlockletStore({input:{url:a}});case 5:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),Je=function(){var e=(0,s.Z)((0,c.Z)().mark((function e(){var n,t,o,a,i,l,s,u,d,f,p;return(0,c.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return Ne(null),e.prev=1,e.next=4,He();case 4:e.next=9;break;case 6:e.prev=6,e.t0=e.catch(1),console.error("addNewRegistryToRegistryList error:",e.t0);case 9:if(!(v.user&&(v.user.permissions||[]).includes("mutate_blocklet"))||!r.isFree){e.next=16;break}return B(!0),J(!1),e.next=15,g.installBlocklet({input:{url:Ue}}).catch((function(e){ee.ZP.error((0,ie.Z)(e)),console.error("install blocklet failed",e)}));case 15:return e.abrupt("return");case 16:if(!r.isFree){e.next=20;break}Ae({action:"launch-free-blocklet-by-".concat((0,oe.getServerAuthMethod)(x)),baseUrl:void 0,checkFn:Be.od.create({baseURL:null!==(n=null===(t=window)||void 0===t||null===(o=t.env)||void 0===o?void 0:o.apiPrefix)&&void 0!==n?n:"/"}).get,extraParams:{blockletMetaUrl:Ue}}),e.next=33;break;case 20:if(null===v||void 0===v||!v.user){e.next=24;break}Ae({action:"verify-purchase-blocklet",baseUrl:new URL(Ue).origin,checkFn:Be.od.create({baseURL:new URL(Ue).origin}).get,extraParams:{serverDid:x.did,blockletDid:null===r||void 0===r||null===(a=r.meta)||void 0===a?void 0:a.did,blockletMetaUrl:Ue}}),e.next=33;break;case 24:return(d=new URL(window.location.href)).pathname=h()(null!==(i=null===(l=window)||void 0===l||null===(s=l.env)||void 0===s?void 0:s.apiPrefix)&&void 0!==i?i:"/","/api/did/launch-paid-blocklet-by-".concat((0,oe.getServerAuthMethod)(x),"/token")),d.searchParams.set("autoConnect",!1),d.searchParams.set("blockletMetaUrl",Ue),e.next=30,Be.hi.get(d.href);case 30:f=e.sent,p=f.data,Ae({action:"verify-purchase-blocklet",baseUrl:new URL(Ue).origin,checkFn:Be.od.create({baseURL:new URL(Ue).origin}).get,extraParams:{serverDid:x.did,blockletDid:null===r||void 0===r||null===(u=r.meta)||void 0===u?void 0:u.did,nw:p.url}});case 33:J(!0);case 34:case"end":return e.stop()}}),e,null,[[1,6]])})));return function(){return e.apply(this,arguments)}}(),ze=function(){var e=(0,s.Z)((0,c.Z)().mark((function e(n,t){var o,a,u,d,f,p,m,h;return(0,c.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(d=function(){return d=(0,s.Z)((0,c.Z)().mark((function e(n){return(0,c.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",(0,re.Z)((function(){return Be.hi.get(n).then(function(){var e=(0,s.Z)((0,c.Z)().mark((function e(n){var t;return(0,c.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("succeed"!==(t=n.data).status){e.next=5;break}return e.next=4,o(t.sessionToken);case 4:case 8:return e.abrupt("return",!0);case 5:if("error"!==t.status){e.next=9;break}return e.next=8,a(null===t||void 0===t?void 0:t.error);case 9:return e.abrupt("return",!1);case 10:case"end":return e.stop()}}),e)})));return function(n){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)},o=function(){var e=(0,s.Z)((0,c.Z)().mark((function e(n){return(0,c.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return ee.ZP.success(i("launchBlocklet.dialog.success",l)),localStorage.setItem("__sst",n),e.next=4,v.refresh();case 4:B(!0),J(!1);case 6:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),a=function(){var e=(0,s.Z)((0,c.Z)().mark((function e(n){return(0,c.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:ee.ZP.error(n),B(!1),J(!1);case 3:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),null===(f=we.extraParams)||void 0===f||!f.nw){e.next=11;break}return p=(0,ie.Pi)(f.nw),m=p.statusUrl,e.next=9,u(m);case 9:case 18:e.next=22;break;case 11:if(r.isFree||null!==f&&void 0!==f&&f.nw){e.next=20;break}return B(!0),J(!1),h={url:Ue,downloadTokenList:[]},null!==n&&void 0!==n&&n.downloadTokenList?h.downloadTokenList=t(n.downloadTokenList):null!==n&&void 0!==n&&n.downloadToken&&(h.downloadTokenList=[{did:r.meta.did,token:t(n.downloadToken)}]),e.next=18,g.installBlocklet({input:h});case 20:return e.next=22,o(t(n.sessionToken));case 22:case"end":return e.stop()}}),e)})));return function(n,t){return e.apply(this,arguments)}}(),Xe=function(e){var n="/blocklets/".concat(e.meta.did,"/configuration"),t="/launch-blocklet/complete?status=installed&name=".concat(encodeURIComponent(p),"&accessUrl=").concat(encodeURIComponent(n),"&blocklet_meta_url=").concat(Ue),r=o.get("from_launcher");r&&(t+="&from_launcher=".concat(r)),y(t)},Ke=function(){var e=(0,s.Z)((0,c.Z)().mark((function e(n){var t,a,i,l,s;return(0,c.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=n.interfaces.map((function(e){return e.url})),e.next=3,(0,ie.D)(a);case 3:if(i=e.sent,!L()(i)&&!A){e.next=7;break}return setTimeout((function(){Xe(n)}),1500),e.abrupt("return");case 7:(l=new URL(i)).searchParams.set("serverUrl",null===(t=(0,le.Ti)(r,x))||void 0===t?void 0:t.serverUrl),"running"!==n.status&&l.searchParams.set("__start__","1"),(s=o.get("from_launcher"))&&l.searchParams.set("from_launcher",s),fe(l.href),setTimeout((function(){window.location.href=l.href}),1500);case 14:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),Ye=(0,d.useMemo)((function(){var e;return function(n){clearTimeout(e),e=setTimeout((0,s.Z)((0,c.Z)().mark((function e(){var t,o;return(0,c.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t=n){e.next=6;break}return e.next=4,g.getBlocklet({input:{did:r.meta.did}});case 4:o=e.sent,t=o.blocklet;case 6:t&&(!ke.current&&K().gt(r.meta.version,t.meta.version)?z()(ge,{installedBlocklet:t})||xe({installedBlocklet:t}):Ke(t));case 7:case"end":return e.stop()}}),e)}))),1e3)}}),[g,null===r||void 0===r||null===(t=r.meta)||void 0===t?void 0:t.did,ge]),Ge=[i("launchBlocklet.waiting.verifying"),i("launchBlocklet.waiting.downloading"),i("launchBlocklet.waiting.extracting"),i("upgrading"===De?"common.upgrading":"launchBlocklet.waiting.installing"),i("launchBlocklet.waiting.done")],We=0,Ve=function(){return!M&&S(!0)},qe=function(){We=4,Ye(Oe.isGetBlocklet?Oe.runtimeBlocklet:null)};switch(De){case"waiting":We=1,Ve();break;case"downloading":We=2,Ve();break;case"installing":case"upgrading":We=3,Ve();break;case"installed":case"starting":case"running":case"stopped":qe();break;case"corrupted":case"error":var _e,$e={message:Oe.error.message,name:Oe.eventName};if([_.BlockletEvents.downloadFailed,_.BlockletEvents.installFailed].includes(Oe.eventName)?$e.action="retry":"error"!==De&&"corrupted"!==De||($e.action="view"),!z()($e,Ce))null!==Oe&&void 0!==Oe&&null!==(_e=Oe.error)&&void 0!==_e&&_e.message&&ee.ZP.error((0,ie.Z)(Oe.error)),Ne($e)}if(v.user&&null===De||L()(r)||b)return(0,D.jsx)(I.default,{relative:"parent",children:(0,D.jsx)(P.default,{})});if(Ce){var en={view:(0,D.jsx)(ce.Z,{className:"bottom-button",component:H.Link,to:"/blocklets/".concat(r.meta.did,"/overview"),"data-cy":"view-blocklet",color:"primary",variant:"contained",children:i("launchBlocklet.viewApplication")}),retry:(0,D.jsxs)(Se,{children:[(0,D.jsxs)(ce.Z,{className:"bottom-button","data-cy":"retry-install",disabled:F,onClick:Je,children:[F&&(0,D.jsx)(P.default,{size:[16,10]}),i("common.retry")]}),Fe&&(0,D.jsx)(ce.Z,{variant:"text",className:"bottom-button","data-cy":"go-back",disabled:F,onClick:function(){window.location.href=Fe},children:i("common.back")})]})},nn=Ce.name?Ce.name.replace("blocklet.",""):"installFailed";return(0,D.jsx)(Ie,{variant:"error",title:p,subTitle:(0,D.jsxs)(Pe,{children:[(0,D.jsx)("div",{children:i("launchBlocklet.error.".concat(nn))}),Ce.message&&(0,D.jsx)("div",{className:"error-desc",children:i("common.errorMessage")+Ce.message})]}),footer:en[Ce.action]})}var tn=function(){var e=(0,s.Z)((0,c.Z)().mark((function e(){var n;return(0,c.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n={did:r.meta.did,version:r.meta.version,registryUrl:Qe},ke.current="upgrade",xe(null),e.next=5,g.upgradeBlocklet({input:n});case 5:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}();if(ge)return(0,D.jsx)(se,{onCancel:function(){return S(!0),ke.current="cancel",xe(null),void Ke(ge.installedBlocklet)},onUpgrade:function(){return tn()}});if(!M&&("installed"===De||"running"===De))return(0,D.jsx)(Ie,{variant:"info",title:i("common.reminder"),subTitle:i("launchBlocklet.alreadyExists",{name:(0,R.getDisplayName)(r,!0)}),footer:(0,D.jsxs)(Re,{children:[!de&&(0,D.jsx)(P.default,{size:[16,10]}),de&&(0,D.jsx)(ce.Z,{className:"last-button",href:de,"data-cy":"open-blocklet",children:i("common.open")})]})});if(Z&&de||"cancel"===ke.current)return(0,D.jsx)(Ie,{variant:de?"success":"loading",title:de?p:"",subTitle:i("launchBlocklet.installSuccess",{serverName:x.name}),footer:de?(0,D.jsxs)(Me,{href:de,rel:"noreferrer","data-cy":"open-blocklet",children:[(0,D.jsx)(P.default,{size:[16,10],style:{marginRight:14}})," ",i("common.redirecting")]}):"",style:{marginBottom:34}});var rn=!Z&&!De;return(0,D.jsxs)(Te,{children:[(0,D.jsx)("div",{className:"header",children:!de&&(0,D.jsx)($.Z,{title:i(rn?"common.install":"common.installing"),subTitle:rn?i("launchBlocklet.subTitle",{appName:p,serverName:x.name}):""})}),(0,D.jsxs)("div",{className:"body",children:[rn&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsxs)("div",{className:"illustrations",children:[(0,D.jsx)("div",{className:"ills-block ills-block-left",children:(0,D.jsxs)("div",{className:"ills-block-inner",children:[(0,D.jsx)(be,{className:"i-icon",blocklet:r,blockletMetaUrl:Ue}),(0,D.jsx)("div",{className:"i-name",children:p})]})}),(0,D.jsx)(G.Z,{className:"arrow-icon"}),(0,D.jsx)("div",{className:"ills-block ills-block-right",children:(0,D.jsxs)("div",{className:"ills-block-inner",children:[(0,D.jsx)("img",{width:"64",height:"64",src:Ze.Z,alt:""}),(0,D.jsx)("div",{className:"i-name",children:x.name}),(0,D.jsx)(V.default,{size:12,prepend:(0,D.jsx)(q.default,{did:x.did,size:12,style:{marginRight:4}}),responsive:!1,compact:!0,children:x.did})]})})]}),(0,D.jsxs)(ce.Z,{className:"bottom-button","data-cy":"start-launch",disabled:F,onClick:Je,children:[F&&(0,D.jsx)(P.default,{size:[16,10]}),i("launchBlocklet.confirmInstall")]})]}),Z&&(0,D.jsx)(Le,{children:(0,D.jsx)(ne.Z,{increaseSpeed:.3,messageLoop:!1,message:(0,D.jsx)(te.Z,{steps:Ge,stepIndex:We,autoGrowth:4===We?1e3:4e3})})})]}),(0,D.jsx)(W.default,{open:F,popup:!0,saveConnect:!1,className:"connect",baseUrl:we.baseUrl,action:we.action,checkFn:we.checkFn,extraParams:we.extraParams,checkTimeout:6e5,socketUrl:g.socketUrl,webWalletUrl:(0,ie.yP)(x),onSuccess:ze,onClose:function(){return J(!1)},locale:l,messages:{title:"".concat(i("launchBlocklet.dialog.title")),scan:r.isFree?i("launchBlocklet.dialog.freeDescription"):i("launchBlocklet.dialog.nonFreeDescription"),confirm:i("launchBlocklet.dialog.confirm"),success:i("launchBlocklet.dialog.success")}})]})}var Ne,Oe,Te=(0,b.default)(S.Z)(ke||(ke=(0,i.Z)(["\n .body {\n align-items: center;\n animation: fadein ease 0.3s;\n }\n\n .illustrations {\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: start;\n text-align: center;\n margin-top: 16px;\n margin-bottom: 40px;\n width: 100%;\n }\n\n .ills-block,\n .ills-block-inner {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n flex: 1;\n }\n .ills-block {\n max-width: 220px;\n .i-icon {\n width: 64px;\n height: 64px;\n }\n\n .i-name {\n margin-top: 16px;\n font-weight: 400;\n font-size: 16px;\n color: #222222;\n }\n\n .i-sub-name {\n color: #999999;\n }\n }\n\n .arrow-icon {\n align-self: start;\n color: #c4c5ca;\n font-size: 30px;\n margin: 16px 0 0;\n "," {\n margin: 25px 24px 0;\n }\n }\n\n @keyframes fadein {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n"])),(function(e){return e.theme.breakpoints.down("md")})),Le=b.default.div(ve||(ve=(0,i.Z)(["\n color: #1dc1c7;\n"]))),Re=b.default.div(ye||(ye=(0,i.Z)(["\n .MuiButton-root {\n "," {\n min-width: 200px;\n }\n }\n .last-button {\n margin-left: ",";\n }\n"])),(function(e){return e.theme.breakpoints.up("md")}),(function(e){return e.theme.spacing(2)})),Me=b.default.a(we||(we=(0,i.Z)(["\n display: flex;\n justify-content: center;\n align-items: center;\n height: 36px;\n color: ",";\n"])),(function(e){return e.theme.palette.primary.main})),Pe=b.default.div(Ae||(Ae=(0,i.Z)(["\n line-height: 1.4em;\n .error-desc {\n margin-top: 8px;\n word-wrap: break-word;\n color: ",";\n }\n"])),(function(e){return e.theme.palette.grey[500]})),Se=b.default.div(je||(je=(0,i.Z)(["\n display: flex;\n justify-content: space-around;\n flex-wrap: wrap;\n button {\n margin: 0 10px 18px;\n }\n"]))),Ie=(0,b.default)(M.Z)(Ee||(Ee=(0,i.Z)(["\n .result-footer {\n height: auto;\n }\n"]))),De=t(71927);function Ue(){var e=(0,x.Z)((function(e){return e.breakpoints.down("md")})),n=(0,k.useLocaleContext)(),t=n.t,r=n.locale,o=(0,N.Z)(),a=(0,C.h6)(),i=a.api,m=a.info,b=!!o.get("from_launcher"),T=(0,ie.yP)(m),L=(0,d.useState)(""),R=(0,u.Z)(L,2),M=R[0],P=R[1],S=(o.get("blocklet_meta_url")||"").trim();S=decodeURIComponent(S);var I=(0,p.Z)((0,s.Z)((0,c.Z)().mark((function e(){var n,r,o,a,l;return(0,c.Z)().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(S){e.next=2;break}throw new Error(t("common.invalidParam"));case 2:return e.next=4,i.getBlockletMetaFromUrl({input:{url:S,checkPrice:!0}});case 4:if(n=e.sent,r=n.meta,o=n.isFree,a=n.isInstalled,l=n.isRunning,r){e.next=11;break}throw new Error(t("launchBlocklet.error.loadMetaFailed"));case 11:return e.abrupt("return",{meta:r,isFree:o,isInstalled:a,isRunning:l});case 12:case"end":return e.stop()}}),e)}))));if((0,d.useEffect)((function(){if(I.value&&m){var e=(0,le.Ti)(I.value,m);P(e.serverUrl)}}),[I.value,m]),I.error)return(0,D.jsx)(O,{children:(0,D.jsx)("div",{children:(0,D.jsx)(g.Z,{style:{width:"100%",wordBreak:"break-all"},variant:"icon",type:"error",children:I.error.message})})});var U=I.value||{},Q=U.meta,H=U.isFree,J=h()((0,ie.Y5)(),"/launch-blocklet"),z=[{key:"agreement",name:t("launchBlocklet.introduction"),path:h()(J,"agreement")},{key:"install",name:t("launchBlocklet.launch"),path:h()(J,"install")},{key:"setup",name:t("launchBlocklet.setup"),path:h()(J,"complete"),description:t("launchBlocklet.setupAppDesc")},{key:"complete",name:t("launchBlocklet.launched")}],X=function(){M&&window.open(M)},K=(0,D.jsx)(Fe,{className:"".concat(M?"logo-can-click":""),children:(0,D.jsx)(B.Z,{onClick:X,logo:e?(0,D.jsx)(j.Z,{width:"32",height:"32"}):(0,D.jsx)(E.Z,{width:"128",height:"48"})})});return b&&(z.splice(0,1,{key:"wizard",name:t("launchBlocklet.introduction")},{key:"select-node",name:t("launchBlocklet.selectAbtNode")}),K=(0,D.jsx)(Fe,{className:"".concat(M?"logo-can-click":""),children:(0,D.jsx)(B.Z,{logo:e?(0,D.jsx)(j.Z,{onClick:X,width:"32",height:"32"}):(0,D.jsx)(E.Z,{onClick:X,width:"128",height:"48"}),previousData:{logo:e?(0,D.jsx)(A.Z,{width:"32",height:"32"}):(0,D.jsx)(Z.Z,{width:"145",height:"48"})}})})),Q&&(Q.registryUrl=new URL(S).origin),(0,D.jsx)(y.StepProvider,{steps:z,children:(0,D.jsx)(v.Z,{locale:r,blockletMeta:(0,l.Z)((0,l.Z)({},Q),{},{isFree:H}),useOfSkeleton:!1,navLogo:K,headerEndAddons:(0,D.jsx)(w.Z,{webWalletUrl:T,SessionContext:ae.B3}),pcWidth:"80%",logoUrl:Q&&Q.logo?(0,ie.aZ)({did:Q.did,baseUrl:Q.registryUrl,logoPath:Q.logo}):null,children:(0,D.jsx)(Qe,{children:(0,D.jsxs)(f.Z5,{children:[(0,D.jsx)(f.AW,{path:"agreement",element:(0,D.jsx)(De.Z,{blocklet:I.value||{}})}),(0,D.jsx)(f.AW,{path:"install",element:(0,D.jsx)(Ce,{blocklet:I.value||{}})}),(0,D.jsx)(f.AW,{path:"complete",element:(0,D.jsx)(F,{blocklet:I.value||{}})}),(0,D.jsx)(f.AW,{path:"*",element:(0,D.jsx)(f.Fg,{to:"agreement".concat(window.location.search),replace:!0})})]})})})})}var Qe=b.default.div(Ne||(Ne=(0,i.Z)(["\n "," {\n padding-top: 34px;\n }\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n\n .bottom-button {\n min-width: 200px;\n }\n"])),(function(e){return e.theme.breakpoints.up("md")})),Fe=b.default.div(Oe||(Oe=(0,i.Z)(["\n margin-top: -1px;\n &.logo-can-click {\n cursor: pointer;\n }\n"])))},17128:function(e,n,t){var r=t(44765).Buffer,o=t(64029).types,a=t(2073).toHex,i=t(54186).fromPublicKey;e.exports=function(e){var n=a(r.from("string"===typeof e?e.trim():e));return i(n,{role:o.RoleType.ROLE_ANY})}},98465:function(e,n,t){"use strict";n.Z=p;var r,o=c(t(16380)),a=c(t(24974)),i=t(37574),l=["children"];function c(e){return e&&e.__esModule?e:{default:e}}function s(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function u(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?s(Object(t),!0).forEach((function(n){d(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):s(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function d(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function f(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function p(e){var n=e.children,t=f(e,l);return(0,i.jsx)(g,u(u({},t),{},{children:n}))}p.propTypes={children:a.default.any.isRequired};var m,h,g=o.default.div(r||(m=["\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n height: 100%;\n\n .header {\n text-align: center;\n }\n\n .body {\n display: flex;\n flex-direction: column;\n align-items: center;\n margin-top: 30px;\n width: 100%;\n min-height: 200px;\n flex: 1;\n\n "," {\n padding: 24px;\n }\n\n "," {\n padding: 0 16px 16px;\n }\n }\n\n .footer {\n display: flex;\n justify-content: center;\n\n "," {\n padding-bottom: 34px;\n }\n\n "," {\n margin-top: auto;\n padding-bottom: 10px;\n }\n }\n"],h||(h=m.slice(0)),r=Object.freeze(Object.defineProperties(m,{raw:{value:Object.freeze(h)}}))),(function(e){return e.theme.breakpoints.up("md")}),(function(e){return e.theme.breakpoints.down("md")}),(function(e){return e.theme.breakpoints.up("sm")}),(function(e){return e.theme.breakpoints.down("md")}))},27321:function(e,n,t){"use strict";n.Z=g;var r,o,a=u(t(24974)),i=u(t(16380)),l=t(37574),c=["logo","name","subname","previousData"],s=["logo"];function u(e){return e&&e.__esModule?e:{default:e}}function d(e,n){return n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}}))}function f(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function p(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?f(Object(t),!0).forEach((function(n){m(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):f(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function m(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function h(e,n){if(null==e)return{};var t,r,o=function(e,n){if(null==e)return{};var t,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)t=a[r],n.indexOf(t)>=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}function g(e){var n=e.logo,t=e.name,r=e.subname,o=e.previousData,a=h(e,c),i=(0,l.jsx)(x,{logo:n}),s=t,u=r;return o.logo&&(i=(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(x,{logo:n,className:"left-fade-in-ele"}),(0,l.jsx)(x,{logo:o.logo,className:"postion-abs left-fade-out-ele"})]})),o.name&&o.name!==t&&(s=(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("span",{className:"right-fade-in-ele",style:{display:"inline-block"},children:t}),(0,l.jsx)("span",{className:"postion-abs right-fade-out-ele",children:o.name})]})),o.subname&&o.subname!==r&&(u=(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)("span",{className:"right-fade-in-ele",style:{display:"inline-block"},children:r}),(0,l.jsx)("span",{className:"postion-abs right-fade-out-ele",children:o.subname})]})),(0,l.jsx)(k,p(p({},a),{},{children:(0,l.jsxs)("div",{className:"logo-inner",children:[(0,l.jsx)("div",{className:"logo-img-content",children:i}),(0,l.jsxs)("div",{className:"logo-info ".concat(t||r?"":"zero-left"),children:[(0,l.jsx)("div",{className:"logo-name",children:s}),(0,l.jsx)("div",{className:"logo-subname",children:u})]})]})}))}function x(e){var n=e.logo,t=h(e,s);return(0,l.jsx)(b,p(p({},t),{},{children:n}))}g.propTypes={logo:a.default.element.isRequired,name:a.default.string,subname:a.default.string,previousData:a.default.object},g.defaultProps={name:"",subname:"",previousData:{logo:"",name:"",subname:""}};var b=i.default.div(r||(r=d(["\n display: block;\n > * {\n display: block;\n }\n"]))),k=i.default.div(o||(o=d(["\n position: relative;\n display: block;\n\n .logo-inner {\n display: flex;\n align-items: center;\n height: 100%;\n .logo-img-content {\n position: relative;\n display: block;\n }\n .logo-info {\n display: flex;\n flex-direction: column;\n justify-content: center;\n margin-left: 10px;\n letter-spacing: 0.1px;\n &.zero-left {\n margin-left: 0%;\n }\n .logo-name {\n position: relative;\n line-height: 16px;\n font-size: 16px;\n color: #121319;\n }\n .logo-subname {\n position: relative;\n line-height: 13px;\n font-size: 13px;\n color: #7d8085;\n }\n }\n }\n\n .postion-abs {\n position: absolute;\n left: 0;\n top: 0;\n height: 100%;\n }\n\n .right-fade-out-ele {\n animation: right-fade-out ease 0.5s;\n animation-delay: 2s;\n animation-fill-mode: forwards;\n }\n\n .right-fade-in-ele {\n animation: right-fade-in ease 0.5s;\n animation-delay: 2s;\n animation-fill-mode: both;\n }\n\n @keyframes right-fade-out {\n 0% {\n opacity: 1;\n transform: translate(0, 0);\n }\n 100% {\n opacity: 0;\n transform: translate(8px, 0);\n }\n }\n\n @keyframes right-fade-in {\n 0% {\n opacity: 0;\n transform: translate(8px, 0);\n }\n 100% {\n opacity: 1;\n transform: translate(0, 0);\n }\n }\n\n .left-fade-out-ele {\n animation: left-fade-out ease 0.5s;\n animation-delay: 2s;\n animation-fill-mode: forwards;\n }\n\n .left-fade-in-ele {\n animation: left-fade-in ease 0.5s;\n animation-delay: 2s;\n animation-fill-mode: both;\n }\n\n @keyframes left-fade-out {\n 0% {\n opacity: 1;\n transform: translate(0, 0);\n }\n 100% {\n opacity: 0;\n transform: translate(-8px, 0);\n }\n }\n\n @keyframes left-fade-in {\n 0% {\n opacity: 0;\n transform: translate(-8px, 0);\n }\n 100% {\n opacity: 1;\n transform: translate(0, 0);\n }\n }\n"])))},86539:function(){},33196:function(){},38087:function(){},8092:function(){},50936:function(){},74854:function(){},66602:function(){}}]);
2
+ //# sourceMappingURL=2201.d7f0d0fb.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static/js/2201.d7f0d0fb.chunk.js","mappings":"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","sources":["components/blocklet/util.js","components/launch-blocklet/button.js","components/launch-blocklet/agreement-app.js","components/launch-blocklet/step-agreement.js","libs/api.js","components/launch-blocklet/center.js","components/launch-blocklet/step-complete.js","components/launch-blocklet/status/upgrade-available.js","contexts/runtime-blocklet-state.js","components/launch-blocklet/app-logo.js","components/launch-blocklet/step-install.js","pages/launch-blocklet/index.js","../../../blocklet/meta/lib/did.js","../../ux/lib/launch-blocklet/content-layout.js","../../ux/lib/nav-logo.js"],"sourcesContent":["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 { forwardRef } from 'react';\nimport Button from '@arcblock/ux/lib/Button';\nimport PropTypes from 'prop-types';\n\nfunction WrappedButton({ children, ...props }) {\n return (\n <Button variant=\"contained\" color=\"primary\" {...props}>\n {children}\n </Button>\n );\n}\n\nWrappedButton.propTypes = {\n children: PropTypes.any.isRequired,\n};\n\nexport default forwardRef((props, ref) => <WrappedButton {...props} forwardedRef={ref} />);\n","export default function AgreementApp({ ...props }) {\n return (\n <div {...props} style={{ width: '100%' }}>\n <h3>End User License Agreement for Application</h3>\n <p>Blocklet Server License Agreement ArcBlock, Inc. version 2020-08-28</p>\n <p>BLOCKLET SERVER LICENSE AGREEMENT</p>\n <p>暂无</p>\n </div>\n );\n}\n","import { useEffect, useState, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { useNavigate, Link } from 'react-router-dom';\nimport styled from '@emotion/styled';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { getDisplayName } from '@blocklet/meta/lib/util';\nimport ResultMessage from '@blocklet/launcher-layout/lib/launch-result-message';\nimport ServerEula from '@blocklet/launcher-layout/lib/wizard/server-eula';\nimport WizardDesc from '@blocklet/launcher-layout/lib/wizard/wizard-desc';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Alert from '@arcblock/ux/lib/Alert';\nimport isEmpty from 'lodash/isEmpty';\nimport Center from '@arcblock/ux/lib/Center';\n\nimport PageHeader from '@blocklet/launcher-layout/lib/page-header';\nimport { useNodeContext } from '../../contexts/node';\nimport AgreementApp from './agreement-app';\nimport { getAccessibleUrl } from '../../libs/util';\nimport Button from './button';\n\n// TODO: 加载 Blocklet 定义的 Agreement\nexport default function Agreement({ blocklet, onClickNext, handleDescEle, showPageHeader }) {\n const navigate = useNavigate();\n const [accessUrl, setAccessUrl] = useState(null);\n const [error, setError] = useState(null);\n const [accessUrlLoading, setAccessUrlLoading] = useState(false);\n const { t, locale } = useLocaleContext();\n const { info, api } = useNodeContext();\n const { isRunning } = blocklet;\n const loading = useMemo(() => isEmpty(blocklet) || accessUrlLoading, [blocklet, accessUrlLoading]);\n\n const clickNext =\n onClickNext ||\n (() => {\n navigate(`/launch-blocklet/install${window.location.search}`);\n });\n\n useEffect(() => {\n const onMount = async () => {\n try {\n setAccessUrlLoading(true);\n const { blocklet: b } = await api.getBlocklet({ input: { did: blocklet.meta.did } });\n const urls = b.interfaces.map(x => x.url);\n const accessUrlTmp = await getAccessibleUrl(urls);\n if (!accessUrlTmp && isEmpty(accessUrlTmp)) {\n setAccessUrl(null);\n return;\n }\n setAccessUrl(new URL(accessUrlTmp).href);\n } catch (err) {\n setError(err.message);\n } finally {\n setAccessUrlLoading(false);\n }\n };\n if (isRunning) {\n onMount();\n }\n // eslint-disable-next-line\n }, [blocklet]);\n\n if (error) {\n return (\n <Center relative=\"parent\">\n <div>\n <Alert style={{ wordBreak: 'break-all' }} variant=\"icon\" type=\"error\">\n {error}\n </Alert>\n </div>\n </Center>\n );\n }\n\n if (loading) {\n return (\n <Center relative=\"parent\">\n <Spinner />\n </Center>\n );\n }\n\n const data = blocklet.meta;\n const blockletMeta = { data };\n\n if (!data) {\n return (\n <Center relative=\"parent\">\n <Spinner />\n </Center>\n );\n }\n\n if (blocklet.isInstalled) {\n const already = accessUrl ? 'alreadyRunning' : 'alreadyInstalled';\n return (\n <ResultMessage\n variant=\"info\"\n title={t('common.reminder')}\n subTitle={t(`launchBlocklet.${already}`, { name: getDisplayName(blocklet, true) })}\n footer={\n <ButtonWrap>\n <Button\n data-cy=\"view-blocklet\"\n component={Link}\n to={`/blocklets/${blocklet.meta.did}/overview`}\n variant={accessUrl ? 'outlined' : 'contained'}\n color=\"primary\">\n {t('launchBlocklet.viewApplication')}\n </Button>\n {accessUrl && (\n <Button className=\"last-button\" href={accessUrl} data-cy=\"open-blocklet\">\n {t('common.open')}\n </Button>\n )}\n </ButtonWrap>\n }\n />\n );\n }\n\n if (!info) {\n return (\n <Center relative=\"parent\">\n <Spinner />\n </Center>\n );\n }\n\n return (\n <Container>\n {showPageHeader && <PageHeader title={t('launchBlocklet.introduction')} subTitle={t('launchBlocklet.welcome')} />}\n <div className=\"app-content\">\n <div className=\"agreement\">\n <div className=\"agreement-content\">\n <WizardDesc blockletMeta={blockletMeta} locale={locale} handleDescEle={handleDescEle} />\n </div>\n </div>\n </div>\n <div className=\"button-container\" data-cy=\"agree-all\">\n <ServerEula\n onContinue={clickNext}\n description={<AgreementApp />}\n texts={{\n listenName: t('launchBlocklet.license'),\n buttonNext: t('launchBlocklet.next'),\n }}\n />\n </div>\n </Container>\n );\n}\n\nAgreement.propTypes = {\n blocklet: PropTypes.object.isRequired,\n onClickNext: PropTypes.func,\n handleDescEle: PropTypes.node,\n showPageHeader: PropTypes.bool,\n};\n\nAgreement.defaultProps = {\n onClickNext: null,\n handleDescEle: '',\n showPageHeader: true,\n};\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 100%;\n height: 100%;\n\n .app-content {\n padding: 2px 24px 24px;\n ${props => props.theme.breakpoints.down('md')} {\n padding-top: 10px;\n }\n width: 100%;\n flex: 1;\n letter-spacing: normal;\n }\n .agreement {\n position: relative;\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n border: 1px solid ${props => props.theme.palette.grey['100']};\n border-radius: 12px;\n\n ${props => props.theme.breakpoints.up('md')} {\n margin-top: 24px;\n }\n\n ${props => props.theme.breakpoints.down('md')} {\n margin-top: 16px;\n }\n\n .agreement-content {\n position: absolute;\n left: 0;\n top: 0;\n width: 100%;\n height: 100%;\n font-size: 14px;\n overflow-y: auto;\n\n ${props => props.theme.breakpoints.up('md')} {\n padding: 0 24px;\n }\n\n ${props => props.theme.breakpoints.down('md')} {\n padding: 0 16px;\n }\n\n &:after {\n display: block;\n content: '';\n height: 24px;\n }\n }\n }\n .button-container {\n padding-top: 24px;\n padding-bottom: 34px;\n ${props => props.theme.breakpoints.up('md')} {\n padding-right: 24px;\n margin-left: auto;\n }\n ${props => props.theme.breakpoints.down('md')} {\n padding-top: 0;\n padding-bottom: 16px;\n }\n }\n`;\n\nconst ButtonWrap = styled.div`\n .MuiButton-root {\n ${props => props.theme.breakpoints.up('md')} {\n min-width: 200px;\n }\n }\n .last-button {\n margin-left: ${props => props.theme.spacing(2)};\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","import styled from '@emotion/styled';\n\nconst Center = styled.div`\n width: 100%;\n min-height: 100vh;\n padding: 20px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n`;\n\nexport default Center;\n","import styled from '@emotion/styled';\nimport PropTypes from 'prop-types';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { getDisplayName } from '@blocklet/meta/lib/util';\nimport ResultMessage from '@blocklet/launcher-layout/lib/launch-result-message';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport ContentLayout from '@abtnode/ux/lib/launch-blocklet/content-layout';\nimport Center from '@arcblock/ux/lib/Center';\n\nimport { useNodeContext } from '../../contexts/node';\nimport useQuery from '../../hooks/query';\n\nfunction Complete({ blocklet }) {\n const { t } = useLocaleContext();\n const { info } = useNodeContext();\n const query = useQuery();\n const accessUrl = decodeURIComponent(query.get('accessUrl') || '');\n\n if (isEmpty(blocklet)) {\n return (\n <Center relative=\"parent\">\n <Spinner />\n </Center>\n );\n }\n return (\n <Container>\n <div className=\"body\">\n <ResultMessage\n variant=\"success\"\n title={getDisplayName(blocklet, true)}\n subTitle={t('launchBlocklet.installSuccess', { serverName: info.name })}\n footer={\n <Link href={accessUrl} rel=\"noreferrer\" data-cy=\"open-blocklet\">\n {t('common.open')}\n </Link>\n }\n />\n </div>\n </Container>\n );\n}\n\nconst Link = styled.a`\n display: block;\n height: 36px;\n color: ${props => props.theme.palette.primary.main};\n`;\n\nconst Container = styled(ContentLayout)`\n .app-info_desc {\n font-weight: 400;\n margin-top: 40px;\n font-size: 18px;\n line-height: 21px;\n color: #222222;\n }\n\n .body {\n text-align: center;\n }\n\n ${props => {\n return props.theme.breakpoints.down('md');\n }} {\n .app-info_desc {\n font-size: 16px;\n }\n }\n\n .circle_icon {\n font-size: 58px;\n color: ${props => (props.variant === 'error' ? props.theme.palette.error.main : props.theme.palette.success.main)};\n }\n`;\n\nComplete.propTypes = {\n blocklet: PropTypes.object.isRequired,\n};\n\nexport default Complete;\n","import PropTypes from 'prop-types';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport ResultMessage from '@blocklet/launcher-layout/lib/launch-result-message';\nimport Button from '../button';\n\nexport default function Upgrade({ onCancel, onUpgrade }) {\n const { t } = useLocaleContext();\n\n return (\n <ResultMessage\n variant=\"info\"\n title={t('launchBlocklet.newVersion')}\n subTitle={t('launchBlocklet.newVersionDesc')}\n footer={\n <>\n <Button onClick={onCancel} variant=\"outlined\">\n {t('launchBlocklet.later')}\n </Button>\n <Button onClick={onUpgrade} style={{ marginLeft: 24 }}>\n {t('launchBlocklet.upgradeNow')}\n </Button>\n </>\n }\n />\n );\n}\n\nUpgrade.propTypes = {\n onCancel: PropTypes.func,\n onUpgrade: PropTypes.func,\n};\n\nUpgrade.defaultProps = {\n onCancel: () => {},\n onUpgrade: () => {},\n};\n","// 获取blocklet在节点上的状态\nimport { useState, useEffect } from 'react';\nimport { BlockletStatus, BlockletEvents } from '@blocklet/meta/lib/constants';\nimport { useSubscription } from '../libs/ws';\nimport getClient from '../libs/node';\n\n/**\n *\n * @see: https://github.com/ArcBlock/blocklet-server/blob/cd80b9e1617a9b3ced64120e015912f63ffef805/blocklet/meta/lib/constants.js#L10-L26\n * @typedef {{\n * meta: {\n * did: string,\n * },\n * status: number,\n * error?: {\n * message: string\n * },\n * }} RuntimeBlocklet\n * @returns\n */\n\nconst BlockletStatusKeys = Object.keys(BlockletStatus);\nconst BlockletStatusValues = Object.values(BlockletStatus);\n\n/**\n *\n * 请确保在登录状态下传入 blockletDid\n * @param {String} blockletDid 应用的did\n * @return {{\n * status: string\n * eventName: string,\n * }}\n */\nexport default function useRuntimeBlockletState(blockletDid) {\n const client = getClient();\n\n const [blockletState, setBlockletState] = useState({\n status: null, // null代表没有查找到状态,空字符串代表未安装\n eventName: '',\n // runtimeBlocklet: undefined,\n // error: undefined, // 当触发 error 事件,才会有这个数据\n });\n\n // 首次更新加载blocklet状态\n useEffect(() => {\n // 没有初始状态就主动查询一次\n if (blockletDid && blockletState.status === null) {\n client.getBlocklet({ input: { did: blockletDid } }).then(e => {\n setBlockletState({\n status: e.blocklet ? e.blocklet.status : '',\n eventName: '',\n runtimeBlocklet: e.blocklet,\n isGetBlocklet: true, // 证明是通过 getBlocklet 接口获取的数据\n });\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [blockletDid, blockletState.status]);\n\n const defaultBlockletEventHandler = blockletEventName => {\n return blocklet => {\n if (blocklet.meta.did === blockletDid) {\n const bState = {\n status: null,\n eventName: blockletEventName,\n runtimeBlocklet: blocklet,\n };\n\n if (blocklet.error) {\n bState.status = 'error';\n bState.error = blocklet.error;\n } else {\n bState.status = BlockletStatusKeys[BlockletStatusValues.indexOf(blocklet.status)];\n }\n setBlockletState(bState);\n }\n };\n };\n\n Object.values(BlockletEvents).forEach(blockletEventName => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useSubscription(blockletEventName, defaultBlockletEventHandler(blockletEventName), [blockletDid]);\n });\n\n return blockletState;\n}\n","import PropTypes from 'prop-types';\nimport Img from '@arcblock/ux/lib/Img';\nimport Avatar from '@arcblock/did-connect/lib/Avatar';\nimport defaultLogo from '../../assets/defaultLogo.png';\nimport { getBlockletLogoUrl } from '../../libs/util';\n\nexport default function AppLogo({ blocklet, blockletMetaUrl }) {\n const { did, logo: logoPath } = blocklet.meta;\n\n let content;\n\n if (logoPath) {\n content = (\n <Img\n src={getBlockletLogoUrl({\n did,\n logoPath,\n baseUrl: new URL(blockletMetaUrl).origin,\n })}\n fallback={defaultLogo}\n width={64}\n size=\"contain\"\n placeholder=\"application logo\"\n />\n );\n } else {\n content = <Avatar did={did} size={64} />;\n }\n\n return content;\n}\n\nAppLogo.propTypes = {\n blocklet: PropTypes.object.isRequired,\n blockletMetaUrl: PropTypes.string.isRequired,\n};\n","import { useEffect, useState, useMemo, useRef } from 'react';\nimport { useNavigate, Link } from 'react-router-dom';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqual from 'lodash/isEqual';\nimport PropTypes from 'prop-types';\nimport styled from '@emotion/styled';\nimport semver from 'semver';\nimport useLocalStorage from 'react-use/lib/useLocalStorage';\nimport ArrowForward from '@mui/icons-material/ArrowForward';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Center from '@arcblock/ux/lib/Center';\nimport Connect from '@arcblock/did-connect/lib/Connect';\nimport DidAddress from '@arcblock/did-connect/lib/Address';\nimport Avatar from '@arcblock/did-connect/lib/Avatar';\nimport { getDisplayName } from '@blocklet/meta/lib/util';\nimport { BlockletEvents } from '@blocklet/meta/lib/constants';\nimport LauncherResultMessage from '@blocklet/launcher-layout/lib/launch-result-message';\nimport PageHeader from '@blocklet/launcher-layout/lib/page-header';\nimport ContentLayout from '@abtnode/ux/lib/launch-blocklet/content-layout';\nimport Toast from '@abtnode/ux/lib/toast';\nimport AnimationWaiter from '@arcblock/ux/lib/AnimationWaiter';\nimport ProgressMessage from '@blocklet/launcher-ux/lib/progress-message';\nimport pWaitFor from 'p-wait-for';\nimport joinURL from 'url-join';\nimport { getServerAuthMethod } from '@abtnode/auth/lib/util/get-auth-method';\nimport { useNodeContext } from '../../contexts/node';\nimport { useSessionContext } from '../../contexts/session';\nimport {\n getWebWalletUrl,\n getAccessibleUrl,\n extractStatusUrlFromNextWorkflow,\n isNewRegistryUrl,\n formatError,\n} from '../../libs/util';\nimport { getLaunchURL } from '../blocklet/util';\nimport useQuery from '../../hooks/query';\nimport Button from './button';\nimport StatusUpgrade from './status/upgrade-available';\nimport useRuntimeBlockletState from '../../contexts/runtime-blocklet-state';\nimport AppLogo from './app-logo';\nimport serverLogo from '../../assets/logo.svg';\nimport { api as $api, axios } from '../../libs/api';\n\nexport default function Install({ blocklet }) {\n const query = useQuery();\n const { t, locale } = useLocaleContext();\n const blockletName = isEmpty(blocklet) ? null : getDisplayName(blocklet, true);\n const { api, info, loading: nodeLoading } = useNodeContext();\n const { session } = useSessionContext();\n const navigate = useNavigate();\n\n const [skipSetup] = useLocalStorage('skip-blocklet-setup', false);\n\n const [launching, setLaunching] = useState(false); // 进入安装状态的\n const [changeOfStatus, setChangeOfStatus] = useState(false);\n const [openAuth, setOpenAuth] = useState(false);\n const [nextAccessUrl, setNextAccessUrl] = useState('');\n\n const [upgradeAvailable, setUpgradeAvailable] = useState(null);\n const overUpgrade = useRef(''); // 点击过升级页面的操作(点击稍后或立即更新都算)\n\n const [connectData, setConnectData] = useState({\n action: '',\n baseUrl: '',\n checkFn: () => {},\n extraParams: {},\n });\n\n const [installError, setInstallError] = useState(null);\n\n const runtimeBlockletState = useRuntimeBlockletState(session.user ? blocklet?.meta?.did : '');\n const { status } = runtimeBlockletState;\n\n const blockletMetaUrl = query.get('blocklet_meta_url');\n const blockletRegistryUrl = new URL(blockletMetaUrl).origin;\n // 当前安装过程中的状态\n const fromUrl = new URL(window.location.href).searchParams.get('from');\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useEffect(() => setLaunching(!!status), [!!status]);\n\n const addNewRegistryToRegistryList = async () => {\n const {\n meta: { registryUrl },\n } = blocklet;\n\n const { isNew: isNewStoreRegistry, decoded } = isNewRegistryUrl(registryUrl, info.blockletRegistryList);\n\n // 未添加到 store registryList,进行添加\n if (isNewStoreRegistry) {\n await api.addBlockletStore({ input: { url: decoded } });\n }\n };\n\n const handleLaunchStart = async () => {\n setInstallError(null);\n\n try {\n await addNewRegistryToRegistryList();\n } catch (error) {\n console.error('addNewRegistryToRegistryList error:', error);\n }\n\n // start launch\n const isAuthorized = session.user && (session.user.permissions || []).includes('mutate_blocklet');\n if (isAuthorized && blocklet.isFree) {\n setLaunching(true);\n setOpenAuth(false);\n await api\n .installBlocklet({\n input: { url: blockletMetaUrl },\n })\n .catch(err => {\n Toast.error(formatError(err));\n console.error('install blocklet failed', err);\n });\n return;\n }\n\n if (blocklet.isFree) {\n setConnectData({\n action: `launch-free-blocklet-by-${getServerAuthMethod(info)}`,\n baseUrl: undefined,\n checkFn: axios.create({ baseURL: window?.env?.apiPrefix ?? '/' }).get,\n extraParams: {\n blockletMetaUrl,\n },\n });\n } else if (session?.user) {\n // 用户登录了,就无须再次检验用户的passport\n setConnectData({\n action: 'verify-purchase-blocklet',\n baseUrl: new URL(blockletMetaUrl).origin,\n checkFn: axios.create({ baseURL: new URL(blockletMetaUrl).origin }).get,\n extraParams: {\n serverDid: info.did,\n blockletDid: blocklet?.meta?.did,\n blockletMetaUrl,\n },\n });\n } else {\n // 付费应用走nextWorkflow流程\n const nextWorkflowUrl = new URL(window.location.href);\n nextWorkflowUrl.pathname = joinURL(\n window?.env?.apiPrefix ?? '/',\n `/api/did/launch-paid-blocklet-by-${getServerAuthMethod(info)}/token`\n );\n nextWorkflowUrl.searchParams.set('autoConnect', false);\n nextWorkflowUrl.searchParams.set('blockletMetaUrl', blockletMetaUrl);\n const { data } = await $api.get(nextWorkflowUrl.href);\n\n setConnectData({\n action: 'verify-purchase-blocklet',\n baseUrl: new URL(blockletMetaUrl).origin,\n checkFn: axios.create({ baseURL: new URL(blockletMetaUrl).origin }).get,\n extraParams: {\n serverDid: info.did,\n blockletDid: blocklet?.meta?.did,\n nw: data.url,\n },\n });\n }\n setOpenAuth(true);\n };\n\n const handleConnectSuccess = async (result, decrypt) => {\n const success = async decryptedSessionToken => {\n Toast.success(t('launchBlocklet.dialog.success', locale));\n\n localStorage.setItem('__sst', decryptedSessionToken);\n await session.refresh();\n setLaunching(true);\n setOpenAuth(false);\n };\n\n const failure = async errorMessage => {\n Toast.error(errorMessage);\n setLaunching(false);\n setOpenAuth(false);\n };\n\n async function handleConnectSessionStatus(url) {\n return pWaitFor(\n () => {\n return $api.get(url).then(async ({ data }) => {\n if (data.status === 'succeed') {\n await success(data.sessionToken);\n return true;\n }\n if (data.status === 'error') {\n await failure(data?.error);\n return true;\n }\n return false;\n });\n },\n {\n interval: 1000,\n }\n );\n }\n\n const { extraParams } = connectData;\n\n if (extraParams?.nw) {\n const { statusUrl } = extractStatusUrlFromNextWorkflow(extraParams.nw);\n // 通过轮询获取状态\n await handleConnectSessionStatus(statusUrl);\n } else if (!blocklet.isFree && !extraParams?.nw) {\n // 付费应用不走nw流程,说明用户在已登录的情况下去安装一个付费应用,需要在前端触发应用的下载\n setLaunching(true);\n setOpenAuth(false);\n\n const input = {\n url: blockletMetaUrl,\n downloadTokenList: [],\n };\n\n if (result?.downloadTokenList) {\n input.downloadTokenList = decrypt(result.downloadTokenList);\n } else if (result?.downloadToken) {\n // backward compatibility for blocklet store\n input.downloadTokenList = [\n {\n did: blocklet.meta.did,\n token: decrypt(result.downloadToken),\n },\n ];\n }\n\n await api.installBlocklet({\n input,\n });\n } else {\n await success(decrypt(result.sessionToken));\n }\n };\n const redirectToBlockletOverview = b => {\n const accessUrl = `/blocklets/${b.meta.did}/configuration`;\n let nextUrl = `/launch-blocklet/complete?status=installed&name=${encodeURIComponent(\n blockletName\n )}&accessUrl=${encodeURIComponent(accessUrl)}&blocklet_meta_url=${blockletMetaUrl}`;\n\n const fromLauncher = query.get('from_launcher');\n if (fromLauncher) {\n nextUrl += `&from_launcher=${fromLauncher}`;\n }\n navigate(nextUrl);\n };\n\n // 跳转到下一步\n const visitBlocklet = async b => {\n const urls = b.interfaces.map(x => x.url);\n const accessUrl = await getAccessibleUrl(urls);\n\n if (isEmpty(accessUrl) || skipSetup) {\n setTimeout(() => {\n redirectToBlockletOverview(b);\n }, 1500);\n return;\n }\n\n const url = new URL(accessUrl);\n // install blocklet 并跳转到 blocklet setup 界面时携带 serverUrl 查询参数\n url.searchParams.set('serverUrl', getLaunchURL(blocklet, info)?.serverUrl);\n\n if (b.status !== 'running') {\n url.searchParams.set('__start__', '1');\n }\n\n const fromLauncher = query.get('from_launcher');\n if (fromLauncher) {\n url.searchParams.set('from_launcher', fromLauncher);\n }\n\n setNextAccessUrl(url.href);\n\n setTimeout(() => {\n window.location.href = url.href;\n }, 1500);\n };\n\n const checkBlockletCanNext = useMemo(() => {\n let timer;\n\n // wait Blocklet Services state updated\n const timeout = 1000;\n\n return _installedBlocklet => {\n clearTimeout(timer);\n timer = setTimeout(async () => {\n let installedBlocklet = _installedBlocklet;\n if (!installedBlocklet) {\n const meta = await api.getBlocklet({ input: { did: blocklet.meta.did } });\n installedBlocklet = meta.blocklet;\n }\n\n if (installedBlocklet) {\n if (!overUpgrade.current && semver.gt(blocklet.meta.version, installedBlocklet.meta.version)) {\n // 安装的版本不是最新的\n if (!isEqual(upgradeAvailable, { installedBlocklet })) {\n setUpgradeAvailable({ installedBlocklet });\n }\n } else {\n visitBlocklet(installedBlocklet);\n }\n }\n }, timeout);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [api, blocklet?.meta?.did, upgradeAvailable]);\n\n const progressSteps = [\n t('launchBlocklet.waiting.verifying'),\n t('launchBlocklet.waiting.downloading'),\n t('launchBlocklet.waiting.extracting'),\n status === 'upgrading' ? t('common.upgrading') : t('launchBlocklet.waiting.installing'),\n t('launchBlocklet.waiting.done'),\n ];\n\n let installProgressIndex = 0;\n\n const changeStatus = () => !changeOfStatus && setChangeOfStatus(true);\n\n const handleInstalledProgress = () => {\n installProgressIndex = 4;\n checkBlockletCanNext(runtimeBlockletState.isGetBlocklet ? runtimeBlockletState.runtimeBlocklet : null);\n };\n\n switch (status) {\n case 'waiting':\n installProgressIndex = 1;\n changeStatus();\n break;\n case 'downloading':\n installProgressIndex = 2;\n changeStatus();\n break;\n case 'installing':\n case 'upgrading':\n installProgressIndex = 3;\n changeStatus();\n break;\n case 'installed':\n handleInstalledProgress();\n break;\n case 'starting':\n handleInstalledProgress();\n break;\n case 'running':\n handleInstalledProgress();\n break;\n case 'stopped':\n handleInstalledProgress();\n break;\n case 'corrupted':\n case 'error':\n // WARN: 暂时不要直接使用 runtimeBlockletState 的 error 数据;\n // 当下载中失败时,core/webapp/src/libs/ws.js 触发downloadFailed后,会更新一次 downloading,会让 error 被清理;所以error后,要通过 setState(setInstallError) 保存后使用;\n {\n const errorData = {\n message: runtimeBlockletState.error.message,\n name: runtimeBlockletState.eventName,\n };\n\n if ([BlockletEvents.downloadFailed, BlockletEvents.installFailed].includes(runtimeBlockletState.eventName)) {\n errorData.action = 'retry';\n } else if (status === 'error' || status === 'corrupted') {\n errorData.action = 'view';\n }\n if (!isEqual(errorData, installError)) {\n if (runtimeBlockletState?.error?.message) {\n Toast.error(formatError(runtimeBlockletState.error));\n }\n setInstallError(errorData);\n }\n }\n\n break;\n default:\n }\n\n if ((session.user && status === null) || isEmpty(blocklet) || nodeLoading) {\n return (\n <Center relative=\"parent\">\n <Spinner />\n </Center>\n );\n }\n\n if (installError) {\n const errorActions = {\n view: (\n <Button\n className=\"bottom-button\"\n component={Link}\n to={`/blocklets/${blocklet.meta.did}/overview`}\n data-cy=\"view-blocklet\"\n color=\"primary\"\n variant=\"contained\">\n {t('launchBlocklet.viewApplication')}\n </Button>\n ),\n retry: (\n <ButtonContainer>\n <Button className=\"bottom-button\" data-cy=\"retry-install\" disabled={openAuth} onClick={handleLaunchStart}>\n {openAuth && <Spinner size={[16, 10]} />}\n {t('common.retry')}\n </Button>\n {fromUrl && (\n <Button\n variant=\"text\"\n className=\"bottom-button\"\n data-cy=\"go-back\"\n disabled={openAuth}\n onClick={() => {\n window.location.href = fromUrl;\n }}>\n {t('common.back')}\n </Button>\n )}\n </ButtonContainer>\n ),\n };\n\n const errorEventName = installError.name ? installError.name.replace('blocklet.', '') : 'installFailed';\n\n return (\n <ResultMessage\n variant=\"error\"\n title={blockletName}\n subTitle={\n <ErrorMessageSub>\n <div>{t(`launchBlocklet.error.${errorEventName}`)}</div>\n {installError.message && (\n <div className=\"error-desc\">{t('common.errorMessage') + installError.message}</div>\n )}\n </ErrorMessageSub>\n }\n footer={errorActions[installError.action]}\n />\n );\n }\n\n const handleCancelUpgrade = () => {\n setChangeOfStatus(true);\n overUpgrade.current = 'cancel';\n setUpgradeAvailable(null);\n visitBlocklet(upgradeAvailable.installedBlocklet);\n };\n const handleUpgrade = async () => {\n const input = {\n did: blocklet.meta.did,\n version: blocklet.meta.version,\n registryUrl: blockletRegistryUrl,\n };\n\n overUpgrade.current = 'upgrade';\n setUpgradeAvailable(null);\n\n await api.upgradeBlocklet({ input });\n };\n\n if (upgradeAvailable) {\n return <StatusUpgrade onCancel={() => handleCancelUpgrade()} onUpgrade={() => handleUpgrade()} />;\n }\n\n if (!changeOfStatus && (status === 'installed' || status === 'running')) {\n return (\n <ResultMessage\n variant=\"info\"\n title={t('common.reminder')}\n subTitle={t('launchBlocklet.alreadyExists', { name: getDisplayName(blocklet, true) })}\n footer={\n <ButtonWrap>\n {!nextAccessUrl && <Spinner size={[16, 10]} />}\n {nextAccessUrl && (\n <Button className=\"last-button\" href={nextAccessUrl} data-cy=\"open-blocklet\">\n {t('common.open')}\n </Button>\n )}\n </ButtonWrap>\n }\n />\n );\n }\n\n if ((launching && nextAccessUrl) || overUpgrade.current === 'cancel') {\n return (\n <ResultMessage\n variant={nextAccessUrl ? 'success' : 'loading'}\n title={nextAccessUrl ? blockletName : ''}\n subTitle={t('launchBlocklet.installSuccess', { serverName: info.name })}\n footer={\n nextAccessUrl ? (\n <LinkEle href={nextAccessUrl} rel=\"noreferrer\" data-cy=\"open-blocklet\">\n <Spinner size={[16, 10]} style={{ marginRight: 14 }} /> {t('common.redirecting')}\n </LinkEle>\n ) : (\n ''\n )\n }\n style={{ marginBottom: 34 }}\n />\n );\n }\n\n const showInstall = !launching && !status;\n\n return (\n <Container>\n <div className=\"header\">\n {!nextAccessUrl && (\n <PageHeader\n title={showInstall ? t('common.install') : t('common.installing')}\n subTitle={showInstall ? t('launchBlocklet.subTitle', { appName: blockletName, serverName: info.name }) : ''}\n />\n )}\n </div>\n <div className=\"body\">\n {showInstall && (\n <>\n <div className=\"illustrations\">\n <div className=\"ills-block ills-block-left\">\n <div className=\"ills-block-inner\">\n <AppLogo className=\"i-icon\" blocklet={blocklet} blockletMetaUrl={blockletMetaUrl} />\n <div className=\"i-name\">{blockletName}</div>\n </div>\n </div>\n <ArrowForward className=\"arrow-icon\" />\n <div className=\"ills-block ills-block-right\">\n <div className=\"ills-block-inner\">\n <img width=\"64\" height=\"64\" src={serverLogo} alt=\"\" />\n <div className=\"i-name\">{info.name}</div>\n <DidAddress\n size={12}\n prepend={<Avatar did={info.did} size={12} style={{ marginRight: 4 }} />}\n responsive={false}\n compact>\n {info.did}\n </DidAddress>\n </div>\n </div>\n </div>\n <Button className=\"bottom-button\" data-cy=\"start-launch\" disabled={openAuth} onClick={handleLaunchStart}>\n {openAuth && <Spinner size={[16, 10]} />}\n {t('launchBlocklet.confirmInstall')}\n </Button>\n </>\n )}\n {launching && (\n <WaiterContainer>\n <AnimationWaiter\n increaseSpeed={0.3}\n messageLoop={false}\n message={\n <ProgressMessage\n steps={progressSteps}\n stepIndex={installProgressIndex}\n autoGrowth={installProgressIndex === 4 ? 1000 : 4000}\n />\n }\n />\n </WaiterContainer>\n )}\n </div>\n <Connect\n open={openAuth}\n popup\n saveConnect={false}\n className=\"connect\"\n baseUrl={connectData.baseUrl}\n action={connectData.action}\n checkFn={connectData.checkFn}\n extraParams={connectData.extraParams}\n checkTimeout={10 * 60 * 1000}\n socketUrl={api.socketUrl}\n webWalletUrl={getWebWalletUrl(info)}\n onSuccess={handleConnectSuccess}\n onClose={() => setOpenAuth(false)}\n locale={locale}\n messages={{\n title: `${t('launchBlocklet.dialog.title')}`,\n scan: blocklet.isFree\n ? t('launchBlocklet.dialog.freeDescription')\n : t('launchBlocklet.dialog.nonFreeDescription'),\n confirm: t('launchBlocklet.dialog.confirm'),\n success: t('launchBlocklet.dialog.success'),\n }}\n />\n </Container>\n );\n}\n\nInstall.propTypes = {\n blocklet: PropTypes.object.isRequired,\n};\n\nconst Container = styled(ContentLayout)`\n .body {\n align-items: center;\n animation: fadein ease 0.3s;\n }\n\n .illustrations {\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: start;\n text-align: center;\n margin-top: 16px;\n margin-bottom: 40px;\n width: 100%;\n }\n\n .ills-block,\n .ills-block-inner {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n flex: 1;\n }\n .ills-block {\n max-width: 220px;\n .i-icon {\n width: 64px;\n height: 64px;\n }\n\n .i-name {\n margin-top: 16px;\n font-weight: 400;\n font-size: 16px;\n color: #222222;\n }\n\n .i-sub-name {\n color: #999999;\n }\n }\n\n .arrow-icon {\n align-self: start;\n color: #c4c5ca;\n font-size: 30px;\n margin: 16px 0 0;\n ${props => props.theme.breakpoints.down('md')} {\n margin: 25px 24px 0;\n }\n }\n\n @keyframes fadein {\n 0% {\n opacity: 0;\n }\n 100% {\n opacity: 1;\n }\n }\n`;\n\nconst WaiterContainer = styled.div`\n color: #1dc1c7;\n`;\n\nconst ButtonWrap = styled.div`\n .MuiButton-root {\n ${props => props.theme.breakpoints.up('md')} {\n min-width: 200px;\n }\n }\n .last-button {\n margin-left: ${props => props.theme.spacing(2)};\n }\n`;\n\nconst LinkEle = styled.a`\n display: flex;\n justify-content: center;\n align-items: center;\n height: 36px;\n color: ${props => props.theme.palette.primary.main};\n`;\n\nconst ErrorMessageSub = styled.div`\n line-height: 1.4em;\n .error-desc {\n margin-top: 8px;\n word-wrap: break-word;\n color: ${props => props.theme.palette.grey[500]};\n }\n`;\n\nconst ButtonContainer = styled.div`\n display: flex;\n justify-content: space-around;\n flex-wrap: wrap;\n button {\n margin: 0 10px 18px;\n }\n`;\n\nconst ResultMessage = styled(LauncherResultMessage)`\n .result-footer {\n height: auto;\n }\n`;\n","import { useEffect, useState } from 'react';\nimport { Routes, Route, Navigate } from 'react-router-dom';\nimport { useAsync } from 'react-use';\nimport joinUrl from 'url-join';\nimport Alert from '@arcblock/ux/lib/Alert';\nimport useMediaQuery from '@mui/material/useMediaQuery';\nimport styled from '@emotion/styled';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Layout from '@blocklet/launcher-layout';\nimport { StepProvider } from '@blocklet/launcher-layout/lib/context/step';\nimport HeaderAddon from '@abtnode/ux/lib/layout/addon';\nimport LauncherLogoNotext from '@arcblock/icons/lib/LauncherLogoNotext';\nimport ServerLogoNotext from '@arcblock/icons/lib/ServerLogoNotext';\nimport ServerLogo from '@arcblock/icons/lib/ServerLogo';\nimport LauncherLogo from '@arcblock/icons/lib/LauncherLogo';\nimport NavLogo from '@abtnode/ux/lib/nav-logo';\nimport { useNodeContext } from '../../contexts/node';\nimport useQuery from '../../hooks/query';\n\nimport Center from '../../components/launch-blocklet/center';\nimport Complete from '../../components/launch-blocklet/step-complete';\nimport Install from '../../components/launch-blocklet/step-install';\nimport Agreement from '../../components/launch-blocklet/step-agreement';\nimport { getBlockletLogoUrl, getPathPrefix, getWebWalletUrl } from '../../libs/util';\nimport { SessionContext } from '../../contexts/session';\nimport { getLaunchURL } from '../../components/blocklet/util';\n\n// TODO: add skeleton here\nexport default function BlockletLauncher() {\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('md'));\n const { t, locale } = useLocaleContext();\n const query = useQuery();\n const { api, info } = useNodeContext();\n const fromLauncher = !!query.get('from_launcher');\n const webWalletUrl = getWebWalletUrl(info);\n const [serverUrl, setServerUrl] = useState('');\n\n const path = '/launch-blocklet';\n\n let url = (query.get('blocklet_meta_url') || '').trim();\n url = decodeURIComponent(url);\n\n const state = useAsync(async () => {\n if (!url) {\n throw new Error(t('common.invalidParam'));\n }\n\n const { meta, isFree, isInstalled, isRunning } = await api.getBlockletMetaFromUrl({\n input: { url, checkPrice: true },\n });\n if (!meta) {\n throw new Error(t('launchBlocklet.error.loadMetaFailed'));\n }\n\n return { meta, isFree, isInstalled, isRunning };\n });\n\n useEffect(() => {\n if (state.value && info) {\n const urlInfo = getLaunchURL(state.value, info);\n setServerUrl(urlInfo.serverUrl);\n }\n }, [state.value, info]);\n\n if (state.error) {\n return (\n <Center>\n <div>\n <Alert style={{ width: '100%', wordBreak: 'break-all' }} variant=\"icon\" type=\"error\">\n {state.error.message}\n </Alert>\n </div>\n </Center>\n );\n }\n\n const { meta, isFree } = state.value || {};\n const basePath = joinUrl(getPathPrefix(), path);\n const steps = [\n {\n key: 'agreement',\n name: t('launchBlocklet.introduction'),\n path: joinUrl(basePath, 'agreement'),\n },\n {\n key: 'install',\n name: t('launchBlocklet.launch'),\n path: joinUrl(basePath, 'install'),\n },\n {\n key: 'setup',\n name: t('launchBlocklet.setup'),\n path: joinUrl(basePath, 'complete'),\n description: t('launchBlocklet.setupAppDesc'),\n },\n {\n key: 'complete',\n name: t('launchBlocklet.launched'),\n },\n ];\n\n const clickLogo = () => {\n if (serverUrl) {\n window.open(serverUrl);\n }\n };\n\n let navLogo = (\n <LogoContainer className={`${serverUrl ? 'logo-can-click' : ''}`}>\n <NavLogo\n onClick={clickLogo}\n logo={!isMobile ? <ServerLogo width=\"128\" height=\"48\" /> : <ServerLogoNotext width=\"32\" height=\"32\" />}\n />\n </LogoContainer>\n );\n\n // 从launcher 代表已经同意了 blocklet agreement\n if (fromLauncher) {\n steps.splice(\n 0,\n 1,\n {\n key: 'wizard',\n name: t('launchBlocklet.introduction'),\n },\n {\n key: 'select-node',\n name: t('launchBlocklet.selectAbtNode'),\n }\n );\n\n navLogo = (\n <LogoContainer className={`${serverUrl ? 'logo-can-click' : ''}`}>\n <NavLogo\n logo={\n !isMobile ? (\n <ServerLogo onClick={clickLogo} width=\"128\" height=\"48\" />\n ) : (\n <ServerLogoNotext onClick={clickLogo} width=\"32\" height=\"32\" />\n )\n }\n previousData={{\n logo: !isMobile ? <LauncherLogo width=\"145\" height=\"48\" /> : <LauncherLogoNotext width=\"32\" height=\"32\" />,\n }}\n />\n </LogoContainer>\n );\n }\n\n if (meta) {\n meta.registryUrl = new URL(url).origin;\n }\n\n return (\n <StepProvider steps={steps}>\n <Layout\n locale={locale}\n blockletMeta={{ ...meta, isFree }}\n useOfSkeleton={false}\n navLogo={navLogo}\n headerEndAddons={<HeaderAddon webWalletUrl={webWalletUrl} SessionContext={SessionContext} />}\n pcWidth=\"80%\"\n logoUrl={\n meta && meta.logo\n ? getBlockletLogoUrl({\n did: meta.did,\n baseUrl: meta.registryUrl,\n logoPath: meta.logo,\n })\n : null\n }>\n <Content>\n <Routes>\n <Route path=\"agreement\" element={<Agreement blocklet={state.value || {}} />} />\n <Route path=\"install\" element={<Install blocklet={state.value || {}} />} />\n <Route path=\"complete\" element={<Complete blocklet={state.value || {}} />} />\n <Route path=\"*\" element={<Navigate to={`agreement${window.location.search}`} replace />} />\n </Routes>\n </Content>\n </Layout>\n </StepProvider>\n );\n}\n\nconst Content = styled.div`\n ${props => props.theme.breakpoints.up('md')} {\n padding-top: 34px;\n }\n width: 100%;\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n align-items: flex-start;\n\n .bottom-button {\n min-width: 200px;\n }\n`;\n\nconst LogoContainer = styled.div`\n margin-top: -1px;\n &.logo-can-click {\n cursor: pointer;\n }\n`;\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","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = ContentLayout;\n\nvar _styled = _interopRequireDefault(require(\"@emotion/styled\"));\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nvar _templateObject;\n\nconst _excluded = [\"children\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction ContentLayout(_ref) {\n let {\n children\n } = _ref,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/(0, _jsxRuntime.jsx)(Container, _objectSpread(_objectSpread({}, props), {}, {\n children: children\n }));\n}\n\nContentLayout.propTypes = {\n children: _propTypes.default.any.isRequired\n};\n\nconst Container = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral([\"\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n width: 100%;\\n height: 100%;\\n\\n .header {\\n text-align: center;\\n }\\n\\n .body {\\n display: flex;\\n flex-direction: column;\\n align-items: center;\\n margin-top: 30px;\\n width: 100%;\\n min-height: 200px;\\n flex: 1;\\n\\n \", \" {\\n padding: 24px;\\n }\\n\\n \", \" {\\n padding: 0 16px 16px;\\n }\\n }\\n\\n .footer {\\n display: flex;\\n justify-content: center;\\n\\n \", \" {\\n padding-bottom: 34px;\\n }\\n\\n \", \" {\\n margin-top: auto;\\n padding-bottom: 10px;\\n }\\n }\\n\"])), props => props.theme.breakpoints.up('md'), props => props.theme.breakpoints.down('md'), props => props.theme.breakpoints.up('sm'), props => props.theme.breakpoints.down('md'));","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = LogoContainer;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nvar _styled = _interopRequireDefault(require(\"@emotion/styled\"));\n\nvar _jsxRuntime = require(\"react/jsx-runtime\");\n\nvar _templateObject, _templateObject2;\n\nconst _excluded = [\"logo\", \"name\", \"subname\", \"previousData\"],\n _excluded2 = [\"logo\"];\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction LogoContainer(_ref) {\n let {\n logo,\n name,\n subname,\n previousData\n } = _ref,\n rest = _objectWithoutProperties(_ref, _excluded);\n\n let logoEle = /*#__PURE__*/(0, _jsxRuntime.jsx)(LogoImg, {\n logo: logo\n });\n let nameEle = name;\n let subnameEle = subname;\n\n if (previousData.logo) {\n logoEle = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {\n children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(LogoImg, {\n logo: logo,\n className: \"left-fade-in-ele\"\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(LogoImg, {\n logo: previousData.logo,\n className: \"postion-abs left-fade-out-ele\"\n })]\n });\n }\n\n if (previousData.name && previousData.name !== name) {\n nameEle = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {\n children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(\"span\", {\n className: \"right-fade-in-ele\",\n style: {\n display: 'inline-block'\n },\n children: name\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(\"span\", {\n className: \"postion-abs right-fade-out-ele\",\n children: previousData.name\n })]\n });\n }\n\n if (previousData.subname && previousData.subname !== subname) {\n subnameEle = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {\n children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(\"span\", {\n className: \"right-fade-in-ele\",\n style: {\n display: 'inline-block'\n },\n children: subname\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(\"span\", {\n className: \"postion-abs right-fade-out-ele\",\n children: previousData.subname\n })]\n });\n }\n\n return /*#__PURE__*/(0, _jsxRuntime.jsx)(Container, _objectSpread(_objectSpread({}, rest), {}, {\n children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(\"div\", {\n className: \"logo-inner\",\n children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(\"div\", {\n className: \"logo-img-content\",\n children: logoEle\n }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(\"div\", {\n className: \"logo-info \".concat(!name && !subname ? 'zero-left' : ''),\n children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(\"div\", {\n className: \"logo-name\",\n children: nameEle\n }), /*#__PURE__*/(0, _jsxRuntime.jsx)(\"div\", {\n className: \"logo-subname\",\n children: subnameEle\n })]\n })]\n })\n }));\n}\n\nLogoContainer.propTypes = {\n logo: _propTypes.default.element.isRequired,\n name: _propTypes.default.string,\n subname: _propTypes.default.string,\n previousData: _propTypes.default.object\n};\nLogoContainer.defaultProps = {\n name: '',\n subname: '',\n previousData: {\n logo: '',\n name: '',\n subname: ''\n }\n}; // eslint-disable-next-line react/prop-types\n\nfunction LogoImg(_ref2) {\n let {\n logo\n } = _ref2,\n rest = _objectWithoutProperties(_ref2, _excluded2);\n\n return /*#__PURE__*/(0, _jsxRuntime.jsx)(LogoImgDiv, _objectSpread(_objectSpread({}, rest), {}, {\n children: logo\n }));\n}\n\nconst LogoImgDiv = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral([\"\\n display: block;\\n > * {\\n display: block;\\n }\\n\"])));\n\nconst Container = _styled.default.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral([\"\\n position: relative;\\n display: block;\\n\\n .logo-inner {\\n display: flex;\\n align-items: center;\\n height: 100%;\\n .logo-img-content {\\n position: relative;\\n display: block;\\n }\\n .logo-info {\\n display: flex;\\n flex-direction: column;\\n justify-content: center;\\n margin-left: 10px;\\n letter-spacing: 0.1px;\\n &.zero-left {\\n margin-left: 0%;\\n }\\n .logo-name {\\n position: relative;\\n line-height: 16px;\\n font-size: 16px;\\n color: #121319;\\n }\\n .logo-subname {\\n position: relative;\\n line-height: 13px;\\n font-size: 13px;\\n color: #7d8085;\\n }\\n }\\n }\\n\\n .postion-abs {\\n position: absolute;\\n left: 0;\\n top: 0;\\n height: 100%;\\n }\\n\\n .right-fade-out-ele {\\n animation: right-fade-out ease 0.5s;\\n animation-delay: 2s;\\n animation-fill-mode: forwards;\\n }\\n\\n .right-fade-in-ele {\\n animation: right-fade-in ease 0.5s;\\n animation-delay: 2s;\\n animation-fill-mode: both;\\n }\\n\\n @keyframes right-fade-out {\\n 0% {\\n opacity: 1;\\n transform: translate(0, 0);\\n }\\n 100% {\\n opacity: 0;\\n transform: translate(8px, 0);\\n }\\n }\\n\\n @keyframes right-fade-in {\\n 0% {\\n opacity: 0;\\n transform: translate(8px, 0);\\n }\\n 100% {\\n opacity: 1;\\n transform: translate(0, 0);\\n }\\n }\\n\\n .left-fade-out-ele {\\n animation: left-fade-out ease 0.5s;\\n animation-delay: 2s;\\n animation-fill-mode: forwards;\\n }\\n\\n .left-fade-in-ele {\\n animation: left-fade-in ease 0.5s;\\n animation-delay: 2s;\\n animation-fill-mode: both;\\n }\\n\\n @keyframes left-fade-out {\\n 0% {\\n opacity: 1;\\n transform: translate(0, 0);\\n }\\n 100% {\\n opacity: 0;\\n transform: translate(-8px, 0);\\n }\\n }\\n\\n @keyframes left-fade-in {\\n 0% {\\n opacity: 0;\\n transform: translate(-8px, 0);\\n }\\n 100% {\\n opacity: 1;\\n transform: translate(0, 0);\\n }\\n }\\n\"])));"],"names":["getLogo","did","base64","bufStr","window","atob","bytes","Uint8Array","length","i","charCodeAt","base64ToArrayBuffer","toDataURL","size","replace","getNameByTitle","title","toLowerCase","genExportedMeta","name","blocklet","meta","pickBy","cloneDeep","x","toBlockletDid","logo","interfaces","forEach","services","children","child","dynamic","bundleSource","push","source","mountPoint","environments","configs","map","key","description","required","secure","default","value","capabilities","component","license","holder","Gitignore","GithubAction","downloadExportedSource","folderName","split","pop","readme","zip","JSZip","folder","file","yaml","Promise","resolve","reject","generateAsync","type","then","content","saveAs","catch","err","getLaunchURL","info","encodeURI","adminPath","routing","serverUrl","encodeURIComponent","joinURL","location","origin","metaUrl","blockletRegistry","getLaunchAgreementUrl","url","URL","searchParams","set","href","WrappedButton","props","variant","color","forwardRef","ref","forwardedRef","AgreementApp","style","width","Agreement","onClickNext","handleDescEle","showPageHeader","navigate","useNavigate","useState","accessUrl","setAccessUrl","error","setError","accessUrlLoading","setAccessUrlLoading","useLocaleContext","t","locale","useNodeContext","api","isRunning","loading","useMemo","isEmpty","clickNext","search","useEffect","onMount","getBlocklet","input","b","urls","getAccessibleUrl","accessUrlTmp","message","Center","relative","Alert","wordBreak","Spinner","data","blockletMeta","isInstalled","already","subTitle","getDisplayName","footer","ButtonWrap","Link","to","className","Container","onContinue","texts","listenName","buttonNext","defaultProps","styled","theme","breakpoints","down","palette","grey","up","spacing","axios","primary","main","ContentLayout","success","query","useQuery","decodeURIComponent","get","serverName","rel","Upgrade","onCancel","onUpgrade","onClick","marginLeft","BlockletStatusKeys","Object","keys","BlockletStatus","BlockletStatusValues","values","useRuntimeBlockletState","blockletDid","client","getClient","status","eventName","blockletState","setBlockletState","e","runtimeBlocklet","isGetBlocklet","BlockletEvents","blockletEventName","useSubscription","bState","indexOf","defaultBlockletEventHandler","AppLogo","blockletMetaUrl","logoPath","Img","src","getBlockletLogoUrl","baseUrl","fallback","placeholder","Avatar","propTypes","PropTypes","Install","blockletName","nodeLoading","session","useSessionContext","useLocalStorage","skipSetup","launching","setLaunching","changeOfStatus","setChangeOfStatus","openAuth","setOpenAuth","nextAccessUrl","setNextAccessUrl","upgradeAvailable","setUpgradeAvailable","overUpgrade","useRef","action","checkFn","extraParams","connectData","setConnectData","installError","setInstallError","runtimeBlockletState","user","blockletRegistryUrl","fromUrl","addNewRegistryToRegistryList","registryUrl","isNewRegistryUrl","blockletRegistryList","isNewStoreRegistry","isNew","decoded","addBlockletStore","handleLaunchStart","console","permissions","includes","isFree","installBlocklet","Toast","formatError","getServerAuthMethod","undefined","baseURL","env","apiPrefix","serverDid","nextWorkflowUrl","pathname","$api","nw","handleConnectSuccess","result","decrypt","handleConnectSessionStatus","pWaitFor","sessionToken","failure","interval","decryptedSessionToken","localStorage","setItem","refresh","errorMessage","extractStatusUrlFromNextWorkflow","statusUrl","downloadTokenList","downloadToken","token","redirectToBlockletOverview","nextUrl","fromLauncher","visitBlocklet","setTimeout","checkBlockletCanNext","timer","_installedBlocklet","clearTimeout","installedBlocklet","current","semver","version","isEqual","progressSteps","installProgressIndex","changeStatus","handleInstalledProgress","errorData","errorActions","view","retry","ButtonContainer","disabled","errorEventName","ResultMessage","ErrorMessageSub","handleUpgrade","upgradeBlocklet","LinkEle","marginRight","marginBottom","showInstall","appName","ArrowForward","height","serverLogo","alt","prepend","responsive","compact","WaiterContainer","AnimationWaiter","increaseSpeed","messageLoop","steps","stepIndex","autoGrowth","Connect","open","popup","saveConnect","checkTimeout","socketUrl","webWalletUrl","getWebWalletUrl","onSuccess","onClose","messages","scan","confirm","LauncherResultMessage","BlockletLauncher","isMobile","useMediaQuery","setServerUrl","trim","state","useAsync","Error","getBlockletMetaFromUrl","checkPrice","urlInfo","basePath","joinUrl","getPathPrefix","path","clickLogo","navLogo","LogoContainer","ServerLogoNotext","ServerLogo","splice","previousData","LauncherLogoNotext","LauncherLogo","StepProvider","useOfSkeleton","headerEndAddons","SessionContext","pcWidth","logoUrl","Content","element","types","require","toHex","fromPublicKey","module","exports","pk","Buffer","from","role","RoleType","ROLE_ANY","_templateObject","_styled","_interopRequireDefault","_propTypes","_jsxRuntime","_excluded","obj","__esModule","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","apply","_objectSpread","target","arguments","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","configurable","writable","_objectWithoutProperties","excluded","sourceKeys","_objectWithoutPropertiesLoose","sourceSymbolKeys","prototype","propertyIsEnumerable","call","_ref","jsx","any","isRequired","strings","raw","div","slice","freeze","_templateObject2","_excluded2","_taggedTemplateLiteral","subname","rest","logoEle","LogoImg","nameEle","subnameEle","jsxs","Fragment","display","concat","_ref2","LogoImgDiv","string"],"sourceRoot":""}
@@ -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),Z=n(43658),w=n(61802),R=n(33359),S=n(88029),j=n(60451),C=n(32616),P=n(24883),T=n(61627),E=n(47334),N=n(91519),U=n(37574),B=["showPay","meta","lastVersion","buttonText","registryUrl","handleButtonText","handleButtonClick"];function L(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,B),L=(0,y.useSnackbar)().enqueueSnackbar,D=(0,p.useLocaleContext)().t,I=(0,b.s0)(),A=(0,v.h6)().info,F=(0,C.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,Z.default)("instant-blocklet-install",!1),ee=(0,r.Z)(Q,1)[0],te=(0,i.useMemo)((function(){return K?D(W?"blocklet.status.upgrading":z?"blocklet.status.purchasing":"blocklet.status.waiting"):(0,m.wS)(H.status)?D("common.".concat(H.status)):""}),[K,H.status,W,D,z]),ne=(0,i.useMemo)((function(){return!(!s||!M)&&!(!s||!(0,j.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,A),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),L((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,U.jsx)(S.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,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(w.default,{size:[16,10],style:{marginRight:3}}),te]}):oe}),n.did)}se.defaultProps={disabled:!1};return(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(h.Kk,{children:ae?(0,U.jsx)(T.Z,{permission:"mutate_blocklet",children:function(e){return(0,U.jsx)(se,{disabled:!e})}}):(0,U.jsx)(S.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(),I("/blocklets/".concat(n.did,"/").concat((t=H)&&(t.configs||[]).some((function(e){return e.required&&!e.value}))?"configuration":"overview"))},children:te?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(w.default,{size:[16,10],style:{marginRight:3}}),te]}):oe})}),W&&z&&t&&(0,U.jsx)(R.Z,{component:"small",style:{fontSize:12,color:"#666",marginLeft:4},children:D("blocklet.status.purchased")}),(Y&&!W||J)&&(0,U.jsx)(E.E0,{method:"launch",meta:n,mode:"both",onCancel:function(){G(!1),X(!1)}})]})}L.defaultProps={lastVersion:"",showPay:!0,handleButtonText:function(){return null},handleButtonClick:function(){return null}};var D=["handleButtonClick","handleSearchSelect","handleButtonText","handleBlockletRegistry","handleBlockletRender","extraFilter"],I=function(e,t,n){var r=(0,N.Ti)(e,t).serverUrl;return c()(n,"/blocklets/".concat(e.did,"/?server-url=").concat(r))};function A(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,U.jsx)(l.Z,{href:I(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,U.jsx)(h.ZP,{title:t.title||t.name,description:t.description,did:t.did,cover:t.logo?d:"",version:t.version,button:(0,U.jsx)("div",{style:{display:"flex",alignItems:"center"},children:(0,U.jsx)(L,(0,a.Z)({},k))})})})}function F(e){var t=e.handleButtonClick,n=e.handleSearchSelect,s=e.handleButtonText,c=e.handleBlockletRegistry,l=e.handleBlockletRender,h=e.extraFilter,m=(0,o.Z)(e,D),x=(0,v.h6)().info,k=(0,p.useLocaleContext)().locale,b=(0,i.useState)({}),g=(0,r.Z)(b,2),y=g[0],Z=g[1],w=c||(null===x||void 0===x?void 0:x.blockletRegistry);return(0,i.useEffect)((function(){Z({})}),[w]),(0,U.jsx)(u.ErrorBoundary,{FallbackComponent:d.ErrorFallback,resetKeys:[w],children:(0,U.jsx)("div",(0,a.Z)((0,a.Z)({},m),{},{children:(0,U.jsx)(f.Z,{blockletRender:function(e){var n=A((0,a.Z)((0,a.Z)({},e),{},{handleButtonClick:t,handleButtonText:s,endpoint:w}));return l&&"function"===typeof l?l((0,a.Z)((0,a.Z)({},e),{},{defaultRender:n})):n},endpoint:w,locale:k,onFilterChange:function(e){Z(e)},onSearchSelect:function(e){var r=e.blocklet,o=e.storeUrl,a=e.detailUrl;t?t({meta:r,registryUrl:o}):n&&n({blocklet:r,storeUrl:o,detailUrl:a})},filters:y,extraFilter:h})}))})}A.defaultProps={handleButtonClick:null,handleButtonText:null,endpoint:"",blocklets:[]},F.defaultProps={handleButtonClick:null,handleSearchSelect: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 L}});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),Z=n(2950),w=n(78903),R=n(86008),S=n(93310),j=n(64698),C=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 U(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)(Z.Z,{className:o.tabPanel,children:i.map((function(e){return(0,E.jsxs)(w.ZP,{button:!0,selected:t===e.action,onClick:function(){return n(e.action)},children:[(0,E.jsx)(S.Z,{className:o.iconRoot,children:"purchase"===e.action?(0,E.jsx)(j.Z,{style:{color:"purchase"===t?T.default.primary.main:"#AAA",fontSize:32}}):(0,E.jsx)(C.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 B(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),Z=y[0],w=y[1],R=(0,i.useState)(1),S=(0,a.Z)(R,2),j=S[0],C=S[1],P=(0,x.yP)(b),T=b.blockletRegistry,N=(0,k.FM)(t,b),B=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!==Z){e.next=2;break}return e.abrupt("return");case 2:w(t);case 3:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),L=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(Z){e.next=2;break}return e.abrupt("return");case 2:C(2),"verify"===Z&&(window.location.href=N);case 4:case"end":return e.stop()}}),e)})));return function(){return e.apply(this,arguments)}}(),D=(0,d.getDisplayName)({meta:t});if("purchase"===Z&&2===j)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:D}),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:D})]})]})}});var I=f.default;return(0,E.jsx)(I,{title:l("store.purchase.title",{name:D}),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)(U,{action:Z,onNext:L,onSelect:B})})})}B.defaultProps={handlePaySuccess:function(e){setTimeout((function(){window.location.href=e}),1e3)}};var L=B,D=n(33028),I=n(61802),A=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,Z=g.api,w=(0,A.Tt)().api,R=N(),S=(0,i.useState)("both"!==s?s:""),j=(0,a.Z)(S,2),C=j[0],P=j[1],T=(0,i.useState)("both"!==s?2:1),B=(0,a.Z)(T,2),L=B[0],O=B[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!==C){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(C){e.next=2;break}return e.abrupt("return");case 2:if(2!==L){e.next=4;break}return e.abrupt("return");case 4:return n=l&&"component"===l.type?(0,D.Z)((0,D.Z)({},l),{},{blockletDid:t.did,action:C}):{registryUrl:y.blockletRegistry,blockletDid:t.did,action:C},e.next=7,Z.startSession({input:{data:JSON.stringify(n)}});case 7:a=e.sent,i=a.session,M(i),O(2),"purchase"===C&&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,w.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===L&&"verify"===C&&W?(0,E.jsx)(h.default,{popup:!0,open:!0,className:R.dialogAuth,action:"verify-purchase",checkFn:w.get,checkTimeout:6e5,socketUrl:w.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===L&&(0,E.jsx)("div",{style:{marginBottom:16},children:(0,E.jsx)(U,{action:C,onNext:Y,onSelect:G})}),2===L&&"purchase"===C&&(0,E.jsxs)("div",{style:{textAlign:"center"},children:[!z&&(0,E.jsx)(I.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),Z=y[0],w=y[1],R=new URL(null===t||void 0===t?void 0:t.registryUrl).origin,S=(0,d.getDisplayName)({meta:t}),j=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.downloadTokenList,"succeed"!==n.status){e.next=12;break}if(!o||!o.length){e.next=8;break}return e.next=6,i({downloadTokenList: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.downloadTokenList,l({downloadTokenList: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||!Z){e.next=10;break}return p=(0,x.Pi)(Z),h=p.statusUrl,e.next=8,u(h);case 8:e.next=12;break;case 10:return e.next=12,i({downloadTokenList:t.downloadTokenList&&a(t.downloadTokenList)});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);w(n)}))}catch(n){console.error("get next workflow url error: ",n)}}return function(){w(null)}}),[s]),"purchase"===s&&!Z)return"";var C={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:S}),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:Z},messages:{title:f("store.purchase.auth.title",{name:S}),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,D.Z)({open:!0,locale:m,popup:!1,saveConnect:!1,className:"connect",baseUrl:R,onSuccess:j,cancelWhenScanned:n,onClose:n,checkTimeout:3e5,webWalletUrl:b,disableClose:!0,showDownload:!1},C[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)(U,{action:u,onNext:null,onSelect:v})}):(0,E.jsx)(q,(0,D.Z)((0,D.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 S},TT:function(){return g},Ti:function(){return C},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 Z=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.")},w=".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 S(e){return j.apply(this,arguments)}function j(){return j=(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",Z(o)),c.file(".gitignore",w),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)}))),j.apply(this,arguments)}var C=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=C(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 Z}});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 Z(e){var t=e.disabled,n=e.reloadPage,s=(0,k.h6)(),Z=s.api,w=s.info,R=(0,i.useState)(!1),S=(0,a.Z)(R,2),j=S[0],C=S[1],P=(0,i.useState)(!0),T=(0,a.Z)(P,2),E=T[0],N=T[1],U=(0,i.useState)(!1),B=(0,a.Z)(U,2),L=B[0],D=B[1],I=(0,i.useState)(""),A=(0,a.Z)(I,2),F=A[0],O=A[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(C(!0),e.prev=1,t=(0,b.GI)(F,w.blockletRegistryList),o=t.isNew,a=t.decoded,o){e.next=5;break}throw new Error(_("store.blockletRegistry.haveSameRegistry"));case 5:return e.next=7,Z.addBlockletStore({input:{url:a}});case 7:D(!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,C(!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(){D(!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:L,onClose:function(){return D(!1)},PaperProps:{style:{minHeight:"auto"}},actions:(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(v.default,{onClick:function(e){e.stopPropagation(),D(!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:j||!F||E,variant:"contained",autoFocus:!0,children:[j&&(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:j,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})]})]})}Z.defaultProps={disabled:!1,reloadPage:!0}},978:function(e,t,n){"use strict";n.d(t,{T:function(){return B},Z:function(){return D}});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),Z=n(88029),w=n(30740),R=n(94702),S=n(30291),j=n(22128),C=n(5954),P=n(78685),T=n(37574);function E(e){var t=(0,c.useSnackbar)().enqueueSnackbar,n=(0,C.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,Z=(0,R.Z)(),w=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:Z.palette.error.main}),confirmPlaceholder:r("store.blockletRegistry.confirmDesc",{name:x.url}),confirm:r("common.delConfirm"),cancel:r("common.cancel"),onConfirm:w,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)(S.default,{})}),m&&(0,T.jsx)(j.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),U=(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 B(e){var t=U();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})]})]})}B.defaultProps={protected:!1,reloadPage:!0,onDelete:function(){}};var L=(0,s.forwardRef)((function(e,t){var n=(0,C.h6)(),l=n.api,x=n.info,b=(0,y.useLocaleContext)().t,g=(0,c.useSnackbar)().enqueueSnackbar,R=(0,s.useState)(!1),S=(0,i.Z)(R,2),j=S[0],E=S[1],L=(0,s.useState)(!1),D=(0,i.Z)(L,2),I=D[0],A=D[1],F=(0,s.useState)(-1),O=(0,i.Z)(F,2),H=O[0],W=O[1],M=U(),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:A(!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:A}})),(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(N.Z,{permission:"mutate_node",children:function(e){return(0,T.jsx)(Z.default,{disabled:!e,classes:{text:M.buttonText},color:"secondary","data-cy":"store-toggle",onClick:function(){A(!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:I,onClose:function(){return A(!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:j,selected:z===t,"data-cy":"store-switch",onClick:function(){j||(t!==z?_(t):A(!1))},children:[(0,T.jsx)(v.Z,{className:M.iconRoot,children:H===t&&j&&(0,T.jsx)(u.default,{size:[16,10]})}),(0,T.jsx)(m.Z,{children:(0,T.jsx)(B,(0,r.Z)({},e))})]},e.url)})),(0,T.jsx)(w.Z,{disabled:j})]})})]})})),D=L},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],Z=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}))},w=!(!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(Z,2e3)))})),(0,o.useEffect)((function(){g&&g.id!==f&&p(g.id)}),[g]),{hasCompleted:v,hasPurchased:w,session:g,setSession:y,doRedirect:Z}}},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.6468b922.chunk.js.map