humanbehavior-js 0.4.27 → 0.5.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.
- package/README.md +151 -0
- package/package.json +114 -71
- package/packages/angular/dist/index.d.ts +46 -0
- package/packages/angular/dist/index.d.ts.map +1 -0
- package/packages/angular/dist/index.js +2 -0
- package/packages/angular/dist/index.js.map +1 -0
- package/packages/angular/dist/index.mjs +2 -0
- package/packages/angular/dist/index.mjs.map +1 -0
- package/packages/browser/dist/index.d.ts +5 -0
- package/packages/browser/dist/index.d.ts.map +1 -0
- package/packages/browser/dist/index.iife.js +12095 -0
- package/packages/browser/dist/index.iife.js.map +1 -0
- package/packages/browser/dist/index.js +2 -0
- package/packages/browser/dist/index.js.map +1 -0
- package/packages/browser/dist/index.min.js +2 -0
- package/packages/browser/dist/index.min.js.map +1 -0
- package/packages/browser/dist/index.mjs +2 -0
- package/packages/browser/dist/index.mjs.map +1 -0
- package/packages/react/dist/browser.d.ts +2 -0
- package/packages/react/dist/browser.d.ts.map +1 -0
- package/packages/react/dist/index.d.ts +48 -0
- package/packages/react/dist/index.d.ts.map +1 -0
- package/packages/react/dist/index.js +2 -0
- package/packages/react/dist/index.js.map +1 -0
- package/packages/react/dist/index.mjs +2 -0
- package/packages/react/dist/index.mjs.map +1 -0
- package/packages/remix/dist/index.d.ts +8 -0
- package/packages/remix/dist/index.d.ts.map +1 -0
- package/packages/remix/dist/index.js +2 -0
- package/packages/remix/dist/index.js.map +1 -0
- package/packages/remix/dist/index.mjs +2 -0
- package/packages/remix/dist/index.mjs.map +1 -0
- package/packages/svelte/dist/index.d.ts +11 -0
- package/packages/svelte/dist/index.d.ts.map +1 -0
- package/packages/svelte/dist/index.js +2 -0
- package/packages/svelte/dist/index.js.map +1 -0
- package/packages/svelte/dist/index.mjs +2 -0
- package/packages/svelte/dist/index.mjs.map +1 -0
- package/{dist/types/vue → packages/vue/dist}/index.d.ts +4 -5
- package/packages/vue/dist/index.d.ts.map +1 -0
- package/packages/vue/dist/index.js +2 -0
- package/packages/vue/dist/index.js.map +1 -0
- package/packages/vue/dist/index.mjs +2 -0
- package/packages/vue/dist/index.mjs.map +1 -0
- package/packages/wizard/dist/ai/ai-install-wizard.d.ts +145 -0
- package/packages/wizard/dist/ai/ai-install-wizard.d.ts.map +1 -0
- package/packages/wizard/dist/ai/manual-framework-wizard.d.ts +52 -0
- package/packages/wizard/dist/ai/manual-framework-wizard.d.ts.map +1 -0
- package/packages/wizard/dist/cli/ai-auto-install.d.ts +27 -0
- package/packages/wizard/dist/cli/ai-auto-install.d.ts.map +1 -0
- package/{dist → packages/wizard/dist}/cli/ai-auto-install.js +821 -905
- package/packages/wizard/dist/cli/ai-auto-install.js.map +1 -0
- package/packages/wizard/dist/cli/auto-install.d.ts +26 -0
- package/packages/wizard/dist/cli/auto-install.d.ts.map +1 -0
- package/{dist → packages/wizard/dist}/cli/auto-install.js +821 -905
- package/packages/wizard/dist/cli/auto-install.js.map +1 -0
- package/{dist/types → packages/wizard/dist/core}/install-wizard.d.ts +6 -8
- package/packages/wizard/dist/core/install-wizard.d.ts.map +1 -0
- package/packages/wizard/dist/index.d.ts +18 -0
- package/packages/wizard/dist/index.d.ts.map +1 -0
- package/packages/wizard/dist/index.js +2 -0
- package/packages/wizard/dist/index.js.map +1 -0
- package/packages/wizard/dist/index.mjs +2 -0
- package/packages/wizard/dist/index.mjs.map +1 -0
- package/packages/wizard/dist/services/centralized-ai-service.d.ts +159 -0
- package/packages/wizard/dist/services/centralized-ai-service.d.ts.map +1 -0
- package/packages/wizard/dist/services/remote-ai-service.d.ts +58 -0
- package/packages/wizard/dist/services/remote-ai-service.d.ts.map +1 -0
- package/WIZARD_USAGE_GUIDE.md +0 -381
- package/dist/cjs/angular/index.cjs +0 -14979
- package/dist/cjs/angular/index.cjs.map +0 -1
- package/dist/cjs/index.cjs +0 -14964
- package/dist/cjs/index.cjs.map +0 -1
- package/dist/cjs/install-wizard.cjs +0 -1576
- package/dist/cjs/install-wizard.cjs.map +0 -1
- package/dist/cjs/react/index.cjs +0 -15103
- package/dist/cjs/react/index.cjs.map +0 -1
- package/dist/cjs/remix/index.cjs +0 -15077
- package/dist/cjs/remix/index.cjs.map +0 -1
- package/dist/cjs/svelte/index.cjs +0 -14933
- package/dist/cjs/svelte/index.cjs.map +0 -1
- package/dist/cjs/vue/index.cjs +0 -14942
- package/dist/cjs/vue/index.cjs.map +0 -1
- package/dist/cjs/wizard/index.cjs +0 -3490
- package/dist/cjs/wizard/index.cjs.map +0 -1
- package/dist/cli/ai-auto-install.js.map +0 -1
- package/dist/cli/auto-install.js.map +0 -1
- package/dist/esm/angular/index.js +0 -14975
- package/dist/esm/angular/index.js.map +0 -1
- package/dist/esm/index.js +0 -14941
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/install-wizard.js +0 -1553
- package/dist/esm/install-wizard.js.map +0 -1
- package/dist/esm/react/index.js +0 -15097
- package/dist/esm/react/index.js.map +0 -1
- package/dist/esm/remix/index.js +0 -15073
- package/dist/esm/remix/index.js.map +0 -1
- package/dist/esm/svelte/index.js +0 -14931
- package/dist/esm/svelte/index.js.map +0 -1
- package/dist/esm/vue/index.js +0 -14940
- package/dist/esm/vue/index.js.map +0 -1
- package/dist/esm/wizard/index.js +0 -3459
- package/dist/esm/wizard/index.js.map +0 -1
- package/dist/index.min.js +0 -2
- package/dist/index.min.js.map +0 -1
- package/dist/types/angular/index.d.ts +0 -357
- package/dist/types/index.d.ts +0 -644
- package/dist/types/react/index.d.ts +0 -345
- package/dist/types/remix/index.d.ts +0 -336
- package/dist/types/svelte/index.d.ts +0 -322
- package/dist/types/wizard/index.d.ts +0 -523
- package/readme.md +0 -335
- package/rollup.config.js +0 -422
- package/simple-spa.html +0 -1000
- package/src/angular/index.ts +0 -79
- package/src/api.ts +0 -416
- package/src/index.ts +0 -35
- package/src/react/AutoInstallWizard.tsx +0 -557
- package/src/react/browser.ts +0 -8
- package/src/react/index.tsx +0 -308
- package/src/redact.ts +0 -327
- package/src/remix/index.ts +0 -16
- package/src/svelte/index.ts +0 -14
- package/src/tracker.ts +0 -1587
- package/src/types/clack.d.ts +0 -31
- package/src/utils/ip-detector.ts +0 -158
- package/src/utils/logger.ts +0 -144
- package/src/utils/property-detector.ts +0 -345
- package/src/utils/property-manager.ts +0 -274
- package/src/vue/index.ts +0 -29
- package/src/wizard/README.md +0 -114
- package/src/wizard/ai/ai-install-wizard.ts +0 -897
- package/src/wizard/ai/manual-framework-wizard.ts +0 -238
- package/src/wizard/cli/ai-auto-install.ts +0 -241
- package/src/wizard/cli/auto-install.ts +0 -224
- package/src/wizard/core/install-wizard.ts +0 -1794
- package/src/wizard/index.ts +0 -23
- package/src/wizard/services/centralized-ai-service.ts +0 -668
- package/src/wizard/services/remote-ai-service.ts +0 -240
- package/tsconfig.json +0 -24
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
import { HumanBehaviorTracker } from "./browser";
|
|
3
|
+
interface HumanBehaviorInterface {
|
|
4
|
+
addEvent: (event: any) => void;
|
|
5
|
+
identifyUser: ({ userProperties }: {
|
|
6
|
+
userProperties: Record<string, any>;
|
|
7
|
+
}) => Promise<string>;
|
|
8
|
+
start: () => void;
|
|
9
|
+
stop: () => void;
|
|
10
|
+
logout: () => void;
|
|
11
|
+
viewLogs: () => void;
|
|
12
|
+
setUnredactedFields: (fields: string[]) => void;
|
|
13
|
+
hasUnredactedFields: () => boolean;
|
|
14
|
+
getUnredactedFields: () => string[];
|
|
15
|
+
trackPageView: () => void;
|
|
16
|
+
}
|
|
17
|
+
interface HumanBehaviorProviderProps {
|
|
18
|
+
apiKey?: string;
|
|
19
|
+
client?: HumanBehaviorTracker;
|
|
20
|
+
children: ReactNode;
|
|
21
|
+
options?: {
|
|
22
|
+
ingestionUrl?: string;
|
|
23
|
+
logLevel?: 'none' | 'error' | 'warn' | 'info' | 'debug';
|
|
24
|
+
redactFields?: string[];
|
|
25
|
+
suppressConsoleErrors?: boolean;
|
|
26
|
+
recordCanvas?: boolean;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export declare const HumanBehaviorProvider: ({ apiKey, client, children, options }: HumanBehaviorProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
export declare const useHumanBehavior: () => HumanBehaviorInterface | HumanBehaviorTracker;
|
|
31
|
+
export declare const useRedaction: () => {
|
|
32
|
+
setUnredactedFields: (fields: string[]) => void;
|
|
33
|
+
hasUnredactedFields: () => boolean;
|
|
34
|
+
getUnredactedFields: () => string[];
|
|
35
|
+
};
|
|
36
|
+
export declare const useUserTracking: () => {
|
|
37
|
+
identifyUser: ({ userProperties }: {
|
|
38
|
+
userProperties: Record<string, any>;
|
|
39
|
+
}) => Promise<{
|
|
40
|
+
success: boolean;
|
|
41
|
+
error?: undefined;
|
|
42
|
+
} | {
|
|
43
|
+
success: boolean;
|
|
44
|
+
error: unknown;
|
|
45
|
+
}>;
|
|
46
|
+
};
|
|
47
|
+
export { HumanBehaviorTracker };
|
|
48
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAkD,SAAS,EAAgC,MAAM,OAAO,CAAC;AACvH,OAAO,EAAE,oBAAoB,EAA+B,MAAM,WAAW,CAAC;AAM9E,UAAU,sBAAsB;IAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,YAAY,EAAE,CAAC,EAAE,cAAc,EAAE,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/F,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,mBAAmB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAChD,mBAAmB,EAAE,MAAM,OAAO,CAAC;IACnC,mBAAmB,EAAE,MAAM,MAAM,EAAE,CAAC;IACpC,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAOD,UAAU,0BAA0B;IAElC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QACxD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC;CACH;AAgBD,eAAO,MAAM,qBAAqB,GAAI,uCAAuC,0BAA0B,4CAmItG,CAAC;AAgDF,eAAO,MAAM,gBAAgB,qDAM5B,CAAC;AAGF,eAAO,MAAM,YAAY;kCAG0B,MAAM,EAAE;;;CAiB1D,CAAC;AAGF,eAAO,MAAM,eAAe;uCAGkC;QAAE,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE;;;;;;;CAapG,CAAC;AA6CF,OAAO,EAAE,oBAAoB,EAAE,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("react/jsx-runtime"),r=require("react"),t=require("@humanbehavior/core");const s=()=>"undefined"!=typeof window,i=r.createContext(null),n=e=>({addEvent:r=>{e(r)},identifyUser:async({userProperties:r})=>(e({type:"identify",userProperties:r}),""),start:()=>{},stop:()=>{},logout:()=>{},viewLogs:()=>{t.logWarn("Logs are not available until HumanBehaviorTracker is initialized")},setUnredactedFields:()=>{},hasUnredactedFields:()=>!1,getUnredactedFields:()=>[],trackPageView:()=>{}}),a=()=>{const e=r.useContext(i);if(!e)throw new Error("useHumanBehavior must be used within a HumanBehaviorProvider");return e};function o(){const e=r.useContext(i);return r.useEffect(()=>{if(e&&"undefined"!=typeof window){e.trackPageView();const r=()=>{e.trackPageView()};window.addEventListener("popstate",r);const t=history.pushState,s=history.replaceState;return history.pushState=function(...e){t.apply(this,e),r()},history.replaceState=function(...e){s.apply(this,e),r()},()=>{window.removeEventListener("popstate",r),history.pushState=t,history.replaceState=s}}},[e]),null}Object.defineProperty(exports,"HumanBehaviorTracker",{enumerable:!0,get:function(){return t.HumanBehaviorTracker}}),exports.HumanBehaviorProvider=({apiKey:a,client:u,children:c,options:d})=>{const[l,f]=r.useState(u||null),[p,h]=r.useState([]),[v,y]=r.useState(!1),[g,m]=r.useState(!1),w=r.useRef(a),E=r.useRef(u),k=r.useRef(p);r.useEffect(()=>{w.current=a,E.current=u},[a,u]),r.useEffect(()=>{k.current=p},[p]);const F=r.useCallback(e=>{h(r=>[...r,e])},[]);r.useEffect(()=>{y(!0)},[]),r.useEffect(()=>{if(s()){if(E.current)return f(E.current),void m(!0);if(w.current&&""!==w.current.trim()){if(null===l)try{const e=t.HumanBehaviorTracker.init(w.current.trim(),{ingestionUrl:d?.ingestionUrl,logLevel:d?.logLevel,redactFields:d?.redactFields,suppressConsoleErrors:d?.suppressConsoleErrors,recordCanvas:d?.recordCanvas});f(e),m(!0),e.initializationPromise?.then(async()=>{e.isTrackerStarted||await e.start();const r=k.current;if(r.length>0){for(const s of r)if("identify"===s.type){t.logDebug("Processing queued identify event",s);try{await e.identifyUser({userProperties:s.userProperties})}catch(e){t.logError("Failed to process queued user info:",e)}}else e.addEvent(s);h([])}}).catch(e=>{t.logError("Failed to initialize HumanBehaviorTracker:",e)})}catch(e){t.logError("Failed to create HumanBehaviorTracker:",e)}}else t.logError("An apiKey is required when no client is provided")}},[v]);const U=r.useMemo(()=>v&&g?l:n(F),[v,g,l,F]);return s()?e.jsxs(i.Provider,{value:U,children:[e.jsx(o,{}),c]}):e.jsx(e.Fragment,{children:c})},exports.useHumanBehavior=a,exports.useRedaction=()=>{const e=a();return{setUnredactedFields:r.useCallback(r=>{e.setUnredactedFields(r)},[e]),hasUnredactedFields:r.useCallback(()=>e.hasUnredactedFields(),[e]),getUnredactedFields:r.useCallback(()=>e.getUnredactedFields(),[e])}},exports.useUserTracking=()=>{const e=a();return{identifyUser:r.useCallback(async({userProperties:r})=>{try{return await e.identifyUser({userProperties:r}),{success:!0}}catch(e){return t.logError("Failed to identify user:",e),{success:!1,error:e}}},[e])}};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.tsx"],"sourcesContent":["import React, { useEffect, useState, createContext, useContext, ReactNode, useCallback, useMemo, useRef } from \"react\";\nimport { HumanBehaviorTracker, logError, logWarn, logDebug } from \"./browser\";\n\n// Check if we're in a browser environment\nconst isBrowser = () => typeof window !== 'undefined';\n\n// Define the public interface that components will interact with\ninterface HumanBehaviorInterface {\n addEvent: (event: any) => void;\n identifyUser: ({ userProperties }: { userProperties: Record<string, any> }) => Promise<string>;\n start: () => void;\n stop: () => void;\n logout: () => void;\n viewLogs: () => void;\n setUnredactedFields: (fields: string[]) => void;\n hasUnredactedFields: () => boolean;\n getUnredactedFields: () => string[];\n trackPageView: () => void;\n}\n\ninterface HumanBehaviorContextType {\n humanBehavior: HumanBehaviorTracker | null;\n queueEvent: (event: any) => void;\n}\n\ninterface HumanBehaviorProviderProps {\n // Either provide an apiKey to create a new client, or provide an existing client\n apiKey?: string;\n client?: HumanBehaviorTracker;\n children: ReactNode;\n options?: {\n ingestionUrl?: string;\n logLevel?: 'none' | 'error' | 'warn' | 'info' | 'debug';\n redactFields?: string[];\n suppressConsoleErrors?: boolean;\n recordCanvas?: boolean; // Enable canvas recording with protection\n };\n}\n\n// Default context to prevent unnecessary re-renders\nconst defaultContext: HumanBehaviorContextType = {\n humanBehavior: null,\n queueEvent: (event: any) => {\n // In server-side, just no-op\n if (typeof window === 'undefined') {\n return;\n }\n logWarn('HumanBehavior not initialized yet, event queued:', event);\n }\n};\n\nconst HumanBehaviorContext = createContext<HumanBehaviorTracker | HumanBehaviorInterface | null>(null);\n\nexport const HumanBehaviorProvider = ({ apiKey, client, children, options }: HumanBehaviorProviderProps) => {\n const [humanBehavior, setHumanBehavior] = useState<HumanBehaviorTracker | null>(client || null);\n const [eventQueue, setEventQueue] = useState<any[]>([]);\n const [isMounted, setIsMounted] = useState(false);\n const [isInitialized, setIsInitialized] = useState(false);\n \n // Use refs to avoid dependency issues in useEffect\n const apiKeyRef = useRef(apiKey);\n const clientRef = useRef(client);\n const eventQueueRef = useRef(eventQueue);\n \n // Update refs when props change\n useEffect(() => {\n apiKeyRef.current = apiKey;\n clientRef.current = client;\n }, [apiKey, client]);\n \n // Update eventQueue ref when queue changes\n useEffect(() => {\n eventQueueRef.current = eventQueue;\n }, [eventQueue]);\n\n // Memoized queueEvent function to prevent unnecessary re-renders\n const queueEvent = useCallback((event: any) => {\n setEventQueue(prev => [...prev, event]);\n }, []);\n\n // Handle mounting state\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n useEffect(() => {\n // Only run in browser\n if (!(isBrowser())) {\n return;\n }\n\n // If client is provided, use that\n if (clientRef.current) {\n setHumanBehavior(clientRef.current);\n setIsInitialized(true);\n return;\n }\n\n // If no client is provided, apiKey is required\n if (!apiKeyRef.current || apiKeyRef.current.trim() === '') {\n logError(\"An apiKey is required when no client is provided\");\n return;\n }\n\n // Prevent multiple initializations\n if (humanBehavior !== null) {\n return;\n }\n\n try {\n \n // Create new tracker instance with the validated apiKey and options\n const tracker = HumanBehaviorTracker.init(\n apiKeyRef.current.trim(),\n {\n ingestionUrl: options?.ingestionUrl,\n logLevel: options?.logLevel,\n redactFields: options?.redactFields,\n suppressConsoleErrors: options?.suppressConsoleErrors,\n recordCanvas: options?.recordCanvas, // Pass canvas recording option\n }\n );\n \n setHumanBehavior(tracker);\n\n // Mark as initialized immediately (don't wait for server init)\n setIsInitialized(true);\n \n // Start tracking in background\n tracker.initializationPromise?.then(async () => {\n // Only start if not already started\n if (!tracker.isTrackerStarted) {\n await tracker.start();\n }\n \n // Process any queued events\n const currentQueue = eventQueueRef.current;\n if (currentQueue.length > 0) {\n for (const event of currentQueue) {\n if (event.type === 'identify') {\n logDebug('Processing queued identify event', event);\n try {\n await tracker.identifyUser({ userProperties: event.userProperties });\n } catch (error) {\n logError('Failed to process queued user info:', error);\n }\n } else {\n tracker.addEvent(event);\n }\n }\n setEventQueue([]); // Clear the queue\n }\n }).catch(error => {\n logError('Failed to initialize HumanBehaviorTracker:', error);\n });\n } catch (error) {\n logError('Failed to create HumanBehaviorTracker:', error);\n }\n }, [isMounted]); // Removed humanBehavior from dependencies to prevent infinite loop\n\n // Memoized context value to prevent unnecessary re-renders\n const contextValue = useMemo(() => {\n if (!isMounted) {\n return createQueuingImplementation(queueEvent);\n }\n \n if (!isInitialized) {\n return createQueuingImplementation(queueEvent);\n }\n \n return humanBehavior;\n }, [isMounted, isInitialized, humanBehavior, queueEvent]);\n\n // If not in browser, render children without context\n if (!(isBrowser())) {\n return <>{children}</>;\n }\n\n return (\n <HumanBehaviorContext.Provider value={contextValue}>\n <HumanBehaviorPageView />\n {children}\n </HumanBehaviorContext.Provider>\n );\n};\n\n// Default implementation for when tracker is not available\nconst defaultImplementation: HumanBehaviorInterface = {\n addEvent: () => {},\n identifyUser: async ({ userProperties }: { userProperties: Record<string, any> }) => {\n return '';\n },\n start: () => {},\n stop: () => {},\n logout: () => {},\n viewLogs: () => {},\n setUnredactedFields: () => {},\n hasUnredactedFields: () => false,\n getUnredactedFields: () => [],\n trackPageView: () => {},\n};\n\n// Memoized queuing implementation for initialization period\nconst createQueuingImplementation = (queueEvent: (event: any) => void): HumanBehaviorInterface => ({\n addEvent: (event: any) => {\n queueEvent(event);\n },\n identifyUser: async ({ userProperties }: { userProperties: Record<string, any> }) => {\n queueEvent({\n type: 'identify',\n userProperties,\n });\n return ''; // Return empty string to match interface\n },\n start: () => {\n // Start will be called automatically when initialized\n },\n stop: () => {\n // Stop is a no-op when not initialized\n },\n logout: () => {\n // Logout is a no-op when not initialized\n },\n viewLogs: () => {\n logWarn('Logs are not available until HumanBehaviorTracker is initialized');\n },\n setUnredactedFields: () => {},\n hasUnredactedFields: () => false,\n getUnredactedFields: () => [],\n trackPageView: () => {},\n});\n\nexport const useHumanBehavior = () => {\n const tracker = useContext(HumanBehaviorContext);\n if (!tracker) {\n throw new Error('useHumanBehavior must be used within a HumanBehaviorProvider');\n }\n return tracker;\n};\n\n// Custom hook for managing unredaction fields dynamically\nexport const useRedaction = () => {\n const tracker = useHumanBehavior();\n \n const setUnredactedFields = useCallback((fields: string[]) => {\n tracker.setUnredactedFields(fields);\n }, [tracker]);\n \n const hasUnredactedFields = useCallback(() => {\n return tracker.hasUnredactedFields();\n }, [tracker]);\n \n const getUnredactedFields = useCallback(() => {\n return tracker.getUnredactedFields();\n }, [tracker]);\n \n return {\n setUnredactedFields,\n hasUnredactedFields,\n getUnredactedFields\n };\n};\n\n// Custom hook for managing user info\nexport const useUserTracking = () => {\n const tracker = useHumanBehavior();\n \n const identifyUser = useCallback(async ({ userProperties }: { userProperties: Record<string, any> }) => {\n try {\n await tracker.identifyUser({ userProperties });\n return { success: true };\n } catch (error) {\n logError('Failed to identify user:', error);\n return { success: false, error };\n }\n }, [tracker]);\n \n return {\n identifyUser\n };\n};\n\n// Automatic page tracking component\nfunction HumanBehaviorPageView() {\n const tracker = useContext(HumanBehaviorContext);\n\n useEffect(() => {\n if (tracker && typeof window !== 'undefined') {\n // Track initial page load\n tracker.trackPageView();\n\n // Listen for route changes (for SPAs)\n const handleRouteChange = () => {\n tracker.trackPageView();\n };\n\n // Listen for popstate (back/forward navigation)\n window.addEventListener('popstate', handleRouteChange);\n\n // Listen for pushstate/replacestate (programmatic navigation)\n const originalPushState = history.pushState;\n const originalReplaceState = history.replaceState;\n\n history.pushState = function(...args) {\n originalPushState.apply(this, args);\n handleRouteChange();\n };\n\n history.replaceState = function(...args) {\n originalReplaceState.apply(this, args);\n handleRouteChange();\n };\n\n return () => {\n window.removeEventListener('popstate', handleRouteChange);\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n };\n }\n }, [tracker]);\n\n return null;\n}\n\n// Export the tracker class for direct use\nexport { HumanBehaviorTracker };\n"],"names":["isBrowser","window","HumanBehaviorContext","createContext","createQueuingImplementation","queueEvent","addEvent","event","identifyUser","async","userProperties","type","start","stop","logout","viewLogs","logWarn","setUnredactedFields","hasUnredactedFields","getUnredactedFields","trackPageView","useHumanBehavior","tracker","useContext","Error","HumanBehaviorPageView","useEffect","handleRouteChange","addEventListener","originalPushState","history","pushState","originalReplaceState","replaceState","args","apply","this","removeEventListener","apiKey","client","children","options","humanBehavior","setHumanBehavior","useState","eventQueue","setEventQueue","isMounted","setIsMounted","isInitialized","setIsInitialized","apiKeyRef","useRef","clientRef","eventQueueRef","current","useCallback","prev","trim","HumanBehaviorTracker","init","ingestionUrl","logLevel","redactFields","suppressConsoleErrors","recordCanvas","initializationPromise","then","isTrackerStarted","currentQueue","length","logDebug","error","logError","catch","contextValue","useMemo","_jsxs","Provider","value","_jsx","_Fragment","fields","success"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{jsx as e,Fragment as r,jsxs as t}from"react/jsx-runtime";import{createContext as i,useState as n,useRef as s,useEffect as a,useCallback as o,useMemo as c,useContext as d}from"react";import{logError as u,HumanBehaviorTracker as l,logDebug as p,logWarn as h}from"@humanbehavior/core";export{HumanBehaviorTracker}from"@humanbehavior/core";const f=()=>"undefined"!=typeof window,y=i(null),v=({apiKey:i,client:d,children:h,options:v})=>{const[w,g]=n(d||null),[F,P]=n([]),[k,E]=n(!1),[S,B]=n(!1),H=s(i),L=s(d),T=s(F);a(()=>{H.current=i,L.current=d},[i,d]),a(()=>{T.current=F},[F]);const b=o(e=>{P(r=>[...r,e])},[]);a(()=>{E(!0)},[]),a(()=>{if(f()){if(L.current)return g(L.current),void B(!0);if(H.current&&""!==H.current.trim()){if(null===w)try{const e=l.init(H.current.trim(),{ingestionUrl:v?.ingestionUrl,logLevel:v?.logLevel,redactFields:v?.redactFields,suppressConsoleErrors:v?.suppressConsoleErrors,recordCanvas:v?.recordCanvas});g(e),B(!0),e.initializationPromise?.then(async()=>{e.isTrackerStarted||await e.start();const r=T.current;if(r.length>0){for(const t of r)if("identify"===t.type){p("Processing queued identify event",t);try{await e.identifyUser({userProperties:t.userProperties})}catch(e){u("Failed to process queued user info:",e)}}else e.addEvent(t);P([])}}).catch(e=>{u("Failed to initialize HumanBehaviorTracker:",e)})}catch(e){u("Failed to create HumanBehaviorTracker:",e)}}else u("An apiKey is required when no client is provided")}},[k]);const C=c(()=>k&&S?w:m(b),[k,S,w,b]);return f()?t(y.Provider,{value:C,children:[e(U,{}),h]}):e(r,{children:h})},m=e=>({addEvent:r=>{e(r)},identifyUser:async({userProperties:r})=>(e({type:"identify",userProperties:r}),""),start:()=>{},stop:()=>{},logout:()=>{},viewLogs:()=>{h("Logs are not available until HumanBehaviorTracker is initialized")},setUnredactedFields:()=>{},hasUnredactedFields:()=>!1,getUnredactedFields:()=>[],trackPageView:()=>{}}),w=()=>{const e=d(y);if(!e)throw new Error("useHumanBehavior must be used within a HumanBehaviorProvider");return e},g=()=>{const e=w();return{setUnredactedFields:o(r=>{e.setUnredactedFields(r)},[e]),hasUnredactedFields:o(()=>e.hasUnredactedFields(),[e]),getUnredactedFields:o(()=>e.getUnredactedFields(),[e])}},F=()=>{const e=w();return{identifyUser:o(async({userProperties:r})=>{try{return await e.identifyUser({userProperties:r}),{success:!0}}catch(e){return u("Failed to identify user:",e),{success:!1,error:e}}},[e])}};function U(){const e=d(y);return a(()=>{if(e&&"undefined"!=typeof window){e.trackPageView();const r=()=>{e.trackPageView()};window.addEventListener("popstate",r);const t=history.pushState,i=history.replaceState;return history.pushState=function(...e){t.apply(this,e),r()},history.replaceState=function(...e){i.apply(this,e),r()},()=>{window.removeEventListener("popstate",r),history.pushState=t,history.replaceState=i}}},[e]),null}export{v as HumanBehaviorProvider,w as useHumanBehavior,g as useRedaction,F as useUserTracking};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/index.tsx"],"sourcesContent":["import React, { useEffect, useState, createContext, useContext, ReactNode, useCallback, useMemo, useRef } from \"react\";\nimport { HumanBehaviorTracker, logError, logWarn, logDebug } from \"./browser\";\n\n// Check if we're in a browser environment\nconst isBrowser = () => typeof window !== 'undefined';\n\n// Define the public interface that components will interact with\ninterface HumanBehaviorInterface {\n addEvent: (event: any) => void;\n identifyUser: ({ userProperties }: { userProperties: Record<string, any> }) => Promise<string>;\n start: () => void;\n stop: () => void;\n logout: () => void;\n viewLogs: () => void;\n setUnredactedFields: (fields: string[]) => void;\n hasUnredactedFields: () => boolean;\n getUnredactedFields: () => string[];\n trackPageView: () => void;\n}\n\ninterface HumanBehaviorContextType {\n humanBehavior: HumanBehaviorTracker | null;\n queueEvent: (event: any) => void;\n}\n\ninterface HumanBehaviorProviderProps {\n // Either provide an apiKey to create a new client, or provide an existing client\n apiKey?: string;\n client?: HumanBehaviorTracker;\n children: ReactNode;\n options?: {\n ingestionUrl?: string;\n logLevel?: 'none' | 'error' | 'warn' | 'info' | 'debug';\n redactFields?: string[];\n suppressConsoleErrors?: boolean;\n recordCanvas?: boolean; // Enable canvas recording with protection\n };\n}\n\n// Default context to prevent unnecessary re-renders\nconst defaultContext: HumanBehaviorContextType = {\n humanBehavior: null,\n queueEvent: (event: any) => {\n // In server-side, just no-op\n if (typeof window === 'undefined') {\n return;\n }\n logWarn('HumanBehavior not initialized yet, event queued:', event);\n }\n};\n\nconst HumanBehaviorContext = createContext<HumanBehaviorTracker | HumanBehaviorInterface | null>(null);\n\nexport const HumanBehaviorProvider = ({ apiKey, client, children, options }: HumanBehaviorProviderProps) => {\n const [humanBehavior, setHumanBehavior] = useState<HumanBehaviorTracker | null>(client || null);\n const [eventQueue, setEventQueue] = useState<any[]>([]);\n const [isMounted, setIsMounted] = useState(false);\n const [isInitialized, setIsInitialized] = useState(false);\n \n // Use refs to avoid dependency issues in useEffect\n const apiKeyRef = useRef(apiKey);\n const clientRef = useRef(client);\n const eventQueueRef = useRef(eventQueue);\n \n // Update refs when props change\n useEffect(() => {\n apiKeyRef.current = apiKey;\n clientRef.current = client;\n }, [apiKey, client]);\n \n // Update eventQueue ref when queue changes\n useEffect(() => {\n eventQueueRef.current = eventQueue;\n }, [eventQueue]);\n\n // Memoized queueEvent function to prevent unnecessary re-renders\n const queueEvent = useCallback((event: any) => {\n setEventQueue(prev => [...prev, event]);\n }, []);\n\n // Handle mounting state\n useEffect(() => {\n setIsMounted(true);\n }, []);\n\n useEffect(() => {\n // Only run in browser\n if (!(isBrowser())) {\n return;\n }\n\n // If client is provided, use that\n if (clientRef.current) {\n setHumanBehavior(clientRef.current);\n setIsInitialized(true);\n return;\n }\n\n // If no client is provided, apiKey is required\n if (!apiKeyRef.current || apiKeyRef.current.trim() === '') {\n logError(\"An apiKey is required when no client is provided\");\n return;\n }\n\n // Prevent multiple initializations\n if (humanBehavior !== null) {\n return;\n }\n\n try {\n \n // Create new tracker instance with the validated apiKey and options\n const tracker = HumanBehaviorTracker.init(\n apiKeyRef.current.trim(),\n {\n ingestionUrl: options?.ingestionUrl,\n logLevel: options?.logLevel,\n redactFields: options?.redactFields,\n suppressConsoleErrors: options?.suppressConsoleErrors,\n recordCanvas: options?.recordCanvas, // Pass canvas recording option\n }\n );\n \n setHumanBehavior(tracker);\n\n // Mark as initialized immediately (don't wait for server init)\n setIsInitialized(true);\n \n // Start tracking in background\n tracker.initializationPromise?.then(async () => {\n // Only start if not already started\n if (!tracker.isTrackerStarted) {\n await tracker.start();\n }\n \n // Process any queued events\n const currentQueue = eventQueueRef.current;\n if (currentQueue.length > 0) {\n for (const event of currentQueue) {\n if (event.type === 'identify') {\n logDebug('Processing queued identify event', event);\n try {\n await tracker.identifyUser({ userProperties: event.userProperties });\n } catch (error) {\n logError('Failed to process queued user info:', error);\n }\n } else {\n tracker.addEvent(event);\n }\n }\n setEventQueue([]); // Clear the queue\n }\n }).catch(error => {\n logError('Failed to initialize HumanBehaviorTracker:', error);\n });\n } catch (error) {\n logError('Failed to create HumanBehaviorTracker:', error);\n }\n }, [isMounted]); // Removed humanBehavior from dependencies to prevent infinite loop\n\n // Memoized context value to prevent unnecessary re-renders\n const contextValue = useMemo(() => {\n if (!isMounted) {\n return createQueuingImplementation(queueEvent);\n }\n \n if (!isInitialized) {\n return createQueuingImplementation(queueEvent);\n }\n \n return humanBehavior;\n }, [isMounted, isInitialized, humanBehavior, queueEvent]);\n\n // If not in browser, render children without context\n if (!(isBrowser())) {\n return <>{children}</>;\n }\n\n return (\n <HumanBehaviorContext.Provider value={contextValue}>\n <HumanBehaviorPageView />\n {children}\n </HumanBehaviorContext.Provider>\n );\n};\n\n// Default implementation for when tracker is not available\nconst defaultImplementation: HumanBehaviorInterface = {\n addEvent: () => {},\n identifyUser: async ({ userProperties }: { userProperties: Record<string, any> }) => {\n return '';\n },\n start: () => {},\n stop: () => {},\n logout: () => {},\n viewLogs: () => {},\n setUnredactedFields: () => {},\n hasUnredactedFields: () => false,\n getUnredactedFields: () => [],\n trackPageView: () => {},\n};\n\n// Memoized queuing implementation for initialization period\nconst createQueuingImplementation = (queueEvent: (event: any) => void): HumanBehaviorInterface => ({\n addEvent: (event: any) => {\n queueEvent(event);\n },\n identifyUser: async ({ userProperties }: { userProperties: Record<string, any> }) => {\n queueEvent({\n type: 'identify',\n userProperties,\n });\n return ''; // Return empty string to match interface\n },\n start: () => {\n // Start will be called automatically when initialized\n },\n stop: () => {\n // Stop is a no-op when not initialized\n },\n logout: () => {\n // Logout is a no-op when not initialized\n },\n viewLogs: () => {\n logWarn('Logs are not available until HumanBehaviorTracker is initialized');\n },\n setUnredactedFields: () => {},\n hasUnredactedFields: () => false,\n getUnredactedFields: () => [],\n trackPageView: () => {},\n});\n\nexport const useHumanBehavior = () => {\n const tracker = useContext(HumanBehaviorContext);\n if (!tracker) {\n throw new Error('useHumanBehavior must be used within a HumanBehaviorProvider');\n }\n return tracker;\n};\n\n// Custom hook for managing unredaction fields dynamically\nexport const useRedaction = () => {\n const tracker = useHumanBehavior();\n \n const setUnredactedFields = useCallback((fields: string[]) => {\n tracker.setUnredactedFields(fields);\n }, [tracker]);\n \n const hasUnredactedFields = useCallback(() => {\n return tracker.hasUnredactedFields();\n }, [tracker]);\n \n const getUnredactedFields = useCallback(() => {\n return tracker.getUnredactedFields();\n }, [tracker]);\n \n return {\n setUnredactedFields,\n hasUnredactedFields,\n getUnredactedFields\n };\n};\n\n// Custom hook for managing user info\nexport const useUserTracking = () => {\n const tracker = useHumanBehavior();\n \n const identifyUser = useCallback(async ({ userProperties }: { userProperties: Record<string, any> }) => {\n try {\n await tracker.identifyUser({ userProperties });\n return { success: true };\n } catch (error) {\n logError('Failed to identify user:', error);\n return { success: false, error };\n }\n }, [tracker]);\n \n return {\n identifyUser\n };\n};\n\n// Automatic page tracking component\nfunction HumanBehaviorPageView() {\n const tracker = useContext(HumanBehaviorContext);\n\n useEffect(() => {\n if (tracker && typeof window !== 'undefined') {\n // Track initial page load\n tracker.trackPageView();\n\n // Listen for route changes (for SPAs)\n const handleRouteChange = () => {\n tracker.trackPageView();\n };\n\n // Listen for popstate (back/forward navigation)\n window.addEventListener('popstate', handleRouteChange);\n\n // Listen for pushstate/replacestate (programmatic navigation)\n const originalPushState = history.pushState;\n const originalReplaceState = history.replaceState;\n\n history.pushState = function(...args) {\n originalPushState.apply(this, args);\n handleRouteChange();\n };\n\n history.replaceState = function(...args) {\n originalReplaceState.apply(this, args);\n handleRouteChange();\n };\n\n return () => {\n window.removeEventListener('popstate', handleRouteChange);\n history.pushState = originalPushState;\n history.replaceState = originalReplaceState;\n };\n }\n }, [tracker]);\n\n return null;\n}\n\n// Export the tracker class for direct use\nexport { HumanBehaviorTracker };\n"],"names":["isBrowser","window","HumanBehaviorContext","createContext","HumanBehaviorProvider","apiKey","client","children","options","humanBehavior","setHumanBehavior","useState","eventQueue","setEventQueue","isMounted","setIsMounted","isInitialized","setIsInitialized","apiKeyRef","useRef","clientRef","eventQueueRef","useEffect","current","queueEvent","useCallback","event","prev","trim","tracker","HumanBehaviorTracker","init","ingestionUrl","logLevel","redactFields","suppressConsoleErrors","recordCanvas","initializationPromise","then","async","isTrackerStarted","start","currentQueue","length","type","logDebug","identifyUser","userProperties","error","logError","addEvent","catch","contextValue","useMemo","createQueuingImplementation","_jsxs","Provider","value","_jsx","HumanBehaviorPageView","_Fragment","stop","logout","viewLogs","logWarn","setUnredactedFields","hasUnredactedFields","getUnredactedFields","trackPageView","useHumanBehavior","useContext","Error","useRedaction","fields","useUserTracking","success","handleRouteChange","addEventListener","originalPushState","history","pushState","originalReplaceState","replaceState","args","apply","this","removeEventListener"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { LoaderFunctionArgs } from '@remix-run/node';
|
|
2
|
+
export declare function createHumanBehaviorLoader(): ({ request }: LoaderFunctionArgs) => Promise<{
|
|
3
|
+
ENV: {
|
|
4
|
+
HUMANBEHAVIOR_API_KEY: string | undefined;
|
|
5
|
+
};
|
|
6
|
+
}>;
|
|
7
|
+
export { HumanBehaviorProvider, useHumanBehavior } from '@humanbehavior/react';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,wBAAgB,yBAAyB,KACzB,aAAa,kBAAkB;;;;GAO9C;AAGD,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
|