@abtnode/webapp 1.6.9 → 1.6.10

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.
Files changed (31) hide show
  1. package/blocklet.js +5 -5
  2. package/blocklet.yml +1 -1
  3. package/build/asset-manifest.json +18 -18
  4. package/build/index.html +1 -1
  5. package/build/{precache-manifest.d77c71fa590027f941a9b90889c41ebc.js → precache-manifest.4ebb2e70b7f40bbffcb9c15b4a0a3567.js} +16 -16
  6. package/build/service-worker.js +1 -1
  7. package/build/static/js/11.f9ceb4b3.chunk.js +2 -0
  8. package/build/static/js/11.f9ceb4b3.chunk.js.map +1 -0
  9. package/build/static/js/{22.cdd3d1a4.chunk.js → 22.0f55f82b.chunk.js} +2 -2
  10. package/build/static/js/22.0f55f82b.chunk.js.map +1 -0
  11. package/build/static/js/{23.4208ebea.chunk.js → 23.32485069.chunk.js} +2 -2
  12. package/build/static/js/23.32485069.chunk.js.map +1 -0
  13. package/build/static/js/{28.9b1197ca.chunk.js → 28.40163b1b.chunk.js} +2 -2
  14. package/build/static/js/28.40163b1b.chunk.js.map +1 -0
  15. package/build/static/js/8.378ea0cc.chunk.js +3 -0
  16. package/build/static/js/{8.8084d3ca.chunk.js.LICENSE.txt → 8.378ea0cc.chunk.js.LICENSE.txt} +0 -0
  17. package/build/static/js/8.378ea0cc.chunk.js.map +1 -0
  18. package/build/static/js/main.11941b8b.chunk.js +2 -0
  19. package/build/static/js/main.11941b8b.chunk.js.map +1 -0
  20. package/build/static/js/{runtime-main.278e8ea4.js → runtime-main.eb2b4e6c.js} +2 -2
  21. package/build/static/js/{runtime-main.278e8ea4.js.map → runtime-main.eb2b4e6c.js.map} +1 -1
  22. package/package.json +1 -1
  23. package/build/static/js/11.ec811533.chunk.js +0 -2
  24. package/build/static/js/11.ec811533.chunk.js.map +0 -1
  25. package/build/static/js/22.cdd3d1a4.chunk.js.map +0 -1
  26. package/build/static/js/23.4208ebea.chunk.js.map +0 -1
  27. package/build/static/js/28.9b1197ca.chunk.js.map +0 -1
  28. package/build/static/js/8.8084d3ca.chunk.js +0 -3
  29. package/build/static/js/8.8084d3ca.chunk.js.map +0 -1
  30. package/build/static/js/main.ce53947b.chunk.js +0 -2
  31. package/build/static/js/main.ce53947b.chunk.js.map +0 -1
@@ -1,2 +1,2 @@
1
- (this["webpackJsonp@abtnode/webapp"]=this["webpackJsonp@abtnode/webapp"]||[]).push([[28],{1536:function(e,n,t){"use strict";t.r(n),t.d(n,"default",(function(){return nn}));var a,r=t(32),c=t(11),l=t.n(c),o=t(19),i=t(0),s=t.n(i),u=t(30),m=t(1249),p=t(5),d=t.n(p),f=t(105),b=t.n(f),h=t(14),v=t(339),g=t.n(v),k=t(22),x=t(1509),E=t(50),j=t.n(E),O=t(493),w=t.n(O),y=t(29),N=t(357),B=t(63),_=t(960),C=t.n(_),U=t(117),F=["children"];function L(e){var n=e.children,t=Object(U.a)(e,F);return s.a.createElement(S,t,n)}var S=h.default.div(a||(a=Object(r.a)(["\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\n "," {\n padding: 24px;\n }\n\n "," {\n flex: 1;\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"])),(function(e){return e.theme.breakpoints.up("md")}),(function(e){return e.theme.breakpoints.down("sm")}),(function(e){return e.theme.breakpoints.up("sm")}),(function(e){return e.theme.breakpoints.down("sm")})),A=t(102),M=t.n(A),R=["children"];function D(e){var n=e.children,t=Object(U.a)(e,R);return s.a.createElement(M.a,Object.assign({rounded:!0,variant:"contained",color:"primary"},t),n)}var T,z=s.a.forwardRef((function(e,n){return s.a.createElement(D,Object.assign({},e,{forwardedRef:n}))}));var I=Object(h.default)(L)(T||(T=Object(r.a)(["\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 margin-top: 70px;\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("sm")}),(function(e){return"error"===e.variant?e.theme.palette.error.main:e.theme.palette.success.main})),P=function(e){var n=e.blockletMeta,t=Object(k.useLocaleContext)().t,a=Object(y.c)().info,r=Object(N.a)(),c=decodeURIComponent(r.get("accessUrl")||"");return s.a.createElement(I,null,s.a.createElement(B.a,{component:"h5",variant:"h5"},t("launchBlocklet.complete")),s.a.createElement("div",{className:"body"},s.a.createElement(C.a,{className:"circle_icon"}),s.a.createElement(B.a,{className:"app-info_desc",component:"span"},t("launchBlocklet.installSuccess",{appName:n?n.title:"",serverName:a.name}))),s.a.createElement("div",{className:"footer"},s.a.createElement(z,{href:c,className:"bottom-button"},t("common.open"))))},q=t(57),W=t(13),K=t(59),V=t(275),J=t.n(V),G=t(990),H=t.n(G),Q=t(324),X=t(1074),Y=t.n(X),Z=t(148),$=t.n(Z),ee=t(1513),ne=t.n(ee),te=t(955),ae=t(40),re=t(879),ce=t(64),le=t(23),oe=t(95),ie=t(271),se=t.n(ie);function ue(e){var n=e.blockletMeta,t=e.blockletMetaUrl;return s.a.createElement(se.a,{src:Object(ce.q)({did:n.did,logoPath:n.logo,baseUrl:new URL(t).origin}),width:64,size:"contain",placeholder:"application logo"})}var me,pe,de=t(1514),fe=t.n(de);function be(e){var n=e.onCancel,t=e.onUpgrade,a=Object(k.useLocaleContext)().t;return s.a.createElement(s.a.Fragment,null,s.a.createElement(he,{className:"body"},s.a.createElement("div",{className:"upgrade-wrapper"},s.a.createElement(fe.a,{className:"upgrade-wrapper_icon"})),s.a.createElement("div",{className:"status_title"},a("launchBlocklet.newVersion")),s.a.createElement("div",{className:"status_desc"},a("launchBlocklet.newVersionDesc"))),s.a.createElement(ve,{className:"footer"},s.a.createElement(z,{onClick:n,variant:"outlined"},a("launchBlocklet.later")),s.a.createElement(z,{className:"upgrade-button",onClick:t},a("launchBlocklet.upgradeNow"))))}be.defaultProps={onCancel:function(){},onUpgrade:function(){}};var he=Object(h.default)(L)(me||(me=Object(r.a)(["\n .upgrade-wrapper {\n background-color: #4f6af6;\n border-radius: 50%;\n padding: 5px;\n width: 48px;\n height: 48px;\n\n .upgrade-wrapper_icon {\n color: white;\n width: 100%;\n height: 100%;\n }\n }\n"]))),ve=h.default.div(pe||(pe=Object(r.a)(["\n .upgrade-button {\n margin-left: 24px;\n }\n"]))),ge=t(991),ke=t.n(ge);function xe(e){var n=e.did,t=Object(k.useLocaleContext)().t,a=Object(h.useTheme)(),r=Object(Q.a)(a.breakpoints.down("sm"));return s.a.createElement(s.a.Fragment,null,s.a.createElement("div",{className:"body"},s.a.createElement(ke.a,{className:"status_icon"}),s.a.createElement("div",{className:"status_title"},t("launchBlocklet.error.installedButStopped"))),s.a.createElement("div",{className:"footer"},s.a.createElement(z,{style:{width:"300px"},className:"footer-item",component:K.Link,to:"/blocklets/".concat(n,"/overview"),fullWidth:r,rounded:!0,color:"primary",variant:"contained"},t("launchBlocklet.viewApplication"))))}var Ee,je=t(1040),Oe=t.n(je),we=t(1515),ye=t.n(we);function Ne(e){var n=e.message,t=e.actions,a=Object(k.useLocaleContext)().t;return s.a.createElement(s.a.Fragment,null,s.a.createElement(Ce,{className:"body"},s.a.createElement(ye.a,{className:"status_icon status_error"}),s.a.createElement("div",{className:"status_title status_error"},Oe()(a("common.failed"))),s.a.createElement("div",{className:"status_desc"},n)),t&&s.a.createElement("div",{className:"footer"},t))}var Be,_e,Ce=h.default.div(Ee||(Ee=Object(r.a)(["\n .status_error {\n color: #f16e6e;\n }\n"]))),Ue="abtnode_launch_blocklet_key",Fe=function(){return localStorage.getItem(Ue)};var Le,Se=h.default.div(Be||(Be=Object(r.a)(["\n display: flex;\n flex-direction: column;\n align-items: center;\n color: #4f6af6;\n\n .spinner {\n color: inherit !important;\n }\n\n .text {\n font-size: 20px;\n margin-top: 24px;\n }\n"]))),Ae=Object(h.default)(L)(_e||(_e=Object(r.a)(["\n .body {\n margin-bottom: 50px;\n justify-content: center;\n align-items: center;\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-bottom: 80px;\n width: 100%;\n }\n\n .ills_block {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n .i_icon {\n width: 64px;\n height: 64px;\n }\n\n .i_name {\n margin-top: 32px;\n font-weight: 500;\n font-size: 18px;\n color: #222222;\n }\n\n .i_sub_name {\n color: #999999;\n }\n }\n\n "," {\n .ills_block {\n flex: 1;\n flex-shrink: 0;\n }\n }\n\n .arrow-icon {\n align-self: start;\n color: #d3e7fe;\n margin: 25px 40px 0;\n "," {\n margin: 25px 24px 0;\n }\n }\n\n .status_icon {\n width: 48px;\n height: 48px;\n }\n\n .status_title {\n margin-top: 16px;\n text-align: center;\n font-size: 24px;\n line-height: 28px;\n }\n\n .status_desc {\n text-align: center;\n margin-top: 16px;\n color: #999999;\n font-size: 16px;\n line-height: 28px;\n }\n"])),(function(e){return e.theme.breakpoints.down("sm")}),(function(e){return e.theme.breakpoints.down("sm")})),Me=function(e){var n=e.blockletMeta,t=Object(y.c)(),a=t.api,r=t.info,c=Object(k.useLocaleContext)(),m=c.t,p=c.locale,d=Object(i.useState)(!1),f=Object(W.a)(d,2),b=f[0],v=f[1],x=Object(i.useState)(!1),E=Object(W.a)(x,2),O=E[0],w=E[1],_=Object(i.useState)({existed:!1,status:m("launchBlocklet.installing"),upgradeAvailable:null,blocklet:null,error:null}),C=Object(W.a)(_,2),U=C[0],F=C[1],L=Object(h.useTheme)(),S=Object(Q.a)(L.breakpoints.down("sm")),A=Object(u.k)(),M=Object(i.useState)({meta:null,loading:!0,error:null}),R=Object(W.a)(M,2),D=R[0],T=R[1],I=Object(N.a)().get("blocklet_meta_url"),P=new URL(I).origin,V=null;Object(i.useEffect)((function(){return function(){V&&V.isConnected()&&V.disconnect()}}),[V]);var G=function(e){var n="/blocklets/".concat(e.meta.did,"/configuration");A.push("/launch-blocklet/complete?status=installed&name=".concat(encodeURIComponent(e.meta.title),"&accessUrl=").concat(encodeURIComponent(n),"&blocklet_meta_url=").concat(I))},X=function(){var e=Object(o.a)(l.a.mark((function e(n){return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:F(Object(q.a)(Object(q.a)({},U),{},{status:m("blocklet.status.installed")})),Object(te.getRequiredMissingConfigs)(n).length>0&&setTimeout((function(){G(n)}),1500);case 2:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),Z=function(){var e=Object(o.a)(l.a.mark((function e(n){var t,a;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=n.interfaces.find((function(e){return new URL(e.url).hostname.endsWith(r.didDomain)})),a="",t&&(a=t.url),F(Object(q.a)(Object(q.a)({},U),{},{status:"".concat(m("blocklet.status.running"),", ").concat(m("common.redirecting"))})),setTimeout((function(){A.push("/launch-blocklet/complete?name=".concat(encodeURIComponent(Object(ce.r)(n.meta)),"&accessUrl=").concat(encodeURIComponent(a),"&blocklet_meta_url=").concat(I))}),1500);case 5:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),ee=function(){var e=Object(o.a)(l.a.mark((function e(n){var t,a;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=Object(oe.a)(Fe()),e.next=3,t.getBlocklet({input:{did:n.meta.did}});case 3:return a=e.sent,e.next=6,de(a.blocklet);case 6:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),ie=function(){var e=Object(o.a)(l.a.mark((function e(n){return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return w((function(e){return Object(q.a)(Object(q.a)({},e),{},{error:new Error(m("launchBlocklet.error.startFailed"))})})),e.next=3,X(n);case 3:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),se=function(e){return function(){F(Object(q.a)(Object(q.a)({},U),{},{error:new Error(e)}))}},me=function(e){return function(t){t.meta.did===n.did&&e(t)}},pe=function(e,n){if(!n)return["stopped","stopping"].includes(e.status)?(w(!1),void F((function(e){return Object(q.a)(Object(q.a)({},e),{},{existed:!0})}))):["error","corrupted"].includes(e.status)?(w(!1),void F((function(e){return Object(q.a)(Object(q.a)({},e),{},{existed:!0,error:new Error(m("launchBlocklet.error.installedButError"))})}))):void("running"!==e.status?"installed"===e.status&&X(e):Z(e));!function(e,n){w(!1),F((function(e){return Object(q.a)(Object(q.a)({},e),{},{upgradeAvailable:n})}))}(0,n)},de=function(){var e=Object(o.a)(l.a.mark((function e(n,t){return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n){e.next=4;break}return w(!1),F(Object(q.a)(Object(q.a)({},U),{},{error:new Error(m("launchBlocklet.error.launchFailed"))})),e.abrupt("return");case 4:F(Object(q.a)(Object(q.a)({},U),{},{blocklet:n})),pe(n,t);case 6:case"end":return e.stop()}}),e)})));return function(n,t){return e.apply(this,arguments)}}(),fe=function(){var e=Object(o.a)(l.a.mark((function e(n,t){var r;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,r={did:n.meta.did,version:t.version,registryUrl:P},w(!0),F(Object(q.a)(Object(q.a)({},U),{},{status:m("common.upgrading")})),e.next=6,a.upgradeBlocklet({input:r});case 6:e.next=11;break;case 8:e.prev=8,e.t0=e.catch(0),F(Object(q.a)(Object(q.a)({},U),{},{error:new Error(m("launchBlocklet.error.upgradeFailed"))}));case 11:case"end":return e.stop()}}),e,null,[[0,8]])})));return function(n,t){return e.apply(this,arguments)}}(),he=function(){var e=Object(o.a)(l.a.mark((function e(n){return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:(V=Object(le.a)(n)).connect(),V.on(ae.BlockletEvents.installed,me(ee)),V.on(ae.BlockletEvents.started,me(ee)),V.on(ae.BlockletEvents.startFailed,me(ie)),V.on(ae.BlockletEvents.downloadFailed,me(se(m("launchBlocklet.error.downloadFailed")))),V.on(ae.BlockletEvents.installFailed,me(se(m("launchBlocklet.error.installFailed"))));case 7:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),ve=function(){var e=Object(o.a)(l.a.mark((function e(t){var a,r,c,o;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=t.sessionToken,r=t.upgradeAvailable,l=a,localStorage.setItem(Ue,l),e.next=4,he(a);case 4:return w(!0),v(!1),c=Object(oe.a)(a),e.next=9,c.getBlocklet({input:{did:n.did}});case 9:return o=e.sent,e.next=12,de(o.blocklet,r);case 12:case"end":return e.stop()}var l}),e)})));return function(n){return e.apply(this,arguments)}}();if(Object(i.useEffect)((function(){(function(){var e=Object(o.a)(l.a.mark((function e(){var t,a,r,c,o;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,!(t=Fe())){e.next=27;break}return e.prev=3,a=Object(oe.a)(t),e.next=7,a.getBlocklet({input:{did:n.did}});case 7:if(r=e.sent,c=r.blocklet,he(t),!c){e.next=20;break}if(w(!0),!H.a.gt(n.version,c.meta.version)){e.next=18;break}return o=c.environments.find((function(e){return"BLOCKLET_APP_ID"===e.key})),e.next=16,de(c,{appDid:o?o.value:"",did:c.meta.did,currentVersion:c.meta.version,version:n.version});case 16:e.next=20;break;case 18:return e.next=20,de(c);case 20:return T((function(e){return Object(q.a)(Object(q.a)({},e),{},{loading:!1})})),e.abrupt("return");case 24:e.prev=24,e.t0=e.catch(3),localStorage.removeItem(Ue);case 27:T((function(e){return Object(q.a)(Object(q.a)({},e),{},{loading:!1})})),e.next=34;break;case 30:e.prev=30,e.t1=e.catch(0),console.error(e.t1),T((function(e){return Object(q.a)(Object(q.a)({},e),{},{loading:!1,error:new Error(m("launchBlocklet.error.loadMetaFailed"))})}));case 34:case"end":return e.stop()}}),e,null,[[0,30],[3,24]])})));return function(){return e.apply(this,arguments)}})()()}),[]),D.error)return s.a.createElement(g.a,{variant:"icon",type:"error"},D.error.message);if(D.loading)return s.a.createElement("div",{style:{marginTop:"100px",textAlign:"center",width:"100%"}},s.a.createElement(j.a,null));var ge="/";window.env&&window.env.apiPrefix&&(ge=window.env.apiPrefix);var ke=n.did,Ee=n.isFree;return!O&&U.upgradeAvailable?s.a.createElement(Ae,null,s.a.createElement(be,{onCancel:function(){var e;"running"!==(e=U.blocklet).status?G(e):Z(e)},onUpgrade:function(){return fe(U.blocklet,U.upgradeAvailable)}})):!O&&U.existed?s.a.createElement(Ae,null,s.a.createElement(xe,{did:n.did})):U.error?s.a.createElement(Ae,null,s.a.createElement(Ne,{message:U.error.message,actions:s.a.createElement(z,{className:"bottom-button",disabled:b,fullWidth:S,onClick:function(){return v(!0)}},b&&s.a.createElement(j.a,{size:[16,10]}),m("common.retry"))})):s.a.createElement(Ae,null,!U.upgradeAvailable&&s.a.createElement("div",{className:"header"},s.a.createElement(B.a,{component:"h5",variant:"h5"},m(O?"launchBlocklet.start":"common.launch")),s.a.createElement(B.a,{color:"textSecondary"},m(O?"launchBlocklet.installingSubTitle":"launchBlocklet.subTitle",{appName:n.title,serverName:r.name}))),s.a.createElement("div",{className:"body"},!O&&!U.error&&s.a.createElement("div",{className:"illustrations"},s.a.createElement("div",{className:"ills_block"},s.a.createElement(ue,{className:"i_icon",blockletMeta:n,blockletMetaUrl:I}),s.a.createElement("div",{className:"i_name"},n.title)),s.a.createElement(Y.a,{className:"arrow-icon"}),s.a.createElement("div",{className:"ills_block"},s.a.createElement(ne.a,{className:"i_icon",color:"#BFBFBF"}),s.a.createElement("div",{className:"i_name"},r.name))),!O&&!U.existed&&s.a.createElement(re.a,{smDown:!0},s.a.createElement(z,{className:"bottom-button",disabled:b,fullWidth:S,onClick:function(){return v(!0)}},b&&s.a.createElement(j.a,{size:[16,10]}),m("common.install"))),O&&!U.error&&s.a.createElement(Se,null,s.a.createElement(j.a,{className:"spinner"}),s.a.createElement("div",{className:"text"},U.status))),s.a.createElement("div",{className:"footer"},!O&&U.existed&&s.a.createElement(z,{className:"footer-item bottom-button",component:K.Link,to:"/blocklets/".concat(ke,"/overview"),fullWidth:S,rounded:!0,color:"primary",variant:"contained"},m("launchBlocklet.viewApplication")),!O&&!U.existed&&s.a.createElement(re.a,{mdUp:!0},s.a.createElement(z,{className:"bottom-button",disabled:b,fullWidth:S,onClick:function(){return v(!0)}},b&&s.a.createElement(j.a,{size:[16,10]}),m("common.install")))),s.a.createElement($.a,{open:b,popup:!0,className:"connect",action:Ee?"launch-free-blocklet":"launch-paid-blocklet",checkFn:J.a.create({baseURL:ge}).get,checkTimeout:6e5,socketUrl:a.socketUrl,webWalletUrl:Object(ce.x)(r),onSuccess:ve,onClose:function(){return v(!1)},locale:p,messages:{title:"".concat(m("launchBlocklet.authDialog.title")),scan:m(Ee?"launchBlocklet.authDialog.freeDescription":"launchBlocklet.authDialog.nonFreeDescription"),confirm:m("launchBlocklet.authDialog.confirm"),success:m("launchBlocklet.authDialog.success")},extraParams:{blockletMetaUrl:I}}))},Re=t(374),De=t(973),Te=t.n(De),ze=t(389);function Ie(e){var n=Object.assign({},e);return s.a.createElement("div",Object.assign({},n,{style:{width:"100%"}}),s.a.createElement("h3",null,"End User License Agreement for Application"),s.a.createElement("p",null,"Blocklet Server License Agreement ArcBlock, Inc. version 2020-08-28"),s.a.createElement("p",null,"BLOCKLET SERVER LICENSE AGREEMENT"),s.a.createElement("p",null,"\u6682\u65e0"))}function Pe(){var e,n=Object(u.k)(),t=Object(i.useState)("application"),a=Object(W.a)(t,2),r=a[0],c=a[1],l=Object(k.useLocaleContext)().t,o=new Map([["application",{label:l("launchBlocklet.appLicenseName"),value:"application",component:Ie}],["abtnode",{label:l("launchBlocklet.abtnodeLicenseName"),value:"abtnode",component:ze.a}]]),m=[],p=Object(Re.a)(o.values());try{for(p.s();!(e=p.n()).done;){var d=e.value;m.push({label:d.label,value:d.value})}}catch(b){p.e(b)}finally{p.f()}var f=o.get(r).component;return s.a.createElement(Ke,null,s.a.createElement(B.a,{component:"h5",variant:"h5"},l("launchBlocklet.agreement")),s.a.createElement("div",{className:"body"},s.a.createElement(Te.a,{tabs:m,current:r,onChange:c}),s.a.createElement("div",{className:"agreement"},s.a.createElement("div",{className:"agreement_content"},s.a.createElement(f,{style:{width:"100%"}})))),s.a.createElement("div",{className:"footer"},s.a.createElement(z,{className:"bottom-button",onClick:function(){n.push("/launch-blocklet/install".concat(window.location.search))}},l("launchBlocklet.agreeAll"))))}var qe,We,Ke=Object(h.default)(L)(Le||(Le=Object(r.a)(["\n .body {\n justify-content: center;\n }\n .agreement {\n position: relative;\n flex: 1;\n display: flex;\n flex-direction: column;\n width: 100%;\n min-height: 300px;\n border: 1px solid #f0f0f0;\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 overflow-y: auto;\n\n "," {\n padding: 0 24px;\n }\n\n "," {\n padding: 0 16px;\n }\n }\n }\n"])),(function(e){return e.theme.breakpoints.up("md")}),(function(e){return e.theme.breakpoints.down("sm")}),(function(e){return e.theme.breakpoints.up("md")}),(function(e){return e.theme.breakpoints.down("sm")})),Ve=h.default.div(qe||(qe=Object(r.a)(["\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"]))),Je=t(532),Ge=t.n(Je),He=t(938),Qe=t.n(He);var Xe,Ye=Object(h.default)(L)(We||(We=Object(r.a)(["\n .app-desc {\n text-align: center;\n margin-top: 40px;\n\n .app-desc_name {\n font-weight: 500;\n font-size: 18px;\n line-height: 21px;\n color: #222222;\n }\n\n .app-desc_author {\n margin-top: 8px;\n font-weight: 500;\n font-size: 16px;\n line-height: 19px;\n color: #666666;\n }\n }\n\n .price {\n margin-top: 40px;\n color: #222222;\n text-align: center;\n\n .price-value {\n font-size: 36px;\n line-height: 42px;\n }\n\n .price-symbol {\n margin-left: 8px;\n font-size: 18px;\n line-height: 21px;\n }\n }\n"]))),Ze=function(e){var n=e.blockletMeta,t=Object(i.useState)(!1),a=Object(W.a)(t,2),r=a[0],c=a[1],l=Object(u.k)(),o=Object(N.a)(),m=Object(y.c)().info,p=Object(k.useLocaleContext)().t,d=o.get("blocklet_meta_url"),f=new URL(d).origin,h=function(){l.push("/launch-blocklet/agreement".concat(window.location.search))},v=[];return n.isFree||(v=Object(ce.h)(n)),s.a.createElement(Ye,null,s.a.createElement("div",{className:"header"},s.a.createElement(B.a,{component:"h5",variant:"h5"},p("launchBlocklet.purchaseApp")),s.a.createElement(B.a,{color:"textSecondary",style:{marginTop:"8px"}},p("launchBlocklet.appInfoDesc"))),s.a.createElement("div",{className:"body"},s.a.createElement(ue,{blockletMetaUrl:d,blockletMeta:n}),s.a.createElement("div",{className:"app-desc"},s.a.createElement("div",{className:"app-desc_name"},n.title),s.a.createElement("div",{className:"app-desc_author"},p("launchBlocklet.author",{author:Ge()(n,"author.name")}))),!n.isFree&&s.a.createElement("div",{className:"price"},v.map((function(e,n){return s.a.createElement(s.a.Fragment,{key:e.name},s.a.createElement("div",{style:{display:"flex",alignItems:"center"}},s.a.createElement("span",{className:"price-value"},e.value),s.a.createElement("span",{className:"price-symbol"},e.name)),n<v.length-1&&s.a.createElement(Qe.a,{style:{margin:"11px auto"},fontSize:"18px"}))})))),s.a.createElement("div",{className:"footer"},n.isFree&&s.a.createElement(M.a,{style:{marginTop:"80px"},className:"bottom-button",rounded:!0,color:"primary",variant:"contained",onClick:h},p("launchBlocklet.nextStep")),!n.isFree&&s.a.createElement("div",{style:{marginTop:"80px"}},s.a.createElement(M.a,{variant:"outlined",rounded:!0,color:"primary",onClick:function(){return h()}},p("launchBlocklet.purchased")),s.a.createElement(M.a,{style:{marginLeft:"20px"},rounded:!0,color:"primary",variant:"contained",onClick:function(){c(!0)}},p("launchBlocklet.purchase")))),s.a.createElement($.a,{open:r,popup:!0,baseUrl:f,action:"acquire-asset",checkFn:J.a.create({baseURL:b()(f,"/store")}).get,onSuccess:function(){c(!1),h()},onClose:function(){c(!1)},checkTimeout:3e5,extraParams:{factory:n.nftFactory},webWalletUrl:Object(ce.x)(m),disableClose:!0,showDownload:!1,messages:{title:"\u8d2d\u4e70 ".concat(n.title),scan:"\u4f7f\u7528 DID \u94b1\u5305\u626b\u7801",confirm:"\u5728\u60a8\u7684 DID \u94b1\u5305\u4e0a\u786e\u8ba4",success:"\u6210\u529f"}}))};function $e(){var e=Object(u.n)().path,n=Object(k.useLocaleContext)(),t=n.t,a=n.locale,r=Object(N.a)(),c=Object(y.c)().api,i=(r.get("blocklet_meta_url")||"").trim();i=decodeURIComponent(i);var p=Object(m.a)(Object(o.a)(l.a.mark((function e(){var n,a;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i){e.next=2;break}throw new Error(t("common.invalidParam"));case 2:return e.next=4,c.getBlockletMetaFromUrl({input:{url:i,checkPrice:!0}});case 4:if(n=e.sent,a=n.meta){e.next=8;break}throw new Error(t("launchBlocklet.error.loadMetaFailed"));case 8:return e.abrupt("return",a);case 9:case"end":return e.stop()}}),e)}))));if(p.loading)return s.a.createElement(Ve,null,s.a.createElement(j.a,null));if(p.error)return s.a.createElement(Ve,null,s.a.createElement("div",null,s.a.createElement(g.a,{style:{width:"100%",wordBreak:"break-all"},variant:"icon",type:"error"},p.error.message)));var d=p.value,f=d.isFree?"".concat(e,"/agreement"):"".concat(e,"/purchase-app");f="".concat(f).concat(window.location.search);var h=b()(Object(ce.w)(),e),v=[{key:"app-info",name:t("launchBlocklet.purchaseApp"),path:b()(h,"purchase-app"),optional:!0},{key:"agreement",name:t("launchBlocklet.agreement"),path:b()(h,"agreement")},{key:"install",name:t("launchBlocklet.launch"),path:b()(h,"install")},{key:"complete",name:t("launchBlocklet.complete"),path:b()(h,"complete")}];return d.registryUrl=new URL(i).origin,s.a.createElement(x.StepProvider,{steps:v},s.a.createElement(x.Layout,{locale:a,blockletMeta:d,headerEndAddons:s.a.createElement(s.a.Fragment,null,s.a.createElement(w.a,{size:26,showText:!1,className:"locale-addon"})),logoUrl:Object(ce.q)({did:d.did,baseUrl:d.registryUrl,logoPath:d.logo})},s.a.createElement(en,null,s.a.createElement(u.g,null,s.a.createElement(u.c,{exact:!0,path:e,to:f}),s.a.createElement(u.d,{exact:!0,path:"".concat(e,"/purchase-app")},s.a.createElement(Ze,{blockletMeta:d})),s.a.createElement(u.d,{exact:!0,path:"".concat(e,"/agreement")},s.a.createElement(Pe,null)),s.a.createElement(u.d,{exact:!0,path:"".concat(e,"/install")},s.a.createElement(Me,{blockletMeta:d})),s.a.createElement(u.d,{exact:!0,path:"".concat(e,"/complete")},s.a.createElement(P,{blockletMeta:d}))))))}d.a.object.isRequired;var en=h.default.div(Xe||(Xe=Object(r.a)(["\n padding-top: 34px;\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 width: 300px;\n }\n"])));function nn(){return s.a.createElement($e,null)}},955:function(e,n,t){var a=t(11),r=t(262),c=t(966),l=t(532),o=function(e,n){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},l=t.parallel,o=void 0!==l&&l,i=t.sync;if(i){if(n(e),e.children){var s,u=c(e.children);try{for(u.s();!(s=u.n()).done;){var m=s.value;n(m)}}catch(h){u.e(h)}finally{u.f()}}return null}if(!o)return r(a.mark((function t(){var r,l,o;return a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,n(e);case 2:if(!e.children){t.next=20;break}r=c(e.children),t.prev=4,r.s();case 6:if((l=r.n()).done){t.next=12;break}return o=l.value,t.next=10,n(o);case 10:t.next=6;break;case 12:t.next=17;break;case 14:t.prev=14,t.t0=t.catch(4),r.e(t.t0);case 17:return t.prev=17,r.f(),t.finish(17);case 20:return t.abrupt("return",null);case 21:case"end":return t.stop()}}),t,null,[[4,14,17,20]])})))();var p=[];if(p.push(n(e)),e.children){var d,f=c(e.children);try{for(f.s();!(d=f.n()).done;){var b=d.value;p.push(n(b))}}catch(h){f.e(h)}finally{f.f()}}return Promise.all(p)};e.exports={isFreeBlocklet:function(e){return!e.payment||(e.payment.price||[]).map((function(e){return e.value||0})).every((function(e){return 0===e}))},forEachBlocklet:o,isAuthServiceEnabled:function e(n){if((l(n,"meta.interfaces")||[]).some((function(e){return(l(e,"services")||[]).some((function(e){return"@abtnode/auth-service"===e.name}))})))return!0;var t,a=l(n,"children")||[],r=c(a);try{for(r.s();!(t=r.n()).done;){if(e(t.value))return!0}}catch(o){r.e(o)}finally{r.f()}return!1},getRequiredMissingConfigs:function(e){var n=[],t=e.configs||[];t.forEach((function(t){t.required&&!t.value&&n.push({did:e.meta.did,key:t.key})}));var a,r=c(e.children||[]);try{var l=function(){var e=a.value;(e.configs||[]).forEach((function(a){!a.required||a.value||t.some((function(e){return e.key===a.key&&e.value}))||n.push({did:e.meta.did,key:a.key})}))};for(r.s();!(a=r.n()).done;)l()}catch(o){r.e(o)}finally{r.f()}return n},wipeSensitiveData:function(e){return e?(o(e,(function(n){(n.configs||[]).forEach((function(e){e.secure&&(e.value=e.value?"__encrypted__":"")})),(n.environments||[]).forEach((function(e){["BLOCKLET_APP_SK"].includes(e.key)&&(e.value="__encrypted__")})),delete e.configObj,delete e.environmentObj}),{sync:!0}),e):e}}}}]);
2
- //# sourceMappingURL=28.9b1197ca.chunk.js.map
1
+ (this["webpackJsonp@abtnode/webapp"]=this["webpackJsonp@abtnode/webapp"]||[]).push([[28],{1536:function(e,n,t){"use strict";t.r(n),t.d(n,"default",(function(){return nn}));var a,r=t(32),c=t(11),l=t.n(c),o=t(19),i=t(0),s=t.n(i),u=t(30),m=t(1249),d=t(5),p=t.n(d),f=t(105),b=t.n(f),h=t(14),v=t(339),g=t.n(v),k=t(22),x=t(1509),E=t(50),j=t.n(E),O=t(493),w=t.n(O),y=t(29),B=t(357),N=t(63),_=t(960),C=t.n(_),U=t(117),L=["children"];function F(e){var n=e.children,t=Object(U.a)(e,L);return s.a.createElement(S,t,n)}var S=h.default.div(a||(a=Object(r.a)(["\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\n "," {\n padding: 24px;\n }\n\n "," {\n flex: 1;\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"])),(function(e){return e.theme.breakpoints.up("md")}),(function(e){return e.theme.breakpoints.down("sm")}),(function(e){return e.theme.breakpoints.up("sm")}),(function(e){return e.theme.breakpoints.down("sm")})),A=t(102),D=t.n(A),M=["children"];function R(e){var n=e.children,t=Object(U.a)(e,M);return s.a.createElement(D.a,Object.assign({rounded:!0,variant:"contained",color:"primary"},t),n)}var T,z=s.a.forwardRef((function(e,n){return s.a.createElement(R,Object.assign({},e,{forwardedRef:n}))}));var I=Object(h.default)(F)(T||(T=Object(r.a)(["\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 margin-top: 70px;\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("sm")}),(function(e){return"error"===e.variant?e.theme.palette.error.main:e.theme.palette.success.main})),P=function(e){var n=e.blockletMeta,t=Object(k.useLocaleContext)().t,a=Object(y.c)().info,r=Object(B.a)(),c=decodeURIComponent(r.get("accessUrl")||"");return s.a.createElement(I,null,s.a.createElement(N.a,{component:"h5",variant:"h5"},t("launchBlocklet.complete")),s.a.createElement("div",{className:"body"},s.a.createElement(C.a,{className:"circle_icon"}),s.a.createElement(N.a,{className:"app-info_desc",component:"span"},t("launchBlocklet.installSuccess",{appName:n?n.title:"",serverName:a.name}))),s.a.createElement("div",{className:"footer"},s.a.createElement(z,{href:c,className:"bottom-button"},t("common.open"))))},q=t(57),W=t(13),K=t(59),V=t(275),J=t.n(V),G=t(990),H=t.n(G),Q=t(324),X=t(1074),Y=t.n(X),Z=t(148),$=t.n(Z),ee=t(1513),ne=t.n(ee),te=t(955),ae=t(40),re=t(879),ce=t(64),le=t(23),oe=t(95),ie=t(271),se=t.n(ie);function ue(e){var n=e.blockletMeta,t=e.blockletMetaUrl;return s.a.createElement(se.a,{src:Object(ce.q)({did:n.did,logoPath:n.logo,baseUrl:new URL(t).origin}),width:64,size:"contain",placeholder:"application logo"})}var me,de,pe=t(1514),fe=t.n(pe);function be(e){var n=e.onCancel,t=e.onUpgrade,a=Object(k.useLocaleContext)().t;return s.a.createElement(s.a.Fragment,null,s.a.createElement(he,{className:"body"},s.a.createElement("div",{className:"upgrade-wrapper"},s.a.createElement(fe.a,{className:"upgrade-wrapper_icon"})),s.a.createElement("div",{className:"status_title"},a("launchBlocklet.newVersion")),s.a.createElement("div",{className:"status_desc"},a("launchBlocklet.newVersionDesc"))),s.a.createElement(ve,{className:"footer"},s.a.createElement(z,{onClick:n,variant:"outlined"},a("launchBlocklet.later")),s.a.createElement(z,{className:"upgrade-button",onClick:t},a("launchBlocklet.upgradeNow"))))}be.defaultProps={onCancel:function(){},onUpgrade:function(){}};var he=Object(h.default)(F)(me||(me=Object(r.a)(["\n .upgrade-wrapper {\n background-color: #4f6af6;\n border-radius: 50%;\n padding: 5px;\n width: 48px;\n height: 48px;\n\n .upgrade-wrapper_icon {\n color: white;\n width: 100%;\n height: 100%;\n }\n }\n"]))),ve=h.default.div(de||(de=Object(r.a)(["\n .upgrade-button {\n margin-left: 24px;\n }\n"]))),ge=t(991),ke=t.n(ge);function xe(e){var n=e.did,t=Object(k.useLocaleContext)().t,a=Object(h.useTheme)(),r=Object(Q.a)(a.breakpoints.down("sm"));return s.a.createElement(s.a.Fragment,null,s.a.createElement("div",{className:"body"},s.a.createElement(ke.a,{className:"status_icon"}),s.a.createElement("div",{className:"status_title"},t("launchBlocklet.error.installedButStopped"))),s.a.createElement("div",{className:"footer"},s.a.createElement(z,{style:{width:"300px"},className:"footer-item",component:K.Link,to:"/blocklets/".concat(n,"/overview"),fullWidth:r,rounded:!0,color:"primary",variant:"contained"},t("launchBlocklet.viewApplication"))))}var Ee,je=t(1040),Oe=t.n(je),we=t(1515),ye=t.n(we);function Be(e){var n=e.message,t=e.actions,a=Object(k.useLocaleContext)().t;return s.a.createElement(s.a.Fragment,null,s.a.createElement(Ce,{className:"body"},s.a.createElement(ye.a,{className:"status_icon status_error"}),s.a.createElement("div",{className:"status_title status_error"},Oe()(a("common.failed"))),s.a.createElement("div",{className:"status_desc"},n)),t&&s.a.createElement("div",{className:"footer"},t))}var Ne,_e,Ce=h.default.div(Ee||(Ee=Object(r.a)(["\n .status_error {\n color: #f16e6e;\n }\n"]))),Ue="abtnode_launch_blocklet_key",Le=function(){return localStorage.getItem(Ue)};var Fe,Se=h.default.div(Ne||(Ne=Object(r.a)(["\n display: flex;\n flex-direction: column;\n align-items: center;\n color: #4f6af6;\n\n .spinner {\n color: inherit !important;\n }\n\n .text {\n font-size: 20px;\n margin-top: 24px;\n }\n"]))),Ae=Object(h.default)(F)(_e||(_e=Object(r.a)(["\n .body {\n margin-bottom: 50px;\n justify-content: center;\n align-items: center;\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-bottom: 80px;\n width: 100%;\n }\n\n .ills_block {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n .i_icon {\n width: 64px;\n height: 64px;\n }\n\n .i_name {\n margin-top: 32px;\n font-weight: 500;\n font-size: 18px;\n color: #222222;\n }\n\n .i_sub_name {\n color: #999999;\n }\n }\n\n "," {\n .ills_block {\n flex: 1;\n flex-shrink: 0;\n }\n }\n\n .arrow-icon {\n align-self: start;\n color: #d3e7fe;\n margin: 25px 40px 0;\n "," {\n margin: 25px 24px 0;\n }\n }\n\n .status_icon {\n width: 48px;\n height: 48px;\n }\n\n .status_title {\n margin-top: 16px;\n text-align: center;\n font-size: 24px;\n line-height: 28px;\n }\n\n .status_desc {\n text-align: center;\n margin-top: 16px;\n color: #999999;\n font-size: 16px;\n line-height: 28px;\n }\n"])),(function(e){return e.theme.breakpoints.down("sm")}),(function(e){return e.theme.breakpoints.down("sm")})),De=function(e){var n=e.blockletMeta,t=Object(y.c)(),a=t.api,r=t.info,c=Object(k.useLocaleContext)(),m=c.t,d=c.locale,p=Object(i.useState)(!1),f=Object(W.a)(p,2),b=f[0],v=f[1],x=Object(i.useState)(!1),E=Object(W.a)(x,2),O=E[0],w=E[1],_=Object(i.useState)({existed:!1,status:m("launchBlocklet.installing"),upgradeAvailable:null,blocklet:null,error:null}),C=Object(W.a)(_,2),U=C[0],L=C[1],F=Object(h.useTheme)(),S=Object(Q.a)(F.breakpoints.down("sm")),A=Object(u.k)(),D=Object(i.useState)({meta:null,loading:!0,error:null}),M=Object(W.a)(D,2),R=M[0],T=M[1],I=Object(B.a)().get("blocklet_meta_url"),P=new URL(I).origin,V=null;Object(i.useEffect)((function(){return function(){V&&V.isConnected()&&V.disconnect()}}),[V]);var G=function(e){var n="/blocklets/".concat(e.meta.did,"/configuration");A.push("/launch-blocklet/complete?status=installed&name=".concat(encodeURIComponent(e.meta.title),"&accessUrl=").concat(encodeURIComponent(n),"&blocklet_meta_url=").concat(I))},X=function(){var e=Object(o.a)(l.a.mark((function e(n){return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:L(Object(q.a)(Object(q.a)({},U),{},{status:m("blocklet.status.installed")})),Object(te.getRequiredMissingConfigs)(n).length>0&&setTimeout((function(){G(n)}),1500);case 2:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),Z=function(){var e=Object(o.a)(l.a.mark((function e(n){var t,a;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:t=n.interfaces.find((function(e){return new URL(e.url).hostname.endsWith(r.didDomain)})),a="",t&&(a=t.url),L(Object(q.a)(Object(q.a)({},U),{},{status:"".concat(m("blocklet.status.running"),", ").concat(m("common.redirecting"))})),setTimeout((function(){A.push("/launch-blocklet/complete?name=".concat(encodeURIComponent(Object(ce.r)(n.meta)),"&accessUrl=").concat(encodeURIComponent(a),"&blocklet_meta_url=").concat(I))}),1500);case 5:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),ee=function(){var e=Object(o.a)(l.a.mark((function e(n){var t,a;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=Object(oe.a)(Le()),e.next=3,t.getBlocklet({input:{did:n.meta.did}});case 3:return a=e.sent,e.next=6,pe(a.blocklet);case 6:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),ie=function(){var e=Object(o.a)(l.a.mark((function e(n){return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return w((function(e){return Object(q.a)(Object(q.a)({},e),{},{error:new Error(m("launchBlocklet.error.startFailed"))})})),e.next=3,X(n);case 3:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),se=function(e){return function(){L(Object(q.a)(Object(q.a)({},U),{},{error:new Error(e)}))}},me=function(e){return function(t){t.meta.did===n.did&&e(t)}},de=function(e,n){if(!n)return["stopped","stopping"].includes(e.status)?(w(!1),void L((function(e){return Object(q.a)(Object(q.a)({},e),{},{existed:!0})}))):["error","corrupted"].includes(e.status)?(w(!1),void L((function(e){return Object(q.a)(Object(q.a)({},e),{},{existed:!0,error:new Error(m("launchBlocklet.error.installedButError"))})}))):void("running"!==e.status?"installed"===e.status&&X(e):Z(e));!function(e,n){w(!1),L((function(e){return Object(q.a)(Object(q.a)({},e),{},{upgradeAvailable:n})}))}(0,n)},pe=function(){var e=Object(o.a)(l.a.mark((function e(n,t){return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n){e.next=4;break}return w(!1),L(Object(q.a)(Object(q.a)({},U),{},{error:new Error(m("launchBlocklet.error.launchFailed"))})),e.abrupt("return");case 4:L(Object(q.a)(Object(q.a)({},U),{},{blocklet:n})),de(n,t);case 6:case"end":return e.stop()}}),e)})));return function(n,t){return e.apply(this,arguments)}}(),fe=function(){var e=Object(o.a)(l.a.mark((function e(n,t){var r;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,r={did:n.meta.did,version:t.version,registryUrl:P},w(!0),L(Object(q.a)(Object(q.a)({},U),{},{status:m("common.upgrading")})),e.next=6,a.upgradeBlocklet({input:r});case 6:e.next=11;break;case 8:e.prev=8,e.t0=e.catch(0),L(Object(q.a)(Object(q.a)({},U),{},{error:new Error(m("launchBlocklet.error.upgradeFailed"))}));case 11:case"end":return e.stop()}}),e,null,[[0,8]])})));return function(n,t){return e.apply(this,arguments)}}(),he=function(){var e=Object(o.a)(l.a.mark((function e(n){return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:(V=Object(le.a)(n)).connect(),V.on(ae.BlockletEvents.installed,me(ee)),V.on(ae.BlockletEvents.started,me(ee)),V.on(ae.BlockletEvents.startFailed,me(ie)),V.on(ae.BlockletEvents.downloadFailed,me(se(m("launchBlocklet.error.downloadFailed")))),V.on(ae.BlockletEvents.installFailed,me(se(m("launchBlocklet.error.installFailed"))));case 7:case"end":return e.stop()}}),e)})));return function(n){return e.apply(this,arguments)}}(),ve=function(){var e=Object(o.a)(l.a.mark((function e(t){var a,r,c,o;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return a=t.sessionToken,r=t.upgradeAvailable,l=a,localStorage.setItem(Ue,l),e.next=4,he(a);case 4:return w(!0),v(!1),c=Object(oe.a)(a),e.next=9,c.getBlocklet({input:{did:n.did}});case 9:return o=e.sent,e.next=12,pe(o.blocklet,r);case 12:case"end":return e.stop()}var l}),e)})));return function(n){return e.apply(this,arguments)}}();if(Object(i.useEffect)((function(){(function(){var e=Object(o.a)(l.a.mark((function e(){var t,a,r,c,o;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(e.prev=0,!(t=Le())){e.next=27;break}return e.prev=3,a=Object(oe.a)(t),e.next=7,a.getBlocklet({input:{did:n.did}});case 7:if(r=e.sent,c=r.blocklet,he(t),!c){e.next=20;break}if(w(!0),!H.a.gt(n.version,c.meta.version)){e.next=18;break}return o=c.environments.find((function(e){return"BLOCKLET_APP_ID"===e.key})),e.next=16,pe(c,{appDid:o?o.value:"",did:c.meta.did,currentVersion:c.meta.version,version:n.version});case 16:e.next=20;break;case 18:return e.next=20,pe(c);case 20:return T((function(e){return Object(q.a)(Object(q.a)({},e),{},{loading:!1})})),e.abrupt("return");case 24:e.prev=24,e.t0=e.catch(3),localStorage.removeItem(Ue);case 27:T((function(e){return Object(q.a)(Object(q.a)({},e),{},{loading:!1})})),e.next=34;break;case 30:e.prev=30,e.t1=e.catch(0),console.error(e.t1),T((function(e){return Object(q.a)(Object(q.a)({},e),{},{loading:!1,error:new Error(m("launchBlocklet.error.loadMetaFailed"))})}));case 34:case"end":return e.stop()}}),e,null,[[0,30],[3,24]])})));return function(){return e.apply(this,arguments)}})()()}),[]),R.error)return s.a.createElement(g.a,{variant:"icon",type:"error"},R.error.message);if(R.loading)return s.a.createElement("div",{style:{marginTop:"100px",textAlign:"center",width:"100%"}},s.a.createElement(j.a,null));var ge="/";window.env&&window.env.apiPrefix&&(ge=window.env.apiPrefix);var ke=n.did,Ee=n.isFree;return!O&&U.upgradeAvailable?s.a.createElement(Ae,null,s.a.createElement(be,{onCancel:function(){var e;"running"!==(e=U.blocklet).status?G(e):Z(e)},onUpgrade:function(){return fe(U.blocklet,U.upgradeAvailable)}})):!O&&U.existed?s.a.createElement(Ae,null,s.a.createElement(xe,{did:n.did})):U.error?s.a.createElement(Ae,null,s.a.createElement(Be,{message:U.error.message,actions:s.a.createElement(z,{className:"bottom-button",disabled:b,fullWidth:S,onClick:function(){return v(!0)}},b&&s.a.createElement(j.a,{size:[16,10]}),m("common.retry"))})):s.a.createElement(Ae,null,!U.upgradeAvailable&&s.a.createElement("div",{className:"header"},s.a.createElement(N.a,{component:"h5",variant:"h5"},m(O?"launchBlocklet.start":"common.launch")),s.a.createElement(N.a,{color:"textSecondary"},m(O?"launchBlocklet.installingSubTitle":"launchBlocklet.subTitle",{appName:n.title,serverName:r.name}))),s.a.createElement("div",{className:"body"},!O&&!U.error&&s.a.createElement("div",{className:"illustrations"},s.a.createElement("div",{className:"ills_block"},s.a.createElement(ue,{className:"i_icon",blockletMeta:n,blockletMetaUrl:I}),s.a.createElement("div",{className:"i_name"},n.title)),s.a.createElement(Y.a,{className:"arrow-icon"}),s.a.createElement("div",{className:"ills_block"},s.a.createElement(ne.a,{className:"i_icon",color:"#BFBFBF"}),s.a.createElement("div",{className:"i_name"},r.name))),!O&&!U.existed&&s.a.createElement(re.a,{smDown:!0},s.a.createElement(z,{className:"bottom-button",disabled:b,fullWidth:S,onClick:function(){return v(!0)}},b&&s.a.createElement(j.a,{size:[16,10]}),m("common.install"))),O&&!U.error&&s.a.createElement(Se,null,s.a.createElement(j.a,{className:"spinner"}),s.a.createElement("div",{className:"text"},U.status))),s.a.createElement("div",{className:"footer"},!O&&U.existed&&s.a.createElement(z,{className:"footer-item bottom-button",component:K.Link,to:"/blocklets/".concat(ke,"/overview"),fullWidth:S,rounded:!0,color:"primary",variant:"contained"},m("launchBlocklet.viewApplication")),!O&&!U.existed&&s.a.createElement(re.a,{mdUp:!0},s.a.createElement(z,{className:"bottom-button",disabled:b,fullWidth:S,onClick:function(){return v(!0)}},b&&s.a.createElement(j.a,{size:[16,10]}),m("common.install")))),s.a.createElement($.a,{open:b,popup:!0,className:"connect",action:Ee?"launch-free-blocklet":"launch-paid-blocklet",checkFn:J.a.create({baseURL:ge}).get,checkTimeout:6e5,socketUrl:a.socketUrl,webWalletUrl:Object(ce.x)(r),onSuccess:ve,onClose:function(){return v(!1)},locale:d,messages:{title:"".concat(m("launchBlocklet.authDialog.title")),scan:m(Ee?"launchBlocklet.authDialog.freeDescription":"launchBlocklet.authDialog.nonFreeDescription"),confirm:m("launchBlocklet.authDialog.confirm"),success:m("launchBlocklet.authDialog.success")},extraParams:{blockletMetaUrl:I}}))},Me=t(374),Re=t(973),Te=t.n(Re),ze=t(389);function Ie(e){var n=Object.assign({},e);return s.a.createElement("div",Object.assign({},n,{style:{width:"100%"}}),s.a.createElement("h3",null,"End User License Agreement for Application"),s.a.createElement("p",null,"Blocklet Server License Agreement ArcBlock, Inc. version 2020-08-28"),s.a.createElement("p",null,"BLOCKLET SERVER LICENSE AGREEMENT"),s.a.createElement("p",null,"\u6682\u65e0"))}function Pe(){var e,n=Object(u.k)(),t=Object(i.useState)("application"),a=Object(W.a)(t,2),r=a[0],c=a[1],l=Object(k.useLocaleContext)().t,o=new Map([["application",{label:l("launchBlocklet.appLicenseName"),value:"application",component:Ie}],["abtnode",{label:l("launchBlocklet.abtnodeLicenseName"),value:"abtnode",component:ze.a}]]),m=[],d=Object(Me.a)(o.values());try{for(d.s();!(e=d.n()).done;){var p=e.value;m.push({label:p.label,value:p.value})}}catch(b){d.e(b)}finally{d.f()}var f=o.get(r).component;return s.a.createElement(Ke,null,s.a.createElement(N.a,{component:"h5",variant:"h5"},l("launchBlocklet.agreement")),s.a.createElement("div",{className:"body"},s.a.createElement(Te.a,{tabs:m,current:r,onChange:c}),s.a.createElement("div",{className:"agreement"},s.a.createElement("div",{className:"agreement_content"},s.a.createElement(f,{style:{width:"100%"}})))),s.a.createElement("div",{className:"footer"},s.a.createElement(z,{className:"bottom-button",onClick:function(){n.push("/launch-blocklet/install".concat(window.location.search))}},l("launchBlocklet.agreeAll"))))}var qe,We,Ke=Object(h.default)(F)(Fe||(Fe=Object(r.a)(["\n .body {\n justify-content: center;\n }\n .agreement {\n position: relative;\n flex: 1;\n display: flex;\n flex-direction: column;\n width: 100%;\n min-height: 300px;\n border: 1px solid #f0f0f0;\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 overflow-y: auto;\n\n "," {\n padding: 0 24px;\n }\n\n "," {\n padding: 0 16px;\n }\n }\n }\n"])),(function(e){return e.theme.breakpoints.up("md")}),(function(e){return e.theme.breakpoints.down("sm")}),(function(e){return e.theme.breakpoints.up("md")}),(function(e){return e.theme.breakpoints.down("sm")})),Ve=h.default.div(qe||(qe=Object(r.a)(["\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"]))),Je=t(532),Ge=t.n(Je),He=t(938),Qe=t.n(He);var Xe,Ye=Object(h.default)(F)(We||(We=Object(r.a)(["\n .app-desc {\n text-align: center;\n margin-top: 40px;\n\n .app-desc_name {\n font-weight: 500;\n font-size: 18px;\n line-height: 21px;\n color: #222222;\n }\n\n .app-desc_author {\n margin-top: 8px;\n font-weight: 500;\n font-size: 16px;\n line-height: 19px;\n color: #666666;\n }\n }\n\n .price {\n margin-top: 40px;\n color: #222222;\n text-align: center;\n\n .price-value {\n font-size: 36px;\n line-height: 42px;\n }\n\n .price-symbol {\n margin-left: 8px;\n font-size: 18px;\n line-height: 21px;\n }\n }\n"]))),Ze=function(e){var n=e.blockletMeta,t=Object(i.useState)(!1),a=Object(W.a)(t,2),r=a[0],c=a[1],l=Object(u.k)(),o=Object(B.a)(),m=Object(y.c)().info,d=Object(k.useLocaleContext)().t,p=o.get("blocklet_meta_url"),f=new URL(p).origin,h=function(){l.push("/launch-blocklet/agreement".concat(window.location.search))},v=[];return n.isFree||(v=Object(ce.h)(n)),s.a.createElement(Ye,null,s.a.createElement("div",{className:"header"},s.a.createElement(N.a,{component:"h5",variant:"h5"},d("launchBlocklet.purchaseApp")),s.a.createElement(N.a,{color:"textSecondary",style:{marginTop:"8px"}},d("launchBlocklet.appInfoDesc"))),s.a.createElement("div",{className:"body"},s.a.createElement(ue,{blockletMetaUrl:p,blockletMeta:n}),s.a.createElement("div",{className:"app-desc"},s.a.createElement("div",{className:"app-desc_name"},n.title),s.a.createElement("div",{className:"app-desc_author"},d("launchBlocklet.author",{author:Ge()(n,"author.name")}))),!n.isFree&&s.a.createElement("div",{className:"price"},v.map((function(e,n){return s.a.createElement(s.a.Fragment,{key:e.name},s.a.createElement("div",{style:{display:"flex",alignItems:"center"}},s.a.createElement("span",{className:"price-value"},e.value),s.a.createElement("span",{className:"price-symbol"},e.name)),n<v.length-1&&s.a.createElement(Qe.a,{style:{margin:"11px auto"},fontSize:"18px"}))})))),s.a.createElement("div",{className:"footer"},n.isFree&&s.a.createElement(D.a,{style:{marginTop:"80px"},className:"bottom-button",rounded:!0,color:"primary",variant:"contained",onClick:h},d("launchBlocklet.nextStep")),!n.isFree&&s.a.createElement("div",{style:{marginTop:"80px"}},s.a.createElement(D.a,{variant:"outlined",rounded:!0,color:"primary",onClick:function(){return h()}},d("launchBlocklet.purchased")),s.a.createElement(D.a,{style:{marginLeft:"20px"},rounded:!0,color:"primary",variant:"contained",onClick:function(){c(!0)}},d("launchBlocklet.purchase")))),s.a.createElement($.a,{open:r,popup:!0,baseUrl:f,action:"acquire-asset",checkFn:J.a.create({baseURL:b()(f,"/store")}).get,onSuccess:function(){c(!1),h()},onClose:function(){c(!1)},checkTimeout:3e5,extraParams:{factory:n.nftFactory},webWalletUrl:Object(ce.x)(m),disableClose:!0,showDownload:!1,messages:{title:"\u8d2d\u4e70 ".concat(n.title),scan:"\u4f7f\u7528 DID \u94b1\u5305\u626b\u7801",confirm:"\u5728\u60a8\u7684 DID \u94b1\u5305\u4e0a\u786e\u8ba4",success:"\u6210\u529f"}}))};function $e(){var e=Object(u.n)().path,n=Object(k.useLocaleContext)(),t=n.t,a=n.locale,r=Object(B.a)(),c=Object(y.c)().api,i=(r.get("blocklet_meta_url")||"").trim();i=decodeURIComponent(i);var d=Object(m.a)(Object(o.a)(l.a.mark((function e(){var n,a;return l.a.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(i){e.next=2;break}throw new Error(t("common.invalidParam"));case 2:return e.next=4,c.getBlockletMetaFromUrl({input:{url:i,checkPrice:!0}});case 4:if(n=e.sent,a=n.meta){e.next=8;break}throw new Error(t("launchBlocklet.error.loadMetaFailed"));case 8:return e.abrupt("return",a);case 9:case"end":return e.stop()}}),e)}))));if(d.loading)return s.a.createElement(Ve,null,s.a.createElement(j.a,null));if(d.error)return s.a.createElement(Ve,null,s.a.createElement("div",null,s.a.createElement(g.a,{style:{width:"100%",wordBreak:"break-all"},variant:"icon",type:"error"},d.error.message)));var p=d.value,f=p.isFree?"".concat(e,"/agreement"):"".concat(e,"/purchase-app");f="".concat(f).concat(window.location.search);var h=b()(Object(ce.w)(),e),v=[{key:"app-info",name:t("launchBlocklet.purchaseApp"),path:b()(h,"purchase-app"),optional:!0},{key:"agreement",name:t("launchBlocklet.agreement"),path:b()(h,"agreement")},{key:"install",name:t("launchBlocklet.launch"),path:b()(h,"install")},{key:"complete",name:t("launchBlocklet.complete"),path:b()(h,"complete")}];return p.registryUrl=new URL(i).origin,s.a.createElement(x.StepProvider,{steps:v},s.a.createElement(x.Layout,{locale:a,blockletMeta:p,headerEndAddons:s.a.createElement(s.a.Fragment,null,s.a.createElement(w.a,{size:26,showText:!1,className:"locale-addon"})),logoUrl:Object(ce.q)({did:p.did,baseUrl:p.registryUrl,logoPath:p.logo})},s.a.createElement(en,null,s.a.createElement(u.g,null,s.a.createElement(u.c,{exact:!0,path:e,to:f}),s.a.createElement(u.d,{exact:!0,path:"".concat(e,"/purchase-app")},s.a.createElement(Ze,{blockletMeta:p})),s.a.createElement(u.d,{exact:!0,path:"".concat(e,"/agreement")},s.a.createElement(Pe,null)),s.a.createElement(u.d,{exact:!0,path:"".concat(e,"/install")},s.a.createElement(De,{blockletMeta:p})),s.a.createElement(u.d,{exact:!0,path:"".concat(e,"/complete")},s.a.createElement(P,{blockletMeta:p}))))))}p.a.object.isRequired;var en=h.default.div(Xe||(Xe=Object(r.a)(["\n padding-top: 34px;\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 width: 300px;\n }\n"])));function nn(){return s.a.createElement($e,null)}},955:function(e,n,t){var a=t(11),r=t(262),c=t(966),l=t(532),o=function(e,n){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},l=t.parallel,o=void 0!==l&&l,i=t.sync;if(i){if(n(e),e.children){var s,u=c(e.children);try{for(u.s();!(s=u.n()).done;){var m=s.value;n(m)}}catch(h){u.e(h)}finally{u.f()}}return null}if(!o)return r(a.mark((function t(){var r,l,o;return a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,n(e);case 2:if(!e.children){t.next=20;break}r=c(e.children),t.prev=4,r.s();case 6:if((l=r.n()).done){t.next=12;break}return o=l.value,t.next=10,n(o);case 10:t.next=6;break;case 12:t.next=17;break;case 14:t.prev=14,t.t0=t.catch(4),r.e(t.t0);case 17:return t.prev=17,r.f(),t.finish(17);case 20:return t.abrupt("return",null);case 21:case"end":return t.stop()}}),t,null,[[4,14,17,20]])})))();var d=[];if(d.push(n(e)),e.children){var p,f=c(e.children);try{for(f.s();!(p=f.n()).done;){var b=p.value;d.push(n(b))}}catch(h){f.e(h)}finally{f.f()}}return Promise.all(d)};e.exports={isFreeBlocklet:function(e){return!e.payment||(e.payment.price||[]).map((function(e){return e.value||0})).every((function(e){return 0===e}))},isDeletableBlocklet:function(e){if(!e)return!1;var n=e.environments.find((function(e){return"BLOCKLET_DELETABLE"===e.key}));return!n||"yes"===n.value},forEachBlocklet:o,isAuthServiceEnabled:function e(n){if((l(n,"meta.interfaces")||[]).some((function(e){return(l(e,"services")||[]).some((function(e){return"@abtnode/auth-service"===e.name}))})))return!0;var t,a=l(n,"children")||[],r=c(a);try{for(r.s();!(t=r.n()).done;){if(e(t.value))return!0}}catch(o){r.e(o)}finally{r.f()}return!1},getRequiredMissingConfigs:function(e){var n=[],t=e.configs||[];t.forEach((function(t){t.required&&!t.value&&n.push({did:e.meta.did,key:t.key})}));var a,r=c(e.children||[]);try{var l=function(){var e=a.value;(e.configs||[]).forEach((function(a){!a.required||a.value||t.some((function(e){return e.key===a.key&&e.value}))||n.push({did:e.meta.did,key:a.key})}))};for(r.s();!(a=r.n()).done;)l()}catch(o){r.e(o)}finally{r.f()}return n},wipeSensitiveData:function(e){return e?(o(e,(function(n){(n.configs||[]).forEach((function(e){e.secure&&(e.value=e.value?"__encrypted__":"")})),(n.environments||[]).forEach((function(e){["BLOCKLET_APP_SK"].includes(e.key)&&(e.value="__encrypted__")})),delete e.configObj,delete e.environmentObj}),{sync:!0}),e):e}}}}]);
2
+ //# sourceMappingURL=28.40163b1b.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["components/launch-blocklet/content-layout.js","components/launch-blocklet/button.js","components/launch-blocklet/complete.js","components/launch-blocklet/app-logo.js","components/launch-blocklet/status/upgrade-available.js","components/launch-blocklet/status/not-running.js","components/launch-blocklet/status/error.js","components/launch-blocklet/install.js","components/launch-blocklet/agreement-app.js","components/launch-blocklet/agreement.js","components/launch-blocklet/center.js","pages/launch-blocklet/purchase-app.js","pages/launch-blocklet/index.js","../../../blocklet/meta/lib/util.js"],"names":["ContentLayout","children","props","Container","styled","div","theme","breakpoints","up","down","WrappedButton","rounded","variant","color","React","forwardRef","ref","forwardedRef","palette","error","main","success","Complete","blockletMeta","t","useLocaleContext","info","useNodeContext","query","useQuery","accessUrl","decodeURIComponent","get","Typography","component","className","appName","title","serverName","name","href","AppLogo","blockletMetaUrl","src","getBlockletLogoUrl","did","logoPath","logo","baseUrl","URL","origin","width","size","placeholder","Upgrade","onCancel","onUpgrade","Body","Footer","onClick","defaultProps","NotRunning","useTheme","isBreakpointsDownSm","useMediaQuery","style","Link","to","fullWidth","Error","message","actions","capitalize","SESSION_KEY","getSessionToken","localStorage","getItem","Waiting","Install","api","locale","useState","openAuth","setOpenAuth","launching","setLaunching","existed","status","upgradeAvailable","blocklet","launchState","setLaunchState","history","useHistory","meta","loading","blockletState","setBlockletState","blockletRegistryUrl","wsClient","useEffect","isConnected","disconnect","redirectToBlockletOverview","push","encodeURIComponent","handleInstalled","a","getRequiredMissingConfigs","length","setTimeout","handleRunningBlocklet","blockletInterface","interfaces","find","item","url","hostname","endsWith","didDomain","getBlockletName","handleSuccessEvent","nodeClient","createNewClient","getBlocklet","input","result","handleLaunchState","handleStartFailed","pre","createLaunchFailedHandler","errorMessage","createBlockletEventHandler","handler","handleBlockletExisted","includes","handleUpgradeAvailable","handleUpgrade","version","registryUrl","upgradeBlocklet","handleAuthorized","sessionToken","createWsClient","connect","on","BlockletEvents","installed","started","startFailed","downloadFailed","installFailed","handleConnectSuccess","value","setItem","token","semver","gt","appDidEnv","environments","e","key","appDid","currentVersion","removeItem","console","func","type","marginTop","textAlign","window","env","apiPrefix","isFree","b","disabled","Hidden","smDown","mdUp","open","popup","action","checkFn","axios","create","baseURL","checkTimeout","socketUrl","webWalletUrl","getWebWalletUrl","onSuccess","onClose","messages","scan","confirm","extraParams","AgreementApp","Agreement","currentTab","setCurrentTab","tabMap","Map","label","AgreementNode","tabs","values","TabContent","Content","current","onChange","location","search","Center","AppInfo","pay","setPay","toNextStep","priceList","formatFactoryPrice","author","map","index","Fragment","display","alignItems","margin","fontSize","marginLeft","joinUrl","factory","nftFactory","disableClose","showDownload","Launcher","path","useRouteMatch","trim","state","useAsync","getBlockletMetaFromUrl","checkPrice","wordBreak","firstPageUrl","basePath","getPathPrefix","steps","optional","headerEndAddons","showText","logoUrl","exact","PropTypes","object","isRequired","BlockletLauncher","require","forEachBlocklet","cb","parallel","sync","child","tasks","Promise","all","module","exports","isFreeBlocklet","payment","price","x","every","isDeletableBlocklet","config","isAuthServiceEnabled","some","s","missingConfigs","configs","forEach","required","y","wipeSensitiveData","d","secure","configObj","environmentObj"],"mappings":"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","file":"static/js/28.40163b1b.chunk.js","sourcesContent":["import React from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\n\nexport default function ContentLayout({ children, ...props }) {\n return <Container {...props}>{children}</Container>;\n}\n\nContentLayout.propTypes = {\n children: PropTypes.any.isRequired,\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 .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\n ${props => props.theme.breakpoints.up('md')} {\n padding: 24px;\n }\n\n ${props => props.theme.breakpoints.down('sm')} {\n flex: 1;\n padding: 0 16px 16px;\n }\n }\n\n .footer {\n display: flex;\n justify-content: center;\n\n ${props => props.theme.breakpoints.up('sm')} {\n padding-bottom: 34px;\n }\n\n ${props => props.theme.breakpoints.down('sm')} {\n margin-top: auto;\n padding-bottom: 10px;\n }\n }\n`;\n","import React from 'react';\nimport Button from '@arcblock/ux/lib/Button';\nimport PropTypes from 'prop-types';\n\nfunction WrappedButton({ children, ...props }) {\n return (\n <Button rounded variant=\"contained\" color=\"primary\" {...props}>\n {children}\n </Button>\n );\n}\n\nWrappedButton.propTypes = {\n children: PropTypes.any.isRequired,\n};\n\nexport default React.forwardRef((props, ref) => <WrappedButton {...props} forwardedRef={ref} />);\n","import React from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { Typography } from '@material-ui/core';\nimport CheckCircle from '@material-ui/icons/CheckCircle';\nimport { useNodeContext } from '../../contexts/node';\n\nimport useQuery from '../../hooks/query';\nimport ContentLayout from './content-layout';\nimport Button from './button';\n\nfunction Complete({ blockletMeta }) {\n const { t } = useLocaleContext();\n const { info } = useNodeContext();\n const query = useQuery();\n const accessUrl = decodeURIComponent(query.get('accessUrl') || '');\n\n return (\n <Container>\n <Typography component=\"h5\" variant=\"h5\">\n {t('launchBlocklet.complete')}\n </Typography>\n <div className=\"body\">\n <CheckCircle className=\"circle_icon\" />\n <Typography className=\"app-info_desc\" component=\"span\">\n {t('launchBlocklet.installSuccess', {\n appName: blockletMeta ? blockletMeta.title : '',\n serverName: info.name,\n })}\n </Typography>\n </div>\n <div className=\"footer\">\n <Button href={accessUrl} className=\"bottom-button\">\n {t('common.open')}\n </Button>\n </div>\n </Container>\n );\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 margin-top: 70px;\n text-align: center;\n }\n\n ${props => {\n return props.theme.breakpoints.down('sm');\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 blockletMeta: PropTypes.object.isRequired,\n};\n\nexport default Complete;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Img from '@arcblock/ux/lib/Img';\nimport { getBlockletLogoUrl } from '../../libs/util';\n\nexport default function AppLogo({ blockletMeta, blockletMetaUrl }) {\n return (\n <Img\n src={getBlockletLogoUrl({\n did: blockletMeta.did,\n logoPath: blockletMeta.logo,\n baseUrl: new URL(blockletMetaUrl).origin,\n })}\n width={64}\n size=\"contain\"\n placeholder=\"application logo\"\n />\n );\n}\n\nAppLogo.propTypes = {\n blockletMeta: PropTypes.object.isRequired,\n blockletMetaUrl: PropTypes.string.isRequired,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport AutorenewIcon from '@material-ui/icons/AutorenewOutlined';\nimport Button from '../button';\nimport ContentLayout from '../content-layout';\n\nexport default function Upgrade({ onCancel, onUpgrade }) {\n const { t } = useLocaleContext();\n return (\n <>\n <Body className=\"body\">\n <div className=\"upgrade-wrapper\">\n <AutorenewIcon className=\"upgrade-wrapper_icon\" />\n </div>\n <div className=\"status_title\">{t('launchBlocklet.newVersion')}</div>\n <div className=\"status_desc\">{t('launchBlocklet.newVersionDesc')}</div>\n </Body>\n <Footer className=\"footer\">\n <Button onClick={onCancel} variant=\"outlined\">\n {t('launchBlocklet.later')}\n </Button>\n <Button className=\"upgrade-button\" onClick={onUpgrade}>\n {t('launchBlocklet.upgradeNow')}\n </Button>\n </Footer>\n </>\n );\n}\n\nUpgrade.propTypes = {\n onCancel: PropTypes.func,\n onUpgrade: PropTypes.func,\n};\n\nUpgrade.defaultProps = {\n onCancel: () => {},\n onUpgrade: () => {},\n};\n\nconst Body = styled(ContentLayout)`\n .upgrade-wrapper {\n background-color: #4f6af6;\n border-radius: 50%;\n padding: 5px;\n width: 48px;\n height: 48px;\n\n .upgrade-wrapper_icon {\n color: white;\n width: 100%;\n height: 100%;\n }\n }\n`;\n\nconst Footer = styled.div`\n .upgrade-button {\n margin-left: 24px;\n }\n`;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport { useTheme } from 'styled-components';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\nimport WarningIcon from '@material-ui/icons/Warning';\nimport Button from '../button';\n\nexport default function NotRunning({ did }) {\n const { t } = useLocaleContext();\n const theme = useTheme();\n const isBreakpointsDownSm = useMediaQuery(theme.breakpoints.down('sm'));\n\n return (\n <>\n <div className=\"body\">\n <WarningIcon className=\"status_icon\" />\n <div className=\"status_title\">{t('launchBlocklet.error.installedButStopped')}</div>\n </div>\n <div className=\"footer\">\n <Button\n style={{ width: '300px' }}\n className=\"footer-item\"\n component={Link}\n to={`/blocklets/${did}/overview`}\n fullWidth={isBreakpointsDownSm}\n rounded\n color=\"primary\"\n variant=\"contained\">\n {t('launchBlocklet.viewApplication')}\n </Button>\n </div>\n </>\n );\n}\n\nNotRunning.propTypes = {\n did: PropTypes.string.isRequired,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport capitalize from 'lodash/capitalize';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport CancelIcon from '@material-ui/icons/Cancel';\nimport styled from 'styled-components';\n\nexport default function Error({ message, actions }) {\n const { t } = useLocaleContext();\n\n return (\n <>\n <Body className=\"body\">\n <CancelIcon className=\"status_icon status_error\" />\n <div className=\"status_title status_error\">{capitalize(t('common.failed'))}</div>\n <div className=\"status_desc\">{message}</div>\n </Body>\n {actions && <div className=\"footer\">{actions}</div>}\n </>\n );\n}\n\nError.propTypes = {\n actions: PropTypes.any.isRequired,\n message: PropTypes.string.isRequired,\n};\n\nconst Body = styled.div`\n .status_error {\n color: #f16e6e;\n }\n`;\n","import React, { useEffect, useState } from 'react';\nimport { useHistory, Link } from 'react-router-dom';\nimport axios from 'axios';\nimport semver from 'semver';\nimport PropTypes from 'prop-types';\nimport styled, { useTheme } from 'styled-components';\nimport { Typography, useMediaQuery } from '@material-ui/core';\nimport ArrowForward from '@material-ui/icons/ArrowForward';\nimport Alert from '@arcblock/ux/lib/Alert';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Connect from '@arcblock/did-connect/lib/Connect';\nimport ABTNodeIcon from '@arcblock/icons/lib/ABTNode';\nimport { getRequiredMissingConfigs } from '@blocklet/meta/lib/util';\nimport { BlockletEvents } from '@blocklet/meta/lib/constants';\nimport Hidden from '@material-ui/core/Hidden';\nimport { useNodeContext } from '../../contexts/node';\nimport { getBlockletName, getWebWalletUrl } from '../../libs/util';\nimport { create as createWsClient } from '../../libs/ws';\nimport { create as createNewClient } from '../../libs/node';\nimport useQuery from '../../hooks/query';\nimport Button from './button';\nimport ContentLayout from './content-layout';\nimport AppLogo from './app-logo';\nimport StatusUpgrade from './status/upgrade-available';\nimport StatusNotRunning from './status/not-running';\nimport StatusError from './status/error';\n\nconst SESSION_KEY = 'abtnode_launch_blocklet_key';\nconst getSessionToken = () => localStorage.getItem(SESSION_KEY);\nconst setSessionToken = value => localStorage.setItem(SESSION_KEY, value);\nconst clearSessionToken = () => localStorage.removeItem(SESSION_KEY);\n\nfunction Install({ blockletMeta }) {\n const { api, info } = useNodeContext();\n const { t, locale } = useLocaleContext();\n const [openAuth, setOpenAuth] = useState(false);\n const [launching, setLaunching] = useState(false);\n const [launchState, setLaunchState] = useState({\n existed: false,\n status: t('launchBlocklet.installing'),\n upgradeAvailable: null,\n blocklet: null,\n error: null,\n });\n const theme = useTheme();\n const isBreakpointsDownSm = useMediaQuery(theme.breakpoints.down('sm'));\n const history = useHistory();\n const [blockletState, setBlockletState] = useState({\n meta: null,\n loading: true,\n error: null,\n });\n const query = useQuery();\n const blockletMetaUrl = query.get('blocklet_meta_url');\n const blockletRegistryUrl = new URL(blockletMetaUrl).origin;\n let wsClient = null;\n\n useEffect(() => {\n return () => {\n if (wsClient && wsClient.isConnected()) {\n wsClient.disconnect();\n }\n };\n }, [wsClient]);\n\n const redirectToBlockletOverview = blocklet => {\n const accessUrl = `/blocklets/${blocklet.meta.did}/configuration`;\n history.push(\n `/launch-blocklet/complete?status=installed&name=${encodeURIComponent(\n blocklet.meta.title\n )}&accessUrl=${encodeURIComponent(accessUrl)}&blocklet_meta_url=${blockletMetaUrl}`\n );\n };\n\n const handleInstalled = async blocklet => {\n setLaunchState({ ...launchState, status: t('blocklet.status.installed') });\n\n if (getRequiredMissingConfigs(blocklet).length > 0) {\n setTimeout(() => {\n redirectToBlockletOverview(blocklet);\n }, 1500);\n }\n };\n\n const handleRunningBlocklet = async blocklet => {\n const blockletInterface = blocklet.interfaces.find(item => {\n const urlObj = new URL(item.url);\n return urlObj.hostname.endsWith(info.didDomain);\n });\n\n let accessUrl = '';\n if (blockletInterface) {\n accessUrl = blockletInterface.url;\n }\n\n setLaunchState({\n ...launchState,\n status: `${t('blocklet.status.running')}, ${t('common.redirecting')}`,\n });\n\n setTimeout(() => {\n history.push(\n `/launch-blocklet/complete?name=${encodeURIComponent(\n getBlockletName(blocklet.meta)\n )}&accessUrl=${encodeURIComponent(accessUrl)}&blocklet_meta_url=${blockletMetaUrl}`\n );\n }, 1500);\n };\n\n const handleSuccessEvent = async blocklet => {\n const nodeClient = createNewClient(getSessionToken());\n const result = await nodeClient.getBlocklet({ input: { did: blocklet.meta.did } });\n\n await handleLaunchState(result.blocklet);\n };\n\n const handleErrored = () => {\n setLaunching(false);\n setLaunchState(pre => ({ ...pre, existed: true, error: new Error(t('launchBlocklet.error.installedButError')) }));\n };\n\n const handleUpgradeAvailable = (blocklet, upgradeAvailable) => {\n setLaunching(false);\n setLaunchState(pre => ({ ...pre, upgradeAvailable }));\n };\n\n const handleStopped = () => {\n setLaunching(false);\n setLaunchState(pre => ({ ...pre, existed: true }));\n };\n\n const handleStartFailed = async blocklet => {\n setLaunching(pre => ({ ...pre, error: new Error(t('launchBlocklet.error.startFailed')) }));\n await handleInstalled(blocklet);\n };\n\n const createLaunchFailedHandler = errorMessage => () => {\n setLaunchState({\n ...launchState,\n error: new Error(errorMessage),\n });\n };\n\n const createBlockletEventHandler = handler => blocklet => {\n if (blocklet.meta.did === blockletMeta.did) {\n handler(blocklet);\n }\n };\n\n const handleBlockletExisted = (blocklet, upgradeAvailable) => {\n if (upgradeAvailable) {\n handleUpgradeAvailable(blocklet, upgradeAvailable);\n return;\n }\n\n if (['stopped', 'stopping'].includes(blocklet.status)) {\n handleStopped(blocklet);\n return;\n }\n\n if (['error', 'corrupted'].includes(blocklet.status)) {\n handleErrored(blocklet);\n return;\n }\n\n if (blocklet.status === 'running') {\n handleRunningBlocklet(blocklet);\n return;\n }\n\n if (blocklet.status === 'installed') {\n handleInstalled(blocklet);\n }\n };\n\n const handleLaunchState = async (blocklet, upgradeAvailable) => {\n if (!blocklet) {\n setLaunching(false);\n setLaunchState({ ...launchState, error: new Error(t('launchBlocklet.error.launchFailed')) });\n return;\n }\n\n setLaunchState({ ...launchState, blocklet });\n handleBlockletExisted(blocklet, upgradeAvailable);\n };\n\n const handleCancelUpgrade = b => {\n if (b.status === 'running') {\n handleRunningBlocklet(b);\n return;\n }\n\n redirectToBlockletOverview(b);\n };\n\n const handleUpgrade = async (blocklet, upgradeAvailable) => {\n try {\n const input = {\n did: blocklet.meta.did,\n version: upgradeAvailable.version,\n registryUrl: blockletRegistryUrl,\n };\n\n setLaunching(true);\n setLaunchState({ ...launchState, status: t('common.upgrading') });\n await api.upgradeBlocklet({ input });\n } catch (error) {\n setLaunchState({ ...launchState, error: new Error(t('launchBlocklet.error.upgradeFailed')) });\n }\n };\n\n const handleAuthorized = async sessionToken => {\n wsClient = createWsClient(sessionToken);\n wsClient.connect();\n\n wsClient.on(BlockletEvents.installed, createBlockletEventHandler(handleSuccessEvent));\n wsClient.on(BlockletEvents.started, createBlockletEventHandler(handleSuccessEvent));\n wsClient.on(BlockletEvents.startFailed, createBlockletEventHandler(handleStartFailed));\n\n wsClient.on(\n BlockletEvents.downloadFailed,\n createBlockletEventHandler(createLaunchFailedHandler(t('launchBlocklet.error.downloadFailed')))\n );\n wsClient.on(\n BlockletEvents.installFailed,\n createBlockletEventHandler(createLaunchFailedHandler(t('launchBlocklet.error.installFailed')))\n );\n };\n\n const handleConnectSuccess = async ({ sessionToken, upgradeAvailable }) => {\n setSessionToken(sessionToken);\n await handleAuthorized(sessionToken);\n setLaunching(true);\n setOpenAuth(false);\n\n // 上面的事件成功订阅之前,Blocklet 可能已经安装成功了,所以这里重新获取一下 Blocklet 的状态,确保状态是正确的\n const nodeClient = createNewClient(sessionToken);\n const result = await nodeClient.getBlocklet({ input: { did: blockletMeta.did } });\n await handleLaunchState(result.blocklet, upgradeAvailable);\n };\n\n const handleClose = () => setOpenAuth(false);\n\n useEffect(() => {\n const func = async () => {\n try {\n const token = getSessionToken();\n if (token) {\n // 这里是为了校验 token 是否依然有效\n try {\n const nodeClient = createNewClient(token);\n const { blocklet } = await nodeClient.getBlocklet({ input: { did: blockletMeta.did } });\n\n handleAuthorized(token);\n\n if (blocklet) {\n setLaunching(true);\n if (semver.gt(blockletMeta.version, blocklet.meta.version)) {\n const appDidEnv = blocklet.environments.find(e => e.key === 'BLOCKLET_APP_ID');\n await handleLaunchState(blocklet, {\n appDid: appDidEnv ? appDidEnv.value : '',\n did: blocklet.meta.did,\n currentVersion: blocklet.meta.version,\n version: blockletMeta.version,\n });\n } else {\n await handleLaunchState(blocklet);\n }\n }\n\n setBlockletState(pre => ({ ...pre, loading: false }));\n return;\n } catch (error) {\n clearSessionToken();\n }\n }\n\n setBlockletState(pre => ({ ...pre, loading: false }));\n } catch (error) {\n console.error(error);\n setBlockletState(pre => ({\n ...pre,\n loading: false,\n error: new Error(t('launchBlocklet.error.loadMetaFailed')),\n }));\n }\n };\n\n func();\n }, []); // eslint-disable-line\n\n if (blockletState.error) {\n return (\n <Alert variant=\"icon\" type=\"error\">\n {blockletState.error.message}\n </Alert>\n );\n }\n\n if (blockletState.loading) {\n return (\n <div style={{ marginTop: '100px', textAlign: 'center', width: '100%' }}>\n <Spinner />\n </div>\n );\n }\n\n let baseUrl = '/';\n if (window.env && window.env.apiPrefix) {\n baseUrl = window.env.apiPrefix;\n }\n\n const { did, isFree } = blockletMeta;\n\n if (!launching && launchState.upgradeAvailable) {\n return (\n <Container>\n <StatusUpgrade\n onCancel={() => handleCancelUpgrade(launchState.blocklet)}\n onUpgrade={() => handleUpgrade(launchState.blocklet, launchState.upgradeAvailable)}\n />\n </Container>\n );\n }\n\n if (!launching && launchState.existed) {\n return (\n <Container>\n <StatusNotRunning did={blockletMeta.did} />\n </Container>\n );\n }\n\n if (launchState.error) {\n return (\n <Container>\n <StatusError\n message={launchState.error.message}\n actions={\n <Button\n className=\"bottom-button\"\n disabled={openAuth}\n fullWidth={isBreakpointsDownSm}\n onClick={() => setOpenAuth(true)}>\n {openAuth && <Spinner size={[16, 10]} />}\n {t('common.retry')}\n </Button>\n }\n />\n </Container>\n );\n }\n\n return (\n <Container>\n {!launchState.upgradeAvailable && (\n <div className=\"header\">\n <Typography component=\"h5\" variant=\"h5\">\n {launching ? t('launchBlocklet.start') : t('common.launch')}\n </Typography>\n <Typography color=\"textSecondary\">\n {launching\n ? t('launchBlocklet.installingSubTitle', { appName: blockletMeta.title, serverName: info.name })\n : t('launchBlocklet.subTitle', { appName: blockletMeta.title, serverName: info.name })}\n </Typography>\n </div>\n )}\n <div className=\"body\">\n {!launching && !launchState.error && (\n <div className=\"illustrations\">\n <div className=\"ills_block\">\n <AppLogo className=\"i_icon\" blockletMeta={blockletMeta} blockletMetaUrl={blockletMetaUrl} />\n <div className=\"i_name\">{blockletMeta.title}</div>\n </div>\n <ArrowForward className=\"arrow-icon\" />\n <div className=\"ills_block\">\n <ABTNodeIcon className=\"i_icon\" color=\"#BFBFBF\" />\n <div className=\"i_name\">{info.name}</div>\n </div>\n </div>\n )}\n {!launching && !launchState.existed && (\n <Hidden smDown>\n <Button\n className=\"bottom-button\"\n disabled={openAuth}\n fullWidth={isBreakpointsDownSm}\n onClick={() => setOpenAuth(true)}>\n {openAuth && <Spinner size={[16, 10]} />}\n {t('common.install')}\n </Button>\n </Hidden>\n )}\n {launching && !launchState.error && (\n <Waiting>\n <Spinner className=\"spinner\" />\n <div className=\"text\">{launchState.status}</div>\n </Waiting>\n )}\n </div>\n <div className=\"footer\">\n {!launching && launchState.existed && (\n <Button\n className=\"footer-item bottom-button\"\n component={Link}\n to={`/blocklets/${did}/overview`}\n fullWidth={isBreakpointsDownSm}\n rounded\n color=\"primary\"\n variant=\"contained\">\n {t('launchBlocklet.viewApplication')}\n </Button>\n )}\n {!launching && !launchState.existed && (\n <Hidden mdUp>\n <Button\n className=\"bottom-button\"\n disabled={openAuth}\n fullWidth={isBreakpointsDownSm}\n onClick={() => setOpenAuth(true)}>\n {openAuth && <Spinner size={[16, 10]} />}\n {t('common.install')}\n </Button>\n </Hidden>\n )}\n </div>\n <Connect\n open={openAuth}\n popup\n className=\"connect\"\n action={isFree ? 'launch-free-blocklet' : 'launch-paid-blocklet'}\n checkFn={axios.create({ baseURL: baseUrl }).get}\n checkTimeout={10 * 60 * 1000}\n socketUrl={api.socketUrl}\n webWalletUrl={getWebWalletUrl(info)}\n onSuccess={handleConnectSuccess}\n onClose={handleClose}\n locale={locale}\n messages={{\n title: `${t('launchBlocklet.authDialog.title')}`,\n scan: isFree\n ? t('launchBlocklet.authDialog.freeDescription')\n : t('launchBlocklet.authDialog.nonFreeDescription'),\n confirm: t('launchBlocklet.authDialog.confirm'),\n success: t('launchBlocklet.authDialog.success'),\n }}\n extraParams={{ blockletMetaUrl }}\n />\n </Container>\n );\n}\n\nInstall.propTypes = {\n blockletMeta: PropTypes.object.isRequired,\n};\n\nconst Waiting = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n color: #4f6af6;\n\n .spinner {\n color: inherit !important;\n }\n\n .text {\n font-size: 20px;\n margin-top: 24px;\n }\n`;\n\nconst Container = styled(ContentLayout)`\n .body {\n margin-bottom: 50px;\n justify-content: center;\n align-items: center;\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-bottom: 80px;\n width: 100%;\n }\n\n .ills_block {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n .i_icon {\n width: 64px;\n height: 64px;\n }\n\n .i_name {\n margin-top: 32px;\n font-weight: 500;\n font-size: 18px;\n color: #222222;\n }\n\n .i_sub_name {\n color: #999999;\n }\n }\n\n ${props => props.theme.breakpoints.down('sm')} {\n .ills_block {\n flex: 1;\n flex-shrink: 0;\n }\n }\n\n .arrow-icon {\n align-self: start;\n color: #d3e7fe;\n margin: 25px 40px 0;\n ${props => props.theme.breakpoints.down('sm')} {\n margin: 25px 24px 0;\n }\n }\n\n .status_icon {\n width: 48px;\n height: 48px;\n }\n\n .status_title {\n margin-top: 16px;\n text-align: center;\n font-size: 24px;\n line-height: 28px;\n }\n\n .status_desc {\n text-align: center;\n margin-top: 16px;\n color: #999999;\n font-size: 16px;\n line-height: 28px;\n }\n`;\n\nexport default Install;\n","import React from 'react';\n\nexport 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 React, { useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { Typography } from '@material-ui/core';\nimport Tabs from '@arcblock/ux/lib/Tabs';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from './button';\nimport AgreementNode from '../node/eula-content'; // eslint-disable-line\nimport AgreementApp from './agreement-app';\nimport ContentLayout from './content-layout';\n\nexport default function Agreement() {\n const history = useHistory();\n const [currentTab, setCurrentTab] = useState('application');\n const { t } = useLocaleContext();\n // TODO: 加载 Blocklet 定义的 Agreement\n\n const handleAgree = () => {\n history.push(`/launch-blocklet/install${window.location.search}`);\n };\n\n const tabMap = new Map([\n [\n 'application',\n {\n label: t('launchBlocklet.appLicenseName'),\n value: 'application',\n component: AgreementApp,\n },\n ],\n [\n 'abtnode',\n {\n label: t('launchBlocklet.abtnodeLicenseName'),\n value: 'abtnode',\n component: AgreementNode,\n },\n ],\n ]);\n\n const tabs = [];\n for (const value of tabMap.values()) {\n tabs.push({\n label: value.label,\n value: value.value,\n });\n }\n\n const TabContent = tabMap.get(currentTab).component;\n\n return (\n <Content>\n <Typography component=\"h5\" variant=\"h5\">\n {t('launchBlocklet.agreement')}\n </Typography>\n <div className=\"body\">\n <Tabs tabs={tabs} current={currentTab} onChange={setCurrentTab} />\n <div className=\"agreement\">\n <div className=\"agreement_content\">\n <TabContent style={{ width: '100%' }} />\n </div>\n </div>\n </div>\n <div className=\"footer\">\n <Button className=\"bottom-button\" onClick={handleAgree}>\n {t('launchBlocklet.agreeAll')}\n </Button>\n </div>\n </Content>\n );\n}\n\nconst Content = styled(ContentLayout)`\n .body {\n justify-content: center;\n }\n .agreement {\n position: relative;\n flex: 1;\n display: flex;\n flex-direction: column;\n width: 100%;\n min-height: 300px;\n border: 1px solid #f0f0f0;\n border-radius: 12px;\n\n ${props => props.theme.breakpoints.up('md')} {\n margin-top: 24px;\n }\n\n ${props => props.theme.breakpoints.down('sm')} {\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 overflow-y: auto;\n\n ${props => props.theme.breakpoints.up('md')} {\n padding: 0 24px;\n }\n\n ${props => props.theme.breakpoints.down('sm')} {\n padding: 0 16px;\n }\n }\n }\n`;\n","import styled from 'styled-components';\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 React, { useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport axios from 'axios';\nimport get from 'lodash/get';\nimport joinUrl from 'url-join';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { Typography } from '@material-ui/core';\nimport AddIcon from '@material-ui/icons/Add';\nimport Button from '@arcblock/ux/lib/Button';\nimport Connect from '@arcblock/did-connect/lib/Connect';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport { formatFactoryPrice, getWebWalletUrl } from '../../libs/util';\nimport { useNodeContext } from '../../contexts/node';\nimport useQuery from '../../hooks/query';\nimport ContentLayout from '../../components/launch-blocklet/content-layout';\nimport AppLogo from '../../components/launch-blocklet/app-logo';\n\nfunction AppInfo({ blockletMeta }) {\n const [pay, setPay] = useState(false);\n const history = useHistory();\n const query = useQuery();\n const { info } = useNodeContext();\n const { t } = useLocaleContext();\n const blockletMetaUrl = query.get('blocklet_meta_url');\n const registryUrl = new URL(blockletMetaUrl).origin;\n\n const handleStartPay = () => {\n setPay(true);\n };\n\n const toNextStep = () => {\n history.push(`/launch-blocklet/agreement${window.location.search}`);\n };\n\n const handlePaySuccess = () => {\n setPay(false);\n toNextStep();\n };\n\n const handleAlreadyPurchased = () => toNextStep();\n\n const handleClose = () => {\n setPay(false);\n };\n\n let priceList = [];\n if (!blockletMeta.isFree) {\n priceList = formatFactoryPrice(blockletMeta);\n }\n\n return (\n <Container>\n <div className=\"header\">\n <Typography component=\"h5\" variant=\"h5\">\n {t('launchBlocklet.purchaseApp')}\n </Typography>\n <Typography color=\"textSecondary\" style={{ marginTop: '8px' }}>\n {t('launchBlocklet.appInfoDesc')}\n </Typography>\n </div>\n <div className=\"body\">\n <AppLogo blockletMetaUrl={blockletMetaUrl} blockletMeta={blockletMeta} />\n <div className=\"app-desc\">\n <div className=\"app-desc_name\">{blockletMeta.title}</div>\n <div className=\"app-desc_author\">\n {t('launchBlocklet.author', { author: get(blockletMeta, 'author.name') })}\n </div>\n </div>\n {!blockletMeta.isFree && (\n <div className=\"price\">\n {priceList.map((item, index) => (\n <React.Fragment key={item.name}>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <span className=\"price-value\">{item.value}</span>\n <span className=\"price-symbol\">{item.name}</span>\n </div>\n {index < priceList.length - 1 && <AddIcon style={{ margin: '11px auto' }} fontSize=\"18px\" />}\n </React.Fragment>\n ))}\n </div>\n )}\n </div>\n <div className=\"footer\">\n {blockletMeta.isFree && (\n <Button\n style={{ marginTop: '80px' }}\n className=\"bottom-button\"\n rounded\n color=\"primary\"\n variant=\"contained\"\n onClick={toNextStep}>\n {t('launchBlocklet.nextStep')}\n </Button>\n )}\n {!blockletMeta.isFree && (\n <div style={{ marginTop: '80px' }}>\n <Button variant=\"outlined\" rounded color=\"primary\" onClick={handleAlreadyPurchased}>\n {t('launchBlocklet.purchased')}\n </Button>\n <Button style={{ marginLeft: '20px' }} rounded color=\"primary\" variant=\"contained\" onClick={handleStartPay}>\n {t('launchBlocklet.purchase')}\n </Button>\n </div>\n )}\n </div>\n <Connect\n open={pay}\n popup\n baseUrl={registryUrl}\n action=\"acquire-asset\"\n checkFn={axios.create({ baseURL: joinUrl(registryUrl, '/store') }).get}\n onSuccess={handlePaySuccess}\n onClose={handleClose}\n checkTimeout={60 * 5000}\n extraParams={{ factory: blockletMeta.nftFactory }}\n webWalletUrl={getWebWalletUrl(info)}\n disableClose\n showDownload={false}\n messages={{\n title: `购买 ${blockletMeta.title}`,\n scan: '使用 DID 钱包扫码',\n confirm: '在您的 DID 钱包上确认',\n success: '成功',\n }}\n />\n </Container>\n );\n}\n\nAppInfo.propTypes = {\n blockletMeta: PropTypes.object.isRequired,\n};\n\nconst Container = styled(ContentLayout)`\n .app-desc {\n text-align: center;\n margin-top: 40px;\n\n .app-desc_name {\n font-weight: 500;\n font-size: 18px;\n line-height: 21px;\n color: #222222;\n }\n\n .app-desc_author {\n margin-top: 8px;\n font-weight: 500;\n font-size: 16px;\n line-height: 19px;\n color: #666666;\n }\n }\n\n .price {\n margin-top: 40px;\n color: #222222;\n text-align: center;\n\n .price-value {\n font-size: 36px;\n line-height: 42px;\n }\n\n .price-symbol {\n margin-left: 8px;\n font-size: 18px;\n line-height: 21px;\n }\n }\n`;\n\nexport default AppInfo;\n","import React from 'react';\nimport { useRouteMatch, useHistory, Switch, Route, Redirect } from 'react-router-dom';\nimport { useAsync } from 'react-use';\nimport PropTypes from 'prop-types';\nimport joinUrl from 'url-join';\nimport styled from 'styled-components';\nimport Alert from '@arcblock/ux/lib/Alert';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { StepProvider, Layout } from '@arcblock/abt-launcher';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport LocaleSelector from '@arcblock/ux/lib/Locale/selector';\nimport { useNodeContext } from '../../contexts/node';\nimport useQuery from '../../hooks/query';\n\nimport Complete from '../../components/launch-blocklet/complete';\nimport Install from '../../components/launch-blocklet/install';\nimport Agreement from '../../components/launch-blocklet/agreement';\nimport Center from '../../components/launch-blocklet/center';\nimport AppInfo from './purchase-app';\nimport { getBlockletLogoUrl, getPathPrefix } from '../../libs/util';\n\nfunction RedirectPage({ blockletMeta }) {\n const { path } = useRouteMatch();\n const history = useHistory();\n const query = window.location.search;\n\n if (blockletMeta.isFree) {\n history.push(`${path}/agreement${query}`);\n return null;\n }\n\n history.push(`${path}/agreement${query}`);\n return null;\n}\n\nRedirectPage.propTypes = {\n blockletMeta: PropTypes.object.isRequired,\n};\n\nfunction Launcher() {\n const { path } = useRouteMatch();\n const { t, locale } = useLocaleContext();\n const query = useQuery();\n const { api } = useNodeContext();\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 } = await api.getBlockletMetaFromUrl({ input: { url, checkPrice: true } });\n if (!meta) {\n throw new Error(t('launchBlocklet.error.loadMetaFailed'));\n }\n\n return meta;\n });\n\n if (state.loading) {\n return (\n <Center>\n <Spinner />\n </Center>\n );\n }\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 blockletMeta = state.value;\n let firstPageUrl = blockletMeta.isFree ? `${path}/agreement` : `${path}/purchase-app`;\n firstPageUrl = `${firstPageUrl}${window.location.search}`;\n const basePath = joinUrl(getPathPrefix(), path);\n\n const steps = [\n {\n key: 'app-info',\n name: t('launchBlocklet.purchaseApp'),\n path: joinUrl(basePath, 'purchase-app'),\n optional: true,\n },\n {\n key: 'agreement',\n name: t('launchBlocklet.agreement'),\n path: joinUrl(basePath, 'agreement'),\n },\n {\n key: 'install',\n name: t('launchBlocklet.launch'),\n path: joinUrl(basePath, 'install'),\n },\n {\n key: 'complete',\n name: t('launchBlocklet.complete'),\n path: joinUrl(basePath, 'complete'),\n },\n ];\n blockletMeta.registryUrl = new URL(url).origin;\n\n return (\n <StepProvider steps={steps}>\n <Layout\n locale={locale}\n blockletMeta={blockletMeta}\n headerEndAddons={\n <>\n <LocaleSelector size={26} showText={false} className=\"locale-addon\" />\n </>\n }\n logoUrl={getBlockletLogoUrl({\n did: blockletMeta.did,\n baseUrl: blockletMeta.registryUrl,\n logoPath: blockletMeta.logo,\n })}>\n <Content>\n <Switch>\n <Redirect exact path={path} to={firstPageUrl} />\n <Route exact path={`${path}/purchase-app`}>\n <AppInfo blockletMeta={blockletMeta} />\n </Route>\n <Route exact path={`${path}/agreement`}>\n <Agreement />\n </Route>\n <Route exact path={`${path}/install`}>\n <Install blockletMeta={blockletMeta} />\n </Route>\n <Route exact path={`${path}/complete`}>\n <Complete blockletMeta={blockletMeta} />\n </Route>\n </Switch>\n </Content>\n </Layout>\n </StepProvider>\n );\n}\n\nconst Content = styled.div`\n padding-top: 34px;\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 width: 300px;\n }\n`;\n\nexport default function BlockletLauncher() {\n return <Launcher />;\n}\n","/* eslint-disable no-await-in-loop */\nconst get = require('lodash/get');\n\nconst forEachBlocklet = (blocklet, cb, { parallel = false, sync } = {}) => {\n // sync\n if (sync) {\n cb(blocklet);\n if (blocklet.children) {\n for (const child of blocklet.children) {\n cb(child);\n }\n }\n return null;\n }\n\n // serial\n if (!parallel) {\n return (async () => {\n await cb(blocklet);\n if (blocklet.children) {\n for (const child of blocklet.children) {\n await cb(child);\n }\n }\n return null;\n })();\n }\n\n // parallel\n const tasks = [];\n tasks.push(cb(blocklet));\n if (blocklet.children) {\n for (const child of blocklet.children) {\n tasks.push(cb(child));\n }\n }\n return Promise.all(tasks);\n};\n\nconst isAuthServiceEnabled = (blocklet) => {\n const interfaces = get(blocklet, 'meta.interfaces') || [];\n const isRootEnabled = interfaces.some((x) => {\n const services = get(x, 'services') || [];\n return services.some((s) => s.name === '@abtnode/auth-service');\n });\n\n if (isRootEnabled) {\n return true;\n }\n\n const children = get(blocklet, 'children') || [];\n for (const child of children) {\n if (isAuthServiceEnabled(child)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst getRequiredMissingConfigs = (blocklet) => {\n const missingConfigs = [];\n const configs = blocklet.configs || [];\n configs.forEach((item) => {\n if (item.required && !item.value) {\n missingConfigs.push({ did: blocklet.meta.did, key: item.key });\n }\n });\n\n // eslint-disable-next-line no-restricted-syntax\n for (const child of blocklet.children || []) {\n const childConfigs = child.configs || [];\n // configProp does not exist in root blocklet config\n // or value of configProp in root blocklet config is empty.\n childConfigs.forEach((x) => {\n if (x.required && !x.value && !configs.some((y) => y.key === x.key && y.value)) {\n missingConfigs.push({ did: child.meta.did, key: x.key });\n }\n });\n }\n\n return missingConfigs;\n};\n\nconst isFreeBlocklet = (meta) => {\n if (!meta.payment) {\n return true;\n }\n\n const priceList = (meta.payment.price || []).map((x) => x.value || 0);\n return priceList.every((x) => x === 0);\n};\n\nconst wipeSensitiveData = (blocklet) => {\n if (!blocklet) {\n return blocklet;\n }\n\n forEachBlocklet(\n blocklet,\n (d) => {\n (d.configs || []).forEach((x) => {\n if (x.secure) {\n x.value = x.value ? '__encrypted__' : '';\n }\n });\n (d.environments || []).forEach((x) => {\n if (['BLOCKLET_APP_SK'].includes(x.key)) {\n x.value = '__encrypted__';\n }\n });\n\n delete blocklet.configObj;\n delete blocklet.environmentObj;\n },\n { sync: true }\n );\n\n return blocklet;\n};\n\nconst isDeletableBlocklet = (blocklet) => {\n if (!blocklet) {\n return false;\n }\n\n const config = blocklet.environments.find((x) => x.key === 'BLOCKLET_DELETABLE');\n if (!config) {\n return true;\n }\n\n return config.value === 'yes';\n};\n\nmodule.exports = {\n isFreeBlocklet,\n isDeletableBlocklet,\n forEachBlocklet,\n isAuthServiceEnabled,\n getRequiredMissingConfigs,\n wipeSensitiveData,\n};\n"],"sourceRoot":""}