@obelism/improve-sdk 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client.cjs +1 -1
- package/dist/client.d.ts +3 -1
- package/dist/client.mjs +1 -1
- package/dist/server.cjs +1 -1
- package/dist/server.d.ts +3 -2
- package/dist/server.mjs +1 -1
- package/dist/types.d.ts +1 -0
- package/package.json +1 -1
package/dist/client.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:!0});var i=require("ua-parser-js"),t=i&&i.__esModule?i:{default:i};const e={device:["wearable","mobile","tablet","console","smarttv","embedded","desktop"],browser:["chrome","safari","firefox","edge","ie","samsung internet","social","other"],os:["mac os","ios","android","windows","unix"]},s=i=>i&&e.device.includes(i)?i:"desktop",r=["tiktok","wechat","weibo","snapchat","klarna","Line","instagram","facebook","alipay","Baidu"],o=(i="")=>{if(!i)return"other";let t=i.toLowerCase();return e.browser.find(i=>t.includes(i))||(r.includes(t)?"social":"other")},n=["wearable","mobile","tablet"],l=i=>n.includes(i)?"coarse":"fine",a=(i="")=>{if(!i)return"unix";let t=i.toLowerCase();return e.os.find(i=>t.includes(i))||"unix"},h=i=>{if(!i||"string"!=typeof i)return null;let e=new t.default(i).getResult(),r=s(e.device.type);return{pointer:l(r),device:r,browser:o(e.browser.name),os:a(e.os.name)}},u=(i,t)=>!i||Object.entries(i).every(([i,e])=>t[i]===e),c=i=>{if(0===i.length)return null;if(1===i.length)return i[0].slug;let t=Math.random()*i.reduce((i,{split:t})=>i+t,0);return(i.find(({split:i})=>(t-=i)<=0)||i[0]).slug},f="visi",d="https://improve.obelism.studio",g
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:!0});var i=require("ua-parser-js"),t=i&&i.__esModule?i:{default:i};const e={device:["wearable","mobile","tablet","console","smarttv","embedded","desktop"],browser:["chrome","safari","firefox","edge","ie","samsung internet","social","other"],os:["mac os","ios","android","windows","unix"]},s=i=>i&&e.device.includes(i)?i:"desktop",r=["tiktok","wechat","weibo","snapchat","klarna","Line","instagram","facebook","alipay","Baidu"],o=(i="")=>{if(!i)return"other";let t=i.toLowerCase();return e.browser.find(i=>t.includes(i))||(r.includes(t)?"social":"other")},n=["wearable","mobile","tablet"],l=i=>n.includes(i)?"coarse":"fine",a=(i="")=>{if(!i)return"unix";let t=i.toLowerCase();return e.os.find(i=>t.includes(i))||"unix"},h=i=>{if(!i||"string"!=typeof i)return null;let e=new t.default(i).getResult(),r=s(e.device.type);return{pointer:l(r),device:r,browser:o(e.browser.name),os:a(e.os.name)}},u=(i,t)=>!i||Object.entries(i).every(([i,e])=>t[i]===e),c=i=>{if(0===i.length)return null;if(1===i.length)return i[0].slug;let t=Math.random()*i.reduce((i,{split:t})=>i+t,0);return(i.find(({split:i})=>(t-=i)<=0)||i[0]).slug},f="visi",d="https://improve.obelism.studio",g="/api/log",v="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",p=i=>new Promise(t=>setTimeout(t,i)),m=async(i=1e3,t)=>(await p(i),t?.abort(),null),w=(i=3e3,t,e)=>{let s=new AbortController;return Promise.race([fetch(t,{...e,signal:s.signal}),m(i,s)])};class b{#i;constructor({organizationId:i,environment:t,state:e,config:s,fetchTimeout:r,baseUrl:o}){this.organizationId="",this.environment="develop",this.#i=null,this.config=null,this._fetchConfig=async i=>{if(this.config)return;if(!this.#i)throw Error("No config fetch setup provided");let t=await w(this.#i.timeout,this.#i.url,i);if(!t||!t.ok)throw Error("Configuration fetch timed-out");this.config=await t.json()},this.loadConfig=i=>{this.config=i},this.generateVisitorId=()=>[f,(function(i=5){return i&&"number"==typeof i?Array(i).fill("").reduce(i=>i+=v.charAt(Math.floor(Math.random()*v.length)),""):""})(26).toUpperCase()].join("_"),this.getVisitorCookieName=()=>"visitorId",this.validateTestValue=(i,t)=>{if(!this.config)throw Error("Config is required before validating, either use `.fetchConfig()`, .loadConfig(config) or provide it during setup");let e=this.config.tests[i];if(!e)throw Error(`No config found for ${i}`);return!!e.options.find(i=>i.slug===t)},this.validateVisitorId=i=>{let t=i.split("_");if(2!==t.length)return!1;let[e,s]=t;return e===f&&26===s.length},this.organizationId=i,this.environment=t,this._baseUrl=o||d,s?this.config=s:this.#i={url:[`${this._baseUrl}/config`,i,t,e||"active"].join("/"),timeout:r||3e3}}}const y=i=>{if(!i)return!1;let t=document.cookie.split("; ").find(t=>{let[e]=t.split("=");return i===e});return!!t&&t.split("=")[1]},I=(i,t)=>{let e=new Date;e.setMonth(e.getMonth()+1),document.cookie=`${i}=${t};path=/;expires=${e.toUTCString()}`},V=()=>{let i=window.innerWidth;return i<=768?"small":i<=1024?"medium":i<=1200?"large":"huge"};exports.ImproveClientSDK=class extends b{#t;#e;#s;#r;#o;constructor(i){super(i),this.#e=!1,this.#s="",this.#r={},this.#o=`${d}${g}`,this.fetchConfig=this._fetchConfig,this.setupVisitor=(i=window.navigator.userAgent)=>{let t=y(this.getVisitorCookieName()),e=t&&this.validateVisitorId(t);this.#e=e,this.#s=e?t:this.generateVisitorId();let s=h(i);return s?(this.#t=s,I(this.getVisitorCookieName(),this.#s),this.#s):null},this.getFlagValue=i=>{if(!this.config)return null;let t=this.config.flags[i];if(!t||!t.options[0])return null;if(this.#t||this.setupVisitor(),!this.#s||!this.#t)return t.options[0].slug;if(this.#t?.[i])return this.#t[i];if(!u(this.config.audience[t.audience],this.#t))return t.options[0].slug;let e=y(i)||c(t.options);return e?(this.#t[i]=e,I(i,e),e):null},this.getTestValue=i=>{if(!this.config)return null;let t=this.config.tests[i];if(!t)return null;if(this.#t||this.setupVisitor(),!this.#s||!this.#t)return t.defaultValue;if(this.#t?.[i])return this.#t[i];if(!u(this.config.audience[t.audience],this.#t))return t.defaultValue;if(t.allocation<100&&100*Math.random()>t.allocation)return this.#t[i]=t.defaultValue,this.#t?.[i];let e=y(i),s=e&&this.validateTestValue(i,e)?e:c(t.options);return s?(this.#t[i]=s,I(i,s),s):null},this.setAnalyticsUrls=i=>{this.#o=i},this.postAnalytic=(i,t,e)=>{if(!this.config)return null;let s=this.config.tests[i];if(this.#t||this.setupVisitor(),!s||!this.#t||this.#r?.[i]?.[t])return null;let r=this.#r[i]||{};r[t]=!0,this.#r[i]=r;let o=this.#t?.[i]||null;if(o||(o=this.getTestValue(i)||null),!o)return;let n={organizationId:this.organizationId,environment:this.environment,testId:s.id,testValue:o,visitorId:this.#s,pointer:this.#t.pointer,device:this.#t.device,screen:V(),browser:this.#t.browser,os:this.#t.os,visitor:this.#e?"recurring":"new",event:t,message:e||""};return fetch(this.#o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)})},this.#o=`${this._baseUrl}${g}`}};
|
package/dist/client.d.ts
CHANGED
|
@@ -5,7 +5,8 @@ declare class BaseImproveSDK {
|
|
|
5
5
|
organizationId: string;
|
|
6
6
|
environment: ImproveEnvironmentOption;
|
|
7
7
|
config: ImproveConfiguration | null;
|
|
8
|
-
|
|
8
|
+
_baseUrl: undefined | string;
|
|
9
|
+
constructor({ organizationId, environment, state, config, fetchTimeout, baseUrl, }: ImproveSetupArgs);
|
|
9
10
|
_fetchConfig: (config?: RequestInit) => Promise<void>;
|
|
10
11
|
loadConfig: (config: ImproveConfiguration) => void;
|
|
11
12
|
generateVisitorId: () => string;
|
|
@@ -32,6 +33,7 @@ type CreateAnalytic = {
|
|
|
32
33
|
declare class ImproveClientSDK extends BaseImproveSDK {
|
|
33
34
|
#private;
|
|
34
35
|
fetchConfig: (config?: RequestInit) => Promise<void>;
|
|
36
|
+
constructor(args: ImproveSetupArgs);
|
|
35
37
|
setupVisitor: (userAgent?: string) => string;
|
|
36
38
|
getFlagValue: (flagSlug: string) => string;
|
|
37
39
|
getTestValue: (testSlug: string) => string;
|
package/dist/client.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import i from"ua-parser-js";let t={device:["wearable","mobile","tablet","console","smarttv","embedded","desktop"],browser:["chrome","safari","firefox","edge","ie","samsung internet","social","other"],os:["mac os","ios","android","windows","unix"]},e=i=>i&&t.device.includes(i)?i:"desktop",s=["tiktok","wechat","weibo","snapchat","klarna","Line","instagram","facebook","alipay","Baidu"],r=(i="")=>{if(!i)return"other";let e=i.toLowerCase();return t.browser.find(i=>e.includes(i))||(s.includes(e)?"social":"other")},o=["wearable","mobile","tablet"],n=i=>o.includes(i)?"coarse":"fine",l=(i="")=>{if(!i)return"unix";let e=i.toLowerCase();return t.os.find(i=>e.includes(i))||"unix"},a=t=>{if(!t||"string"!=typeof t)return null;let s=new i(t).getResult(),o=e(s.device.type);return{pointer:n(o),device:o,browser:r(s.browser.name),os:l(s.os.name)}},h=(i,t)=>!i||Object.entries(i).every(([i,e])=>t[i]===e),u=i=>{if(0===i.length)return null;if(1===i.length)return i[0].slug;let t=Math.random()*i.reduce((i,{split:t})=>i+t,0);return(i.find(({split:i})=>(t-=i)<=0)||i[0]).slug},c="visi",f="https://improve.obelism.studio",d
|
|
1
|
+
import i from"ua-parser-js";let t={device:["wearable","mobile","tablet","console","smarttv","embedded","desktop"],browser:["chrome","safari","firefox","edge","ie","samsung internet","social","other"],os:["mac os","ios","android","windows","unix"]},e=i=>i&&t.device.includes(i)?i:"desktop",s=["tiktok","wechat","weibo","snapchat","klarna","Line","instagram","facebook","alipay","Baidu"],r=(i="")=>{if(!i)return"other";let e=i.toLowerCase();return t.browser.find(i=>e.includes(i))||(s.includes(e)?"social":"other")},o=["wearable","mobile","tablet"],n=i=>o.includes(i)?"coarse":"fine",l=(i="")=>{if(!i)return"unix";let e=i.toLowerCase();return t.os.find(i=>e.includes(i))||"unix"},a=t=>{if(!t||"string"!=typeof t)return null;let s=new i(t).getResult(),o=e(s.device.type);return{pointer:n(o),device:o,browser:r(s.browser.name),os:l(s.os.name)}},h=(i,t)=>!i||Object.entries(i).every(([i,e])=>t[i]===e),u=i=>{if(0===i.length)return null;if(1===i.length)return i[0].slug;let t=Math.random()*i.reduce((i,{split:t})=>i+t,0);return(i.find(({split:i})=>(t-=i)<=0)||i[0]).slug},c="visi",f="https://improve.obelism.studio",d="/api/log",g="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",v=i=>new Promise(t=>setTimeout(t,i)),p=async(i=1e3,t)=>(await v(i),t?.abort(),null),m=(i=3e3,t,e)=>{let s=new AbortController;return Promise.race([fetch(t,{...e,signal:s.signal}),p(i,s)])};class w{#i;constructor({organizationId:i,environment:t,state:e,config:s,fetchTimeout:r,baseUrl:o}){this.organizationId="",this.environment="develop",this.#i=null,this.config=null,this._fetchConfig=async i=>{if(this.config)return;if(!this.#i)throw Error("No config fetch setup provided");let t=await m(this.#i.timeout,this.#i.url,i);if(!t||!t.ok)throw Error("Configuration fetch timed-out");this.config=await t.json()},this.loadConfig=i=>{this.config=i},this.generateVisitorId=()=>[c,(function(i=5){return i&&"number"==typeof i?Array(i).fill("").reduce(i=>i+=g.charAt(Math.floor(Math.random()*g.length)),""):""})(26).toUpperCase()].join("_"),this.getVisitorCookieName=()=>"visitorId",this.validateTestValue=(i,t)=>{if(!this.config)throw Error("Config is required before validating, either use `.fetchConfig()`, .loadConfig(config) or provide it during setup");let e=this.config.tests[i];if(!e)throw Error(`No config found for ${i}`);return!!e.options.find(i=>i.slug===t)},this.validateVisitorId=i=>{let t=i.split("_");if(2!==t.length)return!1;let[e,s]=t;return e===c&&26===s.length},this.organizationId=i,this.environment=t,this._baseUrl=o||f,s?this.config=s:this.#i={url:[`${this._baseUrl}/config`,i,t,e||"active"].join("/"),timeout:r||3e3}}}let b=i=>{if(!i)return!1;let t=document.cookie.split("; ").find(t=>{let[e]=t.split("=");return i===e});return!!t&&t.split("=")[1]},y=(i,t)=>{let e=new Date;e.setMonth(e.getMonth()+1),document.cookie=`${i}=${t};path=/;expires=${e.toUTCString()}`},I=()=>{let i=window.innerWidth;return i<=768?"small":i<=1024?"medium":i<=1200?"large":"huge"};class V extends w{#t;#e;#s;#r;#o;constructor(i){super(i),this.#e=!1,this.#s="",this.#r={},this.#o=`${f}${d}`,this.fetchConfig=this._fetchConfig,this.setupVisitor=(i=window.navigator.userAgent)=>{let t=b(this.getVisitorCookieName()),e=t&&this.validateVisitorId(t);this.#e=e,this.#s=e?t:this.generateVisitorId();let s=a(i);return s?(this.#t=s,y(this.getVisitorCookieName(),this.#s),this.#s):null},this.getFlagValue=i=>{if(!this.config)return null;let t=this.config.flags[i];if(!t||!t.options[0])return null;if(this.#t||this.setupVisitor(),!this.#s||!this.#t)return t.options[0].slug;if(this.#t?.[i])return this.#t[i];if(!h(this.config.audience[t.audience],this.#t))return t.options[0].slug;let e=b(i)||u(t.options);return e?(this.#t[i]=e,y(i,e),e):null},this.getTestValue=i=>{if(!this.config)return null;let t=this.config.tests[i];if(!t)return null;if(this.#t||this.setupVisitor(),!this.#s||!this.#t)return t.defaultValue;if(this.#t?.[i])return this.#t[i];if(!h(this.config.audience[t.audience],this.#t))return t.defaultValue;if(t.allocation<100&&100*Math.random()>t.allocation)return this.#t[i]=t.defaultValue,this.#t?.[i];let e=b(i),s=e&&this.validateTestValue(i,e)?e:u(t.options);return s?(this.#t[i]=s,y(i,s),s):null},this.setAnalyticsUrls=i=>{this.#o=i},this.postAnalytic=(i,t,e)=>{if(!this.config)return null;let s=this.config.tests[i];if(this.#t||this.setupVisitor(),!s||!this.#t||this.#r?.[i]?.[t])return null;let r=this.#r[i]||{};r[t]=!0,this.#r[i]=r;let o=this.#t?.[i]||null;if(o||(o=this.getTestValue(i)||null),!o)return;let n={organizationId:this.organizationId,environment:this.environment,testId:s.id,testValue:o,visitorId:this.#s,pointer:this.#t.pointer,device:this.#t.device,screen:I(),browser:this.#t.browser,os:this.#t.os,visitor:this.#e?"recurring":"new",event:t,message:e||""};return fetch(this.#o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)})},this.#o=`${this._baseUrl}${d}`}}export{V as ImproveClientSDK};
|
package/dist/server.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,"__esModule",{value:!0});var i=require("ua-parser-js"),t=i&&i.__esModule?i:{default:i};const e={device:["wearable","mobile","tablet","console","smarttv","embedded","desktop"],browser:["chrome","safari","firefox","edge","ie","samsung internet","social","other"],os:["mac os","ios","android","windows","unix"]},s=i=>i&&e.device.includes(i)?i:"desktop",o=["tiktok","wechat","weibo","snapchat","klarna","Line","instagram","facebook","alipay","Baidu"],r=(i="")=>{if(!i)return"other";let t=i.toLowerCase();return e.browser.find(i=>t.includes(i))||(o.includes(t)?"social":"other")},n=["wearable","mobile","tablet"],a=i=>n.includes(i)?"coarse":"fine",l=(i="")=>{if(!i)return"unix";let t=i.toLowerCase();return e.os.find(i=>t.includes(i))||"unix"},h=i=>{if(!i||"string"!=typeof i)return null;let e=new t.default(i).getResult(),o=s(e.device.type);return{pointer:a(o),device:o,browser:r(e.browser.name),os:l(e.os.name)}},u=(i,t)=>!i||Object.entries(i).every(([i,e])=>t[i]===e),f=i=>{if(0===i.length)return null;if(1===i.length)return i[0].slug;let t=Math.random()*i.reduce((i,{split:t})=>i+t,0);return(i.find(({split:i})=>(t-=i)<=0)||i[0]).slug},c="visi",g="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",d=i=>new Promise(t=>setTimeout(t,i)),v=async(i=1e3,t)=>(await d(i),t?.abort(),null),p=(i=3e3,t,e)=>{let s=new AbortController;return Promise.race([fetch(t,{...e,signal:s.signal}),v(i,s)])};class m{#i;constructor({organizationId:i,environment:t,state:e,config:s,fetchTimeout:o}){this.organizationId="",this.environment="develop",this.#i=null,this.config=null,this._fetchConfig=async i=>{if(this.config)return;if(!this.#i)throw Error("No config fetch setup provided");let t=await p(this.#i.timeout,this.#i.url,i);if(!t||!t.ok)throw Error("Configuration fetch timed-out");this.config=await t.json()},this.loadConfig=i=>{this.config=i},this.generateVisitorId=()=>[c,(function(i=5){return i&&"number"==typeof i?Array(i).fill("").reduce(i=>i+=g.charAt(Math.floor(Math.random()*g.length)),""):""})(26).toUpperCase()].join("_"),this.getVisitorCookieName=()=>"visitorId",this.validateTestValue=(i,t)=>{if(!this.config)throw Error("Config is required before validating, either use `.fetchConfig()`, .loadConfig(config) or provide it during setup");let e=this.config.tests[i];if(!e)throw Error(`No config found for ${i}`);return!!e.options.find(i=>i.slug===t)},this.validateVisitorId=i=>{let t=i.split("_");if(2!==t.length)return!1;let[e,s]=t;return e===c&&26===s.length},this.organizationId=i,this.environment=t,s?this.config=s:this.#i={url:[
|
|
1
|
+
Object.defineProperty(exports,"__esModule",{value:!0});var i=require("ua-parser-js"),t=i&&i.__esModule?i:{default:i};const e={device:["wearable","mobile","tablet","console","smarttv","embedded","desktop"],browser:["chrome","safari","firefox","edge","ie","samsung internet","social","other"],os:["mac os","ios","android","windows","unix"]},s=i=>i&&e.device.includes(i)?i:"desktop",o=["tiktok","wechat","weibo","snapchat","klarna","Line","instagram","facebook","alipay","Baidu"],r=(i="")=>{if(!i)return"other";let t=i.toLowerCase();return e.browser.find(i=>t.includes(i))||(o.includes(t)?"social":"other")},n=["wearable","mobile","tablet"],a=i=>n.includes(i)?"coarse":"fine",l=(i="")=>{if(!i)return"unix";let t=i.toLowerCase();return e.os.find(i=>t.includes(i))||"unix"},h=i=>{if(!i||"string"!=typeof i)return null;let e=new t.default(i).getResult(),o=s(e.device.type);return{pointer:a(o),device:o,browser:r(e.browser.name),os:l(e.os.name)}},u=(i,t)=>!i||Object.entries(i).every(([i,e])=>t[i]===e),f=i=>{if(0===i.length)return null;if(1===i.length)return i[0].slug;let t=Math.random()*i.reduce((i,{split:t})=>i+t,0);return(i.find(({split:i})=>(t-=i)<=0)||i[0]).slug},c="visi",g="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",d=i=>new Promise(t=>setTimeout(t,i)),v=async(i=1e3,t)=>(await d(i),t?.abort(),null),p=(i=3e3,t,e)=>{let s=new AbortController;return Promise.race([fetch(t,{...e,signal:s.signal}),v(i,s)])};class m{#i;constructor({organizationId:i,environment:t,state:e,config:s,fetchTimeout:o,baseUrl:r}){this.organizationId="",this.environment="develop",this.#i=null,this.config=null,this._fetchConfig=async i=>{if(this.config)return;if(!this.#i)throw Error("No config fetch setup provided");let t=await p(this.#i.timeout,this.#i.url,i);if(!t||!t.ok)throw Error("Configuration fetch timed-out");this.config=await t.json()},this.loadConfig=i=>{this.config=i},this.generateVisitorId=()=>[c,(function(i=5){return i&&"number"==typeof i?Array(i).fill("").reduce(i=>i+=g.charAt(Math.floor(Math.random()*g.length)),""):""})(26).toUpperCase()].join("_"),this.getVisitorCookieName=()=>"visitorId",this.validateTestValue=(i,t)=>{if(!this.config)throw Error("Config is required before validating, either use `.fetchConfig()`, .loadConfig(config) or provide it during setup");let e=this.config.tests[i];if(!e)throw Error(`No config found for ${i}`);return!!e.options.find(i=>i.slug===t)},this.validateVisitorId=i=>{let t=i.split("_");if(2!==t.length)return!1;let[e,s]=t;return e===c&&26===s.length},this.organizationId=i,this.environment=t,this._baseUrl=r||"https://improve.obelism.studio",s?this.config=s:this.#i={url:[`${this._baseUrl}/config`,i,t,e||"active"].join("/"),timeout:o||3e3}}}exports.ImproveServerSDK=class extends m{#t;#e;constructor({token:i,...t}){super(t),this.#t={},this.fetchConfig=async i=>this._fetchConfig({...i,headers:{...i?.headers,token:this.#e}}),this.getFlagConfig=i=>this.config?.flags?.[i],this.getTestConfig=i=>this.config?.tests?.[i],this.getFlagValue=(i,t,e)=>{let s=this.getFlagConfig(i);if(!s||!this.config)return null;if(!t)return s.options[0].slug;if(this.#t?.[t]?.[e]?.[i])return this.#t[t][e][i];if(this.#t[t]=this.#t[t]||{},this.#t[t][e]=this.#t[t][e]||h(e),!u(this.config.audience[s.audience],this.#t[t][e]))return s.options[0].slug;let o=f(s.options);return o?(this.#t[t][e][i]=o,o):null},this.getTestValue=(i,t,e)=>{let s=this.getTestConfig(i);if(!s||!this.config)return null;if(!t||!e)return s.defaultValue;if(this.#t?.[t]?.[e]?.[i])return this.#t[t][e][i];if(this.#t[t]=this.#t[t]||{},this.#t[t][e]=this.#t[t][e]||h(e),!u(this.config.audience[s.audience],this.#t[t][e]))return s.defaultValue;if(s.allocation<100&&100*Math.random()>s.allocation)return this.#t[t][e][i]=s.defaultValue,this.#t[t][e][i];let o=f(s.options);return o?(this.#t[t][e][i]=o,o):null},this.#e=i}};
|
package/dist/server.d.ts
CHANGED
|
@@ -6,7 +6,8 @@ declare class BaseImproveSDK {
|
|
|
6
6
|
organizationId: string;
|
|
7
7
|
environment: ImproveEnvironmentOption;
|
|
8
8
|
config: ImproveConfiguration | null;
|
|
9
|
-
|
|
9
|
+
_baseUrl: undefined | string;
|
|
10
|
+
constructor({ organizationId, environment, state, config, fetchTimeout, baseUrl, }: ImproveSetupArgs);
|
|
10
11
|
_fetchConfig: (config?: RequestInit) => Promise<void>;
|
|
11
12
|
loadConfig: (config: ImproveConfiguration) => void;
|
|
12
13
|
generateVisitorId: () => string;
|
|
@@ -15,7 +16,7 @@ declare class BaseImproveSDK {
|
|
|
15
16
|
validateVisitorId: (possibleVisitorId: string) => boolean;
|
|
16
17
|
}
|
|
17
18
|
|
|
18
|
-
type ImproveServerSetupArgs = (Omit<ImproveSetupArgs, 'config'> & {
|
|
19
|
+
type ImproveServerSetupArgs = (Omit<ImproveSetupArgs, 'config' | 'baseUrl'> & {
|
|
19
20
|
config: ImproveConfiguration;
|
|
20
21
|
}) | (Omit<ImproveSetupArgs, 'config'> & {
|
|
21
22
|
token: string;
|
package/dist/server.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import i from"ua-parser-js";let t={device:["wearable","mobile","tablet","console","smarttv","embedded","desktop"],browser:["chrome","safari","firefox","edge","ie","samsung internet","social","other"],os:["mac os","ios","android","windows","unix"]},e=i=>i&&t.device.includes(i)?i:"desktop",s=["tiktok","wechat","weibo","snapchat","klarna","Line","instagram","facebook","alipay","Baidu"],o=(i="")=>{if(!i)return"other";let e=i.toLowerCase();return t.browser.find(i=>e.includes(i))||(s.includes(e)?"social":"other")},r=["wearable","mobile","tablet"],n=i=>r.includes(i)?"coarse":"fine",a=(i="")=>{if(!i)return"unix";let e=i.toLowerCase();return t.os.find(i=>e.includes(i))||"unix"},l=t=>{if(!t||"string"!=typeof t)return null;let s=new i(t).getResult(),r=e(s.device.type);return{pointer:n(r),device:r,browser:o(s.browser.name),os:a(s.os.name)}},h=(i,t)=>!i||Object.entries(i).every(([i,e])=>t[i]===e),u=i=>{if(0===i.length)return null;if(1===i.length)return i[0].slug;let t=Math.random()*i.reduce((i,{split:t})=>i+t,0);return(i.find(({split:i})=>(t-=i)<=0)||i[0]).slug},f="visi",c="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",g=i=>new Promise(t=>setTimeout(t,i)),d=async(i=1e3,t)=>(await g(i),t?.abort(),null),v=(i=3e3,t,e)=>{let s=new AbortController;return Promise.race([fetch(t,{...e,signal:s.signal}),d(i,s)])};class m{#i;constructor({organizationId:i,environment:t,state:e,config:s,fetchTimeout:o}){this.organizationId="",this.environment="develop",this.#i=null,this.config=null,this._fetchConfig=async i=>{if(this.config)return;if(!this.#i)throw Error("No config fetch setup provided");let t=await v(this.#i.timeout,this.#i.url,i);if(!t||!t.ok)throw Error("Configuration fetch timed-out");this.config=await t.json()},this.loadConfig=i=>{this.config=i},this.generateVisitorId=()=>[f,(function(i=5){return i&&"number"==typeof i?Array(i).fill("").reduce(i=>i+=c.charAt(Math.floor(Math.random()*c.length)),""):""})(26).toUpperCase()].join("_"),this.getVisitorCookieName=()=>"visitorId",this.validateTestValue=(i,t)=>{if(!this.config)throw Error("Config is required before validating, either use `.fetchConfig()`, .loadConfig(config) or provide it during setup");let e=this.config.tests[i];if(!e)throw Error(`No config found for ${i}`);return!!e.options.find(i=>i.slug===t)},this.validateVisitorId=i=>{let t=i.split("_");if(2!==t.length)return!1;let[e,s]=t;return e===f&&26===s.length},this.organizationId=i,this.environment=t,s?this.config=s:this.#i={url:[
|
|
1
|
+
import i from"ua-parser-js";let t={device:["wearable","mobile","tablet","console","smarttv","embedded","desktop"],browser:["chrome","safari","firefox","edge","ie","samsung internet","social","other"],os:["mac os","ios","android","windows","unix"]},e=i=>i&&t.device.includes(i)?i:"desktop",s=["tiktok","wechat","weibo","snapchat","klarna","Line","instagram","facebook","alipay","Baidu"],o=(i="")=>{if(!i)return"other";let e=i.toLowerCase();return t.browser.find(i=>e.includes(i))||(s.includes(e)?"social":"other")},r=["wearable","mobile","tablet"],n=i=>r.includes(i)?"coarse":"fine",a=(i="")=>{if(!i)return"unix";let e=i.toLowerCase();return t.os.find(i=>e.includes(i))||"unix"},l=t=>{if(!t||"string"!=typeof t)return null;let s=new i(t).getResult(),r=e(s.device.type);return{pointer:n(r),device:r,browser:o(s.browser.name),os:a(s.os.name)}},h=(i,t)=>!i||Object.entries(i).every(([i,e])=>t[i]===e),u=i=>{if(0===i.length)return null;if(1===i.length)return i[0].slug;let t=Math.random()*i.reduce((i,{split:t})=>i+t,0);return(i.find(({split:i})=>(t-=i)<=0)||i[0]).slug},f="visi",c="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",g=i=>new Promise(t=>setTimeout(t,i)),d=async(i=1e3,t)=>(await g(i),t?.abort(),null),v=(i=3e3,t,e)=>{let s=new AbortController;return Promise.race([fetch(t,{...e,signal:s.signal}),d(i,s)])};class m{#i;constructor({organizationId:i,environment:t,state:e,config:s,fetchTimeout:o,baseUrl:r}){this.organizationId="",this.environment="develop",this.#i=null,this.config=null,this._fetchConfig=async i=>{if(this.config)return;if(!this.#i)throw Error("No config fetch setup provided");let t=await v(this.#i.timeout,this.#i.url,i);if(!t||!t.ok)throw Error("Configuration fetch timed-out");this.config=await t.json()},this.loadConfig=i=>{this.config=i},this.generateVisitorId=()=>[f,(function(i=5){return i&&"number"==typeof i?Array(i).fill("").reduce(i=>i+=c.charAt(Math.floor(Math.random()*c.length)),""):""})(26).toUpperCase()].join("_"),this.getVisitorCookieName=()=>"visitorId",this.validateTestValue=(i,t)=>{if(!this.config)throw Error("Config is required before validating, either use `.fetchConfig()`, .loadConfig(config) or provide it during setup");let e=this.config.tests[i];if(!e)throw Error(`No config found for ${i}`);return!!e.options.find(i=>i.slug===t)},this.validateVisitorId=i=>{let t=i.split("_");if(2!==t.length)return!1;let[e,s]=t;return e===f&&26===s.length},this.organizationId=i,this.environment=t,this._baseUrl=r||"https://improve.obelism.studio",s?this.config=s:this.#i={url:[`${this._baseUrl}/config`,i,t,e||"active"].join("/"),timeout:o||3e3}}}class p extends m{#t;#e;constructor({token:i,...t}){super(t),this.#t={},this.fetchConfig=async i=>this._fetchConfig({...i,headers:{...i?.headers,token:this.#e}}),this.getFlagConfig=i=>this.config?.flags?.[i],this.getTestConfig=i=>this.config?.tests?.[i],this.getFlagValue=(i,t,e)=>{let s=this.getFlagConfig(i);if(!s||!this.config)return null;if(!t)return s.options[0].slug;if(this.#t?.[t]?.[e]?.[i])return this.#t[t][e][i];if(this.#t[t]=this.#t[t]||{},this.#t[t][e]=this.#t[t][e]||l(e),!h(this.config.audience[s.audience],this.#t[t][e]))return s.options[0].slug;let o=u(s.options);return o?(this.#t[t][e][i]=o,o):null},this.getTestValue=(i,t,e)=>{let s=this.getTestConfig(i);if(!s||!this.config)return null;if(!t||!e)return s.defaultValue;if(this.#t?.[t]?.[e]?.[i])return this.#t[t][e][i];if(this.#t[t]=this.#t[t]||{},this.#t[t][e]=this.#t[t][e]||l(e),!h(this.config.audience[s.audience],this.#t[t][e]))return s.defaultValue;if(s.allocation<100&&100*Math.random()>s.allocation)return this.#t[t][e][i]=s.defaultValue,this.#t[t][e][i];let o=u(s.options);return o?(this.#t[t][e][i]=o,o):null},this.#e=i}}export{p as ImproveServerSDK};
|
package/dist/types.d.ts
CHANGED