@abtnode/blocklet-services 1.16.8-beta-186fd5aa → 1.16.8-beta-7d175032

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.
@@ -2,9 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const jsx_runtime_1 = require("react/jsx-runtime");
4
4
  const components_1 = require("@react-email/components");
5
+ const chain_1 = require("../libs/chain");
5
6
  function Asset({ locale, data, }) {
6
7
  const title = { zh: '接收', en: 'Received' }[locale] || 'Received';
7
- return ((0, jsx_runtime_1.jsxs)(components_1.Section, Object.assign({ style: assetStyle }, { children: [(0, jsx_runtime_1.jsxs)(components_1.Row, Object.assign({ style: titleStyle }, { children: [(0, jsx_runtime_1.jsx)(components_1.Column, { children: title }), (0, jsx_runtime_1.jsxs)(components_1.Column, Object.assign({ align: "right", style: summaryStyle }, { children: ["+", data.amount || 1, " Asset"] }))] })), (0, jsx_runtime_1.jsx)(components_1.Text, Object.assign({ style: remarkStyle }, { children: data.address }))] })));
8
+ const chainHost = data.chainHost || (0, chain_1.getChainHost)(data.chainId);
9
+ const url = `https://${chainHost}/explorer/assets/${data.did}`;
10
+ return ((0, jsx_runtime_1.jsxs)("a", Object.assign({ href: url, target: "_blank", style: Object.assign(Object.assign({}, assetStyle), { margin: '1em 0', textDecoration: 'none', color: 'initial', display: 'block' }) }, { children: [(0, jsx_runtime_1.jsxs)(components_1.Row, Object.assign({ style: titleStyle }, { children: [(0, jsx_runtime_1.jsx)(components_1.Column, { children: title }), (0, jsx_runtime_1.jsx)(components_1.Column, Object.assign({ align: "right", style: summaryStyle }, { children: "+1 Asset" }))] })), (0, jsx_runtime_1.jsx)(components_1.Text, Object.assign({ style: remarkStyle }, { children: data.did }))] })));
8
11
  }
9
12
  exports.default = Asset;
10
13
  const assetStyle = {
@@ -32,10 +32,10 @@ function Attachments({ locale, severity = 'normal', attachments = [], }) {
32
32
  case 'divider':
33
33
  return (0, jsx_runtime_1.jsx)(components_1.Hr, {});
34
34
  // case 'vc':
35
- case 'nft':
36
- return (0, jsx_runtime_1.jsx)(asset_1.default, { data: { address: item.data.did }, locale: locale });
35
+ case 'asset':
36
+ return (0, jsx_runtime_1.jsx)(asset_1.default, { data: item.data, locale: locale });
37
37
  case 'section':
38
- return (0, jsx_runtime_1.jsx)(compose_1.default, { data: item.fileds });
38
+ return (0, jsx_runtime_1.jsx)(compose_1.default, { data: item.fields });
39
39
  default:
40
40
  return null;
41
41
  }
@@ -2,10 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const jsx_runtime_1 = require("react/jsx-runtime");
4
4
  const components_1 = require("@react-email/components");
5
+ const chain_1 = require("../libs/chain");
5
6
  function Token({ locale, data, }) {
6
7
  const showAddress = data.address.slice(0, 4) + '...' + data.address.slice(-4);
8
+ const from = { zh: '来自', en: 'from' }[locale] || 'from';
7
9
  const title = { zh: '接收', en: 'Received' }[locale] || 'Received';
8
- return ((0, jsx_runtime_1.jsxs)(components_1.Section, Object.assign({ style: assetStyle }, { children: [(0, jsx_runtime_1.jsxs)(components_1.Row, Object.assign({ style: titleStyle }, { children: [(0, jsx_runtime_1.jsx)(components_1.Column, { children: title }), (0, jsx_runtime_1.jsxs)(components_1.Column, Object.assign({ align: "right", style: summaryStyle }, { children: ["+", data.amount, " ", data.symbol] }))] })), (0, jsx_runtime_1.jsxs)(components_1.Text, Object.assign({ style: remarkStyle }, { children: ["from ", showAddress] }))] })));
10
+ const chainHost = data.chainHost || (0, chain_1.getChainHost)(data.chainId);
11
+ const url = `https://${chainHost}/explorer/tokens/${data.address}/tx`;
12
+ return ((0, jsx_runtime_1.jsxs)("a", Object.assign({ href: url, target: "_blank", style: Object.assign(Object.assign({}, assetStyle), { margin: '1em 0', textDecoration: 'none', color: 'initial', display: 'block' }) }, { children: [(0, jsx_runtime_1.jsxs)(components_1.Row, Object.assign({ style: titleStyle }, { children: [(0, jsx_runtime_1.jsx)(components_1.Column, { children: title }), (0, jsx_runtime_1.jsxs)(components_1.Column, Object.assign({ align: "right", style: summaryStyle }, { children: ["+", data.amount, " ", data.symbol] }))] })), (0, jsx_runtime_1.jsxs)(components_1.Text, Object.assign({ style: remarkStyle }, { children: [from, " ", showAddress] }))] })));
9
13
  }
10
14
  exports.default = Token;
11
15
  const assetStyle = {
@@ -24,7 +28,6 @@ const remarkStyle = {
24
28
  };
25
29
  const summaryStyle = {
26
30
  color: '#49c3ad',
27
- // float: 'right',
28
31
  };
29
32
  const titleStyle = {
30
33
  marginBottom: '6px',
@@ -1,16 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const jsx_runtime_1 = require("react/jsx-runtime");
4
+ const chain_1 = require("../libs/chain");
4
5
  function Transaction({ locale, data, }) {
5
- const chainMap = {
6
- beta: 'beta.abtnetwork.io',
7
- main: 'main.abtnetwork.io',
8
- };
9
- const host = 'explorer.arcblockio.cn';
10
- const chianHost = chainMap[data.chainId] || host;
11
- const url = `https://${chianHost}/explorer/txs/${data.hash}`;
6
+ const chainHost = (0, chain_1.getChainHost)(data.chainId);
7
+ const url = `https://${chainHost}/explorer/txs/${data.hash}`;
12
8
  const title = { zh: '交易详情', en: 'Transaction Details' }[locale] || 'Transaction Details';
13
9
  const subTitle = { zh: '交易哈希', en: 'Transaction Hash' }[locale] || 'Transaction Hash';
14
- return ((0, jsx_runtime_1.jsxs)("a", Object.assign({ href: url, target: "_blank", style: { margin: '1em 0', textDecoration: 'none', color: 'initial' } }, { children: [(0, jsx_runtime_1.jsx)("h6", Object.assign({ style: { color: '#a5a5a5', margin: 0 } }, { children: host })), (0, jsx_runtime_1.jsx)("p", Object.assign({ style: { color: '#4598fa', margin: '6px 0' } }, { children: title })), (0, jsx_runtime_1.jsxs)("div", { children: [subTitle, ": ", data.hash] })] })));
10
+ return ((0, jsx_runtime_1.jsxs)("a", Object.assign({ href: url, target: "_blank", style: { margin: '1em 0', textDecoration: 'none', color: 'initial' } }, { children: [(0, jsx_runtime_1.jsx)("h6", Object.assign({ style: { color: '#a5a5a5', margin: 0 } }, { children: chainHost })), (0, jsx_runtime_1.jsx)("p", Object.assign({ style: { color: '#4598fa', margin: '6px 0' } }, { children: title })), (0, jsx_runtime_1.jsxs)("div", { children: [subTitle, ": ", data.hash] })] })));
15
11
  }
16
12
  exports.default = Transaction;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getChainHost = void 0;
4
+ function getChainHost(chainId) {
5
+ const defaultHost = 'explorer.arcblockio.cn';
6
+ if (!chainId)
7
+ return defaultHost;
8
+ const chainMap = {
9
+ beta: 'beta.abtnetwork.io',
10
+ main: 'main.abtnetwork.io',
11
+ };
12
+ const chainHost = chainMap[chainId] || defaultHost;
13
+ return chainHost;
14
+ }
15
+ exports.getChainHost = getChainHost;
@@ -30,6 +30,7 @@ const {
30
30
  createPassportVC,
31
31
  createPassport,
32
32
  upsertToPassports,
33
+ getPassportClaimUrl,
33
34
  } = require('@abtnode/auth/lib/passport');
34
35
  const { getKeyPairClaim, getAuthPrincipalForMigrateAppToV2 } = require('@abtnode/auth/lib/server');
35
36
  const merge = require('lodash/merge');
@@ -131,7 +132,7 @@ const checkAppOwner = ({ role, blocklet, userDid, locale = 'en' }) => {
131
132
 
132
133
  module.exports = {
133
134
  login: {
134
- onConnect: async ({ node, request, userDid, locale, passportId = '', componentId, action }) => {
135
+ onConnect: async ({ node, request, userDid, locale, passportId = '', componentId, action, baseUrl }) => {
135
136
  const blocklet = await request.getBlocklet();
136
137
  const config = await request.getServiceConfig(NODE_SERVICES.AUTH, { componentId });
137
138
  const { did: teamDid, wallet: blockletWallet } = await request.getBlockletInfo();
@@ -155,6 +156,7 @@ module.exports = {
155
156
  item: vcTypes,
156
157
  trustedIssuers,
157
158
  optional: !invitedUserOnly,
159
+ claimUrl: getPassportClaimUrl(baseUrl),
158
160
  };
159
161
  if (passportId) {
160
162
  claims.verifiableCredential.target = passportId;
@@ -513,7 +515,7 @@ module.exports = {
513
515
  },
514
516
 
515
517
  switchPassport: {
516
- onConnect: async ({ node, request, locale, userDid, previousUserDid, componentId }) => {
518
+ onConnect: async ({ node, request, locale, userDid, previousUserDid, componentId, baseUrl }) => {
517
519
  if (userDid && previousUserDid && userDid !== previousUserDid) {
518
520
  throw new Error(messages.userMismatch[locale]);
519
521
  }
@@ -553,6 +555,7 @@ module.exports = {
553
555
  item: vcTypes,
554
556
  trustedIssuers,
555
557
  optional: !invitedUserOnly,
558
+ claimUrl: getPassportClaimUrl(baseUrl),
556
559
  },
557
560
  };
558
561
  },
@@ -870,7 +873,7 @@ module.exports = {
870
873
  authPrincipal: getAuthPrincipalForMigrateAppToV2(node),
871
874
  },
872
875
  {
873
- verifiableCredential: async ({ extraParams: { locale }, context: { request } }) => {
876
+ verifiableCredential: async ({ extraParams: { locale }, context: { request, baseUrl } }) => {
874
877
  const blocklet = await request.getBlocklet();
875
878
  const { wallet } = await request.getBlockletInfo();
876
879
 
@@ -883,6 +886,7 @@ module.exports = {
883
886
  item: vcTypes,
884
887
  trustedIssuers,
885
888
  optional: false,
889
+ claimUrl: getPassportClaimUrl(baseUrl),
886
890
  };
887
891
  },
888
892
  keyPair: getKeyPairClaim(node, { declare: false }),
package/api/libs/email.js CHANGED
@@ -13,7 +13,7 @@ const schemaEmail = Joi.string().email().required();
13
13
 
14
14
  const validateEmail = schemaEmail.validateAsync.bind(schemaEmail);
15
15
 
16
- async function sendEmail(receiver, notification, { teamDid, node }) {
16
+ async function sendEmail(receiver, notification, { teamDid, node, locale }) {
17
17
  if (!receiver) {
18
18
  throw new Error('receiver is required');
19
19
  }
@@ -54,14 +54,18 @@ async function sendEmail(receiver, notification, { teamDid, node }) {
54
54
  url,
55
55
  };
56
56
 
57
- // TODO: @zhanghan notification 目前并没有 locale 信息,无法实现多 locale 提示
58
- const subject = `[${appInfo.title}] ${notification.title || 'You have received a notification'}`;
57
+ const subject = `[${appInfo.title}] ${
58
+ notification.title ||
59
+ { zh: '您收到了一个通知', en: 'You have received a notification' }[locale] ||
60
+ 'You have received a notification'
61
+ }`;
59
62
 
60
63
  const html = render(
61
64
  NotificationEmail({
62
65
  subject,
63
66
  ...notification,
64
67
  appInfo,
68
+ locale,
65
69
  })
66
70
  );
67
71
  const emailData = {
@@ -7,8 +7,8 @@ const { onConnect, onApprove } = login;
7
7
  module.exports = function createRoutes(node, authenticator, createSessionToken) {
8
8
  return {
9
9
  action: 'login',
10
- onConnect: async ({ req, userDid, extraParams: { locale, passportId = '', componentId } }) => {
11
- return onConnect({ node, request: req, userDid, locale, passportId, componentId, action: 'login' });
10
+ onConnect: async ({ req, userDid, extraParams: { locale, passportId = '', componentId }, baseUrl }) => {
11
+ return onConnect({ node, request: req, userDid, locale, passportId, componentId, action: 'login', baseUrl });
12
12
  },
13
13
 
14
14
  onAuth: async ({
@@ -5,13 +5,14 @@ const { onConnect, onApprove } = switchPassport;
5
5
  module.exports = function createRoutes(node, authenticator, createSessionToken) {
6
6
  return {
7
7
  action: 'switch-passport',
8
- onConnect: async ({ req, userDid, extraParams: { locale, connectedDid } }) => {
8
+ onConnect: async ({ req, userDid, baseUrl, extraParams: { locale, connectedDid } }) => {
9
9
  return onConnect({
10
10
  node,
11
11
  request: req,
12
12
  locale,
13
13
  userDid,
14
14
  previousUserDid: connectedDid,
15
+ baseUrl,
15
16
  });
16
17
  },
17
18
 
@@ -58,7 +58,10 @@ const sendToDid = async ({ sender, receiver: rawDid, notification, options, node
58
58
  if (receiverEmail) {
59
59
  try {
60
60
  await validateEmail(receiverEmail);
61
- receiverEmailList.push(receiverEmail);
61
+ receiverEmailList.push({
62
+ email: receiverEmail,
63
+ locale: userInfoItem?.locale || 'en',
64
+ });
62
65
  } catch {
63
66
  /* empty */
64
67
  }
@@ -94,9 +97,11 @@ const sendToDid = async ({ sender, receiver: rawDid, notification, options, node
94
97
  // NOTICE: 目前只有 notification 的通知能够发送邮件,并且 type 可能为 undefined
95
98
  if ([undefined, NOTIFICATION_TYPES.NOTIFICATION].includes(data.type)) {
96
99
  for (const receiverEmail of receiverEmailList) {
97
- sendEmail(receiverEmail, data, { teamDid: sender.appDid, node }).catch((error) => {
98
- logger.error('Failed to send email', { error });
99
- });
100
+ sendEmail(receiverEmail.email, data, { teamDid: sender.appDid, node, locale: receiverEmail.locale }).catch(
101
+ (error) => {
102
+ logger.error('Failed to send email', { error });
103
+ }
104
+ );
100
105
  }
101
106
  }
102
107
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "/.blocklet/proxy/blocklet-service/static/css/main.632501d5.css",
4
- "main.js": "/.blocklet/proxy/blocklet-service/static/js/main.94c49b7d.js",
4
+ "main.js": "/.blocklet/proxy/blocklet-service/static/js/main.3b0044ad.js",
5
5
  "static/js/716.0d2a2d32.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/716.0d2a2d32.chunk.js",
6
6
  "static/js/359.c47779c2.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/359.c47779c2.chunk.js",
7
7
  "static/js/255.279b1bca.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/255.279b1bca.chunk.js",
@@ -10,7 +10,7 @@
10
10
  "static/js/460.df719a3e.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/460.df719a3e.chunk.js",
11
11
  "static/js/868.ac8df3a0.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/868.ac8df3a0.chunk.js",
12
12
  "static/js/547.03d5d719.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/547.03d5d719.chunk.js",
13
- "static/js/343.6fc2089d.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/343.6fc2089d.chunk.js",
13
+ "static/js/343.4fd3d628.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/343.4fd3d628.chunk.js",
14
14
  "static/js/682.a8bf723a.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/682.a8bf723a.chunk.js",
15
15
  "static/js/711.56427a24.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/711.56427a24.chunk.js",
16
16
  "static/js/437.075e8453.chunk.js": "/.blocklet/proxy/blocklet-service/static/js/437.075e8453.chunk.js",
@@ -45,7 +45,7 @@
45
45
  "router-template-styles/styles.css": "/.blocklet/proxy/blocklet-service/router-template-styles/styles.css",
46
46
  "index.html": "/.blocklet/proxy/blocklet-service/index.html",
47
47
  "main.632501d5.css.map": "/.blocklet/proxy/blocklet-service/static/css/main.632501d5.css.map",
48
- "main.94c49b7d.js.map": "/.blocklet/proxy/blocklet-service/static/js/main.94c49b7d.js.map",
48
+ "main.3b0044ad.js.map": "/.blocklet/proxy/blocklet-service/static/js/main.3b0044ad.js.map",
49
49
  "716.0d2a2d32.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/716.0d2a2d32.chunk.js.map",
50
50
  "359.c47779c2.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/359.c47779c2.chunk.js.map",
51
51
  "255.279b1bca.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/255.279b1bca.chunk.js.map",
@@ -54,7 +54,7 @@
54
54
  "460.df719a3e.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/460.df719a3e.chunk.js.map",
55
55
  "868.ac8df3a0.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/868.ac8df3a0.chunk.js.map",
56
56
  "547.03d5d719.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/547.03d5d719.chunk.js.map",
57
- "343.6fc2089d.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/343.6fc2089d.chunk.js.map",
57
+ "343.4fd3d628.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/343.4fd3d628.chunk.js.map",
58
58
  "682.a8bf723a.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/682.a8bf723a.chunk.js.map",
59
59
  "711.56427a24.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/711.56427a24.chunk.js.map",
60
60
  "437.075e8453.chunk.js.map": "/.blocklet/proxy/blocklet-service/static/js/437.075e8453.chunk.js.map",
@@ -70,6 +70,6 @@
70
70
  },
71
71
  "entrypoints": [
72
72
  "static/css/main.632501d5.css",
73
- "static/js/main.94c49b7d.js"
73
+ "static/js/main.3b0044ad.js"
74
74
  ]
75
75
  }
package/build/index.html CHANGED
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"/><meta name="theme-color" content="#000000"/><title>Blocklet Service</title><script src=".well-known/service/api/env"></script><script src="/__blocklet__.js"></script><script defer="defer" src="/.blocklet/proxy/blocklet-service/static/js/main.94c49b7d.js"></script><link href="/.blocklet/proxy/blocklet-service/static/css/main.632501d5.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0"/><meta name="theme-color" content="#000000"/><title>Blocklet Service</title><script src=".well-known/service/api/env"></script><script src="/__blocklet__.js"></script><script defer="defer" src="/.blocklet/proxy/blocklet-service/static/js/main.3b0044ad.js"></script><link href="/.blocklet/proxy/blocklet-service/static/css/main.632501d5.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>