writetrack 0.10.3 → 0.12.0

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,21 +1,10 @@
1
- import { WriteTrack } from 'writetrack';
1
+ import { WriteTrack, SessionAnalysis } from 'writetrack';
2
+ import type { BaseBindingOptions } from 'writetrack';
2
3
  import { Ref, ShallowRef } from 'vue';
3
4
 
4
- export interface UseWriteTrackOptions {
5
- /** WriteTrack license key */
6
- license?: string;
7
- /** User identifier included in metadata */
8
- userId?: string;
9
- /** Content identifier included in metadata */
10
- contentId?: string;
11
- /** Additional metadata */
12
- metadata?: Record<string, unknown>;
13
- /** Auto-start tracking when element is available (default: true) */
14
- autoStart?: boolean;
15
- /** URL to the WASM binary for analysis. If omitted, uses default loader path. */
16
- wasmUrl?: string;
17
- /** Enable IndexedDB session persistence and auto-resume. Requires contentId. */
18
- persist?: boolean;
5
+ export interface UseWriteTrackOptions extends BaseBindingOptions {
6
+ /** Subscribe to real-time analysis events. Requires wasmUrl or default WASM loader. */
7
+ analysis?: boolean;
19
8
  }
20
9
 
21
10
  export interface UseWriteTrackReturn {
@@ -29,6 +18,12 @@ export interface UseWriteTrackReturn {
29
18
  isTracking: Ref<boolean>;
30
19
  /** Access to the underlying WriteTrack instance */
31
20
  tracker: ShallowRef<WriteTrack | null>;
21
+ /** Whether the tracker has initialised and is ready */
22
+ isReady: Ref<boolean>;
23
+ /** Latest analysis result (when `analysis: true`) */
24
+ analysis: ShallowRef<SessionAnalysis | null>;
25
+ /** Latest error from WASM or tracker initialisation */
26
+ error: ShallowRef<Error | null>;
32
27
  }
33
28
 
34
29
  /**
package/dist/vue/index.js CHANGED
@@ -1 +1 @@
1
- import{ref as p,onMounted as k,onUnmounted as T,shallowRef as d}from"vue";import{WriteTrack as n}from"writetrack";function W(r,i={}){let{autoStart:l=!0,...a}=i,e=d(null),t=p(!1);function s(){r.value&&(e.value=new n({target:r.value,...a}),l&&(a.persist?e.value.ready.then(()=>{e.value&&(e.value.start(),t.value=!0)}):(e.value.start(),t.value=!0)))}function u(){e.value&&(e.value.stop(),e.value=null,t.value=!1)}k(()=>{s()}),T(()=>{u()});function o(){e.value&&!t.value&&(e.value.start(),t.value=!0)}function c(){e.value&&t.value&&(e.value.stop(),t.value=!1)}function v(){if(!r.value)return;let f=t.value;u(),e.value=new n({target:r.value,...a}),f&&(a.persist?e.value.ready.then(()=>{e.value&&(e.value.start(),t.value=!0)}):(e.value.start(),t.value=!0))}return{reset:v,start:o,stop:c,isTracking:t,tracker:e}}export{W as useWriteTrack};
1
+ import{ref as f,onMounted as R,onUnmounted as S,shallowRef as u}from"vue";import{WriteTrack as m}from"writetrack";var c=class{constructor(t){this._unsubs=[];this._opts=t,this._state={tracker:null,isReady:!1,isTracking:!1,analysis:null,error:null},this._init(t.target,t.writeTrackOptions)}_init(t,i){let s=new m({...i,target:t});if(this._state.tracker=s,this._unsubs=[],this._opts.onTick){let e=s.on("tick",this._opts.onTick);this._unsubs.push(e)}if(this._opts.analysis){let e=s.on("analysis",o=>{this._state.analysis=o,this._notify()});this._unsubs.push(e);let a=s.on("wasm:error",o=>{this._state.error=o,this._notify()});this._unsubs.push(a)}this._opts.autoStart!==!1?!!i.persist?s.ready.then(()=>{s.start(),this._state.isReady=!0,this._state.isTracking=!0,this._notify(),this._opts.onReady?.(s)}).catch(a=>{this._state.error=a,this._notify()}):(s.start(),this._state.isReady=!0,this._state.isTracking=!0,this._notify(),queueMicrotask(()=>{this._opts.onReady?.(s)})):(this._state.isReady=!0,this._notify())}_notify(){this._opts.onStateChange({tracker:this._state.tracker,isReady:this._state.isReady,isTracking:this._state.isTracking,analysis:this._state.analysis,error:this._state.error})}getState(){return{tracker:this._state.tracker,isReady:this._state.isReady,isTracking:this._state.isTracking,analysis:this._state.analysis,error:this._state.error}}start(){this._state.tracker&&!this._state.isTracking&&(this._state.tracker.start(),this._state.isTracking=!0,this._notify())}stop(){this._state.tracker&&this._state.isTracking&&(this._state.tracker.stop(),this._state.isTracking=!1,this._notify())}async destroy(){this._state.tracker&&await this._state.tracker.stopAndWait();for(let t of this._unsubs)t();this._unsubs=[],this._state.tracker=null,this._state.isReady=!1,this._state.isTracking=!1,this._state.analysis=null,this._state.error=null,this._notify()}async reset(t,i){await this.destroy(),this._init(t,i??this._opts.writeTrackOptions)}};function b(n,t={}){let{autoStart:i=!0,analysis:s,onTick:h,onReady:e,...a}=t,o=u(null),p=f(!1),y=f(!1),k=u(null),_=u(null),r=null;function d(l){o.value=l.tracker,p.value=l.isTracking,y.value=l.isReady,k.value=l.analysis,_.value=l.error}R(()=>{n.value&&(r=new c({target:n.value,writeTrackOptions:a,autoStart:i,analysis:s,onTick:h,onReady:e,onStateChange:d}))}),S(()=>{r?.destroy(),r=null});function T(){r?.start()}function v(){r?.stop()}function g(){!n.value||!r||r.reset(n.value,a)}return{reset:g,start:T,stop:v,isTracking:p,tracker:o,isReady:y,analysis:k,error:_}}export{b as useWriteTrack};
Binary file
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "writetrack",
3
- "version": "0.10.3",
3
+ "version": "0.12.0",
4
4
  "private": false,
5
- "description": "Lightweight keystroke telemetry capture for web applications",
5
+ "description": "Lightweight keystroke dynamics capture for web applications",
6
6
  "main": "dist/index.cjs",
7
7
  "module": "dist/esm/index.js",
8
8
  "types": "dist/esm/index.d.ts",
@@ -71,6 +71,10 @@
71
71
  "browser": "./dist/browser/viz.js",
72
72
  "import": "./dist/esm/viz.js",
73
73
  "require": "./dist/viz.cjs"
74
+ },
75
+ "./testing": {
76
+ "types": "./dist/esm/testing.d.ts",
77
+ "import": "./dist/esm/testing.js"
74
78
  }
75
79
  },
76
80
  "peerDependencies": {
@@ -137,6 +141,8 @@
137
141
  "dist/esm/viz.d.ts",
138
142
  "dist/browser/viz.js",
139
143
  "dist/viz.cjs",
144
+ "dist/esm/testing.js",
145
+ "dist/esm/testing.d.ts",
140
146
  "dist/react/",
141
147
  "dist/vue/",
142
148
  "dist/tiptap/",
@@ -156,7 +162,10 @@
156
162
  "bin": {
157
163
  "writetrack": "./cli/init.js"
158
164
  },
159
- "sideEffects": false,
165
+ "sideEffects": [
166
+ "./dist/tinymce/index.js",
167
+ "./src/tinymce/index.ts"
168
+ ],
160
169
  "scripts": {
161
170
  "postpublish": "rm -rf ./package",
162
171
  "prepare": "husky"