@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
@@ -0,0 +1,56 @@
1
+ import type { AnalyticsConfig } from './config';
2
+ /**
3
+ * Generate CreateTable input for analytics table (local development)
4
+ */
5
+ export declare function generateLocalCreateTableInput(config?: AnalyticsConfig): {
6
+ TableName: string
7
+ KeySchema: Array<{ AttributeName: string, KeyType: 'HASH' | 'RANGE' }>
8
+ AttributeDefinitions: Array<{ AttributeName: string, AttributeType: 'S' | 'N' | 'B' }>
9
+ BillingMode: string
10
+ GlobalSecondaryIndexes?: Array<{
11
+ IndexName: string
12
+ KeySchema: Array<{ AttributeName: string, KeyType: 'HASH' | 'RANGE' }>
13
+ Projection: { ProjectionType: string }
14
+ }>
15
+ };
16
+ /**
17
+ * Generate AWS CLI command to create the table
18
+ */
19
+ export declare function generateAwsCliCommand(config?: AnalyticsConfig): string;
20
+ /**
21
+ * Generate docker-compose.yml for local development
22
+ */
23
+ export declare function generateDockerCompose(localConfig?: Partial<LocalDynamoDBConfig>): string;
24
+ /**
25
+ * Generate seed data for local development
26
+ */
27
+ export declare function generateSeedData(options?: Partial<SeedDataOptions>): {
28
+ sites: Array<Record<string, unknown>>
29
+ pageViews: Array<Record<string, unknown>>
30
+ sessions: Array<Record<string, unknown>>
31
+ };
32
+ /**
33
+ * Print setup instructions for local development
34
+ */
35
+ export declare function printLocalSetupInstructions(): void;
36
+ export declare const defaultLocalConfig: LocalDynamoDBConfig;
37
+ export declare const defaultSeedOptions: SeedDataOptions;
38
+ // ============================================================================
39
+ // Local DynamoDB Configuration
40
+ // ============================================================================
41
+ export declare interface LocalDynamoDBConfig {
42
+ port: number
43
+ region: string
44
+ endpoint: string
45
+ sharedDb: boolean
46
+ dbPath: string
47
+ }
48
+ // ============================================================================
49
+ // Seed Data
50
+ // ============================================================================
51
+ export declare interface SeedDataOptions {
52
+ sites: number
53
+ pageViewsPerSite: number
54
+ sessionsPerSite: number
55
+ daysOfHistory: number
56
+ }
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Get all analytics model names
3
+ */
4
+ export declare function getAnalyticsModelNames(): string[];
5
+ /**
6
+ * Get a specific analytics model
7
+ */
8
+ export declare function getAnalyticsModel(name: string): StacksModelDefinition | undefined;
9
+ /**
10
+ * Get all analytics models
11
+ */
12
+ export declare function getAllAnalyticsModels(): StacksModelDefinition[];
13
+ /**
14
+ * Generate single-table design from analytics models
15
+ */
16
+ export declare function generateAnalyticsSingleTableDesign(tableName?: string): SingleTableDesign;
17
+ /**
18
+ * Generate markdown documentation for analytics single-table design
19
+ */
20
+ export declare function generateAnalyticsDesignDoc(): string;
21
+ /**
22
+ * Generate access pattern matrix
23
+ */
24
+ export declare function generateAccessPatternMatrix(): string;
25
+ /**
26
+ * Map of all analytics models
27
+ */
28
+ export declare const analyticsModelRegistry: {
29
+ Site: unknown;
30
+ PageView: unknown;
31
+ Session: unknown;
32
+ CustomEvent: unknown;
33
+ Goal: unknown;
34
+ Conversion: unknown;
35
+ AggregatedStats: unknown;
36
+ PageStats: unknown;
37
+ ReferrerStats: unknown;
38
+ GeoStats: unknown;
39
+ DeviceStats: unknown;
40
+ CampaignStats: unknown;
41
+ EventStats: unknown;
42
+ GoalStats: unknown;
43
+ RealtimeStats: unknown
44
+ };
45
+ /**
46
+ * Stacks model definition (matches model-parser types)
47
+ */
48
+ export declare interface StacksModelDefinition {
49
+ name: string
50
+ table?: string
51
+ primaryKey?: string | string[]
52
+ autoIncrement?: boolean
53
+ attributes: Record<string, AttributeDefinition>
54
+ hasOne?: string[]
55
+ hasMany?: string[]
56
+ belongsTo?: string[]
57
+ belongsToMany?: string[]
58
+ traits?: ModelTraits
59
+ dynamodb?: DynamoDBKeyPatterns
60
+ indexes?: IndexDefinition[]
61
+ }
62
+ export declare interface AttributeDefinition {
63
+ required?: boolean
64
+ unique?: boolean
65
+ fillable?: boolean
66
+ hidden?: boolean
67
+ default?: unknown
68
+ validation?: {
69
+ rule?: string
70
+ message?: Record<string, string>
71
+ }
72
+ cast?: string
73
+ comment?: string
74
+ }
75
+ export declare interface ModelTraits {
76
+ useUuid?: boolean
77
+ useTimestamps?: boolean
78
+ useSoftDeletes?: boolean
79
+ useTtl?: boolean
80
+ useVersioning?: boolean
81
+ }
82
+ export declare interface DynamoDBKeyPatterns {
83
+ pk: (entity: Record<string, unknown>) => string
84
+ sk: (entity: Record<string, unknown>) => string
85
+ gsi1pk?: (entity: Record<string, unknown>) => string
86
+ gsi1sk?: (entity: Record<string, unknown>) => string
87
+ gsi2pk?: (entity: Record<string, unknown>) => string
88
+ gsi2sk?: (entity: Record<string, unknown>) => string
89
+ }
90
+ export declare interface IndexDefinition {
91
+ name: string
92
+ columns: string[]
93
+ }
94
+ /**
95
+ * Access pattern definition
96
+ */
97
+ export declare interface AccessPattern {
98
+ name: string
99
+ description: string
100
+ operation: 'Get' | 'Query' | 'Scan'
101
+ index?: 'main' | 'GSI1' | 'GSI2'
102
+ keyCondition: string
103
+ filterExpression?: string
104
+ example?: string
105
+ }
106
+ /**
107
+ * Single-table design output
108
+ */
109
+ export declare interface SingleTableDesign {
110
+ tableName: string
111
+ keySchema: {
112
+ partitionKey: { name: string, type: 'S' | 'N' | 'B' }
113
+ sortKey: { name: string, type: 'S' | 'N' | 'B' }
114
+ }
115
+ globalSecondaryIndexes: Array<{
116
+ indexName: string
117
+ partitionKey: { name: string, type: 'S' | 'N' | 'B' }
118
+ sortKey: { name: string, type: 'S' | 'N' | 'B' }
119
+ projection: 'ALL' | 'KEYS_ONLY' | string[]
120
+ }>
121
+ entities: EntityDesign[]
122
+ accessPatterns: AccessPattern[]
123
+ }
124
+ export declare interface EntityDesign {
125
+ name: string
126
+ keyPattern: {
127
+ pk: string
128
+ sk: string
129
+ gsi1pk?: string
130
+ gsi1sk?: string
131
+ gsi2pk?: string
132
+ gsi2sk?: string
133
+ }
134
+ attributes: Array<{
135
+ name: string
136
+ type: string
137
+ dynamoType: 'S' | 'N' | 'B' | 'BOOL' | 'L' | 'M' | 'SS' | 'NS' | 'BS'
138
+ required: boolean
139
+ }>
140
+ relationships: Array<{
141
+ type: 'hasOne' | 'hasMany' | 'belongsTo' | 'belongsToMany'
142
+ target: string
143
+ foreignKey?: string
144
+ }>
145
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Aggregated stats (pre-computed for fast dashboard queries)
3
+ *
4
+ * DynamoDB Keys:
5
+ * - PK: SITE#{siteId}
6
+ * - SK: STATS#{PERIOD}#{periodStart}
7
+ */
8
+ declare const AggregatedStatsModel: Model;
9
+ export default AggregatedStatsModel;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * UTM Campaign stats
3
+ *
4
+ * DynamoDB Keys:
5
+ * - PK: SITE#{siteId}
6
+ * - SK: CAMPSTATS#{PERIOD}#{periodStart}#{utmSource}[#{utmCampaign}]
7
+ */
8
+ declare const CampaignStatsModel: Model;
9
+ export default CampaignStatsModel;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Conversion record (goal completion)
3
+ *
4
+ * DynamoDB Keys:
5
+ * - PK: SITE#{siteId}
6
+ * - SK: CONVERSION#{timestamp}#{conversionId}
7
+ * - GSI1PK: SITE#{siteId}#GOAL#{goalId}
8
+ * - GSI1SK: CONVERSION#{timestamp}
9
+ */
10
+ declare const ConversionModel: Model;
11
+ export default ConversionModel;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Custom event (non-pageview events like button clicks, form submissions)
3
+ *
4
+ * DynamoDB Keys:
5
+ * - PK: SITE#{siteId}
6
+ * - SK: EVENT#{timestamp}#{eventId}
7
+ * - GSI1PK: SITE#{siteId}#EVENTNAME#{eventName}
8
+ * - GSI1SK: EVENT#{timestamp}
9
+ */
10
+ declare const CustomEventModel: Model;
11
+ export default CustomEventModel;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Device/Browser stats
3
+ *
4
+ * DynamoDB Keys:
5
+ * - PK: SITE#{siteId}
6
+ * - SK: DEVICESTATS#{PERIOD}#{periodStart}#{dimension}#{value}
7
+ */
8
+ declare const DeviceStatsModel: Model;
9
+ export default DeviceStatsModel;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Custom event stats
3
+ *
4
+ * DynamoDB Keys:
5
+ * - PK: SITE#{siteId}
6
+ * - SK: EVENTSTATS#{PERIOD}#{periodStart}#{eventName}
7
+ */
8
+ declare const EventStatsModel: Model;
9
+ export default EventStatsModel;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Geographic stats
3
+ *
4
+ * DynamoDB Keys:
5
+ * - PK: SITE#{siteId}
6
+ * - SK: GEOSTATS#{PERIOD}#{periodStart}#{country}[#{region}]
7
+ */
8
+ declare const GeoStatsModel: Model;
9
+ export default GeoStatsModel;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Goal/Conversion definition
3
+ *
4
+ * DynamoDB Keys:
5
+ * - PK: SITE#{siteId}
6
+ * - SK: GOAL#{goalId}
7
+ */
8
+ declare const GoalModel: Model;
9
+ export default GoalModel;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Goal stats (conversions)
3
+ *
4
+ * DynamoDB Keys:
5
+ * - PK: SITE#{siteId}
6
+ * - SK: GOALSTATS#{goalId}#{PERIOD}#{periodStart}
7
+ */
8
+ declare const GoalStatsModel: Model;
9
+ export default GoalStatsModel;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Page-level aggregated stats
3
+ *
4
+ * DynamoDB Keys:
5
+ * - PK: SITE#{siteId}
6
+ * - SK: PAGESTATS#{PERIOD}#{periodStart}#{path}
7
+ * - GSI1PK: SITE#{siteId}#PAGESTATS#{PERIOD}#{periodStart}
8
+ * - GSI1SK: PV#{pageViews}#{path} (for sorting by page views)
9
+ */
10
+ declare const PageStatsModel: Model;
11
+ export default PageStatsModel;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Page view event (raw event - stored temporarily for aggregation)
3
+ *
4
+ * DynamoDB Keys:
5
+ * - PK: SITE#{siteId}
6
+ * - SK: PV#{timestamp}#{pageViewId}
7
+ * - GSI1PK: SITE#{siteId}#DATE#{date}
8
+ * - GSI1SK: PATH#{path}#{pageViewId}
9
+ * - GSI2PK: SITE#{siteId}#VISITOR#{visitorId}
10
+ * - GSI2SK: PV#{timestamp}
11
+ */
12
+ declare const PageViewModel: Model;
13
+ export default PageViewModel;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Real-time stats (last 5 minutes, stored with short TTL)
3
+ *
4
+ * DynamoDB Keys:
5
+ * - PK: SITE#{siteId}
6
+ * - SK: REALTIME#{minute}
7
+ */
8
+ declare const RealtimeStatsModel: Model;
9
+ export default RealtimeStatsModel;
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Referrer stats
3
+ *
4
+ * DynamoDB Keys:
5
+ * - PK: SITE#{siteId}
6
+ * - SK: REFSTATS#{PERIOD}#{periodStart}#{source}
7
+ */
8
+ declare const ReferrerStatsModel: Model;
9
+ export default ReferrerStatsModel;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Visitor session
3
+ *
4
+ * DynamoDB Keys:
5
+ * - PK: SITE#{siteId}
6
+ * - SK: SESSION#{sessionId}
7
+ * - GSI1PK: SITE#{siteId}#SESSIONS#{date}
8
+ * - GSI1SK: SESSION#{sessionId}
9
+ */
10
+ declare const SessionModel: Model;
11
+ export default SessionModel;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Site/Website being tracked
3
+ *
4
+ * DynamoDB Keys:
5
+ * - PK: SITE#{siteId}
6
+ * - SK: SITE#{siteId}
7
+ * - GSI1PK: OWNER#{ownerId}
8
+ * - GSI1SK: SITE#{siteId}
9
+ */
10
+ declare const SiteModel: Model;
11
+ export default SiteModel;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * All analytics models for batch processing
3
+ */
4
+ export declare const analyticsModels: readonly [unknown, 'PageView', 'Session', 'CustomEvent', 'Goal', 'Conversion', unknown, 'PageStats', 'ReferrerStats', 'GeoStats', 'DeviceStats', 'CampaignStats', 'EventStats', 'GoalStats', 'RealtimeStats'];
5
+ export type AnalyticsModelName = typeof analyticsModels[number];
6
+ /**
7
+ * Analytics Models Index
8
+ *
9
+ * This module exports all Stacks-compatible model definitions
10
+ * for the privacy-focused web analytics system.
11
+ */
12
+ // Aggregation stats
13
+ export { default as AggregatedStatsModel } from './AggregatedStats';
14
+ export { default as CampaignStatsModel } from './CampaignStats';
15
+ export { default as ConversionModel } from './Conversion';
16
+ export { default as CustomEventModel } from './CustomEvent';
17
+ export { default as DeviceStatsModel } from './DeviceStats';
18
+ export { default as EventStatsModel } from './EventStats';
19
+ export { default as GeoStatsModel } from './GeoStats';
20
+ export { default as GoalModel } from './Goal';
21
+ export { default as GoalStatsModel } from './GoalStats';
22
+ export { default as PageStatsModel } from './PageStats';
23
+ export { default as PageViewModel } from './PageView';
24
+ export { default as RealtimeStatsModel } from './RealtimeStats';
25
+ export { default as ReferrerStatsModel } from './ReferrerStats';
26
+ export { default as SessionModel } from './Session';
27
+ // Core entities
28
+ export { default as SiteModel } from './Site';
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Attribute validation configuration
3
+ */
4
+ export declare interface AttributeValidation {
5
+ rule: string
6
+ min?: number
7
+ max?: number
8
+ message?: string | Record<string, string>
9
+ }
10
+ /**
11
+ * Model attribute definition
12
+ */
13
+ export declare interface ModelAttributeDefinition {
14
+ required?: boolean
15
+ unique?: boolean
16
+ fillable?: boolean
17
+ default?: unknown
18
+ validation?: AttributeValidation
19
+ cast?: string
20
+ comment?: string
21
+ }
22
+ /**
23
+ * Model traits configuration
24
+ */
25
+ export declare interface ModelTraits {
26
+ useUuid?: boolean
27
+ useTtl?: boolean
28
+ useTimestamps?: boolean
29
+ useSoftDeletes?: boolean
30
+ }
31
+ /**
32
+ * DynamoDB key configuration for single-table design
33
+ */
34
+ export declare interface DynamoDBKeyConfig {
35
+ pk?: KeyFunction
36
+ sk?: KeyFunction
37
+ gsi1pk?: KeyFunction
38
+ gsi1sk?: KeyFunction
39
+ gsi2pk?: KeyFunction
40
+ gsi2sk?: KeyFunction
41
+ gsi3pk?: KeyFunction
42
+ gsi3sk?: KeyFunction
43
+ }
44
+ /**
45
+ * Stacks Model definition interface
46
+ * Compatible with @stacksjs/types Model
47
+ */
48
+ export declare interface Model {
49
+ name: string
50
+ table?: string
51
+ primaryKey?: string | string[]
52
+ autoIncrement?: boolean
53
+ traits?: ModelTraits
54
+ belongsTo?: string[]
55
+ hasMany?: string[]
56
+ hasOne?: string[]
57
+ attributes: Record<string, ModelAttributeDefinition>
58
+ dynamodb?: DynamoDBKeyConfig
59
+ }
60
+ declare type KeyFunction = (_item: any) => string;