@seeka-labs/sdk-apps-server-host 3.2.3 → 3.3.1

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.
@@ -1 +1 @@
1
- "use strict";var ue=Object.create;var y=Object.defineProperty;var fe=Object.getOwnPropertyDescriptor;var ge=Object.getOwnPropertyNames;var Ie=Object.getPrototypeOf,me=Object.prototype.hasOwnProperty;var Ae=(e,t)=>{for(var n in t)y(e,n,{get:t[n],enumerable:!0})},V=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of ge(t))!me.call(e,a)&&a!==n&&y(e,a,{get:()=>t[a],enumerable:!(s=fe(t,a))||s.enumerable});return e};var I=(e,t,n)=>(n=e!=null?ue(Ie(e)):{},V(t||!e||!e.__esModule?y(n,"default",{value:e,enumerable:!0}):n,e)),ke=e=>V(y({},"__esModule",{value:!0}),e);var Le={};Ae(Le,{appLogger:()=>re,backgroundJobLogger:()=>Pe,checkAuth:()=>ne,childLogger:()=>k,connect:()=>z,createOrUpdateInstallation:()=>xe,deleteInstallation:()=>he,disconnect:()=>Y,generateAppUiHttpRequestResponse:()=>Ee,getAccessTokenAndCheck:()=>F,getKey:()=>C,getList:()=>$,getOrCreate:()=>we,getOrCreateClient:()=>u,getSeekaBrowserPlugin:()=>Re,getSeekaBrowserPluginByName:()=>ce,isConnected:()=>b,listInstallations:()=>ye,remove:()=>H,set:()=>D,startServices:()=>U,stopServices:()=>Ce,tryGet:()=>B,tryGetInstallation:()=>P,webhookLogger:()=>ve});module.exports=ke(Le);var X=require("redis"),h=I(require("winston")),Se=process.env.REDIS_CONNECTION_TLS==="true"?"rediss://":"redis://",Te=`${Se}${process.env.REDIS_CONNECTION_USER}:${process.env.REDIS_CONNECTION_PASSWORD}@${process.env.REDIS_CONNECTION_HOST}:${process.env.REDIS_CONNECTION_PORT}`,x,u=e=>x||(x=(0,X.createClient)({url:Te,disableClientInfo:!0}).on("error",t=>e.error("Redis Client ",{ex:h.exceptions.getAllInfo(t)})),x),z=async e=>{await(await u(e)).connect()},b=async e=>(await u(e)).isOpen,Y=async e=>{await(await u(e)).destroy()},Z=e=>`seeka:app:${process.env.SEEKA_APP_ID}:${e}`,C=(e,t)=>`${Z(e)}:${t}`;async function we(e,t,n,s="string",a){let r=C(e,t),o=await u(a),p=await ee(o,r);return p?JSON.parse(p):(s==="json"?await o.json.set(r,"$",n):await o.set(r,JSON.stringify(n)),n)}async function B(e,t,n="string",s){let a=C(e,t),r=await u(s);if(n==="json"){let o=await r.json.get(a);if(o)return o}else{let o=await ee(r,a);if(o)return JSON.parse(o)}return null}async function $(e,t){let n=Z(e),s=await u(t),a=await s.keys(`${n}:*`),r=await s.mGet(a);return r?r.filter(o=>!!o).map(o=>JSON.parse(o)):[]}async function D(e,t,n,s="string",a){let r=C(e,t),o=await u(a);s==="json"?await o.json.set(r,"$",n):await o.set(r,JSON.stringify(n))}async function H(e,t,n){let s=C(e,t);await(await u(n)).del(s)}async function ee(e,t){let n=await e.get(t);return typeof n=="string"?n:n?n.toString():""}var U=async e=>{e.debug(`Trying to connect to Redis - ${process.env.REDIS_CONNECTION_HOST}`);try{await b(e)?e.verbose(`Redis already connected - ${process.env.REDIS_CONNECTION_HOST}`):(e.profile("service.redis.connect"),await z(e),e.profile("service.redis.connect"),e.debug(`Redis connected - ${process.env.REDIS_CONNECTION_HOST}`))}catch(t){throw e.error(`Failed to connect to Redis - ${process.env.REDIS_CONNECTION_HOST}`,{ex:h.exceptions.getAllInfo(t)}),t}},Ce=async e=>{e.debug(`Trying to disconnect from Redis - ${process.env.REDIS_CONNECTION_HOST}`);try{await b(e)===!1?e.verbose(`Redis already disconnected - ${process.env.REDIS_CONNECTION_HOST}`):(e.profile("service.redis.disconnect"),await Y(e),e.profile("service.redis.disconnect"),e.verbose(`Redis disconnected - ${process.env.REDIS_CONNECTION_HOST}`))}catch(t){throw e.error(`Failed to disconnect from Redis - ${process.env.REDIS_CONNECTION_HOST}`,{ex:h.exceptions.getAllInfo(t)}),t}};var v="install",P=async(e,t,n)=>{let s=await B(v,e,"string",n);if(s==null&&t)throw n.error(`Seeka installation ${e} not found`),new Error(`Seeka installation ${e} not found`);return s},ye=async e=>await $(v,e),xe=async(e,t)=>{e.installationState||(e.installationState={}),e.installedAt||(e.installedAt=new Date().toISOString());let n=await P(e.applicationInstallId,!1,t)===null;return await D(v,e.applicationInstallId,e,"string",t),t.info(n?"Created installation state":"Updated installation state",{applicationInstallId:e.applicationInstallId,organisationId:e.organisationId,organisationBrandId:e.organisationBrandId}),e},he=async(e,t)=>{await H(v,e,t),t.info("Deleted installation state",{applicationInstallId:e})};var E=e=>"seeka_app_"+e+"_at_app",N=e=>"seeka_app_"+e+"_at_core",j="X-Seeka-App-Token",W="X-Seeka-CoreApi-Token",_="at_app",O="at_core";var te=I(require("jsonwebtoken"));var F=async(e,t,n,s)=>{let a=new URL(e),r=t.get("Cookie"),o=a.searchParams.get(_)||"";if(!o&&t.get(j)&&(o=t.get(j)?.split("Bearer ")[1]),!o&&r){let i=r.split(";").find(d=>d.trim().startsWith(E(process.env.SEEKA_APP_ID)));i&&(o=i.split("=")[1])}let p=a.searchParams.get(O)||"";if(!p&&t.get(W)&&(p=t.get(W)?.split("Bearer ")[1]),!p&&r){let i=r.split(";").find(d=>d.trim().startsWith(N(process.env.SEEKA_APP_ID)));i&&(p=i.split("=")[1])}return await ne(o,p,n,s)},ne=async(e,t,n,s)=>{let a,r,o;if(e)try{let i=te.default.verify(e,process.env.SEEKA_APP_SECRET,{ignoreNotBefore:!0});if(s.info("Decoded token",{decoded:i}),!i.appId||i.appId.replace(/-/g,"")!==process.env.SEEKA_APP_ID.replace(/-/g,"")){s.error("Invalid token - app id does not match",{decoded:i,appIdToken:i.appId,appIdEnv:process.env.SEEKA_APP_ID});return}else a=i.appId;if(i.appInstallId)r=i.appInstallId;else{s.error("Invalid token - no appInstallId",{decoded:i});return}o=i.exp}catch(i){s.error("Failed to validate token",{err:i});return}else{s.error("No access token present");return}n&&await n(s);let p=await P(r,!1,s);if(p==null){s.warn("UI call cannot be processed as the installation ID is not known by this app",{seekaAppInstallId:r});return}return{appAccessToken:e,coreApiAccessToken:t,seekaAppId:a,seekaAppInstallId:r,expiresAt:o,installation:p}};var K=require("fs"),S=I(require("path"));var f=I(require("winston")),se=require("@opentelemetry/winston-transport"),oe=[new f.transports.Console({level:process.env.LOGGING_LEVEL,format:f.format.combine(f.format.errors({stack:!0}),f.format.cli(),f.format.splat()),handleExceptions:!0,handleRejections:!0})];process.env.OTEL_SDK_DISABLED!=="true"&&oe.push(new se.OpenTelemetryTransportV3({handleExceptions:!0,handleRejections:!0}));var re=f.createLogger({level:process.env.LOGGING_LEVEL,transports:oe,exitOnError:!1}),k=(e,t,n=re,s={})=>n.child({...e,...t?{seekaAppInstallId:t.applicationInstallId,seekaAppInstallOrganisationBrandId:t.organisationBrandId,seekaAppInstallOrganisationId:t.organisationId,...s?.invocationId?{"faas.invocation_id":s.invocationId}:{}}:{}}),ve=(e,t)=>{let n={seekaWebhookType:e.type,seekaWebhookIsTest:e.isTest,RequestId:e.requestId,"faas.invocation_id":t.invocationId,CausationId:e.causationId,CorrelationId:e.causationId},s=e.context;return s&&(n.seekaAppInstallId=s.applicationInstallId,n.seekaAppInstallOrganisationBrandId=s.organisationBrandId,n.seekaAppInstallOrganisationId=s.organisationId),k(n)},Pe=(e,t,n)=>{let s={jobContext:t,jobName:e,"faas.invocation_id":n.invocationId,CausationId:t?.causationId,CorrelationId:t?.causationId,seekaAppInstallId:t?.applicationInstallId??t?.payload.applicationInstallId,seekaAppInstallOrganisationBrandId:t?.organisationBrandId,seekaAppInstallOrganisationId:t?.organisationId};return k(s)};async function ie(e,t){return await K.promises.readFile(e,{encoding:t})}var q="config.js",Ee=async(e,t,n,s,a,r)=>{let o=k(null,void 0,void 0,s);o.profile("http.seeka.webhook.app.ui");let i=new URL(e).pathname?.replace(/^\/app/,"")||"/";o.verbose("Received Seeka ui request",{requestedPath:i,url:e,method:t});let d=S.default.resolve("./dist/src/ui/build"),Q=null,M=null,T,le={},R=[],c,L=async()=>(c=await F(e,n,()=>U(o),o),c?(Q=c.seekaAppId,M=c.seekaAppInstallId,T=c.installation,o=k(null,T,o,s),R.push({name:E(process.env.SEEKA_APP_ID),value:c.appAccessToken,httpOnly:!0,secure:!0,sameSite:"None",expires:new Date(c.expiresAt*1e3)}),R.push({name:N(process.env.SEEKA_APP_ID),value:c.coreApiAccessToken,httpOnly:!0,secure:!0,sameSite:"None",expires:new Date(c.expiresAt*1e3)}),null):{status:403,jsonBody:{error:"Invalid token"}}),g=S.default.join(d,i),m;try{if(i==="/"+q){let l=await L();if(l)return l;let A=process.env.APP_UI_BASE_PATH?`${process.env.APP_UI_BASE_PATH}`:"",w=`${process.env.SELF_HOST_BASEURL}${A}`,de={seekaAppId:Q||"",seekaAppInstallId:M||"",organisationBrandId:T?.organisationBrandId||"",appBaseUrl:w,state:await a(T,o)};m=`window.seekaAppConfig = ${JSON.stringify(de)}`}if(i.startsWith("/api")){let l=await L();if(l)return l;let A=await r(i,t,T,o);return A||{status:404,jsonBody:{error:"Not found"}}}if(i==="/"||i==="/index.html"){let l=await L();if(l)return l;let A=`?${_}=${encodeURIComponent(c?.appAccessToken||"")}&${O}=${encodeURIComponent(c?.coreApiAccessToken||"")}&`;g=S.default.join(d,"index.html");let w=await ie(g,"utf-8");w=w.replace(q+"?",q+A),m=w}else m||(g=S.default.join(d,i),await K.promises.access(g))}catch(l){g=S.default.join(d,"index.html"),console.log("File not found, serving index.html",{err:l,requestedPath:i,buildPath:d,filePath:g,content:m})}return m||(m=await ie(g)),{status:200,headers:{"Content-Type":Ne(g),"Referrer-Policy":"no-referrer",...le},cookies:R,body:m}};function Ne(e){return e.endsWith(".html")?"text/html":e.endsWith(".js")?"application/javascript":e.endsWith(".css")?"text/css":e.endsWith(".png")?"image/png":e.endsWith(".jpg")||e.endsWith(".jpeg")?"image/jpeg":e.endsWith(".gif")?"image/gif":"application/octet-stream"}var J=I(require("fs")),ae=I(require("path")),G=I(require("util")),pe=I(require("winston")),_e=G.default.promisify(J.default.existsSync),Oe=G.default.promisify(J.default.readFile);async function Re(e,t,n){return await ce(e,"seeka-browser-plugin.min.js",t,n)}async function ce(e,t,n,s){s.profile("http.seeka.browser.plugin");let a,r;try{s.verbose("Handling request for browser plugin content");let o=ae.default.resolve(`./dist/src/browser/${t}`);await _e(o)?(a=await Oe(o,"utf8"),r=`${e}(${JSON.stringify(n)})`):s.error("Browser plugin content not found",{path:o})}catch(o){s.error("Failed to handle request for browser plugin content",{ex:pe.default.exceptions.getAllInfo(o)})}finally{s.profile("http.seeka.browser.plugin"),s.verbose("Request for browser plugin content handled")}if(!a||!r)throw new Error("Failed to handle request for browser plugin content");return{content:a,init:r}}0&&(module.exports={appLogger,backgroundJobLogger,checkAuth,childLogger,connect,createOrUpdateInstallation,deleteInstallation,disconnect,generateAppUiHttpRequestResponse,getAccessTokenAndCheck,getKey,getList,getOrCreate,getOrCreateClient,getSeekaBrowserPlugin,getSeekaBrowserPluginByName,isConnected,listInstallations,remove,set,startServices,stopServices,tryGet,tryGetInstallation,webhookLogger});
1
+ "use strict";var Tt=Object.create;var U=Object.defineProperty;var Ct=Object.getOwnPropertyDescriptor;var xt=Object.getOwnPropertyNames;var Et=Object.getPrototypeOf,bt=Object.prototype.hasOwnProperty;var Nt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ot=(e,t)=>{for(var r in t)U(e,r,{get:t[r],enumerable:!0})},me=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of xt(t))!bt.call(e,i)&&i!==r&&U(e,i,{get:()=>t[i],enumerable:!(n=Ct(t,i))||n.enumerable});return e};var m=(e,t,r)=>(r=e!=null?Tt(Et(e)):{},me(t||!e||!e.__esModule?U(r,"default",{value:e,enumerable:!0}):r,e)),_t=e=>me(U({},"__esModule",{value:!0}),e);var ot=Nt((_r,at)=>{"use strict";var Rt=Object.create,B=Object.defineProperty,Ut=Object.getOwnPropertyDescriptor,Lt=Object.getOwnPropertyNames,Bt=Object.getPrototypeOf,Dt=Object.prototype.hasOwnProperty,$t=(e,t)=>{for(var r in t)B(e,r,{get:t[r],enumerable:!0})},ke=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Lt(t))!Dt.call(e,i)&&i!==r&&B(e,i,{get:()=>t[i],enumerable:!(n=Ut(t,i))||n.enumerable});return e},h=(e,t,r)=>(r=e!=null?Rt(Bt(e)):{},ke(t||!e||!e.__esModule?B(r,"default",{value:e,enumerable:!0}):r,e)),Ft=e=>ke(B({},"__esModule",{value:!0}),e),Ae={};$t(Ae,{ActivityPipelineActivityFilterSourceItemType:()=>Fe,ActivityPipelineActivityFilterType:()=>De,AnalyticsLibrary:()=>qe,ApiException:()=>ze,ApiServiceProxyBase:()=>X,AppPermissionKeys:()=>A,ClickAttributionSourcePlatform:()=>Be,ConditionComparer:()=>$e,ConditionOperator:()=>Me,ConsentMappingMatchType:()=>Je,ContentIdentificationBehavior:()=>We,ConvergePipelineLoggableActivityType:()=>Re,ConvergeVendorDestinationPublishStrategy:()=>je,CrossDomainTrackingUtmBehavior:()=>He,ECommerceContentType:()=>be,ECommerceFinancialStatus:()=>_e,ECommerceFulfillmentStatus:()=>Oe,ECommercePlatform:()=>Ne,IabPrivacyConsentPurposeId:()=>Ke,IabPrivacyConsentPurposeIdMap:()=>gr,IdentityServiceProxy:()=>we,IngestServiceProxy:()=>Te,PrivacyConsentType:()=>xe,PrivacyDataControlMode:()=>Ve,RegionalConsentGrantOption:()=>Ge,ResponseResultType:()=>Ce,SdkLogEventLevel:()=>Ue,SeekaApiHelper:()=>et,SeekaAppCacheManager:()=>N,SeekaAppConfig:()=>Pe,SeekaAppHelper:()=>lr,SeekaWebhookCallType:()=>Le,TrackingActivityNames:()=>L,TrackingEventSourceOriginType:()=>Ee,chunk:()=>Y,decryptText:()=>it,encryptText:()=>nt,getActivityName:()=>Wt,getIssuer:()=>ee,getNewAppInstallToken:()=>Qe,getNewOrCachedAppInstallToken:()=>te,isValidSeekaProfileId:()=>ur,matchActivityPipelineFilters:()=>dr,separatePersonFullName:()=>Kt,throwOnInvalidWebhookSignature:()=>ar,urls:()=>fr,validateWebhookSignature:()=>tt,webhookSignatureHeaderName:()=>Q});at.exports=Ft(Ae);var Mt="3.3.1",Se=h(require("axios")),Pe=class{appId;appSecret;ingestUrl;issuerUrl;organisationId;applicationInstallId;runtime;logger;grantedPermissions;transformApiRequest;transformApiResponse;hasAnyPermissions;hasAllPermissions;hasPermission},X=class{config;constructor(e){this.config=e}transformOptions=async e=>await this.config.transformApiRequest(e);transformResult=async(e,t,r)=>await this.config.transformApiResponse(e,t,r)},we=class extends X{instance;baseUrl;jsonParseReviver=void 0;constructor(e,t,r){super(e),this.instance=r||Se.default.create(),this.baseUrl=t??"https://api-localdev-env0-seeka.au.ngrok.io"}merge(e,t){let r=this.baseUrl+"/api/identity";r=r.replace(/[?&]$/,"");let n={data:JSON.stringify(e),method:"POST",url:r,headers:{"Content-Type":"application/json",Accept:"application/json"},cancelToken:t};return this.transformOptions(n).then(i=>this.instance.request(i)).catch(i=>{if(Ye(i)&&i.response)return i.response;throw i}).then(i=>this.transformResult(r,i,s=>this.processMerge(s)))}processMerge(e){let t=e.status,r={};if(e.headers&&typeof e.headers=="object")for(let n in e.headers)e.headers.hasOwnProperty(n)&&(r[n]=e.headers[n]);if(t===200){let n=e.data,i=null;return i=JSON.parse(n),Promise.resolve(i)}else if(t===400){let n=e.data,i=null;return i=JSON.parse(n),S("A server side error occurred.",t,n,r,i)}else if(t===401){let n=e.data,i=null;return i=JSON.parse(n),S("A server side error occurred.",t,n,r,i)}else if(t===422){let n=e.data,i=null;return i=JSON.parse(n),S("A server side error occurred.",t,n,r,i)}else if(t!==200&&t!==204){let n=e.data;return S("An unexpected server error occurred.",t,n,r)}return Promise.resolve(null)}},Te=class extends X{instance;baseUrl;jsonParseReviver=void 0;constructor(e,t,r){super(e),this.instance=r||Se.default.create(),this.baseUrl=t??"https://api-localdev-env0-seeka.au.ngrok.io"}batch(e,t){let r=this.baseUrl+"/api/ingest";r=r.replace(/[?&]$/,"");let n={data:JSON.stringify(e),method:"POST",url:r,headers:{"Content-Type":"application/json"},cancelToken:t};return this.transformOptions(n).then(i=>this.instance.request(i)).catch(i=>{if(Ye(i)&&i.response)return i.response;throw i}).then(i=>this.transformResult(r,i,s=>this.processBatch(s)))}processBatch(e){let t=e.status,r={};if(e.headers&&typeof e.headers=="object")for(let n in e.headers)e.headers.hasOwnProperty(n)&&(r[n]=e.headers[n]);if(t===202){let n=e.data;return Promise.resolve(null)}else if(t===400){let n=e.data,i=null;return i=JSON.parse(n),S("A server side error occurred.",t,n,r,i)}else if(t===401){let n=e.data,i=null;return i=JSON.parse(n),S("A server side error occurred.",t,n,r,i)}else if(t===422){let n=e.data,i=null;return i=JSON.parse(n),S("A server side error occurred.",t,n,r,i)}else if(t!==200&&t!==204){let n=e.data;return S("An unexpected server error occurred.",t,n,r)}return Promise.resolve(null)}},Ce=(e=>(e.Undefined="undefined",e.Success="success",e.Failed="failed",e))(Ce||{}),xe=(e=>(e.Unknown="unknown",e.Informed="informed",e.Implied="implied",e.Explicit="explicit",e.Active="active",e.Passive="passive",e))(xe||{}),Ee=(e=>(e.Browser="browser",e.Server="server",e.Mobile="mobile",e.Desktop="desktop",e.PhysicalStore="physicalStore",e.Email="email",e.Phone="phone",e.Chat="chat",e.Automatic="automatic",e))(Ee||{}),L=(e=>(e.Undefined="undefined",e.PageViewOrganic="pageViewOrganic",e.PageViewUtmAttributed="pageViewUtmAttributed",e.AddPaymentMethod="addPaymentMethod",e.AddToWishlist="addToWishlist",e.ContactMessage="contactMessage",e.Custom="custom",e.SyncCart="syncCart",e.Order="order",e.InitiateCheckout="initiateCheckout",e.AddToCart="addToCart",e.RemoveFromCart="removeFromCart",e.OneTimeItemPurchase="oneTimeItemPurchase",e.SubscriptionItemPurchase="subscriptionItemPurchase",e.ViewProduct="viewProduct",e.ViewPage="viewPage",e.ApplyPromotionalCode="applyPromotionalCode",e.KeywordSearch="keywordSearch",e.UserLoginSignup="userLoginSignup",e.UserLogin="userLogin",e.NewsletterSignup="newsletterSignup",e.Lead="lead",e.ChangeProductAttribute="changeProductAttribute",e.FilterItemsByAttribute="filterItemsByAttribute",e.Schedule="schedule",e.ViewContentItem="viewContentItem",e.StartTrial="startTrial",e))(L||{}),be=(e=>(e.Undefined="undefined",e.SingleProduct="singleProduct",e.SingleVariant="singleVariant",e.Collection="collection",e))(be||{}),Ne=(e=>(e.None="none",e.BigCommerce="bigCommerce",e.Shopify="shopify",e.OrderGroove="orderGroove",e.Magento="magento",e.Generic="generic",e.WooCommerce="wooCommerce",e.Demandware="demandware",e))(Ne||{}),Oe=(e=>(e.Undefined="undefined",e.Fulfilled="fulfilled",e.NoneFulfilled="noneFulfilled",e.PartiallyFulfilled="partiallyFulfilled",e.RestockedOrCancelled="restockedOrCancelled",e.Pending="pending",e))(Oe||{}),_e=(e=>(e.Undefined="undefined",e.Pending="pending",e.Authorized="authorized",e.PartiallyPaid="partiallyPaid",e.Paid="paid",e.PartiallyRefunded="partiallyRefunded",e.Refunded="refunded",e.Voided="voided",e))(_e||{}),Re=(e=>(e.Generic="generic",e.ActivityIngress="activityIngress",e.ActivityEgress="activityEgress",e.UserProfile="userProfile",e.SdkLog="sdkLog",e.Detections="detections",e.ActivityEgressFilter="activityEgressFilter",e.Diagnosis="diagnosis",e.PipelineIntegrationOutput="pipelineIntegrationOutput",e))(Re||{}),Ue=(e=>(e.Information="information",e.Warning="warning",e.Error="error",e.Verbose="verbose",e))(Ue||{}),Le=(e=>(e.None="none",e.Probe="probe",e.AppInstalled="appInstalled",e.IdentityChanged="identityChanged",e.ActivityAccepted="activityAccepted",e.AppInstallSettingsUpdated="appInstallSettingsUpdated",e.AppUninstalled="appUninstalled",e.BrowserSdkPlugin="browserSdkPlugin",e))(Le||{}),Be=(e=>(e.Unknown="unknown",e.Google="google",e.Meta="meta",e.Snapchat="snapchat",e.Pinterest="pinterest",e.TikTok="tikTok",e))(Be||{}),De=(e=>(e.Undefined="undefined",e.PurchaseMade="purchaseMade",e.ActivityTracked="activityTracked",e))(De||{}),$e=(e=>(e.Undefined="undefined",e.And="and",e.Or="or",e))($e||{}),Fe=(e=>(e.Undefined="undefined",e.Domain="domain",e.Pipeline="pipeline",e.Wildcard="wildcard",e.Url="url",e.PagePath="pagePath",e))(Fe||{}),Me=(e=>(e.Undefined="undefined",e.Equals="equals",e.NotEquals="notEquals",e.Contains="contains",e.NotContains="notContains",e.StartsWith="startsWith",e.EndsWith="endsWith",e.IsNull="isNull",e.NotNull="notNull",e.IsTrue="isTrue",e.IsFalse="isFalse",e.GreaterThanOrEquals="greaterThanOrEquals",e.LessThanOrEquals="lessThanOrEquals",e.GreaterThan="greaterThan",e.LessThan="lessThan",e.Before="before",e.After="after",e.Between="between",e.In="in",e.NotIn="notIn",e.Regex="regEx",e.Any="any",e))(Me||{}),qe=(e=>(e.Undefined="undefined",e.Seeka="seeka",e.DynamicYield="dynamicYield",e.Segment="segment",e.FacebookPixel="facebookPixel",e.GoogleAnalytics="googleAnalytics",e.Braze="braze",e.SnapchatPixel="snapchatPixel",e.Pinterest="pinterest",e.TikTokPixel="tikTokPixel",e.GoogleAds="googleAds",e))(qe||{}),We=(e=>(e.Default="default",e.Sku="sku",e.ProductId="productId",e.VariantId="variantId",e.ProductIdAndVariantIdUnderscore="productIdAndVariantIdUnderscore",e.VariantIdOrProductId="variantIdOrProductId",e))(We||{}),je=(e=>(e.DeliverAllTraitsAndDeliverAllEvents="deliverAllTraitsAndDeliverAllEvents",e.DeliverAllTraitsAndDeliverEventsOnlyIfMaxWeightedTraitsPresent="deliverAllTraitsAndDeliverEventsOnlyIfMaxWeightedTraitsPresent",e.DeliverMaxWeightedTraitsOnlyAndDeliverAllEvents="deliverMaxWeightedTraitsOnlyAndDeliverAllEvents",e.DeliverMaxWeightedTraitsOnlyAndDeliverEventsOnlyIfMaxWeightedTraitsPresent="deliverMaxWeightedTraitsOnlyAndDeliverEventsOnlyIfMaxWeightedTraitsPresent",e))(je||{}),He=(e=>(e.None="none",e.SessionPassthrough="sessionPassthrough",e.UrlPassthrough="urlPassthrough",e))(He||{}),Ge=(e=>(e.Unset="unset",e.Granted="granted",e.Denied="denied",e))(Ge||{}),Ke=(e=>(e.Undefined="undefined",e.MeasureAdvertisingPerformance="measureAdvertisingPerformance",e))(Ke||{}),Je=(e=>(e.Undefined="undefined",e.AllOf="allOf",e.AnyOf="anyOf",e))(Je||{}),Ve=(e=>(e.Disabled="disabled",e.Explicit="explicit",e.Implicit="implicit",e))(Ve||{}),ze=class extends Error{message;status;response;headers;result;constructor(e,t,r,n,i){super(),this.message=e,this.status=t,this.response=r,this.headers=n,this.result=i}isApiException=!0;static isApiException(e){return e.isApiException===!0}};function S(e,t,r,n,i){throw i??new ze(e,t,r,n,null)}function Ye(e){return e&&e.isAxiosError===!0}var b=require("openid-client"),Z=h(require("winston")),V=h(require("memory-cache")),ye="seeka:sdk",N=class{constructor(e,t){this.appId=e,this.appInstallationId=t}appId;appInstallationId;set=async(e,t,r)=>{let n=this.getKey(e);V.default.put(n,JSON.stringify(t),r)};getOrSet=async(e,t,r)=>{let n=this.getKey(e),i=V.default.get(n);if(i){let a=JSON.parse(i);return r&&await r(a),a}let s=await t();return s?(V.default.put(n,JSON.stringify(s.value),s.expiryAbsoluteMilliseconds),s.value):null};getKey=e=>this.appInstallationId?`${ye}:${this.appId}:${this.appInstallationId}:${e}`:`${ye}:${this.appId}:${e}`},qt=h(require("crypto")),z=()=>{let e=Ht(new Date),t=jt();return`${e}.${t}`},Wt=e=>{let t=Object.keys(L),r=e.toLowerCase(),n=t.find(i=>i.toLowerCase()===r);return n?L[n]:"custom"},jt=()=>Math.floor(Math.random()*(9999999999-1e9)+1e9).toString(),Ht=e=>{let t=(e.getUTCMonth()+1).toString();t.length<2&&(t="0"+t);let r=e.getUTCDate().toString();r.length<2&&(r="0"+r);let n=e.getUTCHours().toString();n.length<2&&(n="0"+n);let i=e.getUTCMinutes().toString();i.length<2&&(i="0"+i);let s=e.getUTCSeconds().toString();return s.length<2&&(s="0"+s),`${e.getUTCFullYear()}${t}${r}.${n}${i}${s}`},Gt=e=>qt.createHash("md5").update(e).digest("hex"),Kt=e=>{if(!e)return{firstName:null,lastName:null};let t=e.trim().split(" ");return t.length===1?{firstName:e,lastName:null}:t.length===2?{firstName:t[0],lastName:t[1]}:{firstName:t[0],lastName:t.slice(1).join(" ")}},Y=(e,t)=>e.reduce((r,n,i)=>{let s=Math.floor(i/t);return r[s]||(r[s]=[]),r[s].push(n),r},[]),ee=async e=>{let t={applicationId:e.appId,issuer:{url:e.issuerUrl}};e.logger?e.logger.debug("Seeka auth: getting issuer",{...t}):console.debug("Seeka auth: getting issuer",{...t});let r=new N(e.appId,e.applicationInstallId),n=Gt(e.issuerUrl+"_"+e.appId),i=await r.getOrSet(n,async()=>{try{let s=await Jt(e);return!s||!s.meta||!s.raw?null:(e.logger?e.logger.verbose("Seeka auth: got issuer from remote",{...t}):console.debug("Seeka auth: got issuer from remote",{...t}),{value:s.meta,expiryAbsoluteMilliseconds:1e3*60*60})}catch(s){return e.logger?e.logger.error("Seeka auth: failed getting issuer",{...t,ex:Z.default.exceptions.getAllInfo(s)}):console.error("Seeka auth: failed getting issuer",{...t}),null}},async()=>{e.logger?e.logger.verbose("Seeka auth: got issuer from cache",{...t}):console.debug("Seeka auth: got issuer from cache",{...t})});return i===null?null:new b.Configuration(i.serverMetadata,i.clientId,e.appSecret)},Jt=async e=>{let t={applicationId:e.appId,issuer:{url:e.issuerUrl}};e.logger?e.logger.verbose("Seeka auth: discovering issuer from remote",{...t}):console.info("Seeka auth: discovering issuer from remote",{...t});try{let r=e.appId.replace(/-/g,""),n=await(0,b.discovery)(new URL(e.issuerUrl),r,void 0,(0,b.None)(),{timeout:1e4});return e.logger?e.logger.verbose("Seeka auth: discovered issuer from remote",{...t,client_id:n.clientMetadata().client_id}):console.info("Seeka auth: discovered issuer from remote",{...t,client_id:n.clientMetadata().client_id}),{meta:{serverMetadata:n.serverMetadata(),clientMetadata:n.clientMetadata(),timeout:n.timeout,clientId:r},raw:n}}catch(r){return e.logger?e.logger.error("Seeka auth: failed discovering issuer from remote",{...t,ex:Z.default.exceptions.getAllInfo(r)}):console.error("Seeka auth: failed discovering issuer from remote",{...t,err:r}),null}},Vt=async e=>{let t={applicationId:e.appId,issuer:{url:e.issuerUrl}},r=await ee(e);if(!r)return null;try{let n=await(0,b.clientCredentialsGrant)(r,{resource:r.clientMetadata().client_id}),i={...t,token:{expires_at:n.expires_at,token_type:n.token_type,scope:n.scope}};return e.logger?e.logger.verbose("Seeka auth: got client access token from server",{...i}):console.info("Seeka auth: got app client token from server",{...i}),{token_type:n.token_type,access_token:n.access_token,expires_in:n.expires_in,id_token:n.id_token,refresh_token:n.refresh_token,scope:n.scope,authorization_details:n.authorization_details}}catch(n){let i={...t,error:n};return e.logger?e.logger.error("Seeka auth: failed to get client access token from server",{...i}):console.error("Seeka auth: failed to get client access token from server",{...i,err:Z.default.exceptions.getAllInfo(n)}),null}},Qe=async(e,t)=>{let r={applicationId:t.appId,issuer:{url:t.issuerUrl}},n=await ee(t);if(!n||!n)return null;try{let i=await(0,b.genericGrantRequest)(n,"app_install_token",{applicationInstallId:t.applicationInstallId,access_token:e,scope:"Seeka.API.Ingest"}),s={...r,token:{expires_at:i.expires_at,token_type:i.token_type,scope:i.scope}};return t.logger?t.logger.verbose("Seeka auth: got app access token from server",{...s}):console.info("Seeka auth: got app access token from server",{...s}),{token_type:i.token_type,access_token:i.access_token,expires_in:i.expires_in,id_token:i.id_token,refresh_token:i.refresh_token,scope:i.scope,authorization_details:i.authorization_details}}catch(i){let s={...r,error:i};return t.logger?t.logger.error("Seeka auth: failed to get app access token from server",{...s}):console.debug("Seeka auth: failed to get app access token from server",{...s}),null}},te=async e=>{let t=new N(e.appId,e.applicationInstallId),r={applicationId:e.appId,issuer:{url:e.issuerUrl}};return await t.getOrSet("auth:token:appinstall",async()=>{let n=await Vt(e);if(!n||!n.access_token)return null;let i=await Qe(n.access_token,e);return i?{value:i,expiryAbsoluteMilliseconds:((i.expires_in>n.expires_in?n.expires_in:i.expires_in)||900*1e3)-60*1e3}:null},async()=>{e.logger?e.logger.verbose("Seeka auth: got app token from cache",{...r}):console.debug("Seeka auth: got app token from cache",{...r})})},Xe="https://router.seeka.services",zt="https://router.seeka.services/tel/otel",Ze="https://account.seeka.app",Yt=(e,t,r,n,i)=>{let s=new Pe;return s.appId=e.applicationId,s.appSecret=t,s.ingestUrl=process.env.SEEKA_INGEST_URL||Xe,s.issuerUrl=process.env.SEEKA_ISSUER_URL||Ze,s.organisationId=e.organisationId,s.applicationInstallId=e.applicationInstallId,s.runtime={type:"sdk/js/apps-server",ver:Mt.split("-")[0],client:r},s.logger=i,s.grantedPermissions=n,s.transformApiRequest=a=>Qt(s,a),s.transformApiResponse=async(a,l,o)=>Xt(s,a,l,o),s.hasAnyPermissions=a=>!s.grantedPermissions||s.grantedPermissions.length===0?!1:!a||a.length===0?!0:a.some(l=>s.grantedPermissions.includes(l)),s.hasAllPermissions=a=>!s.grantedPermissions||s.grantedPermissions.length===0?!1:!a||a.length===0?!0:a.every(l=>s.grantedPermissions.includes(l)),s.hasPermission=a=>!s.grantedPermissions||s.grantedPermissions.length===0?!1:a?s.grantedPermissions.includes(a):!0,s},Qt=async(e,t)=>{let r=await te(e);if(!r||!r.access_token)throw new Error("Could not get access token for API request");return t.headers={...t.headers,"X-OrgId":e.organisationId,Authorization:"Bearer "+r?.access_token},t},Xt=async(e,t,r,n)=>(r.data=JSON.stringify(r.data),n(r)),A={identity:{receiveFull:"Identity.Receive.Pii",send:"Identity.Send"},activity:{receiveAnon:"Activity.Receive.Anon",receiveFull:"Activity.Receive.Pii",send:"Activity.Send"}},Zt=h(require("axios")),er=h(require("http")),tr=h(require("https")),rr=new er.default.Agent({keepAlive:!0,scheduling:"fifo"}),nr=new tr.default.Agent({keepAlive:!0,scheduling:"fifo"}),ve=e=>{let t=Zt.default.create({httpAgent:rr,httpsAgent:nr});return t.interceptors.request.use(function(r){let n={url:r.url,method:r.method};return process.env.LOGGING_LEVEL==="silly"&&(n={...n,body:r.data,params:r.params}),e.logger?e.logger.debug(`Seeka API: making call to ${n.url}`,{...n}):console.debug(`Seeka API: making call to ${n.url}`,{...n}),r},function(r){let n={error:r};return e.logger?e.logger.http("Seeka API: failed to send request",{...n}):console.debug("Seeka API: failed to send request",{...n}),Promise.reject(r)}),t.interceptors.response.use(function(r){let n={url:r.request?.url||r.config.url,method:r.request?.method||r.config.method,response:{status:r.status}};return e.logger?e.logger.http(`Seeka API: call to ${n.url} succeeded`,{...n}):console.debug(`Seeka API: call to ${n.url} succeeded`,{...n}),r},function(r){let{code:n,status:i,message:s}=r,{headers:a,url:l,method:o}=r?.config,c={code:n,status:i,message:s,headers:a,url:l,method:o,content:r?.response?.data};return e.logger?e.logger.error(`Seeka API: call to ${c.url} failed`,{...c}):console.error(`Seeka API: call to ${c.url} failed`,{...c}),Promise.reject(r)}),t},Ie={getIdentityService:e=>new we(e,e.ingestUrl,ve(e)),getIngestService:e=>new Te(e,e.ingestUrl,ve(e))},et=class{constructor(e){this.config=e,this.ingestionService=Ie.getIngestService(e),this.identityService=Ie.getIdentityService(e)}config;maxBatchSize=50;refreshOrPrimeTokenCache=async()=>{await te(this.config)};ingestionService;identityService;checkPermission=(e,t)=>{if(!this.config.hasPermission(e))throw new Error("Cannot perform operation "+t+" on installationId "+this.config.applicationInstallId+" without permission "+e+". Currently granted permissions: "+(this.config.grantedPermissions?this.config.grantedPermissions.join(", "):"none"));return!0};mergeIdentity=async(e,t)=>{this.checkPermission(A.identity.send,"mergeIdentity");let r=z();return(await this.identityService.merge({id:e,src:{method:"",origin:t.origin,time:void 0,loc:t.loc,sess:r,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?r:void 0,runtime:this.config.runtime}})).result?.personId};mergeIdentityBatch=async(e,t)=>{this.checkPermission(A.identity.send,"mergeIdentityBatch");let r=z();if(e.length===0){this.config.logger?.debug("No identities in batch");return}let n={method:"",origin:t.origin,time:void 0,loc:t.loc,sess:r,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?r:void 0,runtime:this.config.runtime},i=Y(e,this.maxBatchSize);if(i.length>1&&this.config.logger&&this.config.logger.debug(`Identity batch size ${e} is greater than ${this.maxBatchSize}, splitting into ${i.length} batches`),await this.trackActivityBatchRaw({data:i[0].map(s=>({id:{id:s||{},src:{...n}}}))}),i.length>1){let s=i.map((a,l)=>l===0?Promise.resolve():(this.config.logger?.verbose(`Processing identity batch ${l+1} of ${i.length}`),this.trackActivityBatchRaw({data:a.map(o=>({id:{id:o||{},src:{...n}}}))})));await Promise.all(s)}};trackActivityBatch=async(e,t)=>{this.checkPermission(A.activity.send,"trackActivityBatch");let r=z();if(e.length===0){this.config.logger?.debug("No activities in batch");return}let n={method:"",origin:t.origin,time:void 0,loc:t.loc,sess:r,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?r:void 0,runtime:this.config.runtime},i=Y(e,this.maxBatchSize);if(i.length>1&&this.config.logger&&this.config.logger.debug(`Activity batch size ${e.length} is greater than ${this.maxBatchSize}, splitting into ${i.length} batches`),await this.trackActivityBatchRaw({data:i[0].map(s=>({ev:{id:s.profile||{},src:{...n},payload:s.activity}}))}),i.length>1){let s=i.map((a,l)=>l===0?Promise.resolve():(this.config.logger?.verbose(`Processing activity batch ${l+1} of ${i.length}`),this.trackActivityBatchRaw({data:a.map(o=>({ev:{id:o.profile||{},src:{...n},payload:o.activity}}))})));await Promise.all(s)}};trackActivityBatchRaw=async e=>{await this.ingestionService.batch(e)};trackActivityForProfileId=async(e,t,r)=>{this.checkPermission(A.activity.send,"trackActivityForProfileId"),await this.trackActivityForProfileIdBatch([e],t,r)};trackActivityForProfileIdBatch=async(e,t,r)=>{this.checkPermission(A.activity.send,"trackActivityForProfileIdBatch"),await this.trackActivityBatch(e.map(n=>({activity:n,profile:t?{seekaPId:t}:void 0})),r)};trackActivityForProfile=async(e,t,r)=>{this.checkPermission(A.activity.send,"trackActivityForProfile"),await this.trackActivityForProfileBatch([e],t,r)};trackActivityForProfileBatch=async(e,t,r)=>{this.checkPermission(A.activity.send,"trackActivityForProfileBatch"),await this.trackActivityBatch(e.map(n=>({activity:n,profile:t})),r)}},ir=h(require("crypto")),Q="x-seeka-signature-sha256",tt=(e,t,r)=>{if(!t)return!1;let n=null;if(t.get&&typeof t.get=="function")n=t.get(Q);else{let s=t[Q];s&&(Array.isArray(s)&&s.length>0?n=s[0]:(typeof s=="string"||s instanceof String)&&(n=s))}if(!n)return!1;let i=sr(e,r)===n;return i||console.warn("Invalid webhook signature"),i},sr=(e,t)=>ir.createHmac("sha256",e).update(t).digest("hex"),ar=(e,t,r)=>{if(!tt(e,t,r))throw new Error("Invalid webhook signature")},E=h(require("crypto")),rt="aes-192-cbc",nt=(e,t)=>{if(!e)return"";if(!t)throw new Error("Secret is required to encrypt data");let r=E.default.scryptSync(t,"salt",24),n=E.default.randomBytes(16),i=E.default.createCipheriv(rt,r,n);return[i.update(e,"utf8","hex")+i.final("hex"),Buffer.from(n).toString("hex")].join("|")},it=(e,t)=>{if(!e)return"";if(!t)throw new Error("Secret is required to decrypt data");let[r,n]=e.split("|");if(!n)throw new Error("IV not found");let i=E.default.scryptSync(t,"salt",24),s=E.default.createDecipheriv(rt,i,Buffer.from(n,"hex"));return s.update(r,"hex","utf8")+s.final("utf8")},or=class{constructor(e){this.appSecret=e}appSecret;encryptWithAppSecret=e=>{if(!this.appSecret)throw new Error("App secret is required to encrypt data");return nt(e,this.appSecret)};decryptWithAppSecret=e=>{if(!this.appSecret)throw new Error("App secret is required to decrypt data");return it(e,this.appSecret)}},lr=class st{constructor(t,r){this.context=t,this.api=new et(t.config),this.appCache=new N(t.config.appId),this.appInstallCache=new N(t.config.appId,t.config.applicationInstallId),this.crypto=new or(t.config.appSecret),this.logger=r}context;appCache;appInstallCache;api;logger;crypto;static create=(t,r,n,i,s)=>new st({config:Yt({...r},t,{type:n.name,ver:n.version.split("-")[0]},i,s)},s)},cr=h(require("winston")),pr=["order","subscriptionItemPurchase","oneTimeItemPurchase"],dr=(e,t,r)=>{if(!e.activity)return[];let n=e.activity,i=n.activityName==="custom"?n.activityNameCustom:n.activityName;if(!i)return[];let s=i.toLowerCase(),a=[];return t.forEach(l=>{if(!l)return;switch(l.type){case"activityTracked":{if(!l.activityNames||!l.activityNames.find(p=>p.toLowerCase()===s))return;r.verbose("Matched activity tracked filter",{filter:l,activityName:i});break}case"purchaseMade":{if(!n.activityName||!pr.includes(n.activityName))return;r.verbose("Matched purchase made activity filter",{filter:l,activityName:i});break}default:{r.warn("Unknown activity filter type",{filter:l});return}}let o=l.sourceFilter;if(!o)return;let c=e.source,d;try{d=c?.loc?new URL(c.loc).hostname.toLowerCase():null}catch(p){r.error("Failed to parse activity source URL",{ex:cr.default.exceptions.getAllInfo(p),activitySource:c}),d=null}let I=c?.pipeline?.convergePipelineIntegrationInstanceId?.toLowerCase(),g=o.filters?o.filters.map(p=>{switch(p.type){case"wildcard":return r.verbose("Matched wildcard source filter",{sourceFilter:p}),!0;case"domain":return!d||!p.key?!1:d===p.key.toLowerCase()?(r.verbose("Matched domain source filter",{sourceFilter:p,activityHostname:d}),!0):!1;case"pipeline":return!I||!p.key?!1:I===p.key.toLowerCase()?(r.verbose("Matched pipeline source filter",{sourceFilter:p,sourceConvergePipelineIntegrationInstanceId:I}),!0):!1}}):[];switch(o.comparer){case"and":{g.every(p=>p===!0)&&a.push(l);break}case"or":{g.some(p=>p===!0)&&a.push(l);break}default:{r.warn("Unknown source filter comparer",{sourceFilters:o});break}}}),a};function ur(e){if(!e||e.trim().length===0)return!1;let t=e.split(".").filter(r=>r.trim().length>0);return!(t.length!==4||t[0].toLowerCase()!=="sk".toLowerCase()||t[1].toLowerCase()!=="1".toLowerCase()||isNaN(parseInt(t[2],10))||isNaN(parseInt(t[3],10)))}var gr={measureAdvertisingPerformance:7},fr={defaultIssuerUrl:Ze,defaultTelemetryUrl:zt,defaultIngestUrl:Xe}});var br={};Ot(br,{appLogger:()=>It,backgroundJobLogger:()=>Pr,checkAuth:()=>mt,childLogger:()=>T,connect:()=>ct,createOrUpdateInstallation:()=>kr,deleteInstallation:()=>Ar,disconnect:()=>pt,generateAppUiHttpRequestResponse:()=>wr,getAccessTokenAndCheck:()=>de,getKey:()=>R,getList:()=>se,getOrCreate:()=>yr,getOrCreateClient:()=>y,getSeekaBrowserPlugin:()=>Er,getSeekaBrowserPluginByName:()=>Pt,isConnected:()=>re,listInstallations:()=>Ir,remove:()=>oe,set:()=>ae,startServices:()=>le,stopServices:()=>vr,tryGet:()=>ie,tryGetInstallation:()=>q,webhookLogger:()=>Sr});module.exports=_t(br);var lt=require("redis"),$=m(require("winston")),F=m(ot()),hr=process.env.REDIS_CONNECTION_TLS==="true"?"rediss://":"redis://",mr=`${hr}${process.env.REDIS_CONNECTION_USER}:${process.env.REDIS_CONNECTION_PASSWORD}@${process.env.REDIS_CONNECTION_HOST}:${process.env.REDIS_CONNECTION_PORT}`,D,y=e=>D||(D=(0,lt.createClient)({url:mr,disableClientInfo:!0}).on("error",t=>e.error("Redis Client ",{ex:$.exceptions.getAllInfo(t)})),D),ct=async e=>{await y(e).connect()},re=async e=>y(e).isOpen,pt=async e=>{y(e).destroy()},dt=e=>`seeka:app:${process.env.SEEKA_APP_ID}:${e}`,R=(e,t)=>`${dt(e)}:${t}`,O=e=>e==="install",ut=()=>{let e=process.env.DATA_ENCRYPTION_KEY;if(!e)throw new Error("DATA_ENCRYPTION_KEY is required to encrypt/decrypt installation state");return e},gt=e=>{if(!e)return!1;let t=e.split("|");if(t.length!==2)return!1;let[r,n]=t;return!r||!n?!1:/^[0-9a-f]+$/i.test(r)&&/^[0-9a-f]{32}$/i.test(n)},ne=e=>{if(!gt(e))return{plainText:e,wasEncrypted:!1};let t=ut();return{plainText:(0,F.decryptText)(e,t),wasEncrypted:!0}},_=e=>{if(gt(e))return{encryptedText:e,wasEncrypted:!0};let t=ut();return{encryptedText:(0,F.encryptText)(e,t),wasEncrypted:!1}};async function yr(e,t,r,n="string",i){let s=R(e,t),a=y(i),l=await ft(a,s);if(l){if(n==="string"&&O(e)){let{plainText:o,wasEncrypted:c}=ne(l);if(!c){let{encryptedText:d}=_(l);await a.set(s,d)}return JSON.parse(o)}return JSON.parse(l)}if(n==="json")await a.json.set(s,"$",r);else{let o=JSON.stringify(r);if(O(e)){let{encryptedText:c}=_(o);await a.set(s,c)}else await a.set(s,o)}return r}async function ie(e,t,r="string",n){let i=R(e,t),s=y(n);if(r==="json"){let a=await s.json.get(i);if(a)return a}else{let a=await ft(s,i);if(a){if(O(e)){let{plainText:l,wasEncrypted:o}=ne(a);if(!o){let{encryptedText:c}=_(a);await s.set(i,c)}return JSON.parse(l)}return JSON.parse(a)}}return null}async function se(e,t){let r=dt(e),n=y(t),i=await n.keys(`${r}:*`),s=await n.mGet(i);if(s){let a=[];for(let l=0;l<s.length;l++){let o=s[l],c=i[l];if(!o)continue;let d=o;if(O(e)){let{plainText:I,wasEncrypted:g}=ne(d);if(!g){let{encryptedText:p}=_(d);await n.set(c,p)}a.push(JSON.parse(I))}else a.push(JSON.parse(d))}return a}return[]}async function ae(e,t,r,n="string",i){let s=R(e,t),a=y(i);if(n==="json")await a.json.set(s,"$",r);else{let l=JSON.stringify(r);if(O(e)){let{encryptedText:o}=_(l);await a.set(s,o)}else await a.set(s,l)}}async function oe(e,t,r){let n=R(e,t);await y(r).del(n)}async function ft(e,t){let r=await e.get(t);return typeof r=="string"?r:r?r.toString():""}var le=async e=>{e.debug(`Trying to connect to Redis - ${process.env.REDIS_CONNECTION_HOST}`);try{await re(e)?e.verbose(`Redis already connected - ${process.env.REDIS_CONNECTION_HOST}`):(e.profile("service.redis.connect"),await ct(e),e.profile("service.redis.connect"),e.debug(`Redis connected - ${process.env.REDIS_CONNECTION_HOST}`))}catch(t){throw e.error(`Failed to connect to Redis - ${process.env.REDIS_CONNECTION_HOST}`,{ex:$.exceptions.getAllInfo(t)}),t}},vr=async e=>{e.debug(`Trying to disconnect from Redis - ${process.env.REDIS_CONNECTION_HOST}`);try{await re(e)===!1?e.verbose(`Redis already disconnected - ${process.env.REDIS_CONNECTION_HOST}`):(e.profile("service.redis.disconnect"),await pt(e),e.profile("service.redis.disconnect"),e.verbose(`Redis disconnected - ${process.env.REDIS_CONNECTION_HOST}`))}catch(t){throw e.error(`Failed to disconnect from Redis - ${process.env.REDIS_CONNECTION_HOST}`,{ex:$.exceptions.getAllInfo(t)}),t}};var M="install",q=async(e,t,r)=>{let n=await ie(M,e,"string",r);if(n==null&&t)throw r.error(`Seeka installation ${e} not found`),new Error(`Seeka installation ${e} not found`);return n},Ir=async e=>await se(M,e),kr=async(e,t)=>{e.installationState||(e.installationState={}),e.installedAt||(e.installedAt=new Date().toISOString());let r=await q(e.applicationInstallId,!1,t)===null;return await ae(M,e.applicationInstallId,e,"string",t),t.info(r?"Created installation state":"Updated installation state",{applicationInstallId:e.applicationInstallId,organisationId:e.organisationId,organisationBrandId:e.organisationBrandId}),e},Ar=async(e,t)=>{await oe(M,e,t),t.info("Deleted installation state",{applicationInstallId:e})};var W=e=>"seeka_app_"+e+"_at_app",j=e=>"seeka_app_"+e+"_at_core",ce="X-Seeka-App-Token",pe="X-Seeka-CoreApi-Token",H="at_app",G="at_core";var ht=m(require("jsonwebtoken"));var de=async(e,t,r,n)=>{let i=new URL(e),s=t.get("Cookie"),a=i.searchParams.get(H)||"";if(!a&&t.get(ce)&&(a=t.get(ce)?.split("Bearer ")[1]),!a&&s){let o=s.split(";").find(c=>c.trim().startsWith(W(process.env.SEEKA_APP_ID)));o&&(a=o.split("=")[1])}let l=i.searchParams.get(G)||"";if(!l&&t.get(pe)&&(l=t.get(pe)?.split("Bearer ")[1]),!l&&s){let o=s.split(";").find(c=>c.trim().startsWith(j(process.env.SEEKA_APP_ID)));o&&(l=o.split("=")[1])}return await mt(a,l,r,n)},mt=async(e,t,r,n)=>{let i,s,a;if(e)try{let o=ht.default.verify(e,process.env.SEEKA_APP_SECRET,{ignoreNotBefore:!0});if(n.info("Decoded token",{decoded:o}),!o.appId||o.appId.replace(/-/g,"")!==process.env.SEEKA_APP_ID.replace(/-/g,"")){n.error("Invalid token - app id does not match",{decoded:o,appIdToken:o.appId,appIdEnv:process.env.SEEKA_APP_ID});return}else i=o.appId;if(o.appInstallId)s=o.appInstallId;else{n.error("Invalid token - no appInstallId",{decoded:o});return}a=o.exp}catch(o){n.error("Failed to validate token",{err:o});return}else{n.error("No access token present");return}r&&await r(n);let l=await q(s,!1,n);if(l==null){n.warn("UI call cannot be processed as the installation ID is not known by this app",{seekaAppInstallId:s});return}return{appAccessToken:e,coreApiAccessToken:t,seekaAppId:i,seekaAppInstallId:s,expiresAt:a,installation:l}};var ge=require("fs"),C=m(require("path"));var v=m(require("winston")),yt=require("@opentelemetry/winston-transport"),vt=[new v.transports.Console({level:process.env.LOGGING_LEVEL,format:v.format.combine(v.format.errors({stack:!0}),v.format.cli(),v.format.splat()),handleExceptions:!0,handleRejections:!0})];process.env.OTEL_SDK_DISABLED!=="true"&&vt.push(new yt.OpenTelemetryTransportV3({handleExceptions:!0,handleRejections:!0}));var It=v.createLogger({level:process.env.LOGGING_LEVEL,transports:vt,exitOnError:!1}),T=(e,t,r=It,n={})=>r.child({...e,...t?{seekaAppInstallId:t.applicationInstallId,seekaAppInstallOrganisationBrandId:t.organisationBrandId,seekaAppInstallOrganisationId:t.organisationId,...n?.invocationId?{"faas.invocation_id":n.invocationId}:{}}:{}}),Sr=(e,t)=>{let r={seekaWebhookType:e.type,seekaWebhookIsTest:e.isTest,RequestId:e.requestId,"faas.invocation_id":t.invocationId,CausationId:e.causationId,CorrelationId:e.causationId},n=e.context;return n&&(r.seekaAppInstallId=n.applicationInstallId,r.seekaAppInstallOrganisationBrandId=n.organisationBrandId,r.seekaAppInstallOrganisationId=n.organisationId),T(r)},Pr=(e,t,r)=>{let n={jobContext:t,jobName:e,"faas.invocation_id":r.invocationId,CausationId:t?.causationId,CorrelationId:t?.causationId,seekaAppInstallId:t?.applicationInstallId??t?.payload.applicationInstallId,seekaAppInstallOrganisationBrandId:t?.organisationBrandId,seekaAppInstallOrganisationId:t?.organisationId};return T(n)};async function kt(e,t){return await ge.promises.readFile(e,{encoding:t})}var ue="config.js",wr=async(e,t,r,n,i,s)=>{let a=T(null,void 0,void 0,n);a.profile("http.seeka.webhook.app.ui");let o=new URL(e).pathname?.replace(/^\/app/,"")||"/";a.verbose("Received Seeka ui request",{requestedPath:o,url:e,method:t});let c=C.default.resolve("./dist/src/ui/build"),d=null,I=null,g,p={},K=[],u,J=async()=>(u=await de(e,r,()=>le(a),a),u?(d=u.seekaAppId,I=u.seekaAppInstallId,g=u.installation,a=T(null,g,a,n),K.push({name:W(process.env.SEEKA_APP_ID),value:u.appAccessToken,httpOnly:!0,secure:!0,sameSite:"None",expires:new Date(u.expiresAt*1e3)}),K.push({name:j(process.env.SEEKA_APP_ID),value:u.coreApiAccessToken,httpOnly:!0,secure:!0,sameSite:"None",expires:new Date(u.expiresAt*1e3)}),null):{status:403,jsonBody:{error:"Invalid token"}}),k=C.default.join(c,o),P;try{if(o==="/"+ue){let f=await J();if(f)return f;let w=process.env.APP_UI_BASE_PATH?`${process.env.APP_UI_BASE_PATH}`:"",x=`${process.env.SELF_HOST_BASEURL}${w}`,wt={seekaAppId:d||"",seekaAppInstallId:I||"",organisationBrandId:g?.organisationBrandId||"",appBaseUrl:x,state:await i(g,a)};P=`window.seekaAppConfig = ${JSON.stringify(wt)}`}if(o.startsWith("/api")){let f=await J();if(f)return f;let w=await s(o,t,g,a);return w||{status:404,jsonBody:{error:"Not found"}}}if(o==="/"||o==="/index.html"){let f=await J();if(f)return f;let w=`?${H}=${encodeURIComponent(u?.appAccessToken||"")}&${G}=${encodeURIComponent(u?.coreApiAccessToken||"")}&`;k=C.default.join(c,"index.html");let x=await kt(k,"utf-8");x=x.replace(ue+"?",ue+w),P=x}else P||(k=C.default.join(c,o),await ge.promises.access(k))}catch(f){k=C.default.join(c,"index.html"),console.log("File not found, serving index.html",{err:f,requestedPath:o,buildPath:c,filePath:k,content:P})}return P||(P=await kt(k)),{status:200,headers:{"Content-Type":Tr(k),"Referrer-Policy":"no-referrer",...p},cookies:K,body:P}};function Tr(e){return e.endsWith(".html")?"text/html":e.endsWith(".js")?"application/javascript":e.endsWith(".css")?"text/css":e.endsWith(".png")?"image/png":e.endsWith(".jpg")||e.endsWith(".jpeg")?"image/jpeg":e.endsWith(".gif")?"image/gif":"application/octet-stream"}var fe=m(require("fs")),At=m(require("path")),he=m(require("util")),St=m(require("winston")),Cr=he.default.promisify(fe.default.existsSync),xr=he.default.promisify(fe.default.readFile);async function Er(e,t,r){return await Pt(e,"seeka-browser-plugin.min.js",t,r)}async function Pt(e,t,r,n){n.profile("http.seeka.browser.plugin");let i,s;try{n.verbose("Handling request for browser plugin content");let a=At.default.resolve(`./dist/src/browser/${t}`);await Cr(a)?(i=await xr(a,"utf8"),s=`${e}(${JSON.stringify(r)})`):n.error("Browser plugin content not found",{path:a})}catch(a){n.error("Failed to handle request for browser plugin content",{ex:St.default.exceptions.getAllInfo(a)})}finally{n.profile("http.seeka.browser.plugin"),n.verbose("Request for browser plugin content handled")}if(!i||!s)throw new Error("Failed to handle request for browser plugin content");return{content:i,init:s}}0&&(module.exports={appLogger,backgroundJobLogger,checkAuth,childLogger,connect,createOrUpdateInstallation,deleteInstallation,disconnect,generateAppUiHttpRequestResponse,getAccessTokenAndCheck,getKey,getList,getOrCreate,getOrCreateClient,getSeekaBrowserPlugin,getSeekaBrowserPluginByName,isConnected,listInstallations,remove,set,startServices,stopServices,tryGet,tryGetInstallation,webhookLogger});
@@ -1 +1 @@
1
- import{createClient as Z}from"redis";import*as C from"winston";var ee=process.env.REDIS_CONNECTION_TLS==="true"?"rediss://":"redis://",te=`${ee}${process.env.REDIS_CONNECTION_USER}:${process.env.REDIS_CONNECTION_PASSWORD}@${process.env.REDIS_CONNECTION_HOST}:${process.env.REDIS_CONNECTION_PORT}`,w,g=e=>w||(w=Z({url:te,disableClientInfo:!0}).on("error",t=>e.error("Redis Client ",{ex:C.exceptions.getAllInfo(t)})),w),ne=async e=>{await(await g(e)).connect()},D=async e=>(await g(e)).isOpen,se=async e=>{await(await g(e)).destroy()},H=e=>`seeka:app:${process.env.SEEKA_APP_ID}:${e}`,y=(e,t)=>`${H(e)}:${t}`;async function Ae(e,t,s,n="string",a){let r=y(e,t),o=await g(a),p=await q(o,r);return p?JSON.parse(p):(n==="json"?await o.json.set(r,"$",s):await o.set(r,JSON.stringify(s)),s)}async function U(e,t,s="string",n){let a=y(e,t),r=await g(n);if(s==="json"){let o=await r.json.get(a);if(o)return o}else{let o=await q(r,a);if(o)return JSON.parse(o)}return null}async function j(e,t){let s=H(e),n=await g(t),a=await n.keys(`${s}:*`),r=await n.mGet(a);return r?r.filter(o=>!!o).map(o=>JSON.parse(o)):[]}async function W(e,t,s,n="string",a){let r=y(e,t),o=await g(a);n==="json"?await o.json.set(r,"$",s):await o.set(r,JSON.stringify(s))}async function F(e,t,s){let n=y(e,t);await(await g(s)).del(n)}async function q(e,t){let s=await e.get(t);return typeof s=="string"?s:s?s.toString():""}var K=async e=>{e.debug(`Trying to connect to Redis - ${process.env.REDIS_CONNECTION_HOST}`);try{await D(e)?e.verbose(`Redis already connected - ${process.env.REDIS_CONNECTION_HOST}`):(e.profile("service.redis.connect"),await ne(e),e.profile("service.redis.connect"),e.debug(`Redis connected - ${process.env.REDIS_CONNECTION_HOST}`))}catch(t){throw e.error(`Failed to connect to Redis - ${process.env.REDIS_CONNECTION_HOST}`,{ex:C.exceptions.getAllInfo(t)}),t}},ke=async e=>{e.debug(`Trying to disconnect from Redis - ${process.env.REDIS_CONNECTION_HOST}`);try{await D(e)===!1?e.verbose(`Redis already disconnected - ${process.env.REDIS_CONNECTION_HOST}`):(e.profile("service.redis.disconnect"),await se(e),e.profile("service.redis.disconnect"),e.verbose(`Redis disconnected - ${process.env.REDIS_CONNECTION_HOST}`))}catch(t){throw e.error(`Failed to disconnect from Redis - ${process.env.REDIS_CONNECTION_HOST}`,{ex:C.exceptions.getAllInfo(t)}),t}};var x="install",O=async(e,t,s)=>{let n=await U(x,e,"string",s);if(n==null&&t)throw s.error(`Seeka installation ${e} not found`),new Error(`Seeka installation ${e} not found`);return n},we=async e=>await j(x,e),Ce=async(e,t)=>{e.installationState||(e.installationState={}),e.installedAt||(e.installedAt=new Date().toISOString());let s=await O(e.applicationInstallId,!1,t)===null;return await W(x,e.applicationInstallId,e,"string",t),t.info(s?"Created installation state":"Updated installation state",{applicationInstallId:e.applicationInstallId,organisationId:e.organisationId,organisationBrandId:e.organisationBrandId}),e},ye=async(e,t)=>{await F(x,e,t),t.info("Deleted installation state",{applicationInstallId:e})};var h=e=>"seeka_app_"+e+"_at_app",v=e=>"seeka_app_"+e+"_at_core",R="X-Seeka-App-Token",L="X-Seeka-CoreApi-Token",P="at_app",E="at_core";import oe from"jsonwebtoken";var J=async(e,t,s,n)=>{let a=new URL(e),r=t.get("Cookie"),o=a.searchParams.get(P)||"";if(!o&&t.get(R)&&(o=t.get(R)?.split("Bearer ")[1]),!o&&r){let i=r.split(";").find(d=>d.trim().startsWith(h(process.env.SEEKA_APP_ID)));i&&(o=i.split("=")[1])}let p=a.searchParams.get(E)||"";if(!p&&t.get(L)&&(p=t.get(L)?.split("Bearer ")[1]),!p&&r){let i=r.split(";").find(d=>d.trim().startsWith(v(process.env.SEEKA_APP_ID)));i&&(p=i.split("=")[1])}return await re(o,p,s,n)},re=async(e,t,s,n)=>{let a,r,o;if(e)try{let i=oe.verify(e,process.env.SEEKA_APP_SECRET,{ignoreNotBefore:!0});if(n.info("Decoded token",{decoded:i}),!i.appId||i.appId.replace(/-/g,"")!==process.env.SEEKA_APP_ID.replace(/-/g,"")){n.error("Invalid token - app id does not match",{decoded:i,appIdToken:i.appId,appIdEnv:process.env.SEEKA_APP_ID});return}else a=i.appId;if(i.appInstallId)r=i.appInstallId;else{n.error("Invalid token - no appInstallId",{decoded:i});return}o=i.exp}catch(i){n.error("Failed to validate token",{err:i});return}else{n.error("No access token present");return}s&&await s(n);let p=await O(r,!1,n);if(p==null){n.warn("UI call cannot be processed as the installation ID is not known by this app",{seekaAppInstallId:r});return}return{appAccessToken:e,coreApiAccessToken:t,seekaAppId:a,seekaAppInstallId:r,expiresAt:o,installation:p}};import{promises as M}from"fs";import T from"path";import*as u from"winston";import{OpenTelemetryTransportV3 as ie}from"@opentelemetry/winston-transport";var G=[new u.transports.Console({level:process.env.LOGGING_LEVEL,format:u.format.combine(u.format.errors({stack:!0}),u.format.cli(),u.format.splat()),handleExceptions:!0,handleRejections:!0})];process.env.OTEL_SDK_DISABLED!=="true"&&G.push(new ie({handleExceptions:!0,handleRejections:!0}));var ae=u.createLogger({level:process.env.LOGGING_LEVEL,transports:G,exitOnError:!1}),S=(e,t,s=ae,n={})=>s.child({...e,...t?{seekaAppInstallId:t.applicationInstallId,seekaAppInstallOrganisationBrandId:t.organisationBrandId,seekaAppInstallOrganisationId:t.organisationId,...n?.invocationId?{"faas.invocation_id":n.invocationId}:{}}:{}}),Oe=(e,t)=>{let s={seekaWebhookType:e.type,seekaWebhookIsTest:e.isTest,RequestId:e.requestId,"faas.invocation_id":t.invocationId,CausationId:e.causationId,CorrelationId:e.causationId},n=e.context;return n&&(s.seekaAppInstallId=n.applicationInstallId,s.seekaAppInstallOrganisationBrandId=n.organisationBrandId,s.seekaAppInstallOrganisationId=n.organisationId),S(s)},Re=(e,t,s)=>{let n={jobContext:t,jobName:e,"faas.invocation_id":s.invocationId,CausationId:t?.causationId,CorrelationId:t?.causationId,seekaAppInstallId:t?.applicationInstallId??t?.payload.applicationInstallId,seekaAppInstallOrganisationBrandId:t?.organisationBrandId,seekaAppInstallOrganisationId:t?.organisationId};return S(n)};async function Q(e,t){return await M.readFile(e,{encoding:t})}var b="config.js",We=async(e,t,s,n,a,r)=>{let o=S(null,void 0,void 0,n);o.profile("http.seeka.webhook.app.ui");let i=new URL(e).pathname?.replace(/^\/app/,"")||"/";o.verbose("Received Seeka ui request",{requestedPath:i,url:e,method:t});let d=T.resolve("./dist/src/ui/build"),B=null,$=null,A,z={},N=[],c,_=async()=>(c=await J(e,s,()=>K(o),o),c?(B=c.seekaAppId,$=c.seekaAppInstallId,A=c.installation,o=S(null,A,o,n),N.push({name:h(process.env.SEEKA_APP_ID),value:c.appAccessToken,httpOnly:!0,secure:!0,sameSite:"None",expires:new Date(c.expiresAt*1e3)}),N.push({name:v(process.env.SEEKA_APP_ID),value:c.coreApiAccessToken,httpOnly:!0,secure:!0,sameSite:"None",expires:new Date(c.expiresAt*1e3)}),null):{status:403,jsonBody:{error:"Invalid token"}}),f=T.join(d,i),I;try{if(i==="/"+b){let l=await _();if(l)return l;let m=process.env.APP_UI_BASE_PATH?`${process.env.APP_UI_BASE_PATH}`:"",k=`${process.env.SELF_HOST_BASEURL}${m}`,Y={seekaAppId:B||"",seekaAppInstallId:$||"",organisationBrandId:A?.organisationBrandId||"",appBaseUrl:k,state:await a(A,o)};I=`window.seekaAppConfig = ${JSON.stringify(Y)}`}if(i.startsWith("/api")){let l=await _();if(l)return l;let m=await r(i,t,A,o);return m||{status:404,jsonBody:{error:"Not found"}}}if(i==="/"||i==="/index.html"){let l=await _();if(l)return l;let m=`?${P}=${encodeURIComponent(c?.appAccessToken||"")}&${E}=${encodeURIComponent(c?.coreApiAccessToken||"")}&`;f=T.join(d,"index.html");let k=await Q(f,"utf-8");k=k.replace(b+"?",b+m),I=k}else I||(f=T.join(d,i),await M.access(f))}catch(l){f=T.join(d,"index.html"),console.log("File not found, serving index.html",{err:l,requestedPath:i,buildPath:d,filePath:f,content:I})}return I||(I=await Q(f)),{status:200,headers:{"Content-Type":pe(f),"Referrer-Policy":"no-referrer",...z},cookies:N,body:I}};function pe(e){return e.endsWith(".html")?"text/html":e.endsWith(".js")?"application/javascript":e.endsWith(".css")?"text/css":e.endsWith(".png")?"image/png":e.endsWith(".jpg")||e.endsWith(".jpeg")?"image/jpeg":e.endsWith(".gif")?"image/gif":"application/octet-stream"}import V from"fs";import ce from"path";import X from"util";import le from"winston";var de=X.promisify(V.existsSync),ue=X.promisify(V.readFile);async function Me(e,t,s){return await fe(e,"seeka-browser-plugin.min.js",t,s)}async function fe(e,t,s,n){n.profile("http.seeka.browser.plugin");let a,r;try{n.verbose("Handling request for browser plugin content");let o=ce.resolve(`./dist/src/browser/${t}`);await de(o)?(a=await ue(o,"utf8"),r=`${e}(${JSON.stringify(s)})`):n.error("Browser plugin content not found",{path:o})}catch(o){n.error("Failed to handle request for browser plugin content",{ex:le.exceptions.getAllInfo(o)})}finally{n.profile("http.seeka.browser.plugin"),n.verbose("Request for browser plugin content handled")}if(!a||!r)throw new Error("Failed to handle request for browser plugin content");return{content:a,init:r}}export{ae as appLogger,Re as backgroundJobLogger,re as checkAuth,S as childLogger,ne as connect,Ce as createOrUpdateInstallation,ye as deleteInstallation,se as disconnect,We as generateAppUiHttpRequestResponse,J as getAccessTokenAndCheck,y as getKey,j as getList,Ae as getOrCreate,g as getOrCreateClient,Me as getSeekaBrowserPlugin,fe as getSeekaBrowserPluginByName,D as isConnected,we as listInstallations,F as remove,W as set,K as startServices,ke as stopServices,U as tryGet,O as tryGetInstallation,Oe as webhookLogger};
1
+ var ft=Object.create;var se=Object.defineProperty;var ht=Object.getOwnPropertyDescriptor;var mt=Object.getOwnPropertyNames;var yt=Object.getPrototypeOf,vt=Object.prototype.hasOwnProperty;var g=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,r)=>(typeof require<"u"?require:t)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var It=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var kt=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of mt(t))!vt.call(e,i)&&i!==r&&se(e,i,{get:()=>t[i],enumerable:!(n=ht(t,i))||n.enumerable});return e};var At=(e,t,r)=>(r=e!=null?ft(yt(e)):{},kt(t||!e||!e.__esModule?se(r,"default",{value:e,enumerable:!0}):r,e));var Ye=It((Ar,ze)=>{"use strict";var St=Object.create,U=Object.defineProperty,Pt=Object.getOwnPropertyDescriptor,wt=Object.getOwnPropertyNames,Tt=Object.getPrototypeOf,Ct=Object.prototype.hasOwnProperty,xt=(e,t)=>{for(var r in t)U(e,r,{get:t[r],enumerable:!0})},ce=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of wt(t))!Ct.call(e,i)&&i!==r&&U(e,i,{get:()=>t[i],enumerable:!(n=Pt(t,i))||n.enumerable});return e},m=(e,t,r)=>(r=e!=null?St(Tt(e)):{},ce(t||!e||!e.__esModule?U(r,"default",{value:e,enumerable:!0}):r,e)),Et=e=>ce(U({},"__esModule",{value:!0}),e),pe={};xt(pe,{ActivityPipelineActivityFilterSourceItemType:()=>Ee,ActivityPipelineActivityFilterType:()=>Ce,AnalyticsLibrary:()=>Ne,ApiException:()=>$e,ApiServiceProxyBase:()=>Y,AppPermissionKeys:()=>k,ClickAttributionSourcePlatform:()=>Te,ConditionComparer:()=>xe,ConditionOperator:()=>be,ConsentMappingMatchType:()=>Be,ContentIdentificationBehavior:()=>Oe,ConvergePipelineLoggableActivityType:()=>Se,ConvergeVendorDestinationPublishStrategy:()=>_e,CrossDomainTrackingUtmBehavior:()=>Re,ECommerceContentType:()=>ve,ECommerceFinancialStatus:()=>Ae,ECommerceFulfillmentStatus:()=>ke,ECommercePlatform:()=>Ie,IabPrivacyConsentPurposeId:()=>Le,IabPrivacyConsentPurposeIdMap:()=>rr,IdentityServiceProxy:()=>ge,IngestServiceProxy:()=>fe,PrivacyConsentType:()=>me,PrivacyDataControlMode:()=>De,RegionalConsentGrantOption:()=>Ue,ResponseResultType:()=>he,SdkLogEventLevel:()=>Pe,SeekaApiHelper:()=>je,SeekaAppCacheManager:()=>E,SeekaAppConfig:()=>ue,SeekaAppHelper:()=>Qt,SeekaWebhookCallType:()=>we,TrackingActivityNames:()=>R,TrackingEventSourceOriginType:()=>ye,chunk:()=>V,decryptText:()=>Je,encryptText:()=>Ke,getActivityName:()=>Ot,getIssuer:()=>X,getNewAppInstallToken:()=>Me,getNewOrCachedAppInstallToken:()=>Z,isValidSeekaProfileId:()=>tr,matchActivityPipelineFilters:()=>er,separatePersonFullName:()=>Lt,throwOnInvalidWebhookSignature:()=>zt,urls:()=>nr,validateWebhookSignature:()=>He,webhookSignatureHeaderName:()=>z});ze.exports=Et(pe);var bt="3.3.1",de=m(g("axios")),ue=class{appId;appSecret;ingestUrl;issuerUrl;organisationId;applicationInstallId;runtime;logger;grantedPermissions;transformApiRequest;transformApiResponse;hasAnyPermissions;hasAllPermissions;hasPermission},Y=class{config;constructor(e){this.config=e}transformOptions=async e=>await this.config.transformApiRequest(e);transformResult=async(e,t,r)=>await this.config.transformApiResponse(e,t,r)},ge=class extends Y{instance;baseUrl;jsonParseReviver=void 0;constructor(e,t,r){super(e),this.instance=r||de.default.create(),this.baseUrl=t??"https://api-localdev-env0-seeka.au.ngrok.io"}merge(e,t){let r=this.baseUrl+"/api/identity";r=r.replace(/[?&]$/,"");let n={data:JSON.stringify(e),method:"POST",url:r,headers:{"Content-Type":"application/json",Accept:"application/json"},cancelToken:t};return this.transformOptions(n).then(i=>this.instance.request(i)).catch(i=>{if(Fe(i)&&i.response)return i.response;throw i}).then(i=>this.transformResult(r,i,s=>this.processMerge(s)))}processMerge(e){let t=e.status,r={};if(e.headers&&typeof e.headers=="object")for(let n in e.headers)e.headers.hasOwnProperty(n)&&(r[n]=e.headers[n]);if(t===200){let n=e.data,i=null;return i=JSON.parse(n),Promise.resolve(i)}else if(t===400){let n=e.data,i=null;return i=JSON.parse(n),A("A server side error occurred.",t,n,r,i)}else if(t===401){let n=e.data,i=null;return i=JSON.parse(n),A("A server side error occurred.",t,n,r,i)}else if(t===422){let n=e.data,i=null;return i=JSON.parse(n),A("A server side error occurred.",t,n,r,i)}else if(t!==200&&t!==204){let n=e.data;return A("An unexpected server error occurred.",t,n,r)}return Promise.resolve(null)}},fe=class extends Y{instance;baseUrl;jsonParseReviver=void 0;constructor(e,t,r){super(e),this.instance=r||de.default.create(),this.baseUrl=t??"https://api-localdev-env0-seeka.au.ngrok.io"}batch(e,t){let r=this.baseUrl+"/api/ingest";r=r.replace(/[?&]$/,"");let n={data:JSON.stringify(e),method:"POST",url:r,headers:{"Content-Type":"application/json"},cancelToken:t};return this.transformOptions(n).then(i=>this.instance.request(i)).catch(i=>{if(Fe(i)&&i.response)return i.response;throw i}).then(i=>this.transformResult(r,i,s=>this.processBatch(s)))}processBatch(e){let t=e.status,r={};if(e.headers&&typeof e.headers=="object")for(let n in e.headers)e.headers.hasOwnProperty(n)&&(r[n]=e.headers[n]);if(t===202){let n=e.data;return Promise.resolve(null)}else if(t===400){let n=e.data,i=null;return i=JSON.parse(n),A("A server side error occurred.",t,n,r,i)}else if(t===401){let n=e.data,i=null;return i=JSON.parse(n),A("A server side error occurred.",t,n,r,i)}else if(t===422){let n=e.data,i=null;return i=JSON.parse(n),A("A server side error occurred.",t,n,r,i)}else if(t!==200&&t!==204){let n=e.data;return A("An unexpected server error occurred.",t,n,r)}return Promise.resolve(null)}},he=(e=>(e.Undefined="undefined",e.Success="success",e.Failed="failed",e))(he||{}),me=(e=>(e.Unknown="unknown",e.Informed="informed",e.Implied="implied",e.Explicit="explicit",e.Active="active",e.Passive="passive",e))(me||{}),ye=(e=>(e.Browser="browser",e.Server="server",e.Mobile="mobile",e.Desktop="desktop",e.PhysicalStore="physicalStore",e.Email="email",e.Phone="phone",e.Chat="chat",e.Automatic="automatic",e))(ye||{}),R=(e=>(e.Undefined="undefined",e.PageViewOrganic="pageViewOrganic",e.PageViewUtmAttributed="pageViewUtmAttributed",e.AddPaymentMethod="addPaymentMethod",e.AddToWishlist="addToWishlist",e.ContactMessage="contactMessage",e.Custom="custom",e.SyncCart="syncCart",e.Order="order",e.InitiateCheckout="initiateCheckout",e.AddToCart="addToCart",e.RemoveFromCart="removeFromCart",e.OneTimeItemPurchase="oneTimeItemPurchase",e.SubscriptionItemPurchase="subscriptionItemPurchase",e.ViewProduct="viewProduct",e.ViewPage="viewPage",e.ApplyPromotionalCode="applyPromotionalCode",e.KeywordSearch="keywordSearch",e.UserLoginSignup="userLoginSignup",e.UserLogin="userLogin",e.NewsletterSignup="newsletterSignup",e.Lead="lead",e.ChangeProductAttribute="changeProductAttribute",e.FilterItemsByAttribute="filterItemsByAttribute",e.Schedule="schedule",e.ViewContentItem="viewContentItem",e.StartTrial="startTrial",e))(R||{}),ve=(e=>(e.Undefined="undefined",e.SingleProduct="singleProduct",e.SingleVariant="singleVariant",e.Collection="collection",e))(ve||{}),Ie=(e=>(e.None="none",e.BigCommerce="bigCommerce",e.Shopify="shopify",e.OrderGroove="orderGroove",e.Magento="magento",e.Generic="generic",e.WooCommerce="wooCommerce",e.Demandware="demandware",e))(Ie||{}),ke=(e=>(e.Undefined="undefined",e.Fulfilled="fulfilled",e.NoneFulfilled="noneFulfilled",e.PartiallyFulfilled="partiallyFulfilled",e.RestockedOrCancelled="restockedOrCancelled",e.Pending="pending",e))(ke||{}),Ae=(e=>(e.Undefined="undefined",e.Pending="pending",e.Authorized="authorized",e.PartiallyPaid="partiallyPaid",e.Paid="paid",e.PartiallyRefunded="partiallyRefunded",e.Refunded="refunded",e.Voided="voided",e))(Ae||{}),Se=(e=>(e.Generic="generic",e.ActivityIngress="activityIngress",e.ActivityEgress="activityEgress",e.UserProfile="userProfile",e.SdkLog="sdkLog",e.Detections="detections",e.ActivityEgressFilter="activityEgressFilter",e.Diagnosis="diagnosis",e.PipelineIntegrationOutput="pipelineIntegrationOutput",e))(Se||{}),Pe=(e=>(e.Information="information",e.Warning="warning",e.Error="error",e.Verbose="verbose",e))(Pe||{}),we=(e=>(e.None="none",e.Probe="probe",e.AppInstalled="appInstalled",e.IdentityChanged="identityChanged",e.ActivityAccepted="activityAccepted",e.AppInstallSettingsUpdated="appInstallSettingsUpdated",e.AppUninstalled="appUninstalled",e.BrowserSdkPlugin="browserSdkPlugin",e))(we||{}),Te=(e=>(e.Unknown="unknown",e.Google="google",e.Meta="meta",e.Snapchat="snapchat",e.Pinterest="pinterest",e.TikTok="tikTok",e))(Te||{}),Ce=(e=>(e.Undefined="undefined",e.PurchaseMade="purchaseMade",e.ActivityTracked="activityTracked",e))(Ce||{}),xe=(e=>(e.Undefined="undefined",e.And="and",e.Or="or",e))(xe||{}),Ee=(e=>(e.Undefined="undefined",e.Domain="domain",e.Pipeline="pipeline",e.Wildcard="wildcard",e.Url="url",e.PagePath="pagePath",e))(Ee||{}),be=(e=>(e.Undefined="undefined",e.Equals="equals",e.NotEquals="notEquals",e.Contains="contains",e.NotContains="notContains",e.StartsWith="startsWith",e.EndsWith="endsWith",e.IsNull="isNull",e.NotNull="notNull",e.IsTrue="isTrue",e.IsFalse="isFalse",e.GreaterThanOrEquals="greaterThanOrEquals",e.LessThanOrEquals="lessThanOrEquals",e.GreaterThan="greaterThan",e.LessThan="lessThan",e.Before="before",e.After="after",e.Between="between",e.In="in",e.NotIn="notIn",e.Regex="regEx",e.Any="any",e))(be||{}),Ne=(e=>(e.Undefined="undefined",e.Seeka="seeka",e.DynamicYield="dynamicYield",e.Segment="segment",e.FacebookPixel="facebookPixel",e.GoogleAnalytics="googleAnalytics",e.Braze="braze",e.SnapchatPixel="snapchatPixel",e.Pinterest="pinterest",e.TikTokPixel="tikTokPixel",e.GoogleAds="googleAds",e))(Ne||{}),Oe=(e=>(e.Default="default",e.Sku="sku",e.ProductId="productId",e.VariantId="variantId",e.ProductIdAndVariantIdUnderscore="productIdAndVariantIdUnderscore",e.VariantIdOrProductId="variantIdOrProductId",e))(Oe||{}),_e=(e=>(e.DeliverAllTraitsAndDeliverAllEvents="deliverAllTraitsAndDeliverAllEvents",e.DeliverAllTraitsAndDeliverEventsOnlyIfMaxWeightedTraitsPresent="deliverAllTraitsAndDeliverEventsOnlyIfMaxWeightedTraitsPresent",e.DeliverMaxWeightedTraitsOnlyAndDeliverAllEvents="deliverMaxWeightedTraitsOnlyAndDeliverAllEvents",e.DeliverMaxWeightedTraitsOnlyAndDeliverEventsOnlyIfMaxWeightedTraitsPresent="deliverMaxWeightedTraitsOnlyAndDeliverEventsOnlyIfMaxWeightedTraitsPresent",e))(_e||{}),Re=(e=>(e.None="none",e.SessionPassthrough="sessionPassthrough",e.UrlPassthrough="urlPassthrough",e))(Re||{}),Ue=(e=>(e.Unset="unset",e.Granted="granted",e.Denied="denied",e))(Ue||{}),Le=(e=>(e.Undefined="undefined",e.MeasureAdvertisingPerformance="measureAdvertisingPerformance",e))(Le||{}),Be=(e=>(e.Undefined="undefined",e.AllOf="allOf",e.AnyOf="anyOf",e))(Be||{}),De=(e=>(e.Disabled="disabled",e.Explicit="explicit",e.Implicit="implicit",e))(De||{}),$e=class extends Error{message;status;response;headers;result;constructor(e,t,r,n,i){super(),this.message=e,this.status=t,this.response=r,this.headers=n,this.result=i}isApiException=!0;static isApiException(e){return e.isApiException===!0}};function A(e,t,r,n,i){throw i??new $e(e,t,r,n,null)}function Fe(e){return e&&e.isAxiosError===!0}var x=g("openid-client"),Q=m(g("winston")),K=m(g("memory-cache")),ae="seeka:sdk",E=class{constructor(e,t){this.appId=e,this.appInstallationId=t}appId;appInstallationId;set=async(e,t,r)=>{let n=this.getKey(e);K.default.put(n,JSON.stringify(t),r)};getOrSet=async(e,t,r)=>{let n=this.getKey(e),i=K.default.get(n);if(i){let a=JSON.parse(i);return r&&await r(a),a}let s=await t();return s?(K.default.put(n,JSON.stringify(s.value),s.expiryAbsoluteMilliseconds),s.value):null};getKey=e=>this.appInstallationId?`${ae}:${this.appId}:${this.appInstallationId}:${e}`:`${ae}:${this.appId}:${e}`},Nt=m(g("crypto")),J=()=>{let e=Rt(new Date),t=_t();return`${e}.${t}`},Ot=e=>{let t=Object.keys(R),r=e.toLowerCase(),n=t.find(i=>i.toLowerCase()===r);return n?R[n]:"custom"},_t=()=>Math.floor(Math.random()*(9999999999-1e9)+1e9).toString(),Rt=e=>{let t=(e.getUTCMonth()+1).toString();t.length<2&&(t="0"+t);let r=e.getUTCDate().toString();r.length<2&&(r="0"+r);let n=e.getUTCHours().toString();n.length<2&&(n="0"+n);let i=e.getUTCMinutes().toString();i.length<2&&(i="0"+i);let s=e.getUTCSeconds().toString();return s.length<2&&(s="0"+s),`${e.getUTCFullYear()}${t}${r}.${n}${i}${s}`},Ut=e=>Nt.createHash("md5").update(e).digest("hex"),Lt=e=>{if(!e)return{firstName:null,lastName:null};let t=e.trim().split(" ");return t.length===1?{firstName:e,lastName:null}:t.length===2?{firstName:t[0],lastName:t[1]}:{firstName:t[0],lastName:t.slice(1).join(" ")}},V=(e,t)=>e.reduce((r,n,i)=>{let s=Math.floor(i/t);return r[s]||(r[s]=[]),r[s].push(n),r},[]),X=async e=>{let t={applicationId:e.appId,issuer:{url:e.issuerUrl}};e.logger?e.logger.debug("Seeka auth: getting issuer",{...t}):console.debug("Seeka auth: getting issuer",{...t});let r=new E(e.appId,e.applicationInstallId),n=Ut(e.issuerUrl+"_"+e.appId),i=await r.getOrSet(n,async()=>{try{let s=await Bt(e);return!s||!s.meta||!s.raw?null:(e.logger?e.logger.verbose("Seeka auth: got issuer from remote",{...t}):console.debug("Seeka auth: got issuer from remote",{...t}),{value:s.meta,expiryAbsoluteMilliseconds:1e3*60*60})}catch(s){return e.logger?e.logger.error("Seeka auth: failed getting issuer",{...t,ex:Q.default.exceptions.getAllInfo(s)}):console.error("Seeka auth: failed getting issuer",{...t}),null}},async()=>{e.logger?e.logger.verbose("Seeka auth: got issuer from cache",{...t}):console.debug("Seeka auth: got issuer from cache",{...t})});return i===null?null:new x.Configuration(i.serverMetadata,i.clientId,e.appSecret)},Bt=async e=>{let t={applicationId:e.appId,issuer:{url:e.issuerUrl}};e.logger?e.logger.verbose("Seeka auth: discovering issuer from remote",{...t}):console.info("Seeka auth: discovering issuer from remote",{...t});try{let r=e.appId.replace(/-/g,""),n=await(0,x.discovery)(new URL(e.issuerUrl),r,void 0,(0,x.None)(),{timeout:1e4});return e.logger?e.logger.verbose("Seeka auth: discovered issuer from remote",{...t,client_id:n.clientMetadata().client_id}):console.info("Seeka auth: discovered issuer from remote",{...t,client_id:n.clientMetadata().client_id}),{meta:{serverMetadata:n.serverMetadata(),clientMetadata:n.clientMetadata(),timeout:n.timeout,clientId:r},raw:n}}catch(r){return e.logger?e.logger.error("Seeka auth: failed discovering issuer from remote",{...t,ex:Q.default.exceptions.getAllInfo(r)}):console.error("Seeka auth: failed discovering issuer from remote",{...t,err:r}),null}},Dt=async e=>{let t={applicationId:e.appId,issuer:{url:e.issuerUrl}},r=await X(e);if(!r)return null;try{let n=await(0,x.clientCredentialsGrant)(r,{resource:r.clientMetadata().client_id}),i={...t,token:{expires_at:n.expires_at,token_type:n.token_type,scope:n.scope}};return e.logger?e.logger.verbose("Seeka auth: got client access token from server",{...i}):console.info("Seeka auth: got app client token from server",{...i}),{token_type:n.token_type,access_token:n.access_token,expires_in:n.expires_in,id_token:n.id_token,refresh_token:n.refresh_token,scope:n.scope,authorization_details:n.authorization_details}}catch(n){let i={...t,error:n};return e.logger?e.logger.error("Seeka auth: failed to get client access token from server",{...i}):console.error("Seeka auth: failed to get client access token from server",{...i,err:Q.default.exceptions.getAllInfo(n)}),null}},Me=async(e,t)=>{let r={applicationId:t.appId,issuer:{url:t.issuerUrl}},n=await X(t);if(!n||!n)return null;try{let i=await(0,x.genericGrantRequest)(n,"app_install_token",{applicationInstallId:t.applicationInstallId,access_token:e,scope:"Seeka.API.Ingest"}),s={...r,token:{expires_at:i.expires_at,token_type:i.token_type,scope:i.scope}};return t.logger?t.logger.verbose("Seeka auth: got app access token from server",{...s}):console.info("Seeka auth: got app access token from server",{...s}),{token_type:i.token_type,access_token:i.access_token,expires_in:i.expires_in,id_token:i.id_token,refresh_token:i.refresh_token,scope:i.scope,authorization_details:i.authorization_details}}catch(i){let s={...r,error:i};return t.logger?t.logger.error("Seeka auth: failed to get app access token from server",{...s}):console.debug("Seeka auth: failed to get app access token from server",{...s}),null}},Z=async e=>{let t=new E(e.appId,e.applicationInstallId),r={applicationId:e.appId,issuer:{url:e.issuerUrl}};return await t.getOrSet("auth:token:appinstall",async()=>{let n=await Dt(e);if(!n||!n.access_token)return null;let i=await Me(n.access_token,e);return i?{value:i,expiryAbsoluteMilliseconds:((i.expires_in>n.expires_in?n.expires_in:i.expires_in)||900*1e3)-60*1e3}:null},async()=>{e.logger?e.logger.verbose("Seeka auth: got app token from cache",{...r}):console.debug("Seeka auth: got app token from cache",{...r})})},qe="https://router.seeka.services",$t="https://router.seeka.services/tel/otel",We="https://account.seeka.app",Ft=(e,t,r,n,i)=>{let s=new ue;return s.appId=e.applicationId,s.appSecret=t,s.ingestUrl=process.env.SEEKA_INGEST_URL||qe,s.issuerUrl=process.env.SEEKA_ISSUER_URL||We,s.organisationId=e.organisationId,s.applicationInstallId=e.applicationInstallId,s.runtime={type:"sdk/js/apps-server",ver:bt.split("-")[0],client:r},s.logger=i,s.grantedPermissions=n,s.transformApiRequest=a=>Mt(s,a),s.transformApiResponse=async(a,l,o)=>qt(s,a,l,o),s.hasAnyPermissions=a=>!s.grantedPermissions||s.grantedPermissions.length===0?!1:!a||a.length===0?!0:a.some(l=>s.grantedPermissions.includes(l)),s.hasAllPermissions=a=>!s.grantedPermissions||s.grantedPermissions.length===0?!1:!a||a.length===0?!0:a.every(l=>s.grantedPermissions.includes(l)),s.hasPermission=a=>!s.grantedPermissions||s.grantedPermissions.length===0?!1:a?s.grantedPermissions.includes(a):!0,s},Mt=async(e,t)=>{let r=await Z(e);if(!r||!r.access_token)throw new Error("Could not get access token for API request");return t.headers={...t.headers,"X-OrgId":e.organisationId,Authorization:"Bearer "+r?.access_token},t},qt=async(e,t,r,n)=>(r.data=JSON.stringify(r.data),n(r)),k={identity:{receiveFull:"Identity.Receive.Pii",send:"Identity.Send"},activity:{receiveAnon:"Activity.Receive.Anon",receiveFull:"Activity.Receive.Pii",send:"Activity.Send"}},Wt=m(g("axios")),jt=m(g("http")),Ht=m(g("https")),Gt=new jt.default.Agent({keepAlive:!0,scheduling:"fifo"}),Kt=new Ht.default.Agent({keepAlive:!0,scheduling:"fifo"}),oe=e=>{let t=Wt.default.create({httpAgent:Gt,httpsAgent:Kt});return t.interceptors.request.use(function(r){let n={url:r.url,method:r.method};return process.env.LOGGING_LEVEL==="silly"&&(n={...n,body:r.data,params:r.params}),e.logger?e.logger.debug(`Seeka API: making call to ${n.url}`,{...n}):console.debug(`Seeka API: making call to ${n.url}`,{...n}),r},function(r){let n={error:r};return e.logger?e.logger.http("Seeka API: failed to send request",{...n}):console.debug("Seeka API: failed to send request",{...n}),Promise.reject(r)}),t.interceptors.response.use(function(r){let n={url:r.request?.url||r.config.url,method:r.request?.method||r.config.method,response:{status:r.status}};return e.logger?e.logger.http(`Seeka API: call to ${n.url} succeeded`,{...n}):console.debug(`Seeka API: call to ${n.url} succeeded`,{...n}),r},function(r){let{code:n,status:i,message:s}=r,{headers:a,url:l,method:o}=r?.config,c={code:n,status:i,message:s,headers:a,url:l,method:o,content:r?.response?.data};return e.logger?e.logger.error(`Seeka API: call to ${c.url} failed`,{...c}):console.error(`Seeka API: call to ${c.url} failed`,{...c}),Promise.reject(r)}),t},le={getIdentityService:e=>new ge(e,e.ingestUrl,oe(e)),getIngestService:e=>new fe(e,e.ingestUrl,oe(e))},je=class{constructor(e){this.config=e,this.ingestionService=le.getIngestService(e),this.identityService=le.getIdentityService(e)}config;maxBatchSize=50;refreshOrPrimeTokenCache=async()=>{await Z(this.config)};ingestionService;identityService;checkPermission=(e,t)=>{if(!this.config.hasPermission(e))throw new Error("Cannot perform operation "+t+" on installationId "+this.config.applicationInstallId+" without permission "+e+". Currently granted permissions: "+(this.config.grantedPermissions?this.config.grantedPermissions.join(", "):"none"));return!0};mergeIdentity=async(e,t)=>{this.checkPermission(k.identity.send,"mergeIdentity");let r=J();return(await this.identityService.merge({id:e,src:{method:"",origin:t.origin,time:void 0,loc:t.loc,sess:r,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?r:void 0,runtime:this.config.runtime}})).result?.personId};mergeIdentityBatch=async(e,t)=>{this.checkPermission(k.identity.send,"mergeIdentityBatch");let r=J();if(e.length===0){this.config.logger?.debug("No identities in batch");return}let n={method:"",origin:t.origin,time:void 0,loc:t.loc,sess:r,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?r:void 0,runtime:this.config.runtime},i=V(e,this.maxBatchSize);if(i.length>1&&this.config.logger&&this.config.logger.debug(`Identity batch size ${e} is greater than ${this.maxBatchSize}, splitting into ${i.length} batches`),await this.trackActivityBatchRaw({data:i[0].map(s=>({id:{id:s||{},src:{...n}}}))}),i.length>1){let s=i.map((a,l)=>l===0?Promise.resolve():(this.config.logger?.verbose(`Processing identity batch ${l+1} of ${i.length}`),this.trackActivityBatchRaw({data:a.map(o=>({id:{id:o||{},src:{...n}}}))})));await Promise.all(s)}};trackActivityBatch=async(e,t)=>{this.checkPermission(k.activity.send,"trackActivityBatch");let r=J();if(e.length===0){this.config.logger?.debug("No activities in batch");return}let n={method:"",origin:t.origin,time:void 0,loc:t.loc,sess:r,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?r:void 0,runtime:this.config.runtime},i=V(e,this.maxBatchSize);if(i.length>1&&this.config.logger&&this.config.logger.debug(`Activity batch size ${e.length} is greater than ${this.maxBatchSize}, splitting into ${i.length} batches`),await this.trackActivityBatchRaw({data:i[0].map(s=>({ev:{id:s.profile||{},src:{...n},payload:s.activity}}))}),i.length>1){let s=i.map((a,l)=>l===0?Promise.resolve():(this.config.logger?.verbose(`Processing activity batch ${l+1} of ${i.length}`),this.trackActivityBatchRaw({data:a.map(o=>({ev:{id:o.profile||{},src:{...n},payload:o.activity}}))})));await Promise.all(s)}};trackActivityBatchRaw=async e=>{await this.ingestionService.batch(e)};trackActivityForProfileId=async(e,t,r)=>{this.checkPermission(k.activity.send,"trackActivityForProfileId"),await this.trackActivityForProfileIdBatch([e],t,r)};trackActivityForProfileIdBatch=async(e,t,r)=>{this.checkPermission(k.activity.send,"trackActivityForProfileIdBatch"),await this.trackActivityBatch(e.map(n=>({activity:n,profile:t?{seekaPId:t}:void 0})),r)};trackActivityForProfile=async(e,t,r)=>{this.checkPermission(k.activity.send,"trackActivityForProfile"),await this.trackActivityForProfileBatch([e],t,r)};trackActivityForProfileBatch=async(e,t,r)=>{this.checkPermission(k.activity.send,"trackActivityForProfileBatch"),await this.trackActivityBatch(e.map(n=>({activity:n,profile:t})),r)}},Jt=m(g("crypto")),z="x-seeka-signature-sha256",He=(e,t,r)=>{if(!t)return!1;let n=null;if(t.get&&typeof t.get=="function")n=t.get(z);else{let s=t[z];s&&(Array.isArray(s)&&s.length>0?n=s[0]:(typeof s=="string"||s instanceof String)&&(n=s))}if(!n)return!1;let i=Vt(e,r)===n;return i||console.warn("Invalid webhook signature"),i},Vt=(e,t)=>Jt.createHmac("sha256",e).update(t).digest("hex"),zt=(e,t,r)=>{if(!He(e,t,r))throw new Error("Invalid webhook signature")},C=m(g("crypto")),Ge="aes-192-cbc",Ke=(e,t)=>{if(!e)return"";if(!t)throw new Error("Secret is required to encrypt data");let r=C.default.scryptSync(t,"salt",24),n=C.default.randomBytes(16),i=C.default.createCipheriv(Ge,r,n);return[i.update(e,"utf8","hex")+i.final("hex"),Buffer.from(n).toString("hex")].join("|")},Je=(e,t)=>{if(!e)return"";if(!t)throw new Error("Secret is required to decrypt data");let[r,n]=e.split("|");if(!n)throw new Error("IV not found");let i=C.default.scryptSync(t,"salt",24),s=C.default.createDecipheriv(Ge,i,Buffer.from(n,"hex"));return s.update(r,"hex","utf8")+s.final("utf8")},Yt=class{constructor(e){this.appSecret=e}appSecret;encryptWithAppSecret=e=>{if(!this.appSecret)throw new Error("App secret is required to encrypt data");return Ke(e,this.appSecret)};decryptWithAppSecret=e=>{if(!this.appSecret)throw new Error("App secret is required to decrypt data");return Je(e,this.appSecret)}},Qt=class Ve{constructor(t,r){this.context=t,this.api=new je(t.config),this.appCache=new E(t.config.appId),this.appInstallCache=new E(t.config.appId,t.config.applicationInstallId),this.crypto=new Yt(t.config.appSecret),this.logger=r}context;appCache;appInstallCache;api;logger;crypto;static create=(t,r,n,i,s)=>new Ve({config:Ft({...r},t,{type:n.name,ver:n.version.split("-")[0]},i,s)},s)},Xt=m(g("winston")),Zt=["order","subscriptionItemPurchase","oneTimeItemPurchase"],er=(e,t,r)=>{if(!e.activity)return[];let n=e.activity,i=n.activityName==="custom"?n.activityNameCustom:n.activityName;if(!i)return[];let s=i.toLowerCase(),a=[];return t.forEach(l=>{if(!l)return;switch(l.type){case"activityTracked":{if(!l.activityNames||!l.activityNames.find(p=>p.toLowerCase()===s))return;r.verbose("Matched activity tracked filter",{filter:l,activityName:i});break}case"purchaseMade":{if(!n.activityName||!Zt.includes(n.activityName))return;r.verbose("Matched purchase made activity filter",{filter:l,activityName:i});break}default:{r.warn("Unknown activity filter type",{filter:l});return}}let o=l.sourceFilter;if(!o)return;let c=e.source,d;try{d=c?.loc?new URL(c.loc).hostname.toLowerCase():null}catch(p){r.error("Failed to parse activity source URL",{ex:Xt.default.exceptions.getAllInfo(p),activitySource:c}),d=null}let v=c?.pipeline?.convergePipelineIntegrationInstanceId?.toLowerCase(),f=o.filters?o.filters.map(p=>{switch(p.type){case"wildcard":return r.verbose("Matched wildcard source filter",{sourceFilter:p}),!0;case"domain":return!d||!p.key?!1:d===p.key.toLowerCase()?(r.verbose("Matched domain source filter",{sourceFilter:p,activityHostname:d}),!0):!1;case"pipeline":return!v||!p.key?!1:v===p.key.toLowerCase()?(r.verbose("Matched pipeline source filter",{sourceFilter:p,sourceConvergePipelineIntegrationInstanceId:v}),!0):!1}}):[];switch(o.comparer){case"and":{f.every(p=>p===!0)&&a.push(l);break}case"or":{f.some(p=>p===!0)&&a.push(l);break}default:{r.warn("Unknown source filter comparer",{sourceFilters:o});break}}}),a};function tr(e){if(!e||e.trim().length===0)return!1;let t=e.split(".").filter(r=>r.trim().length>0);return!(t.length!==4||t[0].toLowerCase()!=="sk".toLowerCase()||t[1].toLowerCase()!=="1".toLowerCase()||isNaN(parseInt(t[2],10))||isNaN(parseInt(t[3],10)))}var rr={measureAdvertisingPerformance:7},nr={defaultIssuerUrl:We,defaultTelemetryUrl:$t,defaultIngestUrl:qe}});var D=At(Ye());import{createClient as ir}from"redis";import*as B from"winston";var sr=process.env.REDIS_CONNECTION_TLS==="true"?"rediss://":"redis://",ar=`${sr}${process.env.REDIS_CONNECTION_USER}:${process.env.REDIS_CONNECTION_PASSWORD}@${process.env.REDIS_CONNECTION_HOST}:${process.env.REDIS_CONNECTION_PORT}`,L,S=e=>L||(L=ir({url:ar,disableClientInfo:!0}).on("error",t=>e.error("Redis Client ",{ex:B.exceptions.getAllInfo(t)})),L),or=async e=>{await S(e).connect()},Qe=async e=>S(e).isOpen,lr=async e=>{S(e).destroy()},Xe=e=>`seeka:app:${process.env.SEEKA_APP_ID}:${e}`,$=(e,t)=>`${Xe(e)}:${t}`,b=e=>e==="install",Ze=()=>{let e=process.env.DATA_ENCRYPTION_KEY;if(!e)throw new Error("DATA_ENCRYPTION_KEY is required to encrypt/decrypt installation state");return e},et=e=>{if(!e)return!1;let t=e.split("|");if(t.length!==2)return!1;let[r,n]=t;return!r||!n?!1:/^[0-9a-f]+$/i.test(r)&&/^[0-9a-f]{32}$/i.test(n)},ee=e=>{if(!et(e))return{plainText:e,wasEncrypted:!1};let t=Ze();return{plainText:(0,D.decryptText)(e,t),wasEncrypted:!0}},N=e=>{if(et(e))return{encryptedText:e,wasEncrypted:!0};let t=Ze();return{encryptedText:(0,D.encryptText)(e,t),wasEncrypted:!1}};async function _r(e,t,r,n="string",i){let s=$(e,t),a=S(i),l=await st(a,s);if(l){if(n==="string"&&b(e)){let{plainText:o,wasEncrypted:c}=ee(l);if(!c){let{encryptedText:d}=N(l);await a.set(s,d)}return JSON.parse(o)}return JSON.parse(l)}if(n==="json")await a.json.set(s,"$",r);else{let o=JSON.stringify(r);if(b(e)){let{encryptedText:c}=N(o);await a.set(s,c)}else await a.set(s,o)}return r}async function tt(e,t,r="string",n){let i=$(e,t),s=S(n);if(r==="json"){let a=await s.json.get(i);if(a)return a}else{let a=await st(s,i);if(a){if(b(e)){let{plainText:l,wasEncrypted:o}=ee(a);if(!o){let{encryptedText:c}=N(a);await s.set(i,c)}return JSON.parse(l)}return JSON.parse(a)}}return null}async function rt(e,t){let r=Xe(e),n=S(t),i=await n.keys(`${r}:*`),s=await n.mGet(i);if(s){let a=[];for(let l=0;l<s.length;l++){let o=s[l],c=i[l];if(!o)continue;let d=o;if(b(e)){let{plainText:v,wasEncrypted:f}=ee(d);if(!f){let{encryptedText:p}=N(d);await n.set(c,p)}a.push(JSON.parse(v))}else a.push(JSON.parse(d))}return a}return[]}async function nt(e,t,r,n="string",i){let s=$(e,t),a=S(i);if(n==="json")await a.json.set(s,"$",r);else{let l=JSON.stringify(r);if(b(e)){let{encryptedText:o}=N(l);await a.set(s,o)}else await a.set(s,l)}}async function it(e,t,r){let n=$(e,t);await S(r).del(n)}async function st(e,t){let r=await e.get(t);return typeof r=="string"?r:r?r.toString():""}var at=async e=>{e.debug(`Trying to connect to Redis - ${process.env.REDIS_CONNECTION_HOST}`);try{await Qe(e)?e.verbose(`Redis already connected - ${process.env.REDIS_CONNECTION_HOST}`):(e.profile("service.redis.connect"),await or(e),e.profile("service.redis.connect"),e.debug(`Redis connected - ${process.env.REDIS_CONNECTION_HOST}`))}catch(t){throw e.error(`Failed to connect to Redis - ${process.env.REDIS_CONNECTION_HOST}`,{ex:B.exceptions.getAllInfo(t)}),t}},Rr=async e=>{e.debug(`Trying to disconnect from Redis - ${process.env.REDIS_CONNECTION_HOST}`);try{await Qe(e)===!1?e.verbose(`Redis already disconnected - ${process.env.REDIS_CONNECTION_HOST}`):(e.profile("service.redis.disconnect"),await lr(e),e.profile("service.redis.disconnect"),e.verbose(`Redis disconnected - ${process.env.REDIS_CONNECTION_HOST}`))}catch(t){throw e.error(`Failed to disconnect from Redis - ${process.env.REDIS_CONNECTION_HOST}`,{ex:B.exceptions.getAllInfo(t)}),t}};var F="install",te=async(e,t,r)=>{let n=await tt(F,e,"string",r);if(n==null&&t)throw r.error(`Seeka installation ${e} not found`),new Error(`Seeka installation ${e} not found`);return n},Br=async e=>await rt(F,e),Dr=async(e,t)=>{e.installationState||(e.installationState={}),e.installedAt||(e.installedAt=new Date().toISOString());let r=await te(e.applicationInstallId,!1,t)===null;return await nt(F,e.applicationInstallId,e,"string",t),t.info(r?"Created installation state":"Updated installation state",{applicationInstallId:e.applicationInstallId,organisationId:e.organisationId,organisationBrandId:e.organisationBrandId}),e},$r=async(e,t)=>{await it(F,e,t),t.info("Deleted installation state",{applicationInstallId:e})};var M=e=>"seeka_app_"+e+"_at_app",q=e=>"seeka_app_"+e+"_at_core",re="X-Seeka-App-Token",ne="X-Seeka-CoreApi-Token",W="at_app",j="at_core";import cr from"jsonwebtoken";var ot=async(e,t,r,n)=>{let i=new URL(e),s=t.get("Cookie"),a=i.searchParams.get(W)||"";if(!a&&t.get(re)&&(a=t.get(re)?.split("Bearer ")[1]),!a&&s){let o=s.split(";").find(c=>c.trim().startsWith(M(process.env.SEEKA_APP_ID)));o&&(a=o.split("=")[1])}let l=i.searchParams.get(j)||"";if(!l&&t.get(ne)&&(l=t.get(ne)?.split("Bearer ")[1]),!l&&s){let o=s.split(";").find(c=>c.trim().startsWith(q(process.env.SEEKA_APP_ID)));o&&(l=o.split("=")[1])}return await pr(a,l,r,n)},pr=async(e,t,r,n)=>{let i,s,a;if(e)try{let o=cr.verify(e,process.env.SEEKA_APP_SECRET,{ignoreNotBefore:!0});if(n.info("Decoded token",{decoded:o}),!o.appId||o.appId.replace(/-/g,"")!==process.env.SEEKA_APP_ID.replace(/-/g,"")){n.error("Invalid token - app id does not match",{decoded:o,appIdToken:o.appId,appIdEnv:process.env.SEEKA_APP_ID});return}else i=o.appId;if(o.appInstallId)s=o.appInstallId;else{n.error("Invalid token - no appInstallId",{decoded:o});return}a=o.exp}catch(o){n.error("Failed to validate token",{err:o});return}else{n.error("No access token present");return}r&&await r(n);let l=await te(s,!1,n);if(l==null){n.warn("UI call cannot be processed as the installation ID is not known by this app",{seekaAppInstallId:s});return}return{appAccessToken:e,coreApiAccessToken:t,seekaAppId:i,seekaAppInstallId:s,expiresAt:a,installation:l}};import{promises as pt}from"fs";import _ from"path";import*as y from"winston";import{OpenTelemetryTransportV3 as dr}from"@opentelemetry/winston-transport";var lt=[new y.transports.Console({level:process.env.LOGGING_LEVEL,format:y.format.combine(y.format.errors({stack:!0}),y.format.cli(),y.format.splat()),handleExceptions:!0,handleRejections:!0})];process.env.OTEL_SDK_DISABLED!=="true"&&lt.push(new dr({handleExceptions:!0,handleRejections:!0}));var ur=y.createLogger({level:process.env.LOGGING_LEVEL,transports:lt,exitOnError:!1}),O=(e,t,r=ur,n={})=>r.child({...e,...t?{seekaAppInstallId:t.applicationInstallId,seekaAppInstallOrganisationBrandId:t.organisationBrandId,seekaAppInstallOrganisationId:t.organisationId,...n?.invocationId?{"faas.invocation_id":n.invocationId}:{}}:{}}),Kr=(e,t)=>{let r={seekaWebhookType:e.type,seekaWebhookIsTest:e.isTest,RequestId:e.requestId,"faas.invocation_id":t.invocationId,CausationId:e.causationId,CorrelationId:e.causationId},n=e.context;return n&&(r.seekaAppInstallId=n.applicationInstallId,r.seekaAppInstallOrganisationBrandId=n.organisationBrandId,r.seekaAppInstallOrganisationId=n.organisationId),O(r)},Jr=(e,t,r)=>{let n={jobContext:t,jobName:e,"faas.invocation_id":r.invocationId,CausationId:t?.causationId,CorrelationId:t?.causationId,seekaAppInstallId:t?.applicationInstallId??t?.payload.applicationInstallId,seekaAppInstallOrganisationBrandId:t?.organisationBrandId,seekaAppInstallOrganisationId:t?.organisationId};return O(n)};async function ct(e,t){return await pt.readFile(e,{encoding:t})}var ie="config.js",rn=async(e,t,r,n,i,s)=>{let a=O(null,void 0,void 0,n);a.profile("http.seeka.webhook.app.ui");let o=new URL(e).pathname?.replace(/^\/app/,"")||"/";a.verbose("Received Seeka ui request",{requestedPath:o,url:e,method:t});let c=_.resolve("./dist/src/ui/build"),d=null,v=null,f,p={},H=[],u,G=async()=>(u=await ot(e,r,()=>at(a),a),u?(d=u.seekaAppId,v=u.seekaAppInstallId,f=u.installation,a=O(null,f,a,n),H.push({name:M(process.env.SEEKA_APP_ID),value:u.appAccessToken,httpOnly:!0,secure:!0,sameSite:"None",expires:new Date(u.expiresAt*1e3)}),H.push({name:q(process.env.SEEKA_APP_ID),value:u.coreApiAccessToken,httpOnly:!0,secure:!0,sameSite:"None",expires:new Date(u.expiresAt*1e3)}),null):{status:403,jsonBody:{error:"Invalid token"}}),I=_.join(c,o),P;try{if(o==="/"+ie){let h=await G();if(h)return h;let w=process.env.APP_UI_BASE_PATH?`${process.env.APP_UI_BASE_PATH}`:"",T=`${process.env.SELF_HOST_BASEURL}${w}`,gt={seekaAppId:d||"",seekaAppInstallId:v||"",organisationBrandId:f?.organisationBrandId||"",appBaseUrl:T,state:await i(f,a)};P=`window.seekaAppConfig = ${JSON.stringify(gt)}`}if(o.startsWith("/api")){let h=await G();if(h)return h;let w=await s(o,t,f,a);return w||{status:404,jsonBody:{error:"Not found"}}}if(o==="/"||o==="/index.html"){let h=await G();if(h)return h;let w=`?${W}=${encodeURIComponent(u?.appAccessToken||"")}&${j}=${encodeURIComponent(u?.coreApiAccessToken||"")}&`;I=_.join(c,"index.html");let T=await ct(I,"utf-8");T=T.replace(ie+"?",ie+w),P=T}else P||(I=_.join(c,o),await pt.access(I))}catch(h){I=_.join(c,"index.html"),console.log("File not found, serving index.html",{err:h,requestedPath:o,buildPath:c,filePath:I,content:P})}return P||(P=await ct(I)),{status:200,headers:{"Content-Type":gr(I),"Referrer-Policy":"no-referrer",...p},cookies:H,body:P}};function gr(e){return e.endsWith(".html")?"text/html":e.endsWith(".js")?"application/javascript":e.endsWith(".css")?"text/css":e.endsWith(".png")?"image/png":e.endsWith(".jpg")||e.endsWith(".jpeg")?"image/jpeg":e.endsWith(".gif")?"image/gif":"application/octet-stream"}import dt from"fs";import fr from"path";import ut from"util";import hr from"winston";var mr=ut.promisify(dt.existsSync),yr=ut.promisify(dt.readFile);async function pn(e,t,r){return await vr(e,"seeka-browser-plugin.min.js",t,r)}async function vr(e,t,r,n){n.profile("http.seeka.browser.plugin");let i,s;try{n.verbose("Handling request for browser plugin content");let a=fr.resolve(`./dist/src/browser/${t}`);await mr(a)?(i=await yr(a,"utf8"),s=`${e}(${JSON.stringify(r)})`):n.error("Browser plugin content not found",{path:a})}catch(a){n.error("Failed to handle request for browser plugin content",{ex:hr.exceptions.getAllInfo(a)})}finally{n.profile("http.seeka.browser.plugin"),n.verbose("Request for browser plugin content handled")}if(!i||!s)throw new Error("Failed to handle request for browser plugin content");return{content:i,init:s}}export{ur as appLogger,Jr as backgroundJobLogger,pr as checkAuth,O as childLogger,or as connect,Dr as createOrUpdateInstallation,$r as deleteInstallation,lr as disconnect,rn as generateAppUiHttpRequestResponse,ot as getAccessTokenAndCheck,$ as getKey,rt as getList,_r as getOrCreate,S as getOrCreateClient,pn as getSeekaBrowserPlugin,vr as getSeekaBrowserPluginByName,Qe as isConnected,Br as listInstallations,it as remove,nt as set,at as startServices,Rr as stopServices,tt as tryGet,te as tryGetInstallation,Kr as webhookLogger};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=redis.encryption.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.encryption.test.d.ts","sourceRoot":"","sources":["../../../../../src/state/adapters/__tests__/redis.encryption.test.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../../src/state/adapters/redis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,eAAe,EAAE,MAAM,OAAO,CAAC;AAGtD,OAAO,EAAC,KAAK,MAAM,EAAC,MAAM,SAAS,CAAC;AAMpC,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,eAWlD,CAAA;AAED,eAAO,MAAM,OAAO,GAAU,QAAQ,MAAM,kBAG3C,CAAA;AAED,eAAO,MAAM,WAAW,GAAU,QAAQ,MAAM,qBAG/C,CAAA;AAED,eAAO,MAAM,UAAU,GAAU,QAAQ,MAAM,kBAG9C,CAAA;AAGD,eAAO,MAAM,MAAM,GAAI,WAAW,MAAM,EAAE,KAAK,MAAM,WAAwC,CAAA;AAE7F,wBAAsB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,YAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAc/J;AAED,wBAAsB,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,YAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAa/I;AAED,wBAAsB,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAS1F;AAED,wBAAsB,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,YAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASrJ;AAED,wBAAsB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1F;AAaD,eAAO,MAAM,aAAa,GAAU,QAAQ,MAAM,kBAiBjD,CAAA;AAED,eAAO,MAAM,YAAY,GAAU,QAAQ,MAAM,kBAiBhD,CAAA"}
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../../../src/state/adapters/redis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,eAAe,EAAE,MAAM,OAAO,CAAC;AAGtD,OAAO,EAAC,KAAK,MAAM,EAAC,MAAM,SAAS,CAAC;AAQpC,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,eAWlD,CAAA;AAED,eAAO,MAAM,OAAO,GAAU,QAAQ,MAAM,kBAG3C,CAAA;AAED,eAAO,MAAM,WAAW,GAAU,QAAQ,MAAM,qBAG/C,CAAA;AAED,eAAO,MAAM,UAAU,GAAU,QAAQ,MAAM,kBAG9C,CAAA;AAGD,eAAO,MAAM,MAAM,GAAI,WAAW,MAAM,EAAE,KAAK,MAAM,WAAwC,CAAA;AA+B7F,wBAAsB,WAAW,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,YAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgC/J;AAED,wBAAsB,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,YAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAuB/I;AAED,wBAAsB,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAgC1F;AAED,wBAAsB,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,YAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBrJ;AAED,wBAAsB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI1F;AAaD,eAAO,MAAM,aAAa,GAAU,QAAQ,MAAM,kBAiBjD,CAAA;AAED,eAAO,MAAM,YAAY,GAAU,QAAQ,MAAM,kBAiBhD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/state/installation/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,SAAS,CAAC;AACpC,OAAO,EAAC,sBAAsB,EAAC,MAAM,2BAA2B,CAAC;AAIjE,eAAO,MAAM,kBAAkB,GAAU,aAAa,EAAE,sBAAsB,MAAM,EAAE,mBAAmB,OAAO,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC,GAAG,IAAI,CAQtL,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAU,aAAa,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC,EAAE,CAItH,CAAA;AAGD,eAAO,MAAM,0BAA0B,GAAU,aAAa,EAAE,OAAO,sBAAsB,CAAC,aAAa,CAAC,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAW3K,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAU,sBAAsB,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAInG,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/state/installation/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,SAAS,CAAC;AACpC,OAAO,EAAC,sBAAsB,EAAC,MAAM,2BAA2B,CAAC;AAIjE,eAAO,MAAM,kBAAkB,GAAU,aAAa,EAAE,sBAAsB,MAAM,EAAE,mBAAmB,OAAO,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC,GAAG,IAAI,CAQtL,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAU,aAAa,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC,EAAE,CAItH,CAAA;AAED,eAAO,MAAM,0BAA0B,GAAU,aAAa,EAAE,OAAO,sBAAsB,CAAC,aAAa,CAAC,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAW3K,CAAA;AAED,eAAO,MAAM,kBAAkB,GAAU,sBAAsB,MAAM,EAAE,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAInG,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seeka-labs/sdk-apps-server-host",
3
- "version": "3.2.3",
3
+ "version": "3.3.1",
4
4
  "description": "Seeka - Apps SDK - Node.js - hosting layer",
5
5
  "author": "SEEKA <platform@seeka.co>",
6
6
  "license": "MIT",
@@ -32,8 +32,8 @@
32
32
  "@jest/globals": "^30",
33
33
  "@redis/client": "^5",
34
34
  "@redis/json": "^5",
35
- "@seeka-labs/sdk-apps-core": "^3.2.3",
36
- "@seeka-labs/sdk-apps-server": "^3.2.3",
35
+ "@seeka-labs/sdk-apps-core": "3.3.1",
36
+ "@seeka-labs/sdk-apps-server": "3.3.1",
37
37
  "@types/jest": "^30",
38
38
  "@types/memory-cache": "^0",
39
39
  "@types/node": "^22",
@@ -51,7 +51,7 @@
51
51
  "undici": "^7",
52
52
  "winston": "^3"
53
53
  },
54
- "gitHead": "2e406e463088cdf6ccdb2e2b15eb35c369b729c0",
54
+ "gitHead": "7bdfa73d8fd888cf89d5469f161dd4109172f39a",
55
55
  "peerDependencies": {
56
56
  "@redis/client": "^5",
57
57
  "@redis/json": "^5",
package/README.md DELETED
@@ -1 +0,0 @@
1
- # Seeka Apps SDK - Node JS