@abtnode/blocklet-services 1.16.41-beta-20250318-123609-b48bb2d7 → 1.16.41-beta-20250319-131732-1224cca5
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/api/libs/email.js +78 -58
- package/api/libs/open-graph/index.js +21 -11
- package/api/libs/open-graph/template.js +41 -2
- package/api/services/auth/connect/receive-transfer-app-owner.js +15 -3
- package/api/services/kyc/index.js +1 -0
- package/api/socket/channel/did.js +2 -1
- package/dist/assets/{ArrowDropDown-Do4OWmCn.js → ArrowDropDown-ydRfHJ2x.js} +1 -1
- package/dist/assets/{CheckCircle-DDHElFhm.js → CheckCircle-DgSwRUf8.js} +1 -1
- package/dist/assets/{ChevronLeft-CLfrYODg.js → ChevronLeft-CqDoHwdJ.js} +1 -1
- package/dist/assets/{ChevronRight-OJJ2SUEU.js → ChevronRight-Bpkf9aqI.js} +1 -1
- package/dist/assets/{DeleteOutline-C954mj84.js → DeleteOutline-D4DYIaUj.js} +1 -1
- package/dist/assets/{Done-BXwXbLQs.js → Done-B8c93MpP.js} +1 -1
- package/dist/assets/{Download-OmIe8_8C.js → Download-DANYdeZR.js} +1 -1
- package/dist/assets/{Error-CXMTbOyQ.js → Error-wKO1hXtU.js} +1 -1
- package/dist/assets/{ExpandLess-xJAJmJam.js → ExpandLess-BqrBuxL9.js} +1 -1
- package/dist/assets/{Google-jC4aGgA_.js → Google-CBPWeaVC.js} +4 -4
- package/dist/assets/{InfoOutlined-Dto4CBtr.js → InfoOutlined-HP5LuELQ.js} +1 -1
- package/dist/assets/{Launch-Do09YVNX.js → Launch-XvyEoGhF.js} +1 -1
- package/dist/assets/{LaunchOutlined-DyT6-6Gt.js → LaunchOutlined-BfbVRiJT.js} +1 -1
- package/dist/assets/{MoreHoriz-CU3bPiks.js → MoreHoriz-Cv3BqpRU.js} +1 -1
- package/dist/assets/{PlayArrow-DsdnOq2p.js → PlayArrow-DI84Lay5.js} +1 -1
- package/dist/assets/{ViewList-B2mYqtoR.js → ViewList-DLzG9ldE.js} +1 -1
- package/dist/assets/{access-control-BWBOA4g6.js → access-control-DM5bKXj8.js} +1 -1
- package/dist/assets/{actions-4OuC0GHy.js → actions-CBPbCBQc.js} +1 -1
- package/dist/assets/add-component-core-BGLFE6FF.js +765 -0
- package/dist/assets/add-resource-CTONcgV6.js +1 -0
- package/dist/assets/{addon-D4YcNftH.js → addon-bbJfiLal.js} +1 -1
- package/dist/assets/{analytics-BZzzJZSo.js → analytics-jwKnm2P5.js} +1 -1
- package/dist/assets/api-CvDkueg1.js +1 -0
- package/dist/assets/{ar-BVbwKJY8.js → ar-A7PXaQSB.js} +1 -1
- package/dist/assets/{audit-logs-JO59CyGM.js → audit-logs-BSAndjyr.js} +1 -1
- package/dist/assets/{base32-BjPUfmet.js → base32-gJJTbpiB.js} +1 -1
- package/dist/assets/{branding-CR1e2n6E.js → branding-Ds6v3n-A.js} +2 -2
- package/dist/assets/{bundle-avatar-Chdo4m6E.js → bundle-avatar-C4EBeG0M.js} +1 -1
- package/dist/assets/{button-BSP6Y6OJ.js → button-BqyvGZC-.js} +1 -1
- package/dist/assets/{click-to-copy-fQS5t8fq.js → click-to-copy-Dc16fHKA.js} +1 -1
- package/dist/assets/{complete--VG1kQVy.js → complete-B5CCv5xy.js} +1 -1
- package/dist/assets/{component-DfQn7Awf.js → component-B2RHEZO0.js} +1 -1
- package/dist/assets/{config-mzUmZpxy.js → config-C3tQWDAE.js} +1 -1
- package/dist/assets/{config-C-1jeE31.js → config-CkTkraLZ.js} +1 -1
- package/dist/assets/config-navigation-Cy2R-qEJ.js +29 -0
- package/dist/assets/{config-space-6wpekLZ1.js → config-space-BjgJ--W4.js} +1 -1
- package/dist/assets/{confirm-CVR4a5FI.js → confirm-BaiaCWsM.js} +1 -1
- package/dist/assets/{connect-DG6frz_Q.js → connect-RNS66o1f.js} +1 -1
- package/dist/assets/{connect-D_mrUgoL.js → connect-mVRf-ABx.js} +1 -1
- package/dist/assets/{connect-to-BhxyRPHq.js → connect-to-CChFecmc.js} +1 -1
- package/dist/assets/{dashboard-DE28EHHN.js → dashboard-BUwFD31P.js} +3 -3
- package/dist/assets/{de-nWUnqN3q.js → de-DQLOqs4x.js} +1 -1
- package/dist/assets/{delete-confirm-CCY-Xpk5.js → delete-confirm-Bh6Ch3bf.js} +1 -1
- package/dist/assets/{did-address-Dx-4WAXQ.js → did-address-DIKoCoBp.js} +1 -1
- package/dist/assets/{domain-DHb1Ps_o.js → domain-D2juCz3R.js} +1 -1
- package/dist/assets/{domain-action-card-BNfDBQhX.js → domain-action-card-C_--u5r9.js} +1 -1
- package/dist/assets/domains-vqaJZbX-.js +1 -0
- package/dist/assets/{email-B20szkwm.js → email-DKMhmT65.js} +1 -1
- package/dist/assets/{es-C7damQG2.js → es-Wyib4tkS.js} +1 -1
- package/dist/assets/{exchange-passport-DbZWgurv.js → exchange-passport-BMfAdTZi.js} +1 -1
- package/dist/assets/{form-text-input-BTiyCo4F.js → form-text-input-BKnTJYUO.js} +1 -1
- package/dist/assets/{fr-D3MUmftb.js → fr-CTdi8lPh.js} +1 -1
- package/dist/assets/{fuel-SLm_JOs-.js → fuel-DGFl2kVF.js} +1 -1
- package/dist/assets/{fullpage-50xw6Dda.js → fullpage-kiX9qo3H.js} +1 -1
- package/dist/assets/{get-safe-url-C42wIqi-.js → get-safe-url-BvS0hy8W.js} +1 -1
- package/dist/assets/{get-safe-url-Cn4KEro2.js → get-safe-url-CXJBjnNj.js} +1 -1
- package/dist/assets/{hi-DLH2NuCr.js → hi-Dk3MVpw6.js} +1 -1
- package/dist/assets/{home-CUlFLl78.js → home-CfRR-l78.js} +1 -1
- package/dist/assets/{id-C_OpwsKG.js → id-BqyOVEFD.js} +1 -1
- package/dist/assets/{iframe-BfxIVBTL.js → iframe-C0FAfo1V.js} +1 -1
- package/dist/assets/{index-CPUTxynZ.js → index-B4PgdoaR.js} +14 -14
- package/dist/assets/{index-DNxvGCUa.js → index-BlGUkC5j.js} +1 -1
- package/dist/assets/{index-Do_PTy2g.js → index-C8sg0Ts_.js} +9 -9
- package/dist/assets/{index-DOilqSvA.js → index-CHzM6Ehl.js} +1 -1
- package/dist/assets/{index-B6Y7SW3z.js → index-Co79YnZI.js} +1 -1
- package/dist/assets/{index-mkd7rmEP.js → index-D-RS3D7s.js} +1 -1
- package/dist/assets/{index-F9fg_Rq5.js → index-D5rqbUOM.js} +1 -1
- package/dist/assets/{index-CbiypPHS.js → index-DF1FIm9G.js} +1 -1
- package/dist/assets/{index-xfe9Dcxz.js → index-DMqGxTc4.js} +1 -1
- package/dist/assets/{index-D_zMGAKU.js → index-DQKEK30u.js} +1 -1
- package/dist/assets/{index-BCtCJuih.js → index-DRzvuBvI.js} +1 -1
- package/dist/assets/index-DneJ5oOQ.js +220 -0
- package/dist/assets/{index-CyTMvqg2.js → index-DsfwDSo4.js} +1 -1
- package/dist/assets/{index-CKGdCheG.js → index-DxtGslY8.js} +1 -1
- package/dist/assets/{index-DI6dvNrm.js → index-Hc4fe8tE.js} +1 -1
- package/dist/assets/{index-BFV3n5Hy.js → index-okPJPuPc.js} +1 -1
- package/dist/assets/{index-D3BxoukB.js → index-wWAZioAD.js} +1 -1
- package/dist/assets/{invitation-BuB1-TxL.js → invitation-3fNTl35Q.js} +1 -1
- package/dist/assets/{invite-C8_Fxnwn.js → invite-vSXLKXaC.js} +1 -1
- package/dist/assets/{issue-passport-BjcOuQDv.js → issue-passport-iTVcPmbK.js} +1 -1
- package/dist/assets/{item-3tNefK7M.js → item-BKw13HQ1.js} +1 -1
- package/dist/assets/{ja-rh-7J19i.js → ja-BIiN349J.js} +1 -1
- package/dist/assets/{ko-DxXSLIu1.js → ko-D9z_sjE3.js} +1 -1
- package/dist/assets/{layout-ceT4Awul.js → layout-MdeSR5MO.js} +1 -1
- package/dist/assets/{list-BaQMMWrO.js → list-BYBgvMRq.js} +2 -1
- package/dist/assets/localization-Cf41fenL.js +1 -0
- package/dist/assets/{log-CNHqg8uo.js → log-Djo2s0oZ.js} +1 -1
- package/dist/assets/{login-DXKAfWij.js → login-BqLbwYZb.js} +1 -1
- package/dist/assets/{login-oauth-callback-20hVf_bH.js → login-oauth-callback-DAKHXtVv.js} +1 -1
- package/dist/assets/{logo-uploader-Dh1aL_OF.js → logo-uploader-DtUHte5C.js} +3 -3
- package/dist/assets/{lost-passport-CZEU6dJY.js → lost-passport-C_dlQRA5.js} +1 -1
- package/dist/assets/{omit-BySqlv7K.js → omit-DVwO9e3E.js} +1 -1
- package/dist/assets/{open-window-D4nELhWH.js → open-window-yeboX1Ru.js} +1 -1
- package/dist/assets/{overview-xXsfHZEs.js → overview-Ct6FaHVl.js} +1 -1
- package/dist/assets/{page-header-C2MPWR-H.js → page-header-DyeTxe1U.js} +1 -1
- package/dist/assets/{permission-DXzAY72t.js → permission-ZvUR5Tj-.js} +1 -1
- package/dist/assets/{preferences-D2Jg5k10.js → preferences-Dx29Tgc2.js} +1 -1
- package/dist/assets/{profile-embed-BDQR5OIg.js → profile-embed-C_yYlnVt.js} +1 -1
- package/dist/assets/{pt-q0ZSfFth.js → pt-DbNy95wU.js} +1 -1
- package/dist/assets/publish-resource-wn5vCulN.js +1 -0
- package/dist/assets/{react-beautiful-dnd.esm-Z01y4hUy.js → react-beautiful-dnd.esm-DcDZ_Ghe.js} +1 -1
- package/dist/assets/{relative-time-wZZM9yTU.js → relative-time-CYqHHkvJ.js} +1 -1
- package/dist/assets/{ru-CK3mPXUk.js → ru-BEliZjDL.js} +1 -1
- package/dist/assets/sdk-CVa22Xgm.js +1 -0
- package/dist/assets/{session-BcGa2Lwu.js → session-CD9NaM-v.js} +1 -1
- package/dist/assets/setup-BDulmyU9.js +19 -0
- package/dist/assets/{start-nMBbzJog.js → start-CUVz5ZKQ.js} +1 -1
- package/dist/assets/{status-CW8cLZwc.js → status-i0njxvUg.js} +1 -1
- package/dist/assets/{step-actions-D4sVdJ5W.js → step-actions-Zukntbkg.js} +1 -1
- package/dist/assets/{studio-oozJB1Q3.js → studio-Cb_GlvSi.js} +1 -1
- package/dist/assets/{switch-control-G4nR-MQG.js → switch-control-CJ1duVKM.js} +1 -1
- package/dist/assets/{th-DBezSIJU.js → th-KPXdcBJ0.js} +1 -1
- package/dist/assets/{traffic-ChHSyQUx.js → traffic-DBvn8sNu.js} +1 -1
- package/dist/assets/{transfer-AGCuXVp7.js → transfer-DLvipuQf.js} +1 -1
- package/dist/assets/{unsubscribe-D2HmFcyp.js → unsubscribe-Nax9Uwlj.js} +1 -1
- package/dist/assets/{useAsync-CDzQ0uN6.js → useAsync-D2OhgEkV.js} +1 -1
- package/dist/assets/{useAsyncRetry-CcF3e_P6.js → useAsyncRetry-CEJwVPZ6.js} +1 -1
- package/dist/assets/{useLocalStorage-Nwt6lPBi.js → useLocalStorage-CtbpqE0c.js} +1 -1
- package/dist/assets/{user-center-Q-dkmQTy.js → user-center-dlERaSQ2.js} +1 -1
- package/dist/assets/{util-ChHwCleX.js → util-CzgwETtC.js} +1 -1
- package/dist/assets/{util-DfhJqpch.js → util-DHw5muRJ.js} +1 -1
- package/dist/assets/{vendor-arcblock-BkdpkIRL.js → vendor-arcblock-E5QJEgSK.js} +1 -1
- package/dist/assets/{vendor-hooks-DbRTDIFw.js → vendor-hooks-CYyfK9g3.js} +1 -1
- package/dist/assets/{vendor-utils-DJ1bmiuG.js → vendor-utils-CbeKtci8.js} +1 -1
- package/dist/assets/{vendor-ux-did-connect-BUS40ceY.js → vendor-ux-did-connect-D75Zatzm.js} +44 -44
- package/dist/assets/{vi-hjA0ec5w.js → vi-ChkGdSKU.js} +1 -1
- package/dist/assets/wrap-locale-gZlt-kQa.js +1 -0
- package/dist/assets/{zh-BIwal6DF.js → zh-DDAGRLEd.js} +1 -1
- package/dist/assets/{zh-tw-Bj9DYpoo.js → zh-tw-DIWT2k6_.js} +1 -1
- package/dist/images/banner.png +0 -0
- package/dist/index.html +5 -5
- package/dist/service-worker.js +1 -1
- package/package.json +28 -28
- package/dist/assets/add-component-core-BJzkE6_k.js +0 -765
- package/dist/assets/add-resource-CFUb5VgO.js +0 -1
- package/dist/assets/api-D2GjOmnt.js +0 -1
- package/dist/assets/cloneDeep-SKWOTeUJ.js +0 -1
- package/dist/assets/config-navigation-Dm_JpS-L.js +0 -26
- package/dist/assets/domains-CO5BsFN8.js +0 -1
- package/dist/assets/index-Bm1Z6vIr.js +0 -220
- package/dist/assets/localization-UtRmFKb1.js +0 -1
- package/dist/assets/publish-resource-DDV8cXFW.js +0 -1
- package/dist/assets/sdk-msG4TyIo.js +0 -1
- package/dist/assets/setup-C9iZjtRd.js +0 -19
- package/dist/assets/wrap-locale-DnXm9Rv3.js +0 -1
package/api/libs/email.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
const { Joi } = require('@arcblock/validator');
|
|
2
2
|
const { render } = require('@react-email/components');
|
|
3
|
-
const { emailConfigSchema } = require('@blocklet/sdk/lib/validators/email');
|
|
4
3
|
const getBlockletInfo = require('@blocklet/meta/lib/info');
|
|
5
|
-
const
|
|
4
|
+
const { getEmailServiceProvider } = require('@abtnode/auth/lib/email');
|
|
5
|
+
const { sendEmailWithLauncher } = require('@abtnode/auth/lib/launcher');
|
|
6
6
|
|
|
7
7
|
const logger = require('./logger')('blocklet-services:notification');
|
|
8
8
|
const { NotificationEmail } = require('../emails/pages/notification');
|
|
@@ -15,7 +15,7 @@ const validateEmail = schemaEmail.validateAsync.bind(schemaEmail);
|
|
|
15
15
|
async function sendEmail(
|
|
16
16
|
receiver,
|
|
17
17
|
notification,
|
|
18
|
-
{ teamDid, node, locale, unsubscribeToken = '', userInfo = {}, raw = false }
|
|
18
|
+
{ teamDid, node, locale, unsubscribeToken = '', userInfo = {}, raw = false, launcher = false }
|
|
19
19
|
) {
|
|
20
20
|
if (!receiver) {
|
|
21
21
|
throw new Error('receiver is required');
|
|
@@ -30,68 +30,88 @@ async function sendEmail(
|
|
|
30
30
|
logger.warn(`Failed to get blocklet: ${teamDid}`);
|
|
31
31
|
throw new Error(`Failed to get blocklet: ${teamDid}`);
|
|
32
32
|
}
|
|
33
|
-
const config = blocklet.settings?.notification?.email || {};
|
|
34
33
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
const provider = getEmailServiceProvider(blocklet);
|
|
35
|
+
logger.debug('service.sendEmail', { teamDid, provider, raw, launcher });
|
|
36
|
+
if (!provider || (provider === 'launcher' && !launcher)) {
|
|
37
|
+
throw new Error('Email Service is not available.');
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
if (provider === 'service') {
|
|
41
|
+
const config = blocklet.settings?.notification?.email;
|
|
42
|
+
const info = getBlockletInfo(blocklet);
|
|
43
|
+
const logo = `${info.appUrl}/.well-known/service/blocklet/logo-rect?imageFilter=convert&f=png`;
|
|
44
|
+
|
|
45
|
+
const appInfo = notification.appInfo || {
|
|
46
|
+
logo,
|
|
47
|
+
description: info.description,
|
|
48
|
+
title: info.name,
|
|
49
|
+
version: info.version,
|
|
50
|
+
url: info.appUrl,
|
|
51
|
+
};
|
|
44
52
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
53
|
+
const subject = `${
|
|
54
|
+
notification.title ||
|
|
55
|
+
{ zh: '您收到了一个通知', en: 'You have received a notification' }[locale] ||
|
|
56
|
+
'You have received a notification'
|
|
57
|
+
}`;
|
|
58
|
+
|
|
59
|
+
const html = render(
|
|
60
|
+
NotificationEmail({
|
|
61
|
+
subject,
|
|
62
|
+
appInfo,
|
|
63
|
+
...notification,
|
|
64
|
+
locale,
|
|
65
|
+
raw,
|
|
66
|
+
unsubscribeToken,
|
|
67
|
+
userInfo: {
|
|
68
|
+
...userInfo,
|
|
69
|
+
email: receiver,
|
|
70
|
+
},
|
|
71
|
+
})
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
const emailData = {
|
|
75
|
+
from: `"${appInfo.title}" <${config.from}>`,
|
|
76
|
+
to: receiver,
|
|
77
|
+
title: notification.title,
|
|
64
78
|
subject,
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
locale,
|
|
68
|
-
raw,
|
|
69
|
-
unsubscribeToken,
|
|
70
|
-
userInfo: {
|
|
71
|
-
...userInfo,
|
|
72
|
-
email: receiver,
|
|
73
|
-
},
|
|
74
|
-
})
|
|
75
|
-
);
|
|
76
|
-
const emailData = {
|
|
77
|
-
from: `"${appInfo.title}" <${value.from}>`,
|
|
78
|
-
to: receiver,
|
|
79
|
-
title: notification.title,
|
|
80
|
-
subject,
|
|
81
|
-
html,
|
|
82
|
-
replyTo: value.from,
|
|
83
|
-
};
|
|
84
|
-
if (process.env.NODE_ENV === 'test') {
|
|
85
|
-
return {
|
|
86
|
-
messageId: 'test-message-id',
|
|
87
|
-
accepted: [emailData.to],
|
|
88
|
-
rejected: [],
|
|
89
|
-
response: 'Test environment - Email skipped',
|
|
79
|
+
html,
|
|
80
|
+
replyTo: config.from,
|
|
90
81
|
};
|
|
82
|
+
|
|
83
|
+
if (process.env.NODE_ENV === 'test') {
|
|
84
|
+
return {
|
|
85
|
+
messageId: 'test-message-id',
|
|
86
|
+
accepted: [emailData.to],
|
|
87
|
+
rejected: [],
|
|
88
|
+
response: 'Test environment - Email skipped',
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
const transporter = cache.getTransport({ did: teamDid, config });
|
|
92
|
+
const result = await transporter.sendMail(emailData);
|
|
93
|
+
return result;
|
|
91
94
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
+
|
|
96
|
+
if (provider === 'launcher') {
|
|
97
|
+
if (!blocklet.controller) {
|
|
98
|
+
throw new Error('Launcher info not available.');
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const info = await node.getNodeInfo({ useCache: true });
|
|
102
|
+
const result = await sendEmailWithLauncher(info.sk, blocklet.controller, {
|
|
103
|
+
receiver,
|
|
104
|
+
notification,
|
|
105
|
+
options: { locale, raw },
|
|
106
|
+
});
|
|
107
|
+
if (result.error) {
|
|
108
|
+
throw new Error(result.error);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
throw new Error('Unknown email provider.');
|
|
95
115
|
}
|
|
96
116
|
|
|
97
117
|
module.exports = {
|
|
@@ -18,7 +18,7 @@ const { getTemplate } = require('./template');
|
|
|
18
18
|
const { getCacheFilePath } = require('../image');
|
|
19
19
|
const emoji = require('./emoji');
|
|
20
20
|
|
|
21
|
-
const TEMPLATES = ['default', 'section', 'cover'];
|
|
21
|
+
const TEMPLATES = ['default', 'section', 'cover', 'banner'];
|
|
22
22
|
const MAX_TITLE_LENGTH = 128;
|
|
23
23
|
const MAX_DESCRIPTION_LENGTH = 512;
|
|
24
24
|
const MAX_IMAGE_SIZE = 5 * 1024 * 1024;
|
|
@@ -69,7 +69,11 @@ const schema = Joi.object({
|
|
|
69
69
|
// customize logo
|
|
70
70
|
logo: Joi.string()
|
|
71
71
|
.uri({ scheme: ['https'] })
|
|
72
|
-
.
|
|
72
|
+
.when('template', {
|
|
73
|
+
is: 'banner',
|
|
74
|
+
then: Joi.required(),
|
|
75
|
+
otherwise: Joi.optional().default(''),
|
|
76
|
+
}),
|
|
73
77
|
logoRounded: Joi.string().allow('0', '1').optional(),
|
|
74
78
|
|
|
75
79
|
// custom emoji
|
|
@@ -110,13 +114,19 @@ const getOgImage = ({ input, info, cacheDir, format, tmpDir }) => {
|
|
|
110
114
|
}
|
|
111
115
|
|
|
112
116
|
value.logoRounded = value.logoRounded === '1';
|
|
113
|
-
value.
|
|
114
|
-
info.appUrl,
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
117
|
+
if (value.template === 'banner') {
|
|
118
|
+
value.background = joinURL(info.appUrl, WELLKNOWN_SERVICE_PATH_PREFIX, '/static/images/banner.png');
|
|
119
|
+
} else {
|
|
120
|
+
value.background = joinURL(
|
|
121
|
+
info.appUrl,
|
|
122
|
+
WELLKNOWN_SERVICE_PATH_PREFIX,
|
|
123
|
+
`/blocklet/og-image?imageFilter=resize&w=1200&h=630&hash=${info.ogImageHash || ''}`
|
|
124
|
+
);
|
|
125
|
+
}
|
|
118
126
|
|
|
119
|
-
const
|
|
127
|
+
const width = value.template === 'banner' ? 1280 : 1200;
|
|
128
|
+
const height = value.template === 'banner' ? 441 : 630;
|
|
129
|
+
const params = { ...value, width, height, color, format };
|
|
120
130
|
const cacheKey = md5(stringify(params));
|
|
121
131
|
const nocache = input.nocache === '1';
|
|
122
132
|
const destPath = getCacheFilePath(cacheDir, `${cacheKey}.${format}`);
|
|
@@ -166,7 +176,7 @@ const convertExternalImage = (url, dest, height) => {
|
|
|
166
176
|
},
|
|
167
177
|
(res) => {
|
|
168
178
|
if (res.statusCode && res.statusCode >= 400) {
|
|
169
|
-
reject(new CustomError(400, `unexpected external image status: ${res.statusCode}`));
|
|
179
|
+
reject(new CustomError(400, `unexpected external image status: ${res.statusCode} ${url}`));
|
|
170
180
|
return;
|
|
171
181
|
}
|
|
172
182
|
|
|
@@ -207,8 +217,8 @@ const convertExternalImage = (url, dest, height) => {
|
|
|
207
217
|
});
|
|
208
218
|
};
|
|
209
219
|
|
|
210
|
-
const getCachedExternalImage = (cacheKey
|
|
211
|
-
return `http://127.0.0.1:${
|
|
220
|
+
const getCachedExternalImage = (cacheKey) => {
|
|
221
|
+
return `http://127.0.0.1:${process.env.ABT_NODE_SERVICE_PORT}/open-graph/${cacheKey.slice(0, 2)}/${cacheKey.slice(2)}.png`;
|
|
212
222
|
};
|
|
213
223
|
|
|
214
224
|
const cacheTasks = {};
|
|
@@ -83,9 +83,9 @@ const getSectionTemplate = (
|
|
|
83
83
|
{ width, height, logo, logoRounded, background, color, title, description, section },
|
|
84
84
|
fn
|
|
85
85
|
) => {
|
|
86
|
-
return fn
|
|
86
|
+
return fn`<div
|
|
87
87
|
style="
|
|
88
|
-
width: ${width};
|
|
88
|
+
width: ${width}px;
|
|
89
89
|
height: ${height}px;
|
|
90
90
|
background-image: url(${background});
|
|
91
91
|
background-size: cover;
|
|
@@ -200,6 +200,42 @@ const getCoverTemplate = ({ width, height, logo, logoRounded, color, title, desc
|
|
|
200
200
|
</div>`;
|
|
201
201
|
};
|
|
202
202
|
|
|
203
|
+
const getBannerTemplate = ({ width, height, logo, logoRounded, background, title }, fn) => {
|
|
204
|
+
return fn`<div
|
|
205
|
+
style="
|
|
206
|
+
width: ${width}px;
|
|
207
|
+
height: ${height}px;
|
|
208
|
+
background-image: url(${background});
|
|
209
|
+
background-size: cover;
|
|
210
|
+
background-position: center;
|
|
211
|
+
display: flex;
|
|
212
|
+
flex-direction: row;
|
|
213
|
+
justify-content: center;
|
|
214
|
+
align-items: center;
|
|
215
|
+
position: relative;
|
|
216
|
+
"
|
|
217
|
+
>
|
|
218
|
+
<img
|
|
219
|
+
src="${logo}"
|
|
220
|
+
height="150"
|
|
221
|
+
width="150"
|
|
222
|
+
style="height: 150px; width: 150px; ${logoRounded ? 'border-radius: 50%;' : ''} margin-right: 48px"
|
|
223
|
+
/>
|
|
224
|
+
<h2
|
|
225
|
+
style="
|
|
226
|
+
font-size: 72px;
|
|
227
|
+
color: #eee;
|
|
228
|
+
font-weight: 500;
|
|
229
|
+
font-family: Arial, sans-serif;
|
|
230
|
+
text-align: left;
|
|
231
|
+
line-clamp: 1;
|
|
232
|
+
"
|
|
233
|
+
>
|
|
234
|
+
${title}
|
|
235
|
+
</h2>
|
|
236
|
+
</div>`;
|
|
237
|
+
};
|
|
238
|
+
|
|
203
239
|
const getTemplate = async (params) => {
|
|
204
240
|
// eslint-disable-next-line import/no-unresolved
|
|
205
241
|
const { html } = await import('satori-html');
|
|
@@ -214,6 +250,9 @@ const getTemplate = async (params) => {
|
|
|
214
250
|
if (params.template === 'cover') {
|
|
215
251
|
return getCoverTemplate(params, fn);
|
|
216
252
|
}
|
|
253
|
+
if (params.template === 'banner') {
|
|
254
|
+
return getBannerTemplate(params, fn);
|
|
255
|
+
}
|
|
217
256
|
|
|
218
257
|
throw new Error('Invalid open graph template');
|
|
219
258
|
};
|
|
@@ -362,12 +362,24 @@ module.exports = function createRoutes(node, _, createSessionToken) {
|
|
|
362
362
|
|
|
363
363
|
// restart blocklet (not use queue)
|
|
364
364
|
node
|
|
365
|
-
.stopBlocklet({ did: appPid })
|
|
365
|
+
.stopBlocklet({ did: appPid, updateStatus: false })
|
|
366
366
|
.then(() => {
|
|
367
|
-
return node.startBlocklet({ did: appPid });
|
|
367
|
+
return node.startBlocklet({ did: appPid, checkHealthImmediately: true, throwOnError: true, atomic: true });
|
|
368
|
+
})
|
|
369
|
+
.then((doc) => {
|
|
370
|
+
logger.info('restart blocklet success after transfer ownership', { appPid });
|
|
371
|
+
return node.createAuditLog(
|
|
372
|
+
{
|
|
373
|
+
action: 'restartBlocklet',
|
|
374
|
+
args: { did: appPid },
|
|
375
|
+
context: formatContext(req),
|
|
376
|
+
result: doc,
|
|
377
|
+
},
|
|
378
|
+
node
|
|
379
|
+
);
|
|
368
380
|
})
|
|
369
381
|
.catch((error) => {
|
|
370
|
-
logger.error('restart blocklet failed', { appPid, error });
|
|
382
|
+
logger.error('restart blocklet failed after transfer ownership', { appPid, error });
|
|
371
383
|
});
|
|
372
384
|
|
|
373
385
|
await sleep(3000);
|
|
@@ -458,13 +458,14 @@ const sendToMail = async ({ sender, receiver, notification, options, node, pushO
|
|
|
458
458
|
|
|
459
459
|
const notifications = parseNotification({ id, ...rest }, senderInfo);
|
|
460
460
|
|
|
461
|
-
const { locale = 'en' } = options || {};
|
|
461
|
+
const { locale = 'en', raw = false } = options || {};
|
|
462
462
|
const results = await Promise.allSettled(
|
|
463
463
|
receivers.map((email) => {
|
|
464
464
|
return sendEmail(email, notifications[0], {
|
|
465
465
|
teamDid: sender.appDid,
|
|
466
466
|
node,
|
|
467
467
|
locale,
|
|
468
|
+
raw,
|
|
468
469
|
...(unsubscribeToken ? { unsubscribeToken } : {}),
|
|
469
470
|
...(userInfo ? { userInfo } : {}),
|
|
470
471
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a1 as e,j as t}from"./vendor-mui-core-O22FPGM4.js";import{r as a}from"./vendor-ux-did-connect-
|
|
1
|
+
import{a1 as e,j as t}from"./vendor-mui-core-O22FPGM4.js";import{r as a}from"./vendor-ux-did-connect-D75Zatzm.js";var r={},o=e;Object.defineProperty(r,"__esModule",{value:!0});var u=r.default=void 0,i=o(a()),p=t;u=r.default=(0,i.default)((0,p.jsx)("path",{d:"m7 10 5 5 5-5z"}),"ArrowDropDown");export{u as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a1 as r,j as t}from"./vendor-mui-core-O22FPGM4.js";import{r as a}from"./vendor-ux-did-connect-
|
|
1
|
+
import{a1 as r,j as t}from"./vendor-mui-core-O22FPGM4.js";import{r as a}from"./vendor-ux-did-connect-D75Zatzm.js";var e={},o=r;Object.defineProperty(e,"__esModule",{value:!0});var u=e.default=void 0,i=o(a()),l=t;u=e.default=(0,i.default)((0,l.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m-2 15-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8z"}),"CheckCircle");export{u as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a1 as r,j as t}from"./vendor-mui-core-O22FPGM4.js";import{r as a}from"./vendor-ux-did-connect-
|
|
1
|
+
import{a1 as r,j as t}from"./vendor-mui-core-O22FPGM4.js";import{r as a}from"./vendor-ux-did-connect-D75Zatzm.js";var e={},o=r;Object.defineProperty(e,"__esModule",{value:!0});var u=e.default=void 0,f=o(a()),i=t;u=e.default=(0,f.default)((0,i.jsx)("path",{d:"M15.41 7.41 14 6l-6 6 6 6 1.41-1.41L10.83 12z"}),"ChevronLeft");export{u as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a1 as r,j as t}from"./vendor-mui-core-O22FPGM4.js";import{r as a}from"./vendor-ux-did-connect-
|
|
1
|
+
import{a1 as r,j as t}from"./vendor-mui-core-O22FPGM4.js";import{r as a}from"./vendor-ux-did-connect-D75Zatzm.js";var e={},o=r;Object.defineProperty(e,"__esModule",{value:!0});var u=e.default=void 0,i=o(a()),v=t;u=e.default=(0,i.default)((0,v.jsx)("path",{d:"M10 6 8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"}),"ChevronRight");export{u as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a1 as t,j as r}from"./vendor-mui-core-O22FPGM4.js";import{r as a}from"./vendor-ux-did-connect-
|
|
1
|
+
import{a1 as t,j as r}from"./vendor-mui-core-O22FPGM4.js";import{r as a}from"./vendor-ux-did-connect-D75Zatzm.js";var e={},u=t;Object.defineProperty(e,"__esModule",{value:!0});var o=e.default=void 0,i=u(a()),l=r;o=e.default=(0,i.default)((0,l.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zM8 9h8v10H8zm7.5-5-1-1h-5l-1 1H5v2h14V4z"}),"DeleteOutline");export{o as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a1 as r,j as t}from"./vendor-mui-core-O22FPGM4.js";import{r as a}from"./vendor-ux-did-connect-
|
|
1
|
+
import{a1 as r,j as t}from"./vendor-mui-core-O22FPGM4.js";import{r as a}from"./vendor-ux-did-connect-D75Zatzm.js";var e={},o=r;Object.defineProperty(e,"__esModule",{value:!0});var u=e.default=void 0,i=o(a()),l=t;u=e.default=(0,i.default)((0,l.jsx)("path",{d:"M9 16.2 4.8 12l-1.4 1.4L9 19 21 7l-1.4-1.4z"}),"Done");export{u as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a1 as r,j as a}from"./vendor-mui-core-O22FPGM4.js";import{r as t}from"./vendor-ux-did-connect-
|
|
1
|
+
import{a1 as r,j as a}from"./vendor-mui-core-O22FPGM4.js";import{r as t}from"./vendor-ux-did-connect-D75Zatzm.js";var e={},o=r;Object.defineProperty(e,"__esModule",{value:!0});var u=e.default=void 0,d=o(t()),i=a;u=e.default=(0,d.default)((0,i.jsx)("path",{d:"M5 20h14v-2H5zM19 9h-4V3H9v6H5l7 7z"}),"Download");export{u as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a1 as e,j as t}from"./vendor-mui-core-O22FPGM4.js";import{r as a}from"./vendor-ux-did-connect-
|
|
1
|
+
import{a1 as e,j as t}from"./vendor-mui-core-O22FPGM4.js";import{r as a}from"./vendor-ux-did-connect-D75Zatzm.js";var r={},o=e;Object.defineProperty(r,"__esModule",{value:!0});var u=r.default=void 0,i=o(a()),s=t;u=r.default=(0,i.default)((0,s.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-2h2zm0-4h-2V7h2z"}),"Error");export{u as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a1 as r,j as a}from"./vendor-mui-core-O22FPGM4.js";import{r as t}from"./vendor-ux-did-connect-
|
|
1
|
+
import{a1 as r,j as a}from"./vendor-mui-core-O22FPGM4.js";import{r as t}from"./vendor-ux-did-connect-D75Zatzm.js";var e={},o=r;Object.defineProperty(e,"__esModule",{value:!0});var s=e.default=void 0,u=o(t()),d=a;s=e.default=(0,u.default)((0,d.jsx)("path",{d:"m12 8-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"}),"ExpandLess");export{s as d};
|