@swrve/web-sdk
Advanced tools
Comparing version 2.1.0 to 2.2.0
@@ -1,1 +0,1 @@ | ||
(()=>{function e(e,a,t){var i=new MessageChannel;i.port1.onmessage=function(e){e.data.error?reject(e.data.error):resolve(e.data)},clients.matchAll({includeUncontrolled:!0}).then((s=>{s.forEach((s=>{s.postMessage({event:JSON.stringify(e),type:a,body:t},[i.port2])}))}))}self.addEventListener("push",(a=>{var t;if(a.data&&(t=a.data.json()).data.swrve&&t.data.swrve._p){const i={body:t.body,data:{swrve:{title:t.data.swrve.title,p:t.data.swrve._p,sd:t.data.swrve._sd}}};t.image&&(i.image=t.image),t.icon&&(i.icon=t.icon),t.payload&&(i.data.payload=t.payload),a.waitUntil(Promise.all([new Promise((()=>{e(a,"swrve.push_received",{id:t.data.swrve._p})})),self.registration.showNotification(i.data.swrve.title,i)]))}})),self.addEventListener("notificationclick",(a=>{a.notification.close();let t=Promise.resolve();var i={id:a.notification.data.swrve.p,customPayload:a.notification.data.payload};a.notification.data.swrve.sd&&(i.deeplink=a.notification.data.swrve.sd,t=clients.openWindow(i.deeplink)),a.waitUntil(Promise.all([t,new Promise((()=>{e(a,"swrve.push_clicked",i)}))]))})),self.addEventListener("notificationclose",(a=>{a.waitUntil(Promise.all([new Promise((()=>{e(a,"swrve.push_closed",{})}))]))})),self.addEventListener("install",(function(e){self.skipWaiting()}))})(); | ||
(()=>{const e="swrve.push_clicked",t="swrve.push_received",r="swrve_push_events",a="swrve_users",s=["body","image","icon","payload"];function n(){return new Promise(((e,t)=>{const s=indexedDB.open("swrve_push_events_db",1);s.onupgradeneeded=e=>{const t=e.target.result;t.createObjectStore(a,{keyPath:"user_id",autoIncrement:!1}).createIndex("last_active","last_active",{unique:!1}),t.createObjectStore(r,{keyPath:"id",autoIncrement:!0}).createIndex("user_id","user_id",{unique:!1})},s.onsuccess=t=>{e(t.target.result)},s.onerror=e=>{t(new Error(`Failed to open database: ${e.target.error}`))}}))}async function o(){try{const e=await n(),t=e.transaction(a,"readonly"),r=t.objectStore(a).index("last_active").openCursor(null,"prev");let s=null;return r.onsuccess=t=>{const r=t.target.result;if(!r)throw new Error("No user found");s=r.value,e.close()},new Promise(((a,n)=>{r.onerror=t=>{e.close(),n(new Error(`Failed to retrieve current user: ${t.target.error}`))},t.oncomplete=()=>a(s)}))}catch(e){throw new Error(`Error initializing database: ${e.message}`)}}async function i(e){try{const t=await n(),a=t.transaction(r,"readwrite"),s=a.objectStore(r),o={...e,timestamp:Date.now()};return new Promise(((e,r)=>{a.oncomplete=()=>{t.close(),e()},a.onerror=e=>{t.close(),r(new Error(`Failed to store push data: ${e.target.error}`))},s.add(o)}))}catch(e){throw new Error(`Error initializing database: ${e.message}`)}}function c(e,t,r){var a=new MessageChannel;a.port1.onmessage=function(e){e.data.error?reject(e.data.error):resolve(e.data)},clients.matchAll({includeUncontrolled:!0}).then((s=>{s.forEach((s=>{s.postMessage({event:JSON.stringify(e),type:t,body:r},[a.port2])}))}))}self.addEventListener("push",(e=>{if(!e.data)return;const r=e.data.json();if(!r.data.swrve||!r.data.swrve._p)return;const a=function(e){const t={data:{swrve:{title:e.data.swrve.title,p:e.data.swrve._p,sd:e.data.swrve._sd}}};return s.forEach((r=>{e[r]&&(("payload"===r?t.data:t)[r]=e[r])})),t}(r);e.waitUntil((async()=>{try{const e=await o();await i({event_type:t,event:`Swrve.Messages.Push-${r.data.swrve._p}.delivered`,timestamp:Date.now(),user_id:e.user_id})}catch(e){console.error("Error storing push event data",e)}await Promise.all([new Promise((()=>{c(e,t,{id:r.data.swrve._p})})),self.registration.showNotification(a.data.swrve.title,a)])})())})),self.addEventListener("notificationclick",(t=>{t.notification.close();let r=Promise.resolve();var a={id:t.notification.data.swrve.p,customPayload:t.notification.data.payload};t.notification.data.swrve.sd&&(a.deeplink=t.notification.data.swrve.sd,r=clients.openWindow(a.deeplink)),t.waitUntil((async()=>{try{const t=await o();await i({event_type:e,event:`Swrve.Messages.Push-${a.id}.engaged`,timestamp:Date.now(),user_id:t.user_id})}catch(e){console.error("Error storing push event data:",e)}await Promise.all([r,new Promise((()=>{c(t,e,a)}))])})())})),self.addEventListener("notificationclose",(e=>{e.waitUntil(Promise.all([new Promise((()=>{c(e,"swrve.push_closed",{})}))]))})),self.addEventListener("install",(function(e){self.skipWaiting()})),self.addEventListener("message",(async e=>{try{if(e.data)switch(e.data.type){case"setUserSession":const t=await async function(e){try{const t=await n(),r=t.transaction(a,"readwrite"),s=r.objectStore(a);let o=await async function(e,t){return new Promise(((r,a)=>{const s=e.get(t);s.onsuccess=e=>{r(e.target.result)},s.onerror=()=>{a(new Error("Failed to get user record"))}}))}(s,e.user_id);const i=Date.now();return o?(o.last_active=i,s.put(o)):(o={...e,last_active:i},s.add(o)),new Promise(((e,a)=>{r.oncomplete=()=>{t.close(),e(o)},r.onerror=e=>{t.close(),a(new Error(`Failed to store current user: ${e.target.error}`))}}))}catch(e){throw new Error(`Error initializing database: ${e.message}`)}}({user_id:e.data.user_id});e.ports[0].postMessage({type:"userSession",data:t});break;case"fetchPushData":const s=await async function(e){try{const t=await n(),a=t.transaction(r,"readonly").objectStore(r).index("user_id").getAll(e);return new Promise(((e,r)=>{a.onsuccess=r=>{t.close();const a=r.target.result.sort(((e,t)=>e.timestamp-t.timestamp));e(a)},a.onerror=e=>{t.close(),r(new Error(`Failed to retrieve push data: ${e.target.error}`))}}))}catch(e){throw new Error(`Error initializing database: ${e.message}`)}}(e.data.user_id);e.ports[0].postMessage({type:"pushData",data:s}),s.length>0&&await async function(e){try{const t=await n(),a=t.transaction(r,"readwrite").objectStore(r);a.index("user_id").getAll(e).onsuccess=e=>{e.target.result.forEach((e=>{a.delete(e.id)})),t.close()}}catch(e){throw new Error(`Error initializing database: ${e.message}`)}}(e.data.user_id);break;default:throw new Error("Unregistered message event: \n",e)}}catch(e){console.error(e)}}))})(); |
@@ -9,4 +9,7 @@ import { ISwrveSDKConfig } from "../interfaces/ISwrveSDKConfig"; | ||
private _isInitialized; | ||
private _eventFlushFreqency; | ||
private _pushEventLoopTimer; | ||
private _webPushToken; | ||
private _webPushApiKey; | ||
private _userId; | ||
private _config; | ||
@@ -19,9 +22,8 @@ private callBackPushReceived; | ||
get WebPushApiKey(): string; | ||
init(webPushApiKey: string): void; | ||
registerPush(onSuccess?: () => void, onFailure?: (err: Error) => void): void; | ||
unregisterPush(onSuccess?: () => void, onFailure?: (err: Error) => void): void; | ||
init(webPushApiKey: string, userId: string): void; | ||
registerPush(onSuccess?: () => void, onFailure?: (err: Error) => void): Promise<void>; | ||
unregisterPush(onSuccess?: () => void, onFailure?: (err: Error) => void): Promise<void>; | ||
syncServiceWorkerThread(): Promise<void>; | ||
isPushSupported(): boolean; | ||
onPushReceived(event: any): void; | ||
onPushClicked(event: any): void; | ||
onPushClosed(event: any): void; | ||
shutdown(): void; | ||
private registerPushListeners; | ||
@@ -32,5 +34,8 @@ private pushHandler; | ||
private sendBrowserPermissions; | ||
private flushPushEventQueue; | ||
private fetchPushEvents; | ||
private setPushSession; | ||
private browserHasPermissionsAccess; | ||
private static sendPermissionsUpdate; | ||
private browserHasPermissionsAccess; | ||
} | ||
export default SwrvePushManager; |
{ | ||
"name": "@swrve/web-sdk", | ||
"version": "2.1.0", | ||
"version": "2.2.0", | ||
"author": "Swrve Inc.", | ||
@@ -62,4 +62,4 @@ "license": "Apache-2.0", | ||
"dependencies": { | ||
"@swrve/web-core": "1.1.0" | ||
"@swrve/web-core": "1.2.0" | ||
} | ||
} |
Sorry, the diff of this file is too big to display
162760
398
+ Added@swrve/web-core@1.2.0(transitive)
- Removed@swrve/web-core@1.1.0(transitive)
Updated@swrve/web-core@1.2.0