@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.
- package/CHANGELOG.md +68 -0
- package/LICENSE.md +21 -0
- package/README.md +361 -0
- package/bin/cli.ts +169 -0
- package/dist/Analytics.d.ts +558 -0
- package/dist/api.d.ts +109 -0
- package/dist/batching.d.ts +93 -0
- package/dist/chunk-2mx7fq49.js +4 -0
- package/dist/chunk-3z29508k.js +204 -0
- package/dist/chunk-deephkz6.js +56 -0
- package/dist/chunk-j261vgyp.js +305 -0
- package/dist/chunk-xga17tz7.js +207 -0
- package/dist/config.d.ts +132 -0
- package/dist/dashboard/components/index.d.ts +80 -0
- package/dist/dashboard/composables/useAnalytics.d.ts +99 -0
- package/dist/dashboard/index.d.ts +110 -0
- package/dist/dashboard/types/index.d.ts +144 -0
- package/dist/dashboard/utils/index.d.ts +81 -0
- package/dist/dynamodb.d.ts +86 -0
- package/dist/funnels.d.ts +104 -0
- package/dist/geolocation.d.ts +96 -0
- package/dist/index.d.ts +371 -0
- package/dist/index.js +10211 -0
- package/dist/infrastructure/cdk.d.ts +60 -0
- package/dist/infrastructure/cloudformation.d.ts +44 -0
- package/dist/infrastructure/index.d.ts +45 -0
- package/dist/infrastructure/setup.d.ts +133 -0
- package/dist/integrations/cloudflare.d.ts +76 -0
- package/dist/integrations/hono.d.ts +60 -0
- package/dist/integrations/index.d.ts +24 -0
- package/dist/integrations/nuxt.d.ts +7 -0
- package/dist/integrations/nuxt.js +42 -0
- package/dist/integrations/runtime/use-ts-analytics.d.ts +18 -0
- package/dist/integrations/runtime/use-ts-analytics.js +17 -0
- package/dist/integrations/stx.d.ts +88 -0
- package/dist/integrations/stx.js +18 -0
- package/dist/lib/crypto-random.d.ts +4 -0
- package/dist/lib/salt.d.ts +16 -0
- package/dist/local.d.ts +56 -0
- package/dist/model-connector.d.ts +145 -0
- package/dist/models/AggregatedStats.d.ts +9 -0
- package/dist/models/CampaignStats.d.ts +9 -0
- package/dist/models/Conversion.d.ts +11 -0
- package/dist/models/CustomEvent.d.ts +11 -0
- package/dist/models/DeviceStats.d.ts +9 -0
- package/dist/models/EventStats.d.ts +9 -0
- package/dist/models/GeoStats.d.ts +9 -0
- package/dist/models/Goal.d.ts +9 -0
- package/dist/models/GoalStats.d.ts +9 -0
- package/dist/models/PageStats.d.ts +11 -0
- package/dist/models/PageView.d.ts +13 -0
- package/dist/models/RealtimeStats.d.ts +9 -0
- package/dist/models/ReferrerStats.d.ts +9 -0
- package/dist/models/Session.d.ts +11 -0
- package/dist/models/Site.d.ts +11 -0
- package/dist/models/index.d.ts +28 -0
- package/dist/models/types.d.ts +60 -0
- package/dist/sqs-buffering.d.ts +243 -0
- package/dist/stacks-integration.d.ts +159 -0
- package/dist/tracking-script.d.ts +71 -0
- package/dist/tracking.d.ts +17 -0
- package/dist/tracking.js +26 -0
- package/dist/types.d.ts +595 -0
- package/dist/utils/geolocation.d.ts +111 -0
- package/dist/utils/user-agent.d.ts +17 -0
- package/dist/version.d.ts +7 -0
- package/package.json +119 -0
- package/src/Analytics.ts +3349 -0
- package/src/api.ts +1286 -0
- package/src/assets/crosswind.css +2220 -0
- package/src/batching.ts +452 -0
- package/src/components/dashboard/index.ts +18 -0
- package/src/config.ts +456 -0
- package/src/dashboard/Dashboard.stx +1517 -0
- package/src/dashboard/components/AlertCard.stx +177 -0
- package/src/dashboard/components/AnalyticsDashboard.stx +354 -0
- package/src/dashboard/components/AnimatedNumber.stx +86 -0
- package/src/dashboard/components/BarChart.stx +220 -0
- package/src/dashboard/components/BrowserBreakdown.stx +98 -0
- package/src/dashboard/components/BrowsersTable.stx +125 -0
- package/src/dashboard/components/CampaignBreakdown.stx +163 -0
- package/src/dashboard/components/CampaignTable.stx +238 -0
- package/src/dashboard/components/CountryList.stx +101 -0
- package/src/dashboard/components/DataTable.stx +226 -0
- package/src/dashboard/components/DateRangePicker.stx +77 -0
- package/src/dashboard/components/DeviceBreakdown.stx +94 -0
- package/src/dashboard/components/DevicesTable.stx +163 -0
- package/src/dashboard/components/DonutChart.stories.ts +55 -0
- package/src/dashboard/components/DonutChart.stx +157 -0
- package/src/dashboard/components/EmptyState.stx +90 -0
- package/src/dashboard/components/EngagementMetrics.stx +183 -0
- package/src/dashboard/components/EventsSection.stx +192 -0
- package/src/dashboard/components/FilterBar.stx +104 -0
- package/src/dashboard/components/FullAnalyticsDashboard.stx +455 -0
- package/src/dashboard/components/FunnelChart.stx +142 -0
- package/src/dashboard/components/GeoTable.stx +337 -0
- package/src/dashboard/components/GoalsPanel.stx +109 -0
- package/src/dashboard/components/Header.stx +39 -0
- package/src/dashboard/components/HeatmapChart.stx +140 -0
- package/src/dashboard/components/LiveActivityFeed.stx +172 -0
- package/src/dashboard/components/MetricComparison.stx +106 -0
- package/src/dashboard/components/MiniStats.stx +96 -0
- package/src/dashboard/components/OSBreakdown.stx +124 -0
- package/src/dashboard/components/PageDetailCard.stx +102 -0
- package/src/dashboard/components/PagesTable.stx +127 -0
- package/src/dashboard/components/ProgressRing.stx +89 -0
- package/src/dashboard/components/RealtimeCounter.stories.ts +45 -0
- package/src/dashboard/components/RealtimeCounter.stx +46 -0
- package/src/dashboard/components/ReferrersTable.stx +180 -0
- package/src/dashboard/components/SparklineChart.stx +160 -0
- package/src/dashboard/components/StatCard.stories.ts +58 -0
- package/src/dashboard/components/StatCard.stx +90 -0
- package/src/dashboard/components/SummaryStats.stx +81 -0
- package/src/dashboard/components/TabNav.stx +66 -0
- package/src/dashboard/components/ThemeSwitcher.stx +124 -0
- package/src/dashboard/components/TimeSeriesChart.stx +106 -0
- package/src/dashboard/components/TopList.stories.ts +58 -0
- package/src/dashboard/components/TopList.stx +74 -0
- package/src/dashboard/components/TrendIndicator.stx +84 -0
- package/src/dashboard/components/heatmap/ClickHeatmap.stx +264 -0
- package/src/dashboard/components/heatmap/ElementClickList.stx +125 -0
- package/src/dashboard/components/heatmap/HeatmapControls.stx +125 -0
- package/src/dashboard/components/heatmap/HeatmapLegend.stx +69 -0
- package/src/dashboard/components/heatmap/PageHeatmap.stx +264 -0
- package/src/dashboard/components/heatmap/ScrollHeatmap.stx +127 -0
- package/src/dashboard/components/heatmap/index.ts +12 -0
- package/src/dashboard/components/index.ts +86 -0
- package/src/dashboard/composables/useAnalytics.ts +465 -0
- package/src/dashboard/demo/DemoApp.stx +370 -0
- package/src/dashboard/demo/index.ts +8 -0
- package/src/dashboard/demo/mockData.ts +234 -0
- package/src/dashboard/index.ts +117 -0
- package/src/dashboard/stx-shim.d.ts +4 -0
- package/src/dashboard/types/index.ts +203 -0
- package/src/dashboard/utils/index.ts +426 -0
- package/src/dynamodb.ts +344 -0
- package/src/funnels.ts +534 -0
- package/src/geolocation.ts +515 -0
- package/src/handlers/alerts.ts +328 -0
- package/src/handlers/annotations.ts +128 -0
- package/src/handlers/api-keys.ts +240 -0
- package/src/handlers/auth.ts +1020 -0
- package/src/handlers/authz.ts +137 -0
- package/src/handlers/collect.ts +724 -0
- package/src/handlers/data.ts +625 -0
- package/src/handlers/experiments.ts +138 -0
- package/src/handlers/funnels.ts +216 -0
- package/src/handlers/goals.ts +218 -0
- package/src/handlers/heatmaps.ts +272 -0
- package/src/handlers/index.ts +56 -0
- package/src/handlers/lib/read-cache.ts +63 -0
- package/src/handlers/misc.ts +486 -0
- package/src/handlers/oauth.ts +233 -0
- package/src/handlers/performance.ts +388 -0
- package/src/handlers/sessions.ts +413 -0
- package/src/handlers/sharing.ts +198 -0
- package/src/handlers/stats.ts +1368 -0
- package/src/handlers/team.ts +161 -0
- package/src/handlers/uptime.ts +283 -0
- package/src/handlers/views.ts +390 -0
- package/src/handlers/webhooks.ts +226 -0
- package/src/heatmap/index.ts +32 -0
- package/src/heatmap/tracking-script.ts +452 -0
- package/src/heatmap/types.ts +79 -0
- package/src/index.ts +387 -0
- package/src/infrastructure/cdk.ts +496 -0
- package/src/infrastructure/cloudformation.ts +595 -0
- package/src/infrastructure/index.ts +48 -0
- package/src/infrastructure/setup.ts +611 -0
- package/src/integrations/cloudflare.ts +732 -0
- package/src/integrations/hono.ts +589 -0
- package/src/integrations/index.ts +27 -0
- package/src/integrations/nuxt.ts +78 -0
- package/src/integrations/runtime/use-ts-analytics.ts +32 -0
- package/src/integrations/stx.ts +138 -0
- package/src/jobs/index.ts +127 -0
- package/src/lib/crypto-random.ts +41 -0
- package/src/lib/ddb-errors.ts +20 -0
- package/src/lib/dynamodb.ts +216 -0
- package/src/lib/email.ts +38 -0
- package/src/lib/ga-import.ts +471 -0
- package/src/lib/ga4-api.ts +244 -0
- package/src/lib/goals.ts +205 -0
- package/src/lib/index.ts +6 -0
- package/src/lib/ingest-counters.ts +123 -0
- package/src/lib/log.ts +36 -0
- package/src/lib/membership.ts +98 -0
- package/src/lib/plans.ts +90 -0
- package/src/lib/quota.ts +46 -0
- package/src/lib/rate-limit.ts +27 -0
- package/src/lib/rollups.ts +472 -0
- package/src/lib/salt.ts +97 -0
- package/src/lib/scheduler.ts +97 -0
- package/src/lib/significance.ts +66 -0
- package/src/lib/site-retention.ts +56 -0
- package/src/local.ts +360 -0
- package/src/model-connector.ts +616 -0
- package/src/models/AggregatedStats.ts +162 -0
- package/src/models/CampaignStats.ts +141 -0
- package/src/models/Conversion.ts +135 -0
- package/src/models/CustomEvent.ts +123 -0
- package/src/models/DeviceStats.ts +105 -0
- package/src/models/EventStats.ts +108 -0
- package/src/models/GeoStats.ts +112 -0
- package/src/models/Goal.ts +105 -0
- package/src/models/GoalStats.ts +106 -0
- package/src/models/PageStats.ts +152 -0
- package/src/models/PageView.ts +277 -0
- package/src/models/RealtimeStats.ts +96 -0
- package/src/models/ReferrerStats.ts +115 -0
- package/src/models/Session.ts +235 -0
- package/src/models/Site.ts +115 -0
- package/src/models/index.ts +50 -0
- package/src/models/orm/index.ts +2043 -0
- package/src/models/types.ts +71 -0
- package/src/router.ts +521 -0
- package/src/sqs-buffering.ts +806 -0
- package/src/stacks-integration.ts +527 -0
- package/src/tracking-script.ts +944 -0
- package/src/tracking.ts +27 -0
- package/src/types/analytics.ts +219 -0
- package/src/types/api.ts +75 -0
- package/src/types/bun-router.d.ts +15 -0
- package/src/types/dashboard.ts +62 -0
- package/src/types/index.ts +66 -0
- package/src/types/stx.d.ts +27 -0
- package/src/types/window.d.ts +101 -0
- package/src/types.ts +911 -0
- package/src/utils/cache.ts +148 -0
- package/src/utils/date.ts +118 -0
- package/src/utils/filters.ts +71 -0
- package/src/utils/geolocation.ts +323 -0
- package/src/utils/index.ts +9 -0
- package/src/utils/response.ts +180 -0
- package/src/utils/timezone-country.ts +242 -0
- package/src/utils/user-agent.ts +110 -0
- package/src/version.ts +7 -0
package/dist/local.d.ts
ADDED
|
@@ -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,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,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,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;
|