create-blocklet 0.9.5 → 0.9.7

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 (137) hide show
  1. package/common/.prettierrc +11 -1
  2. package/common/scripts/build-clean.mjs +0 -1
  3. package/common/scripts/bump-version.mjs +33 -29
  4. package/index.js +86 -10
  5. package/package.json +1 -1
  6. package/templates/base-readme.md +103 -0
  7. package/templates/did-connect-dapp/.eslintrc.js +4 -0
  8. package/templates/did-connect-dapp/README.md +143 -0
  9. package/templates/did-connect-dapp/api/dev.js +5 -0
  10. package/templates/did-connect-dapp/api/hooks/pre-start.js +33 -0
  11. package/templates/did-connect-dapp/api/index.js +48 -0
  12. package/templates/did-connect-dapp/api/libs/auth.js +25 -0
  13. package/templates/did-connect-dapp/api/libs/env.js +9 -0
  14. package/templates/did-connect-dapp/api/libs/logger.js +3 -0
  15. package/templates/did-connect-dapp/api/libs/utils.js +70 -0
  16. package/templates/did-connect-dapp/api/routes/auth/index.js +15 -0
  17. package/templates/did-connect-dapp/api/routes/auth/request-digest-signature.js +51 -0
  18. package/templates/did-connect-dapp/api/routes/auth/request-multiple-claims.js +52 -0
  19. package/templates/did-connect-dapp/api/routes/auth/request-multiple-steps.js +57 -0
  20. package/templates/did-connect-dapp/api/routes/auth/request-nft.js +82 -0
  21. package/templates/did-connect-dapp/api/routes/auth/request-payment.js +72 -0
  22. package/templates/did-connect-dapp/api/routes/auth/request-profile.js +25 -0
  23. package/templates/did-connect-dapp/api/routes/auth/request-text-signature.js +44 -0
  24. package/templates/did-connect-dapp/api/routes/auth/request-transaction-signature.js +62 -0
  25. package/templates/did-connect-dapp/blocklet.md +5 -0
  26. package/templates/did-connect-dapp/blocklet.yml +57 -0
  27. package/templates/did-connect-dapp/index.html +17 -0
  28. package/templates/did-connect-dapp/package.json +86 -0
  29. package/templates/did-connect-dapp/src/app.jsx +20 -0
  30. package/templates/did-connect-dapp/src/assets/get_wallet_en.png +0 -0
  31. package/templates/did-connect-dapp/src/assets/get_wallet_zh.png +0 -0
  32. package/templates/did-connect-dapp/src/components/connect-item.jsx +39 -0
  33. package/templates/did-connect-dapp/src/components/connects/request-digest-signature.jsx +45 -0
  34. package/templates/did-connect-dapp/src/components/connects/request-multiple-claims.jsx +55 -0
  35. package/templates/did-connect-dapp/src/components/connects/request-multiple-steps.jsx +54 -0
  36. package/templates/did-connect-dapp/src/components/connects/request-nft.jsx +75 -0
  37. package/templates/did-connect-dapp/src/components/connects/request-payment.jsx +82 -0
  38. package/templates/did-connect-dapp/src/components/connects/request-profile.jsx +72 -0
  39. package/templates/did-connect-dapp/src/components/connects/request-text-signature.jsx +44 -0
  40. package/templates/did-connect-dapp/src/components/connects/request-transaction-signature.jsx +44 -0
  41. package/templates/did-connect-dapp/src/components/info-row.jsx +39 -0
  42. package/templates/did-connect-dapp/src/components/layout.jsx +26 -0
  43. package/templates/did-connect-dapp/src/index.jsx +6 -0
  44. package/templates/did-connect-dapp/src/libs/session.js +11 -0
  45. package/templates/did-connect-dapp/src/libs/utils.js +4 -0
  46. package/templates/did-connect-dapp/src/locales/en.js +115 -0
  47. package/templates/did-connect-dapp/src/locales/index.js +5 -0
  48. package/templates/did-connect-dapp/src/locales/zh.js +115 -0
  49. package/templates/did-connect-dapp/src/pages/main.jsx +95 -0
  50. package/templates/did-connect-dapp/template-info.json +12 -0
  51. package/templates/did-connect-dapp/vite.config.mjs +11 -0
  52. package/templates/did-wallet-dapp/.eslintrc.js +7 -0
  53. package/templates/did-wallet-dapp/README.md +32 -0
  54. package/templates/did-wallet-dapp/api/dev.js +8 -0
  55. package/templates/did-wallet-dapp/api/functions/app.js +65 -0
  56. package/templates/did-wallet-dapp/api/index.js +13 -0
  57. package/templates/did-wallet-dapp/api/libs/constant.js +1 -0
  58. package/templates/did-wallet-dapp/api/routes/user.js +30 -0
  59. package/templates/did-wallet-dapp/blocklet.md +3 -0
  60. package/templates/did-wallet-dapp/blocklet.yml +58 -0
  61. package/templates/did-wallet-dapp/index.html +16 -0
  62. package/templates/did-wallet-dapp/package.json +84 -0
  63. package/templates/did-wallet-dapp/src/app.jsx +38 -0
  64. package/templates/did-wallet-dapp/src/assets/blocklet.svg +16 -0
  65. package/templates/did-wallet-dapp/src/assets/react.svg +1 -0
  66. package/templates/did-wallet-dapp/src/assets/vite.svg +1 -0
  67. package/templates/did-wallet-dapp/src/assets/wallet.png +0 -0
  68. package/templates/did-wallet-dapp/src/components/layout.jsx +28 -0
  69. package/templates/did-wallet-dapp/src/global.css +79 -0
  70. package/templates/did-wallet-dapp/src/index.jsx +6 -0
  71. package/templates/did-wallet-dapp/src/libs/api.js +7 -0
  72. package/templates/did-wallet-dapp/src/libs/session.js +13 -0
  73. package/templates/did-wallet-dapp/src/locales/en.js +13 -0
  74. package/templates/did-wallet-dapp/src/locales/index.js +4 -0
  75. package/templates/did-wallet-dapp/src/locales/zh.js +13 -0
  76. package/templates/did-wallet-dapp/src/pages/home/index.css +39 -0
  77. package/templates/did-wallet-dapp/src/pages/home/index.jsx +57 -0
  78. package/templates/did-wallet-dapp/src/pages/profile.jsx +136 -0
  79. package/templates/did-wallet-dapp/template-info.json +12 -0
  80. package/templates/did-wallet-dapp/vite.config.js +14 -0
  81. package/templates/did-wallet-dapp/vite.config.server.js +9 -0
  82. package/templates/express-api/README.md +2 -124
  83. package/templates/express-api/blocklet.yml +0 -1
  84. package/templates/express-api/package.json +9 -8
  85. package/templates/html-static/README.md +3 -125
  86. package/templates/html-static/blocklet.yml +0 -1
  87. package/templates/html-static/package.json +4 -3
  88. package/templates/monorepo/README.md +8 -8
  89. package/templates/monorepo/package.json +4 -3
  90. package/templates/monorepo/scripts/bump-version.mjs +36 -32
  91. package/templates/nestjs-api/README.md +2 -123
  92. package/templates/nestjs-api/blocklet.yml +0 -1
  93. package/templates/nestjs-api/package.json +16 -15
  94. package/templates/nextjs-dapp/README.md +2 -125
  95. package/templates/nextjs-dapp/blocklet.yml +0 -1
  96. package/templates/nextjs-dapp/package.json +7 -7
  97. package/templates/react-dapp/README.md +2 -124
  98. package/templates/react-dapp/blocklet.yml +0 -1
  99. package/templates/react-dapp/package.json +16 -15
  100. package/templates/react-dapp-ts/README.md +2 -125
  101. package/templates/react-dapp-ts/blocklet.yml +0 -1
  102. package/templates/react-dapp-ts/package.json +19 -18
  103. package/templates/react-gun-dapp/README.md +2 -125
  104. package/templates/react-gun-dapp/blocklet.yml +0 -1
  105. package/templates/react-gun-dapp/package.json +15 -14
  106. package/templates/react-static/README.md +2 -125
  107. package/templates/react-static/blocklet.yml +0 -1
  108. package/templates/react-static/package.json +11 -10
  109. package/templates/solidjs-dapp/README.md +2 -125
  110. package/templates/solidjs-dapp/blocklet.yml +0 -1
  111. package/templates/solidjs-dapp/package.json +14 -13
  112. package/templates/solidjs-static/README.md +2 -123
  113. package/templates/solidjs-static/blocklet.yml +0 -1
  114. package/templates/solidjs-static/package.json +9 -8
  115. package/templates/svelte-dapp/README.md +2 -124
  116. package/templates/svelte-dapp/blocklet.yml +0 -1
  117. package/templates/svelte-dapp/package.json +12 -11
  118. package/templates/svelte-static/README.md +2 -125
  119. package/templates/svelte-static/blocklet.yml +0 -1
  120. package/templates/svelte-static/package.json +8 -7
  121. package/templates/todo-list-example/blocklet.yml +0 -1
  122. package/templates/todo-list-example/package.json +11 -10
  123. package/templates/vue-dapp/README.md +2 -125
  124. package/templates/vue-dapp/blocklet.yml +0 -1
  125. package/templates/vue-dapp/package.json +16 -15
  126. package/templates/vue-static/README.md +2 -125
  127. package/templates/vue-static/blocklet.yml +0 -1
  128. package/templates/vue-static/package.json +11 -10
  129. package/templates/vue-ts-static/README.md +2 -124
  130. package/templates/vue-ts-static/blocklet.yml +1 -2
  131. package/templates/vue-ts-static/package.json +12 -12
  132. package/templates/vue2-dapp/README.md +2 -125
  133. package/templates/vue2-dapp/blocklet.yml +0 -1
  134. package/templates/vue2-dapp/package.json +13 -12
  135. package/templates/vue2-static/README.md +2 -125
  136. package/templates/vue2-static/blocklet.yml +0 -1
  137. package/templates/vue2-static/package.json +9 -8
@@ -0,0 +1,86 @@
1
+ {
2
+ "name": "did-connect-dapp",
3
+ "version": "0.1.0",
4
+ "private": "true",
5
+ "scripts": {
6
+ "dev": "blocklet dev",
7
+ "lint": "eslint src api --ext .mjs,.js,.jsx,.ts,.tsx",
8
+ "lint:fix": "npm run lint -- --fix",
9
+ "start": "cross-env NODE_ENV=development nodemon api/dev.js -w api",
10
+ "clean": "node scripts/build-clean.mjs",
11
+ "bundle": "npm run bundle:client && npm run bundle:api",
12
+ "bundle:client": "vite build",
13
+ "bundle:api": "npm run clean && blocklet bundle --compact --create-release",
14
+ "deploy": "npm run bundle && blocklet deploy .blocklet/bundle",
15
+ "upload": "npm run bundle && blocklet upload .blocklet/release/blocklet.json",
16
+ "prepare": "npx simple-git-hooks",
17
+ "bump-version": "zx --quiet scripts/bump-version.mjs"
18
+ },
19
+ "lint-staged": {
20
+ "*.{mjs,js,jsx,ts,tsx}": [
21
+ "prettier --write",
22
+ "eslint"
23
+ ],
24
+ "*.{css,less,scss,json,graphql}": [
25
+ "prettier --write"
26
+ ]
27
+ },
28
+ "browserslist": {
29
+ "production": [
30
+ ">0.2%",
31
+ "not dead",
32
+ "not op_mini all"
33
+ ],
34
+ "development": [
35
+ "last 1 chrome version",
36
+ "last 1 firefox version",
37
+ "last 1 safari version"
38
+ ]
39
+ },
40
+ "dependencies": {
41
+ "@arcblock/did": "^1.18.135",
42
+ "@arcblock/did-auth": "^1.18.135",
43
+ "@arcblock/did-auth-storage-nedb": "^1.7.1",
44
+ "@blocklet/sdk": "^1.16.31",
45
+ "@ocap/client": "^1.18.135",
46
+ "@ocap/mcrypto": "^1.18.135",
47
+ "@ocap/util": "^1.18.135",
48
+ "@ocap/wallet": "^1.18.135",
49
+ "cookie-parser": "^1.4.6",
50
+ "dotenv-flow": "^4.1.0",
51
+ "express": "^4.21.0",
52
+ "express-async-errors": "^3.1.1",
53
+ "lodash": "^4.17.21"
54
+ },
55
+ "devDependencies": {
56
+ "@arcblock/did-connect": "^2.10.37",
57
+ "@arcblock/eslint-config": "^0.3.2",
58
+ "@arcblock/ux": "^2.10.37",
59
+ "@blocklet/ui-react": "^2.10.37",
60
+ "@emotion/react": "^11.13.3",
61
+ "@emotion/styled": "^11.13.0",
62
+ "@iconify-icons/material-symbols": "^1.2.58",
63
+ "@iconify/react": "^5.0.2",
64
+ "@mui/material": "^5.16.7",
65
+ "@trivago/prettier-plugin-sort-imports": "^4.3.0",
66
+ "@vitejs/plugin-react": "^4.3.1",
67
+ "bumpp": "^9.5.2",
68
+ "cross-env": "^7.0.3",
69
+ "eslint": "^8.57.1",
70
+ "flat": "^6.0.1",
71
+ "lint-staged": "^15.2.10",
72
+ "nodemon": "^3.1.7",
73
+ "prettier": "^3.3.3",
74
+ "prop-types": "^15.8.1",
75
+ "react": "~18.2.0",
76
+ "react-dom": "~18.2.0",
77
+ "rimraf": "^5.0.10",
78
+ "vite": "^5.4.8",
79
+ "vite-plugin-blocklet": "^0.9.7",
80
+ "vite-plugin-svgr": "^4.2.0",
81
+ "zx": "^8.1.8"
82
+ },
83
+ "simple-git-hooks": {
84
+ "pre-commit": "npx lint-staged"
85
+ }
86
+ }
@@ -0,0 +1,20 @@
1
+ import { LocaleProvider } from '@arcblock/ux/lib/Locale/context';
2
+ import { ThemeProvider } from '@arcblock/ux/lib/Theme';
3
+
4
+ import { SessionProvider } from './libs/session';
5
+ import { translations } from './locales';
6
+ import Main from './pages/main';
7
+
8
+ function App() {
9
+ return (
10
+ <ThemeProvider>
11
+ <LocaleProvider translations={translations}>
12
+ <SessionProvider>
13
+ <Main />
14
+ </SessionProvider>
15
+ </LocaleProvider>
16
+ </ThemeProvider>
17
+ );
18
+ }
19
+
20
+ export default App;
@@ -0,0 +1,39 @@
1
+ /* eslint-disable react/require-default-props */
2
+ import ConnectButton from '@arcblock/did-connect/lib/Button';
3
+ import { useLocaleContext } from '@arcblock/ux/lib/Locale/context';
4
+ import { Box, Card, CardContent, Typography } from '@mui/material';
5
+ import PropTypes from 'prop-types';
6
+
7
+ export default function ConnectItem({ title, description = null, result = null, onClick = () => {} }) {
8
+ const { t } = useLocaleContext();
9
+ return (
10
+ <Box>
11
+ <Typography variant="h6" component="h5" color="textPrimary">
12
+ {title}
13
+ </Typography>
14
+ {description ? (
15
+ <Typography variant="body1" color="text.secondary" gutterBottom>
16
+ {description}
17
+ </Typography>
18
+ ) : null}
19
+ <ConnectButton onClick={onClick} />
20
+ {result ? (
21
+ <Card sx={{ mt: 2 }} variant="outlined">
22
+ <CardContent>
23
+ <Typography sx={{ fontSize: 14 }} color="text.secondary" gutterBottom>
24
+ {t('result')}
25
+ </Typography>
26
+ {result}
27
+ </CardContent>
28
+ </Card>
29
+ ) : null}
30
+ </Box>
31
+ );
32
+ }
33
+
34
+ ConnectItem.propTypes = {
35
+ title: PropTypes.any.isRequired,
36
+ description: PropTypes.any,
37
+ result: PropTypes.any,
38
+ onClick: PropTypes.func,
39
+ };
@@ -0,0 +1,45 @@
1
+ import { useLocaleContext } from '@arcblock/ux/lib/Locale/context';
2
+ import { useState } from 'react';
3
+
4
+ import { useSessionContext } from '../../libs/session';
5
+ import ConnectItem from '../connect-item';
6
+ import InfoRow from '../info-row';
7
+
8
+ export default function RequestDigestSignature() {
9
+ const [result, setResult] = useState(null);
10
+ const { locale, t } = useLocaleContext();
11
+ const { connectApi } = useSessionContext();
12
+
13
+ const requestFn = () => {
14
+ const action = 'request-digest-signature';
15
+ setResult(null);
16
+ connectApi.open({
17
+ locale,
18
+ action,
19
+ onSuccess(res) {
20
+ setResult(res.result);
21
+ },
22
+ messages: {
23
+ title: t('claims.requestDigestSig.connect.title'),
24
+ scan: t('claims.requestDigestSig.connect.scan'),
25
+ },
26
+ });
27
+ };
28
+
29
+ return (
30
+ <ConnectItem
31
+ title={t('claims.requestDigestSig.title')}
32
+ description={t('claims.requestDigestSig.description')}
33
+ onClick={requestFn}
34
+ result={
35
+ result ? (
36
+ <>
37
+ <InfoRow name={t('claims.requestDigestSig.result.origin')} value={result.origin} />
38
+ <InfoRow name={t('claims.requestDigestSig.result.digest')} value={result.digest} />
39
+ <InfoRow name={t('claims.requestDigestSig.result.signature')} value={result.sig} />
40
+ </>
41
+ ) : null
42
+ }
43
+ />
44
+ );
45
+ }
@@ -0,0 +1,55 @@
1
+ import { useLocaleContext } from '@arcblock/ux/lib/Locale/context';
2
+ import { Box, Typography } from '@mui/material';
3
+ import { useState } from 'react';
4
+
5
+ import { useSessionContext } from '../../libs/session';
6
+ import ConnectItem from '../connect-item';
7
+ import InfoRow from '../info-row';
8
+
9
+ export default function RequestMultipleClaims() {
10
+ const [result, setResult] = useState(null);
11
+ const { locale, t } = useLocaleContext();
12
+ const { connectApi } = useSessionContext();
13
+
14
+ const requestFn = () => {
15
+ const action = 'request-multiple-claims';
16
+ setResult(null);
17
+ connectApi.open({
18
+ locale,
19
+ action,
20
+ onSuccess(res) {
21
+ setResult(res.result);
22
+ },
23
+ messages: {
24
+ title: t('claims.requestMultipleClaims.connect.title'),
25
+ scan: t('claims.requestMultipleClaims.connect.scan'),
26
+ },
27
+ });
28
+ };
29
+
30
+ return (
31
+ <ConnectItem
32
+ title={t('claims.requestMultipleClaims.title')}
33
+ description={t('claims.requestMultipleClaims.description')}
34
+ onClick={requestFn}
35
+ result={
36
+ result ? (
37
+ <>
38
+ <Typography variant="h6">{t('step1.title')}</Typography>
39
+ <Box sx={{ pl: 1 }}>
40
+ <InfoRow name={t('claims.requestMultipleClaims.result.origin')} value={result[0].origin} />
41
+ <InfoRow name={t('claims.requestMultipleClaims.result.signature')} value={result[0].sig} />
42
+ </Box>
43
+
44
+ <Typography variant="h6">{t('step2.title')}</Typography>
45
+ <Box sx={{ pl: 1 }}>
46
+ <InfoRow name={t('claims.requestMultipleClaims.result.origin')} value={result[1].origin} />
47
+ <InfoRow name={t('claims.requestMultipleClaims.result.digest')} value={result[1].digest} />
48
+ <InfoRow name={t('claims.requestMultipleClaims.result.signature')} value={result[1].sig} />
49
+ </Box>
50
+ </>
51
+ ) : null
52
+ }
53
+ />
54
+ );
55
+ }
@@ -0,0 +1,54 @@
1
+ import { useLocaleContext } from '@arcblock/ux/lib/Locale/context';
2
+ import { Box, Typography } from '@mui/material';
3
+ import { useState } from 'react';
4
+
5
+ import { useSessionContext } from '../../libs/session';
6
+ import ConnectItem from '../connect-item';
7
+ import InfoRow from '../info-row';
8
+
9
+ export default function RequestMultipleSteps() {
10
+ const [result, setResult] = useState(null);
11
+ const { locale, t } = useLocaleContext();
12
+ const { connectApi } = useSessionContext();
13
+
14
+ const requestFn = () => {
15
+ const action = 'request-multiple-steps';
16
+ setResult(null);
17
+ connectApi.open({
18
+ locale,
19
+ action,
20
+ onSuccess(res) {
21
+ setResult(res.result);
22
+ },
23
+ messages: {
24
+ title: t('claims.requestMultipleSteps.connect.title'),
25
+ scan: t('claims.requestMultipleSteps.connect.scan'),
26
+ },
27
+ });
28
+ };
29
+
30
+ return (
31
+ <ConnectItem
32
+ title={t('claims.requestMultipleSteps.title')}
33
+ description={t('claims.requestMultipleSteps.description')}
34
+ onClick={requestFn}
35
+ result={
36
+ result ? (
37
+ <>
38
+ <Typography variant="h6">Step 1</Typography>
39
+ <Box sx={{ pl: 1 }}>
40
+ <InfoRow name={t('claims.requestMultipleSteps.result.origin')} value={result[0].origin} />
41
+ <InfoRow name={t('claims.requestMultipleSteps.result.signature')} value={result[0].sig} />
42
+ </Box>
43
+ <Typography variant="h6">Step 2</Typography>
44
+ <Box sx={{ pl: 1 }}>
45
+ <InfoRow name={t('claims.requestMultipleSteps.result.origin')} value={result[1].origin} />
46
+ <InfoRow name={t('claims.requestMultipleSteps.result.digest')} value={result[1].digest} />
47
+ <InfoRow name={t('claims.requestMultipleSteps.result.signature')} value={result[1].sig} />
48
+ </Box>
49
+ </>
50
+ ) : null
51
+ }
52
+ />
53
+ );
54
+ }
@@ -0,0 +1,75 @@
1
+ import { useLocaleContext } from '@arcblock/ux/lib/Locale/context';
2
+ import iconOpenInNewRounded from '@iconify-icons/material-symbols/open-in-new-rounded';
3
+ import { Icon } from '@iconify/react';
4
+ import { Link } from '@mui/material';
5
+ import { useState } from 'react';
6
+
7
+ import { useSessionContext } from '../../libs/session';
8
+ import { getExplorerUrl } from '../../libs/utils';
9
+ import ConnectItem from '../connect-item';
10
+ import InfoRow from '../info-row';
11
+
12
+ export default function RequestNFT() {
13
+ const [result, setResult] = useState(null);
14
+ const { locale, t } = useLocaleContext();
15
+ const { connectApi } = useSessionContext();
16
+
17
+ const requestFn = () => {
18
+ const action = 'request-nft';
19
+ setResult(null);
20
+ connectApi.open({
21
+ locale,
22
+ action,
23
+ onSuccess(res) {
24
+ setResult(res.result);
25
+ },
26
+ messages: {
27
+ title: t('claims.requestNFT.connect.title'),
28
+ scan: t('claims.requestNFT.connect.scan'),
29
+ },
30
+ });
31
+ };
32
+
33
+ return (
34
+ <ConnectItem
35
+ title={t('claims.requestNFT.title')}
36
+ description={
37
+ <>
38
+ {t('claims.requestNFT.description')}{' '}
39
+ <Link
40
+ href="https://playground.staging.arcblock.io"
41
+ target="_blank"
42
+ underline="hover"
43
+ sx={{
44
+ display: 'inline-flex',
45
+ alignItems: 'center',
46
+ gap: 0.5,
47
+ }}>
48
+ https://playground.staging.arcblock.io <Icon icon={iconOpenInNewRounded} />
49
+ </Link>
50
+ </>
51
+ }
52
+ onClick={requestFn}
53
+ result={
54
+ result ? (
55
+ <InfoRow
56
+ name="NFT"
57
+ value={
58
+ <Link
59
+ href={getExplorerUrl(result.asset, 'assets')}
60
+ target="_blank"
61
+ underline="hover"
62
+ sx={{
63
+ display: 'inline-flex',
64
+ alignItems: 'center',
65
+ gap: 0.5,
66
+ }}>
67
+ {result.asset} <Icon icon={iconOpenInNewRounded} />
68
+ </Link>
69
+ }
70
+ />
71
+ ) : null
72
+ }
73
+ />
74
+ );
75
+ }
@@ -0,0 +1,82 @@
1
+ import { useLocaleContext } from '@arcblock/ux/lib/Locale/context';
2
+ import iconOpenInNewRounded from '@iconify-icons/material-symbols/open-in-new-rounded';
3
+ import { Icon } from '@iconify/react';
4
+ import { Box, Link } from '@mui/material';
5
+ import { useState } from 'react';
6
+
7
+ import { useSessionContext } from '../../libs/session';
8
+ import { getExplorerUrl } from '../../libs/utils';
9
+ import ConnectItem from '../connect-item';
10
+ import InfoRow from '../info-row';
11
+
12
+ export default function RequestPayment() {
13
+ const [result, setResult] = useState(null);
14
+ const { locale, t } = useLocaleContext();
15
+ const { connectApi } = useSessionContext();
16
+
17
+ const requestPayment = () => {
18
+ const action = 'request-payment';
19
+ setResult(null);
20
+ connectApi.open({
21
+ locale,
22
+ action,
23
+ onSuccess(res) {
24
+ setResult(res.result);
25
+ },
26
+ messages: {
27
+ title: t('claims.requestPayment.connect.title'),
28
+ scan: t('claims.requestPayment.connect.scan'),
29
+ },
30
+ });
31
+ };
32
+
33
+ return (
34
+ <ConnectItem
35
+ title={t('claims.requestPayment.title')}
36
+ description={
37
+ <>
38
+ {t('claims.requestPayment.description')}
39
+
40
+ <Box>
41
+ {t('claims.requestPayment.takeTokenFromHere')}{' '}
42
+ <Link
43
+ href="https://faucet.abtnetwork.io"
44
+ target="_blank"
45
+ underline="hover"
46
+ sx={{
47
+ display: 'inline-flex',
48
+ alignItems: 'center',
49
+ gap: 0.5,
50
+ }}>
51
+ https://faucet.abtnetwork.io <Icon icon={iconOpenInNewRounded} />
52
+ </Link>
53
+ </Box>
54
+ </>
55
+ }
56
+ onClick={requestPayment}
57
+ result={
58
+ result ? (
59
+ <>
60
+ <InfoRow
61
+ name={t('claims.requestPayment.result.hash')}
62
+ value={
63
+ <Link
64
+ href={getExplorerUrl(result.hash)}
65
+ target="_blank"
66
+ underline="hover"
67
+ sx={{
68
+ display: 'inline-flex',
69
+ alignItems: 'center',
70
+ gap: 0.5,
71
+ }}>
72
+ {result.hash} <Icon icon={iconOpenInNewRounded} />
73
+ </Link>
74
+ }
75
+ />
76
+ <InfoRow name={t('claims.requestPayment.result.signature')} value={result.sig} />
77
+ </>
78
+ ) : null
79
+ }
80
+ />
81
+ );
82
+ }
@@ -0,0 +1,72 @@
1
+ import Avatar from '@arcblock/ux/lib/Avatar';
2
+ import { useLocaleContext } from '@arcblock/ux/lib/Locale/context';
3
+ import AccountBoxOutline from '@iconify-icons/material-symbols/account-box-outline';
4
+ import CakeOutlineRoundedIcon from '@iconify-icons/material-symbols/cake-outline-rounded';
5
+ import MailOutlineRoundedIcon from '@iconify-icons/material-symbols/mail-outline-rounded';
6
+ import PhoneOutlineRoundedIcon from '@iconify-icons/material-symbols/phone-android-outline-rounded';
7
+ import { Icon } from '@iconify/react';
8
+ import { useState } from 'react';
9
+
10
+ import { useSessionContext } from '../../libs/session';
11
+ import ConnectItem from '../connect-item';
12
+ import InfoRow from '../info-row';
13
+
14
+ export default function RequestProfile() {
15
+ const [result, setResult] = useState(null);
16
+ const { locale, t } = useLocaleContext();
17
+ const { connectApi } = useSessionContext();
18
+
19
+ const requestProfile = () => {
20
+ const action = 'request-profile';
21
+ setResult(null);
22
+ connectApi.open({
23
+ locale,
24
+ action,
25
+ onSuccess(res) {
26
+ if (res.result.avatar) {
27
+ res.result.avatar = res.result.avatar.replace(/[\r\n\s]/g, '');
28
+ }
29
+ setResult(res.result);
30
+ },
31
+ messages: {
32
+ title: t('claims.requestProfile.connect.title'),
33
+ scan: t('claims.requestProfile.connect.scan'),
34
+ },
35
+ });
36
+ };
37
+
38
+ return (
39
+ <ConnectItem
40
+ title={t('claims.requestProfile.title')}
41
+ description={t('claims.requestProfile.description')}
42
+ onClick={requestProfile}
43
+ result={
44
+ result ? (
45
+ <>
46
+ <Avatar variant="circle" src={result.avatar} did={result.did} size={60} />
47
+ <InfoRow
48
+ icon={<Icon fontSize={18} icon={AccountBoxOutline} />}
49
+ name={t('claims.requestProfile.result.fullName')}
50
+ value={result.fullName}
51
+ />
52
+ <InfoRow
53
+ icon={<Icon fontSize={18} icon={MailOutlineRoundedIcon} />}
54
+ name={t('claims.requestProfile.result.email')}
55
+ value={result.email}
56
+ />
57
+ <InfoRow
58
+ icon={<Icon fontSize={18} icon={PhoneOutlineRoundedIcon} />}
59
+ name={t('claims.requestProfile.result.phone')}
60
+ value={result.phone}
61
+ />
62
+ <InfoRow
63
+ icon={<Icon fontSize={18} icon={CakeOutlineRoundedIcon} />}
64
+ name={t('claims.requestProfile.result.birthday')}
65
+ value={result.birthday}
66
+ />
67
+ </>
68
+ ) : null
69
+ }
70
+ />
71
+ );
72
+ }
@@ -0,0 +1,44 @@
1
+ import { useLocaleContext } from '@arcblock/ux/lib/Locale/context';
2
+ import { useState } from 'react';
3
+
4
+ import { useSessionContext } from '../../libs/session';
5
+ import ConnectItem from '../connect-item';
6
+ import InfoRow from '../info-row';
7
+
8
+ export default function RequestTextSignature() {
9
+ const [result, setResult] = useState(null);
10
+ const { locale, t } = useLocaleContext();
11
+ const { connectApi } = useSessionContext();
12
+
13
+ const requestFn = () => {
14
+ const action = 'request-text-signature';
15
+ setResult(null);
16
+ connectApi.open({
17
+ locale,
18
+ action,
19
+ onSuccess(res) {
20
+ setResult(res.result);
21
+ },
22
+ messages: {
23
+ title: t('claims.requestTextSig.connect.title'),
24
+ scan: t('claims.requestTextSig.connect.scan'),
25
+ },
26
+ });
27
+ };
28
+
29
+ return (
30
+ <ConnectItem
31
+ title={t('claims.requestTextSig.title')}
32
+ description={t('claims.requestTextSig.description')}
33
+ onClick={requestFn}
34
+ result={
35
+ result ? (
36
+ <>
37
+ <InfoRow name={t('claims.requestTextSig.result.origin')} value={result.origin} />
38
+ <InfoRow name={t('claims.requestTextSig.result.signature')} value={result.sig} />
39
+ </>
40
+ ) : null
41
+ }
42
+ />
43
+ );
44
+ }
@@ -0,0 +1,44 @@
1
+ import { useLocaleContext } from '@arcblock/ux/lib/Locale/context';
2
+ import { useState } from 'react';
3
+
4
+ import { useSessionContext } from '../../libs/session';
5
+ import ConnectItem from '../connect-item';
6
+ import InfoRow from '../info-row';
7
+
8
+ export default function RequestTransactionSignature() {
9
+ const [result, setResult] = useState(null);
10
+ const { locale, t } = useLocaleContext();
11
+ const { connectApi } = useSessionContext();
12
+
13
+ const requestFn = () => {
14
+ const action = 'request-transaction-signature';
15
+ setResult(null);
16
+ connectApi.open({
17
+ locale,
18
+ action,
19
+ onSuccess(res) {
20
+ setResult(res.result);
21
+ },
22
+ messages: {
23
+ title: t('claims.requestTransactionSig.connect.title'),
24
+ scan: t('claims.requestTransactionSig.connect.scan'),
25
+ },
26
+ });
27
+ };
28
+
29
+ return (
30
+ <ConnectItem
31
+ title={t('claims.requestTransactionSig.title')}
32
+ description={t('claims.requestTransactionSig.description')}
33
+ onClick={requestFn}
34
+ result={
35
+ result ? (
36
+ <>
37
+ <InfoRow name={t('claims.requestTransactionSig.result.hash')} value={result.hash} />
38
+ <InfoRow name={t('claims.requestTransactionSig.result.signature')} value={result.sig} />
39
+ </>
40
+ ) : null
41
+ }
42
+ />
43
+ );
44
+ }
@@ -0,0 +1,39 @@
1
+ /* eslint-disable react/require-default-props */
2
+ import { Box, Typography } from '@mui/material';
3
+ import PropTypes from 'prop-types';
4
+
5
+ export default function InfoRow({ icon = null, name, value }) {
6
+ return (
7
+ <Typography variant="body1" color="text.primary" gutterBottom sx={{ display: 'flex', alignItems: 'center' }}>
8
+ <Box
9
+ sx={{
10
+ display: 'inline-flex',
11
+ alignItems: 'center',
12
+ gap: 0.5,
13
+ mr: 0.75,
14
+ flexShrink: 0,
15
+ '&:after': {
16
+ content: '":"',
17
+ ml: -0.25,
18
+ },
19
+ }}>
20
+ {icon}
21
+ {name}
22
+ </Box>
23
+ <Typography
24
+ component="span"
25
+ color="text.secondary"
26
+ sx={{
27
+ wordBreak: 'break-word',
28
+ }}>
29
+ {value}
30
+ </Typography>
31
+ </Typography>
32
+ );
33
+ }
34
+
35
+ InfoRow.propTypes = {
36
+ icon: PropTypes.any,
37
+ name: PropTypes.any.isRequired,
38
+ value: PropTypes.any.isRequired,
39
+ };