ngx-pwa
Version:
Provides functionality around the progressive web app functionality in angular. Most notably the an approach to cache POST, UPDATE and DELETE requests.
45 lines • 6.04 kB
JavaScript
import { firstValueFrom } from 'rxjs';
/**
* A base service that provides functionality regarding notifications.
*/
export class NgxPwaNotificationService {
swPush;
http;
// eslint-disable-next-line jsdoc/require-returns
/**
* Whether or not the current user has notifications enabled.
*/
get hasNotificationsEnabled() {
return this.swPush.isEnabled;
}
constructor(swPush, http) {
this.swPush = swPush;
this.http = http;
}
/**
* Asks the user for permission to use push notifications.
*/
async askForNotificationPermission() {
const pushSubscription = await this.swPush.requestSubscription({ serverPublicKey: this.VAPID_PUBLIC_KEY });
void this.enableNotifications(pushSubscription);
}
/**
* Enables notifications by sending a push subscription to the server.
* @param pushSubscription - The push subscription to send to the server.
*/
async enableNotifications(pushSubscription) {
await firstValueFrom(this.http.post(this.API_ENABLE_NOTIFICATIONS_URL, pushSubscription));
}
/**
* Disables notifications.
*/
async disableNotifications() {
const pushSubscription = await firstValueFrom(this.swPush.subscription);
if (pushSubscription == undefined) {
return;
}
await firstValueFrom(this.http.post(this.API_DISABLE_NOTIFICATIONS_URL, pushSubscription));
await this.swPush.unsubscribe();
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtcHdhL3NyYy9zZXJ2aWNlcy9ub3RpZmljYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDOztHQUVHO0FBQ0gsTUFBTSxPQUFnQix5QkFBeUI7SUEwQmQ7SUFBaUM7SUFSOUQsaURBQWlEO0lBQ2pEOztPQUVHO0lBQ0gsSUFBSSx1QkFBdUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsWUFBNkIsTUFBYyxFQUFtQixJQUFnQjtRQUFqRCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQW1CLFNBQUksR0FBSixJQUFJLENBQVk7SUFBRyxDQUFDO0lBRWxGOztPQUVHO0lBQ0gsS0FBSyxDQUFDLDRCQUE0QjtRQUM5QixNQUFNLGdCQUFnQixHQUFxQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsRUFBRSxlQUFlLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUM3SCxLQUFLLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7O09BR0c7SUFDTyxLQUFLLENBQUMsbUJBQW1CLENBQUMsZ0JBQWtDO1FBQ2xFLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLG9CQUFvQjtRQUN0QixNQUFNLGdCQUFnQixHQUE0QixNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pHLElBQUksZ0JBQWdCLElBQUksU0FBUyxFQUFFLENBQUM7WUFDaEMsT0FBTztRQUNYLENBQUM7UUFDRCxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgU3dQdXNoIH0gZnJvbSAnQGFuZ3VsYXIvc2VydmljZS13b3JrZXInO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBBIGJhc2Ugc2VydmljZSB0aGF0IHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgcmVnYXJkaW5nIG5vdGlmaWNhdGlvbnMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZ3hQd2FOb3RpZmljYXRpb25TZXJ2aWNlIHtcblxuICAgIC8qKlxuICAgICAqIFRoZSB1cmwgdG8gc2VuZCBhIG5ldyBwdXNoIHN1YnNjcmlwdGlvbiB0by5cbiAgICAgKi9cbiAgICBhYnN0cmFjdCByZWFkb25seSBBUElfRU5BQkxFX05PVElGSUNBVElPTlNfVVJMOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgdXJsIHRvIHNlbmQgYSByZXF1ZXN0IHRvIHdoZW4gd2FudGluZyB0byBkaXNhYmxlIG5vdGlmaWNhdGlvbnMuXG4gICAgICovXG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgQVBJX0RJU0FCTEVfTk9USUZJQ0FUSU9OU19VUkw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIFRoZSBwdWJsaWMga2V5IG9mIHlvdXIgVkFQSUQga2V5IHBhaXIuXG4gICAgICogSXMgbmVlZGVkIHRvIHJlY2VpdmUgYW5kIGRpc3BsYXkgcHVzaCBub3RpZmljYXRpb25zLlxuICAgICAqL1xuICAgIGFic3RyYWN0IHJlYWRvbmx5IFZBUElEX1BVQkxJQ19LRVk6IHN0cmluZztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLXJldHVybnNcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0aGUgY3VycmVudCB1c2VyIGhhcyBub3RpZmljYXRpb25zIGVuYWJsZWQuXG4gICAgICovXG4gICAgZ2V0IGhhc05vdGlmaWNhdGlvbnNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zd1B1c2guaXNFbmFibGVkO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgc3dQdXNoOiBTd1B1c2gsIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCkge31cblxuICAgIC8qKlxuICAgICAqIEFza3MgdGhlIHVzZXIgZm9yIHBlcm1pc3Npb24gdG8gdXNlIHB1c2ggbm90aWZpY2F0aW9ucy5cbiAgICAgKi9cbiAgICBhc3luYyBhc2tGb3JOb3RpZmljYXRpb25QZXJtaXNzaW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBwdXNoU3Vic2NyaXB0aW9uOiBQdXNoU3Vic2NyaXB0aW9uID0gYXdhaXQgdGhpcy5zd1B1c2gucmVxdWVzdFN1YnNjcmlwdGlvbih7IHNlcnZlclB1YmxpY0tleTogdGhpcy5WQVBJRF9QVUJMSUNfS0VZIH0pO1xuICAgICAgICB2b2lkIHRoaXMuZW5hYmxlTm90aWZpY2F0aW9ucyhwdXNoU3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIG5vdGlmaWNhdGlvbnMgYnkgc2VuZGluZyBhIHB1c2ggc3Vic2NyaXB0aW9uIHRvIHRoZSBzZXJ2ZXIuXG4gICAgICogQHBhcmFtIHB1c2hTdWJzY3JpcHRpb24gLSBUaGUgcHVzaCBzdWJzY3JpcHRpb24gdG8gc2VuZCB0byB0aGUgc2VydmVyLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBhc3luYyBlbmFibGVOb3RpZmljYXRpb25zKHB1c2hTdWJzY3JpcHRpb246IFB1c2hTdWJzY3JpcHRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwLnBvc3QodGhpcy5BUElfRU5BQkxFX05PVElGSUNBVElPTlNfVVJMLCBwdXNoU3Vic2NyaXB0aW9uKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgbm90aWZpY2F0aW9ucy5cbiAgICAgKi9cbiAgICBhc3luYyBkaXNhYmxlTm90aWZpY2F0aW9ucygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3QgcHVzaFN1YnNjcmlwdGlvbjogUHVzaFN1YnNjcmlwdGlvbiB8IG51bGwgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnN3UHVzaC5zdWJzY3JpcHRpb24pO1xuICAgICAgICBpZiAocHVzaFN1YnNjcmlwdGlvbiA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHAucG9zdCh0aGlzLkFQSV9ESVNBQkxFX05PVElGSUNBVElPTlNfVVJMLCBwdXNoU3Vic2NyaXB0aW9uKSk7XG4gICAgICAgIGF3YWl0IHRoaXMuc3dQdXNoLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufSJdfQ==