d2aura 23.0.62 → 23.0.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ import AbstractApi from "../abstractApi";
2
+ import { D2WebApi } from "d2jsapi";
3
+ export declare class WebPushApi extends AbstractApi {
4
+ constructor(d2Api: D2WebApi);
5
+ saveSubscription(subscription: PushSubscription): Promise<void>;
6
+ deleteSubscription(subscription: PushSubscription): Promise<void>;
7
+ }
@@ -0,0 +1,21 @@
1
+ import AbstractApi from "../abstractApi";
2
+ export class WebPushApi extends AbstractApi {
3
+ constructor(d2Api) {
4
+ super(d2Api);
5
+ }
6
+ async saveSubscription(subscription) {
7
+ const subscriptionJson = JSON.stringify(subscription);
8
+ const subscriptionObject = JSON.parse(subscriptionJson);
9
+ await this.callRpc({
10
+ eventName: "E.web_push",
11
+ rpcName: "saveSubscription",
12
+ }, subscription.endpoint, subscriptionObject.keys.auth, subscriptionObject.keys.p256dh);
13
+ }
14
+ async deleteSubscription(subscription) {
15
+ await this.callRpc({
16
+ eventName: "E.web_push",
17
+ rpcName: "deleteSubscription",
18
+ }, subscription.endpoint);
19
+ }
20
+ }
21
+ //# sourceMappingURL=webPushApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webPushApi.js","sourceRoot":"","sources":["../../../../api/webPush/webPushApi.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,gBAAgB,CAAC;AAGzC,MAAM,OAAO,UAAW,SAAQ,WAAW;IACvC,YAAY,KAAe;QACvB,KAAK,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,YAA8B;QACjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QACtD,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAExD,MAAM,IAAI,CAAC,OAAO,CACd;YACI,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE,kBAAkB;SAC9B,EACD,YAAY,CAAC,QAAQ,EACrB,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAC5B,kBAAkB,CAAC,IAAI,CAAC,MAAM,CACjC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,YAA8B;QACnD,MAAM,IAAI,CAAC,OAAO,CACd;YACI,SAAS,EAAE,YAAY;YACvB,OAAO,EAAE,oBAAoB;SAChC,EACD,YAAY,CAAC,QAAQ,CACxB,CAAC;IACN,CAAC;CAEJ","sourcesContent":["import AbstractApi from \"../abstractApi\";\r\nimport {D2WebApi} from \"d2jsapi\";\r\n\r\nexport class WebPushApi extends AbstractApi {\r\n constructor(d2Api: D2WebApi) {\r\n super(d2Api);\r\n }\r\n\r\n async saveSubscription(subscription: PushSubscription) {\r\n const subscriptionJson = JSON.stringify(subscription);\r\n const subscriptionObject = JSON.parse(subscriptionJson);\r\n\r\n await this.callRpc(\r\n {\r\n eventName: \"E.web_push\",\r\n rpcName: \"saveSubscription\",\r\n },\r\n subscription.endpoint,\r\n subscriptionObject.keys.auth,\r\n subscriptionObject.keys.p256dh,\r\n );\r\n }\r\n\r\n async deleteSubscription(subscription: PushSubscription) {\r\n await this.callRpc(\r\n {\r\n eventName: \"E.web_push\",\r\n rpcName: \"deleteSubscription\",\r\n },\r\n subscription.endpoint,\r\n );\r\n }\r\n\r\n}"]}
@@ -0,0 +1,7 @@
1
+ import { WebPushApi } from "./webPushApi";
2
+ export default class WebPushUtils {
3
+ static initPush(webPushApi: WebPushApi): Promise<void>;
4
+ static getSubscription(): Promise<PushSubscription | null>;
5
+ static registerServiceWorker(path: string): Promise<void>;
6
+ static urlBase64ToUint8Array(base64String: string): Uint8Array;
7
+ }
@@ -0,0 +1,26 @@
1
+ export default class WebPushUtils {
2
+ static async initPush(webPushApi) {
3
+ if (navigator.serviceWorker) {
4
+ await navigator.serviceWorker.register("./push-worker.js");
5
+ this.getSubscription().then(async (subscription) => {
6
+ if (subscription) {
7
+ await webPushApi.saveSubscription(subscription);
8
+ }
9
+ });
10
+ }
11
+ else {
12
+ console.warn("Service workers or Push API are not supported on this browser/origin");
13
+ }
14
+ }
15
+ static async getSubscription() {
16
+ const registration = await navigator.serviceWorker.ready;
17
+ return await registration.pushManager.getSubscription();
18
+ }
19
+ static async registerServiceWorker(path) {
20
+ await navigator.serviceWorker.register(path);
21
+ }
22
+ static urlBase64ToUint8Array(base64String) {
23
+ return Uint8Array.from(atob(base64String.replace(/-/g, "+").replace(/_/g, "/")), c => c.charCodeAt(0));
24
+ }
25
+ }
26
+ //# sourceMappingURL=webPushUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webPushUtils.js","sourceRoot":"","sources":["../../../../api/webPush/webPushUtils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,YAAY;IAE7B,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAsB;QACxC,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;YAC1B,MAAM,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;YAC3D,IAAI,CAAC,eAAe,EAAE,CAAC,IAAI,CAAC,KAAK,EAAC,YAAY,EAAC,EAAE;gBAC7C,IAAI,YAAY,EAAE,CAAC;oBACf,MAAM,UAAU,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;gBACpD,CAAC;YACL,CAAC,CAAC,CAAA;QACN,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;QACzF,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,eAAe;QACxB,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC;QACzD,OAAO,MAAM,YAAY,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAY;QAC3C,MAAM,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,qBAAqB,CAAC,YAAoB;QAC7C,OAAO,UAAU,CAAC,IAAI,CAClB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,EACxD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CACvB,CAAA;IACL,CAAC;CAEJ","sourcesContent":["import {WebPushApi} from \"./webPushApi\";\r\n\r\nexport default class WebPushUtils {\r\n\r\n static async initPush(webPushApi: WebPushApi) {\r\n if (navigator.serviceWorker) {\r\n await navigator.serviceWorker.register(\"./push-worker.js\");\r\n this.getSubscription().then(async subscription => {\r\n if (subscription) {\r\n await webPushApi.saveSubscription(subscription);\r\n }\r\n })\r\n } else {\r\n console.warn(\"Service workers or Push API are not supported on this browser/origin\");\r\n }\r\n }\r\n\r\n static async getSubscription(): Promise<PushSubscription | null> {\r\n const registration = await navigator.serviceWorker.ready;\r\n return await registration.pushManager.getSubscription();\r\n }\r\n\r\n static async registerServiceWorker(path: string): Promise<void> {\r\n await navigator.serviceWorker.register(path);\r\n }\r\n\r\n static urlBase64ToUint8Array(base64String: string) {\r\n return Uint8Array.from(\r\n atob(base64String.replace(/-/g, \"+\").replace(/_/g, \"/\")),\r\n c => c.charCodeAt(0)\r\n )\r\n }\r\n\r\n}"]}
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ import { WebPushApi } from "../../../api/webPush/webPushApi";
3
+ interface Props {
4
+ webPushApi: WebPushApi;
5
+ }
6
+ interface State {
7
+ loading: boolean;
8
+ isSubscribed: boolean;
9
+ }
10
+ export default class WebPushSwitch extends React.Component<Props, State> {
11
+ constructor(props: Readonly<Props>);
12
+ componentDidMount(): void;
13
+ private updateSubscriptionState;
14
+ private subscribe;
15
+ private unsubscribe;
16
+ render(): React.JSX.Element;
17
+ }
18
+ export {};
@@ -0,0 +1,67 @@
1
+ import React from "react";
2
+ import { Switch } from "antd";
3
+ import i18n from "d2core/i18n/i18n";
4
+ import WebPushUtils from "../../../api/webPush/webPushUtils";
5
+ export default class WebPushSwitch extends React.Component {
6
+ constructor(props) {
7
+ super(props);
8
+ this.state = {
9
+ loading: true,
10
+ isSubscribed: false,
11
+ };
12
+ }
13
+ componentDidMount() {
14
+ this.updateSubscriptionState();
15
+ }
16
+ updateSubscriptionState() {
17
+ WebPushUtils.getSubscription().then(subscription => {
18
+ this.setState({
19
+ isSubscribed: subscription !== null,
20
+ loading: false,
21
+ });
22
+ });
23
+ }
24
+ async subscribe() {
25
+ const applicationServerKey = "BJBAchFwjP4tD3E1TQP3veiysfWtAt4aYU3Ak-UnLi01I3oXrJvLefc0Ce0jbl2HFfd3u5LRFKa86Nawmp2Upz0";
26
+ const permission = await Notification.requestPermission();
27
+ if (permission !== "granted") {
28
+ alert("Notifications not allowed");
29
+ return;
30
+ }
31
+ const registration = await navigator.serviceWorker.ready;
32
+ const subscription = await registration.pushManager.subscribe({
33
+ userVisibleOnly: true,
34
+ applicationServerKey: WebPushUtils.urlBase64ToUint8Array(applicationServerKey),
35
+ });
36
+ await this.props.webPushApi.saveSubscription(subscription);
37
+ }
38
+ async unsubscribe() {
39
+ const subscription = await WebPushUtils.getSubscription();
40
+ if (subscription) {
41
+ const success = await subscription.unsubscribe();
42
+ if (success) {
43
+ console.log("Unsubscribed: ", subscription.endpoint);
44
+ await this.props.webPushApi.deleteSubscription(subscription);
45
+ }
46
+ else {
47
+ console.warn("Failed to unsubscribe.");
48
+ }
49
+ }
50
+ else {
51
+ console.log("No subscription found.");
52
+ }
53
+ }
54
+ render() {
55
+ return (React.createElement(Switch, { loading: this.state.loading, checked: this.state.isSubscribed, checkedChildren: i18n("Notifications"), unCheckedChildren: i18n("Notifications"), onChange: async (checked) => {
56
+ this.setState({ loading: true });
57
+ if (checked) {
58
+ await this.subscribe();
59
+ }
60
+ else {
61
+ await this.unsubscribe();
62
+ }
63
+ this.updateSubscriptionState();
64
+ } }));
65
+ }
66
+ }
67
+ //# sourceMappingURL=webPushSwitch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webPushSwitch.js","sourceRoot":"","sources":["../../../../../coreui/components/webPush/webPushSwitch.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from \"react\";\r\nimport {Switch} from \"antd\";\r\nimport i18n from \"d2core/i18n/i18n\";\r\nimport {WebPushApi} from \"../../../api/webPush/webPushApi\";\r\nimport WebPushUtils from \"../../../api/webPush/webPushUtils\";\r\n\r\ninterface Props {\r\n webPushApi: WebPushApi\r\n}\r\n\r\ninterface State {\r\n loading: boolean\r\n isSubscribed: boolean\r\n}\r\n\r\nexport default class WebPushSwitch extends React.Component<Props, State> {\r\n constructor(props: Readonly<Props>) {\r\n super(props);\r\n\r\n this.state = {\r\n loading: true,\r\n isSubscribed: false,\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.updateSubscriptionState();\r\n }\r\n\r\n private updateSubscriptionState() {\r\n WebPushUtils.getSubscription().then(subscription => {\r\n this.setState({\r\n isSubscribed: subscription !== null,\r\n loading: false,\r\n });\r\n });\r\n }\r\n\r\n private async subscribe() {\r\n // TODO get from smartweb.json\r\n const applicationServerKey = \"BJBAchFwjP4tD3E1TQP3veiysfWtAt4aYU3Ak-UnLi01I3oXrJvLefc0Ce0jbl2HFfd3u5LRFKa86Nawmp2Upz0\";\r\n\r\n // 1. Ask for notification permission\r\n const permission = await Notification.requestPermission();\r\n if (permission !== \"granted\") {\r\n alert(\"Notifications not allowed\");\r\n return;\r\n }\r\n\r\n // 2. Get service worker\r\n const registration = await navigator.serviceWorker.ready;\r\n\r\n // 3. Subscribe to push\r\n const subscription = await registration.pushManager.subscribe({\r\n userVisibleOnly: true,\r\n applicationServerKey: WebPushUtils.urlBase64ToUint8Array(applicationServerKey),\r\n });\r\n // console.log(\"Subscription:\", subscription.toJSON());\r\n\r\n await this.props.webPushApi.saveSubscription(subscription);\r\n }\r\n\r\n private async unsubscribe() {\r\n const subscription = await WebPushUtils.getSubscription();\r\n\r\n if (subscription) {\r\n const success = await subscription.unsubscribe();\r\n\r\n if (success) {\r\n console.log(\"Unsubscribed: \", subscription.endpoint);\r\n await this.props.webPushApi.deleteSubscription(subscription);\r\n } else {\r\n console.warn(\"Failed to unsubscribe.\");\r\n }\r\n } else {\r\n console.log(\"No subscription found.\");\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <Switch\r\n loading={this.state.loading}\r\n checked={this.state.isSubscribed}\r\n checkedChildren={i18n(\"Notifications\")}\r\n unCheckedChildren={i18n(\"Notifications\")}\r\n onChange={async checked => {\r\n this.setState({loading: true});\r\n if (checked) {\r\n await this.subscribe();\r\n } else {\r\n await this.unsubscribe()\r\n }\r\n\r\n this.updateSubscriptionState();\r\n }}\r\n />\r\n );\r\n }\r\n\r\n}"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "d2aura",
3
- "version": "23.0.62",
3
+ "version": "23.0.64",
4
4
  "description": "D2 AURA - Advanced User Interface Resource Architecture",
5
5
  "author": "Ipesoft s.r.o.",
6
6
  "license": "MIT",