diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2017-11-21 07:20:13 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-11-21 07:20:13 +0900 |
| commit | 1e52060c5f06b153b9495cca84af97e7788018bb (patch) | |
| tree | aee38ce45c74b58905128dd1674e98c7cf6f266f /src/api/common | |
| parent | Merge branch 'master' of https://github.com/syuilo/misskey (diff) | |
| parent | Fix bug (diff) | |
| download | misskey-1e52060c5f06b153b9495cca84af97e7788018bb.tar.gz misskey-1e52060c5f06b153b9495cca84af97e7788018bb.tar.bz2 misskey-1e52060c5f06b153b9495cca84af97e7788018bb.zip | |
Merge pull request #933 from syuilo/sw
ServiceWorker support
Diffstat (limited to 'src/api/common')
| -rw-r--r-- | src/api/common/push-sw.ts | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/api/common/push-sw.ts b/src/api/common/push-sw.ts new file mode 100644 index 0000000000..782a4a6a6c --- /dev/null +++ b/src/api/common/push-sw.ts @@ -0,0 +1,48 @@ +const push = require('web-push'); +import * as mongo from 'mongodb'; +import Subscription from '../models/sw-subscription'; +import config from '../../conf'; + +if (config.sw) { + push.setGCMAPIKey(config.sw.gcm_api_key); +} + +export default async function(userId: mongo.ObjectID | string, type, body?) { + if (!config.sw) return; + + if (typeof userId === 'string') { + userId = new mongo.ObjectID(userId); + } + + // Fetch + const subscriptions = await Subscription.find({ + user_id: userId + }); + + subscriptions.forEach(subscription => { + const pushSubscription = { + endpoint: subscription.endpoint, + keys: { + auth: subscription.auth, + p256dh: subscription.publickey + } + }; + + push.sendNotification(pushSubscription, JSON.stringify({ + type, body + })).catch(err => { + //console.log(err.statusCode); + //console.log(err.headers); + //console.log(err.body); + + if (err.statusCode == 410) { + Subscription.remove({ + user_id: userId, + endpoint: subscription.endpoint, + auth: subscription.auth, + publickey: subscription.publickey + }); + } + }); + }); +} |