@phystack/analytics-publisher 4.3.40-dev

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.
Files changed (69) hide show
  1. package/README.md +436 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/adapters/ITransportAdapter.d.ts +9 -0
  4. package/dist/adapters/ITransportAdapter.d.ts.map +1 -0
  5. package/dist/adapters/ITransportAdapter.js +3 -0
  6. package/dist/adapters/ITransportAdapter.js.map +1 -0
  7. package/dist/adapters/event-hub/EventHubAdapter.d.ts +33 -0
  8. package/dist/adapters/event-hub/EventHubAdapter.d.ts.map +1 -0
  9. package/dist/adapters/event-hub/EventHubAdapter.js +65 -0
  10. package/dist/adapters/event-hub/EventHubAdapter.js.map +1 -0
  11. package/dist/adapters/kafka/KafkaAdapter.d.ts +21 -0
  12. package/dist/adapters/kafka/KafkaAdapter.d.ts.map +1 -0
  13. package/dist/adapters/kafka/KafkaAdapter.js +163 -0
  14. package/dist/adapters/kafka/KafkaAdapter.js.map +1 -0
  15. package/dist/adapters/kafka/index.d.ts +3 -0
  16. package/dist/adapters/kafka/index.d.ts.map +1 -0
  17. package/dist/adapters/kafka/index.js +24 -0
  18. package/dist/adapters/kafka/index.js.map +1 -0
  19. package/dist/adapters/kafka/types.d.ts +29 -0
  20. package/dist/adapters/kafka/types.d.ts.map +1 -0
  21. package/dist/adapters/kafka/types.js +3 -0
  22. package/dist/adapters/kafka/types.js.map +1 -0
  23. package/dist/client/AnalyticsClient.d.ts +96 -0
  24. package/dist/client/AnalyticsClient.d.ts.map +1 -0
  25. package/dist/client/AnalyticsClient.js +489 -0
  26. package/dist/client/AnalyticsClient.js.map +1 -0
  27. package/dist/commands/PublishCommand.d.ts +22 -0
  28. package/dist/commands/PublishCommand.d.ts.map +1 -0
  29. package/dist/commands/PublishCommand.js +32 -0
  30. package/dist/commands/PublishCommand.js.map +1 -0
  31. package/dist/decorators/RetryDecorator.d.ts +11 -0
  32. package/dist/decorators/RetryDecorator.d.ts.map +1 -0
  33. package/dist/decorators/RetryDecorator.js +37 -0
  34. package/dist/decorators/RetryDecorator.js.map +1 -0
  35. package/dist/factories/AdapterFactory.d.ts +8 -0
  36. package/dist/factories/AdapterFactory.d.ts.map +1 -0
  37. package/dist/factories/AdapterFactory.js +25 -0
  38. package/dist/factories/AdapterFactory.js.map +1 -0
  39. package/dist/index.d.ts +16 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +29 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/observers/MetricsObserver.d.ts +11 -0
  44. package/dist/observers/MetricsObserver.d.ts.map +1 -0
  45. package/dist/observers/MetricsObserver.js +15 -0
  46. package/dist/observers/MetricsObserver.js.map +1 -0
  47. package/dist/publishers/BasePublisher.d.ts +15 -0
  48. package/dist/publishers/BasePublisher.d.ts.map +1 -0
  49. package/dist/publishers/BasePublisher.js +54 -0
  50. package/dist/publishers/BasePublisher.js.map +1 -0
  51. package/dist/publishers/ClientPublisher.d.ts +6 -0
  52. package/dist/publishers/ClientPublisher.d.ts.map +1 -0
  53. package/dist/publishers/ClientPublisher.js +27 -0
  54. package/dist/publishers/ClientPublisher.js.map +1 -0
  55. package/dist/publishers/EventPublisher.d.ts +6 -0
  56. package/dist/publishers/EventPublisher.d.ts.map +1 -0
  57. package/dist/publishers/EventPublisher.js +15 -0
  58. package/dist/publishers/EventPublisher.js.map +1 -0
  59. package/dist/publishers/SessionPublisher.d.ts +6 -0
  60. package/dist/publishers/SessionPublisher.d.ts.map +1 -0
  61. package/dist/publishers/SessionPublisher.js +15 -0
  62. package/dist/publishers/SessionPublisher.js.map +1 -0
  63. package/dist/types/index.d.ts +85 -0
  64. package/dist/types/index.d.ts.map +1 -0
  65. package/dist/types/index.js +16 -0
  66. package/dist/types/index.js.map +1 -0
  67. package/examples/eventhub.ts +188 -0
  68. package/examples/kafka.ts +189 -0
  69. package/package.json +68 -0
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Kafka Usage Example
3
+ *
4
+ * This example demonstrates how to use the AnalyticsClient with simplified Kafka adapter.
5
+ * One Kafka client per region deployment - loosely coupled from data residency.
6
+ * Run this with: npm run example:kafka
7
+ */
8
+
9
+ import { AnalyticsClient } from '../src/client/AnalyticsClient';
10
+
11
+ async function main() {
12
+ console.log('šŸš€ Starting Kafka Analytics Client Example...');
13
+ // Simple Kafka adapter configuration - one client per region
14
+ const kafkaAnalytics = new AnalyticsClient({
15
+ adapter: 'kafka',
16
+ adapterConfig: {
17
+ brokers: ['localhost:9092'], // Your Kafka broker
18
+ clientId: 'analytics-client',
19
+ connectionTimeout: 10000,
20
+ requestTimeout: 30000,
21
+ ssl: {
22
+ rejectUnauthorized: false,
23
+ },
24
+ sasl: {
25
+ mechanism: 'scram-sha-512',
26
+ username: 'kafka-user',
27
+ password: 'kafka-password',
28
+ },
29
+ },
30
+ bufferSize: 50,
31
+ flushIntervalMs: 1000,
32
+ maxRetries: 3,
33
+ });
34
+
35
+ try {
36
+ console.log('šŸ”§ Initializing Kafka analytics client...');
37
+ await kafkaAnalytics.init();
38
+ console.log('āœ… Kafka analytics client initialized');
39
+
40
+ console.log('šŸ“Š Publishing sample events to Kafka...');
41
+
42
+ // Publish Event (package handles date conversion automatically)
43
+ await kafkaAnalytics.publishEvent({
44
+ captureId: 'capture-123',
45
+ tenantId: 'company-x',
46
+ spaceId: 'space-123',
47
+ sessionId: 'session_789',
48
+ clientId: 'client-456',
49
+ eventType: 'button_click',
50
+ eventTime: new Date(), // Can pass Date object - package converts to ISO string
51
+ interaction: true,
52
+ ip: '192.168.1.100',
53
+ dataResidency: 'US',
54
+ str1: 'signup-btn',
55
+ str2: '/home',
56
+ });
57
+
58
+ console.log('āœ… Event published to Kafka successfully');
59
+
60
+ // Publish Session (package handles date conversion automatically)
61
+ await kafkaAnalytics.publishSession({
62
+ sessionId: 'session_789',
63
+ tenantId: 'company-x',
64
+ sessionCreated: new Date(), // Can pass Date object - package converts to ISO string
65
+ environment: 'production',
66
+ dataResidency: 'US',
67
+ country: 'United States',
68
+ spaceId: 'space-123',
69
+ appId: 'web-app',
70
+ appVersion: '1.0.0',
71
+ installationVersion: '1.0.0',
72
+ installationId: 'install-456',
73
+ deviceId: 'device-789',
74
+ clientId: 'client-456',
75
+ ip: '192.168.1.100',
76
+ locationAccuracy: 10,
77
+ latitude: 40.7128,
78
+ longitude: -74.006,
79
+ captureId: 'capture-123',
80
+ });
81
+
82
+ console.log('āœ… Session published to Kafka successfully');
83
+
84
+ // Publish Client (package handles date conversion automatically)
85
+ await kafkaAnalytics.publishClient({
86
+ clientId: 'client-kafka-123',
87
+ tenantId: 'company-x',
88
+ clientCreated: new Date(), // Can pass Date object - package converts to ISO string
89
+ clientUserAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',
90
+ clientScreenWidth: 1440,
91
+ clientScreenHeight: 900,
92
+ clientScreenColorDepth: 24,
93
+ clientScreenPixelDepth: 24,
94
+ clientIp: '192.168.1.150',
95
+ dataResidency: 'US',
96
+ country: 'United States',
97
+ latitude: 37.7749,
98
+ longitude: -122.4194,
99
+ locationAccuracy: 10,
100
+ captureId: 'capture-kafka-123',
101
+ clientDeviceVendor: 'Apple',
102
+ clientDeviceModel: 'MacBook Pro',
103
+ clientDeviceType: 'desktop',
104
+ clientOsName: 'macOS',
105
+ clientOsVersion: '14.0',
106
+ clientBrowserName: 'Safari',
107
+ clientBrowserVersion: '17.0',
108
+ clientBrowserMajor: '17',
109
+ clientBrowserEngine: 'WebKit',
110
+ clientBrowserEngineVersion: '605.1.15',
111
+ clientCpuArchitecture: 'arm64',
112
+ });
113
+
114
+ console.log('āœ… Client published to Kafka successfully');
115
+
116
+ // Batch publishing example (package handles date conversion automatically)
117
+ const events = [
118
+ {
119
+ captureId: 'capture-123',
120
+ tenantId: 'company-x',
121
+ spaceId: 'space-123',
122
+ sessionId: 'session_789',
123
+ clientId: 'client-456',
124
+ eventType: 'page_view',
125
+ eventTime: new Date(), // Can pass Date object - package converts to ISO string
126
+ interaction: false,
127
+ ip: '192.168.1.100',
128
+ dataResidency: 'US',
129
+ str1: '/products',
130
+ },
131
+ {
132
+ captureId: 'capture-123',
133
+ tenantId: 'company-x',
134
+ spaceId: 'space-123',
135
+ sessionId: 'session_789',
136
+ clientId: 'client-456',
137
+ eventType: 'product_view',
138
+ eventTime: new Date(), // Can pass Date object - package converts to ISO string
139
+ interaction: true,
140
+ ip: '192.168.1.100',
141
+ dataResidency: 'US',
142
+ productId: 'product-123',
143
+ str1: 'electronics',
144
+ },
145
+ {
146
+ captureId: 'capture-123',
147
+ tenantId: 'company-x',
148
+ spaceId: 'space-123',
149
+ sessionId: 'session_789',
150
+ clientId: 'client-456',
151
+ eventType: 'add_to_cart',
152
+ eventTime: new Date(), // Can pass Date object - package converts to ISO string
153
+ interaction: true,
154
+ ip: '192.168.1.100',
155
+ dataResidency: 'US',
156
+ productId: 'product-123',
157
+ int1: 1,
158
+ str1: 'electronics',
159
+ },
160
+ ];
161
+
162
+ console.log('šŸ“¦ Publishing batch events to Kafka...');
163
+ for (const event of events) {
164
+ await kafkaAnalytics.publishEvent(event);
165
+ }
166
+
167
+ console.log('āœ… Multiple events published to Kafka (batched)');
168
+
169
+ console.log('ā³ Waiting for batch flush...');
170
+ await new Promise(resolve => setTimeout(resolve, 4000));
171
+
172
+ console.log('\nšŸ“ Simplified Package Features:');
173
+ console.log('• Simple configuration: One Kafka client per region deployment');
174
+ console.log(
175
+ '• Automatic date conversion: Pass Date objects or strings - package handles ISO conversion'
176
+ );
177
+ console.log('• Loosely coupled: No complex multi-region logic in KafkaAdapter');
178
+ console.log('• Easy to maintain: Clean, simple codebase');
179
+ console.log('• Backward compatibility: Existing string dates continue to work');
180
+ } catch (error) {
181
+ console.error('āŒ Error publishing analytics:', error);
182
+ } finally {
183
+ console.log('šŸ”’ Closing Kafka analytics client...');
184
+ await kafkaAnalytics.close();
185
+ console.log('āœ… Kafka analytics client closed');
186
+ }
187
+ }
188
+
189
+ main().catch(console.error);
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "@phystack/analytics-publisher",
3
+ "version": "4.3.40-dev",
4
+ "description": "Internal Phygrid library for publishing and validating analytics events, with support for batching, retry strategies, and observability. Designed for reliable event delivery and easy integration across services.",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "author": "https://build.phygrid.com/",
8
+ "files": [
9
+ "dist/**/*",
10
+ "examples/**/*",
11
+ "README.md"
12
+ ],
13
+ "scripts": {
14
+ "build": "rimraf dist && tsc",
15
+ "build:watch": "tsc --watch",
16
+ "dev": "ts-node src/index.ts",
17
+ "example:kafka": "ts-node examples/kafka.ts",
18
+ "example:eventhub": "ts-node examples/eventhub.ts",
19
+ "stress-test": "ts-node examples/stress-test.ts",
20
+ "start": "node dist/index.js",
21
+ "lint": "eslint src/**/*.ts",
22
+ "lint:fix": "eslint src/**/*.ts --fix",
23
+ "test": "jest",
24
+ "test:watch": "jest --watch",
25
+ "test:coverage": "jest --coverage",
26
+ "format": "prettier --write \"src/**/*.{ts,js,json,md}\"",
27
+ "format:check": "prettier --check \"src/**/*.{ts,js,json,md}\"",
28
+ "typecheck": "tsc --noEmit"
29
+ },
30
+ "license": "MIT",
31
+ "keywords": [
32
+ "phygrid",
33
+ "analytics",
34
+ "events",
35
+ "client",
36
+ "typescript",
37
+ "internal"
38
+ ],
39
+ "devDependencies": {
40
+ "@types/jest": "^29.0.0",
41
+ "@types/node": "^20.0.0",
42
+ "@typescript-eslint/eslint-plugin": "^6.21.0",
43
+ "@typescript-eslint/parser": "^6.21.0",
44
+ "eslint": "^8.0.0",
45
+ "eslint-config-prettier": "^9.0.0",
46
+ "eslint-plugin-prettier": "^5.0.0",
47
+ "jest": "^29.0.0",
48
+ "prettier": "^3.0.0",
49
+ "rimraf": "^5.0.0",
50
+ "ts-jest": "^29.0.0",
51
+ "ts-node": "^10.9.0",
52
+ "typescript": "^5.0.0"
53
+ },
54
+ "peerDependencies": {
55
+ "typescript": ">=4.9.0"
56
+ },
57
+ "dependencies": {
58
+ "@azure/event-hubs": "^6.0.0",
59
+ "kafkajs": "^2.2.4"
60
+ },
61
+ "engines": {
62
+ "node": ">=20.0.0"
63
+ },
64
+ "publishConfig": {
65
+ "access": "public"
66
+ },
67
+ "gitHead": "53c505b3ecad47ebd4f38819c07b0ec1227214a6"
68
+ }