@blocklet/launcher-workflow 1.9.11 → 1.9.13
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/lib/components/instance-operation.js +8 -2
- package/lib/components/prepare-serverless.js +81 -0
- package/lib/components/prepare-standard.js +241 -0
- package/lib/contexts/request.js +3 -1
- package/lib/locales/en.js +16 -1
- package/lib/locales/zh.js +16 -1
- package/lib/prepare.js +12 -221
- package/lib/purchase.js +19 -3
- package/lib/util.js +36 -4
- package/package.json +15 -15
|
@@ -29,7 +29,9 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
29
29
|
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
30
30
|
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; }
|
|
31
31
|
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; }
|
|
32
|
-
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
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
33
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
34
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
33
35
|
const STATUS = {
|
|
34
36
|
waiting: 0,
|
|
35
37
|
// 未使用
|
|
@@ -76,7 +78,11 @@ function OperationPage(_ref) {
|
|
|
76
78
|
}
|
|
77
79
|
} = await api.get("/public/instances/".concat(nftId, "/status"));
|
|
78
80
|
if (instance.status >= _constant.INSTANCE_STATUS.running) {
|
|
79
|
-
const url = (0, _util.getLaunchBlockletUrl)(
|
|
81
|
+
const url = (0, _util.getLaunchBlockletUrl)({
|
|
82
|
+
serverUrl: instance.serverUrl,
|
|
83
|
+
blockletMetaUrl,
|
|
84
|
+
locale
|
|
85
|
+
});
|
|
80
86
|
setIsDone(true);
|
|
81
87
|
setTimeout(() => {
|
|
82
88
|
setLaunchState(pre => _objectSpread(_objectSpread({}, pre), {}, {
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = PrepareServerless;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactRouterDom = require("react-router-dom");
|
|
9
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
10
|
+
var _useAsync = _interopRequireDefault(require("react-use/lib/useAsync"));
|
|
11
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
12
|
+
var _pageHeader = _interopRequireDefault(require("@blocklet/launcher-layout/lib/page-header"));
|
|
13
|
+
var _ServerLogoNotext = _interopRequireDefault(require("@arcblock/icons/lib/ServerLogoNotext"));
|
|
14
|
+
var _CircularProgress = _interopRequireDefault(require("@mui/material/CircularProgress"));
|
|
15
|
+
var _locale = require("../contexts/locale");
|
|
16
|
+
var _util = require("../util");
|
|
17
|
+
var _request = _interopRequireDefault(require("../contexts/request"));
|
|
18
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
19
|
+
var _templateObject;
|
|
20
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
21
|
+
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
22
|
+
function PrepareServerless(_ref) {
|
|
23
|
+
let {
|
|
24
|
+
nftId
|
|
25
|
+
} = _ref;
|
|
26
|
+
const {
|
|
27
|
+
t,
|
|
28
|
+
locale
|
|
29
|
+
} = (0, _react.useContext)(_locale.LocaleContext);
|
|
30
|
+
const {
|
|
31
|
+
api
|
|
32
|
+
} = (0, _request.default)();
|
|
33
|
+
const [searchParams] = (0, _reactRouterDom.useSearchParams)();
|
|
34
|
+
const state = (0, _useAsync.default)(async () => {
|
|
35
|
+
const {
|
|
36
|
+
data: {
|
|
37
|
+
instance
|
|
38
|
+
}
|
|
39
|
+
} = await api.post("/serverless/".concat(nftId, "/allocate"));
|
|
40
|
+
setTimeout(() => {
|
|
41
|
+
window.location = (0, _util.getLaunchBlockletUrl)({
|
|
42
|
+
serverUrl: instance.serverUrl,
|
|
43
|
+
blockletMetaUrl: searchParams.get('blocklet_meta_url'),
|
|
44
|
+
locale,
|
|
45
|
+
launchType: 'serverless',
|
|
46
|
+
nftId
|
|
47
|
+
});
|
|
48
|
+
}, 3000);
|
|
49
|
+
});
|
|
50
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Container, {
|
|
51
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_pageHeader.default, {
|
|
52
|
+
title: t('prepare.serverless.title'),
|
|
53
|
+
onClickBack: ""
|
|
54
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
55
|
+
className: "page-body",
|
|
56
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
57
|
+
className: "page-logo",
|
|
58
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ServerLogoNotext.default, {
|
|
59
|
+
style: {
|
|
60
|
+
width: 48,
|
|
61
|
+
height: 48
|
|
62
|
+
}
|
|
63
|
+
})
|
|
64
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
65
|
+
className: "content",
|
|
66
|
+
children: [state.loading && /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
67
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_CircularProgress.default, {
|
|
68
|
+
size: "3.5rem"
|
|
69
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
70
|
+
className: "description",
|
|
71
|
+
children: t('prepare.serverless.preparing')
|
|
72
|
+
})]
|
|
73
|
+
}), !state.loading && !state.error && t('prepare.serverless.prepared'), state.error && t('prepare.serverless.prepareFailed')]
|
|
74
|
+
})]
|
|
75
|
+
})]
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
const Container = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n\n .page-logo {\n display: flex;\n justify-content: center;\n margin-top: 62px;\n ", " {\n margin-top: 48px;\n }\n }\n\n .page-body {\n .content {\n display: flex;\n align-items: center;\n flex-direction: column;\n text-align: center;\n margin-top: 64px;\n\n .loading-description {\n margin-top: 8px;\n }\n }\n }\n"])), props => props.theme.breakpoints.down('md'));
|
|
79
|
+
PrepareServerless.propTypes = {
|
|
80
|
+
nftId: _propTypes.default.string.isRequired
|
|
81
|
+
};
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = PrepareStandard;
|
|
7
|
+
var _react = require("react");
|
|
8
|
+
var _reactRouterDom = require("react-router-dom");
|
|
9
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
10
|
+
var _styled = _interopRequireDefault(require("@emotion/styled"));
|
|
11
|
+
var _Toast = _interopRequireDefault(require("@arcblock/ux/lib/Toast"));
|
|
12
|
+
var _Connect = _interopRequireDefault(require("@arcblock/did-connect/lib/Connect"));
|
|
13
|
+
var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
|
|
14
|
+
var _FormControl = _interopRequireDefault(require("@mui/material/FormControl"));
|
|
15
|
+
var _FormHelperText = _interopRequireDefault(require("@mui/material/FormHelperText"));
|
|
16
|
+
var _constant = require("@blocklet/launcher-util/lib/constant");
|
|
17
|
+
var _server = _interopRequireDefault(require("@arcblock/license/lib/server"));
|
|
18
|
+
var _serverEula = _interopRequireDefault(require("@blocklet/launcher-layout/lib/wizard/server-eula"));
|
|
19
|
+
var _pageHeader = _interopRequireDefault(require("@blocklet/launcher-layout/lib/page-header"));
|
|
20
|
+
var _ServerLogoNotext = _interopRequireDefault(require("@arcblock/icons/lib/ServerLogoNotext"));
|
|
21
|
+
var _request = _interopRequireDefault(require("../contexts/request"));
|
|
22
|
+
var _locale = require("../contexts/locale");
|
|
23
|
+
var _router = _interopRequireWildcard(require("../contexts/router"));
|
|
24
|
+
var _query = _interopRequireDefault(require("../hooks/query"));
|
|
25
|
+
var _util = require("../util");
|
|
26
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
27
|
+
var _templateObject;
|
|
28
|
+
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); }
|
|
29
|
+
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; }
|
|
30
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
31
|
+
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
32
|
+
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; }
|
|
33
|
+
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; }
|
|
34
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
35
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
36
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
37
|
+
function PrepareStandard(_ref) {
|
|
38
|
+
let {
|
|
39
|
+
nftId
|
|
40
|
+
} = _ref;
|
|
41
|
+
const {
|
|
42
|
+
t
|
|
43
|
+
} = (0, _react.useContext)(_locale.LocaleContext);
|
|
44
|
+
const [name, setName] = (0, _react.useState)('');
|
|
45
|
+
const [description, setDescription] = (0, _react.useState)('');
|
|
46
|
+
const [formError, setFormError] = (0, _react.useState)({
|
|
47
|
+
name: '',
|
|
48
|
+
description: ''
|
|
49
|
+
});
|
|
50
|
+
const routerPrefix = (0, _router.usePrefix)();
|
|
51
|
+
const disabledBack = (0, _router.useDisabledBack)();
|
|
52
|
+
const [launching, setLaunching] = (0, _react.useState)(false);
|
|
53
|
+
const [showLaunchInstanceDialog, setShowLaunchInstanceDialog] = (0, _react.useState)(false);
|
|
54
|
+
const navigate = (0, _reactRouterDom.useNavigate)();
|
|
55
|
+
const {
|
|
56
|
+
create: createRequest,
|
|
57
|
+
api
|
|
58
|
+
} = (0, _request.default)();
|
|
59
|
+
const query = (0, _query.default)();
|
|
60
|
+
const handleInput = id => e => {
|
|
61
|
+
if (id === 'name') {
|
|
62
|
+
setName(e.target.value);
|
|
63
|
+
}
|
|
64
|
+
if (id === 'description') {
|
|
65
|
+
setDescription(e.target.value);
|
|
66
|
+
}
|
|
67
|
+
validate();
|
|
68
|
+
};
|
|
69
|
+
const isRedeem = nftId === _constant.REDEEM_NFT_ID;
|
|
70
|
+
const headerScope = isRedeem ? 'redeem' : 'prepare';
|
|
71
|
+
const validate = () => {
|
|
72
|
+
let isError = false;
|
|
73
|
+
if (name.length > _constant.INSTANCE_MAX_NAME_LENGTH) {
|
|
74
|
+
isError = true;
|
|
75
|
+
setFormError(value => _objectSpread(_objectSpread({}, value), {}, {
|
|
76
|
+
name: t('launchPrepare.formError.nameExceed', {
|
|
77
|
+
length: _constant.INSTANCE_MAX_NAME_LENGTH
|
|
78
|
+
})
|
|
79
|
+
}));
|
|
80
|
+
} else {
|
|
81
|
+
setFormError(value => _objectSpread(_objectSpread({}, value), {}, {
|
|
82
|
+
name: ''
|
|
83
|
+
}));
|
|
84
|
+
}
|
|
85
|
+
if (description.length > _constant.INSTANCE_MAX_DESC_LENGTH) {
|
|
86
|
+
isError = true;
|
|
87
|
+
setFormError(value => _objectSpread(_objectSpread({}, value), {}, {
|
|
88
|
+
description: t('launchPrepare.formError.descriptionExceed', {
|
|
89
|
+
length: _constant.INSTANCE_MAX_DESC_LENGTH
|
|
90
|
+
})
|
|
91
|
+
}));
|
|
92
|
+
} else {
|
|
93
|
+
setFormError(value => _objectSpread(_objectSpread({}, value), {}, {
|
|
94
|
+
description: ''
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
return isError;
|
|
98
|
+
};
|
|
99
|
+
const handleLaunch = async () => {
|
|
100
|
+
setLaunching(true);
|
|
101
|
+
if (validate()) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (isRedeem) {
|
|
105
|
+
setShowLaunchInstanceDialog(true);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
const {
|
|
110
|
+
status
|
|
111
|
+
} = await api.post('/instances/launch', {
|
|
112
|
+
nftId,
|
|
113
|
+
name,
|
|
114
|
+
description
|
|
115
|
+
}, {
|
|
116
|
+
params: {
|
|
117
|
+
launchType: query.get('launchType')
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
if (status !== 202) {
|
|
121
|
+
_Toast.default.error(t('launch.error.launchFailed'));
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
handleAuthSuccess({
|
|
125
|
+
nftId
|
|
126
|
+
});
|
|
127
|
+
} catch (err) {
|
|
128
|
+
const errDesc = (0, _util.getAPIResponseError)(err);
|
|
129
|
+
if (errDesc === 'Unauthorized') {
|
|
130
|
+
_Toast.default.error(t('launchPrepare.error.loginFirst'));
|
|
131
|
+
} else {
|
|
132
|
+
_Toast.default.error(errDesc);
|
|
133
|
+
}
|
|
134
|
+
} finally {
|
|
135
|
+
setLaunching(false);
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
// eslint-disable-next-line no-shadow
|
|
140
|
+
const handleAuthSuccess = _ref2 => {
|
|
141
|
+
let {
|
|
142
|
+
nftId
|
|
143
|
+
} = _ref2;
|
|
144
|
+
navigate((0, _router.default)(routerPrefix, "/in-progress/".concat(nftId).concat(window.location.search)));
|
|
145
|
+
};
|
|
146
|
+
const handleCloseAuthDialog = () => {
|
|
147
|
+
setLaunching(false);
|
|
148
|
+
setShowLaunchInstanceDialog(false);
|
|
149
|
+
};
|
|
150
|
+
const clickBack = () => {
|
|
151
|
+
navigate(-1);
|
|
152
|
+
};
|
|
153
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
154
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(Container, {
|
|
155
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_pageHeader.default, {
|
|
156
|
+
title: t("".concat(headerScope, ".title")),
|
|
157
|
+
subTitle: t("".concat(headerScope, ".subTitle")),
|
|
158
|
+
onClickBack: headerScope === 'redeem' && !disabledBack.includes('prepare') ? clickBack : ''
|
|
159
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
160
|
+
className: "page-body",
|
|
161
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
162
|
+
className: "page-logo",
|
|
163
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ServerLogoNotext.default, {
|
|
164
|
+
style: {
|
|
165
|
+
width: 48,
|
|
166
|
+
height: 48
|
|
167
|
+
}
|
|
168
|
+
})
|
|
169
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
170
|
+
className: "inputs",
|
|
171
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_FormControl.default, {
|
|
172
|
+
className: "input-item",
|
|
173
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
|
|
174
|
+
id: "name",
|
|
175
|
+
variant: "outlined",
|
|
176
|
+
label: t('common.name'),
|
|
177
|
+
onChange: handleInput('name'),
|
|
178
|
+
value: name,
|
|
179
|
+
labelwidth: 0,
|
|
180
|
+
autoFocus: true
|
|
181
|
+
}), formError.name && /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormHelperText.default, {
|
|
182
|
+
children: formError.name
|
|
183
|
+
})]
|
|
184
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_FormControl.default, {
|
|
185
|
+
className: "input-item",
|
|
186
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
|
|
187
|
+
id: "description",
|
|
188
|
+
variant: "outlined",
|
|
189
|
+
label: t('common.description'),
|
|
190
|
+
onChange: handleInput('description'),
|
|
191
|
+
value: description,
|
|
192
|
+
labelwidth: 0
|
|
193
|
+
}), formError.description && /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormHelperText.default, {
|
|
194
|
+
children: formError.description
|
|
195
|
+
})]
|
|
196
|
+
})]
|
|
197
|
+
})]
|
|
198
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
199
|
+
className: "botton-container",
|
|
200
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_serverEula.default, {
|
|
201
|
+
onContinue: handleLaunch,
|
|
202
|
+
nextDisabled: !name.trim() || !description.trim() || launching,
|
|
203
|
+
launching: launching,
|
|
204
|
+
description: /*#__PURE__*/(0, _jsxRuntime.jsx)(_server.default, {
|
|
205
|
+
className: "eula-content"
|
|
206
|
+
}),
|
|
207
|
+
texts: {
|
|
208
|
+
listenName: t('license.title'),
|
|
209
|
+
launchingText: t('common.launching'),
|
|
210
|
+
buttonNext: t('license.footer')
|
|
211
|
+
}
|
|
212
|
+
})
|
|
213
|
+
})]
|
|
214
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Connect.default, {
|
|
215
|
+
open: showLaunchInstanceDialog,
|
|
216
|
+
popup: true,
|
|
217
|
+
action: "launch-instance",
|
|
218
|
+
checkFn: createRequest().get,
|
|
219
|
+
onSuccess: handleAuthSuccess,
|
|
220
|
+
onClose: handleCloseAuthDialog,
|
|
221
|
+
checkTimeout: 60 * 5000,
|
|
222
|
+
extraParams: {
|
|
223
|
+
nftId,
|
|
224
|
+
name,
|
|
225
|
+
description
|
|
226
|
+
},
|
|
227
|
+
disableClose: true,
|
|
228
|
+
showDownload: false,
|
|
229
|
+
messages: {
|
|
230
|
+
title: t('redeem.dialog.title'),
|
|
231
|
+
scan: t('redeem.dialog.scan'),
|
|
232
|
+
confirm: t('redeem.dialog.confirm'),
|
|
233
|
+
success: t('redeem.dialog.success')
|
|
234
|
+
}
|
|
235
|
+
})]
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
const Container = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n\n .page-logo {\n display: flex;\n justify-content: center;\n margin-top: 62px;\n ", " {\n margin-top: 48px;\n }\n }\n\n .inputs {\n display: flex;\n align-items: center;\n flex-direction: column;\n text-align: center;\n }\n .input-item {\n margin-top: 24px;\n width: 90%;\n max-width: 460px;\n font-size: 14px;\n input,\n textarea {\n font-size: 14px;\n }\n }\n .botton-container {\n width: 100%;\n margin: 24px auto;\n max-width: 460px;\n text-align: center;\n }\n"])), props => props.theme.breakpoints.down('md'));
|
|
239
|
+
PrepareStandard.propTypes = {
|
|
240
|
+
nftId: _propTypes.default.string.isRequired
|
|
241
|
+
};
|
package/lib/contexts/request.js
CHANGED
|
@@ -16,7 +16,9 @@ var _jsxRuntime = require("react/jsx-runtime");
|
|
|
16
16
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
17
|
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; }
|
|
18
18
|
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; }
|
|
19
|
-
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; }
|
|
19
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
20
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
21
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
20
22
|
_axios.default.defaults.timeout = 200000;
|
|
21
23
|
const RequestContext = /*#__PURE__*/(0, _react.createContext)();
|
|
22
24
|
const {
|
package/lib/locales/en.js
CHANGED
|
@@ -29,7 +29,13 @@ module.exports = {
|
|
|
29
29
|
},
|
|
30
30
|
prepare: {
|
|
31
31
|
title: 'Naming Blocklet Server',
|
|
32
|
-
subTitle: 'Please enter server name and description, they will appear in your server passport'
|
|
32
|
+
subTitle: 'Please enter server name and description, they will appear in your server passport',
|
|
33
|
+
serverless: {
|
|
34
|
+
title: 'Preparing Instance',
|
|
35
|
+
preparing: 'Preparing...',
|
|
36
|
+
prepared: 'Instance ready, redrectring...',
|
|
37
|
+
prepareFailed: 'Prepare for instance failure!'
|
|
38
|
+
}
|
|
33
39
|
},
|
|
34
40
|
launch: {
|
|
35
41
|
title: 'Createing Blocklet Server',
|
|
@@ -86,5 +92,14 @@ module.exports = {
|
|
|
86
92
|
error: {
|
|
87
93
|
loginFirst: 'Please login first'
|
|
88
94
|
}
|
|
95
|
+
},
|
|
96
|
+
purchase: {
|
|
97
|
+
dialog: {
|
|
98
|
+
title: 'Purchase Blocklet Server NFT',
|
|
99
|
+
scan: 'Scan the QR code below with your DID wallet to complete purchase',
|
|
100
|
+
confirm: 'Confirm on your DID Wallet',
|
|
101
|
+
success: 'Purchase Success'
|
|
102
|
+
},
|
|
103
|
+
purchaseServerlessSuccess: 'The purchase of no service is successful and you can go ahead and install Blocklet'
|
|
89
104
|
}
|
|
90
105
|
};
|
package/lib/locales/zh.js
CHANGED
|
@@ -29,7 +29,13 @@ module.exports = {
|
|
|
29
29
|
},
|
|
30
30
|
prepare: {
|
|
31
31
|
title: '命名节点',
|
|
32
|
-
subTitle: '请输入要创建的节点名称和描述,它们将显示在您的节点通行证中'
|
|
32
|
+
subTitle: '请输入要创建的节点名称和描述,它们将显示在您的节点通行证中',
|
|
33
|
+
serverless: {
|
|
34
|
+
title: '正在准备实例',
|
|
35
|
+
preparing: '准备实例中...',
|
|
36
|
+
prepared: '已准备好实例,跳转中...',
|
|
37
|
+
prepareFailed: '准备实例失败!'
|
|
38
|
+
}
|
|
33
39
|
},
|
|
34
40
|
launch: {
|
|
35
41
|
title: '创建节点',
|
|
@@ -86,5 +92,14 @@ module.exports = {
|
|
|
86
92
|
error: {
|
|
87
93
|
loginFirst: '请先登录'
|
|
88
94
|
}
|
|
95
|
+
},
|
|
96
|
+
purchase: {
|
|
97
|
+
dialog: {
|
|
98
|
+
title: '购买 Blocklet Server NFT',
|
|
99
|
+
scan: '用您的 DID 钱包扫描下面的二维码完成购买',
|
|
100
|
+
confirm: '在您的 DID 钱包上确认',
|
|
101
|
+
success: '支付成功'
|
|
102
|
+
},
|
|
103
|
+
purchaseServerlessSuccess: '购买无服务成功,您可以去安装 Blocklet'
|
|
89
104
|
}
|
|
90
105
|
};
|
package/lib/prepare.js
CHANGED
|
@@ -4,232 +4,23 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = PreparePage;
|
|
7
|
-
var _react = require("react");
|
|
8
7
|
var _reactRouterDom = require("react-router-dom");
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var _Connect = _interopRequireDefault(require("@arcblock/did-connect/lib/Connect"));
|
|
12
|
-
var _TextField = _interopRequireDefault(require("@mui/material/TextField"));
|
|
13
|
-
var _FormControl = _interopRequireDefault(require("@mui/material/FormControl"));
|
|
14
|
-
var _FormHelperText = _interopRequireDefault(require("@mui/material/FormHelperText"));
|
|
15
|
-
var _constant = require("@blocklet/launcher-util/lib/constant");
|
|
16
|
-
var _server = _interopRequireDefault(require("@arcblock/license/lib/server"));
|
|
17
|
-
var _serverEula = _interopRequireDefault(require("@blocklet/launcher-layout/lib/wizard/server-eula"));
|
|
18
|
-
var _pageHeader = _interopRequireDefault(require("@blocklet/launcher-layout/lib/page-header"));
|
|
19
|
-
var _ServerLogoNotext = _interopRequireDefault(require("@arcblock/icons/lib/ServerLogoNotext"));
|
|
20
|
-
var _request = _interopRequireDefault(require("./contexts/request"));
|
|
21
|
-
var _locale = require("./contexts/locale");
|
|
22
|
-
var _router = _interopRequireWildcard(require("./contexts/router"));
|
|
23
|
-
var _query = _interopRequireDefault(require("./hooks/query"));
|
|
24
|
-
var _util = require("./util");
|
|
8
|
+
var _prepareServerless = _interopRequireDefault(require("./components/prepare-serverless"));
|
|
9
|
+
var _prepareStandard = _interopRequireDefault(require("./components/prepare-standard"));
|
|
25
10
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
26
|
-
var _templateObject;
|
|
27
|
-
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); }
|
|
28
|
-
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; }
|
|
29
11
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
30
|
-
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
|
|
31
|
-
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; }
|
|
32
|
-
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; }
|
|
33
|
-
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; }
|
|
34
12
|
function PreparePage() {
|
|
35
|
-
const {
|
|
36
|
-
t
|
|
37
|
-
} = (0, _react.useContext)(_locale.LocaleContext);
|
|
38
|
-
const [name, setName] = (0, _react.useState)('');
|
|
39
|
-
const [description, setDescription] = (0, _react.useState)('');
|
|
40
|
-
const [formError, setFormError] = (0, _react.useState)({
|
|
41
|
-
name: '',
|
|
42
|
-
description: ''
|
|
43
|
-
});
|
|
44
|
-
const routerPrefix = (0, _router.usePrefix)();
|
|
45
|
-
const disabledBack = (0, _router.useDisabledBack)();
|
|
46
|
-
const [launching, setLaunching] = (0, _react.useState)(false);
|
|
47
|
-
const [showLaunchInstanceDialog, setShowLaunchInstanceDialog] = (0, _react.useState)(false);
|
|
48
13
|
const {
|
|
49
14
|
nftId
|
|
50
15
|
} = (0, _reactRouterDom.useParams)();
|
|
51
|
-
const
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
if (id === 'description') {
|
|
62
|
-
setDescription(e.target.value);
|
|
63
|
-
}
|
|
64
|
-
validate();
|
|
65
|
-
};
|
|
66
|
-
const isRedeem = nftId === _constant.REDEEM_NFT_ID;
|
|
67
|
-
const headerScope = isRedeem ? 'redeem' : 'prepare';
|
|
68
|
-
const validate = () => {
|
|
69
|
-
let isError = false;
|
|
70
|
-
if (name.length > _constant.INSTANCE_MAX_NAME_LENGTH) {
|
|
71
|
-
isError = true;
|
|
72
|
-
setFormError(value => _objectSpread(_objectSpread({}, value), {}, {
|
|
73
|
-
name: t('launchPrepare.formError.nameExceed', {
|
|
74
|
-
length: _constant.INSTANCE_MAX_NAME_LENGTH
|
|
75
|
-
})
|
|
76
|
-
}));
|
|
77
|
-
} else {
|
|
78
|
-
setFormError(value => _objectSpread(_objectSpread({}, value), {}, {
|
|
79
|
-
name: ''
|
|
80
|
-
}));
|
|
81
|
-
}
|
|
82
|
-
if (description.length > _constant.INSTANCE_MAX_DESC_LENGTH) {
|
|
83
|
-
isError = true;
|
|
84
|
-
setFormError(value => _objectSpread(_objectSpread({}, value), {}, {
|
|
85
|
-
description: t('launchPrepare.formError.descriptionExceed', {
|
|
86
|
-
length: _constant.INSTANCE_MAX_DESC_LENGTH
|
|
87
|
-
})
|
|
88
|
-
}));
|
|
89
|
-
} else {
|
|
90
|
-
setFormError(value => _objectSpread(_objectSpread({}, value), {}, {
|
|
91
|
-
description: ''
|
|
92
|
-
}));
|
|
93
|
-
}
|
|
94
|
-
return isError;
|
|
95
|
-
};
|
|
96
|
-
const handleLaunch = async () => {
|
|
97
|
-
setLaunching(true);
|
|
98
|
-
if (validate()) {
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
if (isRedeem) {
|
|
102
|
-
setShowLaunchInstanceDialog(true);
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
try {
|
|
106
|
-
const {
|
|
107
|
-
status
|
|
108
|
-
} = await api.post('/instances/launch', {
|
|
109
|
-
nftId,
|
|
110
|
-
name,
|
|
111
|
-
description
|
|
112
|
-
}, {
|
|
113
|
-
params: {
|
|
114
|
-
launchType: query.get('launchType')
|
|
115
|
-
}
|
|
116
|
-
});
|
|
117
|
-
if (status !== 202) {
|
|
118
|
-
_Toast.default.error(t('launch.error.launchFailed'));
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
handleAuthSuccess({
|
|
122
|
-
nftId
|
|
123
|
-
});
|
|
124
|
-
} catch (err) {
|
|
125
|
-
const errDesc = (0, _util.getAPIResponseError)(err);
|
|
126
|
-
if (errDesc === 'Unauthorized') {
|
|
127
|
-
_Toast.default.error(t('launchPrepare.error.loginFirst'));
|
|
128
|
-
} else {
|
|
129
|
-
_Toast.default.error(errDesc);
|
|
130
|
-
}
|
|
131
|
-
} finally {
|
|
132
|
-
setLaunching(false);
|
|
133
|
-
}
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
// eslint-disable-next-line no-shadow
|
|
137
|
-
const handleAuthSuccess = _ref => {
|
|
138
|
-
let {
|
|
139
|
-
nftId
|
|
140
|
-
} = _ref;
|
|
141
|
-
navigate((0, _router.default)(routerPrefix, "/in-progress/".concat(nftId).concat(window.location.search)));
|
|
142
|
-
};
|
|
143
|
-
const handleCloseAuthDialog = () => {
|
|
144
|
-
setLaunching(false);
|
|
145
|
-
setShowLaunchInstanceDialog(false);
|
|
146
|
-
};
|
|
147
|
-
const clickBack = () => {
|
|
148
|
-
navigate(-1);
|
|
149
|
-
};
|
|
150
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
|
|
151
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(Container, {
|
|
152
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_pageHeader.default, {
|
|
153
|
-
title: t("".concat(headerScope, ".title")),
|
|
154
|
-
subTitle: t("".concat(headerScope, ".subTitle")),
|
|
155
|
-
onClickBack: headerScope === 'redeem' && !disabledBack.includes('prepare') ? clickBack : ''
|
|
156
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
157
|
-
className: "page-body",
|
|
158
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
159
|
-
className: "page-logo",
|
|
160
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_ServerLogoNotext.default, {
|
|
161
|
-
style: {
|
|
162
|
-
width: 48,
|
|
163
|
-
height: 48
|
|
164
|
-
}
|
|
165
|
-
})
|
|
166
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
167
|
-
className: "inputs",
|
|
168
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_FormControl.default, {
|
|
169
|
-
className: "input-item",
|
|
170
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
|
|
171
|
-
id: "name",
|
|
172
|
-
variant: "outlined",
|
|
173
|
-
label: t('common.name'),
|
|
174
|
-
onChange: handleInput('name'),
|
|
175
|
-
value: name,
|
|
176
|
-
labelwidth: 0,
|
|
177
|
-
autoFocus: true
|
|
178
|
-
}), formError.name && /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormHelperText.default, {
|
|
179
|
-
children: formError.name
|
|
180
|
-
})]
|
|
181
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_FormControl.default, {
|
|
182
|
-
className: "input-item",
|
|
183
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_TextField.default, {
|
|
184
|
-
id: "description",
|
|
185
|
-
variant: "outlined",
|
|
186
|
-
label: t('common.description'),
|
|
187
|
-
onChange: handleInput('description'),
|
|
188
|
-
value: description,
|
|
189
|
-
labelwidth: 0
|
|
190
|
-
}), formError.description && /*#__PURE__*/(0, _jsxRuntime.jsx)(_FormHelperText.default, {
|
|
191
|
-
children: formError.description
|
|
192
|
-
})]
|
|
193
|
-
})]
|
|
194
|
-
})]
|
|
195
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
196
|
-
className: "botton-container",
|
|
197
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_serverEula.default, {
|
|
198
|
-
onContinue: handleLaunch,
|
|
199
|
-
nextDisabled: !name.trim() || !description.trim() || launching,
|
|
200
|
-
launching: launching,
|
|
201
|
-
description: /*#__PURE__*/(0, _jsxRuntime.jsx)(_server.default, {
|
|
202
|
-
className: "eula-content"
|
|
203
|
-
}),
|
|
204
|
-
texts: {
|
|
205
|
-
listenName: t('license.title'),
|
|
206
|
-
launchingText: t('common.launching'),
|
|
207
|
-
buttonNext: t('license.footer')
|
|
208
|
-
}
|
|
209
|
-
})
|
|
210
|
-
})]
|
|
211
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Connect.default, {
|
|
212
|
-
open: showLaunchInstanceDialog,
|
|
213
|
-
popup: true,
|
|
214
|
-
action: "launch-instance",
|
|
215
|
-
checkFn: createRequest().get,
|
|
216
|
-
onSuccess: handleAuthSuccess,
|
|
217
|
-
onClose: handleCloseAuthDialog,
|
|
218
|
-
checkTimeout: 60 * 5000,
|
|
219
|
-
extraParams: {
|
|
220
|
-
nftId,
|
|
221
|
-
name,
|
|
222
|
-
description
|
|
223
|
-
},
|
|
224
|
-
disableClose: true,
|
|
225
|
-
showDownload: false,
|
|
226
|
-
messages: {
|
|
227
|
-
title: t('redeem.dialog.title'),
|
|
228
|
-
scan: t('redeem.dialog.scan'),
|
|
229
|
-
confirm: t('redeem.dialog.confirm'),
|
|
230
|
-
success: t('redeem.dialog.success')
|
|
231
|
-
}
|
|
232
|
-
})]
|
|
16
|
+
const [searchParams] = (0, _reactRouterDom.useSearchParams)();
|
|
17
|
+
const launchType = searchParams.get('launchType');
|
|
18
|
+
if (launchType === 'serverless') {
|
|
19
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_prepareServerless.default, {
|
|
20
|
+
nftId: nftId
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_prepareStandard.default, {
|
|
24
|
+
nftId: nftId
|
|
233
25
|
});
|
|
234
|
-
}
|
|
235
|
-
const Container = _styled.default.div(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n\n .page-logo {\n display: flex;\n justify-content: center;\n margin-top: 62px;\n ", " {\n margin-top: 48px;\n }\n }\n\n .inputs {\n display: flex;\n align-items: center;\n flex-direction: column;\n text-align: center;\n }\n .input-item {\n margin-top: 24px;\n width: 90%;\n max-width: 460px;\n font-size: 14px;\n input,\n textarea {\n font-size: 14px;\n }\n }\n .botton-container {\n width: 100%;\n margin: 24px auto;\n max-width: 460px;\n text-align: center;\n }\n"])), props => props.theme.breakpoints.down('md'));
|
|
26
|
+
}
|
package/lib/purchase.js
CHANGED
|
@@ -26,6 +26,7 @@ var _query = _interopRequireDefault(require("./hooks/query"));
|
|
|
26
26
|
var _locale = require("./contexts/locale");
|
|
27
27
|
var _session = require("./contexts/session");
|
|
28
28
|
var _router = _interopRequireWildcard(require("./contexts/router"));
|
|
29
|
+
var _util = require("./util");
|
|
29
30
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
30
31
|
var _templateObject;
|
|
31
32
|
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); }
|
|
@@ -54,6 +55,7 @@ function PurchasePage(_ref) {
|
|
|
54
55
|
const routerPrefix = (0, _router.usePrefix)();
|
|
55
56
|
const [planLoaded, setPlanLoaded] = (0, _react.useState)(false);
|
|
56
57
|
const isMobile = (0, _useMediaQuery.default)(theme => theme.breakpoints.down('md'));
|
|
58
|
+
const [searchParams] = (0, _reactRouterDom.useSearchParams)();
|
|
57
59
|
const userDid = query.get('userDid') || (0, _lodash.default)(session, 'user.did');
|
|
58
60
|
const isEmbed = !!query.get('blocklet_meta_url');
|
|
59
61
|
(0, _react.useEffect)(() => {
|
|
@@ -62,7 +64,7 @@ function PurchasePage(_ref) {
|
|
|
62
64
|
}
|
|
63
65
|
// eslint-disable-next-line
|
|
64
66
|
}, [paymentMethod, userDid]);
|
|
65
|
-
const handlePaid = (_ref2, decrypt) => {
|
|
67
|
+
const handlePaid = async (_ref2, decrypt) => {
|
|
66
68
|
let {
|
|
67
69
|
nftId,
|
|
68
70
|
launchToken
|
|
@@ -70,8 +72,22 @@ function PurchasePage(_ref) {
|
|
|
70
72
|
if (launchToken) {
|
|
71
73
|
_jsCookie.default.set('launch-token', decrypt(launchToken));
|
|
72
74
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
+
if (nftId !== _constant.REDEEM_NFT_ID) {
|
|
76
|
+
const nftState = await (0, _util.getAsset)(window.blocklet.CHAIN_HOST, nftId);
|
|
77
|
+
if ((nftState.tags || []).includes(_constant.NFT_TYPE_SERVERLESS)) {
|
|
78
|
+
if (!isEmbed) {
|
|
79
|
+
_Toast.default.success(t('purchase.purchaseServerlessSuccess'));
|
|
80
|
+
setPaying(false);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
searchParams.set('launchType', 'serverless');
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
navigate({
|
|
87
|
+
pathname: (0, _router.default)(routerPrefix, "/prepare/".concat(nftId)),
|
|
88
|
+
search: searchParams.toString()
|
|
89
|
+
});
|
|
90
|
+
setPaying(false);
|
|
75
91
|
};
|
|
76
92
|
const getPurchaseParams = () => {
|
|
77
93
|
const obj = {
|
package/lib/util.js
CHANGED
|
@@ -3,23 +3,37 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.getAPIResponseError = void 0;
|
|
6
|
+
exports.getAsset = exports.getAPIResponseError = void 0;
|
|
7
7
|
exports.getBlockletMetaUrl = getBlockletMetaUrl;
|
|
8
8
|
exports.loadURL = exports.getLaunchBlockletUrl = void 0;
|
|
9
9
|
var _urlJoin = _interopRequireDefault(require("url-join"));
|
|
10
10
|
var _lodash = _interopRequireDefault(require("lodash.get"));
|
|
11
|
+
var _axios = _interopRequireDefault(require("axios"));
|
|
11
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
13
|
function getBlockletMetaUrl(registry, did) {
|
|
13
14
|
return (0, _urlJoin.default)(registry, "/api/blocklets/".concat(did, "/blocklet.json?source=webapp"));
|
|
14
15
|
}
|
|
15
|
-
const getLaunchBlockletUrl =
|
|
16
|
+
const getLaunchBlockletUrl = _ref => {
|
|
17
|
+
let {
|
|
18
|
+
serverUrl,
|
|
19
|
+
blockletMetaUrl,
|
|
20
|
+
locale,
|
|
21
|
+
launchType,
|
|
22
|
+
nftId
|
|
23
|
+
} = _ref;
|
|
16
24
|
if (!blockletMetaUrl) {
|
|
17
25
|
return serverUrl;
|
|
18
26
|
}
|
|
19
|
-
let result = (0, _urlJoin.default)(serverUrl, "/launch-blocklet/install?blocklet_meta_url=".concat(encodeURIComponent(blockletMetaUrl), "&
|
|
27
|
+
let result = (0, _urlJoin.default)(serverUrl, "/launch-blocklet/install?blocklet_meta_url=".concat(encodeURIComponent(blockletMetaUrl), "&fromLauncher=true&from=").concat(encodeURIComponent(window.location.href)));
|
|
28
|
+
if (launchType) {
|
|
29
|
+
result += "&launchType=".concat(launchType);
|
|
30
|
+
}
|
|
20
31
|
if (locale) {
|
|
21
32
|
result += "&locale=".concat(locale);
|
|
22
33
|
}
|
|
34
|
+
if (nftId) {
|
|
35
|
+
result += "&nftId=".concat(nftId);
|
|
36
|
+
}
|
|
23
37
|
return result;
|
|
24
38
|
};
|
|
25
39
|
exports.getLaunchBlockletUrl = getLaunchBlockletUrl;
|
|
@@ -49,4 +63,22 @@ const loadURL = url => new Promise(resolve => {
|
|
|
49
63
|
document.body.appendChild(iframe);
|
|
50
64
|
timer = setTimeout(done, 5000);
|
|
51
65
|
});
|
|
52
|
-
exports.loadURL = loadURL;
|
|
66
|
+
exports.loadURL = loadURL;
|
|
67
|
+
const getAsset = async (chainHost, address) => {
|
|
68
|
+
const url = (0, _urlJoin.default)(new URL(chainHost).origin, '/api/gql/');
|
|
69
|
+
const result = await _axios.default.create().post(url, JSON.stringify({
|
|
70
|
+
query: "{\n getAssetState(address: \"".concat(address, "\") {\n state {\n address\n data {\n typeUrl\n value\n }\n display {\n type\n content\n }\n issuer\n owner\n parent\n tags\n }\n }\n }")
|
|
71
|
+
}), {
|
|
72
|
+
headers: {
|
|
73
|
+
'Content-Type': 'application/json',
|
|
74
|
+
Accept: 'application/json'
|
|
75
|
+
},
|
|
76
|
+
timeout: 60 * 1000
|
|
77
|
+
});
|
|
78
|
+
const state = (0, _lodash.default)(result, 'data.data.getAssetState.state');
|
|
79
|
+
if (state && state.data.typeUrl === 'json') {
|
|
80
|
+
state.data.value = JSON.parse(state.data.value);
|
|
81
|
+
}
|
|
82
|
+
return state;
|
|
83
|
+
};
|
|
84
|
+
exports.getAsset = getAsset;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blocklet/launcher-workflow",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.13",
|
|
4
4
|
"description": "Purchase components for Launcher UI",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -36,19 +36,19 @@
|
|
|
36
36
|
"react": ">=18.1.0"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@arcblock/did-connect": "^2.4.
|
|
40
|
-
"@arcblock/icons": "^2.4.
|
|
41
|
-
"@arcblock/license": "^2.4.
|
|
42
|
-
"@arcblock/ux": "^2.4.
|
|
43
|
-
"@blocklet/launcher-layout": "1.9.
|
|
44
|
-
"@blocklet/launcher-util": "1.9.
|
|
45
|
-
"@blocklet/launcher-ux": "1.9.
|
|
46
|
-
"@did-pay/react": "^1.9.
|
|
39
|
+
"@arcblock/did-connect": "^2.4.55",
|
|
40
|
+
"@arcblock/icons": "^2.4.55",
|
|
41
|
+
"@arcblock/license": "^2.4.55",
|
|
42
|
+
"@arcblock/ux": "^2.4.55",
|
|
43
|
+
"@blocklet/launcher-layout": "1.9.13",
|
|
44
|
+
"@blocklet/launcher-util": "1.9.13",
|
|
45
|
+
"@blocklet/launcher-ux": "1.9.13",
|
|
46
|
+
"@did-pay/react": "^1.9.27",
|
|
47
47
|
"@emotion/react": "^11.10.5",
|
|
48
48
|
"@emotion/styled": "^11.10.5",
|
|
49
|
-
"@mui/icons-material": "^5.10.
|
|
50
|
-
"@mui/material": "^5.10.
|
|
51
|
-
"@ocap/util": "^1.18.
|
|
49
|
+
"@mui/icons-material": "^5.10.16",
|
|
50
|
+
"@mui/material": "^5.10.16",
|
|
51
|
+
"@ocap/util": "^1.18.23",
|
|
52
52
|
"@stripe/react-stripe-js": "^1.15.0",
|
|
53
53
|
"@stripe/stripe-js": "^1.44.1",
|
|
54
54
|
"axios": "^0.26.1",
|
|
@@ -58,16 +58,16 @@
|
|
|
58
58
|
"lodash.throttle": "^4.1.1",
|
|
59
59
|
"prop-types": "^15.8.1",
|
|
60
60
|
"react-lottie-player": "^1.5.0",
|
|
61
|
-
"react-router-dom": "^6.4.
|
|
61
|
+
"react-router-dom": "^6.4.4",
|
|
62
62
|
"react-use": "^17.4.0",
|
|
63
63
|
"url-join": "^4.0.1"
|
|
64
64
|
},
|
|
65
65
|
"devDependencies": {
|
|
66
66
|
"@babel/cli": "^7.19.3",
|
|
67
|
-
"@babel/core": "^7.20.
|
|
67
|
+
"@babel/core": "^7.20.5",
|
|
68
68
|
"@babel/preset-env": "^7.20.2",
|
|
69
69
|
"@babel/preset-react": "^7.18.6",
|
|
70
70
|
"babel-plugin-inline-react-svg": "^2.0.1"
|
|
71
71
|
},
|
|
72
|
-
"gitHead": "
|
|
72
|
+
"gitHead": "c2192c94567e6b096096c82214da83d992ce988d"
|
|
73
73
|
}
|