@stacksjs/ts-analytics 0.1.6

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 (237) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/LICENSE.md +21 -0
  3. package/README.md +361 -0
  4. package/bin/cli.ts +169 -0
  5. package/dist/Analytics.d.ts +558 -0
  6. package/dist/api.d.ts +109 -0
  7. package/dist/batching.d.ts +93 -0
  8. package/dist/chunk-2mx7fq49.js +4 -0
  9. package/dist/chunk-3z29508k.js +204 -0
  10. package/dist/chunk-deephkz6.js +56 -0
  11. package/dist/chunk-j261vgyp.js +305 -0
  12. package/dist/chunk-xga17tz7.js +207 -0
  13. package/dist/config.d.ts +132 -0
  14. package/dist/dashboard/components/index.d.ts +80 -0
  15. package/dist/dashboard/composables/useAnalytics.d.ts +99 -0
  16. package/dist/dashboard/index.d.ts +110 -0
  17. package/dist/dashboard/types/index.d.ts +144 -0
  18. package/dist/dashboard/utils/index.d.ts +81 -0
  19. package/dist/dynamodb.d.ts +86 -0
  20. package/dist/funnels.d.ts +104 -0
  21. package/dist/geolocation.d.ts +96 -0
  22. package/dist/index.d.ts +371 -0
  23. package/dist/index.js +10211 -0
  24. package/dist/infrastructure/cdk.d.ts +60 -0
  25. package/dist/infrastructure/cloudformation.d.ts +44 -0
  26. package/dist/infrastructure/index.d.ts +45 -0
  27. package/dist/infrastructure/setup.d.ts +133 -0
  28. package/dist/integrations/cloudflare.d.ts +76 -0
  29. package/dist/integrations/hono.d.ts +60 -0
  30. package/dist/integrations/index.d.ts +24 -0
  31. package/dist/integrations/nuxt.d.ts +7 -0
  32. package/dist/integrations/nuxt.js +42 -0
  33. package/dist/integrations/runtime/use-ts-analytics.d.ts +18 -0
  34. package/dist/integrations/runtime/use-ts-analytics.js +17 -0
  35. package/dist/integrations/stx.d.ts +88 -0
  36. package/dist/integrations/stx.js +18 -0
  37. package/dist/lib/crypto-random.d.ts +4 -0
  38. package/dist/lib/salt.d.ts +16 -0
  39. package/dist/local.d.ts +56 -0
  40. package/dist/model-connector.d.ts +145 -0
  41. package/dist/models/AggregatedStats.d.ts +9 -0
  42. package/dist/models/CampaignStats.d.ts +9 -0
  43. package/dist/models/Conversion.d.ts +11 -0
  44. package/dist/models/CustomEvent.d.ts +11 -0
  45. package/dist/models/DeviceStats.d.ts +9 -0
  46. package/dist/models/EventStats.d.ts +9 -0
  47. package/dist/models/GeoStats.d.ts +9 -0
  48. package/dist/models/Goal.d.ts +9 -0
  49. package/dist/models/GoalStats.d.ts +9 -0
  50. package/dist/models/PageStats.d.ts +11 -0
  51. package/dist/models/PageView.d.ts +13 -0
  52. package/dist/models/RealtimeStats.d.ts +9 -0
  53. package/dist/models/ReferrerStats.d.ts +9 -0
  54. package/dist/models/Session.d.ts +11 -0
  55. package/dist/models/Site.d.ts +11 -0
  56. package/dist/models/index.d.ts +28 -0
  57. package/dist/models/types.d.ts +60 -0
  58. package/dist/sqs-buffering.d.ts +243 -0
  59. package/dist/stacks-integration.d.ts +159 -0
  60. package/dist/tracking-script.d.ts +71 -0
  61. package/dist/tracking.d.ts +17 -0
  62. package/dist/tracking.js +26 -0
  63. package/dist/types.d.ts +595 -0
  64. package/dist/utils/geolocation.d.ts +111 -0
  65. package/dist/utils/user-agent.d.ts +17 -0
  66. package/dist/version.d.ts +7 -0
  67. package/package.json +119 -0
  68. package/src/Analytics.ts +3349 -0
  69. package/src/api.ts +1286 -0
  70. package/src/assets/crosswind.css +2220 -0
  71. package/src/batching.ts +452 -0
  72. package/src/components/dashboard/index.ts +18 -0
  73. package/src/config.ts +456 -0
  74. package/src/dashboard/Dashboard.stx +1517 -0
  75. package/src/dashboard/components/AlertCard.stx +177 -0
  76. package/src/dashboard/components/AnalyticsDashboard.stx +354 -0
  77. package/src/dashboard/components/AnimatedNumber.stx +86 -0
  78. package/src/dashboard/components/BarChart.stx +220 -0
  79. package/src/dashboard/components/BrowserBreakdown.stx +98 -0
  80. package/src/dashboard/components/BrowsersTable.stx +125 -0
  81. package/src/dashboard/components/CampaignBreakdown.stx +163 -0
  82. package/src/dashboard/components/CampaignTable.stx +238 -0
  83. package/src/dashboard/components/CountryList.stx +101 -0
  84. package/src/dashboard/components/DataTable.stx +226 -0
  85. package/src/dashboard/components/DateRangePicker.stx +77 -0
  86. package/src/dashboard/components/DeviceBreakdown.stx +94 -0
  87. package/src/dashboard/components/DevicesTable.stx +163 -0
  88. package/src/dashboard/components/DonutChart.stories.ts +55 -0
  89. package/src/dashboard/components/DonutChart.stx +157 -0
  90. package/src/dashboard/components/EmptyState.stx +90 -0
  91. package/src/dashboard/components/EngagementMetrics.stx +183 -0
  92. package/src/dashboard/components/EventsSection.stx +192 -0
  93. package/src/dashboard/components/FilterBar.stx +104 -0
  94. package/src/dashboard/components/FullAnalyticsDashboard.stx +455 -0
  95. package/src/dashboard/components/FunnelChart.stx +142 -0
  96. package/src/dashboard/components/GeoTable.stx +337 -0
  97. package/src/dashboard/components/GoalsPanel.stx +109 -0
  98. package/src/dashboard/components/Header.stx +39 -0
  99. package/src/dashboard/components/HeatmapChart.stx +140 -0
  100. package/src/dashboard/components/LiveActivityFeed.stx +172 -0
  101. package/src/dashboard/components/MetricComparison.stx +106 -0
  102. package/src/dashboard/components/MiniStats.stx +96 -0
  103. package/src/dashboard/components/OSBreakdown.stx +124 -0
  104. package/src/dashboard/components/PageDetailCard.stx +102 -0
  105. package/src/dashboard/components/PagesTable.stx +127 -0
  106. package/src/dashboard/components/ProgressRing.stx +89 -0
  107. package/src/dashboard/components/RealtimeCounter.stories.ts +45 -0
  108. package/src/dashboard/components/RealtimeCounter.stx +46 -0
  109. package/src/dashboard/components/ReferrersTable.stx +180 -0
  110. package/src/dashboard/components/SparklineChart.stx +160 -0
  111. package/src/dashboard/components/StatCard.stories.ts +58 -0
  112. package/src/dashboard/components/StatCard.stx +90 -0
  113. package/src/dashboard/components/SummaryStats.stx +81 -0
  114. package/src/dashboard/components/TabNav.stx +66 -0
  115. package/src/dashboard/components/ThemeSwitcher.stx +124 -0
  116. package/src/dashboard/components/TimeSeriesChart.stx +106 -0
  117. package/src/dashboard/components/TopList.stories.ts +58 -0
  118. package/src/dashboard/components/TopList.stx +74 -0
  119. package/src/dashboard/components/TrendIndicator.stx +84 -0
  120. package/src/dashboard/components/heatmap/ClickHeatmap.stx +264 -0
  121. package/src/dashboard/components/heatmap/ElementClickList.stx +125 -0
  122. package/src/dashboard/components/heatmap/HeatmapControls.stx +125 -0
  123. package/src/dashboard/components/heatmap/HeatmapLegend.stx +69 -0
  124. package/src/dashboard/components/heatmap/PageHeatmap.stx +264 -0
  125. package/src/dashboard/components/heatmap/ScrollHeatmap.stx +127 -0
  126. package/src/dashboard/components/heatmap/index.ts +12 -0
  127. package/src/dashboard/components/index.ts +86 -0
  128. package/src/dashboard/composables/useAnalytics.ts +465 -0
  129. package/src/dashboard/demo/DemoApp.stx +370 -0
  130. package/src/dashboard/demo/index.ts +8 -0
  131. package/src/dashboard/demo/mockData.ts +234 -0
  132. package/src/dashboard/index.ts +117 -0
  133. package/src/dashboard/stx-shim.d.ts +4 -0
  134. package/src/dashboard/types/index.ts +203 -0
  135. package/src/dashboard/utils/index.ts +426 -0
  136. package/src/dynamodb.ts +344 -0
  137. package/src/funnels.ts +534 -0
  138. package/src/geolocation.ts +515 -0
  139. package/src/handlers/alerts.ts +328 -0
  140. package/src/handlers/annotations.ts +128 -0
  141. package/src/handlers/api-keys.ts +240 -0
  142. package/src/handlers/auth.ts +1020 -0
  143. package/src/handlers/authz.ts +137 -0
  144. package/src/handlers/collect.ts +724 -0
  145. package/src/handlers/data.ts +625 -0
  146. package/src/handlers/experiments.ts +138 -0
  147. package/src/handlers/funnels.ts +216 -0
  148. package/src/handlers/goals.ts +218 -0
  149. package/src/handlers/heatmaps.ts +272 -0
  150. package/src/handlers/index.ts +56 -0
  151. package/src/handlers/lib/read-cache.ts +63 -0
  152. package/src/handlers/misc.ts +486 -0
  153. package/src/handlers/oauth.ts +233 -0
  154. package/src/handlers/performance.ts +388 -0
  155. package/src/handlers/sessions.ts +413 -0
  156. package/src/handlers/sharing.ts +198 -0
  157. package/src/handlers/stats.ts +1368 -0
  158. package/src/handlers/team.ts +161 -0
  159. package/src/handlers/uptime.ts +283 -0
  160. package/src/handlers/views.ts +390 -0
  161. package/src/handlers/webhooks.ts +226 -0
  162. package/src/heatmap/index.ts +32 -0
  163. package/src/heatmap/tracking-script.ts +452 -0
  164. package/src/heatmap/types.ts +79 -0
  165. package/src/index.ts +387 -0
  166. package/src/infrastructure/cdk.ts +496 -0
  167. package/src/infrastructure/cloudformation.ts +595 -0
  168. package/src/infrastructure/index.ts +48 -0
  169. package/src/infrastructure/setup.ts +611 -0
  170. package/src/integrations/cloudflare.ts +732 -0
  171. package/src/integrations/hono.ts +589 -0
  172. package/src/integrations/index.ts +27 -0
  173. package/src/integrations/nuxt.ts +78 -0
  174. package/src/integrations/runtime/use-ts-analytics.ts +32 -0
  175. package/src/integrations/stx.ts +138 -0
  176. package/src/jobs/index.ts +127 -0
  177. package/src/lib/crypto-random.ts +41 -0
  178. package/src/lib/ddb-errors.ts +20 -0
  179. package/src/lib/dynamodb.ts +216 -0
  180. package/src/lib/email.ts +38 -0
  181. package/src/lib/ga-import.ts +471 -0
  182. package/src/lib/ga4-api.ts +244 -0
  183. package/src/lib/goals.ts +205 -0
  184. package/src/lib/index.ts +6 -0
  185. package/src/lib/ingest-counters.ts +123 -0
  186. package/src/lib/log.ts +36 -0
  187. package/src/lib/membership.ts +98 -0
  188. package/src/lib/plans.ts +90 -0
  189. package/src/lib/quota.ts +46 -0
  190. package/src/lib/rate-limit.ts +27 -0
  191. package/src/lib/rollups.ts +472 -0
  192. package/src/lib/salt.ts +97 -0
  193. package/src/lib/scheduler.ts +97 -0
  194. package/src/lib/significance.ts +66 -0
  195. package/src/lib/site-retention.ts +56 -0
  196. package/src/local.ts +360 -0
  197. package/src/model-connector.ts +616 -0
  198. package/src/models/AggregatedStats.ts +162 -0
  199. package/src/models/CampaignStats.ts +141 -0
  200. package/src/models/Conversion.ts +135 -0
  201. package/src/models/CustomEvent.ts +123 -0
  202. package/src/models/DeviceStats.ts +105 -0
  203. package/src/models/EventStats.ts +108 -0
  204. package/src/models/GeoStats.ts +112 -0
  205. package/src/models/Goal.ts +105 -0
  206. package/src/models/GoalStats.ts +106 -0
  207. package/src/models/PageStats.ts +152 -0
  208. package/src/models/PageView.ts +277 -0
  209. package/src/models/RealtimeStats.ts +96 -0
  210. package/src/models/ReferrerStats.ts +115 -0
  211. package/src/models/Session.ts +235 -0
  212. package/src/models/Site.ts +115 -0
  213. package/src/models/index.ts +50 -0
  214. package/src/models/orm/index.ts +2043 -0
  215. package/src/models/types.ts +71 -0
  216. package/src/router.ts +521 -0
  217. package/src/sqs-buffering.ts +806 -0
  218. package/src/stacks-integration.ts +527 -0
  219. package/src/tracking-script.ts +944 -0
  220. package/src/tracking.ts +27 -0
  221. package/src/types/analytics.ts +219 -0
  222. package/src/types/api.ts +75 -0
  223. package/src/types/bun-router.d.ts +15 -0
  224. package/src/types/dashboard.ts +62 -0
  225. package/src/types/index.ts +66 -0
  226. package/src/types/stx.d.ts +27 -0
  227. package/src/types/window.d.ts +101 -0
  228. package/src/types.ts +911 -0
  229. package/src/utils/cache.ts +148 -0
  230. package/src/utils/date.ts +118 -0
  231. package/src/utils/filters.ts +71 -0
  232. package/src/utils/geolocation.ts +323 -0
  233. package/src/utils/index.ts +9 -0
  234. package/src/utils/response.ts +180 -0
  235. package/src/utils/timezone-country.ts +242 -0
  236. package/src/utils/user-agent.ts +110 -0
  237. package/src/version.ts +7 -0
package/src/index.ts ADDED
@@ -0,0 +1,387 @@
1
+ export {
2
+ // Types
3
+ type AggregatedStats,
4
+ type AggregationJobStatus,
5
+ type AggregationPeriod,
6
+ AggregationPipeline,
7
+ type AggregatorOptions,
8
+ AnalyticsAggregator,
9
+ AnalyticsKeyPatterns,
10
+ AnalyticsQueryAPI,
11
+ AnalyticsStore,
12
+ type AnalyticsStoreOptions,
13
+ type CampaignStats,
14
+ type Conversion,
15
+ type CustomEvent,
16
+ type DashboardData,
17
+ type DashboardSummary,
18
+ type DateRange,
19
+ type DeviceStats,
20
+ type DeviceType,
21
+ type EventStats,
22
+ generateTrackingScript,
23
+ type GeoStats,
24
+ type Goal,
25
+ GoalMatcher,
26
+ type GoalMatchResult,
27
+ type GoalPerformance,
28
+ type GoalStats,
29
+ type GoalType,
30
+ type PageStats,
31
+ type PageView,
32
+ type PipelineJobConfig,
33
+ type PipelineJobResult,
34
+ type QueryOptions,
35
+ type RealtimeData,
36
+ type RealtimeStats,
37
+ type ReferrerStats,
38
+ type Session,
39
+ type Site,
40
+ type SiteSettings,
41
+ type TimeSeriesPoint,
42
+ type TopItem,
43
+ type TrackingScriptOptions,
44
+ } from './Analytics'
45
+
46
+ // API Handlers
47
+ export {
48
+ AnalyticsAPI,
49
+ type AnalyticsAPIConfig,
50
+ type AnalyticsRequest,
51
+ type AnalyticsResponse,
52
+ type CollectPayload,
53
+ createBunRouter,
54
+ createLambdaHandler,
55
+ type HandlerContext,
56
+ type SessionStore,
57
+ } from './api'
58
+
59
+ // Configuration
60
+ export {
61
+ type AnalyticsConfig,
62
+ defaultAnalyticsConfig,
63
+ defaultConfig,
64
+ defaultGSIs,
65
+ defaultSingleTableConfig,
66
+ defineConfig,
67
+ getConfig,
68
+ getTableConfig,
69
+ getTtlForEntity,
70
+ resetConfig,
71
+ setConfig,
72
+ type UserAnalyticsConfig,
73
+ } from './config'
74
+
75
+ // Dashboard UI Components
76
+ export {
77
+ // Main dashboards
78
+ AnalyticsDashboard,
79
+ FullAnalyticsDashboard,
80
+
81
+ // Core components
82
+ StatCard,
83
+ RealtimeCounter,
84
+ ThemeSwitcher,
85
+
86
+ // Chart components
87
+ TimeSeriesChart,
88
+ DonutChart,
89
+ BarChart,
90
+ FunnelChart,
91
+ SparklineChart,
92
+ ProgressRing,
93
+ HeatmapChart,
94
+ MetricComparison,
95
+
96
+ // Breakdown components
97
+ DeviceBreakdown,
98
+ BrowserBreakdown,
99
+ OSBreakdown,
100
+ CampaignBreakdown,
101
+ CountryList,
102
+
103
+ // Data & interaction
104
+ DataTable,
105
+ TopList,
106
+ FilterBar,
107
+ DateRangePicker,
108
+ PageDetailCard,
109
+ GoalsPanel,
110
+
111
+ // Real-time & activity
112
+ LiveActivityFeed,
113
+ EngagementMetrics,
114
+ TrendIndicator,
115
+ AnimatedNumber,
116
+ MiniStats,
117
+ EmptyState,
118
+
119
+ // Alert
120
+ AlertCard,
121
+
122
+ // Composables
123
+ AnalyticsClient,
124
+ createAnalyticsComposable,
125
+ createRealtimePoller,
126
+ fetchDashboardData,
127
+ useAnalytics,
128
+
129
+ // Utilities
130
+ calculateAxisTicks,
131
+ calculateChange,
132
+ calculatePercentageChange,
133
+ formatCompact,
134
+ formatDate,
135
+ formatDateRange,
136
+ formatDuration,
137
+ formatNumber,
138
+ formatPercentage,
139
+ getDateRangeFromPreset,
140
+ getDateRangePreset,
141
+ dateRangePresets,
142
+
143
+ // Theme
144
+ defaultTheme,
145
+ darkTheme,
146
+
147
+ // Types
148
+ type AnalyticsApiConfig,
149
+ type ChartProps,
150
+ type DashboardTheme,
151
+ type DateRangePreset,
152
+ type RealtimeCounterProps,
153
+ type StatCardProps,
154
+ type TimeSeriesDataPoint,
155
+ type TopListProps,
156
+ } from './dashboard'
157
+
158
+ // DynamoDB Utilities
159
+ export {
160
+ buildGSI1PK,
161
+ buildPeriodSK,
162
+ buildPK,
163
+ buildSiteQuery,
164
+ buildSK,
165
+ buildTimeRangeQuery,
166
+ buildTimestampKey,
167
+ determinePeriod,
168
+ fromDynamoValue,
169
+ generateId,
170
+ generateSessionId,
171
+ getDailySalt,
172
+ getSharedDailySalt,
173
+ getPeriodStart,
174
+ hashVisitorId,
175
+ KeyPatterns,
176
+ marshal,
177
+ toDynamoValue,
178
+ unmarshal,
179
+ } from './dynamodb'
180
+
181
+ // Infrastructure (CloudFormation, CDK, Setup)
182
+ export {
183
+ type AnalyticsApiProps,
184
+ type AnalyticsTableProps,
185
+ checkTableStatus,
186
+ type CloudFormationConfig,
187
+ createAnalyticsTable,
188
+ createPitrMigration,
189
+ createStreamsMigration,
190
+ createTimeBasedGsiMigration,
191
+ type DynamoDBClientLike,
192
+ enableTtl,
193
+ generateAwsCliCommands,
194
+ generateCdkCode,
195
+ generateCdkTableCode,
196
+ generateCloudFormationJson,
197
+ generateCloudFormationTemplate,
198
+ generateCloudFormationYaml,
199
+ generateCreateTableInput,
200
+ generateSamTemplate,
201
+ generateSamYaml,
202
+ type MigrationResult,
203
+ type MigrationStep,
204
+ printSetupInstructions,
205
+ runMigrations,
206
+ type SetupConfig,
207
+ type SetupResult,
208
+ } from './infrastructure'
209
+
210
+ // Local Development
211
+ export {
212
+ defaultLocalConfig,
213
+ defaultSeedOptions,
214
+ generateAwsCliCommand,
215
+ generateDockerCompose,
216
+ generateLocalCreateTableInput,
217
+ generateSeedData,
218
+ type LocalDynamoDBConfig,
219
+ printLocalSetupInstructions,
220
+ type SeedDataOptions,
221
+ } from './local'
222
+
223
+ // Model Connector (Single-Table Design Integration)
224
+ export {
225
+ type AccessPattern,
226
+ analyticsModelRegistry,
227
+ type EntityDesign,
228
+ generateAccessPatternMatrix,
229
+ generateAnalyticsDesignDoc,
230
+ generateAnalyticsSingleTableDesign,
231
+ getAllAnalyticsModels,
232
+ getAnalyticsModel,
233
+ getAnalyticsModelNames,
234
+ type SingleTableDesign,
235
+ type StacksModelDefinition,
236
+ } from './model-connector'
237
+
238
+ // Stacks Model Definitions
239
+ export {
240
+ AggregatedStatsModel,
241
+ type AnalyticsModelName,
242
+ analyticsModels,
243
+ CampaignStatsModel,
244
+ ConversionModel,
245
+ CustomEventModel,
246
+ DeviceStatsModel,
247
+ EventStatsModel,
248
+ GeoStatsModel,
249
+ GoalModel,
250
+ GoalStatsModel,
251
+ PageStatsModel,
252
+ PageViewModel,
253
+ RealtimeStatsModel,
254
+ ReferrerStatsModel,
255
+ SessionModel,
256
+ SiteModel,
257
+ } from './models'
258
+
259
+ // Stacks Integration
260
+ export {
261
+ createAnalyticsDriver,
262
+ createAnalyticsMiddleware,
263
+ createDashboardActions,
264
+ createServerTrackingMiddleware,
265
+ type DynamoDBAnalyticsConfig,
266
+ DynamoDBAnalyticsDriver,
267
+ type StacksAnalyticsOptions,
268
+ } from './stacks-integration'
269
+
270
+ // Framework Integrations
271
+ export {
272
+ analyticsMiddleware,
273
+ type AnalyticsMiddlewareOptions,
274
+ type CloudflareEnv,
275
+ type CloudflareHandlerOptions,
276
+ createAnalyticsHandler,
277
+ createAnalyticsRoutes,
278
+ createD1Adapter,
279
+ mountAnalyticsRoutes,
280
+ type StorageAdapter,
281
+ } from './integrations'
282
+
283
+ // Batching Utilities
284
+ export {
285
+ type BatchItem,
286
+ type BatchQueueOptions,
287
+ type BatchWriteResult,
288
+ chunk,
289
+ createBatchProcessor,
290
+ type DynamoDBBatchClient,
291
+ EventBatchQueue,
292
+ parallelProcess,
293
+ withRetry,
294
+ } from './batching'
295
+
296
+ // SQS-Based Write Buffering (for high-throughput scenarios)
297
+ // Extends ts-cloud for infrastructure - see cloud.config.ts
298
+ export {
299
+ type AnalyticsEvent,
300
+ createAnalyticsProducer,
301
+ defaultSQSConfig,
302
+ EventBuffer,
303
+ type EventProcessor,
304
+ generateSQSResources,
305
+ getAllShardKeys,
306
+ getRandomShardedPartitionKey,
307
+ getShardedPartitionKey,
308
+ isSQSBufferingEnabled,
309
+ type ProcessResult,
310
+ type RealtimeUpdate,
311
+ type SQSClient,
312
+ type SQSConfig,
313
+ SQSEventConsumer,
314
+ SQSEventProducer,
315
+ type SQSLambdaMessage,
316
+ type SQSMessage,
317
+ type SQSRawMessage,
318
+ type SQSSendResult,
319
+ WriteCoalescer,
320
+ } from './sqs-buffering'
321
+
322
+ // Funnel Analysis
323
+ export {
324
+ calculateDropOffRate,
325
+ contentEngagementFunnel,
326
+ createFunnel,
327
+ ecommerceCheckoutFunnel,
328
+ formatFunnelReport,
329
+ type Funnel,
330
+ type FunnelAnalysis,
331
+ FunnelAnalyzer,
332
+ type FunnelStep,
333
+ type FunnelStepAnalysis,
334
+ type FunnelStepMatcher,
335
+ identifyDropOffPoints,
336
+ saasSignupFunnel,
337
+ type UserJourney,
338
+ } from './funnels'
339
+
340
+ // Tracking Script Generator
341
+ export {
342
+ generateFullTrackingScript,
343
+ generateGA4StyleScript,
344
+ generateInlineTrackingScript,
345
+ generateMinimalTrackingScript,
346
+ generateTrackingSnippet,
347
+ type TrackingScriptConfig,
348
+ } from './tracking-script'
349
+
350
+ // IP Geolocation & Location Services
351
+ export {
352
+ createIpApiProvider,
353
+ createMaxMindProvider,
354
+ extractCloudflareGeo,
355
+ extractVercelGeo,
356
+ formatGeoLocation,
357
+ formatGeoLocationShort,
358
+ type GeoLocation,
359
+ type GeoProvider,
360
+ GeolocationService,
361
+ type GeoServiceConfig,
362
+ getGeolocationService,
363
+ type IPGeoResult,
364
+ lookupFromHeaders,
365
+ lookupIP,
366
+ } from './geolocation'
367
+
368
+ // Reusable, backend-agnostic tracking + privacy primitives. These are the
369
+ // building blocks a self-hosted analytics app (e.g. ghostanalytics) composes:
370
+ // User-Agent parsing, bot filtering, cookieless visitor hashing, IP
371
+ // anonymization, CDN geo-header extraction, and referrer classification. They
372
+ // carry no DynamoDB/AWS coupling, so any storage backend can use them.
373
+ export {
374
+ getBrowserFamily,
375
+ isBot,
376
+ type ParsedUserAgent,
377
+ parseUserAgent,
378
+ } from './utils/user-agent'
379
+ export {
380
+ anonymizeIp,
381
+ countryCodeOf,
382
+ countryFlagEmoji,
383
+ getCountryFromHeaders,
384
+ getRegionFromHeaders,
385
+ isSpamReferrer,
386
+ parseReferrerSource,
387
+ } from './utils/geolocation'