@seeka-labs/sdk-apps-server 3.8.2 → 3.8.6
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 Je=Object.create;var D=Object.defineProperty;var Ve=Object.getOwnPropertyDescriptor;var qe=Object.getOwnPropertyNames;var Ge=Object.getPrototypeOf,He=Object.prototype.hasOwnProperty;var je=(e,t)=>{for(var i in t)D(e,i,{get:t[i],enumerable:!0})},re=(e,t,i,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of qe(t))!He.call(e,r)&&r!==i&&D(e,r,{get:()=>t[r],enumerable:!(n=Ve(t,r))||n.enumerable});return e};var m=(e,t,i)=>(i=e!=null?Je(Ge(e)):{},re(t||!e||!e.__esModule?D(i,"default",{value:e,enumerable:!0}):i,e)),$e=e=>re(D({},"__esModule",{value:!0}),e);var xt={};je(xt,{ActivityPipelineActivityFilterSourceItemType:()=>$,ActivityPipelineActivityFilterType:()=>H,AnalyticsLibrary:()=>F,ApiException:()=>M,ApiServiceProxyBase:()=>T,AppPermissionKeys:()=>k,ClickAttributionSourcePlatform:()=>ye,ConditionComparer:()=>j,ConditionOperator:()=>he,ConsentMappingMatchType:()=>xe,ContentIdentificationBehavior:()=>z,ConvergePipelineLoggableActivityType:()=>pe,ConvergeVendorDestinationPublishStrategy:()=>ke,CrossDomainTrackingUtmBehavior:()=>ve,ECommerceContentType:()=>de,ECommerceFinancialStatus:()=>ue,ECommerceFulfillmentStatus:()=>ge,ECommercePlatform:()=>le,IabPrivacyConsentPurposeId:()=>K,IabPrivacyConsentPurposeIdMap:()=>nt,IdentityServiceProxy:()=>E,IngestServiceProxy:()=>w,PrivacyConsentType:()=>ae,PrivacyDataControlMode:()=>Ie,RegionalConsentGrantOption:()=>Ae,ResponseResultType:()=>se,SdkLogEventLevel:()=>fe,SeekaApiHelper:()=>I,SeekaAppCacheManager:()=>y,SeekaAppConfig:()=>C,SeekaAppHelper:()=>V,SeekaWebhookCallType:()=>me,TrackingActivityNames:()=>A,TrackingEventSourceOriginType:()=>ce,chunk:()=>U,cloneDeep:()=>st,dateToUtcDateTimeReferenceString:()=>Te,decryptText:()=>L,emailAddress:()=>ut,encryptText:()=>_,generateNewSessionId:()=>R,getActivityName:()=>ze,getActivityValue:()=>yt,getContentIdFromProduct:()=>ht,getContentNameFromProduct:()=>kt,getIssuer:()=>W,getNestedProperty:()=>dt,getNewAppInstallToken:()=>Z,getNewOrCachedAppInstallToken:()=>x,getRandomNumberString:()=>Ce,isDeepEqual:()=>gt,isNumber:()=>at,isValidSeekaProfileId:()=>vt,last:()=>ne,lastOrDefault:()=>ct,matchActivityPipelineFilters:()=>mt,md5Hash:()=>Y,parseFloat:()=>Be,parseInt:()=>ot,parseMoney:()=>rt,parseStr:()=>f,phoneNumberToE164:()=>pt,separatePersonFullName:()=>Ke,setNestedProperty:()=>lt,throwOnInvalidWebhookSignature:()=>Oe,urls:()=>At,validateWebhookSignature:()=>te,webhookSignatureHeaderName:()=>B});module.exports=$e(xt);var oe="3.8.1";var G=m(require("axios")),C=class{appId;appSecret;ingestUrl;issuerUrl;organisationId;applicationInstallId;runtime;logger;grantedPermissions;transformApiRequest;transformApiResponse;hasAnyPermissions;hasAllPermissions;hasPermission},T=class{config;constructor(t){this.config=t}transformOptions=async t=>await this.config.transformApiRequest(t);transformResult=async(t,i,n)=>await this.config.transformApiResponse(t,i,n)},E=class extends T{instance;baseUrl;jsonParseReviver=void 0;constructor(t,i,n){super(t),this.instance=n||G.default.create(),this.baseUrl=i??"https://api-localdev-env0-seeka.au.ngrok.io"}merge(t,i){let n=this.baseUrl+"/api/identity";n=n.replace(/[?&]$/,"");let o={data:JSON.stringify(t),method:"POST",url:n,headers:{"Content-Type":"application/json",Accept:"application/json"},cancelToken:i};return this.transformOptions(o).then(s=>this.instance.request(s)).catch(s=>{if(be(s)&&s.response)return s.response;throw s}).then(s=>this.transformResult(n,s,d=>this.processMerge(d)))}processMerge(t){let i=t.status,n={};if(t.headers&&typeof t.headers=="object")for(let r in t.headers)t.headers.hasOwnProperty(r)&&(n[r]=t.headers[r]);if(i===200){let r=t.data,o=null;return o=JSON.parse(r),Promise.resolve(o)}else if(i===400){let r=t.data,o=null;return o=JSON.parse(r),v("A server side error occurred.",i,r,n,o)}else if(i===401){let r=t.data,o=null;return o=JSON.parse(r),v("A server side error occurred.",i,r,n,o)}else if(i===422){let r=t.data,o=null;return o=JSON.parse(r),v("A server side error occurred.",i,r,n,o)}else if(i!==200&&i!==204){let r=t.data;return v("An unexpected server error occurred.",i,r,n)}return Promise.resolve(null)}},w=class extends T{instance;baseUrl;jsonParseReviver=void 0;constructor(t,i,n){super(t),this.instance=n||G.default.create(),this.baseUrl=i??"https://api-localdev-env0-seeka.au.ngrok.io"}batch(t,i){let n=this.baseUrl+"/api/ingest";n=n.replace(/[?&]$/,"");let o={data:JSON.stringify(t),method:"POST",url:n,headers:{"Content-Type":"application/json"},cancelToken:i};return this.transformOptions(o).then(s=>this.instance.request(s)).catch(s=>{if(be(s)&&s.response)return s.response;throw s}).then(s=>this.transformResult(n,s,d=>this.processBatch(d)))}processBatch(t){let i=t.status,n={};if(t.headers&&typeof t.headers=="object")for(let r in t.headers)t.headers.hasOwnProperty(r)&&(n[r]=t.headers[r]);if(i===202){let r=t.data;return Promise.resolve(null)}else if(i===400){let r=t.data,o=null;return o=JSON.parse(r),v("A server side error occurred.",i,r,n,o)}else if(i===401){let r=t.data,o=null;return o=JSON.parse(r),v("A server side error occurred.",i,r,n,o)}else if(i===422){let r=t.data,o=null;return o=JSON.parse(r),v("A server side error occurred.",i,r,n,o)}else if(i!==200&&i!==204){let r=t.data;return v("An unexpected server error occurred.",i,r,n)}return Promise.resolve(null)}},se=(n=>(n.Undefined="undefined",n.Success="success",n.Failed="failed",n))(se||{}),ae=(s=>(s.Unknown="unknown",s.Informed="informed",s.Implied="implied",s.Explicit="explicit",s.Active="active",s.Passive="passive",s))(ae||{}),ce=(c=>(c.Browser="browser",c.Server="server",c.Mobile="mobile",c.Desktop="desktop",c.PhysicalStore="physicalStore",c.Email="email",c.Phone="phone",c.Chat="chat",c.Automatic="automatic",c))(ce||{}),A=(l=>(l.Undefined="undefined",l.PageViewOrganic="pageViewOrganic",l.PageViewUtmAttributed="pageViewUtmAttributed",l.AddPaymentMethod="addPaymentMethod",l.AddToWishlist="addToWishlist",l.ContactMessage="contactMessage",l.Custom="custom",l.SyncCart="syncCart",l.Order="order",l.InitiateCheckout="initiateCheckout",l.AddToCart="addToCart",l.RemoveFromCart="removeFromCart",l.OneTimeItemPurchase="oneTimeItemPurchase",l.SubscriptionItemPurchase="subscriptionItemPurchase",l.ViewProduct="viewProduct",l.ViewPage="viewPage",l.ApplyPromotionalCode="applyPromotionalCode",l.KeywordSearch="keywordSearch",l.UserLoginSignup="userLoginSignup",l.UserLogin="userLogin",l.NewsletterSignup="newsletterSignup",l.Lead="lead",l.ChangeProductAttribute="changeProductAttribute",l.FilterItemsByAttribute="filterItemsByAttribute",l.Schedule="schedule",l.ViewContentItem="viewContentItem",l.StartTrial="startTrial",l))(A||{}),de=(r=>(r.Undefined="undefined",r.SingleProduct="singleProduct",r.SingleVariant="singleVariant",r.Collection="collection",r))(de||{}),le=(a=>(a.None="none",a.BigCommerce="bigCommerce",a.Shopify="shopify",a.OrderGroove="orderGroove",a.Magento="magento",a.Generic="generic",a.WooCommerce="wooCommerce",a.Demandware="demandware",a))(le||{}),ge=(s=>(s.Undefined="undefined",s.Fulfilled="fulfilled",s.NoneFulfilled="noneFulfilled",s.PartiallyFulfilled="partiallyFulfilled",s.RestockedOrCancelled="restockedOrCancelled",s.Pending="pending",s))(ge||{}),ue=(a=>(a.Undefined="undefined",a.Pending="pending",a.Authorized="authorized",a.PartiallyPaid="partiallyPaid",a.Paid="paid",a.PartiallyRefunded="partiallyRefunded",a.Refunded="refunded",a.Voided="voided",a))(ue||{}),pe=(c=>(c.Generic="generic",c.ActivityIngress="activityIngress",c.ActivityEgress="activityEgress",c.UserProfile="userProfile",c.SdkLog="sdkLog",c.Detections="detections",c.ActivityEgressFilter="activityEgressFilter",c.Diagnosis="diagnosis",c.PipelineIntegrationOutput="pipelineIntegrationOutput",c))(pe||{}),fe=(r=>(r.Information="information",r.Warning="warning",r.Error="error",r.Verbose="verbose",r))(fe||{}),me=(a=>(a.None="none",a.Probe="probe",a.AppInstalled="appInstalled",a.IdentityChanged="identityChanged",a.ActivityAccepted="activityAccepted",a.AppInstallSettingsUpdated="appInstallSettingsUpdated",a.AppUninstalled="appUninstalled",a.BrowserSdkPlugin="browserSdkPlugin",a))(me||{}),ye=(s=>(s.Unknown="unknown",s.Google="google",s.Meta="meta",s.Snapchat="snapchat",s.Pinterest="pinterest",s.TikTok="tikTok",s))(ye||{}),H=(n=>(n.Undefined="undefined",n.PurchaseMade="purchaseMade",n.ActivityTracked="activityTracked",n))(H||{}),j=(n=>(n.Undefined="undefined",n.And="and",n.Or="or",n))(j||{}),$=(s=>(s.Undefined="undefined",s.Domain="domain",s.Pipeline="pipeline",s.Wildcard="wildcard",s.Url="url",s.PagePath="pagePath",s))($||{}),he=(g=>(g.Undefined="undefined",g.Equals="equals",g.NotEquals="notEquals",g.Contains="contains",g.NotContains="notContains",g.StartsWith="startsWith",g.EndsWith="endsWith",g.IsNull="isNull",g.NotNull="notNull",g.IsTrue="isTrue",g.IsFalse="isFalse",g.GreaterThanOrEquals="greaterThanOrEquals",g.LessThanOrEquals="lessThanOrEquals",g.GreaterThan="greaterThan",g.LessThan="lessThan",g.Before="before",g.After="after",g.Between="between",g.In="in",g.NotIn="notIn",g.Regex="regEx",g.Any="any",g))(he||{}),F=(p=>(p.Undefined="undefined",p.Seeka="seeka",p.DynamicYield="dynamicYield",p.Segment="segment",p.FacebookPixel="facebookPixel",p.GoogleAnalytics="googleAnalytics",p.Braze="braze",p.SnapchatPixel="snapchatPixel",p.Pinterest="pinterest",p.TikTokPixel="tikTokPixel",p.GoogleAds="googleAds",p))(F||{}),z=(s=>(s.Default="default",s.Sku="sku",s.ProductId="productId",s.VariantId="variantId",s.ProductIdAndVariantIdUnderscore="productIdAndVariantIdUnderscore",s.VariantIdOrProductId="variantIdOrProductId",s))(z||{}),ke=(r=>(r.DeliverAllTraitsAndDeliverAllEvents="deliverAllTraitsAndDeliverAllEvents",r.DeliverAllTraitsAndDeliverEventsOnlyIfMaxWeightedTraitsPresent="deliverAllTraitsAndDeliverEventsOnlyIfMaxWeightedTraitsPresent",r.DeliverMaxWeightedTraitsOnlyAndDeliverAllEvents="deliverMaxWeightedTraitsOnlyAndDeliverAllEvents",r.DeliverMaxWeightedTraitsOnlyAndDeliverEventsOnlyIfMaxWeightedTraitsPresent="deliverMaxWeightedTraitsOnlyAndDeliverEventsOnlyIfMaxWeightedTraitsPresent",r))(ke||{}),ve=(n=>(n.None="none",n.SessionPassthrough="sessionPassthrough",n.UrlPassthrough="urlPassthrough",n))(ve||{}),Ae=(n=>(n.Unset="unset",n.Granted="granted",n.Denied="denied",n))(Ae||{}),K=(i=>(i.Undefined="undefined",i.MeasureAdvertisingPerformance="measureAdvertisingPerformance",i))(K||{}),xe=(n=>(n.Undefined="undefined",n.AllOf="allOf",n.AnyOf="anyOf",n))(xe||{}),Ie=(n=>(n.Disabled="disabled",n.Explicit="explicit",n.Implicit="implicit",n))(Ie||{}),M=class extends Error{message;status;response;headers;result;constructor(t,i,n,r,o){super(),this.message=t,this.status=i,this.response=n,this.headers=r,this.result=o}isApiException=!0;static isApiException(t){return t.isApiException===!0}};function v(e,t,i,n,r){throw r??new M(e,t,i,n,null)}function be(e){return e&&e.isAxiosError===!0}var h=require("openid-client"),O=m(require("winston"));var N=m(require("memory-cache")),Se="seeka:sdk",y=class{constructor(t,i){this.appId=t,this.appInstallationId=i}appId;appInstallationId;set=async(t,i,n)=>{let r=this.getKey(t);N.default.put(r,JSON.stringify(i),n)};getOrSet=async(t,i,n)=>{let r=this.getKey(t),o=N.default.get(r);if(o){let d=JSON.parse(o);return n&&await n(d),d}let s=await i();return s?(N.default.put(r,JSON.stringify(s.value),s.expiryAbsoluteMilliseconds),s.value):null};getKey=t=>this.appInstallationId?`${Se}:${this.appId}:${this.appInstallationId}:${t}`:`${Se}:${this.appId}:${t}`};var Pe=m(require("crypto"));var R=()=>{let e=Te(new Date),t=Ce();return`${e}.${t}`},ze=e=>{let t=Object.keys(A),i=e.toLowerCase(),n=t.find(r=>r.toLowerCase()===i);return n?A[n]:"custom"},Ce=()=>Math.floor(Math.random()*(9999999999-1e9)+1e9).toString(),Te=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 n=e.getUTCHours().toString();n.length<2&&(n="0"+n);let r=e.getUTCMinutes().toString();r.length<2&&(r="0"+r);let o=e.getUTCSeconds().toString();return o.length<2&&(o="0"+o),`${e.getUTCFullYear()}${t}${i}.${n}${r}${o}`},Y=e=>Pe.createHash("md5").update(e).digest("hex"),Ke=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(" ")}},U=(e,t)=>e.reduce((i,n,r)=>{let o=Math.floor(r/t);return i[o]||(i[o]=[]),i[o].push(n),i},[]);var W=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 i=new y(e.appId,e.applicationInstallId),n=Y(e.issuerUrl+"_"+e.appId),r=await i.getOrSet(n,async()=>{try{let o=await Ye(e);return!o||!o.meta||!o.raw?null:(e.logger?e.logger.verbose("Seeka auth: got issuer from remote",{...t}):console.debug("Seeka auth: got issuer from remote",{...t}),{value:o.meta,expiryAbsoluteMilliseconds:1e3*60*60})}catch(o){return e.logger?e.logger.error("Seeka auth: failed getting issuer",{...t,ex:O.default.exceptions.getAllInfo(o)}):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 r===null?null:new h.Configuration(r.serverMetadata,r.clientId,e.appSecret)},Ye=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 i=e.appId.replace(/-/g,""),n=await(0,h.discovery)(new URL(e.issuerUrl),i,void 0,(0,h.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:i},raw:n}}catch(i){return e.logger?e.logger.error("Seeka auth: failed discovering issuer from remote",{...t,ex:O.default.exceptions.getAllInfo(i)}):console.error("Seeka auth: failed discovering issuer from remote",{...t,err:i}),null}},Ze=async e=>{let t={applicationId:e.appId,issuer:{url:e.issuerUrl}},i=await W(e);if(!i)return null;try{let n=await(0,h.clientCredentialsGrant)(i,{resource:i.clientMetadata().client_id}),r={...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",{...r}):console.info("Seeka auth: got app client token from server",{...r}),{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 r={...t,error:n};return e.logger?e.logger.error("Seeka auth: failed to get client access token from server",{...r}):console.error("Seeka auth: failed to get client access token from server",{...r,err:O.default.exceptions.getAllInfo(n)}),null}},Z=async(e,t)=>{let i={applicationId:t.appId,issuer:{url:t.issuerUrl}},n=await W(t);if(!n||!n)return null;try{let r=await(0,h.genericGrantRequest)(n,"app_install_token",{applicationInstallId:t.applicationInstallId,access_token:e,scope:"Seeka.API.Ingest"}),o={...i,token:{expires_at:r.expires_at,token_type:r.token_type,scope:r.scope}};return t.logger?t.logger.verbose("Seeka auth: got app access token from server",{...o}):console.info("Seeka auth: got app access token from server",{...o}),{token_type:r.token_type,access_token:r.access_token,expires_in:r.expires_in,id_token:r.id_token,refresh_token:r.refresh_token,scope:r.scope,authorization_details:r.authorization_details}}catch(r){let o={...i,error:r};return t.logger?t.logger.error("Seeka auth: failed to get app access token from server",{...o}):console.debug("Seeka auth: failed to get app access token from server",{...o}),null}},x=async e=>{let t=new y(e.appId,e.applicationInstallId),i={applicationId:e.appId,issuer:{url:e.issuerUrl}};return await t.getOrSet("auth:token:appinstall",async()=>{let n=await Ze(e);if(!n||!n.access_token)return null;let r=await Z(n.access_token,e);return r?{value:r,expiryAbsoluteMilliseconds:((r.expires_in>n.expires_in?n.expires_in:r.expires_in)||900*1e3)-60*1e3}: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})})};var Q="https://router.seeka.services",Ee="https://router.seeka.services/tel/otel",X="https://account.seeka.app",we=(e,t,i,n,r)=>{let o=new C;return o.appId=e.applicationId,o.appSecret=t,o.ingestUrl=process.env.SEEKA_INGEST_URL||Q,o.issuerUrl=process.env.SEEKA_ISSUER_URL||X,o.organisationId=e.organisationId,o.applicationInstallId=e.applicationInstallId,o.runtime={type:"sdk/js/apps-server",ver:oe.split("-")[0],client:i},o.logger=r,o.grantedPermissions=n,o.transformApiRequest=s=>Qe(o,s),o.transformApiResponse=async(s,d,a)=>Xe(o,s,d,a),o.hasAnyPermissions=s=>!o.grantedPermissions||o.grantedPermissions.length===0?!1:!s||s.length===0?!0:s.some(d=>o.grantedPermissions.includes(d)),o.hasAllPermissions=s=>!o.grantedPermissions||o.grantedPermissions.length===0?!1:!s||s.length===0?!0:s.every(d=>o.grantedPermissions.includes(d)),o.hasPermission=s=>!o.grantedPermissions||o.grantedPermissions.length===0?!1:s?o.grantedPermissions.includes(s):!0,o},Qe=async(e,t)=>{let i=await x(e);if(!i||!i.access_token)throw new Error("Could not get access token for API request");return t.headers={...t.headers,"X-OrgId":e.organisationId,Authorization:"Bearer "+i?.access_token},t},Xe=async(e,t,i,n)=>(i.data=JSON.stringify(i.data),n(i));var k={identity:{receiveFull:"Identity.Receive.Pii",send:"Identity.Send"},activity:{receiveAnon:"Activity.Receive.Anon",receiveFull:"Activity.Receive.Pii",send:"Activity.Send"}};var De=m(require("axios")),Me=m(require("http")),Ne=m(require("https"));var et=new Me.default.Agent({keepAlive:!0,scheduling:"fifo"}),tt=new Ne.default.Agent({keepAlive:!0,scheduling:"fifo"}),Re=e=>{let t=De.default.create({httpAgent:et,httpsAgent:tt});return t.interceptors.request.use(function(i){let n={url:i.url,method:i.method};return process.env.LOGGING_LEVEL==="silly"&&(n={...n,body:i.data,params:i.params}),e.logger?e.logger.debug(`Seeka API: making call to ${n.url}`,{...n}):console.debug(`Seeka API: making call to ${n.url}`,{...n}),i},function(i){let n={error:i};return e.logger?e.logger.http("Seeka API: failed to send request",{...n}):console.debug("Seeka API: failed to send request",{...n}),Promise.reject(i)}),t.interceptors.response.use(function(i){let n={url:i.request?.url||i.config.url,method:i.request?.method||i.config.method,response:{status:i.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}),i},function(i){let{code:n,status:r,message:o}=i,{headers:s,url:d,method:a}=i?.config,c={code:n,status:r,message:o,headers:s,url:d,method:a,content:i?.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(i)}),t},ee={getIdentityService:e=>new E(e,e.ingestUrl,Re(e)),getIngestService:e=>new w(e,e.ingestUrl,Re(e))};var I=class{constructor(t){this.config=t,this.ingestionService=ee.getIngestService(t),this.identityService=ee.getIdentityService(t)}config;maxBatchSize=50;refreshOrPrimeTokenCache=async()=>{await x(this.config)};ingestionService;identityService;checkPermission=(t,i)=>{if(!this.config.hasPermission(t))throw new Error("Cannot perform operation "+i+" on installationId "+this.config.applicationInstallId+" without permission "+t+". Currently granted permissions: "+(this.config.grantedPermissions?this.config.grantedPermissions.join(", "):"none"));return!0};mergeIdentity=async(t,i)=>{this.checkPermission(k.identity.send,"mergeIdentity");let n=R();return(await this.identityService.merge({id:t,src:{method:"",origin:i.origin,time:void 0,loc:i.loc,sess:n,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?n:void 0,runtime:this.config.runtime}})).result?.personId};mergeIdentityBatch=async(t,i)=>{this.checkPermission(k.identity.send,"mergeIdentityBatch");let n=R();if(t.length===0){this.config.logger?.debug("No identities in batch");return}let r={method:"",origin:i.origin,time:void 0,loc:i.loc,sess:n,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?n:void 0,runtime:this.config.runtime},o=U(t,this.maxBatchSize);if(o.length>1&&this.config.logger&&this.config.logger.debug(`Identity batch size ${t} is greater than ${this.maxBatchSize}, splitting into ${o.length} batches`),await this.trackActivityBatchRaw({data:o[0].map(s=>({id:{id:s||{},src:{...r}}}))}),o.length>1){let s=o.map((d,a)=>a===0?Promise.resolve():(this.config.logger?.verbose(`Processing identity batch ${a+1} of ${o.length}`),this.trackActivityBatchRaw({data:d.map(c=>({id:{id:c||{},src:{...r}}}))})));await Promise.all(s)}};trackActivityBatch=async(t,i)=>{this.checkPermission(k.activity.send,"trackActivityBatch");let n=R();if(t.length===0){this.config.logger?.debug("No activities in batch");return}let r={method:"",origin:i.origin,time:void 0,loc:i.loc,sess:n,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?n:void 0,runtime:this.config.runtime},o=U(t,this.maxBatchSize);if(o.length>1&&this.config.logger&&this.config.logger.debug(`Activity batch size ${t.length} is greater than ${this.maxBatchSize}, splitting into ${o.length} batches`),await this.trackActivityBatchRaw({data:o[0].map(s=>({ev:{id:s.profile||{},src:{...r},payload:s.activity}}))}),o.length>1){let s=o.map((d,a)=>a===0?Promise.resolve():(this.config.logger?.verbose(`Processing activity batch ${a+1} of ${o.length}`),this.trackActivityBatchRaw({data:d.map(c=>({ev:{id:c.profile||{},src:{...r},payload:c.activity}}))})));await Promise.all(s)}};trackActivityBatchRaw=async t=>{await this.ingestionService.batch(t)};trackActivityForProfileId=async(t,i,n)=>{this.checkPermission(k.activity.send,"trackActivityForProfileId"),await this.trackActivityForProfileIdBatch([t],i,n)};trackActivityForProfileIdBatch=async(t,i,n)=>{this.checkPermission(k.activity.send,"trackActivityForProfileIdBatch"),await this.trackActivityBatch(t.map(r=>({activity:r,profile:i?{seekaPId:i}:void 0})),n)};trackActivityForProfile=async(t,i,n)=>{this.checkPermission(k.activity.send,"trackActivityForProfile"),await this.trackActivityForProfileBatch([t],i,n)};trackActivityForProfileBatch=async(t,i,n)=>{this.checkPermission(k.activity.send,"trackActivityForProfileBatch"),await this.trackActivityBatch(t.map(r=>({activity:r,profile:i})),n)}};var nt={measureAdvertisingPerformance:7};var Ue=m(require("crypto")),B="x-seeka-signature-sha256",te=(e,t,i)=>{if(!t)return!1;let n=null;if(t.get&&typeof t.get=="function")n=t.get(B);else{let s=t[B];s&&(Array.isArray(s)&&s.length>0?n=s[0]:(typeof s=="string"||s instanceof String)&&(n=s))}if(!n)return!1;let o=it(e,i)===n;return o||console.warn("Invalid webhook signature"),o},it=(e,t)=>Ue.createHmac("sha256",e).update(t).digest("hex"),Oe=(e,t,i)=>{if(!te(e,t,i))throw new Error("Invalid webhook signature")};var b=m(require("crypto")),We="aes-192-cbc",_=(e,t)=>{if(!e)return"";if(!t)throw new Error("Secret is required to encrypt data");let i=b.default.scryptSync(t,"salt",24),n=b.default.randomBytes(16),r=b.default.createCipheriv(We,i,n);return[r.update(e,"utf8","hex")+r.final("hex"),Buffer.from(n).toString("hex")].join("|")},L=(e,t)=>{if(!e)return"";if(!t)throw new Error("Secret is required to decrypt data");let[i,n]=e.split("|");if(!n)throw new Error("IV not found");let r=b.default.scryptSync(t,"salt",24),o=b.default.createDecipheriv(We,r,Buffer.from(n,"hex"));return o.update(i,"hex","utf8")+o.final("utf8")};var J=class{constructor(t){this.appSecret=t}appSecret;encryptWithAppSecret=t=>{if(!this.appSecret)throw new Error("App secret is required to encrypt data");return _(t,this.appSecret)};decryptWithAppSecret=t=>{if(!this.appSecret)throw new Error("App secret is required to decrypt data");return L(t,this.appSecret)}};var V=class e{constructor(t,i){this.context=t,this.api=new I(t.config),this.appCache=new y(t.config.appId),this.appInstallCache=new y(t.config.appId,t.config.applicationInstallId),this.crypto=new J(t.config.appSecret),this.logger=i}context;appCache;appInstallCache;api;logger;crypto;static create=(t,i,n,r,o)=>new e({config:we({...i},t,{type:n.name,ver:n.version.split("-")[0]},r,o)},o)};var _e=m(require("winston"));var S=require("lodash-es"),f=e=>e==null||e===""||String(e).trim()===""?"":String(e);function Be(e){if(e==null||e==="")return 0;let t=e.toString().replace(/[^0-9.]/g,"");return Number.isNaN(Number(t))?0:Number(t)}function rt(e){if(e==null||e===0||e==="")return+"0.00";let t=Be(e);return Number(t.toFixed(3))}function ot(e){return e==null||e===""||Number.isNaN(Number(e.toString()))?0:Math.floor(Number(e))}function st(e){return JSON.parse(JSON.stringify(e))}function at(e){return/^-?\d+$/.test(e)}function ct(e){if(!(e==null||e.length===0))return ne(e)}function ne(e){return ne(e)}function dt(e,t){return(0,S.get)(e,t)}function lt(e,t,i){return(0,S.set)(e,t,i)}function gt(e,t){return(0,S.isEqual)(e,t)}function ut(e){return e?e.trim().toLowerCase():""}function pt(e){return e==null?"":(e=e.trim().replace(/-/gi,"").replace(/\(/gi,"").replace(/\)/gi,"").replace(/ /g,"").replace(/\+/g,""),e)}var ft=["order","subscriptionItemPurchase","oneTimeItemPurchase"],mt=(e,t,i)=>{if(!e.activity)return[];let n=e.activity,r=n.activityName==="custom"?n.activityNameCustom:n.activityName;if(!r)return[];let o=r.toLowerCase(),s=[];return t.forEach(d=>{if(!d)return;switch(d.type){case"activityTracked":{if(!d.activityNames||!d.activityNames.find(Le=>Le.toLowerCase()===o))return;i.verbose("Matched activity tracked filter",{filter:d,activityName:r});break}case"purchaseMade":{if(!n.activityName||!ft.includes(n.activityName))return;i.verbose("Matched purchase made activity filter",{filter:d,activityName:r});break}default:{i.warn("Unknown activity filter type",{filter:d});return}}let a=d.sourceFilter;if(!a)return;let c=e.source,P;try{P=c?.loc?new URL(c.loc).hostname.toLowerCase():null}catch(u){i.error("Failed to parse activity source URL",{ex:_e.default.exceptions.getAllInfo(u),activitySource:c}),P=null}let q=c?.pipeline?.convergePipelineIntegrationInstanceId?.toLowerCase(),ie=a.filters?a.filters.map(u=>{switch(u.type){case"wildcard":return i.verbose("Matched wildcard source filter",{sourceFilter:u}),!0;case"domain":return!P||!u.key?!1:P===u.key.toLowerCase()?(i.verbose("Matched domain source filter",{sourceFilter:u,activityHostname:P}),!0):!1;case"pipeline":return!q||!u.key?!1:q===u.key.toLowerCase()?(i.verbose("Matched pipeline source filter",{sourceFilter:u,sourceConvergePipelineIntegrationInstanceId:q}),!0):!1}}):[];switch(a.comparer){case"and":{ie.every(u=>u===!0)&&s.push(d);break}case"or":{ie.some(u=>u===!0)&&s.push(d);break}default:{i.warn("Unknown source filter comparer",{sourceFilters:a});break}}}),s},yt=(e,t=!1)=>{let i=e.commerce,n=i?.totalPrice||i?.products?.map(o=>(o.unitPrice||0)*(o.quantity||1)).reduce((o,s)=>o+s,0)||void 0,r=i?.currencyCode||null;if((!n||n<=0)&&(n=e?.lead?.predictedLtv||e?.lead?.predictedValue,n&&e?.lead?.currencyCode&&(r=e?.lead?.currencyCode||null)),(!n||n<=0)&&(n=e?.contentItem?.value,n&&e?.contentItem?.currencyCode&&(r=e?.contentItem?.currencyCode||null)),(!n||n<=0)&&(e?.contentItem?.items&&e?.contentItem?.items.length>0&&(n=e?.contentItem?.items.map(o=>o&&o.unitPrice?o.unitPrice*(o.quantity||1):0).reduce((o,s)=>o+s,0)),n&&(r=e?.contentItem?.currencyCode||e?.commerce?.currencyCode||null,!r))){let o=e?.contentItem?.items?.filter(s=>s.currencyCode)||[];o.length>0&&(r=o[0].currencyCode||null)}if((!n||n<=0)&&e?.commerce?.products&&e?.commerce?.products.length>0&&(n=e?.commerce?.products.map(o=>o&&o.unitPrice?o.unitPrice*(o.quantity||1):0).reduce((o,s)=>o+s,0),n&&(r=e?.commerce?.currencyCode||null,!r))){let o=e?.commerce?.products?.filter(s=>s.currencyCode)||[];o.length>0&&(r=o[0].currencyCode||null)}return(!n||n<=0)&&!r?null:{value:n===0&&t?null:n||null,currencyCode:r}};function ht(e,t,i){if(!e)return;let n=t.processing?.contentIdentificationBehavior,r=null;(i=="googleAnalytics"||i=="googleAds")&&(t.analytics?.libraries?.googleAnalytics?.merchant?.productItemIdBehavior!=null&&(n=t.analytics?.libraries?.googleAnalytics?.merchant?.productItemIdBehavior),r=f(t.analytics?.libraries?.googleAnalytics?.merchant?.productItemIdPrefix));let o;switch(n){case"sku":o=e?.sku;break;case"productId":o=e?.productIdentifier;break;case"variantId":o=e?.variantIdentifier;break;case"productIdAndVariantIdUnderscore":f(e.variantIdentifier)&&f(e.productIdentifier)?o=`${e.productIdentifier}_${e.variantIdentifier}`:f(e.variantIdentifier)?o=e.variantIdentifier:o=e.productIdentifier;break;case"variantIdOrProductId":f(e.variantIdentifier)?o=e.variantIdentifier:o=e.productIdentifier;break;default:o=f(e?.sku)||f(e?.variantIdentifier)||f(e?.productIdentifier);break}return r?`${r}${o}`:o}function kt(e,t){return f(e?.variantName)||f(e?.productName)}function vt(e){if(!e||e.trim().length===0)return!1;let t=e.split(".").filter(i=>i.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 At={defaultIssuerUrl:X,defaultTelemetryUrl:Ee,defaultIngestUrl:Q};0&&(module.exports={ActivityPipelineActivityFilterSourceItemType,ActivityPipelineActivityFilterType,AnalyticsLibrary,ApiException,ApiServiceProxyBase,AppPermissionKeys,ClickAttributionSourcePlatform,ConditionComparer,ConditionOperator,ConsentMappingMatchType,ContentIdentificationBehavior,ConvergePipelineLoggableActivityType,ConvergeVendorDestinationPublishStrategy,CrossDomainTrackingUtmBehavior,ECommerceContentType,ECommerceFinancialStatus,ECommerceFulfillmentStatus,ECommercePlatform,IabPrivacyConsentPurposeId,IabPrivacyConsentPurposeIdMap,IdentityServiceProxy,IngestServiceProxy,PrivacyConsentType,PrivacyDataControlMode,RegionalConsentGrantOption,ResponseResultType,SdkLogEventLevel,SeekaApiHelper,SeekaAppCacheManager,SeekaAppConfig,SeekaAppHelper,SeekaWebhookCallType,TrackingActivityNames,TrackingEventSourceOriginType,chunk,cloneDeep,dateToUtcDateTimeReferenceString,decryptText,emailAddress,encryptText,generateNewSessionId,getActivityName,getActivityValue,getContentIdFromProduct,getContentNameFromProduct,getIssuer,getNestedProperty,getNewAppInstallToken,getNewOrCachedAppInstallToken,getRandomNumberString,isDeepEqual,isNumber,isValidSeekaProfileId,last,lastOrDefault,matchActivityPipelineFilters,md5Hash,parseFloat,parseInt,parseMoney,parseStr,phoneNumberToE164,separatePersonFullName,setNestedProperty,throwOnInvalidWebhookSignature,urls,validateWebhookSignature,webhookSignatureHeaderName});
|
|
1
|
+
"use strict";var Je=Object.create;var D=Object.defineProperty;var Ve=Object.getOwnPropertyDescriptor;var qe=Object.getOwnPropertyNames;var Ge=Object.getPrototypeOf,He=Object.prototype.hasOwnProperty;var je=(e,t)=>{for(var i in t)D(e,i,{get:t[i],enumerable:!0})},re=(e,t,i,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of qe(t))!He.call(e,r)&&r!==i&&D(e,r,{get:()=>t[r],enumerable:!(n=Ve(t,r))||n.enumerable});return e};var m=(e,t,i)=>(i=e!=null?Je(Ge(e)):{},re(t||!e||!e.__esModule?D(i,"default",{value:e,enumerable:!0}):i,e)),$e=e=>re(D({},"__esModule",{value:!0}),e);var xt={};je(xt,{ActivityPipelineActivityFilterSourceItemType:()=>$,ActivityPipelineActivityFilterType:()=>H,AnalyticsLibrary:()=>F,ApiException:()=>M,ApiServiceProxyBase:()=>T,AppPermissionKeys:()=>k,ClickAttributionSourcePlatform:()=>ye,ConditionComparer:()=>j,ConditionOperator:()=>he,ConsentMappingMatchType:()=>xe,ContentIdentificationBehavior:()=>z,ConvergePipelineLoggableActivityType:()=>pe,ConvergeVendorDestinationPublishStrategy:()=>ke,CrossDomainTrackingUtmBehavior:()=>ve,ECommerceContentType:()=>de,ECommerceFinancialStatus:()=>ue,ECommerceFulfillmentStatus:()=>ge,ECommercePlatform:()=>le,IabPrivacyConsentPurposeId:()=>K,IabPrivacyConsentPurposeIdMap:()=>nt,IdentityServiceProxy:()=>E,IngestServiceProxy:()=>w,PrivacyConsentType:()=>ae,PrivacyDataControlMode:()=>Ie,RegionalConsentGrantOption:()=>Ae,ResponseResultType:()=>se,SdkLogEventLevel:()=>fe,SeekaApiHelper:()=>I,SeekaAppCacheManager:()=>y,SeekaAppConfig:()=>C,SeekaAppHelper:()=>V,SeekaWebhookCallType:()=>me,TrackingActivityNames:()=>A,TrackingEventSourceOriginType:()=>ce,chunk:()=>U,cloneDeep:()=>st,dateToUtcDateTimeReferenceString:()=>Te,decryptText:()=>L,emailAddress:()=>ut,encryptText:()=>_,generateNewSessionId:()=>R,getActivityName:()=>ze,getActivityValue:()=>yt,getContentIdFromProduct:()=>ht,getContentNameFromProduct:()=>kt,getIssuer:()=>W,getNestedProperty:()=>dt,getNewAppInstallToken:()=>Z,getNewOrCachedAppInstallToken:()=>x,getRandomNumberString:()=>Ce,isDeepEqual:()=>gt,isNumber:()=>at,isValidSeekaProfileId:()=>vt,last:()=>ne,lastOrDefault:()=>ct,matchActivityPipelineFilters:()=>mt,md5Hash:()=>Y,parseFloat:()=>Be,parseInt:()=>ot,parseMoney:()=>rt,parseStr:()=>f,phoneNumberToE164:()=>pt,separatePersonFullName:()=>Ke,setNestedProperty:()=>lt,throwOnInvalidWebhookSignature:()=>Oe,urls:()=>At,validateWebhookSignature:()=>te,webhookSignatureHeaderName:()=>B});module.exports=$e(xt);var oe="3.8.6";var G=m(require("axios")),C=class{appId;appSecret;ingestUrl;issuerUrl;organisationId;applicationInstallId;runtime;logger;grantedPermissions;transformApiRequest;transformApiResponse;hasAnyPermissions;hasAllPermissions;hasPermission},T=class{config;constructor(t){this.config=t}transformOptions=async t=>await this.config.transformApiRequest(t);transformResult=async(t,i,n)=>await this.config.transformApiResponse(t,i,n)},E=class extends T{instance;baseUrl;jsonParseReviver=void 0;constructor(t,i,n){super(t),this.instance=n||G.default.create(),this.baseUrl=i??"https://api-localdev-env0-seeka.au.ngrok.io"}merge(t,i){let n=this.baseUrl+"/api/identity";n=n.replace(/[?&]$/,"");let o={data:JSON.stringify(t),method:"POST",url:n,headers:{"Content-Type":"application/json",Accept:"application/json"},cancelToken:i};return this.transformOptions(o).then(s=>this.instance.request(s)).catch(s=>{if(be(s)&&s.response)return s.response;throw s}).then(s=>this.transformResult(n,s,d=>this.processMerge(d)))}processMerge(t){let i=t.status,n={};if(t.headers&&typeof t.headers=="object")for(let r in t.headers)t.headers.hasOwnProperty(r)&&(n[r]=t.headers[r]);if(i===200){let r=t.data,o=null;return o=JSON.parse(r),Promise.resolve(o)}else if(i===400){let r=t.data,o=null;return o=JSON.parse(r),v("A server side error occurred.",i,r,n,o)}else if(i===401){let r=t.data,o=null;return o=JSON.parse(r),v("A server side error occurred.",i,r,n,o)}else if(i===422){let r=t.data,o=null;return o=JSON.parse(r),v("A server side error occurred.",i,r,n,o)}else if(i!==200&&i!==204){let r=t.data;return v("An unexpected server error occurred.",i,r,n)}return Promise.resolve(null)}},w=class extends T{instance;baseUrl;jsonParseReviver=void 0;constructor(t,i,n){super(t),this.instance=n||G.default.create(),this.baseUrl=i??"https://api-localdev-env0-seeka.au.ngrok.io"}batch(t,i){let n=this.baseUrl+"/api/ingest";n=n.replace(/[?&]$/,"");let o={data:JSON.stringify(t),method:"POST",url:n,headers:{"Content-Type":"application/json"},cancelToken:i};return this.transformOptions(o).then(s=>this.instance.request(s)).catch(s=>{if(be(s)&&s.response)return s.response;throw s}).then(s=>this.transformResult(n,s,d=>this.processBatch(d)))}processBatch(t){let i=t.status,n={};if(t.headers&&typeof t.headers=="object")for(let r in t.headers)t.headers.hasOwnProperty(r)&&(n[r]=t.headers[r]);if(i===202){let r=t.data;return Promise.resolve(null)}else if(i===400){let r=t.data,o=null;return o=JSON.parse(r),v("A server side error occurred.",i,r,n,o)}else if(i===401){let r=t.data,o=null;return o=JSON.parse(r),v("A server side error occurred.",i,r,n,o)}else if(i===422){let r=t.data,o=null;return o=JSON.parse(r),v("A server side error occurred.",i,r,n,o)}else if(i!==200&&i!==204){let r=t.data;return v("An unexpected server error occurred.",i,r,n)}return Promise.resolve(null)}},se=(n=>(n.Undefined="undefined",n.Success="success",n.Failed="failed",n))(se||{}),ae=(s=>(s.Unknown="unknown",s.Informed="informed",s.Implied="implied",s.Explicit="explicit",s.Active="active",s.Passive="passive",s))(ae||{}),ce=(c=>(c.Browser="browser",c.Server="server",c.Mobile="mobile",c.Desktop="desktop",c.PhysicalStore="physicalStore",c.Email="email",c.Phone="phone",c.Chat="chat",c.Automatic="automatic",c))(ce||{}),A=(l=>(l.Undefined="undefined",l.PageViewOrganic="pageViewOrganic",l.PageViewUtmAttributed="pageViewUtmAttributed",l.AddPaymentMethod="addPaymentMethod",l.AddToWishlist="addToWishlist",l.ContactMessage="contactMessage",l.Custom="custom",l.SyncCart="syncCart",l.Order="order",l.InitiateCheckout="initiateCheckout",l.AddToCart="addToCart",l.RemoveFromCart="removeFromCart",l.OneTimeItemPurchase="oneTimeItemPurchase",l.SubscriptionItemPurchase="subscriptionItemPurchase",l.ViewProduct="viewProduct",l.ViewPage="viewPage",l.ApplyPromotionalCode="applyPromotionalCode",l.KeywordSearch="keywordSearch",l.UserLoginSignup="userLoginSignup",l.UserLogin="userLogin",l.NewsletterSignup="newsletterSignup",l.Lead="lead",l.ChangeProductAttribute="changeProductAttribute",l.FilterItemsByAttribute="filterItemsByAttribute",l.Schedule="schedule",l.ViewContentItem="viewContentItem",l.StartTrial="startTrial",l))(A||{}),de=(r=>(r.Undefined="undefined",r.SingleProduct="singleProduct",r.SingleVariant="singleVariant",r.Collection="collection",r))(de||{}),le=(a=>(a.None="none",a.BigCommerce="bigCommerce",a.Shopify="shopify",a.OrderGroove="orderGroove",a.Magento="magento",a.Generic="generic",a.WooCommerce="wooCommerce",a.Demandware="demandware",a))(le||{}),ge=(s=>(s.Undefined="undefined",s.Fulfilled="fulfilled",s.NoneFulfilled="noneFulfilled",s.PartiallyFulfilled="partiallyFulfilled",s.RestockedOrCancelled="restockedOrCancelled",s.Pending="pending",s))(ge||{}),ue=(a=>(a.Undefined="undefined",a.Pending="pending",a.Authorized="authorized",a.PartiallyPaid="partiallyPaid",a.Paid="paid",a.PartiallyRefunded="partiallyRefunded",a.Refunded="refunded",a.Voided="voided",a))(ue||{}),pe=(c=>(c.Generic="generic",c.ActivityIngress="activityIngress",c.ActivityEgress="activityEgress",c.UserProfile="userProfile",c.SdkLog="sdkLog",c.Detections="detections",c.ActivityEgressFilter="activityEgressFilter",c.Diagnosis="diagnosis",c.PipelineIntegrationOutput="pipelineIntegrationOutput",c))(pe||{}),fe=(r=>(r.Information="information",r.Warning="warning",r.Error="error",r.Verbose="verbose",r))(fe||{}),me=(a=>(a.None="none",a.Probe="probe",a.AppInstalled="appInstalled",a.IdentityChanged="identityChanged",a.ActivityAccepted="activityAccepted",a.AppInstallSettingsUpdated="appInstallSettingsUpdated",a.AppUninstalled="appUninstalled",a.BrowserSdkPlugin="browserSdkPlugin",a))(me||{}),ye=(s=>(s.Unknown="unknown",s.Google="google",s.Meta="meta",s.Snapchat="snapchat",s.Pinterest="pinterest",s.TikTok="tikTok",s))(ye||{}),H=(n=>(n.Undefined="undefined",n.PurchaseMade="purchaseMade",n.ActivityTracked="activityTracked",n))(H||{}),j=(n=>(n.Undefined="undefined",n.And="and",n.Or="or",n))(j||{}),$=(s=>(s.Undefined="undefined",s.Domain="domain",s.Pipeline="pipeline",s.Wildcard="wildcard",s.Url="url",s.PagePath="pagePath",s))($||{}),he=(g=>(g.Undefined="undefined",g.Equals="equals",g.NotEquals="notEquals",g.Contains="contains",g.NotContains="notContains",g.StartsWith="startsWith",g.EndsWith="endsWith",g.IsNull="isNull",g.NotNull="notNull",g.IsTrue="isTrue",g.IsFalse="isFalse",g.GreaterThanOrEquals="greaterThanOrEquals",g.LessThanOrEquals="lessThanOrEquals",g.GreaterThan="greaterThan",g.LessThan="lessThan",g.Before="before",g.After="after",g.Between="between",g.In="in",g.NotIn="notIn",g.Regex="regEx",g.Any="any",g))(he||{}),F=(p=>(p.Undefined="undefined",p.Seeka="seeka",p.DynamicYield="dynamicYield",p.Segment="segment",p.FacebookPixel="facebookPixel",p.GoogleAnalytics="googleAnalytics",p.Braze="braze",p.SnapchatPixel="snapchatPixel",p.Pinterest="pinterest",p.TikTokPixel="tikTokPixel",p.GoogleAds="googleAds",p))(F||{}),z=(s=>(s.Default="default",s.Sku="sku",s.ProductId="productId",s.VariantId="variantId",s.ProductIdAndVariantIdUnderscore="productIdAndVariantIdUnderscore",s.VariantIdOrProductId="variantIdOrProductId",s))(z||{}),ke=(r=>(r.DeliverAllTraitsAndDeliverAllEvents="deliverAllTraitsAndDeliverAllEvents",r.DeliverAllTraitsAndDeliverEventsOnlyIfMaxWeightedTraitsPresent="deliverAllTraitsAndDeliverEventsOnlyIfMaxWeightedTraitsPresent",r.DeliverMaxWeightedTraitsOnlyAndDeliverAllEvents="deliverMaxWeightedTraitsOnlyAndDeliverAllEvents",r.DeliverMaxWeightedTraitsOnlyAndDeliverEventsOnlyIfMaxWeightedTraitsPresent="deliverMaxWeightedTraitsOnlyAndDeliverEventsOnlyIfMaxWeightedTraitsPresent",r))(ke||{}),ve=(n=>(n.None="none",n.SessionPassthrough="sessionPassthrough",n.UrlPassthrough="urlPassthrough",n))(ve||{}),Ae=(n=>(n.Unset="unset",n.Granted="granted",n.Denied="denied",n))(Ae||{}),K=(i=>(i.Undefined="undefined",i.MeasureAdvertisingPerformance="measureAdvertisingPerformance",i))(K||{}),xe=(n=>(n.Undefined="undefined",n.AllOf="allOf",n.AnyOf="anyOf",n))(xe||{}),Ie=(n=>(n.Disabled="disabled",n.Explicit="explicit",n.Implicit="implicit",n))(Ie||{}),M=class extends Error{message;status;response;headers;result;constructor(t,i,n,r,o){super(),this.message=t,this.status=i,this.response=n,this.headers=r,this.result=o}isApiException=!0;static isApiException(t){return t.isApiException===!0}};function v(e,t,i,n,r){throw r??new M(e,t,i,n,null)}function be(e){return e&&e.isAxiosError===!0}var h=require("openid-client"),O=m(require("winston"));var N=m(require("memory-cache")),Se="seeka:sdk",y=class{constructor(t,i){this.appId=t,this.appInstallationId=i}appId;appInstallationId;set=async(t,i,n)=>{let r=this.getKey(t);N.default.put(r,JSON.stringify(i),n)};getOrSet=async(t,i,n)=>{let r=this.getKey(t),o=N.default.get(r);if(o){let d=JSON.parse(o);return n&&await n(d),d}let s=await i();return s?(N.default.put(r,JSON.stringify(s.value),s.expiryAbsoluteMilliseconds),s.value):null};getKey=t=>this.appInstallationId?`${Se}:${this.appId}:${this.appInstallationId}:${t}`:`${Se}:${this.appId}:${t}`};var Pe=m(require("crypto"));var R=()=>{let e=Te(new Date),t=Ce();return`${e}.${t}`},ze=e=>{let t=Object.keys(A),i=e.toLowerCase(),n=t.find(r=>r.toLowerCase()===i);return n?A[n]:"custom"},Ce=()=>Math.floor(Math.random()*(9999999999-1e9)+1e9).toString(),Te=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 n=e.getUTCHours().toString();n.length<2&&(n="0"+n);let r=e.getUTCMinutes().toString();r.length<2&&(r="0"+r);let o=e.getUTCSeconds().toString();return o.length<2&&(o="0"+o),`${e.getUTCFullYear()}${t}${i}.${n}${r}${o}`},Y=e=>Pe.createHash("md5").update(e).digest("hex"),Ke=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(" ")}},U=(e,t)=>e.reduce((i,n,r)=>{let o=Math.floor(r/t);return i[o]||(i[o]=[]),i[o].push(n),i},[]);var W=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 i=new y(e.appId,e.applicationInstallId),n=Y(e.issuerUrl+"_"+e.appId),r=await i.getOrSet(n,async()=>{try{let o=await Ye(e);return!o||!o.meta||!o.raw?null:(e.logger?e.logger.verbose("Seeka auth: got issuer from remote",{...t}):console.debug("Seeka auth: got issuer from remote",{...t}),{value:o.meta,expiryAbsoluteMilliseconds:1e3*60*60})}catch(o){return e.logger?e.logger.error("Seeka auth: failed getting issuer",{...t,ex:O.default.exceptions.getAllInfo(o)}):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 r===null?null:new h.Configuration(r.serverMetadata,r.clientId,e.appSecret)},Ye=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 i=e.appId.replace(/-/g,""),n=await(0,h.discovery)(new URL(e.issuerUrl),i,void 0,(0,h.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:i},raw:n}}catch(i){return e.logger?e.logger.error("Seeka auth: failed discovering issuer from remote",{...t,ex:O.default.exceptions.getAllInfo(i)}):console.error("Seeka auth: failed discovering issuer from remote",{...t,err:i}),null}},Ze=async e=>{let t={applicationId:e.appId,issuer:{url:e.issuerUrl}},i=await W(e);if(!i)return null;try{let n=await(0,h.clientCredentialsGrant)(i,{resource:i.clientMetadata().client_id}),r={...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",{...r}):console.info("Seeka auth: got app client token from server",{...r}),{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 r={...t,error:n};return e.logger?e.logger.error("Seeka auth: failed to get client access token from server",{...r}):console.error("Seeka auth: failed to get client access token from server",{...r,err:O.default.exceptions.getAllInfo(n)}),null}},Z=async(e,t)=>{let i={applicationId:t.appId,issuer:{url:t.issuerUrl}},n=await W(t);if(!n||!n)return null;try{let r=await(0,h.genericGrantRequest)(n,"app_install_token",{applicationInstallId:t.applicationInstallId,access_token:e,scope:"Seeka.API.Ingest"}),o={...i,token:{expires_at:r.expires_at,token_type:r.token_type,scope:r.scope}};return t.logger?t.logger.verbose("Seeka auth: got app access token from server",{...o}):console.info("Seeka auth: got app access token from server",{...o}),{token_type:r.token_type,access_token:r.access_token,expires_in:r.expires_in,id_token:r.id_token,refresh_token:r.refresh_token,scope:r.scope,authorization_details:r.authorization_details}}catch(r){let o={...i,error:r};return t.logger?t.logger.error("Seeka auth: failed to get app access token from server",{...o}):console.debug("Seeka auth: failed to get app access token from server",{...o}),null}},x=async e=>{let t=new y(e.appId,e.applicationInstallId),i={applicationId:e.appId,issuer:{url:e.issuerUrl}};return await t.getOrSet("auth:token:appinstall",async()=>{let n=await Ze(e);if(!n||!n.access_token)return null;let r=await Z(n.access_token,e);return r?{value:r,expiryAbsoluteMilliseconds:((r.expires_in>n.expires_in?n.expires_in:r.expires_in)||900*1e3)-60*1e3}: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})})};var Q="https://router.seeka.services",Ee="https://router.seeka.services/tel/otel",X="https://account.seeka.app",we=(e,t,i,n,r)=>{let o=new C;return o.appId=e.applicationId,o.appSecret=t,o.ingestUrl=process.env.SEEKA_INGEST_URL||Q,o.issuerUrl=process.env.SEEKA_ISSUER_URL||X,o.organisationId=e.organisationId,o.applicationInstallId=e.applicationInstallId,o.runtime={type:"sdk/js/apps-server",ver:oe.split("-")[0],client:i},o.logger=r,o.grantedPermissions=n,o.transformApiRequest=s=>Qe(o,s),o.transformApiResponse=async(s,d,a)=>Xe(o,s,d,a),o.hasAnyPermissions=s=>!o.grantedPermissions||o.grantedPermissions.length===0?!1:!s||s.length===0?!0:s.some(d=>o.grantedPermissions.includes(d)),o.hasAllPermissions=s=>!o.grantedPermissions||o.grantedPermissions.length===0?!1:!s||s.length===0?!0:s.every(d=>o.grantedPermissions.includes(d)),o.hasPermission=s=>!o.grantedPermissions||o.grantedPermissions.length===0?!1:s?o.grantedPermissions.includes(s):!0,o},Qe=async(e,t)=>{let i=await x(e);if(!i||!i.access_token)throw new Error("Could not get access token for API request");return t.headers={...t.headers,"X-OrgId":e.organisationId,Authorization:"Bearer "+i?.access_token},t},Xe=async(e,t,i,n)=>(i.data=JSON.stringify(i.data),n(i));var k={identity:{receiveFull:"Identity.Receive.Pii",send:"Identity.Send"},activity:{receiveAnon:"Activity.Receive.Anon",receiveFull:"Activity.Receive.Pii",send:"Activity.Send"}};var De=m(require("axios")),Me=m(require("http")),Ne=m(require("https"));var et=new Me.default.Agent({keepAlive:!0,scheduling:"fifo"}),tt=new Ne.default.Agent({keepAlive:!0,scheduling:"fifo"}),Re=e=>{let t=De.default.create({httpAgent:et,httpsAgent:tt});return t.interceptors.request.use(function(i){let n={url:i.url,method:i.method};return process.env.LOGGING_LEVEL==="silly"&&(n={...n,body:i.data,params:i.params}),e.logger?e.logger.debug(`Seeka API: making call to ${n.url}`,{...n}):console.debug(`Seeka API: making call to ${n.url}`,{...n}),i},function(i){let n={error:i};return e.logger?e.logger.http("Seeka API: failed to send request",{...n}):console.debug("Seeka API: failed to send request",{...n}),Promise.reject(i)}),t.interceptors.response.use(function(i){let n={url:i.request?.url||i.config.url,method:i.request?.method||i.config.method,response:{status:i.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}),i},function(i){let{code:n,status:r,message:o}=i,{headers:s,url:d,method:a}=i?.config,c={code:n,status:r,message:o,headers:s,url:d,method:a,content:i?.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(i)}),t},ee={getIdentityService:e=>new E(e,e.ingestUrl,Re(e)),getIngestService:e=>new w(e,e.ingestUrl,Re(e))};var I=class{constructor(t){this.config=t,this.ingestionService=ee.getIngestService(t),this.identityService=ee.getIdentityService(t)}config;maxBatchSize=50;refreshOrPrimeTokenCache=async()=>{await x(this.config)};ingestionService;identityService;checkPermission=(t,i)=>{if(!this.config.hasPermission(t))throw new Error("Cannot perform operation "+i+" on installationId "+this.config.applicationInstallId+" without permission "+t+". Currently granted permissions: "+(this.config.grantedPermissions?this.config.grantedPermissions.join(", "):"none"));return!0};mergeIdentity=async(t,i)=>{this.checkPermission(k.identity.send,"mergeIdentity");let n=R();return(await this.identityService.merge({id:t,src:{method:"",origin:i.origin,time:void 0,loc:i.loc,sess:n,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?n:void 0,runtime:this.config.runtime}})).result?.personId};mergeIdentityBatch=async(t,i)=>{this.checkPermission(k.identity.send,"mergeIdentityBatch");let n=R();if(t.length===0){this.config.logger?.debug("No identities in batch");return}let r={method:"",origin:i.origin,time:void 0,loc:i.loc,sess:n,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?n:void 0,runtime:this.config.runtime},o=U(t,this.maxBatchSize);if(o.length>1&&this.config.logger&&this.config.logger.debug(`Identity batch size ${t} is greater than ${this.maxBatchSize}, splitting into ${o.length} batches`),await this.trackActivityBatchRaw({data:o[0].map(s=>({id:{id:s||{},src:{...r}}}))}),o.length>1){let s=o.map((d,a)=>a===0?Promise.resolve():(this.config.logger?.verbose(`Processing identity batch ${a+1} of ${o.length}`),this.trackActivityBatchRaw({data:d.map(c=>({id:{id:c||{},src:{...r}}}))})));await Promise.all(s)}};trackActivityBatch=async(t,i)=>{this.checkPermission(k.activity.send,"trackActivityBatch");let n=R();if(t.length===0){this.config.logger?.debug("No activities in batch");return}let r={method:"",origin:i.origin,time:void 0,loc:i.loc,sess:n,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?n:void 0,runtime:this.config.runtime},o=U(t,this.maxBatchSize);if(o.length>1&&this.config.logger&&this.config.logger.debug(`Activity batch size ${t.length} is greater than ${this.maxBatchSize}, splitting into ${o.length} batches`),await this.trackActivityBatchRaw({data:o[0].map(s=>({ev:{id:s.profile||{},src:{...r},payload:s.activity}}))}),o.length>1){let s=o.map((d,a)=>a===0?Promise.resolve():(this.config.logger?.verbose(`Processing activity batch ${a+1} of ${o.length}`),this.trackActivityBatchRaw({data:d.map(c=>({ev:{id:c.profile||{},src:{...r},payload:c.activity}}))})));await Promise.all(s)}};trackActivityBatchRaw=async t=>{await this.ingestionService.batch(t)};trackActivityForProfileId=async(t,i,n)=>{this.checkPermission(k.activity.send,"trackActivityForProfileId"),await this.trackActivityForProfileIdBatch([t],i,n)};trackActivityForProfileIdBatch=async(t,i,n)=>{this.checkPermission(k.activity.send,"trackActivityForProfileIdBatch"),await this.trackActivityBatch(t.map(r=>({activity:r,profile:i?{seekaPId:i}:void 0})),n)};trackActivityForProfile=async(t,i,n)=>{this.checkPermission(k.activity.send,"trackActivityForProfile"),await this.trackActivityForProfileBatch([t],i,n)};trackActivityForProfileBatch=async(t,i,n)=>{this.checkPermission(k.activity.send,"trackActivityForProfileBatch"),await this.trackActivityBatch(t.map(r=>({activity:r,profile:i})),n)}};var nt={measureAdvertisingPerformance:7};var Ue=m(require("crypto")),B="x-seeka-signature-sha256",te=(e,t,i)=>{if(!t)return!1;let n=null;if(t.get&&typeof t.get=="function")n=t.get(B);else{let s=t[B];s&&(Array.isArray(s)&&s.length>0?n=s[0]:(typeof s=="string"||s instanceof String)&&(n=s))}if(!n)return!1;let o=it(e,i)===n;return o||console.warn("Invalid webhook signature"),o},it=(e,t)=>Ue.createHmac("sha256",e).update(t).digest("hex"),Oe=(e,t,i)=>{if(!te(e,t,i))throw new Error("Invalid webhook signature")};var b=m(require("crypto")),We="aes-192-cbc",_=(e,t)=>{if(!e)return"";if(!t)throw new Error("Secret is required to encrypt data");let i=b.default.scryptSync(t,"salt",24),n=b.default.randomBytes(16),r=b.default.createCipheriv(We,i,n);return[r.update(e,"utf8","hex")+r.final("hex"),Buffer.from(n).toString("hex")].join("|")},L=(e,t)=>{if(!e)return"";if(!t)throw new Error("Secret is required to decrypt data");let[i,n]=e.split("|");if(!n)throw new Error("IV not found");let r=b.default.scryptSync(t,"salt",24),o=b.default.createDecipheriv(We,r,Buffer.from(n,"hex"));return o.update(i,"hex","utf8")+o.final("utf8")};var J=class{constructor(t){this.appSecret=t}appSecret;encryptWithAppSecret=t=>{if(!this.appSecret)throw new Error("App secret is required to encrypt data");return _(t,this.appSecret)};decryptWithAppSecret=t=>{if(!this.appSecret)throw new Error("App secret is required to decrypt data");return L(t,this.appSecret)}};var V=class e{constructor(t,i){this.context=t,this.api=new I(t.config),this.appCache=new y(t.config.appId),this.appInstallCache=new y(t.config.appId,t.config.applicationInstallId),this.crypto=new J(t.config.appSecret),this.logger=i}context;appCache;appInstallCache;api;logger;crypto;static create=(t,i,n,r,o)=>new e({config:we({...i},t,{type:n.name,ver:n.version.split("-")[0]},r,o)},o)};var _e=m(require("winston"));var S=require("lodash-es"),f=e=>e==null||e===""||String(e).trim()===""?"":String(e);function Be(e){if(e==null||e==="")return 0;let t=e.toString().replace(/[^0-9.]/g,"");return Number.isNaN(Number(t))?0:Number(t)}function rt(e){if(e==null||e===0||e==="")return+"0.00";let t=Be(e);return Number(t.toFixed(3))}function ot(e){return e==null||e===""||Number.isNaN(Number(e.toString()))?0:Math.floor(Number(e))}function st(e){return JSON.parse(JSON.stringify(e))}function at(e){return/^-?\d+$/.test(e)}function ct(e){if(!(e==null||e.length===0))return ne(e)}function ne(e){return ne(e)}function dt(e,t){return(0,S.get)(e,t)}function lt(e,t,i){return(0,S.set)(e,t,i)}function gt(e,t){return(0,S.isEqual)(e,t)}function ut(e){return e?e.trim().toLowerCase():""}function pt(e){return e==null?"":(e=e.trim().replace(/-/gi,"").replace(/\(/gi,"").replace(/\)/gi,"").replace(/ /g,"").replace(/\+/g,""),e)}var ft=["order","subscriptionItemPurchase","oneTimeItemPurchase"],mt=(e,t,i)=>{if(!e.activity)return[];let n=e.activity,r=n.activityName==="custom"?n.activityNameCustom:n.activityName;if(!r)return[];let o=r.toLowerCase(),s=[];return t.forEach(d=>{if(!d)return;switch(d.type){case"activityTracked":{if(!d.activityNames||!d.activityNames.find(Le=>Le.toLowerCase()===o))return;i.verbose("Matched activity tracked filter",{filter:d,activityName:r});break}case"purchaseMade":{if(!n.activityName||!ft.includes(n.activityName))return;i.verbose("Matched purchase made activity filter",{filter:d,activityName:r});break}default:{i.warn("Unknown activity filter type",{filter:d});return}}let a=d.sourceFilter;if(!a)return;let c=e.source,P;try{P=c?.loc?new URL(c.loc).hostname.toLowerCase():null}catch(u){i.error("Failed to parse activity source URL",{ex:_e.default.exceptions.getAllInfo(u),activitySource:c}),P=null}let q=c?.pipeline?.convergePipelineIntegrationInstanceId?.toLowerCase(),ie=a.filters?a.filters.map(u=>{switch(u.type){case"wildcard":return i.verbose("Matched wildcard source filter",{sourceFilter:u}),!0;case"domain":return!P||!u.key?!1:P===u.key.toLowerCase()?(i.verbose("Matched domain source filter",{sourceFilter:u,activityHostname:P}),!0):!1;case"pipeline":return!q||!u.key?!1:q===u.key.toLowerCase()?(i.verbose("Matched pipeline source filter",{sourceFilter:u,sourceConvergePipelineIntegrationInstanceId:q}),!0):!1}}):[];switch(a.comparer){case"and":{ie.every(u=>u===!0)&&s.push(d);break}case"or":{ie.some(u=>u===!0)&&s.push(d);break}default:{i.warn("Unknown source filter comparer",{sourceFilters:a});break}}}),s},yt=(e,t=!1)=>{let i=e.commerce,n=i?.totalPrice||i?.products?.map(o=>(o.unitPrice||0)*(o.quantity||1)).reduce((o,s)=>o+s,0)||void 0,r=i?.currencyCode||null;if((!n||n<=0)&&(n=e?.lead?.predictedLtv||e?.lead?.predictedValue,n&&e?.lead?.currencyCode&&(r=e?.lead?.currencyCode||null)),(!n||n<=0)&&(n=e?.contentItem?.value,n&&e?.contentItem?.currencyCode&&(r=e?.contentItem?.currencyCode||null)),(!n||n<=0)&&(e?.contentItem?.items&&e?.contentItem?.items.length>0&&(n=e?.contentItem?.items.map(o=>o&&o.unitPrice?o.unitPrice*(o.quantity||1):0).reduce((o,s)=>o+s,0)),n&&(r=e?.contentItem?.currencyCode||e?.commerce?.currencyCode||null,!r))){let o=e?.contentItem?.items?.filter(s=>s.currencyCode)||[];o.length>0&&(r=o[0].currencyCode||null)}if((!n||n<=0)&&e?.commerce?.products&&e?.commerce?.products.length>0&&(n=e?.commerce?.products.map(o=>o&&o.unitPrice?o.unitPrice*(o.quantity||1):0).reduce((o,s)=>o+s,0),n&&(r=e?.commerce?.currencyCode||null,!r))){let o=e?.commerce?.products?.filter(s=>s.currencyCode)||[];o.length>0&&(r=o[0].currencyCode||null)}return(!n||n<=0)&&!r?null:{value:n===0&&t?null:n||null,currencyCode:r}};function ht(e,t,i){if(!e)return;let n=t.processing?.contentIdentificationBehavior,r=null;(i=="googleAnalytics"||i=="googleAds")&&(t.analytics?.libraries?.googleAnalytics?.merchant?.productItemIdBehavior!=null&&(n=t.analytics?.libraries?.googleAnalytics?.merchant?.productItemIdBehavior),r=f(t.analytics?.libraries?.googleAnalytics?.merchant?.productItemIdPrefix));let o;switch(n){case"sku":o=e?.sku;break;case"productId":o=e?.productIdentifier;break;case"variantId":o=e?.variantIdentifier;break;case"productIdAndVariantIdUnderscore":f(e.variantIdentifier)&&f(e.productIdentifier)?o=`${e.productIdentifier}_${e.variantIdentifier}`:f(e.variantIdentifier)?o=e.variantIdentifier:o=e.productIdentifier;break;case"variantIdOrProductId":f(e.variantIdentifier)?o=e.variantIdentifier:o=e.productIdentifier;break;default:o=f(e?.sku)||f(e?.variantIdentifier)||f(e?.productIdentifier);break}return r?`${r}${o}`:o}function kt(e,t){return f(e?.variantName)||f(e?.productName)}function vt(e){if(!e||e.trim().length===0)return!1;let t=e.split(".").filter(i=>i.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 At={defaultIssuerUrl:X,defaultTelemetryUrl:Ee,defaultIngestUrl:Q};0&&(module.exports={ActivityPipelineActivityFilterSourceItemType,ActivityPipelineActivityFilterType,AnalyticsLibrary,ApiException,ApiServiceProxyBase,AppPermissionKeys,ClickAttributionSourcePlatform,ConditionComparer,ConditionOperator,ConsentMappingMatchType,ContentIdentificationBehavior,ConvergePipelineLoggableActivityType,ConvergeVendorDestinationPublishStrategy,CrossDomainTrackingUtmBehavior,ECommerceContentType,ECommerceFinancialStatus,ECommerceFulfillmentStatus,ECommercePlatform,IabPrivacyConsentPurposeId,IabPrivacyConsentPurposeIdMap,IdentityServiceProxy,IngestServiceProxy,PrivacyConsentType,PrivacyDataControlMode,RegionalConsentGrantOption,ResponseResultType,SdkLogEventLevel,SeekaApiHelper,SeekaAppCacheManager,SeekaAppConfig,SeekaAppHelper,SeekaWebhookCallType,TrackingActivityNames,TrackingEventSourceOriginType,chunk,cloneDeep,dateToUtcDateTimeReferenceString,decryptText,emailAddress,encryptText,generateNewSessionId,getActivityName,getActivityValue,getContentIdFromProduct,getContentNameFromProduct,getIssuer,getNestedProperty,getNewAppInstallToken,getNewOrCachedAppInstallToken,getRandomNumberString,isDeepEqual,isNumber,isValidSeekaProfileId,last,lastOrDefault,matchActivityPipelineFilters,md5Hash,parseFloat,parseInt,parseMoney,parseStr,phoneNumberToE164,separatePersonFullName,setNestedProperty,throwOnInvalidWebhookSignature,urls,validateWebhookSignature,webhookSignatureHeaderName});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
var G="3.8.1";import H from"axios";var b=class{appId;appSecret;ingestUrl;issuerUrl;organisationId;applicationInstallId;runtime;logger;grantedPermissions;transformApiRequest;transformApiResponse;hasAnyPermissions;hasAllPermissions;hasPermission},S=class{config;constructor(t){this.config=t}transformOptions=async t=>await this.config.transformApiRequest(t);transformResult=async(t,i,n)=>await this.config.transformApiResponse(t,i,n)},P=class extends S{instance;baseUrl;jsonParseReviver=void 0;constructor(t,i,n){super(t),this.instance=n||H.create(),this.baseUrl=i??"https://api-localdev-env0-seeka.au.ngrok.io"}merge(t,i){let n=this.baseUrl+"/api/identity";n=n.replace(/[?&]$/,"");let r={data:JSON.stringify(t),method:"POST",url:n,headers:{"Content-Type":"application/json",Accept:"application/json"},cancelToken:i};return this.transformOptions(r).then(s=>this.instance.request(s)).catch(s=>{if(Z(s)&&s.response)return s.response;throw s}).then(s=>this.transformResult(n,s,d=>this.processMerge(d)))}processMerge(t){let i=t.status,n={};if(t.headers&&typeof t.headers=="object")for(let o in t.headers)t.headers.hasOwnProperty(o)&&(n[o]=t.headers[o]);if(i===200){let o=t.data,r=null;return r=JSON.parse(o),Promise.resolve(r)}else if(i===400){let o=t.data,r=null;return r=JSON.parse(o),h("A server side error occurred.",i,o,n,r)}else if(i===401){let o=t.data,r=null;return r=JSON.parse(o),h("A server side error occurred.",i,o,n,r)}else if(i===422){let o=t.data,r=null;return r=JSON.parse(o),h("A server side error occurred.",i,o,n,r)}else if(i!==200&&i!==204){let o=t.data;return h("An unexpected server error occurred.",i,o,n)}return Promise.resolve(null)}},C=class extends S{instance;baseUrl;jsonParseReviver=void 0;constructor(t,i,n){super(t),this.instance=n||H.create(),this.baseUrl=i??"https://api-localdev-env0-seeka.au.ngrok.io"}batch(t,i){let n=this.baseUrl+"/api/ingest";n=n.replace(/[?&]$/,"");let r={data:JSON.stringify(t),method:"POST",url:n,headers:{"Content-Type":"application/json"},cancelToken:i};return this.transformOptions(r).then(s=>this.instance.request(s)).catch(s=>{if(Z(s)&&s.response)return s.response;throw s}).then(s=>this.transformResult(n,s,d=>this.processBatch(d)))}processBatch(t){let i=t.status,n={};if(t.headers&&typeof t.headers=="object")for(let o in t.headers)t.headers.hasOwnProperty(o)&&(n[o]=t.headers[o]);if(i===202){let o=t.data;return Promise.resolve(null)}else if(i===400){let o=t.data,r=null;return r=JSON.parse(o),h("A server side error occurred.",i,o,n,r)}else if(i===401){let o=t.data,r=null;return r=JSON.parse(o),h("A server side error occurred.",i,o,n,r)}else if(i===422){let o=t.data,r=null;return r=JSON.parse(o),h("A server side error occurred.",i,o,n,r)}else if(i!==200&&i!==204){let o=t.data;return h("An unexpected server error occurred.",i,o,n)}return Promise.resolve(null)}},ge=(n=>(n.Undefined="undefined",n.Success="success",n.Failed="failed",n))(ge||{}),ue=(s=>(s.Unknown="unknown",s.Informed="informed",s.Implied="implied",s.Explicit="explicit",s.Active="active",s.Passive="passive",s))(ue||{}),pe=(c=>(c.Browser="browser",c.Server="server",c.Mobile="mobile",c.Desktop="desktop",c.PhysicalStore="physicalStore",c.Email="email",c.Phone="phone",c.Chat="chat",c.Automatic="automatic",c))(pe||{}),v=(l=>(l.Undefined="undefined",l.PageViewOrganic="pageViewOrganic",l.PageViewUtmAttributed="pageViewUtmAttributed",l.AddPaymentMethod="addPaymentMethod",l.AddToWishlist="addToWishlist",l.ContactMessage="contactMessage",l.Custom="custom",l.SyncCart="syncCart",l.Order="order",l.InitiateCheckout="initiateCheckout",l.AddToCart="addToCart",l.RemoveFromCart="removeFromCart",l.OneTimeItemPurchase="oneTimeItemPurchase",l.SubscriptionItemPurchase="subscriptionItemPurchase",l.ViewProduct="viewProduct",l.ViewPage="viewPage",l.ApplyPromotionalCode="applyPromotionalCode",l.KeywordSearch="keywordSearch",l.UserLoginSignup="userLoginSignup",l.UserLogin="userLogin",l.NewsletterSignup="newsletterSignup",l.Lead="lead",l.ChangeProductAttribute="changeProductAttribute",l.FilterItemsByAttribute="filterItemsByAttribute",l.Schedule="schedule",l.ViewContentItem="viewContentItem",l.StartTrial="startTrial",l))(v||{}),fe=(o=>(o.Undefined="undefined",o.SingleProduct="singleProduct",o.SingleVariant="singleVariant",o.Collection="collection",o))(fe||{}),me=(a=>(a.None="none",a.BigCommerce="bigCommerce",a.Shopify="shopify",a.OrderGroove="orderGroove",a.Magento="magento",a.Generic="generic",a.WooCommerce="wooCommerce",a.Demandware="demandware",a))(me||{}),ye=(s=>(s.Undefined="undefined",s.Fulfilled="fulfilled",s.NoneFulfilled="noneFulfilled",s.PartiallyFulfilled="partiallyFulfilled",s.RestockedOrCancelled="restockedOrCancelled",s.Pending="pending",s))(ye||{}),he=(a=>(a.Undefined="undefined",a.Pending="pending",a.Authorized="authorized",a.PartiallyPaid="partiallyPaid",a.Paid="paid",a.PartiallyRefunded="partiallyRefunded",a.Refunded="refunded",a.Voided="voided",a))(he||{}),ke=(c=>(c.Generic="generic",c.ActivityIngress="activityIngress",c.ActivityEgress="activityEgress",c.UserProfile="userProfile",c.SdkLog="sdkLog",c.Detections="detections",c.ActivityEgressFilter="activityEgressFilter",c.Diagnosis="diagnosis",c.PipelineIntegrationOutput="pipelineIntegrationOutput",c))(ke||{}),ve=(o=>(o.Information="information",o.Warning="warning",o.Error="error",o.Verbose="verbose",o))(ve||{}),Ae=(a=>(a.None="none",a.Probe="probe",a.AppInstalled="appInstalled",a.IdentityChanged="identityChanged",a.ActivityAccepted="activityAccepted",a.AppInstallSettingsUpdated="appInstallSettingsUpdated",a.AppUninstalled="appUninstalled",a.BrowserSdkPlugin="browserSdkPlugin",a))(Ae||{}),xe=(s=>(s.Unknown="unknown",s.Google="google",s.Meta="meta",s.Snapchat="snapchat",s.Pinterest="pinterest",s.TikTok="tikTok",s))(xe||{}),j=(n=>(n.Undefined="undefined",n.PurchaseMade="purchaseMade",n.ActivityTracked="activityTracked",n))(j||{}),$=(n=>(n.Undefined="undefined",n.And="and",n.Or="or",n))($||{}),F=(s=>(s.Undefined="undefined",s.Domain="domain",s.Pipeline="pipeline",s.Wildcard="wildcard",s.Url="url",s.PagePath="pagePath",s))(F||{}),Ie=(g=>(g.Undefined="undefined",g.Equals="equals",g.NotEquals="notEquals",g.Contains="contains",g.NotContains="notContains",g.StartsWith="startsWith",g.EndsWith="endsWith",g.IsNull="isNull",g.NotNull="notNull",g.IsTrue="isTrue",g.IsFalse="isFalse",g.GreaterThanOrEquals="greaterThanOrEquals",g.LessThanOrEquals="lessThanOrEquals",g.GreaterThan="greaterThan",g.LessThan="lessThan",g.Before="before",g.After="after",g.Between="between",g.In="in",g.NotIn="notIn",g.Regex="regEx",g.Any="any",g))(Ie||{}),z=(p=>(p.Undefined="undefined",p.Seeka="seeka",p.DynamicYield="dynamicYield",p.Segment="segment",p.FacebookPixel="facebookPixel",p.GoogleAnalytics="googleAnalytics",p.Braze="braze",p.SnapchatPixel="snapchatPixel",p.Pinterest="pinterest",p.TikTokPixel="tikTokPixel",p.GoogleAds="googleAds",p))(z||{}),K=(s=>(s.Default="default",s.Sku="sku",s.ProductId="productId",s.VariantId="variantId",s.ProductIdAndVariantIdUnderscore="productIdAndVariantIdUnderscore",s.VariantIdOrProductId="variantIdOrProductId",s))(K||{}),be=(o=>(o.DeliverAllTraitsAndDeliverAllEvents="deliverAllTraitsAndDeliverAllEvents",o.DeliverAllTraitsAndDeliverEventsOnlyIfMaxWeightedTraitsPresent="deliverAllTraitsAndDeliverEventsOnlyIfMaxWeightedTraitsPresent",o.DeliverMaxWeightedTraitsOnlyAndDeliverAllEvents="deliverMaxWeightedTraitsOnlyAndDeliverAllEvents",o.DeliverMaxWeightedTraitsOnlyAndDeliverEventsOnlyIfMaxWeightedTraitsPresent="deliverMaxWeightedTraitsOnlyAndDeliverEventsOnlyIfMaxWeightedTraitsPresent",o))(be||{}),Se=(n=>(n.None="none",n.SessionPassthrough="sessionPassthrough",n.UrlPassthrough="urlPassthrough",n))(Se||{}),Pe=(n=>(n.Unset="unset",n.Granted="granted",n.Denied="denied",n))(Pe||{}),Y=(i=>(i.Undefined="undefined",i.MeasureAdvertisingPerformance="measureAdvertisingPerformance",i))(Y||{}),Ce=(n=>(n.Undefined="undefined",n.AllOf="allOf",n.AnyOf="anyOf",n))(Ce||{}),Te=(n=>(n.Disabled="disabled",n.Explicit="explicit",n.Implicit="implicit",n))(Te||{}),R=class extends Error{message;status;response;headers;result;constructor(t,i,n,o,r){super(),this.message=t,this.status=i,this.response=n,this.headers=o,this.result=r}isApiException=!0;static isApiException(t){return t.isApiException===!0}};function h(e,t,i,n,o){throw o??new R(e,t,i,n,null)}function Z(e){return e&&e.isAxiosError===!0}import{Configuration as Re,genericGrantRequest as De,clientCredentialsGrant as Me,discovery as Ne,None as Ue}from"openid-client";import N from"winston";import D from"memory-cache";var Q="seeka:sdk",m=class{constructor(t,i){this.appId=t,this.appInstallationId=i}appId;appInstallationId;set=async(t,i,n)=>{let o=this.getKey(t);D.put(o,JSON.stringify(i),n)};getOrSet=async(t,i,n)=>{let o=this.getKey(t),r=D.get(o);if(r){let d=JSON.parse(r);return n&&await n(d),d}let s=await i();return s?(D.put(o,JSON.stringify(s.value),s.expiryAbsoluteMilliseconds),s.value):null};getKey=t=>this.appInstallationId?`${Q}:${this.appId}:${this.appInstallationId}:${t}`:`${Q}:${this.appId}:${t}`};import*as X from"crypto";var T=()=>{let e=we(new Date),t=Ee();return`${e}.${t}`},ot=e=>{let t=Object.keys(v),i=e.toLowerCase(),n=t.find(o=>o.toLowerCase()===i);return n?v[n]:"custom"},Ee=()=>Math.floor(Math.random()*(9999999999-1e9)+1e9).toString(),we=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 n=e.getUTCHours().toString();n.length<2&&(n="0"+n);let o=e.getUTCMinutes().toString();o.length<2&&(o="0"+o);let r=e.getUTCSeconds().toString();return r.length<2&&(r="0"+r),`${e.getUTCFullYear()}${t}${i}.${n}${o}${r}`},ee=e=>X.createHash("md5").update(e).digest("hex"),st=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(" ")}},M=(e,t)=>e.reduce((i,n,o)=>{let r=Math.floor(o/t);return i[r]||(i[r]=[]),i[r].push(n),i},[]);var U=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 i=new m(e.appId,e.applicationInstallId),n=ee(e.issuerUrl+"_"+e.appId),o=await i.getOrSet(n,async()=>{try{let r=await Oe(e);return!r||!r.meta||!r.raw?null:(e.logger?e.logger.verbose("Seeka auth: got issuer from remote",{...t}):console.debug("Seeka auth: got issuer from remote",{...t}),{value:r.meta,expiryAbsoluteMilliseconds:1e3*60*60})}catch(r){return e.logger?e.logger.error("Seeka auth: failed getting issuer",{...t,ex:N.exceptions.getAllInfo(r)}):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 o===null?null:new Re(o.serverMetadata,o.clientId,e.appSecret)},Oe=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 i=e.appId.replace(/-/g,""),n=await Ne(new URL(e.issuerUrl),i,void 0,Ue(),{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:i},raw:n}}catch(i){return e.logger?e.logger.error("Seeka auth: failed discovering issuer from remote",{...t,ex:N.exceptions.getAllInfo(i)}):console.error("Seeka auth: failed discovering issuer from remote",{...t,err:i}),null}},We=async e=>{let t={applicationId:e.appId,issuer:{url:e.issuerUrl}},i=await U(e);if(!i)return null;try{let n=await Me(i,{resource:i.clientMetadata().client_id}),o={...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",{...o}):console.info("Seeka auth: got app client token from server",{...o}),{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 o={...t,error:n};return e.logger?e.logger.error("Seeka auth: failed to get client access token from server",{...o}):console.error("Seeka auth: failed to get client access token from server",{...o,err:N.exceptions.getAllInfo(n)}),null}},te=async(e,t)=>{let i={applicationId:t.appId,issuer:{url:t.issuerUrl}},n=await U(t);if(!n||!n)return null;try{let o=await De(n,"app_install_token",{applicationInstallId:t.applicationInstallId,access_token:e,scope:"Seeka.API.Ingest"}),r={...i,token:{expires_at:o.expires_at,token_type:o.token_type,scope:o.scope}};return t.logger?t.logger.verbose("Seeka auth: got app access token from server",{...r}):console.info("Seeka auth: got app access token from server",{...r}),{token_type:o.token_type,access_token:o.access_token,expires_in:o.expires_in,id_token:o.id_token,refresh_token:o.refresh_token,scope:o.scope,authorization_details:o.authorization_details}}catch(o){let r={...i,error:o};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}},A=async e=>{let t=new m(e.appId,e.applicationInstallId),i={applicationId:e.appId,issuer:{url:e.issuerUrl}};return await t.getOrSet("auth:token:appinstall",async()=>{let n=await We(e);if(!n||!n.access_token)return null;let o=await te(n.access_token,e);return o?{value:o,expiryAbsoluteMilliseconds:((o.expires_in>n.expires_in?n.expires_in:o.expires_in)||900*1e3)-60*1e3}: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})})};var O="https://router.seeka.services",ne="https://router.seeka.services/tel/otel",W="https://account.seeka.app",ie=(e,t,i,n,o)=>{let r=new b;return r.appId=e.applicationId,r.appSecret=t,r.ingestUrl=process.env.SEEKA_INGEST_URL||O,r.issuerUrl=process.env.SEEKA_ISSUER_URL||W,r.organisationId=e.organisationId,r.applicationInstallId=e.applicationInstallId,r.runtime={type:"sdk/js/apps-server",ver:G.split("-")[0],client:i},r.logger=o,r.grantedPermissions=n,r.transformApiRequest=s=>Be(r,s),r.transformApiResponse=async(s,d,a)=>_e(r,s,d,a),r.hasAnyPermissions=s=>!r.grantedPermissions||r.grantedPermissions.length===0?!1:!s||s.length===0?!0:s.some(d=>r.grantedPermissions.includes(d)),r.hasAllPermissions=s=>!r.grantedPermissions||r.grantedPermissions.length===0?!1:!s||s.length===0?!0:s.every(d=>r.grantedPermissions.includes(d)),r.hasPermission=s=>!r.grantedPermissions||r.grantedPermissions.length===0?!1:s?r.grantedPermissions.includes(s):!0,r},Be=async(e,t)=>{let i=await A(e);if(!i||!i.access_token)throw new Error("Could not get access token for API request");return t.headers={...t.headers,"X-OrgId":e.organisationId,Authorization:"Bearer "+i?.access_token},t},_e=async(e,t,i,n)=>(i.data=JSON.stringify(i.data),n(i));var y={identity:{receiveFull:"Identity.Receive.Pii",send:"Identity.Send"},activity:{receiveAnon:"Activity.Receive.Anon",receiveFull:"Activity.Receive.Pii",send:"Activity.Send"}};import Le from"axios";import Je from"http";import Ve from"https";var qe=new Je.Agent({keepAlive:!0,scheduling:"fifo"}),Ge=new Ve.Agent({keepAlive:!0,scheduling:"fifo"}),re=e=>{let t=Le.create({httpAgent:qe,httpsAgent:Ge});return t.interceptors.request.use(function(i){let n={url:i.url,method:i.method};return process.env.LOGGING_LEVEL==="silly"&&(n={...n,body:i.data,params:i.params}),e.logger?e.logger.debug(`Seeka API: making call to ${n.url}`,{...n}):console.debug(`Seeka API: making call to ${n.url}`,{...n}),i},function(i){let n={error:i};return e.logger?e.logger.http("Seeka API: failed to send request",{...n}):console.debug("Seeka API: failed to send request",{...n}),Promise.reject(i)}),t.interceptors.response.use(function(i){let n={url:i.request?.url||i.config.url,method:i.request?.method||i.config.method,response:{status:i.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}),i},function(i){let{code:n,status:o,message:r}=i,{headers:s,url:d,method:a}=i?.config,c={code:n,status:o,message:r,headers:s,url:d,method:a,content:i?.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(i)}),t},B={getIdentityService:e=>new P(e,e.ingestUrl,re(e)),getIngestService:e=>new C(e,e.ingestUrl,re(e))};var x=class{constructor(t){this.config=t,this.ingestionService=B.getIngestService(t),this.identityService=B.getIdentityService(t)}config;maxBatchSize=50;refreshOrPrimeTokenCache=async()=>{await A(this.config)};ingestionService;identityService;checkPermission=(t,i)=>{if(!this.config.hasPermission(t))throw new Error("Cannot perform operation "+i+" on installationId "+this.config.applicationInstallId+" without permission "+t+". Currently granted permissions: "+(this.config.grantedPermissions?this.config.grantedPermissions.join(", "):"none"));return!0};mergeIdentity=async(t,i)=>{this.checkPermission(y.identity.send,"mergeIdentity");let n=T();return(await this.identityService.merge({id:t,src:{method:"",origin:i.origin,time:void 0,loc:i.loc,sess:n,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?n:void 0,runtime:this.config.runtime}})).result?.personId};mergeIdentityBatch=async(t,i)=>{this.checkPermission(y.identity.send,"mergeIdentityBatch");let n=T();if(t.length===0){this.config.logger?.debug("No identities in batch");return}let o={method:"",origin:i.origin,time:void 0,loc:i.loc,sess:n,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?n:void 0,runtime:this.config.runtime},r=M(t,this.maxBatchSize);if(r.length>1&&this.config.logger&&this.config.logger.debug(`Identity batch size ${t} is greater than ${this.maxBatchSize}, splitting into ${r.length} batches`),await this.trackActivityBatchRaw({data:r[0].map(s=>({id:{id:s||{},src:{...o}}}))}),r.length>1){let s=r.map((d,a)=>a===0?Promise.resolve():(this.config.logger?.verbose(`Processing identity batch ${a+1} of ${r.length}`),this.trackActivityBatchRaw({data:d.map(c=>({id:{id:c||{},src:{...o}}}))})));await Promise.all(s)}};trackActivityBatch=async(t,i)=>{this.checkPermission(y.activity.send,"trackActivityBatch");let n=T();if(t.length===0){this.config.logger?.debug("No activities in batch");return}let o={method:"",origin:i.origin,time:void 0,loc:i.loc,sess:n,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?n:void 0,runtime:this.config.runtime},r=M(t,this.maxBatchSize);if(r.length>1&&this.config.logger&&this.config.logger.debug(`Activity batch size ${t.length} is greater than ${this.maxBatchSize}, splitting into ${r.length} batches`),await this.trackActivityBatchRaw({data:r[0].map(s=>({ev:{id:s.profile||{},src:{...o},payload:s.activity}}))}),r.length>1){let s=r.map((d,a)=>a===0?Promise.resolve():(this.config.logger?.verbose(`Processing activity batch ${a+1} of ${r.length}`),this.trackActivityBatchRaw({data:d.map(c=>({ev:{id:c.profile||{},src:{...o},payload:c.activity}}))})));await Promise.all(s)}};trackActivityBatchRaw=async t=>{await this.ingestionService.batch(t)};trackActivityForProfileId=async(t,i,n)=>{this.checkPermission(y.activity.send,"trackActivityForProfileId"),await this.trackActivityForProfileIdBatch([t],i,n)};trackActivityForProfileIdBatch=async(t,i,n)=>{this.checkPermission(y.activity.send,"trackActivityForProfileIdBatch"),await this.trackActivityBatch(t.map(o=>({activity:o,profile:i?{seekaPId:i}:void 0})),n)};trackActivityForProfile=async(t,i,n)=>{this.checkPermission(y.activity.send,"trackActivityForProfile"),await this.trackActivityForProfileBatch([t],i,n)};trackActivityForProfileBatch=async(t,i,n)=>{this.checkPermission(y.activity.send,"trackActivityForProfileBatch"),await this.trackActivityBatch(t.map(o=>({activity:o,profile:i})),n)}};var Ot={measureAdvertisingPerformance:7};import*as oe from"crypto";var _="x-seeka-signature-sha256",se=(e,t,i)=>{if(!t)return!1;let n=null;if(t.get&&typeof t.get=="function")n=t.get(_);else{let s=t[_];s&&(Array.isArray(s)&&s.length>0?n=s[0]:(typeof s=="string"||s instanceof String)&&(n=s))}if(!n)return!1;let r=He(e,i)===n;return r||console.warn("Invalid webhook signature"),r},He=(e,t)=>oe.createHmac("sha256",e).update(t).digest("hex"),je=(e,t,i)=>{if(!se(e,t,i))throw new Error("Invalid webhook signature")};import I from"crypto";var ae="aes-192-cbc",L=(e,t)=>{if(!e)return"";if(!t)throw new Error("Secret is required to encrypt data");let i=I.scryptSync(t,"salt",24),n=I.randomBytes(16),o=I.createCipheriv(ae,i,n);return[o.update(e,"utf8","hex")+o.final("hex"),Buffer.from(n).toString("hex")].join("|")},J=(e,t)=>{if(!e)return"";if(!t)throw new Error("Secret is required to decrypt data");let[i,n]=e.split("|");if(!n)throw new Error("IV not found");let o=I.scryptSync(t,"salt",24),r=I.createDecipheriv(ae,o,Buffer.from(n,"hex"));return r.update(i,"hex","utf8")+r.final("utf8")};var E=class{constructor(t){this.appSecret=t}appSecret;encryptWithAppSecret=t=>{if(!this.appSecret)throw new Error("App secret is required to encrypt data");return L(t,this.appSecret)};decryptWithAppSecret=t=>{if(!this.appSecret)throw new Error("App secret is required to decrypt data");return J(t,this.appSecret)}};var V=class e{constructor(t,i){this.context=t,this.api=new x(t.config),this.appCache=new m(t.config.appId),this.appInstallCache=new m(t.config.appId,t.config.applicationInstallId),this.crypto=new E(t.config.appSecret),this.logger=i}context;appCache;appInstallCache;api;logger;crypto;static create=(t,i,n,o,r)=>new e({config:ie({...i},t,{type:n.name,ver:n.version.split("-")[0]},o,r)},r)};import Ye from"winston";import{get as $e,isEqual as Fe,set as ze}from"lodash-es";var f=e=>e==null||e===""||String(e).trim()===""?"":String(e);function Ke(e){if(e==null||e==="")return 0;let t=e.toString().replace(/[^0-9.]/g,"");return Number.isNaN(Number(t))?0:Number(t)}function zt(e){if(e==null||e===0||e==="")return+"0.00";let t=Ke(e);return Number(t.toFixed(3))}function Kt(e){return e==null||e===""||Number.isNaN(Number(e.toString()))?0:Math.floor(Number(e))}function Yt(e){return JSON.parse(JSON.stringify(e))}function Zt(e){return/^-?\d+$/.test(e)}function Qt(e){if(!(e==null||e.length===0))return ce(e)}function ce(e){return ce(e)}function Xt(e,t){return $e(e,t)}function en(e,t,i){return ze(e,t,i)}function tn(e,t){return Fe(e,t)}function nn(e){return e?e.trim().toLowerCase():""}function rn(e){return e==null?"":(e=e.trim().replace(/-/gi,"").replace(/\(/gi,"").replace(/\)/gi,"").replace(/ /g,"").replace(/\+/g,""),e)}var Ze=["order","subscriptionItemPurchase","oneTimeItemPurchase"],mn=(e,t,i)=>{if(!e.activity)return[];let n=e.activity,o=n.activityName==="custom"?n.activityNameCustom:n.activityName;if(!o)return[];let r=o.toLowerCase(),s=[];return t.forEach(d=>{if(!d)return;switch(d.type){case"activityTracked":{if(!d.activityNames||!d.activityNames.find(de=>de.toLowerCase()===r))return;i.verbose("Matched activity tracked filter",{filter:d,activityName:o});break}case"purchaseMade":{if(!n.activityName||!Ze.includes(n.activityName))return;i.verbose("Matched purchase made activity filter",{filter:d,activityName:o});break}default:{i.warn("Unknown activity filter type",{filter:d});return}}let a=d.sourceFilter;if(!a)return;let c=e.source,k;try{k=c?.loc?new URL(c.loc).hostname.toLowerCase():null}catch(u){i.error("Failed to parse activity source URL",{ex:Ye.exceptions.getAllInfo(u),activitySource:c}),k=null}let w=c?.pipeline?.convergePipelineIntegrationInstanceId?.toLowerCase(),q=a.filters?a.filters.map(u=>{switch(u.type){case"wildcard":return i.verbose("Matched wildcard source filter",{sourceFilter:u}),!0;case"domain":return!k||!u.key?!1:k===u.key.toLowerCase()?(i.verbose("Matched domain source filter",{sourceFilter:u,activityHostname:k}),!0):!1;case"pipeline":return!w||!u.key?!1:w===u.key.toLowerCase()?(i.verbose("Matched pipeline source filter",{sourceFilter:u,sourceConvergePipelineIntegrationInstanceId:w}),!0):!1}}):[];switch(a.comparer){case"and":{q.every(u=>u===!0)&&s.push(d);break}case"or":{q.some(u=>u===!0)&&s.push(d);break}default:{i.warn("Unknown source filter comparer",{sourceFilters:a});break}}}),s},yn=(e,t=!1)=>{let i=e.commerce,n=i?.totalPrice||i?.products?.map(r=>(r.unitPrice||0)*(r.quantity||1)).reduce((r,s)=>r+s,0)||void 0,o=i?.currencyCode||null;if((!n||n<=0)&&(n=e?.lead?.predictedLtv||e?.lead?.predictedValue,n&&e?.lead?.currencyCode&&(o=e?.lead?.currencyCode||null)),(!n||n<=0)&&(n=e?.contentItem?.value,n&&e?.contentItem?.currencyCode&&(o=e?.contentItem?.currencyCode||null)),(!n||n<=0)&&(e?.contentItem?.items&&e?.contentItem?.items.length>0&&(n=e?.contentItem?.items.map(r=>r&&r.unitPrice?r.unitPrice*(r.quantity||1):0).reduce((r,s)=>r+s,0)),n&&(o=e?.contentItem?.currencyCode||e?.commerce?.currencyCode||null,!o))){let r=e?.contentItem?.items?.filter(s=>s.currencyCode)||[];r.length>0&&(o=r[0].currencyCode||null)}if((!n||n<=0)&&e?.commerce?.products&&e?.commerce?.products.length>0&&(n=e?.commerce?.products.map(r=>r&&r.unitPrice?r.unitPrice*(r.quantity||1):0).reduce((r,s)=>r+s,0),n&&(o=e?.commerce?.currencyCode||null,!o))){let r=e?.commerce?.products?.filter(s=>s.currencyCode)||[];r.length>0&&(o=r[0].currencyCode||null)}return(!n||n<=0)&&!o?null:{value:n===0&&t?null:n||null,currencyCode:o}};function hn(e,t,i){if(!e)return;let n=t.processing?.contentIdentificationBehavior,o=null;(i=="googleAnalytics"||i=="googleAds")&&(t.analytics?.libraries?.googleAnalytics?.merchant?.productItemIdBehavior!=null&&(n=t.analytics?.libraries?.googleAnalytics?.merchant?.productItemIdBehavior),o=f(t.analytics?.libraries?.googleAnalytics?.merchant?.productItemIdPrefix));let r;switch(n){case"sku":r=e?.sku;break;case"productId":r=e?.productIdentifier;break;case"variantId":r=e?.variantIdentifier;break;case"productIdAndVariantIdUnderscore":f(e.variantIdentifier)&&f(e.productIdentifier)?r=`${e.productIdentifier}_${e.variantIdentifier}`:f(e.variantIdentifier)?r=e.variantIdentifier:r=e.productIdentifier;break;case"variantIdOrProductId":f(e.variantIdentifier)?r=e.variantIdentifier:r=e.productIdentifier;break;default:r=f(e?.sku)||f(e?.variantIdentifier)||f(e?.productIdentifier);break}return o?`${o}${r}`:r}function kn(e,t){return f(e?.variantName)||f(e?.productName)}function An(e){if(!e||e.trim().length===0)return!1;let t=e.split(".").filter(i=>i.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 bn={defaultIssuerUrl:W,defaultTelemetryUrl:ne,defaultIngestUrl:O};export{F as ActivityPipelineActivityFilterSourceItemType,j as ActivityPipelineActivityFilterType,z as AnalyticsLibrary,R as ApiException,S as ApiServiceProxyBase,y as AppPermissionKeys,xe as ClickAttributionSourcePlatform,$ as ConditionComparer,Ie as ConditionOperator,Ce as ConsentMappingMatchType,K as ContentIdentificationBehavior,ke as ConvergePipelineLoggableActivityType,be as ConvergeVendorDestinationPublishStrategy,Se as CrossDomainTrackingUtmBehavior,fe as ECommerceContentType,he as ECommerceFinancialStatus,ye as ECommerceFulfillmentStatus,me as ECommercePlatform,Y as IabPrivacyConsentPurposeId,Ot as IabPrivacyConsentPurposeIdMap,P as IdentityServiceProxy,C as IngestServiceProxy,ue as PrivacyConsentType,Te as PrivacyDataControlMode,Pe as RegionalConsentGrantOption,ge as ResponseResultType,ve as SdkLogEventLevel,x as SeekaApiHelper,m as SeekaAppCacheManager,b as SeekaAppConfig,V as SeekaAppHelper,Ae as SeekaWebhookCallType,v as TrackingActivityNames,pe as TrackingEventSourceOriginType,M as chunk,Yt as cloneDeep,we as dateToUtcDateTimeReferenceString,J as decryptText,nn as emailAddress,L as encryptText,T as generateNewSessionId,ot as getActivityName,yn as getActivityValue,hn as getContentIdFromProduct,kn as getContentNameFromProduct,U as getIssuer,Xt as getNestedProperty,te as getNewAppInstallToken,A as getNewOrCachedAppInstallToken,Ee as getRandomNumberString,tn as isDeepEqual,Zt as isNumber,An as isValidSeekaProfileId,ce as last,Qt as lastOrDefault,mn as matchActivityPipelineFilters,ee as md5Hash,Ke as parseFloat,Kt as parseInt,zt as parseMoney,f as parseStr,rn as phoneNumberToE164,st as separatePersonFullName,en as setNestedProperty,je as throwOnInvalidWebhookSignature,bn as urls,se as validateWebhookSignature,_ as webhookSignatureHeaderName};
|
|
1
|
+
var G="3.8.6";import H from"axios";var b=class{appId;appSecret;ingestUrl;issuerUrl;organisationId;applicationInstallId;runtime;logger;grantedPermissions;transformApiRequest;transformApiResponse;hasAnyPermissions;hasAllPermissions;hasPermission},S=class{config;constructor(t){this.config=t}transformOptions=async t=>await this.config.transformApiRequest(t);transformResult=async(t,i,n)=>await this.config.transformApiResponse(t,i,n)},P=class extends S{instance;baseUrl;jsonParseReviver=void 0;constructor(t,i,n){super(t),this.instance=n||H.create(),this.baseUrl=i??"https://api-localdev-env0-seeka.au.ngrok.io"}merge(t,i){let n=this.baseUrl+"/api/identity";n=n.replace(/[?&]$/,"");let r={data:JSON.stringify(t),method:"POST",url:n,headers:{"Content-Type":"application/json",Accept:"application/json"},cancelToken:i};return this.transformOptions(r).then(s=>this.instance.request(s)).catch(s=>{if(Z(s)&&s.response)return s.response;throw s}).then(s=>this.transformResult(n,s,d=>this.processMerge(d)))}processMerge(t){let i=t.status,n={};if(t.headers&&typeof t.headers=="object")for(let o in t.headers)t.headers.hasOwnProperty(o)&&(n[o]=t.headers[o]);if(i===200){let o=t.data,r=null;return r=JSON.parse(o),Promise.resolve(r)}else if(i===400){let o=t.data,r=null;return r=JSON.parse(o),h("A server side error occurred.",i,o,n,r)}else if(i===401){let o=t.data,r=null;return r=JSON.parse(o),h("A server side error occurred.",i,o,n,r)}else if(i===422){let o=t.data,r=null;return r=JSON.parse(o),h("A server side error occurred.",i,o,n,r)}else if(i!==200&&i!==204){let o=t.data;return h("An unexpected server error occurred.",i,o,n)}return Promise.resolve(null)}},C=class extends S{instance;baseUrl;jsonParseReviver=void 0;constructor(t,i,n){super(t),this.instance=n||H.create(),this.baseUrl=i??"https://api-localdev-env0-seeka.au.ngrok.io"}batch(t,i){let n=this.baseUrl+"/api/ingest";n=n.replace(/[?&]$/,"");let r={data:JSON.stringify(t),method:"POST",url:n,headers:{"Content-Type":"application/json"},cancelToken:i};return this.transformOptions(r).then(s=>this.instance.request(s)).catch(s=>{if(Z(s)&&s.response)return s.response;throw s}).then(s=>this.transformResult(n,s,d=>this.processBatch(d)))}processBatch(t){let i=t.status,n={};if(t.headers&&typeof t.headers=="object")for(let o in t.headers)t.headers.hasOwnProperty(o)&&(n[o]=t.headers[o]);if(i===202){let o=t.data;return Promise.resolve(null)}else if(i===400){let o=t.data,r=null;return r=JSON.parse(o),h("A server side error occurred.",i,o,n,r)}else if(i===401){let o=t.data,r=null;return r=JSON.parse(o),h("A server side error occurred.",i,o,n,r)}else if(i===422){let o=t.data,r=null;return r=JSON.parse(o),h("A server side error occurred.",i,o,n,r)}else if(i!==200&&i!==204){let o=t.data;return h("An unexpected server error occurred.",i,o,n)}return Promise.resolve(null)}},ge=(n=>(n.Undefined="undefined",n.Success="success",n.Failed="failed",n))(ge||{}),ue=(s=>(s.Unknown="unknown",s.Informed="informed",s.Implied="implied",s.Explicit="explicit",s.Active="active",s.Passive="passive",s))(ue||{}),pe=(c=>(c.Browser="browser",c.Server="server",c.Mobile="mobile",c.Desktop="desktop",c.PhysicalStore="physicalStore",c.Email="email",c.Phone="phone",c.Chat="chat",c.Automatic="automatic",c))(pe||{}),v=(l=>(l.Undefined="undefined",l.PageViewOrganic="pageViewOrganic",l.PageViewUtmAttributed="pageViewUtmAttributed",l.AddPaymentMethod="addPaymentMethod",l.AddToWishlist="addToWishlist",l.ContactMessage="contactMessage",l.Custom="custom",l.SyncCart="syncCart",l.Order="order",l.InitiateCheckout="initiateCheckout",l.AddToCart="addToCart",l.RemoveFromCart="removeFromCart",l.OneTimeItemPurchase="oneTimeItemPurchase",l.SubscriptionItemPurchase="subscriptionItemPurchase",l.ViewProduct="viewProduct",l.ViewPage="viewPage",l.ApplyPromotionalCode="applyPromotionalCode",l.KeywordSearch="keywordSearch",l.UserLoginSignup="userLoginSignup",l.UserLogin="userLogin",l.NewsletterSignup="newsletterSignup",l.Lead="lead",l.ChangeProductAttribute="changeProductAttribute",l.FilterItemsByAttribute="filterItemsByAttribute",l.Schedule="schedule",l.ViewContentItem="viewContentItem",l.StartTrial="startTrial",l))(v||{}),fe=(o=>(o.Undefined="undefined",o.SingleProduct="singleProduct",o.SingleVariant="singleVariant",o.Collection="collection",o))(fe||{}),me=(a=>(a.None="none",a.BigCommerce="bigCommerce",a.Shopify="shopify",a.OrderGroove="orderGroove",a.Magento="magento",a.Generic="generic",a.WooCommerce="wooCommerce",a.Demandware="demandware",a))(me||{}),ye=(s=>(s.Undefined="undefined",s.Fulfilled="fulfilled",s.NoneFulfilled="noneFulfilled",s.PartiallyFulfilled="partiallyFulfilled",s.RestockedOrCancelled="restockedOrCancelled",s.Pending="pending",s))(ye||{}),he=(a=>(a.Undefined="undefined",a.Pending="pending",a.Authorized="authorized",a.PartiallyPaid="partiallyPaid",a.Paid="paid",a.PartiallyRefunded="partiallyRefunded",a.Refunded="refunded",a.Voided="voided",a))(he||{}),ke=(c=>(c.Generic="generic",c.ActivityIngress="activityIngress",c.ActivityEgress="activityEgress",c.UserProfile="userProfile",c.SdkLog="sdkLog",c.Detections="detections",c.ActivityEgressFilter="activityEgressFilter",c.Diagnosis="diagnosis",c.PipelineIntegrationOutput="pipelineIntegrationOutput",c))(ke||{}),ve=(o=>(o.Information="information",o.Warning="warning",o.Error="error",o.Verbose="verbose",o))(ve||{}),Ae=(a=>(a.None="none",a.Probe="probe",a.AppInstalled="appInstalled",a.IdentityChanged="identityChanged",a.ActivityAccepted="activityAccepted",a.AppInstallSettingsUpdated="appInstallSettingsUpdated",a.AppUninstalled="appUninstalled",a.BrowserSdkPlugin="browserSdkPlugin",a))(Ae||{}),xe=(s=>(s.Unknown="unknown",s.Google="google",s.Meta="meta",s.Snapchat="snapchat",s.Pinterest="pinterest",s.TikTok="tikTok",s))(xe||{}),j=(n=>(n.Undefined="undefined",n.PurchaseMade="purchaseMade",n.ActivityTracked="activityTracked",n))(j||{}),$=(n=>(n.Undefined="undefined",n.And="and",n.Or="or",n))($||{}),F=(s=>(s.Undefined="undefined",s.Domain="domain",s.Pipeline="pipeline",s.Wildcard="wildcard",s.Url="url",s.PagePath="pagePath",s))(F||{}),Ie=(g=>(g.Undefined="undefined",g.Equals="equals",g.NotEquals="notEquals",g.Contains="contains",g.NotContains="notContains",g.StartsWith="startsWith",g.EndsWith="endsWith",g.IsNull="isNull",g.NotNull="notNull",g.IsTrue="isTrue",g.IsFalse="isFalse",g.GreaterThanOrEquals="greaterThanOrEquals",g.LessThanOrEquals="lessThanOrEquals",g.GreaterThan="greaterThan",g.LessThan="lessThan",g.Before="before",g.After="after",g.Between="between",g.In="in",g.NotIn="notIn",g.Regex="regEx",g.Any="any",g))(Ie||{}),z=(p=>(p.Undefined="undefined",p.Seeka="seeka",p.DynamicYield="dynamicYield",p.Segment="segment",p.FacebookPixel="facebookPixel",p.GoogleAnalytics="googleAnalytics",p.Braze="braze",p.SnapchatPixel="snapchatPixel",p.Pinterest="pinterest",p.TikTokPixel="tikTokPixel",p.GoogleAds="googleAds",p))(z||{}),K=(s=>(s.Default="default",s.Sku="sku",s.ProductId="productId",s.VariantId="variantId",s.ProductIdAndVariantIdUnderscore="productIdAndVariantIdUnderscore",s.VariantIdOrProductId="variantIdOrProductId",s))(K||{}),be=(o=>(o.DeliverAllTraitsAndDeliverAllEvents="deliverAllTraitsAndDeliverAllEvents",o.DeliverAllTraitsAndDeliverEventsOnlyIfMaxWeightedTraitsPresent="deliverAllTraitsAndDeliverEventsOnlyIfMaxWeightedTraitsPresent",o.DeliverMaxWeightedTraitsOnlyAndDeliverAllEvents="deliverMaxWeightedTraitsOnlyAndDeliverAllEvents",o.DeliverMaxWeightedTraitsOnlyAndDeliverEventsOnlyIfMaxWeightedTraitsPresent="deliverMaxWeightedTraitsOnlyAndDeliverEventsOnlyIfMaxWeightedTraitsPresent",o))(be||{}),Se=(n=>(n.None="none",n.SessionPassthrough="sessionPassthrough",n.UrlPassthrough="urlPassthrough",n))(Se||{}),Pe=(n=>(n.Unset="unset",n.Granted="granted",n.Denied="denied",n))(Pe||{}),Y=(i=>(i.Undefined="undefined",i.MeasureAdvertisingPerformance="measureAdvertisingPerformance",i))(Y||{}),Ce=(n=>(n.Undefined="undefined",n.AllOf="allOf",n.AnyOf="anyOf",n))(Ce||{}),Te=(n=>(n.Disabled="disabled",n.Explicit="explicit",n.Implicit="implicit",n))(Te||{}),R=class extends Error{message;status;response;headers;result;constructor(t,i,n,o,r){super(),this.message=t,this.status=i,this.response=n,this.headers=o,this.result=r}isApiException=!0;static isApiException(t){return t.isApiException===!0}};function h(e,t,i,n,o){throw o??new R(e,t,i,n,null)}function Z(e){return e&&e.isAxiosError===!0}import{Configuration as Re,genericGrantRequest as De,clientCredentialsGrant as Me,discovery as Ne,None as Ue}from"openid-client";import N from"winston";import D from"memory-cache";var Q="seeka:sdk",m=class{constructor(t,i){this.appId=t,this.appInstallationId=i}appId;appInstallationId;set=async(t,i,n)=>{let o=this.getKey(t);D.put(o,JSON.stringify(i),n)};getOrSet=async(t,i,n)=>{let o=this.getKey(t),r=D.get(o);if(r){let d=JSON.parse(r);return n&&await n(d),d}let s=await i();return s?(D.put(o,JSON.stringify(s.value),s.expiryAbsoluteMilliseconds),s.value):null};getKey=t=>this.appInstallationId?`${Q}:${this.appId}:${this.appInstallationId}:${t}`:`${Q}:${this.appId}:${t}`};import*as X from"crypto";var T=()=>{let e=we(new Date),t=Ee();return`${e}.${t}`},ot=e=>{let t=Object.keys(v),i=e.toLowerCase(),n=t.find(o=>o.toLowerCase()===i);return n?v[n]:"custom"},Ee=()=>Math.floor(Math.random()*(9999999999-1e9)+1e9).toString(),we=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 n=e.getUTCHours().toString();n.length<2&&(n="0"+n);let o=e.getUTCMinutes().toString();o.length<2&&(o="0"+o);let r=e.getUTCSeconds().toString();return r.length<2&&(r="0"+r),`${e.getUTCFullYear()}${t}${i}.${n}${o}${r}`},ee=e=>X.createHash("md5").update(e).digest("hex"),st=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(" ")}},M=(e,t)=>e.reduce((i,n,o)=>{let r=Math.floor(o/t);return i[r]||(i[r]=[]),i[r].push(n),i},[]);var U=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 i=new m(e.appId,e.applicationInstallId),n=ee(e.issuerUrl+"_"+e.appId),o=await i.getOrSet(n,async()=>{try{let r=await Oe(e);return!r||!r.meta||!r.raw?null:(e.logger?e.logger.verbose("Seeka auth: got issuer from remote",{...t}):console.debug("Seeka auth: got issuer from remote",{...t}),{value:r.meta,expiryAbsoluteMilliseconds:1e3*60*60})}catch(r){return e.logger?e.logger.error("Seeka auth: failed getting issuer",{...t,ex:N.exceptions.getAllInfo(r)}):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 o===null?null:new Re(o.serverMetadata,o.clientId,e.appSecret)},Oe=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 i=e.appId.replace(/-/g,""),n=await Ne(new URL(e.issuerUrl),i,void 0,Ue(),{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:i},raw:n}}catch(i){return e.logger?e.logger.error("Seeka auth: failed discovering issuer from remote",{...t,ex:N.exceptions.getAllInfo(i)}):console.error("Seeka auth: failed discovering issuer from remote",{...t,err:i}),null}},We=async e=>{let t={applicationId:e.appId,issuer:{url:e.issuerUrl}},i=await U(e);if(!i)return null;try{let n=await Me(i,{resource:i.clientMetadata().client_id}),o={...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",{...o}):console.info("Seeka auth: got app client token from server",{...o}),{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 o={...t,error:n};return e.logger?e.logger.error("Seeka auth: failed to get client access token from server",{...o}):console.error("Seeka auth: failed to get client access token from server",{...o,err:N.exceptions.getAllInfo(n)}),null}},te=async(e,t)=>{let i={applicationId:t.appId,issuer:{url:t.issuerUrl}},n=await U(t);if(!n||!n)return null;try{let o=await De(n,"app_install_token",{applicationInstallId:t.applicationInstallId,access_token:e,scope:"Seeka.API.Ingest"}),r={...i,token:{expires_at:o.expires_at,token_type:o.token_type,scope:o.scope}};return t.logger?t.logger.verbose("Seeka auth: got app access token from server",{...r}):console.info("Seeka auth: got app access token from server",{...r}),{token_type:o.token_type,access_token:o.access_token,expires_in:o.expires_in,id_token:o.id_token,refresh_token:o.refresh_token,scope:o.scope,authorization_details:o.authorization_details}}catch(o){let r={...i,error:o};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}},A=async e=>{let t=new m(e.appId,e.applicationInstallId),i={applicationId:e.appId,issuer:{url:e.issuerUrl}};return await t.getOrSet("auth:token:appinstall",async()=>{let n=await We(e);if(!n||!n.access_token)return null;let o=await te(n.access_token,e);return o?{value:o,expiryAbsoluteMilliseconds:((o.expires_in>n.expires_in?n.expires_in:o.expires_in)||900*1e3)-60*1e3}: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})})};var O="https://router.seeka.services",ne="https://router.seeka.services/tel/otel",W="https://account.seeka.app",ie=(e,t,i,n,o)=>{let r=new b;return r.appId=e.applicationId,r.appSecret=t,r.ingestUrl=process.env.SEEKA_INGEST_URL||O,r.issuerUrl=process.env.SEEKA_ISSUER_URL||W,r.organisationId=e.organisationId,r.applicationInstallId=e.applicationInstallId,r.runtime={type:"sdk/js/apps-server",ver:G.split("-")[0],client:i},r.logger=o,r.grantedPermissions=n,r.transformApiRequest=s=>Be(r,s),r.transformApiResponse=async(s,d,a)=>_e(r,s,d,a),r.hasAnyPermissions=s=>!r.grantedPermissions||r.grantedPermissions.length===0?!1:!s||s.length===0?!0:s.some(d=>r.grantedPermissions.includes(d)),r.hasAllPermissions=s=>!r.grantedPermissions||r.grantedPermissions.length===0?!1:!s||s.length===0?!0:s.every(d=>r.grantedPermissions.includes(d)),r.hasPermission=s=>!r.grantedPermissions||r.grantedPermissions.length===0?!1:s?r.grantedPermissions.includes(s):!0,r},Be=async(e,t)=>{let i=await A(e);if(!i||!i.access_token)throw new Error("Could not get access token for API request");return t.headers={...t.headers,"X-OrgId":e.organisationId,Authorization:"Bearer "+i?.access_token},t},_e=async(e,t,i,n)=>(i.data=JSON.stringify(i.data),n(i));var y={identity:{receiveFull:"Identity.Receive.Pii",send:"Identity.Send"},activity:{receiveAnon:"Activity.Receive.Anon",receiveFull:"Activity.Receive.Pii",send:"Activity.Send"}};import Le from"axios";import Je from"http";import Ve from"https";var qe=new Je.Agent({keepAlive:!0,scheduling:"fifo"}),Ge=new Ve.Agent({keepAlive:!0,scheduling:"fifo"}),re=e=>{let t=Le.create({httpAgent:qe,httpsAgent:Ge});return t.interceptors.request.use(function(i){let n={url:i.url,method:i.method};return process.env.LOGGING_LEVEL==="silly"&&(n={...n,body:i.data,params:i.params}),e.logger?e.logger.debug(`Seeka API: making call to ${n.url}`,{...n}):console.debug(`Seeka API: making call to ${n.url}`,{...n}),i},function(i){let n={error:i};return e.logger?e.logger.http("Seeka API: failed to send request",{...n}):console.debug("Seeka API: failed to send request",{...n}),Promise.reject(i)}),t.interceptors.response.use(function(i){let n={url:i.request?.url||i.config.url,method:i.request?.method||i.config.method,response:{status:i.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}),i},function(i){let{code:n,status:o,message:r}=i,{headers:s,url:d,method:a}=i?.config,c={code:n,status:o,message:r,headers:s,url:d,method:a,content:i?.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(i)}),t},B={getIdentityService:e=>new P(e,e.ingestUrl,re(e)),getIngestService:e=>new C(e,e.ingestUrl,re(e))};var x=class{constructor(t){this.config=t,this.ingestionService=B.getIngestService(t),this.identityService=B.getIdentityService(t)}config;maxBatchSize=50;refreshOrPrimeTokenCache=async()=>{await A(this.config)};ingestionService;identityService;checkPermission=(t,i)=>{if(!this.config.hasPermission(t))throw new Error("Cannot perform operation "+i+" on installationId "+this.config.applicationInstallId+" without permission "+t+". Currently granted permissions: "+(this.config.grantedPermissions?this.config.grantedPermissions.join(", "):"none"));return!0};mergeIdentity=async(t,i)=>{this.checkPermission(y.identity.send,"mergeIdentity");let n=T();return(await this.identityService.merge({id:t,src:{method:"",origin:i.origin,time:void 0,loc:i.loc,sess:n,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?n:void 0,runtime:this.config.runtime}})).result?.personId};mergeIdentityBatch=async(t,i)=>{this.checkPermission(y.identity.send,"mergeIdentityBatch");let n=T();if(t.length===0){this.config.logger?.debug("No identities in batch");return}let o={method:"",origin:i.origin,time:void 0,loc:i.loc,sess:n,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?n:void 0,runtime:this.config.runtime},r=M(t,this.maxBatchSize);if(r.length>1&&this.config.logger&&this.config.logger.debug(`Identity batch size ${t} is greater than ${this.maxBatchSize}, splitting into ${r.length} batches`),await this.trackActivityBatchRaw({data:r[0].map(s=>({id:{id:s||{},src:{...o}}}))}),r.length>1){let s=r.map((d,a)=>a===0?Promise.resolve():(this.config.logger?.verbose(`Processing identity batch ${a+1} of ${r.length}`),this.trackActivityBatchRaw({data:d.map(c=>({id:{id:c||{},src:{...o}}}))})));await Promise.all(s)}};trackActivityBatch=async(t,i)=>{this.checkPermission(y.activity.send,"trackActivityBatch");let n=T();if(t.length===0){this.config.logger?.debug("No activities in batch");return}let o={method:"",origin:i.origin,time:void 0,loc:i.loc,sess:n,diag:process.env.SEEKA_DEBUG_ENABLED==="true"?n:void 0,runtime:this.config.runtime},r=M(t,this.maxBatchSize);if(r.length>1&&this.config.logger&&this.config.logger.debug(`Activity batch size ${t.length} is greater than ${this.maxBatchSize}, splitting into ${r.length} batches`),await this.trackActivityBatchRaw({data:r[0].map(s=>({ev:{id:s.profile||{},src:{...o},payload:s.activity}}))}),r.length>1){let s=r.map((d,a)=>a===0?Promise.resolve():(this.config.logger?.verbose(`Processing activity batch ${a+1} of ${r.length}`),this.trackActivityBatchRaw({data:d.map(c=>({ev:{id:c.profile||{},src:{...o},payload:c.activity}}))})));await Promise.all(s)}};trackActivityBatchRaw=async t=>{await this.ingestionService.batch(t)};trackActivityForProfileId=async(t,i,n)=>{this.checkPermission(y.activity.send,"trackActivityForProfileId"),await this.trackActivityForProfileIdBatch([t],i,n)};trackActivityForProfileIdBatch=async(t,i,n)=>{this.checkPermission(y.activity.send,"trackActivityForProfileIdBatch"),await this.trackActivityBatch(t.map(o=>({activity:o,profile:i?{seekaPId:i}:void 0})),n)};trackActivityForProfile=async(t,i,n)=>{this.checkPermission(y.activity.send,"trackActivityForProfile"),await this.trackActivityForProfileBatch([t],i,n)};trackActivityForProfileBatch=async(t,i,n)=>{this.checkPermission(y.activity.send,"trackActivityForProfileBatch"),await this.trackActivityBatch(t.map(o=>({activity:o,profile:i})),n)}};var Ot={measureAdvertisingPerformance:7};import*as oe from"crypto";var _="x-seeka-signature-sha256",se=(e,t,i)=>{if(!t)return!1;let n=null;if(t.get&&typeof t.get=="function")n=t.get(_);else{let s=t[_];s&&(Array.isArray(s)&&s.length>0?n=s[0]:(typeof s=="string"||s instanceof String)&&(n=s))}if(!n)return!1;let r=He(e,i)===n;return r||console.warn("Invalid webhook signature"),r},He=(e,t)=>oe.createHmac("sha256",e).update(t).digest("hex"),je=(e,t,i)=>{if(!se(e,t,i))throw new Error("Invalid webhook signature")};import I from"crypto";var ae="aes-192-cbc",L=(e,t)=>{if(!e)return"";if(!t)throw new Error("Secret is required to encrypt data");let i=I.scryptSync(t,"salt",24),n=I.randomBytes(16),o=I.createCipheriv(ae,i,n);return[o.update(e,"utf8","hex")+o.final("hex"),Buffer.from(n).toString("hex")].join("|")},J=(e,t)=>{if(!e)return"";if(!t)throw new Error("Secret is required to decrypt data");let[i,n]=e.split("|");if(!n)throw new Error("IV not found");let o=I.scryptSync(t,"salt",24),r=I.createDecipheriv(ae,o,Buffer.from(n,"hex"));return r.update(i,"hex","utf8")+r.final("utf8")};var E=class{constructor(t){this.appSecret=t}appSecret;encryptWithAppSecret=t=>{if(!this.appSecret)throw new Error("App secret is required to encrypt data");return L(t,this.appSecret)};decryptWithAppSecret=t=>{if(!this.appSecret)throw new Error("App secret is required to decrypt data");return J(t,this.appSecret)}};var V=class e{constructor(t,i){this.context=t,this.api=new x(t.config),this.appCache=new m(t.config.appId),this.appInstallCache=new m(t.config.appId,t.config.applicationInstallId),this.crypto=new E(t.config.appSecret),this.logger=i}context;appCache;appInstallCache;api;logger;crypto;static create=(t,i,n,o,r)=>new e({config:ie({...i},t,{type:n.name,ver:n.version.split("-")[0]},o,r)},r)};import Ye from"winston";import{get as $e,isEqual as Fe,set as ze}from"lodash-es";var f=e=>e==null||e===""||String(e).trim()===""?"":String(e);function Ke(e){if(e==null||e==="")return 0;let t=e.toString().replace(/[^0-9.]/g,"");return Number.isNaN(Number(t))?0:Number(t)}function zt(e){if(e==null||e===0||e==="")return+"0.00";let t=Ke(e);return Number(t.toFixed(3))}function Kt(e){return e==null||e===""||Number.isNaN(Number(e.toString()))?0:Math.floor(Number(e))}function Yt(e){return JSON.parse(JSON.stringify(e))}function Zt(e){return/^-?\d+$/.test(e)}function Qt(e){if(!(e==null||e.length===0))return ce(e)}function ce(e){return ce(e)}function Xt(e,t){return $e(e,t)}function en(e,t,i){return ze(e,t,i)}function tn(e,t){return Fe(e,t)}function nn(e){return e?e.trim().toLowerCase():""}function rn(e){return e==null?"":(e=e.trim().replace(/-/gi,"").replace(/\(/gi,"").replace(/\)/gi,"").replace(/ /g,"").replace(/\+/g,""),e)}var Ze=["order","subscriptionItemPurchase","oneTimeItemPurchase"],mn=(e,t,i)=>{if(!e.activity)return[];let n=e.activity,o=n.activityName==="custom"?n.activityNameCustom:n.activityName;if(!o)return[];let r=o.toLowerCase(),s=[];return t.forEach(d=>{if(!d)return;switch(d.type){case"activityTracked":{if(!d.activityNames||!d.activityNames.find(de=>de.toLowerCase()===r))return;i.verbose("Matched activity tracked filter",{filter:d,activityName:o});break}case"purchaseMade":{if(!n.activityName||!Ze.includes(n.activityName))return;i.verbose("Matched purchase made activity filter",{filter:d,activityName:o});break}default:{i.warn("Unknown activity filter type",{filter:d});return}}let a=d.sourceFilter;if(!a)return;let c=e.source,k;try{k=c?.loc?new URL(c.loc).hostname.toLowerCase():null}catch(u){i.error("Failed to parse activity source URL",{ex:Ye.exceptions.getAllInfo(u),activitySource:c}),k=null}let w=c?.pipeline?.convergePipelineIntegrationInstanceId?.toLowerCase(),q=a.filters?a.filters.map(u=>{switch(u.type){case"wildcard":return i.verbose("Matched wildcard source filter",{sourceFilter:u}),!0;case"domain":return!k||!u.key?!1:k===u.key.toLowerCase()?(i.verbose("Matched domain source filter",{sourceFilter:u,activityHostname:k}),!0):!1;case"pipeline":return!w||!u.key?!1:w===u.key.toLowerCase()?(i.verbose("Matched pipeline source filter",{sourceFilter:u,sourceConvergePipelineIntegrationInstanceId:w}),!0):!1}}):[];switch(a.comparer){case"and":{q.every(u=>u===!0)&&s.push(d);break}case"or":{q.some(u=>u===!0)&&s.push(d);break}default:{i.warn("Unknown source filter comparer",{sourceFilters:a});break}}}),s},yn=(e,t=!1)=>{let i=e.commerce,n=i?.totalPrice||i?.products?.map(r=>(r.unitPrice||0)*(r.quantity||1)).reduce((r,s)=>r+s,0)||void 0,o=i?.currencyCode||null;if((!n||n<=0)&&(n=e?.lead?.predictedLtv||e?.lead?.predictedValue,n&&e?.lead?.currencyCode&&(o=e?.lead?.currencyCode||null)),(!n||n<=0)&&(n=e?.contentItem?.value,n&&e?.contentItem?.currencyCode&&(o=e?.contentItem?.currencyCode||null)),(!n||n<=0)&&(e?.contentItem?.items&&e?.contentItem?.items.length>0&&(n=e?.contentItem?.items.map(r=>r&&r.unitPrice?r.unitPrice*(r.quantity||1):0).reduce((r,s)=>r+s,0)),n&&(o=e?.contentItem?.currencyCode||e?.commerce?.currencyCode||null,!o))){let r=e?.contentItem?.items?.filter(s=>s.currencyCode)||[];r.length>0&&(o=r[0].currencyCode||null)}if((!n||n<=0)&&e?.commerce?.products&&e?.commerce?.products.length>0&&(n=e?.commerce?.products.map(r=>r&&r.unitPrice?r.unitPrice*(r.quantity||1):0).reduce((r,s)=>r+s,0),n&&(o=e?.commerce?.currencyCode||null,!o))){let r=e?.commerce?.products?.filter(s=>s.currencyCode)||[];r.length>0&&(o=r[0].currencyCode||null)}return(!n||n<=0)&&!o?null:{value:n===0&&t?null:n||null,currencyCode:o}};function hn(e,t,i){if(!e)return;let n=t.processing?.contentIdentificationBehavior,o=null;(i=="googleAnalytics"||i=="googleAds")&&(t.analytics?.libraries?.googleAnalytics?.merchant?.productItemIdBehavior!=null&&(n=t.analytics?.libraries?.googleAnalytics?.merchant?.productItemIdBehavior),o=f(t.analytics?.libraries?.googleAnalytics?.merchant?.productItemIdPrefix));let r;switch(n){case"sku":r=e?.sku;break;case"productId":r=e?.productIdentifier;break;case"variantId":r=e?.variantIdentifier;break;case"productIdAndVariantIdUnderscore":f(e.variantIdentifier)&&f(e.productIdentifier)?r=`${e.productIdentifier}_${e.variantIdentifier}`:f(e.variantIdentifier)?r=e.variantIdentifier:r=e.productIdentifier;break;case"variantIdOrProductId":f(e.variantIdentifier)?r=e.variantIdentifier:r=e.productIdentifier;break;default:r=f(e?.sku)||f(e?.variantIdentifier)||f(e?.productIdentifier);break}return o?`${o}${r}`:r}function kn(e,t){return f(e?.variantName)||f(e?.productName)}function An(e){if(!e||e.trim().length===0)return!1;let t=e.split(".").filter(i=>i.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 bn={defaultIssuerUrl:W,defaultTelemetryUrl:ne,defaultIngestUrl:O};export{F as ActivityPipelineActivityFilterSourceItemType,j as ActivityPipelineActivityFilterType,z as AnalyticsLibrary,R as ApiException,S as ApiServiceProxyBase,y as AppPermissionKeys,xe as ClickAttributionSourcePlatform,$ as ConditionComparer,Ie as ConditionOperator,Ce as ConsentMappingMatchType,K as ContentIdentificationBehavior,ke as ConvergePipelineLoggableActivityType,be as ConvergeVendorDestinationPublishStrategy,Se as CrossDomainTrackingUtmBehavior,fe as ECommerceContentType,he as ECommerceFinancialStatus,ye as ECommerceFulfillmentStatus,me as ECommercePlatform,Y as IabPrivacyConsentPurposeId,Ot as IabPrivacyConsentPurposeIdMap,P as IdentityServiceProxy,C as IngestServiceProxy,ue as PrivacyConsentType,Te as PrivacyDataControlMode,Pe as RegionalConsentGrantOption,ge as ResponseResultType,ve as SdkLogEventLevel,x as SeekaApiHelper,m as SeekaAppCacheManager,b as SeekaAppConfig,V as SeekaAppHelper,Ae as SeekaWebhookCallType,v as TrackingActivityNames,pe as TrackingEventSourceOriginType,M as chunk,Yt as cloneDeep,we as dateToUtcDateTimeReferenceString,J as decryptText,nn as emailAddress,L as encryptText,T as generateNewSessionId,ot as getActivityName,yn as getActivityValue,hn as getContentIdFromProduct,kn as getContentNameFromProduct,U as getIssuer,Xt as getNestedProperty,te as getNewAppInstallToken,A as getNewOrCachedAppInstallToken,Ee as getRandomNumberString,tn as isDeepEqual,Zt as isNumber,An as isValidSeekaProfileId,ce as last,Qt as lastOrDefault,mn as matchActivityPipelineFilters,ee as md5Hash,Ke as parseFloat,Kt as parseInt,zt as parseMoney,f as parseStr,rn as phoneNumberToE164,st as separatePersonFullName,en as setNestedProperty,je as throwOnInvalidWebhookSignature,bn as urls,se as validateWebhookSignature,_ as webhookSignatureHeaderName};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seeka-labs/sdk-apps-server",
|
|
3
|
-
"version": "3.8.
|
|
3
|
+
"version": "3.8.6",
|
|
4
4
|
"description": "Seeka - Apps SDK - Node.js",
|
|
5
5
|
"author": "SEEKA <platform@seeka.co>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
},
|
|
33
33
|
"devDependencies": {
|
|
34
34
|
"@jest/globals": "^30",
|
|
35
|
-
"@seeka-labs/sdk-apps-core": "^3.8.
|
|
35
|
+
"@seeka-labs/sdk-apps-core": "^3.8.6",
|
|
36
36
|
"@types/jest": "^30",
|
|
37
37
|
"@types/memory-cache": "^0",
|
|
38
38
|
"@types/node": "^22",
|
|
@@ -44,7 +44,6 @@
|
|
|
44
44
|
"nswag": "^14",
|
|
45
45
|
"openid-client": "^6",
|
|
46
46
|
"ts-jest": "^29",
|
|
47
|
-
"ts-node": "^10",
|
|
48
47
|
"typescript": "^5",
|
|
49
48
|
"undici": "^7",
|
|
50
49
|
"winston": "^3"
|
|
@@ -57,5 +56,5 @@
|
|
|
57
56
|
"undici": "^7",
|
|
58
57
|
"winston": "^3"
|
|
59
58
|
},
|
|
60
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "7bb14ccbd1859349c57898ff0ab5b62394cf07b1"
|
|
61
60
|
}
|