@borisch/snitch 1.1.0 → 1.2.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 CHANGED
@@ -8,7 +8,7 @@ Modular analytics tracking library. Compose your tracker from small, focused plu
8
8
  npm install @borisch/snitch
9
9
  ```
10
10
 
11
- ## Quick Start
11
+ ## Quick Start (Browser)
12
12
 
13
13
  ```ts
14
14
  import {
@@ -38,6 +38,47 @@ const captureEvent = snitch(
38
38
  captureEvent('button_click', { buttonId: 'signup' })
39
39
  ```
40
40
 
41
+ ## Server-Side Usage
42
+
43
+ Many plugins use browser APIs (`window`, `document`, `localStorage`). Importing `@borisch/snitch` on the server will fail because some plugins reference `window` at the module level.
44
+
45
+ Use the server entry point instead:
46
+
47
+ ```ts
48
+ import {
49
+ snitch,
50
+ userPlugin,
51
+ devicePlugin,
52
+ screenPlugin,
53
+ debugLoggerPlugin,
54
+ s2sTransportPlugin,
55
+ } from '@borisch/snitch/server'
56
+ ```
57
+
58
+ The server entry point exports only the plugins and transports that work without browser APIs:
59
+
60
+ | Export | Description |
61
+ | -------------------- | ---------------------------------------------------------- |
62
+ | `snitch` | Core factory function |
63
+ | `userPlugin` | In-memory user ID tracking |
64
+ | `devicePlugin` | Device ID (falls back to random ID without `localStorage`) |
65
+ | `screenPlugin` | Screen tracking (pure state management) |
66
+ | `debugLoggerPlugin` | Console logger (silently disabled without `localStorage`) |
67
+ | `s2sTransportPlugin` | HTTP transport via `fetch()` (available in Node 18+) |
68
+
69
+ All types are also re-exported from `@borisch/snitch/server`.
70
+
71
+ **Example — server-side event tracking:**
72
+
73
+ ```ts
74
+ import { snitch, userPlugin, s2sTransportPlugin } from '@borisch/snitch/server'
75
+
76
+ const track = snitch(userPlugin(), s2sTransportPlugin({ hostname: 'analytics.example.com' })) as any
77
+
78
+ // One-shot event with a specific user ID
79
+ track.withUserId(req.userId, 'checkout_completed', { orderId: '12345' })
80
+ ```
81
+
41
82
  The `snitch()` function accepts any number of plugins and returns a `captureEvent` function. Plugins can:
42
83
 
43
84
  - **Provide event parameters** — automatically attached to every event
@@ -0,0 +1,9 @@
1
+ export { default as snitch } from './packages/snitch/index';
2
+ export { default } from './packages/snitch/index';
3
+ export type { Plugin, EventPayloadParamsProvider, InitializationHandler, EventSource, BeforeCaptureEventHandler, EventTransport, MixinProvider, } from './packages/common/plugin-interfaces';
4
+ export type { TrackerEventPayload, EventHandler, TrackerInitializationOptions, } from './packages/common/tracker-interfaces';
5
+ export { default as screenPlugin } from './packages/snitch-plugin-screens/index';
6
+ export { default as debugLoggerPlugin } from './packages/snitch-plugin-debug-logger/index';
7
+ export { default as devicePlugin } from './packages/snitch-plugin-device/index';
8
+ export { default as userPlugin } from './packages/snitch-plugin-user/index';
9
+ export { default as s2sTransportPlugin } from './packages/snitch-plugin-s2s-transport/index';
package/dist/server.js ADDED
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ // Server-safe entry point — no browser APIs required.
3
+ // Usage: import { snitch, userPlugin, ... } from '@borisch/snitch/server'
4
+ var __importDefault = (this && this.__importDefault) || function (mod) {
5
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6
+ };
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.s2sTransportPlugin = exports.userPlugin = exports.devicePlugin = exports.debugLoggerPlugin = exports.screenPlugin = exports.default = exports.snitch = void 0;
9
+ // Core
10
+ var index_1 = require("./packages/snitch/index");
11
+ Object.defineProperty(exports, "snitch", { enumerable: true, get: function () { return __importDefault(index_1).default; } });
12
+ var index_2 = require("./packages/snitch/index");
13
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(index_2).default; } });
14
+ // Server-safe plugins
15
+ var index_3 = require("./packages/snitch-plugin-screens/index");
16
+ Object.defineProperty(exports, "screenPlugin", { enumerable: true, get: function () { return __importDefault(index_3).default; } });
17
+ var index_4 = require("./packages/snitch-plugin-debug-logger/index");
18
+ Object.defineProperty(exports, "debugLoggerPlugin", { enumerable: true, get: function () { return __importDefault(index_4).default; } });
19
+ var index_5 = require("./packages/snitch-plugin-device/index");
20
+ Object.defineProperty(exports, "devicePlugin", { enumerable: true, get: function () { return __importDefault(index_5).default; } });
21
+ var index_6 = require("./packages/snitch-plugin-user/index");
22
+ Object.defineProperty(exports, "userPlugin", { enumerable: true, get: function () { return __importDefault(index_6).default; } });
23
+ // Server-safe transports
24
+ var index_7 = require("./packages/snitch-plugin-s2s-transport/index");
25
+ Object.defineProperty(exports, "s2sTransportPlugin", { enumerable: true, get: function () { return __importDefault(index_7).default; } });
26
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../server.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,0EAA0E;;;;;;AAE1E,OAAO;AACP,iDAA2D;AAAlD,gHAAA,OAAO,OAAU;AAC1B,iDAAiD;AAAxC,iHAAA,OAAO,OAAA;AAmBhB,sBAAsB;AACtB,gEAAgF;AAAvE,sHAAA,OAAO,OAAgB;AAChC,qEAA0F;AAAjF,2HAAA,OAAO,OAAqB;AACrC,+DAA+E;AAAtE,sHAAA,OAAO,OAAgB;AAChC,6DAA2E;AAAlE,oHAAA,OAAO,OAAc;AAE9B,yBAAyB;AACzB,sEAA4F;AAAnF,4HAAA,OAAO,OAAsB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@borisch/snitch",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "Modular analytics tracking library with pluggable transports",
5
5
  "keywords": [
6
6
  "analytics",
@@ -11,6 +11,16 @@
11
11
  ],
12
12
  "main": "dist/index.js",
13
13
  "typings": "dist/index.d.ts",
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/index.d.ts",
17
+ "default": "./dist/index.js"
18
+ },
19
+ "./server": {
20
+ "types": "./dist/server.d.ts",
21
+ "default": "./dist/server.js"
22
+ }
23
+ },
14
24
  "files": [
15
25
  "dist"
16
26
  ],