summaryrefslogtreecommitdiff
path: root/src/api/common/push-sw.ts
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2017-11-21 03:40:09 +0900
committersyuilo <syuilotan@yahoo.co.jp>2017-11-21 03:40:09 +0900
commit1436617aab030fa5b3760a3eeae37a1cdeeba2df (patch)
tree5ac701a811de8be79e8e83643752818ee4b2cd1d /src/api/common/push-sw.ts
parentv3165 (diff)
downloadsharkey-1436617aab030fa5b3760a3eeae37a1cdeeba2df.tar.gz
sharkey-1436617aab030fa5b3760a3eeae37a1cdeeba2df.tar.bz2
sharkey-1436617aab030fa5b3760a3eeae37a1cdeeba2df.zip
wip
Diffstat (limited to 'src/api/common/push-sw.ts')
-rw-r--r--src/api/common/push-sw.ts44
1 files changed, 44 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..927dc50635
--- /dev/null
+++ b/src/api/common/push-sw.ts
@@ -0,0 +1,44 @@
+const push = require('web-push');
+import * as mongo from 'mongodb';
+import Subscription from '../models/sw-subscription';
+import config from '../../conf';
+
+push.setGCMAPIKey(config.sw.gcm_api_key);
+
+export default async function(userId: mongo.ObjectID | string, type, body?) {
+ 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
+ });
+ }
+ });
+ });
+}