@nuralogix.ai/web-measurement-embedded-app 0.1.0-alpha.10 → 0.1.0-alpha.12

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.
@@ -24,5 +24,6 @@
24
24
  "WAITING_FOR_RESULTS": "Aguardando resultados",
25
25
  "WARNING_CONSTRAINT_DISTANCE": "O seu rosto está muito longe\nAproximar-se da câmara",
26
26
  "WARNING_CONSTRAINT_GAZE": "Olhe diretamente para a câmara",
27
- "WARNING_FACE_NOT_DETECTED": "Rosto não detectado. Centre seu rosto no quadro antes de começar."
28
- }
27
+ "WARNING_FACE_NOT_DETECTED": "Rosto não detectado. Centre seu rosto no quadro antes de começar.",
28
+ "NO_DEVICES_FOUND": "Nenhum dispositivo de câmera encontrado"
29
+ }
@@ -24,5 +24,6 @@
24
24
  "WAITING_FOR_RESULTS": "等待结果",
25
25
  "WARNING_CONSTRAINT_DISTANCE": "面部距离手机太远\n请靠近摄像头",
26
26
  "WARNING_CONSTRAINT_GAZE": "请正向面对摄像头",
27
- "WARNING_FACE_NOT_DETECTED": "未检测到面部。开始前请将您的面部居中在框架中。"
28
- }
27
+ "WARNING_FACE_NOT_DETECTED": "未检测到面部。开始前请将您的面部居中在框架中。",
28
+ "NO_DEVICES_FOUND": "未找到可用的摄像头设备"
29
+ }
@@ -24,5 +24,6 @@
24
24
  "WAITING_FOR_RESULTS": "Warten auf Ergebnisse",
25
25
  "WARNING_CONSTRAINT_DISTANCE": "Das Gesicht ist zu weit entfernt\nBitte bewegen Sie sich näher zur Kamera",
26
26
  "WARNING_CONSTRAINT_GAZE": "Bitte schauen Sie direkt in die Kamera",
27
- "WARNING_FACE_NOT_DETECTED": "Gesicht nicht erkannt. Zentrieren Sie Ihr Gesicht im Rahmen, bevor Sie beginnen."
28
- }
27
+ "WARNING_FACE_NOT_DETECTED": "Gesicht nicht erkannt. Zentrieren Sie Ihr Gesicht im Rahmen, bevor Sie beginnen.",
28
+ "NO_DEVICES_FOUND": "Keine Kamera-Geräte gefunden"
29
+ }
@@ -34,5 +34,6 @@
34
34
  "WAITING_FOR_RESULTS": "Waiting for results",
35
35
  "WARNING_CONSTRAINT_DISTANCE": "The face is too far. Please try to move closer to the camera",
36
36
  "WARNING_CONSTRAINT_GAZE": "Please look directly into the camera",
37
- "WARNING_FACE_NOT_DETECTED": "Face not detected. Center your face in the frame before starting."
38
- }
37
+ "WARNING_FACE_NOT_DETECTED": "Face not detected. Center your face in the frame before starting.",
38
+ "NO_DEVICES_FOUND": "No camera devices found"
39
+ }
@@ -24,5 +24,6 @@
24
24
  "WAITING_FOR_RESULTS": "Esperando resultados.",
25
25
  "WARNING_CONSTRAINT_DISTANCE": "Su cara está demasiado lejos\nAcérquese más a la cámara",
26
26
  "WARNING_CONSTRAINT_GAZE": "Por favor, mire directamente a la cámara",
27
- "WARNING_FACE_NOT_DETECTED": "Cara no detectada. Centre su cara en el marco antes de comenzar."
28
- }
27
+ "WARNING_FACE_NOT_DETECTED": "Cara no detectada. Centre su cara en el marco antes de comenzar.",
28
+ "NO_DEVICES_FOUND": "No se encontraron cámaras"
29
+ }
@@ -24,5 +24,6 @@
24
24
  "WAITING_FOR_RESULTS": "In attesa dei risultati",
25
25
  "WARNING_CONSTRAINT_DISTANCE": "Il tuo volto è troppo lontano\nPer favore avvicinati alla fotocamera",
26
26
  "WARNING_CONSTRAINT_GAZE": "Per favore guarda direttamente in camera",
27
- "WARNING_FACE_NOT_DETECTED": "Volto non rilevato. Centra il tuo volto nell'inquadratura prima di iniziare."
28
- }
27
+ "WARNING_FACE_NOT_DETECTED": "Volto non rilevato. Centra il tuo volto nell'inquadratura prima di iniziare.",
28
+ "NO_DEVICES_FOUND": "Nessuna fotocamera trovata"
29
+ }
@@ -24,5 +24,6 @@
24
24
  "WAITING_FOR_RESULTS": "結果が出るまで待機しています",
25
25
  "WARNING_CONSTRAINT_DISTANCE": "顔が離れすぎています\nカメラにもっと近付いてみてください",
26
26
  "WARNING_CONSTRAINT_GAZE": "カメラの方を真っ直ぐ見てください",
27
- "WARNING_FACE_NOT_DETECTED": "顔が検出されません。開始前にフレーム内で顔を中央に配置してください。"
28
- }
27
+ "WARNING_FACE_NOT_DETECTED": "顔が検出されません。開始前にフレーム内で顔を中央に配置してください。",
28
+ "NO_DEVICES_FOUND": "利用可能なカメラデバイスが見つかりません"
29
+ }
@@ -24,5 +24,6 @@
24
24
  "WAITING_FOR_RESULTS": "À espera de resultados",
25
25
  "WARNING_CONSTRAINT_DISTANCE": "O seu rosto está demasiado longe\nTente aproximar-se da câmara",
26
26
  "WARNING_CONSTRAINT_GAZE": "Olhe diretamente para a câmara",
27
- "WARNING_FACE_NOT_DETECTED": "Rosto não detectado. Centre o seu rosto na moldura antes de começar."
28
- }
27
+ "WARNING_FACE_NOT_DETECTED": "Rosto não detectado. Centre o seu rosto na moldura antes de começar.",
28
+ "NO_DEVICES_FOUND": "Nenhum dispositivo de câmara encontrado"
29
+ }
package/dist/stylex.css CHANGED
@@ -131,14 +131,6 @@
131
131
  justify-content: center;
132
132
  }
133
133
 
134
- .justifyContent-x1nhvcw1 {
135
- justify-content: flex-start;
136
- }
137
-
138
- .position-x10l6tqk {
139
- position: absolute;
140
- }
141
-
142
134
  .position-x1n2onr6 {
143
135
  position: relative;
144
136
  }
@@ -151,10 +143,6 @@
151
143
  text-align: left;
152
144
  }
153
145
 
154
- .transform-xuuh30 {
155
- transform: translateX(-50%);
156
- }
157
-
158
146
  .visibility-xlshs6z {
159
147
  visibility: hidden;
160
148
  }
@@ -165,10 +153,6 @@
165
153
  height: 100%;
166
154
  }
167
155
 
168
- .left-x1nrll8i {
169
- left: 50%;
170
- }
171
-
172
156
  .marginBottom-x1yztbdb {
173
157
  margin-bottom: 16px;
174
158
  }
package/lib/index.d.ts CHANGED
@@ -962,7 +962,12 @@ interface Log {
962
962
  interface MeasurementEmbedded {
963
963
  init(options: MeasurementEmbeddedAppOptions): void;
964
964
  destroy(): void;
965
- cancel(): Promise<boolean>;
965
+ /**
966
+ * Cancel the measurement
967
+ * @param {boolean} reset - whether to reset the Web SDK or just close the camera and hide the mask
968
+ * @returns {Promise<boolean>} - whether the cancellation was successful
969
+ */
970
+ cancel(reset: boolean): Promise<boolean>;
966
971
  getLogs: () => Promise<Log[]>;
967
972
  setTheme(theme: 'light' | 'dark'): void;
968
973
  setLanguage(language: SupportedLanguage): void;
@@ -1093,7 +1098,7 @@ declare class MeasurementEmbeddedApp implements MeasurementEmbedded {
1093
1098
  destroy(): void;
1094
1099
  setTheme(theme: 'light' | 'dark'): void;
1095
1100
  setLanguage(language: SupportedLanguage): void;
1096
- cancel(): Promise<boolean>;
1101
+ cancel(reset: boolean): Promise<boolean>;
1097
1102
  getLogs(): Promise<Log[]>;
1098
1103
  }
1099
1104
 
package/lib/index.mjs CHANGED
@@ -1 +1 @@
1
- const l={RESULTS:"results",ERROR:"error",APPEVENT:"appEvent",CANCELLED:"cancelled",LOGS:"logs"};var f=(e=>(e.measurement="Measurement",e.collector="Collector",e.camera="Camera",e.app="App",e))(f||{});const o={INFO:"INFO",WARN:"WARN",ERROR:"ERROR"},i={CAMERA_STARTED:"CAMERA_STARTED",APP_LOADED:"APP_LOADED",MEASUREMENT_STARTED:"MEASUREMENT_STARTED",MEASUREMENT_COMPLETED:"MEASUREMENT_COMPLETED",CAMERA_PERMISSION_GRANTED:"CAMERA_PERMISSION_GRANTED",INTERMEDIATE_RESULTS:"INTERMEDIATE_RESULTS",RESULTS_RECEIVED:"RESULTS_RECEIVED",MEASUREMENT_CANCELED:"MEASUREMENT_CANCELED",CONSTRAINT_VIOLATION:"CONSTRAINT_VIOLATION",PAGE_UNLOADED:"PAGE_UNLOADED",PAGE_VISIBILITY_CHANGE:"PAGE_VISIBILITY_CHANGE"},g={CAMERA_STARTED:{event:i.CAMERA_STARTED,level:o.INFO},APP_LOADED:{event:i.APP_LOADED,level:o.INFO},MEASUREMENT_STARTED:{event:i.MEASUREMENT_STARTED,level:o.INFO},MEASUREMENT_COMPLETED:{event:i.MEASUREMENT_COMPLETED,level:o.INFO},CAMERA_PERMISSION_GRANTED:{event:i.CAMERA_PERMISSION_GRANTED,level:o.INFO},INTERMEDIATE_RESULTS:{event:i.INTERMEDIATE_RESULTS,level:o.INFO},RESULTS_RECEIVED:{event:i.RESULTS_RECEIVED,level:o.INFO},MEASUREMENT_CANCELED:{event:i.MEASUREMENT_CANCELED,level:o.WARN},CONSTRAINT_VIOLATION:{event:i.CONSTRAINT_VIOLATION,level:o.ERROR},PAGE_UNLOADED:{event:i.PAGE_UNLOADED,level:o.INFO},PAGE_VISIBILITY_CHANGE:{event:i.PAGE_VISIBILITY_CHANGE,level:o.INFO}},_={DESTROY:"destroy",CANCEL:"cancel",SET_THEME:"setTheme",SET_LANGUAGE:"setLanguage",GET_LOGS:"getLogs"};var v=(e=>(e.CAMERA_PERMISSION_DENIED="CAMERA_PERMISSION_DENIED",e.WORKER_ERROR="WORKER_ERROR",e.PROFILE_INFO_NOT_SET="PROFILE_INFO_NOT_SET",e.NO_DEVICES_FOUND="NO_DEVICES_FOUND",e.PAGE_NOT_VISIBLE="PAGE_NOT_VISIBLE",e.CAMERA_START_FAILED="CAMERA_START_FAILED",e.MEASUREMENT_LOW_SNR="MEASUREMENT_LOW_SNR",e.COLLECTOR="COLLECTOR",e.WEBSOCKET_DISCONNECTED="WEBSOCKET_DISCONNECTED",e))(v||{}),u=e=>{throw TypeError(e)},M=(e,t,E)=>t.has(e)||u("Cannot "+E),n=(e,t,E)=>(M(e,t,"read from private field"),E?E.call(e):t.get(e)),O=(e,t,E)=>t.has(e)?u("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,E),F=(e,t,E,s)=>(M(e,t,"write to private field"),t.set(e,E),E),r,T,c,A;const C=class a{constructor(t){O(this,A),F(this,A,new Int32Array(t))}lock(){for(;;){if(Atomics.compareExchange(n(this,A),n(a,c),n(a,T),n(a,r))==n(a,T))return;Atomics.wait(n(this,A),n(a,c),n(a,r))}}unlock(){if(Atomics.compareExchange(n(this,A),n(a,c),n(a,r),n(a,T))!=n(a,r))throw new Error("Tried to unlock while not holding the mutex");Atomics.notify(n(this,A),n(a,c))}AsyncLock(t){const E=this;async function s(){for(;;){if(Atomics.compareExchange(n(E,A),n(a,c),n(a,T),n(a,r))==n(a,T)){t(),E.unlock();return}await Atomics.waitAsync(n(E,A),n(a,c),n(a,r)).value}}s()}};r=new WeakMap,T=new WeakMap,c=new WeakMap,A=new WeakMap,O(C,r,1),O(C,T,0),O(C,c,0);const B={SEX_NOT_PROVIDED:1,SEX_ASSIGNED_MALE_AT_BIRTH:2,SEX_ASSIGNED_FEMALE_AT_BIRTH:3,DIABETES_NONE:4,DIABETES_TYPE1:5,DIABETES_TYPE2:6,SMOKER_TRUE:0,SMOKER_FALSE:1,BLOOD_PRESSURE_MEDICATION_TRUE:1,BLOOD_PRESSURE_MEDICATION_FALSE:0},k=document.documentElement.style.overflow;class W{#e=document.createElement("div");#t=document.createElement("div");on={results:null,error:null,event:null};constructor(){this.#e.style.height="100%"}init(t){const{container:E,appPath:s,settings:R,profile:h,config:P,loadError:N,top:D=0,language:U,apiUrl:G="api.deepaffex.ai"}=t;this.#t=E,Object.assign(E.style,{position:"fixed",top:D,left:"0",width:"100vw",height:`calc(100vh - ${D})`}),document.body.appendChild(E);const I=E.attachShadow({mode:"open"});document.documentElement.style.overflow="hidden";const m="app",L=document.createElement("link");L.rel="stylesheet",L.href=`${s}/stylex.css`,I.appendChild(L);const p=document.createElement("link");p.rel="stylesheet",p.href=`${s}/${m}.css`,I.appendChild(p);const w=d=>{this.on.results&&this.on.results({...d.detail})},V=d=>{this.on.error&&this.on.error({...d.detail})},y=d=>{this.on.event&&this.on.event({...d.detail})};this.#e.addEventListener(l.RESULTS,w),this.#e.addEventListener(l.ERROR,V),this.#e.addEventListener(l.APPEVENT,y),I.appendChild(this.#e);const S=document.createElement("script");S.type="module",S.src=`${s}/${m}.mjs`,S.onload=()=>{import(S.src).then(d=>{d.app.init(this.#e,s,R,h,G,P,U)}).catch(()=>{N&&N("Failed to initialize Measurement Embedded React app")})},S.onerror=()=>{N&&N("Failed to load the measurement embedded app script")},I.appendChild(S)}destroy(){const t=new CustomEvent("measurement-embedded-app-action",{detail:{action:_.DESTROY,data:{}}});this.#e.dispatchEvent(t),document.documentElement.style.overflow=k,this.#t&&document.body.contains(this.#t)&&document.body.removeChild(this.#t)}setTheme(t){const E=new CustomEvent("measurement-embedded-app-action",{detail:{action:_.SET_THEME,data:{theme:t}}});this.#e.dispatchEvent(E)}setLanguage(t){const E=new CustomEvent("measurement-embedded-app-action",{detail:{action:_.SET_LANGUAGE,data:{language:t}}});this.#e.dispatchEvent(E)}async cancel(){return new Promise(t=>{const E=R=>{this.#e.removeEventListener(l.CANCELLED,E),t(R.detail.success)};this.#e.addEventListener(l.CANCELLED,E);const s=new CustomEvent("measurement-embedded-app-action",{detail:{action:_.CANCEL,data:{}}});this.#e.dispatchEvent(s)})}getLogs(){return new Promise(t=>{const E=R=>{this.#e.removeEventListener(l.LOGS,E),t(R.detail.logs)};this.#e.addEventListener(l.LOGS,E);const s=new CustomEvent("measurement-embedded-app-action",{detail:{action:_.GET_LOGS,data:{}}});this.#e.dispatchEvent(s)})}}export{v as ErrorCodes,g as appEvents,W as default,B as faceAttributeValue,l as measurementEmbeddedAppEvents};
1
+ const r={RESULTS:"results",ERROR:"error",APPEVENT:"appEvent",CANCELLED:"cancelled",LOGS:"logs"};var f=(e=>(e.measurement="Measurement",e.collector="Collector",e.camera="Camera",e.app="App",e))(f||{});const o={INFO:"INFO",WARN:"WARN",ERROR:"ERROR"},i={CAMERA_STARTED:"CAMERA_STARTED",APP_LOADED:"APP_LOADED",MEASUREMENT_STARTED:"MEASUREMENT_STARTED",MEASUREMENT_COMPLETED:"MEASUREMENT_COMPLETED",CAMERA_PERMISSION_GRANTED:"CAMERA_PERMISSION_GRANTED",INTERMEDIATE_RESULTS:"INTERMEDIATE_RESULTS",RESULTS_RECEIVED:"RESULTS_RECEIVED",MEASUREMENT_CANCELED:"MEASUREMENT_CANCELED",CONSTRAINT_VIOLATION:"CONSTRAINT_VIOLATION",PAGE_UNLOADED:"PAGE_UNLOADED",PAGE_VISIBILITY_CHANGE:"PAGE_VISIBILITY_CHANGE"},g={CAMERA_STARTED:{event:i.CAMERA_STARTED,level:o.INFO},APP_LOADED:{event:i.APP_LOADED,level:o.INFO},MEASUREMENT_STARTED:{event:i.MEASUREMENT_STARTED,level:o.INFO},MEASUREMENT_COMPLETED:{event:i.MEASUREMENT_COMPLETED,level:o.INFO},CAMERA_PERMISSION_GRANTED:{event:i.CAMERA_PERMISSION_GRANTED,level:o.INFO},INTERMEDIATE_RESULTS:{event:i.INTERMEDIATE_RESULTS,level:o.INFO},RESULTS_RECEIVED:{event:i.RESULTS_RECEIVED,level:o.INFO},MEASUREMENT_CANCELED:{event:i.MEASUREMENT_CANCELED,level:o.WARN},CONSTRAINT_VIOLATION:{event:i.CONSTRAINT_VIOLATION,level:o.ERROR},PAGE_UNLOADED:{event:i.PAGE_UNLOADED,level:o.INFO},PAGE_VISIBILITY_CHANGE:{event:i.PAGE_VISIBILITY_CHANGE,level:o.INFO}},_={DESTROY:"destroy",CANCEL:"cancel",SET_THEME:"setTheme",SET_LANGUAGE:"setLanguage",GET_LOGS:"getLogs"};var v=(e=>(e.CAMERA_PERMISSION_DENIED="CAMERA_PERMISSION_DENIED",e.WORKER_ERROR="WORKER_ERROR",e.PROFILE_INFO_NOT_SET="PROFILE_INFO_NOT_SET",e.NO_DEVICES_FOUND="NO_DEVICES_FOUND",e.PAGE_NOT_VISIBLE="PAGE_NOT_VISIBLE",e.CAMERA_START_FAILED="CAMERA_START_FAILED",e.MEASUREMENT_LOW_SNR="MEASUREMENT_LOW_SNR",e.COLLECTOR="COLLECTOR",e.WEBSOCKET_DISCONNECTED="WEBSOCKET_DISCONNECTED",e))(v||{}),M=e=>{throw TypeError(e)},u=(e,t,E)=>t.has(e)||M("Cannot "+E),n=(e,t,E)=>(u(e,t,"read from private field"),E?E.call(e):t.get(e)),L=(e,t,E)=>t.has(e)?M("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,E),F=(e,t,E,s)=>(u(e,t,"write to private field"),t.set(e,E),E),l,T,d,A;const h=class a{constructor(t){L(this,A),F(this,A,new Int32Array(t))}lock(){for(;;){if(Atomics.compareExchange(n(this,A),n(a,d),n(a,T),n(a,l))==n(a,T))return;Atomics.wait(n(this,A),n(a,d),n(a,l))}}unlock(){if(Atomics.compareExchange(n(this,A),n(a,d),n(a,l),n(a,T))!=n(a,l))throw new Error("Tried to unlock while not holding the mutex");Atomics.notify(n(this,A),n(a,d))}AsyncLock(t){const E=this;async function s(){for(;;){if(Atomics.compareExchange(n(E,A),n(a,d),n(a,T),n(a,l))==n(a,T)){t(),E.unlock();return}await Atomics.waitAsync(n(E,A),n(a,d),n(a,l)).value}}s()}};l=new WeakMap,T=new WeakMap,d=new WeakMap,A=new WeakMap,L(h,l,1),L(h,T,0),L(h,d,0);const B={SEX_NOT_PROVIDED:1,SEX_ASSIGNED_MALE_AT_BIRTH:2,SEX_ASSIGNED_FEMALE_AT_BIRTH:3,DIABETES_NONE:4,DIABETES_TYPE1:5,DIABETES_TYPE2:6,SMOKER_TRUE:0,SMOKER_FALSE:1,BLOOD_PRESSURE_MEDICATION_TRUE:1,BLOOD_PRESSURE_MEDICATION_FALSE:0},k=document.documentElement.style.overflow;class W{#e=document.createElement("div");#t=document.createElement("div");on={results:null,error:null,event:null};constructor(){this.#e.style.height="100%"}init(t){const{container:E,appPath:s,settings:R,profile:N,config:P,loadError:I,top:D=0,language:U,apiUrl:G="api.deepaffex.ai"}=t;this.#t=E,Object.assign(E.style,{position:"fixed",top:D,left:"0",width:"100vw",height:`calc(100vh - ${D})`}),document.body.appendChild(E);const O=E.attachShadow({mode:"open"});document.documentElement.style.overflow="hidden";const m="app",p=document.createElement("link");p.rel="stylesheet",p.href=`${s}/stylex.css`,O.appendChild(p);const C=document.createElement("link");C.rel="stylesheet",C.href=`${s}/${m}.css`,O.appendChild(C);const w=c=>{this.on.results&&this.on.results({...c.detail})},V=c=>{this.on.error&&this.on.error({...c.detail})},y=c=>{this.on.event&&this.on.event({...c.detail})};this.#e.addEventListener(r.RESULTS,w),this.#e.addEventListener(r.ERROR,V),this.#e.addEventListener(r.APPEVENT,y),O.appendChild(this.#e);const S=document.createElement("script");S.type="module",S.src=`${s}/${m}.mjs`,S.onload=()=>{import(S.src).then(c=>{c.app.init(this.#e,s,R,N,G,P,U)}).catch(()=>{I&&I("Failed to initialize Measurement Embedded React app")})},S.onerror=()=>{I&&I("Failed to load the measurement embedded app script")},O.appendChild(S)}destroy(){const t=new CustomEvent("measurement-embedded-app-action",{detail:{action:_.DESTROY,data:{}}});this.#e.dispatchEvent(t),document.documentElement.style.overflow=k,this.#t&&document.body.contains(this.#t)&&document.body.removeChild(this.#t)}setTheme(t){const E=new CustomEvent("measurement-embedded-app-action",{detail:{action:_.SET_THEME,data:{theme:t}}});this.#e.dispatchEvent(E)}setLanguage(t){const E=new CustomEvent("measurement-embedded-app-action",{detail:{action:_.SET_LANGUAGE,data:{language:t}}});this.#e.dispatchEvent(E)}async cancel(t){return new Promise(E=>{const s=N=>{this.#e.removeEventListener(r.CANCELLED,s),E(N.detail.reset)};this.#e.addEventListener(r.CANCELLED,s);const R=new CustomEvent("measurement-embedded-app-action",{detail:{action:_.CANCEL,data:{reset:t}}});this.#e.dispatchEvent(R)})}getLogs(){return new Promise(t=>{const E=R=>{this.#e.removeEventListener(r.LOGS,E),t(R.detail.logs)};this.#e.addEventListener(r.LOGS,E);const s=new CustomEvent("measurement-embedded-app-action",{detail:{action:_.GET_LOGS,data:{}}});this.#e.dispatchEvent(s)})}}export{v as ErrorCodes,g as appEvents,W as default,B as faceAttributeValue,r as measurementEmbeddedAppEvents};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuralogix.ai/web-measurement-embedded-app",
3
- "version": "0.1.0-alpha.10",
3
+ "version": "0.1.0-alpha.12",
4
4
  "description": "Web Measurement Embedded App",
5
5
  "contributors": [
6
6
  "Hamed Hassanzadeh Amin",