Skip to content

Long/analytics sdk - #59

Merged
UZ9 merged 8 commits into
mainfrom
long/analytics-sdk
Oct 27, 2025
Merged

UZ9 merged 8 commits into
mainfrom
long/analytics-sdk

Conversation

@llam36

@llam36 llam36 commented Oct 25, 2025

Copy link
Copy Markdown
Collaborator

Expose Juno Analytics SDK methods

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 AnalyticsAPI with methods to log and retrieve four event types: click, visit, input, and custom events
  • Added AnalyticsConfigAPI for managing analytics configuration (create, read, update, delete)
  • Exposed both APIs through juno.analytics and juno.analyticsConfig getters
  • Auto-generated 1840+ lines of internal API client code and 30+ model files from OpenAPI spec
  • Implemented input validation using existing validateString helper

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 analyticsConfigAPI property 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
Loading

87 files reviewed, 1 comment

Edit Code Review Agent Settings | Greptile

Comment thread src/lib/juno.ts Outdated
llam36 and others added 2 commits October 25, 2025 18:19
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
@UZ9

UZ9 commented Oct 27, 2025

Copy link
Copy Markdown
Contributor

LGTM, thanks!

@UZ9
UZ9 merged commit f911790 into main Oct 27, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants