Repository navigation
Long/analytics sdk - #59
Conversation
There was a problem hiding this comment.
Disclaimer: This comment was AI-generated and is not necessarily completely accurate. Please take code comments with a grain of salt.
Greptile Overview
Greptile Summary
This PR exposes analytics functionality in the Juno SDK by adding two new API classes (AnalyticsAPI and AnalyticsConfigAPI) and integrating them into the main JunoAPI class.
Key changes:
- Added
AnalyticsAPIwith methods to log and retrieve four event types: click, visit, input, and custom events - Added
AnalyticsConfigAPIfor managing analytics configuration (create, read, update, delete) - Exposed both APIs through
juno.analyticsandjuno.analyticsConfiggetters - Auto-generated 1840+ lines of internal API client code and 30+ model files from OpenAPI spec
- Implemented input validation using existing
validateStringhelper
Architecture:
The implementation follows the existing SDK pattern with public-facing wrapper classes (src/lib/) that validate inputs and delegate to auto-generated internal API clients (src/internal/api/). All analytics methods require authentication via API key passed during juno.init().
Issue found:
analyticsConfigAPI property in src/lib/juno.ts:18 is missing the optional ? operator, causing a TypeScript error since it's not initialized in the constructor.
Confidence Score: 4/5
- Safe to merge after fixing the TypeScript syntax error in juno.ts
- The PR follows established patterns and mostly consists of auto-generated code from OpenAPI spec. However, there's a critical TypeScript syntax error where
analyticsConfigAPIproperty lacks the optional operator, which will prevent compilation. Once fixed, the code is well-structured with proper validation. - src/lib/juno.ts requires fixing the missing optional operator on line 18
Important Files Changed
File Analysis
| Filename | Score | Overview |
|---|---|---|
| src/lib/juno.ts | 3/5 | exposed analytics and analyticsConfig APIs, but analyticsConfigAPI property missing optional operator causing TypeScript error |
| src/lib/analytics.ts | 5/5 | added AnalyticsAPI wrapper with validation for logging and retrieving click, visit, input, and custom events |
| src/lib/analyticsConfig.ts | 5/5 | added AnalyticsConfigAPI for CRUD operations on analytics configuration with proper validation |
| src/internal/api/analyticsApi.ts | 5/5 | auto-generated OpenAPI client for analytics endpoints with proper authentication and serialization |
| src/internal/api/analyticsConfigApi.ts | 5/5 | auto-generated OpenAPI client for analytics config endpoints with CRUD operations |
Sequence Diagram
sequenceDiagram
participant Client
participant JunoAPI
participant AnalyticsAPI
participant AnalyticsConfigAPI
participant InternalAnalyticsApi
participant InternalAnalyticsConfigApi
participant Backend
Note over Client,Backend: Analytics Configuration Flow
Client->>JunoAPI: juno.init({apiKey, baseURL})
JunoAPI->>AnalyticsAPI: new AnalyticsAPI(baseURL, apiKey)
JunoAPI->>AnalyticsConfigAPI: new AnalyticsConfigAPI(baseURL, apiKey)
Client->>JunoAPI: juno.analyticsConfig.createAnalyticsConfig(config)
JunoAPI->>AnalyticsConfigAPI: createAnalyticsConfig(config)
AnalyticsConfigAPI->>AnalyticsConfigAPI: validateString(clientAnalyticsKey)
AnalyticsConfigAPI->>AnalyticsConfigAPI: validateString(serverAnalyticsKey)
AnalyticsConfigAPI->>InternalAnalyticsConfigApi: analyticsConfigControllerCreateAnalyticsConfig(config)
InternalAnalyticsConfigApi->>Backend: POST /analytics/config
Backend-->>InternalAnalyticsConfigApi: AnalyticsConfigResponse
InternalAnalyticsConfigApi-->>AnalyticsConfigAPI: response.body
AnalyticsConfigAPI-->>Client: AnalyticsConfigResponse
Note over Client,Backend: Analytics Event Logging Flow
Client->>JunoAPI: juno.analytics.logClickEvent(event)
JunoAPI->>AnalyticsAPI: logClickEvent(event)
AnalyticsAPI->>AnalyticsAPI: validateString(objectId)
AnalyticsAPI->>AnalyticsAPI: validateString(userId)
AnalyticsAPI->>InternalAnalyticsApi: analyticsControllerLogClickEvent(event)
InternalAnalyticsApi->>Backend: POST /analytics/events/click
Backend-->>InternalAnalyticsApi: ClickEventResponse
InternalAnalyticsApi-->>AnalyticsAPI: response.body
AnalyticsAPI-->>Client: ClickEventResponse
Note over Client,Backend: Analytics Event Retrieval Flow
Client->>JunoAPI: juno.analytics.getClickEventsPaginated(params)
JunoAPI->>AnalyticsAPI: getClickEventsPaginated(params)
AnalyticsAPI->>AnalyticsAPI: validateString(projectName)
AnalyticsAPI->>InternalAnalyticsApi: analyticsControllerGetClickEventsPaginated(...)
InternalAnalyticsApi->>Backend: GET /analytics/events/click?projectName=...
Backend-->>InternalAnalyticsApi: GetClickEventsResponse
InternalAnalyticsApi-->>AnalyticsAPI: response.body
AnalyticsAPI-->>Client: GetClickEventsResponse
87 files reviewed, 1 comment
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
|
LGTM, thanks! |
Expose Juno Analytics SDK methods