From 1f7802d0e0577a8a7d3b1e00bfa8154e16c03dbb Mon Sep 17 00:00:00 2001 From: Made Baruna Date: Sun, 4 Apr 2021 23:24:54 +0800 Subject: [PATCH 1/5] Add parametric transformer notification - close #23 --- .env.example | 6 + rollup.config.js | 30 ++- scripts/createEnv.js | 6 + src/components/Input.svelte | 2 + src/firebase-messaging-sw.js | 40 +++ src/locales/en.json | 17 +- src/locales/id.json | 18 ++ src/routes/_index/reminder.svelte | 8 +- src/routes/index.svelte | 5 +- src/routes/reminder.svelte | 233 ++++++++++++++++++ src/routes/wish/tally/_item.svelte | 1 + src/server.js | 47 +++- src/stores/firebase.js | 121 +++++++++ .../images/items/parametric_transformer.png | Bin 0 -> 61951 bytes 14 files changed, 512 insertions(+), 22 deletions(-) create mode 100644 src/firebase-messaging-sw.js create mode 100644 src/routes/reminder.svelte create mode 100644 src/stores/firebase.js create mode 100644 static/images/items/parametric_transformer.png diff --git a/.env.example b/.env.example index 4b0fa8ab..21b9748e 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,9 @@ GOOGLE_DRIVE_CLIENT_ID= GOOGLE_DRIVE_API_KEY= API_HOST=http://localhost:3001 +FIREBASE_API_KEY= +FIREBASE_AUTH_DOMAIN= +FIREBASE_PROJECT_ID= +FIREBASE_STORAGE_BUCKET= +FIREBASE_MESSAGING_SENDER_ID= +FIREBASE_APP_ID= diff --git a/rollup.config.js b/rollup.config.js index 9ebc6f53..587ee176 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -23,6 +23,11 @@ const onwarn = (warning, onwarn) => (warning.code === 'CIRCULAR_DEPENDENCY' && /[/\\]@sapper[/\\]/.test(warning.message)) || onwarn(warning); +const envData = {}; +Object.entries(envConfig().parsed).forEach(([key, val]) => { + envData[`__paimon.env.${key}`] = `'${val}'`; +}); + export default { client: { input: config.client.input(), @@ -34,9 +39,7 @@ export default { replace({ 'process.browser': true, 'process.env.NODE_ENV': JSON.stringify(mode), - __paimon: JSON.stringify({ - env: envConfig().parsed, - }), + ...envData, }), svelte({ compilerOptions: { @@ -98,9 +101,7 @@ export default { replace({ 'process.browser': false, 'process.env.NODE_ENV': JSON.stringify(mode), - __paimon: JSON.stringify({ - env: envConfig().parsed, - }), + ...envData, }), svelte({ compilerOptions: { @@ -127,6 +128,23 @@ export default { onwarn, }, + serviceworker: { + input: config.serviceworker.input().replace('service-worker', 'firebase-messaging-sw'), + output: { + ...config.serviceworker.output(), + file: config.serviceworker.output().file.replace('service-worker', 'firebase-messaging-sw'), + }, + plugins: [ + replace(envData), + resolve(), + commonjs(), + !dev && terser(), + ], + + preserveEntrySignatures: false, + onwarn, + }, + // serviceworker: { // input: config.serviceworker.input(), // output: config.serviceworker.output(), diff --git a/scripts/createEnv.js b/scripts/createEnv.js index 1e4bd59c..9d79a146 100644 --- a/scripts/createEnv.js +++ b/scripts/createEnv.js @@ -4,5 +4,11 @@ let envString = ''; envString += `GOOGLE_DRIVE_CLIENT_ID=${process.env.GOOGLE_DRIVE_CLIENT_ID}\n`; envString += `GOOGLE_DRIVE_API_KEY=${process.env.GOOGLE_DRIVE_API_KEY}\n`; envString += `API_HOST=${process.env.API_HOST}\n`; +envString += `FIREBASE_API_KEY=${FIREBASE_API_KEY}\n` +envString += `FIREBASE_AUTH_DOMAIN=${FIREBASE_AUTH_DOMAIN}\n` +envString += `FIREBASE_PROJECT_ID=${FIREBASE_PROJECT_ID}\n` +envString += `FIREBASE_STORAGE_BUCKET=${FIREBASE_STORAGE_BUCKET}\n` +envString += `FIREBASE_MESSAGING_SENDER_ID=${FIREBASE_MESSAGING_SENDER_ID}\n` +envString += `FIREBASE_APP_ID=${FIREBASE_APP_ID}\n` fs.writeFileSync('.env', envString); diff --git a/src/components/Input.svelte b/src/components/Input.svelte index 5e0531d0..32fb5912 100644 --- a/src/components/Input.svelte +++ b/src/components/Input.svelte @@ -6,6 +6,7 @@ export let placeholder = ''; export let step = undefined; export let type = 'text'; + export let pattern = undefined; export let min = Math.min(); export let max = Math.max(); @@ -32,6 +33,7 @@ {min} {max} {step} + {pattern} on:change on:input={handleInput} class={`w-full ${icon ? 'pl-12' : 'pl-4'} min-h-full pr-4 text-white placeholder-gray-500 leading-none bg-transparent border-none focus:outline-none`} /> diff --git a/src/firebase-messaging-sw.js b/src/firebase-messaging-sw.js new file mode 100644 index 00000000..39b9fb2d --- /dev/null +++ b/src/firebase-messaging-sw.js @@ -0,0 +1,40 @@ +importScripts('https://www.gstatic.com/firebasejs/8.3.2/firebase-app.js'); +importScripts('https://www.gstatic.com/firebasejs/8.3.2/firebase-messaging.js'); + +const firebaseConfig = { + apiKey: __paimon.env.FIREBASE_API_KEY, + authDomain: __paimon.env.FIREBASE_AUTH_DOMAIN, + projectId: __paimon.env.FIREBASE_PROJECT_ID, + storageBucket: __paimon.env.FIREBASE_STORAGE_BUCKET, + messagingSenderId: __paimon.env.FIREBASE_MESSAGING_SENDER_ID, + appId: __paimon.env.FIREBASE_APP_ID, +}; + +firebase.initializeApp(firebaseConfig); + +const messaging = firebase.messaging(); + +messaging.onBackgroundMessage((payload) => { + console.log('Received background message ', payload); + + const { title, body, url } = payload.data; + + const notificationTitle = title; + const notificationOptions = { + body, + icon: '/favicon.png', + data: { + url, + }, + }; + + self.registration.showNotification(notificationTitle, notificationOptions); +}); + +self.addEventListener('notificationclick', function (event) { + event.notification.close(); + + if (clients.openWindow) { + clients.openWindow(event.notification.data.url); + } +}); diff --git a/src/locales/en.json b/src/locales/en.json index 6a700770..cb8a1ae9 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -469,8 +469,21 @@ "trakteer": "Support me on Trakteer" }, "reminder": { - "title": "Reminder Notification", "notSupported": "Your browser does not support push notification, please try other browser!", - "blocked": "Notification is blocked, the reminder notification will not work! Please enable it on your browser." + "blocked": "Notification is blocked, the reminder notification will not work! Please enable it on your browser.", + "desktop": "Desktop browser cannot receive notification if the browser is not running!", + "early": "The notification may arrive earlier (about 1-10 minutes) because of the way we send the notification", + "transformer": "Parametric Transformer Reminder", + "last": "Enter when you last used the Parametric Transformer", + "countdown": "Enter countdown time of the Parametric Transformer (If you don't remember the exact time, you need to approximate it)", + "useLast": "Use last used time instead", + "useCountdown": "Use countdown time instead", + "set": "Set Reminder", + "checking": "Checking saved reminder...", + "errorSelect": "Please select the day and hour!", + "errorSaving": "Something wrong when saving the reminder 🙁", + "current": "Current reminder", + "hoyolab": "Hoyolab Daily Check-In Reminder", + "comingsoon": "Coming Soon!" } } \ No newline at end of file diff --git a/src/locales/id.json b/src/locales/id.json index 117b5b09..83046ae4 100644 --- a/src/locales/id.json +++ b/src/locales/id.json @@ -466,5 +466,23 @@ ], "kofi": "Support me on Ko-fi", "trakteer": "Support me on Trakteer" + }, + "reminder": { + "notSupported": "Browser mu tidak mensupport notifikasi, silahkan coba browser lain!", + "blocked": "Notifikasi di blokir, notifikasi tidak akan bisa terkirim! Silahkan nyalakan notifikasi di browser mu.", + "desktop": "Browser dekstop tidak bisa menerima notifikasi jika browser tidak berjalan!", + "early": "Notifikasi mungkin akan muncul lebih awal (sekitar 1-10 menit) karena limitasi dalam pengiriman notifikasi.", + "transformer": "Reminder Parametric Transformer", + "last": "Masukkan kapan kamu terakhir menggunakan Parametric Transformer", + "countdown": "Masukkan waktu countdown Parametric Transformer (jika kamu tidak ingat waktu pasti nya, kamu perlu mengira-ngira-kannya)", + "useLast": "Gunakan waktu terakhir menggunakan", + "useCountdown": "Gunakan waktu countdown", + "set": "Set Reminder", + "checking": "Mengecek reminder tersimpan...", + "errorSelect": "Silahkan pilih sisa hari dan jam nya!", + "errorSaving": "Error saat menyimpan reminder 🙁", + "current": "Reminder saat ini", + "hoyolab": "Reminder Hoyolab Daily Check-In", + "comingsoon": "Coming Soon!" } } \ No newline at end of file diff --git a/src/routes/_index/reminder.svelte b/src/routes/_index/reminder.svelte index bd64976d..fa7e6242 100644 --- a/src/routes/_index/reminder.svelte +++ b/src/routes/_index/reminder.svelte @@ -7,11 +7,13 @@

{$t('home.reminder.message')}

-
{$t('home.reminder.detail')} -
+
diff --git a/src/routes/index.svelte b/src/routes/index.svelte index ef568a14..2ded283e 100644 --- a/src/routes/index.svelte +++ b/src/routes/index.svelte @@ -16,7 +16,6 @@ let refreshLayout; const onDone = debounce(() => { - console.log('refresh'); refreshLayout(); }, 100); @@ -42,10 +41,10 @@ - + + - diff --git a/src/routes/reminder.svelte b/src/routes/reminder.svelte new file mode 100644 index 00000000..2a3fe406 --- /dev/null +++ b/src/routes/reminder.svelte @@ -0,0 +1,233 @@ + + + + Paimon.moe + + + +
+
+ {#if $loadingFirst} + + {:else if !$notificationSupported} +
+ {$t('reminder.notSupported')} +
+ {:else if !$notificationAllowed} +
+ {$t('reminder.blocked')} +
+ {:else} +
+
+
+ parametric transformer +

{$t('reminder.transformer')}

+
+
+ {#if loadingCurrent} +
+ + {$t('reminder.checking')} +
+ {/if} + {#if currentReminder !== null} +
+

{$t('reminder.current')}

+

{currentReminder.format('YYYY-MM-DD HH:mm')} ({currentReminder.fromNow()})

+
+ {/if} +

+ {$t(useType === 'last' ? 'reminder.last' : 'reminder.countdown')} +

+ {#if useType === 'last'} + + {:else} +
+ +
+ {/if} + + +
+
+
+
+ +

{$t('reminder.hoyolab')}

+
+
+ {$t('reminder.comingsoon')} +
+
+
+
+ {$t('reminder.early')} +
+ +
+
+ {/if} +
+
+ + diff --git a/src/routes/wish/tally/_item.svelte b/src/routes/wish/tally/_item.svelte index d429b490..71e921d1 100644 --- a/src/routes/wish/tally/_item.svelte +++ b/src/routes/wish/tally/_item.svelte @@ -8,6 +8,7 @@ import relativeTime from 'dayjs/plugin/relativeTime'; import 'dayjs/locale/id'; import 'dayjs/locale/en'; + import 'dayjs/locale/ru'; dayjs.extend(duration); dayjs.extend(relativeTime); diff --git a/src/server.js b/src/server.js index 688096a3..07aec8c2 100644 --- a/src/server.js +++ b/src/server.js @@ -2,19 +2,50 @@ import sirv from 'sirv'; import polka from 'polka'; import compression from 'compression'; import * as sapper from '@sapper/server'; +import fs from 'fs'; +import path from 'path'; import { i18nMiddleware } from './i18n.js'; const { PORT, NODE_ENV } = process.env; const dev = NODE_ENV === 'development'; +function serve(pathname) { + const filter = (req) => req.path === pathname; + const read = (file) => fs.readFileSync(path.join('__sapper__/dev', file)); + + return (req, res, next) => { + if (filter(req)) { + try { + const file = path.posix.normalize(decodeURIComponent(req.path)); + const data = read(file); + res.setHeader('Content-Type', 'text/javascript'); + res.setHeader('Cache-Control', 'no-cache, no-store, must-revalidate'); + res.end(data); + } catch (err) { + if (err.code === 'ENOENT') { + next(); + } else { + console.error(err); + res.statusCode = 500; + res.end('an error occurred while reading a static file from disk'); + } + } + } else { + next(); + } + }; +} + polka() // You can also use Express - .use( - compression({ threshold: 0 }), - sirv('static', { dev }), + .use( + compression({ threshold: 0 }), + sirv('static', { dev }), i18nMiddleware(), - sapper.middleware() - ) - .listen(PORT, err => { - if (err) console.log('error', err); - }); + serve('/firebase-messaging-sw.js'), + serve('/firebase-messaging-sw.js.map'), + sapper.middleware(), + ) + .listen(PORT, (err) => { + if (err) console.log('error', err); + }); diff --git a/src/stores/firebase.js b/src/stores/firebase.js new file mode 100644 index 00000000..f0a169e7 --- /dev/null +++ b/src/stores/firebase.js @@ -0,0 +1,121 @@ +import { writable } from 'svelte/store'; + +export const firebaseToken = writable(''); +export const loadingFirst = writable(true); +export const loading = writable(false); +export const notificationSupported = writable(false); +export const notificationAllowed = writable(true); + +const firebaseConfig = { + apiKey: __paimon.env.FIREBASE_API_KEY, + authDomain: __paimon.env.FIREBASE_AUTH_DOMAIN, + projectId: __paimon.env.FIREBASE_PROJECT_ID, + storageBucket: __paimon.env.FIREBASE_STORAGE_BUCKET, + messagingSenderId: __paimon.env.FIREBASE_MESSAGING_SENDER_ID, + appId: __paimon.env.FIREBASE_APP_ID, +}; + +let firebase; +let messaging; + +export async function firstLoadNotification() { + console.log('first load notification'); + + const isSupported = 'Notification' in window; + notificationSupported.set(isSupported); + loadingFirst.set(false); + + if (!isSupported) { + return; + } + + if (Notification.permission === 'granted') { + await initFirebase(); + } else if (Notification.permission === 'denied') { + notificationAllowed.set(false); + } +} + +export async function requestPermission() { + console.log('request permission'); + + if (Notification.permission === 'granted') { + if (messaging) { + await getToken(); + } else { + await initFirebase(); + } + } else { + loading.set(true); + + const result = await Notification.requestPermission(); + + const allowed = result === 'granted'; + notificationAllowed.set(allowed); + + if (allowed) { + await initFirebase(); + } else { + loading.set(false); + } + } +} + +async function initFirebase() { + console.log('init firebase'); + + if (!messaging) { + firebase = (await import('firebase/app')).default; + await import('firebase/messaging'); + + firebase.initializeApp(firebaseConfig); + messaging = firebase.messaging(); + } + + await getToken(); +} + +async function getToken() { + console.log('request token'); + + try { + const token = await messaging.getToken({ + vapidKey: 'BA6niiIWa_QP2SXMTjS8gBtM3M7m0q0n0_ZWjECw3Z_iEFujzPG2VdAAvNFJ5btbgpEiRe2B80M4QKxRSxtmvDw', + }); + + if (token) { + firebaseToken.set(token); + loading.set(false); + console.log(token); + handleForegroundNotification(); + return token; + } else { + await requestPermission(); + } + } catch (err) { + console.error(err); + } +} + +function handleForegroundNotification() { + console.log('handle foreground notification'); + + messaging.onMessage((payload) => { + console.log('Received foreground message ', payload); + + navigator.serviceWorker.getRegistration('/firebase-cloud-messaging-push-scope').then((registration) => { + const { title, body, url } = payload.data; + + const notificationTitle = title; + const notificationOptions = { + body, + icon: '/favicon.png', + data: { + url, + }, + }; + + registration.showNotification(notificationTitle, notificationOptions); + }); + }); +} diff --git a/static/images/items/parametric_transformer.png b/static/images/items/parametric_transformer.png new file mode 100644 index 0000000000000000000000000000000000000000..bc171794207a1547640dc958337b760d044c67d7 GIT binary patch literal 61951 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 z Date: Sun, 4 Apr 2021 23:39:19 +0800 Subject: [PATCH 2/5] Update build script for the service worker --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 978a6688..06216b23 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "sapper dev", "build": "sapper build --legacy", - "export": "sapper export --legacy", + "export": "sapper export --legacy && cp __sapper__/build/firebase-messaging-sw.js __sapper__/export", "start": "node __sapper__/build" }, "dependencies": { From f51bbd5633f143719063d757f9c894570d9dd2ba Mon Sep 17 00:00:00 2001 From: Made Baruna Date: Sun, 4 Apr 2021 23:49:07 +0800 Subject: [PATCH 3/5] Fix env script --- scripts/createEnv.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/createEnv.js b/scripts/createEnv.js index 9d79a146..0573fb55 100644 --- a/scripts/createEnv.js +++ b/scripts/createEnv.js @@ -4,11 +4,11 @@ let envString = ''; envString += `GOOGLE_DRIVE_CLIENT_ID=${process.env.GOOGLE_DRIVE_CLIENT_ID}\n`; envString += `GOOGLE_DRIVE_API_KEY=${process.env.GOOGLE_DRIVE_API_KEY}\n`; envString += `API_HOST=${process.env.API_HOST}\n`; -envString += `FIREBASE_API_KEY=${FIREBASE_API_KEY}\n` -envString += `FIREBASE_AUTH_DOMAIN=${FIREBASE_AUTH_DOMAIN}\n` -envString += `FIREBASE_PROJECT_ID=${FIREBASE_PROJECT_ID}\n` -envString += `FIREBASE_STORAGE_BUCKET=${FIREBASE_STORAGE_BUCKET}\n` -envString += `FIREBASE_MESSAGING_SENDER_ID=${FIREBASE_MESSAGING_SENDER_ID}\n` -envString += `FIREBASE_APP_ID=${FIREBASE_APP_ID}\n` +envString += `FIREBASE_API_KEY=${process.env.FIREBASE_API_KEY}\n` +envString += `FIREBASE_AUTH_DOMAIN=${process.env.FIREBASE_AUTH_DOMAIN}\n` +envString += `FIREBASE_PROJECT_ID=${process.env.FIREBASE_PROJECT_ID}\n` +envString += `FIREBASE_STORAGE_BUCKET=${process.env.FIREBASE_STORAGE_BUCKET}\n` +envString += `FIREBASE_MESSAGING_SENDER_ID=${process.env.FIREBASE_MESSAGING_SENDER_ID}\n` +envString += `FIREBASE_APP_ID=${process.env.FIREBASE_APP_ID}\n` fs.writeFileSync('.env', envString); From 70ced1dfa7e56f5548fbfb03f2e46af583869244 Mon Sep 17 00:00:00 2001 From: Made Baruna Date: Mon, 5 Apr 2021 00:49:18 +0800 Subject: [PATCH 4/5] Fix firebase import bug --- src/locales/en.json | 1 + src/routes/reminder.svelte | 5 ++++- src/stores/firebase.js | 4 ---- src/template.html | 3 +++ 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index cb8a1ae9..c3d98f7e 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -473,6 +473,7 @@ "blocked": "Notification is blocked, the reminder notification will not work! Please enable it on your browser.", "desktop": "Desktop browser cannot receive notification if the browser is not running!", "early": "The notification may arrive earlier (about 1-10 minutes) because of the way we send the notification", + "allowNotification": "Please allow the notification prompt that shows up!", "transformer": "Parametric Transformer Reminder", "last": "Enter when you last used the Parametric Transformer", "countdown": "Enter countdown time of the Parametric Transformer (If you don't remember the exact time, you need to approximate it)", diff --git a/src/routes/reminder.svelte b/src/routes/reminder.svelte index 2a3fe406..e04be710 100644 --- a/src/routes/reminder.svelte +++ b/src/routes/reminder.svelte @@ -17,9 +17,9 @@ import { pushToast } from '../stores/toast'; import { + loading, firebaseToken, firstLoadNotification, - loading, loadingFirst, notificationAllowed, notificationSupported, @@ -198,6 +198,9 @@ {#if loadingSave}{/if} {$t('reminder.set')} + {#if $loading} +

{$t('reminder.allowNotification')}

+ {/if}
diff --git a/src/stores/firebase.js b/src/stores/firebase.js index f0a169e7..e1f23b7b 100644 --- a/src/stores/firebase.js +++ b/src/stores/firebase.js @@ -15,7 +15,6 @@ const firebaseConfig = { appId: __paimon.env.FIREBASE_APP_ID, }; -let firebase; let messaging; export async function firstLoadNotification() { @@ -65,9 +64,6 @@ async function initFirebase() { console.log('init firebase'); if (!messaging) { - firebase = (await import('firebase/app')).default; - await import('firebase/messaging'); - firebase.initializeApp(firebaseConfig); messaging = firebase.messaging(); } diff --git a/src/template.html b/src/template.html index 412b18c0..00f9764d 100644 --- a/src/template.html +++ b/src/template.html @@ -21,6 +21,9 @@ + + +