@seeka-labs/sdk-apps-server 1.1.21 → 1.1.24

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,2 +1,2 @@
1
- import*as e from"memory-cache";import*as t from"crypto";import i from"crypto";import r from"axios";import{Issuer as s,custom as n}from"openid-client";import a from"http";import o from"https";const c={identity:{receiveFull:"Identity.Receive.Pii",send:"Identity.Send"},activity:{receiveAnon:"Activity.Receive.Anon",receiveFull:"Activity.Receive.Pii",send:"Activity.Send"}},l="seeka:sdk";class d{constructor(t,i){this.appId=void 0,this.appInstallationId=void 0,this.set=async(t,i,r)=>{const s=this.getKey(t);e.put(s,JSON.stringify(i),r)},this.getOrSet=async(t,i,r)=>{const s=this.getKey(t),n=e.get(s);if(n){const e=JSON.parse(n);return r&&await r(e),e}const a=await i();return a?(e.put(s,JSON.stringify(a.value),a.expiryAbsoluteMilliseconds),a.value):null},this.getKey=e=>this.appInstallationId?`${l}:${this.appId}:${this.appInstallationId}:${e}`:`${l}:${this.appId}:${e}`,this.appId=t,this.appInstallationId=i}}class u{constructor(){this.appId=void 0,this.appSecret=void 0,this.ingestUrl=void 0,this.issuerUrl=void 0,this.organisationId=void 0,this.applicationInstallId=void 0,this.runtime=void 0,this.logger=void 0,this.grantedPermissions=void 0,this.transformApiRequest=void 0,this.transformApiResponse=void 0,this.hasAnyPermissions=void 0,this.hasAllPermissions=void 0,this.hasPermission=void 0}}class h{constructor(e){this.config=void 0,this.transformOptions=async e=>await this.config.transformApiRequest(e),this.transformResult=async(e,t,i)=>await this.config.transformApiResponse(e,t,i),this.config=e}}class p extends h{constructor(e,t,i){super(e),this.instance=void 0,this.baseUrl=void 0,this.jsonParseReviver=void 0,this.instance=i||r.create(),this.baseUrl=null!=t?t:"https://api.seeka.services"}merge(e,t){let i=this.baseUrl+"/api/identity";i=i.replace(/[?&]$/,"");const r=JSON.stringify(e);return this.transformOptions({data:r,method:"POST",url:i,headers:{"Content-Type":"application/json",Accept:"application/json"},cancelToken:t}).then(e=>this.instance.request(e)).catch(e=>{if(B(e)&&e.response)return e.response;throw e}).then(e=>this.transformResult(i,e,e=>this.processMerge(e)))}processMerge(e){const t=e.status;let i={};if(e.headers&&"object"==typeof e.headers)for(const t in e.headers)e.headers.hasOwnProperty(t)&&(i[t]=e.headers[t]);if(200===t){let t=null;return t=JSON.parse(e.data),Promise.resolve(t)}if(401===t){const r=e.data;let s=null;return s=JSON.parse(r),x("A server side error occurred.",t,r,i,s)}if(422===t){const r=e.data;let s=null;return s=JSON.parse(r),x("A server side error occurred.",t,r,i,s)}if(400===t){const r=e.data;let s=null;return s=JSON.parse(r),x("A server side error occurred.",t,r,i,s)}return 200!==t&&204!==t?x("An unexpected server error occurred.",t,e.data,i):Promise.resolve(null)}}class g extends h{constructor(e,t,i){super(e),this.instance=void 0,this.baseUrl=void 0,this.jsonParseReviver=void 0,this.instance=i||r.create(),this.baseUrl=null!=t?t:"https://api.seeka.services"}batch(e,t){let i=this.baseUrl+"/api/ingest";i=i.replace(/[?&]$/,"");const r=JSON.stringify(e);return this.transformOptions({data:r,method:"POST",url:i,headers:{"Content-Type":"application/json"},cancelToken:t}).then(e=>this.instance.request(e)).catch(e=>{if(B(e)&&e.response)return e.response;throw e}).then(e=>this.transformResult(i,e,e=>this.processBatch(e)))}processBatch(e){const t=e.status;let i={};if(e.headers&&"object"==typeof e.headers)for(const t in e.headers)e.headers.hasOwnProperty(t)&&(i[t]=e.headers[t]);if(202===t)return Promise.resolve(null);if(401===t){const r=e.data;let s=null;return s=JSON.parse(r),x("A server side error occurred.",t,r,i,s)}if(422===t){const r=e.data;let s=null;return s=JSON.parse(r),x("A server side error occurred.",t,r,i,s)}if(400===t){const r=e.data;let s=null;return s=JSON.parse(r),x("A server side error occurred.",t,r,i,s)}return 200!==t&&204!==t?x("An unexpected server error occurred.",t,e.data,i):Promise.resolve(null)}}var f,v,m,y,I,w,k,P,S,A,b,C,U,N,E;!function(e){e.Undefined="undefined",e.Success="success",e.Failed="failed"}(f||(f={})),function(e){e.Unknown="unknown",e.Informed="informed",e.Implied="implied",e.Explicit="explicit",e.Active="active",e.Passive="passive"}(v||(v={})),function(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"}(m||(m={})),function(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"}(y||(y={})),function(e){e.Undefined="undefined",e.SingleProduct="singleProduct",e.SingleVariant="singleVariant",e.Collection="collection"}(I||(I={})),function(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"}(w||(w={})),function(e){e.Undefined="undefined",e.Fulfilled="fulfilled",e.NoneFulfilled="noneFulfilled",e.PartiallyFulfilled="partiallyFulfilled",e.RestockedOrCancelled="restockedOrCancelled",e.Pending="pending"}(k||(k={})),function(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"}(P||(P={})),function(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"}(S||(S={})),function(e){e.Information="information",e.Warning="warning",e.Error="error",e.Verbose="verbose"}(A||(A={})),function(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"}(b||(b={})),function(e){e.Undefined="undefined",e.PurchaseMade="purchaseMade",e.ActivityTracked="activityTracked"}(C||(C={})),function(e){e.Undefined="undefined",e.And="and",e.Or="or"}(U||(U={})),function(e){e.Undefined="undefined",e.Domain="domain",e.Pipeline="pipeline",e.Wildcard="wildcard",e.Url="url",e.PagePath="pagePath"}(N||(N={})),function(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||(E={}));class O extends Error{constructor(e,t,i,r,s){super(),this.message=void 0,this.status=void 0,this.response=void 0,this.headers=void 0,this.result=void 0,this.isApiException=!0,this.message=e,this.status=t,this.response=i,this.headers=r,this.result=s}static isApiException(e){return!0===e.isApiException}}function x(e,t,i,r,s){throw null!=s?s:new O(e,t,i,r,null)}function B(e){return e&&!0===e.isAxiosError}const T=()=>`${F(new Date)}.${$()}`,_=e=>{const t=Object.keys(y),i=e.toLowerCase(),r=t.find(e=>e.toLowerCase()===i);return r?y[r]:y.Custom},$=()=>Math.floor(8999999999*Math.random()+1e9).toString(),F=e=>{let t=(e.getUTCMonth()+1).toString();t.length<2&&(t="0"+t);let i=e.getUTCDate().toString();i.length<2&&(i="0"+i);let r=e.getUTCHours().toString();r.length<2&&(r="0"+r);let s=e.getUTCMinutes().toString();s.length<2&&(s="0"+s);let n=e.getUTCSeconds().toString();return n.length<2&&(n="0"+n),`${e.getUTCFullYear()}${t}${i}.${r}${s}${n}`},R=e=>{if(!e)return{firstName:null,lastName:null};const t=e.trim().split(" ");return 1===t.length?{firstName:e,lastName:null}:2===t.length?{firstName:t[0],lastName:t[1]}:{firstName:t[0],lastName:t.slice(1).join(" ")}},L=(e,t)=>e.reduce((e,i,r)=>{const s=Math.floor(r/t);return e[s]||(e[s]=[]),e[s].push(i),e},[]),M=async e=>{const t=await q(e),i=new s(t);return i[n.http_options]=(e,t)=>({timeout:1e4}),i},q=async e=>{const i={applicationId:e.appId,issuer:{url:e.issuerUrl}};e.logger?e.logger.debug("Seeka auth: getting issuer",{...i}):console.debug("Seeka auth: getting issuer",{...i});const r=new d(e.appId,e.applicationInstallId),s=(n=e.issuerUrl,t.createHash("md5").update(n).digest("hex"));var n;return await r.getOrSet(s,async()=>({value:await D(e),expiryAbsoluteMilliseconds:36e5}),async()=>{e.logger?e.logger.verbose("Seeka auth: got issuer from cache",{...i}):console.debug("Seeka auth: got issuer from cache",{...i})})},D=async e=>{const t={applicationId:e.appId,issuer:{url:e.issuerUrl}};return e.logger?e.logger.verbose("Seeka auth: discovering issuer from server",{...t}):console.info("Seeka auth: discovering issuer from server",{...t}),(await s.discover(e.issuerUrl)).metadata},j=async e=>{const t=new d(e.appId,e.applicationInstallId),i={applicationId:e.appId,issuer:{url:e.issuerUrl}};return await t.getOrSet("auth:token:appinstall",async()=>{const t=await(async e=>{const t={applicationId:e.appId,issuer:{url:e.issuerUrl}},i=new((await M(e)).Client)({client_id:e.appId.replace(/-/g,""),client_secret:e.appSecret});try{const r=await i.grant({grant_type:"client_credentials"}),s={...t,token:{expires_at:r.expires_at,token_type:r.token_type,scope:r.scope}};return e.logger?e.logger.verbose("Seeka auth: got client access token from server",{...s}):console.info("Seeka auth: got app client token from server",{...s}),r}catch(i){const r={...t,error:i};return e.logger?e.logger.error("Seeka auth: failed to get client access token from server",{...r}):console.debug("Seeka auth: failed to get client access token from server",{...r}),null}})(e);if(!t)return null;const i=await(async(e,t)=>{const i={applicationId:t.appId,issuer:{url:t.issuerUrl}},r=new((await M(t)).Client)({client_id:t.appId.replace(/-/g,""),client_secret:t.appSecret});try{const s=await r.grant({grant_type:"app_install_token",applicationInstallId:t.applicationInstallId,access_token:e}),n={...i,token:{expires_at:s.expires_at,token_type:s.token_type,scope:s.scope}};return t.logger?t.logger.verbose("Seeka auth: got app access token from server",{...n}):console.info("Seeka auth: got app access token from server",{...n}),s}catch(e){const r={...i,error:e};return t.logger?t.logger.error("Seeka auth: failed to get app access token from server",{...r}):console.debug("Seeka auth: failed to get app access token from server",{...r}),null}})(t.access_token,e);return i?{value:i,expiryAbsoluteMilliseconds:((i.expires_in>t.expires_in?t.expires_in:i.expires_in)||9e5)-6e4}:null},async()=>{e.logger?e.logger.verbose("Seeka auth: got app token from cache",{...i}):console.debug("Seeka auth: got app token from cache",{...i})})},J=new a.Agent({keepAlive:!0,scheduling:"fifo"}),V=new o.Agent({keepAlive:!0,scheduling:"fifo"}),W=e=>{const t=r.create({httpAgent:J,httpsAgent:V});return t.interceptors.request.use(function(t){const i={url:t.url,method:t.method};return e.logger?e.logger.debug(`Seeka API: making call to ${i.url}`,{...i}):console.debug(`Seeka API: making call to ${i.url}`,{...i}),t},function(t){const i={error:t};return e.logger?e.logger.http("Seeka API: failed to send request",{...i}):console.debug("Seeka API: failed to send request",{...i}),Promise.reject(t)}),t.interceptors.response.use(function(t){var i,r;const s={url:(null==(i=t.request)?void 0:i.url)||t.config.url,method:(null==(r=t.request)?void 0:r.method)||t.config.method,response:{status:t.status}};return e.logger?e.logger.http(`Seeka API: call to ${s.url} succeeded`,{...s}):console.debug(`Seeka API: call to ${s.url} succeeded`,{...s}),t},function(t){var i;const{code:r,status:s,message:n}=t,{headers:a,url:o,method:c}=null==t?void 0:t.config,l={code:r,status:s,message:n,headers:a,url:o,method:c,content:null==t||null==(i=t.response)?void 0:i.data};return e.logger?e.logger.error(`Seeka API: call to ${l.url} failed`,{...l}):console.error(`Seeka API: call to ${l.url} failed`,{...l}),Promise.reject(t)}),t};class z{constructor(e){this.config=void 0,this.maxBatchSize=50,this.refreshOrPrimeTokenCache=async()=>{await j(this.config)},this.ingestionService=void 0,this.identityService=void 0,this.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},this.mergeIdentity=async(e,t)=>{var i;this.checkPermission(c.identity.send,"mergeIdentity");const r=T();return null==(i=(await this.identityService.merge({id:e,src:{method:"",origin:t.origin,time:void 0,loc:t.loc,sess:r,diag:"true"===process.env.SEEKA_DEBUG_ENABLED?r:void 0,runtime:this.config.runtime}})).result)?void 0:i.personId},this.mergeIdentityBatch=async(e,t)=>{this.checkPermission(c.identity.send,"mergeIdentityBatch");const i=T();var r;if(0===e.length)return void(null==(r=this.config.logger)||r.debug("No identities in batch"));const s={method:"",origin:t.origin,time:void 0,loc:t.loc,sess:i,diag:"true"===process.env.SEEKA_DEBUG_ENABLED?i:void 0,runtime:this.config.runtime},n=L(e,this.maxBatchSize);if(n.length>1&&this.config.logger&&this.config.logger.debug(`Identity batch size ${e} is greater than ${this.maxBatchSize}, splitting into ${n.length} batches`),await this.trackActivityBatchRaw({data:n[0].map(e=>({id:{id:e||{},src:{...s}}}))}),n.length>1){const e=n.map((e,t)=>{var i;return 0===t?Promise.resolve():(null==(i=this.config.logger)||i.verbose(`Processing identity batch ${t+1} of ${n.length}`),this.trackActivityBatchRaw({data:e.map(e=>({id:{id:e||{},src:{...s}}}))}))});await Promise.all(e)}},this.trackActivityBatch=async(e,t)=>{this.checkPermission(c.activity.send,"trackActivityBatch");const i=T();var r;if(0===e.length)return void(null==(r=this.config.logger)||r.debug("No activities in batch"));const s={method:"",origin:t.origin,time:void 0,loc:t.loc,sess:i,diag:"true"===process.env.SEEKA_DEBUG_ENABLED?i:void 0,runtime:this.config.runtime},n=L(e,this.maxBatchSize);if(n.length>1&&this.config.logger&&this.config.logger.debug(`Activity batch size ${e.length} is greater than ${this.maxBatchSize}, splitting into ${n.length} batches`),await this.trackActivityBatchRaw({data:n[0].map(e=>({ev:{id:e.profile||{},src:{...s},payload:e.activity}}))}),n.length>1){const e=n.map((e,t)=>{var i;return 0===t?Promise.resolve():(null==(i=this.config.logger)||i.verbose(`Processing activity batch ${t+1} of ${n.length}`),this.trackActivityBatchRaw({data:e.map(e=>({ev:{id:e.profile||{},src:{...s},payload:e.activity}}))}))});await Promise.all(e)}},this.trackActivityBatchRaw=async e=>{await this.ingestionService.batch(e)},this.trackActivityForProfileId=async(e,t,i)=>{this.checkPermission(c.activity.send,"trackActivityForProfileId"),await this.trackActivityForProfileIdBatch([e],t,i)},this.trackActivityForProfileIdBatch=async(e,t,i)=>{this.checkPermission(c.activity.send,"trackActivityForProfileIdBatch"),await this.trackActivityBatch(e.map(e=>({activity:e,profile:t?{seekaPId:t}:void 0})),i)},this.trackActivityForProfile=async(e,t,i)=>{this.checkPermission(c.activity.send,"trackActivityForProfile"),await this.trackActivityForProfileBatch([e],t,i)},this.trackActivityForProfileBatch=async(e,t,i)=>{this.checkPermission(c.activity.send,"trackActivityForProfileBatch"),await this.trackActivityBatch(e.map(e=>({activity:e,profile:t})),i)},this.config=e,this.ingestionService=(e=>new g(e,e.ingestUrl,W(e)))(e),this.identityService=(e=>new p(e,e.ingestUrl,W(e)))(e)}}const G="x-seeka-signature-sha256",K=(e,t,i)=>{if(!t)return!1;let r=null;if(t.get&&"function"==typeof t.get)r=t.get(G);else{const e=t[G];e&&(Array.isArray(e)&&e.length>0?r=e[0]:("string"==typeof e||e instanceof String)&&(r=e))}if(!r)return!1;const s=H(e,i)===r;return s||console.warn("Invalid webhook signature"),s},H=(e,i)=>t.createHmac("sha256",e).update(i).digest("hex"),X=(e,t,i)=>{if(!K(e,t,i))throw new Error("Invalid webhook signature")},Y=(e,t,i,r,s)=>{const n=new u;return n.appId=e.applicationId,n.appSecret=t,n.ingestUrl=process.env.SEEKA_INGEST_URL||"https://router.seeka.services",n.issuerUrl=process.env.SEEKA_ISSUER_URL||"https://account.seeka.app",n.organisationId=e.organisationId,n.applicationInstallId=e.applicationInstallId,n.runtime={type:"sdk/js/apps-server",ver:"1.1.21",client:i},n.logger=s,n.grantedPermissions=r,n.transformApiRequest=e=>Q(n,e),n.transformApiResponse=async(e,t,i)=>Z(n,e,t,i),n.hasAnyPermissions=e=>!(!n.grantedPermissions||0===n.grantedPermissions.length)&&(!e||0===e.length||e.some(e=>n.grantedPermissions.includes(e))),n.hasAllPermissions=e=>!(!n.grantedPermissions||0===n.grantedPermissions.length)&&(!e||0===e.length||e.every(e=>n.grantedPermissions.includes(e))),n.hasPermission=e=>!(!n.grantedPermissions||0===n.grantedPermissions.length)&&(!e||n.grantedPermissions.includes(e)),n},Q=async(e,t)=>{const i=await j(e);return t.headers={...t.headers,"X-OrgId":e.organisationId,Authorization:"Bearer "+(null==i?void 0:i.access_token)},t},Z=async(e,t,i,r)=>(i.data=JSON.stringify(i.data),r(i)),ee="aes-192-cbc",te=(e,t)=>{if(!e)return"";if(!t)throw new Error("Secret is required to encrypt data");const r=i.scryptSync(t,"salt",24),s=i.randomBytes(16),n=i.createCipheriv(ee,r,s);return[n.update(e,"utf8","hex")+n.final("hex"),Buffer.from(s).toString("hex")].join("|")},ie=(e,t)=>{if(!e)return"";if(!t)throw new Error("Secret is required to decrypt data");const[r,s]=e.split("|");if(!s)throw new Error("IV not found");const n=i.scryptSync(t,"salt",24),a=i.createDecipheriv(ee,n,Buffer.from(s,"hex"));return a.update(r,"hex","utf8")+a.final("utf8")};class re{constructor(e){this.appSecret=void 0,this.encryptWithAppSecret=e=>{if(!this.appSecret)throw new Error("App secret is required to encrypt data");return te(e,this.appSecret)},this.decryptWithAppSecret=e=>{if(!this.appSecret)throw new Error("App secret is required to decrypt data");return ie(e,this.appSecret)},this.appSecret=e}}var se;class ne{constructor(e,t){this.context=void 0,this.appCache=void 0,this.appInstallCache=void 0,this.api=void 0,this.logger=void 0,this.crypto=void 0,this.context=e,this.api=new z(e.config),this.appCache=new d(e.config.appId),this.appInstallCache=new d(e.config.appId,e.config.applicationInstallId),this.crypto=new re(e.config.appSecret),this.logger=t}}se=ne,ne.create=(e,t,i,r,s)=>new se({config:Y({...t},e,{type:i.name,ver:i.version},r,s)},s);const ae=[y.Order,y.SubscriptionItemPurchase,y.OneTimeItemPurchase],oe=(e,t,i)=>{if(!e.activity)return[];const r=e.activity,s=r.activityName===y.Custom?r.activityNameCustom:r.activityName;if(!s)return[];const n=s.toLowerCase(),a=[];return t.forEach(t=>{var o;if(!t)return;switch(t.type){case C.ActivityTracked:if(!t.activityNames)return;if(!t.activityNames.find(e=>e.toLowerCase()===n))return;i.verbose("Matched activity tracked filter",{filter:t,activityName:s});break;case C.PurchaseMade:if(!r.activityName||!ae.includes(r.activityName))return;i.verbose("Matched purchase made activity filter",{filter:t,activityName:s});break;default:return void i.warn("Unknown activity filter type",{filter:t})}const c=t.sourceFilter;if(!c)return;const l=e.source,d=null!=l&&l.loc?new URL(l.loc).hostname.toLowerCase():null,u=null==l?void 0:l.pipeline,h=null==u||null==(o=u.convergePipelineIntegrationInstanceId)?void 0:o.toLowerCase(),p=c.filters?c.filters.map(e=>{switch(e.type){case N.Wildcard:return i.verbose("Matched wildcard source filter",{sourceFilter:e}),!0;case N.Domain:return!(!d||!e.key||d!==e.key.toLowerCase()||(i.verbose("Matched domain source filter",{sourceFilter:e,activityHostname:d}),0));case N.Pipeline:return!(!h||!e.key||h!==e.key.toLowerCase()||(i.verbose("Matched pipeline source filter",{sourceFilter:e,sourceConvergePipelineIntegrationInstanceId:h}),0))}}):[];switch(c.comparer){case U.And:p.every(e=>!0===e)||a.push(t);break;case U.Or:p.some(e=>!0===e)&&a.push(t);break;default:i.warn("Unknown source filter comparer",{sourceFilters:c})}}),a};function ce(e){if(!e||0===e.trim().length)return!1;const t=e.split(".").filter(e=>e.trim().length>0);return 4===t.length&&t[0].toLowerCase()==="sk".toLowerCase()&&t[1].toLowerCase()==="1".toLowerCase()&&!isNaN(parseInt(t[2],10))&&!isNaN(parseInt(t[3],10))}export{N as ActivityPipelineActivityFilterSourceItemType,C as ActivityPipelineActivityFilterType,O as ApiException,h as ApiServiceProxyBase,c as AppPermissionKeys,U as ConditionComparer,E as ConditionOperator,S as ConvergePipelineLoggableActivityType,I as ECommerceContentType,P as ECommerceFinancialStatus,k as ECommerceFulfillmentStatus,w as ECommercePlatform,p as IdentityServiceProxy,g as IngestServiceProxy,v as PrivacyConsentType,f as ResponseResultType,A as SdkLogEventLevel,z as SeekaApiHelper,d as SeekaAppCacheManager,u as SeekaAppConfig,ne as SeekaAppHelper,b as SeekaWebhookCallType,y as TrackingActivityNames,m as TrackingEventSourceOriginType,L as chunk,ie as decryptText,te as encryptText,_ as getActivityName,ce as isValidSeekaProfileId,oe as matchActivityPipelineFilters,R as separatePersonFullName,X as throwOnInvalidWebhookSignature,K as validateWebhookSignature,G as webhookSignatureHeaderName};
1
+ import*as e from"memory-cache";import*as t from"crypto";import i from"crypto";import r from"axios";import{Issuer as s,custom as n}from"openid-client";import a from"http";import o from"https";const c={identity:{receiveFull:"Identity.Receive.Pii",send:"Identity.Send"},activity:{receiveAnon:"Activity.Receive.Anon",receiveFull:"Activity.Receive.Pii",send:"Activity.Send"}},l="seeka:sdk";class d{constructor(t,i){this.appId=void 0,this.appInstallationId=void 0,this.set=async(t,i,r)=>{const s=this.getKey(t);e.put(s,JSON.stringify(i),r)},this.getOrSet=async(t,i,r)=>{const s=this.getKey(t),n=e.get(s);if(n){const e=JSON.parse(n);return r&&await r(e),e}const a=await i();return a?(e.put(s,JSON.stringify(a.value),a.expiryAbsoluteMilliseconds),a.value):null},this.getKey=e=>this.appInstallationId?`${l}:${this.appId}:${this.appInstallationId}:${e}`:`${l}:${this.appId}:${e}`,this.appId=t,this.appInstallationId=i}}class u{constructor(){this.appId=void 0,this.appSecret=void 0,this.ingestUrl=void 0,this.issuerUrl=void 0,this.organisationId=void 0,this.applicationInstallId=void 0,this.runtime=void 0,this.logger=void 0,this.grantedPermissions=void 0,this.transformApiRequest=void 0,this.transformApiResponse=void 0,this.hasAnyPermissions=void 0,this.hasAllPermissions=void 0,this.hasPermission=void 0}}class h{constructor(e){this.config=void 0,this.transformOptions=async e=>await this.config.transformApiRequest(e),this.transformResult=async(e,t,i)=>await this.config.transformApiResponse(e,t,i),this.config=e}}class p extends h{constructor(e,t,i){super(e),this.instance=void 0,this.baseUrl=void 0,this.jsonParseReviver=void 0,this.instance=i||r.create(),this.baseUrl=null!=t?t:"https://api.seeka.services"}merge(e,t){let i=this.baseUrl+"/api/identity";i=i.replace(/[?&]$/,"");const r=JSON.stringify(e);return this.transformOptions({data:r,method:"POST",url:i,headers:{"Content-Type":"application/json",Accept:"application/json"},cancelToken:t}).then(e=>this.instance.request(e)).catch(e=>{if(T(e)&&e.response)return e.response;throw e}).then(e=>this.transformResult(i,e,e=>this.processMerge(e)))}processMerge(e){const t=e.status;let i={};if(e.headers&&"object"==typeof e.headers)for(const t in e.headers)e.headers.hasOwnProperty(t)&&(i[t]=e.headers[t]);if(200===t){let t=null;return t=JSON.parse(e.data),Promise.resolve(t)}if(401===t){const r=e.data;let s=null;return s=JSON.parse(r),B("A server side error occurred.",t,r,i,s)}if(422===t){const r=e.data;let s=null;return s=JSON.parse(r),B("A server side error occurred.",t,r,i,s)}if(400===t){const r=e.data;let s=null;return s=JSON.parse(r),B("A server side error occurred.",t,r,i,s)}return 200!==t&&204!==t?B("An unexpected server error occurred.",t,e.data,i):Promise.resolve(null)}}class g extends h{constructor(e,t,i){super(e),this.instance=void 0,this.baseUrl=void 0,this.jsonParseReviver=void 0,this.instance=i||r.create(),this.baseUrl=null!=t?t:"https://api.seeka.services"}batch(e,t){let i=this.baseUrl+"/api/ingest";i=i.replace(/[?&]$/,"");const r=JSON.stringify(e);return this.transformOptions({data:r,method:"POST",url:i,headers:{"Content-Type":"application/json"},cancelToken:t}).then(e=>this.instance.request(e)).catch(e=>{if(T(e)&&e.response)return e.response;throw e}).then(e=>this.transformResult(i,e,e=>this.processBatch(e)))}processBatch(e){const t=e.status;let i={};if(e.headers&&"object"==typeof e.headers)for(const t in e.headers)e.headers.hasOwnProperty(t)&&(i[t]=e.headers[t]);if(202===t)return Promise.resolve(null);if(401===t){const r=e.data;let s=null;return s=JSON.parse(r),B("A server side error occurred.",t,r,i,s)}if(422===t){const r=e.data;let s=null;return s=JSON.parse(r),B("A server side error occurred.",t,r,i,s)}if(400===t){const r=e.data;let s=null;return s=JSON.parse(r),B("A server side error occurred.",t,r,i,s)}return 200!==t&&204!==t?B("An unexpected server error occurred.",t,e.data,i):Promise.resolve(null)}}var f,v,m,y,k,w,I,P,S,A,b,C,U,N,E,O;!function(e){e.Undefined="undefined",e.Success="success",e.Failed="failed"}(f||(f={})),function(e){e.Unknown="unknown",e.Informed="informed",e.Implied="implied",e.Explicit="explicit",e.Active="active",e.Passive="passive"}(v||(v={})),function(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"}(m||(m={})),function(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"}(y||(y={})),function(e){e.Undefined="undefined",e.SingleProduct="singleProduct",e.SingleVariant="singleVariant",e.Collection="collection"}(k||(k={})),function(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"}(w||(w={})),function(e){e.Undefined="undefined",e.Fulfilled="fulfilled",e.NoneFulfilled="noneFulfilled",e.PartiallyFulfilled="partiallyFulfilled",e.RestockedOrCancelled="restockedOrCancelled",e.Pending="pending"}(I||(I={})),function(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"}(P||(P={})),function(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"}(S||(S={})),function(e){e.Information="information",e.Warning="warning",e.Error="error",e.Verbose="verbose"}(A||(A={})),function(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"}(b||(b={})),function(e){e.Unknown="unknown",e.Google="google",e.Meta="meta",e.Snapchat="snapchat",e.Pinterest="pinterest",e.TikTok="tikTok"}(C||(C={})),function(e){e.Undefined="undefined",e.PurchaseMade="purchaseMade",e.ActivityTracked="activityTracked"}(U||(U={})),function(e){e.Undefined="undefined",e.And="and",e.Or="or"}(N||(N={})),function(e){e.Undefined="undefined",e.Domain="domain",e.Pipeline="pipeline",e.Wildcard="wildcard",e.Url="url",e.PagePath="pagePath"}(E||(E={})),function(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"}(O||(O={}));class x extends Error{constructor(e,t,i,r,s){super(),this.message=void 0,this.status=void 0,this.response=void 0,this.headers=void 0,this.result=void 0,this.isApiException=!0,this.message=e,this.status=t,this.response=i,this.headers=r,this.result=s}static isApiException(e){return!0===e.isApiException}}function B(e,t,i,r,s){throw null!=s?s:new x(e,t,i,r,null)}function T(e){return e&&!0===e.isAxiosError}const _=()=>`${R(new Date)}.${F()}`,$=e=>{const t=Object.keys(y),i=e.toLowerCase(),r=t.find(e=>e.toLowerCase()===i);return r?y[r]:y.Custom},F=()=>Math.floor(8999999999*Math.random()+1e9).toString(),R=e=>{let t=(e.getUTCMonth()+1).toString();t.length<2&&(t="0"+t);let i=e.getUTCDate().toString();i.length<2&&(i="0"+i);let r=e.getUTCHours().toString();r.length<2&&(r="0"+r);let s=e.getUTCMinutes().toString();s.length<2&&(s="0"+s);let n=e.getUTCSeconds().toString();return n.length<2&&(n="0"+n),`${e.getUTCFullYear()}${t}${i}.${r}${s}${n}`},L=e=>{if(!e)return{firstName:null,lastName:null};const t=e.trim().split(" ");return 1===t.length?{firstName:e,lastName:null}:2===t.length?{firstName:t[0],lastName:t[1]}:{firstName:t[0],lastName:t.slice(1).join(" ")}},M=(e,t)=>e.reduce((e,i,r)=>{const s=Math.floor(r/t);return e[s]||(e[s]=[]),e[s].push(i),e},[]),q=async e=>{const t=await D(e),i=new s(t);return i[n.http_options]=(e,t)=>({timeout:1e4}),i},D=async e=>{const i={applicationId:e.appId,issuer:{url:e.issuerUrl}};e.logger?e.logger.debug("Seeka auth: getting issuer",{...i}):console.debug("Seeka auth: getting issuer",{...i});const r=new d(e.appId,e.applicationInstallId),s=(n=e.issuerUrl,t.createHash("md5").update(n).digest("hex"));var n;return await r.getOrSet(s,async()=>({value:await j(e),expiryAbsoluteMilliseconds:36e5}),async()=>{e.logger?e.logger.verbose("Seeka auth: got issuer from cache",{...i}):console.debug("Seeka auth: got issuer from cache",{...i})})},j=async e=>{const t={applicationId:e.appId,issuer:{url:e.issuerUrl}};return e.logger?e.logger.verbose("Seeka auth: discovering issuer from server",{...t}):console.info("Seeka auth: discovering issuer from server",{...t}),(await s.discover(e.issuerUrl)).metadata},J=async e=>{const t=new d(e.appId,e.applicationInstallId),i={applicationId:e.appId,issuer:{url:e.issuerUrl}};return await t.getOrSet("auth:token:appinstall",async()=>{const t=await(async e=>{const t={applicationId:e.appId,issuer:{url:e.issuerUrl}},i=new((await q(e)).Client)({client_id:e.appId.replace(/-/g,""),client_secret:e.appSecret});try{const r=await i.grant({grant_type:"client_credentials"}),s={...t,token:{expires_at:r.expires_at,token_type:r.token_type,scope:r.scope}};return e.logger?e.logger.verbose("Seeka auth: got client access token from server",{...s}):console.info("Seeka auth: got app client token from server",{...s}),r}catch(i){const r={...t,error:i};return e.logger?e.logger.error("Seeka auth: failed to get client access token from server",{...r}):console.debug("Seeka auth: failed to get client access token from server",{...r}),null}})(e);if(!t)return null;const i=await(async(e,t)=>{const i={applicationId:t.appId,issuer:{url:t.issuerUrl}},r=new((await q(t)).Client)({client_id:t.appId.replace(/-/g,""),client_secret:t.appSecret});try{const s=await r.grant({grant_type:"app_install_token",applicationInstallId:t.applicationInstallId,access_token:e}),n={...i,token:{expires_at:s.expires_at,token_type:s.token_type,scope:s.scope}};return t.logger?t.logger.verbose("Seeka auth: got app access token from server",{...n}):console.info("Seeka auth: got app access token from server",{...n}),s}catch(e){const r={...i,error:e};return t.logger?t.logger.error("Seeka auth: failed to get app access token from server",{...r}):console.debug("Seeka auth: failed to get app access token from server",{...r}),null}})(t.access_token,e);return i?{value:i,expiryAbsoluteMilliseconds:((i.expires_in>t.expires_in?t.expires_in:i.expires_in)||9e5)-6e4}:null},async()=>{e.logger?e.logger.verbose("Seeka auth: got app token from cache",{...i}):console.debug("Seeka auth: got app token from cache",{...i})})},V=new a.Agent({keepAlive:!0,scheduling:"fifo"}),W=new o.Agent({keepAlive:!0,scheduling:"fifo"}),G=e=>{const t=r.create({httpAgent:V,httpsAgent:W});return t.interceptors.request.use(function(t){const i={url:t.url,method:t.method};return e.logger?e.logger.debug(`Seeka API: making call to ${i.url}`,{...i}):console.debug(`Seeka API: making call to ${i.url}`,{...i}),t},function(t){const i={error:t};return e.logger?e.logger.http("Seeka API: failed to send request",{...i}):console.debug("Seeka API: failed to send request",{...i}),Promise.reject(t)}),t.interceptors.response.use(function(t){var i,r;const s={url:(null==(i=t.request)?void 0:i.url)||t.config.url,method:(null==(r=t.request)?void 0:r.method)||t.config.method,response:{status:t.status}};return e.logger?e.logger.http(`Seeka API: call to ${s.url} succeeded`,{...s}):console.debug(`Seeka API: call to ${s.url} succeeded`,{...s}),t},function(t){var i;const{code:r,status:s,message:n}=t,{headers:a,url:o,method:c}=null==t?void 0:t.config,l={code:r,status:s,message:n,headers:a,url:o,method:c,content:null==t||null==(i=t.response)?void 0:i.data};return e.logger?e.logger.error(`Seeka API: call to ${l.url} failed`,{...l}):console.error(`Seeka API: call to ${l.url} failed`,{...l}),Promise.reject(t)}),t};class z{constructor(e){this.config=void 0,this.maxBatchSize=50,this.refreshOrPrimeTokenCache=async()=>{await J(this.config)},this.ingestionService=void 0,this.identityService=void 0,this.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},this.mergeIdentity=async(e,t)=>{var i;this.checkPermission(c.identity.send,"mergeIdentity");const r=_();return null==(i=(await this.identityService.merge({id:e,src:{method:"",origin:t.origin,time:void 0,loc:t.loc,sess:r,diag:"true"===process.env.SEEKA_DEBUG_ENABLED?r:void 0,runtime:this.config.runtime}})).result)?void 0:i.personId},this.mergeIdentityBatch=async(e,t)=>{this.checkPermission(c.identity.send,"mergeIdentityBatch");const i=_();var r;if(0===e.length)return void(null==(r=this.config.logger)||r.debug("No identities in batch"));const s={method:"",origin:t.origin,time:void 0,loc:t.loc,sess:i,diag:"true"===process.env.SEEKA_DEBUG_ENABLED?i:void 0,runtime:this.config.runtime},n=M(e,this.maxBatchSize);if(n.length>1&&this.config.logger&&this.config.logger.debug(`Identity batch size ${e} is greater than ${this.maxBatchSize}, splitting into ${n.length} batches`),await this.trackActivityBatchRaw({data:n[0].map(e=>({id:{id:e||{},src:{...s}}}))}),n.length>1){const e=n.map((e,t)=>{var i;return 0===t?Promise.resolve():(null==(i=this.config.logger)||i.verbose(`Processing identity batch ${t+1} of ${n.length}`),this.trackActivityBatchRaw({data:e.map(e=>({id:{id:e||{},src:{...s}}}))}))});await Promise.all(e)}},this.trackActivityBatch=async(e,t)=>{this.checkPermission(c.activity.send,"trackActivityBatch");const i=_();var r;if(0===e.length)return void(null==(r=this.config.logger)||r.debug("No activities in batch"));const s={method:"",origin:t.origin,time:void 0,loc:t.loc,sess:i,diag:"true"===process.env.SEEKA_DEBUG_ENABLED?i:void 0,runtime:this.config.runtime},n=M(e,this.maxBatchSize);if(n.length>1&&this.config.logger&&this.config.logger.debug(`Activity batch size ${e.length} is greater than ${this.maxBatchSize}, splitting into ${n.length} batches`),await this.trackActivityBatchRaw({data:n[0].map(e=>({ev:{id:e.profile||{},src:{...s},payload:e.activity}}))}),n.length>1){const e=n.map((e,t)=>{var i;return 0===t?Promise.resolve():(null==(i=this.config.logger)||i.verbose(`Processing activity batch ${t+1} of ${n.length}`),this.trackActivityBatchRaw({data:e.map(e=>({ev:{id:e.profile||{},src:{...s},payload:e.activity}}))}))});await Promise.all(e)}},this.trackActivityBatchRaw=async e=>{await this.ingestionService.batch(e)},this.trackActivityForProfileId=async(e,t,i)=>{this.checkPermission(c.activity.send,"trackActivityForProfileId"),await this.trackActivityForProfileIdBatch([e],t,i)},this.trackActivityForProfileIdBatch=async(e,t,i)=>{this.checkPermission(c.activity.send,"trackActivityForProfileIdBatch"),await this.trackActivityBatch(e.map(e=>({activity:e,profile:t?{seekaPId:t}:void 0})),i)},this.trackActivityForProfile=async(e,t,i)=>{this.checkPermission(c.activity.send,"trackActivityForProfile"),await this.trackActivityForProfileBatch([e],t,i)},this.trackActivityForProfileBatch=async(e,t,i)=>{this.checkPermission(c.activity.send,"trackActivityForProfileBatch"),await this.trackActivityBatch(e.map(e=>({activity:e,profile:t})),i)},this.config=e,this.ingestionService=(e=>new g(e,e.ingestUrl,G(e)))(e),this.identityService=(e=>new p(e,e.ingestUrl,G(e)))(e)}}const K="x-seeka-signature-sha256",H=(e,t,i)=>{if(!t)return!1;let r=null;if(t.get&&"function"==typeof t.get)r=t.get(K);else{const e=t[K];e&&(Array.isArray(e)&&e.length>0?r=e[0]:("string"==typeof e||e instanceof String)&&(r=e))}if(!r)return!1;const s=X(e,i)===r;return s||console.warn("Invalid webhook signature"),s},X=(e,i)=>t.createHmac("sha256",e).update(i).digest("hex"),Y=(e,t,i)=>{if(!H(e,t,i))throw new Error("Invalid webhook signature")},Q=(e,t,i,r,s)=>{const n=new u;return n.appId=e.applicationId,n.appSecret=t,n.ingestUrl=process.env.SEEKA_INGEST_URL||"https://router.seeka.services",n.issuerUrl=process.env.SEEKA_ISSUER_URL||"https://account.seeka.app",n.organisationId=e.organisationId,n.applicationInstallId=e.applicationInstallId,n.runtime={type:"sdk/js/apps-server",ver:"1.1.24",client:i},n.logger=s,n.grantedPermissions=r,n.transformApiRequest=e=>Z(n,e),n.transformApiResponse=async(e,t,i)=>ee(n,e,t,i),n.hasAnyPermissions=e=>!(!n.grantedPermissions||0===n.grantedPermissions.length)&&(!e||0===e.length||e.some(e=>n.grantedPermissions.includes(e))),n.hasAllPermissions=e=>!(!n.grantedPermissions||0===n.grantedPermissions.length)&&(!e||0===e.length||e.every(e=>n.grantedPermissions.includes(e))),n.hasPermission=e=>!(!n.grantedPermissions||0===n.grantedPermissions.length)&&(!e||n.grantedPermissions.includes(e)),n},Z=async(e,t)=>{const i=await J(e);return t.headers={...t.headers,"X-OrgId":e.organisationId,Authorization:"Bearer "+(null==i?void 0:i.access_token)},t},ee=async(e,t,i,r)=>(i.data=JSON.stringify(i.data),r(i)),te="aes-192-cbc",ie=(e,t)=>{if(!e)return"";if(!t)throw new Error("Secret is required to encrypt data");const r=i.scryptSync(t,"salt",24),s=i.randomBytes(16),n=i.createCipheriv(te,r,s);return[n.update(e,"utf8","hex")+n.final("hex"),Buffer.from(s).toString("hex")].join("|")},re=(e,t)=>{if(!e)return"";if(!t)throw new Error("Secret is required to decrypt data");const[r,s]=e.split("|");if(!s)throw new Error("IV not found");const n=i.scryptSync(t,"salt",24),a=i.createDecipheriv(te,n,Buffer.from(s,"hex"));return a.update(r,"hex","utf8")+a.final("utf8")};class se{constructor(e){this.appSecret=void 0,this.encryptWithAppSecret=e=>{if(!this.appSecret)throw new Error("App secret is required to encrypt data");return ie(e,this.appSecret)},this.decryptWithAppSecret=e=>{if(!this.appSecret)throw new Error("App secret is required to decrypt data");return re(e,this.appSecret)},this.appSecret=e}}var ne;class ae{constructor(e,t){this.context=void 0,this.appCache=void 0,this.appInstallCache=void 0,this.api=void 0,this.logger=void 0,this.crypto=void 0,this.context=e,this.api=new z(e.config),this.appCache=new d(e.config.appId),this.appInstallCache=new d(e.config.appId,e.config.applicationInstallId),this.crypto=new se(e.config.appSecret),this.logger=t}}ne=ae,ae.create=(e,t,i,r,s)=>new ne({config:Q({...t},e,{type:i.name,ver:i.version},r,s)},s);const oe=[y.Order,y.SubscriptionItemPurchase,y.OneTimeItemPurchase],ce=(e,t,i)=>{if(!e.activity)return[];const r=e.activity,s=r.activityName===y.Custom?r.activityNameCustom:r.activityName;if(!s)return[];const n=s.toLowerCase(),a=[];return t.forEach(t=>{var o;if(!t)return;switch(t.type){case U.ActivityTracked:if(!t.activityNames)return;if(!t.activityNames.find(e=>e.toLowerCase()===n))return;i.verbose("Matched activity tracked filter",{filter:t,activityName:s});break;case U.PurchaseMade:if(!r.activityName||!oe.includes(r.activityName))return;i.verbose("Matched purchase made activity filter",{filter:t,activityName:s});break;default:return void i.warn("Unknown activity filter type",{filter:t})}const c=t.sourceFilter;if(!c)return;const l=e.source,d=null!=l&&l.loc?new URL(l.loc).hostname.toLowerCase():null,u=null==l?void 0:l.pipeline,h=null==u||null==(o=u.convergePipelineIntegrationInstanceId)?void 0:o.toLowerCase(),p=c.filters?c.filters.map(e=>{switch(e.type){case E.Wildcard:return i.verbose("Matched wildcard source filter",{sourceFilter:e}),!0;case E.Domain:return!(!d||!e.key||d!==e.key.toLowerCase()||(i.verbose("Matched domain source filter",{sourceFilter:e,activityHostname:d}),0));case E.Pipeline:return!(!h||!e.key||h!==e.key.toLowerCase()||(i.verbose("Matched pipeline source filter",{sourceFilter:e,sourceConvergePipelineIntegrationInstanceId:h}),0))}}):[];switch(c.comparer){case N.And:p.every(e=>!0===e)||a.push(t);break;case N.Or:p.some(e=>!0===e)&&a.push(t);break;default:i.warn("Unknown source filter comparer",{sourceFilters:c})}}),a};function le(e){if(!e||0===e.trim().length)return!1;const t=e.split(".").filter(e=>e.trim().length>0);return 4===t.length&&t[0].toLowerCase()==="sk".toLowerCase()&&t[1].toLowerCase()==="1".toLowerCase()&&!isNaN(parseInt(t[2],10))&&!isNaN(parseInt(t[3],10))}export{E as ActivityPipelineActivityFilterSourceItemType,U as ActivityPipelineActivityFilterType,x as ApiException,h as ApiServiceProxyBase,c as AppPermissionKeys,C as ClickAttributionSourcePlatform,N as ConditionComparer,O as ConditionOperator,S as ConvergePipelineLoggableActivityType,k as ECommerceContentType,P as ECommerceFinancialStatus,I as ECommerceFulfillmentStatus,w as ECommercePlatform,p as IdentityServiceProxy,g as IngestServiceProxy,v as PrivacyConsentType,f as ResponseResultType,A as SdkLogEventLevel,z as SeekaApiHelper,d as SeekaAppCacheManager,u as SeekaAppConfig,ae as SeekaAppHelper,b as SeekaWebhookCallType,y as TrackingActivityNames,m as TrackingEventSourceOriginType,M as chunk,re as decryptText,ie as encryptText,$ as getActivityName,le as isValidSeekaProfileId,ce as matchActivityPipelineFilters,L as separatePersonFullName,Y as throwOnInvalidWebhookSignature,H as validateWebhookSignature,K as webhookSignatureHeaderName};
2
2
  //# sourceMappingURL=sdk-apps-server.module.js.map