@abtnode/blocklet-services 1.6.28 → 1.6.29

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 (34) hide show
  1. package/api/util/attach-shared-utils.js +2 -2
  2. package/build/asset-manifest.json +24 -24
  3. package/build/index.html +1 -1
  4. package/build/{precache-manifest.8fa5bc7546805566144fcf8af71f0904.js → precache-manifest.f8d516b676d205d1f6e2c4e869fbf297.js} +22 -22
  5. package/build/service-worker.js +1 -1
  6. package/build/static/js/{2.1421337b.chunk.js → 2.ca22e0d7.chunk.js} +3 -3
  7. package/build/static/js/{2.1421337b.chunk.js.LICENSE.txt → 2.ca22e0d7.chunk.js.LICENSE.txt} +0 -0
  8. package/build/static/js/2.ca22e0d7.chunk.js.map +1 -0
  9. package/build/static/js/3.38949d38.chunk.js +3 -0
  10. package/build/static/js/{3.d701dfdf.chunk.js.LICENSE.txt → 3.38949d38.chunk.js.LICENSE.txt} +0 -0
  11. package/build/static/js/3.38949d38.chunk.js.map +1 -0
  12. package/build/static/js/4.97f8d423.chunk.js +2 -0
  13. package/build/static/js/4.97f8d423.chunk.js.map +1 -0
  14. package/build/static/js/{5.10a35adf.chunk.js → 5.8149df59.chunk.js} +2 -2
  15. package/build/static/js/{5.10a35adf.chunk.js.map → 5.8149df59.chunk.js.map} +1 -1
  16. package/build/static/js/{6.2dcc3ced.chunk.js → 6.001b8434.chunk.js} +2 -2
  17. package/build/static/js/{6.2dcc3ced.chunk.js.map → 6.001b8434.chunk.js.map} +1 -1
  18. package/build/static/js/{7.e6b88c03.chunk.js → 7.f30a5254.chunk.js} +2 -2
  19. package/build/static/js/{7.e6b88c03.chunk.js.map → 7.f30a5254.chunk.js.map} +1 -1
  20. package/build/static/js/8.e354cbf1.chunk.js +2 -0
  21. package/build/static/js/8.e354cbf1.chunk.js.map +1 -0
  22. package/build/static/js/{main.ebd8fbea.chunk.js → main.561b39e2.chunk.js} +2 -2
  23. package/build/static/js/{main.ebd8fbea.chunk.js.map → main.561b39e2.chunk.js.map} +1 -1
  24. package/build/static/js/runtime-main.8ddd5828.js +2 -0
  25. package/build/static/js/{runtime-main.b885fccc.js.map → runtime-main.8ddd5828.js.map} +1 -1
  26. package/package.json +18 -17
  27. package/build/static/js/2.1421337b.chunk.js.map +0 -1
  28. package/build/static/js/3.d701dfdf.chunk.js +0 -3
  29. package/build/static/js/3.d701dfdf.chunk.js.map +0 -1
  30. package/build/static/js/4.22e700c7.chunk.js +0 -2
  31. package/build/static/js/4.22e700c7.chunk.js.map +0 -1
  32. package/build/static/js/8.2a01d8cd.chunk.js +0 -2
  33. package/build/static/js/8.2a01d8cd.chunk.js.map +0 -1
  34. package/build/static/js/runtime-main.b885fccc.js +0 -2
@@ -1,2 +0,0 @@
1
- (this["webpackJsonp@abtnode/blocklet-services"]=this["webpackJsonp@abtnode/blocklet-services"]||[]).push([[8],{1010:function(e,n,t){"use strict";t.r(n),t.d(n,"default",(function(){return ie}));var a=t(221),r=t(211),i=t.n(r),l=t(610),o=t(891),c=t(93),s=t(56),u=t(1006),d=t(0),f=t.n(d),E=t(26),p=t(892),m=t.n(p),L=t(959),b=t.n(L),_=t(194),O=t(565),h=t(984),T=t.n(h),k=t(374),v=t.n(k),g=t(616),C=t.n(g),x=t(1005),B=t.n(x),w=t(307),y=t(208),R=t(214),K=t.n(R),A=t(98),P=t(306),N=t.n(P),S=t(375),I=t.n(S),j=t(366),F=t.n(j),D=t(224),U=t.n(D),z=t(78),M=t.n(z),W=t(65),Y=t.n(W),q=t(985),H=t(740),V=t(58),G=t(986),X=t.n(G),J=t(1004),Q=t.n(J);X.a.interceptors.request.use((function(e){var n,t,a=(null===(n=window)||void 0===n||null===(t=n.env)||void 0===t?void 0:t.pathPrefix)||"/";return e.baseURL=Q()(a,V.WELLKNOWN_SERVICE_PATH_PREFIX,"/api"),e.timeout=2e5,e}),(function(e){return Promise.reject(e)}));var Z,$,ee,ne=X.a,te=["appInfo"],ae=["childDid"],re=function(e){var n=e.appInfo,t=Object(u.a)(e,te),a=f.a.useState(!1),r=Object(s.a)(a,2),i=r[0],l=r[1];return i?f.a.createElement(I.a,{did:n.publisher,size:32}):f.a.createElement(U.a,Object.assign({src:n.icon,alt:n.title,width:32,height:32},t,{onError:function(){return l(!0)}}))};function ie(){var e=Object(A.useLocaleContext)().t,n=Object(d.useState)(null),t=Object(s.a)(n,2),a=t[0],r=t[1],E=Object(d.useState)(!1),p=Object(s.a)(E,2),L=p[0],h=p[1],k=Object(d.useState)(!1),g=Object(s.a)(k,2),x=g[0],y=g[1],R=Object(d.useState)(null),P=Object(s.a)(R,2),S=P[0],I=P[1],j=function(){var e=new URL(window.location.href).searchParams.get("redirect")||"/";window.location=decodeURIComponent(e)};Object(d.useEffect)((function(){h(!0),ne.get("/blocklet/detail").then((function(e){var n=e.data;h(!1),"running"!==n.status?r(n):j()})).catch((function(e){h(!1),N.a.error(e.message)}))}),[]);if(!a)return f.a.createElement(M.a,null,f.a.createElement(Y.a,null));var D=m()([].concat(Object(c.a)(a.configs.filter((function(e){return!H.BLOCKLET_CONFIGURABLE_KEY[e.key]}))),Object(c.a)(a.children.map((function(e){return Object(o.a)(Object(o.a)({},e.configs),{},{childDid:e.meta.did})})))),"key").filter((function(e){return!!e.key})),U=Object(q.getRequiredMissingConfigs)(a).length,z=function(){var n=Object(l.a)(i.a.mark((function n(){var t,a,l,o,c;return i.a.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if(!S.required||S.key.trim()&&S.value.trim()){n.next=3;break}return N.a.error(e("blocklet.config.valueRequired")),n.abrupt("return");case 3:return t=S.childDid,a=Object(u.a)(S,ae),l=[a],n.prev=5,h(!0),n.next=9,ne.post("/blocklet/config",{configs:l,childDid:t});case 9:o=n.sent,c=o.data,h(!1),r(c),I(null),n.next=20;break;case 16:n.prev=16,n.t0=n.catch(5),h(!1),N.a.error(n.t0.message);case 20:case"end":return n.stop()}}),n,null,[[5,16]])})));return function(){return n.apply(this,arguments)}}(),W={icon:"".concat(V.WELLKNOWN_SERVICE_PATH_PREFIX,"/blocklet/logo"),title:Object(q.getDisplayName)(a),publisher:a.appDid};return f.a.createElement(le,null,f.a.createElement(oe,{elevation:0},f.a.createElement(ce,null,f.a.createElement(re,{appInfo:W}),f.a.createElement("div",{className:"app-info_content"},f.a.createElement(_.a,{className:"app-info_name"},W.title),f.a.createElement(F.a,{size:14,className:"app-info_did"},W.publisher))),f.a.createElement(_.a,{className:"title-box"},f.a.createElement(_.a,{className:"icon"},f.a.createElement(B.a,null)),f.a.createElement(_.a,{className:"title"},e("blocklet.startApplication"))),f.a.createElement(_.a,{className:"sub-title"},e("blocklet.startDescription",{name:Object(q.getDisplayName)(a)})),f.a.createElement(_.a,{className:"form"},D.map((function(e){var n=S&&e.key===S.key;return f.a.createElement(_.a,{className:"form-item",key:e.key},f.a.createElement(_.a,{className:"form-item-label",style:{color:e.required&&!e.value?"#ff0000":"#333"}},e.key),f.a.createElement(_.a,{className:"form-item-input"},n?f.a.createElement(O.a,{style:{flex:1},fullWidth:!0,value:S.value,onChange:function(e){e.persist(),I((function(n){return Object(o.a)(Object(o.a)({},n),{},{value:e.target.value})}))},autoFocus:!0,size:"small",variant:"outlined"}):f.a.createElement(_.a,{px:1,className:"form-item-input slot"},e.value)),f.a.createElement(_.a,{className:"form-item-action"},n?f.a.createElement(f.a.Fragment,null,f.a.createElement(w.a,{onClick:function(){return z()},disabled:L||x},f.a.createElement(C.a,null)),f.a.createElement(w.a,{onClick:function(){return I(null)},disabled:L||x},f.a.createElement(v.a,null))):f.a.createElement(w.a,{onClick:function(){return I(b()(e))},disabled:S},f.a.createElement(T.a,null))))}))),f.a.createElement(_.a,{mt:8},f.a.createElement(K.a,{style:{minWidth:200},disabled:L||x||U,variant:"contained",color:"primary",rounded:!0,size:"large",loading:x,onClick:function(){return h(!0),y(!0),void ne.post("/blocklet/start").then((function(){j()})).catch((function(e){N.a.error(e.message),h(!1),y(!1)}))}},e(x?"blocklet.starting":"blocklet.start")))))}var le=E.default.div(Z||(Z=Object(a.a)(["\n width: 100vw;\n height: 100vh;\n background: #ebeef2;\n display: flex;\n justify-content: center;\n align-items: center;\n"]))),oe=Object(E.default)(y.a)($||($=Object(a.a)(["\n width: 80vw;\n max-width: 1245px;\n height: 80vh;\n box-sizing: border-box;\n padding: 32px;\n &.MuiPaper-rounded {\n border-radius: 8px;\n }\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n\n "," {\n width: 100vw;\n height: 100vh;\n left: 0;\n top: 0;\n padding: 32px 0;\n }\n\n .MuiIconButton-root {\n svg {\n fill: #bfbfbf;\n }\n &.Mui-disabled {\n opacity: 0.4;\n }\n }\n\n .title-box {\n display: flex;\n align-items: center;\n "," {\n margin-top: 60px;\n }\n }\n\n .icon {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n width: 32px;\n height: 32px;\n border-radius: 100%;\n background-color: ",";\n color: ",";\n }\n\n .title {\n margin-left: 12px;\n color: ",";\n font-size: 24px;\n font-weight: bolder;\n }\n\n .sub-title {\n margin-top: 24px;\n color: ",";\n font-size: 16px;\n }\n\n .form {\n margin-top: 32px;\n max-height: 50vh;\n overflow-y: auto;\n transform: translate(-100px, 0);\n "," {\n width: 100%;\n flex-shrink: 0;\n padding: 0 24px;\n transform: translate(0, 0);\n max-height: 60vh;\n }\n }\n\n .form-item {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n width: 900px;\n "," {\n justify-content: space-between;\n width: 100%;\n flex-shrink: 0;\n }\n }\n\n .form-item-label {\n order: 1;\n font-size: 16px;\n font-weight: bold;\n word-break: break-word;\n width: 400px;\n text-align: right;\n margin-right: 12px;\n word-break: break-all;\n "," {\n text-align: left;\n width: auto;\n flex-grow: 1;\n }\n }\n\n .form-item-input {\n flex-grow: 1;\n order: 2;\n "," {\n flex-shrink: 0;\n width: 100%;\n order: 4;\n }\n\n &.slot {\n height: 40px;\n line-height: 40px;\n background: #f8f8f8;\n font-size: 16px;\n }\n }\n\n .form-item-action {\n width: 100px;\n text-align: left;\n order: 3;\n margin-left: 12px;\n flex-shrink: 0;\n "," {\n text-align: right;\n }\n }\n"])),(function(e){return e.theme.breakpoints.down("sm")}),(function(e){return e.theme.breakpoints.down("sm")}),(function(e){return e.theme.palette.primary.main}),(function(e){return e.theme.palette.common.white}),(function(e){return e.theme.palette.primary.main}),(function(e){return e.theme.palette.grey[700]}),(function(e){return e.theme.breakpoints.down("sm")}),(function(e){return e.theme.breakpoints.down("sm")}),(function(e){return e.theme.breakpoints.down("sm")}),(function(e){return e.theme.breakpoints.down("sm")}),(function(e){return e.theme.breakpoints.down("sm")})),ce=E.default.div(ee||(ee=Object(a.a)(["\n display: flex;\n align-items: center;\n position: absolute;\n left: 24px;\n right: 24px;\n top: 24px;\n font-size: 16px;\n font-weight: 500;\n color: #222;\n\n /* \u7981\u6b62 app icon shrink */\n > *:first-child {\n flex: 0 0 auto;\n }\n\n .app-info_content {\n padding-left: 16px;\n overflow: hidden;\n }\n\n .app-info_name {\n max-width: 100%;\n padding-right: 32px;\n line-height: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .app-info_did {\n transform: translate(0, 4px);\n }\n\n .app-info_did .did-address__text {\n color: #666;\n font-size: 12px;\n }\n"])))},740:function(e,n){var t=function(e){return function(n){var t=Object.entries(e).find((function(e){return e[1]===Number(n)}));return t?t[0]:"unknown"}},a=function(e){return function(n){return Object.keys(e).find((function(t){return e[t]===Number(n)}))}},r=Object.freeze({added:0,downloading:1,downloaded:2,installing:3,installed:4,starting:5,running:6,stopping:7,stopped:8,error:9,upgrading:10,restarting:11,corrupted:12,waiting:13}),i=t(r),l=a(r),o=Object.freeze({registry:0,local:1,upload:2,url:3,custom:4}),c=t(o),s=a(o),u=Object.freeze({static:"static",dapp:"dapp",starter:!1,gateway:"gateway"}),d=Object.freeze({added:"blocklet.added",downloadFailed:"blocklet.downloadFailed",installed:"blocklet.installed",installFailed:"blocklet.installFailed",upgraded:"blocklet.upgraded",downgraded:"blocklet.downgraded",deployed:"blocklet.deployed",updated:"blocklet.updated",statusChange:"blocklet.statusChange",removed:"blocklet.removed",started:"blocklet.started",startFailed:"blocklet.startFailed",stopped:"blocklet.stopped",reloaded:"blocklet.reloaded",purchaseChange:"blocklet.purchaseChange"}),f=["web","service","wellknown"],E=["publicUrl"],p=["publicUrl","wellknownUrl"],m=["tcp","udp","http"];e.exports=Object.freeze({BlockletStatus:r,fromBlockletStatus:i,toBlockletStatus:l,BlockletSource:o,fromBlockletSource:c,toBlockletSource:s,BlockletGroup:u,BLOCKLET_GROUPS:["dapp","static","gateway"],BlockletEvents:d,BLOCKLET_PLATFORMS:["aix","darwin","freebsd","linux","openbsd","sunos","win32"],BLOCKLET_ARCHITECTURES:["arm","arm64","ia32","mips","mipsel","ppc","ppc64","s390","s390x","x32","x64"],BLOCKLET_MODES:Object.freeze({PRODUCTION:"production",DEVELOPMENT:"development"}),BLOCKLET_FACTORY_SHARES:{developer:.7,store:.3},BLOCKLET_INTERFACE_PUBLIC:"publicUrl",BLOCKLET_INTERFACE_WELLKNOWN:"wellknownUrl",BLOCKLET_UI_INTERFACES:E,BLOCKLET_STANDARD_INTERFACES:p,BLOCKLET_INTERFACE_TYPE_WEB:"web",BLOCKLET_INTERFACE_TYPE_SERVICE:"service",BLOCKLET_INTERFACE_TYPE_WELLKNOWN:"wellknown",BLOCKLET_INTERFACE_TYPES:f,BLOCKLET_INTERFACE_PROTOCOL_HTTP:"http",BLOCKLET_INTERFACE_PROTOCOL_TCP:"tcp",BLOCKLET_INTERFACE_PROTOCOL_UDP:"udp",BLOCKLET_INTERFACE_PROTOCOLS:m,BLOCKLET_DYNAMIC_PATH_PREFIX:"*",BLOCKLET_DEFAULT_PORT_NAME:"BLOCKLET_PORT",BLOCKLET_DEFAULT_PATH_REWRITE:"/",BLOCKLET_RELEASE_FOLDER:".blocklet/release",BLOCKLET_RELEASE_FILE:"blocklet.json",BLOCKLET_BUNDLE_FOLDER:".blocklet/bundle",BLOCKLET_BUNDLE_FILE:"blocklet.zip",BLOCKLET_ENTRY_FILE:"blocklet.js",BLOCKLET_META_FILE:"blocklet.yml",BLOCKLET_META_FILE_ALT:"blocklet.yaml",BLOCKLET_META_FILE_OLD:"blocklet.json",BLOCKLET_DEFAULT_VERSION:"1.0.0",BLOCKLET_LATEST_SPEC_VERSION:"1.2.3",BLOCKLET_LATEST_REQUIREMENT_SERVER:">=1.6.2",BLOCKLET_LATEST_REQUIREMENT_ABTNODE:">=1.5.15",BLOCKLET_CONFIGURABLE_KEY:{BLOCKLET_CLUSTER_SIZE:"BLOCKLET_CLUSTER_SIZE",BLOCKLET_APP_NAME:"BLOCKLET_APP_NAME",BLOCKLET_APP_DESCRIPTION:"BLOCKLET_APP_DESCRIPTION",BLOCKLET_APP_SK:"BLOCKLET_APP_SK",BLOCKLET_APP_URL:"BLOCKLET_APP_URL",BLOCKLET_PASSPORT_COLOR:"BLOCKLET_PASSPORT_COLOR",BLOCKLET_WALLET_TYPE:"BLOCKLET_WALLET_TYPE",BLOCKLET_DELETABLE:"BLOCKLET_DELETABLE"}})},985:function(e,n,t){var a=t(211),r=t(223),i=t(212),l=t(733),o=t(740),c=o.BlockletGroup,s=o.fromBlockletStatus,u=o.fromBlockletSource,d=function(e,n){var t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},l=t.parallel,o=void 0!==l&&l,c=t.sync;if(c){if(n(e),e.children){var s,u=i(e.children);try{for(u.s();!(s=u.n()).done;){var d=s.value;n(d)}}catch(L){u.e(L)}finally{u.f()}}return null}if(!o)return new Promise(function(){var t=r(a.mark((function t(r,l){var o,c,s;return a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.prev=0,t.next=3,n(e);case 3:if(!e.children){t.next=21;break}o=i(e.children),t.prev=5,o.s();case 7:if((c=o.n()).done){t.next=13;break}return s=c.value,t.next=11,n(s);case 11:t.next=7;break;case 13:t.next=18;break;case 15:t.prev=15,t.t0=t.catch(5),o.e(t.t0);case 18:return t.prev=18,o.f(),t.finish(18);case 21:r(null),t.next=27;break;case 24:t.prev=24,t.t1=t.catch(0),l(t.t1);case 27:case"end":return t.stop()}}),t,null,[[0,24],[5,15,18,21]])})));return function(e,n){return t.apply(this,arguments)}}());var f=[];if(f.push(n(e)),e.children){var E,p=i(e.children);try{for(p.s();!(E=p.n()).done;){var m=E.value;f.push(n(m))}}catch(L){p.e(L)}finally{p.f()}}return Promise.all(f)},f=function(e,n){return d(e,n,{sync:!0})};e.exports={isFreeBlocklet:function(e){return!e.payment||(e.payment.price||[]).map((function(e){return e.value||0})).every((function(e){return 0===e}))},isComponentBlocklet:function(e){return!1!==l(e,"capabilities.component")},forEachBlockletSync:f,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:d,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,description:t.description})}));var a,r=i(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,description:a.description})}))};for(r.s();!(a=r.n()).done;)l()}catch(o){r.e(o)}finally{r.f()}return n},wipeSensitiveData:function(e){return e?(d(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},hasRunnableComponent:function(e){var n=!1;return f(e,(function(e){e.meta.group!==c.gateway&&(n=!0)})),n},getDisplayName:function(e){var n,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],a=e.meta;if(!t&&e.environments){var r=e.environments.find((function(e){return"BLOCKLET_APP_NAME"===e.key}));r&&r.value&&(n=r.value)}return n||a.title||a.name},fixBlockletStatus:function(e){e&&(e.status=s(e.status),e.source=u(e.source),(e.children||[]).forEach((function(e){e.status=s(e.status),void 0!==e.source&&(e.source=u(e.source))})))}}}}]);
2
- //# sourceMappingURL=8.2a01d8cd.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["libs/api.js","pages/start.js","../../../blocklet/meta/lib/constants.js","../../../blocklet/meta/lib/util.js"],"names":["axios","interceptors","request","use","config","prefix","window","env","pathPrefix","baseURL","joinUrl","WELLKNOWN_SERVICE_PATH_PREFIX","timeout","error","Promise","reject","AppIcon","appInfo","rest","React","useState","setError","did","publisher","size","src","icon","alt","title","width","height","onError","Start","t","useLocaleContext","blocklet","setBlocklet","loading","setLoading","starting","setStarting","editingItem","setEditingItem","visitBlocklet","redirect","URL","location","href","searchParams","get","decodeURIComponent","useEffect","api","then","data","status","catch","err","Toast","message","filteredConfigs","uniqBy","configs","filter","x","BLOCKLET_CONFIGURABLE_KEY","key","children","map","childDid","meta","missingRequiredConfigs","getRequiredMissingConfigs","length","onSubmitConfig","a","required","trim","value","post","getDisplayName","appDid","Root","StyledPaper","elevation","AppInfo","className","Box","name","editing","style","color","TextField","flex","fullWidth","onChange","e","persist","y","target","autoFocus","variant","px","IconButton","onClick","disabled","cloneDeep","mt","minWidth","rounded","styled","div","Paper","props","theme","breakpoints","down","palette","primary","main","common","white","grey","fromEntry","entries","v","match","Object","find","Number","toEntry","keys","BlockletStatus","freeze","added","downloading","downloaded","installing","installed","running","stopping","stopped","upgrading","restarting","corrupted","waiting","fromBlockletStatus","toBlockletStatus","BlockletSource","registry","local","upload","url","custom","fromBlockletSource","toBlockletSource","BlockletGroup","static","dapp","starter","gateway","BlockletEvents","downloadFailed","installFailed","upgraded","downgraded","deployed","updated","statusChange","removed","started","startFailed","reloaded","purchaseChange","BLOCKLET_INTERFACE_TYPES","BLOCKLET_UI_INTERFACES","BLOCKLET_STANDARD_INTERFACES","BLOCKLET_INTERFACE_PROTOCOLS","module","exports","BLOCKLET_GROUPS","BLOCKLET_PLATFORMS","BLOCKLET_ARCHITECTURES","BLOCKLET_MODES","PRODUCTION","DEVELOPMENT","BLOCKLET_FACTORY_SHARES","developer","store","BLOCKLET_INTERFACE_PUBLIC","BLOCKLET_INTERFACE_WELLKNOWN","BLOCKLET_INTERFACE_TYPE_WEB","BLOCKLET_INTERFACE_TYPE_SERVICE","BLOCKLET_INTERFACE_TYPE_WELLKNOWN","BLOCKLET_INTERFACE_PROTOCOL_HTTP","BLOCKLET_INTERFACE_PROTOCOL_TCP","BLOCKLET_INTERFACE_PROTOCOL_UDP","BLOCKLET_DYNAMIC_PATH_PREFIX","BLOCKLET_DEFAULT_PORT_NAME","BLOCKLET_DEFAULT_PATH_REWRITE","BLOCKLET_RELEASE_FOLDER","BLOCKLET_RELEASE_FILE","BLOCKLET_BUNDLE_FOLDER","BLOCKLET_BUNDLE_FILE","BLOCKLET_ENTRY_FILE","BLOCKLET_META_FILE","BLOCKLET_META_FILE_ALT","BLOCKLET_META_FILE_OLD","BLOCKLET_DEFAULT_VERSION","BLOCKLET_LATEST_SPEC_VERSION","BLOCKLET_LATEST_REQUIREMENT_SERVER","BLOCKLET_LATEST_REQUIREMENT_ABTNODE","BLOCKLET_CLUSTER_SIZE","BLOCKLET_APP_NAME","BLOCKLET_APP_DESCRIPTION","BLOCKLET_APP_SK","BLOCKLET_APP_URL","BLOCKLET_PASSPORT_COLOR","BLOCKLET_WALLET_TYPE","BLOCKLET_DELETABLE","require","forEachBlocklet","cb","parallel","sync","child","resolve","tasks","push","all","forEachBlockletSync","isFreeBlocklet","payment","price","every","isComponentBlocklet","isDeletableBlocklet","environments","missingConfigs","forEach","item","description","some","wipeSensitiveData","d","secure","includes","configObj","environmentObj","hasRunnableComponent","has","group","displayName","onlyUseMeta","fixBlockletStatus","source","undefined"],"mappings":"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","file":"static/js/8.2a01d8cd.chunk.js","sourcesContent":["import axios from 'axios';\nimport joinUrl from 'url-join';\n\nimport { WELLKNOWN_SERVICE_PATH_PREFIX } from '@abtnode/constant';\n\naxios.interceptors.request.use(\n (config) => {\n const prefix = window?.env?.pathPrefix || '/';\n config.baseURL = joinUrl(prefix, WELLKNOWN_SERVICE_PATH_PREFIX, '/api');\n config.timeout = 200000;\n\n return config;\n },\n (error) => Promise.reject(error)\n);\n\nexport default axios;\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport uniqBy from 'lodash/uniqBy';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport Box from '@material-ui/core/Box';\nimport TextField from '@material-ui/core/TextField';\nimport EditIcon from '@arcblock/icons/lib/EditIcon';\nimport CloseIcon from '@material-ui/icons/Close';\nimport DoneIcon from '@material-ui/icons/Done';\nimport PlayArrowIcon from '@material-ui/icons/PlayArrow';\nimport IconButton from '@material-ui/core/IconButton';\nimport Paper from '@material-ui/core/Paper';\n\nimport Button from '@arcblock/ux/lib/Button';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Toast from '@abtnode/ux/lib/toast';\nimport DidAvatar from '@arcblock/did-connect/lib/Avatar';\nimport DidAddress from '@arcblock/did-connect/lib/Address';\nimport Img from '@arcblock/ux/lib/Img';\nimport Center from '@arcblock/ux/lib/Center';\nimport Spinner from '@arcblock/ux/lib/Spinner';\n\nimport { getRequiredMissingConfigs, getDisplayName } from '@blocklet/meta/lib/util';\nimport { BLOCKLET_CONFIGURABLE_KEY } from '@blocklet/meta/lib/constants';\nimport { WELLKNOWN_SERVICE_PATH_PREFIX } from '@abtnode/constant';\n\nimport api from '../libs/api';\n\nconst AppIcon = ({ appInfo, ...rest }) => {\n const [error, setError] = React.useState(false);\n if (error) {\n return <DidAvatar did={appInfo.publisher} size={32} />;\n }\n return <Img src={appInfo.icon} alt={appInfo.title} width={32} height={32} {...rest} onError={() => setError(true)} />;\n};\n\nAppIcon.propTypes = {\n appInfo: PropTypes.object.isRequired,\n};\n\nexport default function Start() {\n const { t } = useLocaleContext();\n const [blocklet, setBlocklet] = useState(null);\n const [loading, setLoading] = useState(false);\n const [starting, setStarting] = useState(false);\n const [editingItem, setEditingItem] = useState(null);\n\n const visitBlocklet = () => {\n const url = new URL(window.location.href);\n const redirect = url.searchParams.get('redirect') || '/';\n window.location = decodeURIComponent(redirect);\n };\n\n useEffect(() => {\n setLoading(true);\n api\n .get('/blocklet/detail')\n .then(({ data }) => {\n setLoading(false);\n if (data.status === 'running') {\n visitBlocklet();\n return;\n }\n setBlocklet(data);\n })\n .catch((err) => {\n setLoading(false);\n Toast.error(err.message);\n });\n }, []);\n\n const startBlocklet = () => {\n setLoading(true);\n setStarting(true);\n api\n .post('/blocklet/start')\n .then(() => {\n visitBlocklet();\n })\n .catch((err) => {\n Toast.error(err.message);\n setLoading(false);\n setStarting(false);\n });\n };\n\n if (!blocklet) {\n return (\n <Center>\n <Spinner />\n </Center>\n );\n }\n\n const filteredConfigs = uniqBy(\n [\n ...blocklet.configs.filter((x) => !BLOCKLET_CONFIGURABLE_KEY[x.key]),\n ...blocklet.children.map((x) => ({ ...x.configs, childDid: x.meta.did })),\n ],\n 'key'\n ).filter((x) => !!x.key);\n\n const missingRequiredConfigs = getRequiredMissingConfigs(blocklet).length;\n\n const onSubmitConfig = async () => {\n // only required field can't be empty\n if (editingItem.required && (!editingItem.key.trim() || !editingItem.value.trim())) {\n Toast.error(t('blocklet.config.valueRequired'));\n return;\n }\n\n const { childDid, ...config } = editingItem;\n\n const configs = [config];\n\n try {\n setLoading(true);\n const { data } = await api.post('/blocklet/config', {\n configs,\n childDid,\n });\n setLoading(false);\n setBlocklet(data);\n setEditingItem(null);\n } catch (err) {\n setLoading(false);\n Toast.error(err.message);\n }\n };\n\n const appInfo = {\n icon: `${WELLKNOWN_SERVICE_PATH_PREFIX}/blocklet/logo`,\n title: getDisplayName(blocklet),\n publisher: blocklet.appDid,\n };\n\n return (\n <Root>\n <StyledPaper elevation={0}>\n <AppInfo>\n <AppIcon appInfo={appInfo} />\n <div className=\"app-info_content\">\n <Box className=\"app-info_name\">{appInfo.title}</Box>\n <DidAddress size={14} className=\"app-info_did\">\n {appInfo.publisher}\n </DidAddress>\n </div>\n </AppInfo>\n\n <Box className=\"title-box\">\n <Box className=\"icon\">\n <PlayArrowIcon />\n </Box>\n <Box className=\"title\">{t('blocklet.startApplication')}</Box>\n </Box>\n <Box className=\"sub-title\">{t('blocklet.startDescription', { name: getDisplayName(blocklet) })}</Box>\n\n <Box className=\"form\">\n {filteredConfigs.map((x) => {\n const editing = editingItem && x.key === editingItem.key;\n return (\n <Box className=\"form-item\" key={x.key}>\n <Box className=\"form-item-label\" style={{ color: x.required && !x.value ? '#ff0000' : '#333' }}>\n {x.key}\n </Box>\n <Box className=\"form-item-input\">\n {editing ? (\n <TextField\n style={{ flex: 1 }}\n fullWidth\n value={editingItem.value}\n onChange={(e) => {\n e.persist();\n setEditingItem((y) => ({ ...y, value: e.target.value }));\n }}\n autoFocus\n size=\"small\"\n variant=\"outlined\"\n />\n ) : (\n <Box px={1} className=\"form-item-input slot\">\n {x.value}\n </Box>\n )}\n </Box>\n <Box className=\"form-item-action\">\n {editing ? (\n <>\n <IconButton onClick={() => onSubmitConfig()} disabled={loading || starting}>\n <DoneIcon />\n </IconButton>\n <IconButton onClick={() => setEditingItem(null)} disabled={loading || starting}>\n <CloseIcon />\n </IconButton>\n </>\n ) : (\n <IconButton onClick={() => setEditingItem(cloneDeep(x))} disabled={editingItem}>\n <EditIcon />\n </IconButton>\n )}\n </Box>\n </Box>\n );\n })}\n </Box>\n <Box mt={8}>\n <Button\n style={{ minWidth: 200 }}\n disabled={loading || starting || missingRequiredConfigs}\n variant=\"contained\"\n color=\"primary\"\n rounded\n size=\"large\"\n loading={starting}\n onClick={() => startBlocklet()}>\n {starting ? t('blocklet.starting') : t('blocklet.start')}\n </Button>\n </Box>\n </StyledPaper>\n </Root>\n );\n}\n\nconst Root = styled.div`\n width: 100vw;\n height: 100vh;\n background: #ebeef2;\n display: flex;\n justify-content: center;\n align-items: center;\n`;\n\nconst StyledPaper = styled(Paper)`\n width: 80vw;\n max-width: 1245px;\n height: 80vh;\n box-sizing: border-box;\n padding: 32px;\n &.MuiPaper-rounded {\n border-radius: 8px;\n }\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n\n ${(props) => props.theme.breakpoints.down('sm')} {\n width: 100vw;\n height: 100vh;\n left: 0;\n top: 0;\n padding: 32px 0;\n }\n\n .MuiIconButton-root {\n svg {\n fill: #bfbfbf;\n }\n &.Mui-disabled {\n opacity: 0.4;\n }\n }\n\n .title-box {\n display: flex;\n align-items: center;\n ${(props) => props.theme.breakpoints.down('sm')} {\n margin-top: 60px;\n }\n }\n\n .icon {\n display: inline-flex;\n justify-content: center;\n align-items: center;\n width: 32px;\n height: 32px;\n border-radius: 100%;\n background-color: ${(props) => props.theme.palette.primary.main};\n color: ${(props) => props.theme.palette.common.white};\n }\n\n .title {\n margin-left: 12px;\n color: ${(props) => props.theme.palette.primary.main};\n font-size: 24px;\n font-weight: bolder;\n }\n\n .sub-title {\n margin-top: 24px;\n color: ${(props) => props.theme.palette.grey[700]};\n font-size: 16px;\n }\n\n .form {\n margin-top: 32px;\n max-height: 50vh;\n overflow-y: auto;\n transform: translate(-100px, 0);\n ${(props) => props.theme.breakpoints.down('sm')} {\n width: 100%;\n flex-shrink: 0;\n padding: 0 24px;\n transform: translate(0, 0);\n max-height: 60vh;\n }\n }\n\n .form-item {\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n width: 900px;\n ${(props) => props.theme.breakpoints.down('sm')} {\n justify-content: space-between;\n width: 100%;\n flex-shrink: 0;\n }\n }\n\n .form-item-label {\n order: 1;\n font-size: 16px;\n font-weight: bold;\n word-break: break-word;\n width: 400px;\n text-align: right;\n margin-right: 12px;\n word-break: break-all;\n ${(props) => props.theme.breakpoints.down('sm')} {\n text-align: left;\n width: auto;\n flex-grow: 1;\n }\n }\n\n .form-item-input {\n flex-grow: 1;\n order: 2;\n ${(props) => props.theme.breakpoints.down('sm')} {\n flex-shrink: 0;\n width: 100%;\n order: 4;\n }\n\n &.slot {\n height: 40px;\n line-height: 40px;\n background: #f8f8f8;\n font-size: 16px;\n }\n }\n\n .form-item-action {\n width: 100px;\n text-align: left;\n order: 3;\n margin-left: 12px;\n flex-shrink: 0;\n ${(props) => props.theme.breakpoints.down('sm')} {\n text-align: right;\n }\n }\n`;\n\nconst AppInfo = styled.div`\n display: flex;\n align-items: center;\n position: absolute;\n left: 24px;\n right: 24px;\n top: 24px;\n font-size: 16px;\n font-weight: 500;\n color: #222;\n\n /* 禁止 app icon shrink */\n > *:first-child {\n flex: 0 0 auto;\n }\n\n .app-info_content {\n padding-left: 16px;\n overflow: hidden;\n }\n\n .app-info_name {\n max-width: 100%;\n padding-right: 32px;\n line-height: 1;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .app-info_did {\n transform: translate(0, 4px);\n }\n\n .app-info_did .did-address__text {\n color: #666;\n font-size: 12px;\n }\n`;\n","const fromEntry = (entries) => (v) => {\n const match = Object.entries(entries).find((x) => x[1] === Number(v));\n return match ? match[0] : 'unknown';\n};\n\nconst toEntry = (entries) => (v) => Object.keys(entries).find((x) => entries[x] === Number(v));\n\n// Blocklet Status\n\nconst BlockletStatus = Object.freeze({\n added: 0,\n downloading: 1,\n downloaded: 2, // Deprecated\n installing: 3,\n installed: 4,\n starting: 5,\n running: 6,\n stopping: 7,\n stopped: 8,\n error: 9,\n upgrading: 10,\n restarting: 11, // Deprecated\n corrupted: 12,\n waiting: 13,\n});\n\nconst fromBlockletStatus = fromEntry(BlockletStatus);\nconst toBlockletStatus = toEntry(BlockletStatus);\n\n// Blocklet Source\n\nconst BlockletSource = Object.freeze({\n // Installed from Blocklet Store\n registry: 0,\n\n // Installed from local development source folder\n local: 1,\n\n // Installed from uploading bundle directly\n upload: 2,\n\n // Installed from a url (similar to Blocklet Store)\n url: 3,\n\n // Installed by custom creation\n custom: 4,\n});\n\nconst fromBlockletSource = fromEntry(BlockletSource);\nconst toBlockletSource = toEntry(BlockletSource);\n\n// Blocklet Group(Type)\n\nconst BlockletGroup = Object.freeze({\n // Only static website\n // The website is served by by Blocklet Server at runtime\n static: 'static',\n\n // The runtime instance is provided by its own backend server\n dapp: 'dapp',\n\n starter: false, // deprecated\n\n // This type is used to combine other component blocklets\n // No instance will be spawned at runtime\n gateway: 'gateway',\n});\n\nconst BLOCKLET_GROUPS = ['dapp', 'static', 'gateway'];\n\n// Blocklet Events\n\nconst BlockletEvents = Object.freeze({\n added: 'blocklet.added',\n downloadFailed: 'blocklet.downloadFailed',\n installed: 'blocklet.installed',\n installFailed: 'blocklet.installFailed',\n upgraded: 'blocklet.upgraded',\n downgraded: 'blocklet.downgraded',\n deployed: 'blocklet.deployed',\n updated: 'blocklet.updated',\n statusChange: 'blocklet.statusChange',\n removed: 'blocklet.removed',\n started: 'blocklet.started',\n startFailed: 'blocklet.startFailed',\n stopped: 'blocklet.stopped',\n reloaded: 'blocklet.reloaded', // Deprecated\n purchaseChange: 'blocklet.purchaseChange',\n});\n\n// Blocklet Interface\n\nconst BLOCKLET_INTERFACE_TYPE_WEB = 'web';\nconst BLOCKLET_INTERFACE_TYPE_SERVICE = 'service';\n\n// Wellknown interface declares an sub-interface under web interface\n// The path of the wellknown interface must starts with /.well-known, e.g. /.well-known/acme-challenge)\n// The wellknown interface can be mounted to every endpoint of the abtnode and all blocklets on the abtnode\nconst BLOCKLET_INTERFACE_TYPE_WELLKNOWN = 'wellknown';\nconst BLOCKLET_INTERFACE_TYPES = [\n BLOCKLET_INTERFACE_TYPE_WEB,\n BLOCKLET_INTERFACE_TYPE_SERVICE,\n BLOCKLET_INTERFACE_TYPE_WELLKNOWN,\n];\n\nconst BLOCKLET_INTERFACE_PUBLIC = 'publicUrl';\nconst BLOCKLET_INTERFACE_WELLKNOWN = 'wellknownUrl'; // Deprecated\nconst BLOCKLET_UI_INTERFACES = [BLOCKLET_INTERFACE_PUBLIC];\nconst BLOCKLET_STANDARD_INTERFACES = [BLOCKLET_INTERFACE_PUBLIC, BLOCKLET_INTERFACE_WELLKNOWN];\n\nconst BLOCKLET_INTERFACE_PROTOCOL_HTTP = 'http';\nconst BLOCKLET_INTERFACE_PROTOCOL_TCP = 'tcp';\nconst BLOCKLET_INTERFACE_PROTOCOL_UDP = 'udp';\nconst BLOCKLET_INTERFACE_PROTOCOLS = [\n BLOCKLET_INTERFACE_PROTOCOL_TCP,\n BLOCKLET_INTERFACE_PROTOCOL_UDP,\n BLOCKLET_INTERFACE_PROTOCOL_HTTP,\n];\n\nmodule.exports = Object.freeze({\n BlockletStatus,\n fromBlockletStatus,\n toBlockletStatus,\n\n BlockletSource,\n fromBlockletSource,\n toBlockletSource,\n\n BlockletGroup,\n BLOCKLET_GROUPS,\n\n BlockletEvents,\n\n BLOCKLET_PLATFORMS: ['aix', 'darwin', 'freebsd', 'linux', 'openbsd', 'sunos', 'win32'],\n BLOCKLET_ARCHITECTURES: ['arm', 'arm64', 'ia32', 'mips', 'mipsel', 'ppc', 'ppc64', 's390', 's390x', 'x32', 'x64'],\n\n BLOCKLET_MODES: Object.freeze({\n PRODUCTION: 'production',\n DEVELOPMENT: 'development',\n }),\n\n BLOCKLET_FACTORY_SHARES: { developer: 0.7, store: 0.3 },\n\n // interface\n BLOCKLET_INTERFACE_PUBLIC,\n BLOCKLET_INTERFACE_WELLKNOWN, // Deprecated\n BLOCKLET_UI_INTERFACES,\n BLOCKLET_STANDARD_INTERFACES,\n\n BLOCKLET_INTERFACE_TYPE_WEB,\n BLOCKLET_INTERFACE_TYPE_SERVICE,\n BLOCKLET_INTERFACE_TYPE_WELLKNOWN,\n BLOCKLET_INTERFACE_TYPES,\n\n BLOCKLET_INTERFACE_PROTOCOL_HTTP,\n BLOCKLET_INTERFACE_PROTOCOL_TCP,\n BLOCKLET_INTERFACE_PROTOCOL_UDP,\n BLOCKLET_INTERFACE_PROTOCOLS,\n\n BLOCKLET_DYNAMIC_PATH_PREFIX: '*',\n BLOCKLET_DEFAULT_PORT_NAME: 'BLOCKLET_PORT',\n BLOCKLET_DEFAULT_PATH_REWRITE: '/',\n\n // bundle\n BLOCKLET_RELEASE_FOLDER: '.blocklet/release',\n BLOCKLET_RELEASE_FILE: 'blocklet.json',\n BLOCKLET_BUNDLE_FOLDER: '.blocklet/bundle',\n BLOCKLET_BUNDLE_FILE: 'blocklet.zip',\n BLOCKLET_ENTRY_FILE: 'blocklet.js',\n BLOCKLET_META_FILE: 'blocklet.yml',\n BLOCKLET_META_FILE_ALT: 'blocklet.yaml',\n BLOCKLET_META_FILE_OLD: 'blocklet.json',\n\n BLOCKLET_DEFAULT_VERSION: '1.0.0',\n\n BLOCKLET_LATEST_SPEC_VERSION: '1.2.3',\n BLOCKLET_LATEST_REQUIREMENT_SERVER: '>=1.6.2',\n BLOCKLET_LATEST_REQUIREMENT_ABTNODE: '>=1.5.15', // Deprecated\n\n BLOCKLET_CONFIGURABLE_KEY: {\n BLOCKLET_CLUSTER_SIZE: 'BLOCKLET_CLUSTER_SIZE',\n BLOCKLET_APP_NAME: 'BLOCKLET_APP_NAME',\n BLOCKLET_APP_DESCRIPTION: 'BLOCKLET_APP_DESCRIPTION',\n BLOCKLET_APP_SK: 'BLOCKLET_APP_SK',\n BLOCKLET_APP_URL: 'BLOCKLET_APP_URL',\n BLOCKLET_PASSPORT_COLOR: 'BLOCKLET_PASSPORT_COLOR',\n BLOCKLET_WALLET_TYPE: 'BLOCKLET_WALLET_TYPE',\n BLOCKLET_DELETABLE: 'BLOCKLET_DELETABLE',\n },\n});\n","/* eslint-disable no-await-in-loop */\nconst get = require('lodash/get');\n\nconst { BlockletGroup, fromBlockletStatus, fromBlockletSource } = require('./constants');\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 // eslint-disable-next-line no-async-promise-executor\n return new Promise(async (resolve, reject) => {\n try {\n await cb(blocklet);\n if (blocklet.children) {\n for (const child of blocklet.children) {\n await cb(child);\n }\n }\n\n resolve(null);\n } catch (err) {\n reject(err);\n }\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 forEachBlockletSync = (blocklet, cb) => forEachBlocklet(blocklet, cb, { sync: true });\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, description: item.description });\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, description: x.description });\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 isComponentBlocklet = (meta) => {\n return get(meta, 'capabilities.component') !== false;\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\nconst hasRunnableComponent = (blocklet) => {\n let has = false;\n forEachBlockletSync(blocklet, (x) => {\n if (x.meta.group !== BlockletGroup.gateway) {\n has = true;\n }\n });\n\n return has;\n};\n\n/**\n * 获取 blocklet 的 name\n * @param {Object} blocklet 应用数据\n * @param {Boolean} onlyUseMeta 优先使用应用元数据的name\n * @returns blocklet display name\n */\nconst getDisplayName = (blocklet, onlyUseMeta = false) => {\n const { meta } = blocklet;\n let displayName;\n\n if (!onlyUseMeta && blocklet.environments) {\n const target = blocklet.environments.find((e) => e.key === 'BLOCKLET_APP_NAME');\n if (target && target.value) {\n displayName = target.value;\n }\n }\n return displayName || meta.title || meta.name;\n};\n\nconst fixBlockletStatus = (blocklet) => {\n if (!blocklet) {\n return;\n }\n\n blocklet.status = fromBlockletStatus(blocklet.status);\n blocklet.source = fromBlockletSource(blocklet.source);\n (blocklet.children || []).forEach((child) => {\n child.status = fromBlockletStatus(child.status);\n if (child.source !== undefined) {\n child.source = fromBlockletSource(child.source);\n }\n });\n};\n\nmodule.exports = {\n isFreeBlocklet,\n isComponentBlocklet,\n forEachBlockletSync,\n isDeletableBlocklet,\n forEachBlocklet,\n getRequiredMissingConfigs,\n wipeSensitiveData,\n hasRunnableComponent,\n getDisplayName,\n fixBlockletStatus,\n};\n"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- !function(e){function t(t){for(var n,a,i=t[0],l=t[1],f=t[2],s=t[3]||[],d=0,h=[];d<i.length;d++)a=i[d],Object.prototype.hasOwnProperty.call(o,a)&&o[a]&&h.push(o[a][0]),o[a]=0;for(n in l)Object.prototype.hasOwnProperty.call(l,n)&&(e[n]=l[n]);for(p&&p(t),u.push.apply(u,s);h.length;)h.shift()();return c.push.apply(c,f||[]),r()}function r(){for(var e,t=0;t<c.length;t++){for(var r=c[t],n=!0,l=1;l<r.length;l++){var f=r[l];0!==o[f]&&(n=!1)}n&&(c.splice(t--,1),e=i(i.s=r[0]))}return 0===c.length&&(u.forEach((function(e){if(void 0===o[e]){o[e]=null;var t=document.createElement("link");i.nc&&t.setAttribute("nonce",i.nc),t.rel="prefetch",t.as="script",t.href=a(e),document.head.appendChild(t)}})),u.length=0),e}var n={},o={1:0},c=[],u=[];function a(e){return i.p+"static/js/"+({}[e]||e)+"."+{3:"d701dfdf",4:"22e700c7",5:"10a35adf",6:"2dcc3ced",7:"e6b88c03",8:"2a01d8cd"}[e]+".chunk.js"}function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[],r=o[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=o[e]=[t,n]}));t.push(r[2]=n);var c,u=document.createElement("script");u.charset="utf-8",u.timeout=120,i.nc&&u.setAttribute("nonce",i.nc),u.src=a(e);var l=new Error;c=function(t){u.onerror=u.onload=null,clearTimeout(f);var r=o[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;l.message="Loading chunk "+e+" failed.\n("+n+": "+c+")",l.name="ChunkLoadError",l.type=n,l.request=c,r[1](l)}o[e]=void 0}};var f=setTimeout((function(){c({type:"timeout",target:u})}),12e4);u.onerror=u.onload=c,document.head.appendChild(u)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/.blocklet/proxy/blocklet-service/",i.oe=function(e){throw console.error(e),e};var l=this["webpackJsonp@abtnode/blocklet-services"]=this["webpackJsonp@abtnode/blocklet-services"]||[],f=l.push.bind(l);l.push=t,l=l.slice();for(var s=0;s<l.length;s++)t(l[s]);var p=f;r()}([]);
2
- //# sourceMappingURL=runtime-main.b885fccc.js.map