@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 +0,0 @@
1
- {"version":3,"sources":["../../mocks/lib/jspdf.js","../../../node_modules/pretty-ms-i18n/index.js","../../../node_modules/pretty-ms-i18n/lang/en.js","../../../node_modules/pretty-ms-i18n/lang/zh.js","../../../node_modules/pretty-ms-i18n/lib/parse_ms.js","../../../node_modules/parse-ms/index.js","../../../node_modules/@material-ui/icons/PlayArrow.js","../../../node_modules/@material-ui/icons/Stop.js","../../../node_modules/@material-ui/icons/Replay.js","../../../node_modules/@material-ui/icons/Autorenew.js","../../../node_modules/@material-ui/icons/Settings.js","../../../node_modules/@material-ui/icons/Receipt.js","../../../node_modules/@material-ui/icons/Group.js","../../../node_modules/@material-ui/icons/MoreVert.js","../../../node_modules/lodash/upperCase.js","components/blocklet/service-tags.js","components/blocklet/interface.js","components/blocklet/actions.js","components/blocklet/version.js","../../../node_modules/@material-ui/icons/ArrowUpward.js","components/uptime.js","components/blocklet/install-from-url.js","components/blocklet/add.js","pages/blocklets/index.js","../../../node_modules/@material-ui/core/esm/ButtonGroup/index.js","hooks/mobile-width.js","components/confirm.js","components/table-icons.js","components/table.js","../../../blocklet/meta/lib/util.js","components/blocklet/status.js","components/dot.js","../../../node_modules/@arcblock/ux/lib/ButtonGroup/index.js","../../../node_modules/pretty-ms-i18n/lib/register_lang.js","components/tag.js","components/blocklet/avatar.js","components/blocklet/icons.js","hooks/persistent-sort.js"],"names":["module","exports","en_US","require","zh_CN","registerLang","prettyMilliseconds","year","long","short","day","hour","minute","second","millisecond","microsecond","nanosecond","parseMilliseconds","getLocale","getLang","pluralize","word","count","milliseconds","options","Number","isFinite","TypeError","colonNotation","compact","formatSubMilliseconds","separateMilliseconds","verbose","secondsDecimalDigits","millisecondsDecimalDigits","locale","result","floorDecimals","value","decimalDigits","flooredInterimValue","Math","floor","round","toFixed","add","unit","valueToString","length","prefix","suffix","valueString","toString","wholeDigits","includes","split","minLength","repeat","max","Object","values","parsed","filter","x","days","hours","minutes","push","trunc","seconds","microseconds","nanoseconds","millisecondsAndBelow","roundedMiliseconds","ceil","millisecondsString","parseFloat","secondsFixed","secondsString","keepDecimalsOnWholeSeconds","replace","longUnit","shortUnit","unitCount","separator","slice","join","roundTowardsZero","_interopRequireDefault","_interopRequireWildcard","defineProperty","default","React","_default","createElement","d","upperCase","createCompounder","index","toUpperCase","useStyles","makeStyles","tooltip","maxWidth","ServiceTags","meta","classes","Array","isArray","services","map","name","content","config","entries","String","sort","a","b","aKey","bKey","localeCompare","Tooltip","interactive","title","style","paddingRight","key","Flex","flexShrink","width","textAlign","marginRight","margin","cursor","type","fill","styled","div","BlockletInterface","blocklet","props","useContext","LocaleContext","t","status","webInterface","interfaces","find","BLOCKLET_INTERFACE_TYPE_WEB","EmptyTipOut","to","did","className","url","checkIsWildcardDomain","encodeWildcardDomain","Container","href","appendParams","target","BlockletActions","onStart","onComplete","variant","rest","history","useHistory","node","useNodeContext","useState","anchorEl","setAnchorEl","currentAction","setCurrentAction","loading","setLoading","confirmSetting","setConfirmSetting","createHandler","action","fn","requireUserConfirm","onConfirm","params","input","keepData","removeType","sleep","Toast","success","errMsg","formatError","error","Error","onCancel","confirmSettings","stop","description","confirm","cancel","restart","remove","setParams","component","gutterBottom","onChange","e","control","label","cancelDownload","open","Boolean","onOpen","stopPropagation","preventDefault","currentTarget","onAction","handler","console","removeAction","icon","Icons","Remove","api","deleteBlocklet","disabled","cancelDownloadAction","cancelDownloadBlocklet","missingRequiredConfigs","getRequiredMissingConfigs","actions","Start","startBlocklet","isDownloading","mode","BLOCKLET_MODES","DEVELOPMENT","Stop","stopBlocklet","Restart","restartBlocklet","Reload","reloadBlocklet","onlyInMenu","Config","isAuthServiceEnabled","Group","Log","inProgress","isInProgress","Div","data-cy","permission","hasPermission","aria-label","aria-controls","aria-haspopup","actions-blocklet-did","onClick","size","id","keepMounted","onClose","PaperProps","severity","i","dense","minWidth","fontSize","primary","defaultProps","theme","breakpoints","sm","BlockletVersion","checkUpgrade","info","setError","newVersionBlocklet","setNewVersionBlocklet","enqueueSnackbar","useSnackbar","useEffect","getLatestBlockletVersion","version","then","data","registryUrl","semver","gt","catch","err","source","deployedFrom","blockletRegistry","upgradeBlocklet","autoHideDuration","setting","marginLeft","color","message","withPermission","times","useUpTime","initialTime","format","elapsedTime","setElapsedTime","setDelayTimes","time","delay","setDelay","timer","setInterval","delayTime","clearInterval","UpTime","useFormat","InstallFromUrl","defaultUrl","onSuccess","onError","useLocaleContext","setUrl","activeStep","setActiveStep","dist","setMeta","existingMeta","setExistingMeta","onGetMeta","decoded","decodeURIComponent","trim","URL","getBlockletMetaFromUrl","newer","getBlocklet","attachRuntimeInfo","existedBlocklet","gte","onInstall","installBlocklet","rows","formatPerson","author","tarball","steps","body","Typography","TextField","autoComplete","fullWidth","autoFocus","marginBottom","helperText","onKeyPress","paddingLeft","row","valueComponent","nameWidth","nameFormatter","s","step","showCloseButton","disableBackdropClick","disableEscapeKeyDown","rounded","Stepper","alternativeLabel","Step","StepLabel","DialogContentText","marginTop","AddBlocklet","setSuccess","setOpen","installSetting","setInstallSetting","anchorRef","useRef","closeInstallFromUrl","undefined","aria-expanded","ref","prevOpen","Popper","current","role","placement","disablePortal","Paper","ClickAwayListener","onClickAway","contains","MenuList","MenuItem","duration","BlockletList","blocklets","useBlockletContext","useLocalStorage","pageSize","setNewPageSize","usePersistentSort","sortDirections","onSortChange","onActionStart","onActionComplete","refresh","silent","isBreakpointsUpMd","useMediaQuery","up","isBreakpointsUpLg","useLocation","pathname","search","query","URLSearchParams","get","metaUrl","items","textDecoration","dateFields","forEach","f","date","Date","columns","field","defaultSort","customSort","aSorProperty","bSorProperty","toLowerCase","render","tab","sorting","aVersion","bVersion","lt","installedAt","createdAt","formatToDatetime","aUptime","runtimeInfo","uptime","prettyT","formatLocale","prettyMs","status-blocklet-did","configs","some","required","Box","display","justifyContent","alignItems","icons","blockletIcons","tableIcons","header","emptyRowsWhenPaging","actionsColumnIndex","tableLayout","maxBodyHeight","pageSizeOptions","localization","toolbar","searchPlaceholder","emptyDataSourceMessage","onOrderChange","onChangeRowsPerPage","newPageSize","Main","main","useMobileWidth","useTheme","down","ConfirmDialog","showCancel","initialParams","changeLocale","onCallback","cb","isBreakpointsDownSm","StyledDialog","fullScreen","DialogTitle","DialogContent","Alert","DialogActions","padding","__disableConfirm","Dialog","Add","Check","Delete","Edit","Clear","DetailPanel","NextPage","Filter","FirstPage","LastPage","PreviousPage","Search","ResetSearch","SortArrow","Export","ThirdStateCheck","ViewColumn","TableStyle","forEachBlocklet","parallel","sync","children","child","tasks","Promise","all","isFreeBlocklet","payment","price","every","missingConfigs","item","y","wipeSensitiveData","secure","environments","configObj","environmentObj","colors","BlockletStatus","colorMap","added","waiting","downloading","downloaded","installing","installed","starting","running","stopping","stopped","upgrading","restarting","corrupted","statusTxt","borderRadius","border","Dot","_styledComponents","_ButtonGroup","_wrap","obj","__esModule","sizes","small","medium","large","getBorderRadius","StyledButtonGroup","withConfig","displayName","componentId","langs","Map","set","Tag","BlockletAvatar","logoUrl","joinURL","logo","formatRegistryLogoPath","window","env","apiPrefix","assign","backgroundColor","height","src","ev","alt","initialDirections","setSortDirections","columnIndex","directionValue","newSortDirections"],"mappings":"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","file":"static/js/11.ec811533.chunk.js","sourcesContent":["module.exports = {};\n","const en_US = require('./lang/en');\nconst zh_CN = require('./lang/zh');\n\nconst { registerLang } = require('./lib/register_lang');\nconst prettyMilliseconds = require('./lib/parse_ms');\n\nregisterLang('en_US', en_US);\nregisterLang('zh_CN', zh_CN);\n\nprettyMilliseconds.registerLang = registerLang;\n\nmodule.exports = prettyMilliseconds;\n","module.exports = {\n year: {\n long: 'year',\n short: 'y',\n },\n day: {\n long: 'day',\n short: 'd',\n },\n hour: {\n long: 'hour',\n short: 'h',\n },\n minute: {\n long: 'minute',\n short: 'm',\n },\n second: {\n long: 'second',\n short: 's',\n },\n millisecond: {\n long: 'millisecond',\n short: 'ms',\n },\n microsecond: {\n long: 'microsecond',\n short: 'µs',\n },\n nanosecond: {\n long: 'nanosecond',\n short: 'ns',\n },\n};\n","module.exports = {\n year: {\n long: '年',\n short: '年',\n },\n day: {\n long: '天',\n short: '天',\n },\n hour: {\n long: '小时',\n short: '小时',\n },\n minute: {\n long: '分钟',\n short: '分',\n },\n second: {\n long: '秒钟',\n short: '秒',\n },\n millisecond: {\n long: '毫秒',\n short: '毫秒',\n },\n microsecond: {\n long: '微秒',\n short: '微秒',\n },\n nanosecond: {\n long: '纳秒',\n short: '纳秒',\n },\n};\n","const parseMilliseconds = require('parse-ms');\nconst { getLang: getLocale } = require('./register_lang');\n\nconst pluralize = (word, count) => (count === 1 ? word : `${word}s`);\n\nconst SECOND_ROUNDING_EPSILON = 0.0000001;\n\nmodule.exports = (milliseconds, options = {}) => {\n if (!Number.isFinite(milliseconds)) {\n throw new TypeError('Expected a finite number');\n }\n\n if (options.colonNotation) {\n options.compact = false;\n options.formatSubMilliseconds = false;\n options.separateMilliseconds = false;\n options.verbose = false;\n }\n\n if (options.compact) {\n options.secondsDecimalDigits = 0;\n options.millisecondsDecimalDigits = 0;\n }\n\n const locale = getLocale(options.locale);\n const result = [];\n\n const floorDecimals = (value, decimalDigits) => {\n const flooredInterimValue = Math.floor(value * 10 ** decimalDigits + SECOND_ROUNDING_EPSILON);\n const flooredValue = Math.round(flooredInterimValue) / 10 ** decimalDigits;\n return flooredValue.toFixed(decimalDigits);\n };\n\n const add = (value, unit, valueToString) => {\n if (\n (result.length === 0 || !options.colonNotation) &&\n value === 0 &&\n !(options.colonNotation && unit === 'minute')\n ) {\n return;\n }\n\n const { long } = locale[unit] || getLocale('en_US')[unit];\n const { short } = locale[unit] || getLocale('en_US')[unit];\n\n let valueString = (valueToString || value || '0').toString();\n let prefix;\n let suffix;\n if (options.colonNotation) {\n prefix = result.length > 0 ? ':' : '';\n suffix = '';\n const wholeDigits = valueString.includes('.') ? valueString.split('.')[0].length : valueString.length;\n const minLength = result.length > 0 ? 2 : 1;\n valueString = '0'.repeat(Math.max(0, minLength - wholeDigits)) + valueString;\n } else {\n prefix = '';\n if (options.locale === 'zh_CN') {\n if (Object.values(parsed).filter((x) => x > 0).length > 1) {\n if (!parsed.days && !parsed.hours && parsed.minutes && options.compact) {\n suffix = long;\n } else {\n suffix = short;\n }\n } else if (parsed.minutes) {\n suffix = long;\n } else {\n suffix = short;\n }\n } else {\n suffix = options.verbose ? ` ${pluralize(long, value)}` : short;\n }\n }\n\n result.push(prefix + valueString + suffix);\n };\n\n const parsed = parseMilliseconds(milliseconds);\n\n add(Math.trunc(parsed.days / 365), 'year');\n add(parsed.days % 365, 'day');\n add(parsed.hours, 'hour');\n add(parsed.minutes, 'minute');\n\n if (\n options.separateMilliseconds ||\n options.formatSubMilliseconds ||\n (!options.colonNotation && milliseconds < 1000)\n ) {\n add(parsed.seconds, 'second');\n if (options.formatSubMilliseconds) {\n add(parsed.milliseconds, 'millisecond');\n add(parsed.microseconds, 'microsecond');\n add(parsed.nanoseconds, 'nanosecond');\n } else {\n const millisecondsAndBelow = parsed.milliseconds + parsed.microseconds / 1000 + parsed.nanoseconds / 1e6;\n\n const millisecondsDecimalDigits =\n typeof options.millisecondsDecimalDigits === 'number' ? options.millisecondsDecimalDigits : 0;\n\n const roundedMiliseconds =\n millisecondsAndBelow >= 1 ? Math.round(millisecondsAndBelow) : Math.ceil(millisecondsAndBelow);\n\n const millisecondsString = millisecondsDecimalDigits\n ? millisecondsAndBelow.toFixed(millisecondsDecimalDigits)\n : roundedMiliseconds;\n\n add(Number.parseFloat(millisecondsString, 10), 'millisecond', millisecondsString);\n }\n } else {\n const seconds = (milliseconds / 1000) % 60;\n const secondsDecimalDigits = typeof options.secondsDecimalDigits === 'number' ? options.secondsDecimalDigits : 1;\n const secondsFixed = floorDecimals(seconds, secondsDecimalDigits);\n const secondsString = options.keepDecimalsOnWholeSeconds ? secondsFixed : secondsFixed.replace(/\\.0+$/, '');\n add(Number.parseFloat(secondsString, 10), 'second', secondsString);\n }\n\n if (result.length === 0) {\n const longUnit = (locale.millisecond || getLocale('en_US').millisecond).long;\n const shortUnit = (locale.millisecond || getLocale('en_US').millisecond).short;\n\n if (options.locale === 'zh_CN') {\n return `0${options.verbose ? `${longUnit}` : shortUnit}`;\n }\n\n return `0${options.verbose ? ` ${longUnit}s` : shortUnit}`;\n }\n\n if (options.compact) {\n return result[0];\n }\n\n if (typeof options.unitCount === 'number') {\n const separator = options.colonNotation ? '' : ' ';\n return result.slice(0, Math.max(options.unitCount, 1)).join(separator);\n }\n\n return options.colonNotation ? result.join('') : result.join(' ');\n};\n","'use strict';\nmodule.exports = milliseconds => {\n\tif (typeof milliseconds !== 'number') {\n\t\tthrow new TypeError('Expected a number');\n\t}\n\n\tconst roundTowardsZero = milliseconds > 0 ? Math.floor : Math.ceil;\n\n\treturn {\n\t\tdays: roundTowardsZero(milliseconds / 86400000),\n\t\thours: roundTowardsZero(milliseconds / 3600000) % 24,\n\t\tminutes: roundTowardsZero(milliseconds / 60000) % 60,\n\t\tseconds: roundTowardsZero(milliseconds / 1000) % 60,\n\t\tmilliseconds: roundTowardsZero(milliseconds) % 1000,\n\t\tmicroseconds: roundTowardsZero(milliseconds * 1000) % 1000,\n\t\tnanoseconds: roundTowardsZero(milliseconds * 1e6) % 1000\n\t};\n};\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8 5v14l11-7z\"\n}), 'PlayArrow');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M6 6h12v12H6z\"\n}), 'Stop');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 5V1L7 6l5 5V7c3.31 0 6 2.69 6 6s-2.69 6-6 6-6-2.69-6-6H4c0 4.42 3.58 8 8 8s8-3.58 8-8-3.58-8-8-8z\"\n}), 'Replay');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1.24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c.44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.46-3.03-1.24-4.26z\"\n}), 'Autorenew');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19.14 12.94c.04-.3.06-.61.06-.94 0-.32-.02-.64-.07-.94l2.03-1.58c.18-.14.23-.41.12-.61l-1.92-3.32c-.12-.22-.37-.29-.59-.22l-2.39.96c-.5-.38-1.03-.7-1.62-.94l-.36-2.54c-.04-.24-.24-.41-.48-.41h-3.84c-.24 0-.43.17-.47.41l-.36 2.54c-.59.24-1.13.57-1.62.94l-2.39-.96c-.22-.08-.47 0-.59.22L2.74 8.87c-.12.21-.08.47.12.61l2.03 1.58c-.05.3-.09.63-.09.94s.02.64.07.94l-2.03 1.58c-.18.14-.23.41-.12.61l1.92 3.32c.12.22.37.29.59.22l2.39-.96c.5.38 1.03.7 1.62.94l.36 2.54c.05.24.24.41.48.41h3.84c.24 0 .44-.17.47-.41l.36-2.54c.59-.24 1.13-.56 1.62-.94l2.39.96c.22.08.47 0 .59-.22l1.92-3.32c.12-.22.07-.47-.12-.61l-2.01-1.58zM12 15.6c-1.98 0-3.6-1.62-3.6-3.6s1.62-3.6 3.6-3.6 3.6 1.62 3.6 3.6-1.62 3.6-3.6 3.6z\"\n}), 'Settings');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18 17H6v-2h12v2zm0-4H6v-2h12v2zm0-4H6V7h12v2zM3 22l1.5-1.5L6 22l1.5-1.5L9 22l1.5-1.5L12 22l1.5-1.5L15 22l1.5-1.5L18 22l1.5-1.5L21 22V2l-1.5 1.5L18 2l-1.5 1.5L15 2l-1.5 1.5L12 2l-1.5 1.5L9 2 7.5 3.5 6 2 4.5 3.5 3 2v20z\"\n}), 'Receipt');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z\"\n}), 'Group');\n\nexports.default = _default;","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 8c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm0 2c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm0 6c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z\"\n}), 'MoreVert');\n\nexports.default = _default;","var createCompounder = require('./_createCompounder');\n\n/**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\nvar upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n});\n\nmodule.exports = upperCase;\n","import React from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport upperCase from 'lodash/upperCase';\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Tag from '@arcblock/ux/lib/Tag';\nimport DidLogo from '@arcblock/icons/lib/DidLogo';\n\nconst useStyles = makeStyles(() => ({\n tooltip: {\n maxWidth: 'none',\n },\n}));\n\nexport default function ServiceTags({ meta }) {\n const classes = useStyles();\n if (!meta || !Array.isArray(meta.services)) {\n return null;\n }\n\n return meta.services.map(x => {\n const name = upperCase(x.name.replace(/^@abtnode\\//, '').replace(/-service$/, ''));\n const formatValue = value => (Array.isArray(value) ? value.join(', ') : String(value));\n\n let content = [];\n if (x.config) {\n content = Object.entries(x.config)\n .map(d => {\n d[1] = formatValue(d[1]);\n return d;\n })\n .filter(d => d[1])\n .sort((a, b) => {\n const aKey = a[0] || '';\n const bKey = b[0] || '';\n\n return aKey.localeCompare(bKey);\n });\n }\n\n return (\n <Tooltip\n interactive\n classes={{ tooltip: classes.tooltip }}\n title={\n // eslint-disable-next-line react/jsx-wrap-multilines\n <div style={{ paddingRight: 20 }}>\n {content.map(([key, value]) => (\n <Flex>\n <div style={{ flexShrink: 0, width: 150, textAlign: 'right', marginRight: 10 }}>{`${key}:`}</div>\n <div>{value}</div>\n </Flex>\n ))}\n </div>\n }>\n <Tag style={{ margin: '0 4px', cursor: 'pointer' }} type=\"success\">\n {name === 'AUTH' && <DidLogo style={{ marginRight: 4, fill: 'rgb(91, 144, 37)' }} />}\n {name}\n </Tag>\n </Tooltip>\n );\n });\n}\n\nServiceTags.propTypes = {\n meta: PropTypes.object.isRequired,\n};\n\nconst Flex = styled.div`\n display: flex;\n margin: 4px 0;\n`;\n","import React, { useContext } from 'react';\nimport { Link } from 'react-router-dom';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\n\nimport ExternalLink from '@material-ui/core/Link';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport { BLOCKLET_INTERFACE_TYPE_WEB } from '@blocklet/meta/lib/constants';\n\nimport { appendParams, checkIsWildcardDomain, encodeWildcardDomain } from '../../libs/util';\nimport ServiceTags from './service-tags';\n\nexport default function BlockletInterface({ blocklet, ...props }) {\n const { t, locale } = useContext(LocaleContext);\n\n if (blocklet.status !== 'running') {\n return null;\n }\n\n // eslint-disable-next-line no-nested-ternary\n const webInterface = (blocklet.interfaces || []).find(x => x.type === BLOCKLET_INTERFACE_TYPE_WEB);\n\n if (!webInterface) {\n return (\n <EmptyTipOut>\n {t('blocklet.urlEmptyTip')}\n <Link to={`/router/rules?fromDid=${blocklet.meta.did}`} className=\"interface-link\">\n {t('blocklet.goToAddRule')}\n </Link>\n </EmptyTipOut>\n );\n }\n\n const { name, url } = webInterface;\n\n if (checkIsWildcardDomain(url)) {\n return encodeWildcardDomain(url, locale);\n }\n\n return (\n <Container {...props}>\n <Flex>\n <ExternalLink href={appendParams(url, { locale })} target=\"_blank\" className=\"blocklet-interface\">\n {t('common.open')}\n </ExternalLink>\n <ServiceTags meta={blocklet.meta.interfaces.find(x => x.name === name)} />\n </Flex>\n </Container>\n );\n}\n\nBlockletInterface.propTypes = {\n blocklet: PropTypes.object.isRequired,\n};\n\nconst Flex = styled.div`\n display: flex;\n margin: 4px 0;\n`;\n\nconst EmptyTipOut = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst Container = styled.div`\n .blocklet-interface {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n white-space: nowrap;\n\n img {\n margin-right: 4px;\n }\n }\n`;\n","/* eslint-disable operator-linebreak */\nimport React, { useState, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { useHistory, Link } from 'react-router-dom';\n\nimport IconButton from '@material-ui/core/IconButton';\nimport Menu from '@material-ui/core/Menu';\nimport Divider from '@material-ui/core/Divider';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Typography from '@material-ui/core/Typography';\nimport Radio from '@material-ui/core/Radio';\nimport RadioGroup from '@material-ui/core/RadioGroup';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Alert from '@material-ui/lab/Alert';\n\nimport Button from '@arcblock/ux/lib/Button';\nimport ButtonGroup from '@arcblock/ux/lib/ButtonGroup';\nimport { getRequiredMissingConfigs, isAuthServiceEnabled } from '@blocklet/meta/lib/util';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport { BLOCKLET_MODES } from '@blocklet/meta/lib/constants';\n\nimport Toast from '../toast';\nimport { sleep, formatError, isInProgress, isDownloading } from '../../libs/util';\nimport { useNodeContext } from '../../contexts/node';\nimport Confirm from '../confirm';\nimport Icons from './icons';\nimport Permission from '../permission';\n\nexport default function BlockletActions({ blocklet, onStart, onComplete, variant, ...rest }) {\n const history = useHistory();\n const node = useNodeContext();\n const [anchorEl, setAnchorEl] = useState(null);\n const [currentAction, setCurrentAction] = useState(null);\n const [loading, setLoading] = useState(false);\n const [confirmSetting, setConfirmSetting] = useState(null);\n const { t } = useContext(LocaleContext);\n\n const createHandler =\n (action, fn, requireUserConfirm = false) =>\n async () => {\n const onConfirm = async params => {\n onStart({ action, blocklet });\n setLoading(true);\n setCurrentAction(action);\n setConfirmSetting(null);\n try {\n const input = { did: blocklet.meta.did };\n if (action === 'remove') {\n input.keepData = params.removeType === 'keepData';\n }\n await fn({ input });\n if (action !== 'remove') {\n await sleep(1000); // just avoid user feeling so fast\n }\n\n if (action === 'reload') {\n Toast.success(t('blocklet.reloadSuccess'));\n }\n\n onComplete({ action, blocklet });\n } catch (err) {\n const errMsg = `Blocklet ${action} failed: ${formatError(err)}`;\n onComplete({ action, blocklet, error: new Error(errMsg) });\n } finally {\n setLoading(false);\n }\n };\n\n const onCancel = () => {\n setLoading(false);\n setConfirmSetting(null);\n };\n\n const confirmSettings = {\n stop: {\n title: `${t('common.stop')} ${blocklet.meta.title || blocklet.meta.name}`,\n description: t('blocklet.index.stopDescription'),\n confirm: t('blocklet.index.confirmStop'),\n cancel: t('common.cancel'),\n onConfirm,\n onCancel,\n },\n restart: {\n title: `${t('common.restart')} ${blocklet.meta.title || blocklet.meta.name}`,\n description: t('blocklet.index.restartDescription'),\n confirm: t('blocklet.index.confirmRestart'),\n cancel: t('common.cancel'),\n onConfirm,\n onCancel,\n },\n remove: {\n title: `${t('common.remove')} ${blocklet.meta.title || blocklet.meta.name}`,\n description: (params, setParams) => (\n <Typography component=\"div\">\n <Typography gutterBottom>{t('blocklet.index.removeDescription')}</Typography>\n <Typography gutterBottom>\n <b>{t('blocklet.index.deleteRoutingRuleDescription')}</b>\n </Typography>\n <RadioGroup\n name=\"removeType\"\n value={params.removeType}\n onChange={e => setParams({ ...params, removeType: e.target.value })}>\n <FormControlLabel value=\"keepData\" control={<Radio />} label={t('blocklet.index.removeKeepData')} />\n <FormControlLabel value=\"complete\" control={<Radio />} label={t('blocklet.index.removeComplete')} />\n </RadioGroup>\n </Typography>\n ),\n confirm: t('blocklet.index.confirmRemove'),\n cancel: t('common.cancel'),\n onConfirm,\n onCancel,\n params: { removeType: 'keepData' },\n },\n cancelDownload: {\n title: `${t('common.cancel')}`,\n description: t('blocklet.index.cancelDownloadDescription', {\n name: blocklet.meta.title || blocklet.meta.name,\n }),\n confirm: t('common.confirm'),\n cancel: t('common.cancel'),\n onConfirm,\n onCancel,\n },\n };\n\n if (requireUserConfirm) {\n setConfirmSetting(confirmSettings[action]);\n } else {\n await onConfirm();\n }\n };\n\n const open = Boolean(anchorEl);\n\n const onOpen = e => {\n try {\n e.stopPropagation();\n e.preventDefault();\n // eslint-disable-next-line no-empty\n } catch {}\n setAnchorEl(e.currentTarget);\n };\n\n const onClose = e => {\n try {\n e.stopPropagation();\n e.preventDefault();\n // eslint-disable-next-line no-empty\n } catch {}\n setAnchorEl(null);\n };\n\n const onAction = async (action, e) => {\n try {\n e.stopPropagation();\n e.preventDefault();\n // eslint-disable-next-line no-empty\n } catch {}\n setAnchorEl(null);\n if (typeof action.handler === 'function') {\n try {\n setLoading(true);\n setCurrentAction(action.action);\n await action.handler();\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(`Blocklet ${action.name} failed: `, err);\n } finally {\n setLoading(false);\n }\n }\n };\n\n const removeAction = {\n action: 'remove',\n icon: Icons.Remove,\n name: t('common.remove'),\n handler: createHandler('remove', node.api.deleteBlocklet, true),\n disabled: blocklet.status === 'running',\n };\n\n const cancelDownloadAction = {\n action: 'remove',\n icon: Icons.Remove,\n name: t('common.cancel'),\n handler: createHandler('cancelDownload', node.api.cancelDownloadBlocklet, true),\n };\n\n const missingRequiredConfigs = getRequiredMissingConfigs(blocklet);\n\n const actions = [\n {\n action: 'start',\n icon: Icons.Start,\n name: t('common.start'),\n handler: createHandler('start', node.api.startBlocklet),\n disabled:\n blocklet.status === 'running' ||\n blocklet.status === 'corrupted' ||\n missingRequiredConfigs.length > 0 ||\n isDownloading(blocklet.status) ||\n blocklet.mode === BLOCKLET_MODES.DEVELOPMENT,\n },\n {\n action: 'stop',\n icon: Icons.Stop,\n name: t('common.stop'),\n handler: createHandler('stop', node.api.stopBlocklet, true),\n disabled: blocklet.status !== 'running' || blocklet.mode === BLOCKLET_MODES.DEVELOPMENT,\n },\n {\n action: 'restart',\n icon: Icons.Restart,\n name: t('common.restart'),\n handler: createHandler('restart', node.api.restartBlocklet, true),\n disabled: blocklet.status !== 'running' || blocklet.mode === BLOCKLET_MODES.DEVELOPMENT,\n },\n {\n action: 'reload',\n icon: Icons.Reload,\n name: t('common.reload'),\n handler: createHandler('reload', node.api.reloadBlocklet),\n disabled: blocklet.status !== 'running' || blocklet.mode === BLOCKLET_MODES.DEVELOPMENT,\n },\n\n isDownloading(blocklet.status) ? cancelDownloadAction : removeAction,\n\n {\n separator: true,\n },\n {\n onlyInMenu: true,\n action: 'config',\n icon: Icons.Config,\n name: t('common.config'),\n handler: () => {\n history.push(`/blocklets/${blocklet.meta.did}/configuration`);\n },\n disabled: isDownloading(blocklet.status),\n },\n isAuthServiceEnabled(blocklet)\n ? {\n onlyInMenu: true,\n action: 'team',\n icon: Icons.Group,\n name: t('common.manageTeam'),\n handler: () => {\n history.push(`/blocklets/${blocklet.meta.did}/members`);\n },\n disabled: isDownloading(blocklet.status),\n }\n : null,\n {\n onlyInMenu: true,\n action: 'log',\n icon: Icons.Log,\n name: t('common.log'),\n handler: () => {\n history.push(`/logs/blocklet-${blocklet.meta.did}`);\n },\n disabled: isDownloading(blocklet.status),\n },\n ].filter(Boolean);\n\n const inProgress = loading || isInProgress(blocklet.status);\n\n if (variant === 'menu') {\n return (\n <Div data-cy=\"blocklet-actions\">\n <Permission permission=\"mutate_blocklet\">\n {hasPermission => (\n <IconButton\n aria-label=\"more\"\n aria-controls=\"actions-menu\"\n aria-haspopup=\"true\"\n data-cy=\"trigger-blocklet-actions\"\n actions-blocklet-did={blocklet.meta.did}\n onClick={onOpen}\n size=\"small\"\n disabled={!hasPermission || (!isDownloading(blocklet.status) && Boolean(inProgress))}>\n <MoreVertIcon />\n </IconButton>\n )}\n </Permission>\n\n <Menu id=\"actions-menu\" anchorEl={anchorEl} keepMounted open={open} onClose={onClose} PaperProps={{}}>\n {missingRequiredConfigs.length > 0 && (\n <Alert style={{ maxWidth: '400px' }} severity=\"error\">\n {t('blocklet.config.user.missingRequired')}\n <br />\n <Link to={`/blocklets/${blocklet.meta.did}/configuration`}>{t('blocklet.config.user.gotoFix')}</Link>\n </Alert>\n )}\n {actions.map((action, i) => {\n if (action.separator) {\n // eslint-disable-next-line react/no-array-index-key\n return <Divider key={`separator-${i}`} />;\n }\n return (\n <MenuItem\n dense\n key={action.name}\n onClick={e => onAction(action, e)}\n disabled={action.disabled}\n data-cy={`${action.action}-blocklet`}>\n <ListItemIcon style={{ minWidth: 24 }}>\n <action.icon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText primary={action.name} />\n </MenuItem>\n );\n })}\n </Menu>\n {confirmSetting && (\n <Confirm\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirm={confirmSetting.confirm}\n cancel={confirmSetting.cancel}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n />\n )}\n </Div>\n );\n }\n\n return (\n <Div data-cy=\"blocklet-actions\" {...rest}>\n <ButtonGroup>\n {actions\n .filter(x => !x.separator && !x.onlyInMenu)\n .map(action => (\n <Button\n title={action.name}\n key={action.name}\n data-cy={`${action.action}-blocklet`}\n onClick={() => onAction(action)}\n disabled={Boolean(action.disabled) || Boolean(inProgress)}>\n {currentAction === action.action && Boolean(inProgress) ? <Spinner size={[16, 10]} /> : <action.icon />}\n <span className=\"blocklet-action-text\">{action.name}</span>\n </Button>\n ))}\n </ButtonGroup>\n {confirmSetting && (\n <Confirm\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirm={confirmSetting.confirm}\n cancel={confirmSetting.cancel}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n />\n )}\n </Div>\n );\n}\n\nBlockletActions.propTypes = {\n blocklet: PropTypes.object.isRequired,\n onStart: PropTypes.func.isRequired,\n onComplete: PropTypes.func.isRequired,\n variant: PropTypes.oneOf(['menu', 'group']),\n};\n\nBlockletActions.defaultProps = {\n variant: 'menu',\n};\n\nconst Div = styled.div`\n display: flex;\n align-items: center;\n\n @media (max-width: ${props => props.theme.breakpoints.values.sm}px) {\n .MuiButton-root {\n padding: 4px;\n font-size: 10px;\n }\n }\n`;\n","import React, { useContext, useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport semver from 'semver';\n\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Button from '@material-ui/core/IconButton';\nimport UpgradeIcon from '@material-ui/icons/ArrowUpward';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Tag from '@arcblock/ux/lib/Tag';\nimport Toast from '@arcblock/ux/lib/Toast';\nimport { useSnackbar } from 'notistack';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport Confirm from '../confirm';\nimport { withPermission } from '../permission';\n\nimport { useNodeContext } from '../../contexts/node';\nimport { sleep, formatError, isInProgress } from '../../libs/util';\n\nconst BlockletVersion = ({ blocklet, checkUpgrade, hasPermission, ...rest }) => {\n const { info, api } = useNodeContext();\n const { t } = useContext(LocaleContext);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const [newVersionBlocklet, setNewVersionBlocklet] = useState(null);\n const [confirmSetting, setConfirmSetting] = useState(null);\n const { enqueueSnackbar } = useSnackbar();\n\n useEffect(() => {\n setNewVersionBlocklet(null);\n if (checkUpgrade) {\n api\n .getLatestBlockletVersion({ input: { did: blocklet.meta.did, version: blocklet.meta.version } })\n .then(({ data }) => {\n if (data) {\n const { version, registryUrl } = data;\n if (version && semver.gt(version, blocklet.meta.version)) {\n setNewVersionBlocklet({ version, registryUrl });\n }\n }\n })\n // eslint-disable-next-line max-len\n .catch(err => console.error(`Failed to fetch latest version: ${blocklet.meta.name}, error: ${formatError(err)}`)); // prettier-ignore\n }\n }, [blocklet.meta.version, blocklet.source, blocklet.deployedFrom, info.blockletRegistry, checkUpgrade]); // eslint-disable-line\n\n const onCancel = () => {\n setLoading(false);\n setConfirmSetting(null);\n };\n\n const onConfirm = async () => {\n setLoading(true);\n\n try {\n const input = {\n did: blocklet.meta.did,\n version: newVersionBlocklet.version,\n registryUrl: newVersionBlocklet.registryUrl,\n };\n await sleep(2000);\n await api.upgradeBlocklet({ input });\n } catch (err) {\n enqueueSnackbar(`Blocklet upgrade failed: ${formatError(err)}`, { autoHideDuration: 5000, variant: 'error' });\n } finally {\n setLoading(false);\n setConfirmSetting(null);\n }\n };\n\n const setting = {\n title: `${t('common.upgrade')} ${t('common.blocklet')} ${blocklet.meta.title || blocklet.meta.name}`,\n description: t('blocklet.index.upgradeDescription'),\n confirm: t('blocklet.index.confirmUpgrade'),\n cancel: t('common.cancel'),\n onConfirm,\n onCancel,\n };\n\n if (hasPermission && newVersionBlocklet && !isInProgress(blocklet.status)) {\n return (\n <>\n <Tag {...rest}>{blocklet.meta.version}</Tag>\n <Tooltip title={t('common.updateAvailable', { version: newVersionBlocklet.version })}>\n <Button size=\"small\" style={{ marginLeft: 8 }} disabled={loading} onClick={() => setConfirmSetting(setting)}>\n {loading ? <Spinner size={[16, 10]} /> : <UpgradeIcon style={{ fontSize: 16, color: 'red' }} />}\n </Button>\n </Tooltip>\n {!!error && <Toast variant=\"error\" message={error} onClose={() => setError('')} />}\n {confirmSetting && (\n <Confirm\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirm={confirmSetting.confirm}\n cancel={confirmSetting.cancel}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n />\n )}\n </>\n );\n }\n\n return <Tag {...rest}>{blocklet.meta.version}</Tag>;\n};\n\nBlockletVersion.propTypes = {\n blocklet: PropTypes.object.isRequired,\n checkUpgrade: PropTypes.bool,\n hasPermission: PropTypes.bool,\n};\n\nBlockletVersion.defaultProps = {\n checkUpgrade: true,\n hasPermission: false,\n};\n\nexport default withPermission(BlockletVersion, 'mutate_blocklet');\n","\"use strict\";\n\nvar _interopRequireDefault = require(\"@babel/runtime/helpers/interopRequireDefault\");\n\nvar _interopRequireWildcard = require(\"@babel/runtime/helpers/interopRequireWildcard\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar React = _interopRequireWildcard(require(\"react\"));\n\nvar _createSvgIcon = _interopRequireDefault(require(\"./utils/createSvgIcon\"));\n\nvar _default = (0, _createSvgIcon.default)( /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z\"\n}), 'ArrowUpward');\n\nexports.default = _default;","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport Typography from '@material-ui/core/Typography';\n\nconst times = {\n oneSecond: 1,\n oneMin: 1 * 60,\n oneHour: 1 * 60 * 60,\n oneDay: 24 * 60 * 60,\n};\n\nexport const useUpTime = (initialTime, format) => {\n const [elapsedTime, setElapsedTime] = useState(0);\n\n const setDelayTimes = time => {\n if (time >= times.oneDay) {\n return times.oneDay;\n }\n\n if (time >= times.oneHour) {\n return times.oneHour;\n }\n\n if (time >= times.oneMin) {\n return times.oneMin;\n }\n\n return times.oneSecond;\n };\n\n const [delay, setDelay] = useState(setDelayTimes(initialTime / 1000));\n\n useEffect(() => {\n const timer = setInterval(() => {\n setElapsedTime(elapsedTime + delay);\n\n const delayTime = setDelayTimes(initialTime / 1000 + elapsedTime + delay);\n if (delay !== delayTime) {\n setDelay(delayTime);\n }\n }, delay * 1000);\n\n return () => clearInterval(timer);\n // eslint-disable-next-line\n }, [delay, elapsedTime]);\n\n useEffect(() => {\n setElapsedTime(0);\n setDelay(setDelayTimes(initialTime / 1000));\n }, [initialTime]); // eslint-disable-line\n\n return format(initialTime + elapsedTime * 1000);\n};\n\nexport default function UpTime({ initialTime, format, ...rest }) {\n const useFormat = useUpTime(initialTime, format);\n\n return <Typography {...rest}>{useFormat}</Typography>;\n}\n\nUpTime.propTypes = {\n initialTime: PropTypes.number.isRequired,\n format: PropTypes.func,\n};\n\nUpTime.defaultProps = {\n format: t => t,\n};\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport semver from 'semver';\n\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport Typography from '@material-ui/core/Typography';\nimport TextField from '@material-ui/core/TextField';\nimport Stepper from '@material-ui/core/Stepper';\nimport Step from '@material-ui/core/Step';\nimport StepLabel from '@material-ui/core/StepLabel';\n\nimport InfoRow from '@arcblock/ux/lib/InfoRow';\nimport DidAddress from '@arcblock/did-connect/lib/Address';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport Alert from '@arcblock/ux/lib/Alert';\nimport Tag from '@arcblock/ux/lib/Tag';\n\nimport { useNodeContext } from '../../contexts/node';\nimport { formatError, formatPerson } from '../../libs/util';\n\nexport default function InstallFromUrl({ defaultUrl, onCancel, onSuccess, onError }) {\n const { api } = useNodeContext();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const { t } = useLocaleContext();\n\n const [url, setUrl] = useState(defaultUrl);\n const [activeStep, setActiveStep] = useState(defaultUrl ? 1 : 0);\n\n const [meta, setMeta] = useState({ dist: {} });\n const [existingMeta, setExistingMeta] = useState(null);\n\n const onGetMeta = async () => {\n setError(null);\n setLoading(true);\n\n try {\n const decoded = decodeURIComponent(url.trim());\n // validate\n try {\n new URL(decoded); // eslint-disable-line no-new\n } catch {\n throw new Error('Invalid URL');\n }\n\n // request\n const { meta: newer } = await api.getBlockletMetaFromUrl({ input: { url: decoded } });\n const { blocklet: existedBlocklet } = await api.getBlocklet({\n input: { did: newer.did, attachRuntimeInfo: false },\n });\n\n if (existedBlocklet && semver.gte(existedBlocklet.meta.version, newer.version)) {\n setExistingMeta(existedBlocklet.meta);\n setMeta(newer);\n } else {\n setMeta(newer);\n }\n if (!defaultUrl) {\n setActiveStep(1);\n }\n } catch (err) {\n console.error(err);\n const errMsg = `Blocklet Install failed: ${formatError(err)}`;\n setError(errMsg);\n onError(err);\n } finally {\n setLoading(false);\n }\n };\n\n const onInstall = async () => {\n setLoading(true);\n try {\n await api.installBlocklet({ input: { url: decodeURIComponent(url.trim()) } });\n onSuccess();\n } catch (err) {\n const errMsg = `Blocklet Install failed: ${formatError(err)}`;\n setError(errMsg);\n } finally {\n setLoading(false);\n }\n };\n\n useEffect(() => {\n if (defaultUrl) {\n onGetMeta();\n }\n }, [defaultUrl]); // eslint-disable-line\n\n const rows = [\n { name: t('common.name'), value: meta.title || meta.name },\n { name: t('common.version'), value: meta.version },\n { name: t('common.did'), value: <DidAddress>{meta.did}</DidAddress> },\n { name: t('common.author'), value: formatPerson(meta.author) },\n { name: t('blocklet.dist.downloadLink'), value: meta.dist.tarball },\n ];\n\n const getStep1Body = () => {\n if (loading) {\n return (\n <div style={{ textAlign: 'center' }}>\n <Spinner />\n </div>\n );\n }\n if (meta.did) {\n return (\n <div style={{ paddingLeft: '10%' }}>\n {rows.map(row => {\n if (row.name === t('common.did')) {\n return (\n <InfoRow\n valueComponent=\"div\"\n key={row.name}\n nameWidth={120}\n name={row.name}\n nameFormatter={() => t('common.did')}>\n {row.value}\n </InfoRow>\n );\n }\n return (\n <InfoRow valueComponent=\"div\" key={row.name} nameWidth={120} name={row.name}>\n {row.value}\n </InfoRow>\n );\n })}\n {existingMeta && (\n <Alert type=\"error\" variant=\"icon\" style={{ margin: '15px 0 0 -16px' }}>\n <div>\n {t('blocklet.fromUrl.existTipPrefix')}\n <Tag content={existingMeta.version} style={{ margin: '0 5px' }} />\n {t('blocklet.fromUrl.existTipSuffix')}\n </div>\n </Alert>\n )}\n </div>\n );\n }\n return null;\n };\n\n const steps = [\n {\n label: t('blocklet.fromUrl.step0'),\n body: (\n <Typography component=\"div\">\n <TextField\n label={t('blocklet.fromUrl.label')}\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"url\"\n data-cy=\"blocklet-url-input\"\n fullWidth\n autoFocus\n style={{ marginBottom: 32 }}\n helperText={t('blocklet.fromUrl.description')}\n value={url}\n onChange={e => {\n setError(null);\n setUrl(e.target.value);\n }}\n disabled={loading}\n onKeyPress={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n onGetMeta();\n }\n }}\n />\n </Typography>\n ),\n cancel: t('common.cancel'),\n confirm: t('common.next'),\n onCancel,\n onConfirm: onGetMeta,\n },\n {\n label: t('blocklet.fromUrl.step1'),\n body: getStep1Body(),\n cancel: defaultUrl ? t('common.cancel') : t('common.pre'),\n confirm: existingMeta ? t('common.confirm') : t('blocklet.fromUrl.confirm'),\n onCancel: () => {\n if (!defaultUrl) {\n setActiveStep(s => s - 1);\n } else {\n onCancel();\n }\n },\n onConfirm: () => {\n if (existingMeta) {\n onCancel();\n } else {\n onInstall();\n }\n },\n },\n ];\n const step = steps[activeStep];\n\n return (\n <Dialog\n title={t('blocklet.fromUrl.title')}\n fullWidth\n maxWidth=\"md\"\n onClose={() => step.onCancel()}\n showCloseButton={activeStep === 0}\n disableBackdropClick\n disableEscapeKeyDown\n open\n actions={\n <>\n {step.cancel && (\n <Button\n onClick={e => {\n e.stopPropagation();\n step.onCancel();\n }}\n color=\"default\"\n rounded\n size=\"small\">\n {step.cancel || t('common.cancel')}\n </Button>\n )}\n <Button\n onClick={e => {\n e.stopPropagation();\n step.onConfirm();\n }}\n color=\"primary\"\n size=\"small\"\n data-cy=\"install-blocklet-next-step\"\n disabled={loading || !url || error}\n variant=\"contained\"\n autoFocus\n rounded\n style={{ marginLeft: 8 }}>\n {loading && activeStep === 0 && <Spinner size={[16, 10]} />}\n {step.confirm}\n </Button>\n </>\n }>\n {!defaultUrl && (\n <Stepper alternativeLabel activeStep={activeStep}>\n {steps.map(({ label }) => (\n <Step key={label}>\n <StepLabel>{label}</StepLabel>\n </Step>\n ))}\n </Stepper>\n )}\n <DialogContentText component=\"div\">{step.body}</DialogContentText>\n {!!error && (\n <Alert severity=\"error\" style={{ width: '100%', marginTop: 8 }}>\n {error}\n </Alert>\n )}\n </Dialog>\n );\n}\n\nInstallFromUrl.propTypes = {\n defaultUrl: PropTypes.string,\n onCancel: PropTypes.func.isRequired,\n onSuccess: PropTypes.func.isRequired,\n onError: PropTypes.func,\n};\n\nInstallFromUrl.defaultProps = {\n onError: () => {},\n defaultUrl: '',\n};\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport React, { useState, useRef } from 'react';\nimport { useHistory } from 'react-router-dom';\n\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport ClickAwayListener from '@material-ui/core/ClickAwayListener';\nimport Paper from '@material-ui/core/Paper';\nimport Popper from '@material-ui/core/Popper';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MenuList from '@material-ui/core/MenuList';\nimport AddIcon from '@material-ui/icons/Add';\n\nimport Toast from '@arcblock/ux/lib/Toast';\nimport Button from '@arcblock/ux/lib/Button';\nimport ButtonGroup from '@arcblock/ux/lib/ButtonGroup';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport InstallFromUrl from './install-from-url';\n\nexport default function AddBlocklet() {\n const history = useHistory();\n const { t } = useLocaleContext();\n\n const [error, setError] = useState('');\n const [success, setSuccess] = useState('');\n const [open, setOpen] = useState(false);\n const [installSetting, setInstallSetting] = useState(null);\n\n const anchorRef = useRef(null);\n\n const onToggle = () => {\n setOpen(prevOpen => !prevOpen);\n };\n\n const onClose = e => {\n if (anchorRef.current && anchorRef.current.contains(e.target)) {\n return;\n }\n\n setOpen(false);\n };\n\n const closeInstallFromUrl = () => {\n setInstallSetting(null);\n };\n\n const openInstallFromUrl = () => {\n setInstallSetting({\n onCancel: () => {\n closeInstallFromUrl();\n setOpen(false);\n setInstallSetting(null);\n },\n onSuccess: () => {\n closeInstallFromUrl();\n },\n });\n };\n\n return (\n <>\n <ButtonGroup variant=\"contained\" size=\"small\" color=\"primary\" aria-label=\"split button\" rounded>\n <Button size=\"small\" onClick={() => history.push('/store')}>\n <AddIcon />\n {t('blocklet.installFromMarket')}\n </Button>\n <Button\n size=\"small\"\n aria-controls={open ? 'split-button-menu' : undefined}\n aria-expanded={open ? 'true' : undefined}\n ref={anchorRef}\n data-cy=\"open-install-menu\"\n onClick={onToggle}>\n <ArrowDropDownIcon />\n </Button>\n </ButtonGroup>\n <Popper\n open={open}\n anchorEl={anchorRef.current}\n role={undefined}\n placement=\"bottom-end\"\n disablePortal={false}\n className=\"popper\">\n <Paper>\n <ClickAwayListener onClickAway={onClose}>\n <MenuList id=\"split-button-menu\">\n <MenuItem data-cy=\"open-install-form\" onClick={() => openInstallFromUrl()}>\n {t('blocklet.installFromUrl')}\n </MenuItem>\n </MenuList>\n </ClickAwayListener>\n </Paper>\n </Popper>\n {!!error && <Toast variant=\"error\" message={error} onClose={() => setError('')} />}\n {!!success && <Toast variant=\"success\" duration={3000} message={success} onClose={() => setSuccess('')} />}\n {installSetting && <InstallFromUrl onCancel={installSetting.onCancel} onSuccess={installSetting.onSuccess} />}\n </>\n );\n}\n\nAddBlocklet.propTypes = {};\n\nAddBlocklet.defaultProps = {};\n","/* eslint-disable implicit-arrow-linebreak */\n/* eslint-disable object-curly-newline */\n/* eslint-disable react/jsx-one-expression-per-line */\nimport React, { useState, useContext, useEffect } from 'react';\nimport styled from 'styled-components';\nimport useLocalStorage from 'react-use/lib/useLocalStorage';\nimport { Link, useLocation, useHistory } from 'react-router-dom';\nimport prettyMs from 'pretty-ms-i18n';\nimport semver from 'semver';\n\nimport MaterialTable from 'material-table';\nimport Typography from '@material-ui/core/Typography';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Box from '@material-ui/core/Box';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\n\nimport Alert from '@arcblock/ux/lib/Alert';\nimport Toast from '@arcblock/ux/lib/Toast';\nimport Button from '@arcblock/ux/lib/Button';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { getRequiredMissingConfigs } from '@blocklet/meta/lib/util';\n\nimport { useNodeContext } from '../../contexts/node';\nimport { useBlockletContext } from '../../contexts/blocklets';\nimport { formatError, formatToDatetime, formatLocale } from '../../libs/util';\n\nimport tableIcons from '../../components/table-icons';\nimport blockletIcons from '../../components/blocklet/icons';\nimport BlockletActions from '../../components/blocklet/actions';\nimport BlockletStatus from '../../components/blocklet/status';\nimport BlockletVersion from '../../components/blocklet/version';\nimport BlockletAvatar from '../../components/blocklet/avatar';\nimport BlockletInterface from '../../components/blocklet/interface';\nimport BlockletAdd from '../../components/blocklet/add';\nimport usePersistentSort from '../../hooks/persistent-sort';\nimport UpTime from '../../components/uptime';\n\nimport TableStyle from '../../components/table';\nimport InstallFromUrl from '../../components/blocklet/install-from-url';\nimport Permission from '../../components/permission';\n\nexport default function BlockletList() {\n const node = useNodeContext();\n const blocklets = useBlockletContext();\n const [error, setError] = useState('');\n const { t, locale } = useContext(LocaleContext);\n const [pageSize, setNewPageSize] = useLocalStorage('ps_blocklets_list', 10);\n\n const { sortDirections, onSortChange } = usePersistentSort('blocklet', ['asc', '', '', '', '', '', '']);\n const [installSetting, setInstallSetting] = useState(null);\n\n const onPageSizeChange = newPageSize => {\n setNewPageSize(newPageSize);\n };\n\n const onActionStart = () => {};\n const onActionComplete = async data => {\n if (data.error) {\n setError(data.error.message);\n return;\n }\n if (data.action === 'remove') {\n node.refresh({ silent: true });\n }\n };\n const isBreakpointsUpMd = useMediaQuery(theme => theme.breakpoints.up('md'));\n const isBreakpointsUpLg = useMediaQuery(theme => theme.breakpoints.up('lg'));\n\n // auto open installFromUrl\n const history = useHistory();\n const { pathname, search } = useLocation();\n useEffect(() => {\n const query = new URLSearchParams(search);\n const action = query.get('action');\n const metaUrl = query.get('url');\n if (action === 'install' && metaUrl) {\n setInstallSetting({\n defaultUrl: metaUrl,\n onCancel: () => history.push(pathname),\n onSuccess: () => history.push(pathname),\n });\n } else {\n setInstallSetting(null);\n }\n }, [search, setInstallSetting, history, pathname]);\n\n let content = null;\n const items = blocklets.data || [];\n\n if (blocklets.loading) {\n content = <Spinner />;\n } else if (blocklets.error) {\n content = (\n <Alert type=\"error\" variant=\"icon\">\n <div>\n {/* message */}\n {formatError(blocklets.error)}\n {/* retry */}\n <Button onClick={() => blocklets.refresh({ silent: false })}>\n <span style={{ color: '#44cdc6', textDecoration: 'underline' }}>{t('common.retry')}</span>\n </Button>\n </div>\n </Alert>\n );\n } else if (items.length > 0) {\n const dateFields = ['installedAt', 'startedAt', 'stoppedAt', 'createdAt'];\n const rows = items.map(x => {\n dateFields.forEach(f => {\n if (x[f]) {\n const date = new Date(x[f]);\n x[f] = date;\n }\n });\n\n return x;\n });\n\n /* eslint-disable indent */\n const columns = isBreakpointsUpMd\n ? [\n {\n title: t('common.name'),\n field: 'meta.title',\n width: 360,\n defaultSort: sortDirections[0],\n customSort: (a, b) => {\n const aSorProperty = a.meta.title || a.meta.name;\n const bSorProperty = b.meta.title || b.meta.name;\n\n if (aSorProperty.toLowerCase() > bSorProperty.toLowerCase()) {\n return 1;\n }\n\n if (aSorProperty.toLowerCase() < bSorProperty.toLowerCase()) {\n return -1;\n }\n\n return 0;\n },\n render: d => {\n const tab = getRequiredMissingConfigs(d).length > 0 ? 'configuration' : 'overview';\n return (\n <Link to={`/blocklets/${d.meta.did}/${tab}`}>\n <Typography component=\"strong\" variant=\"body1\" className=\"blocklet-name\">\n <BlockletAvatar blocklet={d} style={{ marginRight: 8 }} />\n {d.meta.title || d.meta.name}\n </Typography>\n </Link>\n );\n },\n },\n ...(isBreakpointsUpLg\n ? [\n {\n title: t('common.visit'),\n field: 'runtimeInfo.pid',\n sorting: false,\n defaultSort: sortDirections[1],\n render: d => <BlockletInterface blocklet={d} />,\n },\n ]\n : []),\n {\n title: t('common.version'),\n field: 'meta.version',\n width: 120,\n defaultSort: sortDirections[2],\n customSort: (a, b) => {\n const aVersion = a.meta.version;\n const bVersion = b.meta.version;\n\n if (semver.gt(aVersion, bVersion)) {\n return 1;\n }\n\n if (semver.lt(aVersion, bVersion)) {\n return -1;\n }\n\n return 0;\n },\n render: d => <BlockletVersion blocklet={d} />,\n },\n ...(isBreakpointsUpLg\n ? [\n {\n title: t('common.installedAt'),\n defaultSort: sortDirections[3],\n type: 'datetime',\n width: 200,\n customSort: (a, b) => {\n const aSortInstalledAt = +new Date(a.installedAt || a.createdAt);\n const bSortInstalledAt = +new Date(b.installedAt || b.createdAt);\n\n return aSortInstalledAt - bSortInstalledAt;\n },\n render: d => formatToDatetime(d.installedAt || d.createdAt),\n },\n ]\n : []),\n {\n title: t('common.uptime'),\n field: 'runtimeInfo.uptime',\n width: 120,\n defaultSort: sortDirections[4],\n customSort: (a, b) => {\n const aUptime = a.runtimeInfo ? a.runtimeInfo.uptime : 0;\n const bUptime = b.runtimeInfo ? b.runtimeInfo.uptime : 0;\n\n return bUptime - aUptime;\n },\n render: d => {\n // 只在 running 状态展示 uptime\n if (d.status === 'running' && d.runtimeInfo) {\n return (\n <UpTime\n initialTime={Number(d.runtimeInfo.uptime)}\n format={prettyT => {\n const options = { compact: true, locale: formatLocale(locale) };\n\n return prettyMs(prettyT, options);\n }}\n />\n );\n }\n\n return '';\n },\n },\n {\n title: t('common.status'),\n field: 'status',\n width: 120,\n defaultSort: sortDirections[5],\n render: d => <BlockletStatus status-blocklet-did={d.meta.did} key={d.meta.did} status={d.status} />,\n },\n {\n title: t('common.actions'),\n sorting: false,\n width: 90,\n render: d => (\n <BlockletActions\n key={d.meta.did}\n blocklet={d}\n variant=\"menu\"\n onStart={onActionStart}\n onComplete={onActionComplete}\n />\n ),\n },\n ]\n : [\n {\n title: t('common.name'),\n field: 'meta.title',\n defaultSort: sortDirections[0],\n customSort: (a, b) => {\n const aSorProperty = a.meta.title || a.meta.name;\n const bSorProperty = b.meta.title || b.meta.name;\n\n if (aSorProperty.toLowerCase() > bSorProperty.toLowerCase()) {\n return 1;\n }\n\n if (aSorProperty.toLowerCase() < bSorProperty.toLowerCase()) {\n return -1;\n }\n\n return 0;\n },\n render: d => {\n const tab = (d.configs || []).some(x => x.required && !x.value) ? 'configuration' : 'overview';\n return (\n <Box\n className=\"blocklet-item--mobile\"\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\">\n <BlockletAvatar className=\"blocklet__avatar\" blocklet={d} size={isBreakpointsUpMd ? 40 : 60} />\n <Link className=\"blocklet__content\" to={`/blocklets/${d.meta.did}/${tab}`}>\n <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"flex-start\">\n <Typography component=\"strong\" variant=\"body1\" className=\"blocklet__name\">\n {d.meta.title || d.meta.name}\n </Typography>\n <BlockletActions\n key={d.meta.did}\n blocklet={d}\n variant=\"menu\"\n onStart={onActionStart}\n onComplete={onActionComplete}\n />\n </Box>\n <Typography component=\"small\" className=\"blocklet__addons\">\n <div>\n <BlockletVersion blocklet={d} />\n </div>\n <BlockletStatus status-blocklet-did={d.meta.did} key={d.meta.did} status={d.status} />\n </Typography>\n </Link>\n </Box>\n );\n },\n },\n ];\n /* eslint-enable indent */\n content = (\n <TableStyle className=\"blocklet-list\">\n <MaterialTable\n title={t('blocklet.index.tableTitle')}\n data={rows}\n icons={{ ...blockletIcons, ...tableIcons }}\n options={{\n header: isBreakpointsUpMd,\n emptyRowsWhenPaging: false,\n actionsColumnIndex: -1,\n tableLayout: 'auto',\n maxBodyHeight: '100%',\n pageSize,\n pageSizeOptions: [10, 20, 50, 100],\n }}\n localization={{\n toolbar: { searchPlaceholder: t('common.search') },\n body: {\n emptyDataSourceMessage: t('common.noData'),\n },\n }}\n onOrderChange={onSortChange}\n onChangeRowsPerPage={onPageSizeChange}\n columns={columns}\n />\n </TableStyle>\n );\n } else if (items.length === 0) {\n content = (\n <>\n <Alert type=\"warning\" variant=\"icon\">\n {t('blocklet.index.noBlocklet')}\n </Alert>\n </>\n );\n }\n\n return (\n <>\n <Main>\n <Typography component=\"h2\" variant=\"h4\" className=\"page-header\" color=\"textPrimary\">\n {t('common.blocklets')}\n <Permission permission=\"mutate_blocklet\">\n <BlockletAdd />\n </Permission>\n </Typography>\n {content}\n {!!error && <Toast variant=\"error\" message={error} onClose={() => setError(null)} />}\n </Main>\n\n {installSetting && (\n <InstallFromUrl\n defaultUrl={installSetting.defaultUrl}\n onCancel={installSetting.onCancel}\n onSuccess={installSetting.onSuccess}\n />\n )}\n </>\n );\n}\n\nconst Main = styled.main`\n .page-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n\n .blocklet-list {\n .blocklet-item--mobile {\n .blocklet__avatar {\n margin-right: -60px;\n }\n .blocklet__content {\n padding-left: 68px;\n flex: 1;\n display: flex;\n flex-direction: column;\n z-index: 1;\n }\n .blocklet__name {\n font-weight: bold;\n text-decoration: none;\n white-space: normal;\n word-break: break-all;\n }\n .blocklet__addons {\n display: flex;\n justify-content: space-between;\n margin-top: 5px;\n margin-bottom: -10px;\n }\n }\n .blocklet-name {\n font-weight: bold;\n text-decoration: underline;\n display: flex;\n align-items: center;\n white-space: normal;\n word-break: break-all;\n }\n\n .blocklet-interface {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n\n img {\n margin-right: 4px;\n }\n }\n\n .MuiToolbar-root {\n display: flex;\n }\n }\n`;\n","export { default } from './ButtonGroup';","import { useTheme } from '@material-ui/core/styles';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\n\nfunction useMobileWidth() {\n const theme = useTheme();\n const isBreakpointsDownSm = useMediaQuery(theme.breakpoints.down('sm'));\n const minWidth = isBreakpointsDownSm ? 300 : theme.breakpoints.values.sm;\n return { minWidth };\n}\n\nexport default useMobileWidth;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport Dialog from '@material-ui/core/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Alert from '@material-ui/lab/Alert';\nimport useTheme from '@material-ui/core/styles/useTheme';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\n\nimport { formatError } from '../libs/util';\nimport useMobileWidth from '../hooks/mobile-width';\n\nexport default function ConfirmDialog({\n title,\n description,\n showCancel,\n cancel,\n confirm,\n color,\n params: initialParams,\n onCancel,\n onConfirm,\n}) {\n const [params, setParams] = useState(initialParams);\n const [open, setOpen] = useState(true);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const { t: changeLocale } = useLocaleContext();\n const theme = useTheme();\n\n const onCallback = async cb => {\n if (typeof cb === 'function') {\n setLoading(true);\n try {\n await cb(params);\n setOpen(false);\n } catch (err) {\n setError(formatError(err));\n console.error(err);\n } finally {\n setLoading(false);\n }\n } else {\n setOpen(false);\n }\n };\n\n const t = typeof title === 'function' ? title() : title;\n const d = typeof description === 'function' ? description(params, setParams, setError) : description;\n\n const isBreakpointsDownSm = useMediaQuery(theme.breakpoints.down('sm'));\n\n const handleClick = e => {\n e.stopPropagation();\n };\n const { minWidth } = useMobileWidth();\n\n return (\n <StyledDialog onClick={handleClick} fullScreen={isBreakpointsDownSm} open={open} style={{ minWidth }}>\n <DialogTitle>{t}</DialogTitle>\n <DialogContent style={{ minWidth }}>\n <DialogContentText component=\"div\">{d}</DialogContentText>\n {!!error && (\n <Alert severity=\"error\" style={{ width: '100%', marginTop: 8 }}>\n {error}\n </Alert>\n )}\n </DialogContent>\n <DialogActions className=\"delete-actions\" style={{ padding: '8px 24px 24px' }}>\n {showCancel && (\n <Button\n onClick={e => {\n e.stopPropagation();\n onCallback(onCancel);\n }}\n color=\"default\"\n data-cy=\"cancel-confirm-dialog\"\n rounded\n size=\"small\">\n {cancel || changeLocale('common.cancel')}\n </Button>\n )}\n <Button\n onClick={e => {\n e.stopPropagation();\n onCallback(onConfirm);\n }}\n color={color}\n size=\"small\"\n // eslint-disable-next-line no-underscore-dangle\n disabled={params.__disableConfirm || loading}\n variant=\"contained\"\n data-cy=\"submit-confirm-dialog\"\n autoFocus\n rounded>\n {loading && <Spinner size={[16, 10]} />}\n {confirm}\n </Button>\n </DialogActions>\n </StyledDialog>\n );\n}\n\nConfirmDialog.propTypes = {\n title: PropTypes.any.isRequired,\n description: PropTypes.any.isRequired, // can be a function that renders different content based on params\n showCancel: PropTypes.bool,\n cancel: PropTypes.string,\n color: PropTypes.string,\n confirm: PropTypes.string,\n params: PropTypes.object, // This object holds states managed in the dialog\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func.isRequired,\n};\n\nConfirmDialog.defaultProps = {\n onCancel: () => {},\n showCancel: true,\n cancel: '',\n confirm: 'Confirm',\n color: 'danger',\n params: {},\n};\n\nconst StyledDialog = styled(Dialog)`\n .delete-actions .Mui-disabled {\n color: rgba(0, 0, 0, 0.26) !important;\n box-shadow: none;\n background-color: rgba(0, 0, 0, 0.12) !important;\n }\n`;\n","import Add from '@material-ui/icons/Add';\nimport Check from '@material-ui/icons/Check';\nimport Delete from '@material-ui/icons/Delete';\nimport Clear from '@material-ui/icons/Clear';\nimport Export from '@material-ui/icons/SaveAlt';\nimport Edit from '@material-ui/icons/Edit';\nimport Filter from '@material-ui/icons/Filter';\nimport FirstPage from '@material-ui/icons/FirstPage';\nimport LastPage from '@material-ui/icons/LastPage';\nimport NextPage from '@material-ui/icons/ChevronRight';\nimport PreviousPage from '@material-ui/icons/ChevronLeft';\nimport Search from '@material-ui/icons/Search';\nimport SortArrow from '@material-ui/icons/ArrowDropDown';\nimport ThirdStateCheck from '@material-ui/icons/Remove';\nimport ViewColumn from '@material-ui/icons/ViewColumn';\n\nexport default {\n Add,\n Check,\n Delete,\n Edit,\n Clear,\n DetailPanel: NextPage,\n Filter,\n FirstPage,\n LastPage,\n NextPage,\n PreviousPage,\n Search,\n ResetSearch: Clear,\n SortArrow,\n Export,\n ThirdStateCheck,\n ViewColumn,\n};\n","import styled from 'styled-components';\n\nconst TableStyle = styled.div`\n .MuiPaper-root {\n box-shadow: none !important;\n border: none !important;\n border-radius: 0 !important;\n background: transparent;\n }\n .MuiToolbar-root {\n background: transparent;\n padding-left: 0;\n display: none;\n }\n\n .MuiTableHead-root th {\n min-width: 100px;\n background: transparent;\n }\n\n .MuiTable-root {\n overflow-y: hidden;\n }\n .MuiTableRow-root {\n border: none !important;\n }\n\n .MuiTableCell-root {\n padding-right: 16px;\n &:last-of-type {\n padding-right: 0;\n }\n }\n`;\n\nexport default TableStyle;\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\nmodule.exports = {\n isFreeBlocklet,\n forEachBlocklet,\n isAuthServiceEnabled,\n getRequiredMissingConfigs,\n wipeSensitiveData,\n};\n","import React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\n\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Tooltip from '@material-ui/core/Tooltip';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nimport Dot from '../dot';\nimport Tag from '../tag';\nimport { isInProgress } from '../../libs/util';\n\nconst colors = {\n yellow: '#FFCF71',\n grey: '#888888',\n};\n\nexport default function BlockletStatus({ status, variant, ...rest }) {\n const { t } = useContext(LocaleContext);\n\n const map = {\n added: 'primary',\n waiting: 'warning',\n downloading: 'warning',\n downloaded: 'primary',\n installing: 'warning',\n installed: 'primary',\n starting: 'warning',\n running: 'success',\n stopping: 'warning',\n stopped: 'reverse',\n error: 'error',\n upgrading: 'warning',\n restarting: 'warning',\n corrupted: 'error',\n };\n\n const colorMap = {\n added: colors.grey,\n waiting: colors.yellow,\n downloading: colors.yellow,\n downloaded: colors.grey,\n installing: colors.yellow,\n installed: colors.grey,\n starting: colors.yellow,\n running: 'success',\n stopping: colors.yellow,\n stopped: colors.grey,\n error: 'error',\n upgrading: colors.yellow,\n restarting: colors.yellow,\n corrupted: 'error',\n };\n\n const inProgress = isInProgress(status);\n\n const statusTxt = t(`blocklet.status.${status}`);\n\n if (variant === 'dot') {\n return (\n <Tooltip title={t('blocklet.statusTip', { status: t(`blocklet.status.${status}`) })}>\n <Dot color={colorMap[status]} {...rest} />\n </Tooltip>\n );\n }\n\n return (\n <Tag type={map[status]} style={{ borderRadius: 5, border: '1px solid #ccc' }} {...rest}>\n {inProgress && <Spinner size={[12, 6]} color=\"inherit\" style={{ marginRight: 5 }} />}\n {statusTxt}\n </Tag>\n );\n}\n\nBlockletStatus.propTypes = {\n status: PropTypes.string.isRequired,\n variant: PropTypes.oneOf(['dot', 'tag']),\n};\n\nBlockletStatus.defaultProps = {\n variant: 'tag',\n};\n","import styled from 'styled-components';\n\nconst color = {\n success: '#3ab39d',\n error: '#D0021B',\n};\n\nconst defaultSize = '10px';\n\nconst Dot = styled.div`\n display: inline-block;\n width: ${props => props.size || defaultSize};\n height: ${props => props.size || defaultSize};\n background: ${props => color[props.color] || props.color || color.success};\n border-radius: 100%;\n`;\n\nexport default Dot;\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\n\nvar _styledComponents = _interopRequireDefault(require(\"styled-components\"));\n\nvar _ButtonGroup = _interopRequireDefault(require(\"@material-ui/core/ButtonGroup\"));\n\nvar _wrap = _interopRequireDefault(require(\"../Button/wrap\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nconst sizes = {\n small: 16,\n medium: 18,\n large: 20\n};\n\nconst getBorderRadius = size => sizes[size || 'medium'];\n\nconst StyledButtonGroup = (0, _styledComponents.default)(_ButtonGroup.default).withConfig({\n displayName: \"ButtonGroup__StyledButtonGroup\",\n componentId: \"sc-1popzk9-0\"\n})([\".MuiButton-root:first-of-type{border-radius:\", \"px 0 0 \", \"px;}.MuiButton-root:last-of-type{border-radius:0 \", \"px \", \"px 0;}\"], props => getBorderRadius(props.size), props => getBorderRadius(props.size), props => getBorderRadius(props.size), props => getBorderRadius(props.size));\n\nvar _default = (0, _wrap.default)(StyledButtonGroup);\n\nexports.default = _default;","const langs = new Map();\n\nconst registerLang = (locale, obj) => {\n langs.set(locale, obj);\n};\n\nconst getLang = (locale = 'en_US') => langs.get(locale) || langs.get('en_US');\n\nmodule.exports = {\n registerLang,\n getLang,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport OriTag from '@arcblock/ux/lib/Tag';\n\nexport default function Tag({ children, ...rest }) {\n return (\n <OriTag style={{ borderRadius: 5, border: '1px solid #ccc' }} {...rest}>\n {children}\n </OriTag>\n );\n}\n\nTag.propTypes = {\n children: PropTypes.any.isRequired,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport joinURL from 'url-join';\n\nimport Avatar from '@material-ui/core/Avatar';\n\nimport { useNodeContext } from '../../contexts/node';\nimport { formatRegistryLogoPath } from '../../libs/util';\n\nexport default function BlockletAvatar({ blocklet, style, size, ...rest }) {\n const node = useNodeContext();\n let logoUrl = joinURL(node.prefix, 'blocklet.png');\n\n if (!blocklet.deployedFrom) {\n blocklet.deployedFrom = node.info.blockletRegistry;\n }\n\n if (blocklet.source === 'registry' && blocklet.meta.logo) {\n logoUrl = joinURL(blocklet.deployedFrom, formatRegistryLogoPath(blocklet.meta.did, blocklet.meta.logo));\n } else {\n const prefix = window.env.apiPrefix || '/';\n logoUrl = joinURL(prefix, `/blocklet/logo/${blocklet.meta.did}`);\n }\n\n const setFallBackUrl = ev => {\n ev.target.src = `${node.prefix}/blocklet.png`;\n };\n\n return (\n <Avatar\n style={Object.assign(\n { backgroundColor: 'transparent', border: '2px solid #ddd', width: size, height: size },\n style\n )}\n {...rest}>\n <img\n src={logoUrl}\n onError={setFallBackUrl}\n alt={blocklet.meta.name}\n style={{ width: size, backgroundColor: '#fff' }}\n />\n </Avatar>\n );\n}\n\nBlockletAvatar.propTypes = {\n blocklet: PropTypes.object.isRequired,\n style: PropTypes.object,\n size: PropTypes.number,\n};\n\nBlockletAvatar.defaultProps = {\n style: {},\n size: 40,\n};\n","import Remove from '@material-ui/icons/Delete';\nimport Start from '@material-ui/icons/PlayArrow';\nimport Stop from '@material-ui/icons/Stop';\nimport Restart from '@material-ui/icons/Replay';\nimport Reload from '@material-ui/icons/Autorenew';\nimport Config from '@material-ui/icons/Settings';\nimport Log from '@material-ui/icons/Receipt';\nimport Group from '@material-ui/icons/Group';\n\nexport default {\n Start,\n Stop,\n Restart,\n Reload,\n Remove,\n Config,\n Log,\n Group,\n};\n","/* eslint-disable no-use-before-define */\nimport useLocalStorage from 'react-use/lib/useLocalStorage';\n\nexport default function usePersistentSort(name, initialDirections) {\n const [sortDirections, setSortDirections] = useLocalStorage(`ps_${name}`, initialDirections);\n\n const onSortChange = (columnIndex, directionValue) => {\n const newSortDirections = directionValue ? new Array(initialDirections.length).fill('') : [...initialDirections];\n\n if (columnIndex > -1) {\n newSortDirections[columnIndex] = directionValue;\n }\n\n setSortDirections(newSortDirections);\n };\n\n return {\n sortDirections, // 当前的排序\n onSortChange, // 给外部的回调,可以更新内部的 sort\n };\n}\n"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["hooks/blocklet-purchase.js","components/blocklet/purchase.js","components/blocklet/install.js","components/blocklet/list.js","components/registry/add.js","components/registry/delete.js","components/registry/switch.js","pages/store/index.js","hooks/mobile-width.js","components/confirm.js","components/click-to-copy.js","../../../blocklet/meta/lib/util.js","components/delete-confirm.js"],"names":["useBlockletPurchase","did","query","useQuery","history","useHistory","useLocalStorage","sessionId","setSessionId","useState","hasCompleted","setCompleted","session","setSession","doRedirect","URL","window","location","href","pathname","searchParams","prefix","env","apiPrefix","get","replace","hasPurchased","useSubscription","BlockletEvents","purchaseChange","e","includes","status","setTimeout","useEffect","id","useStyles","makeStyles","dialogAuth","padding","textAlign","marginBottom","iconRoot","minWidth","forwardRef","meta","mode","onCancel","useLocaleContext","t","locale","useNodeContext","info","gql","api","useSessionContext","classes","action","setAction","step","setStep","webWalletUrl","getWebWalletUrl","onSelect","act","a","onNext","payload","JSON","stringify","blockletDid","registryUrl","blockletRegistry","startSession","input","data","initial","cb","delete","set","callback","encodeURIComponent","nw","joinURL","nextWorkflow","url","nftFactory","onClose","options","title","description","popup","open","className","checkFn","checkTimeout","socketUrl","extraParams","sid","onSuccess","showDownload","messages","scan","confirm","success","disableBackdropClick","disableEscapeKeyDown","fullWidth","style","List","tabPanel","map","x","ListItem","button","key","selected","onClick","ListItemIcon","color","colors","primary","main","fontSize","ListItemText","secondary","rounded","disabled","variant","marginTop","Typography","component","message","getMessage","InstallOrUpgrade","lastVersion","buttonText","rest","enqueueSnackbar","useSnackbar","useBlockletContext","state","find","d","installed","useMemo","installedVersion","version","requirePurchase","isFreeBlocklet","loading","setLoading","showPurchaseDialog","setShowPurchaseDialog","loadingText","isInstalling","needUpgrade","gt","btnTxt","upgrade","purchase","install","showInstallBtn","onAction","preventDefault","stopPropagation","fn","formatError","autoHideDuration","console","error","InstallButton","size","Boolean","data-cy","marginRight","defaultProps","permission","hasPermission","push","configs","some","required","value","marginLeft","theme","root","backgroundColor","lighten","palette","position","content","top","left","width","height","transform","BlockletItem","useContext","LocaleContext","node","logoUrl","startsWith","logo","formatRegistryLogoPath","name","cover","addons","icon","formatTimeFromNow","lastPublishedAt","stats","downloads","pretty","BlockletList","blocklets","versions","reduce","totalVal","onClickLink","currentTarget","contains","target","Grid","container","spacing","item","lg","md","sm","xs","data-blocklet-did","to","addMenuItemRoot","justifyContent","lineHeight","AddBlockletRegistry","disable","setDisable","setOpen","setUrl","setError","onConfirm","decoded","decodeURIComponent","trim","addProtocol","test","Error","blockletRegistryList","addBlockletRegistry","reload","errMsg","maxWidth","PaperProps","minHeight","actions","autoFocus","paddingTop","overflowY","DialogContentText","TextField","label","autoComplete","onChange","isDisabled","onKeyPress","type","DeleteBlockletRegistry","props","confirmSetting","setConfirmSetting","deleteBlockletRegistry","setting","keyName","confirmPlaceholder","cancel","IconButton","params","textTransform","menuName","display","flexDirection","overflow","textOverflow","whiteSpace","ref","React","menuIndex","setMenuIndex","selectedIndex","findIndex","index","selectBlockletRegistry","useImperativeHandle","text","endIcon","disablePortal","fontWeight","ListItemSecondaryAction","protected","SortIcon","direction","BlockletStore","keyword","setKeyword","popularity","directions","setDirections","mainFactor","setMainFactor","currentRegistry","useAsyncRetry","listBlocklets","rawList","searchContent","filter","join","toLocaleLowerCase","filterList","sortByName","sortByPopularity","word","toLowerCase","orderBy","handleSort","property","sort","newSort","switchEl","useRef","length","current","Main","Breadcrumbs","separator","aria-label","Box","p","m","mt","alignItems","placeholder","defaultValue","InputProps","startAdornment","endAdornment","margin","cursor","styled","breakpoints","values","useMobileWidth","useTheme","useMediaQuery","down","ConfirmDialog","showCancel","initialParams","setParams","changeLocale","onCallback","isBreakpointsDownSm","StyledDialog","fullScreen","DialogTitle","DialogContent","Alert","severity","DialogActions","__disableConfirm","Dialog","ClickToCopy","children","tip","copiedTip","require","forEachBlocklet","blocklet","parallel","sync","child","tasks","Promise","all","module","exports","payment","price","every","isAuthServiceEnabled","s","getRequiredMissingConfigs","missingConfigs","forEach","y","wipeSensitiveData","secure","environments","configObj","environmentObj","CancelConfirm","dangerouslySetInnerHTML","__html","inputVal"],"mappings":"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","file":"static/js/22.cdd3d1a4.chunk.js","sourcesContent":["import { useState, useEffect } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport useLocalStorage from 'react-use/lib/useLocalStorage';\n\nimport { BlockletEvents } from '@blocklet/meta/lib/constants';\n\nimport useQuery from './query';\nimport { useSubscription } from '../libs/ws';\n\nexport default function useBlockletPurchase(did) {\n const query = useQuery();\n const history = useHistory();\n const [sessionId, setSessionId] = useLocalStorage(`sid:blocklet:purchase:${did}`);\n const [hasCompleted, setCompleted] = useState(false);\n const [session, setSession] = useState(null);\n\n const doRedirect = () => {\n const { pathname, searchParams } = new URL(window.location.href);\n const prefix = window.env && window.env.apiPrefix ? window.env.apiPrefix : '/';\n if (searchParams.get('sid')) {\n setSessionId('');\n history.replace(pathname.replace(prefix, '/'));\n }\n };\n\n const hasPurchased = !!(query.get('assetDid') && sessionId && query.get('sid') === sessionId);\n\n useSubscription(BlockletEvents.purchaseChange, e => {\n if (e.did === did) {\n setSession(e.session);\n\n if (['declined', 'confirmed', 'error'].includes(e.session.status)) {\n setCompleted(true);\n setTimeout(doRedirect, 2000);\n }\n }\n });\n\n useEffect(() => {\n if (session && session.id !== sessionId) {\n setSessionId(session.id);\n }\n }, [session]); // eslint-disable-line\n\n return {\n hasCompleted,\n hasPurchased,\n session,\n setSession,\n doRedirect,\n };\n}\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport React, { forwardRef, useState } from 'react';\nimport joinURL from 'url-join';\nimport PropTypes from 'prop-types';\n\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Typography from '@material-ui/core/Typography';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\n\nimport IconPurchase from '@material-ui/icons/ShoppingCart';\nimport IconVerify from '@material-ui/icons/VerifiedUser';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport DidConnect from '@arcblock/did-connect/lib/Connect';\nimport colors from '@arcblock/ux/lib/Colors';\n\nimport { useSessionContext } from '../../contexts/session';\nimport { useNodeContext } from '../../contexts/node';\nimport { getWebWalletUrl } from '../../libs/util';\nimport useBlockletPurchase from '../../hooks/blocklet-purchase';\n\nconst useStyles = makeStyles(() => ({\n dialogAuth: {\n padding: '0 0 24px !important',\n '& .auth-title': {\n textAlign: 'center !important',\n marginBottom: '4px !important',\n },\n '& .auth-tip--scan': {\n textAlign: 'center !important',\n },\n },\n iconRoot: {\n minWidth: 48,\n },\n}));\n\nfunction BlockletPurchase({ meta, mode, onCancel }) {\n const { t, locale } = useLocaleContext();\n const { info, api: gql } = useNodeContext();\n const { api } = useSessionContext();\n const classes = useStyles();\n const [action, setAction] = useState(mode !== 'both' ? mode : '');\n const [step, setStep] = useState(mode !== 'both' ? 2 : 1);\n const { session, setSession, hasCompleted, doRedirect } = useBlockletPurchase(meta.did);\n\n const webWalletUrl = getWebWalletUrl(info);\n const prefix = window.env && window.env.apiPrefix ? window.env.apiPrefix : '/';\n\n const onSelect = async act => {\n if (act === action) {\n return;\n }\n\n setAction(act);\n };\n\n const onNext = async () => {\n if (!action) {\n return;\n }\n if (step === 2) {\n return;\n }\n\n // Start a new session and persist session id to local storage\n const payload = JSON.stringify({ blockletDid: meta.did, registryUrl: info.blockletRegistry, action });\n const { session: initial } = await gql.startSession({ input: { data: payload } });\n setSession(initial);\n\n setStep(2);\n\n if (action === 'purchase') {\n setTimeout(async () => {\n const cb = new URL(window.location.href);\n cb.searchParams.delete('assetDid');\n cb.searchParams.set('sid', initial.id);\n cb.searchParams.set('locale', locale);\n const callback = encodeURIComponent(cb.href);\n\n const nw = new URL(window.location.href);\n nw.pathname = joinURL(prefix, '/api/did/verify-purchase/token');\n nw.searchParams.set('sid', initial.id);\n nw.searchParams.set('locale', locale);\n nw.searchParams.set('autoConnect', 'false');\n const { data } = await api.get(nw.href);\n const nextWorkflow = encodeURIComponent(data.url);\n\n window.location.href = joinURL(\n info.blockletRegistry,\n `/store/purchase/${meta.nftFactory}?cb=${callback}&nw=${nextWorkflow}`\n );\n }, 100);\n }\n };\n\n const onClose = () => {\n doRedirect();\n onCancel();\n setStep(1);\n };\n\n const onVerifySuccess = () => {\n setTimeout(onCancel, 2000);\n };\n\n const options = [\n {\n action: 'purchase',\n title: t('store.purchase.purchase.title'),\n description: t('store.purchase.purchase.description'),\n },\n {\n action: 'verify',\n title: t('store.purchase.verify.title'),\n description: t('store.purchase.verify.description'),\n },\n ];\n\n const getMessage = () => {\n if (session) {\n if (session.status === 'confirmed') {\n return t('store.purchase.confirmed');\n }\n if (session.status === 'declined') {\n return t('store.purchase.declined');\n }\n if (session.status === 'error') {\n return session.message;\n }\n }\n\n return t('store.purchase.waiting');\n };\n\n if (step === 2 && action === 'verify' && session) {\n return (\n <DidConnect\n popup\n open\n className={classes.dialogAuth}\n action=\"verify-purchase\"\n checkFn={api.get}\n checkTimeout={10 * 60 * 1000}\n socketUrl={api.socketUrl}\n webWalletUrl={webWalletUrl}\n extraParams={{ locale, sid: session.id }}\n onSuccess={onVerifySuccess}\n onClose={onClose}\n showDownload={false}\n locale={locale}\n messages={{\n title: t('store.purchase.auth.title'),\n scan: t('store.purchase.auth.scan'),\n confirm: t('store.purchase.auth.confirm'),\n success: t('store.purchase.auth.success'),\n }}\n />\n );\n }\n\n return (\n <Dialog\n title={action && step === 2 ? t(`store.purchase.${action}.title`) : t('store.purchase.title')}\n disableBackdropClick\n disableEscapeKeyDown\n open\n fullWidth\n onClose={onClose}>\n {step === 1 && (\n <div style={{ marginBottom: 16 }}>\n <List className={classes.tabPanel}>\n {options.map(x => (\n <ListItem button key={x.action} selected={action === x.action} onClick={() => onSelect(x.action)}>\n <ListItemIcon className={classes.iconRoot}>\n {x.action === 'purchase' ? (\n <IconPurchase\n style={{ color: action === 'purchase' ? colors.primary.main : '#AAA', fontSize: 32 }}\n />\n ) : (\n <IconVerify style={{ color: action === 'verify' ? colors.primary.main : '#AAA', fontSize: 32 }} />\n )}\n </ListItemIcon>\n <ListItemText primary={x.title} secondary={x.description} />\n </ListItem>\n ))}\n </List>\n <Button\n rounded\n fullWidth\n disabled={!action}\n variant=\"contained\"\n color=\"primary\"\n style={{ marginTop: 16 }}\n onClick={onNext}>\n {t('common.next')}\n </Button>\n </div>\n )}\n {step === 2 && action === 'purchase' && (\n <div style={{ textAlign: 'center' }}>\n {!hasCompleted && <Spinner />}\n <Typography component=\"p\">{getMessage()}</Typography>\n </div>\n )}\n </Dialog>\n );\n}\n\nBlockletPurchase.propTypes = {\n meta: PropTypes.object.isRequired,\n mode: PropTypes.oneOf(['both', 'verify']).isRequired,\n onCancel: PropTypes.func.isRequired,\n};\n\nexport default forwardRef(BlockletPurchase);\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport React, { useState, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { useHistory } from 'react-router-dom';\nimport { isFreeBlocklet } from '@blocklet/meta/lib/util';\nimport { useSnackbar } from 'notistack';\n\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@arcblock/ux/lib/Button';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport { gt } from 'semver';\n\nimport { useBlockletContext } from '../../contexts/blocklets';\nimport { isInstalling, formatError } from '../../libs/util';\nimport useBlockletPurchase from '../../hooks/blocklet-purchase';\nimport Permission from '../permission';\nimport PurchaseDialog from './purchase';\n\nexport default function InstallOrUpgrade({ meta, lastVersion, buttonText, registryUrl, ...rest }) {\n const { enqueueSnackbar } = useSnackbar();\n const { t } = useLocaleContext();\n const history = useHistory();\n\n const { api, data: installedBlocklets } = useBlockletContext();\n const state = installedBlocklets.find(d => d.meta.did === meta.did) || {};\n\n const installed = useMemo(() => !!state.status, [state.status]);\n const installedVersion = useMemo(() => (installed ? state.meta?.version : null), [installed, state.meta]);\n const requirePurchase = isFreeBlocklet(meta) === false;\n\n const [loading, setLoading] = useState(false);\n const { hasPurchased } = useBlockletPurchase(meta.did);\n const [showPurchaseDialog, setShowPurchaseDialog] = useState(false);\n\n const loadingText = useMemo(() => {\n if (loading) {\n if (installed) {\n return t('blocklet.status.upgrading');\n }\n if (requirePurchase) {\n return t('blocklet.status.purchasing');\n }\n return t('blocklet.status.waiting');\n }\n if (isInstalling(state.status)) return t(`common.${state.status}`);\n return '';\n }, [loading, state.status, installed, t, requirePurchase]);\n\n const needUpgrade = useMemo(() => {\n if (!lastVersion || !installedVersion) {\n return false;\n }\n\n if (lastVersion) {\n if (gt(lastVersion, installedVersion)) {\n return true;\n }\n }\n\n return false;\n }, [lastVersion, installedVersion]);\n\n const btnTxt = useMemo(() => {\n if (needUpgrade) return buttonText.upgrade;\n if (installed) return buttonText.open;\n if (requirePurchase) return buttonText.purchase;\n return buttonText.install;\n }, [installed, needUpgrade, requirePurchase, buttonText]);\n\n // only installed without upgrade show open button\n const showInstallBtn = useMemo(() => !(installed && !needUpgrade), [installed, needUpgrade]);\n\n const onAction = async e => {\n e.preventDefault();\n e.stopPropagation();\n\n try {\n setLoading(true);\n // The purchase dialog should only show on install\n if (!installed && requirePurchase) {\n setShowPurchaseDialog(true);\n return;\n }\n\n const fn = !installed ? 'installBlocklet' : 'upgradeBlocklet';\n await api[fn]({ input: { did: meta.did, registryUrl } });\n } catch (err) {\n enqueueSnackbar(formatError(err), { autoHideDuration: 5000, variant: 'error' });\n console.error('Blocklet installed failed', err);\n } finally {\n setLoading(false);\n }\n };\n\n const InstallButton = ({ disabled }) => (\n <Button\n key={meta.did}\n onClick={onAction}\n size=\"small\"\n disabled={Boolean(loadingText || disabled)}\n variant=\"contained\"\n color=\"primary\"\n data-cy=\"install-blocklet\"\n rounded\n {...rest}>\n {loadingText ? (\n <>\n <Spinner size={[16, 10]} style={{ marginRight: 3 }} />\n {loadingText}\n </>\n ) : (\n btnTxt\n )}\n </Button>\n );\n\n InstallButton.propTypes = {\n disabled: PropTypes.bool,\n };\n\n InstallButton.defaultProps = {\n disabled: false,\n };\n\n const getTab = d => {\n if (d) {\n return (d.configs || []).some(x => x.required && !x.value) ? 'configuration' : 'overview';\n }\n\n return 'overview';\n };\n\n const onGoDetail = e => {\n e.preventDefault();\n e.stopPropagation();\n history.push(`/blocklets/${meta.did}/${getTab(state)}`);\n };\n\n const onCancelPurchase = () => {\n setLoading(false);\n setShowPurchaseDialog(false);\n };\n\n return (\n <>\n <div>\n {showInstallBtn ? (\n <Permission permission=\"mutate_blocklet\">\n {hasPermission => <InstallButton disabled={!hasPermission} />}\n </Permission>\n ) : (\n <Button\n rounded\n className=\"action-button\"\n variant=\"contained\"\n color=\"primary\"\n size=\"small\"\n disabled={Boolean(loadingText)}\n data-cy=\"open-blocklet\"\n onClick={onGoDetail}>\n {loadingText ? (\n <>\n <Spinner size={[16, 10]} style={{ marginRight: 3 }} />\n {loadingText}\n </>\n ) : (\n btnTxt\n )}\n </Button>\n )}\n\n {installed && requirePurchase && (\n <Typography component=\"small\" style={{ fontSize: 12, color: '#666', marginLeft: 4 }}>\n {t('blocklet.status.purchased')}\n </Typography>\n )}\n </div>\n {((hasPurchased && !installed) || showPurchaseDialog) && (\n <PurchaseDialog meta={meta} mode={hasPurchased ? 'purchase' : 'both'} onCancel={onCancelPurchase} />\n )}\n </>\n );\n}\n\nInstallOrUpgrade.propTypes = {\n meta: PropTypes.object.isRequired,\n lastVersion: PropTypes.string,\n buttonText: PropTypes.shape({\n purchase: PropTypes.string.isRequired,\n open: PropTypes.string.isRequired,\n install: PropTypes.string.isRequired,\n upgrade: PropTypes.string.isRequired,\n }).isRequired,\n registryUrl: PropTypes.string.isRequired,\n};\n\nInstallOrUpgrade.defaultProps = {\n lastVersion: '',\n};\n","/* eslint-disable react/jsx-wrap-multilines */\nimport React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport joinURL from 'url-join';\nimport Grid from '@material-ui/core/Grid';\nimport { Link } from 'react-router-dom';\nimport { makeStyles, lighten } from '@material-ui/core/styles';\n\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Blocklet from '@arcblock/ux/lib/Blocklet';\n\nimport { formatRegistryLogoPath, formatTimeFromNow } from '../../libs/util';\nimport { useNodeContext } from '../../contexts/node';\nimport InstallOrUpgrade from './install';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n backgroundColor: 'transparent!important',\n '& .MuiButton-root:not(.Mui-disabled)': {\n backgroundColor: lighten(theme.palette.primary.main, 1 - 0.06),\n color: theme.palette.primary.main,\n position: 'relative',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: '150%',\n height: '150%',\n transform: 'translate(-50%, -50%)',\n },\n },\n },\n}));\n\nfunction BlockletItem({ x, lastVersion }) {\n const { t } = useContext(LocaleContext);\n const classes = useStyles();\n const node = useNodeContext();\n let logoUrl = joinURL(node.prefix, 'blocklet.png');\n\n const { blockletRegistry } = node.info;\n if (blockletRegistry.startsWith('http') && x.logo) {\n logoUrl = joinURL(blockletRegistry, formatRegistryLogoPath(x.did, x.logo));\n } else {\n const prefix = window.env.apiPrefix || '/';\n let apiPrefix = prefix.replace(/^\\/+/, '').replace(/\\/+$/, '');\n if (apiPrefix) {\n apiPrefix = `/${apiPrefix}`;\n }\n logoUrl = joinURL(apiPrefix, `/blocklet/logo/${x.did}`);\n }\n\n return (\n <Blocklet\n title={x.title || x.name}\n description={x.description}\n cover={logoUrl}\n addons={[\n { icon: 'cube', value: `v${x.version}` },\n { icon: 'clock', value: formatTimeFromNow(x.lastPublishedAt) },\n { icon: 'cloud-download', value: x.stats?.downloads || 0, pretty: true },\n ]}\n button={\n <div className={classes.root}>\n <InstallOrUpgrade\n meta={x}\n lastVersion={lastVersion}\n buttonText={{\n purchase: t('common.purchase'),\n open: t('common.open'),\n install: t('common.install'),\n upgrade: t('common.upgrade'),\n }}\n registryUrl={blockletRegistry}\n />\n </div>\n }\n />\n );\n}\n\nBlockletItem.propTypes = {\n x: PropTypes.object.isRequired,\n lastVersion: PropTypes.string,\n};\nBlockletItem.defaultProps = {\n lastVersion: '',\n};\n\nexport default function BlockletList({ blocklets, ...rest }) {\n const versions = blocklets.reduce((totalVal, { did, version }) => {\n totalVal[did] = version;\n return totalVal;\n }, {});\n\n const onClickLink = e => {\n if (!e.currentTarget.contains(e.target)) {\n e.preventDefault();\n return false;\n }\n return true;\n };\n\n return (\n <div {...rest}>\n <Grid container spacing={4}>\n {blocklets.map(x => (\n <Grid item lg={4} md={6} sm={6} xs={12} key={x.did} data-blocklet-did={x.did}>\n <Link to={`/store/${x.did}`} data-cy=\"blocklet-item\" style={{ color: 'initial' }} onClick={onClickLink}>\n <BlockletItem x={x} lastVersion={versions[x.did]} />\n </Link>\n </Grid>\n ))}\n </Grid>\n </div>\n );\n}\n\nBlockletList.propTypes = {\n blocklets: PropTypes.array.isRequired,\n};\n\nBlockletList.defaultProps = {};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport Typography from '@material-ui/core/Typography';\nimport TextField from '@material-ui/core/TextField';\nimport ListItem from '@material-ui/core/ListItem';\nimport AddIcon from '@material-ui/icons/Add';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport Alert from '@arcblock/ux/lib/Alert';\n\nimport { useNodeContext } from '../../contexts/node';\nimport { formatError } from '../../libs/util';\n\nconst useStyles = makeStyles(theme => ({\n addMenuItemRoot: {\n justifyContent: 'center',\n color: theme.palette.primary.main,\n lineHeight: '3.2',\n },\n}));\n\nexport default function AddBlockletRegistry({ disabled }) {\n const { api, info } = useNodeContext();\n const [loading, setLoading] = useState(false);\n const [disable, setDisable] = useState(true);\n const [open, setOpen] = useState(false);\n const [url, setUrl] = useState('');\n const [error, setError] = useState('');\n const { t } = useLocaleContext();\n const classes = useStyles();\n\n const onConfirm = async () => {\n setLoading(true);\n try {\n let decoded = decodeURIComponent(url.trim());\n const regex = /^https?:\\/\\//;\n let addProtocol = false;\n if (!regex.test(decoded)) {\n decoded = `https://${decoded}`;\n addProtocol = true;\n }\n\n // validate\n try {\n new URL(decoded); // eslint-disable-line no-new\n } catch {\n throw new Error('Invalid Blocklet Store URL');\n }\n\n if (info.blockletRegistryList.some(item => [url, decoded].includes(item.url))) {\n throw new Error(t('store.blockletRegistry.haveSameRegistry'));\n }\n\n await api.addBlockletRegistry({ input: { url: addProtocol ? `https://${url}` : url } });\n window.location.reload();\n } catch (err) {\n const errMsg = `${t('store.blockletRegistry.addFailed')} ${formatError(err)}`;\n setError(errMsg);\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <>\n <ListItem\n button\n disabled={disabled}\n className={classes.addMenuItemRoot}\n onClick={() => {\n setOpen(true);\n }}>\n <AddIcon fontSize=\"small\" />\n <Typography variant=\"inherit\">{t('store.blockletRegistry.addRegistry')}</Typography>\n </ListItem>\n <Dialog\n title={t('store.blockletRegistry.addRegistry')}\n fullWidth\n maxWidth=\"md\"\n open={open}\n onClose={() => setOpen(false)}\n PaperProps={{ style: { minHeight: 'auto' } }}\n actions={\n <>\n <Button\n onClick={e => {\n e.stopPropagation();\n setOpen(false);\n }}\n color=\"default\"\n rounded\n size=\"small\">\n {t('common.cancel')}\n </Button>\n <Button\n onClick={e => {\n e.stopPropagation();\n onConfirm();\n }}\n color=\"primary\"\n size=\"small\"\n data-cy=\"install-blocklet-next-step\"\n disabled={loading || !url || disable}\n variant=\"contained\"\n autoFocus\n rounded>\n {loading && <Spinner size={[16, 10]} />}\n {t('common.confirm')}\n </Button>\n </>\n }>\n <div style={{ paddingTop: 12, overflowY: 'hidden' }}>\n <DialogContentText component=\"div\">\n <Typography component=\"div\">\n <TextField\n label={t('store.blockletRegistry.registryUrl')}\n autoComplete=\"off\"\n variant=\"outlined\"\n name=\"url\"\n fullWidth\n value={url}\n onChange={e => {\n setError(null);\n let isDisabled = false;\n if (!e.target.value.trim()) {\n isDisabled = true;\n }\n if (!e.target.value.trim()) {\n setError(t('store.blockletRegistry.registryUrlEmpty'));\n }\n setUrl(e.target.value);\n setDisable(isDisabled);\n }}\n disabled={loading}\n onKeyPress={e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n if (!e.target.value.trim()) {\n setError(t('store.blockletRegistry.registryUrlEmpty'));\n } else {\n onConfirm();\n }\n }\n }}\n />\n </Typography>\n </DialogContentText>\n </div>\n {!!error && (\n <Alert type=\"error\" style={{ width: '100%' }}>\n {error}\n </Alert>\n )}\n </Dialog>\n </>\n );\n}\n\nAddBlockletRegistry.propTypes = {\n disabled: PropTypes.bool,\n};\n\nAddBlockletRegistry.defaultProps = {\n disabled: false,\n};\n","/* eslint-disable react/prop-types */\nimport React, { useState } from 'react';\nimport { useSnackbar } from 'notistack';\nimport IconButton from '@material-ui/core/IconButton';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport DeleteOutlineIcon from '@material-ui/icons/DeleteOutline';\nimport DelConfirm from '../delete-confirm';\nimport { useNodeContext } from '../../contexts/node';\nimport { formatError } from '../../libs/util';\n\nexport default function DeleteBlockletRegistry(props) {\n const { enqueueSnackbar } = useSnackbar();\n const { api } = useNodeContext();\n const { t } = useLocaleContext();\n const [loading, setLoading] = useState(false);\n const [confirmSetting, setConfirmSetting] = useState(null);\n const { blockletRegistry } = props;\n\n const onCancel = () => {\n setLoading(false);\n setConfirmSetting(null);\n };\n\n const onConfirm = async () => {\n try {\n setLoading(true);\n await api.deleteBlockletRegistry({ input: { url: blockletRegistry.url } });\n window.location.reload();\n } catch (err) {\n enqueueSnackbar(`Remove Blocklet Store Error: ${formatError(err)}`, {\n autoHideDuration: 2000,\n variant: 'error',\n });\n } finally {\n setLoading(false);\n setConfirmSetting(null);\n }\n };\n\n const setting = {\n keyName: blockletRegistry.url,\n title: t('store.blockletRegistry.deleteRegistry'),\n description: t('store.blockletRegistry.deleteDesc', { name: `<b>${blockletRegistry.url}</b>` }),\n confirmPlaceholder: t('store.blockletRegistry.confirmDesc', { name: blockletRegistry.url }),\n confirm: t('common.delConfirm'),\n cancel: t('common.cancel'),\n onConfirm,\n onCancel,\n };\n\n const onMenuItemClick = e => {\n e.stopPropagation();\n setConfirmSetting(setting);\n };\n\n return (\n <>\n <IconButton disabled={loading} onClick={onMenuItemClick}>\n <DeleteOutlineIcon />\n </IconButton>\n {confirmSetting && (\n <DelConfirm\n keyName={confirmSetting.keyName}\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirmPlaceholder={confirmSetting.confirmPlaceholder}\n confirm={confirmSetting.confirm}\n cancel={confirmSetting.cancel}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n />\n )}\n </>\n );\n}\n","/* eslint-disable react/jsx-one-expression-per-line */\nimport React, { forwardRef, useImperativeHandle, useState } from 'react';\nimport { useSnackbar } from 'notistack';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Dialog from '@arcblock/ux/lib/Dialog';\nimport Typography from '@material-ui/core/Typography';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\nimport AddBlockletRegistry from './add';\nimport DeleteBlockletRegistry from './delete';\nimport Permission from '../permission';\n\nimport { useNodeContext } from '../../contexts/node';\nimport { formatError } from '../../libs/util';\n\nconst useStyles = makeStyles(() => ({\n buttonText: {\n textTransform: 'none !important',\n },\n iconRoot: {\n minWidth: 24,\n },\n menuName: {\n display: 'flex',\n flexDirection: 'column',\n marginRight: '100px',\n '& span': { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' },\n },\n}));\n\nfunction SwitchBlockletRegistry(props, ref) {\n const { api, info } = useNodeContext();\n const { t } = useLocaleContext();\n const { enqueueSnackbar } = useSnackbar();\n const [loading, setLoading] = useState(false);\n const [open, setOpen] = useState(false);\n const [menuIndex, setMenuIndex] = React.useState(-1);\n const classes = useStyles();\n const selectedIndex = info.blockletRegistryList.findIndex(x => x.selected);\n\n const onSelect = async index => {\n try {\n setLoading(true);\n setMenuIndex(index);\n\n const blockletRegistry = info.blockletRegistryList[index];\n await api.selectBlockletRegistry({ input: { url: blockletRegistry.url } });\n window.location.reload();\n } catch (err) {\n console.error(err);\n setLoading(false);\n enqueueSnackbar(`${t('store.blockletRegistry.changeFailed')} ${formatError(err)}`, {\n autoHideDuration: 2000,\n variant: 'error',\n });\n }\n };\n\n useImperativeHandle(ref, () => ({\n setOpen,\n }));\n\n return (\n <>\n <Permission permission=\"mutate_node\">\n {hasPermission => (\n <Button\n disabled={!hasPermission}\n classes={{ text: classes.buttonText }}\n color=\"secondary\"\n data-cy=\"store-toggle\"\n onClick={() => {\n setOpen(true);\n }}\n endIcon={<ArrowDropDownIcon />}>\n <Typography color=\"secondary\">{info.blockletRegistryList[selectedIndex].name}</Typography>\n </Button>\n )}\n </Permission>\n <Dialog\n title={t('store.blockletRegistry.switchRegistry')}\n disableBackdropClick\n disableEscapeKeyDown\n disablePortal={false}\n fullWidth\n open={open}\n onClose={() => setOpen(false)}>\n <List className={classes.tabPanel}>\n {info.blockletRegistryList.map((x, index) => (\n <ListItem\n button\n disabled={loading}\n key={x.url}\n selected={selectedIndex === index}\n data-cy=\"store-switch\"\n onClick={() => {\n if (loading) {\n return;\n }\n\n if (index === selectedIndex) {\n setOpen(false);\n return;\n }\n\n onSelect(index);\n }}>\n <ListItemIcon className={classes.iconRoot}>\n {menuIndex === index && loading && <Spinner size={[16, 10]} />}\n </ListItemIcon>\n <ListItemText>\n <div className={classes.menuName}>\n <Typography component=\"span\" variant=\"subtitle1\" style={{ fontWeight: '500' }}>\n {x.name}\n </Typography>\n <Typography className=\"url\" component=\"span\" variant=\"inherit\">\n {`${x.url}`}\n </Typography>\n </div>\n <ListItemSecondaryAction>\n {!x.protected && <DeleteBlockletRegistry blockletRegistry={x} />}\n </ListItemSecondaryAction>\n </ListItemText>\n </ListItem>\n ))}\n <AddBlockletRegistry disabled={loading} />\n </List>\n </Dialog>\n </>\n );\n}\n\nSwitchBlockletRegistry.propTypes = {};\n\nexport default forwardRef(SwitchBlockletRegistry);\n","/* eslint-disable react/jsx-one-expression-per-line */\n/* eslint-disable operator-linebreak */\nimport React, { useState, useContext, useRef, useMemo } from 'react';\nimport styled from 'styled-components';\nimport useAsyncRetry from 'react-use/lib/useAsyncRetry';\nimport useLocalStorage from 'react-use/lib/useLocalStorage';\nimport { Link } from 'react-router-dom';\nimport orderBy from 'lodash/orderBy';\nimport PropTypes from 'prop-types';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport Typography from '@material-ui/core/Typography';\nimport Box from '@material-ui/core/Box';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport TextField from '@material-ui/core/TextField';\nimport Icon from '@arcblock/ux/lib/Icon';\n\nimport ArrowDownwardSharpIcon from '@material-ui/icons/ArrowDownwardSharp';\nimport ArrowUpwardSharpIcon from '@material-ui/icons/ArrowUpwardSharp';\nimport Alert from '@arcblock/ux/lib/Alert';\nimport Empty from '@arcblock/ux/lib/Empty';\nimport Button from '@arcblock/ux/lib/Button';\nimport ButtonGroup from '@arcblock/ux/lib/ButtonGroup';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport BlockletList from '../../components/blocklet/list';\nimport { useNodeContext } from '../../contexts/node';\nimport { formatError } from '../../libs/util';\nimport SwitchBlockletRegistry from '../../components/registry/switch';\n\nconst SortIcon = ({ direction }) => (direction === 'desc' ? <ArrowDownwardSharpIcon /> : <ArrowUpwardSharpIcon />);\n\nSortIcon.propTypes = {\n direction: PropTypes.string,\n};\nSortIcon.defaultProps = {\n direction: 'asc',\n};\n\nexport default function BlockletStore() {\n const { api, info } = useNodeContext();\n const { t } = useContext(LocaleContext);\n const [keyword, setKeyword] = useState('');\n const [directions, setDirections] = useLocalStorage('directions', { title: 'asc', popularity: 'desc' });\n const [mainFactor, setMainFactor] = useLocalStorage('popularity', 'popularity');\n\n const currentRegistry = info.blockletRegistryList.find(x => x.selected);\n\n const state = useAsyncRetry(async () => {\n const { blocklets } = await api.listBlocklets({ input: { registryUrl: currentRegistry.url } });\n return blocklets;\n });\n\n const rawList = (state.value || []).map(item => {\n item.searchContent = [item.title, item.name, item.description]\n .filter(Boolean)\n .join('')\n .toLocaleLowerCase()\n .replace(/\\s/g, '');\n\n return item;\n });\n\n const filterList = useMemo(() => {\n const sortByName = x => x.title || x.name;\n const sortByPopularity = x => x.stats.downloads;\n const word = keyword.toLowerCase().replace(/\\s/g, '');\n const sortLists = orderBy(\n rawList.filter(item => item.searchContent.includes(word)),\n mainFactor === 'title' ? [sortByName, sortByPopularity] : [sortByPopularity, sortByName],\n mainFactor === 'title' ? [directions.title, directions.popularity] : [directions.popularity, directions.title]\n );\n return sortLists;\n }, [rawList, keyword, directions, mainFactor]);\n\n const handleSort = (property, sort) => {\n const newSort = sort === 'desc' ? 'asc' : 'desc';\n setDirections({ ...directions, [property]: newSort });\n setMainFactor(property);\n };\n const switchEl = useRef(null);\n\n let content = null;\n if (filterList.length) {\n content = <BlockletList blocklets={filterList} />;\n } else if (state.error) {\n content = (\n <Alert type=\"error\" variant=\"icon\">\n <div>\n {formatError(state.error)}\n <Link\n style={{ marginLeft: '12px' }}\n to=\"/settings/basic\"\n onClick={e => {\n switchEl.current.setOpen(true);\n e.preventDefault();\n }}>\n Change Registry\n {'>>'}\n </Link>\n </div>\n </Alert>\n );\n } else if (state.loading) {\n content = <Spinner />;\n } else {\n content = <Empty>{t('common.emptyData')}</Empty>;\n }\n\n return (\n <Main>\n <Breadcrumbs separator=\"›\" aria-label=\"breadcrumb\" className=\"page-breadcrumb\">\n <Typography color=\"textPrimary\">{t('common.store')}</Typography>\n <SwitchBlockletRegistry ref={switchEl} />\n </Breadcrumbs>\n <Box className=\"store-header\" display=\"flex\" justifyContent=\"space-between\" p={0} m={0}>\n <Typography component=\"h2\" variant=\"h4\" className=\"page-header\" color=\"textPrimary\">\n {t('store.headerDescription')}\n </Typography>\n <Box mt={0} display=\"flex\" alignItems=\"center\">\n <TextField\n size=\"small\"\n placeholder={t('common.search')}\n style={{ marginRight: '15px' }}\n value={keyword}\n defaultValue={keyword}\n onChange={e => setKeyword(e.target.value)}\n data-cy=\"search\"\n InputProps={{\n startAdornment: <Icon name=\"search\" size={16} style={{ marginRight: '6px', marginBottom: '6px' }} />,\n endAdornment: (\n <span\n onClick={() => setKeyword('')}\n style={{ margin: '0 5px 6px 6px', cursor: 'pointer' }}\n data-cy=\"search-delete\">\n <Icon name=\"times\" size={16} />\n </span>\n ),\n }}\n />\n <ButtonGroup size=\"small\" color=\"primary\" aria-label=\"split button\" style={{ whiteSpace: 'nowrap' }}>\n <Button\n onClick={() => handleSort('popularity', directions.popularity)}\n endIcon={<SortIcon direction={directions.popularity} />}\n className=\"sort-button\"\n color=\"secondary\"\n variant={mainFactor === 'popularity' ? 'contained' : 'outlined'}>\n {t('store.popularSort')}\n </Button>\n\n <Button\n onClick={() => handleSort('title', directions.title)}\n endIcon={<SortIcon direction={directions.title} />}\n className=\"sort-button\"\n color=\"secondary\"\n variant={mainFactor === 'title' ? 'contained' : 'outlined'}>\n {t('store.nameSort')}\n </Button>\n </ButtonGroup>\n </Box>\n </Box>\n {content}\n </Main>\n );\n}\n\nconst Main = styled.main`\n .sort-button {\n border-radius: 0 !important;\n }\n\n @media (max-width: ${props => props.theme.breakpoints.values.sm}px) {\n .store-header {\n flex-direction: column;\n margin-bottom: 32px !important;\n }\n\n .page-header {\n margin-bottom: 16px !important;\n }\n }\n`;\n","import { useTheme } from '@material-ui/core/styles';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\n\nfunction useMobileWidth() {\n const theme = useTheme();\n const isBreakpointsDownSm = useMediaQuery(theme.breakpoints.down('sm'));\n const minWidth = isBreakpointsDownSm ? 300 : theme.breakpoints.values.sm;\n return { minWidth };\n}\n\nexport default useMobileWidth;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\n\nimport Dialog from '@material-ui/core/Dialog';\nimport Spinner from '@arcblock/ux/lib/Spinner';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport Alert from '@material-ui/lab/Alert';\nimport useTheme from '@material-ui/core/styles/useTheme';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\n\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport Button from '@arcblock/ux/lib/Button';\n\nimport { formatError } from '../libs/util';\nimport useMobileWidth from '../hooks/mobile-width';\n\nexport default function ConfirmDialog({\n title,\n description,\n showCancel,\n cancel,\n confirm,\n color,\n params: initialParams,\n onCancel,\n onConfirm,\n}) {\n const [params, setParams] = useState(initialParams);\n const [open, setOpen] = useState(true);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const { t: changeLocale } = useLocaleContext();\n const theme = useTheme();\n\n const onCallback = async cb => {\n if (typeof cb === 'function') {\n setLoading(true);\n try {\n await cb(params);\n setOpen(false);\n } catch (err) {\n setError(formatError(err));\n console.error(err);\n } finally {\n setLoading(false);\n }\n } else {\n setOpen(false);\n }\n };\n\n const t = typeof title === 'function' ? title() : title;\n const d = typeof description === 'function' ? description(params, setParams, setError) : description;\n\n const isBreakpointsDownSm = useMediaQuery(theme.breakpoints.down('sm'));\n\n const handleClick = e => {\n e.stopPropagation();\n };\n const { minWidth } = useMobileWidth();\n\n return (\n <StyledDialog onClick={handleClick} fullScreen={isBreakpointsDownSm} open={open} style={{ minWidth }}>\n <DialogTitle>{t}</DialogTitle>\n <DialogContent style={{ minWidth }}>\n <DialogContentText component=\"div\">{d}</DialogContentText>\n {!!error && (\n <Alert severity=\"error\" style={{ width: '100%', marginTop: 8 }}>\n {error}\n </Alert>\n )}\n </DialogContent>\n <DialogActions className=\"delete-actions\" style={{ padding: '8px 24px 24px' }}>\n {showCancel && (\n <Button\n onClick={e => {\n e.stopPropagation();\n onCallback(onCancel);\n }}\n color=\"default\"\n data-cy=\"cancel-confirm-dialog\"\n rounded\n size=\"small\">\n {cancel || changeLocale('common.cancel')}\n </Button>\n )}\n <Button\n onClick={e => {\n e.stopPropagation();\n onCallback(onConfirm);\n }}\n color={color}\n size=\"small\"\n // eslint-disable-next-line no-underscore-dangle\n disabled={params.__disableConfirm || loading}\n variant=\"contained\"\n data-cy=\"submit-confirm-dialog\"\n autoFocus\n rounded>\n {loading && <Spinner size={[16, 10]} />}\n {confirm}\n </Button>\n </DialogActions>\n </StyledDialog>\n );\n}\n\nConfirmDialog.propTypes = {\n title: PropTypes.any.isRequired,\n description: PropTypes.any.isRequired, // can be a function that renders different content based on params\n showCancel: PropTypes.bool,\n cancel: PropTypes.string,\n color: PropTypes.string,\n confirm: PropTypes.string,\n params: PropTypes.object, // This object holds states managed in the dialog\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func.isRequired,\n};\n\nConfirmDialog.defaultProps = {\n onCancel: () => {},\n showCancel: true,\n cancel: '',\n confirm: 'Confirm',\n color: 'danger',\n params: {},\n};\n\nconst StyledDialog = styled(Dialog)`\n .delete-actions .Mui-disabled {\n color: rgba(0, 0, 0, 0.26) !important;\n box-shadow: none;\n background-color: rgba(0, 0, 0, 0.12) !important;\n }\n`;\n","import React, { useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport Copy from '@arcblock/ux/lib/ClickToCopy';\nimport { LocaleContext } from '@arcblock/ux/lib/Locale/context';\n\nexport default function ClickToCopy({ children, ...rest }) {\n const { t } = useContext(LocaleContext);\n return (\n <Copy tip={t('common.copyTip')} copiedTip={t('common.copiedTip')} {...rest}>\n {children}\n </Copy>\n );\n}\n\nClickToCopy.propTypes = {\n children: PropTypes.any.isRequired,\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\nmodule.exports = {\n isFreeBlocklet,\n forEachBlocklet,\n isAuthServiceEnabled,\n getRequiredMissingConfigs,\n wipeSensitiveData,\n};\n","/* eslint-disable react/no-danger */\n/* eslint-disable react/prop-types */\nimport React from 'react';\nimport PropTypes from 'prop-types';\n\nimport Typography from '@material-ui/core/Typography';\nimport TextField from '@material-ui/core/TextField';\n\nimport Alert from '@material-ui/lab/Alert';\nimport { useLocaleContext } from '@arcblock/ux/lib/Locale/context';\nimport ClickToCopy from './click-to-copy';\n\nimport Confirm from './confirm';\n\nexport default function CancelConfirm({\n title,\n description,\n confirmPlaceholder,\n cancel,\n confirm,\n params: initialParams,\n onCancel,\n onConfirm,\n keyName,\n}) {\n const { t } = useLocaleContext();\n\n const confirmSetting = {\n title: () => (\n <div>\n {title}\n {` (${keyName})`}\n </div>\n ),\n description: (params, setParams) => {\n const setValue = value => {\n // eslint-disable-next-line no-underscore-dangle\n setParams({ ...value, __disableConfirm: value.__disableConfirm });\n };\n\n return (\n <div>\n <Alert severity=\"warning\" style={{ width: '100%' }}>\n {t('common.notice')}\n </Alert>\n <div style={{ marginTop: 24, marginBottom: 24 }} dangerouslySetInnerHTML={{ __html: description }} />\n <div style={{ marginBottom: 24 }}>\n {t('common.click')}\n {':'}\n <ClickToCopy data-cy=\"click-copy\">{keyName}</ClickToCopy>\n </div>\n <Typography component=\"div\">\n <TextField\n label={confirmPlaceholder}\n autoComplete=\"off\"\n data-cy=\"delete-confirm-input\"\n variant=\"outlined\"\n fullWidth\n autoFocus\n value={params.inputVal}\n onChange={e => {\n setValue({ ...params, inputVal: e.target.value, __disableConfirm: keyName !== e.target.value });\n }}\n />\n </Typography>\n </div>\n );\n },\n confirm,\n cancel,\n onConfirm,\n onCancel,\n params: {\n inputVal: '',\n __disableConfirm: true,\n ...initialParams,\n },\n };\n\n return (\n <Confirm\n title={confirmSetting.title}\n description={confirmSetting.description}\n confirm={confirmSetting.confirm}\n cancel={confirmSetting.cancel}\n params={confirmSetting.params}\n onConfirm={confirmSetting.onConfirm}\n onCancel={confirmSetting.onCancel}\n />\n );\n}\n\nCancelConfirm.propTypes = {\n title: PropTypes.any.isRequired,\n keyName: PropTypes.any.isRequired,\n description: PropTypes.any.isRequired, // can be a function that renders different content based on params\n confirmPlaceholder: PropTypes.any.isRequired,\n cancel: PropTypes.string,\n confirm: PropTypes.string,\n params: PropTypes.object, // This object holds states managed in the dialog\n onCancel: PropTypes.func,\n onConfirm: PropTypes.func.isRequired,\n};\n\nCancelConfirm.defaultProps = {\n onCancel: () => {},\n cancel: '',\n confirm: 'Confirm',\n params: {},\n};\n"],"sourceRoot":""}