summaryrefslogtreecommitdiff
path: root/src/api/common
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2017-11-21 07:20:13 +0900
committerGitHub <noreply@github.com>2017-11-21 07:20:13 +0900
commit1e52060c5f06b153b9495cca84af97e7788018bb (patch)
treeaee38ce45c74b58905128dd1674e98c7cf6f266f /src/api/common
parentMerge branch 'master' of https://github.com/syuilo/misskey (diff)
parentFix bug (diff)
downloadmisskey-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.ts48
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
+ });
+ }
+ });
+ });
+}