@brainfish-ai/web-tracker 0.0.4-alpha.18 → 0.0.4-alpha.20
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/index.cjs.js +4 -0
- package/dist/index.cjs.js.gz +0 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -7
- package/dist/index.js.gz +0 -0
- package/dist/index.js.map +1 -0
- package/dist/src/index.d.ts +22 -0
- package/dist/src/redact/built-ins/NameRedactor.d.ts +6 -0
- package/dist/src/redact/built-ins/SimpleRegexpRedactor.d.ts +10 -0
- package/dist/src/redact/built-ins/simple-regexp-patterns.d.ts +12 -0
- package/dist/src/redact/built-ins/well-known-names.d.ts +2 -0
- package/dist/src/redact/composition.d.ts +2 -0
- package/dist/src/redact/index.d.ts +10 -0
- package/dist/src/redact/types.d.ts +27 -0
- package/dist/src/redact/utils.d.ts +4 -0
- package/dist/src/screenshot/capture.d.ts +2 -0
- package/dist/src/screenshot/redact.d.ts +3 -0
- package/dist/src/screenshot/snapshot.d.ts +2 -0
- package/dist/src/setupTests.d.ts +0 -0
- package/dist/src/tracker.d.ts +9 -0
- package/dist/tracker.cjs.js +2 -0
- package/dist/tracker.cjs.js.map +1 -0
- package/dist/tracker.d.ts +1 -0
- package/dist/tracker.js +13 -0
- package/dist/tracker.js.map +1 -0
- package/package.json +1 -1
- package/src/index.ts +5 -5
- package/vite.config.ts +4 -3
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { TrackerSdkOptions, TrackProperties, TrackerSdk } from '@brainfish-ai/tracker-sdk';
|
|
2
|
+
export type * from '@brainfish-ai/tracker-sdk';
|
|
3
|
+
export type TrackerOptions = TrackerSdkOptions & {
|
|
4
|
+
trackOutgoingLinks?: boolean;
|
|
5
|
+
trackScreenViews?: boolean;
|
|
6
|
+
trackAttributes?: boolean;
|
|
7
|
+
trackHashChanges?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare const VERSION: string;
|
|
10
|
+
export declare class Tracker extends TrackerSdk {
|
|
11
|
+
options: TrackerOptions;
|
|
12
|
+
private lastPath;
|
|
13
|
+
private debounceTimer;
|
|
14
|
+
constructor(options: TrackerOptions);
|
|
15
|
+
private debounce;
|
|
16
|
+
private isServer;
|
|
17
|
+
trackOutgoingLinks(): void;
|
|
18
|
+
trackScreenViews(): void;
|
|
19
|
+
trackAttributes(): void;
|
|
20
|
+
screenView(properties?: TrackProperties): Promise<void>;
|
|
21
|
+
screenView(path: string, properties?: TrackProperties): Promise<void>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { ISyncRedactor } from '../types';
|
|
2
|
+
export declare class SimpleRegexpRedactor implements ISyncRedactor {
|
|
3
|
+
regexpMatcher: RegExp;
|
|
4
|
+
replaceWith: string;
|
|
5
|
+
constructor({ replaceWith, regexpPattern: regexpMatcher, }: {
|
|
6
|
+
replaceWith: string;
|
|
7
|
+
regexpPattern: RegExp;
|
|
8
|
+
});
|
|
9
|
+
redact(textToRedact: string): string;
|
|
10
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const creditCardNumber: RegExp;
|
|
2
|
+
export declare const streetAddress: RegExp;
|
|
3
|
+
export declare const zipcode: RegExp;
|
|
4
|
+
export declare const phoneNumber: RegExp;
|
|
5
|
+
export declare const ipAddress: RegExp;
|
|
6
|
+
export declare const usSocialSecurityNumber: RegExp;
|
|
7
|
+
export declare const emailAddress: RegExp;
|
|
8
|
+
export declare const username: RegExp;
|
|
9
|
+
export declare const password: RegExp;
|
|
10
|
+
export declare const credentials: RegExp;
|
|
11
|
+
export declare const digits: RegExp;
|
|
12
|
+
export declare const url: RegExp;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { AsyncCustomRedactorConfig, IAsyncRedactor, CompositeRedactorOptions, SyncCustomRedactorConfig, ISyncRedactor } from './types';
|
|
2
|
+
export declare function composeChildRedactors<T extends AsyncCustomRedactorConfig>(opts?: CompositeRedactorOptions<T>): T extends SyncCustomRedactorConfig ? ISyncRedactor[] : (ISyncRedactor | IAsyncRedactor)[];
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { CompositeRedactorOptions, ISyncRedactor, SyncCustomRedactorConfig } from './types';
|
|
2
|
+
/** @public */
|
|
3
|
+
export interface SyncCompositeRedactorOptions extends CompositeRedactorOptions<SyncCustomRedactorConfig> {
|
|
4
|
+
}
|
|
5
|
+
/** @public */
|
|
6
|
+
export declare class SyncRedactor implements ISyncRedactor {
|
|
7
|
+
private childRedactors;
|
|
8
|
+
constructor(opts?: SyncCompositeRedactorOptions);
|
|
9
|
+
redact: (textToRedact: string) => string;
|
|
10
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as simpleRegexpBuiltIns from './built-ins/simple-regexp-patterns';
|
|
2
|
+
export interface ISyncRedactor {
|
|
3
|
+
redact(textToRedact: string): string;
|
|
4
|
+
}
|
|
5
|
+
export interface IAsyncRedactor {
|
|
6
|
+
redactAsync(textToRedact: string): Promise<string>;
|
|
7
|
+
}
|
|
8
|
+
export type IRedactor = ISyncRedactor | IAsyncRedactor;
|
|
9
|
+
export interface SimpleRegexpCustomRedactorConfig {
|
|
10
|
+
regexpPattern: RegExp;
|
|
11
|
+
replaceWith: string;
|
|
12
|
+
}
|
|
13
|
+
export type SyncCustomRedactorConfig = SimpleRegexpCustomRedactorConfig | ISyncRedactor;
|
|
14
|
+
export type AsyncCustomRedactorConfig = SyncCustomRedactorConfig | IAsyncRedactor;
|
|
15
|
+
export interface CompositeRedactorOptions<T extends AsyncCustomRedactorConfig> {
|
|
16
|
+
globalReplaceWith?: string;
|
|
17
|
+
builtInRedactors?: {
|
|
18
|
+
[RedactorName in keyof typeof simpleRegexpBuiltIns | 'names']?: {
|
|
19
|
+
enabled?: boolean;
|
|
20
|
+
replaceWith?: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
customRedactors?: {
|
|
24
|
+
before?: Array<T>;
|
|
25
|
+
after?: Array<T>;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { SimpleRegexpCustomRedactorConfig, AsyncCustomRedactorConfig, ISyncRedactor, IRedactor } from './types';
|
|
2
|
+
export declare function isSimpleRegexpCustomRedactorConfig(redactor: AsyncCustomRedactorConfig): redactor is SimpleRegexpCustomRedactorConfig;
|
|
3
|
+
export declare function isSyncRedactor(redactor: IRedactor): redactor is ISyncRedactor;
|
|
4
|
+
export declare function snakeCase(str: string): string;
|
|
File without changes
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";const a=require("./index.cjs.js");(n=>{if(n.BrainfishAnalytics&&"q"in n.BrainfishAnalytics){const t=n.BrainfishAnalytics.q||[],s=new a.Tracker(t.shift()[1]);t.forEach(i=>{i[0]in s&&s[i[0]](...i.slice(1))}),n.BrainfishAnalytics=(i,...o)=>{const c=s[i]?s[i].bind(s):void 0;typeof c=="function"?c(...o):console.warn(`Method ${i} does not exist on BrainfishAnalytics`)}}})(window);
|
|
2
|
+
//# sourceMappingURL=tracker.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.cjs.js","sources":["../src/tracker.ts"],"sourcesContent":["import { Tracker } from './index';\n\ndeclare global {\n interface Window {\n BrainfishAnalytics: {\n q?: [string, ...any[]];\n (method: string, ...args: any[]): void;\n };\n }\n}\n\n((window) => {\n if (window.BrainfishAnalytics && 'q' in window.BrainfishAnalytics) {\n const queue = window.BrainfishAnalytics.q || [];\n const tracker = new Tracker(queue.shift()[1]) as any;\n queue.forEach((item) => {\n if (item[0] in tracker) {\n tracker[item[0]](...item.slice(1));\n }\n });\n\n window.BrainfishAnalytics = (t, ...args) => {\n const fn = tracker[t] ? tracker[t].bind(tracker) : undefined;\n if (typeof fn === 'function') {\n fn(...args);\n } else {\n console.warn(`Method ${t} does not exist on BrainfishAnalytics`);\n }\n };\n }\n})(window);\n"],"names":["window","BrainfishAnalytics","queue","q","tracker","Tracker","shift","forEach","item","slice","t","args","fn","bind","console","warn"],"mappings":"gDAWEA,GAAAA,CACA,GAAIA,EAAOC,oBAAsB,MAAOD,EAAOC,mBAAoB,CACjE,MAAMC,EAAQF,EAAOC,mBAAmBE,GAAK,CAAA,EACvCC,EAAU,IAAIC,UAAQH,EAAMI,MAAAA,EAAQ,CACpCJ,CAAAA,EAAAA,EAAAK,QAASC,GAAAA,CACTA,EAAK,CAAMJ,IAAAA,GACLA,EAAAI,EAAK,CAAOA,CAAAA,EAAAA,GAAAA,EAAKC,MAAM,CAAA,CAAA,CACjC,CAGFT,EAAAA,EAAOC,mBAAqB,CAACS,KAAMC,IAAAA,CAC3B,MAAAC,EAAKR,EAAQM,CAAKN,EAAAA,EAAQM,CAAGG,EAAAA,KAAKT,CAAW,EAAA,OACxCQ,OAAAA,GAAO,WAChBA,EAAMD,GAAAA,CAAAA,EAEEG,QAAAC,KAAK,UAAUL,CAAAA,uCAAAA,CACzB,CAEJ,CACF,GAAGV,MAAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {}
|
package/dist/tracker.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Tracker as c } from "./index.js";
|
|
2
|
+
((s) => {
|
|
3
|
+
if (s.BrainfishAnalytics && "q" in s.BrainfishAnalytics) {
|
|
4
|
+
const o = s.BrainfishAnalytics.q || [], n = new c(o.shift()[1]);
|
|
5
|
+
o.forEach((i) => {
|
|
6
|
+
i[0] in n && n[i[0]](...i.slice(1));
|
|
7
|
+
}), s.BrainfishAnalytics = (i, ...t) => {
|
|
8
|
+
const a = n[i] ? n[i].bind(n) : void 0;
|
|
9
|
+
typeof a == "function" ? a(...t) : console.warn(`Method ${i} does not exist on BrainfishAnalytics`);
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
})(window);
|
|
13
|
+
//# sourceMappingURL=tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.js","sources":["../src/tracker.ts"],"sourcesContent":["import { Tracker } from './index';\n\ndeclare global {\n interface Window {\n BrainfishAnalytics: {\n q?: [string, ...any[]];\n (method: string, ...args: any[]): void;\n };\n }\n}\n\n((window) => {\n if (window.BrainfishAnalytics && 'q' in window.BrainfishAnalytics) {\n const queue = window.BrainfishAnalytics.q || [];\n const tracker = new Tracker(queue.shift()[1]) as any;\n queue.forEach((item) => {\n if (item[0] in tracker) {\n tracker[item[0]](...item.slice(1));\n }\n });\n\n window.BrainfishAnalytics = (t, ...args) => {\n const fn = tracker[t] ? tracker[t].bind(tracker) : undefined;\n if (typeof fn === 'function') {\n fn(...args);\n } else {\n console.warn(`Method ${t} does not exist on BrainfishAnalytics`);\n }\n };\n }\n})(window);\n"],"names":["window","BrainfishAnalytics","queue","q","tracker","Tracker","shift","forEach","item","slice","t","args","fn","bind","console","warn"],"mappings":";CAWEA,CAAAA,MACA;AAAA,MAAIA,EAAOC,sBAAsB,OAAOD,EAAOC,oBAAoB;AACjE,UAAMC,IAAQF,EAAOC,mBAAmBE,KAAK,CAAA,GACvCC,IAAU,IAAIC,EAAQH,EAAMI,MAAQ,EAAA,CAAA,CAAA;AACpCJ,IAAAA,EAAAK,QAASC,OACTA;AAAAA,QAAK,CAAMJ,KAAAA,KACLA,EAAAI,EAAK,CAAOA,CAAAA,EAAAA,GAAAA,EAAKC,MAAM,CAAA,CAAA;AAAA,IACjC,CAGFT,GAAAA,EAAOC,qBAAqB,CAACS,MAAMC,MAAAA;AAC3B,YAAAC,IAAKR,EAAQM,CAAAA,IAAKN,EAAQM,CAAAA,EAAGG,KAAKT,CAAAA,IAAAA;AACtB,MAAA,OAAPQ,KAAO,aAChBA,EAAAA,GAAMD,CAEEG,IAAAA,QAAAC,KAAK,UAAUL,CACzB,uCAAA;AAAA,IAAA;AAAA,EAEJ;AACF,GAAGV,MAAAA;"}
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -18,7 +18,7 @@ export type TrackerOptions = TrackerSdkOptions & {
|
|
|
18
18
|
|
|
19
19
|
function toCamelCase(str: string) {
|
|
20
20
|
return str.replace(/([-_][a-z])/gi, ($1) =>
|
|
21
|
-
$1.toUpperCase().replace('-', '').replace('_', '')
|
|
21
|
+
$1.toUpperCase().replace('-', '').replace('_', '')
|
|
22
22
|
);
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -135,8 +135,8 @@ export class Tracker extends TrackerSdk {
|
|
|
135
135
|
const element = btn?.getAttribute('data-track')
|
|
136
136
|
? btn
|
|
137
137
|
: anchor?.getAttribute('data-track')
|
|
138
|
-
|
|
139
|
-
|
|
138
|
+
? anchor
|
|
139
|
+
: null;
|
|
140
140
|
if (element) {
|
|
141
141
|
const properties: Record<string, unknown> = {};
|
|
142
142
|
for (const attr of element.attributes) {
|
|
@@ -157,7 +157,7 @@ export class Tracker extends TrackerSdk {
|
|
|
157
157
|
async screenView(path: string, properties?: TrackProperties): Promise<void>;
|
|
158
158
|
async screenView(
|
|
159
159
|
pathOrProperties?: string | TrackProperties,
|
|
160
|
-
propertiesOrUndefined?: TrackProperties
|
|
160
|
+
propertiesOrUndefined?: TrackProperties
|
|
161
161
|
): Promise<void> {
|
|
162
162
|
if (this.isServer()) {
|
|
163
163
|
return;
|
|
@@ -184,7 +184,7 @@ export class Tracker extends TrackerSdk {
|
|
|
184
184
|
this.lastPath = path;
|
|
185
185
|
super.track('screen_view', {
|
|
186
186
|
...(properties ?? {}),
|
|
187
|
-
|
|
187
|
+
__screenshot: snapshot,
|
|
188
188
|
__path: path,
|
|
189
189
|
__title: document.title,
|
|
190
190
|
});
|
package/vite.config.ts
CHANGED
|
@@ -21,10 +21,11 @@ export default defineConfig({
|
|
|
21
21
|
target: 'es2015',
|
|
22
22
|
sourcemap: true,
|
|
23
23
|
lib: {
|
|
24
|
-
entry: 'index.ts',
|
|
24
|
+
entry: ['index.ts', 'src/tracker.ts'],
|
|
25
25
|
name: 'BrainfishAnalytics',
|
|
26
26
|
formats: ['es', 'cjs'],
|
|
27
|
-
fileName: (format, entry) =>
|
|
27
|
+
fileName: (format, entry) =>
|
|
28
|
+
`${entry}${format === 'es' ? '' : '.cjs'}.js`,
|
|
28
29
|
},
|
|
29
30
|
minify: true,
|
|
30
31
|
terserOptions: {
|
|
@@ -38,7 +39,7 @@ export default defineConfig({
|
|
|
38
39
|
plugins: [terser()],
|
|
39
40
|
external: ['@google-cloud/dlp'],
|
|
40
41
|
output: {
|
|
41
|
-
inlineDynamicImports: true, // Ensures all imports are inlined into the main bundle
|
|
42
|
+
// inlineDynamicImports: true, // Ensures all imports are inlined into the main bundle
|
|
42
43
|
manualChunks: undefined, // Disables code splitting
|
|
43
44
|
},
|
|
44
45
|
},
|