93 lines
2.4 KiB
JavaScript
93 lines
2.4 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
/** `ChromePushSubscription` instances are passed to all subscription callbacks. */
|
|
export class ChromePushSubscription {
|
|
#props;
|
|
|
|
constructor(props) {
|
|
this.#props = props;
|
|
}
|
|
|
|
QueryInterface = ChromeUtils.generateQI(["nsIPushSubscription"]);
|
|
|
|
/** The URL for sending messages to this subscription. */
|
|
get endpoint() {
|
|
return this.#props.endpoint;
|
|
}
|
|
|
|
/** The last time a message was sent to this subscription. */
|
|
get lastPush() {
|
|
return this.#props.lastPush;
|
|
}
|
|
|
|
/** The total number of messages sent to this subscription. */
|
|
get pushCount() {
|
|
return this.#props.pushCount;
|
|
}
|
|
|
|
/** The number of remaining background messages that can be sent to this
|
|
* subscription, or -1 of the subscription is exempt from the quota.
|
|
*/
|
|
get quota() {
|
|
return this.#props.quota;
|
|
}
|
|
|
|
/**
|
|
* Indicates whether this subscription was created with the system principal.
|
|
* System subscriptions are exempt from the background message quota and
|
|
* permission checks.
|
|
*/
|
|
get isSystemSubscription() {
|
|
return !!this.#props.systemRecord;
|
|
}
|
|
|
|
/** The private key used to decrypt incoming push messages, in JWK format */
|
|
get p256dhPrivateKey() {
|
|
return this.#props.p256dhPrivateKey;
|
|
}
|
|
|
|
/**
|
|
* Indicates whether this subscription is subject to the background message
|
|
* quota.
|
|
*/
|
|
quotaApplies() {
|
|
return this.quota >= 0;
|
|
}
|
|
|
|
/**
|
|
* Indicates whether this subscription exceeded the background message quota,
|
|
* or the user revoked the notification permission. The caller must request a
|
|
* new subscription to continue receiving push messages.
|
|
*/
|
|
isExpired() {
|
|
return this.quota === 0;
|
|
}
|
|
|
|
/**
|
|
* Returns a key for encrypting messages sent to this subscription. JS
|
|
* callers receive the key buffer as a return value, while C++ callers
|
|
* receive the key size and buffer as out parameters.
|
|
*/
|
|
getKey(name) {
|
|
switch (name) {
|
|
case "p256dh":
|
|
return this.#getRawKey(this.#props.p256dhKey);
|
|
|
|
case "auth":
|
|
return this.#getRawKey(this.#props.authenticationSecret);
|
|
|
|
case "appServer":
|
|
return this.#getRawKey(this.#props.appServerKey);
|
|
}
|
|
return [];
|
|
}
|
|
|
|
#getRawKey(key) {
|
|
if (!key) {
|
|
return [];
|
|
}
|
|
return new Uint8Array(key);
|
|
}
|
|
}
|