@abtnode/blocklet-services 1.16.27 → 1.16.28-beta-bfbab430
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/index.js +4 -3
- package/api/libs/connect/session.js +12 -6
- package/api/libs/connect/v1.js +5 -1
- package/api/libs/push-kit/index.js +114 -0
- package/api/routes/federated.js +2 -3
- package/api/routes/oauth.js +13 -2
- package/api/routes/user-session.js +22 -4
- package/api/routes/user.js +12 -0
- package/api/services/auth/connect/invite.js +6 -0
- package/api/services/auth/connect/issue-passport.js +6 -0
- package/api/services/auth/session.js +8 -2
- package/api/services/notification/index.js +21 -1
- package/api/socket/channel/did.js +114 -49
- package/api/util/index.js +18 -3
- package/dist/assets/{Add-CwM8vqJb.js → Add-BM20NrQO.js} +1 -1
- package/dist/assets/{AddBox-CWtpGmfL.js → AddBox--wxfR3G0.js} +1 -1
- package/dist/assets/Alert-DtzaUssX.js +1 -0
- package/dist/assets/{ArrowDropDown-D7NxLtoD.js → ArrowDropDown-Iyfxx2xg.js} +1 -1
- package/dist/assets/{Avatar-DALZS0lZ.js → Avatar-CUpS4Ilr.js} +1 -1
- package/dist/assets/{ButtonGroup-CJkesdM3.js → ButtonGroup-CYyG5u2K.js} +1 -1
- package/dist/assets/{CheckCircle-BJ5Uw81o.js → CheckCircle-DoaQShhi.js} +1 -1
- package/dist/assets/ChevronRight-CoSoIqx4.js +1 -0
- package/dist/assets/{Close-DmMtvJJN.js → Close-BLsWc_Tk.js} +1 -1
- package/dist/assets/{CloseOutlined-C9Px1Nek.js → CloseOutlined-DW47mLri.js} +1 -1
- package/dist/assets/{Delete-DYY-Ow66.js → Delete-BeboIHFa.js} +1 -1
- package/dist/assets/{DeleteOutline-D9U3cBQw.js → DeleteOutline-BaCf1XtY.js} +1 -1
- package/dist/assets/{Done-DsGkSs6f.js → Done-BEjApK9u.js} +1 -1
- package/dist/assets/{Download-BEa4Nrk6.js → Download-DjWaMhPn.js} +1 -1
- package/dist/assets/{Edit-B2iBIPGp.js → Edit-DyzvkXNJ.js} +1 -1
- package/dist/assets/{EditIcon-DJlQ7yQx.js → EditIcon-BXRvvSFr.js} +1 -1
- package/dist/assets/{Error-07pFpb7C.js → Error-DcCaeZ_S.js} +1 -1
- package/dist/assets/{ExpandMore-CM-DE2JK.js → ExpandMore-Dw5iC69g.js} +1 -1
- package/dist/assets/{FilterList-B6nHdXje.js → FilterList-B_AYjksa.js} +5 -5
- package/dist/assets/FormControl-CKJrH8LS.js +1 -0
- package/dist/assets/{FormControlLabel-DKslb7to.js → FormControlLabel-J_nG7S9r.js} +1 -1
- package/dist/assets/{FormGroup-Ba1ctrn7.js → FormGroup-B2XKvk2U.js} +1 -1
- package/dist/assets/{Google-kq1gRB6c.js → Google-_J6to4FR.js} +4 -4
- package/dist/assets/{Hidden-CUsYJfHX.js → Hidden-BLdLc8h9.js} +1 -1
- package/dist/assets/{InfoOutlined-Bb4PKvfm.js → InfoOutlined-jXjX6Tro.js} +1 -1
- package/dist/assets/{InputAdornment-HFI-ThUx.js → InputAdornment-DYTxgt6k.js} +1 -1
- package/dist/assets/{InputLabel-CRX7GO1W.js → InputLabel-lATzw7NR.js} +1 -1
- package/dist/assets/{LastPage-_qKWqTam.js → LastPage-2k34T11k.js} +1 -1
- package/dist/assets/{Launch-DF8F5LY1.js → Launch-DOIBGLzl.js} +1 -1
- package/dist/assets/{LaunchOutlined-B6B8I_2E.js → LaunchOutlined-SrMQHpJM.js} +1 -1
- package/dist/assets/{Link-J1qypDUa.js → Link-5b2HVhJS.js} +1 -1
- package/dist/assets/{ListItemText--5OHywDj.js → ListItemText-BWOzBiMo.js} +1 -1
- package/dist/assets/{LoadingButton-CQrsv4YE.js → LoadingButton-CK30gWPr.js} +1 -1
- package/dist/assets/{LockIcon-CatEwcOV.js → LockIcon-DSoFeiUW.js} +1 -1
- package/dist/assets/{Loop-B9IjX0E7.js → Loop-CBPEms0Q.js} +1 -1
- package/dist/assets/{MoreHoriz-OF0bQEaE.js → MoreHoriz-D2VMH51n.js} +1 -1
- package/dist/assets/{MoreVert-DQBeF_6h.js → MoreVert-BEZvlzF-.js} +1 -1
- package/dist/assets/{OpenInNew-IStrdCVC.js → OpenInNew-Ck3ijqlL.js} +1 -1
- package/dist/assets/Pagination-DYCSDEOZ.js +2 -0
- package/dist/assets/{PlayArrow-CK4Wf37C.js → PlayArrow-Bep57q0l.js} +1 -1
- package/dist/assets/{QuestionMarkCircle-BqrlW5d1.js → QuestionMarkCircle-BRJ6UWDC.js} +1 -1
- package/dist/assets/{RadioGroup--3XkfP_A.js → RadioGroup-DjYscIah.js} +1 -1
- package/dist/assets/{Search-BD9rBqLl.js → Search-DFMpNFHb.js} +1 -1
- package/dist/assets/{Select-VsDz5FE8.js → Select-B59j8vqU.js} +2 -2
- package/dist/assets/{ServerLogo-VaBfp8lH.js → ServerLogo-B-brfx83.js} +1 -1
- package/dist/assets/{Skeleton-DUeW-_dm.js → Skeleton-CjiEfCyO.js} +4 -4
- package/dist/assets/{Slider-C_5S9kwO.js → Slider-BJkaec7K.js} +1 -1
- package/dist/assets/{Stepper-BbPygfKM.js → Stepper-JkeBEOuY.js} +1 -1
- package/dist/assets/{TextField-aPyTQ1Wg.js → TextField-C5D15Ugf.js} +1 -1
- package/dist/assets/{Toolbar-DjGyyZ0P.js → Toolbar-CSkIjhiI.js} +1 -1
- package/dist/assets/{ViewList-DEy367A5.js → ViewList-BKInLQTN.js} +1 -1
- package/dist/assets/access-control-BCwpKFRG.js +13 -0
- package/dist/assets/{actions-C3pxTAkB.js → actions-DPCHP2Zq.js} +1 -1
- package/dist/assets/{add-component-core-Bl_jCY6w.js → add-component-core-07RqFKRp.js} +53 -53
- package/dist/assets/add-resource-DyhrbJxX.js +1 -0
- package/dist/assets/{addon-D6Zv_xJR.js → addon-Dd_1kHaH.js} +1 -1
- package/dist/assets/{analytics-9rS1UvzU.js → analytics-CpnXFlCP.js} +9 -9
- package/dist/assets/api-BEakJrYk.js +1 -0
- package/dist/assets/{ar-DqmJV4p8.js → ar-DXpJw3XU.js} +1 -1
- package/dist/assets/{audit-logs-DqukTJ9s.js → audit-logs-CcdVOnke.js} +2 -2
- package/dist/assets/{button-CRqbeCtP.js → button-BKUtHuLK.js} +1 -1
- package/dist/assets/{click-to-copy-BAX04hG0.js → click-to-copy-C5Z-YhEj.js} +1 -1
- package/dist/assets/{complete-D_oUCOrq.js → complete-DGbpqS5n.js} +4 -4
- package/dist/assets/{component-CZa-Hbf-.js → component-DqG0gKuO.js} +40 -40
- package/dist/assets/{config-Br1oEhxb.js → config-DLELBWuY.js} +1 -1
- package/dist/assets/config-DseId50E.js +32 -0
- package/dist/assets/{config-navigation-BAezznbr.js → config-navigation-D3NGEvCy.js} +2 -2
- package/dist/assets/{config-space-BFhSdYit.js → config-space-Dq3sHJW8.js} +1 -1
- package/dist/assets/confirm-Bp1YUyru.js +7 -0
- package/dist/assets/connect-CCqeZs4y.js +1 -0
- package/dist/assets/connect-De6kBvVp.js +5 -0
- package/dist/assets/{connect-to-dvuLvbZ-.js → connect-to-DNQSW4Zf.js} +2 -2
- package/dist/assets/{content-layout-9WIqKbOM.js → content-layout-FX0-4e_U.js} +1 -1
- package/dist/assets/dashboard-gEbtoKpZ.js +129 -0
- package/dist/assets/{de-CHOUObJ5.js → de-CWxlIdre.js} +1 -1
- package/dist/assets/{did-address-DmmIbEBi.js → did-address-Etx4oDtC.js} +1 -1
- package/dist/assets/domain-Bp688Xuz.js +9 -0
- package/dist/assets/domain-list-xUOKEmgZ.js +12 -0
- package/dist/assets/{es-aZ4oYeVs.js → es-BmrvDK07.js} +1 -1
- package/dist/assets/exchange-passport-Ca8hn9GK.js +1 -0
- package/dist/assets/{fallback-Bjkb8vHx.js → fallback-CIBVmJin.js} +1 -1
- package/dist/assets/{fr-Bi9vptGI.js → fr-B7SxgRy3.js} +1 -1
- package/dist/assets/fuel-CJOxfEOO.js +32 -0
- package/dist/assets/{fullpage-CKGw8-fI.js → fullpage-D3A4C5-R.js} +1 -1
- package/dist/assets/{hi-BXYjfUTP.js → hi-BRRtNIB_.js} +1 -1
- package/dist/assets/{home-DhEHMf3u.js → home-CjQy6Wn4.js} +1 -1
- package/dist/assets/{id-VVXvzjmO.js → id-D6-Qi7Q1.js} +1 -1
- package/dist/assets/{iframe-hH7vDtKv.js → iframe-BBq0Voai.js} +1 -1
- package/dist/assets/{index-BVS_h6_H.js → index-3J8dxrpv.js} +1 -1
- package/dist/assets/{index-BP_qJBTx.js → index-B-MiDNZJ.js} +1 -1
- package/dist/assets/{index-CwWUEzws.js → index-B0YP3d1_.js} +3 -3
- package/dist/assets/{index-B05fFzEE.js → index-B4NnGwvJ.js} +1 -1
- package/dist/assets/{index-Bm0QayqF.js → index-BJX9Tvpd.js} +6 -6
- package/dist/assets/{index-CO8IqBmF.js → index-BNte_m1O.js} +1 -1
- package/dist/assets/{index-9Y8ZRmbf.js → index-BYYybgec.js} +38 -35
- package/dist/assets/{index-B3UB5TOv.js → index-BgwjaAEK.js} +1 -1
- package/dist/assets/{index-BLyEUpiJ.js → index-BvTERmRP.js} +1 -1
- package/dist/assets/{index-B7MppK7L.js → index-BvWO4cX9.js} +1 -1
- package/dist/assets/{index-B9czh19J.js → index-BvsLirqD.js} +155 -154
- package/dist/assets/{index-B3s-NAqV.js → index-C2gRwmn2.js} +1 -1
- package/dist/assets/{index-BF78-zJ5.js → index-C7siWm6R.js} +1 -1
- package/dist/assets/{index-BJaQQWJE.js → index-CBJAk2V8.js} +2 -2
- package/dist/assets/{index-Dwuihh4n.js → index-CR0jMc07.js} +1 -1
- package/dist/assets/{index-HqCEhnQP.js → index-CnSZHHme.js} +1 -1
- package/dist/assets/{index-DyRXn6rY.js → index-Cy0soagJ.js} +1 -1
- package/dist/assets/{index-BdYns3WE.js → index-CzncbcdH.js} +1 -1
- package/dist/assets/{index-Cimrtxl8.js → index-D4zAIKo5.js} +4 -4
- package/dist/assets/{index-c3sUblIj.js → index-DA6RGcPS.js} +1 -1
- package/dist/assets/{index-nRvA5BM-.js → index-DUsylIII.js} +1 -1
- package/dist/assets/{index-CHnlO9E8.js → index-DWdOmPJK.js} +5 -5
- package/dist/assets/index-Dm4QfKgj.js +262 -0
- package/dist/assets/{index-DukOQ0Y3.js → index-DxgnjIVN.js} +1 -1
- package/dist/assets/{index-BpqWJ7Er.js → index-DzIqbqJ_.js} +7 -7
- package/dist/assets/{index-0FEizmM4.js → index-QBptYklD.js} +8 -8
- package/dist/assets/{index-B7G9Fhd_.js → index-QUyszNOn.js} +1 -1
- package/dist/assets/index-Ta8CgfK0.js +4 -0
- package/dist/assets/{index-CwHsstjC.js → index-kTvctsLd.js} +1 -1
- package/dist/assets/{index-DuUQrj2C.js → index-lo0p8vGs.js} +11 -11
- package/dist/assets/index-r7u0jEi1.js +1 -0
- package/dist/assets/{index-hnQe74ZU.js → index-zD9-bZuV.js} +1 -1
- package/dist/assets/{index.es-eYwgfi8m.js → index.es-BwRDpSz4.js} +3 -3
- package/dist/assets/{index.esm-U8pM0U8X.js → index.esm-CpvBYn6L.js} +1 -1
- package/dist/assets/{invitation-7mUGX79t.js → invitation-DmGeq7ty.js} +4 -4
- package/dist/assets/{invite-C8ZVAak5.js → invite-BHr71ERq.js} +1 -1
- package/dist/assets/issue-passport-CVLycMc5.js +1 -0
- package/dist/assets/{item-Bop3PNhc.js → item-BcWo6lea.js} +1 -1
- package/dist/assets/{ja-DqJiajLu.js → ja--dtwu5Xy.js} +1 -1
- package/dist/assets/{jss-plugin-props-sort.esm-Bc8cqy_b.js → jss-plugin-props-sort.esm-CS5B424R.js} +4 -4
- package/dist/assets/{ko-DQKmtlbI.js → ko-DpRJDWhF.js} +1 -1
- package/dist/assets/{launch-result-message-Dzt2QHg4.js → launch-result-message-CAUmoCmH.js} +1 -1
- package/dist/assets/{layout-Bsd-UJ0q.js → layout-l6KrRo_j.js} +1 -1
- package/dist/assets/{list-header-Do3beXgv.js → list-header-C_S_alCD.js} +1 -1
- package/dist/assets/localization-Bewup7q7.js +1 -0
- package/dist/assets/{log-DEXPeWJf.js → log-Ch42uXqw.js} +8 -8
- package/dist/assets/{login-C4_wiMTC.js → login-BxjyT1qS.js} +1 -1
- package/dist/assets/{login-oauth-callback-DZ7nd9rq.js → login-oauth-callback-C6s-4b1V.js} +1 -1
- package/dist/assets/{logo-uploader-qdt-u5pf.js → logo-uploader-CGtIsD0T.js} +3 -3
- package/dist/assets/{lost-passport-CGdWl3yM.js → lost-passport-By5cjQFH.js} +3 -3
- package/dist/assets/{lottie-vIbHYG02.js → lottie-DVm7n_Um.js} +1 -1
- package/dist/assets/notifications-CEpa_xHz.js +62 -0
- package/dist/assets/overview-GOUiKG2a.js +12 -0
- package/dist/assets/{page-header-CspR2DX0.js → page-header-COyUenU-.js} +1 -1
- package/dist/assets/{permission-Dl2bYO4H.js → permission-DWzaHXWC.js} +1 -1
- package/dist/assets/{preferences-DqxPfbJN.js → preferences-CE-9QBFo.js} +1 -1
- package/dist/assets/{pt-si0ACe2m.js → pt-BxA88dKG.js} +1 -1
- package/dist/assets/publish-resource-UvJbVy1r.js +1 -0
- package/dist/assets/{react-eYk4JkPK.js → react-CY_QENHU.js} +3 -3
- package/dist/assets/{redux-Br01S-c2.js → redux-CTTkxs7M.js} +1 -1
- package/dist/assets/{resource-dialog-jzqGsDCb.js → resource-dialog-CfRq8NMl.js} +3 -3
- package/dist/assets/{ru-B36cpSA6.js → ru-C9WJaQoQ.js} +1 -1
- package/dist/assets/{selector-D_3o6AEu.js → selector-BEck9RSE.js} +2 -2
- package/dist/assets/session-CVIETtuz.js +1 -0
- package/dist/assets/setup-CkCZJ55S.js +14 -0
- package/dist/assets/{slicedToArray-CwHagVUQ.js → slicedToArray-DCpTgETk.js} +2 -2
- package/dist/assets/{spaces-DNCapkb6.js → spaces-BFbdkHH8.js} +1 -1
- package/dist/assets/start-CvZw2F8k.js +186 -0
- package/dist/assets/{step-actions-D8a8ZXtt.js → step-actions-5tGgPrhF.js} +2 -2
- package/dist/assets/{studio-IOq2NSOB.js → studio-CGE88nOP.js} +1 -1
- package/dist/assets/{switch-control-nONosChT.js → switch-control-DBbuPW4q.js} +1 -1
- package/dist/assets/{th-Dtc8_3Sk.js → th-z7LSYRZi.js} +1 -1
- package/dist/assets/{toUpper-B_IOVg6L.js → toUpper-DTIWej6b.js} +1 -1
- package/dist/assets/transfer-26ConaJn.js +16 -0
- package/dist/assets/uniqBy-BF_2_CqX.js +1 -0
- package/dist/assets/{unsubscribe-Bsb_3Ieh.js → unsubscribe-Cwx3CGkA.js} +1 -1
- package/dist/assets/use-blocklet-info-for-connect-did-spaces-DXCdpGY7.js +1 -0
- package/dist/assets/{use-mobile-ioC1m4Aw.js → use-mobile-DTODc0Do.js} +1 -1
- package/dist/assets/{useAsync-CUaC98xZ.js → useAsync-BIhajT1g.js} +1 -1
- package/dist/assets/{useFormControl-DN9T7ala.js → useFormControl-D74Gykn0.js} +1 -1
- package/dist/assets/useLocalStorage-CTTJpYi8.js +1 -0
- package/dist/assets/{useSetState-s4taE93i.js → useSetState-B8DWdra7.js} +1 -1
- package/dist/assets/useSlot-C0EbF40A.js +1 -0
- package/dist/assets/{user-center-CRnZOCDY.js → user-center-BurgeGnu.js} +1 -1
- package/dist/assets/{user-sessions-CMehw0R-.js → user-sessions-DFuVpXta.js} +1 -1
- package/dist/assets/util-BfdLSo0f.js +1 -0
- package/dist/assets/{vi-DpH7bkpR.js → vi-CAtyUyNW.js} +1 -1
- package/dist/assets/wrap-locale-mANFn3Dq.js +1 -0
- package/dist/assets/{zh-Dizc5DZz.js → zh-BVBeddUa.js} +1 -1
- package/dist/assets/{zh-tw-Cb93tcSH.js → zh-tw-CoStw7dd.js} +1 -1
- package/dist/index.html +1 -1
- package/dist/service-worker.js +1 -1
- package/package.json +18 -18
- package/dist/assets/Alert-DEfPMXiL.js +0 -1
- package/dist/assets/ChevronRight-D7mN0YuF.js +0 -1
- package/dist/assets/FormControl-Cmz7MMzt.js +0 -1
- package/dist/assets/Pagination-BZdZkcIC.js +0 -2
- package/dist/assets/access-control-DK2pI24G.js +0 -13
- package/dist/assets/add-resource-CPVqxtxe.js +0 -1
- package/dist/assets/api-CehzwmLw.js +0 -1
- package/dist/assets/config-hzwzGLfY.js +0 -32
- package/dist/assets/confirm-CjNsJKwh.js +0 -7
- package/dist/assets/connect-BMVV8zee.js +0 -5
- package/dist/assets/connect-BSqfICbm.js +0 -1
- package/dist/assets/dashboard-aseO1swh.js +0 -129
- package/dist/assets/domain-DLtg0rzi.js +0 -9
- package/dist/assets/domain-list-DQowufpU.js +0 -12
- package/dist/assets/exchange-passport-CkmSpB9Y.js +0 -1
- package/dist/assets/fuel-CAVJYvfz.js +0 -32
- package/dist/assets/index-BXrQh9rJ.js +0 -1
- package/dist/assets/index-C-632Bpb.js +0 -4
- package/dist/assets/index-CBOJPxPp.js +0 -262
- package/dist/assets/issue-passport-DZimOHGE.js +0 -1
- package/dist/assets/localization-C8OGiNfd.js +0 -1
- package/dist/assets/notifications-g3gIPxdM.js +0 -62
- package/dist/assets/overview-DKlRksmh.js +0 -12
- package/dist/assets/publish-resource-C97kIenG.js +0 -1
- package/dist/assets/session-Dheoj1eV.js +0 -1
- package/dist/assets/setup-B7pfHqWG.js +0 -14
- package/dist/assets/start-DjJppiHH.js +0 -186
- package/dist/assets/transfer-DV0XxzFA.js +0 -16
- package/dist/assets/uniqBy-Bd7wqwWH.js +0 -1
- package/dist/assets/use-blocklet-info-for-connect-did-spaces-fww7xb0i.js +0 -1
- package/dist/assets/useLocalStorage-QmE2CUEj.js +0 -1
- package/dist/assets/useSlot-BTLZemfY.js +0 -1
- package/dist/assets/util-B4zpW16j.js +0 -1
- package/dist/assets/wrap-locale-BSC6foWr.js +0 -1
package/api/index.js
CHANGED
|
@@ -266,6 +266,7 @@ module.exports = function createServer(node, serverOptions = {}) {
|
|
|
266
266
|
// API: notification
|
|
267
267
|
notificationService.sendToUser.attach(server);
|
|
268
268
|
notificationService.sendToMail.attach(server);
|
|
269
|
+
notificationService.sendToPush.attach(server);
|
|
269
270
|
notificationService.sendToAppChannel.attach(server);
|
|
270
271
|
relayService.sendToRelay.attach(server);
|
|
271
272
|
|
|
@@ -362,16 +363,16 @@ module.exports = function createServer(node, serverOptions = {}) {
|
|
|
362
363
|
// After all service middleware, we can now safely pass all traffic to blocklets
|
|
363
364
|
server.use(async (req, res) => {
|
|
364
365
|
try {
|
|
365
|
-
const { target } = await ensureProxyUrl(req);
|
|
366
|
+
const { target, headers, error } = await ensureProxyUrl(req);
|
|
366
367
|
if (target) {
|
|
367
368
|
if (imageService.isImageAccepted(req) && imageService.isImageRequest(req)) {
|
|
368
369
|
req.target = target; // for internal use
|
|
369
370
|
imageService.processImage(req, res);
|
|
370
371
|
} else {
|
|
371
|
-
proxy.safeWeb(req, res, { target });
|
|
372
|
+
proxy.safeWeb(req, res, { target, headers });
|
|
372
373
|
}
|
|
373
374
|
} else {
|
|
374
|
-
throw new Error(
|
|
375
|
+
throw new Error(error);
|
|
375
376
|
}
|
|
376
377
|
} catch (err) {
|
|
377
378
|
logger.error('Failed to get component target', { url: req.url, error: err });
|
|
@@ -158,7 +158,7 @@ const checkAppOwner = ({ role, blocklet, userDid, locale = 'en' }) => {
|
|
|
158
158
|
const isDidSpaceRequiredOnConnect = (blocklet, request) => {
|
|
159
159
|
let flag = false;
|
|
160
160
|
|
|
161
|
-
const [, componentDid] = request.
|
|
161
|
+
const [, componentDid] = (request.get('x-blocklet-component-id') || '').split('/');
|
|
162
162
|
|
|
163
163
|
forEachBlockletSync(blocklet, (b) => {
|
|
164
164
|
flag =
|
|
@@ -472,7 +472,7 @@ module.exports = {
|
|
|
472
472
|
locale,
|
|
473
473
|
passport,
|
|
474
474
|
sourceAppPid,
|
|
475
|
-
lastLoginIp: get(
|
|
475
|
+
lastLoginIp: request.get('x-real-aip') || '',
|
|
476
476
|
connectedAccount: [connectAccount, connectedNft],
|
|
477
477
|
},
|
|
478
478
|
});
|
|
@@ -502,7 +502,7 @@ module.exports = {
|
|
|
502
502
|
locale,
|
|
503
503
|
passport,
|
|
504
504
|
sourceAppPid,
|
|
505
|
-
lastLoginIp: get(
|
|
505
|
+
lastLoginIp: request.get('x-real-ip') || '',
|
|
506
506
|
connectedAccount: [connectAccount, connectedNft],
|
|
507
507
|
},
|
|
508
508
|
});
|
|
@@ -522,8 +522,10 @@ module.exports = {
|
|
|
522
522
|
node
|
|
523
523
|
);
|
|
524
524
|
}
|
|
525
|
-
const lastLoginIp = request.
|
|
526
|
-
const
|
|
525
|
+
const lastLoginIp = request.get('x-real-ip');
|
|
526
|
+
const walletDeviceMessageToken = request.get('wallet-device-message-token');
|
|
527
|
+
const walletDeviceId = request.get('wallet-device-id');
|
|
528
|
+
const ua = request.get('user-agent');
|
|
527
529
|
// request.context.store.connectedWallet
|
|
528
530
|
const walletOS = request.context.didwallet.os;
|
|
529
531
|
|
|
@@ -538,6 +540,8 @@ module.exports = {
|
|
|
538
540
|
lastLoginIp,
|
|
539
541
|
extra: {
|
|
540
542
|
walletOS,
|
|
543
|
+
walletDeviceMessageToken,
|
|
544
|
+
walletDeviceId,
|
|
541
545
|
},
|
|
542
546
|
});
|
|
543
547
|
|
|
@@ -571,6 +575,8 @@ module.exports = {
|
|
|
571
575
|
lastLoginIp,
|
|
572
576
|
extra: {
|
|
573
577
|
walletOS,
|
|
578
|
+
walletDeviceMessageToken,
|
|
579
|
+
walletDeviceId,
|
|
574
580
|
},
|
|
575
581
|
});
|
|
576
582
|
});
|
|
@@ -1106,7 +1112,7 @@ module.exports = {
|
|
|
1106
1112
|
pk: oauthUser.pk,
|
|
1107
1113
|
...mergeProfile,
|
|
1108
1114
|
locale,
|
|
1109
|
-
lastLoginIp: get(
|
|
1115
|
+
lastLoginIp: request.get('x-real-ap') || '',
|
|
1110
1116
|
connectedAccounts: [connectedAccount],
|
|
1111
1117
|
passports: mergePassport,
|
|
1112
1118
|
},
|
package/api/libs/connect/v1.js
CHANGED
|
@@ -83,7 +83,11 @@ module.exports = (node, opts) => {
|
|
|
83
83
|
|
|
84
84
|
// Only handles did-connect updates, because we need to determine the actual app
|
|
85
85
|
sendToRelayFn: async (topic, event, data) => {
|
|
86
|
-
|
|
86
|
+
// NOTICE: 这里需要和前端订阅的 ws channel 保持一致
|
|
87
|
+
// 1. 如果是统一登录的环境,那么前端订阅的 channel 是 memberAppInfo.publisher
|
|
88
|
+
// 2. 如果是非统一登录的环境,那么前端订阅的 channel 是 appInfo.publisher
|
|
89
|
+
// 永远保持订阅的通道是当前 blocklet 的 did
|
|
90
|
+
const publisher = get(data, 'memberAppInfo.publisher') || get(data, 'appInfo.publisher');
|
|
87
91
|
if (!publisher) {
|
|
88
92
|
return null;
|
|
89
93
|
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
const uniqWith = require('lodash/uniqWith');
|
|
2
|
+
const { sign } = require('@blocklet/sdk/lib/util/verify-sign');
|
|
3
|
+
const getBlockletInfo = require('@blocklet/meta/lib/info');
|
|
4
|
+
const { joinURL } = require('ufo');
|
|
5
|
+
const pRetry = require('p-retry');
|
|
6
|
+
|
|
7
|
+
const { api } = require('../api');
|
|
8
|
+
const logger = require('../logger')('blocklet-services:notification');
|
|
9
|
+
|
|
10
|
+
async function sendPush(receiver, notification, { node, teamDid }) {
|
|
11
|
+
const blocklet = await node.getBlocklet({ did: teamDid, useCache: true });
|
|
12
|
+
if (!blocklet) {
|
|
13
|
+
logger.warn(`Failed to get blocklet: ${teamDid}`);
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
const config = blocklet.settings?.notification?.pushKit || {};
|
|
18
|
+
|
|
19
|
+
if (!config.enabled || !config.endpoint) {
|
|
20
|
+
// skip send email
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const pushKitConfig = {
|
|
25
|
+
did: config.did || 'z2qa6xfPH6zHq5AQjb2Qm5CfmpndyQsvZrTKH',
|
|
26
|
+
pushPath: config.pushPath || '/api/push',
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
let pushKitUrl;
|
|
30
|
+
try {
|
|
31
|
+
const pushKitOrigin = new URL(config.endpoint).origin;
|
|
32
|
+
const { data: blockletJson } = await api.get(joinURL(pushKitOrigin, '/__blocklet__.js?type=json'));
|
|
33
|
+
const componentMountPoints = blockletJson?.componentMountPoints || [];
|
|
34
|
+
const findPushKitComponent = componentMountPoints.find((x) => x.did === pushKitConfig.did);
|
|
35
|
+
if (!findPushKitComponent) {
|
|
36
|
+
throw new Error(`Endpoint(${config.endpoint}) does not have push kit component`);
|
|
37
|
+
}
|
|
38
|
+
pushKitUrl = joinURL(pushKitOrigin, findPushKitComponent.mountPoint, pushKitConfig.pushPath);
|
|
39
|
+
} catch (error) {
|
|
40
|
+
logger.error(`Failed to get push kit endpoint: ${config.endpoint}`, { error });
|
|
41
|
+
throw new Error(`Invalid push kit endpoint: ${config.endpoint}`);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const { users = [] } = await node.getUsers({
|
|
45
|
+
teamDid,
|
|
46
|
+
dids: receiver,
|
|
47
|
+
query: {
|
|
48
|
+
approved: true,
|
|
49
|
+
includeUserSessions: true,
|
|
50
|
+
},
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const targets = users.reduce((acc, user) => {
|
|
54
|
+
if (user.userSessions?.length > 0) {
|
|
55
|
+
user.userSessions.forEach((x) => {
|
|
56
|
+
const platform = x?.extra?.walletOS;
|
|
57
|
+
const deviceToken = x?.extra?.walletDeviceMessageToken;
|
|
58
|
+
if (platform && ['ios', 'android', 'ios-sandbox'].includes(platform) && deviceToken) {
|
|
59
|
+
acc.push({
|
|
60
|
+
platform,
|
|
61
|
+
deviceToken,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return acc;
|
|
67
|
+
}, []);
|
|
68
|
+
|
|
69
|
+
const filterTargets = uniqWith(targets, (a, b) => {
|
|
70
|
+
return a.targets === b.targets && a.platform === b.platform;
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
if (filterTargets.length === 0) {
|
|
74
|
+
throw new Error('Invalid receiver: empty target');
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const blockletInfo = getBlockletInfo(blocklet);
|
|
78
|
+
|
|
79
|
+
const sig = sign(
|
|
80
|
+
{
|
|
81
|
+
targets: filterTargets,
|
|
82
|
+
data: notification,
|
|
83
|
+
},
|
|
84
|
+
{ appSk: blockletInfo.wallet.secretKey }
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
try {
|
|
88
|
+
const result = await pRetry(
|
|
89
|
+
() =>
|
|
90
|
+
api.post(
|
|
91
|
+
pushKitUrl,
|
|
92
|
+
{
|
|
93
|
+
targets: filterTargets,
|
|
94
|
+
data: notification,
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
headers: {
|
|
98
|
+
'x-blocklet-sig': sig,
|
|
99
|
+
'x-blocklet-sig-pk': blockletInfo.wallet.publicKey,
|
|
100
|
+
},
|
|
101
|
+
}
|
|
102
|
+
),
|
|
103
|
+
{ retries: 3 }
|
|
104
|
+
);
|
|
105
|
+
return result?.data;
|
|
106
|
+
} catch (error) {
|
|
107
|
+
logger.error('Failed to send push kit', { error });
|
|
108
|
+
throw error;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
module.exports = {
|
|
113
|
+
sendPush,
|
|
114
|
+
};
|
package/api/routes/federated.js
CHANGED
|
@@ -2,7 +2,6 @@ const { WELLKNOWN_SERVICE_PATH_PREFIX, FEDERATED } = require('@abtnode/constant'
|
|
|
2
2
|
const { signV2 } = require('@arcblock/jwt');
|
|
3
3
|
const normalizePathPrefix = require('@abtnode/util/lib/normalize-path-prefix');
|
|
4
4
|
const cloneDeep = require('lodash/cloneDeep');
|
|
5
|
-
const get = require('lodash/get');
|
|
6
5
|
const isNil = require('lodash/isNil');
|
|
7
6
|
const pLimit = require('p-limit');
|
|
8
7
|
const pRetry = require('p-retry');
|
|
@@ -546,7 +545,7 @@ module.exports = {
|
|
|
546
545
|
const federatedSites = blocklet.settings?.federated?.sites || [];
|
|
547
546
|
const loginSite = federatedSites.find((item) => {
|
|
548
547
|
const siteHost = new URL(item.appUrl).host;
|
|
549
|
-
const fromHost = new URL(req.
|
|
548
|
+
const fromHost = new URL(req.get('origin')).host;
|
|
550
549
|
return [siteHost, ...(item.aliasDomain || [])].includes(fromHost);
|
|
551
550
|
});
|
|
552
551
|
|
|
@@ -561,7 +560,7 @@ module.exports = {
|
|
|
561
560
|
});
|
|
562
561
|
|
|
563
562
|
const user = pick(currentUser, ['did', 'pk', 'fullName', 'locale']);
|
|
564
|
-
user.lastLoginIp = get(
|
|
563
|
+
user.lastLoginIp = req.get('x-real-ip') || '';
|
|
565
564
|
|
|
566
565
|
if (currentUser.email) {
|
|
567
566
|
user.email = currentUser.email;
|
package/api/routes/oauth.js
CHANGED
|
@@ -4,7 +4,6 @@ const { WELLKNOWN_SERVICE_PATH_PREFIX, NODE_SERVICES, PASSPORT_STATUS } = requir
|
|
|
4
4
|
const { extractUserAvatar, getUserAvatarUrl, getAppAvatarUrl } = require('@abtnode/util/lib/user');
|
|
5
5
|
const { fromAppDid } = require('@arcblock/did-ext');
|
|
6
6
|
const { getBlockletAppIdList } = require('@blocklet/meta/lib/util');
|
|
7
|
-
const get = require('lodash/get');
|
|
8
7
|
const uniq = require('lodash/uniq');
|
|
9
8
|
const last = require('lodash/last');
|
|
10
9
|
const pick = require('lodash/pick');
|
|
@@ -187,7 +186,7 @@ async function login(req, node, options) {
|
|
|
187
186
|
const { dataDir } = await getApplicationInfo({ node, nodeInfo, teamDid });
|
|
188
187
|
const [invitedUserOnly] = await isInvitedUserOnly(config, node, teamDid);
|
|
189
188
|
|
|
190
|
-
const lastLoginIp = get(
|
|
189
|
+
const lastLoginIp = req.get('x-real-ip') || '';
|
|
191
190
|
let passport = { name: 'Guest', role: 'guest' };
|
|
192
191
|
let currentUser = await federatedUtil.getUserWithinFederated(
|
|
193
192
|
{ sourceAppPid, teamDid, userDid, userPk },
|
|
@@ -275,6 +274,8 @@ async function login(req, node, options) {
|
|
|
275
274
|
);
|
|
276
275
|
|
|
277
276
|
const ua = req.get('user-agent');
|
|
277
|
+
const walletDeviceMessageToken = req.get('wallet-device-message-token');
|
|
278
|
+
const walletDeviceId = req.get('wallet-device-id');
|
|
278
279
|
const userSessionDoc = await node.upsertUserSession({
|
|
279
280
|
teamDid,
|
|
280
281
|
userDid: currentUser.did,
|
|
@@ -286,6 +287,8 @@ async function login(req, node, options) {
|
|
|
286
287
|
lastLoginIp,
|
|
287
288
|
extra: {
|
|
288
289
|
walletOS: 'web',
|
|
290
|
+
walletDeviceMessageToken,
|
|
291
|
+
walletDeviceId,
|
|
289
292
|
},
|
|
290
293
|
});
|
|
291
294
|
|
|
@@ -322,6 +325,8 @@ async function login(req, node, options) {
|
|
|
322
325
|
lastLoginIp,
|
|
323
326
|
extra: {
|
|
324
327
|
walletOS: 'web',
|
|
328
|
+
walletDeviceMessageToken,
|
|
329
|
+
walletDeviceId,
|
|
325
330
|
},
|
|
326
331
|
});
|
|
327
332
|
});
|
|
@@ -478,6 +483,8 @@ async function invite(req, node, options) {
|
|
|
478
483
|
}
|
|
479
484
|
const lastLoginIp = req.get('x-real-ip');
|
|
480
485
|
const ua = req.get('user-agent');
|
|
486
|
+
const walletDeviceMessageToken = req.get('wallet-device-message-token');
|
|
487
|
+
const walletDeviceId = req.get('wallet-device-id');
|
|
481
488
|
const userSessionDoc = await node.upsertUserSession({
|
|
482
489
|
teamDid,
|
|
483
490
|
userDid,
|
|
@@ -489,6 +496,8 @@ async function invite(req, node, options) {
|
|
|
489
496
|
lastLoginIp,
|
|
490
497
|
extra: {
|
|
491
498
|
walletOS: 'web',
|
|
499
|
+
walletDeviceMessageToken,
|
|
500
|
+
walletDeviceId,
|
|
492
501
|
},
|
|
493
502
|
});
|
|
494
503
|
|
|
@@ -509,6 +518,8 @@ async function invite(req, node, options) {
|
|
|
509
518
|
lastLoginIp,
|
|
510
519
|
extra: {
|
|
511
520
|
walletOS: 'web',
|
|
521
|
+
walletDeviceMessageToken,
|
|
522
|
+
walletDeviceId,
|
|
512
523
|
},
|
|
513
524
|
});
|
|
514
525
|
});
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/* eslint-disable no-await-in-loop */
|
|
2
2
|
const { WELLKNOWN_SERVICE_PATH_PREFIX, SESSION_TTL } = require('@abtnode/constant');
|
|
3
3
|
const { LOGIN_PROVIDER } = require('@blocklet/constant');
|
|
4
|
-
const get = require('lodash/get');
|
|
5
4
|
const pick = require('lodash/pick');
|
|
6
5
|
const defaults = require('lodash/defaults');
|
|
7
6
|
const cloneDeep = require('lodash/cloneDeep');
|
|
8
7
|
const sortBy = require('lodash/sortBy');
|
|
8
|
+
const omit = require('lodash/omit');
|
|
9
9
|
const pLimit = require('p-limit');
|
|
10
10
|
const { getSourceProvider } = require('@blocklet/meta/lib/did-utils');
|
|
11
11
|
|
|
@@ -132,7 +132,7 @@ module.exports = {
|
|
|
132
132
|
|
|
133
133
|
const memberSite = federated.sites.find((item) => item.appPid === appPid);
|
|
134
134
|
const postUser = pick(user, ['did', 'pk', 'fullName', 'locale']);
|
|
135
|
-
postUser.lastLoginAt = get(
|
|
135
|
+
postUser.lastLoginAt = req.get('x-real-ip') || '';
|
|
136
136
|
|
|
137
137
|
if (user.email) {
|
|
138
138
|
postUser.email = user.email;
|
|
@@ -196,6 +196,8 @@ module.exports = {
|
|
|
196
196
|
|
|
197
197
|
const lastLoginIp = req.get('x-real-ip');
|
|
198
198
|
const ua = req.get('user-agent');
|
|
199
|
+
const walletDeviceMessageToken = req.get('wallet-device-message-token');
|
|
200
|
+
const walletDeviceId = req.get('wallet-device-id');
|
|
199
201
|
|
|
200
202
|
const userSessionDoc = await node.upsertUserSession({
|
|
201
203
|
teamDid,
|
|
@@ -208,6 +210,8 @@ module.exports = {
|
|
|
208
210
|
lastLoginIp,
|
|
209
211
|
extra: {
|
|
210
212
|
walletOS,
|
|
213
|
+
walletDeviceMessageToken,
|
|
214
|
+
walletDeviceId,
|
|
211
215
|
},
|
|
212
216
|
});
|
|
213
217
|
|
|
@@ -222,6 +226,8 @@ module.exports = {
|
|
|
222
226
|
lastLoginIp,
|
|
223
227
|
extra: {
|
|
224
228
|
walletOS,
|
|
229
|
+
walletDeviceMessageToken,
|
|
230
|
+
walletDeviceId,
|
|
225
231
|
},
|
|
226
232
|
});
|
|
227
233
|
}
|
|
@@ -270,11 +276,23 @@ module.exports = {
|
|
|
270
276
|
});
|
|
271
277
|
|
|
272
278
|
const pendingList = userSessions.map((item) =>
|
|
273
|
-
limit(() =>
|
|
279
|
+
limit(() =>
|
|
280
|
+
patchUserSessionData(item, {
|
|
281
|
+
blocklet,
|
|
282
|
+
appPid,
|
|
283
|
+
teamDid,
|
|
284
|
+
node,
|
|
285
|
+
})
|
|
286
|
+
)
|
|
274
287
|
);
|
|
275
288
|
await Promise.all(pendingList);
|
|
276
289
|
|
|
277
|
-
|
|
290
|
+
// NOTICE: 移除 walletDeviceId 和 walletDeviceMessageToken,避免泄露
|
|
291
|
+
const result = userSessions.map((x) => {
|
|
292
|
+
return omit(x, ['extra.walletDeviceId', 'extra.walletDeviceMessageToken']);
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
res.json(result);
|
|
278
296
|
});
|
|
279
297
|
},
|
|
280
298
|
};
|
package/api/routes/user.js
CHANGED
|
@@ -303,6 +303,8 @@ async function login(req, node, options) {
|
|
|
303
303
|
);
|
|
304
304
|
const lastLoginIp = req.get('x-real-ip');
|
|
305
305
|
const ua = req.get('user-agent');
|
|
306
|
+
const walletDeviceMessageToken = req.get('wallet-device-message-token');
|
|
307
|
+
const walletDeviceId = req.get('wallet-device-id');
|
|
306
308
|
const userSession = await node.upsertUserSession({
|
|
307
309
|
visitorId,
|
|
308
310
|
teamDid,
|
|
@@ -313,6 +315,8 @@ async function login(req, node, options) {
|
|
|
313
315
|
lastLoginIp,
|
|
314
316
|
extra: {
|
|
315
317
|
walletOS: 'api',
|
|
318
|
+
walletDeviceMessageToken,
|
|
319
|
+
walletDeviceId,
|
|
316
320
|
},
|
|
317
321
|
});
|
|
318
322
|
node.syncUserSession({
|
|
@@ -325,6 +329,8 @@ async function login(req, node, options) {
|
|
|
325
329
|
lastLoginIp,
|
|
326
330
|
extra: {
|
|
327
331
|
walletOS: 'api',
|
|
332
|
+
walletDeviceMessageToken,
|
|
333
|
+
walletDeviceId,
|
|
328
334
|
},
|
|
329
335
|
});
|
|
330
336
|
return {
|
|
@@ -466,6 +472,8 @@ module.exports = {
|
|
|
466
472
|
{ ...sessionConfig, didConnectVersion: getDidConnectVersion(req) }
|
|
467
473
|
);
|
|
468
474
|
const ua = req.get('user-agent');
|
|
475
|
+
const walletDeviceMessageToken = req.get('wallet-device-message-token');
|
|
476
|
+
const walletDeviceId = req.get('wallet-device-id');
|
|
469
477
|
const userSession = await node.upsertUserSession({
|
|
470
478
|
visitorId,
|
|
471
479
|
teamDid,
|
|
@@ -476,6 +484,8 @@ module.exports = {
|
|
|
476
484
|
lastLoginIp,
|
|
477
485
|
extra: {
|
|
478
486
|
walletOS,
|
|
487
|
+
walletDeviceMessageToken,
|
|
488
|
+
walletDeviceId,
|
|
479
489
|
},
|
|
480
490
|
});
|
|
481
491
|
node.syncUserSession({
|
|
@@ -488,6 +498,8 @@ module.exports = {
|
|
|
488
498
|
lastLoginIp,
|
|
489
499
|
extra: {
|
|
490
500
|
walletOS,
|
|
501
|
+
walletDeviceMessageToken,
|
|
502
|
+
walletDeviceId,
|
|
491
503
|
},
|
|
492
504
|
});
|
|
493
505
|
|
|
@@ -103,6 +103,8 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
|
|
|
103
103
|
|
|
104
104
|
const lastLoginIp = req.get('x-real-ip');
|
|
105
105
|
const ua = req.get('user-agent');
|
|
106
|
+
const walletDeviceMessageToken = req.get('wallet-device-message-token');
|
|
107
|
+
const walletDeviceId = req.get('wallet-device-id');
|
|
106
108
|
const userSessionDoc = await node.upsertUserSession({
|
|
107
109
|
teamDid,
|
|
108
110
|
visitorId,
|
|
@@ -114,6 +116,8 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
|
|
|
114
116
|
lastLoginIp,
|
|
115
117
|
extra: {
|
|
116
118
|
walletOS,
|
|
119
|
+
walletDeviceMessageToken,
|
|
120
|
+
walletDeviceId,
|
|
117
121
|
},
|
|
118
122
|
});
|
|
119
123
|
node.syncUserSession({
|
|
@@ -126,6 +130,8 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
|
|
|
126
130
|
lastLoginIp,
|
|
127
131
|
extra: {
|
|
128
132
|
walletOS,
|
|
133
|
+
walletDeviceMessageToken,
|
|
134
|
+
walletDeviceId,
|
|
129
135
|
},
|
|
130
136
|
});
|
|
131
137
|
await updateSession(
|
|
@@ -46,6 +46,8 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
|
|
|
46
46
|
const walletOS = req.context?.didwallet?.os;
|
|
47
47
|
const lastLoginIp = req.get('x-real-ip');
|
|
48
48
|
const ua = req.get('user-agent');
|
|
49
|
+
const walletDeviceMessageToken = req.get('wallet-device-message-token');
|
|
50
|
+
const walletDeviceId = req.get('wallet-device-id');
|
|
49
51
|
|
|
50
52
|
const { response, passport, role } = await handleIssuePassportResponse({
|
|
51
53
|
req,
|
|
@@ -89,6 +91,8 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
|
|
|
89
91
|
lastLoginIp,
|
|
90
92
|
extra: {
|
|
91
93
|
walletOS,
|
|
94
|
+
walletDeviceMessageToken,
|
|
95
|
+
walletDeviceId,
|
|
92
96
|
},
|
|
93
97
|
});
|
|
94
98
|
node.syncUserSession({
|
|
@@ -101,6 +105,8 @@ module.exports = function createRoutes(node, authenticator, createSessionToken)
|
|
|
101
105
|
lastLoginIp,
|
|
102
106
|
extra: {
|
|
103
107
|
walletOS,
|
|
108
|
+
walletDeviceMessageToken,
|
|
109
|
+
walletDeviceId,
|
|
104
110
|
},
|
|
105
111
|
});
|
|
106
112
|
|
|
@@ -54,7 +54,7 @@ module.exports = {
|
|
|
54
54
|
user.avatar.split('/').slice(-1)[0]
|
|
55
55
|
}`;
|
|
56
56
|
|
|
57
|
-
if (req.
|
|
57
|
+
if (req.get('x-avatar-host') === '1') {
|
|
58
58
|
const appUrl = blocklet.environmentObj.BLOCKLET_APP_URL;
|
|
59
59
|
user.avatar = joinURL(appUrl, user.avatar);
|
|
60
60
|
}
|
|
@@ -193,7 +193,7 @@ module.exports = {
|
|
|
193
193
|
user.avatar.split('/').slice(-1)[0]
|
|
194
194
|
}`;
|
|
195
195
|
|
|
196
|
-
if (req.
|
|
196
|
+
if (req.get('x-avatar-host') === '1') {
|
|
197
197
|
const appUrl = blocklet.environmentObj.BLOCKLET_APP_URL;
|
|
198
198
|
user.avatar = joinURL(appUrl, user.avatar);
|
|
199
199
|
}
|
|
@@ -214,6 +214,8 @@ module.exports = {
|
|
|
214
214
|
);
|
|
215
215
|
const ua = req.get('user-agent');
|
|
216
216
|
const lastLoginIp = req.get('x-real-ip');
|
|
217
|
+
const walletDeviceMessageToken = req.get('wallet-device-message-token');
|
|
218
|
+
const walletDeviceId = req.get('wallet-device-id');
|
|
217
219
|
const userSession = await node.upsertUserSession({
|
|
218
220
|
visitorId,
|
|
219
221
|
teamDid,
|
|
@@ -224,6 +226,8 @@ module.exports = {
|
|
|
224
226
|
lastLoginIp,
|
|
225
227
|
extra: {
|
|
226
228
|
walletOS,
|
|
229
|
+
walletDeviceMessageToken,
|
|
230
|
+
walletDeviceId,
|
|
227
231
|
},
|
|
228
232
|
});
|
|
229
233
|
if (user?.sourceAppPid) {
|
|
@@ -236,6 +240,8 @@ module.exports = {
|
|
|
236
240
|
lastLoginIp,
|
|
237
241
|
extra: {
|
|
238
242
|
walletOS,
|
|
243
|
+
walletDeviceMessageToken,
|
|
244
|
+
walletDeviceId,
|
|
239
245
|
},
|
|
240
246
|
});
|
|
241
247
|
}
|
|
@@ -8,7 +8,7 @@ const { PREFIXES } = require('../../util/constants');
|
|
|
8
8
|
const logger = require('../../libs/logger')('notification');
|
|
9
9
|
const { sendToAppChannel } = require('../../socket/channel/app');
|
|
10
10
|
const { sendToAppComponents } = require('../../socket/channel/component');
|
|
11
|
-
const { sendToUserDid, sendToAppDid, sendToMail } = require('../../socket/channel/did');
|
|
11
|
+
const { sendToUserDid, sendToAppDid, sendToMail, sendToPush } = require('../../socket/channel/did');
|
|
12
12
|
const getHooksByChannel = require('../../socket/channel/hooks');
|
|
13
13
|
const { getTokenInfo } = require('../../socket/util');
|
|
14
14
|
|
|
@@ -131,6 +131,17 @@ const init = ({ node }) => {
|
|
|
131
131
|
}
|
|
132
132
|
};
|
|
133
133
|
|
|
134
|
+
const onSendToPush = async (req, res) => {
|
|
135
|
+
try {
|
|
136
|
+
const results = await sendToPush({ ...req.body.data, node });
|
|
137
|
+
res.status(200).json(results);
|
|
138
|
+
} catch (error) {
|
|
139
|
+
logger.error('Send batch mail failed', { error });
|
|
140
|
+
res.statusMessage = error.message;
|
|
141
|
+
res.status(400).send(error.message);
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
|
|
134
145
|
const onSendToAppChannel = async (req, res) => {
|
|
135
146
|
try {
|
|
136
147
|
await sendToAppChannel({ ...req.body.data, node, wsServer });
|
|
@@ -162,6 +173,15 @@ const init = ({ node }) => {
|
|
|
162
173
|
exec: (data) => sendToMail({ ...data, node, wsServer }),
|
|
163
174
|
},
|
|
164
175
|
|
|
176
|
+
sendToPush: {
|
|
177
|
+
attach: (app) => {
|
|
178
|
+
PREFIXES.forEach((prefix) => {
|
|
179
|
+
app.post(`${prefix}/api/send-to-push-kit`, onSendToPush);
|
|
180
|
+
});
|
|
181
|
+
},
|
|
182
|
+
exec: (data) => sendToMail({ ...data, node, wsServer }),
|
|
183
|
+
},
|
|
184
|
+
|
|
165
185
|
sendToApp: {
|
|
166
186
|
exec: ({ event, appDid, data }) => sendToAppDid({ event, appDid, data, node, wsServer }),
|
|
167
187
|
},
|