From f07fd055f0774d4692753ff6f5f8dbb494dbd1d4 Mon Sep 17 00:00:00 2001 From: mkue Date: Sat, 11 Nov 2023 11:57:02 +0100 Subject: [PATCH 1/2] feature(website): update account dashboard --- seed/auth_export/accounts.json | 2 +- seed/firebase-export-metadata.json | 8 +- .../all_namespaces_all_kinds.export_metadata | Bin 52 -> 52 bytes .../all_namespaces/all_kinds/output-0 | Bin 154451 -> 175987 bytes .../firestore_export.overall_export_metadata | Bin 97 -> 97 bytes shared/locales/en/website-me.json | 40 ++++++- shared/src/firebase/client/init.ts | 22 ++-- shared/src/utils/date.ts | 15 ++- shared/src/utils/messaging/email.ts | 12 +- shared/src/utils/messaging/whatsapp.ts | 9 +- shared/src/utils/templates.ts | 9 +- ui/CONTRIBUTING.md | 8 +- ui/src/components/button.tsx | 2 +- ui/src/components/carousel.tsx | 11 +- ui/src/components/form.tsx | 6 +- ui/src/components/typography/typography.tsx | 22 ++-- .../(website)/(home)/section-1-form.tsx | 6 +- .../(website)/donate/individual/page.tsx | 9 +- .../[region]/(website)/login/login-form.tsx | 32 ++--- .../[lang]/[region]/(website)/login/page.tsx | 7 +- .../contributions/billing-portal-button.tsx | 35 ------ .../me/contributions/contributions-table.tsx | 28 ++++- .../(website)/me/contributions/page.tsx | 18 +-- .../[region]/(website)/me/layout-client.tsx | 110 ++++++++++++++++++ .../[region]/(website)/me/layout-tab.tsx | 21 ---- .../[lang]/[region]/(website)/me/layout.tsx | 39 +++---- .../app/[lang]/[region]/(website)/me/page.tsx | 16 ++- .../page.tsx | 58 ++++++--- .../[region]/(website)/me/security/page.tsx | 20 ++++ .../subscriptions/billing-portal-button.tsx | 31 +++++ .../(website)/me/subscriptions/page.tsx | 23 ++++ .../me/subscriptions/subscriptions-table.tsx | 82 +++++++++++++ .../(website)/me/user-context-provider.tsx | 19 +-- .../[currency]/charts/transparency-charts.tsx | 9 +- .../finances/[currency]/info-card.tsx | 12 +- .../transparency/finances/[currency]/page.tsx | 9 +- .../transparency/finances/layout.tsx | 7 ++ .../(website)/transparency/finances/page.tsx | 16 ++- .../stripe/billing-portal-session/route.ts | 20 ++++ .../checkout/{new => new-payment}/route.ts | 25 ++-- .../route.ts | 18 +-- website/src/app/context-providers.tsx | 23 ++-- website/src/components/i18n-dialog.tsx | 10 +- .../src/components/navbar/navbar-client.tsx | 12 +- website/src/components/ui/book.tsx | 15 ++- website/src/firebase-admin.ts | 11 +- website/src/hooks/useCookieState.ts | 8 +- website/src/hooks/useTranslator.ts | 16 +-- 48 files changed, 673 insertions(+), 258 deletions(-) delete mode 100644 website/src/app/[lang]/[region]/(website)/me/contributions/billing-portal-button.tsx create mode 100644 website/src/app/[lang]/[region]/(website)/me/layout-client.tsx delete mode 100644 website/src/app/[lang]/[region]/(website)/me/layout-tab.tsx rename website/src/app/[lang]/[region]/(website)/me/{contact-details => personal-info}/page.tsx (80%) create mode 100644 website/src/app/[lang]/[region]/(website)/me/security/page.tsx create mode 100644 website/src/app/[lang]/[region]/(website)/me/subscriptions/billing-portal-button.tsx create mode 100644 website/src/app/[lang]/[region]/(website)/me/subscriptions/page.tsx create mode 100644 website/src/app/[lang]/[region]/(website)/me/subscriptions/subscriptions-table.tsx create mode 100644 website/src/app/[lang]/[region]/(website)/transparency/finances/layout.tsx create mode 100644 website/src/app/api/stripe/billing-portal-session/route.ts rename website/src/app/api/stripe/checkout/{new => new-payment}/route.ts (57%) rename website/src/app/api/stripe/{billing-portal => subscriptions}/route.ts (71%) diff --git a/seed/auth_export/accounts.json b/seed/auth_export/accounts.json index 748c7fada..b9dcd81ab 100644 --- a/seed/auth_export/accounts.json +++ b/seed/auth_export/accounts.json @@ -1 +1 @@ -{"kind":"identitytoolkit#DownloadAccountResponse","users":[{"localId":"2GeVUz2NG6hAC2WULTB4eR8M87gY","createdAt":"1678452278821","lastLoginAt":"1678452278821","passwordHash":"fakeHash:salt=fakeSaltMbzfosdPahHwAY5BrSFQ:password=zVpFMTDH1dekvg7PtQkniXFlGyfAG6VFbtVveTv-cv-k_lkFTl7swMO0vOkSerXfhAxYJ0NRTrIiYOSHQH6XYQ","salt":"fakeSaltMbzfosdPahHwAY5BrSFQ","passwordUpdatedAt":1693477819819,"providerUserInfo":[{"providerId":"password","email":"nr_xp1jugbgifjsz5lsuhfnzyhgeillbqpmqxoujva1llewjbi-_urxy5cmzq3mnvta6crpzhbroqooebdjzbq@socialincome.org","federatedId":"nr_xp1jugbgifjsz5lsuhfnzyhgeillbqpmqxoujva1llewjbi-_urxy5cmzq3mnvta6crpzhbroqooebdjzbq@socialincome.org","rawId":"nr_xp1jugbgifjsz5lsuhfnzyhgeillbqpmqxoujva1llewjbi-_urxy5cmzq3mnvta6crpzhbroqooebdjzbq@socialincome.org"}],"validSince":"1693477819","email":"nr_xp1jugbgifjsz5lsuhfnzyhgeillbqpmqxoujva1llewjbi-_urxy5cmzq3mnvta6crpzhbroqooebdjzbq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"4bm2wkaCDVIH2vSVYiMBSARdQ7Qh","createdAt":"1678452278822","lastLoginAt":"1678452278822","passwordHash":"fakeHash:salt=fakeSaltom1YpsrzYOBNFuiAjsgU:password=cWbQY5pDhFxdbObTKPvqFAdjHuKPm-HQySx559m_rG-GdTTefyfSDRczfBw8FiROuR4UwalJC9dIn0Rmz9mmOQ","salt":"fakeSaltom1YpsrzYOBNFuiAjsgU","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"8icxrugnfx_td6uocwsf9ec3n7umzrawbufjxbi2aazk9tnrky5zdunfmavfe3mp5wxbziq-jewnjqsdo5ih_w@socialincome.org","federatedId":"8icxrugnfx_td6uocwsf9ec3n7umzrawbufjxbi2aazk9tnrky5zdunfmavfe3mp5wxbziq-jewnjqsdo5ih_w@socialincome.org","rawId":"8icxrugnfx_td6uocwsf9ec3n7umzrawbufjxbi2aazk9tnrky5zdunfmavfe3mp5wxbziq-jewnjqsdo5ih_w@socialincome.org"}],"validSince":"1693477819","email":"8icxrugnfx_td6uocwsf9ec3n7umzrawbufjxbi2aazk9tnrky5zdunfmavfe3mp5wxbziq-jewnjqsdo5ih_w@socialincome.org","emailVerified":true,"disabled":false},{"localId":"57TeNyQuEFxFC32dNIoKq18oqGl1","createdAt":"1681401147929","lastLoginAt":"1681401147929","passwordHash":"fakeHash:salt=fakeSaltBljAJuo8DF0RS8PQ7UBG:password=HKfxhFRhkFW9t_AHV02Jyw","salt":"fakeSaltBljAJuo8DF0RS8PQ7UBG","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"ydabjh5ghvfti3tcqhb-6w@si.org","federatedId":"ydabjh5ghvfti3tcqhb-6w@si.org","rawId":"ydabjh5ghvfti3tcqhb-6w@si.org"}],"validSince":"1693477819","email":"ydabjh5ghvfti3tcqhb-6w@si.org","emailVerified":true,"disabled":false},{"localId":"5eCnvDtkjyDvokzCLEIXyOBaRlF4","createdAt":"1678452278827","lastLoginAt":"1678452278827","passwordHash":"fakeHash:salt=fakeSaltpy7NLFBNxgTMyMr0NJmD:password=JYeYW7r2Pr3AtOU9Blboh8c16H1tx3HiqtXjAydf_vLgFGcFz16V28yWNnkWsPUHe_7HY4yQIafZJ2gCHA9u5Q","salt":"fakeSaltpy7NLFBNxgTMyMr0NJmD","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"bevly6udowblwd4ftlestft_d6wcsww_4rh4tr4d1shhwuyautmzhddy8qcqdbiwb-hgzgygofzr4t3vrlz3sg@socialincome.org","federatedId":"bevly6udowblwd4ftlestft_d6wcsww_4rh4tr4d1shhwuyautmzhddy8qcqdbiwb-hgzgygofzr4t3vrlz3sg@socialincome.org","rawId":"bevly6udowblwd4ftlestft_d6wcsww_4rh4tr4d1shhwuyautmzhddy8qcqdbiwb-hgzgygofzr4t3vrlz3sg@socialincome.org"}],"validSince":"1693477819","email":"bevly6udowblwd4ftlestft_d6wcsww_4rh4tr4d1shhwuyautmzhddy8qcqdbiwb-hgzgygofzr4t3vrlz3sg@socialincome.org","emailVerified":true,"disabled":false},{"localId":"6JWkAqAFX4Yq8YfJisfbjgSnY2PK","createdAt":"1678452278818","lastLoginAt":"1678452278818","passwordHash":"fakeHash:salt=fakeSaltRRci80SUCmePbfp58z6C:password=UaKXIcU-O6FUMSS80hAB54PjUi_TuAIQdh8IYxlWggR7xq30fQ_iEkAroq8vTUlnLp3YhNiGITg1UeJdzxWZeg","salt":"fakeSaltRRci80SUCmePbfp58z6C","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"od63lg3tk0avejeykhxylb2buc9yr_h8npew80llkcjcik0njnozvesgxedi-ndwjokgz9erprdyfqtfx-r98a@socialincome.org","federatedId":"od63lg3tk0avejeykhxylb2buc9yr_h8npew80llkcjcik0njnozvesgxedi-ndwjokgz9erprdyfqtfx-r98a@socialincome.org","rawId":"od63lg3tk0avejeykhxylb2buc9yr_h8npew80llkcjcik0njnozvesgxedi-ndwjokgz9erprdyfqtfx-r98a@socialincome.org"}],"validSince":"1693477819","email":"od63lg3tk0avejeykhxylb2buc9yr_h8npew80llkcjcik0njnozvesgxedi-ndwjokgz9erprdyfqtfx-r98a@socialincome.org","emailVerified":true,"disabled":false},{"localId":"6dAr9ox63mz45BeB6uUKIugexXYI","createdAt":"1681401147938","lastLoginAt":"1681401147938","passwordHash":"fakeHash:salt=fakeSalte7zh9ZjE6eWfCqCBoFRr:password=bfw1q2DZoPXeXGhZtI7tyw","salt":"fakeSalte7zh9ZjE6eWfCqCBoFRr","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"hqyssoq_uvg7dcls2sws_q@si.org","federatedId":"hqyssoq_uvg7dcls2sws_q@si.org","rawId":"hqyssoq_uvg7dcls2sws_q@si.org"}],"validSince":"1693477819","email":"hqyssoq_uvg7dcls2sws_q@si.org","emailVerified":true,"disabled":false},{"localId":"75B7GPdWlKgbUtCd7Pnn81NCwzYc","createdAt":"1678452278812","lastLoginAt":"1678452278812","passwordHash":"fakeHash:salt=fakeSaltVMDtddQLgL5UkqClcr7s:password=5jCRNCw58hkv8eo3vFrZOGgVFfB2iJRhXzRSVFzGo5L3PJ5K51dE0QPBXdQ2MBtHivN9ul3bDUY-plHJRDySbA","salt":"fakeSaltVMDtddQLgL5UkqClcr7s","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"reolvvex7wtxr0ovidvk9jw-i28ynikzvmlhvz1t5w6xs8p2srqkgfqcmz9bwf2absswyqaqbk1jlx16lqck3a@socialincome.org","federatedId":"reolvvex7wtxr0ovidvk9jw-i28ynikzvmlhvz1t5w6xs8p2srqkgfqcmz9bwf2absswyqaqbk1jlx16lqck3a@socialincome.org","rawId":"reolvvex7wtxr0ovidvk9jw-i28ynikzvmlhvz1t5w6xs8p2srqkgfqcmz9bwf2absswyqaqbk1jlx16lqck3a@socialincome.org"}],"validSince":"1693477819","email":"reolvvex7wtxr0ovidvk9jw-i28ynikzvmlhvz1t5w6xs8p2srqkgfqcmz9bwf2absswyqaqbk1jlx16lqck3a@socialincome.org","emailVerified":true,"disabled":false},{"localId":"7EwNgUDtgXX00g9xaNTBdkxCmGJ8","createdAt":"1681401147927","lastLoginAt":"1681401147927","passwordHash":"fakeHash:salt=fakeSaltsTAfp05WOLegheZj8uRO:password=CYy9GSXnQvnLuisYQTHtiw","salt":"fakeSaltsTAfp05WOLegheZj8uRO","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"_5d7qdti0-njchfmroy-jq@si.org","federatedId":"_5d7qdti0-njchfmroy-jq@si.org","rawId":"_5d7qdti0-njchfmroy-jq@si.org"}],"validSince":"1693477819","email":"_5d7qdti0-njchfmroy-jq@si.org","emailVerified":true,"disabled":false},{"localId":"7UPrHjT1lm8zCdAiuRey8DMcNHYK","createdAt":"1678452278825","lastLoginAt":"1678452278825","passwordHash":"fakeHash:salt=fakeSaltjfQ3l6DjVHUg7qnrATFt:password=vOxdsK6Ip3zdHkjUx2iGVS1jsoE8ZE8JjjNVLZLlzZzFYhXdCGQWghDI4ZiX59ZCIZdWWhJRuHEQF4v3X9MeDg","salt":"fakeSaltjfQ3l6DjVHUg7qnrATFt","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"5yve3zvsybyfn2nxx91zlunpoeq27mnsaunkoiw1zacwkfgsb5cecyp4jnyvto8ioiref7wwuxorghpsgv_c5g@socialincome.org","federatedId":"5yve3zvsybyfn2nxx91zlunpoeq27mnsaunkoiw1zacwkfgsb5cecyp4jnyvto8ioiref7wwuxorghpsgv_c5g@socialincome.org","rawId":"5yve3zvsybyfn2nxx91zlunpoeq27mnsaunkoiw1zacwkfgsb5cecyp4jnyvto8ioiref7wwuxorghpsgv_c5g@socialincome.org"}],"validSince":"1693477819","email":"5yve3zvsybyfn2nxx91zlunpoeq27mnsaunkoiw1zacwkfgsb5cecyp4jnyvto8ioiref7wwuxorghpsgv_c5g@socialincome.org","emailVerified":true,"disabled":false},{"localId":"7vcKDBdrGA7kNm13BgznVGJOh3mL","createdAt":"1681401147947","lastLoginAt":"1681401147947","passwordHash":"fakeHash:salt=fakeSalt4FmM9HdtqmUTkavSsod4:password=jwjFJV0ienZ__S7SbX8QJQ","salt":"fakeSalt4FmM9HdtqmUTkavSsod4","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"w0u0ofadvlgv0ehzuvcjbg@si.org","federatedId":"w0u0ofadvlgv0ehzuvcjbg@si.org","rawId":"w0u0ofadvlgv0ehzuvcjbg@si.org"}],"validSince":"1693477819","email":"w0u0ofadvlgv0ehzuvcjbg@si.org","emailVerified":true,"disabled":false},{"localId":"80uerz2Rq7cUBAf4YPSxqW5JNmTf","createdAt":"1681401147927","lastLoginAt":"1681401147927","passwordHash":"fakeHash:salt=fakeSaltP69ucr9s2gBb2DNiu3Qz:password=9tS6dk1eadVQQuboNWni8g","salt":"fakeSaltP69ucr9s2gBb2DNiu3Qz","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"mxcljb8ly1wsjbjbw1nwxg@si.org","federatedId":"mxcljb8ly1wsjbjbw1nwxg@si.org","rawId":"mxcljb8ly1wsjbjbw1nwxg@si.org"}],"validSince":"1693477819","email":"mxcljb8ly1wsjbjbw1nwxg@si.org","emailVerified":true,"disabled":false},{"localId":"9YHX9rpzg8dR3QEwoLUuhwbgR7ei","createdAt":"1681401147935","lastLoginAt":"1681401147935","passwordHash":"fakeHash:salt=fakeSaltFR1T6dp1PuVRFdxFg3uC:password=gfg76DmdDrS5DrYJu9esAw","salt":"fakeSaltFR1T6dp1PuVRFdxFg3uC","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"jfxaxatnpmfy9bnjgmcamq@si.org","federatedId":"jfxaxatnpmfy9bnjgmcamq@si.org","rawId":"jfxaxatnpmfy9bnjgmcamq@si.org"}],"validSince":"1693477819","email":"jfxaxatnpmfy9bnjgmcamq@si.org","emailVerified":true,"disabled":false},{"localId":"A9DRYBUi9jvS9ou9Lhqm0KNBZsPO","createdAt":"1678452278831","lastLoginAt":"1678452278831","passwordHash":"fakeHash:salt=fakeSaltTXjQ8sucYO9VdEVsr1Iq:password=SQZHEswfrSff9Be_zPRNRkgzgNM7ky4aWupF_z2yYI6KYD2IvLdxHj2HWGnSOoH9LwI9WZpvZmF0mJy5mGZpqQ","salt":"fakeSaltTXjQ8sucYO9VdEVsr1Iq","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"t198gjykspb9eucv2ijxlb6z-amr_7gd4l5kf5u901jebzdcpj1wv-gami3fdutz2ujldai6ipwqi_ktsnatxa@socialincome.org","federatedId":"t198gjykspb9eucv2ijxlb6z-amr_7gd4l5kf5u901jebzdcpj1wv-gami3fdutz2ujldai6ipwqi_ktsnatxa@socialincome.org","rawId":"t198gjykspb9eucv2ijxlb6z-amr_7gd4l5kf5u901jebzdcpj1wv-gami3fdutz2ujldai6ipwqi_ktsnatxa@socialincome.org"}],"validSince":"1693477819","email":"t198gjykspb9eucv2ijxlb6z-amr_7gd4l5kf5u901jebzdcpj1wv-gami3fdutz2ujldai6ipwqi_ktsnatxa@socialincome.org","emailVerified":true,"disabled":false},{"localId":"BJbjxfKzA5Y9HxaQsAop8tOyhZpg","createdAt":"1681401147936","lastLoginAt":"1681401147936","passwordHash":"fakeHash:salt=fakeSaltwtBjlYC3FtuRQrEv6C0w:password=c--Qqg50wDu7lYJxph0fKQ","salt":"fakeSaltwtBjlYC3FtuRQrEv6C0w","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"-s_r5wxxgqvi4ruhsgbbdg@si.org","federatedId":"-s_r5wxxgqvi4ruhsgbbdg@si.org","rawId":"-s_r5wxxgqvi4ruhsgbbdg@si.org"}],"validSince":"1693477819","email":"-s_r5wxxgqvi4ruhsgbbdg@si.org","emailVerified":true,"disabled":false},{"localId":"ChMxI258GdulwutnLqn32Gu2DgT3","createdAt":"1681401147937","lastLoginAt":"1681401147937","passwordHash":"fakeHash:salt=fakeSaltbpLPhrV75a5TfDUBeXnE:password=3Zd9l9sr0Lbjb2l21mL1hg","salt":"fakeSaltbpLPhrV75a5TfDUBeXnE","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"g5p8fcx3jmpjkyt3mzvcsa@si.org","federatedId":"g5p8fcx3jmpjkyt3mzvcsa@si.org","rawId":"g5p8fcx3jmpjkyt3mzvcsa@si.org"}],"validSince":"1693477819","email":"g5p8fcx3jmpjkyt3mzvcsa@si.org","emailVerified":true,"disabled":false},{"localId":"DInpFIPKi3VBLyrH2kokYMRvHN7z","createdAt":"1681401147923","lastLoginAt":"1681401147923","passwordHash":"fakeHash:salt=fakeSaltLopw0aPFhaNV2kjtxbgL:password=ZL4zXay4-VUTOuQwclRcOA","salt":"fakeSaltLopw0aPFhaNV2kjtxbgL","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"8df7v2jvpij720_te2gbfg@si.org","federatedId":"8df7v2jvpij720_te2gbfg@si.org","rawId":"8df7v2jvpij720_te2gbfg@si.org"}],"validSince":"1693477819","email":"8df7v2jvpij720_te2gbfg@si.org","emailVerified":true,"disabled":false},{"localId":"DiKyIdncaRrIodxWLviXqmDH83yE","createdAt":"1678452278831","lastLoginAt":"1678452278831","passwordHash":"fakeHash:salt=fakeSaltL220p7odD4qCzt1Rx3QM:password=93NmUy3VIDZ5LhSIdX9YrIUP4Ppl_V3FUmJYjvLih4IB0ufqI-qONdtuOt77g7m14uAZbLfCgHV_hJ7axNhuwg","salt":"fakeSaltL220p7odD4qCzt1Rx3QM","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"8w7kyn0rjhcyvfg47saq85efu5a_aimkgpljmsfzuulvwfcdql--ltza6stx08z4zk1aoatwmqpukkniikwhfa@socialincome.org","federatedId":"8w7kyn0rjhcyvfg47saq85efu5a_aimkgpljmsfzuulvwfcdql--ltza6stx08z4zk1aoatwmqpukkniikwhfa@socialincome.org","rawId":"8w7kyn0rjhcyvfg47saq85efu5a_aimkgpljmsfzuulvwfcdql--ltza6stx08z4zk1aoatwmqpukkniikwhfa@socialincome.org"}],"validSince":"1693477819","email":"8w7kyn0rjhcyvfg47saq85efu5a_aimkgpljmsfzuulvwfcdql--ltza6stx08z4zk1aoatwmqpukkniikwhfa@socialincome.org","emailVerified":true,"disabled":false},{"localId":"Dvhrwtnvx3oeFIeckgzEJvQ82HLi","createdAt":"1681401147937","lastLoginAt":"1681401147937","passwordHash":"fakeHash:salt=fakeSaltRlZlazMdiIWEYOQ97Izk:password=7RuE9jVkp4QH-MHNUMOSnQ","salt":"fakeSaltRlZlazMdiIWEYOQ97Izk","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"2mqsdqcepbjbl4xi9nkrka@si.org","federatedId":"2mqsdqcepbjbl4xi9nkrka@si.org","rawId":"2mqsdqcepbjbl4xi9nkrka@si.org"}],"validSince":"1693477819","email":"2mqsdqcepbjbl4xi9nkrka@si.org","emailVerified":true,"disabled":false},{"localId":"E3Ae94PGNxwJ1yxp368lVzLxy21m","createdAt":"1681401147930","lastLoginAt":"1681401147930","passwordHash":"fakeHash:salt=fakeSalt8DFipumbFUK50FWRRWqE:password=VKHpDRIydA7OTJFpQExUXw","salt":"fakeSalt8DFipumbFUK50FWRRWqE","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"68zlgsrgyysyxzc-y2y5iw@si.org","federatedId":"68zlgsrgyysyxzc-y2y5iw@si.org","rawId":"68zlgsrgyysyxzc-y2y5iw@si.org"}],"validSince":"1693477819","email":"68zlgsrgyysyxzc-y2y5iw@si.org","emailVerified":true,"disabled":false},{"localId":"ER2eB2NwWuvlCXsrp11t23LeCSvD","createdAt":"1681401147935","lastLoginAt":"1681401147935","passwordHash":"fakeHash:salt=fakeSaltPJolgoZ7FvzVIPDG7SRj:password=yBxBmAAGRNhBinFZEiX6yQ","salt":"fakeSaltPJolgoZ7FvzVIPDG7SRj","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"wnwrenn9nmbshkghqdt0fw@si.org","federatedId":"wnwrenn9nmbshkghqdt0fw@si.org","rawId":"wnwrenn9nmbshkghqdt0fw@si.org"}],"validSince":"1693477819","email":"wnwrenn9nmbshkghqdt0fw@si.org","emailVerified":true,"disabled":false},{"localId":"HCLTygGIzonXAgESL4Nr6fZ3hL4o","createdAt":"1678452278805","lastLoginAt":"1678452278805","passwordHash":"fakeHash:salt=fakeSaltksD3kasd6kk1ti4mXXZv:password=qzo9vCtRtY6GE5OetPqRd7Ng0L6RKpXEtCbK2Tn1VNMFQHCHQpISwX2VlH06NXuLkQjZnbeg7-XdWRG3FXuJXg","salt":"fakeSaltksD3kasd6kk1ti4mXXZv","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"heyikhqu_azbkqc1v3ol73urwmnml23erpb7rshpn83h623ubxhe8bztqwxoqhhwanl8-hfcrwa8jrltz2bo6g@socialincome.org","federatedId":"heyikhqu_azbkqc1v3ol73urwmnml23erpb7rshpn83h623ubxhe8bztqwxoqhhwanl8-hfcrwa8jrltz2bo6g@socialincome.org","rawId":"heyikhqu_azbkqc1v3ol73urwmnml23erpb7rshpn83h623ubxhe8bztqwxoqhhwanl8-hfcrwa8jrltz2bo6g@socialincome.org"}],"validSince":"1693477819","email":"heyikhqu_azbkqc1v3ol73urwmnml23erpb7rshpn83h623ubxhe8bztqwxoqhhwanl8-hfcrwa8jrltz2bo6g@socialincome.org","emailVerified":true,"disabled":false},{"localId":"HISd8dsly9AItAYgyesmiXLiIMXH","createdAt":"1681401147940","lastLoginAt":"1681401147940","passwordHash":"fakeHash:salt=fakeSalt4bWRYsXwm1cYucUBup1a:password=EL0A9km2i_6mhGy4RGeM5A","salt":"fakeSalt4bWRYsXwm1cYucUBup1a","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"dovdwbgqpt_m2a2k9wzmrw@si.org","federatedId":"dovdwbgqpt_m2a2k9wzmrw@si.org","rawId":"dovdwbgqpt_m2a2k9wzmrw@si.org"}],"validSince":"1693477819","email":"dovdwbgqpt_m2a2k9wzmrw@si.org","emailVerified":true,"disabled":false},{"localId":"IKOqChHZpCEprxBOWtdCOWO5siDq","createdAt":"1678452278808","lastLoginAt":"1678452278808","passwordHash":"fakeHash:salt=fakeSaltAeslocY6qPXkpYwQ9acZ:password=Jv2ZTLLOH1MT5I2MIFcH3E7YTTAWnwgsn_MzxOHJsCDUtf5chvdoLDoC0QG98wHq7hiOAUQVfOi-iGAPNkezBg","salt":"fakeSaltAeslocY6qPXkpYwQ9acZ","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"nc18my-ntsijt1t-683yiw8ly52lk4wb5cw6hmfcyjyakgr0yv0bnxopopa_ekbwltrjjjydebit0dhyuik2la@socialincome.org","federatedId":"nc18my-ntsijt1t-683yiw8ly52lk4wb5cw6hmfcyjyakgr0yv0bnxopopa_ekbwltrjjjydebit0dhyuik2la@socialincome.org","rawId":"nc18my-ntsijt1t-683yiw8ly52lk4wb5cw6hmfcyjyakgr0yv0bnxopopa_ekbwltrjjjydebit0dhyuik2la@socialincome.org"}],"validSince":"1693477819","email":"nc18my-ntsijt1t-683yiw8ly52lk4wb5cw6hmfcyjyakgr0yv0bnxopopa_ekbwltrjjjydebit0dhyuik2la@socialincome.org","emailVerified":true,"disabled":false},{"localId":"IlHw0YS9F1Z9FgalYFITZMNhhsC3","createdAt":"1692970238713","lastLoginAt":"1693478331791","displayName":"","photoUrl":"","passwordHash":"fakeHash:salt=fakeSaltYlAV2bt4t6lnvkBGfwWS:password=qkj@DUE.wxg.cwq5jdc","salt":"fakeSaltYlAV2bt4t6lnvkBGfwWS","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"michael.kuendig+stripe-test@gmail.com","federatedId":"michael.kuendig+stripe-test@gmail.com","rawId":"michael.kuendig+stripe-test@gmail.com","displayName":"","photoUrl":""}],"validSince":"1693477819","email":"michael.kuendig+stripe-test@gmail.com","emailVerified":false,"disabled":false,"lastRefreshAt":"2023-08-31T10:39:37.010Z"},{"localId":"IlhLFJ9cJqfKUTfYFOZJF96XZfQF","createdAt":"1678452278815","lastLoginAt":"1678452278815","passwordHash":"fakeHash:salt=fakeSaltgrzBs5h9wmunTSdvXHIx:password=kycMoXMZ3Hb9Xb7xfJRxvxrxTTSNcLXrmA-gQ24uO_4bn3nT_653W9fgO2wliAyHeniVhcDGnu6LpHvmrxLfEg","salt":"fakeSaltgrzBs5h9wmunTSdvXHIx","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"abmyhih0ynceqwiicwzamn0edxlvjkc8mzokiyy87fdtp4ojmxxvvf17y8iwgw-6p1i-excocuntxuzxpdz5lq@socialincome.org","federatedId":"abmyhih0ynceqwiicwzamn0edxlvjkc8mzokiyy87fdtp4ojmxxvvf17y8iwgw-6p1i-excocuntxuzxpdz5lq@socialincome.org","rawId":"abmyhih0ynceqwiicwzamn0edxlvjkc8mzokiyy87fdtp4ojmxxvvf17y8iwgw-6p1i-excocuntxuzxpdz5lq@socialincome.org"}],"validSince":"1693477819","email":"abmyhih0ynceqwiicwzamn0edxlvjkc8mzokiyy87fdtp4ojmxxvvf17y8iwgw-6p1i-excocuntxuzxpdz5lq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"JV8FdFD1HvlBRGtaXNcheyA92Ve6","createdAt":"1681401147934","lastLoginAt":"1681401147934","passwordHash":"fakeHash:salt=fakeSaltEcY78bXuvseO85mRF1Gw:password=-01DYtgORW6MPBuNujQGyQ","salt":"fakeSaltEcY78bXuvseO85mRF1Gw","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"56m-fludos_w5obeiyxd7w@si.org","federatedId":"56m-fludos_w5obeiyxd7w@si.org","rawId":"56m-fludos_w5obeiyxd7w@si.org"}],"validSince":"1693477819","email":"56m-fludos_w5obeiyxd7w@si.org","emailVerified":true,"disabled":false},{"localId":"JfPfN1qsdomTcpk9meUh5FnRxY18","createdAt":"1693389087774","lastLoginAt":"1693389087774","displayName":"","photoUrl":"","passwordHash":"fakeHash:salt=fakeSalti1aTJ2h4ViFmNbuieHlv:password=password","salt":"fakeSalti1aTJ2h4ViFmNbuieHlv","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"test@example.com","federatedId":"test@example.com","rawId":"test@example.com","displayName":"","photoUrl":""}],"validSince":"1693477819","email":"test@example.com","emailVerified":true,"disabled":false},{"localId":"JzXFD6NgG3ST713DNOkZUNLkD7M0","createdAt":"1693389328529","lastLoginAt":"1693478057515","displayName":"","photoUrl":"","passwordHash":"fakeHash:salt=fakeSaltOyXkSuMEItgEN7PCnYny:password=9pRyfllCF0jWK5XcLQ5IJQ","salt":"fakeSaltOyXkSuMEItgEN7PCnYny","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"thovvygawgjs1ictnydotg@si.org","federatedId":"thovvygawgjs1ictnydotg@si.org","rawId":"thovvygawgjs1ictnydotg@si.org","displayName":"","photoUrl":""}],"validSince":"1693477819","email":"thovvygawgjs1ictnydotg@si.org","emailVerified":false,"disabled":false,"lastRefreshAt":"2023-08-31T10:38:20.276Z"},{"localId":"K3CW7Amt8msPeC7mSfMGWUyTmG4V","createdAt":"1678452278817","lastLoginAt":"1678452278817","passwordHash":"fakeHash:salt=fakeSaltCXDGDt39HPs62X4MnkQp:password=NYjRf-h0hD_WNetafqSQeG9WtSp0k_VLAv3b08Z3mwbvdw_BpVkL_NCQlTve8yWEEkwX146aKhJXQYel4Xsw4Q","salt":"fakeSaltCXDGDt39HPs62X4MnkQp","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"ilpbbm_ujhtrprql5eqp953g9urknvjqnjxv1uyesg7amjzdxw6s_alch_dq9eccou8p7v7plivx5vcnse2bkg@socialincome.org","federatedId":"ilpbbm_ujhtrprql5eqp953g9urknvjqnjxv1uyesg7amjzdxw6s_alch_dq9eccou8p7v7plivx5vcnse2bkg@socialincome.org","rawId":"ilpbbm_ujhtrprql5eqp953g9urknvjqnjxv1uyesg7amjzdxw6s_alch_dq9eccou8p7v7plivx5vcnse2bkg@socialincome.org"}],"validSince":"1693477819","email":"ilpbbm_ujhtrprql5eqp953g9urknvjqnjxv1uyesg7amjzdxw6s_alch_dq9eccou8p7v7plivx5vcnse2bkg@socialincome.org","emailVerified":true,"disabled":false},{"localId":"KuemHGCBzipGJZzuOzWGGdDsyLFR","createdAt":"1681401147934","lastLoginAt":"1681401147934","passwordHash":"fakeHash:salt=fakeSaltg8tk0BcwuzH59FS7lL7i:password=AbDLunW0_4_aco0mcIdUFw","salt":"fakeSaltg8tk0BcwuzH59FS7lL7i","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"qe193vl_tm9qamzcim9ylq@si.org","federatedId":"qe193vl_tm9qamzcim9ylq@si.org","rawId":"qe193vl_tm9qamzcim9ylq@si.org"}],"validSince":"1693477819","email":"qe193vl_tm9qamzcim9ylq@si.org","emailVerified":true,"disabled":false},{"localId":"Lk6iS7tIuxtl4jZXYeu9DW3PX68Y","createdAt":"1666207539605","lastLoginAt":"1693477958232","displayName":"Admin","providerUserInfo":[{"providerId":"google.com","rawId":"7263616607754755158306200924200494132545","federatedId":"7263616607754755158306200924200494132545","displayName":"Admin","email":"admin@socialincome.org"}],"validSince":"1693477819","email":"admin@socialincome.org","emailVerified":true,"disabled":false,"lastRefreshAt":"2023-08-31T10:32:38.232Z"},{"localId":"Mjb6LiUSudZma2wBxnhgywBM9m9S","createdAt":"1681401147946","lastLoginAt":"1681401147946","passwordHash":"fakeHash:salt=fakeSalt1oDH6yH6lILSZsGdMwlW:password=ZXP-Pq7rxrIUpC63Xgg_eA","salt":"fakeSalt1oDH6yH6lILSZsGdMwlW","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"8ep0tnz6c89etd_84-hxcw@si.org","federatedId":"8ep0tnz6c89etd_84-hxcw@si.org","rawId":"8ep0tnz6c89etd_84-hxcw@si.org"}],"validSince":"1693477819","email":"8ep0tnz6c89etd_84-hxcw@si.org","emailVerified":true,"disabled":false},{"localId":"NmTWJEkpeFQppabGYzgxb51m5yHB","createdAt":"1678452278809","lastLoginAt":"1678452278809","passwordHash":"fakeHash:salt=fakeSaltpbI32jq0xiXa0QBeBqIu:password=OFY7j2WdEENQjWWyviJJIlxAYCvtdGrgWLmhvadJCS7_fZj79kGViV_RRarE_TLMjviwrTeEa4AB0OjFvrOlww","salt":"fakeSaltpbI32jq0xiXa0QBeBqIu","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"wys8vepotxo9chdznstjl_lk48bks8ijucocd3hyltauumkjgw5ziqu9qrbehprjbzjgqjsm10pzo7xmi-sjpq@socialincome.org","federatedId":"wys8vepotxo9chdznstjl_lk48bks8ijucocd3hyltauumkjgw5ziqu9qrbehprjbzjgqjsm10pzo7xmi-sjpq@socialincome.org","rawId":"wys8vepotxo9chdznstjl_lk48bks8ijucocd3hyltauumkjgw5ziqu9qrbehprjbzjgqjsm10pzo7xmi-sjpq@socialincome.org"}],"validSince":"1693477819","email":"wys8vepotxo9chdznstjl_lk48bks8ijucocd3hyltauumkjgw5ziqu9qrbehprjbzjgqjsm10pzo7xmi-sjpq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"Pu8pCEisJmqS6p27ytprEEcIDFyJ","createdAt":"1678452278835","lastLoginAt":"1678452278835","passwordHash":"fakeHash:salt=fakeSaltcNUaWoexRRqH3sveCOe2:password=If_LSfd7ICpLYZ4epZzrJLVX4-CVseCZVnqQjZjeto6xIdUR9y8G9OhvEynRv_ebs1cRa0oPnFbYlnsT8z2ayw","salt":"fakeSaltcNUaWoexRRqH3sveCOe2","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"ouoca_rahg6p1oonhoiwx_9bwgcrnnsldwl6wvl2tbqpufudg5sxjsd_fesps1eb6mqmgaztdzwyblxij6hxpq@socialincome.org","federatedId":"ouoca_rahg6p1oonhoiwx_9bwgcrnnsldwl6wvl2tbqpufudg5sxjsd_fesps1eb6mqmgaztdzwyblxij6hxpq@socialincome.org","rawId":"ouoca_rahg6p1oonhoiwx_9bwgcrnnsldwl6wvl2tbqpufudg5sxjsd_fesps1eb6mqmgaztdzwyblxij6hxpq@socialincome.org"}],"validSince":"1693477819","email":"ouoca_rahg6p1oonhoiwx_9bwgcrnnsldwl6wvl2tbqpufudg5sxjsd_fesps1eb6mqmgaztdzwyblxij6hxpq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"S15i8kOiZNWSePL03AxPr4XzvhvV","createdAt":"1678452278829","lastLoginAt":"1678452278829","passwordHash":"fakeHash:salt=fakeSalttFoMVTgdoCoLD0KcpIhM:password=xoAvZrr5cEIcjexEAt_UTSgHfuQ07nQ-3E_1kxivJ9aEOUQy1zrAWmUikRqyYuBYo64Y_6HDFmKrAMBBNEnhUQ","salt":"fakeSalttFoMVTgdoCoLD0KcpIhM","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"jwtlwdq1h1a7zugz2ptu2y6wjtilb4efpvfbzn83xpdt3pvf-wgcaczbtjgfzlm7i2xjflvquso6g5jv540g0a@socialincome.org","federatedId":"jwtlwdq1h1a7zugz2ptu2y6wjtilb4efpvfbzn83xpdt3pvf-wgcaczbtjgfzlm7i2xjflvquso6g5jv540g0a@socialincome.org","rawId":"jwtlwdq1h1a7zugz2ptu2y6wjtilb4efpvfbzn83xpdt3pvf-wgcaczbtjgfzlm7i2xjflvquso6g5jv540g0a@socialincome.org"}],"validSince":"1693477819","email":"jwtlwdq1h1a7zugz2ptu2y6wjtilb4efpvfbzn83xpdt3pvf-wgcaczbtjgfzlm7i2xjflvquso6g5jv540g0a@socialincome.org","emailVerified":true,"disabled":false},{"localId":"SZTHkkkJPppKz0boNPWb4LZCdETC","createdAt":"1678452278820","lastLoginAt":"1678452278820","passwordHash":"fakeHash:salt=fakeSaltHjUV7WYthMUPgy0XGfss:password=U96zvaDHX_YJQAFXnETlzMAufcSniKDhWTEBPir1tATwB_IvQDSLOv_ijMG-4MKAz5qcjLUj6vAkHxgNoifKWQ","salt":"fakeSaltHjUV7WYthMUPgy0XGfss","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"rcur89aiwp7tc8xr4mu4d_ntxvzqrgi-qpufbjkd7zafeouonr6mjagpn9tet4lsz6qtpoyfz9h-me4av_9z2w@socialincome.org","federatedId":"rcur89aiwp7tc8xr4mu4d_ntxvzqrgi-qpufbjkd7zafeouonr6mjagpn9tet4lsz6qtpoyfz9h-me4av_9z2w@socialincome.org","rawId":"rcur89aiwp7tc8xr4mu4d_ntxvzqrgi-qpufbjkd7zafeouonr6mjagpn9tet4lsz6qtpoyfz9h-me4av_9z2w@socialincome.org"}],"validSince":"1693477819","email":"rcur89aiwp7tc8xr4mu4d_ntxvzqrgi-qpufbjkd7zafeouonr6mjagpn9tet4lsz6qtpoyfz9h-me4av_9z2w@socialincome.org","emailVerified":true,"disabled":false},{"localId":"Sl8VSZTfeFRsw5RbSDCy61Wi6n3W","createdAt":"1678452278815","lastLoginAt":"1678452278815","passwordHash":"fakeHash:salt=fakeSalti2NZn3muXEc9mzTCJErL:password=bMkd9mMrs91jDXw2ocA7LyQHD5sOqr_A5r1WxfPOCkdzP-i54YmhL0ehtRgKM7H9rhFApB39YqtuGNokUKpbAg","salt":"fakeSalti2NZn3muXEc9mzTCJErL","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"6zbwbaeryl8goc5ksvhc94gfn-l6if2fzngc0n5ukwkgeprkqqbyohgpjaouw3iqilk5-gkvr-dpmt3_mihy8g@socialincome.org","federatedId":"6zbwbaeryl8goc5ksvhc94gfn-l6if2fzngc0n5ukwkgeprkqqbyohgpjaouw3iqilk5-gkvr-dpmt3_mihy8g@socialincome.org","rawId":"6zbwbaeryl8goc5ksvhc94gfn-l6if2fzngc0n5ukwkgeprkqqbyohgpjaouw3iqilk5-gkvr-dpmt3_mihy8g@socialincome.org"}],"validSince":"1693477819","email":"6zbwbaeryl8goc5ksvhc94gfn-l6if2fzngc0n5ukwkgeprkqqbyohgpjaouw3iqilk5-gkvr-dpmt3_mihy8g@socialincome.org","emailVerified":true,"disabled":false},{"localId":"T3YLcycBys8Bl3i0E1iV5br3bcJP","createdAt":"1678452278832","lastLoginAt":"1678452278832","passwordHash":"fakeHash:salt=fakeSaltqzL5Cx5S56nvfurm6DtD:password=n_Arf5OuHPy9a4QiGCvJqIHRyjSqEhzuthtbBiFeRIoMaoy9SraeQPuI7EsP24qJr895-SBNdchp-JNf37B4oQ","salt":"fakeSaltqzL5Cx5S56nvfurm6DtD","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"fqxscb4ex2u6hhnk6f9mfucvc54dvuibibyk5e3skzcongahjbmdbahk4klsfeeevjudpxaj6obuwdpsqy1lpa@socialincome.org","federatedId":"fqxscb4ex2u6hhnk6f9mfucvc54dvuibibyk5e3skzcongahjbmdbahk4klsfeeevjudpxaj6obuwdpsqy1lpa@socialincome.org","rawId":"fqxscb4ex2u6hhnk6f9mfucvc54dvuibibyk5e3skzcongahjbmdbahk4klsfeeevjudpxaj6obuwdpsqy1lpa@socialincome.org"}],"validSince":"1693477819","email":"fqxscb4ex2u6hhnk6f9mfucvc54dvuibibyk5e3skzcongahjbmdbahk4klsfeeevjudpxaj6obuwdpsqy1lpa@socialincome.org","emailVerified":true,"disabled":false},{"localId":"TULiEPYUKfrAi4sRXS8dxZwSb5Nk","createdAt":"1678452278811","lastLoginAt":"1678452278811","passwordHash":"fakeHash:salt=fakeSaltl6o6EcPT7Tks9uFR6zAM:password=3NW8uTVX0LeQfM6VN8HuQJLrlcqAb07X3hAeD3is6Q0GXPjJH1NlHOkH5S7oMHr1qPRepAj1mxZ3KB2Q51X-1Q","salt":"fakeSaltl6o6EcPT7Tks9uFR6zAM","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"bv9vkjpu9ub7-qptyjlambwhwqdt-xrl43atiq_jpleb4tbs4lwutu1zsywb8fgfcilw5zfwi3cdhlx-xxykkq@socialincome.org","federatedId":"bv9vkjpu9ub7-qptyjlambwhwqdt-xrl43atiq_jpleb4tbs4lwutu1zsywb8fgfcilw5zfwi3cdhlx-xxykkq@socialincome.org","rawId":"bv9vkjpu9ub7-qptyjlambwhwqdt-xrl43atiq_jpleb4tbs4lwutu1zsywb8fgfcilw5zfwi3cdhlx-xxykkq@socialincome.org"}],"validSince":"1693477819","email":"bv9vkjpu9ub7-qptyjlambwhwqdt-xrl43atiq_jpleb4tbs4lwutu1zsywb8fgfcilw5zfwi3cdhlx-xxykkq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"TdIn8CczH8srqYEDEco8dNzTcOCg","createdAt":"1678452278832","lastLoginAt":"1678452278832","passwordHash":"fakeHash:salt=fakeSaltW2iAQHC0WAxojvsSlKDN:password=v24hkbtRinsfD-hhQhWRGJehxtKTKMSX5T6uvPDeBXX0G_a0DmVqbiY8mZJ_NzOXu30HIE-GgUcjINBqJSw0ZA","salt":"fakeSaltW2iAQHC0WAxojvsSlKDN","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"3irgkqvqwouinposgmlruuapkfoh30qdam2omscx9lgjgmnrsefagpdtpbvchhablzt02uqcdanpfw4unyxgiq@socialincome.org","federatedId":"3irgkqvqwouinposgmlruuapkfoh30qdam2omscx9lgjgmnrsefagpdtpbvchhablzt02uqcdanpfw4unyxgiq@socialincome.org","rawId":"3irgkqvqwouinposgmlruuapkfoh30qdam2omscx9lgjgmnrsefagpdtpbvchhablzt02uqcdanpfw4unyxgiq@socialincome.org"}],"validSince":"1693477819","email":"3irgkqvqwouinposgmlruuapkfoh30qdam2omscx9lgjgmnrsefagpdtpbvchhablzt02uqcdanpfw4unyxgiq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"U5nHCoBUPuCM1mC8Eb7iIGnpX2YA","createdAt":"1681401147928","lastLoginAt":"1681401147928","passwordHash":"fakeHash:salt=fakeSaltHxsXGfqYcsV6pqtiHCuY:password=Ljr7aUb0Wc394sKojz6lxg","salt":"fakeSaltHxsXGfqYcsV6pqtiHCuY","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"eh6w0siaul8rad24hxczoa@si.org","federatedId":"eh6w0siaul8rad24hxczoa@si.org","rawId":"eh6w0siaul8rad24hxczoa@si.org"}],"validSince":"1693477819","email":"eh6w0siaul8rad24hxczoa@si.org","emailVerified":true,"disabled":false},{"localId":"VkGMCViRE520QpEEnq589OWqek0Q","createdAt":"1681401147946","lastLoginAt":"1681401147946","passwordHash":"fakeHash:salt=fakeSaltft88Bmv9HwWLeYWzrmD6:password=WPmN-IClCVra82hdWbnbRA","salt":"fakeSaltft88Bmv9HwWLeYWzrmD6","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"vg-z6e64_vo2fu-8zch-mq@si.org","federatedId":"vg-z6e64_vo2fu-8zch-mq@si.org","rawId":"vg-z6e64_vo2fu-8zch-mq@si.org"}],"validSince":"1693477819","email":"vg-z6e64_vo2fu-8zch-mq@si.org","emailVerified":true,"disabled":false},{"localId":"VrtIvHKjxzTiYpCVcyKmf8x4XGQB","createdAt":"1678452278836","lastLoginAt":"1678452278836","passwordHash":"fakeHash:salt=fakeSalt4e8Qa5uyMxi2SCZTJZt3:password=rSlx-r4QwwH9WlnDJQZc_kOpcOgupl_c7TLphg_5s-fzi6TVHz63e_VAfBTxIhDlORS5YC3-apcJL_hHDHePaw","salt":"fakeSalt4e8Qa5uyMxi2SCZTJZt3","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"matkwjdznvjm20x9d-xbt1n52b5mpsi4topevjpkt5vemmrzig2rsonnradgnrbmgmjba8i5odip9bjbjwcmpa@socialincome.org","federatedId":"matkwjdznvjm20x9d-xbt1n52b5mpsi4topevjpkt5vemmrzig2rsonnradgnrbmgmjba8i5odip9bjbjwcmpa@socialincome.org","rawId":"matkwjdznvjm20x9d-xbt1n52b5mpsi4topevjpkt5vemmrzig2rsonnradgnrbmgmjba8i5odip9bjbjwcmpa@socialincome.org"}],"validSince":"1693477819","email":"matkwjdznvjm20x9d-xbt1n52b5mpsi4topevjpkt5vemmrzig2rsonnradgnrbmgmjba8i5odip9bjbjwcmpa@socialincome.org","emailVerified":true,"disabled":false},{"localId":"WG9yElReGoOyosIYo16tw6s707wa","createdAt":"1678452278824","lastLoginAt":"1678452278824","passwordHash":"fakeHash:salt=fakeSaltwYGiDkOi5zrVEqcaYOMI:password=IZeS3vTHuRUWqJ5mZ4cylB1JVRbHaKk4JihG8lMMcM6XgtkDYignHcmgPaUt16nYZuhbT2OUx0QnJmjwaWpdzQ","salt":"fakeSaltwYGiDkOi5zrVEqcaYOMI","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"lnbzqsgflszjypzfj3zulcirkgvx5oridatev0umfq2r2dbkj1znidopwuigjlhsjv_5lnzlw0v43cyfoa_ibq@socialincome.org","federatedId":"lnbzqsgflszjypzfj3zulcirkgvx5oridatev0umfq2r2dbkj1znidopwuigjlhsjv_5lnzlw0v43cyfoa_ibq@socialincome.org","rawId":"lnbzqsgflszjypzfj3zulcirkgvx5oridatev0umfq2r2dbkj1znidopwuigjlhsjv_5lnzlw0v43cyfoa_ibq@socialincome.org"}],"validSince":"1693477819","email":"lnbzqsgflszjypzfj3zulcirkgvx5oridatev0umfq2r2dbkj1znidopwuigjlhsjv_5lnzlw0v43cyfoa_ibq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"WLI8ezbOTw0ZxTuZ3VoyDOvvUuBn","createdAt":"1681401147932","lastLoginAt":"1681401147932","passwordHash":"fakeHash:salt=fakeSaltbADnfvZNSoZYhgqyE4LQ:password=qHPba8hKCeQbmD5fEhL7Zw","salt":"fakeSaltbADnfvZNSoZYhgqyE4LQ","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"r12lzke--vloybg-96d4yw@si.org","federatedId":"r12lzke--vloybg-96d4yw@si.org","rawId":"r12lzke--vloybg-96d4yw@si.org"}],"validSince":"1693477819","email":"r12lzke--vloybg-96d4yw@si.org","emailVerified":true,"disabled":false},{"localId":"WUn0ANwIehhhbbMZB7FeWIJCBJhM","createdAt":"1678452278829","lastLoginAt":"1678452278829","passwordHash":"fakeHash:salt=fakeSaltQEgFdAzDqnSEIW5M9Na0:password=MTv2G5wTuUxbKIUy5T42JntZx9W-4oZy1z1XCTffN0AXPT4ajRY0NHPb1sch0ungZuz6wFRLI0AiJVRWDIYsBg","salt":"fakeSaltQEgFdAzDqnSEIW5M9Na0","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"6jjlwdkb42aob54sxq-vop2iwg8q76uidw1vfga24vghh0iqe6wa6lzz-ebeetsshej39kox88yys2qj-pptfa@socialincome.org","federatedId":"6jjlwdkb42aob54sxq-vop2iwg8q76uidw1vfga24vghh0iqe6wa6lzz-ebeetsshej39kox88yys2qj-pptfa@socialincome.org","rawId":"6jjlwdkb42aob54sxq-vop2iwg8q76uidw1vfga24vghh0iqe6wa6lzz-ebeetsshej39kox88yys2qj-pptfa@socialincome.org"}],"validSince":"1693477819","email":"6jjlwdkb42aob54sxq-vop2iwg8q76uidw1vfga24vghh0iqe6wa6lzz-ebeetsshej39kox88yys2qj-pptfa@socialincome.org","emailVerified":true,"disabled":false},{"localId":"Wh5tYTOpVihNsMvtQAIStGsNhFRa","createdAt":"1678452278813","lastLoginAt":"1678452278813","passwordHash":"fakeHash:salt=fakeSaltwKsCAfEUJrUJLHPA9ifY:password=YQYhMs2AZJmlXuai4BGjf7S7-ytr5bTfd-dvSv5T8bZ26EqNfYRR7mE4lmI64vion4xR0O3eKzLoptZS8RQkKw","salt":"fakeSaltwKsCAfEUJrUJLHPA9ifY","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"4hjqnt9wfmxdv6adm2ftm68yn-nzrbfl7ibv2ybj0vi95x2kncvom5yc0ddnygmsn-n6v7076r-qr-wrxhpk6q@socialincome.org","federatedId":"4hjqnt9wfmxdv6adm2ftm68yn-nzrbfl7ibv2ybj0vi95x2kncvom5yc0ddnygmsn-n6v7076r-qr-wrxhpk6q@socialincome.org","rawId":"4hjqnt9wfmxdv6adm2ftm68yn-nzrbfl7ibv2ybj0vi95x2kncvom5yc0ddnygmsn-n6v7076r-qr-wrxhpk6q@socialincome.org"}],"validSince":"1693477819","email":"4hjqnt9wfmxdv6adm2ftm68yn-nzrbfl7ibv2ybj0vi95x2kncvom5yc0ddnygmsn-n6v7076r-qr-wrxhpk6q@socialincome.org","emailVerified":true,"disabled":false},{"localId":"WhQC2pI65uLxerMfGKoAZuj80wVK","createdAt":"1681401147936","lastLoginAt":"1681401147936","passwordHash":"fakeHash:salt=fakeSaltTZd9dkRpMVAU80k3Tv1M:password=aJ4_CMYhlHiPsjadPDrpyg","salt":"fakeSaltTZd9dkRpMVAU80k3Tv1M","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"on6gzgmfk1mwv0aj5hs2sg@si.org","federatedId":"on6gzgmfk1mwv0aj5hs2sg@si.org","rawId":"on6gzgmfk1mwv0aj5hs2sg@si.org"}],"validSince":"1693477819","email":"on6gzgmfk1mwv0aj5hs2sg@si.org","emailVerified":true,"disabled":false},{"localId":"XKFR9NQn6JlGjxkk6uiQHHhvf6ES","createdAt":"1681401147939","lastLoginAt":"1681401147939","passwordHash":"fakeHash:salt=fakeSaltX14WWfqE90sqnXp4E5rL:password=YPOOKEhW4XE0jNWuYAbSCw","salt":"fakeSaltX14WWfqE90sqnXp4E5rL","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"2x7to9g2oniao217ohzelw@si.org","federatedId":"2x7to9g2oniao217ohzelw@si.org","rawId":"2x7to9g2oniao217ohzelw@si.org"}],"validSince":"1693477819","email":"2x7to9g2oniao217ohzelw@si.org","emailVerified":true,"disabled":false},{"localId":"Xr1sfooqLk0jWrdqjKhc2p25uLiJ","createdAt":"1678452278820","lastLoginAt":"1678452278820","passwordHash":"fakeHash:salt=fakeSaltjBORgtlmNSclQd8b6mQq:password=x5GsB-WJyaacXn0yR0my3jbY8Cfvk6i21QL3RJF-LudFF9A9FwM3jlGcJrr8xzeYHkbKt-bqkpfys4w5NnIQ6w","salt":"fakeSaltjBORgtlmNSclQd8b6mQq","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"-v0a9vgrfxvu9l7dm7t5oosbjrdr-grhoi_kw5rbwkw0x7goc5zjz1fj6l0y5644xg8m5yckvy1zuihafezxkw@socialincome.org","federatedId":"-v0a9vgrfxvu9l7dm7t5oosbjrdr-grhoi_kw5rbwkw0x7goc5zjz1fj6l0y5644xg8m5yckvy1zuihafezxkw@socialincome.org","rawId":"-v0a9vgrfxvu9l7dm7t5oosbjrdr-grhoi_kw5rbwkw0x7goc5zjz1fj6l0y5644xg8m5yckvy1zuihafezxkw@socialincome.org"}],"validSince":"1693477819","email":"-v0a9vgrfxvu9l7dm7t5oosbjrdr-grhoi_kw5rbwkw0x7goc5zjz1fj6l0y5644xg8m5yckvy1zuihafezxkw@socialincome.org","emailVerified":true,"disabled":false},{"localId":"XycJbgLqZFOaata8DJRxesJaeqFs","createdAt":"1681401147943","lastLoginAt":"1681401147943","passwordHash":"fakeHash:salt=fakeSalty2NgW7KvhOqdjVunihYF:password=lNC6gcV9YcdIBUAkXBQ6Zg","salt":"fakeSalty2NgW7KvhOqdjVunihYF","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"0h14y9joabladg8am7wfhq@si.org","federatedId":"0h14y9joabladg8am7wfhq@si.org","rawId":"0h14y9joabladg8am7wfhq@si.org"}],"validSince":"1693477819","email":"0h14y9joabladg8am7wfhq@si.org","emailVerified":true,"disabled":false},{"localId":"aJzeXotYZlL8p1lJREsMODig0Ets","createdAt":"1678452278834","lastLoginAt":"1678452278834","passwordHash":"fakeHash:salt=fakeSaltavpPynNSy7FtybrPALO9:password=hIAdnrlVzbtUF3pvbXHSH8s2BpNmLfetDgLs56uc5BWb7qqRqXj886PslKmGE9A7qPF5_roVUIFP535yVpYF9A","salt":"fakeSaltavpPynNSy7FtybrPALO9","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"yxrcgwtk_r39zr1so44sbii97smsvb4ajjysakzzoetw9aisfoqg0_c8h7lbyj3rrvbewskzfbsnqofbkdy8sq@socialincome.org","federatedId":"yxrcgwtk_r39zr1so44sbii97smsvb4ajjysakzzoetw9aisfoqg0_c8h7lbyj3rrvbewskzfbsnqofbkdy8sq@socialincome.org","rawId":"yxrcgwtk_r39zr1so44sbii97smsvb4ajjysakzzoetw9aisfoqg0_c8h7lbyj3rrvbewskzfbsnqofbkdy8sq@socialincome.org"}],"validSince":"1693477819","email":"yxrcgwtk_r39zr1so44sbii97smsvb4ajjysakzzoetw9aisfoqg0_c8h7lbyj3rrvbewskzfbsnqofbkdy8sq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"bKxZDr4O7KJRR6K3RZOpfDw7tGCd","createdAt":"1681401147941","lastLoginAt":"1681401147941","passwordHash":"fakeHash:salt=fakeSaltGV7UDN86gzyYvJByVYDb:password=YUXt7MQ9-pz3sDDSHJJ5Gg","salt":"fakeSaltGV7UDN86gzyYvJByVYDb","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"orzkumq-tuuculjkdduzmq@si.org","federatedId":"orzkumq-tuuculjkdduzmq@si.org","rawId":"orzkumq-tuuculjkdduzmq@si.org"}],"validSince":"1693477819","email":"orzkumq-tuuculjkdduzmq@si.org","emailVerified":true,"disabled":false},{"localId":"bwEHC4CKnNjAq9ZCyGoYG4Ky2Rvd","createdAt":"1678452278827","lastLoginAt":"1678452278827","passwordHash":"fakeHash:salt=fakeSalt2eTmW7ZUcn1QKd5jq8aU:password=mUSwjbe_ghAUYRwf12yVcxvcwvzhK8DD9JDiyZBoEijoCFFFDgfw-yqCNQlhDafQof_30lMzmQ3qsWKti31rSQ","salt":"fakeSalt2eTmW7ZUcn1QKd5jq8aU","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"g4je6fb9v5vaj4wqyviiquiinhqopdknssghgw0kanzmacmu3hx3qf6tibtoydkiadbllomg3bur710dz6xaaw@socialincome.org","federatedId":"g4je6fb9v5vaj4wqyviiquiinhqopdknssghgw0kanzmacmu3hx3qf6tibtoydkiadbllomg3bur710dz6xaaw@socialincome.org","rawId":"g4je6fb9v5vaj4wqyviiquiinhqopdknssghgw0kanzmacmu3hx3qf6tibtoydkiadbllomg3bur710dz6xaaw@socialincome.org"}],"validSince":"1693477819","email":"g4je6fb9v5vaj4wqyviiquiinhqopdknssghgw0kanzmacmu3hx3qf6tibtoydkiadbllomg3bur710dz6xaaw@socialincome.org","emailVerified":true,"disabled":false},{"localId":"cSr8VPB5qGZtOiFvUqfnSiucBWb9","createdAt":"1681401147937","lastLoginAt":"1681401147937","passwordHash":"fakeHash:salt=fakeSalt7VnsV7KKPsDlggCsVEcQ:password=l0f5lllhcDQ7xffRivQh4Q","salt":"fakeSalt7VnsV7KKPsDlggCsVEcQ","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"m89j9czqmd9fanogy9yerw@si.org","federatedId":"m89j9czqmd9fanogy9yerw@si.org","rawId":"m89j9czqmd9fanogy9yerw@si.org"}],"validSince":"1693477819","email":"m89j9czqmd9fanogy9yerw@si.org","emailVerified":true,"disabled":false},{"localId":"cWLEplwWc76nIeLOuqUDUJDUdReO","createdAt":"1681401147944","lastLoginAt":"1689266155133","passwordHash":"fakeHash:salt=fakeSaltpAW09Bi9v5BRYYjw0Ve7:password=DjqUQRDcw9KM08ljwnrgRw","salt":"fakeSaltpAW09Bi9v5BRYYjw0Ve7","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"qfi_qfh3mtqpwt93priohq@si.org","federatedId":"qfi_qfh3mtqpwt93priohq@si.org","rawId":"qfi_qfh3mtqpwt93priohq@si.org"}],"validSince":"1693477819","email":"qfi_qfh3mtqpwt93priohq@si.org","emailVerified":true,"disabled":false},{"localId":"cwN5z1nEbq1W3flXanurpF3P0paK","createdAt":"1681401147941","lastLoginAt":"1681401147941","passwordHash":"fakeHash:salt=fakeSaltEOE0dJt80waIMAlLiJMm:password=c3wp61ZTNCTyRo1qmlpTtA","salt":"fakeSaltEOE0dJt80waIMAlLiJMm","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"7lpqyxrtugyytknu93o5cq@si.org","federatedId":"7lpqyxrtugyytknu93o5cq@si.org","rawId":"7lpqyxrtugyytknu93o5cq@si.org"}],"validSince":"1693477819","email":"7lpqyxrtugyytknu93o5cq@si.org","emailVerified":true,"disabled":false},{"localId":"eazV9yRtK9DPhzK3byiVO26ucXZp","createdAt":"1681401147931","lastLoginAt":"1681401147931","passwordHash":"fakeHash:salt=fakeSaltZybEgdbI5c5EuDHpyxOh:password=aDDvHb3ZlLI5VTOimTfgyA","salt":"fakeSaltZybEgdbI5c5EuDHpyxOh","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"8eb3y7c7xjjybk0pg6sycg@si.org","federatedId":"8eb3y7c7xjjybk0pg6sycg@si.org","rawId":"8eb3y7c7xjjybk0pg6sycg@si.org"}],"validSince":"1693477819","email":"8eb3y7c7xjjybk0pg6sycg@si.org","emailVerified":true,"disabled":false},{"localId":"fsAXNSzJuyt8t0GtHE2k98Ba6ryS","createdAt":"1681401147941","lastLoginAt":"1681401147941","passwordHash":"fakeHash:salt=fakeSaltv5SfHb6LdTCWO3Gd7U9Y:password=CEZuk9I_vfJa64Q9xxIGYA","salt":"fakeSaltv5SfHb6LdTCWO3Gd7U9Y","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"7in32qgmmp1alaafq4szaw@si.org","federatedId":"7in32qgmmp1alaafq4szaw@si.org","rawId":"7in32qgmmp1alaafq4szaw@si.org"}],"validSince":"1693477819","email":"7in32qgmmp1alaafq4szaw@si.org","emailVerified":true,"disabled":false},{"localId":"gibI1DkMn2KkNNlOmNO7vZCURnzG","createdAt":"1678452278807","lastLoginAt":"1678452278807","passwordHash":"fakeHash:salt=fakeSalt1gEHx5FsIynPVHyj8mwm:password=V_Cb53sDLlbY1KpojUCJxGjkQeBDdJM2T3fDcFFszTR879-zkv6UoLrKtIKY62nTWqdKRlZb4B82wWdz0Qmy2Q","salt":"fakeSalt1gEHx5FsIynPVHyj8mwm","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"wyqmqi91e4bdz-kzzhgghj4bxdvyrv8gyzpmf3dqur6t3vxv4dphtfojxudfzbwqfe0zf3zge6w2xblb9637qq@socialincome.org","federatedId":"wyqmqi91e4bdz-kzzhgghj4bxdvyrv8gyzpmf3dqur6t3vxv4dphtfojxudfzbwqfe0zf3zge6w2xblb9637qq@socialincome.org","rawId":"wyqmqi91e4bdz-kzzhgghj4bxdvyrv8gyzpmf3dqur6t3vxv4dphtfojxudfzbwqfe0zf3zge6w2xblb9637qq@socialincome.org"}],"validSince":"1693477819","email":"wyqmqi91e4bdz-kzzhgghj4bxdvyrv8gyzpmf3dqur6t3vxv4dphtfojxudfzbwqfe0zf3zge6w2xblb9637qq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"h2SaKt8IFn67OZ77o0f3GvuAGFEj","createdAt":"1681401147926","lastLoginAt":"1681401147926","passwordHash":"fakeHash:salt=fakeSalttXF09nz3ed9ZGawYkPx3:password=qmV4HIQhgl1p3cYVwE8DSA","salt":"fakeSalttXF09nz3ed9ZGawYkPx3","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"ulpt_lnee3jxzc3v12d0sw@si.org","federatedId":"ulpt_lnee3jxzc3v12d0sw@si.org","rawId":"ulpt_lnee3jxzc3v12d0sw@si.org"}],"validSince":"1693477819","email":"ulpt_lnee3jxzc3v12d0sw@si.org","emailVerified":true,"disabled":false},{"localId":"hdSNtn6RTa92YkS2GHqjWSSE1YvQ","createdAt":"1678452278834","lastLoginAt":"1678452278834","passwordHash":"fakeHash:salt=fakeSaltm1CxRwhAGl3PVixj0GIv:password=QGlAjowyj9DlouuAfltKBzf35HMY98KVJiW2gh8ZQOvyvJfKtR6ZwaNbg8eaHxZ5KiQV5n0ZCw4tANzr0-IhWw","salt":"fakeSaltm1CxRwhAGl3PVixj0GIv","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"6zs5gqd8wqoblo-klevxsyrlnykm38x44quo7h-phydtdhgzdkkbxzwpuyb2tmzculgoujvwl1aformpup2cwa@socialincome.org","federatedId":"6zs5gqd8wqoblo-klevxsyrlnykm38x44quo7h-phydtdhgzdkkbxzwpuyb2tmzculgoujvwl1aformpup2cwa@socialincome.org","rawId":"6zs5gqd8wqoblo-klevxsyrlnykm38x44quo7h-phydtdhgzdkkbxzwpuyb2tmzculgoujvwl1aformpup2cwa@socialincome.org"}],"validSince":"1693477819","email":"6zs5gqd8wqoblo-klevxsyrlnykm38x44quo7h-phydtdhgzdkkbxzwpuyb2tmzculgoujvwl1aformpup2cwa@socialincome.org","emailVerified":true,"disabled":false},{"localId":"ifCO2FTf4CHuyMB8bV3QDv98RBHo","createdAt":"1678452278822","lastLoginAt":"1678452278822","passwordHash":"fakeHash:salt=fakeSaltiUpX0LeoSvnCsJ7oxMDn:password=4DQORmJvm3q6MtAc8Te_fPBZL4lHauy5itGqGRzRx_uAwX5SjCTRRxwopE_q3UUibJZio_EMZPaY-pqHGitBdQ","salt":"fakeSaltiUpX0LeoSvnCsJ7oxMDn","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"7fizesv_4mumwcp_0qrgtd2kwmcnxzhscppwhghrs36ibywsba5gh78v_0f_mxpryi_vermjonlujzyuwzc4zw@socialincome.org","federatedId":"7fizesv_4mumwcp_0qrgtd2kwmcnxzhscppwhghrs36ibywsba5gh78v_0f_mxpryi_vermjonlujzyuwzc4zw@socialincome.org","rawId":"7fizesv_4mumwcp_0qrgtd2kwmcnxzhscppwhghrs36ibywsba5gh78v_0f_mxpryi_vermjonlujzyuwzc4zw@socialincome.org"}],"validSince":"1693477819","email":"7fizesv_4mumwcp_0qrgtd2kwmcnxzhscppwhghrs36ibywsba5gh78v_0f_mxpryi_vermjonlujzyuwzc4zw@socialincome.org","emailVerified":true,"disabled":false},{"localId":"ihtGTTFUXraZEt8PGHMYtl2i4uKh","createdAt":"1681401147921","lastLoginAt":"1681401147921","passwordHash":"fakeHash:salt=fakeSaltCeJBRJ2ag36unr4c2TJh:password=xNuXWcxbFIfwtkgJPb_7pA","salt":"fakeSaltCeJBRJ2ag36unr4c2TJh","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"kran2tm3edpgalrmvu2tka@si.org","federatedId":"kran2tm3edpgalrmvu2tka@si.org","rawId":"kran2tm3edpgalrmvu2tka@si.org"}],"validSince":"1693477819","email":"kran2tm3edpgalrmvu2tka@si.org","emailVerified":true,"disabled":false},{"localId":"jElwC0RVQEzsh7gJYuwfBgiQAciX","createdAt":"1681401147945","lastLoginAt":"1681401147945","passwordHash":"fakeHash:salt=fakeSaltzBdyW32n9wiCsJKe9T9x:password=gg841L24Vu9A5ZqAwLr4ZA","salt":"fakeSaltzBdyW32n9wiCsJKe9T9x","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"vocnxk_lvem1x1g5junvwq@si.org","federatedId":"vocnxk_lvem1x1g5junvwq@si.org","rawId":"vocnxk_lvem1x1g5junvwq@si.org"}],"validSince":"1693477819","email":"vocnxk_lvem1x1g5junvwq@si.org","emailVerified":true,"disabled":false},{"localId":"jFRLVSevc5ZLNlCdgi26Ty4FJzbr","createdAt":"1681401147931","lastLoginAt":"1681401147931","passwordHash":"fakeHash:salt=fakeSaltCrd9aDhzfLsHDUNxU1Ma:password=JbaUwjMHZtthaGQ0hJPU5Q","salt":"fakeSaltCrd9aDhzfLsHDUNxU1Ma","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"mexh-kzhrjm6zrto5hihvg@si.org","federatedId":"mexh-kzhrjm6zrto5hihvg@si.org","rawId":"mexh-kzhrjm6zrto5hihvg@si.org"}],"validSince":"1693477819","email":"mexh-kzhrjm6zrto5hihvg@si.org","emailVerified":true,"disabled":false},{"localId":"jaPGgPvl5ob5MQ1VAx6wyEqveylT","createdAt":"1678452278810","lastLoginAt":"1678452278810","passwordHash":"fakeHash:salt=fakeSalt3NjtOb3qQKAk5ctTlKg1:password=djyOxrhqwyLSsusAcwfcXYgvgCUu0Hg-QAdwADME1rGbG5eglb2Y128YaPDoS2KRc687vsy81JxhTzeIk2z9LA","salt":"fakeSalt3NjtOb3qQKAk5ctTlKg1","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"j2v9wa39fe7kdofuy5quioguhxeickn0fe-3_tpqgrd0lvlkmwqyjugzyzkfuia16nx24j8cqfnw4vvhcziuia@socialincome.org","federatedId":"j2v9wa39fe7kdofuy5quioguhxeickn0fe-3_tpqgrd0lvlkmwqyjugzyzkfuia16nx24j8cqfnw4vvhcziuia@socialincome.org","rawId":"j2v9wa39fe7kdofuy5quioguhxeickn0fe-3_tpqgrd0lvlkmwqyjugzyzkfuia16nx24j8cqfnw4vvhcziuia@socialincome.org"}],"validSince":"1693477819","email":"j2v9wa39fe7kdofuy5quioguhxeickn0fe-3_tpqgrd0lvlkmwqyjugzyzkfuia16nx24j8cqfnw4vvhcziuia@socialincome.org","emailVerified":true,"disabled":false},{"localId":"k8Nlm8Jlwi6JUPL5rlaAvjhJzMS3","createdAt":"1678452278819","lastLoginAt":"1678452278819","passwordHash":"fakeHash:salt=fakeSaltlmDJ9x6dI6KZVAbj0ixB:password=FxvDGsDC8l24ilBQJb2yEt1zK9wkRK3ly5CGQZEavgW-w3oRWt4ZQk8IVJzfupNfz88otUpJeqy_xX3eD1P31Q","salt":"fakeSaltlmDJ9x6dI6KZVAbj0ixB","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"jdnqmzj7tlbjnyv7xxmm4_ke64zgwew7m-w-visxutkbecieupxyycb2kwuie9nxzb9xxjrnswd7clothc_v1g@socialincome.org","federatedId":"jdnqmzj7tlbjnyv7xxmm4_ke64zgwew7m-w-visxutkbecieupxyycb2kwuie9nxzb9xxjrnswd7clothc_v1g@socialincome.org","rawId":"jdnqmzj7tlbjnyv7xxmm4_ke64zgwew7m-w-visxutkbecieupxyycb2kwuie9nxzb9xxjrnswd7clothc_v1g@socialincome.org"}],"validSince":"1693477819","email":"jdnqmzj7tlbjnyv7xxmm4_ke64zgwew7m-w-visxutkbecieupxyycb2kwuie9nxzb9xxjrnswd7clothc_v1g@socialincome.org","emailVerified":true,"disabled":false},{"localId":"kF7T2ZxRrxZzwwFeUmqbjwyX14mS","createdAt":"1681401147933","lastLoginAt":"1681401147933","passwordHash":"fakeHash:salt=fakeSaltB3Y1adGEoG7yhu0vOcbl:password=F_6I91b5SkpkGs1XT8oZTw","salt":"fakeSaltB3Y1adGEoG7yhu0vOcbl","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"b3ixgp03r4ooxyvetjy-gg@si.org","federatedId":"b3ixgp03r4ooxyvetjy-gg@si.org","rawId":"b3ixgp03r4ooxyvetjy-gg@si.org"}],"validSince":"1693477819","email":"b3ixgp03r4ooxyvetjy-gg@si.org","emailVerified":true,"disabled":false},{"localId":"m2fjMakKdwaxEVZFQ7ZjKZ51y1Zs","createdAt":"1678452278816","lastLoginAt":"1678452278816","passwordHash":"fakeHash:salt=fakeSaltz93OQLJ8YDpADyaXN6Wo:password=NTnCTdO29v6sgRsyYB-J3QDRaOi_Sv-fzXGlz-Evx_L6-mi7TehlPc94TQCU6KYjFHJXvNDezZuoNwhA0SELeQ","salt":"fakeSaltz93OQLJ8YDpADyaXN6Wo","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"txe-jwvx1mfz1fbm0vqplmok3rwr0hp208rch9l1lcarhwnmghaqorzygivrvae0br7fznqqvc1lzmlnck8p4w@socialincome.org","federatedId":"txe-jwvx1mfz1fbm0vqplmok3rwr0hp208rch9l1lcarhwnmghaqorzygivrvae0br7fznqqvc1lzmlnck8p4w@socialincome.org","rawId":"txe-jwvx1mfz1fbm0vqplmok3rwr0hp208rch9l1lcarhwnmghaqorzygivrvae0br7fznqqvc1lzmlnck8p4w@socialincome.org"}],"validSince":"1693477819","email":"txe-jwvx1mfz1fbm0vqplmok3rwr0hp208rch9l1lcarhwnmghaqorzygivrvae0br7fznqqvc1lzmlnck8p4w@socialincome.org","emailVerified":true,"disabled":false},{"localId":"m46S63pc0K2icMb9nS3dST1N9SEV","createdAt":"1681401147943","lastLoginAt":"1681401147943","passwordHash":"fakeHash:salt=fakeSaltmNAMfaueAMB7XEmPKhRi:password=Qo4zx4t_iTB2HoJ1ht1eZg","salt":"fakeSaltmNAMfaueAMB7XEmPKhRi","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"c4ps6juswddgok0whwjrig@si.org","federatedId":"c4ps6juswddgok0whwjrig@si.org","rawId":"c4ps6juswddgok0whwjrig@si.org"}],"validSince":"1693477819","email":"c4ps6juswddgok0whwjrig@si.org","emailVerified":true,"disabled":false},{"localId":"mTI2y1chrJGheQ4u5ZRI6e6EPxlu","createdAt":"1678452278823","lastLoginAt":"1678452278823","passwordHash":"fakeHash:salt=fakeSalts06cOD4D1ETwu513tJFB:password=4XBUhJi5ZieoLiFj-nsI7SXBy0MBgRGCtwDrAG3XTtqH-2Vcm7ASKf5nNr9Py7vHoBWA-F0HtA0RqwjrVnGL0g","salt":"fakeSalts06cOD4D1ETwu513tJFB","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"qhsbqgpgyjrakzjxradvoylpb2fw4fgxd_pymn-f07sxx1sguzsvlkxa0hvowzu5g5ysgg1zggkryzrlemeama@socialincome.org","federatedId":"qhsbqgpgyjrakzjxradvoylpb2fw4fgxd_pymn-f07sxx1sguzsvlkxa0hvowzu5g5ysgg1zggkryzrlemeama@socialincome.org","rawId":"qhsbqgpgyjrakzjxradvoylpb2fw4fgxd_pymn-f07sxx1sguzsvlkxa0hvowzu5g5ysgg1zggkryzrlemeama@socialincome.org"}],"validSince":"1693477819","email":"qhsbqgpgyjrakzjxradvoylpb2fw4fgxd_pymn-f07sxx1sguzsvlkxa0hvowzu5g5ysgg1zggkryzrlemeama@socialincome.org","emailVerified":true,"disabled":false},{"localId":"ngi82EkJj6zyELv1uA6kRPSybeUv","createdAt":"1678452278835","lastLoginAt":"1678452278835","passwordHash":"fakeHash:salt=fakeSaltW2pqk7vzwOZVcAhPBAOV:password=N7gW7Lk20MKHbBqH7dYNf8vPUjlWb43ewlQQ_OBnRCySsdmet6XeoL6ikJQ0eMU43r-rOc0AGXJn0DJJq8wzNg","salt":"fakeSaltW2pqk7vzwOZVcAhPBAOV","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"6yrsb76dkzggxy9dmncixbm-x_crxirertex3nkr1vk75dkyoliw4ajei_ebr8afzc3uwbkibz-vq5wpuuaahw@socialincome.org","federatedId":"6yrsb76dkzggxy9dmncixbm-x_crxirertex3nkr1vk75dkyoliw4ajei_ebr8afzc3uwbkibz-vq5wpuuaahw@socialincome.org","rawId":"6yrsb76dkzggxy9dmncixbm-x_crxirertex3nkr1vk75dkyoliw4ajei_ebr8afzc3uwbkibz-vq5wpuuaahw@socialincome.org"}],"validSince":"1693477819","email":"6yrsb76dkzggxy9dmncixbm-x_crxirertex3nkr1vk75dkyoliw4ajei_ebr8afzc3uwbkibz-vq5wpuuaahw@socialincome.org","emailVerified":true,"disabled":false},{"localId":"pelLX4a8l1dG2wiHcztv5mTXhb4m","createdAt":"1678452278830","lastLoginAt":"1678452278830","passwordHash":"fakeHash:salt=fakeSalt2kiJp3uzA1q7dtMRSPvI:password=Xjuo8dO0cFQYaWjCA_OlDh31WqUr2_4Mmn9cc6CmwnB_j2lyiKcbXiWKpfQga21jk6mjr-ffm7Yj09FQdITdyA","salt":"fakeSalt2kiJp3uzA1q7dtMRSPvI","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"fkyej35izue13_d_4w6e8hmh71wuz5c-t83mnqrlxcjrkn7l1s-8w1-eaqtxm2xdsrm1wr5sfjxvp7px8s07da@socialincome.org","federatedId":"fkyej35izue13_d_4w6e8hmh71wuz5c-t83mnqrlxcjrkn7l1s-8w1-eaqtxm2xdsrm1wr5sfjxvp7px8s07da@socialincome.org","rawId":"fkyej35izue13_d_4w6e8hmh71wuz5c-t83mnqrlxcjrkn7l1s-8w1-eaqtxm2xdsrm1wr5sfjxvp7px8s07da@socialincome.org"}],"validSince":"1693477819","email":"fkyej35izue13_d_4w6e8hmh71wuz5c-t83mnqrlxcjrkn7l1s-8w1-eaqtxm2xdsrm1wr5sfjxvp7px8s07da@socialincome.org","emailVerified":true,"disabled":false},{"localId":"pvUBVxRP89QLXpeW0KuDwZkm2iMC","createdAt":"1678452278826","lastLoginAt":"1678452278826","passwordHash":"fakeHash:salt=fakeSaltcu43f2lxLbwwK4FE7hD7:password=VG-exMow6PURAS_yO2VliUl4hC82IKEKEkjCBRic2BCGFXJ0H-yfMTYn868_zaOmf8vNEQS73T3aUULHdpm7EA","salt":"fakeSaltcu43f2lxLbwwK4FE7hD7","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"piipmtwtbpbvmuoq0evyv3ruv0d7ho7vdaxjpj3klpcgxnlsrk2m77wcxr9vycpc_cuw26wptiyohd3kogpshw@socialincome.org","federatedId":"piipmtwtbpbvmuoq0evyv3ruv0d7ho7vdaxjpj3klpcgxnlsrk2m77wcxr9vycpc_cuw26wptiyohd3kogpshw@socialincome.org","rawId":"piipmtwtbpbvmuoq0evyv3ruv0d7ho7vdaxjpj3klpcgxnlsrk2m77wcxr9vycpc_cuw26wptiyohd3kogpshw@socialincome.org"}],"validSince":"1693477819","email":"piipmtwtbpbvmuoq0evyv3ruv0d7ho7vdaxjpj3klpcgxnlsrk2m77wcxr9vycpc_cuw26wptiyohd3kogpshw@socialincome.org","emailVerified":true,"disabled":false},{"localId":"qBVZR9G3Qf1xTCZhUa0VjN8ndWuL","createdAt":"1681401147925","lastLoginAt":"1681401147925","passwordHash":"fakeHash:salt=fakeSaltpJSXGARvTVSb7lhdEvHS:password=QgC-zfDAHewJ5_Pu6iot-A","salt":"fakeSaltpJSXGARvTVSb7lhdEvHS","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"wvsqb_y1egyoz1uafwen9g@si.org","federatedId":"wvsqb_y1egyoz1uafwen9g@si.org","rawId":"wvsqb_y1egyoz1uafwen9g@si.org"}],"validSince":"1693477819","email":"wvsqb_y1egyoz1uafwen9g@si.org","emailVerified":true,"disabled":false},{"localId":"qIzKCD97BhtZh8UJbmckOlkODFnL","createdAt":"1681401147939","lastLoginAt":"1681401147939","passwordHash":"fakeHash:salt=fakeSaltbfPzMQOoAtaukAgY2Fhf:password=HnNCv28ZyAOkLDwsfKdN_w","salt":"fakeSaltbfPzMQOoAtaukAgY2Fhf","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"r5crcpis11f9tqaxums_xq@si.org","federatedId":"r5crcpis11f9tqaxums_xq@si.org","rawId":"r5crcpis11f9tqaxums_xq@si.org"}],"validSince":"1693477819","email":"r5crcpis11f9tqaxums_xq@si.org","emailVerified":true,"disabled":false},{"localId":"qJlI87f5wIobKTYgMSuv359uVB5A","createdAt":"1681401147932","lastLoginAt":"1681401147932","passwordHash":"fakeHash:salt=fakeSaltVmb26DKZP07w03mjfGI8:password=j7Crxme502IajDxJ6xgWMg","salt":"fakeSaltVmb26DKZP07w03mjfGI8","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"9gdg1nkvpvvngmcemzijiq@si.org","federatedId":"9gdg1nkvpvvngmcemzijiq@si.org","rawId":"9gdg1nkvpvvngmcemzijiq@si.org"}],"validSince":"1693477819","email":"9gdg1nkvpvvngmcemzijiq@si.org","emailVerified":true,"disabled":false},{"localId":"qbBGO9tAueyZ1nppSlOc7bNRwMwP","createdAt":"1678452278828","lastLoginAt":"1678452278828","passwordHash":"fakeHash:salt=fakeSaltGG5yY73yv1l10tQLxYHB:password=_6s-PP0Pahc17o4SqY8mhW46hb_cEikPabiHY4vzlpP1RKOCKAPl37h7LnemFrGPPSDIzHsC2OpnF8nI4NJBTg","salt":"fakeSaltGG5yY73yv1l10tQLxYHB","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"x8-18mcxojubtgnnlsp09clsvfv6g-nwgo-rj1t9uqtlhjtcaq84moo9x-bux4wwqd9wx4fxnsafcxk_nuwtsg@socialincome.org","federatedId":"x8-18mcxojubtgnnlsp09clsvfv6g-nwgo-rj1t9uqtlhjtcaq84moo9x-bux4wwqd9wx4fxnsafcxk_nuwtsg@socialincome.org","rawId":"x8-18mcxojubtgnnlsp09clsvfv6g-nwgo-rj1t9uqtlhjtcaq84moo9x-bux4wwqd9wx4fxnsafcxk_nuwtsg@socialincome.org"}],"validSince":"1693477819","email":"x8-18mcxojubtgnnlsp09clsvfv6g-nwgo-rj1t9uqtlhjtcaq84moo9x-bux4wwqd9wx4fxnsafcxk_nuwtsg@socialincome.org","emailVerified":true,"disabled":false},{"localId":"qcGeTeegI0UXmvVqVtXPxvYhXtXy","createdAt":"1678452278828","lastLoginAt":"1678452278828","passwordHash":"fakeHash:salt=fakeSaltsR9OUKrvi59RbyqrvkvA:password=6Al9Sk7oDYLAoVa0OrSXj_FTJ4FOAmWwVZj4iF4-q6g7lJXKzuQkoXC2l8pcBANmywf6C9eEQtAdDKVB3NR48Q","salt":"fakeSaltsR9OUKrvi59RbyqrvkvA","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"-hz8ftfzwgrflpmjrguquhgtzrrfe32hqzeq4_i1_0tpvxwyl52mmu90bzor6mrzqkn692vg1pkl9g9kgbt66w@socialincome.org","federatedId":"-hz8ftfzwgrflpmjrguquhgtzrrfe32hqzeq4_i1_0tpvxwyl52mmu90bzor6mrzqkn692vg1pkl9g9kgbt66w@socialincome.org","rawId":"-hz8ftfzwgrflpmjrguquhgtzrrfe32hqzeq4_i1_0tpvxwyl52mmu90bzor6mrzqkn692vg1pkl9g9kgbt66w@socialincome.org"}],"validSince":"1693477819","email":"-hz8ftfzwgrflpmjrguquhgtzrrfe32hqzeq4_i1_0tpvxwyl52mmu90bzor6mrzqkn692vg1pkl9g9kgbt66w@socialincome.org","emailVerified":true,"disabled":false},{"localId":"qcME05ukjNGnFrOWhJaqKdDLfZLD","createdAt":"1678452278833","lastLoginAt":"1678452278833","passwordHash":"fakeHash:salt=fakeSaltj9n0VA3PgZbVSOu1YJXN:password=SPtr5hZoxuYAarP6lM47Na0vCMjVO1yAtUOHA_GPgDM53TRQWweLQ9TFf4h8vuiqU6qqBTKsKs5cfCGhTGJH2w","salt":"fakeSaltj9n0VA3PgZbVSOu1YJXN","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"punrawbexnouifohcb3l5h2m1wyzkgocfojrmv-v3tpxik5xpz_ihwdm-_t7-kn28fmevjnb1jeyppcycy2xbg@socialincome.org","federatedId":"punrawbexnouifohcb3l5h2m1wyzkgocfojrmv-v3tpxik5xpz_ihwdm-_t7-kn28fmevjnb1jeyppcycy2xbg@socialincome.org","rawId":"punrawbexnouifohcb3l5h2m1wyzkgocfojrmv-v3tpxik5xpz_ihwdm-_t7-kn28fmevjnb1jeyppcycy2xbg@socialincome.org"}],"validSince":"1693477819","email":"punrawbexnouifohcb3l5h2m1wyzkgocfojrmv-v3tpxik5xpz_ihwdm-_t7-kn28fmevjnb1jeyppcycy2xbg@socialincome.org","emailVerified":true,"disabled":false},{"localId":"rJIFbU5m6KQkk2kmXFYmbiEf49BC","createdAt":"1678452278813","lastLoginAt":"1678452278813","passwordHash":"fakeHash:salt=fakeSaltYpKDO69GjrO89bGmecrU:password=xTYDBr_ZhNTsb7AoY_0jUXNO1Inq_X1nyl0coyg3s0BwvsSe8y7XfXaykkr-b0lNZLrcbLP1zyJbuKXZ3-By5g","salt":"fakeSaltYpKDO69GjrO89bGmecrU","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"iiypwag2tq4bu8tz1w8gjprhcehro5booi2cd5vmmflrgdpyfdc98zwcr3yvi0yqgxvomz2q-4yhrrto1qgtfq@socialincome.org","federatedId":"iiypwag2tq4bu8tz1w8gjprhcehro5booi2cd5vmmflrgdpyfdc98zwcr3yvi0yqgxvomz2q-4yhrrto1qgtfq@socialincome.org","rawId":"iiypwag2tq4bu8tz1w8gjprhcehro5booi2cd5vmmflrgdpyfdc98zwcr3yvi0yqgxvomz2q-4yhrrto1qgtfq@socialincome.org"}],"validSince":"1693477819","email":"iiypwag2tq4bu8tz1w8gjprhcehro5booi2cd5vmmflrgdpyfdc98zwcr3yvi0yqgxvomz2q-4yhrrto1qgtfq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"rlbTv1zzEHg1oTQc0WrRoGLwdNuM","createdAt":"1681401147940","lastLoginAt":"1681401147940","passwordHash":"fakeHash:salt=fakeSaltf5LBgIAa18ykCK1cVoDW:password=SQye5nufAohpQ8CoofQ89A","salt":"fakeSaltf5LBgIAa18ykCK1cVoDW","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"ytcporhxl93axjmg4igmng@si.org","federatedId":"ytcporhxl93axjmg4igmng@si.org","rawId":"ytcporhxl93axjmg4igmng@si.org"}],"validSince":"1693477819","email":"ytcporhxl93axjmg4igmng@si.org","emailVerified":true,"disabled":false},{"localId":"tbbBFsCwLt0QULMz8FIvESeB6kwA","createdAt":"1681401147923","lastLoginAt":"1681401147923","passwordHash":"fakeHash:salt=fakeSaltQ87BjTmMYdjm71raBvxq:password=aoSPyMz30oVKhjzfjifSdw","salt":"fakeSaltQ87BjTmMYdjm71raBvxq","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"c2rie40jeeibocghb25dhq@si.org","federatedId":"c2rie40jeeibocghb25dhq@si.org","rawId":"c2rie40jeeibocghb25dhq@si.org"}],"validSince":"1693477819","email":"c2rie40jeeibocghb25dhq@si.org","emailVerified":true,"disabled":false},{"localId":"tgX5Cuc85jx7IDN4OLDXrAMI9mLV","createdAt":"1678452278823","lastLoginAt":"1678452278823","passwordHash":"fakeHash:salt=fakeSaltsXuxZMCnxHzOl8gs8LeJ:password=y2KEvfP3h0YdCtoAcZXxIpLhXZ0_uuRpqFKqCEGBFcwI_T8EnOmaIVpdDfzoMMpSaAgGFvddK8th3qzP9_ATgA","salt":"fakeSaltsXuxZMCnxHzOl8gs8LeJ","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"grv7glfa7f4aqsqbw4wugxtlnfin2fnwe47g6fkry9vrz7jfsb5lax34whk9rehz-mszgsfmoo_ihajaqeo8mg@socialincome.org","federatedId":"grv7glfa7f4aqsqbw4wugxtlnfin2fnwe47g6fkry9vrz7jfsb5lax34whk9rehz-mszgsfmoo_ihajaqeo8mg@socialincome.org","rawId":"grv7glfa7f4aqsqbw4wugxtlnfin2fnwe47g6fkry9vrz7jfsb5lax34whk9rehz-mszgsfmoo_ihajaqeo8mg@socialincome.org"}],"validSince":"1693477819","email":"grv7glfa7f4aqsqbw4wugxtlnfin2fnwe47g6fkry9vrz7jfsb5lax34whk9rehz-mszgsfmoo_ihajaqeo8mg@socialincome.org","emailVerified":true,"disabled":false},{"localId":"uLhOdHos7rW5qbmTSHdlyiWGi617","createdAt":"1678452278819","lastLoginAt":"1678452278819","passwordHash":"fakeHash:salt=fakeSalt7CBhGWRyzfTps28wtyCY:password=Y7HRALPsVO1uibTOpyIwTbCfEqrf-9gxwtuj7B5ol-se1nysW6aVcntTZWgHb-fONfNdmacyKBD7NKx_eL0kOQ","salt":"fakeSalt7CBhGWRyzfTps28wtyCY","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"ukbkcqum8hznslwu90n3ssernmkqe9oo_zcrlvp4u_ohi5x-mcsljsrcacovzjfume10datqz8b-mw7h9wxzqa@socialincome.org","federatedId":"ukbkcqum8hznslwu90n3ssernmkqe9oo_zcrlvp4u_ohi5x-mcsljsrcacovzjfume10datqz8b-mw7h9wxzqa@socialincome.org","rawId":"ukbkcqum8hznslwu90n3ssernmkqe9oo_zcrlvp4u_ohi5x-mcsljsrcacovzjfume10datqz8b-mw7h9wxzqa@socialincome.org"}],"validSince":"1693477819","email":"ukbkcqum8hznslwu90n3ssernmkqe9oo_zcrlvp4u_ohi5x-mcsljsrcacovzjfume10datqz8b-mw7h9wxzqa@socialincome.org","emailVerified":true,"disabled":false},{"localId":"vK8bu0dxLw7cdMAZ44iqP76IkYAy","createdAt":"1681401147945","lastLoginAt":"1681401147945","passwordHash":"fakeHash:salt=fakeSaltt51Gxi6tQKr9PyYHOyDS:password=zLmstj8482NAI1xLTYhsWA","salt":"fakeSaltt51Gxi6tQKr9PyYHOyDS","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"yigmcsy8_63yltcoi5awja@si.org","federatedId":"yigmcsy8_63yltcoi5awja@si.org","rawId":"yigmcsy8_63yltcoi5awja@si.org"}],"validSince":"1693477819","email":"yigmcsy8_63yltcoi5awja@si.org","emailVerified":true,"disabled":false},{"localId":"vtyfpMy3RnAq1hhe1v0uWwEFPzON","createdAt":"1681401147924","lastLoginAt":"1681401147924","passwordHash":"fakeHash:salt=fakeSalt6VLJBwEq81yBXtMidDZ2:password=D2U6Ejgt5-WPxDk0fI_KHw","salt":"fakeSalt6VLJBwEq81yBXtMidDZ2","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"2ibb0tteiz8h5kkrbj78ia@si.org","federatedId":"2ibb0tteiz8h5kkrbj78ia@si.org","rawId":"2ibb0tteiz8h5kkrbj78ia@si.org"}],"validSince":"1693477819","email":"2ibb0tteiz8h5kkrbj78ia@si.org","emailVerified":true,"disabled":false},{"localId":"xDakGevt20dYrngxX3qVB3RPiNuR","createdAt":"1681401147942","lastLoginAt":"1681401147942","passwordHash":"fakeHash:salt=fakeSaltCKKdMJHHWJ4QjKrOnz66:password=2LyhU5BLwkwFthtxFXnS6A","salt":"fakeSaltCKKdMJHHWJ4QjKrOnz66","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"98mh8kb68yjbqwzvcbdcrg@si.org","federatedId":"98mh8kb68yjbqwzvcbdcrg@si.org","rawId":"98mh8kb68yjbqwzvcbdcrg@si.org"}],"validSince":"1693477819","email":"98mh8kb68yjbqwzvcbdcrg@si.org","emailVerified":true,"disabled":false},{"localId":"yGQAzIuCuOEDX0uZa69gDcUNgiXf","createdAt":"1678452278826","lastLoginAt":"1678452278826","passwordHash":"fakeHash:salt=fakeSaltGYwHOPfDVVYPi1DVOYIG:password=jgirsVKMi1U9jE4uZ9Rek0tevm79L9kkWwJzjKZyy_8reViWOvuiudQLhzjN-mewJ4v6GylPh_RtocnjQIrPiA","salt":"fakeSaltGYwHOPfDVVYPi1DVOYIG","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"pv9qlvz9oyseuldw0obrkb1dtiars2ozgurafexxsz4gstflnpp0buwydot9ws2h5nxwas_5ee3qr4kt9tin0w@socialincome.org","federatedId":"pv9qlvz9oyseuldw0obrkb1dtiars2ozgurafexxsz4gstflnpp0buwydot9ws2h5nxwas_5ee3qr4kt9tin0w@socialincome.org","rawId":"pv9qlvz9oyseuldw0obrkb1dtiars2ozgurafexxsz4gstflnpp0buwydot9ws2h5nxwas_5ee3qr4kt9tin0w@socialincome.org"}],"validSince":"1693477819","email":"pv9qlvz9oyseuldw0obrkb1dtiars2ozgurafexxsz4gstflnpp0buwydot9ws2h5nxwas_5ee3qr4kt9tin0w@socialincome.org","emailVerified":true,"disabled":false},{"localId":"zPbBC8nHAOgmnHgXQEMmEwI9kNNl","createdAt":"1681401147938","lastLoginAt":"1681401147938","passwordHash":"fakeHash:salt=fakeSaltA63Maq2gIxUiCb2Md99F:password=xtGlzJuYgr-S1HBe8BfvMw","salt":"fakeSaltA63Maq2gIxUiCb2Md99F","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"cp3non65hqhabh-3ywqxeg@si.org","federatedId":"cp3non65hqhabh-3ywqxeg@si.org","rawId":"cp3non65hqhabh-3ywqxeg@si.org"}],"validSince":"1693477819","email":"cp3non65hqhabh-3ywqxeg@si.org","emailVerified":true,"disabled":false},{"localId":"zfvpTT7vkNti53ybLFz9D263uZ9X","createdAt":"1681401147942","lastLoginAt":"1681401147942","passwordHash":"fakeHash:salt=fakeSaltLexsXHvpQU3XYvOXdIvN:password=4IQIXcriNogRd_8y0rSJHA","salt":"fakeSaltLexsXHvpQU3XYvOXdIvN","passwordUpdatedAt":1693477819820,"providerUserInfo":[{"providerId":"password","email":"8nmbm8ygsz-x-avvy55pyw@si.org","federatedId":"8nmbm8ygsz-x-avvy55pyw@si.org","rawId":"8nmbm8ygsz-x-avvy55pyw@si.org"}],"validSince":"1693477819","email":"8nmbm8ygsz-x-avvy55pyw@si.org","emailVerified":true,"disabled":false}]} \ No newline at end of file +{"kind":"identitytoolkit#DownloadAccountResponse","users":[{"localId":"2GeVUz2NG6hAC2WULTB4eR8M87gY","createdAt":"1678452278821","lastLoginAt":"1678452278821","passwordHash":"fakeHash:salt=fakeSaltMbzfosdPahHwAY5BrSFQ:password=zVpFMTDH1dekvg7PtQkniXFlGyfAG6VFbtVveTv-cv-k_lkFTl7swMO0vOkSerXfhAxYJ0NRTrIiYOSHQH6XYQ","salt":"fakeSaltMbzfosdPahHwAY5BrSFQ","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"nr_xp1jugbgifjsz5lsuhfnzyhgeillbqpmqxoujva1llewjbi-_urxy5cmzq3mnvta6crpzhbroqooebdjzbq@socialincome.org","federatedId":"nr_xp1jugbgifjsz5lsuhfnzyhgeillbqpmqxoujva1llewjbi-_urxy5cmzq3mnvta6crpzhbroqooebdjzbq@socialincome.org","rawId":"nr_xp1jugbgifjsz5lsuhfnzyhgeillbqpmqxoujva1llewjbi-_urxy5cmzq3mnvta6crpzhbroqooebdjzbq@socialincome.org"}],"validSince":"1699603759","email":"nr_xp1jugbgifjsz5lsuhfnzyhgeillbqpmqxoujva1llewjbi-_urxy5cmzq3mnvta6crpzhbroqooebdjzbq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"4bm2wkaCDVIH2vSVYiMBSARdQ7Qh","createdAt":"1678452278822","lastLoginAt":"1678452278822","passwordHash":"fakeHash:salt=fakeSaltom1YpsrzYOBNFuiAjsgU:password=cWbQY5pDhFxdbObTKPvqFAdjHuKPm-HQySx559m_rG-GdTTefyfSDRczfBw8FiROuR4UwalJC9dIn0Rmz9mmOQ","salt":"fakeSaltom1YpsrzYOBNFuiAjsgU","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"8icxrugnfx_td6uocwsf9ec3n7umzrawbufjxbi2aazk9tnrky5zdunfmavfe3mp5wxbziq-jewnjqsdo5ih_w@socialincome.org","federatedId":"8icxrugnfx_td6uocwsf9ec3n7umzrawbufjxbi2aazk9tnrky5zdunfmavfe3mp5wxbziq-jewnjqsdo5ih_w@socialincome.org","rawId":"8icxrugnfx_td6uocwsf9ec3n7umzrawbufjxbi2aazk9tnrky5zdunfmavfe3mp5wxbziq-jewnjqsdo5ih_w@socialincome.org"}],"validSince":"1699603759","email":"8icxrugnfx_td6uocwsf9ec3n7umzrawbufjxbi2aazk9tnrky5zdunfmavfe3mp5wxbziq-jewnjqsdo5ih_w@socialincome.org","emailVerified":true,"disabled":false},{"localId":"57TeNyQuEFxFC32dNIoKq18oqGl1","createdAt":"1681401147929","lastLoginAt":"1681401147929","passwordHash":"fakeHash:salt=fakeSaltBljAJuo8DF0RS8PQ7UBG:password=HKfxhFRhkFW9t_AHV02Jyw","salt":"fakeSaltBljAJuo8DF0RS8PQ7UBG","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"ydabjh5ghvfti3tcqhb-6w@si.org","federatedId":"ydabjh5ghvfti3tcqhb-6w@si.org","rawId":"ydabjh5ghvfti3tcqhb-6w@si.org"}],"validSince":"1699603759","email":"ydabjh5ghvfti3tcqhb-6w@si.org","emailVerified":true,"disabled":false},{"localId":"5eCnvDtkjyDvokzCLEIXyOBaRlF4","createdAt":"1678452278827","lastLoginAt":"1678452278827","passwordHash":"fakeHash:salt=fakeSaltpy7NLFBNxgTMyMr0NJmD:password=JYeYW7r2Pr3AtOU9Blboh8c16H1tx3HiqtXjAydf_vLgFGcFz16V28yWNnkWsPUHe_7HY4yQIafZJ2gCHA9u5Q","salt":"fakeSaltpy7NLFBNxgTMyMr0NJmD","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"bevly6udowblwd4ftlestft_d6wcsww_4rh4tr4d1shhwuyautmzhddy8qcqdbiwb-hgzgygofzr4t3vrlz3sg@socialincome.org","federatedId":"bevly6udowblwd4ftlestft_d6wcsww_4rh4tr4d1shhwuyautmzhddy8qcqdbiwb-hgzgygofzr4t3vrlz3sg@socialincome.org","rawId":"bevly6udowblwd4ftlestft_d6wcsww_4rh4tr4d1shhwuyautmzhddy8qcqdbiwb-hgzgygofzr4t3vrlz3sg@socialincome.org"}],"validSince":"1699603759","email":"bevly6udowblwd4ftlestft_d6wcsww_4rh4tr4d1shhwuyautmzhddy8qcqdbiwb-hgzgygofzr4t3vrlz3sg@socialincome.org","emailVerified":true,"disabled":false},{"localId":"6JWkAqAFX4Yq8YfJisfbjgSnY2PK","createdAt":"1678452278818","lastLoginAt":"1678452278818","passwordHash":"fakeHash:salt=fakeSaltRRci80SUCmePbfp58z6C:password=UaKXIcU-O6FUMSS80hAB54PjUi_TuAIQdh8IYxlWggR7xq30fQ_iEkAroq8vTUlnLp3YhNiGITg1UeJdzxWZeg","salt":"fakeSaltRRci80SUCmePbfp58z6C","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"od63lg3tk0avejeykhxylb2buc9yr_h8npew80llkcjcik0njnozvesgxedi-ndwjokgz9erprdyfqtfx-r98a@socialincome.org","federatedId":"od63lg3tk0avejeykhxylb2buc9yr_h8npew80llkcjcik0njnozvesgxedi-ndwjokgz9erprdyfqtfx-r98a@socialincome.org","rawId":"od63lg3tk0avejeykhxylb2buc9yr_h8npew80llkcjcik0njnozvesgxedi-ndwjokgz9erprdyfqtfx-r98a@socialincome.org"}],"validSince":"1699603759","email":"od63lg3tk0avejeykhxylb2buc9yr_h8npew80llkcjcik0njnozvesgxedi-ndwjokgz9erprdyfqtfx-r98a@socialincome.org","emailVerified":true,"disabled":false},{"localId":"6dAr9ox63mz45BeB6uUKIugexXYI","createdAt":"1681401147938","lastLoginAt":"1681401147938","passwordHash":"fakeHash:salt=fakeSalte7zh9ZjE6eWfCqCBoFRr:password=bfw1q2DZoPXeXGhZtI7tyw","salt":"fakeSalte7zh9ZjE6eWfCqCBoFRr","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"hqyssoq_uvg7dcls2sws_q@si.org","federatedId":"hqyssoq_uvg7dcls2sws_q@si.org","rawId":"hqyssoq_uvg7dcls2sws_q@si.org"}],"validSince":"1699603759","email":"hqyssoq_uvg7dcls2sws_q@si.org","emailVerified":true,"disabled":false},{"localId":"75B7GPdWlKgbUtCd7Pnn81NCwzYc","createdAt":"1678452278812","lastLoginAt":"1678452278812","passwordHash":"fakeHash:salt=fakeSaltVMDtddQLgL5UkqClcr7s:password=5jCRNCw58hkv8eo3vFrZOGgVFfB2iJRhXzRSVFzGo5L3PJ5K51dE0QPBXdQ2MBtHivN9ul3bDUY-plHJRDySbA","salt":"fakeSaltVMDtddQLgL5UkqClcr7s","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"reolvvex7wtxr0ovidvk9jw-i28ynikzvmlhvz1t5w6xs8p2srqkgfqcmz9bwf2absswyqaqbk1jlx16lqck3a@socialincome.org","federatedId":"reolvvex7wtxr0ovidvk9jw-i28ynikzvmlhvz1t5w6xs8p2srqkgfqcmz9bwf2absswyqaqbk1jlx16lqck3a@socialincome.org","rawId":"reolvvex7wtxr0ovidvk9jw-i28ynikzvmlhvz1t5w6xs8p2srqkgfqcmz9bwf2absswyqaqbk1jlx16lqck3a@socialincome.org"}],"validSince":"1699603759","email":"reolvvex7wtxr0ovidvk9jw-i28ynikzvmlhvz1t5w6xs8p2srqkgfqcmz9bwf2absswyqaqbk1jlx16lqck3a@socialincome.org","emailVerified":true,"disabled":false},{"localId":"7EwNgUDtgXX00g9xaNTBdkxCmGJ8","createdAt":"1681401147927","lastLoginAt":"1681401147927","passwordHash":"fakeHash:salt=fakeSaltsTAfp05WOLegheZj8uRO:password=CYy9GSXnQvnLuisYQTHtiw","salt":"fakeSaltsTAfp05WOLegheZj8uRO","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"_5d7qdti0-njchfmroy-jq@si.org","federatedId":"_5d7qdti0-njchfmroy-jq@si.org","rawId":"_5d7qdti0-njchfmroy-jq@si.org"}],"validSince":"1699603759","email":"_5d7qdti0-njchfmroy-jq@si.org","emailVerified":true,"disabled":false},{"localId":"7UPrHjT1lm8zCdAiuRey8DMcNHYK","createdAt":"1678452278825","lastLoginAt":"1678452278825","passwordHash":"fakeHash:salt=fakeSaltjfQ3l6DjVHUg7qnrATFt:password=vOxdsK6Ip3zdHkjUx2iGVS1jsoE8ZE8JjjNVLZLlzZzFYhXdCGQWghDI4ZiX59ZCIZdWWhJRuHEQF4v3X9MeDg","salt":"fakeSaltjfQ3l6DjVHUg7qnrATFt","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"5yve3zvsybyfn2nxx91zlunpoeq27mnsaunkoiw1zacwkfgsb5cecyp4jnyvto8ioiref7wwuxorghpsgv_c5g@socialincome.org","federatedId":"5yve3zvsybyfn2nxx91zlunpoeq27mnsaunkoiw1zacwkfgsb5cecyp4jnyvto8ioiref7wwuxorghpsgv_c5g@socialincome.org","rawId":"5yve3zvsybyfn2nxx91zlunpoeq27mnsaunkoiw1zacwkfgsb5cecyp4jnyvto8ioiref7wwuxorghpsgv_c5g@socialincome.org"}],"validSince":"1699603759","email":"5yve3zvsybyfn2nxx91zlunpoeq27mnsaunkoiw1zacwkfgsb5cecyp4jnyvto8ioiref7wwuxorghpsgv_c5g@socialincome.org","emailVerified":true,"disabled":false},{"localId":"7vcKDBdrGA7kNm13BgznVGJOh3mL","createdAt":"1681401147947","lastLoginAt":"1681401147947","passwordHash":"fakeHash:salt=fakeSalt4FmM9HdtqmUTkavSsod4:password=jwjFJV0ienZ__S7SbX8QJQ","salt":"fakeSalt4FmM9HdtqmUTkavSsod4","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"w0u0ofadvlgv0ehzuvcjbg@si.org","federatedId":"w0u0ofadvlgv0ehzuvcjbg@si.org","rawId":"w0u0ofadvlgv0ehzuvcjbg@si.org"}],"validSince":"1699603759","email":"w0u0ofadvlgv0ehzuvcjbg@si.org","emailVerified":true,"disabled":false},{"localId":"80uerz2Rq7cUBAf4YPSxqW5JNmTf","createdAt":"1681401147927","lastLoginAt":"1681401147927","passwordHash":"fakeHash:salt=fakeSaltP69ucr9s2gBb2DNiu3Qz:password=9tS6dk1eadVQQuboNWni8g","salt":"fakeSaltP69ucr9s2gBb2DNiu3Qz","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"mxcljb8ly1wsjbjbw1nwxg@si.org","federatedId":"mxcljb8ly1wsjbjbw1nwxg@si.org","rawId":"mxcljb8ly1wsjbjbw1nwxg@si.org"}],"validSince":"1699603759","email":"mxcljb8ly1wsjbjbw1nwxg@si.org","emailVerified":true,"disabled":false},{"localId":"9YHX9rpzg8dR3QEwoLUuhwbgR7ei","createdAt":"1681401147935","lastLoginAt":"1681401147935","passwordHash":"fakeHash:salt=fakeSaltFR1T6dp1PuVRFdxFg3uC:password=gfg76DmdDrS5DrYJu9esAw","salt":"fakeSaltFR1T6dp1PuVRFdxFg3uC","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"jfxaxatnpmfy9bnjgmcamq@si.org","federatedId":"jfxaxatnpmfy9bnjgmcamq@si.org","rawId":"jfxaxatnpmfy9bnjgmcamq@si.org"}],"validSince":"1699603759","email":"jfxaxatnpmfy9bnjgmcamq@si.org","emailVerified":true,"disabled":false},{"localId":"A9DRYBUi9jvS9ou9Lhqm0KNBZsPO","createdAt":"1678452278831","lastLoginAt":"1678452278831","passwordHash":"fakeHash:salt=fakeSaltTXjQ8sucYO9VdEVsr1Iq:password=SQZHEswfrSff9Be_zPRNRkgzgNM7ky4aWupF_z2yYI6KYD2IvLdxHj2HWGnSOoH9LwI9WZpvZmF0mJy5mGZpqQ","salt":"fakeSaltTXjQ8sucYO9VdEVsr1Iq","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"t198gjykspb9eucv2ijxlb6z-amr_7gd4l5kf5u901jebzdcpj1wv-gami3fdutz2ujldai6ipwqi_ktsnatxa@socialincome.org","federatedId":"t198gjykspb9eucv2ijxlb6z-amr_7gd4l5kf5u901jebzdcpj1wv-gami3fdutz2ujldai6ipwqi_ktsnatxa@socialincome.org","rawId":"t198gjykspb9eucv2ijxlb6z-amr_7gd4l5kf5u901jebzdcpj1wv-gami3fdutz2ujldai6ipwqi_ktsnatxa@socialincome.org"}],"validSince":"1699603759","email":"t198gjykspb9eucv2ijxlb6z-amr_7gd4l5kf5u901jebzdcpj1wv-gami3fdutz2ujldai6ipwqi_ktsnatxa@socialincome.org","emailVerified":true,"disabled":false},{"localId":"BJbjxfKzA5Y9HxaQsAop8tOyhZpg","createdAt":"1681401147936","lastLoginAt":"1681401147936","passwordHash":"fakeHash:salt=fakeSaltwtBjlYC3FtuRQrEv6C0w:password=c--Qqg50wDu7lYJxph0fKQ","salt":"fakeSaltwtBjlYC3FtuRQrEv6C0w","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"-s_r5wxxgqvi4ruhsgbbdg@si.org","federatedId":"-s_r5wxxgqvi4ruhsgbbdg@si.org","rawId":"-s_r5wxxgqvi4ruhsgbbdg@si.org"}],"validSince":"1699603759","email":"-s_r5wxxgqvi4ruhsgbbdg@si.org","emailVerified":true,"disabled":false},{"localId":"ChMxI258GdulwutnLqn32Gu2DgT3","createdAt":"1681401147937","lastLoginAt":"1681401147937","passwordHash":"fakeHash:salt=fakeSaltbpLPhrV75a5TfDUBeXnE:password=3Zd9l9sr0Lbjb2l21mL1hg","salt":"fakeSaltbpLPhrV75a5TfDUBeXnE","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"g5p8fcx3jmpjkyt3mzvcsa@si.org","federatedId":"g5p8fcx3jmpjkyt3mzvcsa@si.org","rawId":"g5p8fcx3jmpjkyt3mzvcsa@si.org"}],"validSince":"1699603759","email":"g5p8fcx3jmpjkyt3mzvcsa@si.org","emailVerified":true,"disabled":false},{"localId":"DInpFIPKi3VBLyrH2kokYMRvHN7z","createdAt":"1681401147923","lastLoginAt":"1681401147923","passwordHash":"fakeHash:salt=fakeSaltLopw0aPFhaNV2kjtxbgL:password=ZL4zXay4-VUTOuQwclRcOA","salt":"fakeSaltLopw0aPFhaNV2kjtxbgL","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"8df7v2jvpij720_te2gbfg@si.org","federatedId":"8df7v2jvpij720_te2gbfg@si.org","rawId":"8df7v2jvpij720_te2gbfg@si.org"}],"validSince":"1699603759","email":"8df7v2jvpij720_te2gbfg@si.org","emailVerified":true,"disabled":false},{"localId":"DiKyIdncaRrIodxWLviXqmDH83yE","createdAt":"1678452278831","lastLoginAt":"1678452278831","passwordHash":"fakeHash:salt=fakeSaltL220p7odD4qCzt1Rx3QM:password=93NmUy3VIDZ5LhSIdX9YrIUP4Ppl_V3FUmJYjvLih4IB0ufqI-qONdtuOt77g7m14uAZbLfCgHV_hJ7axNhuwg","salt":"fakeSaltL220p7odD4qCzt1Rx3QM","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"8w7kyn0rjhcyvfg47saq85efu5a_aimkgpljmsfzuulvwfcdql--ltza6stx08z4zk1aoatwmqpukkniikwhfa@socialincome.org","federatedId":"8w7kyn0rjhcyvfg47saq85efu5a_aimkgpljmsfzuulvwfcdql--ltza6stx08z4zk1aoatwmqpukkniikwhfa@socialincome.org","rawId":"8w7kyn0rjhcyvfg47saq85efu5a_aimkgpljmsfzuulvwfcdql--ltza6stx08z4zk1aoatwmqpukkniikwhfa@socialincome.org"}],"validSince":"1699603759","email":"8w7kyn0rjhcyvfg47saq85efu5a_aimkgpljmsfzuulvwfcdql--ltza6stx08z4zk1aoatwmqpukkniikwhfa@socialincome.org","emailVerified":true,"disabled":false},{"localId":"Dvhrwtnvx3oeFIeckgzEJvQ82HLi","createdAt":"1681401147937","lastLoginAt":"1681401147937","passwordHash":"fakeHash:salt=fakeSaltRlZlazMdiIWEYOQ97Izk:password=7RuE9jVkp4QH-MHNUMOSnQ","salt":"fakeSaltRlZlazMdiIWEYOQ97Izk","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"2mqsdqcepbjbl4xi9nkrka@si.org","federatedId":"2mqsdqcepbjbl4xi9nkrka@si.org","rawId":"2mqsdqcepbjbl4xi9nkrka@si.org"}],"validSince":"1699603759","email":"2mqsdqcepbjbl4xi9nkrka@si.org","emailVerified":true,"disabled":false},{"localId":"E3Ae94PGNxwJ1yxp368lVzLxy21m","createdAt":"1681401147930","lastLoginAt":"1681401147930","passwordHash":"fakeHash:salt=fakeSalt8DFipumbFUK50FWRRWqE:password=VKHpDRIydA7OTJFpQExUXw","salt":"fakeSalt8DFipumbFUK50FWRRWqE","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"68zlgsrgyysyxzc-y2y5iw@si.org","federatedId":"68zlgsrgyysyxzc-y2y5iw@si.org","rawId":"68zlgsrgyysyxzc-y2y5iw@si.org"}],"validSince":"1699603759","email":"68zlgsrgyysyxzc-y2y5iw@si.org","emailVerified":true,"disabled":false},{"localId":"ER2eB2NwWuvlCXsrp11t23LeCSvD","createdAt":"1681401147935","lastLoginAt":"1681401147935","passwordHash":"fakeHash:salt=fakeSaltPJolgoZ7FvzVIPDG7SRj:password=yBxBmAAGRNhBinFZEiX6yQ","salt":"fakeSaltPJolgoZ7FvzVIPDG7SRj","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"wnwrenn9nmbshkghqdt0fw@si.org","federatedId":"wnwrenn9nmbshkghqdt0fw@si.org","rawId":"wnwrenn9nmbshkghqdt0fw@si.org"}],"validSince":"1699603759","email":"wnwrenn9nmbshkghqdt0fw@si.org","emailVerified":true,"disabled":false},{"localId":"HCLTygGIzonXAgESL4Nr6fZ3hL4o","createdAt":"1678452278805","lastLoginAt":"1678452278805","passwordHash":"fakeHash:salt=fakeSaltksD3kasd6kk1ti4mXXZv:password=qzo9vCtRtY6GE5OetPqRd7Ng0L6RKpXEtCbK2Tn1VNMFQHCHQpISwX2VlH06NXuLkQjZnbeg7-XdWRG3FXuJXg","salt":"fakeSaltksD3kasd6kk1ti4mXXZv","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"heyikhqu_azbkqc1v3ol73urwmnml23erpb7rshpn83h623ubxhe8bztqwxoqhhwanl8-hfcrwa8jrltz2bo6g@socialincome.org","federatedId":"heyikhqu_azbkqc1v3ol73urwmnml23erpb7rshpn83h623ubxhe8bztqwxoqhhwanl8-hfcrwa8jrltz2bo6g@socialincome.org","rawId":"heyikhqu_azbkqc1v3ol73urwmnml23erpb7rshpn83h623ubxhe8bztqwxoqhhwanl8-hfcrwa8jrltz2bo6g@socialincome.org"}],"validSince":"1699603759","email":"heyikhqu_azbkqc1v3ol73urwmnml23erpb7rshpn83h623ubxhe8bztqwxoqhhwanl8-hfcrwa8jrltz2bo6g@socialincome.org","emailVerified":true,"disabled":false},{"localId":"HISd8dsly9AItAYgyesmiXLiIMXH","createdAt":"1681401147940","lastLoginAt":"1681401147940","passwordHash":"fakeHash:salt=fakeSalt4bWRYsXwm1cYucUBup1a:password=EL0A9km2i_6mhGy4RGeM5A","salt":"fakeSalt4bWRYsXwm1cYucUBup1a","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"dovdwbgqpt_m2a2k9wzmrw@si.org","federatedId":"dovdwbgqpt_m2a2k9wzmrw@si.org","rawId":"dovdwbgqpt_m2a2k9wzmrw@si.org"}],"validSince":"1699603759","email":"dovdwbgqpt_m2a2k9wzmrw@si.org","emailVerified":true,"disabled":false},{"localId":"IKOqChHZpCEprxBOWtdCOWO5siDq","createdAt":"1678452278808","lastLoginAt":"1678452278808","passwordHash":"fakeHash:salt=fakeSaltAeslocY6qPXkpYwQ9acZ:password=Jv2ZTLLOH1MT5I2MIFcH3E7YTTAWnwgsn_MzxOHJsCDUtf5chvdoLDoC0QG98wHq7hiOAUQVfOi-iGAPNkezBg","salt":"fakeSaltAeslocY6qPXkpYwQ9acZ","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"nc18my-ntsijt1t-683yiw8ly52lk4wb5cw6hmfcyjyakgr0yv0bnxopopa_ekbwltrjjjydebit0dhyuik2la@socialincome.org","federatedId":"nc18my-ntsijt1t-683yiw8ly52lk4wb5cw6hmfcyjyakgr0yv0bnxopopa_ekbwltrjjjydebit0dhyuik2la@socialincome.org","rawId":"nc18my-ntsijt1t-683yiw8ly52lk4wb5cw6hmfcyjyakgr0yv0bnxopopa_ekbwltrjjjydebit0dhyuik2la@socialincome.org"}],"validSince":"1699603759","email":"nc18my-ntsijt1t-683yiw8ly52lk4wb5cw6hmfcyjyakgr0yv0bnxopopa_ekbwltrjjjydebit0dhyuik2la@socialincome.org","emailVerified":true,"disabled":false},{"localId":"IlHw0YS9F1Z9FgalYFITZMNhhsC3","createdAt":"1692970238713","lastLoginAt":"1699626472013","displayName":"","photoUrl":"","passwordHash":"fakeHash:salt=fakeSaltYlAV2bt4t6lnvkBGfwWS:password=qkj@DUE.wxg.cwq5jdc","salt":"fakeSaltYlAV2bt4t6lnvkBGfwWS","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"michael.kuendig+stripe-test@gmail.com","federatedId":"michael.kuendig+stripe-test@gmail.com","rawId":"michael.kuendig+stripe-test@gmail.com","displayName":"","photoUrl":""}],"validSince":"1699603759","email":"michael.kuendig+stripe-test@gmail.com","emailVerified":false,"disabled":false,"lastRefreshAt":"2023-11-10T16:17:48.744Z"},{"localId":"IlhLFJ9cJqfKUTfYFOZJF96XZfQF","createdAt":"1678452278815","lastLoginAt":"1678452278815","passwordHash":"fakeHash:salt=fakeSaltgrzBs5h9wmunTSdvXHIx:password=kycMoXMZ3Hb9Xb7xfJRxvxrxTTSNcLXrmA-gQ24uO_4bn3nT_653W9fgO2wliAyHeniVhcDGnu6LpHvmrxLfEg","salt":"fakeSaltgrzBs5h9wmunTSdvXHIx","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"abmyhih0ynceqwiicwzamn0edxlvjkc8mzokiyy87fdtp4ojmxxvvf17y8iwgw-6p1i-excocuntxuzxpdz5lq@socialincome.org","federatedId":"abmyhih0ynceqwiicwzamn0edxlvjkc8mzokiyy87fdtp4ojmxxvvf17y8iwgw-6p1i-excocuntxuzxpdz5lq@socialincome.org","rawId":"abmyhih0ynceqwiicwzamn0edxlvjkc8mzokiyy87fdtp4ojmxxvvf17y8iwgw-6p1i-excocuntxuzxpdz5lq@socialincome.org"}],"validSince":"1699603759","email":"abmyhih0ynceqwiicwzamn0edxlvjkc8mzokiyy87fdtp4ojmxxvvf17y8iwgw-6p1i-excocuntxuzxpdz5lq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"JV8FdFD1HvlBRGtaXNcheyA92Ve6","createdAt":"1681401147934","lastLoginAt":"1681401147934","passwordHash":"fakeHash:salt=fakeSaltEcY78bXuvseO85mRF1Gw:password=-01DYtgORW6MPBuNujQGyQ","salt":"fakeSaltEcY78bXuvseO85mRF1Gw","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"56m-fludos_w5obeiyxd7w@si.org","federatedId":"56m-fludos_w5obeiyxd7w@si.org","rawId":"56m-fludos_w5obeiyxd7w@si.org"}],"validSince":"1699603759","email":"56m-fludos_w5obeiyxd7w@si.org","emailVerified":true,"disabled":false},{"localId":"JfPfN1qsdomTcpk9meUh5FnRxY18","createdAt":"1693389087774","lastLoginAt":"1693389087774","displayName":"","photoUrl":"","passwordHash":"fakeHash:salt=fakeSalti1aTJ2h4ViFmNbuieHlv:password=password","salt":"fakeSalti1aTJ2h4ViFmNbuieHlv","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"test@example.com","federatedId":"test@example.com","rawId":"test@example.com","displayName":"","photoUrl":""}],"validSince":"1699603759","email":"test@example.com","emailVerified":true,"disabled":false},{"localId":"JzXFD6NgG3ST713DNOkZUNLkD7M0","createdAt":"1693389328529","lastLoginAt":"1693478057515","displayName":"","photoUrl":"","passwordHash":"fakeHash:salt=fakeSaltOyXkSuMEItgEN7PCnYny:password=9pRyfllCF0jWK5XcLQ5IJQ","salt":"fakeSaltOyXkSuMEItgEN7PCnYny","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"thovvygawgjs1ictnydotg@si.org","federatedId":"thovvygawgjs1ictnydotg@si.org","rawId":"thovvygawgjs1ictnydotg@si.org","displayName":"","photoUrl":""}],"validSince":"1699603759","email":"thovvygawgjs1ictnydotg@si.org","emailVerified":false,"disabled":false},{"localId":"K3CW7Amt8msPeC7mSfMGWUyTmG4V","createdAt":"1678452278817","lastLoginAt":"1678452278817","passwordHash":"fakeHash:salt=fakeSaltCXDGDt39HPs62X4MnkQp:password=NYjRf-h0hD_WNetafqSQeG9WtSp0k_VLAv3b08Z3mwbvdw_BpVkL_NCQlTve8yWEEkwX146aKhJXQYel4Xsw4Q","salt":"fakeSaltCXDGDt39HPs62X4MnkQp","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"ilpbbm_ujhtrprql5eqp953g9urknvjqnjxv1uyesg7amjzdxw6s_alch_dq9eccou8p7v7plivx5vcnse2bkg@socialincome.org","federatedId":"ilpbbm_ujhtrprql5eqp953g9urknvjqnjxv1uyesg7amjzdxw6s_alch_dq9eccou8p7v7plivx5vcnse2bkg@socialincome.org","rawId":"ilpbbm_ujhtrprql5eqp953g9urknvjqnjxv1uyesg7amjzdxw6s_alch_dq9eccou8p7v7plivx5vcnse2bkg@socialincome.org"}],"validSince":"1699603759","email":"ilpbbm_ujhtrprql5eqp953g9urknvjqnjxv1uyesg7amjzdxw6s_alch_dq9eccou8p7v7plivx5vcnse2bkg@socialincome.org","emailVerified":true,"disabled":false},{"localId":"KuemHGCBzipGJZzuOzWGGdDsyLFR","createdAt":"1681401147934","lastLoginAt":"1681401147934","passwordHash":"fakeHash:salt=fakeSaltg8tk0BcwuzH59FS7lL7i:password=AbDLunW0_4_aco0mcIdUFw","salt":"fakeSaltg8tk0BcwuzH59FS7lL7i","passwordUpdatedAt":1699603759637,"providerUserInfo":[{"providerId":"password","email":"qe193vl_tm9qamzcim9ylq@si.org","federatedId":"qe193vl_tm9qamzcim9ylq@si.org","rawId":"qe193vl_tm9qamzcim9ylq@si.org"}],"validSince":"1699603759","email":"qe193vl_tm9qamzcim9ylq@si.org","emailVerified":true,"disabled":false},{"localId":"Lk6iS7tIuxtl4jZXYeu9DW3PX68Y","createdAt":"1666207539605","lastLoginAt":"1693477958232","displayName":"Admin","providerUserInfo":[{"providerId":"google.com","rawId":"7263616607754755158306200924200494132545","federatedId":"7263616607754755158306200924200494132545","displayName":"Admin","email":"admin@socialincome.org"}],"validSince":"1699603759","email":"admin@socialincome.org","emailVerified":true,"disabled":false},{"localId":"Mjb6LiUSudZma2wBxnhgywBM9m9S","createdAt":"1681401147946","lastLoginAt":"1681401147946","passwordHash":"fakeHash:salt=fakeSalt1oDH6yH6lILSZsGdMwlW:password=ZXP-Pq7rxrIUpC63Xgg_eA","salt":"fakeSalt1oDH6yH6lILSZsGdMwlW","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"8ep0tnz6c89etd_84-hxcw@si.org","federatedId":"8ep0tnz6c89etd_84-hxcw@si.org","rawId":"8ep0tnz6c89etd_84-hxcw@si.org"}],"validSince":"1699603759","email":"8ep0tnz6c89etd_84-hxcw@si.org","emailVerified":true,"disabled":false},{"localId":"NmTWJEkpeFQppabGYzgxb51m5yHB","createdAt":"1678452278809","lastLoginAt":"1678452278809","passwordHash":"fakeHash:salt=fakeSaltpbI32jq0xiXa0QBeBqIu:password=OFY7j2WdEENQjWWyviJJIlxAYCvtdGrgWLmhvadJCS7_fZj79kGViV_RRarE_TLMjviwrTeEa4AB0OjFvrOlww","salt":"fakeSaltpbI32jq0xiXa0QBeBqIu","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"wys8vepotxo9chdznstjl_lk48bks8ijucocd3hyltauumkjgw5ziqu9qrbehprjbzjgqjsm10pzo7xmi-sjpq@socialincome.org","federatedId":"wys8vepotxo9chdznstjl_lk48bks8ijucocd3hyltauumkjgw5ziqu9qrbehprjbzjgqjsm10pzo7xmi-sjpq@socialincome.org","rawId":"wys8vepotxo9chdznstjl_lk48bks8ijucocd3hyltauumkjgw5ziqu9qrbehprjbzjgqjsm10pzo7xmi-sjpq@socialincome.org"}],"validSince":"1699603759","email":"wys8vepotxo9chdznstjl_lk48bks8ijucocd3hyltauumkjgw5ziqu9qrbehprjbzjgqjsm10pzo7xmi-sjpq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"Pu8pCEisJmqS6p27ytprEEcIDFyJ","createdAt":"1678452278835","lastLoginAt":"1678452278835","passwordHash":"fakeHash:salt=fakeSaltcNUaWoexRRqH3sveCOe2:password=If_LSfd7ICpLYZ4epZzrJLVX4-CVseCZVnqQjZjeto6xIdUR9y8G9OhvEynRv_ebs1cRa0oPnFbYlnsT8z2ayw","salt":"fakeSaltcNUaWoexRRqH3sveCOe2","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"ouoca_rahg6p1oonhoiwx_9bwgcrnnsldwl6wvl2tbqpufudg5sxjsd_fesps1eb6mqmgaztdzwyblxij6hxpq@socialincome.org","federatedId":"ouoca_rahg6p1oonhoiwx_9bwgcrnnsldwl6wvl2tbqpufudg5sxjsd_fesps1eb6mqmgaztdzwyblxij6hxpq@socialincome.org","rawId":"ouoca_rahg6p1oonhoiwx_9bwgcrnnsldwl6wvl2tbqpufudg5sxjsd_fesps1eb6mqmgaztdzwyblxij6hxpq@socialincome.org"}],"validSince":"1699603759","email":"ouoca_rahg6p1oonhoiwx_9bwgcrnnsldwl6wvl2tbqpufudg5sxjsd_fesps1eb6mqmgaztdzwyblxij6hxpq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"S15i8kOiZNWSePL03AxPr4XzvhvV","createdAt":"1678452278829","lastLoginAt":"1678452278829","passwordHash":"fakeHash:salt=fakeSalttFoMVTgdoCoLD0KcpIhM:password=xoAvZrr5cEIcjexEAt_UTSgHfuQ07nQ-3E_1kxivJ9aEOUQy1zrAWmUikRqyYuBYo64Y_6HDFmKrAMBBNEnhUQ","salt":"fakeSalttFoMVTgdoCoLD0KcpIhM","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"jwtlwdq1h1a7zugz2ptu2y6wjtilb4efpvfbzn83xpdt3pvf-wgcaczbtjgfzlm7i2xjflvquso6g5jv540g0a@socialincome.org","federatedId":"jwtlwdq1h1a7zugz2ptu2y6wjtilb4efpvfbzn83xpdt3pvf-wgcaczbtjgfzlm7i2xjflvquso6g5jv540g0a@socialincome.org","rawId":"jwtlwdq1h1a7zugz2ptu2y6wjtilb4efpvfbzn83xpdt3pvf-wgcaczbtjgfzlm7i2xjflvquso6g5jv540g0a@socialincome.org"}],"validSince":"1699603759","email":"jwtlwdq1h1a7zugz2ptu2y6wjtilb4efpvfbzn83xpdt3pvf-wgcaczbtjgfzlm7i2xjflvquso6g5jv540g0a@socialincome.org","emailVerified":true,"disabled":false},{"localId":"SZTHkkkJPppKz0boNPWb4LZCdETC","createdAt":"1678452278820","lastLoginAt":"1678452278820","passwordHash":"fakeHash:salt=fakeSaltHjUV7WYthMUPgy0XGfss:password=U96zvaDHX_YJQAFXnETlzMAufcSniKDhWTEBPir1tATwB_IvQDSLOv_ijMG-4MKAz5qcjLUj6vAkHxgNoifKWQ","salt":"fakeSaltHjUV7WYthMUPgy0XGfss","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"rcur89aiwp7tc8xr4mu4d_ntxvzqrgi-qpufbjkd7zafeouonr6mjagpn9tet4lsz6qtpoyfz9h-me4av_9z2w@socialincome.org","federatedId":"rcur89aiwp7tc8xr4mu4d_ntxvzqrgi-qpufbjkd7zafeouonr6mjagpn9tet4lsz6qtpoyfz9h-me4av_9z2w@socialincome.org","rawId":"rcur89aiwp7tc8xr4mu4d_ntxvzqrgi-qpufbjkd7zafeouonr6mjagpn9tet4lsz6qtpoyfz9h-me4av_9z2w@socialincome.org"}],"validSince":"1699603759","email":"rcur89aiwp7tc8xr4mu4d_ntxvzqrgi-qpufbjkd7zafeouonr6mjagpn9tet4lsz6qtpoyfz9h-me4av_9z2w@socialincome.org","emailVerified":true,"disabled":false},{"localId":"Sl8VSZTfeFRsw5RbSDCy61Wi6n3W","createdAt":"1678452278815","lastLoginAt":"1678452278815","passwordHash":"fakeHash:salt=fakeSalti2NZn3muXEc9mzTCJErL:password=bMkd9mMrs91jDXw2ocA7LyQHD5sOqr_A5r1WxfPOCkdzP-i54YmhL0ehtRgKM7H9rhFApB39YqtuGNokUKpbAg","salt":"fakeSalti2NZn3muXEc9mzTCJErL","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"6zbwbaeryl8goc5ksvhc94gfn-l6if2fzngc0n5ukwkgeprkqqbyohgpjaouw3iqilk5-gkvr-dpmt3_mihy8g@socialincome.org","federatedId":"6zbwbaeryl8goc5ksvhc94gfn-l6if2fzngc0n5ukwkgeprkqqbyohgpjaouw3iqilk5-gkvr-dpmt3_mihy8g@socialincome.org","rawId":"6zbwbaeryl8goc5ksvhc94gfn-l6if2fzngc0n5ukwkgeprkqqbyohgpjaouw3iqilk5-gkvr-dpmt3_mihy8g@socialincome.org"}],"validSince":"1699603759","email":"6zbwbaeryl8goc5ksvhc94gfn-l6if2fzngc0n5ukwkgeprkqqbyohgpjaouw3iqilk5-gkvr-dpmt3_mihy8g@socialincome.org","emailVerified":true,"disabled":false},{"localId":"T3YLcycBys8Bl3i0E1iV5br3bcJP","createdAt":"1678452278832","lastLoginAt":"1678452278832","passwordHash":"fakeHash:salt=fakeSaltqzL5Cx5S56nvfurm6DtD:password=n_Arf5OuHPy9a4QiGCvJqIHRyjSqEhzuthtbBiFeRIoMaoy9SraeQPuI7EsP24qJr895-SBNdchp-JNf37B4oQ","salt":"fakeSaltqzL5Cx5S56nvfurm6DtD","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"fqxscb4ex2u6hhnk6f9mfucvc54dvuibibyk5e3skzcongahjbmdbahk4klsfeeevjudpxaj6obuwdpsqy1lpa@socialincome.org","federatedId":"fqxscb4ex2u6hhnk6f9mfucvc54dvuibibyk5e3skzcongahjbmdbahk4klsfeeevjudpxaj6obuwdpsqy1lpa@socialincome.org","rawId":"fqxscb4ex2u6hhnk6f9mfucvc54dvuibibyk5e3skzcongahjbmdbahk4klsfeeevjudpxaj6obuwdpsqy1lpa@socialincome.org"}],"validSince":"1699603759","email":"fqxscb4ex2u6hhnk6f9mfucvc54dvuibibyk5e3skzcongahjbmdbahk4klsfeeevjudpxaj6obuwdpsqy1lpa@socialincome.org","emailVerified":true,"disabled":false},{"localId":"TULiEPYUKfrAi4sRXS8dxZwSb5Nk","createdAt":"1678452278811","lastLoginAt":"1678452278811","passwordHash":"fakeHash:salt=fakeSaltl6o6EcPT7Tks9uFR6zAM:password=3NW8uTVX0LeQfM6VN8HuQJLrlcqAb07X3hAeD3is6Q0GXPjJH1NlHOkH5S7oMHr1qPRepAj1mxZ3KB2Q51X-1Q","salt":"fakeSaltl6o6EcPT7Tks9uFR6zAM","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"bv9vkjpu9ub7-qptyjlambwhwqdt-xrl43atiq_jpleb4tbs4lwutu1zsywb8fgfcilw5zfwi3cdhlx-xxykkq@socialincome.org","federatedId":"bv9vkjpu9ub7-qptyjlambwhwqdt-xrl43atiq_jpleb4tbs4lwutu1zsywb8fgfcilw5zfwi3cdhlx-xxykkq@socialincome.org","rawId":"bv9vkjpu9ub7-qptyjlambwhwqdt-xrl43atiq_jpleb4tbs4lwutu1zsywb8fgfcilw5zfwi3cdhlx-xxykkq@socialincome.org"}],"validSince":"1699603759","email":"bv9vkjpu9ub7-qptyjlambwhwqdt-xrl43atiq_jpleb4tbs4lwutu1zsywb8fgfcilw5zfwi3cdhlx-xxykkq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"TdIn8CczH8srqYEDEco8dNzTcOCg","createdAt":"1678452278832","lastLoginAt":"1678452278832","passwordHash":"fakeHash:salt=fakeSaltW2iAQHC0WAxojvsSlKDN:password=v24hkbtRinsfD-hhQhWRGJehxtKTKMSX5T6uvPDeBXX0G_a0DmVqbiY8mZJ_NzOXu30HIE-GgUcjINBqJSw0ZA","salt":"fakeSaltW2iAQHC0WAxojvsSlKDN","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"3irgkqvqwouinposgmlruuapkfoh30qdam2omscx9lgjgmnrsefagpdtpbvchhablzt02uqcdanpfw4unyxgiq@socialincome.org","federatedId":"3irgkqvqwouinposgmlruuapkfoh30qdam2omscx9lgjgmnrsefagpdtpbvchhablzt02uqcdanpfw4unyxgiq@socialincome.org","rawId":"3irgkqvqwouinposgmlruuapkfoh30qdam2omscx9lgjgmnrsefagpdtpbvchhablzt02uqcdanpfw4unyxgiq@socialincome.org"}],"validSince":"1699603759","email":"3irgkqvqwouinposgmlruuapkfoh30qdam2omscx9lgjgmnrsefagpdtpbvchhablzt02uqcdanpfw4unyxgiq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"U5nHCoBUPuCM1mC8Eb7iIGnpX2YA","createdAt":"1681401147928","lastLoginAt":"1681401147928","passwordHash":"fakeHash:salt=fakeSaltHxsXGfqYcsV6pqtiHCuY:password=Ljr7aUb0Wc394sKojz6lxg","salt":"fakeSaltHxsXGfqYcsV6pqtiHCuY","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"eh6w0siaul8rad24hxczoa@si.org","federatedId":"eh6w0siaul8rad24hxczoa@si.org","rawId":"eh6w0siaul8rad24hxczoa@si.org"}],"validSince":"1699603759","email":"eh6w0siaul8rad24hxczoa@si.org","emailVerified":true,"disabled":false},{"localId":"VkGMCViRE520QpEEnq589OWqek0Q","createdAt":"1681401147946","lastLoginAt":"1681401147946","passwordHash":"fakeHash:salt=fakeSaltft88Bmv9HwWLeYWzrmD6:password=WPmN-IClCVra82hdWbnbRA","salt":"fakeSaltft88Bmv9HwWLeYWzrmD6","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"vg-z6e64_vo2fu-8zch-mq@si.org","federatedId":"vg-z6e64_vo2fu-8zch-mq@si.org","rawId":"vg-z6e64_vo2fu-8zch-mq@si.org"}],"validSince":"1699603759","email":"vg-z6e64_vo2fu-8zch-mq@si.org","emailVerified":true,"disabled":false},{"localId":"VrtIvHKjxzTiYpCVcyKmf8x4XGQB","createdAt":"1678452278836","lastLoginAt":"1678452278836","passwordHash":"fakeHash:salt=fakeSalt4e8Qa5uyMxi2SCZTJZt3:password=rSlx-r4QwwH9WlnDJQZc_kOpcOgupl_c7TLphg_5s-fzi6TVHz63e_VAfBTxIhDlORS5YC3-apcJL_hHDHePaw","salt":"fakeSalt4e8Qa5uyMxi2SCZTJZt3","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"matkwjdznvjm20x9d-xbt1n52b5mpsi4topevjpkt5vemmrzig2rsonnradgnrbmgmjba8i5odip9bjbjwcmpa@socialincome.org","federatedId":"matkwjdznvjm20x9d-xbt1n52b5mpsi4topevjpkt5vemmrzig2rsonnradgnrbmgmjba8i5odip9bjbjwcmpa@socialincome.org","rawId":"matkwjdznvjm20x9d-xbt1n52b5mpsi4topevjpkt5vemmrzig2rsonnradgnrbmgmjba8i5odip9bjbjwcmpa@socialincome.org"}],"validSince":"1699603759","email":"matkwjdznvjm20x9d-xbt1n52b5mpsi4topevjpkt5vemmrzig2rsonnradgnrbmgmjba8i5odip9bjbjwcmpa@socialincome.org","emailVerified":true,"disabled":false},{"localId":"WG9yElReGoOyosIYo16tw6s707wa","createdAt":"1678452278824","lastLoginAt":"1678452278824","passwordHash":"fakeHash:salt=fakeSaltwYGiDkOi5zrVEqcaYOMI:password=IZeS3vTHuRUWqJ5mZ4cylB1JVRbHaKk4JihG8lMMcM6XgtkDYignHcmgPaUt16nYZuhbT2OUx0QnJmjwaWpdzQ","salt":"fakeSaltwYGiDkOi5zrVEqcaYOMI","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"lnbzqsgflszjypzfj3zulcirkgvx5oridatev0umfq2r2dbkj1znidopwuigjlhsjv_5lnzlw0v43cyfoa_ibq@socialincome.org","federatedId":"lnbzqsgflszjypzfj3zulcirkgvx5oridatev0umfq2r2dbkj1znidopwuigjlhsjv_5lnzlw0v43cyfoa_ibq@socialincome.org","rawId":"lnbzqsgflszjypzfj3zulcirkgvx5oridatev0umfq2r2dbkj1znidopwuigjlhsjv_5lnzlw0v43cyfoa_ibq@socialincome.org"}],"validSince":"1699603759","email":"lnbzqsgflszjypzfj3zulcirkgvx5oridatev0umfq2r2dbkj1znidopwuigjlhsjv_5lnzlw0v43cyfoa_ibq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"WLI8ezbOTw0ZxTuZ3VoyDOvvUuBn","createdAt":"1681401147932","lastLoginAt":"1681401147932","passwordHash":"fakeHash:salt=fakeSaltbADnfvZNSoZYhgqyE4LQ:password=qHPba8hKCeQbmD5fEhL7Zw","salt":"fakeSaltbADnfvZNSoZYhgqyE4LQ","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"r12lzke--vloybg-96d4yw@si.org","federatedId":"r12lzke--vloybg-96d4yw@si.org","rawId":"r12lzke--vloybg-96d4yw@si.org"}],"validSince":"1699603759","email":"r12lzke--vloybg-96d4yw@si.org","emailVerified":true,"disabled":false},{"localId":"WUn0ANwIehhhbbMZB7FeWIJCBJhM","createdAt":"1678452278829","lastLoginAt":"1678452278829","passwordHash":"fakeHash:salt=fakeSaltQEgFdAzDqnSEIW5M9Na0:password=MTv2G5wTuUxbKIUy5T42JntZx9W-4oZy1z1XCTffN0AXPT4ajRY0NHPb1sch0ungZuz6wFRLI0AiJVRWDIYsBg","salt":"fakeSaltQEgFdAzDqnSEIW5M9Na0","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"6jjlwdkb42aob54sxq-vop2iwg8q76uidw1vfga24vghh0iqe6wa6lzz-ebeetsshej39kox88yys2qj-pptfa@socialincome.org","federatedId":"6jjlwdkb42aob54sxq-vop2iwg8q76uidw1vfga24vghh0iqe6wa6lzz-ebeetsshej39kox88yys2qj-pptfa@socialincome.org","rawId":"6jjlwdkb42aob54sxq-vop2iwg8q76uidw1vfga24vghh0iqe6wa6lzz-ebeetsshej39kox88yys2qj-pptfa@socialincome.org"}],"validSince":"1699603759","email":"6jjlwdkb42aob54sxq-vop2iwg8q76uidw1vfga24vghh0iqe6wa6lzz-ebeetsshej39kox88yys2qj-pptfa@socialincome.org","emailVerified":true,"disabled":false},{"localId":"Wh5tYTOpVihNsMvtQAIStGsNhFRa","createdAt":"1678452278813","lastLoginAt":"1678452278813","passwordHash":"fakeHash:salt=fakeSaltwKsCAfEUJrUJLHPA9ifY:password=YQYhMs2AZJmlXuai4BGjf7S7-ytr5bTfd-dvSv5T8bZ26EqNfYRR7mE4lmI64vion4xR0O3eKzLoptZS8RQkKw","salt":"fakeSaltwKsCAfEUJrUJLHPA9ifY","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"4hjqnt9wfmxdv6adm2ftm68yn-nzrbfl7ibv2ybj0vi95x2kncvom5yc0ddnygmsn-n6v7076r-qr-wrxhpk6q@socialincome.org","federatedId":"4hjqnt9wfmxdv6adm2ftm68yn-nzrbfl7ibv2ybj0vi95x2kncvom5yc0ddnygmsn-n6v7076r-qr-wrxhpk6q@socialincome.org","rawId":"4hjqnt9wfmxdv6adm2ftm68yn-nzrbfl7ibv2ybj0vi95x2kncvom5yc0ddnygmsn-n6v7076r-qr-wrxhpk6q@socialincome.org"}],"validSince":"1699603759","email":"4hjqnt9wfmxdv6adm2ftm68yn-nzrbfl7ibv2ybj0vi95x2kncvom5yc0ddnygmsn-n6v7076r-qr-wrxhpk6q@socialincome.org","emailVerified":true,"disabled":false},{"localId":"WhQC2pI65uLxerMfGKoAZuj80wVK","createdAt":"1681401147936","lastLoginAt":"1681401147936","passwordHash":"fakeHash:salt=fakeSaltTZd9dkRpMVAU80k3Tv1M:password=aJ4_CMYhlHiPsjadPDrpyg","salt":"fakeSaltTZd9dkRpMVAU80k3Tv1M","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"on6gzgmfk1mwv0aj5hs2sg@si.org","federatedId":"on6gzgmfk1mwv0aj5hs2sg@si.org","rawId":"on6gzgmfk1mwv0aj5hs2sg@si.org"}],"validSince":"1699603759","email":"on6gzgmfk1mwv0aj5hs2sg@si.org","emailVerified":true,"disabled":false},{"localId":"XKFR9NQn6JlGjxkk6uiQHHhvf6ES","createdAt":"1681401147939","lastLoginAt":"1681401147939","passwordHash":"fakeHash:salt=fakeSaltX14WWfqE90sqnXp4E5rL:password=YPOOKEhW4XE0jNWuYAbSCw","salt":"fakeSaltX14WWfqE90sqnXp4E5rL","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"2x7to9g2oniao217ohzelw@si.org","federatedId":"2x7to9g2oniao217ohzelw@si.org","rawId":"2x7to9g2oniao217ohzelw@si.org"}],"validSince":"1699603759","email":"2x7to9g2oniao217ohzelw@si.org","emailVerified":true,"disabled":false},{"localId":"Xr1sfooqLk0jWrdqjKhc2p25uLiJ","createdAt":"1678452278820","lastLoginAt":"1678452278820","passwordHash":"fakeHash:salt=fakeSaltjBORgtlmNSclQd8b6mQq:password=x5GsB-WJyaacXn0yR0my3jbY8Cfvk6i21QL3RJF-LudFF9A9FwM3jlGcJrr8xzeYHkbKt-bqkpfys4w5NnIQ6w","salt":"fakeSaltjBORgtlmNSclQd8b6mQq","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"-v0a9vgrfxvu9l7dm7t5oosbjrdr-grhoi_kw5rbwkw0x7goc5zjz1fj6l0y5644xg8m5yckvy1zuihafezxkw@socialincome.org","federatedId":"-v0a9vgrfxvu9l7dm7t5oosbjrdr-grhoi_kw5rbwkw0x7goc5zjz1fj6l0y5644xg8m5yckvy1zuihafezxkw@socialincome.org","rawId":"-v0a9vgrfxvu9l7dm7t5oosbjrdr-grhoi_kw5rbwkw0x7goc5zjz1fj6l0y5644xg8m5yckvy1zuihafezxkw@socialincome.org"}],"validSince":"1699603759","email":"-v0a9vgrfxvu9l7dm7t5oosbjrdr-grhoi_kw5rbwkw0x7goc5zjz1fj6l0y5644xg8m5yckvy1zuihafezxkw@socialincome.org","emailVerified":true,"disabled":false},{"localId":"XycJbgLqZFOaata8DJRxesJaeqFs","createdAt":"1681401147943","lastLoginAt":"1681401147943","passwordHash":"fakeHash:salt=fakeSalty2NgW7KvhOqdjVunihYF:password=lNC6gcV9YcdIBUAkXBQ6Zg","salt":"fakeSalty2NgW7KvhOqdjVunihYF","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"0h14y9joabladg8am7wfhq@si.org","federatedId":"0h14y9joabladg8am7wfhq@si.org","rawId":"0h14y9joabladg8am7wfhq@si.org"}],"validSince":"1699603759","email":"0h14y9joabladg8am7wfhq@si.org","emailVerified":true,"disabled":false},{"localId":"aJzeXotYZlL8p1lJREsMODig0Ets","createdAt":"1678452278834","lastLoginAt":"1678452278834","passwordHash":"fakeHash:salt=fakeSaltavpPynNSy7FtybrPALO9:password=hIAdnrlVzbtUF3pvbXHSH8s2BpNmLfetDgLs56uc5BWb7qqRqXj886PslKmGE9A7qPF5_roVUIFP535yVpYF9A","salt":"fakeSaltavpPynNSy7FtybrPALO9","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"yxrcgwtk_r39zr1so44sbii97smsvb4ajjysakzzoetw9aisfoqg0_c8h7lbyj3rrvbewskzfbsnqofbkdy8sq@socialincome.org","federatedId":"yxrcgwtk_r39zr1so44sbii97smsvb4ajjysakzzoetw9aisfoqg0_c8h7lbyj3rrvbewskzfbsnqofbkdy8sq@socialincome.org","rawId":"yxrcgwtk_r39zr1so44sbii97smsvb4ajjysakzzoetw9aisfoqg0_c8h7lbyj3rrvbewskzfbsnqofbkdy8sq@socialincome.org"}],"validSince":"1699603759","email":"yxrcgwtk_r39zr1so44sbii97smsvb4ajjysakzzoetw9aisfoqg0_c8h7lbyj3rrvbewskzfbsnqofbkdy8sq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"bKxZDr4O7KJRR6K3RZOpfDw7tGCd","createdAt":"1681401147941","lastLoginAt":"1681401147941","passwordHash":"fakeHash:salt=fakeSaltGV7UDN86gzyYvJByVYDb:password=YUXt7MQ9-pz3sDDSHJJ5Gg","salt":"fakeSaltGV7UDN86gzyYvJByVYDb","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"orzkumq-tuuculjkdduzmq@si.org","federatedId":"orzkumq-tuuculjkdduzmq@si.org","rawId":"orzkumq-tuuculjkdduzmq@si.org"}],"validSince":"1699603759","email":"orzkumq-tuuculjkdduzmq@si.org","emailVerified":true,"disabled":false},{"localId":"bwEHC4CKnNjAq9ZCyGoYG4Ky2Rvd","createdAt":"1678452278827","lastLoginAt":"1678452278827","passwordHash":"fakeHash:salt=fakeSalt2eTmW7ZUcn1QKd5jq8aU:password=mUSwjbe_ghAUYRwf12yVcxvcwvzhK8DD9JDiyZBoEijoCFFFDgfw-yqCNQlhDafQof_30lMzmQ3qsWKti31rSQ","salt":"fakeSalt2eTmW7ZUcn1QKd5jq8aU","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"g4je6fb9v5vaj4wqyviiquiinhqopdknssghgw0kanzmacmu3hx3qf6tibtoydkiadbllomg3bur710dz6xaaw@socialincome.org","federatedId":"g4je6fb9v5vaj4wqyviiquiinhqopdknssghgw0kanzmacmu3hx3qf6tibtoydkiadbllomg3bur710dz6xaaw@socialincome.org","rawId":"g4je6fb9v5vaj4wqyviiquiinhqopdknssghgw0kanzmacmu3hx3qf6tibtoydkiadbllomg3bur710dz6xaaw@socialincome.org"}],"validSince":"1699603759","email":"g4je6fb9v5vaj4wqyviiquiinhqopdknssghgw0kanzmacmu3hx3qf6tibtoydkiadbllomg3bur710dz6xaaw@socialincome.org","emailVerified":true,"disabled":false},{"localId":"cSr8VPB5qGZtOiFvUqfnSiucBWb9","createdAt":"1681401147937","lastLoginAt":"1681401147937","passwordHash":"fakeHash:salt=fakeSalt7VnsV7KKPsDlggCsVEcQ:password=l0f5lllhcDQ7xffRivQh4Q","salt":"fakeSalt7VnsV7KKPsDlggCsVEcQ","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"m89j9czqmd9fanogy9yerw@si.org","federatedId":"m89j9czqmd9fanogy9yerw@si.org","rawId":"m89j9czqmd9fanogy9yerw@si.org"}],"validSince":"1699603759","email":"m89j9czqmd9fanogy9yerw@si.org","emailVerified":true,"disabled":false},{"localId":"cWLEplwWc76nIeLOuqUDUJDUdReO","createdAt":"1681401147944","lastLoginAt":"1689266155133","passwordHash":"fakeHash:salt=fakeSaltpAW09Bi9v5BRYYjw0Ve7:password=DjqUQRDcw9KM08ljwnrgRw","salt":"fakeSaltpAW09Bi9v5BRYYjw0Ve7","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"qfi_qfh3mtqpwt93priohq@si.org","federatedId":"qfi_qfh3mtqpwt93priohq@si.org","rawId":"qfi_qfh3mtqpwt93priohq@si.org"}],"validSince":"1699603759","email":"qfi_qfh3mtqpwt93priohq@si.org","emailVerified":true,"disabled":false},{"localId":"cwN5z1nEbq1W3flXanurpF3P0paK","createdAt":"1681401147941","lastLoginAt":"1681401147941","passwordHash":"fakeHash:salt=fakeSaltEOE0dJt80waIMAlLiJMm:password=c3wp61ZTNCTyRo1qmlpTtA","salt":"fakeSaltEOE0dJt80waIMAlLiJMm","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"7lpqyxrtugyytknu93o5cq@si.org","federatedId":"7lpqyxrtugyytknu93o5cq@si.org","rawId":"7lpqyxrtugyytknu93o5cq@si.org"}],"validSince":"1699603759","email":"7lpqyxrtugyytknu93o5cq@si.org","emailVerified":true,"disabled":false},{"localId":"eazV9yRtK9DPhzK3byiVO26ucXZp","createdAt":"1681401147931","lastLoginAt":"1681401147931","passwordHash":"fakeHash:salt=fakeSaltZybEgdbI5c5EuDHpyxOh:password=aDDvHb3ZlLI5VTOimTfgyA","salt":"fakeSaltZybEgdbI5c5EuDHpyxOh","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"8eb3y7c7xjjybk0pg6sycg@si.org","federatedId":"8eb3y7c7xjjybk0pg6sycg@si.org","rawId":"8eb3y7c7xjjybk0pg6sycg@si.org"}],"validSince":"1699603759","email":"8eb3y7c7xjjybk0pg6sycg@si.org","emailVerified":true,"disabled":false},{"localId":"fsAXNSzJuyt8t0GtHE2k98Ba6ryS","createdAt":"1681401147941","lastLoginAt":"1681401147941","passwordHash":"fakeHash:salt=fakeSaltv5SfHb6LdTCWO3Gd7U9Y:password=CEZuk9I_vfJa64Q9xxIGYA","salt":"fakeSaltv5SfHb6LdTCWO3Gd7U9Y","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"7in32qgmmp1alaafq4szaw@si.org","federatedId":"7in32qgmmp1alaafq4szaw@si.org","rawId":"7in32qgmmp1alaafq4szaw@si.org"}],"validSince":"1699603759","email":"7in32qgmmp1alaafq4szaw@si.org","emailVerified":true,"disabled":false},{"localId":"gibI1DkMn2KkNNlOmNO7vZCURnzG","createdAt":"1678452278807","lastLoginAt":"1678452278807","passwordHash":"fakeHash:salt=fakeSalt1gEHx5FsIynPVHyj8mwm:password=V_Cb53sDLlbY1KpojUCJxGjkQeBDdJM2T3fDcFFszTR879-zkv6UoLrKtIKY62nTWqdKRlZb4B82wWdz0Qmy2Q","salt":"fakeSalt1gEHx5FsIynPVHyj8mwm","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"wyqmqi91e4bdz-kzzhgghj4bxdvyrv8gyzpmf3dqur6t3vxv4dphtfojxudfzbwqfe0zf3zge6w2xblb9637qq@socialincome.org","federatedId":"wyqmqi91e4bdz-kzzhgghj4bxdvyrv8gyzpmf3dqur6t3vxv4dphtfojxudfzbwqfe0zf3zge6w2xblb9637qq@socialincome.org","rawId":"wyqmqi91e4bdz-kzzhgghj4bxdvyrv8gyzpmf3dqur6t3vxv4dphtfojxudfzbwqfe0zf3zge6w2xblb9637qq@socialincome.org"}],"validSince":"1699603759","email":"wyqmqi91e4bdz-kzzhgghj4bxdvyrv8gyzpmf3dqur6t3vxv4dphtfojxudfzbwqfe0zf3zge6w2xblb9637qq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"h2SaKt8IFn67OZ77o0f3GvuAGFEj","createdAt":"1681401147926","lastLoginAt":"1681401147926","passwordHash":"fakeHash:salt=fakeSalttXF09nz3ed9ZGawYkPx3:password=qmV4HIQhgl1p3cYVwE8DSA","salt":"fakeSalttXF09nz3ed9ZGawYkPx3","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"ulpt_lnee3jxzc3v12d0sw@si.org","federatedId":"ulpt_lnee3jxzc3v12d0sw@si.org","rawId":"ulpt_lnee3jxzc3v12d0sw@si.org"}],"validSince":"1699603759","email":"ulpt_lnee3jxzc3v12d0sw@si.org","emailVerified":true,"disabled":false},{"localId":"hdSNtn6RTa92YkS2GHqjWSSE1YvQ","createdAt":"1678452278834","lastLoginAt":"1678452278834","passwordHash":"fakeHash:salt=fakeSaltm1CxRwhAGl3PVixj0GIv:password=QGlAjowyj9DlouuAfltKBzf35HMY98KVJiW2gh8ZQOvyvJfKtR6ZwaNbg8eaHxZ5KiQV5n0ZCw4tANzr0-IhWw","salt":"fakeSaltm1CxRwhAGl3PVixj0GIv","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"6zs5gqd8wqoblo-klevxsyrlnykm38x44quo7h-phydtdhgzdkkbxzwpuyb2tmzculgoujvwl1aformpup2cwa@socialincome.org","federatedId":"6zs5gqd8wqoblo-klevxsyrlnykm38x44quo7h-phydtdhgzdkkbxzwpuyb2tmzculgoujvwl1aformpup2cwa@socialincome.org","rawId":"6zs5gqd8wqoblo-klevxsyrlnykm38x44quo7h-phydtdhgzdkkbxzwpuyb2tmzculgoujvwl1aformpup2cwa@socialincome.org"}],"validSince":"1699603759","email":"6zs5gqd8wqoblo-klevxsyrlnykm38x44quo7h-phydtdhgzdkkbxzwpuyb2tmzculgoujvwl1aformpup2cwa@socialincome.org","emailVerified":true,"disabled":false},{"localId":"ifCO2FTf4CHuyMB8bV3QDv98RBHo","createdAt":"1678452278822","lastLoginAt":"1678452278822","passwordHash":"fakeHash:salt=fakeSaltiUpX0LeoSvnCsJ7oxMDn:password=4DQORmJvm3q6MtAc8Te_fPBZL4lHauy5itGqGRzRx_uAwX5SjCTRRxwopE_q3UUibJZio_EMZPaY-pqHGitBdQ","salt":"fakeSaltiUpX0LeoSvnCsJ7oxMDn","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"7fizesv_4mumwcp_0qrgtd2kwmcnxzhscppwhghrs36ibywsba5gh78v_0f_mxpryi_vermjonlujzyuwzc4zw@socialincome.org","federatedId":"7fizesv_4mumwcp_0qrgtd2kwmcnxzhscppwhghrs36ibywsba5gh78v_0f_mxpryi_vermjonlujzyuwzc4zw@socialincome.org","rawId":"7fizesv_4mumwcp_0qrgtd2kwmcnxzhscppwhghrs36ibywsba5gh78v_0f_mxpryi_vermjonlujzyuwzc4zw@socialincome.org"}],"validSince":"1699603759","email":"7fizesv_4mumwcp_0qrgtd2kwmcnxzhscppwhghrs36ibywsba5gh78v_0f_mxpryi_vermjonlujzyuwzc4zw@socialincome.org","emailVerified":true,"disabled":false},{"localId":"ihtGTTFUXraZEt8PGHMYtl2i4uKh","createdAt":"1681401147921","lastLoginAt":"1681401147921","passwordHash":"fakeHash:salt=fakeSaltCeJBRJ2ag36unr4c2TJh:password=xNuXWcxbFIfwtkgJPb_7pA","salt":"fakeSaltCeJBRJ2ag36unr4c2TJh","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"kran2tm3edpgalrmvu2tka@si.org","federatedId":"kran2tm3edpgalrmvu2tka@si.org","rawId":"kran2tm3edpgalrmvu2tka@si.org"}],"validSince":"1699603759","email":"kran2tm3edpgalrmvu2tka@si.org","emailVerified":true,"disabled":false},{"localId":"jElwC0RVQEzsh7gJYuwfBgiQAciX","createdAt":"1681401147945","lastLoginAt":"1681401147945","passwordHash":"fakeHash:salt=fakeSaltzBdyW32n9wiCsJKe9T9x:password=gg841L24Vu9A5ZqAwLr4ZA","salt":"fakeSaltzBdyW32n9wiCsJKe9T9x","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"vocnxk_lvem1x1g5junvwq@si.org","federatedId":"vocnxk_lvem1x1g5junvwq@si.org","rawId":"vocnxk_lvem1x1g5junvwq@si.org"}],"validSince":"1699603759","email":"vocnxk_lvem1x1g5junvwq@si.org","emailVerified":true,"disabled":false},{"localId":"jFRLVSevc5ZLNlCdgi26Ty4FJzbr","createdAt":"1681401147931","lastLoginAt":"1681401147931","passwordHash":"fakeHash:salt=fakeSaltCrd9aDhzfLsHDUNxU1Ma:password=JbaUwjMHZtthaGQ0hJPU5Q","salt":"fakeSaltCrd9aDhzfLsHDUNxU1Ma","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"mexh-kzhrjm6zrto5hihvg@si.org","federatedId":"mexh-kzhrjm6zrto5hihvg@si.org","rawId":"mexh-kzhrjm6zrto5hihvg@si.org"}],"validSince":"1699603759","email":"mexh-kzhrjm6zrto5hihvg@si.org","emailVerified":true,"disabled":false},{"localId":"jaPGgPvl5ob5MQ1VAx6wyEqveylT","createdAt":"1678452278810","lastLoginAt":"1678452278810","passwordHash":"fakeHash:salt=fakeSalt3NjtOb3qQKAk5ctTlKg1:password=djyOxrhqwyLSsusAcwfcXYgvgCUu0Hg-QAdwADME1rGbG5eglb2Y128YaPDoS2KRc687vsy81JxhTzeIk2z9LA","salt":"fakeSalt3NjtOb3qQKAk5ctTlKg1","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"j2v9wa39fe7kdofuy5quioguhxeickn0fe-3_tpqgrd0lvlkmwqyjugzyzkfuia16nx24j8cqfnw4vvhcziuia@socialincome.org","federatedId":"j2v9wa39fe7kdofuy5quioguhxeickn0fe-3_tpqgrd0lvlkmwqyjugzyzkfuia16nx24j8cqfnw4vvhcziuia@socialincome.org","rawId":"j2v9wa39fe7kdofuy5quioguhxeickn0fe-3_tpqgrd0lvlkmwqyjugzyzkfuia16nx24j8cqfnw4vvhcziuia@socialincome.org"}],"validSince":"1699603759","email":"j2v9wa39fe7kdofuy5quioguhxeickn0fe-3_tpqgrd0lvlkmwqyjugzyzkfuia16nx24j8cqfnw4vvhcziuia@socialincome.org","emailVerified":true,"disabled":false},{"localId":"k8Nlm8Jlwi6JUPL5rlaAvjhJzMS3","createdAt":"1678452278819","lastLoginAt":"1678452278819","passwordHash":"fakeHash:salt=fakeSaltlmDJ9x6dI6KZVAbj0ixB:password=FxvDGsDC8l24ilBQJb2yEt1zK9wkRK3ly5CGQZEavgW-w3oRWt4ZQk8IVJzfupNfz88otUpJeqy_xX3eD1P31Q","salt":"fakeSaltlmDJ9x6dI6KZVAbj0ixB","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"jdnqmzj7tlbjnyv7xxmm4_ke64zgwew7m-w-visxutkbecieupxyycb2kwuie9nxzb9xxjrnswd7clothc_v1g@socialincome.org","federatedId":"jdnqmzj7tlbjnyv7xxmm4_ke64zgwew7m-w-visxutkbecieupxyycb2kwuie9nxzb9xxjrnswd7clothc_v1g@socialincome.org","rawId":"jdnqmzj7tlbjnyv7xxmm4_ke64zgwew7m-w-visxutkbecieupxyycb2kwuie9nxzb9xxjrnswd7clothc_v1g@socialincome.org"}],"validSince":"1699603759","email":"jdnqmzj7tlbjnyv7xxmm4_ke64zgwew7m-w-visxutkbecieupxyycb2kwuie9nxzb9xxjrnswd7clothc_v1g@socialincome.org","emailVerified":true,"disabled":false},{"localId":"kF7T2ZxRrxZzwwFeUmqbjwyX14mS","createdAt":"1681401147933","lastLoginAt":"1681401147933","passwordHash":"fakeHash:salt=fakeSaltB3Y1adGEoG7yhu0vOcbl:password=F_6I91b5SkpkGs1XT8oZTw","salt":"fakeSaltB3Y1adGEoG7yhu0vOcbl","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"b3ixgp03r4ooxyvetjy-gg@si.org","federatedId":"b3ixgp03r4ooxyvetjy-gg@si.org","rawId":"b3ixgp03r4ooxyvetjy-gg@si.org"}],"validSince":"1699603759","email":"b3ixgp03r4ooxyvetjy-gg@si.org","emailVerified":true,"disabled":false},{"localId":"m2fjMakKdwaxEVZFQ7ZjKZ51y1Zs","createdAt":"1678452278816","lastLoginAt":"1678452278816","passwordHash":"fakeHash:salt=fakeSaltz93OQLJ8YDpADyaXN6Wo:password=NTnCTdO29v6sgRsyYB-J3QDRaOi_Sv-fzXGlz-Evx_L6-mi7TehlPc94TQCU6KYjFHJXvNDezZuoNwhA0SELeQ","salt":"fakeSaltz93OQLJ8YDpADyaXN6Wo","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"txe-jwvx1mfz1fbm0vqplmok3rwr0hp208rch9l1lcarhwnmghaqorzygivrvae0br7fznqqvc1lzmlnck8p4w@socialincome.org","federatedId":"txe-jwvx1mfz1fbm0vqplmok3rwr0hp208rch9l1lcarhwnmghaqorzygivrvae0br7fznqqvc1lzmlnck8p4w@socialincome.org","rawId":"txe-jwvx1mfz1fbm0vqplmok3rwr0hp208rch9l1lcarhwnmghaqorzygivrvae0br7fznqqvc1lzmlnck8p4w@socialincome.org"}],"validSince":"1699603759","email":"txe-jwvx1mfz1fbm0vqplmok3rwr0hp208rch9l1lcarhwnmghaqorzygivrvae0br7fznqqvc1lzmlnck8p4w@socialincome.org","emailVerified":true,"disabled":false},{"localId":"m46S63pc0K2icMb9nS3dST1N9SEV","createdAt":"1681401147943","lastLoginAt":"1681401147943","passwordHash":"fakeHash:salt=fakeSaltmNAMfaueAMB7XEmPKhRi:password=Qo4zx4t_iTB2HoJ1ht1eZg","salt":"fakeSaltmNAMfaueAMB7XEmPKhRi","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"c4ps6juswddgok0whwjrig@si.org","federatedId":"c4ps6juswddgok0whwjrig@si.org","rawId":"c4ps6juswddgok0whwjrig@si.org"}],"validSince":"1699603759","email":"c4ps6juswddgok0whwjrig@si.org","emailVerified":true,"disabled":false},{"localId":"mTI2y1chrJGheQ4u5ZRI6e6EPxlu","createdAt":"1678452278823","lastLoginAt":"1678452278823","passwordHash":"fakeHash:salt=fakeSalts06cOD4D1ETwu513tJFB:password=4XBUhJi5ZieoLiFj-nsI7SXBy0MBgRGCtwDrAG3XTtqH-2Vcm7ASKf5nNr9Py7vHoBWA-F0HtA0RqwjrVnGL0g","salt":"fakeSalts06cOD4D1ETwu513tJFB","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"qhsbqgpgyjrakzjxradvoylpb2fw4fgxd_pymn-f07sxx1sguzsvlkxa0hvowzu5g5ysgg1zggkryzrlemeama@socialincome.org","federatedId":"qhsbqgpgyjrakzjxradvoylpb2fw4fgxd_pymn-f07sxx1sguzsvlkxa0hvowzu5g5ysgg1zggkryzrlemeama@socialincome.org","rawId":"qhsbqgpgyjrakzjxradvoylpb2fw4fgxd_pymn-f07sxx1sguzsvlkxa0hvowzu5g5ysgg1zggkryzrlemeama@socialincome.org"}],"validSince":"1699603759","email":"qhsbqgpgyjrakzjxradvoylpb2fw4fgxd_pymn-f07sxx1sguzsvlkxa0hvowzu5g5ysgg1zggkryzrlemeama@socialincome.org","emailVerified":true,"disabled":false},{"localId":"ngi82EkJj6zyELv1uA6kRPSybeUv","createdAt":"1678452278835","lastLoginAt":"1678452278835","passwordHash":"fakeHash:salt=fakeSaltW2pqk7vzwOZVcAhPBAOV:password=N7gW7Lk20MKHbBqH7dYNf8vPUjlWb43ewlQQ_OBnRCySsdmet6XeoL6ikJQ0eMU43r-rOc0AGXJn0DJJq8wzNg","salt":"fakeSaltW2pqk7vzwOZVcAhPBAOV","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"6yrsb76dkzggxy9dmncixbm-x_crxirertex3nkr1vk75dkyoliw4ajei_ebr8afzc3uwbkibz-vq5wpuuaahw@socialincome.org","federatedId":"6yrsb76dkzggxy9dmncixbm-x_crxirertex3nkr1vk75dkyoliw4ajei_ebr8afzc3uwbkibz-vq5wpuuaahw@socialincome.org","rawId":"6yrsb76dkzggxy9dmncixbm-x_crxirertex3nkr1vk75dkyoliw4ajei_ebr8afzc3uwbkibz-vq5wpuuaahw@socialincome.org"}],"validSince":"1699603759","email":"6yrsb76dkzggxy9dmncixbm-x_crxirertex3nkr1vk75dkyoliw4ajei_ebr8afzc3uwbkibz-vq5wpuuaahw@socialincome.org","emailVerified":true,"disabled":false},{"localId":"pelLX4a8l1dG2wiHcztv5mTXhb4m","createdAt":"1678452278830","lastLoginAt":"1678452278830","passwordHash":"fakeHash:salt=fakeSalt2kiJp3uzA1q7dtMRSPvI:password=Xjuo8dO0cFQYaWjCA_OlDh31WqUr2_4Mmn9cc6CmwnB_j2lyiKcbXiWKpfQga21jk6mjr-ffm7Yj09FQdITdyA","salt":"fakeSalt2kiJp3uzA1q7dtMRSPvI","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"fkyej35izue13_d_4w6e8hmh71wuz5c-t83mnqrlxcjrkn7l1s-8w1-eaqtxm2xdsrm1wr5sfjxvp7px8s07da@socialincome.org","federatedId":"fkyej35izue13_d_4w6e8hmh71wuz5c-t83mnqrlxcjrkn7l1s-8w1-eaqtxm2xdsrm1wr5sfjxvp7px8s07da@socialincome.org","rawId":"fkyej35izue13_d_4w6e8hmh71wuz5c-t83mnqrlxcjrkn7l1s-8w1-eaqtxm2xdsrm1wr5sfjxvp7px8s07da@socialincome.org"}],"validSince":"1699603759","email":"fkyej35izue13_d_4w6e8hmh71wuz5c-t83mnqrlxcjrkn7l1s-8w1-eaqtxm2xdsrm1wr5sfjxvp7px8s07da@socialincome.org","emailVerified":true,"disabled":false},{"localId":"pvUBVxRP89QLXpeW0KuDwZkm2iMC","createdAt":"1678452278826","lastLoginAt":"1678452278826","passwordHash":"fakeHash:salt=fakeSaltcu43f2lxLbwwK4FE7hD7:password=VG-exMow6PURAS_yO2VliUl4hC82IKEKEkjCBRic2BCGFXJ0H-yfMTYn868_zaOmf8vNEQS73T3aUULHdpm7EA","salt":"fakeSaltcu43f2lxLbwwK4FE7hD7","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"piipmtwtbpbvmuoq0evyv3ruv0d7ho7vdaxjpj3klpcgxnlsrk2m77wcxr9vycpc_cuw26wptiyohd3kogpshw@socialincome.org","federatedId":"piipmtwtbpbvmuoq0evyv3ruv0d7ho7vdaxjpj3klpcgxnlsrk2m77wcxr9vycpc_cuw26wptiyohd3kogpshw@socialincome.org","rawId":"piipmtwtbpbvmuoq0evyv3ruv0d7ho7vdaxjpj3klpcgxnlsrk2m77wcxr9vycpc_cuw26wptiyohd3kogpshw@socialincome.org"}],"validSince":"1699603759","email":"piipmtwtbpbvmuoq0evyv3ruv0d7ho7vdaxjpj3klpcgxnlsrk2m77wcxr9vycpc_cuw26wptiyohd3kogpshw@socialincome.org","emailVerified":true,"disabled":false},{"localId":"qBVZR9G3Qf1xTCZhUa0VjN8ndWuL","createdAt":"1681401147925","lastLoginAt":"1681401147925","passwordHash":"fakeHash:salt=fakeSaltpJSXGARvTVSb7lhdEvHS:password=QgC-zfDAHewJ5_Pu6iot-A","salt":"fakeSaltpJSXGARvTVSb7lhdEvHS","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"wvsqb_y1egyoz1uafwen9g@si.org","federatedId":"wvsqb_y1egyoz1uafwen9g@si.org","rawId":"wvsqb_y1egyoz1uafwen9g@si.org"}],"validSince":"1699603759","email":"wvsqb_y1egyoz1uafwen9g@si.org","emailVerified":true,"disabled":false},{"localId":"qIzKCD97BhtZh8UJbmckOlkODFnL","createdAt":"1681401147939","lastLoginAt":"1681401147939","passwordHash":"fakeHash:salt=fakeSaltbfPzMQOoAtaukAgY2Fhf:password=HnNCv28ZyAOkLDwsfKdN_w","salt":"fakeSaltbfPzMQOoAtaukAgY2Fhf","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"r5crcpis11f9tqaxums_xq@si.org","federatedId":"r5crcpis11f9tqaxums_xq@si.org","rawId":"r5crcpis11f9tqaxums_xq@si.org"}],"validSince":"1699603759","email":"r5crcpis11f9tqaxums_xq@si.org","emailVerified":true,"disabled":false},{"localId":"qJlI87f5wIobKTYgMSuv359uVB5A","createdAt":"1681401147932","lastLoginAt":"1681401147932","passwordHash":"fakeHash:salt=fakeSaltVmb26DKZP07w03mjfGI8:password=j7Crxme502IajDxJ6xgWMg","salt":"fakeSaltVmb26DKZP07w03mjfGI8","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"9gdg1nkvpvvngmcemzijiq@si.org","federatedId":"9gdg1nkvpvvngmcemzijiq@si.org","rawId":"9gdg1nkvpvvngmcemzijiq@si.org"}],"validSince":"1699603759","email":"9gdg1nkvpvvngmcemzijiq@si.org","emailVerified":true,"disabled":false},{"localId":"qbBGO9tAueyZ1nppSlOc7bNRwMwP","createdAt":"1678452278828","lastLoginAt":"1678452278828","passwordHash":"fakeHash:salt=fakeSaltGG5yY73yv1l10tQLxYHB:password=_6s-PP0Pahc17o4SqY8mhW46hb_cEikPabiHY4vzlpP1RKOCKAPl37h7LnemFrGPPSDIzHsC2OpnF8nI4NJBTg","salt":"fakeSaltGG5yY73yv1l10tQLxYHB","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"x8-18mcxojubtgnnlsp09clsvfv6g-nwgo-rj1t9uqtlhjtcaq84moo9x-bux4wwqd9wx4fxnsafcxk_nuwtsg@socialincome.org","federatedId":"x8-18mcxojubtgnnlsp09clsvfv6g-nwgo-rj1t9uqtlhjtcaq84moo9x-bux4wwqd9wx4fxnsafcxk_nuwtsg@socialincome.org","rawId":"x8-18mcxojubtgnnlsp09clsvfv6g-nwgo-rj1t9uqtlhjtcaq84moo9x-bux4wwqd9wx4fxnsafcxk_nuwtsg@socialincome.org"}],"validSince":"1699603759","email":"x8-18mcxojubtgnnlsp09clsvfv6g-nwgo-rj1t9uqtlhjtcaq84moo9x-bux4wwqd9wx4fxnsafcxk_nuwtsg@socialincome.org","emailVerified":true,"disabled":false},{"localId":"qcGeTeegI0UXmvVqVtXPxvYhXtXy","createdAt":"1678452278828","lastLoginAt":"1678452278828","passwordHash":"fakeHash:salt=fakeSaltsR9OUKrvi59RbyqrvkvA:password=6Al9Sk7oDYLAoVa0OrSXj_FTJ4FOAmWwVZj4iF4-q6g7lJXKzuQkoXC2l8pcBANmywf6C9eEQtAdDKVB3NR48Q","salt":"fakeSaltsR9OUKrvi59RbyqrvkvA","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"-hz8ftfzwgrflpmjrguquhgtzrrfe32hqzeq4_i1_0tpvxwyl52mmu90bzor6mrzqkn692vg1pkl9g9kgbt66w@socialincome.org","federatedId":"-hz8ftfzwgrflpmjrguquhgtzrrfe32hqzeq4_i1_0tpvxwyl52mmu90bzor6mrzqkn692vg1pkl9g9kgbt66w@socialincome.org","rawId":"-hz8ftfzwgrflpmjrguquhgtzrrfe32hqzeq4_i1_0tpvxwyl52mmu90bzor6mrzqkn692vg1pkl9g9kgbt66w@socialincome.org"}],"validSince":"1699603759","email":"-hz8ftfzwgrflpmjrguquhgtzrrfe32hqzeq4_i1_0tpvxwyl52mmu90bzor6mrzqkn692vg1pkl9g9kgbt66w@socialincome.org","emailVerified":true,"disabled":false},{"localId":"qcME05ukjNGnFrOWhJaqKdDLfZLD","createdAt":"1678452278833","lastLoginAt":"1678452278833","passwordHash":"fakeHash:salt=fakeSaltj9n0VA3PgZbVSOu1YJXN:password=SPtr5hZoxuYAarP6lM47Na0vCMjVO1yAtUOHA_GPgDM53TRQWweLQ9TFf4h8vuiqU6qqBTKsKs5cfCGhTGJH2w","salt":"fakeSaltj9n0VA3PgZbVSOu1YJXN","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"punrawbexnouifohcb3l5h2m1wyzkgocfojrmv-v3tpxik5xpz_ihwdm-_t7-kn28fmevjnb1jeyppcycy2xbg@socialincome.org","federatedId":"punrawbexnouifohcb3l5h2m1wyzkgocfojrmv-v3tpxik5xpz_ihwdm-_t7-kn28fmevjnb1jeyppcycy2xbg@socialincome.org","rawId":"punrawbexnouifohcb3l5h2m1wyzkgocfojrmv-v3tpxik5xpz_ihwdm-_t7-kn28fmevjnb1jeyppcycy2xbg@socialincome.org"}],"validSince":"1699603759","email":"punrawbexnouifohcb3l5h2m1wyzkgocfojrmv-v3tpxik5xpz_ihwdm-_t7-kn28fmevjnb1jeyppcycy2xbg@socialincome.org","emailVerified":true,"disabled":false},{"localId":"rJIFbU5m6KQkk2kmXFYmbiEf49BC","createdAt":"1678452278813","lastLoginAt":"1678452278813","passwordHash":"fakeHash:salt=fakeSaltYpKDO69GjrO89bGmecrU:password=xTYDBr_ZhNTsb7AoY_0jUXNO1Inq_X1nyl0coyg3s0BwvsSe8y7XfXaykkr-b0lNZLrcbLP1zyJbuKXZ3-By5g","salt":"fakeSaltYpKDO69GjrO89bGmecrU","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"iiypwag2tq4bu8tz1w8gjprhcehro5booi2cd5vmmflrgdpyfdc98zwcr3yvi0yqgxvomz2q-4yhrrto1qgtfq@socialincome.org","federatedId":"iiypwag2tq4bu8tz1w8gjprhcehro5booi2cd5vmmflrgdpyfdc98zwcr3yvi0yqgxvomz2q-4yhrrto1qgtfq@socialincome.org","rawId":"iiypwag2tq4bu8tz1w8gjprhcehro5booi2cd5vmmflrgdpyfdc98zwcr3yvi0yqgxvomz2q-4yhrrto1qgtfq@socialincome.org"}],"validSince":"1699603759","email":"iiypwag2tq4bu8tz1w8gjprhcehro5booi2cd5vmmflrgdpyfdc98zwcr3yvi0yqgxvomz2q-4yhrrto1qgtfq@socialincome.org","emailVerified":true,"disabled":false},{"localId":"rlbTv1zzEHg1oTQc0WrRoGLwdNuM","createdAt":"1681401147940","lastLoginAt":"1681401147940","passwordHash":"fakeHash:salt=fakeSaltf5LBgIAa18ykCK1cVoDW:password=SQye5nufAohpQ8CoofQ89A","salt":"fakeSaltf5LBgIAa18ykCK1cVoDW","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"ytcporhxl93axjmg4igmng@si.org","federatedId":"ytcporhxl93axjmg4igmng@si.org","rawId":"ytcporhxl93axjmg4igmng@si.org"}],"validSince":"1699603759","email":"ytcporhxl93axjmg4igmng@si.org","emailVerified":true,"disabled":false},{"localId":"tbbBFsCwLt0QULMz8FIvESeB6kwA","createdAt":"1681401147923","lastLoginAt":"1681401147923","passwordHash":"fakeHash:salt=fakeSaltQ87BjTmMYdjm71raBvxq:password=aoSPyMz30oVKhjzfjifSdw","salt":"fakeSaltQ87BjTmMYdjm71raBvxq","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"c2rie40jeeibocghb25dhq@si.org","federatedId":"c2rie40jeeibocghb25dhq@si.org","rawId":"c2rie40jeeibocghb25dhq@si.org"}],"validSince":"1699603759","email":"c2rie40jeeibocghb25dhq@si.org","emailVerified":true,"disabled":false},{"localId":"tgX5Cuc85jx7IDN4OLDXrAMI9mLV","createdAt":"1678452278823","lastLoginAt":"1678452278823","passwordHash":"fakeHash:salt=fakeSaltsXuxZMCnxHzOl8gs8LeJ:password=y2KEvfP3h0YdCtoAcZXxIpLhXZ0_uuRpqFKqCEGBFcwI_T8EnOmaIVpdDfzoMMpSaAgGFvddK8th3qzP9_ATgA","salt":"fakeSaltsXuxZMCnxHzOl8gs8LeJ","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"grv7glfa7f4aqsqbw4wugxtlnfin2fnwe47g6fkry9vrz7jfsb5lax34whk9rehz-mszgsfmoo_ihajaqeo8mg@socialincome.org","federatedId":"grv7glfa7f4aqsqbw4wugxtlnfin2fnwe47g6fkry9vrz7jfsb5lax34whk9rehz-mszgsfmoo_ihajaqeo8mg@socialincome.org","rawId":"grv7glfa7f4aqsqbw4wugxtlnfin2fnwe47g6fkry9vrz7jfsb5lax34whk9rehz-mszgsfmoo_ihajaqeo8mg@socialincome.org"}],"validSince":"1699603759","email":"grv7glfa7f4aqsqbw4wugxtlnfin2fnwe47g6fkry9vrz7jfsb5lax34whk9rehz-mszgsfmoo_ihajaqeo8mg@socialincome.org","emailVerified":true,"disabled":false},{"localId":"uLhOdHos7rW5qbmTSHdlyiWGi617","createdAt":"1678452278819","lastLoginAt":"1678452278819","passwordHash":"fakeHash:salt=fakeSalt7CBhGWRyzfTps28wtyCY:password=Y7HRALPsVO1uibTOpyIwTbCfEqrf-9gxwtuj7B5ol-se1nysW6aVcntTZWgHb-fONfNdmacyKBD7NKx_eL0kOQ","salt":"fakeSalt7CBhGWRyzfTps28wtyCY","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"ukbkcqum8hznslwu90n3ssernmkqe9oo_zcrlvp4u_ohi5x-mcsljsrcacovzjfume10datqz8b-mw7h9wxzqa@socialincome.org","federatedId":"ukbkcqum8hznslwu90n3ssernmkqe9oo_zcrlvp4u_ohi5x-mcsljsrcacovzjfume10datqz8b-mw7h9wxzqa@socialincome.org","rawId":"ukbkcqum8hznslwu90n3ssernmkqe9oo_zcrlvp4u_ohi5x-mcsljsrcacovzjfume10datqz8b-mw7h9wxzqa@socialincome.org"}],"validSince":"1699603759","email":"ukbkcqum8hznslwu90n3ssernmkqe9oo_zcrlvp4u_ohi5x-mcsljsrcacovzjfume10datqz8b-mw7h9wxzqa@socialincome.org","emailVerified":true,"disabled":false},{"localId":"vK8bu0dxLw7cdMAZ44iqP76IkYAy","createdAt":"1681401147945","lastLoginAt":"1681401147945","passwordHash":"fakeHash:salt=fakeSaltt51Gxi6tQKr9PyYHOyDS:password=zLmstj8482NAI1xLTYhsWA","salt":"fakeSaltt51Gxi6tQKr9PyYHOyDS","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"yigmcsy8_63yltcoi5awja@si.org","federatedId":"yigmcsy8_63yltcoi5awja@si.org","rawId":"yigmcsy8_63yltcoi5awja@si.org"}],"validSince":"1699603759","email":"yigmcsy8_63yltcoi5awja@si.org","emailVerified":true,"disabled":false},{"localId":"vtyfpMy3RnAq1hhe1v0uWwEFPzON","createdAt":"1681401147924","lastLoginAt":"1681401147924","passwordHash":"fakeHash:salt=fakeSalt6VLJBwEq81yBXtMidDZ2:password=D2U6Ejgt5-WPxDk0fI_KHw","salt":"fakeSalt6VLJBwEq81yBXtMidDZ2","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"2ibb0tteiz8h5kkrbj78ia@si.org","federatedId":"2ibb0tteiz8h5kkrbj78ia@si.org","rawId":"2ibb0tteiz8h5kkrbj78ia@si.org"}],"validSince":"1699603759","email":"2ibb0tteiz8h5kkrbj78ia@si.org","emailVerified":true,"disabled":false},{"localId":"xDakGevt20dYrngxX3qVB3RPiNuR","createdAt":"1681401147942","lastLoginAt":"1681401147942","passwordHash":"fakeHash:salt=fakeSaltCKKdMJHHWJ4QjKrOnz66:password=2LyhU5BLwkwFthtxFXnS6A","salt":"fakeSaltCKKdMJHHWJ4QjKrOnz66","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"98mh8kb68yjbqwzvcbdcrg@si.org","federatedId":"98mh8kb68yjbqwzvcbdcrg@si.org","rawId":"98mh8kb68yjbqwzvcbdcrg@si.org"}],"validSince":"1699603759","email":"98mh8kb68yjbqwzvcbdcrg@si.org","emailVerified":true,"disabled":false},{"localId":"yGQAzIuCuOEDX0uZa69gDcUNgiXf","createdAt":"1678452278826","lastLoginAt":"1678452278826","passwordHash":"fakeHash:salt=fakeSaltGYwHOPfDVVYPi1DVOYIG:password=jgirsVKMi1U9jE4uZ9Rek0tevm79L9kkWwJzjKZyy_8reViWOvuiudQLhzjN-mewJ4v6GylPh_RtocnjQIrPiA","salt":"fakeSaltGYwHOPfDVVYPi1DVOYIG","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"pv9qlvz9oyseuldw0obrkb1dtiars2ozgurafexxsz4gstflnpp0buwydot9ws2h5nxwas_5ee3qr4kt9tin0w@socialincome.org","federatedId":"pv9qlvz9oyseuldw0obrkb1dtiars2ozgurafexxsz4gstflnpp0buwydot9ws2h5nxwas_5ee3qr4kt9tin0w@socialincome.org","rawId":"pv9qlvz9oyseuldw0obrkb1dtiars2ozgurafexxsz4gstflnpp0buwydot9ws2h5nxwas_5ee3qr4kt9tin0w@socialincome.org"}],"validSince":"1699603759","email":"pv9qlvz9oyseuldw0obrkb1dtiars2ozgurafexxsz4gstflnpp0buwydot9ws2h5nxwas_5ee3qr4kt9tin0w@socialincome.org","emailVerified":true,"disabled":false},{"localId":"zPbBC8nHAOgmnHgXQEMmEwI9kNNl","createdAt":"1681401147938","lastLoginAt":"1681401147938","passwordHash":"fakeHash:salt=fakeSaltA63Maq2gIxUiCb2Md99F:password=xtGlzJuYgr-S1HBe8BfvMw","salt":"fakeSaltA63Maq2gIxUiCb2Md99F","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"cp3non65hqhabh-3ywqxeg@si.org","federatedId":"cp3non65hqhabh-3ywqxeg@si.org","rawId":"cp3non65hqhabh-3ywqxeg@si.org"}],"validSince":"1699603759","email":"cp3non65hqhabh-3ywqxeg@si.org","emailVerified":true,"disabled":false},{"localId":"zfvpTT7vkNti53ybLFz9D263uZ9X","createdAt":"1681401147942","lastLoginAt":"1681401147942","passwordHash":"fakeHash:salt=fakeSaltLexsXHvpQU3XYvOXdIvN:password=4IQIXcriNogRd_8y0rSJHA","salt":"fakeSaltLexsXHvpQU3XYvOXdIvN","passwordUpdatedAt":1699603759638,"providerUserInfo":[{"providerId":"password","email":"8nmbm8ygsz-x-avvy55pyw@si.org","federatedId":"8nmbm8ygsz-x-avvy55pyw@si.org","rawId":"8nmbm8ygsz-x-avvy55pyw@si.org"}],"validSince":"1699603759","email":"8nmbm8ygsz-x-avvy55pyw@si.org","emailVerified":true,"disabled":false}]} \ No newline at end of file diff --git a/seed/firebase-export-metadata.json b/seed/firebase-export-metadata.json index f9cdc3234..1c5488f47 100644 --- a/seed/firebase-export-metadata.json +++ b/seed/firebase-export-metadata.json @@ -1,16 +1,16 @@ { - "version": "12.4.4", + "version": "12.7.0", "firestore": { - "version": "1.18.1", + "version": "1.18.2", "path": "firestore_export", "metadata_file": "firestore_export/firestore_export.overall_export_metadata" }, "auth": { - "version": "12.4.4", + "version": "12.7.0", "path": "auth_export" }, "storage": { - "version": "12.4.4", + "version": "12.7.0", "path": "storage_export" } } \ No newline at end of file diff --git a/seed/firestore_export/all_namespaces/all_kinds/all_namespaces_all_kinds.export_metadata b/seed/firestore_export/all_namespaces/all_kinds/all_namespaces_all_kinds.export_metadata index db91ba6ecad0bbd8858a43eb4509117cad805713..14a463fb904e801a65d1eb406f11db899a6baa30 100644 GIT binary patch delta 36 pcmXppnIJ0P^61B-S38@SC05@331$fKa4`sREdl$Pik002IE4~75$ delta 36 ncmXppnIJ0vyM6zH2W^ea5^rZi7(zT;3_=|Fr6mQWCAtOxArKBR diff --git a/seed/firestore_export/all_namespaces/all_kinds/output-0 b/seed/firestore_export/all_namespaces/all_kinds/output-0 index 4942aeeba9c5879515383ec09ac9f12ce9c202d8..2303e9ae11b79d27b578fd39c21b7511bd256f9a 100644 GIT binary patch delta 7704 zcmcgxd010d9_7B|Wnqzh@hNMqfJ%5Td(x>D)Vcrx_ktFT;jxK9lF$l{Em#*?T)^A* zTCF2hK-)n|O*Pn0XVBJ;j;&(t)UJwtGp$OiqIDm~c`sl{FlwmZ7yjZ)9=zYZ_nh-P zzjIIQ7G6E&i5DG=kj10@$zUE_!#Ug<%MqSEK-6ynpr{B^NkcVhUIBQSkv14(f+ou< zCQ7B_mHEkO)8({cX35k{g|}CLkFG>-G8E1$GZmKTjWI)X1vwJU{Nl2-)Z{#gMu)0lWmG7vRXmL%Ct`!(I`5CT zlcaYe5mf_7m|+fv8BYhoB(KBfWS>AUeDE;&Uut0K6$x5+0u1-3s050fPO8*0m6{TZ zluDSY8xMcnnyAVV1QL90Zmxkg8lyZ$WDuGnZjpz=4M_2e0Jbl@M zd9;D~04F$7QVYj4#34Kj3xpFI<%0STJ8!+ktP|!p?1MGAWAN%7!e3hY7eJ9}u|zGA zisY*M1t^Oh3wV*3?X&Yc$db zWMQE_)m0sRZ6jMn@*(lycK0!1EHuT3!~tc$RK#R zLCUViyk>|Jm}i8kIC%HCT08}gQD{-C7Q~n};nQ)vb;Q-KH*9MSu-|N{SR_`+V47|m zyW7fa$Hm%S+i$m>E!J+cJ1?DE_O{(-o43Ra7U0Eo-@myRW{@h_854>&Ye9m!Eg=cu zh11WUHX$kuTY#dT2Sd@ZF(4Nm{RTvvkB%$=_>rCYOV;-ir5hZqSp&f7DS$4lr7bT|A9FZLZ zaL?GCBm36Ts~)UUQfiq*q##MR;-vL#on^r57?V?j^G6C(Bd!7r9-l1QNgo9KQF+q& zQvetFVnAj7U*1+G9EtbOmLK|I`8Kfn7SS}swb-8f$|}ChF?%2dll98+o zJrz}M8YeC*EG!ad%o4xMbbFzRHkxu+qr`Ma%+CXU^qCm7WMV~ZKjmNEWOX&rKR%EZ zX{PC$SWf0RwN&QW%Wg;DE58Wi7ceSA!us`5X!95l0u!f(n1A1va2O7J}@wV5EN_m z`DNOCn%Q>7d*;&cQiIIua&KSHyKQxYaPFZ<%NL#?dL*tH`_~gr^_<}xqvzs21#!oc zZ|*wRKENe63dw6-`<|E!3o^CS?6_bkG-;+6>78@I`Lj;A(EN`TM{1pL;W|r&Yd0U@ zf`t7sj~^fx(62JE79V@ezi8CJrB$w`@8;It%cDM;jqR$_dfHix=&FesZ0v% zIAUmMnvH^*0D-UEyz2WE%nVDhGi(S-jsjsYa9cPsbTPkd&5g61eHOeQ>igZ6jE%qp zEAqf!xHyNyMeS3-Ot|=Nm<7xP#{%%;f|QX?>8@0hlt`iMn}pnf{mOgmjtmg{)T8Kb z=_ml3_`r+gV0RbO3Q^TE;wo5RF2 z6-*5AU~^dBHKi>AA82#16fXoB0RQ)zZ~nE?X1N^(T?X)!LeZ<{tL_H_qv5cMyOzDB zpx#IL@yVAeW@Dh}PizhYE4F$$bqi3Vi*d<~^in1~h?(SdWd;MS*OfE+%!CtmjzkKF zHTto>EfU&c5vaB%*x6%L=T+;fy!)I+?&e;&|B zD;$=OuM=?`hK|J>Ws!&wB`c(XgqiZk&##w>e$1GV|^GF!1^ICM1BY6 zS^bcu{B7{6kMMTL>TOSsg+&u**;>+7mE2K7ijA!2lv`W)B=%Ee9{L|KRZq!Rhx`+C`N9mh1+Q6NXzdb+>l(mkV~X zWx9b300n4zN>!%B4P&$`yfz5r1l0xfdns~*5_IWAU=VYmKu`moD$siZ zFch#c^GLK!0OEP(%O703Q3;PUO=eF{=eoVO-0c7=fG-{vd&(&xDaN&kNL3#p^^VC| z4)LPv$ysECU2+yc`1MQ9?4q;UpKolpAHsR+_G5l`JWyv0$gynv3bcg?Uug;Nu=g@* zq!fVQVO{}`m~49-P8LcPfK?DK8O%F$tG?dqZ>$+TWwSNhxaRDQs4g8-GpVU<&=$hc zb6&6{UI1wUc;X@7U!GUXbIV{{7)$!-s$ebb!dBCt@*wV zx!8pqE+cp+MAz

w(TxgGAImgSoCaCdMFNlR_NgU>K~bk|Q!0#G=+T%*%3If^7u+ zltJZ70|3`jEW<1UynXfD)eppQJ$FOQ)eI>gSm5}Oh|A@>nbsYA zU=YJtq_jzWJ(QX_Z+gnieru@if)R`=&(?-d>?Qp#*nJ$#NM7t@FoXIzA2gYv#FmkYLEueoj?g5gU? z!7F{&6|wd?VXvBcJIe*rbLo#NBaMuAN@X_-hZZE*@RAQpRnSLx&Vv;bM$7m2LDKlCw90<6W6~l?m8qp))+wMf*#+-7ns9U{(^8UocA=vdgJV|XWk=T?7s+MDwg7s2Ee3jFr@>n*09 zWa8eZ?xhnbO{99Y7H0;)jeez7Q_{8TI|jjvPPJ`P{ya8!Wx8R% z>j7Bh=EGN46<1c#ajk~GKDsgCYg|(Xp?J84NSz!FcD@W@bTZ6{`V{cRE(P(&^B%-N z7r6-BQvx#DbKMI!MG+G<3UQG5%;R0jb-+*lhFZFFjbtw-Z@I(UZ&ci(md?{nc0!XQLk zr-v^D{=%u;!T+)L!Yu}(#zO}39>zzJnq~L3XpAENal_vt;E0$Q4If3xs*C#1HM&6Q zx|KAa%Z1$%LC0%#ghHAL%?S{BJR=_jG2<0Dq2Xu8Q_tklxqC+Jx(RA(Zc@?FQ+{G~ zJzVtReFFmSI{s0_E)DpJ6|E31a3S8=i!|#-95oMW=+0>+{xJf%*#9QzsNV z=FJ+MWi{V$^M~vz9QXvva4ZS5I8a2~@xcUa#pGnri-sPsx(k^OYi@^gWP%xV2p)aA zcARtJsD4Q;e#1Z^m-J5ML_Bao?_tQHo!&8Y>}nzXu~98H*dReJ7EC~kg6E4*G(O%Y z@zGVt_Y=MDLpjG6Da<#lIGI9>D>u$Q0u!MF!9FMbNwSCdP(e%}Nw8h?a^hplpg>Gi zk|AI5b`*(J%I0H+CTd+t>9*xOMRPLAcNLO0Y`Glc?4d0J{FeVGo=+jSc)tCu`Dc|Y zOOCG=LU?N$aTCv^lZOV$!AjxNg%x8WN1sTd#Mf%c0lq#! kw5k7wpuO8kDXt?&f!be^i{AC5Un+u?L@2~PT}0~n7g-*qdH?_b diff --git a/seed/firestore_export/firestore_export.overall_export_metadata b/seed/firestore_export/firestore_export.overall_export_metadata index 381e584794c1e9376838e33f75bde89b3eb0ce25..8e9e13a9414ec96c346ef5455dfbbbc4cc20c14a 100644 GIT binary patch delta 25 hcmYdHXCqXl(2@`PM`pf422Z3ZL(B0RUr72tNP- delta 25 gcmYdHXCqXngu&E5k${f3_Ybh0EJG0cRr!4gdfE diff --git a/shared/locales/en/website-me.json b/shared/locales/en/website-me.json index 5984b3835..3ddf24201 100644 --- a/shared/locales/en/website-me.json +++ b/shared/locales/en/website-me.json @@ -1,12 +1,44 @@ { - "tabs": { - "contact-details": "Contact Info", - "contributions": "Contributions" + "sections": { + "account": { + "title": "My Account", + "personal-info": "Personal Info", + "security": "Security" + }, + "contributions": { + "title": "My Contributions", + "payments": "Payments", + "subscriptions": "Subscriptions" + } }, "contributions": { "amount": "Amount", + "date": "Date", + "source": "Source", + "total": "Total", "amount-currency": "{{ amount, currency }}", - "date": "Date" + "sources": { + "benevity": "Benevity", + "cash": "Cash", + "stripe": "Stripe", + "wire-transfer": "Wire Transfer" + } + }, + "subscriptions": { + "amount": "Amount", + "date": "Date", + "source": "Source", + "total": "Total", + "amount-currency": "{{ amount, currency }}", + "interval": "Interval", + "interval-1": "Monthly", + "interval-3": "Quarterly", + "interval-12": "Annually", + "status": { + "active": "Active", + "canceled": "Canceled", + "paused": "Paused" + } }, "login": { "title": "Sign in to your account", diff --git a/shared/src/firebase/client/init.ts b/shared/src/firebase/client/init.ts index 9f97fd025..91f45f180 100644 --- a/shared/src/firebase/client/init.ts +++ b/shared/src/firebase/client/init.ts @@ -17,18 +17,16 @@ interface InitializeFirebaseClientProps { functionsEmulatorPort?: number; } -export const initializeFirebaseClient = ( - { - firebaseConfig, - authEmulatorUrl, - firestoreEmulatorHost, - firestoreEmulatorPort, - storageEmulatorHost, - storageEmulatorPort, - functionsEmulatorHost, - functionsEmulatorPort, - }: InitializeFirebaseClientProps, -) => { +export const initializeFirebaseClient = ({ + firebaseConfig, + authEmulatorUrl, + firestoreEmulatorHost, + firestoreEmulatorPort, + storageEmulatorHost, + storageEmulatorPort, + functionsEmulatorHost, + functionsEmulatorPort, +}: InitializeFirebaseClientProps) => { const app = getOrInitializeFirebaseClientApp(firebaseConfig); const auth = getAuth(app); const functions = getFunctions(app, DEFAULT_REGION); diff --git a/shared/src/utils/date.ts b/shared/src/utils/date.ts index a6b219f59..11b05337d 100644 --- a/shared/src/utils/date.ts +++ b/shared/src/utils/date.ts @@ -21,10 +21,17 @@ export function getMonthIDs(date: Date, last_n: number) { return months; } -export function toDateTime(timestamp: Timestamp | Date, timezone: string = 'utc') { - return timestamp instanceof Date - ? DateTime.fromJSDate(timestamp, { zone: timezone }) - : DateTime.fromMillis(timestamp.toMillis(), { zone: timezone }); +export function toDateTime(timestamp: Timestamp | Date | number, timezone: string = 'utc') { + if (timestamp instanceof Date) { + timestamp = timestamp as Date; + return DateTime.fromJSDate(timestamp, { zone: timezone }); + } else if (Number.isInteger(timestamp)) { + timestamp = timestamp as number; + return DateTime.fromMillis(timestamp as number, { zone: timezone }); + } else { + timestamp = timestamp as Timestamp; + return DateTime.fromMillis(timestamp.toMillis(), { zone: timezone }); + } } export function toDate(dateTime: DateTime) { diff --git a/shared/src/utils/messaging/email.ts b/shared/src/utils/messaging/email.ts index 3024783d8..631127674 100644 --- a/shared/src/utils/messaging/email.ts +++ b/shared/src/utils/messaging/email.ts @@ -16,9 +16,15 @@ interface SendEmailProps { password: string; } -export const sendEmail = async ( - { from = 'no-reply@socialincome.org', to, subject, content, attachments = [], user, password }: SendEmailProps, -) => { +export const sendEmail = async ({ + from = 'no-reply@socialincome.org', + to, + subject, + content, + attachments = [], + user, + password, +}: SendEmailProps) => { let transporter: Transporter; if (!user) { const testAccount = await nodemailer.createTestAccount(); diff --git a/shared/src/utils/messaging/whatsapp.ts b/shared/src/utils/messaging/whatsapp.ts index 6dd0c75c0..bde18e4ed 100644 --- a/shared/src/utils/messaging/whatsapp.ts +++ b/shared/src/utils/messaging/whatsapp.ts @@ -12,9 +12,12 @@ export interface SendWhatsappProps { templateProps: RenderTemplateProps; } -export const sendWhatsapp = async ( - { to, from, twilioConfig, templateProps }: SendWhatsappProps, -): Promise => { +export const sendWhatsapp = async ({ + to, + from, + twilioConfig, + templateProps, +}: SendWhatsappProps): Promise => { const client = new Twilio(twilioConfig.sid, twilioConfig.token); const body = await renderTemplate(templateProps); return client.messages.create({ body: body, from: `whatsapp:${from}`, to: `whatsapp:${to}` }); diff --git a/shared/src/utils/templates.ts b/shared/src/utils/templates.ts index f144fcb1e..0813fc103 100644 --- a/shared/src/utils/templates.ts +++ b/shared/src/utils/templates.ts @@ -28,9 +28,12 @@ const partials = [ ]; partials.forEach((partial) => Handlebars.registerPartial(partial.name, readHbs(partial.path))); -export const renderTemplate = async ( - { language, translationNamespace = [], hbsTemplatePath, context }: RenderTemplateProps, -) => { +export const renderTemplate = async ({ + language, + translationNamespace = [], + hbsTemplatePath, + context, +}: RenderTemplateProps) => { const i18n = i18next.createInstance(); await i18n .use( diff --git a/ui/CONTRIBUTING.md b/ui/CONTRIBUTING.md index f7a8867a8..b25c7d2f1 100644 --- a/ui/CONTRIBUTING.md +++ b/ui/CONTRIBUTING.md @@ -54,9 +54,11 @@ UI elements: **Example**: ```tsx - export const SoExampleComponent = ( - { children, exampleProperty, ...props }: SoExampleComponentProps, - ) => { + export const SoExampleComponent = ({ + children, + exampleProperty, + ...props + }: SoExampleComponentProps) => { return (

{children} diff --git a/ui/src/components/button.tsx b/ui/src/components/button.tsx index 61a7946e8..e6e9d7e00 100644 --- a/ui/src/components/button.tsx +++ b/ui/src/components/button.tsx @@ -18,7 +18,7 @@ const buttonVariants = cva( size: { default: 'h-10 px-4 py-2', sm: 'h-9 rounded-md px-3', - lg: 'h-16 rounded-md px-8', + lg: 'h-16 rounded-md px-8 font-semibold', icon: 'h-10 w-10', }, }, diff --git a/ui/src/components/carousel.tsx b/ui/src/components/carousel.tsx index c1b9658b1..0aa33b9fd 100644 --- a/ui/src/components/carousel.tsx +++ b/ui/src/components/carousel.tsx @@ -14,9 +14,14 @@ type CarouselProps = { showControls?: boolean; } & React.HTMLAttributes; -export const Carousel = ( - { children, className, options = {}, showDots = false, showControls = false, ...props }: CarouselProps, -) => { +export const Carousel = ({ + children, + className, + options = {}, + showDots = false, + showControls = false, + ...props +}: CarouselProps) => { const [emblaRef, emblaApi] = useEmblaCarousel( options, options?.autoPlay?.enabled ? [Autoplay(options.autoPlay)] : [], diff --git a/ui/src/components/form.tsx b/ui/src/components/form.tsx index 3da7d006d..aab225efa 100644 --- a/ui/src/components/form.tsx +++ b/ui/src/components/form.tsx @@ -22,9 +22,9 @@ const FormFieldContext = React.createContext({} as FormFi const FormField = < TFieldValues extends FieldValues = FieldValues, TName extends FieldPath = FieldPath, ->( - { ...props }: ControllerProps, -) => { +>({ + ...props +}: ControllerProps) => { return ( diff --git a/ui/src/components/typography/typography.tsx b/ui/src/components/typography/typography.tsx index 3a53698bf..5f339233b 100644 --- a/ui/src/components/typography/typography.tsx +++ b/ui/src/components/typography/typography.tsx @@ -66,18 +66,16 @@ export type TypographyProps = { lineHeight?: LineHeight; } & ComponentPropsWithoutRef; -export function Typography( - { - as, - size = 'md', - weight = 'normal', - color = 'foreground', - lineHeight = 'normal', - className, - children, - ...props - }: TypographyProps, -) { +export function Typography({ + as, + size = 'md', + weight = 'normal', + color = 'foreground', + lineHeight = 'normal', + className, + children, + ...props +}: TypographyProps) { const Component = as || 'p'; return ( - diff --git a/website/src/app/[lang]/[region]/(website)/donate/individual/page.tsx b/website/src/app/[lang]/[region]/(website)/donate/individual/page.tsx index b0ace14b1..d3d8fd70b 100644 --- a/website/src/app/[lang]/[region]/(website)/donate/individual/page.tsx +++ b/website/src/app/[lang]/[region]/(website)/donate/individual/page.tsx @@ -1,7 +1,7 @@ 'use client'; import { DefaultPageProps } from '@/app/[lang]/[region]'; -import { CreateSubscriptionData } from '@/app/api/stripe/checkout/new/route'; +import { CreateSubscriptionData } from '@/app/api/stripe/checkout/new-payment/route'; import { CheckCircleIcon } from '@heroicons/react/24/outline'; import { zodResolver } from '@hookform/resolvers/zod'; import { @@ -19,6 +19,7 @@ import { import classNames from 'classnames'; import { useRouter } from 'next/navigation'; import { UseFormReturn, useForm } from 'react-hook-form'; +import { useUser } from 'reactfire'; import Stripe from 'stripe'; import * as z from 'zod'; @@ -67,6 +68,7 @@ function RadioGroupFormItem({ active, title, value, form, description }: RadioGr export default function Page({ params, searchParams }: DefaultPageProps) { const router = useRouter(); + const { data: authUser } = useUser(); const formSchema = z.object({ amount: z.coerce.number(), @@ -80,12 +82,15 @@ export default function Page({ params, searchParams }: DefaultPageProps) { }); const onSubmit = async (values: FormSchema) => { + const authToken = await authUser?.getIdToken(true); const data: CreateSubscriptionData = { amount: values.amount * 100, // The amount is in cents, so we need to multiply by 100 to get the correct amount. intervalCount: Number(values.intervalCount), successUrl: `${window.location.origin}/${params.lang}/${params.region}/donate/success?stripeCheckoutSessionId={CHECKOUT_SESSION_ID}`, + recurring: true, + firebaseAuthToken: authToken, }; - const response = await fetch('/api/stripe/checkout/new', { + const response = await fetch('/api/stripe/checkout/new-payment', { method: 'POST', body: JSON.stringify(data), }); diff --git a/website/src/app/[lang]/[region]/(website)/login/login-form.tsx b/website/src/app/[lang]/[region]/(website)/login/login-form.tsx index cd151c22f..8858cf8c8 100644 --- a/website/src/app/[lang]/[region]/(website)/login/login-form.tsx +++ b/website/src/app/[lang]/[region]/(website)/login/login-form.tsx @@ -1,12 +1,13 @@ 'use client'; -import { DefaultPageProps } from '@/app/[lang]/[region]'; +import { DefaultParams } from '@/app/[lang]/[region]'; import { zodResolver } from '@hookform/resolvers/zod'; import { SiGoogle } from '@icons-pack/react-simple-icons'; import { Button, Form, FormControl, FormField, FormItem, FormMessage, Input, Typography } from '@socialincome/ui'; import { FirebaseError } from 'firebase/app'; import { browserSessionPersistence, signInWithEmailAndPassword } from 'firebase/auth'; import { useRouter } from 'next/navigation'; +import { useCallback } from 'react'; import { useForm } from 'react-hook-form'; import toast from 'react-hot-toast'; import { useAuth } from 'reactfire'; @@ -26,9 +27,9 @@ type LoginFormProps = { unknownUser: string; wrongPassword: string; }; -} & DefaultPageProps; +} & DefaultParams; -export default function LoginForm({ params, translations }: LoginFormProps) { +export default function LoginForm({ lang, region, translations }: LoginFormProps) { const router = useRouter(); const auth = useAuth(); @@ -43,17 +44,20 @@ export default function LoginForm({ params, translations }: LoginFormProps) { defaultValues: { email: '', password: '' }, }); - const onSubmit = async (values: FormSchema) => { - await auth.setPersistence(browserSessionPersistence); - await signInWithEmailAndPassword(auth, values.email, values.password) - .then(() => { - router.push(`/${params.lang}/${params.region}/me`); - }) - .catch((error: FirebaseError) => { - error.code === 'auth/wrong-password' && toast.error(translations.wrongPassword); - error.code === 'auth/user-not-found' && toast.error(translations.unknownUser); - }); - }; + const onSubmit = useCallback( + async (values: FormSchema) => { + await auth.setPersistence(browserSessionPersistence); + await signInWithEmailAndPassword(auth, values.email, values.password) + .then(() => { + router.push(`/${lang}/${region}/me`); + }) + .catch((error: FirebaseError) => { + error.code === 'auth/wrong-password' && toast.error(translations.wrongPassword); + error.code === 'auth/user-not-found' && toast.error(translations.unknownUser); + }); + }, + [auth, lang, region, router, translations.wrongPassword, translations.unknownUser], + ); return (

diff --git a/website/src/app/[lang]/[region]/(website)/login/page.tsx b/website/src/app/[lang]/[region]/(website)/login/page.tsx index 7acfe4e1c..7596e4404 100644 --- a/website/src/app/[lang]/[region]/(website)/login/page.tsx +++ b/website/src/app/[lang]/[region]/(website)/login/page.tsx @@ -2,11 +2,13 @@ import { DefaultPageProps } from '@/app/[lang]/[region]'; import LoginForm from '@/app/[lang]/[region]/(website)/login/login-form'; import { Translator } from '@socialincome/shared/src/utils/i18n'; -export default async function Page(props: DefaultPageProps) { - const translator = await Translator.getInstance({ language: props.params.lang, namespaces: 'website-me' }); +export default async function Page({ params }: DefaultPageProps) { + const translator = await Translator.getInstance({ language: params.lang, namespaces: ['website-me'] }); return ( ); } diff --git a/website/src/app/[lang]/[region]/(website)/me/contributions/billing-portal-button.tsx b/website/src/app/[lang]/[region]/(website)/me/contributions/billing-portal-button.tsx deleted file mode 100644 index 4c632d0e7..000000000 --- a/website/src/app/[lang]/[region]/(website)/me/contributions/billing-portal-button.tsx +++ /dev/null @@ -1,35 +0,0 @@ -'use client'; - -import { Button } from '@socialincome/ui'; -import { signOut } from 'firebase/auth'; -import { useRouter } from 'next/navigation'; -import { useEffect, useState } from 'react'; -import { useAuth, useUser } from 'reactfire'; -import Stripe from 'stripe'; - -// TODO: i18n -export function BillingPortalButton() { - const router = useRouter(); - const auth = useAuth(); - const { data: authUser } = useUser(); - const [billingPortalUrl, setBillingPortalUrl] = useState(null); - - useEffect(() => { - authUser?.getIdToken(true).then(async (accessToken) => { - const response = await fetch( - `/api/stripe/billing-portal?accessToken=${accessToken}&returnUrl=${window.location.href}`, - ); - const { url } = (await response.json()) as Stripe.Response; - setBillingPortalUrl(url); - }); - }, [authUser]); - - return ( -
- - -
- ); -} diff --git a/website/src/app/[lang]/[region]/(website)/me/contributions/contributions-table.tsx b/website/src/app/[lang]/[region]/(website)/me/contributions/contributions-table.tsx index 453b9b3c1..be95e359f 100644 --- a/website/src/app/[lang]/[region]/(website)/me/contributions/contributions-table.tsx +++ b/website/src/app/[lang]/[region]/(website)/me/contributions/contributions-table.tsx @@ -3,12 +3,14 @@ import { DefaultParams } from '@/app/[lang]/[region]'; import { UserContext } from '@/app/[lang]/[region]/(website)/me/user-context-provider'; import { useTranslator } from '@/hooks/useTranslator'; +import { orderBy } from '@firebase/firestore'; import { CONTRIBUTION_FIRESTORE_PATH, StatusKey } from '@socialincome/shared/src/types/contribution'; import { USER_FIRESTORE_PATH } from '@socialincome/shared/src/types/user'; import { toDateTime } from '@socialincome/shared/src/utils/date'; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Typography } from '@socialincome/ui'; import { useQuery } from '@tanstack/react-query'; import { collection, getDocs, query, where } from 'firebase/firestore'; +import _ from 'lodash'; import { useContext } from 'react'; import { useFirestore } from 'reactfire'; @@ -16,34 +18,36 @@ type ContributionsTableProps = { translations: { date: string; amount: string; + source: string; }; } & DefaultParams; export function ContributionsTable({ lang, translations }: ContributionsTableProps) { const firestore = useFirestore(); - const { user } = useContext(UserContext); const translator = useTranslator(lang, 'website-me'); + const { user } = useContext(UserContext); const { data: contributions } = useQuery({ - queryKey: [user, firestore], + queryKey: ['ContributionsTable', user, firestore], queryFn: async () => { if (user && firestore) { return await getDocs( query( collection(firestore, USER_FIRESTORE_PATH, user.id, CONTRIBUTION_FIRESTORE_PATH), where('status', '==', StatusKey.SUCCEEDED), + orderBy('created', 'desc'), ), ); } else return null; }, staleTime: 1000 * 60 * 60, // 1 hour }); - console.log(user?.id, firestore, contributions?.size); return ( {translations.date} + {translations.source} {translations.amount} @@ -54,6 +58,7 @@ export function ContributionsTable({ lang, translations }: ContributionsTablePro {toDateTime(contribution.get('created')).toFormat('DD', { locale: lang })} + {translator?.t(`contributions.sources.${contribution.get('source')}`)} {translator?.t('contributions.amount-currency', { @@ -68,6 +73,23 @@ export function ContributionsTable({ lang, translations }: ContributionsTablePro ); })} + + + {translator?.t('contributions.total')} + + + + + {translator?.t('contributions.amount-currency', { + context: { + amount: _.sum(contributions?.docs.map((contribution) => contribution.get('amount'))), + currency: contributions?.docs[0].get('currency'), + locale: lang, + }, + })} + + +
); diff --git a/website/src/app/[lang]/[region]/(website)/me/contributions/page.tsx b/website/src/app/[lang]/[region]/(website)/me/contributions/page.tsx index 3c4c0d506..5e5eca6bb 100644 --- a/website/src/app/[lang]/[region]/(website)/me/contributions/page.tsx +++ b/website/src/app/[lang]/[region]/(website)/me/contributions/page.tsx @@ -1,20 +1,20 @@ import { DefaultPageProps } from '@/app/[lang]/[region]'; import { ContributionsTable } from '@/app/[lang]/[region]/(website)/me/contributions/contributions-table'; import { Translator } from '@socialincome/shared/src/utils/i18n'; -import { BillingPortalButton } from './billing-portal-button'; export default async function Page({ params }: DefaultPageProps) { const translator = await Translator.getInstance({ language: params.lang, namespaces: ['website-me'] }); return ( -
-
- -
- +
+
); } diff --git a/website/src/app/[lang]/[region]/(website)/me/layout-client.tsx b/website/src/app/[lang]/[region]/(website)/me/layout-client.tsx new file mode 100644 index 000000000..e118069aa --- /dev/null +++ b/website/src/app/[lang]/[region]/(website)/me/layout-client.tsx @@ -0,0 +1,110 @@ +'use client'; + +import { DefaultParams } from '@/app/[lang]/[region]'; +import { ArrowPathIcon, CurrencyDollarIcon, ShieldCheckIcon, UserCircleIcon } from '@heroicons/react/24/outline'; +import { Button, Collapsible, CollapsibleContent, CollapsibleTrigger, Typography } from '@socialincome/ui'; +import Link from 'next/link'; +import { usePathname } from 'next/navigation'; +import * as React from 'react'; +import { PropsWithChildren, useState } from 'react'; + +type NavigationLinkProps = { + href: string; + Icon: React.ForwardRefExoticComponent>>; +}; + +function NavigationLink({ href, Icon, children }: PropsWithChildren) { + return ( + +
  • + + {children} +
  • + + ); +} + +function NavigationSectionTitle({ children }: PropsWithChildren) { + return ( + + {children} + + ); +} + +type LayoutClientProps = { + params: DefaultParams; + translations: { + accountTitle: string; + personalInfo: string; + security: string; + contributionsTitle: string; + payments: string; + subscriptions: string; + }; +}; + +export function LayoutClient({ params, translations, children }: PropsWithChildren) { + const pathname = usePathname(); + const [isOpen, setIsOpen] = useState(false); + + const navigationMenu = ( +
      + {translations.accountTitle} + + {translations.personalInfo} + + + {translations.security} + + {translations.contributionsTitle} + + {translations.payments} + + + {translations.subscriptions} + +
    + ); + + let title; + switch (pathname) { + case `/${params.lang}/${params.region}/me/personal-info`: + title = translations.personalInfo; + break; + case `/${params.lang}/${params.region}/me/security`: + title = translations.security; + break; + case `/${params.lang}/${params.region}/me/contributions`: + title = translations.payments; + break; + case `/${params.lang}/${params.region}/me/subscriptions`: + title = translations.subscriptions; + break; + } + + return ( + +
    {navigationMenu}
    +
    + +
    + +
    +
    + {isOpen && navigationMenu} + + {title} + + {children} +
    +
    + ); +} diff --git a/website/src/app/[lang]/[region]/(website)/me/layout-tab.tsx b/website/src/app/[lang]/[region]/(website)/me/layout-tab.tsx deleted file mode 100644 index e4a838e80..000000000 --- a/website/src/app/[lang]/[region]/(website)/me/layout-tab.tsx +++ /dev/null @@ -1,21 +0,0 @@ -'use client'; - -import { Typography } from '@socialincome/ui'; -import classNames from 'classnames'; -import Link from 'next/link'; -import { usePathname } from 'next/navigation'; - -export function LayoutTab(tab: { title: string; href: string }) { - const pathname = usePathname(); - - return ( - - {tab.title} - - ); -} diff --git a/website/src/app/[lang]/[region]/(website)/me/layout.tsx b/website/src/app/[lang]/[region]/(website)/me/layout.tsx index 5746fd81b..ed0b822bb 100644 --- a/website/src/app/[lang]/[region]/(website)/me/layout.tsx +++ b/website/src/app/[lang]/[region]/(website)/me/layout.tsx @@ -1,33 +1,30 @@ import { DefaultLayoutProps } from '@/app/[lang]/[region]'; +import { LayoutClient } from '@/app/[lang]/[region]/(website)/me/layout-client'; import { UserContextProvider } from '@/app/[lang]/[region]/(website)/me/user-context-provider'; import { Translator } from '@socialincome/shared/src/utils/i18n'; import { BaseContainer } from '@socialincome/ui'; import { PropsWithChildren } from 'react'; -import { LayoutTab } from './layout-tab'; export default async function Layout({ children, params }: PropsWithChildren) { const translator = await Translator.getInstance({ language: params.lang, namespaces: 'website-me' }); - const tabs = [ - { - title: translator.t('tabs.contributions'), - href: `/${params.lang}/${params.region}/me/contributions`, - }, - { - title: translator.t('tabs.contact-details'), - href: `/${params.lang}/${params.region}/me/contact-details`, - }, - ]; return ( - - -
    - {tabs.map((tab, index) => ( - - ))} -
    - {children} -
    -
    + + + + {children} + + + ); } diff --git a/website/src/app/[lang]/[region]/(website)/me/page.tsx b/website/src/app/[lang]/[region]/(website)/me/page.tsx index 244800440..4d8fe6e19 100644 --- a/website/src/app/[lang]/[region]/(website)/me/page.tsx +++ b/website/src/app/[lang]/[region]/(website)/me/page.tsx @@ -1,5 +1,17 @@ +'use client'; + import { redirect } from 'next/navigation'; +import { useLayoutEffect } from 'react'; +import { useUser } from 'reactfire'; + +export default function Page() { + const { status: authUserStatus, data: authUser } = useUser(); -export default async function Page() { - redirect('./me/contributions'); + useLayoutEffect(() => { + if (authUserStatus === 'success' && authUser === null) { + redirect('../login'); + } else { + redirect('./me/contributions'); + } + }, [authUser, authUserStatus]); } diff --git a/website/src/app/[lang]/[region]/(website)/me/contact-details/page.tsx b/website/src/app/[lang]/[region]/(website)/me/personal-info/page.tsx similarity index 80% rename from website/src/app/[lang]/[region]/(website)/me/contact-details/page.tsx rename to website/src/app/[lang]/[region]/(website)/me/personal-info/page.tsx index 5b497d9ee..f9cf80d5a 100644 --- a/website/src/app/[lang]/[region]/(website)/me/contact-details/page.tsx +++ b/website/src/app/[lang]/[region]/(website)/me/personal-info/page.tsx @@ -1,6 +1,8 @@ 'use client'; -import { UserContext } from '@/app/[lang]/[region]/(website)/me/user-context-provider'; +import { DefaultPageProps } from '@/app/[lang]/[region]'; +import { useUserContext } from '@/app/[lang]/[region]/(website)/me/user-context-provider'; +import { useTranslator } from '@/hooks/useTranslator'; import { zodResolver } from '@hookform/resolvers/zod'; import { USER_FIRESTORE_PATH } from '@socialincome/shared/src/types/user'; import { @@ -20,16 +22,17 @@ import { } from '@socialincome/ui'; import { doc, updateDoc } from 'firebase/firestore'; import _ from 'lodash'; -import { useContext, useEffect } from 'react'; +import { useEffect } from 'react'; import { useForm } from 'react-hook-form'; import toast from 'react-hot-toast'; import { useFirestore } from 'reactfire'; import * as z from 'zod'; // TODO: i18n -export default function Page() { +export default function Page({ params }: DefaultPageProps) { const firestore = useFirestore(); - const { user } = useContext(UserContext); + const { user, refetch } = useUserContext(); + const translator = useTranslator(params.lang, 'common'); const formSchema = z.object({ firstname: z.string(), @@ -40,6 +43,7 @@ export default function Page() { streetNumber: z.string(), city: z.string(), zip: z.coerce.number(), + language: z.enum(['en', 'de']), }); type FormSchema = z.infer; @@ -54,6 +58,7 @@ export default function Page() { streetNumber: '', city: '', zip: '' as any, + language: undefined as any, }, }); @@ -68,18 +73,19 @@ export default function Page() { streetNumber: user?.get('address.number') || '', city: user?.get('address.city') || '', zip: user?.get('address.zip') || '', + language: user?.get('language') || '', }); } }, [user, form]); const onSubmit = async (values: FormSchema) => { - console.log(values); await updateDoc(doc(firestore, USER_FIRESTORE_PATH, user!.id), { personal: { name: values.firstname, lastname: values.lastname, gender: values.gender, }, + language: values.language, email: values.email, address: { street: values.street, @@ -89,6 +95,7 @@ export default function Page() { }, }).then(() => { toast.success('User updated'); + refetch(); }); }; @@ -142,7 +149,7 @@ export default function Page() { render={({ field }) => ( Gender - {_.capitalize(field.value)} @@ -189,12 +196,12 @@ export default function Page() {
    ( - - City + + Zip - + @@ -202,19 +209,40 @@ export default function Page() { /> ( - - Zip + + City - + )} />
    - diff --git a/website/src/app/[lang]/[region]/(website)/me/security/page.tsx b/website/src/app/[lang]/[region]/(website)/me/security/page.tsx new file mode 100644 index 000000000..0cc1ac8ba --- /dev/null +++ b/website/src/app/[lang]/[region]/(website)/me/security/page.tsx @@ -0,0 +1,20 @@ +'use client'; + +import { Button, Typography } from '@socialincome/ui'; +import { signOut } from 'firebase/auth'; +import { useRouter } from 'next/navigation'; +import { useAuth } from 'reactfire'; + +export default function Page() { + const router = useRouter(); + const auth = useAuth(); + + return ( +
    + + Reset password + + +
    + ); +} diff --git a/website/src/app/[lang]/[region]/(website)/me/subscriptions/billing-portal-button.tsx b/website/src/app/[lang]/[region]/(website)/me/subscriptions/billing-portal-button.tsx new file mode 100644 index 000000000..5d2e265ad --- /dev/null +++ b/website/src/app/[lang]/[region]/(website)/me/subscriptions/billing-portal-button.tsx @@ -0,0 +1,31 @@ +'use client'; + +import { Button } from '@socialincome/ui'; +import { useQuery } from '@tanstack/react-query'; +import { useRouter } from 'next/navigation'; +import { useUser } from 'reactfire'; +import Stripe from 'stripe'; + +// TODO: i18n +export function BillingPortalButton() { + const router = useRouter(); + const { data: authUser } = useUser(); + + const { data: billingPortalUrl } = useQuery({ + queryKey: ['BillingPortalButton', authUser?.uid], + queryFn: async () => { + const firebaseAuthToken = await authUser?.getIdToken(true); + const response = await fetch( + `/api/stripe/billing-portal-session?firebaseAuthToken=${firebaseAuthToken}&returnUrl=${window.location.href}`, + ); + const { url } = (await response.json()) as Stripe.Response; + return url; + }, + }); + + return ( + + ); +} diff --git a/website/src/app/[lang]/[region]/(website)/me/subscriptions/page.tsx b/website/src/app/[lang]/[region]/(website)/me/subscriptions/page.tsx new file mode 100644 index 000000000..8e43d820a --- /dev/null +++ b/website/src/app/[lang]/[region]/(website)/me/subscriptions/page.tsx @@ -0,0 +1,23 @@ +import { DefaultPageProps } from '@/app/[lang]/[region]'; +import { BillingPortalButton } from '@/app/[lang]/[region]/(website)/me/subscriptions/billing-portal-button'; +import { SubscriptionsTable } from '@/app/[lang]/[region]/(website)/me/subscriptions/subscriptions-table'; + +export default function Page({ params }: DefaultPageProps) { + // TODO: i18n + return ( +
    + + +
    + ); +} diff --git a/website/src/app/[lang]/[region]/(website)/me/subscriptions/subscriptions-table.tsx b/website/src/app/[lang]/[region]/(website)/me/subscriptions/subscriptions-table.tsx new file mode 100644 index 000000000..f46570dac --- /dev/null +++ b/website/src/app/[lang]/[region]/(website)/me/subscriptions/subscriptions-table.tsx @@ -0,0 +1,82 @@ +'use client'; + +import { DefaultParams } from '@/app/[lang]/[region]'; +import { useTranslator } from '@/hooks/useTranslator'; +import { toDateTime } from '@socialincome/shared/src/utils/date'; +import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, Typography } from '@socialincome/ui'; +import { useQuery } from '@tanstack/react-query'; +import { useUser } from 'reactfire'; +import Stripe from 'stripe'; + +type SubscriptionsTableProps = { + translations: { + from: string; + until: string; + status: string; + interval: string; + amount: string; + }; +} & DefaultParams; + +export function SubscriptionsTable({ lang, translations }: SubscriptionsTableProps) { + const translator = useTranslator(lang, 'website-me'); + const { data: authUser } = useUser(); + const { data: subscriptions } = useQuery({ + queryKey: ['SubscriptionsTable', authUser?.uid], + queryFn: async () => { + const firebaseAuthToken = await authUser?.getIdToken(true); + const response = await fetch(`/api/stripe/subscriptions?accessToken=${firebaseAuthToken}`); + return (await response.json()) as Stripe.Subscription[]; + }, + staleTime: 1000 * 60 * 60, // 1 hour + }); + + return ( + + + + {translations.from} + {translations.until} + {translations.status} + {translations.interval} + {translations.amount} + + + + {subscriptions?.map((subscription, index) => { + return ( + + + {toDateTime(subscription.start_date * 1000).toFormat('DD', { locale: lang })} + + + + {subscription.ended_at && toDateTime(subscription.ended_at * 1000).toFormat('DD', { locale: lang })} + + + + {translator?.t(`subscriptions.status.${subscription.status}`)} + + + + {translator?.t(`subscriptions.interval-${subscription.items.data[0].plan.interval_count}`)} + + + + + {translator?.t('subscriptions.amount-currency', { + context: { + amount: (subscription.items.data[0].plan.amount || 0) / 100, + currency: subscription.items.data[0].plan.currency, + locale: lang, + }, + })} + + + + ); + })} + +
    + ); +} diff --git a/website/src/app/[lang]/[region]/(website)/me/user-context-provider.tsx b/website/src/app/[lang]/[region]/(website)/me/user-context-provider.tsx index b3e8202cd..90148ee51 100644 --- a/website/src/app/[lang]/[region]/(website)/me/user-context-provider.tsx +++ b/website/src/app/[lang]/[region]/(website)/me/user-context-provider.tsx @@ -5,31 +5,31 @@ import { useQuery } from '@tanstack/react-query'; import assert from 'assert'; import { collection, getDocs, query, QueryDocumentSnapshot, where } from 'firebase/firestore'; import { redirect } from 'next/navigation'; -import { createContext, PropsWithChildren, useEffect } from 'react'; +import { createContext, PropsWithChildren, useContext, useEffect } from 'react'; import { useFirestore, useUser } from 'reactfire'; interface UserContextProps { user: QueryDocumentSnapshot | null | undefined; + refetch: () => void; } -export const UserContext = createContext({ user: null }); +export const UserContext = createContext(undefined!); +export const useUserContext = () => useContext(UserContext); export function UserContextProvider({ children }: PropsWithChildren) { const firestore = useFirestore(); const { status: authUserStatus, data: authUser } = useUser(); - console.log('user context', authUserStatus, authUser); - useEffect(() => { if (authUserStatus === 'success' && authUser === null) { redirect('../login'); } }, [authUserStatus, authUser]); - const { data: user } = useQuery({ - queryKey: [authUser, firestore], + const { data: user, refetch } = useQuery({ + queryKey: ['UserContextProvider', authUser?.uid, firestore], queryFn: async () => { - if (authUser && firestore) { + if (authUser?.uid && firestore) { let snapshot = await getDocs( query(collection(firestore, USER_FIRESTORE_PATH), where('authUserId', '==', authUser?.uid)), ); @@ -38,8 +38,9 @@ export function UserContextProvider({ children }: PropsWithChildren) { } else return null; }, staleTime: 1000 * 60 * 60, // 1 hour - refetchOnMount: false, }); - return {children}; + if (user) { + return {children}; + } else return null; } diff --git a/website/src/app/[lang]/[region]/(website)/transparency/finances/[currency]/charts/transparency-charts.tsx b/website/src/app/[lang]/[region]/(website)/transparency/finances/[currency]/charts/transparency-charts.tsx index 8f39b8cb5..5a1368ad2 100644 --- a/website/src/app/[lang]/[region]/(website)/transparency/finances/[currency]/charts/transparency-charts.tsx +++ b/website/src/app/[lang]/[region]/(website)/transparency/finances/[currency]/charts/transparency-charts.tsx @@ -14,9 +14,12 @@ type ContributionStatsProps = { currency: string; }; -export default function TransparencyCharts( - { contributionStats, paymentStats, lang, currency }: ContributionStatsProps, -) { +export default function TransparencyCharts({ + contributionStats, + paymentStats, + lang, + currency, +}: ContributionStatsProps) { const translator = useTranslator(lang, 'website-transparency'); return ( diff --git a/website/src/app/[lang]/[region]/(website)/transparency/finances/[currency]/info-card.tsx b/website/src/app/[lang]/[region]/(website)/transparency/finances/[currency]/info-card.tsx index bc245c70a..7e2bfd9ea 100644 --- a/website/src/app/[lang]/[region]/(website)/transparency/finances/[currency]/info-card.tsx +++ b/website/src/app/[lang]/[region]/(website)/transparency/finances/[currency]/info-card.tsx @@ -14,9 +14,15 @@ type TransparencyCardProps = { secondContent?: ReactElement; }; -export function InfoCard( - { sectionTitle, title, text, firstIcon, firstContent, secondIcon, secondContent }: TransparencyCardProps, -) { +export function InfoCard({ + sectionTitle, + title, + text, + firstIcon, + firstContent, + secondIcon, + secondContent, +}: TransparencyCardProps) { return (
    diff --git a/website/src/app/[lang]/[region]/(website)/transparency/finances/[currency]/page.tsx b/website/src/app/[lang]/[region]/(website)/transparency/finances/[currency]/page.tsx index 0c8c02df9..9e7fbce9b 100644 --- a/website/src/app/[lang]/[region]/(website)/transparency/finances/[currency]/page.tsx +++ b/website/src/app/[lang]/[region]/(website)/transparency/finances/[currency]/page.tsx @@ -1,20 +1,19 @@ import { DefaultPageProps, DefaultParams } from '@/app/[lang]/[region]'; import { CurrencyRedirect } from '@/app/[lang]/[region]/(website)/transparency/finances/[currency]/currency-redirect'; import { firestoreAdmin } from '@/firebase-admin'; -import { WebsiteCurrency, WebsiteLanguage, WebsiteRegion } from '@/i18n'; +import { WebsiteCurrency, WebsiteLanguage, WebsiteRegion, websiteCurrencies } from '@/i18n'; import { ContributionStats, ContributionStatsCalculator, } from '@socialincome/shared/src/utils/stats/ContributionStatsCalculator'; import { PaymentStats, PaymentStatsCalculator } from '@socialincome/shared/src/utils/stats/PaymentStatsCalculator'; -import { BaseContainer } from '@socialincome/ui'; import { Section1 } from './section-1'; import { Section2 } from './section-2'; import { Section3 } from './section-3'; import { Section4 } from './section-4'; export const revalidate = 3600; // update once an hour -export const generateStaticParams = () => ['USD', 'CHF'].map((currency) => ({ currency: currency.toLowerCase() })); +export const generateStaticParams = () => websiteCurrencies.map((currency) => ({ currency: currency.toLowerCase() })); export type TransparencyPageProps = { params: { @@ -43,7 +42,7 @@ export default async function Page({ params }: TransparencyPageProps) { const { contributionStats, paymentStats } = await getStats(currency); return ( - +
    @@ -51,6 +50,6 @@ export default async function Page({ params }: TransparencyPageProps) {
    - +
    ); } diff --git a/website/src/app/[lang]/[region]/(website)/transparency/finances/layout.tsx b/website/src/app/[lang]/[region]/(website)/transparency/finances/layout.tsx new file mode 100644 index 000000000..a21e24070 --- /dev/null +++ b/website/src/app/[lang]/[region]/(website)/transparency/finances/layout.tsx @@ -0,0 +1,7 @@ +import { DefaultLayoutProps } from '@/app/[lang]/[region]'; +import { BaseContainer } from '@socialincome/ui'; +import { PropsWithChildren } from 'react'; + +export default function Layout({ children }: PropsWithChildren) { + return {children}; +} diff --git a/website/src/app/[lang]/[region]/(website)/transparency/finances/page.tsx b/website/src/app/[lang]/[region]/(website)/transparency/finances/page.tsx index c56d9fa8a..49e855a1f 100644 --- a/website/src/app/[lang]/[region]/(website)/transparency/finances/page.tsx +++ b/website/src/app/[lang]/[region]/(website)/transparency/finances/page.tsx @@ -1,13 +1,11 @@ -'use client'; - -import { useI18n } from '@/app/context-providers'; +import { CURRENCY_COOKIE } from '@/app/[lang]/[region]'; +import { defaultCurrency } from '@/i18n'; +import { cookies } from 'next/headers'; import { redirect } from 'next/navigation'; -import { useEffect } from 'react'; -export default function Page() { - const { currency } = useI18n(); +export const dynamic = 'force-dynamic'; - useEffect(() => { - redirect('./finances/' + currency?.toLowerCase()); - }, [currency]); +export default function Page() { + const currency = cookies().get(CURRENCY_COOKIE)?.value.toLowerCase() || defaultCurrency; + redirect('./finances/' + currency); } diff --git a/website/src/app/api/stripe/billing-portal-session/route.ts b/website/src/app/api/stripe/billing-portal-session/route.ts new file mode 100644 index 000000000..6a46bd364 --- /dev/null +++ b/website/src/app/api/stripe/billing-portal-session/route.ts @@ -0,0 +1,20 @@ +import { getUserDocFromAuthToken } from '@/firebase-admin'; +import { initializeStripe } from '@socialincome/shared/src/stripe'; +import { NextResponse } from 'next/server'; + +export async function GET(request: Request) { + const { searchParams } = new URL(request.url); + const firebaseAuthToken = searchParams.get('firebaseAuthToken'); + const returnUrl = searchParams.get('returnUrl'); + if (!firebaseAuthToken || !returnUrl) { + return new Response(null, { status: 400, statusText: 'Missing firebaseAuthToken or returnUrl' }); + } + const stripe = initializeStripe(process.env.STRIPE_SECRET_KEY!); + const userDoc = await getUserDocFromAuthToken(firebaseAuthToken); + const session = await stripe.billingPortal.sessions.create({ + return_url: returnUrl, + customer: userDoc?.get('stripe_customer_id'), + locale: userDoc?.get('language'), + }); + return NextResponse.json(session); +} diff --git a/website/src/app/api/stripe/checkout/new/route.ts b/website/src/app/api/stripe/checkout/new-payment/route.ts similarity index 57% rename from website/src/app/api/stripe/checkout/new/route.ts rename to website/src/app/api/stripe/checkout/new-payment/route.ts index f28eb3a93..09ac2fa28 100644 --- a/website/src/app/api/stripe/checkout/new/route.ts +++ b/website/src/app/api/stripe/checkout/new-payment/route.ts @@ -1,32 +1,43 @@ +import { getUserDocFromAuthToken } from '@/firebase-admin'; import { initializeStripe } from '@socialincome/shared/src/stripe'; import { NextResponse } from 'next/server'; export type CreateSubscriptionData = { amount: number; // in the lowest currency unit, e.g. cents successUrl: string; + recurring?: boolean; currency?: string; intervalCount?: number; + firebaseAuthToken?: string; }; type CreateSubscriptionRequest = { json(): Promise } & Request; export async function POST(request: CreateSubscriptionRequest) { - const { amount, currency = 'USD', intervalCount = 1, successUrl } = await request.json(); + const { + amount, + currency = 'USD', + intervalCount = 1, + successUrl, + recurring = false, + firebaseAuthToken, + } = await request.json(); const stripe = initializeStripe(process.env.STRIPE_SECRET_KEY!); - const plan = await stripe.plans.create({ + const userDoc = await getUserDocFromAuthToken(firebaseAuthToken); + const price = await stripe.prices.create({ active: true, - amount: amount, + unit_amount: amount, currency: currency, - interval: 'month', - interval_count: intervalCount, product: process.env.STRIPE_PRODUCT_ID, + recurring: recurring ? { interval: 'month', interval_count: intervalCount } : undefined, }); const session = await stripe.checkout.sessions.create({ - mode: 'subscription', + mode: recurring ? 'subscription' : 'payment', payment_method_types: ['card'], + customer: userDoc?.get('stripe_customer_id'), line_items: [ { - price: plan.id, + price: price.id, quantity: 1, }, ], diff --git a/website/src/app/api/stripe/billing-portal/route.ts b/website/src/app/api/stripe/subscriptions/route.ts similarity index 71% rename from website/src/app/api/stripe/billing-portal/route.ts rename to website/src/app/api/stripe/subscriptions/route.ts index 169d4e2f6..5170c9a15 100644 --- a/website/src/app/api/stripe/billing-portal/route.ts +++ b/website/src/app/api/stripe/subscriptions/route.ts @@ -1,13 +1,13 @@ import { authAdmin, firestoreAdmin } from '@/firebase-admin'; import { initializeStripe } from '@socialincome/shared/src/stripe'; import { USER_FIRESTORE_PATH, User } from '@socialincome/shared/src/types/user'; +import _ from 'lodash'; import { NextResponse } from 'next/server'; export async function GET(request: Request) { const { searchParams } = new URL(request.url); const accessToken = searchParams.get('accessToken'); - const returnUrl = searchParams.get('returnUrl'); - if (!accessToken || !returnUrl) { + if (!accessToken) { return new Response(null, { status: 400, statusText: 'Missing accessToken or returnUrl' }); } @@ -16,10 +16,12 @@ export async function GET(request: Request) { const userDoc = await firestoreAdmin.findFirst(USER_FIRESTORE_PATH, (q) => q.where('authUserId', '==', decodedToken.uid), ); - const session = await stripe.billingPortal.sessions.create({ - customer: userDoc?.get('stripe_customer_id'), - return_url: returnUrl, - locale: userDoc?.get('language'), - }); - return NextResponse.json(session); + + if (_.isUndefined(userDoc)) { + return new Response(null, { status: 400, statusText: 'User not found' }); + } else { + return NextResponse.json( + (await stripe.subscriptions.list({ customer: userDoc.get('stripe_customer_id'), status: 'all' })).data, + ); + } } diff --git a/website/src/app/context-providers.tsx b/website/src/app/context-providers.tsx index 33034814a..671172f93 100644 --- a/website/src/app/context-providers.tsx +++ b/website/src/app/context-providers.tsx @@ -10,6 +10,7 @@ import { connectAuthEmulator, getAuth } from 'firebase/auth'; import { connectFirestoreEmulator, getFirestore } from 'firebase/firestore'; import { connectFunctionsEmulator, getFunctions } from 'firebase/functions'; import { connectStorageEmulator, getStorage } from 'firebase/storage'; +import _ from 'lodash'; import { usePathname, useRouter } from 'next/navigation'; import { PropsWithChildren, createContext, useContext, useEffect, useState } from 'react'; import { Toaster } from 'react-hot-toast'; @@ -134,18 +135,24 @@ function I18nProvider({ children }: PropsWithChildren) { const { value: currency, setCookie: setCurrency } = useCookieState(CURRENCY_COOKIE); useEffect(() => { - const pathSegments = window.location.pathname.split('/'); - if (language && pathSegments[1] !== language) { - pathSegments[1] = language; - router.push(pathSegments.join('/')); + const urlSegments = window.location.pathname.split('/'); + const languageInUrl = urlSegments[1] as WebsiteLanguage; + if (_.isUndefined(language)) { + setLanguage(languageInUrl); + } else if (languageInUrl !== language) { + urlSegments[1] = language; + router.push(urlSegments.join('/')); } }, [language, router]); useEffect(() => { - const pathSegments = window.location.pathname.split('/'); - if (region && pathSegments[2] !== region) { - pathSegments[2] = region; - router.push(pathSegments.join('/')); + const urlSegments = window.location.pathname.split('/'); + const regionInUrl = urlSegments[2] as WebsiteRegion; + if (_.isUndefined(region)) { + setRegion(regionInUrl); + } else if (regionInUrl !== region) { + urlSegments[2] = region; + router.push(urlSegments.join('/')); } }, [region, router]); diff --git a/website/src/components/i18n-dialog.tsx b/website/src/components/i18n-dialog.tsx index 8538d5785..93eb3aa46 100644 --- a/website/src/components/i18n-dialog.tsx +++ b/website/src/components/i18n-dialog.tsx @@ -41,9 +41,13 @@ type I18nDialogProps = { }; }; -export function I18nDialog( - { languages, regions, currencies, translations, children }: PropsWithChildren, -) { +export function I18nDialog({ + languages, + regions, + currencies, + translations, + children, +}: PropsWithChildren) { const [open, setOpen] = useState(false); const { language, setLanguage, region, setRegion, currency, setCurrency } = useI18n(); diff --git a/website/src/components/navbar/navbar-client.tsx b/website/src/components/navbar/navbar-client.tsx index 51b33f754..4c1d786e1 100644 --- a/website/src/components/navbar/navbar-client.tsx +++ b/website/src/components/navbar/navbar-client.tsx @@ -61,9 +61,15 @@ type NavbarProps = { }[]; } & DefaultParams; -export function NavbarClient( - { lang, region, translations, languages, regions, currencies, sections = [] }: NavbarProps, -) { +export function NavbarClient({ + lang, + region, + translations, + languages, + regions, + currencies, + sections = [], +}: NavbarProps) { const [isOpen, setIsOpen] = useState(false); const i18nDialog = ( diff --git a/website/src/components/ui/book.tsx b/website/src/components/ui/book.tsx index 5efc32eb0..c5a38ebca 100644 --- a/website/src/components/ui/book.tsx +++ b/website/src/components/ui/book.tsx @@ -15,9 +15,18 @@ type BookProps = { currentlyReading?: boolean; }; -export default async function Book( - { cover, author, authorLink, title, description, quote, publisher, publisherLink, year, currentlyReading }: BookProps, -) { +export default async function Book({ + cover, + author, + authorLink, + title, + description, + quote, + publisher, + publisherLink, + year, + currentlyReading, +}: BookProps) { return (
    diff --git a/website/src/firebase-admin.ts b/website/src/firebase-admin.ts index cc37df6a6..2340bbeb3 100644 --- a/website/src/firebase-admin.ts +++ b/website/src/firebase-admin.ts @@ -1,7 +1,8 @@ +import { getOrInitializeFirebaseAdmin } from '@socialincome/shared/src/firebase/admin/app'; import { AuthAdmin } from '@socialincome/shared/src/firebase/admin/AuthAdmin'; import { FirestoreAdmin } from '@socialincome/shared/src/firebase/admin/FirestoreAdmin'; import { StorageAdmin } from '@socialincome/shared/src/firebase/admin/StorageAdmin'; -import { getOrInitializeFirebaseAdmin } from '@socialincome/shared/src/firebase/admin/app'; +import { User, USER_FIRESTORE_PATH } from '@socialincome/shared/src/types/user'; import { credential } from 'firebase-admin'; // FIREBASE_SERVICE_ACCOUNT_JSON should only be a single line where the content of private_key contains \n characters. @@ -20,3 +21,11 @@ export const app = getOrInitializeFirebaseAdmin( export const authAdmin = new AuthAdmin(app); export const firestoreAdmin = new FirestoreAdmin(app); export const storageAdmin = new StorageAdmin(app); + +export const getUserDocFromAuthToken = async (token: string | undefined) => { + if (!token) return undefined; + const decodedToken = await authAdmin.auth.verifyIdToken(token, true); + return await firestoreAdmin.findFirst(USER_FIRESTORE_PATH, (q) => + q.where('authUserId', '==', decodedToken.uid), + ); +}; diff --git a/website/src/hooks/useCookieState.ts b/website/src/hooks/useCookieState.ts index eb1e06a1a..9e426fafd 100644 --- a/website/src/hooks/useCookieState.ts +++ b/website/src/hooks/useCookieState.ts @@ -10,14 +10,14 @@ export const useCookieState = (key: string, initialValue?: T, // Setting the initial value for a cookie is intentionally done in useEffect and not in useState, so that the // initial state value is always undefined. This is required so that statically rendered pages are always the // same as the initial state of the client side rendered page. - let value = Cookies.get(key) as T; - if (value) { - setValue(value); + const val = Cookies.get(key) as T; + if (val) { + setValue(val); } else if (initialValue) { Cookies.set(key, initialValue, options); setValue(initialValue); } - }, []); + }, [key, initialValue, options]); const setCookie = (val: T, options?: CookieAttributes) => { Cookies.set(key, val, options); diff --git a/website/src/hooks/useTranslator.ts b/website/src/hooks/useTranslator.ts index c5ec14d14..cab6257d3 100644 --- a/website/src/hooks/useTranslator.ts +++ b/website/src/hooks/useTranslator.ts @@ -1,16 +1,18 @@ import { LanguageCode } from '@socialincome/shared/src/types/language'; import { Translator } from '@socialincome/shared/src/utils/i18n'; -import { useState } from 'react'; +import { useEffect, useState } from 'react'; export function useTranslator(language: LanguageCode, namespace: string) { const [translators, setTranslators] = useState>(new Map()); - if (!translators.has(namespace)) { - Translator.getInstance({ - language, - namespaces: [namespace], - }).then((t) => setTranslators(new Map(translators.set(t.namespaces[0], t)))); - } + useEffect(() => { + if (!translators.has(namespace)) { + Translator.getInstance({ + language, + namespaces: [namespace], + }).then((t) => setTranslators((prev) => new Map(prev.set(t.namespaces[0], t)))); + } + }, [language, namespace, translators]); return translators.get(namespace); } From cfba06020bbe9c35ed1808ce59519cb3de2f3271 Mon Sep 17 00:00:00 2001 From: mkue Date: Sat, 11 Nov 2023 11:04:47 +0000 Subject: [PATCH 2/2] Prettified Code! --- shared/src/firebase/client/init.ts | 22 ++++++++++--------- shared/src/utils/messaging/email.ts | 12 +++------- shared/src/utils/messaging/whatsapp.ts | 9 +++----- shared/src/utils/templates.ts | 9 +++----- ui/CONTRIBUTING.md | 8 +++---- ui/src/components/carousel.tsx | 11 +++------- ui/src/components/form.tsx | 6 ++--- ui/src/components/typography/typography.tsx | 22 ++++++++++--------- .../[currency]/charts/transparency-charts.tsx | 9 +++----- .../finances/[currency]/info-card.tsx | 12 +++------- website/src/components/i18n-dialog.tsx | 10 +++------ .../src/components/navbar/navbar-client.tsx | 12 +++------- website/src/components/ui/book.tsx | 15 +++---------- 13 files changed, 57 insertions(+), 100 deletions(-) diff --git a/shared/src/firebase/client/init.ts b/shared/src/firebase/client/init.ts index 91f45f180..9f97fd025 100644 --- a/shared/src/firebase/client/init.ts +++ b/shared/src/firebase/client/init.ts @@ -17,16 +17,18 @@ interface InitializeFirebaseClientProps { functionsEmulatorPort?: number; } -export const initializeFirebaseClient = ({ - firebaseConfig, - authEmulatorUrl, - firestoreEmulatorHost, - firestoreEmulatorPort, - storageEmulatorHost, - storageEmulatorPort, - functionsEmulatorHost, - functionsEmulatorPort, -}: InitializeFirebaseClientProps) => { +export const initializeFirebaseClient = ( + { + firebaseConfig, + authEmulatorUrl, + firestoreEmulatorHost, + firestoreEmulatorPort, + storageEmulatorHost, + storageEmulatorPort, + functionsEmulatorHost, + functionsEmulatorPort, + }: InitializeFirebaseClientProps, +) => { const app = getOrInitializeFirebaseClientApp(firebaseConfig); const auth = getAuth(app); const functions = getFunctions(app, DEFAULT_REGION); diff --git a/shared/src/utils/messaging/email.ts b/shared/src/utils/messaging/email.ts index 631127674..3024783d8 100644 --- a/shared/src/utils/messaging/email.ts +++ b/shared/src/utils/messaging/email.ts @@ -16,15 +16,9 @@ interface SendEmailProps { password: string; } -export const sendEmail = async ({ - from = 'no-reply@socialincome.org', - to, - subject, - content, - attachments = [], - user, - password, -}: SendEmailProps) => { +export const sendEmail = async ( + { from = 'no-reply@socialincome.org', to, subject, content, attachments = [], user, password }: SendEmailProps, +) => { let transporter: Transporter; if (!user) { const testAccount = await nodemailer.createTestAccount(); diff --git a/shared/src/utils/messaging/whatsapp.ts b/shared/src/utils/messaging/whatsapp.ts index bde18e4ed..6dd0c75c0 100644 --- a/shared/src/utils/messaging/whatsapp.ts +++ b/shared/src/utils/messaging/whatsapp.ts @@ -12,12 +12,9 @@ export interface SendWhatsappProps { templateProps: RenderTemplateProps; } -export const sendWhatsapp = async ({ - to, - from, - twilioConfig, - templateProps, -}: SendWhatsappProps): Promise => { +export const sendWhatsapp = async ( + { to, from, twilioConfig, templateProps }: SendWhatsappProps, +): Promise => { const client = new Twilio(twilioConfig.sid, twilioConfig.token); const body = await renderTemplate(templateProps); return client.messages.create({ body: body, from: `whatsapp:${from}`, to: `whatsapp:${to}` }); diff --git a/shared/src/utils/templates.ts b/shared/src/utils/templates.ts index 0813fc103..f144fcb1e 100644 --- a/shared/src/utils/templates.ts +++ b/shared/src/utils/templates.ts @@ -28,12 +28,9 @@ const partials = [ ]; partials.forEach((partial) => Handlebars.registerPartial(partial.name, readHbs(partial.path))); -export const renderTemplate = async ({ - language, - translationNamespace = [], - hbsTemplatePath, - context, -}: RenderTemplateProps) => { +export const renderTemplate = async ( + { language, translationNamespace = [], hbsTemplatePath, context }: RenderTemplateProps, +) => { const i18n = i18next.createInstance(); await i18n .use( diff --git a/ui/CONTRIBUTING.md b/ui/CONTRIBUTING.md index b25c7d2f1..f7a8867a8 100644 --- a/ui/CONTRIBUTING.md +++ b/ui/CONTRIBUTING.md @@ -54,11 +54,9 @@ UI elements: **Example**: ```tsx - export const SoExampleComponent = ({ - children, - exampleProperty, - ...props - }: SoExampleComponentProps) => { + export const SoExampleComponent = ( + { children, exampleProperty, ...props }: SoExampleComponentProps, + ) => { return (

    {children} diff --git a/ui/src/components/carousel.tsx b/ui/src/components/carousel.tsx index 0aa33b9fd..c1b9658b1 100644 --- a/ui/src/components/carousel.tsx +++ b/ui/src/components/carousel.tsx @@ -14,14 +14,9 @@ type CarouselProps = { showControls?: boolean; } & React.HTMLAttributes; -export const Carousel = ({ - children, - className, - options = {}, - showDots = false, - showControls = false, - ...props -}: CarouselProps) => { +export const Carousel = ( + { children, className, options = {}, showDots = false, showControls = false, ...props }: CarouselProps, +) => { const [emblaRef, emblaApi] = useEmblaCarousel( options, options?.autoPlay?.enabled ? [Autoplay(options.autoPlay)] : [], diff --git a/ui/src/components/form.tsx b/ui/src/components/form.tsx index aab225efa..3da7d006d 100644 --- a/ui/src/components/form.tsx +++ b/ui/src/components/form.tsx @@ -22,9 +22,9 @@ const FormFieldContext = React.createContext({} as FormFi const FormField = < TFieldValues extends FieldValues = FieldValues, TName extends FieldPath = FieldPath, ->({ - ...props -}: ControllerProps) => { +>( + { ...props }: ControllerProps, +) => { return ( diff --git a/ui/src/components/typography/typography.tsx b/ui/src/components/typography/typography.tsx index 5f339233b..3a53698bf 100644 --- a/ui/src/components/typography/typography.tsx +++ b/ui/src/components/typography/typography.tsx @@ -66,16 +66,18 @@ export type TypographyProps = { lineHeight?: LineHeight; } & ComponentPropsWithoutRef; -export function Typography({ - as, - size = 'md', - weight = 'normal', - color = 'foreground', - lineHeight = 'normal', - className, - children, - ...props -}: TypographyProps) { +export function Typography( + { + as, + size = 'md', + weight = 'normal', + color = 'foreground', + lineHeight = 'normal', + className, + children, + ...props + }: TypographyProps, +) { const Component = as || 'p'; return (

    diff --git a/website/src/components/i18n-dialog.tsx b/website/src/components/i18n-dialog.tsx index 93eb3aa46..8538d5785 100644 --- a/website/src/components/i18n-dialog.tsx +++ b/website/src/components/i18n-dialog.tsx @@ -41,13 +41,9 @@ type I18nDialogProps = { }; }; -export function I18nDialog({ - languages, - regions, - currencies, - translations, - children, -}: PropsWithChildren) { +export function I18nDialog( + { languages, regions, currencies, translations, children }: PropsWithChildren, +) { const [open, setOpen] = useState(false); const { language, setLanguage, region, setRegion, currency, setCurrency } = useI18n(); diff --git a/website/src/components/navbar/navbar-client.tsx b/website/src/components/navbar/navbar-client.tsx index 4c1d786e1..51b33f754 100644 --- a/website/src/components/navbar/navbar-client.tsx +++ b/website/src/components/navbar/navbar-client.tsx @@ -61,15 +61,9 @@ type NavbarProps = { }[]; } & DefaultParams; -export function NavbarClient({ - lang, - region, - translations, - languages, - regions, - currencies, - sections = [], -}: NavbarProps) { +export function NavbarClient( + { lang, region, translations, languages, regions, currencies, sections = [] }: NavbarProps, +) { const [isOpen, setIsOpen] = useState(false); const i18nDialog = ( diff --git a/website/src/components/ui/book.tsx b/website/src/components/ui/book.tsx index c5a38ebca..5efc32eb0 100644 --- a/website/src/components/ui/book.tsx +++ b/website/src/components/ui/book.tsx @@ -15,18 +15,9 @@ type BookProps = { currentlyReading?: boolean; }; -export default async function Book({ - cover, - author, - authorLink, - title, - description, - quote, - publisher, - publisherLink, - year, - currentlyReading, -}: BookProps) { +export default async function Book( + { cover, author, authorLink, title, description, quote, publisher, publisherLink, year, currentlyReading }: BookProps, +) { return (