@blocklet/launcher-workflow 1.5.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +13 -0
- package/README.md +25 -0
- package/lib/api.js +45 -0
- package/lib/assets/images/blocklet-server.svg +10 -0
- package/lib/components/launch-result-message.js +65 -0
- package/lib/components/page-header.js +42 -0
- package/lib/components/payment-type.js +47 -0
- package/lib/components/plan.js +77 -0
- package/lib/components/stripe/checkout.js +193 -0
- package/lib/components/stripe/paying.js +74 -0
- package/lib/constant.js +31 -0
- package/lib/contexts/locale.js +19 -0
- package/lib/contexts/request.js +84 -0
- package/lib/contexts/router.js +53 -0
- package/lib/contexts/session.js +28 -0
- package/lib/hooks/query.js +12 -0
- package/lib/index.js +93 -0
- package/lib/launch.js +251 -0
- package/lib/locales/en.js +78 -0
- package/lib/locales/index.js +14 -0
- package/lib/locales/zh.js +78 -0
- package/lib/prepare.js +243 -0
- package/lib/purchase.js +317 -0
- package/lib/util.js +31 -0
- package/package.json +68 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.RequestProvider = RequestProvider;
|
|
7
|
+
exports.default = useRequest;
|
|
8
|
+
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
|
|
11
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
12
|
+
|
|
13
|
+
var _axios = _interopRequireDefault(require("axios"));
|
|
14
|
+
|
|
15
|
+
var _lodash = _interopRequireDefault(require("lodash.get"));
|
|
16
|
+
|
|
17
|
+
var _urlJoin = _interopRequireDefault(require("url-join"));
|
|
18
|
+
|
|
19
|
+
var _session = require("./session");
|
|
20
|
+
|
|
21
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
22
|
+
|
|
23
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
24
|
+
|
|
25
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
26
|
+
|
|
27
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
28
|
+
|
|
29
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
30
|
+
|
|
31
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
32
|
+
|
|
33
|
+
_axios.default.defaults.timeout = 200000;
|
|
34
|
+
const RequestContext = /*#__PURE__*/(0, _react.createContext)();
|
|
35
|
+
const {
|
|
36
|
+
Provider
|
|
37
|
+
} = RequestContext;
|
|
38
|
+
|
|
39
|
+
function RequestProvider(_ref) {
|
|
40
|
+
let {
|
|
41
|
+
baseURL,
|
|
42
|
+
children
|
|
43
|
+
} = _ref;
|
|
44
|
+
const {
|
|
45
|
+
session
|
|
46
|
+
} = (0, _session.useSessionContext)();
|
|
47
|
+
|
|
48
|
+
const privateRequest = _axios.default.create({
|
|
49
|
+
baseURL
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
privateRequest.interceptors.request.use(config => {
|
|
53
|
+
config.url = (0, _urlJoin.default)('/api', config.url);
|
|
54
|
+
return config;
|
|
55
|
+
});
|
|
56
|
+
privateRequest.interceptors.response.use(response => response, err => {
|
|
57
|
+
if ((0, _lodash.default)(err, 'response.status') === 401) {
|
|
58
|
+
session.login();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return Promise.reject(err);
|
|
62
|
+
});
|
|
63
|
+
return /*#__PURE__*/_react.default.createElement(Provider, {
|
|
64
|
+
value: {
|
|
65
|
+
api: privateRequest,
|
|
66
|
+
create: configs => _axios.default.create(_objectSpread({
|
|
67
|
+
baseURL
|
|
68
|
+
}, configs || {}))
|
|
69
|
+
}
|
|
70
|
+
}, children);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
RequestProvider.propTypes = {
|
|
74
|
+
baseURL: _propTypes.default.string,
|
|
75
|
+
children: _propTypes.default.any.isRequired
|
|
76
|
+
};
|
|
77
|
+
RequestProvider.defaultProps = {
|
|
78
|
+
baseURL: ''
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
function useRequest() {
|
|
82
|
+
const value = (0, _react.useContext)(RequestContext);
|
|
83
|
+
return value;
|
|
84
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.RouterProvider = RouterProvider;
|
|
7
|
+
exports.default = attachPrefix;
|
|
8
|
+
exports.usePrefix = usePrefix;
|
|
9
|
+
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
|
|
12
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
|
+
|
|
14
|
+
var _urlJoin = _interopRequireDefault(require("url-join"));
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
|
|
18
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
19
|
+
|
|
20
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
21
|
+
|
|
22
|
+
const RequestContext = /*#__PURE__*/(0, _react.createContext)();
|
|
23
|
+
const {
|
|
24
|
+
Provider
|
|
25
|
+
} = RequestContext;
|
|
26
|
+
|
|
27
|
+
function RouterProvider(_ref) {
|
|
28
|
+
let {
|
|
29
|
+
prefix,
|
|
30
|
+
children
|
|
31
|
+
} = _ref;
|
|
32
|
+
return /*#__PURE__*/_react.default.createElement(Provider, {
|
|
33
|
+
value: {
|
|
34
|
+
prefix
|
|
35
|
+
}
|
|
36
|
+
}, children);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
RouterProvider.propTypes = {
|
|
40
|
+
prefix: _propTypes.default.string.isRequired,
|
|
41
|
+
children: _propTypes.default.any.isRequired
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
function usePrefix() {
|
|
45
|
+
const {
|
|
46
|
+
prefix
|
|
47
|
+
} = (0, _react.useContext)(RequestContext);
|
|
48
|
+
return prefix;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function attachPrefix(prefix, url) {
|
|
52
|
+
return (0, _urlJoin.default)(prefix, url);
|
|
53
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SessionProvider = exports.SessionContext = exports.SessionConsumer = void 0;
|
|
7
|
+
exports.useSessionContext = useSessionContext;
|
|
8
|
+
exports.withSession = void 0;
|
|
9
|
+
|
|
10
|
+
var _react = require("react");
|
|
11
|
+
|
|
12
|
+
var _Session = require("@arcblock/did-connect/lib/Session");
|
|
13
|
+
|
|
14
|
+
const {
|
|
15
|
+
SessionProvider,
|
|
16
|
+
SessionContext,
|
|
17
|
+
SessionConsumer,
|
|
18
|
+
withSession
|
|
19
|
+
} = (0, _Session.createAuthServiceSessionContext)();
|
|
20
|
+
exports.withSession = withSession;
|
|
21
|
+
exports.SessionConsumer = SessionConsumer;
|
|
22
|
+
exports.SessionContext = SessionContext;
|
|
23
|
+
exports.SessionProvider = SessionProvider;
|
|
24
|
+
|
|
25
|
+
function useSessionContext() {
|
|
26
|
+
const info = (0, _react.useContext)(SessionContext);
|
|
27
|
+
return info;
|
|
28
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = useQuery;
|
|
7
|
+
|
|
8
|
+
var _reactRouterDom = require("react-router-dom");
|
|
9
|
+
|
|
10
|
+
function useQuery() {
|
|
11
|
+
return new URLSearchParams((0, _reactRouterDom.useLocation)().search);
|
|
12
|
+
}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = Launcher;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
11
|
+
|
|
12
|
+
var _content = _interopRequireDefault(require("@blocklet/launcher-layout/lib/content"));
|
|
13
|
+
|
|
14
|
+
var _purchase = _interopRequireDefault(require("./purchase"));
|
|
15
|
+
|
|
16
|
+
var _launch = _interopRequireDefault(require("./launch"));
|
|
17
|
+
|
|
18
|
+
var _prepare = _interopRequireDefault(require("./prepare"));
|
|
19
|
+
|
|
20
|
+
var _router = _interopRequireWildcard(require("./contexts/router"));
|
|
21
|
+
|
|
22
|
+
var _locales = require("./locales");
|
|
23
|
+
|
|
24
|
+
var _request = require("./contexts/request");
|
|
25
|
+
|
|
26
|
+
var _locale = require("./contexts/locale");
|
|
27
|
+
|
|
28
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
29
|
+
|
|
30
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
31
|
+
|
|
32
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
33
|
+
|
|
34
|
+
// eslint-disable-next-line react/prop-types
|
|
35
|
+
function LaunchContent(_ref) {
|
|
36
|
+
let {
|
|
37
|
+
Route,
|
|
38
|
+
routerPrefix,
|
|
39
|
+
locale
|
|
40
|
+
} = _ref;
|
|
41
|
+
const {
|
|
42
|
+
changeLocale
|
|
43
|
+
} = (0, _locale.useLocaleContext)();
|
|
44
|
+
(0, _react.useEffect)(() => {
|
|
45
|
+
changeLocale(locale);
|
|
46
|
+
}, [locale]);
|
|
47
|
+
return /*#__PURE__*/_react.default.createElement(_content.default, null, /*#__PURE__*/_react.default.createElement(_router.RouterProvider, {
|
|
48
|
+
prefix: routerPrefix
|
|
49
|
+
}, /*#__PURE__*/_react.default.createElement(Route, {
|
|
50
|
+
exact: true,
|
|
51
|
+
path: "".concat(routerPrefix),
|
|
52
|
+
component: _purchase.default
|
|
53
|
+
}), /*#__PURE__*/_react.default.createElement(Route, {
|
|
54
|
+
exact: true,
|
|
55
|
+
path: (0, _router.default)(routerPrefix, '/prepare/:nftId'),
|
|
56
|
+
component: _prepare.default
|
|
57
|
+
}), /*#__PURE__*/_react.default.createElement(Route, {
|
|
58
|
+
exact: true,
|
|
59
|
+
path: (0, _router.default)(routerPrefix, '/in-progress/:nftId'),
|
|
60
|
+
component: _launch.default
|
|
61
|
+
})));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function Launcher(_ref2) {
|
|
65
|
+
let {
|
|
66
|
+
Route,
|
|
67
|
+
routerPrefix,
|
|
68
|
+
locale,
|
|
69
|
+
baseURL
|
|
70
|
+
} = _ref2;
|
|
71
|
+
return /*#__PURE__*/_react.default.createElement(_request.RequestProvider, {
|
|
72
|
+
baseURL: baseURL
|
|
73
|
+
}, /*#__PURE__*/_react.default.createElement(_locale.LocaleProvider, {
|
|
74
|
+
translations: _locales.translations,
|
|
75
|
+
locale: locale
|
|
76
|
+
}, /*#__PURE__*/_react.default.createElement(LaunchContent, {
|
|
77
|
+
Route: Route,
|
|
78
|
+
routerPrefix: routerPrefix,
|
|
79
|
+
locale: locale
|
|
80
|
+
})));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
Launcher.propTypes = {
|
|
84
|
+
Route: _propTypes.default.any.isRequired,
|
|
85
|
+
routerPrefix: _propTypes.default.string,
|
|
86
|
+
locale: _propTypes.default.string,
|
|
87
|
+
baseURL: _propTypes.default.string
|
|
88
|
+
};
|
|
89
|
+
Launcher.defaultProps = {
|
|
90
|
+
routerPrefix: '/',
|
|
91
|
+
locale: 'en',
|
|
92
|
+
baseURL: '/'
|
|
93
|
+
};
|
package/lib/launch.js
ADDED
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = LaunchPage;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _reactRouterDom = require("react-router-dom");
|
|
11
|
+
|
|
12
|
+
var _reactUse = require("react-use");
|
|
13
|
+
|
|
14
|
+
var _lodash = _interopRequireDefault(require("lodash.get"));
|
|
15
|
+
|
|
16
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
17
|
+
|
|
18
|
+
var _Button = _interopRequireDefault(require("@arcblock/ux/lib/Button"));
|
|
19
|
+
|
|
20
|
+
var _Connect = _interopRequireDefault(require("@arcblock/did-connect/lib/Connect"));
|
|
21
|
+
|
|
22
|
+
var _Spinner = _interopRequireDefault(require("@arcblock/ux/lib/Spinner"));
|
|
23
|
+
|
|
24
|
+
var _utils = require("@arcblock/did-connect/lib/utils");
|
|
25
|
+
|
|
26
|
+
var _util = require("./util");
|
|
27
|
+
|
|
28
|
+
var _query = _interopRequireDefault(require("./hooks/query"));
|
|
29
|
+
|
|
30
|
+
var _request = _interopRequireDefault(require("./contexts/request"));
|
|
31
|
+
|
|
32
|
+
var _locale = require("./contexts/locale");
|
|
33
|
+
|
|
34
|
+
var _constant = require("./constant");
|
|
35
|
+
|
|
36
|
+
var _pageHeader = _interopRequireDefault(require("./components/page-header"));
|
|
37
|
+
|
|
38
|
+
var _launchResultMessage = _interopRequireDefault(require("./components/launch-result-message"));
|
|
39
|
+
|
|
40
|
+
var _router = _interopRequireWildcard(require("./contexts/router"));
|
|
41
|
+
|
|
42
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
43
|
+
|
|
44
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
45
|
+
|
|
46
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
47
|
+
|
|
48
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
49
|
+
|
|
50
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
51
|
+
|
|
52
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
53
|
+
|
|
54
|
+
const STATUS = {
|
|
55
|
+
waiting: 0,
|
|
56
|
+
// 未使用
|
|
57
|
+
launching: 1,
|
|
58
|
+
// 初始状态
|
|
59
|
+
success: 2,
|
|
60
|
+
error: 10,
|
|
61
|
+
notFoundError: 11,
|
|
62
|
+
launchFailedError: 12
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
function LaunchPage() {
|
|
66
|
+
const query = (0, _query.default)();
|
|
67
|
+
const blockletMetaUrl = query.get('blocklet_meta_url');
|
|
68
|
+
const {
|
|
69
|
+
t,
|
|
70
|
+
locale
|
|
71
|
+
} = (0, _react.useContext)(_locale.LocaleContext);
|
|
72
|
+
const [launchState, setLaunchState] = (0, _react.useState)({
|
|
73
|
+
appUrl: '',
|
|
74
|
+
status: STATUS.waiting
|
|
75
|
+
});
|
|
76
|
+
const [retryLaunch] = (0, _react.useState)(false);
|
|
77
|
+
const {
|
|
78
|
+
nftId
|
|
79
|
+
} = (0, _reactRouterDom.useParams)();
|
|
80
|
+
const {
|
|
81
|
+
api,
|
|
82
|
+
create: createRequest
|
|
83
|
+
} = (0, _request.default)();
|
|
84
|
+
const [frameLoading, setFrameLoading] = (0, _react.useState)(true);
|
|
85
|
+
const routerPrefix = (0, _router.usePrefix)();
|
|
86
|
+
(0, _reactUse.useInterval)(async () => {
|
|
87
|
+
await getInstanceStatus();
|
|
88
|
+
}, launchState.status === STATUS.launching && nftId ? 5000 : null); // TODO: 这样处理容易发出重复的请求
|
|
89
|
+
|
|
90
|
+
const handleAuthSuccess = () => {
|
|
91
|
+
setLaunchState(_objectSpread(_objectSpread({}, launchState), {}, {
|
|
92
|
+
status: STATUS.launching
|
|
93
|
+
}));
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
const getInstanceStatus = async () => {
|
|
97
|
+
try {
|
|
98
|
+
const {
|
|
99
|
+
data: {
|
|
100
|
+
instance
|
|
101
|
+
}
|
|
102
|
+
} = await api.get("/public/instances/".concat(nftId, "/status"));
|
|
103
|
+
|
|
104
|
+
if (instance.status >= _constant.INSTANCE_STATUS.running) {
|
|
105
|
+
setLaunchState(pre => _objectSpread(_objectSpread({}, pre), {}, {
|
|
106
|
+
status: STATUS.success,
|
|
107
|
+
appUrl: (0, _util.getLaunchBlockletUrl)(instance.serverUrl, blockletMetaUrl, locale)
|
|
108
|
+
}));
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
} catch (error) {
|
|
112
|
+
if ((0, _lodash.default)(error, 'response.status') === 404 && launchState.status !== STATUS.launching) {
|
|
113
|
+
setLaunchState(state => _objectSpread(_objectSpread({}, state), {}, {
|
|
114
|
+
status: STATUS.notFoundError
|
|
115
|
+
}));
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
setLaunchState(state => _objectSpread(_objectSpread({}, state), {}, {
|
|
120
|
+
status: STATUS.error
|
|
121
|
+
}));
|
|
122
|
+
console.warn('load instance status error', error);
|
|
123
|
+
throw error;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
(0, _react.useEffect)(() => {
|
|
128
|
+
if (!nftId) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
getInstanceStatus().then(() => {
|
|
133
|
+
if (launchState.status !== STATUS.success) {
|
|
134
|
+
setLaunchState(state => _objectSpread(_objectSpread({}, state), {}, {
|
|
135
|
+
status: STATUS.launching
|
|
136
|
+
}));
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}, [nftId]); // eslint-disable-line
|
|
140
|
+
|
|
141
|
+
(0, _react.useEffect)(() => {
|
|
142
|
+
let preloadFrame;
|
|
143
|
+
let timer;
|
|
144
|
+
|
|
145
|
+
if (launchState.appUrl) {
|
|
146
|
+
preloadFrame = document.createElement('iframe');
|
|
147
|
+
preloadFrame.src = launchState.appUrl;
|
|
148
|
+
Object.assign(preloadFrame.style, {
|
|
149
|
+
width: 0,
|
|
150
|
+
height: 0,
|
|
151
|
+
border: 0,
|
|
152
|
+
display: 'block',
|
|
153
|
+
position: 'absolute',
|
|
154
|
+
top: 0
|
|
155
|
+
});
|
|
156
|
+
preloadFrame.addEventListener('load', () => {
|
|
157
|
+
setFrameLoading(false);
|
|
158
|
+
clearTimeout(timer);
|
|
159
|
+
});
|
|
160
|
+
document.body.appendChild(preloadFrame);
|
|
161
|
+
timer = setTimeout(() => {
|
|
162
|
+
setFrameLoading(false);
|
|
163
|
+
}, 5000);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return () => {
|
|
167
|
+
if (preloadFrame) {
|
|
168
|
+
preloadFrame.parentNode.removeChild(preloadFrame);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
if (timer) {
|
|
172
|
+
clearTimeout(timer);
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
}, [launchState.appUrl]);
|
|
176
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, launchState.status !== STATUS.success && /*#__PURE__*/_react.default.createElement(_pageHeader.default, {
|
|
177
|
+
title: t('launch.title')
|
|
178
|
+
}), /*#__PURE__*/_react.default.createElement(Content, null, launchState.status === STATUS.waiting && /*#__PURE__*/_react.default.createElement("div", {
|
|
179
|
+
className: "center"
|
|
180
|
+
}, /*#__PURE__*/_react.default.createElement(_Spinner.default, null)), launchState.status === STATUS.launching && /*#__PURE__*/_react.default.createElement("div", {
|
|
181
|
+
className: "center"
|
|
182
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
183
|
+
className: "status"
|
|
184
|
+
}, /*#__PURE__*/_react.default.createElement(_Spinner.default, {
|
|
185
|
+
className: "status-spinner"
|
|
186
|
+
}), /*#__PURE__*/_react.default.createElement("span", {
|
|
187
|
+
className: "status-text"
|
|
188
|
+
}, t('launch.waitingForLaunching')))), launchState.status === STATUS.success && /*#__PURE__*/_react.default.createElement(_launchResultMessage.default, {
|
|
189
|
+
className: "message",
|
|
190
|
+
variant: "success",
|
|
191
|
+
title: t('launch.launched'),
|
|
192
|
+
subTitle: blockletMetaUrl ? t('launch.launchBlockletTip') : '',
|
|
193
|
+
footer: /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
194
|
+
color: "primary",
|
|
195
|
+
variant: "contained",
|
|
196
|
+
rounded: true,
|
|
197
|
+
loading: frameLoading,
|
|
198
|
+
href: launchState.appUrl,
|
|
199
|
+
className: "button"
|
|
200
|
+
}, blockletMetaUrl ? t('launch.launchApp') : t('launch.accessServer'))
|
|
201
|
+
}), [STATUS.error, STATUS.launchFailedError].includes(launchState.status) && /*#__PURE__*/_react.default.createElement(_launchResultMessage.default, {
|
|
202
|
+
variant: "error",
|
|
203
|
+
title: t('launch.error.launchFailed'),
|
|
204
|
+
subTitle: t('launch.error.launchFailedDescription'),
|
|
205
|
+
footer: /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
206
|
+
color: "primary",
|
|
207
|
+
variant: "contained",
|
|
208
|
+
className: "button",
|
|
209
|
+
rounded: true,
|
|
210
|
+
component: _reactRouterDom.Link,
|
|
211
|
+
to: (0, _router.default)(routerPrefix, "/prepare/".concat(nftId).concat(window.location.search))
|
|
212
|
+
}, t('common.retry'))
|
|
213
|
+
}), launchState.status === STATUS.notFoundError && /*#__PURE__*/_react.default.createElement(_launchResultMessage.default, {
|
|
214
|
+
variant: "error",
|
|
215
|
+
title: t('launch.error.notFound'),
|
|
216
|
+
subTitle: t('launch.error.notFoundDescription'),
|
|
217
|
+
footer: /*#__PURE__*/_react.default.createElement(_Button.default, {
|
|
218
|
+
color: "primary",
|
|
219
|
+
variant: "contained",
|
|
220
|
+
className: "button",
|
|
221
|
+
rounded: true,
|
|
222
|
+
component: _reactRouterDom.Link,
|
|
223
|
+
to: (0, _router.default)(routerPrefix, "/prepare/".concat(nftId).concat(window.location.search))
|
|
224
|
+
}, t('common.launch'))
|
|
225
|
+
})), /*#__PURE__*/_react.default.createElement(_Connect.default, {
|
|
226
|
+
open: retryLaunch,
|
|
227
|
+
popup: true,
|
|
228
|
+
action: "launch-instance",
|
|
229
|
+
checkFn: createRequest().get,
|
|
230
|
+
onSuccess: handleAuthSuccess,
|
|
231
|
+
checkTimeout: 60 * 5000,
|
|
232
|
+
extraParams: {
|
|
233
|
+
assetId: nftId,
|
|
234
|
+
blockletMetaUrl
|
|
235
|
+
},
|
|
236
|
+
webWalletUrl: (0, _utils.getWebWalletUrl)(),
|
|
237
|
+
disableClose: true,
|
|
238
|
+
showDownload: false,
|
|
239
|
+
messages: {
|
|
240
|
+
title: t('launch.dialog.title'),
|
|
241
|
+
scan: t('launch.dialog.scan'),
|
|
242
|
+
confirm: t('launch.dialog.confirm'),
|
|
243
|
+
success: t('launch.dialog.success')
|
|
244
|
+
}
|
|
245
|
+
}));
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
const Content = _styledComponents.default.div.withConfig({
|
|
249
|
+
displayName: "launch__Content",
|
|
250
|
+
componentId: "sc-ke0swc-0"
|
|
251
|
+
})(["margin:auto;height:100%;.status{color:", ";display:flex;flex-direction:column;align-items:center;.status-spinner{color:inherit !important;}.status-text{display:inline-block;padding:0 20px;max-width:420px;margin-top:24px;text-align:center;}}.button{min-width:150px;margin-bottom:100px;}.center{display:flex;align-items:center;justify-content:center;width:100%;height:100%;}"], props => props.theme.palette.primary.main);
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
module.exports = {
|
|
4
|
+
common: {
|
|
5
|
+
paymentMethod: 'Payment Method',
|
|
6
|
+
serverType: 'Blocklet Server Type',
|
|
7
|
+
paying: 'Paying',
|
|
8
|
+
pay: 'Pay',
|
|
9
|
+
name: 'Name',
|
|
10
|
+
description: 'Description',
|
|
11
|
+
retry: 'Retry',
|
|
12
|
+
launch: 'Launch',
|
|
13
|
+
next: 'Next',
|
|
14
|
+
purchase: 'Purchase',
|
|
15
|
+
redeem: 'Redeem'
|
|
16
|
+
},
|
|
17
|
+
plan: {
|
|
18
|
+
title: 'Select Blocklet Server Type',
|
|
19
|
+
subTitle: 'Please select Blocklet Server type and payment method',
|
|
20
|
+
loadListFailed: 'Plan list load error',
|
|
21
|
+
paymentCredit: {
|
|
22
|
+
status: {
|
|
23
|
+
unpaid: 'Waiting for payment',
|
|
24
|
+
paid: 'Payment completed, waiting for order completion',
|
|
25
|
+
completed: 'Completed, redirecting',
|
|
26
|
+
expired: 'Order has expired'
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
useCrypto: 'Use ABT',
|
|
30
|
+
useFiat: 'Use Credit Card'
|
|
31
|
+
},
|
|
32
|
+
prepare: {
|
|
33
|
+
title: 'Naming Blocklet Server',
|
|
34
|
+
subTitle: 'Please enter the name and description of the Blocklet Server'
|
|
35
|
+
},
|
|
36
|
+
launch: {
|
|
37
|
+
title: 'Create Blocklet Server',
|
|
38
|
+
invalidFftId: 'Invalid Purchase NFT ID',
|
|
39
|
+
launchApp: 'Launch Application',
|
|
40
|
+
launching: 'Your Blocklet Server is being baked, please be patient, it usually takes about 5 minutes',
|
|
41
|
+
launched: 'Your Blocklet Server is up and running',
|
|
42
|
+
launchSuccess: 'Blocklet Server is successfully launched',
|
|
43
|
+
launchBlockletTip: 'Click the button below to launch the application',
|
|
44
|
+
loadStatusFailed: 'Failed to load Blocklet Server status',
|
|
45
|
+
waitingForLaunching: 'Your Blocklet Server launch request is being processed, please be patient, it usually takes about 5 minutes',
|
|
46
|
+
accessServer: 'Access Blocklet Server',
|
|
47
|
+
dialog: {
|
|
48
|
+
title: 'Launch Blocklet Server',
|
|
49
|
+
scan: 'Scan following QRCode with your DID Wallet',
|
|
50
|
+
confirm: 'Confirm on your DID Wallet',
|
|
51
|
+
success: 'Launching'
|
|
52
|
+
},
|
|
53
|
+
error: {
|
|
54
|
+
launchFailed: 'Blocklet Server Launch Failed',
|
|
55
|
+
launchFailedDescription: 'You can retry by clicking the button below',
|
|
56
|
+
notFound: 'No Blocklet Server being started',
|
|
57
|
+
notFoundDescription: 'You can launch the Blocklet Server by clicking the button below'
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
redeem: {
|
|
61
|
+
title: 'Redeem Blocklet Server',
|
|
62
|
+
subTitle: 'Name and describe the Blocklet Server you are going to redeem',
|
|
63
|
+
dialog: {
|
|
64
|
+
title: 'Redeem Blocklet Server',
|
|
65
|
+
scan: 'Scan the QR code below with your DID wallet to complete redeem',
|
|
66
|
+
confirm: 'Confirm on your DID Wallet',
|
|
67
|
+
success: 'Your redeem request is being processing'
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
purchase: {
|
|
71
|
+
dialog: {
|
|
72
|
+
title: 'Purchase Blocklet Server',
|
|
73
|
+
scan: 'Scan the QR code below with your DID wallet to complete purchase',
|
|
74
|
+
confirm: 'Confirm on your DID Wallet',
|
|
75
|
+
success: 'Purchase Success'
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
};
|