diff --git a/jam-ui/playwright.chrome.config.ts b/jam-ui/playwright.chrome.config.ts
new file mode 100644
index 000000000..fca5db913
--- /dev/null
+++ b/jam-ui/playwright.chrome.config.ts
@@ -0,0 +1,21 @@
+import { PlaywrightTestConfig, devices } from '@playwright/test';
+
+const config: PlaywrightTestConfig = {
+ // NO global setup for verification tests
+ use: {
+ baseURL: 'http://beta.jamkazam.local:4000',
+ actionTimeout: 10000,
+ headless: false,
+ viewport: { width: 1280, height: 720 },
+ ignoreHTTPSErrors: true,
+ video: 'retain-on-failure',
+ // Use Chrome
+ channel: 'chrome',
+ },
+ timeout: 120000, // 2 minutes per test
+ expect: {
+ timeout: 10000,
+ },
+};
+
+export default config;
diff --git a/jam-ui/playwright.verification.config.ts b/jam-ui/playwright.verification.config.ts
new file mode 100644
index 000000000..878804594
--- /dev/null
+++ b/jam-ui/playwright.verification.config.ts
@@ -0,0 +1,19 @@
+import { PlaywrightTestConfig } from '@playwright/test';
+
+const config: PlaywrightTestConfig = {
+ // NO global setup for verification tests
+ use: {
+ baseURL: 'http://beta.jamkazam.local:4000',
+ actionTimeout: 10000,
+ headless: false,
+ viewport: { width: 1280, height: 720 },
+ ignoreHTTPSErrors: true,
+ video: 'retain-on-failure',
+ },
+ timeout: 120000, // 2 minutes per test
+ expect: {
+ timeout: 10000,
+ },
+};
+
+export default config;
diff --git a/jam-ui/test/IMPLEMENTATION_APPROACH.md b/jam-ui/test/IMPLEMENTATION_APPROACH.md
new file mode 100644
index 000000000..179b76ec1
--- /dev/null
+++ b/jam-ui/test/IMPLEMENTATION_APPROACH.md
@@ -0,0 +1,429 @@
+# jam-ui Testing Implementation Approach
+
+## How I Will Achieve the Goal
+
+### Overview
+
+You've asked me to verify that jam-ui conforms to the legacy app's API request/response sequence, patterns, and timings by creating comprehensive tests. Here's my structured approach:
+
+## šÆ Main Objectives
+
+1. **API Sequence Verification** - Ensure jam-ui makes identical API calls as legacy app
+2. **UI Testing** - Test all components function correctly
+3. **E2E Testing** - Verify complete user journeys work end-to-end
+4. **Comparison Analysis** - Generate reports showing conformance
+
+## š Implementation Strategy
+
+### Phase 1: Test Infrastructure Setup
+
+**What I'll Create:**
+```
+test/
+āāā utils/
+ā āāā api-interceptor.ts # Intercept & record API calls
+ā āāā websocket-monitor.ts # Monitor WebSocket connections
+ā āāā sequence-comparator.ts # Compare API sequences
+ā āāā test-helpers.ts # Shared test utilities
+āāā fixtures/
+ā āāā legacy-sequences/ # Copied from verification
+ā ā āāā login-sequence.json
+ā ā āāā session-creation-sequence.json
+ā ā āāā session-join-sequence.json
+ā āāā users.json # Test user data
+ā āāā sessions.json # Test session data
+```
+
+**Purpose:** Reusable infrastructure for all tests
+
+---
+
+### Phase 2: API Verification Tests
+
+**What I'll Create:**
+```
+test/api-verification/
+āāā login-api.spec.ts
+āāā session-creation-api.spec.ts
+āāā session-join-api.spec.ts
+```
+
+**How They Work:**
+
+```typescript
+// Example: login-api.spec.ts
+test('jam-ui login API sequence matches legacy', async ({ page }) => {
+ const apiCalls = [];
+
+ // Intercept all API requests
+ page.on('request', req => {
+ if (req.url().includes('/api/')) {
+ apiCalls.push({
+ method: req.method(),
+ url: req.url(),
+ timestamp: Date.now()
+ });
+ }
+ });
+
+ // Perform login on jam-ui
+ await page.goto('http://beta.jamkazam.local:4000/');
+ await page.fill('[name="email"]', 'nuwan@jamkazam.com');
+ await page.fill('[name="password"]', 'jam123');
+ await page.click('button[type="submit"]');
+ await page.waitForLoadState('networkidle');
+
+ // Load expected sequence from legacy verification
+ const expectedSequence = require('../fixtures/legacy-sequences/login-sequence.json');
+
+ // Compare sequences
+ const comparison = compareAPISequences(apiCalls, expectedSequence);
+
+ // Report results
+ expect(comparison.matches).toBe(true);
+ if (!comparison.matches) {
+ console.log('Differences:', comparison.differences);
+ }
+});
+```
+
+**What This Validates:**
+- ā
Same API endpoints called
+- ā
Same order of calls
+- ā
Similar timing between calls
+- ā
Request payloads match
+- ā
Responses handled correctly
+
+---
+
+### Phase 3: WebSocket Verification Tests
+
+**What I'll Create:**
+```
+test/websocket-verification/
+āāā ws-connection.spec.ts
+āāā ws-messages.spec.ts
+```
+
+**How They Work:**
+
+```typescript
+test('jam-ui establishes correct WebSocket connections', async ({ page }) => {
+ const wsConnections = [];
+
+ page.on('websocket', ws => {
+ wsConnections.push({
+ url: ws.url(),
+ timestamp: Date.now()
+ });
+
+ ws.on('framereceived', frame => {
+ // Record messages
+ });
+ });
+
+ // Perform session join
+ await joinSession(page);
+
+ // Verify connections
+ expect(wsConnections).toHaveLength(2);
+ expect(wsConnections[0].url).toContain('localhost:3060');
+ expect(wsConnections[1].url).toContain('jamkazam.local:6767');
+});
+```
+
+---
+
+### Phase 4: UI Component Tests
+
+**What I'll Create:**
+```
+test/unit/
+āāā LoginForm.test.tsx
+āāā SessionCreationForm.test.tsx
+āāā SessionInterface.test.tsx
+```
+
+**Framework:** React Testing Library
+
+**Example:**
+
+```typescript
+import { render, screen, fireEvent, waitFor } from '@testing-library/react';
+import LoginForm from '../../src/components/auth/LoginForm';
+
+test('LoginForm submits credentials correctly', async () => {
+ const mockLogin = jest.fn();
+
+ render();
+
+ fireEvent.change(screen.getByLabelText(/email/i), {
+ target: { value: 'nuwan@jamkazam.com' }
+ });
+ fireEvent.change(screen.getByLabelText(/password/i), {
+ target: { value: 'jam123' }
+ });
+
+ fireEvent.click(screen.getByRole('button', { name: /sign in/i }));
+
+ await waitFor(() => {
+ expect(mockLogin).toHaveBeenCalledWith({
+ email: 'nuwan@jamkazam.com',
+ password: 'jam123'
+ });
+ });
+});
+```
+
+**What This Validates:**
+- ā
Forms render correctly
+- ā
User interactions work
+- ā
Validation functions properly
+- ā
Error messages display
+- ā
Loading states work
+
+---
+
+### Phase 5: E2E Integration Tests
+
+**What I'll Create:**
+```
+test/e2e/
+āāā complete-session-flow.spec.ts
+āāā login-flow.spec.ts
+āāā session-creation-flow.spec.ts
+```
+
+**How They Work:**
+
+```typescript
+test('Complete session flow: login ā create ā join', async ({ page }) => {
+ // Step 1: Login
+ await page.goto('http://beta.jamkazam.local:4000/');
+ await page.fill('[name="email"]', 'nuwan@jamkazam.com');
+ await page.fill('[name="password"]', 'jam123');
+ await page.click('button[type="submit"]');
+ await expect(page).toHaveURL(/profile|dashboard/);
+
+ // Step 2: Navigate to session creation
+ await page.click('text=create session'); // Or appropriate selector
+ await expect(page).toHaveURL(/session.*create/);
+
+ // Step 3: Fill session form
+ await page.fill('[name="session_name"]', 'Test Session');
+ await page.selectOption('[name="session_type"]', 'private');
+ await page.click('button[type="submit"]');
+
+ // Step 4: Verify session interface loads
+ await expect(page.locator('text=audio inputs')).toBeVisible();
+ await expect(page.locator('text=personal mix')).toBeVisible();
+ await expect(page.locator('text=LEAVE')).toBeVisible();
+
+ // Take screenshot for verification
+ await page.screenshot({ path: 'test-results/e2e-session-complete.png' });
+});
+```
+
+---
+
+### Phase 6: Comparison & Reporting
+
+**What I'll Create:**
+```
+test/utils/sequence-comparator.ts
+```
+
+**Features:**
+- Compare API call sequences
+- Generate visual diff reports
+- Highlight missing/extra calls
+- Show timing differences
+- Export to HTML/JSON
+
+**Example Report:**
+```
+API Sequence Comparison Report
+================================
+
+Login Flow:
+ ā
POST /api/sessions - MATCH
+ ā
GET /api/users/{id} - MATCH
+ ā GET /api/shopping_carts - MISSING in jam-ui
+ ā ļø GET /api/genres - Called later than expected (delay: 200ms)
+ ā
GET /api/countries - MATCH
+
+Session Creation Flow:
+ ā
POST /api/sessions - MATCH
+ ā POST /api/sessions/{id}/participants - MISSING
+ ā
GET /api/sessions/{id} - MATCH
+
+Summary:
+ Total API calls: 68/70 (2 missing)
+ Sequence match: 85%
+ Timing variance: ±150ms average
+```
+
+---
+
+## š§ Technical Implementation Details
+
+### Test Execution Flow
+
+```
+1. Load legacy baseline sequences from fixtures
+2. Start jam-ui application at beta.jamkazam.local:4000
+3. Execute test scenario (login, create session, join)
+4. Capture all API calls and WebSocket messages
+5. Compare with legacy baseline
+6. Generate comparison report
+7. Assert conformance criteria
+```
+
+### Key Utilities
+
+**1. API Interceptor** (`test/utils/api-interceptor.ts`)
+```typescript
+export class APIInterceptor {
+ private calls: APICall[] = [];
+
+ intercept(page: Page) {
+ page.on('request', req => this.recordRequest(req));
+ page.on('response', res => this.recordResponse(res));
+ }
+
+ getCalls(): APICall[] {
+ return this.calls;
+ }
+
+ compareWith(expected: APICall[]): ComparisonResult {
+ // Comparison logic
+ }
+}
+```
+
+**2. WebSocket Monitor** (`test/utils/websocket-monitor.ts`)
+```typescript
+export class WebSocketMonitor {
+ private connections: WSConnection[] = [];
+
+ monitor(page: Page) {
+ page.on('websocket', ws => {
+ this.recordConnection(ws);
+ ws.on('framereceived', frame => this.recordMessage(frame));
+ ws.on('framesent', frame => this.recordMessage(frame));
+ });
+ }
+
+ getConnections(): WSConnection[] {
+ return this.connections;
+ }
+}
+```
+
+**3. Sequence Comparator** (`test/utils/sequence-comparator.ts`)
+```typescript
+export function compareAPISequences(
+ actual: APICall[],
+ expected: APICall[]
+): ComparisonResult {
+ return {
+ matches: checkOrderAndContent(actual, expected),
+ missing: findMissingCalls(actual, expected),
+ extra: findExtraCalls(actual, expected),
+ outOfOrder: findOutOfOrderCalls(actual, expected),
+ timingVariance: calculateTimingVariance(actual, expected),
+ report: generateHTMLReport(actual, expected)
+ };
+}
+```
+
+---
+
+## š¦ Deliverables
+
+### 1. Test Files
+- ā
15-20 test specification files
+- ā
Test utilities and helpers
+- ā
Fixtures with legacy baseline data
+
+### 2. Reports
+- ā
HTML comparison reports
+- ā
JSON data exports
+- ā
Screenshots at each step
+- ā
HAR files for network traffic
+
+### 3. Documentation
+- ā
Test execution guide
+- ā
Failure analysis
+- ā
Recommendations for fixes
+
+---
+
+## ā±ļø Execution Timeline
+
+**Immediate (Now):**
+1. Create test infrastructure
+2. Set up API interceptors
+3. Create fixtures from verification data
+
+**Phase 1 (30 mins):**
+- API verification tests for login
+
+**Phase 2 (1 hour):**
+- API verification tests for session creation/join
+- WebSocket tests
+
+**Phase 3 (1 hour):**
+- UI component tests
+
+**Phase 4 (1 hour):**
+- E2E tests
+
+**Phase 5 (30 mins):**
+- Generate reports
+- Document findings
+
+**Total Estimated Time:** 4 hours
+
+---
+
+## š Success Metrics
+
+### API Conformance
+- **Target:** 95%+ API calls match
+- **Threshold:** Missing < 5% of calls
+- **Timing:** Within ±500ms variance
+
+### WebSocket Conformance
+- **Target:** Both connections established
+- **Threshold:** Message count within 10% of legacy
+
+### UI Functionality
+- **Target:** 100% tests passing
+- **Threshold:** No critical failures
+
+### E2E Flow
+- **Target:** Complete flow succeeds
+- **Threshold:** All assertions pass
+
+---
+
+## š Getting Started
+
+Once you approve this approach, I will:
+
+1. ā
Create all test infrastructure files
+2. ā
Implement API verification tests
+3. ā
Implement UI unit tests
+4. ā
Implement E2E tests
+5. ā
Run all tests against jam-ui
+6. ā
Generate comparison reports
+7. ā
Provide detailed findings and recommendations
+
+**Ready to proceed?** I can start implementing immediately.
+
+---
+
+**Document Status:** Awaiting Approval
+**Estimated Implementation Time:** 4 hours
+**Expected Outcome:** Comprehensive test suite comparing jam-ui with legacy app
diff --git a/jam-ui/test/JAM_UI_TESTING_PLAN.md b/jam-ui/test/JAM_UI_TESTING_PLAN.md
new file mode 100644
index 000000000..fb1984913
--- /dev/null
+++ b/jam-ui/test/JAM_UI_TESTING_PLAN.md
@@ -0,0 +1,272 @@
+# jam-ui Testing Plan - Session Flow Verification
+
+**Date:** ${new Date().toLocaleString()}
+**Objective:** Verify jam-ui conforms to legacy app API sequence, patterns, and timings
+
+## Overview
+
+This testing plan compares the new jam-ui React application with the legacy Rails application to ensure:
+1. API calls match in sequence, timing, and payloads
+2. WebSocket connections are established correctly
+3. UI components function as expected
+4. End-to-end flow works seamlessly
+
+## Testing Layers
+
+### 1. API Sequence Verification Tests
+**Purpose:** Ensure jam-ui makes the exact same API calls as the legacy app
+
+**Approach:**
+- Intercept all API requests during user flow
+- Compare against captured legacy API sequence
+- Verify request order, methods, URLs, and payloads
+- Check response handling
+
+**Test Files:**
+- `test/api-verification/login-api.spec.ts`
+- `test/api-verification/session-creation-api.spec.ts`
+- `test/api-verification/session-join-api.spec.ts`
+
+### 2. WebSocket Verification Tests
+**Purpose:** Ensure WebSocket connections match legacy behavior
+
+**Approach:**
+- Monitor WebSocket connection establishment
+- Verify connection URLs and parameters
+- Check message sequences
+- Validate dual connections (native + server)
+
+**Test Files:**
+- `test/websocket-verification/ws-connection.spec.ts`
+- `test/websocket-verification/ws-messages.spec.ts`
+
+### 3. UI Component Tests
+**Purpose:** Test individual UI components in isolation
+
+**Approach:**
+- Unit tests for Login, Session Creation, Session Interface components
+- Test user interactions
+- Validate form submissions
+- Check error handling
+
+**Test Files:**
+- `test/unit/LoginForm.test.tsx` (using React Testing Library)
+- `test/unit/SessionCreationForm.test.tsx`
+- `test/unit/SessionInterface.test.tsx`
+
+### 4. E2E Integration Tests
+**Purpose:** Test complete user journeys
+
+**Approach:**
+- Full flow from login to session join
+- Real browser automation with Playwright
+- Visual verification with screenshots
+- Performance timing checks
+
+**Test Files:**
+- `test/e2e/complete-session-flow.spec.ts`
+- `test/e2e/login-flow.spec.ts`
+- `test/e2e/session-creation-flow.spec.ts`
+
+## Test Environment
+
+**jam-ui Application:**
+- URL: http://beta.jamkazam.local:4000/
+- Credentials: nuwan@jamkazam.com / jam123
+
+**Legacy Application:**
+- URL: http://www.jamkazam.local:3100/
+- Used for baseline comparison
+
+## Expected API Sequences (from verification)
+
+### Login Flow (12 API calls)
+```
+POST /api/sessions (or similar login endpoint)
+GET /api/users/{user_id}
+GET /api/countries
+GET /api/shopping_carts
+GET /api/jamtracks/purchased
+GET /api/teacher_distributions
+GET /api/regions
+GET /api/genres
+GET /api/users/{user_id}/broadcast_notification
+```
+
+### Session Creation Flow (38 API calls)
+```
+# Dashboard reload (Ctrl+Shift+0 or equivalent)
+GET /api/users/{user_id} (2x)
+GET /api/countries
+GET /api/shopping_carts
+GET /api/genres (3x)
+GET /api/instruments (3x)
+GET /api/users/{user_id}/friends (2x)
+GET /api/jamtracks/purchased (3x)
+GET /api/languages
+GET /api/subjects
+GET /api/chat (2x)
+GET /api/sessions/scheduled
+GET /api/users/{user_id}/notifications
+GET /api/regions
+GET /api/teacher_distributions
+GET /api/versioncheck (3x)
+GET /api/config/client
+
+# Session creation
+POST /api/sessions
+POST /api/sessions/{session_id}/participants
+GET /api/sessions/{session_id}/history
+GET /api/sessions/{session_id} (3x)
+PUT /api/sessions/{session_id}/tracks (3x)
+GET /api/chat?...&channel=session&music_session={session_id}
+POST /api/users/{user_id}/udp_reachable
+GET /api/users/{user_id}/broadcast_notification
+```
+
+### WebSocket Connections
+```
+1. Dashboard connection: ws://www.jamkazam.local:6767/websocket?...
+2. Native client: ws://localhost:3060/
+3. Session connection: ws://www.jamkazam.local:6767/websocket?...&client_id=...
+```
+
+## Test Implementation Strategy
+
+### Phase 1: Setup & Infrastructure (Day 1)
+- [ ] Set up test utilities and helpers
+- [ ] Create API interception utilities
+- [ ] Create WebSocket monitoring utilities
+- [ ] Set up test data fixtures
+- [ ] Create comparison utilities for API sequences
+
+### Phase 2: API Verification Tests (Day 1-2)
+- [ ] Login API sequence test
+- [ ] Session creation API sequence test
+- [ ] Session join API sequence test
+- [ ] WebSocket connection tests
+- [ ] WebSocket message sequence tests
+
+### Phase 3: UI Component Tests (Day 2)
+- [ ] LoginForm unit tests
+- [ ] Session creation form unit tests
+- [ ] Session interface component tests
+
+### Phase 4: E2E Tests (Day 3)
+- [ ] Complete login flow E2E
+- [ ] Complete session creation flow E2E
+- [ ] Complete session join flow E2E
+- [ ] Error scenarios and edge cases
+
+### Phase 5: Documentation & Reporting (Day 3)
+- [ ] Test execution guide
+- [ ] Failure analysis reports
+- [ ] Recommendations for fixes
+
+## Success Criteria
+
+### API Compliance
+- ā
All API calls in correct order
+- ā
Request payloads match legacy
+- ā
Response handling is correct
+- ā
Error cases handled properly
+
+### WebSocket Compliance
+- ā
Connections established to correct endpoints
+- ā
Connection parameters match legacy
+- ā
Message sequences match
+- ā
Dual connections work correctly
+
+### UI Functionality
+- ā
All forms submit correctly
+- ā
Navigation works as expected
+- ā
Error messages display properly
+- ā
Loading states work correctly
+
+### E2E Flow
+- ā
User can log in successfully
+- ā
User can create a session
+- ā
User can join a session
+- ā
Session interface loads completely
+- ā
No console errors
+
+## Test Execution
+
+### Run All Tests
+```bash
+npm test
+```
+
+### Run Specific Test Suites
+```bash
+# API verification only
+npm run test:api
+
+# UI component tests only
+npm run test:unit
+
+# E2E tests only
+npm run test:e2e
+
+# WebSocket tests only
+npm run test:ws
+```
+
+### Run with Coverage
+```bash
+npm run test:coverage
+```
+
+### Run in CI/CD
+```bash
+npm run test:ci
+```
+
+## Test Data Management
+
+### User Accounts
+- Primary test user: nuwan@jamkazam.com
+- Additional test users from `test/data/users.js`
+
+### Session Data
+- Test session templates in `test/fixtures/sessions.json`
+- Mock API responses in `test/fixtures/api-responses.json`
+
+### Legacy Baseline
+- API sequences captured in `test-results/step-verification/`
+- Use as reference for comparison
+
+## Reporting
+
+### Test Reports Location
+- HTML reports: `test-results/html/`
+- JSON reports: `test-results/json/`
+- Screenshots: `test-results/screenshots/`
+- HAR files: `test-results/har/`
+- Comparison reports: `test-results/comparison/`
+
+### Metrics Tracked
+1. API call count per flow
+2. API call timing/latency
+3. WebSocket message count
+4. WebSocket connection timing
+5. UI rendering time
+6. E2E flow completion time
+7. Error rates
+
+## Next Steps
+
+1. Review this plan
+2. Create test utility infrastructure
+3. Implement API verification tests
+4. Implement UI unit tests
+5. Implement E2E tests
+6. Run tests and generate reports
+7. Analyze discrepancies
+8. Provide recommendations for fixes
+
+---
+
+**Status:** Planning Phase
+**Estimated Effort:** 3 days
+**Priority:** High
diff --git a/jam-ui/test/analyze-session-flow.ts b/jam-ui/test/analyze-session-flow.ts
new file mode 100644
index 000000000..6dbd7e561
--- /dev/null
+++ b/jam-ui/test/analyze-session-flow.ts
@@ -0,0 +1,614 @@
+/**
+ * Analyzes the captured network traffic to document the session join flow
+ * and create a migration test plan
+ */
+
+import * as fs from 'fs';
+import * as path from 'path';
+
+interface ApiCall {
+ step: string;
+ method?: string;
+ url: string;
+ status?: number;
+ timestamp: string;
+}
+
+interface WebSocketMessage {
+ event: string;
+ payload?: string;
+ url?: string;
+ timestamp: string;
+}
+
+function analyzeApiCalls(apiCalls: ApiCall[]): Map {
+ const apiMap = new Map();
+
+ for (const call of apiCalls) {
+ if (call.step === 'REQUEST' && call.url.includes('/api/')) {
+ // Extract the API endpoint path
+ const url = new URL(call.url);
+ const endpoint = `${call.method} ${url.pathname}`;
+
+ if (!apiMap.has(endpoint)) {
+ apiMap.set(endpoint, []);
+ }
+ apiMap.get(endpoint)!.push(call);
+ }
+ }
+
+ return apiMap;
+}
+
+function analyzeWebSocketMessages(wsMessages: WebSocketMessage[]): Map {
+ const messageTypes = new Map();
+
+ for (const msg of wsMessages) {
+ if (msg.event === 'sent' || msg.event === 'received') {
+ try {
+ const payload = JSON.parse(msg.payload || '{}');
+
+ // Extract message type or method name
+ let messageType = 'unknown';
+
+ if (payload.type) {
+ messageType = `TYPE:${payload.type}`;
+ } else if (payload.method) {
+ messageType = `METHOD:${payload.method}`;
+ } else if (payload.args && payload.args.length > 0) {
+ // Try to parse the args to get more info
+ try {
+ const argsData = JSON.parse(payload.args[0]);
+ if (argsData.method_name) {
+ messageType = `NATIVE_METHOD:${argsData.method_name}`;
+ } else if (argsData.event_id) {
+ messageType = `NATIVE_EVENT:${argsData.event_id}`;
+ }
+ } catch (e) {
+ // Ignore parse errors
+ }
+ }
+
+ messageTypes.set(messageType, (messageTypes.get(messageType) || 0) + 1);
+ } catch (e) {
+ // Ignore JSON parse errors
+ }
+ }
+ }
+
+ return messageTypes;
+}
+
+function extractSequentialFlow(apiCalls: ApiCall[], wsMessages: WebSocketMessage[]): any[] {
+ // Combine and sort by timestamp
+ const allEvents = [
+ ...apiCalls.map(call => ({
+ type: call.step,
+ subtype: 'API',
+ method: call.method,
+ url: call.url,
+ status: call.status,
+ timestamp: new Date(call.timestamp).getTime(),
+ })),
+ ...wsMessages.filter(msg => msg.event === 'sent' || msg.event === 'received').map(msg => ({
+ type: msg.event === 'sent' ? 'WS_SENT' : 'WS_RECEIVED',
+ subtype: 'WEBSOCKET',
+ payload: msg.payload?.substring(0, 200),
+ timestamp: new Date(msg.timestamp).getTime(),
+ })),
+ ].sort((a, b) => a.timestamp - b.timestamp);
+
+ return allEvents;
+}
+
+function main() {
+ const testResultsDir = path.join(__dirname, '../test-results');
+
+ console.log('='.repeat(80));
+ console.log('SESSION JOIN FLOW ANALYSIS');
+ console.log('='.repeat(80));
+ console.log();
+
+ // Read API calls
+ const apiCallsPath = path.join(testResultsDir, 'api-calls.json');
+ const apiCalls: ApiCall[] = JSON.parse(fs.readFileSync(apiCallsPath, 'utf-8'));
+ console.log(`ā Loaded ${apiCalls.length} API call records`);
+
+ // Read WebSocket messages
+ const wsMessagesPath = path.join(testResultsDir, 'websocket-messages.json');
+ const wsMessages: WebSocketMessage[] = JSON.parse(fs.readFileSync(wsMessagesPath, 'utf-8'));
+ console.log(`ā Loaded ${wsMessages.length} WebSocket message records`);
+ console.log();
+
+ // Analyze API calls
+ console.log('API ENDPOINTS CALLED');
+ console.log('-'.repeat(80));
+ const apiMap = analyzeApiCalls(apiCalls);
+ const sortedApis = Array.from(apiMap.entries()).sort((a, b) => b[1].length - a[1].length);
+
+ for (const [endpoint, calls] of sortedApis) {
+ console.log(` ${endpoint.padEnd(60)} (${calls.length} calls)`);
+ }
+ console.log();
+
+ // Analyze WebSocket messages
+ console.log('WEBSOCKET MESSAGE TYPES');
+ console.log('-'.repeat(80));
+ const messageTypes = analyzeWebSocketMessages(wsMessages);
+ const sortedTypes = Array.from(messageTypes.entries()).sort((a, b) => b[1] - a[1]);
+
+ for (const [type, count] of sortedTypes.slice(0, 20)) {
+ console.log(` ${type.padEnd(60)} (${count} times)`);
+ }
+ console.log(` ... and ${sortedTypes.length - 20} more message types`);
+ console.log();
+
+ // Generate migration plan
+ const planPath = path.join(testResultsDir, 'SESSION_MIGRATION_PLAN.md');
+
+ const plan = `# Session Join Flow Migration Test Plan
+
+## Overview
+
+This document outlines the complete test plan for migrating the "Joining a Music Session" feature from the legacy JamKazam application to the new React-based jam-ui application.
+
+**Captured on:** ${new Date().toISOString()}
+**Legacy URL:** http://www.jamkazam.local:3100
+**Target:** jam-ui React application
+
+## Overview of Flow
+
+The session join flow consists of 5 main steps:
+1. User Authentication (login)
+2. Dashboard Load (with WebSocket connection to native client)
+3. Skip Upgrade Modal (keyboard shortcut)
+4. Navigate to Create Session
+5. Create Quick Start Session (joins the session)
+
+Note: The Ctrl+Shift+0 keyboard shortcut for enabling native client features is handled during session creation (Step 5), not as a separate step.
+
+## Session Join Flow Steps
+
+### Step 1: User Authentication
+**Description:** User logs into the application
+
+**API Calls Required:**
+- POST /api/sessions (login endpoint)
+- GET /api/users/{user_id} (fetch user profile)
+- GET /api/genres (load genre data)
+- GET /api/countries (load country data)
+
+**Test Requirements:**
+- Verify authentication token is stored in cookies
+- Verify user session is established
+- Verify redirect to dashboard after successful login
+
+---
+
+### Step 2: Dashboard Load
+**Description:** Load user dashboard with all necessary data
+
+**API Calls Required:**
+${Array.from(apiMap.entries())
+ .filter(([endpoint]) => !endpoint.includes('paypal') && !endpoint.includes('session_create'))
+ .slice(0, 20)
+ .map(([endpoint]) => `- ${endpoint}`)
+ .join('\n')}
+
+**WebSocket Connection:**
+- Establish WebSocket connection to native client (ws://localhost:3060/)
+- Initialize jkfrontendchannel communication
+- Exchange handshake messages
+
+**Native Client Messages:**
+${Array.from(messageTypes.entries())
+ .filter(([type]) => type.startsWith('NATIVE_METHOD:'))
+ .slice(0, 10)
+ .map(([type, count]) => `- ${type} (${count} times)`)
+ .join('\n')}
+
+**Test Requirements:**
+- Verify all dashboard data loads correctly
+- Verify WebSocket connection establishes successfully
+- Verify native client communication is functional
+- Verify user can see friends, notifications, and session options
+
+---
+
+### Step 3: Skip Upgrade Modal
+**Description:** Handle upgrade modal on dashboard
+
+**User Action:** Press Cmd+Shift+0 (Mac) or Ctrl+Shift+0 (Windows)
+
+**API Calls Made:**
+- GET /api/versioncheck
+
+**WebSocket Connection Established:**
+- Opens WebSocket connection to server: `ws://www.jamkazam.local:6767/websocket?channel_id=...&client_type=browser...`
+- This is a CRITICAL connection - not just a UI interaction
+- Approximately 100 WebSocket messages exchanged during initialization
+
+**Expected Behavior:**
+- Upgrade modal dismisses
+- Server WebSocket connection established
+- User can interact with dashboard
+
+**Test Requirements:**
+- Verify keyboard shortcut works
+- Verify modal closes without errors
+- **Verify WebSocket connection to server is established**
+- Verify dashboard remains functional
+
+---
+
+### Step 4: Navigate to Create Session
+**Description:** User clicks "Create Session" tile
+
+**API Calls Made:**
+- GET /api/sessions/scheduled (fetch any scheduled sessions)
+- GET /api/users/{user_id} (refresh user profile)
+- GET /api/jamtracks/purchased (refresh purchased tracks)
+
+**Expected Behavior:**
+- Navigate to session creation page
+- Load session creation UI
+- Maintain existing WebSocket connection from Step 3
+- Load list of scheduled sessions
+
+**Test Requirements:**
+- Verify navigation occurs
+- Verify session creation options are visible
+- Verify scheduled sessions are loaded
+- Verify no API errors occur
+- Verify WebSocket connection remains active
+
+---
+
+### Step 5: Create Quick Start Session
+**Description:** User creates a quick start session
+
+**User Action:** Press Ctrl+Shift+0 to enable native client features, then click "Create Quick Start" button
+
+**API Calls Made (28 total):**
+
+**Critical New API Call:**
+- **POST /api/users/{user_id}/udp_reachable** - Reports UDP reachability for P2P connections
+
+**Dashboard Data Reload (triggered by Ctrl+Shift+0):**
+- GET /api/users/{user_id} (2 times)
+- GET /api/countries
+- GET /api/shopping_carts
+- GET /api/genres (3 times)
+- GET /api/instruments (3 times)
+- GET /api/users/{user_id}/friends (2 times)
+- GET /api/jamtracks/purchased (3 times)
+- GET /api/languages
+- GET /api/subjects
+- GET /api/chat
+- GET /api/sessions/scheduled
+- GET /api/users/{user_id}/notifications
+- GET /api/regions
+- GET /api/versioncheck (3 times)
+- GET /api/teacher_distributions
+- GET /api/config/client
+- GET /api/users/{user_id}/broadcast_notification
+
+**Expected Session Creation API Calls:**
+- POST /api/music_sessions (create session)
+- GET /api/music_sessions/{session_id} (fetch session details)
+- GET /api/music_sessions/{session_id}/participants (fetch participants)
+
+**WebSocket Connections Established:**
+
+1. **Native Client Connection:**
+ - URL: `ws://localhost:3060/`
+ - Purpose: Audio/video streaming and control
+ - ~100+ messages during initialization
+
+2. **Server Connection:**
+ - URL: `ws://www.jamkazam.local:6767/websocket?channel_id=...&client_id=...`
+ - Purpose: Session coordination and real-time updates
+ - ~100+ messages during initialization
+
+**Key Native Client Operations:**
+- NetworkTestResult calls
+- getConnectionDetail calls
+- SetLatencyTestBlocked
+- SetScoreWorkTimingInterval
+
+**Important Notes:**
+- Pressing Ctrl+Shift+0 essentially "reinitializes" the client
+- It triggers a full dashboard data reload
+- It establishes BOTH WebSocket connections simultaneously
+- UDP reachability check is performed before session creation
+
+**Test Requirements:**
+- Verify Ctrl+Shift+0 triggers dashboard data reload
+- Verify POST /api/users/{user_id}/udp_reachable is called
+- Verify native client WebSocket connection (ws://localhost:3060/)
+- Verify server WebSocket connection is established
+- Verify session is created successfully
+- Verify session ID is returned
+- Verify WebSocket messages are exchanged correctly
+- Verify user enters session interface
+- Verify audio setup begins
+
+---
+
+## Complete API Endpoint Reference
+
+### Authentication & User Management
+${Array.from(apiMap.entries())
+ .filter(([endpoint]) => endpoint.includes('/users') || endpoint.includes('/session'))
+ .map(([endpoint, calls]) => `- ${endpoint} (called ${calls.length} times)`)
+ .join('\n')}
+
+### Static Data Loading
+${Array.from(apiMap.entries())
+ .filter(([endpoint]) =>
+ endpoint.includes('/genres') ||
+ endpoint.includes('/instruments') ||
+ endpoint.includes('/countries') ||
+ endpoint.includes('/languages') ||
+ endpoint.includes('/regions')
+ )
+ .map(([endpoint, calls]) => `- ${endpoint} (called ${calls.length} times)`)
+ .join('\n')}
+
+### Session Management
+${Array.from(apiMap.entries())
+ .filter(([endpoint]) => endpoint.includes('/music_session'))
+ .map(([endpoint, calls]) => `- ${endpoint} (called ${calls.length} times)`)
+ .join('\n')}
+
+### Real-time Features
+${Array.from(apiMap.entries())
+ .filter(([endpoint]) =>
+ endpoint.includes('/chat') ||
+ endpoint.includes('/notification') ||
+ endpoint.includes('/broadcast')
+ )
+ .map(([endpoint, calls]) => `- ${endpoint} (called ${calls.length} times)`)
+ .join('\n')}
+
+### System Health
+${Array.from(apiMap.entries())
+ .filter(([endpoint]) =>
+ endpoint.includes('/healthcheck') ||
+ endpoint.includes('/versioncheck') ||
+ endpoint.includes('/config')
+ )
+ .map(([endpoint, calls]) => `- ${endpoint} (called ${calls.length} times)`)
+ .join('\n')}
+
+---
+
+## WebSocket Message Types Reference
+
+### Connection & Handshake
+${Array.from(messageTypes.entries())
+ .filter(([type]) => type.includes('TYPE:'))
+ .map(([type, count]) => `- ${type} (${count} messages)`)
+ .join('\n')}
+
+### Native Client Methods (Most Frequent)
+${Array.from(messageTypes.entries())
+ .filter(([type]) => type.startsWith('NATIVE_METHOD:'))
+ .slice(0, 15)
+ .map(([type, count]) => `- ${type} (${count} calls)`)
+ .join('\n')}
+
+### Native Client Events
+${Array.from(messageTypes.entries())
+ .filter(([type]) => type.startsWith('NATIVE_EVENT:'))
+ .slice(0, 10)
+ .map(([type, count]) => `- ${type} (${count} events)`)
+ .join('\n')}
+
+---
+
+## Playwright Test Structure
+
+### Test 1: Complete Session Join Flow
+\`\`\`typescript
+test('User can join a music session - complete flow', async ({ page }) => {
+ // Step 1: Login
+ await loginUser(page, 'user@example.com', 'password');
+
+ // Step 2: Wait for dashboard to load
+ await expect(page.locator('[data-testid="dashboard"]')).toBeVisible();
+
+ // Step 3: Skip upgrade modal
+ await page.keyboard.press('Meta+Shift+Digit0');
+
+ // Step 4: Click create session
+ await page.click('[data-testid="create-session"]');
+
+ // Step 5: Create quick start session (Ctrl+Shift+0 handled internally)
+ await page.keyboard.press('Control+Shift+Digit0');
+ await page.click('[data-testid="quick-start"]');
+
+ // Verify we're in session
+ await expect(page.locator('[data-testid="session-interface"]')).toBeVisible();
+});
+\`\`\`
+
+### Test 2: API Calls Validation
+\`\`\`typescript
+test('Session join makes correct API calls', async ({ page }) => {
+ const apiCalls: string[] = [];
+
+ page.on('request', request => {
+ if (request.url().includes('/api/')) {
+ apiCalls.push(\`\${request.method()} \${new URL(request.url()).pathname}\`);
+ }
+ });
+
+ await joinSession(page);
+
+ // Verify critical API calls were made
+ expect(apiCalls).toContain('GET /api/users/');
+ expect(apiCalls).toContain('GET /api/genres');
+ expect(apiCalls).toContain('POST /api/music_sessions');
+});
+\`\`\`
+
+### Test 3: WebSocket Communication
+\`\`\`typescript
+test('Session join establishes WebSocket connection', async ({ page }) => {
+ let wsConnected = false;
+ let messagesReceived = 0;
+
+ page.on('websocket', ws => {
+ wsConnected = true;
+ ws.on('framereceived', () => messagesReceived++);
+ });
+
+ await joinSession(page);
+
+ expect(wsConnected).toBe(true);
+ expect(messagesReceived).toBeGreaterThan(0);
+});
+\`\`\`
+
+### Test 4: Native Client Integration
+\`\`\`typescript
+test('Native client methods are called correctly', async ({ page }) => {
+ const nativeMethods: string[] = [];
+
+ page.on('websocket', ws => {
+ ws.on('framesent', frame => {
+ try {
+ const data = JSON.parse(frame.payload.toString());
+ if (data.args) {
+ const argsData = JSON.parse(data.args[0]);
+ if (argsData.method_name) {
+ nativeMethods.push(argsData.method_name);
+ }
+ }
+ } catch (e) {}
+ });
+ });
+
+ await joinSession(page);
+
+ // Verify critical native methods were called
+ expect(nativeMethods).toContain('getConnectionDetail');
+ expect(nativeMethods).toContain('NetworkTestResult');
+});
+\`\`\`
+
+---
+
+## Implementation Checklist
+
+### Phase 1: Authentication & Dashboard
+- [ ] Implement login flow matching legacy API calls
+- [ ] Load all dashboard data (users, genres, instruments, etc.)
+- [ ] Establish WebSocket connection to native client
+- [ ] Implement upgrade modal with keyboard shortcut (Cmd/Ctrl+Shift+0)
+- [ ] Implement dashboard UI with session creation option
+- [ ] Test: User can log in, dismiss modal, and see dashboard
+
+### Phase 2: Session Creation UI
+- [ ] Implement "Create Session" navigation
+- [ ] Implement session creation modal/page
+- [ ] Implement keyboard shortcut (Ctrl+Shift+0) for enabling native features
+- [ ] Implement "Quick Start" option
+- [ ] Test: User can navigate to session creation and see options
+
+### Phase 3: Native Client Integration
+- [ ] Establish WebSocket communication protocol
+- [ ] Implement native client message handlers
+- [ ] Implement handshake and initialization sequence
+- [ ] Test: WebSocket messages match legacy exactly
+
+### Phase 4: Session Creation & Join
+- [ ] Implement session creation API calls
+- [ ] Handle session initialization responses
+- [ ] Implement session interface loading
+- [ ] Coordinate WebSocket messages with session creation
+- [ ] Test: Complete flow works end-to-end
+
+### Phase 5: Audio/Video Setup
+- [ ] Implement audio device initialization via native client
+- [ ] Implement latency testing (NetworkTestResult)
+- [ ] Implement connection detail fetching (getConnectionDetail)
+- [ ] Handle real-time audio/video stream setup
+- [ ] Test: Audio setup completes successfully
+
+---
+
+## Critical Success Criteria
+
+1. **API Compatibility**: All API calls must match the sequence and format of the legacy application
+2. **WebSocket Protocol**: WebSocket messages must be identical in structure and timing
+3. **Native Client Communication**: Native client method calls must match exactly
+4. **User Experience**: Flow must be seamless with no additional steps
+5. **Error Handling**: Must handle all error cases gracefully
+6. **Performance**: Page loads and transitions must be as fast or faster than legacy
+
+---
+
+## Testing Strategy
+
+### Unit Tests
+- Test individual API call functions
+- Test WebSocket message handlers
+- Test UI component rendering
+
+### Integration Tests
+- Test complete authentication flow
+- Test dashboard data loading
+- Test session creation flow
+
+### End-to-End Tests (Playwright)
+- Test complete user journey from login to session join
+- Test with real WebSocket connections
+- Test with native client simulation
+
+### Comparison Tests
+- Run legacy and new app side-by-side
+- Compare API call sequences
+- Compare WebSocket message sequences
+- Compare timing and performance
+
+---
+
+## Files Generated
+
+- \`test-results/session-join-flow.har\` - Complete HAR file with all network traffic
+- \`test-results/api-calls.json\` - All API calls made during the flow
+- \`test-results/websocket-messages.json\` - All WebSocket messages exchanged
+- \`test-results/all-network-activity.json\` - Combined network activity log
+- \`test-results/*.png\` - Screenshots at various stages
+
+---
+
+## Next Steps
+
+1. Review this plan with the team
+2. Prioritize which components to implement first
+3. Set up Playwright test infrastructure
+4. Begin implementing Phase 1 (Authentication & Dashboard)
+5. Write corresponding Playwright tests for each phase
+6. Run comparison tests against legacy application
+7. Iterate until behavior matches exactly
+
+---
+
+**Generated by:** Session Flow Analyzer
+**Date:** ${new Date().toLocaleString()}
+**Total API Calls Captured:** ${apiCalls.length}
+**Total WebSocket Messages Captured:** ${wsMessages.length}
+**Unique API Endpoints:** ${apiMap.size}
+**Unique WebSocket Message Types:** ${messageTypes.size}
+`;
+
+ fs.writeFileSync(planPath, plan);
+ console.log(`ā
Migration plan written to: ${planPath}`);
+ console.log();
+ console.log('Review the plan and adjust as needed for your specific requirements.');
+}
+
+main();
diff --git a/jam-ui/test/analyze-steps.js b/jam-ui/test/analyze-steps.js
new file mode 100644
index 000000000..e5c4839be
--- /dev/null
+++ b/jam-ui/test/analyze-steps.js
@@ -0,0 +1,59 @@
+const fs = require('fs');
+const path = require('path');
+
+const stepsDir = path.join(__dirname, '../test-results/step-verification');
+
+console.log('='.repeat(80));
+console.log('STEP-BY-STEP API CALL ANALYSIS');
+console.log('='.repeat(80));
+console.log();
+
+for (let i = 1; i <= 5; i++) {
+ const stepDir = path.join(stepsDir, `step-${i}`);
+ const apiFile = path.join(stepDir, 'api-calls.json');
+ const wsFile = path.join(stepDir, 'ws-messages.json');
+
+ if (!fs.existsSync(apiFile)) {
+ console.log(`Step ${i}: No data captured (step not completed)`);
+ console.log();
+ continue;
+ }
+
+ const apiCalls = JSON.parse(fs.readFileSync(apiFile, 'utf-8'));
+ const wsMessages = JSON.parse(fs.readFileSync(wsFile, 'utf-8'));
+
+ const requests = apiCalls.filter(c => c.type === 'request');
+ const uniqueEndpoints = new Set();
+
+ requests.forEach(r => {
+ try {
+ const url = new URL(r.url);
+ uniqueEndpoints.add(`${r.method} ${url.pathname}`);
+ } catch (e) {
+ // Skip invalid URLs
+ }
+ });
+
+ console.log(`STEP ${i}:`);
+ console.log(` Total API requests: ${requests.length}`);
+ console.log(` Unique endpoints: ${uniqueEndpoints.size}`);
+ console.log(` WebSocket messages: ${wsMessages.length}`);
+ console.log();
+ console.log(' Unique API endpoints called:');
+
+ Array.from(uniqueEndpoints).forEach(endpoint => {
+ const count = requests.filter(r => {
+ try {
+ const url = new URL(r.url);
+ return `${r.method} ${url.pathname}` === endpoint;
+ } catch (e) {
+ return false;
+ }
+ }).length;
+ console.log(` ${endpoint}${count > 1 ? ` (${count} times)` : ''}`);
+ });
+
+ console.log();
+ console.log('-'.repeat(80));
+ console.log();
+}
diff --git a/jam-ui/test/api-verification/login-api.spec.ts b/jam-ui/test/api-verification/login-api.spec.ts
new file mode 100644
index 000000000..3c9e7f635
--- /dev/null
+++ b/jam-ui/test/api-verification/login-api.spec.ts
@@ -0,0 +1,148 @@
+import { test, expect } from '@playwright/test';
+import { APIInterceptor } from '../utils/api-interceptor';
+import { compareAPISequences } from '../utils/sequence-comparator';
+import { loginToJamUI, waitForAPICalls } from '../utils/test-helpers';
+import * as fs from 'fs';
+import * as path from 'path';
+
+test.describe('Login API Verification', () => {
+ test('jam-ui login makes same API calls as legacy app', async ({ page }) => {
+ const apiInterceptor = new APIInterceptor();
+ apiInterceptor.intercept(page);
+
+ // Perform login
+ await loginToJamUI(page, {
+ email: 'nuwan@jamkazam.com',
+ password: 'jam123',
+ });
+
+ await waitForAPICalls(page, 5000);
+
+ // Get captured calls
+ const actualCalls = apiInterceptor.getCalls();
+
+ // Load expected sequence
+ const expectedPath = path.join(__dirname, '../fixtures/legacy-sequences/login-simplified.json');
+ const expectedCalls = JSON.parse(fs.readFileSync(expectedPath, 'utf8'));
+
+ console.log(`\nLogin API Verification:`);
+ console.log(` Actual calls: ${actualCalls.length}`);
+ console.log(` Expected calls: ${expectedCalls.length}`);
+
+ // Compare sequences
+ const comparison = compareAPISequences(actualCalls, expectedCalls);
+
+ // Log comparison report
+ console.log('\n' + comparison.report);
+
+ // Save results
+ const resultsDir = path.join(__dirname, '../test-results/api-verification');
+ if (!fs.existsSync(resultsDir)) {
+ fs.mkdirSync(resultsDir, { recursive: true });
+ }
+
+ fs.writeFileSync(
+ path.join(resultsDir, 'login-actual-calls.json'),
+ JSON.stringify(actualCalls, null, 2)
+ );
+
+ fs.writeFileSync(
+ path.join(resultsDir, 'login-comparison-report.md'),
+ comparison.report
+ );
+
+ // Assert that we have critical login endpoints
+ const endpoints = apiInterceptor.getUniqueEndpoints();
+
+ // Critical endpoints that MUST be present
+ expect(endpoints.some(e => e.includes('/api/users/'))).toBe(true);
+ expect(endpoints.some(e => e.includes('/api/genres'))).toBe(true);
+ expect(endpoints.some(e => e.includes('/api/countries'))).toBe(true);
+
+ // Check if match percentage is acceptable
+ const matchPercentage = (comparison.matchedCalls / comparison.totalCalls) * 100;
+ console.log(`\nMatch percentage: ${matchPercentage.toFixed(1)}%`);
+
+ // We expect at least 80% match for login flow
+ expect(matchPercentage).toBeGreaterThanOrEqual(80);
+ });
+
+ test('login API calls are in correct order', async ({ page }) => {
+ const apiInterceptor = new APIInterceptor();
+ apiInterceptor.intercept(page);
+
+ await loginToJamUI(page);
+ await waitForAPICalls(page);
+
+ const actualCalls = apiInterceptor.getCalls();
+ const expectedPath = path.join(__dirname, '../fixtures/legacy-sequences/login-simplified.json');
+ const expectedCalls = JSON.parse(fs.readFileSync(expectedPath, 'utf8'));
+
+ const comparison = compareAPISequences(actualCalls, expectedCalls);
+
+ // Check for significant order issues
+ if (comparison.outOfOrderCalls.length > 0) {
+ console.log('\nOut of order calls detected:');
+ for (const order of comparison.outOfOrderCalls) {
+ console.log(` ${order.endpoint}: deviation of ${order.deviation} positions`);
+ }
+ }
+
+ // Allow some flexibility in ordering, but not too much
+ const maxDeviationAllowed = 5;
+ const significantDeviations = comparison.outOfOrderCalls.filter(
+ o => o.deviation > maxDeviationAllowed
+ );
+
+ expect(significantDeviations.length).toBe(0);
+ });
+
+ test('login makes POST request to create session', async ({ page }) => {
+ const apiInterceptor = new APIInterceptor();
+ apiInterceptor.intercept(page);
+
+ await loginToJamUI(page);
+ await waitForAPICalls(page);
+
+ const postCalls = apiInterceptor.getCallsByMethod('POST');
+
+ // Should have POST to /api/sessions or similar login endpoint
+ const sessionPost = postCalls.find(call =>
+ call.pathname.includes('/api/session') ||
+ call.pathname.includes('/api/auth') ||
+ call.pathname.includes('/api/login')
+ );
+
+ // Note: Legacy app uses Rails sessions, so this might not be present
+ // Just log what we find
+ console.log('\nPOST calls during login:');
+ postCalls.forEach(call => {
+ console.log(` ${call.method} ${call.pathname}`);
+ });
+ });
+
+ test('login retrieves user data', async ({ page }) => {
+ const apiInterceptor = new APIInterceptor();
+ apiInterceptor.intercept(page);
+
+ await loginToJamUI(page);
+ await waitForAPICalls(page);
+
+ const userCalls = apiInterceptor.getCallsByPath('/api/users/');
+
+ expect(userCalls.length).toBeGreaterThan(0);
+
+ // Should have successful response
+ const successfulUserCall = userCalls.find(call =>
+ call.responseStatus && call.responseStatus >= 200 && call.responseStatus < 300
+ );
+
+ expect(successfulUserCall).toBeDefined();
+
+ if (successfulUserCall?.responseBody) {
+ console.log('\nUser data received:');
+ console.log(` User ID: ${successfulUserCall.responseBody.id || 'N/A'}`);
+ console.log(` Email: ${successfulUserCall.responseBody.email || 'N/A'}`);
+ }
+ });
+});
diff --git a/jam-ui/test/api-verification/session-creation-api.spec.ts b/jam-ui/test/api-verification/session-creation-api.spec.ts
new file mode 100644
index 000000000..a4ba3ed96
--- /dev/null
+++ b/jam-ui/test/api-verification/session-creation-api.spec.ts
@@ -0,0 +1,207 @@
+import { test, expect } from '@playwright/test';
+import { APIInterceptor } from '../utils/api-interceptor';
+import { compareAPISequences } from '../utils/sequence-comparator';
+import { loginToJamUI, navigateToSessionCreation, fillSessionForm, waitForAPICalls } from '../utils/test-helpers';
+import * as fs from 'fs';
+import * as path from 'path';
+
+test.describe('Session Creation API Verification', () => {
+ test('session creation makes all required API calls', async ({ page }) => {
+ const apiInterceptor = new APIInterceptor();
+ apiInterceptor.intercept(page);
+
+ // Login first
+ await loginToJamUI(page);
+ await waitForAPICalls(page);
+
+ // Clear captured calls from login
+ apiInterceptor.reset();
+
+ // Navigate to session creation and fill form (jam-ui approach)
+ await navigateToSessionCreation(page);
+ await waitForAPICalls(page);
+
+ // Fill and submit session creation form
+ await fillSessionForm(page, { sessionType: 'private' });
+ await waitForAPICalls(page, 5000);
+
+ // Get captured calls
+ const actualCalls = apiInterceptor.getCalls();
+
+ // Load expected sequence (Step 5 from verification)
+ const expectedPath = path.join(__dirname, '../fixtures/legacy-sequences/session-creation-simplified.json');
+ const expectedCalls = JSON.parse(fs.readFileSync(expectedPath, 'utf8'));
+
+ console.log(`\nSession Creation API Verification:`);
+ console.log(` Actual calls: ${actualCalls.length}`);
+ console.log(` Expected calls: ${expectedCalls.length}`);
+
+ // Compare sequences
+ const comparison = compareAPISequences(actualCalls, expectedCalls);
+
+ // Log comparison report
+ console.log('\n' + comparison.report);
+
+ // Save results
+ const resultsDir = path.join(__dirname, '../test-results/api-verification');
+ if (!fs.existsSync(resultsDir)) {
+ fs.mkdirSync(resultsDir, { recursive: true });
+ }
+
+ fs.writeFileSync(
+ path.join(resultsDir, 'session-creation-actual-calls.json'),
+ JSON.stringify(actualCalls, null, 2)
+ );
+
+ fs.writeFileSync(
+ path.join(resultsDir, 'session-creation-comparison-report.md'),
+ comparison.report
+ );
+
+ // Critical session creation endpoints
+ const endpoints = apiInterceptor.getUniqueEndpoints();
+
+ // Must have session creation
+ expect(endpoints.some(e => e.includes('POST /api/sessions'))).toBe(true);
+
+ // Check match percentage
+ const matchPercentage = (comparison.matchedCalls / comparison.totalCalls) * 100;
+ console.log(`\nMatch percentage: ${matchPercentage.toFixed(1)}%`);
+
+ // We expect at least 70% match (allowing for some differences)
+ expect(matchPercentage).toBeGreaterThanOrEqual(70);
+ });
+
+ test('session creation sequence includes critical endpoints', async ({ page }) => {
+ const apiInterceptor = new APIInterceptor();
+ apiInterceptor.intercept(page);
+
+ await loginToJamUI(page);
+ await waitForAPICalls(page);
+ apiInterceptor.reset();
+
+ await navigateToSessionCreation(page);
+ await waitForAPICalls(page);
+ await fillSessionForm(page);
+ await waitForAPICalls(page, 5000);
+
+ const calls = apiInterceptor.getCalls();
+
+ // Find critical session endpoints
+ const sessionCreation = calls.find(c =>
+ c.method === 'POST' && c.pathname.match(/\/api\/sessions\/?$/)
+ );
+
+ const participantAdd = calls.find(c =>
+ c.method === 'POST' && c.pathname.includes('/participants')
+ );
+
+ const sessionHistory = calls.find(c =>
+ c.method === 'GET' && c.pathname.includes('/history')
+ );
+
+ const sessionGet = calls.find(c =>
+ c.method === 'GET' && c.pathname.match(/\/api\/sessions\/[a-f0-9-]+\/?$/)
+ );
+
+ const tracksUpdate = calls.find(c =>
+ c.method === 'PUT' && c.pathname.includes('/tracks')
+ );
+
+ const sessionChat = calls.find(c =>
+ c.method === 'GET' &&
+ c.pathname.includes('/chat') &&
+ c.url.includes('music_session')
+ );
+
+ const udpReachable = calls.find(c =>
+ c.method === 'POST' && c.pathname.includes('/udp_reachable')
+ );
+
+ console.log('\nCritical session endpoints found:');
+ console.log(` ā POST /api/sessions: ${sessionCreation ? 'YES' : 'NO'}`);
+ console.log(` ā POST /api/sessions/{id}/participants: ${participantAdd ? 'YES' : 'NO'}`);
+ console.log(` ā GET /api/sessions/{id}/history: ${sessionHistory ? 'YES' : 'NO'}`);
+ console.log(` ā GET /api/sessions/{id}: ${sessionGet ? 'YES' : 'NO'}`);
+ console.log(` ā PUT /api/sessions/{id}/tracks: ${tracksUpdate ? 'YES' : 'NO'}`);
+ console.log(` ā GET /api/chat?...music_session=: ${sessionChat ? 'YES' : 'NO'}`);
+ console.log(` ā POST /api/users/{id}/udp_reachable: ${udpReachable ? 'YES' : 'NO'}`);
+
+ // All critical endpoints should be present
+ expect(sessionCreation).toBeDefined();
+ expect(participantAdd).toBeDefined();
+ expect(sessionHistory).toBeDefined();
+ expect(sessionGet).toBeDefined();
+ expect(tracksUpdate).toBeDefined();
+ expect(udpReachable).toBeDefined();
+ });
+
+ test('session is created with valid session ID', async ({ page }) => {
+ const apiInterceptor = new APIInterceptor();
+ apiInterceptor.intercept(page);
+
+ await loginToJamUI(page);
+ await waitForAPICalls(page);
+ apiInterceptor.reset();
+
+ await navigateToSessionCreation(page);
+ await waitForAPICalls(page);
+ await fillSessionForm(page);
+ await waitForAPICalls(page, 5000);
+
+ const calls = apiInterceptor.getCalls();
+
+ // Find the POST /api/sessions call
+ const sessionCreation = calls.find(c =>
+ c.method === 'POST' && c.pathname.match(/\/api\/sessions\/?$/)
+ );
+
+ expect(sessionCreation).toBeDefined();
+
+ // Check if response contains session ID
+ if (sessionCreation?.responseBody) {
+ const sessionId = sessionCreation.responseBody.id || sessionCreation.responseBody.session_id;
+
+ console.log(`\nSession created with ID: ${sessionId}`);
+
+ // Verify it's a valid UUID
+ expect(sessionId).toMatch(/^[a-f0-9-]{36}$/i);
+
+ // Verify subsequent calls use this session ID
+ const sessionSpecificCalls = calls.filter(c =>
+ c.pathname.includes(sessionId)
+ );
+
+ console.log(`Subsequent calls using session ID: ${sessionSpecificCalls.length}`);
+ expect(sessionSpecificCalls.length).toBeGreaterThan(0);
+ }
+ });
+
+ test('session form loads reference data', async ({ page }) => {
+ const apiInterceptor = new APIInterceptor();
+ apiInterceptor.intercept(page);
+
+ await loginToJamUI(page);
+ await waitForAPICalls(page);
+ apiInterceptor.reset();
+
+ await navigateToSessionCreation(page);
+ await waitForAPICalls(page, 3000);
+
+ const calls = apiInterceptor.getCalls();
+
+ // Check what reference data is loaded for the session creation form
+ const genres = calls.filter(c => c.pathname.includes('/api/genres'));
+ const instruments = calls.filter(c => c.pathname.includes('/api/instruments'));
+ const friends = calls.filter(c => c.pathname.includes('/friends'));
+
+ console.log('\nSession form API calls:');
+ console.log(` /api/genres: ${genres.length} calls`);
+ console.log(` /api/instruments: ${instruments.length} calls`);
+ console.log(` /api/users/{id}/friends: ${friends.length} calls`);
+
+ // jam-ui may load reference data differently than legacy
+ // Just verify the page loaded successfully
+ expect(calls.length).toBeGreaterThan(0);
+ });
+});
diff --git a/jam-ui/test/api-verification/session-join-comparison.spec.ts b/jam-ui/test/api-verification/session-join-comparison.spec.ts
new file mode 100644
index 000000000..72941964d
--- /dev/null
+++ b/jam-ui/test/api-verification/session-join-comparison.spec.ts
@@ -0,0 +1,226 @@
+import { test, expect } from '@playwright/test';
+import { APIInterceptor } from '../utils/api-interceptor';
+import { WebSocketMonitor } from '../utils/websocket-monitor';
+import { loginToJamUI, navigateToSessionCreation, fillSessionForm, waitForAPICalls } from '../utils/test-helpers';
+import * as fs from 'fs';
+import * as path from 'path';
+
+test.describe('Session Join Flow - Detailed API Comparison', () => {
+ test('capture complete session join API calls (jam-ui)', async ({ page }) => {
+ const apiInterceptor = new APIInterceptor();
+ const wsMonitor = new WebSocketMonitor();
+
+ apiInterceptor.intercept(page);
+ wsMonitor.monitor(page);
+
+ console.log('\n========================================');
+ console.log('SESSION JOIN FLOW - API CAPTURE');
+ console.log('========================================\n');
+
+ // Login first
+ await loginToJamUI(page);
+ await waitForAPICalls(page, 3000);
+
+ // Navigate to session creation
+ await navigateToSessionCreation(page);
+ await waitForAPICalls(page, 2000);
+
+ console.log('Starting session creation + join flow...\n');
+
+ // Clear previous calls - we only want session join calls
+ apiInterceptor.reset();
+ const wsConnectionsBefore = wsMonitor.getConnectionCount();
+
+ // Create and join session
+ await fillSessionForm(page, { sessionType: 'private' });
+ await waitForAPICalls(page, 8000);
+
+ // Capture all data
+ const apiCalls = apiInterceptor.getCalls();
+ const wsConnections = wsMonitor.getConnections();
+ const newWsConnections = wsConnections.slice(wsConnectionsBefore);
+
+ console.log('========================================');
+ console.log('SESSION JOIN API CALLS (jam-ui)');
+ console.log('========================================\n');
+
+ // Group API calls by type
+ const sessionCreationCalls = apiCalls.filter(c =>
+ c.method === 'POST' && c.pathname.match(/\/api\/sessions\/?$/)
+ );
+
+ const participantCalls = apiCalls.filter(c =>
+ c.pathname.includes('/participants')
+ );
+
+ const sessionDetailCalls = apiCalls.filter(c =>
+ c.method === 'GET' && c.pathname.match(/\/api\/sessions\/[a-f0-9-]+\/?$/)
+ );
+
+ const sessionHistoryCalls = apiCalls.filter(c =>
+ c.pathname.includes('/history')
+ );
+
+ const trackCalls = apiCalls.filter(c =>
+ c.pathname.includes('/tracks')
+ );
+
+ const chatCalls = apiCalls.filter(c =>
+ c.pathname.includes('/chat') && c.url.includes('music_session')
+ );
+
+ const udpCalls = apiCalls.filter(c =>
+ c.pathname.includes('/udp_reachable')
+ );
+
+ const otherCalls = apiCalls.filter(c =>
+ !sessionCreationCalls.includes(c) &&
+ !participantCalls.includes(c) &&
+ !sessionDetailCalls.includes(c) &&
+ !sessionHistoryCalls.includes(c) &&
+ !trackCalls.includes(c) &&
+ !chatCalls.includes(c) &&
+ !udpCalls.includes(c)
+ );
+
+ console.log('REST API CALLS:\n');
+ console.log('1. Session Creation:');
+ sessionCreationCalls.forEach(c => {
+ console.log(` ${c.method} ${c.pathname} -> ${c.responseStatus}`);
+ if (c.responseBody?.id) {
+ console.log(` Session ID: ${c.responseBody.id}`);
+ }
+ });
+
+ console.log('\n2. Add Participant (Join):');
+ participantCalls.forEach(c => {
+ console.log(` ${c.method} ${c.pathname} -> ${c.responseStatus}`);
+ });
+
+ console.log('\n3. Get Session Details:');
+ sessionDetailCalls.forEach(c => {
+ console.log(` ${c.method} ${c.pathname} -> ${c.responseStatus}`);
+ });
+
+ console.log('\n4. Get Session History:');
+ sessionHistoryCalls.forEach(c => {
+ console.log(` ${c.method} ${c.pathname} -> ${c.responseStatus}`);
+ });
+
+ console.log('\n5. Update Tracks:');
+ if (trackCalls.length > 0) {
+ trackCalls.forEach(c => {
+ console.log(` ${c.method} ${c.pathname} -> ${c.responseStatus}`);
+ });
+ } else {
+ console.log(' ā NOT CALLED');
+ }
+
+ console.log('\n6. Load Session Chat:');
+ if (chatCalls.length > 0) {
+ chatCalls.forEach(c => {
+ console.log(` ${c.method} ${c.pathname} -> ${c.responseStatus}`);
+ });
+ } else {
+ console.log(' ā NOT CALLED');
+ }
+
+ console.log('\n7. UDP Reachability Check:');
+ if (udpCalls.length > 0) {
+ udpCalls.forEach(c => {
+ console.log(` ${c.method} ${c.pathname} -> ${c.responseStatus}`);
+ });
+ } else {
+ console.log(' ā NOT CALLED');
+ }
+
+ console.log('\n8. Other API Calls:');
+ otherCalls.forEach(c => {
+ console.log(` ${c.method} ${c.pathname} -> ${c.responseStatus}`);
+ });
+
+ console.log('\n========================================');
+ console.log('WEBSOCKET CONNECTIONS');
+ console.log('========================================\n');
+
+ newWsConnections.forEach((conn, idx) => {
+ console.log(`Connection ${idx + 1}:`);
+ console.log(` URL: ${conn.url}`);
+ console.log(` Type: ${conn.isNativeClient ? 'Native Client' : conn.isServerConnection ? 'Server' : 'Other'}`);
+ console.log(` Messages: ${conn.messages.length}`);
+ console.log(` Status: ${conn.closed ? 'Closed' : 'Open'}`);
+
+ if (conn.url.includes('?')) {
+ const url = new URL(conn.url);
+ console.log(` Parameters:`);
+ url.searchParams.forEach((value, key) => {
+ console.log(` ${key}: ${value.substring(0, 50)}${value.length > 50 ? '...' : ''}`);
+ });
+ }
+ console.log('');
+ });
+
+ console.log('========================================');
+ console.log('SUMMARY');
+ console.log('========================================\n');
+ console.log(`Total REST API calls: ${apiCalls.length}`);
+ console.log(` - Session creation: ${sessionCreationCalls.length}`);
+ console.log(` - Add participant: ${participantCalls.length}`);
+ console.log(` - Get session details: ${sessionDetailCalls.length}`);
+ console.log(` - Get session history: ${sessionHistoryCalls.length}`);
+ console.log(` - Update tracks: ${trackCalls.length}`);
+ console.log(` - Session chat: ${chatCalls.length}`);
+ console.log(` - UDP reachability: ${udpCalls.length}`);
+ console.log(` - Other calls: ${otherCalls.length}`);
+ console.log(`\nWebSocket connections: ${newWsConnections.length}`);
+ console.log(`Total WebSocket messages: ${newWsConnections.reduce((sum, c) => sum + c.messages.length, 0)}`);
+
+ // Save detailed analysis
+ const resultsDir = path.join(__dirname, '../test-results/session-join-analysis');
+ if (!fs.existsSync(resultsDir)) {
+ fs.mkdirSync(resultsDir, { recursive: true });
+ }
+
+ const analysis = {
+ timestamp: new Date().toISOString(),
+ restApiCalls: {
+ total: apiCalls.length,
+ sessionCreation: sessionCreationCalls.map(c => ({ method: c.method, url: c.url, status: c.responseStatus })),
+ addParticipant: participantCalls.map(c => ({ method: c.method, url: c.url, status: c.responseStatus })),
+ getSessionDetails: sessionDetailCalls.map(c => ({ method: c.method, url: c.url, status: c.responseStatus })),
+ getSessionHistory: sessionHistoryCalls.map(c => ({ method: c.method, url: c.url, status: c.responseStatus })),
+ updateTracks: trackCalls.map(c => ({ method: c.method, url: c.url, status: c.responseStatus })),
+ sessionChat: chatCalls.map(c => ({ method: c.method, url: c.url, status: c.responseStatus })),
+ udpReachability: udpCalls.map(c => ({ method: c.method, url: c.url, status: c.responseStatus })),
+ other: otherCalls.map(c => ({ method: c.method, url: c.url, status: c.responseStatus })),
+ },
+ websocketConnections: newWsConnections.map(c => ({
+ url: c.url,
+ type: c.isNativeClient ? 'native' : c.isServerConnection ? 'server' : 'other',
+ messageCount: c.messages.length,
+ status: c.closed ? 'closed' : 'open',
+ })),
+ };
+
+ fs.writeFileSync(
+ path.join(resultsDir, 'jam-ui-session-join.json'),
+ JSON.stringify(analysis, null, 2)
+ );
+
+ fs.writeFileSync(
+ path.join(resultsDir, 'jam-ui-all-api-calls.json'),
+ JSON.stringify(apiCalls, null, 2)
+ );
+
+ fs.writeFileSync(
+ path.join(resultsDir, 'jam-ui-websockets.json'),
+ wsMonitor.toJSON()
+ );
+
+ console.log(`\nā Analysis saved to: ${resultsDir}`);
+
+ // Basic assertions
+ expect(sessionCreationCalls.length).toBeGreaterThan(0);
+ expect(participantCalls.length).toBeGreaterThan(0);
+ });
+});
diff --git a/jam-ui/test/capture-session-flow-standalone.spec.ts b/jam-ui/test/capture-session-flow-standalone.spec.ts
new file mode 100644
index 000000000..90e9709d7
--- /dev/null
+++ b/jam-ui/test/capture-session-flow-standalone.spec.ts
@@ -0,0 +1,366 @@
+import { chromium } from '@playwright/test';
+import * as fs from 'fs';
+import * as path from 'path';
+
+/**
+ * Standalone script to capture network traffic for the "Join Session" flow
+ * This runs independently without the global Playwright test setup
+ *
+ * Usage: node --loader ts-node/esm test/capture-session-flow-standalone.spec.ts
+ * Or: npx ts-node test/capture-session-flow-standalone.spec.ts
+ */
+async function captureSessionFlow() {
+ console.log('Starting session flow capture...\n');
+
+ // Launch browser with ability to capture network traffic
+ const browser = await chromium.launch({
+ headless: false, // Use headed mode to see what's happening
+ slowMo: 500, // Slow down by 500ms to make actions visible
+ });
+
+ const testResultsDir = path.join(__dirname, '../test-results');
+ if (!fs.existsSync(testResultsDir)) {
+ fs.mkdirSync(testResultsDir, { recursive: true });
+ }
+
+ const context = await browser.newContext({
+ ignoreHTTPSErrors: true,
+ recordHar: {
+ path: path.join(testResultsDir, 'session-join-flow.har'),
+ mode: 'full', // Capture full request/response bodies
+ },
+ });
+
+ const page = await context.newPage();
+
+ // Arrays to collect network activity
+ const wsMessages: any[] = [];
+ const apiCalls: any[] = [];
+ const allNetworkActivity: any[] = [];
+
+ // Listen to all network requests
+ page.on('request', request => {
+ const url = request.url();
+ const entry = {
+ step: 'REQUEST',
+ method: request.method(),
+ url: url,
+ headers: request.headers(),
+ timestamp: new Date().toISOString(),
+ };
+
+ if (url.includes('/api/')) {
+ console.log(`[API REQUEST] ${request.method()} ${url}`);
+ apiCalls.push(entry);
+ }
+ allNetworkActivity.push(entry);
+ });
+
+ page.on('response', async response => {
+ const url = response.url();
+ let body = null;
+ try {
+ const contentType = response.headers()['content-type'] || '';
+ if (contentType.includes('application/json') || contentType.includes('text/')) {
+ body = await response.text();
+ }
+ } catch (e) {
+ // Some responses can't be read
+ }
+
+ const entry = {
+ step: 'RESPONSE',
+ status: response.status(),
+ statusText: response.statusText(),
+ url: url,
+ headers: response.headers(),
+ body: body,
+ timestamp: new Date().toISOString(),
+ };
+
+ if (url.includes('/api/')) {
+ console.log(`[API RESPONSE] ${response.status()} ${url}`);
+ apiCalls.push(entry);
+ }
+ allNetworkActivity.push(entry);
+ });
+
+ // Listen to WebSocket events
+ page.on('websocket', ws => {
+ console.log(`[WEBSOCKET] Opened: ${ws.url()}`);
+ wsMessages.push({
+ event: 'open',
+ url: ws.url(),
+ timestamp: new Date().toISOString(),
+ });
+
+ ws.on('framesent', frame => {
+ console.log(`[WS SENT] ${frame.payload.toString().substring(0, 100)}...`);
+ wsMessages.push({
+ event: 'sent',
+ payload: frame.payload.toString(),
+ timestamp: new Date().toISOString(),
+ });
+ });
+
+ ws.on('framereceived', frame => {
+ console.log(`[WS RECEIVED] ${frame.payload.toString().substring(0, 100)}...`);
+ wsMessages.push({
+ event: 'received',
+ payload: frame.payload.toString(),
+ timestamp: new Date().toISOString(),
+ });
+ });
+
+ ws.on('close', () => {
+ console.log('[WEBSOCKET] Closed');
+ wsMessages.push({
+ event: 'close',
+ timestamp: new Date().toISOString(),
+ });
+ });
+ });
+
+ try {
+ console.log('\n=== STEP 1: Navigate to signin page ===');
+ await page.goto('http://www.jamkazam.local:3100/signin', {
+ waitUntil: 'networkidle',
+ timeout: 30000,
+ });
+ await page.waitForTimeout(2000);
+
+ console.log('\n=== STEP 2: Fill in login credentials ===');
+ // Try multiple selectors for email field
+ const emailSelectors = [
+ 'input#session_email',
+ 'input[name="email"]',
+ 'input[type="email"]',
+ 'input[placeholder*="email" i]',
+ ];
+
+ let emailFilled = false;
+ for (const selector of emailSelectors) {
+ try {
+ const element = await page.$(selector);
+ if (element) {
+ await page.fill(selector, 'nuwan@jamkazam.com');
+ console.log(`Filled email using selector: ${selector}`);
+ emailFilled = true;
+ break;
+ }
+ } catch (e) {
+ continue;
+ }
+ }
+
+ if (!emailFilled) {
+ console.error('Could not find email input field!');
+ console.log('Available input fields:');
+ const inputs = await page.$$('input');
+ for (const input of inputs) {
+ const type = await input.getAttribute('type');
+ const name = await input.getAttribute('name');
+ const id = await input.getAttribute('id');
+ console.log(` - input: type=${type}, name=${name}, id=${id}`);
+ }
+ }
+
+ // Try multiple selectors for password field
+ const passwordSelectors = [
+ 'input#session_password',
+ 'input[name="password"]',
+ 'input[type="password"]',
+ ];
+
+ let passwordFilled = false;
+ for (const selector of passwordSelectors) {
+ try {
+ const element = await page.$(selector);
+ if (element) {
+ await page.fill(selector, 'jam123');
+ console.log(`Filled password using selector: ${selector}`);
+ passwordFilled = true;
+ break;
+ }
+ } catch (e) {
+ continue;
+ }
+ }
+
+ await page.waitForTimeout(1000);
+
+ console.log('\n=== STEP 3: Click sign in button ===');
+ const submitSelectors = [
+ 'button[type="submit"]',
+ 'input[type="submit"]',
+ 'button:has-text("Sign in")',
+ 'button:has-text("Login")',
+ 'button:has-text("Sign In")',
+ 'input[value="Sign in"]',
+ 'input[value="Login"]',
+ ];
+
+ let submitClicked = false;
+ for (const selector of submitSelectors) {
+ try {
+ const element = await page.$(selector);
+ if (element) {
+ await page.click(selector);
+ console.log(`Clicked submit using selector: ${selector}`);
+ submitClicked = true;
+ break;
+ }
+ } catch (e) {
+ continue;
+ }
+ }
+
+ if (!submitClicked) {
+ console.error('Could not find submit button!');
+ console.log('Available buttons:');
+ const buttons = await page.$$('button, input[type="submit"]');
+ for (const button of buttons) {
+ const text = await button.textContent();
+ const type = await button.getAttribute('type');
+ const value = await button.getAttribute('value');
+ console.log(` - button: text="${text}", type=${type}, value=${value}`);
+ }
+ }
+
+ // Wait for navigation after login
+ console.log('Waiting for navigation after login...');
+ await page.waitForLoadState('networkidle', { timeout: 15000 }).catch(() => {
+ console.log('networkidle timeout - continuing anyway');
+ });
+ await page.waitForTimeout(3000);
+
+ console.log('\n=== STEP 4: Press Cmd+Shift+0 to skip upgrade modal ===');
+ await page.keyboard.press('Meta+Shift+Digit0');
+ await page.waitForTimeout(1500);
+ console.log('Upgrade modal skipped');
+
+ console.log('\n=== STEP 5: Look for and click "Create Session" tile ===');
+ // Try multiple selectors for create session button
+ const createSessionSelectors = [
+ '[data-testid="create-session"]',
+ 'button:has-text("Create Session")',
+ 'a:has-text("Create Session")',
+ 'div:has-text("Create Session")',
+ '.tile:has-text("Create Session")',
+ '[title*="Create Session"]',
+ ];
+
+ let sessionClicked = false;
+ for (const selector of createSessionSelectors) {
+ try {
+ const element = await page.$(selector);
+ if (element) {
+ await page.click(selector);
+ console.log(`Clicked create session using selector: ${selector}`);
+ sessionClicked = true;
+ break;
+ }
+ } catch (e) {
+ continue;
+ }
+ }
+
+ if (!sessionClicked) {
+ console.warn('Could not find "Create Session" button - taking screenshot');
+ await page.screenshot({ path: path.join(testResultsDir, 'dashboard-screenshot.png'), fullPage: true });
+ }
+
+ await page.waitForLoadState('networkidle', { timeout: 10000 }).catch(() => {
+ console.log('networkidle timeout - continuing anyway');
+ });
+ await page.waitForTimeout(2000);
+
+ console.log('\n=== STEP 6: Press Control+Shift+0 to remove backdrop ===');
+ // Press Control+Shift+0 to trick browser as native client and remove backdrop
+ // This works even with the modal open
+ await page.keyboard.press('Control+Shift+Digit0');
+ await page.waitForTimeout(2000);
+ console.log('Backdrop removed, browser tricked as native client');
+
+ console.log('\n=== STEP 7: Click "Create Quick Start" button ===');
+ const quickStartSelectors = [
+ 'button:has-text("Create Quick Start")',
+ 'button:has-text("Quick Start")',
+ 'button:has-text("Create quick start")',
+ '[data-testid="quick-start"]',
+ ];
+
+ let quickStartClicked = false;
+ for (const selector of quickStartSelectors) {
+ try {
+ const element = await page.$(selector);
+ if (element) {
+ await page.click(selector);
+ console.log(`Clicked quick start using selector: ${selector}`);
+ quickStartClicked = true;
+ break;
+ }
+ } catch (e) {
+ continue;
+ }
+ }
+
+ if (!quickStartClicked) {
+ console.warn('Could not find "Create Quick Start" button - taking screenshot');
+ await page.screenshot({ path: path.join(testResultsDir, 'session-create-screenshot.png'), fullPage: true });
+ }
+
+ // Wait for session to load and WebSocket messages
+ console.log('\nWaiting for session to load and capturing WebSocket traffic...');
+ await page.waitForLoadState('networkidle', { timeout: 10000 }).catch(() => {
+ console.log('networkidle timeout - continuing anyway');
+ });
+ await page.waitForTimeout(10000); // Give plenty of time for WebSocket messages
+
+ console.log('\n=== Recording Complete ===\n');
+
+ // Save all captured data
+ const apiCallsPath = path.join(testResultsDir, 'api-calls.json');
+ fs.writeFileSync(apiCallsPath, JSON.stringify(apiCalls, null, 2));
+ console.log(`ā API calls saved to: ${apiCallsPath}`);
+ console.log(` Total API calls: ${apiCalls.length}`);
+
+ const wsMessagesPath = path.join(testResultsDir, 'websocket-messages.json');
+ fs.writeFileSync(wsMessagesPath, JSON.stringify(wsMessages, null, 2));
+ console.log(`ā WebSocket messages saved to: ${wsMessagesPath}`);
+ console.log(` Total WebSocket messages: ${wsMessages.length}`);
+
+ const allActivityPath = path.join(testResultsDir, 'all-network-activity.json');
+ fs.writeFileSync(allActivityPath, JSON.stringify(allNetworkActivity, null, 2));
+ console.log(`ā All network activity saved to: ${allActivityPath}`);
+ console.log(` Total network requests: ${allNetworkActivity.length}`);
+
+ // Take final screenshot
+ await page.screenshot({ path: path.join(testResultsDir, 'final-state.png'), fullPage: true });
+ console.log(`ā Final screenshot saved`);
+
+ console.log('\nKeeping browser open for 10 seconds for manual inspection...');
+ await page.waitForTimeout(10000);
+
+ } catch (error) {
+ console.error('\nā Error during capture:', error);
+ await page.screenshot({ path: path.join(testResultsDir, 'error-screenshot.png'), fullPage: true });
+ throw error;
+ } finally {
+ console.log('\nClosing browser and saving HAR file...');
+ await context.close();
+ await browser.close();
+ console.log('ā HAR file saved to: test-results/session-join-flow.har\n');
+ }
+}
+
+// Run the capture
+captureSessionFlow()
+ .then(() => {
+ console.log('ā
Capture completed successfully!');
+ process.exit(0);
+ })
+ .catch((error) => {
+ console.error('ā Capture failed:', error);
+ process.exit(1);
+ });
diff --git a/jam-ui/test/capture-session-flow.spec.ts b/jam-ui/test/capture-session-flow.spec.ts
new file mode 100644
index 000000000..4fcbd88bc
--- /dev/null
+++ b/jam-ui/test/capture-session-flow.spec.ts
@@ -0,0 +1,165 @@
+import { test, chromium } from '@playwright/test';
+import * as fs from 'fs';
+import * as path from 'path';
+
+/**
+ * This test captures the complete network traffic (HAR file) for the "Join Session" flow
+ * from the legacy JamKazam application. The captured data will be used to:
+ * 1. Document all API calls to /api/*
+ * 2. Document all WebSocket messages
+ * 3. Create a migration test plan for the new jam-ui interface
+ */
+test('Capture network traffic for joining a music session', async () => {
+ // Launch browser with ability to capture network traffic
+ const browser = await chromium.launch({
+ headless: false, // Use headed mode to see what's happening
+ slowMo: 1000, // Slow down by 1 second to make actions visible
+ });
+
+ const context = await browser.newContext({
+ ignoreHTTPSErrors: true,
+ recordHar: {
+ path: path.join(__dirname, '../test-results/session-join-flow.har'),
+ mode: 'full', // Capture full request/response bodies
+ },
+ });
+
+ const page = await context.newPage();
+
+ // Array to collect all WebSocket messages
+ const wsMessages: any[] = [];
+ const apiCalls: any[] = [];
+
+ // Listen to all network requests
+ page.on('request', request => {
+ const url = request.url();
+ if (url.includes('/api/')) {
+ console.log(`API REQUEST: ${request.method()} ${url}`);
+ apiCalls.push({
+ type: 'request',
+ method: request.method(),
+ url: url,
+ headers: request.headers(),
+ timestamp: new Date().toISOString(),
+ });
+ }
+ });
+
+ page.on('response', async response => {
+ const url = response.url();
+ if (url.includes('/api/')) {
+ console.log(`API RESPONSE: ${response.status()} ${url}`);
+ let body = null;
+ try {
+ body = await response.text();
+ } catch (e) {
+ // Some responses can't be read
+ }
+ apiCalls.push({
+ type: 'response',
+ status: response.status(),
+ url: url,
+ headers: response.headers(),
+ body: body,
+ timestamp: new Date().toISOString(),
+ });
+ }
+ });
+
+ // Listen to WebSocket events
+ page.on('websocket', ws => {
+ console.log(`WebSocket opened: ${ws.url()}`);
+ wsMessages.push({
+ type: 'websocket-open',
+ url: ws.url(),
+ timestamp: new Date().toISOString(),
+ });
+
+ ws.on('framesent', frame => {
+ console.log(`WS SENT: ${frame.payload}`);
+ wsMessages.push({
+ type: 'sent',
+ payload: frame.payload,
+ timestamp: new Date().toISOString(),
+ });
+ });
+
+ ws.on('framereceived', frame => {
+ console.log(`WS RECEIVED: ${frame.payload}`);
+ wsMessages.push({
+ type: 'received',
+ payload: frame.payload,
+ timestamp: new Date().toISOString(),
+ });
+ });
+
+ ws.on('close', () => {
+ console.log('WebSocket closed');
+ wsMessages.push({
+ type: 'websocket-close',
+ timestamp: new Date().toISOString(),
+ });
+ });
+ });
+
+ try {
+ console.log('Step 1: Navigate to signin page');
+ await page.goto('http://www.jamkazam.com:3000/signin', {
+ waitUntil: 'networkidle',
+ timeout: 30000,
+ });
+
+ console.log('Step 2: Login with credentials');
+ // Fill in login form
+ await page.fill('input[name="email"], input[type="email"]', 'nuwan@jamkazam.com');
+ await page.fill('input[name="password"], input[type="password"]', 'jam123');
+
+ // Click sign in button
+ await page.click('button[type="submit"], input[type="submit"], button:has-text("Sign in"), button:has-text("Login")');
+
+ // Wait for navigation after login
+ await page.waitForLoadState('networkidle');
+ await page.waitForTimeout(2000);
+
+ console.log('Step 3: Click "create session" tile');
+ // Look for create session button/tile
+ await page.click('[data-testid="create-session"], button:has-text("Create Session"), a:has-text("Create Session")');
+ await page.waitForLoadState('networkidle');
+ await page.waitForTimeout(2000);
+
+ console.log('Step 4: Press Control+Shift+0 to trick browser as native client');
+ await page.keyboard.press('Control+Shift+Digit0');
+ await page.waitForTimeout(1000);
+
+ console.log('Step 5: Click "create quick start" button');
+ await page.click('button:has-text("Create Quick Start"), button:has-text("Quick Start")');
+
+ // Wait for session to load
+ await page.waitForLoadState('networkidle');
+ await page.waitForTimeout(5000); // Give time for WebSocket messages
+
+ console.log('Recording complete. Saving captured data...');
+
+ // Save API calls to a separate JSON file
+ const apiCallsPath = path.join(__dirname, '../test-results/api-calls.json');
+ fs.writeFileSync(apiCallsPath, JSON.stringify(apiCalls, null, 2));
+ console.log(`API calls saved to: ${apiCallsPath}`);
+
+ // Save WebSocket messages to a separate JSON file
+ const wsMessagesPath = path.join(__dirname, '../test-results/websocket-messages.json');
+ fs.writeFileSync(wsMessagesPath, JSON.stringify(wsMessages, null, 2));
+ console.log(`WebSocket messages saved to: ${wsMessagesPath}`);
+
+ // Keep browser open for manual inspection
+ console.log('Keeping browser open for 30 seconds for manual inspection...');
+ await page.waitForTimeout(30000);
+
+ } catch (error) {
+ console.error('Error during test:', error);
+ throw error;
+ } finally {
+ // Close context to save HAR file
+ await context.close();
+ await browser.close();
+ }
+});
diff --git a/jam-ui/test/e2e/complete-session-flow.spec.ts b/jam-ui/test/e2e/complete-session-flow.spec.ts
new file mode 100644
index 000000000..775fa6805
--- /dev/null
+++ b/jam-ui/test/e2e/complete-session-flow.spec.ts
@@ -0,0 +1,285 @@
+import { test, expect } from '@playwright/test';
+import { APIInterceptor } from '../utils/api-interceptor';
+import { WebSocketMonitor } from '../utils/websocket-monitor';
+import { compareAPISequences } from '../utils/sequence-comparator';
+import {
+ loginToJamUI,
+ navigateToSessionCreation,
+ fillSessionForm,
+ verifySessionInterfaceLoaded,
+ waitForAPICalls,
+ extractSessionId,
+} from '../utils/test-helpers';
+import * as fs from 'fs';
+import * as path from 'path';
+
+test.describe('Complete Session Flow E2E', () => {
+ test('complete flow: login ā create session ā join session', async ({ page }) => {
+ const apiInterceptor = new APIInterceptor();
+ const wsMonitor = new WebSocketMonitor();
+
+ apiInterceptor.intercept(page);
+ wsMonitor.monitor(page);
+
+ console.log('\n========================================');
+ console.log('COMPLETE SESSION FLOW E2E TEST');
+ console.log('========================================\n');
+
+ // STEP 1: Login
+ console.log('Step 1: Login...');
+ await loginToJamUI(page, {
+ email: 'nuwan@jamkazam.com',
+ password: 'jam123',
+ });
+ await waitForAPICalls(page, 3000);
+
+ const loginCalls = apiInterceptor.getCalls().length;
+ console.log(` ā Logged in (${loginCalls} API calls)\n`);
+
+ // Verify we're logged in
+ await expect(page).not.toHaveURL(/signin|login/);
+
+ // STEP 2: Navigate to session creation
+ console.log('Step 2: Navigate to session creation...');
+ apiInterceptor.reset();
+ await navigateToSessionCreation(page);
+ await waitForAPICalls(page, 2000);
+
+ const navCalls = apiInterceptor.getCalls().length;
+ console.log(` ā Navigated to session creation (${navCalls} API calls)\n`);
+
+ // STEP 3: Enable native client and create session
+ // STEP 3: Create and join session
+ console.log('Step 3: Create and join session...');
+ apiInterceptor.reset();
+ await fillSessionForm(page, { sessionType: 'private' });
+ await waitForAPICalls(page, 8000);
+
+ const sessionCalls = apiInterceptor.getCalls();
+ console.log(` ā Session created (${sessionCalls.length} API calls)\n`);
+
+ // Verify session creation endpoints
+ const sessionCreation = sessionCalls.find(c =>
+ c.method === 'POST' && c.pathname.match(/\/api\/sessions\/?$/)
+ );
+ expect(sessionCreation).toBeDefined();
+ console.log(` ā POST /api/sessions called`);
+
+ const participantAdd = sessionCalls.find(c =>
+ c.method === 'POST' && c.pathname.includes('/participants')
+ );
+ expect(participantAdd).toBeDefined();
+ console.log(` ā POST /api/sessions/{id}/participants called`);
+
+ // Extract session ID
+ const sessionId = await extractSessionId(page);
+ if (sessionId) {
+ console.log(` ā Session ID: ${sessionId}`);
+ }
+
+ // Verify session interface loaded
+ console.log('\nStep 4: Verify session interface...');
+ await verifySessionInterfaceLoaded(page);
+ console.log(` ā Session interface elements present\n`);
+
+ // Verify WebSocket connections
+ const wsVerification = wsMonitor.verifyDualConnections();
+ console.log('Step 5: Verify WebSocket connections...');
+ console.log(` Native client: ${wsVerification.hasNativeClient ? 'YES' : 'NO'}`);
+ console.log(` Server: ${wsVerification.hasServerConnection ? 'YES' : 'NO'}`);
+ expect(wsVerification.bothEstablished).toBe(true);
+ console.log(` ā Dual connections established\n`);
+
+ // Compare with legacy sequence
+ console.log('Step 6: Compare with legacy sequence...');
+ const expectedPath = path.join(__dirname, '../fixtures/legacy-sequences/complete-flow-simplified.json');
+ const expectedCalls = JSON.parse(fs.readFileSync(expectedPath, 'utf8'));
+
+ const allCalls = apiInterceptor.getCalls();
+ const comparison = compareAPISequences(allCalls, expectedCalls);
+
+ const matchPercentage = (comparison.matchedCalls / comparison.totalCalls) * 100;
+ console.log(` API calls: ${allCalls.length}`);
+ console.log(` Expected: ${expectedCalls.length}`);
+ console.log(` Match: ${matchPercentage.toFixed(1)}%`);
+
+ // Save comprehensive results
+ const resultsDir = path.join(__dirname, '../test-results/e2e');
+ if (!fs.existsSync(resultsDir)) {
+ fs.mkdirSync(resultsDir, { recursive: true });
+ }
+
+ // Save API calls
+ fs.writeFileSync(
+ path.join(resultsDir, 'complete-flow-api-calls.json'),
+ JSON.stringify(allCalls, null, 2)
+ );
+
+ // Save comparison report
+ fs.writeFileSync(
+ path.join(resultsDir, 'complete-flow-comparison.md'),
+ comparison.report
+ );
+
+ // Save WebSocket data
+ fs.writeFileSync(
+ path.join(resultsDir, 'complete-flow-websockets.json'),
+ wsMonitor.toJSON()
+ );
+
+ // Save screenshot
+ await page.screenshot({
+ path: path.join(resultsDir, 'session-interface.png'),
+ fullPage: true,
+ });
+
+ console.log('\n========================================');
+ console.log('COMPLETE SESSION FLOW TEST: PASSED');
+ console.log('========================================\n');
+
+ // Final assertions
+ expect(matchPercentage).toBeGreaterThanOrEqual(70);
+ expect(wsVerification.bothEstablished).toBe(true);
+ expect(sessionCreation).toBeDefined();
+ expect(participantAdd).toBeDefined();
+ });
+
+ test('session interface has all required controls', async ({ page }) => {
+ await loginToJamUI(page);
+ await waitForAPICalls(page);
+
+ await navigateToSessionCreation(page);
+ await waitForAPICalls(page);
+
+ await fillSessionForm(page);
+ await waitForAPICalls(page, 8000);
+
+ // Check for session control buttons
+ const expectedControls = [
+ 'SETTINGS',
+ 'VOLUME',
+ 'BROADCAST',
+ 'RECORD',
+ 'VIDEO',
+ 'FILES',
+ 'RESYNC',
+ 'LEAVE',
+ ];
+
+ const foundControls: string[] = [];
+ const missingControls: string[] = [];
+
+ for (const control of expectedControls) {
+ const selectors = [
+ `text=${control}`,
+ `button:has-text("${control}")`,
+ `[data-testid="${control.toLowerCase()}"]`,
+ ];
+
+ let found = false;
+ for (const selector of selectors) {
+ try {
+ const element = await page.$(selector);
+ if (element) {
+ foundControls.push(control);
+ found = true;
+ break;
+ }
+ } catch {
+ continue;
+ }
+ }
+
+ if (!found) {
+ missingControls.push(control);
+ }
+ }
+
+ console.log('\nSession interface controls:');
+ console.log(` Found: ${foundControls.join(', ')}`);
+ if (missingControls.length > 0) {
+ console.log(` Missing: ${missingControls.join(', ')}`);
+ }
+
+ // At least some key controls should be present
+ expect(foundControls.length).toBeGreaterThan(3);
+ });
+
+ test('session creation handles errors gracefully', async ({ page }) => {
+ // This test verifies error handling - might fail initially
+ const apiInterceptor = new APIInterceptor();
+ apiInterceptor.intercept(page);
+
+ await loginToJamUI(page);
+ await navigateToSessionCreation(page);
+ await page.keyboard.press('Control+Shift+Digit0');
+ await waitForAPICalls(page, 3000);
+
+ // Try to create session
+ await fillSessionForm(page);
+ await waitForAPICalls(page, 8000);
+
+ const calls = apiInterceptor.getCalls();
+
+ // Check if any calls failed
+ const failedCalls = calls.filter(c =>
+ c.responseStatus && c.responseStatus >= 400
+ );
+
+ if (failedCalls.length > 0) {
+ console.log('\nFailed API calls:');
+ failedCalls.forEach(call => {
+ console.log(` ${call.method} ${call.pathname}: ${call.responseStatus}`);
+ });
+ }
+
+ // Even if some calls fail, the critical session creation should succeed
+ const sessionCreation = calls.find(c =>
+ c.method === 'POST' &&
+ c.pathname.match(/\/api\/sessions\/?$/) &&
+ c.responseStatus &&
+ c.responseStatus >= 200 &&
+ c.responseStatus < 300
+ );
+
+ // Log whether session creation succeeded
+ console.log(`\nSession creation: ${sessionCreation ? 'SUCCESS' : 'FAILED'}`);
+ });
+
+ test('user can leave session', async ({ page }) => {
+ await loginToJamUI(page);
+ await waitForAPICalls(page);
+
+ await navigateToSessionCreation(page);
+ await waitForAPICalls(page);
+
+ await fillSessionForm(page);
+ await waitForAPICalls(page, 8000);
+
+ // Try to find and click LEAVE button
+ const leaveSelectors = [
+ 'text=LEAVE',
+ 'button:has-text("LEAVE")',
+ '[data-testid="leave-button"]',
+ 'button:has-text("Leave Session")',
+ ];
+
+ let leaveClicked = false;
+ for (const selector of leaveSelectors) {
+ try {
+ const element = await page.$(selector);
+ if (element) {
+ console.log(`\nFound LEAVE button: ${selector}`);
+ // Don't actually click it (would end the test), just verify it exists
+ leaveClicked = true;
+ break;
+ }
+ } catch {
+ continue;
+ }
+ }
+
+ console.log(`LEAVE button available: ${leaveClicked ? 'YES' : 'NO'}`);
+ expect(leaveClicked).toBe(true);
+ });
+});
diff --git a/jam-ui/test/fixtures/create-simplified-fixtures.js b/jam-ui/test/fixtures/create-simplified-fixtures.js
new file mode 100644
index 000000000..5c150be05
--- /dev/null
+++ b/jam-ui/test/fixtures/create-simplified-fixtures.js
@@ -0,0 +1,103 @@
+/**
+ * This script processes the raw step verification data and creates simplified
+ * fixture files for easier test comparison
+ */
+
+const fs = require('fs');
+const path = require('path');
+
+const stepDir = path.join(__dirname, '../../test-results/step-verification');
+const fixturesDir = path.join(__dirname, 'legacy-sequences');
+
+function processStepData(stepNumber, stepName) {
+ const stepPath = path.join(stepDir, `step-${stepNumber}`);
+ const apiCallsFile = path.join(stepPath, 'api-calls.json');
+
+ if (!fs.existsSync(apiCallsFile)) {
+ console.log(`ā ļø Step ${stepNumber} API calls not found`);
+ return;
+ }
+
+ const apiCalls = JSON.parse(fs.readFileSync(apiCallsFile, 'utf8'));
+
+ // Filter to just requests
+ const requests = apiCalls.filter(call => call.type === 'request');
+
+ // Create simplified version with just essential info
+ const simplified = requests.map((call, index) => {
+ const url = new URL(call.url);
+ return {
+ sequence: index,
+ method: call.method,
+ url: call.url,
+ pathname: url.pathname,
+ timestamp: call.timestamp,
+ endpoint: `${call.method} ${url.pathname}`,
+ };
+ });
+
+ // Save simplified version
+ const outputFile = path.join(fixturesDir, `${stepName}-simplified.json`);
+ fs.writeFileSync(outputFile, JSON.stringify(simplified, null, 2));
+
+ console.log(`ā Created ${outputFile}`);
+ console.log(` ${simplified.length} API calls`);
+
+ return simplified;
+}
+
+console.log('Creating simplified fixtures from step verification data...\n');
+
+// Process each step
+const steps = [
+ { number: 1, name: 'login' },
+ { number: 2, name: 'dashboard' },
+ { number: 3, name: 'skip-modal' },
+ { number: 4, name: 'navigate-to-session' },
+ { number: 5, name: 'session-creation' },
+];
+
+const allSequences = {};
+
+for (const step of steps) {
+ const sequence = processStepData(step.number, step.name);
+ if (sequence) {
+ allSequences[step.name] = sequence;
+ }
+}
+
+// Create combined complete flow
+const completeFlow = Object.values(allSequences).flat();
+const completeFile = path.join(fixturesDir, 'complete-flow-simplified.json');
+fs.writeFileSync(completeFile, JSON.stringify(completeFlow, null, 2));
+console.log(`\nā Created ${completeFile}`);
+console.log(` ${completeFlow.length} total API calls`);
+
+// Create summary file with unique endpoints
+const uniqueEndpoints = new Map();
+for (const call of completeFlow) {
+ const endpoint = call.endpoint;
+ if (!uniqueEndpoints.has(endpoint)) {
+ uniqueEndpoints.set(endpoint, 0);
+ }
+ uniqueEndpoints.set(endpoint, uniqueEndpoints.get(endpoint) + 1);
+}
+
+const summary = {
+ totalCalls: completeFlow.length,
+ uniqueEndpoints: uniqueEndpoints.size,
+ endpoints: Array.from(uniqueEndpoints.entries()).map(([endpoint, count]) => ({
+ endpoint,
+ count,
+ })),
+ steps: Object.entries(allSequences).map(([name, calls]) => ({
+ step: name,
+ callCount: calls.length,
+ })),
+};
+
+const summaryFile = path.join(fixturesDir, 'summary.json');
+fs.writeFileSync(summaryFile, JSON.stringify(summary, null, 2));
+console.log(`\nā Created ${summaryFile}`);
+console.log(` ${summary.uniqueEndpoints} unique endpoints`);
+console.log(` ${summary.totalCalls} total API calls`);
diff --git a/jam-ui/test/fixtures/legacy-sequences/complete-flow-simplified.json b/jam-ui/test/fixtures/legacy-sequences/complete-flow-simplified.json
new file mode 100644
index 000000000..b093a7b81
--- /dev/null
+++ b/jam-ui/test/fixtures/legacy-sequences/complete-flow-simplified.json
@@ -0,0 +1,562 @@
+[
+ {
+ "sequence": 0,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "pathname": "/api/genres",
+ "timestamp": "2026-01-20T10:15:25.212Z",
+ "endpoint": "GET /api/genres"
+ },
+ {
+ "sequence": 1,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381?",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "timestamp": "2026-01-20T10:15:31.522Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381"
+ },
+ {
+ "sequence": 2,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/countries",
+ "pathname": "/api/countries",
+ "timestamp": "2026-01-20T10:15:31.618Z",
+ "endpoint": "GET /api/countries"
+ },
+ {
+ "sequence": 3,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/shopping_carts?time=1768904131749",
+ "pathname": "/api/shopping_carts",
+ "timestamp": "2026-01-20T10:15:31.756Z",
+ "endpoint": "GET /api/shopping_carts"
+ },
+ {
+ "sequence": 4,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "pathname": "/api/jamtracks/purchased",
+ "timestamp": "2026-01-20T10:15:31.921Z",
+ "endpoint": "GET /api/jamtracks/purchased"
+ },
+ {
+ "sequence": 5,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/teacher_distributions?per_page=20&page=1",
+ "pathname": "/api/teacher_distributions",
+ "timestamp": "2026-01-20T10:15:31.923Z",
+ "endpoint": "GET /api/teacher_distributions"
+ },
+ {
+ "sequence": 6,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/regions?country=US",
+ "pathname": "/api/regions",
+ "timestamp": "2026-01-20T10:15:31.990Z",
+ "endpoint": "GET /api/regions"
+ },
+ {
+ "sequence": 7,
+ "method": "POST",
+ "url": "https://www.paypal.com/xoplatform/logger/api/logger",
+ "pathname": "/xoplatform/logger/api/logger",
+ "timestamp": "2026-01-20T10:15:33.727Z",
+ "endpoint": "POST /xoplatform/logger/api/logger"
+ },
+ {
+ "sequence": 8,
+ "method": "POST",
+ "url": "https://www.paypal.com/xoplatform/logger/api/logger",
+ "pathname": "/xoplatform/logger/api/logger",
+ "timestamp": "2026-01-20T10:15:33.727Z",
+ "endpoint": "POST /xoplatform/logger/api/logger"
+ },
+ {
+ "sequence": 9,
+ "method": "POST",
+ "url": "https://www.paypal.com/xoplatform/logger/api/logger",
+ "pathname": "/xoplatform/logger/api/logger",
+ "timestamp": "2026-01-20T10:15:33.938Z",
+ "endpoint": "POST /xoplatform/logger/api/logger"
+ },
+ {
+ "sequence": 10,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification",
+ "timestamp": "2026-01-20T10:15:33.961Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification"
+ },
+ {
+ "sequence": 11,
+ "method": "POST",
+ "url": "https://www.paypal.com/xoplatform/logger/api/logger",
+ "pathname": "/xoplatform/logger/api/logger",
+ "timestamp": "2026-01-20T10:15:34.127Z",
+ "endpoint": "POST /xoplatform/logger/api/logger"
+ },
+ {
+ "sequence": 0,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "pathname": "/api/genres",
+ "timestamp": "2026-01-20T10:15:41.765Z",
+ "endpoint": "GET /api/genres"
+ },
+ {
+ "sequence": 1,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "pathname": "/api/genres",
+ "timestamp": "2026-01-20T10:15:41.766Z",
+ "endpoint": "GET /api/genres"
+ },
+ {
+ "sequence": 2,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "pathname": "/api/instruments",
+ "timestamp": "2026-01-20T10:15:41.815Z",
+ "endpoint": "GET /api/instruments"
+ },
+ {
+ "sequence": 3,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "timestamp": "2026-01-20T10:15:41.816Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends"
+ },
+ {
+ "sequence": 4,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications?offset=0&limit=20",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications",
+ "timestamp": "2026-01-20T10:15:41.816Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications"
+ },
+ {
+ "sequence": 5,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "pathname": "/api/instruments",
+ "timestamp": "2026-01-20T10:15:41.927Z",
+ "endpoint": "GET /api/instruments"
+ },
+ {
+ "sequence": 6,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "timestamp": "2026-01-20T10:15:41.927Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends"
+ },
+ {
+ "sequence": 7,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "pathname": "/api/instruments",
+ "timestamp": "2026-01-20T10:15:41.927Z",
+ "endpoint": "GET /api/instruments"
+ },
+ {
+ "sequence": 8,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/languages",
+ "pathname": "/api/languages",
+ "timestamp": "2026-01-20T10:15:41.927Z",
+ "endpoint": "GET /api/languages"
+ },
+ {
+ "sequence": 9,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "pathname": "/api/genres",
+ "timestamp": "2026-01-20T10:15:41.927Z",
+ "endpoint": "GET /api/genres"
+ },
+ {
+ "sequence": 10,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/subjects",
+ "pathname": "/api/subjects",
+ "timestamp": "2026-01-20T10:15:41.928Z",
+ "endpoint": "GET /api/subjects"
+ },
+ {
+ "sequence": 11,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/chat?type=CHAT_MESSAGE&limit=20&page=0&channel=global",
+ "pathname": "/api/chat",
+ "timestamp": "2026-01-20T10:15:41.928Z",
+ "endpoint": "GET /api/chat"
+ },
+ {
+ "sequence": 12,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "pathname": "/api/versioncheck",
+ "timestamp": "2026-01-20T10:15:42.826Z",
+ "endpoint": "GET /api/versioncheck"
+ },
+ {
+ "sequence": 13,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "pathname": "/api/versioncheck",
+ "timestamp": "2026-01-20T10:15:42.829Z",
+ "endpoint": "GET /api/versioncheck"
+ },
+ {
+ "sequence": 14,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/healthcheck",
+ "pathname": "/api/healthcheck",
+ "timestamp": "2026-01-20T10:15:43.752Z",
+ "endpoint": "GET /api/healthcheck"
+ },
+ {
+ "sequence": 15,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/config/client?",
+ "pathname": "/api/config/client",
+ "timestamp": "2026-01-20T10:15:43.932Z",
+ "endpoint": "GET /api/config/client"
+ },
+ {
+ "sequence": 0,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "pathname": "/api/versioncheck",
+ "timestamp": "2026-01-20T10:15:45.349Z",
+ "endpoint": "GET /api/versioncheck"
+ },
+ {
+ "sequence": 0,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/sessions/scheduled?",
+ "pathname": "/api/sessions/scheduled",
+ "timestamp": "2026-01-20T10:15:50.945Z",
+ "endpoint": "GET /api/sessions/scheduled"
+ },
+ {
+ "sequence": 1,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381?",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "timestamp": "2026-01-20T10:15:50.946Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381"
+ },
+ {
+ "sequence": 2,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "pathname": "/api/jamtracks/purchased",
+ "timestamp": "2026-01-20T10:15:51.197Z",
+ "endpoint": "GET /api/jamtracks/purchased"
+ },
+ {
+ "sequence": 0,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381?",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "timestamp": "2026-01-20T10:15:55.382Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381"
+ },
+ {
+ "sequence": 1,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/countries",
+ "pathname": "/api/countries",
+ "timestamp": "2026-01-20T10:15:55.437Z",
+ "endpoint": "GET /api/countries"
+ },
+ {
+ "sequence": 2,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/shopping_carts?time=1768904155592",
+ "pathname": "/api/shopping_carts",
+ "timestamp": "2026-01-20T10:15:55.594Z",
+ "endpoint": "GET /api/shopping_carts"
+ },
+ {
+ "sequence": 3,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "pathname": "/api/genres",
+ "timestamp": "2026-01-20T10:15:55.655Z",
+ "endpoint": "GET /api/genres"
+ },
+ {
+ "sequence": 4,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "pathname": "/api/genres",
+ "timestamp": "2026-01-20T10:15:55.655Z",
+ "endpoint": "GET /api/genres"
+ },
+ {
+ "sequence": 5,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "pathname": "/api/instruments",
+ "timestamp": "2026-01-20T10:15:55.664Z",
+ "endpoint": "GET /api/instruments"
+ },
+ {
+ "sequence": 6,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "pathname": "/api/instruments",
+ "timestamp": "2026-01-20T10:15:55.734Z",
+ "endpoint": "GET /api/instruments"
+ },
+ {
+ "sequence": 7,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "timestamp": "2026-01-20T10:15:55.734Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends"
+ },
+ {
+ "sequence": 8,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "pathname": "/api/jamtracks/purchased",
+ "timestamp": "2026-01-20T10:15:55.734Z",
+ "endpoint": "GET /api/jamtracks/purchased"
+ },
+ {
+ "sequence": 9,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "pathname": "/api/instruments",
+ "timestamp": "2026-01-20T10:15:55.739Z",
+ "endpoint": "GET /api/instruments"
+ },
+ {
+ "sequence": 10,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/languages",
+ "pathname": "/api/languages",
+ "timestamp": "2026-01-20T10:15:55.739Z",
+ "endpoint": "GET /api/languages"
+ },
+ {
+ "sequence": 11,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "pathname": "/api/genres",
+ "timestamp": "2026-01-20T10:15:55.740Z",
+ "endpoint": "GET /api/genres"
+ },
+ {
+ "sequence": 12,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/subjects",
+ "pathname": "/api/subjects",
+ "timestamp": "2026-01-20T10:15:55.740Z",
+ "endpoint": "GET /api/subjects"
+ },
+ {
+ "sequence": 13,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/chat?type=CHAT_MESSAGE&limit=20&page=0&channel=global",
+ "pathname": "/api/chat",
+ "timestamp": "2026-01-20T10:15:55.740Z",
+ "endpoint": "GET /api/chat"
+ },
+ {
+ "sequence": 14,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/sessions/scheduled?",
+ "pathname": "/api/sessions/scheduled",
+ "timestamp": "2026-01-20T10:15:55.987Z",
+ "endpoint": "GET /api/sessions/scheduled"
+ },
+ {
+ "sequence": 15,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381?",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "timestamp": "2026-01-20T10:15:55.987Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381"
+ },
+ {
+ "sequence": 16,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "timestamp": "2026-01-20T10:15:56.005Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends"
+ },
+ {
+ "sequence": 17,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications?offset=0&limit=20",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications",
+ "timestamp": "2026-01-20T10:15:56.006Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications"
+ },
+ {
+ "sequence": 18,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/regions?country=US",
+ "pathname": "/api/regions",
+ "timestamp": "2026-01-20T10:15:56.009Z",
+ "endpoint": "GET /api/regions"
+ },
+ {
+ "sequence": 19,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "pathname": "/api/jamtracks/purchased",
+ "timestamp": "2026-01-20T10:15:56.247Z",
+ "endpoint": "GET /api/jamtracks/purchased"
+ },
+ {
+ "sequence": 20,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/teacher_distributions?per_page=20&page=1",
+ "pathname": "/api/teacher_distributions",
+ "timestamp": "2026-01-20T10:15:56.247Z",
+ "endpoint": "GET /api/teacher_distributions"
+ },
+ {
+ "sequence": 21,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "pathname": "/api/versioncheck",
+ "timestamp": "2026-01-20T10:15:56.251Z",
+ "endpoint": "GET /api/versioncheck"
+ },
+ {
+ "sequence": 22,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "pathname": "/api/versioncheck",
+ "timestamp": "2026-01-20T10:15:56.254Z",
+ "endpoint": "GET /api/versioncheck"
+ },
+ {
+ "sequence": 23,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "pathname": "/api/versioncheck",
+ "timestamp": "2026-01-20T10:15:56.305Z",
+ "endpoint": "GET /api/versioncheck"
+ },
+ {
+ "sequence": 24,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "pathname": "/api/jamtracks/purchased",
+ "timestamp": "2026-01-20T10:15:57.016Z",
+ "endpoint": "GET /api/jamtracks/purchased"
+ },
+ {
+ "sequence": 25,
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3100/api/sessions",
+ "pathname": "/api/sessions",
+ "timestamp": "2026-01-20T10:15:57.295Z",
+ "endpoint": "POST /api/sessions"
+ },
+ {
+ "sequence": 26,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/history?includePending=false",
+ "pathname": "/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/history",
+ "timestamp": "2026-01-20T10:15:57.677Z",
+ "endpoint": "GET /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/history"
+ },
+ {
+ "sequence": 27,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/config/client?",
+ "pathname": "/api/config/client",
+ "timestamp": "2026-01-20T10:15:57.748Z",
+ "endpoint": "GET /api/config/client"
+ },
+ {
+ "sequence": 28,
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/participants",
+ "pathname": "/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/participants",
+ "timestamp": "2026-01-20T10:15:57.929Z",
+ "endpoint": "POST /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/participants"
+ },
+ {
+ "sequence": 29,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification",
+ "timestamp": "2026-01-20T10:15:58.794Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification"
+ },
+ {
+ "sequence": 30,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/chat?type=CHAT_MESSAGE&limit=20&page=0&channel=session&music_session=02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "pathname": "/api/chat",
+ "timestamp": "2026-01-20T10:15:58.809Z",
+ "endpoint": "GET /api/chat"
+ },
+ {
+ "sequence": 31,
+ "method": "PUT",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "pathname": "/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "timestamp": "2026-01-20T10:15:58.859Z",
+ "endpoint": "PUT /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks"
+ },
+ {
+ "sequence": 32,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "pathname": "/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "timestamp": "2026-01-20T10:15:58.964Z",
+ "endpoint": "GET /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23"
+ },
+ {
+ "sequence": 33,
+ "method": "PUT",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "pathname": "/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "timestamp": "2026-01-20T10:15:59.264Z",
+ "endpoint": "PUT /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks"
+ },
+ {
+ "sequence": 34,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "pathname": "/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "timestamp": "2026-01-20T10:15:59.317Z",
+ "endpoint": "GET /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23"
+ },
+ {
+ "sequence": 35,
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/udp_reachable",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/udp_reachable",
+ "timestamp": "2026-01-20T10:15:59.547Z",
+ "endpoint": "POST /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/udp_reachable"
+ },
+ {
+ "sequence": 36,
+ "method": "PUT",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "pathname": "/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "timestamp": "2026-01-20T10:16:05.013Z",
+ "endpoint": "PUT /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks"
+ },
+ {
+ "sequence": 37,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "pathname": "/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "timestamp": "2026-01-20T10:16:05.049Z",
+ "endpoint": "GET /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23"
+ }
+]
\ No newline at end of file
diff --git a/jam-ui/test/fixtures/legacy-sequences/dashboard-simplified.json b/jam-ui/test/fixtures/legacy-sequences/dashboard-simplified.json
new file mode 100644
index 000000000..9cade0ad1
--- /dev/null
+++ b/jam-ui/test/fixtures/legacy-sequences/dashboard-simplified.json
@@ -0,0 +1,130 @@
+[
+ {
+ "sequence": 0,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "pathname": "/api/genres",
+ "timestamp": "2026-01-20T10:15:41.765Z",
+ "endpoint": "GET /api/genres"
+ },
+ {
+ "sequence": 1,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "pathname": "/api/genres",
+ "timestamp": "2026-01-20T10:15:41.766Z",
+ "endpoint": "GET /api/genres"
+ },
+ {
+ "sequence": 2,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "pathname": "/api/instruments",
+ "timestamp": "2026-01-20T10:15:41.815Z",
+ "endpoint": "GET /api/instruments"
+ },
+ {
+ "sequence": 3,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "timestamp": "2026-01-20T10:15:41.816Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends"
+ },
+ {
+ "sequence": 4,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications?offset=0&limit=20",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications",
+ "timestamp": "2026-01-20T10:15:41.816Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications"
+ },
+ {
+ "sequence": 5,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "pathname": "/api/instruments",
+ "timestamp": "2026-01-20T10:15:41.927Z",
+ "endpoint": "GET /api/instruments"
+ },
+ {
+ "sequence": 6,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "timestamp": "2026-01-20T10:15:41.927Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends"
+ },
+ {
+ "sequence": 7,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "pathname": "/api/instruments",
+ "timestamp": "2026-01-20T10:15:41.927Z",
+ "endpoint": "GET /api/instruments"
+ },
+ {
+ "sequence": 8,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/languages",
+ "pathname": "/api/languages",
+ "timestamp": "2026-01-20T10:15:41.927Z",
+ "endpoint": "GET /api/languages"
+ },
+ {
+ "sequence": 9,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "pathname": "/api/genres",
+ "timestamp": "2026-01-20T10:15:41.927Z",
+ "endpoint": "GET /api/genres"
+ },
+ {
+ "sequence": 10,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/subjects",
+ "pathname": "/api/subjects",
+ "timestamp": "2026-01-20T10:15:41.928Z",
+ "endpoint": "GET /api/subjects"
+ },
+ {
+ "sequence": 11,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/chat?type=CHAT_MESSAGE&limit=20&page=0&channel=global",
+ "pathname": "/api/chat",
+ "timestamp": "2026-01-20T10:15:41.928Z",
+ "endpoint": "GET /api/chat"
+ },
+ {
+ "sequence": 12,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "pathname": "/api/versioncheck",
+ "timestamp": "2026-01-20T10:15:42.826Z",
+ "endpoint": "GET /api/versioncheck"
+ },
+ {
+ "sequence": 13,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "pathname": "/api/versioncheck",
+ "timestamp": "2026-01-20T10:15:42.829Z",
+ "endpoint": "GET /api/versioncheck"
+ },
+ {
+ "sequence": 14,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/healthcheck",
+ "pathname": "/api/healthcheck",
+ "timestamp": "2026-01-20T10:15:43.752Z",
+ "endpoint": "GET /api/healthcheck"
+ },
+ {
+ "sequence": 15,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/config/client?",
+ "pathname": "/api/config/client",
+ "timestamp": "2026-01-20T10:15:43.932Z",
+ "endpoint": "GET /api/config/client"
+ }
+]
\ No newline at end of file
diff --git a/jam-ui/test/fixtures/legacy-sequences/login-simplified.json b/jam-ui/test/fixtures/legacy-sequences/login-simplified.json
new file mode 100644
index 000000000..6777fc9e0
--- /dev/null
+++ b/jam-ui/test/fixtures/legacy-sequences/login-simplified.json
@@ -0,0 +1,98 @@
+[
+ {
+ "sequence": 0,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "pathname": "/api/genres",
+ "timestamp": "2026-01-20T10:15:25.212Z",
+ "endpoint": "GET /api/genres"
+ },
+ {
+ "sequence": 1,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381?",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "timestamp": "2026-01-20T10:15:31.522Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381"
+ },
+ {
+ "sequence": 2,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/countries",
+ "pathname": "/api/countries",
+ "timestamp": "2026-01-20T10:15:31.618Z",
+ "endpoint": "GET /api/countries"
+ },
+ {
+ "sequence": 3,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/shopping_carts?time=1768904131749",
+ "pathname": "/api/shopping_carts",
+ "timestamp": "2026-01-20T10:15:31.756Z",
+ "endpoint": "GET /api/shopping_carts"
+ },
+ {
+ "sequence": 4,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "pathname": "/api/jamtracks/purchased",
+ "timestamp": "2026-01-20T10:15:31.921Z",
+ "endpoint": "GET /api/jamtracks/purchased"
+ },
+ {
+ "sequence": 5,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/teacher_distributions?per_page=20&page=1",
+ "pathname": "/api/teacher_distributions",
+ "timestamp": "2026-01-20T10:15:31.923Z",
+ "endpoint": "GET /api/teacher_distributions"
+ },
+ {
+ "sequence": 6,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/regions?country=US",
+ "pathname": "/api/regions",
+ "timestamp": "2026-01-20T10:15:31.990Z",
+ "endpoint": "GET /api/regions"
+ },
+ {
+ "sequence": 7,
+ "method": "POST",
+ "url": "https://www.paypal.com/xoplatform/logger/api/logger",
+ "pathname": "/xoplatform/logger/api/logger",
+ "timestamp": "2026-01-20T10:15:33.727Z",
+ "endpoint": "POST /xoplatform/logger/api/logger"
+ },
+ {
+ "sequence": 8,
+ "method": "POST",
+ "url": "https://www.paypal.com/xoplatform/logger/api/logger",
+ "pathname": "/xoplatform/logger/api/logger",
+ "timestamp": "2026-01-20T10:15:33.727Z",
+ "endpoint": "POST /xoplatform/logger/api/logger"
+ },
+ {
+ "sequence": 9,
+ "method": "POST",
+ "url": "https://www.paypal.com/xoplatform/logger/api/logger",
+ "pathname": "/xoplatform/logger/api/logger",
+ "timestamp": "2026-01-20T10:15:33.938Z",
+ "endpoint": "POST /xoplatform/logger/api/logger"
+ },
+ {
+ "sequence": 10,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification",
+ "timestamp": "2026-01-20T10:15:33.961Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification"
+ },
+ {
+ "sequence": 11,
+ "method": "POST",
+ "url": "https://www.paypal.com/xoplatform/logger/api/logger",
+ "pathname": "/xoplatform/logger/api/logger",
+ "timestamp": "2026-01-20T10:15:34.127Z",
+ "endpoint": "POST /xoplatform/logger/api/logger"
+ }
+]
\ No newline at end of file
diff --git a/jam-ui/test/fixtures/legacy-sequences/navigate-to-session-simplified.json b/jam-ui/test/fixtures/legacy-sequences/navigate-to-session-simplified.json
new file mode 100644
index 000000000..507979349
--- /dev/null
+++ b/jam-ui/test/fixtures/legacy-sequences/navigate-to-session-simplified.json
@@ -0,0 +1,26 @@
+[
+ {
+ "sequence": 0,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/sessions/scheduled?",
+ "pathname": "/api/sessions/scheduled",
+ "timestamp": "2026-01-20T10:15:50.945Z",
+ "endpoint": "GET /api/sessions/scheduled"
+ },
+ {
+ "sequence": 1,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381?",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "timestamp": "2026-01-20T10:15:50.946Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381"
+ },
+ {
+ "sequence": 2,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "pathname": "/api/jamtracks/purchased",
+ "timestamp": "2026-01-20T10:15:51.197Z",
+ "endpoint": "GET /api/jamtracks/purchased"
+ }
+]
\ No newline at end of file
diff --git a/jam-ui/test/fixtures/legacy-sequences/session-creation-simplified.json b/jam-ui/test/fixtures/legacy-sequences/session-creation-simplified.json
new file mode 100644
index 000000000..c37d811e4
--- /dev/null
+++ b/jam-ui/test/fixtures/legacy-sequences/session-creation-simplified.json
@@ -0,0 +1,306 @@
+[
+ {
+ "sequence": 0,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381?",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "timestamp": "2026-01-20T10:15:55.382Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381"
+ },
+ {
+ "sequence": 1,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/countries",
+ "pathname": "/api/countries",
+ "timestamp": "2026-01-20T10:15:55.437Z",
+ "endpoint": "GET /api/countries"
+ },
+ {
+ "sequence": 2,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/shopping_carts?time=1768904155592",
+ "pathname": "/api/shopping_carts",
+ "timestamp": "2026-01-20T10:15:55.594Z",
+ "endpoint": "GET /api/shopping_carts"
+ },
+ {
+ "sequence": 3,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "pathname": "/api/genres",
+ "timestamp": "2026-01-20T10:15:55.655Z",
+ "endpoint": "GET /api/genres"
+ },
+ {
+ "sequence": 4,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "pathname": "/api/genres",
+ "timestamp": "2026-01-20T10:15:55.655Z",
+ "endpoint": "GET /api/genres"
+ },
+ {
+ "sequence": 5,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "pathname": "/api/instruments",
+ "timestamp": "2026-01-20T10:15:55.664Z",
+ "endpoint": "GET /api/instruments"
+ },
+ {
+ "sequence": 6,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "pathname": "/api/instruments",
+ "timestamp": "2026-01-20T10:15:55.734Z",
+ "endpoint": "GET /api/instruments"
+ },
+ {
+ "sequence": 7,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "timestamp": "2026-01-20T10:15:55.734Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends"
+ },
+ {
+ "sequence": 8,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "pathname": "/api/jamtracks/purchased",
+ "timestamp": "2026-01-20T10:15:55.734Z",
+ "endpoint": "GET /api/jamtracks/purchased"
+ },
+ {
+ "sequence": 9,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "pathname": "/api/instruments",
+ "timestamp": "2026-01-20T10:15:55.739Z",
+ "endpoint": "GET /api/instruments"
+ },
+ {
+ "sequence": 10,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/languages",
+ "pathname": "/api/languages",
+ "timestamp": "2026-01-20T10:15:55.739Z",
+ "endpoint": "GET /api/languages"
+ },
+ {
+ "sequence": 11,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "pathname": "/api/genres",
+ "timestamp": "2026-01-20T10:15:55.740Z",
+ "endpoint": "GET /api/genres"
+ },
+ {
+ "sequence": 12,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/subjects",
+ "pathname": "/api/subjects",
+ "timestamp": "2026-01-20T10:15:55.740Z",
+ "endpoint": "GET /api/subjects"
+ },
+ {
+ "sequence": 13,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/chat?type=CHAT_MESSAGE&limit=20&page=0&channel=global",
+ "pathname": "/api/chat",
+ "timestamp": "2026-01-20T10:15:55.740Z",
+ "endpoint": "GET /api/chat"
+ },
+ {
+ "sequence": 14,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/sessions/scheduled?",
+ "pathname": "/api/sessions/scheduled",
+ "timestamp": "2026-01-20T10:15:55.987Z",
+ "endpoint": "GET /api/sessions/scheduled"
+ },
+ {
+ "sequence": 15,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381?",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "timestamp": "2026-01-20T10:15:55.987Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381"
+ },
+ {
+ "sequence": 16,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "timestamp": "2026-01-20T10:15:56.005Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends"
+ },
+ {
+ "sequence": 17,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications?offset=0&limit=20",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications",
+ "timestamp": "2026-01-20T10:15:56.006Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications"
+ },
+ {
+ "sequence": 18,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/regions?country=US",
+ "pathname": "/api/regions",
+ "timestamp": "2026-01-20T10:15:56.009Z",
+ "endpoint": "GET /api/regions"
+ },
+ {
+ "sequence": 19,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "pathname": "/api/jamtracks/purchased",
+ "timestamp": "2026-01-20T10:15:56.247Z",
+ "endpoint": "GET /api/jamtracks/purchased"
+ },
+ {
+ "sequence": 20,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/teacher_distributions?per_page=20&page=1",
+ "pathname": "/api/teacher_distributions",
+ "timestamp": "2026-01-20T10:15:56.247Z",
+ "endpoint": "GET /api/teacher_distributions"
+ },
+ {
+ "sequence": 21,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "pathname": "/api/versioncheck",
+ "timestamp": "2026-01-20T10:15:56.251Z",
+ "endpoint": "GET /api/versioncheck"
+ },
+ {
+ "sequence": 22,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "pathname": "/api/versioncheck",
+ "timestamp": "2026-01-20T10:15:56.254Z",
+ "endpoint": "GET /api/versioncheck"
+ },
+ {
+ "sequence": 23,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "pathname": "/api/versioncheck",
+ "timestamp": "2026-01-20T10:15:56.305Z",
+ "endpoint": "GET /api/versioncheck"
+ },
+ {
+ "sequence": 24,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "pathname": "/api/jamtracks/purchased",
+ "timestamp": "2026-01-20T10:15:57.016Z",
+ "endpoint": "GET /api/jamtracks/purchased"
+ },
+ {
+ "sequence": 25,
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3100/api/sessions",
+ "pathname": "/api/sessions",
+ "timestamp": "2026-01-20T10:15:57.295Z",
+ "endpoint": "POST /api/sessions"
+ },
+ {
+ "sequence": 26,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/history?includePending=false",
+ "pathname": "/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/history",
+ "timestamp": "2026-01-20T10:15:57.677Z",
+ "endpoint": "GET /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/history"
+ },
+ {
+ "sequence": 27,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/config/client?",
+ "pathname": "/api/config/client",
+ "timestamp": "2026-01-20T10:15:57.748Z",
+ "endpoint": "GET /api/config/client"
+ },
+ {
+ "sequence": 28,
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/participants",
+ "pathname": "/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/participants",
+ "timestamp": "2026-01-20T10:15:57.929Z",
+ "endpoint": "POST /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/participants"
+ },
+ {
+ "sequence": 29,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification",
+ "timestamp": "2026-01-20T10:15:58.794Z",
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification"
+ },
+ {
+ "sequence": 30,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/chat?type=CHAT_MESSAGE&limit=20&page=0&channel=session&music_session=02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "pathname": "/api/chat",
+ "timestamp": "2026-01-20T10:15:58.809Z",
+ "endpoint": "GET /api/chat"
+ },
+ {
+ "sequence": 31,
+ "method": "PUT",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "pathname": "/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "timestamp": "2026-01-20T10:15:58.859Z",
+ "endpoint": "PUT /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks"
+ },
+ {
+ "sequence": 32,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "pathname": "/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "timestamp": "2026-01-20T10:15:58.964Z",
+ "endpoint": "GET /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23"
+ },
+ {
+ "sequence": 33,
+ "method": "PUT",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "pathname": "/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "timestamp": "2026-01-20T10:15:59.264Z",
+ "endpoint": "PUT /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks"
+ },
+ {
+ "sequence": 34,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "pathname": "/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "timestamp": "2026-01-20T10:15:59.317Z",
+ "endpoint": "GET /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23"
+ },
+ {
+ "sequence": 35,
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/udp_reachable",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/udp_reachable",
+ "timestamp": "2026-01-20T10:15:59.547Z",
+ "endpoint": "POST /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/udp_reachable"
+ },
+ {
+ "sequence": 36,
+ "method": "PUT",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "pathname": "/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "timestamp": "2026-01-20T10:16:05.013Z",
+ "endpoint": "PUT /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks"
+ },
+ {
+ "sequence": 37,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "pathname": "/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "timestamp": "2026-01-20T10:16:05.049Z",
+ "endpoint": "GET /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23"
+ }
+]
\ No newline at end of file
diff --git a/jam-ui/test/fixtures/legacy-sequences/skip-modal-simplified.json b/jam-ui/test/fixtures/legacy-sequences/skip-modal-simplified.json
new file mode 100644
index 000000000..bf24530a3
--- /dev/null
+++ b/jam-ui/test/fixtures/legacy-sequences/skip-modal-simplified.json
@@ -0,0 +1,10 @@
+[
+ {
+ "sequence": 0,
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "pathname": "/api/versioncheck",
+ "timestamp": "2026-01-20T10:15:45.349Z",
+ "endpoint": "GET /api/versioncheck"
+ }
+]
\ No newline at end of file
diff --git a/jam-ui/test/fixtures/legacy-sequences/step-1-login-sequence.json b/jam-ui/test/fixtures/legacy-sequences/step-1-login-sequence.json
new file mode 100644
index 000000000..646c4f496
--- /dev/null
+++ b/jam-ui/test/fixtures/legacy-sequences/step-1-login-sequence.json
@@ -0,0 +1,2029 @@
+[
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "timestamp": "2026-01-20T10:15:25.212Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "body": [
+ {
+ "id": "acapella",
+ "description": "A Cappella"
+ },
+ {
+ "id": "african",
+ "description": "African"
+ },
+ {
+ "id": "alternative rock",
+ "description": "Alternative Rock"
+ },
+ {
+ "id": "ambient",
+ "description": "Ambient"
+ },
+ {
+ "id": "americana",
+ "description": "Americana"
+ },
+ {
+ "id": "asian",
+ "description": "Asian"
+ },
+ {
+ "id": "avante-garde",
+ "description": "Avante-Garde"
+ },
+ {
+ "id": "bluegrass",
+ "description": "Bluegrass"
+ },
+ {
+ "id": "blues",
+ "description": "Blues"
+ },
+ {
+ "id": "breakbeat",
+ "description": "Breakbeat"
+ },
+ {
+ "id": "celtic",
+ "description": "Celtic"
+ },
+ {
+ "id": "classical",
+ "description": "Classical"
+ },
+ {
+ "id": "country",
+ "description": "Country"
+ },
+ {
+ "id": "creole",
+ "description": "Creole"
+ },
+ {
+ "id": "dance",
+ "description": "Dance"
+ },
+ {
+ "id": "disco",
+ "description": "Disco"
+ },
+ {
+ "id": "downtempo",
+ "description": "Downtempo"
+ },
+ {
+ "id": "drum & bass",
+ "description": "Drum & Bass"
+ },
+ {
+ "id": "electronic",
+ "description": "Electronic"
+ },
+ {
+ "id": "folk",
+ "description": "Folk"
+ },
+ {
+ "id": "funk",
+ "description": "Funk"
+ },
+ {
+ "id": "hard rock",
+ "description": "Hard Rock"
+ },
+ {
+ "id": "hip hop",
+ "description": "Hip Hop"
+ },
+ {
+ "id": "holiday",
+ "description": "Holiday"
+ },
+ {
+ "id": "house",
+ "description": "House"
+ },
+ {
+ "id": "industrial",
+ "description": "Industrial"
+ },
+ {
+ "id": "jazz",
+ "description": "Jazz"
+ },
+ {
+ "id": "kids",
+ "description": "Kids"
+ },
+ {
+ "id": "latin",
+ "description": "Latin"
+ },
+ {
+ "id": "metal",
+ "description": "Metal"
+ },
+ {
+ "id": "musical",
+ "description": "Musical"
+ },
+ {
+ "id": "oldies",
+ "description": "Oldies"
+ },
+ {
+ "id": "other",
+ "description": "Other"
+ },
+ {
+ "id": "pop",
+ "description": "Pop"
+ },
+ {
+ "id": "psychedelic",
+ "description": "Psychedelic"
+ },
+ {
+ "id": "punk",
+ "description": "Punk"
+ },
+ {
+ "id": "r&b",
+ "description": "R&B"
+ },
+ {
+ "id": "rap",
+ "description": "Rap"
+ },
+ {
+ "id": "reggae",
+ "description": "Reggae"
+ },
+ {
+ "id": "religious",
+ "description": "Religious"
+ },
+ {
+ "id": "rock",
+ "description": "Rock"
+ },
+ {
+ "id": "ska",
+ "description": "Ska"
+ },
+ {
+ "id": "soft rock",
+ "description": "Soft Rock"
+ },
+ {
+ "id": "soul",
+ "description": "Soul"
+ },
+ {
+ "id": "tv & movie soundtrack",
+ "description": "TV & Movie Soundtrack"
+ },
+ {
+ "id": "techno",
+ "description": "Techno"
+ },
+ {
+ "id": "traditional",
+ "description": "Traditional"
+ },
+ {
+ "id": "trance",
+ "description": "Trance"
+ },
+ {
+ "id": "world",
+ "description": "World"
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:25.323Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381?",
+ "timestamp": "2026-01-20T10:15:31.522Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/countries",
+ "timestamp": "2026-01-20T10:15:31.618Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/shopping_carts?time=1768904131749",
+ "timestamp": "2026-01-20T10:15:31.756Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "timestamp": "2026-01-20T10:15:31.921Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/teacher_distributions?per_page=20&page=1",
+ "timestamp": "2026-01-20T10:15:31.923Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381?",
+ "body": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "city": "Dallas",
+ "state": "TX",
+ "country": "US",
+ "location": "Dallas, TX",
+ "online": true,
+ "photo_url": null,
+ "musician": true,
+ "gender": "M",
+ "birth_date": null,
+ "friend_count": 1,
+ "liker_count": 0,
+ "follower_count": 77,
+ "following_count": 130,
+ "admin": true,
+ "recording_count": 0,
+ "session_count": 0,
+ "biography": "This is description with special charact xxxxxxaaaasasasas",
+ "favorite_count": 0,
+ "audio_latency": null,
+ "upcoming_session_count": 0,
+ "age": null,
+ "website": "www.nuwanchaturanga.me",
+ "skill_level": 2,
+ "reuse_card": true,
+ "email_needs_verification": false,
+ "is_a_teacher": true,
+ "is_a_student": false,
+ "is_onboarder": false,
+ "timezone": null,
+ "use_video_conferencing_server": true,
+ "email": "nuwan@jamkazam.com",
+ "original_fpfile": null,
+ "cropped_fpfile": null,
+ "crop_selection": null,
+ "session_settings": "{:band_id=>nil, :musician_access=>false, :approval_required=>false, :fan_chat=>false, :fan_access=>false, :description=>\"Private session set up just to test things out in the session interface by myself.\", :genres=>[{:id=>\"pop\", :description=>\"Pop\"}], :invitees=>[]}",
+ "show_whats_next": true,
+ "show_whats_next_count": 0,
+ "subscribe_email": false,
+ "auth_twitter": false,
+ "new_notifications": 14,
+ "sales_count": 7,
+ "purchased_jamtracks_count": 1,
+ "first_downloaded_client_at": null,
+ "created_at": "2021-05-21T18:15:28.425Z",
+ "first_opened_jamtrack_web_player": "2024-12-03T13:55:01.788Z",
+ "gifted_jamtracks": 0,
+ "has_redeemable_jamtrack": false,
+ "has_stored_credit_card?": true,
+ "remaining_test_drives": 0,
+ "jamclass_credits": 0,
+ "can_buy_test_drive?": true,
+ "lesson_package_type_id": null,
+ "school_id": null,
+ "is_guitar_center_student?": false,
+ "purchase_required": null,
+ "lesson_package_needs_purchase_id": null,
+ "user_authorizations": [
+ {
+ "uid": "RQB3YMV6KABBL",
+ "provider": "paypal",
+ "token_expiration": "2025-07-14T14:47:06.651Z"
+ }
+ ],
+ "test_drive_package_choices": [],
+ "friends": [
+ {
+ "id": "a09f9a7e-afb7-489d-870d-e13a336e0b97",
+ "first_name": "Seth",
+ "last_name": "Call",
+ "name": "Seth Call",
+ "online": false,
+ "photo_url": "https://s3.amazonaws.com/jamkazam-dev-public/avatars/a09f9a7e-afb7-489d-870d-e13a336e0b97/8EfyNy2cQPaxEsypRviW_IMG_20231224_133203_HDR.jpg"
+ }
+ ],
+ "followings": [
+ {
+ "type": "user",
+ "id": "963d5268-66b6-463a-a3ee-c97f274fc23f",
+ "name": "Peter Walker",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "cc0b060c-9891-4e91-9fe3-4268893a2fd0",
+ "name": "Oswald Becca",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "29becbf4-8be5-4078-9405-0edadc9fa42d",
+ "name": "Peter 1 Walker",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "3dfca858-0e7c-4ad4-993a-c39421d93853",
+ "name": "Peter Walker",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "fd467978-da75-421f-8e97-6406a784e87e",
+ "name": "Indrashapa Liyanage",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "a09f9a7e-afb7-489d-870d-e13a336e0b97",
+ "name": "Seth Call",
+ "location": "Boston, MA",
+ "photo_url": "https://s3.amazonaws.com/jamkazam-dev-public/avatars/a09f9a7e-afb7-489d-870d-e13a336e0b97/8EfyNy2cQPaxEsypRviW_IMG_20231224_133203_HDR.jpg"
+ },
+ {
+ "type": "user",
+ "id": "2e75f1dc-af6b-4444-a9e2-5f32db07abc1",
+ "name": "David Wilson 1",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f8f32710-3194-4666-b618-eceb21d6e3de",
+ "name": "Peter Walker",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "feb671a3-1821-48f0-bc14-aa26cf98bb25",
+ "name": "David Wilson",
+ "location": "Miami, FL",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "c2ede005-3b3a-4227-b6fc-f7e8b946b556",
+ "name": "Test 2 User",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "bcf99b5c-8fee-47ce-bf51-b3c7b821d023",
+ "name": "David Miller",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1f9debf3-58d7-46c0-896c-859b6ae8be37",
+ "name": "David Miller",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "876d1604-d309-429a-8046-e034ce1bcea4",
+ "name": "David Miller",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "name": "Nuwan Chaturanga",
+ "location": "Dallas, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "062168d9-3e7e-41ee-b8e8-9f496b8cb97a",
+ "name": "James Bond",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "5c2b1a45-5212-4a73-b5ce-007c345d97b7",
+ "name": "Makenna Gutmann Celestino Hand",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "e2eca6b2-56d9-450a-8ac4-7d107a488887",
+ "name": "Grace Roob Cynthia Cronin",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b1ddadd0-0263-47c4-bf91-e7767f386970",
+ "name": "Oswald Becca",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "0671faf1-7e39-45e3-ba9b-a3e27982e88f",
+ "name": "Carey Carroll Yolanda Ankunding",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1e94859c-b192-4bc8-9d8e-6a3ef5ec1380",
+ "name": "Filiberto Hills IV Anya Keebler MD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "749d3a9f-11fc-4593-827c-b47d0da1322e",
+ "name": "RashawnMante ThurmanFadel",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "6ceb102f-2f99-46dd-8baa-d1b1c357118f",
+ "name": "ObieJenkins EddNienow",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "042ef11a-f2ad-4e80-85d8-cf94a502e298",
+ "name": "TobinFisher MatildaKiehn",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f0ca8d87-dd9e-4d9f-afc1-ff543f29d371",
+ "name": "MrsOrionSchoen CurtisChristiansenV",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "fc3496a2-9f73-47ed-a755-02011afddded",
+ "name": "TristonRunolfsson DrJoyHoppe",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "16a32d1e-901e-460a-bd9a-d400b91ec5d5",
+ "name": "DrPatrickDuBuque JeanneVeum",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "7e43ae3e-47b2-4510-a688-91c209e5d271",
+ "name": "MrsEverardoWillms JadonGreenholt",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b39034cf-0f02-44a3-ac46-1e79f561e22f",
+ "name": "AmberOConner NoelMedhurst",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "9f7e3f8e-9ea1-41a5-a589-60ff27b40e74",
+ "name": "ErnestinaGrady CarlieLubowitz",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "5501a1a7-670d-45b9-bf2f-e644c3d8ae65",
+ "name": "MaryamAltenwerth MoseDavisDDS",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "5473d024-0dd2-434b-bea2-ed1b959f6eb8",
+ "name": "TyreeKlocko MarcusCartwright",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "a8e2ceda-51a7-4b67-87bb-5ddab937127d",
+ "name": "DaleNicolas ErnieBalistreriSr",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "819f1fff-4c76-45b8-a97f-e3ae23c44d38",
+ "name": "TerenceRosenbaum BenedictOReillyPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "caaa6dbe-d44f-4283-82b9-31e2feef8552",
+ "name": "RichardSchmeler SteveMante",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b1faa4a9-aa95-46da-98ef-d9a110cf19db",
+ "name": "CharlesChamplinSr SofiaBernierSr",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "aae38d6a-571b-453c-b84d-ac377e7dd518",
+ "name": "MabelCasperPhD TyrelStroman",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "8bac8af0-f348-4d38-9c8b-3864c21819fa",
+ "name": "DoyleParisian VelmaMarquardt",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "bae12f4f-b8a6-4cfb-8cfb-3a97293011fb",
+ "name": "FriedrichMaggioSr IvyBergePhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "492b11ae-46d3-4e77-8a0a-8550cf924fcc",
+ "name": "PierreJaskolski MrCurtTremblay",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f739a1ab-25e7-4713-9914-8c3993b34ac2",
+ "name": "FreedaConnelly ZoraRyanIV",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "da55a63e-822c-4b00-a1ff-43d1c77dd9da",
+ "name": "MrDarrelHilpert AliaLemke",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "9b3fccc7-3341-497e-943b-4223470c4d2e",
+ "name": "JudahMurphy MsRandallWalsh",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "e0ff0bfb-f7f7-4a59-8fe9-b3271a436bff",
+ "name": "MorganRempel DestineyTrompDDS",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "e6659aab-3b85-4fcf-b238-9784e8fa0c87",
+ "name": "JettBartell RayHuels",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "fa8520ee-dbbc-4c82-8a3a-3eb7a2e670b9",
+ "name": "DorthyRitchie EthelynConroy",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "c99366a3-1ca5-4be0-b241-d5ab251e2128",
+ "name": "MrsJerrodWill MissHassanMcDermott",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "5545474c-72ae-439e-b15e-ea01d8024e9a",
+ "name": "JonatanBaumbach IsadoreMohrDVM",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1de82b84-509f-4b44-8e57-83a4c84ddb65",
+ "name": "MableSporerI KarleeWestPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "c6105907-18f0-4328-8612-4a3712a87589",
+ "name": "TaniaOConnell MorrisJast",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "3befd488-1e79-4a0f-9195-55627345a896",
+ "name": "MissTremayneVonRueden MargarettQuigley",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ba54b319-f774-4df1-9998-079518bafb71",
+ "name": "AllyConn MissKimberlyHoppe",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "58d673f1-d8a0-4afa-9a88-39b890d1d97f",
+ "name": "AlvaHettinger AngelitaLeffler",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "bb141f5b-3871-45a8-9aec-c0e7caea97be",
+ "name": "JasperHodkiewicz PaytonBartonPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b8e10ae9-8d1b-4046-94c2-85d836c11819",
+ "name": "FreddyGrahamII ImeldaTrantow",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "db342b5a-a353-44cf-afa1-01106adfd4e2",
+ "name": "GavinBednar JosianeWelch",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "677457e3-fd7f-408e-939d-d3315037f00d",
+ "name": "DarrionMosciski NicoletteAufderhar",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b01bb2c0-a584-49fe-ab49-818a7fd693a5",
+ "name": "AbigaleOHara BernhardZiemann",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "af974075-2c2a-43ac-927b-2e3213b7fd56",
+ "name": "MissBreanneKunde JuliaLeannon",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "97d4fba3-fab5-4153-bf05-7466624ea6bd",
+ "name": "ImeldaFranecki LeolaWisozk",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "8680fef5-5731-4b7c-9baf-e984bdef572e",
+ "name": "VernerWunsch SallyHeathcote",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "0afab59f-2ac2-4187-8b9e-51a008c37f82",
+ "name": "TadDicki HeatherKertzmann",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "dc4ebae1-99e1-44fc-a8d8-6f45c90250d9",
+ "name": "DrKennithMetz BobbyWilderman",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "7aaa8b68-c6d9-4085-87d0-177e4252a09f",
+ "name": "BradenMosciskiII SterlingWilkinson",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "c51736bd-1110-43ba-a47a-72e90d12c7d1",
+ "name": "JakobKub MsDaneGulgowski",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "8d18316e-79e1-4a6e-889c-8151de8ac20f",
+ "name": "KyleeStamm AutumnBruenPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "18138725-f91c-4a12-a04d-43d73951559a",
+ "name": "NatHowell AbigaleAbshireSr",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "06803beb-8218-41db-ba3b-87ffabcfe59f",
+ "name": "BoydRosenbaum MrIsabellMedhurst",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "24c88514-5966-4977-b6a5-d14d71ed51a7",
+ "name": "DashawnSpencer EstellMcDermottMD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "3a0fe418-0d87-422b-b9d7-62350e4d6e06",
+ "name": "JaunitaHerzog WestleyKovacek",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "59b19985-f2ac-4a39-94a2-7a1b7d4a1589",
+ "name": "OrlandWehner WayneAufderhar",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "60a55a0f-33cf-49e3-8acb-d055f0d57b8d",
+ "name": "AntoniaDach MissArvelCrooks",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ccba202e-90d4-4204-a590-d0b385fff0b2",
+ "name": "MissEnricoSatterfield FredFeeney",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ffd059fc-86ca-4e5b-ae68-428fc9a7c151",
+ "name": "MrsLexusMayer ArianeSchroeder",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "846b2313-cf96-47a1-b747-28529f713f57",
+ "name": "MrAshleyGreen DedrickTurner",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "893a2561-be87-4bbe-b0a4-e3ebfdf66bce",
+ "name": "GillianTowne VicentaRobelDDS",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "d28c8e9f-958b-4d7d-bd27-bcbf7e40276c",
+ "name": "AnselCorkery WellingtonBalistreri",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1d6ebd32-5263-4d4c-b1cb-ece2c52d4639",
+ "name": "DrAshtynSchowalter RosaleeHuelPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "13782f1a-d49c-4e51-bffb-03c2ab5466b9",
+ "name": "DedrickCronin MaximusJones",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1847fa77-3c6c-45e6-a2fd-713c97b13bc8",
+ "name": "BillKoepp CristinaWisoky",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "127d364c-b608-452d-b9d2-870374669ac4",
+ "name": "JanieMarvin AbbieCollins",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "a94e2132-b59c-421f-8956-8da3da67edc3",
+ "name": "TrevorBogan MsJoanieHaag",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "996ca813-6994-4f08-ab55-a086d688f5a8",
+ "name": "AlainaDooleySr KianKulas",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f49925f2-3934-4bc2-9dbe-61ab3d2d0d2a",
+ "name": "BrennanKautzer BurdetteDonnelly",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "813e7f84-8c69-4a5b-97e4-7f3278d589b6",
+ "name": "BennieConn CelestinoHamill",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "9eeec010-029b-4cac-b4ea-a3ac6256bada",
+ "name": "ElsaRempel BurniceLabadie",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1b35f8f4-1c9c-4e72-bd54-052ab3b33745",
+ "name": "JoannieGlover ClarabelleLubowitz",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "6f732065-9e64-487c-88e3-713c49db7dd1",
+ "name": "LuciousMuller MiaPurdy",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "25c21fbf-ddcc-4224-86c6-8f8b3db64406",
+ "name": "KiarraVolkman DelphiaOReillyJr",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "60f9a9c1-2e1f-41e1-a55a-0ce0a3ccafff",
+ "name": "JordynOHara YasminDare",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "524299c3-ffec-473a-8b8a-5352f9bb1498",
+ "name": "ArmandMayerII RomaineOHara",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "91a0d1eb-b9ce-453f-ae01-04ab932b1d88",
+ "name": "PhoebeMertz ErichHand",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "d3db5d12-51fd-4267-9972-32d0e08ba5a0",
+ "name": "MrEdwardRyan MarieReynolds",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "0caf1682-79de-4e99-977b-6327defb04ae",
+ "name": "LilianaGibson JillianWintheiser",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "8d9319be-9435-476e-a7ee-26a3b4adb519",
+ "name": "DonnellJacobs MrEttieLakin",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "740e9322-d303-4d7a-b018-5a7ce6f228cf",
+ "name": "MrTrevorBauch MsTadMante",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ad014131-4ca9-4738-ab04-0abb21988925",
+ "name": "GoldaLeannon KevinBogisich",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b88a29c3-7d53-40db-a4cd-c74cfa383535",
+ "name": "MissPrincessStokes EstaHarris",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1047c75a-07f7-464f-9d68-abbe928721d8",
+ "name": "MissValeriePagac UniqueLowe",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "912d8c9c-ebc4-4c90-939d-a0022fac592f",
+ "name": "CarolyneYost KhalidHagenes",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "71df5db0-1b97-451e-8d4b-158780ce89b5",
+ "name": "TraceLarson PercyRempel",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "070fe31e-b2b9-4c40-ba0f-47bd2dea8bed",
+ "name": "DomenicaHeller MaryHamill",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1c6a4318-74dc-4978-9a6a-cf5218158d09",
+ "name": "LauraSchumm DomenicWindler",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1e10de58-6426-48c9-b32a-4068181cc902",
+ "name": "CristalFahey DrTheodoraAuer",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "fca4da6e-6307-4239-8369-4c823da291ea",
+ "name": "ElizaSatterfield JeramyThiel",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "c2007c10-50e2-45b2-b0ec-94d78fca7464",
+ "name": "DevenCruickshankDVM KoreyCollierSr",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "fb63837c-1621-4d5c-ae94-5dd4e966850a",
+ "name": "AmiyaFadel MonicaHyattPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "16031f9b-929a-4b2e-8dca-32ba9d011871",
+ "name": "RicoSchmeler YasmineBernier",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b07623eb-9064-4bab-b3ac-7f9ed56e70c3",
+ "name": "MittieHirthe DaneRutherford",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "0f4074d2-3f60-4afa-b67e-9aeb606fcf12",
+ "name": "DominiquePurdy TianaSchaefer",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "751d5835-a58c-4b86-a097-03e764d05e53",
+ "name": "GenevieveLegros ColleenCorwin",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "de428405-5be2-419f-b488-ad9f4c56fed5",
+ "name": "MallieWeimann MargaretteCarroll",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "0e3574ff-e190-4cc5-8424-d68a32f7814f",
+ "name": "RobertaKunde LillaKing",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "06d057b1-b13a-4f51-b2dd-02a3a688b414",
+ "name": "ValentinKoeppSr OlgaCronaPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f1afae38-4740-433c-b2e6-dcd415741052",
+ "name": "AnyaMorar DrMckenzieVeum",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "079c9ca0-74d3-4a95-9fef-e9e17a123873",
+ "name": "JasonRempel MrBlancaParisian",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "53c5a997-4dda-423f-a56e-b576b8c5fdb3",
+ "name": "MsLaverneShanahan GlenHeller",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "faa11323-ee4d-42d0-9400-955723e83d89",
+ "name": "MissVincenzoGreenholt TheodoraRath",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "94a1c9a4-a44d-4e52-badc-051c4084c193",
+ "name": "RyleySchusterII MarcelinaHillsI",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ebfcbb8f-5d10-42b8-9260-8a0e5eee8f29",
+ "name": "MarcelleMaggio MayeParker",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "a0c04c7d-1027-43f7-872b-f6150fb1970d",
+ "name": "TatumVandervort EarleneJohnson",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "e3fbc347-f15c-4bc5-9eb0-c10bf26da2dc",
+ "name": "MissCitlalliHamill NatalieKundeIV",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "241daa8a-3b79-4213-a17c-f3635e100401",
+ "name": "EverettSwift AyanaStroman",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ad2c50a9-0f56-403d-9df0-0edcece0c701",
+ "name": "RaoulCremin ReannaConsidine",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "187e18f6-32c8-437f-8292-fdbe09427d2b",
+ "name": "ClarabelleBeer JackieShields",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "e29044fe-45b3-41ae-ab00-eb9913e5daa6",
+ "name": "BrigitteRenner WillardLabadie",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "bccdc05a-c4d6-4b95-acc6-19f1a6c4abbd",
+ "name": "DavionJast ChanellePagac",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "67a02f30-f193-4490-9aec-ebf7c6619141",
+ "name": "FavianMarks EdaKirlin",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "672fc730-8e84-4e9e-97f5-c5dcd93557ba",
+ "name": "MaximusBatz RyleeMetzDDS",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f1317729-a366-4c19-9765-9f5b1d156f94",
+ "name": "ChadrickBergnaum RogersBerge",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "8ac936dc-3185-47ab-92ad-5b04e470da9f",
+ "name": "Mateo Antony",
+ "location": "Austin, TX",
+ "photo_url": null
+ }
+ ],
+ "bands": [
+ {
+ "id": "32df51d1-e323-4f02-80ba-63229b4861ed",
+ "name": "Martine Johnston",
+ "admin": false,
+ "photo_url": null,
+ "logo_url": null,
+ "genres": [
+ {
+ "id": "country",
+ "description": "Country"
+ },
+ {
+ "id": "hip hop",
+ "description": "Hip Hop"
+ },
+ {
+ "id": "techno",
+ "description": "Techno"
+ }
+ ]
+ },
+ {
+ "id": "74f50a3d-df82-47f5-8053-0281bc27403f",
+ "name": "JMam",
+ "admin": false,
+ "photo_url": null,
+ "logo_url": null,
+ "genres": [
+ {
+ "id": "blues",
+ "description": "Blues"
+ }
+ ]
+ },
+ {
+ "id": "fc24a1e0-f212-4418-98d9-f0514e0cc699",
+ "name": "Uturn",
+ "admin": false,
+ "photo_url": null,
+ "logo_url": null,
+ "genres": [
+ {
+ "id": "reggae",
+ "description": "Reggae"
+ }
+ ]
+ }
+ ],
+ "instruments": [],
+ "genres": [
+ {
+ "description": "A Cappella",
+ "id": "acapella"
+ },
+ {
+ "description": "African",
+ "id": "african"
+ },
+ {
+ "description": "Alternative Rock",
+ "id": "alternative rock"
+ },
+ {
+ "description": "Ambient",
+ "id": "ambient"
+ },
+ {
+ "description": "Drum & Bass",
+ "id": "drum & bass"
+ },
+ {
+ "description": "Electronic",
+ "id": "electronic"
+ },
+ {
+ "description": "Folk",
+ "id": "folk"
+ },
+ {
+ "description": "Funk",
+ "id": "funk"
+ },
+ {
+ "description": "Psychedelic",
+ "id": "psychedelic"
+ },
+ {
+ "description": "Punk",
+ "id": "punk"
+ },
+ {
+ "description": "R&B",
+ "id": "r&b"
+ },
+ {
+ "description": "Rap",
+ "id": "rap"
+ }
+ ],
+ "sessions": [
+ {
+ "id": "91de1362-bd56-44b2-a39b-8d7fb4d38fa5",
+ "description": "Private session set up just to test things out in the session interface by myself.",
+ "musician_access": false,
+ "approval_required": false,
+ "fan_access": false
+ }
+ ],
+ "teacher": {
+ "id": "5fd55476-320d-4532-8ad8-79f9a7d88e20",
+ "biography": "A teacher experienced teaching music for students from kindergarten to high school. ",
+ "created_at": "2022-10-20T13:35:33.210Z",
+ "introductory_video": null,
+ "lesson_duration_120": false,
+ "lesson_duration_30": false,
+ "lesson_duration_45": false,
+ "lesson_duration_60": true,
+ "lesson_duration_90": false,
+ "price_per_lesson_120_cents": null,
+ "price_per_lesson_30_cents": null,
+ "price_per_lesson_45_cents": null,
+ "price_per_lesson_60_cents": 10000,
+ "price_per_lesson_90_cents": null,
+ "price_per_month_120_cents": null,
+ "price_per_month_30_cents": null,
+ "price_per_month_45_cents": null,
+ "price_per_month_60_cents": null,
+ "price_per_month_90_cents": null,
+ "prices_per_lesson": true,
+ "prices_per_month": false,
+ "teaches_advanced": true,
+ "teaches_age_lower": 3,
+ "teaches_age_upper": 20,
+ "teaches_beginner": true,
+ "teaches_intermediate": true,
+ "updated_at": "2022-10-20T13:41:50.521Z",
+ "website": null,
+ "years_playing": 15,
+ "years_teaching": 10,
+ "teaches_test_drive": true,
+ "test_drives_per_week": 10,
+ "errors": {},
+ "profile_pct": "87.0",
+ "school_id": null,
+ "background_check_at": null,
+ "is_searchable": true,
+ "review_summary": null,
+ "school": null,
+ "recent_reviews": [],
+ "profile_pct_summary": {
+ "name_specified": true,
+ "experiences_teaching": true,
+ "experiences_education": true,
+ "experiences_award": true,
+ "has_stripe_account": null,
+ "has_teacher_bio": true,
+ "intro_video": false,
+ "years_teaching": true,
+ "years_playing": true,
+ "instruments_or_subject": true,
+ "genres": true,
+ "languages": true,
+ "teaches_ages_specified": true,
+ "teaching_level_specified": true,
+ "has_pricing_specified": true,
+ "pct": 87
+ },
+ "instruments": [
+ "acoustic guitar",
+ "drums",
+ "keyboard",
+ "voice",
+ "flute",
+ "piano"
+ ],
+ "subjects": [
+ "music-theory",
+ "composing",
+ "site-reading",
+ "guitar-ring"
+ ],
+ "genres": [
+ "classical",
+ "folk",
+ "jazz"
+ ],
+ "languages": [
+ "EN",
+ "FR"
+ ],
+ "experiences_teaching": [
+ {
+ "name": "Jr. Music Teacher",
+ "experience_type": "teaching",
+ "organization": "St. Peters College",
+ "start_year": 2005,
+ "end_year": 2010
+ }
+ ],
+ "experiences_education": [
+ {
+ "name": "Bacholor in Fine arts ",
+ "experience_type": "education",
+ "organization": "London Fine Arts University",
+ "start_year": 2012,
+ "end_year": 2015
+ }
+ ],
+ "experiences_award": [
+ {
+ "name": "Best Folk Music Singer",
+ "experience_type": "award",
+ "organization": "University of St. Gorge",
+ "start_year": 2020,
+ "end_year": null
+ }
+ ],
+ "has_rated_teacher": false
+ },
+ "owned_school_id": null,
+ "owned_retailer_id": null,
+ "geoiplocation": null,
+ "show_free_jamtrack": false,
+ "show_jamtrack_guide": true,
+ "mods": {},
+ "has_recurly_account": true,
+ "is_affiliate_partner": false,
+ "affiliate_referral_count": null,
+ "affiliate_earnings": null,
+ "last_jam_audio_latency": 5
+ },
+ "timestamp": "2026-01-20T10:15:31.924Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/regions?country=US",
+ "timestamp": "2026-01-20T10:15:31.990Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/countries",
+ "body": {
+ "countriesx": [
+ {
+ "countrycode": "US",
+ "countryname": "United States"
+ }
+ ]
+ },
+ "timestamp": "2026-01-20T10:15:31.994Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/shopping_carts?time=1768904131749",
+ "body": [],
+ "timestamp": "2026-01-20T10:15:32.023Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "body": {
+ "next": null,
+ "jamtracks": [
+ {
+ "id": "1",
+ "name": "Back in Black",
+ "description": "This is a JamTrack audio file for use exclusively with the JamKazam service. This JamTrack is a high quality cover of the AC DC song \"Back in Black\".",
+ "original_artist": "AC DC",
+ "version": "0",
+ "year": null,
+ "duration": 221,
+ "allow_free": true,
+ "genres": [
+ {
+ "id": "pop",
+ "description": "Pop"
+ },
+ {
+ "id": "rock",
+ "description": "Rock"
+ }
+ ],
+ "tracks": [
+ {
+ "id": "103dea4d-f2a3-4414-8efe-d2ca378dda60",
+ "part": "Master Mix",
+ "instrument": {
+ "id": "computer",
+ "description": "Computer",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Master",
+ "position": 1000,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Master%20Mix-44100-preview-e9a5a63f34b4d523ee1842fff31f88ce.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Master%20Mix-44100-preview-25fcba7ace7086e3cb6b97d7e33ba72e.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Master%20Mix-44100-preview-9f0b072ed9f4b546e170fcdfb302137e.mp3"
+ },
+ {
+ "id": "2755cbdd-0476-4f3b-9ba1-e2da561ddb4e",
+ "part": "Lead",
+ "instrument": {
+ "id": "voice",
+ "description": "Voice",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 1,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Vocal%20-%20Lead-44100-preview-d35c328fc3936dad9a79fe102dc72950.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Vocal%20-%20Lead-44100-preview-b97b37651eae352fae3b3060918c7bcb.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Vocal%20-%20Lead-44100-preview-d35c328fc3936dad9a79fe102dc72950.aac"
+ },
+ {
+ "id": "0db7c4e1-5e8d-43fe-bd35-98acd8f68b26",
+ "part": "Drums",
+ "instrument": {
+ "id": "drums",
+ "description": "Drums",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 2,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Drums-44100-preview-03aadceb966caf40b96334bdd00234f6.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Drums-44100-preview-854914e3e0d6fdc5f0794325b0ecaead.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Drums-44100-preview-03aadceb966caf40b96334bdd00234f6.aac"
+ },
+ {
+ "id": "2cc79ab6-dab8-4905-85e6-0df5f8e087f1",
+ "part": "Bass",
+ "instrument": {
+ "id": "bass guitar",
+ "description": "Bass Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 3,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Bass-44100-preview-61c334ac87f811bd010ed3a910764c2e.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Bass-44100-preview-4066dafd7b72e9993b0c0fe1dba2b332.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Bass-44100-preview-61c334ac87f811bd010ed3a910764c2e.aac"
+ },
+ {
+ "id": "ed1d3487-3b32-442f-9c76-8a36fe3bb643",
+ "part": "Solo",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 4,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Solo-44100-preview-e9fe8572a9ac1022762642cbd92b3c34.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Solo-44100-preview-5fb058042254206cfa9fb4dcb0310b2c.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Solo-44100-preview-e9fe8572a9ac1022762642cbd92b3c34.aac"
+ },
+ {
+ "id": "f4ce7c91-7542-4e03-8fc2-68b31683d33e",
+ "part": "Rhythm 1",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 5,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%201-44100-preview-6b498479823d4131a01fa535817d5eab.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%201-44100-preview-f4cbb31dbde3e1a3e6012730a7e0e10f.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%201-44100-preview-6b498479823d4131a01fa535817d5eab.aac"
+ },
+ {
+ "id": "2d96c7ec-59f1-4d56-8a7f-7f4c75a0ccef",
+ "part": "Rhythm 2",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 6,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%202-44100-preview-a626d7c632560f6737e1b6024141289e.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%202-44100-preview-06a0e5af451f001f3465992efcd34ec0.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%202-44100-preview-a626d7c632560f6737e1b6024141289e.aac"
+ },
+ {
+ "id": "fce018ca-c897-4137-aa10-ef56a8e1831f",
+ "part": "Intro Scrapes",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 7,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Intro%20Scrapes-44100-preview-0ddfaa7154e9ba35d05d60477d5dd3e9.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Intro%20Scrapes-44100-preview-f53ce3c5f9dcf81af51560f52635fbb0.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Intro%20Scrapes-44100-preview-0ddfaa7154e9ba35d05d60477d5dd3e9.aac"
+ },
+ {
+ "id": "c9b3e0a8-4db0-4d0f-9769-398a6d56506e",
+ "part": "Main",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 8,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Main-44100-preview-234a224f75a97d7ff8f55442ece6fcde.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Main-44100-preview-828c9691f5435dea1c90182fa2618c9b.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Main-44100-preview-234a224f75a97d7ff8f55442ece6fcde.aac"
+ },
+ {
+ "id": "28c3df07-2a88-45a9-9ae6-3399a5d2eb20",
+ "part": "Sound FX",
+ "instrument": {
+ "id": "computer",
+ "description": "Computer",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 9,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Sound%20Effects-44100-preview-6c859c73036cd55bceb65f19f2d2f2f3.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Sound%20Effects-44100-preview-f840d8df4c7388f776477139025ee712.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Sound%20Effects-44100-preview-6c859c73036cd55bceb65f19f2d2f2f3.aac"
+ }
+ ],
+ "jmep": null,
+ "can_download": true,
+ "jam_track_right_id": 1428,
+ "purchased_at": 1752755050,
+ "last_mixdown_id": null,
+ "last_stem_id": null,
+ "mixdowns": [
+ {
+ "id": "5f24403f-3cfa-44f5-b36e-52b2c3c66af8",
+ "name": "db",
+ "description": null,
+ "jam_track_id": "1",
+ "packages": [
+ {
+ "id": "23b10fa0-195d-4ad5-a5a7-2cba6b8c1451",
+ "jam_track_mixdown_id": "5f24403f-3cfa-44f5-b36e-52b2c3c66af8",
+ "file_type": "mp3",
+ "sample_rate": 48,
+ "encrypt_type": null,
+ "error_count": 0,
+ "error_reason": null,
+ "error_detail": null,
+ "signing_state": "SIGNED",
+ "packaging_steps": 10,
+ "current_packaging_step": 8,
+ "version": "1"
+ }
+ ],
+ "created_at": 1753866891,
+ "settings": {
+ "count-in": false,
+ "tracks": [
+ {
+ "id": "2755cbdd-0476-4f3b-9ba1-e2da561ddb4e",
+ "mute": false
+ },
+ {
+ "id": "0db7c4e1-5e8d-43fe-bd35-98acd8f68b26",
+ "mute": true
+ },
+ {
+ "id": "2cc79ab6-dab8-4905-85e6-0df5f8e087f1",
+ "mute": true
+ },
+ {
+ "id": "ed1d3487-3b32-442f-9c76-8a36fe3bb643",
+ "mute": false
+ },
+ {
+ "id": "f4ce7c91-7542-4e03-8fc2-68b31683d33e",
+ "mute": false
+ },
+ {
+ "id": "2d96c7ec-59f1-4d56-8a7f-7f4c75a0ccef",
+ "mute": false
+ },
+ {
+ "id": "fce018ca-c897-4137-aa10-ef56a8e1831f",
+ "mute": false
+ },
+ {
+ "id": "c9b3e0a8-4db0-4d0f-9769-398a6d56506e",
+ "mute": false
+ },
+ {
+ "id": "28c3df07-2a88-45a9-9ae6-3399a5d2eb20",
+ "mute": false
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "timestamp": "2026-01-20T10:15:32.051Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/teacher_distributions?per_page=20&page=1",
+ "body": {
+ "next": null,
+ "entries": [],
+ "total_entries": 0
+ },
+ "timestamp": "2026-01-20T10:15:32.066Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/regions?country=US",
+ "body": {
+ "regions": [
+ {
+ "region": "TN",
+ "name": null
+ },
+ {
+ "region": "ME",
+ "name": null
+ },
+ {
+ "region": "MA",
+ "name": null
+ },
+ {
+ "region": "TX",
+ "name": null
+ },
+ {
+ "region": "OK",
+ "name": null
+ },
+ {
+ "region": "WA",
+ "name": null
+ },
+ {
+ "region": "CO",
+ "name": null
+ },
+ {
+ "region": "CA",
+ "name": null
+ },
+ {
+ "region": "AR",
+ "name": null
+ },
+ {
+ "region": "FL",
+ "name": null
+ },
+ {
+ "region": "OR",
+ "name": null
+ }
+ ]
+ },
+ "timestamp": "2026-01-20T10:15:32.103Z"
+ },
+ {
+ "type": "request",
+ "method": "POST",
+ "url": "https://www.paypal.com/xoplatform/logger/api/logger",
+ "timestamp": "2026-01-20T10:15:33.727Z"
+ },
+ {
+ "type": "request",
+ "method": "POST",
+ "url": "https://www.paypal.com/xoplatform/logger/api/logger",
+ "timestamp": "2026-01-20T10:15:33.727Z"
+ },
+ {
+ "type": "request",
+ "method": "POST",
+ "url": "https://www.paypal.com/xoplatform/logger/api/logger",
+ "timestamp": "2026-01-20T10:15:33.938Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification",
+ "timestamp": "2026-01-20T10:15:33.961Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification",
+ "body": {},
+ "timestamp": "2026-01-20T10:15:33.982Z"
+ },
+ {
+ "type": "request",
+ "method": "POST",
+ "url": "https://www.paypal.com/xoplatform/logger/api/logger",
+ "timestamp": "2026-01-20T10:15:34.127Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "https://www.paypal.com/xoplatform/logger/api/logger",
+ "body": {
+ "sys": {
+ "links": {
+ "jsBaseUrl": "https://www.paypalobjects.com/js",
+ "cssBaseUrl": "https://www.paypalobjects.com/css",
+ "templateBaseUrl": "https://www.paypalobjects.com/templates",
+ "resourceBaseUrl": "https://www.paypalobjects.com"
+ },
+ "pageInfo": {
+ "date": "Jan 20, 2026 02:15:35 -08:00",
+ "hostName": "rZJvnqaaQhLn/nmWT8cSUm+72VQ7inHLaJWglONBKZidoX3x872XyrblxCswbFTs",
+ "rlogId": "rZJvnqaaQhLn%2FnmWT8cSUmDP%2Bhip7g49eFYVqbGPqtrf2bBDJkc3ApX7eOn4zPgHzVvfQ%2FRZyr2ZbZk1neOgTw_19bdae7115d",
+ "script": "node",
+ "debug": null
+ },
+ "locality": {
+ "timezone": {
+ "determiner": "viaCowPrimary",
+ "value": "Europe/London"
+ },
+ "country": "GB",
+ "locale": "en_GB",
+ "language": "en",
+ "directionality": "ltr"
+ },
+ "tracking": {
+ "fpti": {
+ "name": "pta",
+ "jsURL": "https://www.paypalobjects.com",
+ "serverURL": "https://t.paypal.com/ts",
+ "dataString": "pgrp=loggernodeweb%2F.dust&page=loggernodeweb%2F.dust&pgst=1768904135005&calc=c9c0dcfba5c8d&pgtf=Nodejs&env=live&s=ci&csci=d2f93731b4d847fab93e4bacf98d6b9f&comp=loggernodeweb&tsrce=loggernodeweb&cu=0"
+ }
+ }
+ }
+ },
+ "timestamp": "2026-01-20T10:15:35.374Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "https://www.paypal.com/xoplatform/logger/api/logger",
+ "body": {
+ "sys": {
+ "links": {
+ "jsBaseUrl": "https://www.paypalobjects.com/js",
+ "cssBaseUrl": "https://www.paypalobjects.com/css",
+ "templateBaseUrl": "https://www.paypalobjects.com/templates",
+ "resourceBaseUrl": "https://www.paypalobjects.com"
+ },
+ "pageInfo": {
+ "date": "Jan 20, 2026 02:15:35 -08:00",
+ "hostName": "rZJvnqaaQhLn/nmWT8cSUm+72VQ7inHLaJWglONBKZiuoJ4b1VbpfZeGpB3uzTzS",
+ "rlogId": "rZJvnqaaQhLn%2FnmWT8cSUmDP%2Bhip7g49eFYVqbGPqtrf2bBDJkc3ApX7eOn4zPgH3GBo%2BZql3DSO8ky8l%2Bvlcg_19bdae71183",
+ "script": "node",
+ "debug": null
+ },
+ "locality": {
+ "timezone": {
+ "determiner": "viaCowPrimary",
+ "value": "Europe/London"
+ },
+ "country": "GB",
+ "locale": "en_GB",
+ "language": "en",
+ "directionality": "ltr"
+ },
+ "tracking": {
+ "fpti": {
+ "name": "pta",
+ "jsURL": "https://www.paypalobjects.com",
+ "serverURL": "https://t.paypal.com/ts",
+ "dataString": "pgrp=loggernodeweb%2F.dust&page=loggernodeweb%2F.dust&pgst=1768904135043&calc=c9c0dcfbaad58&pgtf=Nodejs&env=live&s=ci&csci=98d8e5835f5a41788e44f464b679284e&comp=loggernodeweb&tsrce=loggernodeweb&cu=0"
+ }
+ }
+ }
+ },
+ "timestamp": "2026-01-20T10:15:35.486Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "https://www.paypal.com/xoplatform/logger/api/logger",
+ "body": {
+ "sys": {
+ "links": {
+ "jsBaseUrl": "https://www.paypalobjects.com/js",
+ "cssBaseUrl": "https://www.paypalobjects.com/css",
+ "templateBaseUrl": "https://www.paypalobjects.com/templates",
+ "resourceBaseUrl": "https://www.paypalobjects.com"
+ },
+ "pageInfo": {
+ "date": "Jan 20, 2026 02:15:35 -08:00",
+ "hostName": "rZJvnqaaQhLn/nmWT8cSUm+72VQ7inHLStXCyV93GFn36WWOrvaJWXcvkneqZHgn",
+ "rlogId": "rZJvnqaaQhLn%2FnmWT8cSUmDP%2Bhip7g49eFYVqbGPqtoKNLH9qKaECAabVc0H0XTqy7A2sopRrt7bDU04eiP7vw_19bdae71186",
+ "script": "node",
+ "debug": null
+ },
+ "locality": {
+ "timezone": {
+ "determiner": "viaCowPrimary",
+ "value": "Europe/London"
+ },
+ "country": "GB",
+ "locale": "en_GB",
+ "language": "en",
+ "directionality": "ltr"
+ },
+ "tracking": {
+ "fpti": {
+ "name": "pta",
+ "jsURL": "https://www.paypalobjects.com",
+ "serverURL": "https://t.paypal.com/ts",
+ "dataString": "pgrp=loggernodeweb%2F.dust&page=loggernodeweb%2F.dust&pgst=1768904135046&calc=c9c0dcfbaad76&pgtf=Nodejs&env=live&s=ci&csci=195269ac8ab94c9fa71eed4a1fcbb317&comp=loggernodeweb&tsrce=loggernodeweb&cu=0"
+ }
+ }
+ }
+ },
+ "timestamp": "2026-01-20T10:15:35.486Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "https://www.paypal.com/xoplatform/logger/api/logger",
+ "body": {
+ "sys": {
+ "links": {
+ "jsBaseUrl": "https://www.paypalobjects.com/js",
+ "cssBaseUrl": "https://www.paypalobjects.com/css",
+ "templateBaseUrl": "https://www.paypalobjects.com/templates",
+ "resourceBaseUrl": "https://www.paypalobjects.com"
+ },
+ "pageInfo": {
+ "date": "Jan 20, 2026 02:15:35 -08:00",
+ "hostName": "rZJvnqaaQhLn/nmWT8cSUjOx898qoYZ05BM1WeASkiTC1lMNecizbAb3z5P+V0cj",
+ "rlogId": "rZJvnqaaQhLn%2FnmWT8cSUmDP%2Bhip7g49eFYVqbGPqtotnrsc1WDtEja07oBzcISs7A3SS999oZ7PoIASS0ooAA_19bdae711c3",
+ "script": "node",
+ "debug": null
+ },
+ "locality": {
+ "timezone": {
+ "determiner": "viaCowPrimary",
+ "value": "Europe/London"
+ },
+ "country": "GB",
+ "locale": "en_GB",
+ "language": "en",
+ "directionality": "ltr"
+ },
+ "tracking": {
+ "fpti": {
+ "name": "pta",
+ "jsURL": "https://www.paypalobjects.com",
+ "serverURL": "https://t.paypal.com/ts",
+ "dataString": "pgrp=loggernodeweb%2F.dust&page=loggernodeweb%2F.dust&pgst=1768904135107&calc=c9c0dcfbaee21&pgtf=Nodejs&env=live&s=ci&csci=d7590a1b18554dfc81e36d95bfcde895&comp=loggernodeweb&tsrce=loggernodeweb&cu=0"
+ }
+ }
+ }
+ },
+ "timestamp": "2026-01-20T10:15:35.913Z"
+ }
+]
\ No newline at end of file
diff --git a/jam-ui/test/fixtures/legacy-sequences/step-2-dashboard-sequence.json b/jam-ui/test/fixtures/legacy-sequences/step-2-dashboard-sequence.json
new file mode 100644
index 000000000..e33242443
--- /dev/null
+++ b/jam-ui/test/fixtures/legacy-sequences/step-2-dashboard-sequence.json
@@ -0,0 +1,2022 @@
+[
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "timestamp": "2026-01-20T10:15:41.765Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "timestamp": "2026-01-20T10:15:41.766Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "timestamp": "2026-01-20T10:15:41.815Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "timestamp": "2026-01-20T10:15:41.816Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications?offset=0&limit=20",
+ "timestamp": "2026-01-20T10:15:41.816Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "timestamp": "2026-01-20T10:15:41.927Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "timestamp": "2026-01-20T10:15:41.927Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "timestamp": "2026-01-20T10:15:41.927Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/languages",
+ "timestamp": "2026-01-20T10:15:41.927Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "timestamp": "2026-01-20T10:15:41.927Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/subjects",
+ "timestamp": "2026-01-20T10:15:41.928Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/chat?type=CHAT_MESSAGE&limit=20&page=0&channel=global",
+ "timestamp": "2026-01-20T10:15:41.928Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "body": [
+ {
+ "id": "acapella",
+ "description": "A Cappella"
+ },
+ {
+ "id": "african",
+ "description": "African"
+ },
+ {
+ "id": "alternative rock",
+ "description": "Alternative Rock"
+ },
+ {
+ "id": "ambient",
+ "description": "Ambient"
+ },
+ {
+ "id": "americana",
+ "description": "Americana"
+ },
+ {
+ "id": "asian",
+ "description": "Asian"
+ },
+ {
+ "id": "avante-garde",
+ "description": "Avante-Garde"
+ },
+ {
+ "id": "bluegrass",
+ "description": "Bluegrass"
+ },
+ {
+ "id": "blues",
+ "description": "Blues"
+ },
+ {
+ "id": "breakbeat",
+ "description": "Breakbeat"
+ },
+ {
+ "id": "celtic",
+ "description": "Celtic"
+ },
+ {
+ "id": "classical",
+ "description": "Classical"
+ },
+ {
+ "id": "country",
+ "description": "Country"
+ },
+ {
+ "id": "creole",
+ "description": "Creole"
+ },
+ {
+ "id": "dance",
+ "description": "Dance"
+ },
+ {
+ "id": "disco",
+ "description": "Disco"
+ },
+ {
+ "id": "downtempo",
+ "description": "Downtempo"
+ },
+ {
+ "id": "drum & bass",
+ "description": "Drum & Bass"
+ },
+ {
+ "id": "electronic",
+ "description": "Electronic"
+ },
+ {
+ "id": "folk",
+ "description": "Folk"
+ },
+ {
+ "id": "funk",
+ "description": "Funk"
+ },
+ {
+ "id": "hard rock",
+ "description": "Hard Rock"
+ },
+ {
+ "id": "hip hop",
+ "description": "Hip Hop"
+ },
+ {
+ "id": "holiday",
+ "description": "Holiday"
+ },
+ {
+ "id": "house",
+ "description": "House"
+ },
+ {
+ "id": "industrial",
+ "description": "Industrial"
+ },
+ {
+ "id": "jazz",
+ "description": "Jazz"
+ },
+ {
+ "id": "kids",
+ "description": "Kids"
+ },
+ {
+ "id": "latin",
+ "description": "Latin"
+ },
+ {
+ "id": "metal",
+ "description": "Metal"
+ },
+ {
+ "id": "musical",
+ "description": "Musical"
+ },
+ {
+ "id": "oldies",
+ "description": "Oldies"
+ },
+ {
+ "id": "other",
+ "description": "Other"
+ },
+ {
+ "id": "pop",
+ "description": "Pop"
+ },
+ {
+ "id": "psychedelic",
+ "description": "Psychedelic"
+ },
+ {
+ "id": "punk",
+ "description": "Punk"
+ },
+ {
+ "id": "r&b",
+ "description": "R&B"
+ },
+ {
+ "id": "rap",
+ "description": "Rap"
+ },
+ {
+ "id": "reggae",
+ "description": "Reggae"
+ },
+ {
+ "id": "religious",
+ "description": "Religious"
+ },
+ {
+ "id": "rock",
+ "description": "Rock"
+ },
+ {
+ "id": "ska",
+ "description": "Ska"
+ },
+ {
+ "id": "soft rock",
+ "description": "Soft Rock"
+ },
+ {
+ "id": "soul",
+ "description": "Soul"
+ },
+ {
+ "id": "tv & movie soundtrack",
+ "description": "TV & Movie Soundtrack"
+ },
+ {
+ "id": "techno",
+ "description": "Techno"
+ },
+ {
+ "id": "traditional",
+ "description": "Traditional"
+ },
+ {
+ "id": "trance",
+ "description": "Trance"
+ },
+ {
+ "id": "world",
+ "description": "World"
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:42.456Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "body": [
+ {
+ "id": "accordion",
+ "description": "Accordion",
+ "popularity": 2
+ },
+ {
+ "id": "acoustic guitar",
+ "description": "Acoustic Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "bagpipes",
+ "description": "Bagpipes",
+ "popularity": 1
+ },
+ {
+ "id": "banjo",
+ "description": "Banjo",
+ "popularity": 2
+ },
+ {
+ "id": "bass guitar",
+ "description": "Bass Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "bassoon",
+ "description": "Bassoon",
+ "popularity": 1
+ },
+ {
+ "id": "cello",
+ "description": "Cello",
+ "popularity": 1
+ },
+ {
+ "id": "charango",
+ "description": "Charango",
+ "popularity": 1
+ },
+ {
+ "id": "clarinet",
+ "description": "Clarinet",
+ "popularity": 2
+ },
+ {
+ "id": "computer",
+ "description": "Computer",
+ "popularity": 3
+ },
+ {
+ "id": "dobro",
+ "description": "Dobro",
+ "popularity": 1
+ },
+ {
+ "id": "double bass",
+ "description": "Double Bass",
+ "popularity": 2
+ },
+ {
+ "id": "drums",
+ "description": "Drums",
+ "popularity": 3
+ },
+ {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "euphonium",
+ "description": "Euphonium",
+ "popularity": 1
+ },
+ {
+ "id": "flugelhorn",
+ "description": "Flugelhorn",
+ "popularity": 1
+ },
+ {
+ "id": "flute",
+ "description": "Flute",
+ "popularity": 2
+ },
+ {
+ "id": "french horn",
+ "description": "French Horn",
+ "popularity": 1
+ },
+ {
+ "id": "glockenspiel",
+ "description": "Glockenspiel",
+ "popularity": 1
+ },
+ {
+ "id": "harmonica",
+ "description": "Harmonica",
+ "popularity": 2
+ },
+ {
+ "id": "harp",
+ "description": "Harp",
+ "popularity": 1
+ },
+ {
+ "id": "keyboard",
+ "description": "Keyboard",
+ "popularity": 3
+ },
+ {
+ "id": "mandolin",
+ "description": "Mandolin",
+ "popularity": 1
+ },
+ {
+ "id": "oboe",
+ "description": "Oboe",
+ "popularity": 1
+ },
+ {
+ "id": "orchestra",
+ "description": "Orchestra",
+ "popularity": 1
+ },
+ {
+ "id": "other",
+ "description": "Other",
+ "popularity": 1
+ },
+ {
+ "id": "piano",
+ "description": "Piano",
+ "popularity": 2
+ },
+ {
+ "id": "piccolo",
+ "description": "Piccolo",
+ "popularity": 1
+ },
+ {
+ "id": "saxophone",
+ "description": "Saxophone",
+ "popularity": 2
+ },
+ {
+ "id": "sitar",
+ "description": "Sitar",
+ "popularity": 1
+ },
+ {
+ "id": "steel guitar",
+ "description": "Steel Guitar",
+ "popularity": 1
+ },
+ {
+ "id": "theremin",
+ "description": "Theremin",
+ "popularity": 1
+ },
+ {
+ "id": "timpani",
+ "description": "Timpani",
+ "popularity": 1
+ },
+ {
+ "id": "trombone",
+ "description": "Trombone",
+ "popularity": 2
+ },
+ {
+ "id": "trumpet",
+ "description": "Trumpet",
+ "popularity": 2
+ },
+ {
+ "id": "tuba",
+ "description": "Tuba",
+ "popularity": 1
+ },
+ {
+ "id": "ukulele",
+ "description": "Ukulele",
+ "popularity": 1
+ },
+ {
+ "id": "viola",
+ "description": "Viola",
+ "popularity": 1
+ },
+ {
+ "id": "violin",
+ "description": "Violin",
+ "popularity": 2
+ },
+ {
+ "id": "vocoder",
+ "description": "Vocoder",
+ "popularity": 1
+ },
+ {
+ "id": "voice",
+ "description": "Voice",
+ "popularity": 3
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:42.707Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications?offset=0&limit=20",
+ "body": [],
+ "timestamp": "2026-01-20T10:15:42.707Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "body": [
+ {
+ "id": "a09f9a7e-afb7-489d-870d-e13a336e0b97",
+ "first_name": "Seth",
+ "last_name": "Call",
+ "name": "Seth Call",
+ "location": "Boston, MA",
+ "city": "Boston",
+ "state": "MA",
+ "country": "US",
+ "musician": true,
+ "email": "nuwan+6@jamkazam.com",
+ "online": false,
+ "photo_url": "https://s3.amazonaws.com/jamkazam-dev-public/avatars/a09f9a7e-afb7-489d-870d-e13a336e0b97/8EfyNy2cQPaxEsypRviW_IMG_20231224_133203_HDR.jpg"
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:42.707Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "body": [
+ {
+ "id": "acapella",
+ "description": "A Cappella"
+ },
+ {
+ "id": "african",
+ "description": "African"
+ },
+ {
+ "id": "alternative rock",
+ "description": "Alternative Rock"
+ },
+ {
+ "id": "ambient",
+ "description": "Ambient"
+ },
+ {
+ "id": "americana",
+ "description": "Americana"
+ },
+ {
+ "id": "asian",
+ "description": "Asian"
+ },
+ {
+ "id": "avante-garde",
+ "description": "Avante-Garde"
+ },
+ {
+ "id": "bluegrass",
+ "description": "Bluegrass"
+ },
+ {
+ "id": "blues",
+ "description": "Blues"
+ },
+ {
+ "id": "breakbeat",
+ "description": "Breakbeat"
+ },
+ {
+ "id": "celtic",
+ "description": "Celtic"
+ },
+ {
+ "id": "classical",
+ "description": "Classical"
+ },
+ {
+ "id": "country",
+ "description": "Country"
+ },
+ {
+ "id": "creole",
+ "description": "Creole"
+ },
+ {
+ "id": "dance",
+ "description": "Dance"
+ },
+ {
+ "id": "disco",
+ "description": "Disco"
+ },
+ {
+ "id": "downtempo",
+ "description": "Downtempo"
+ },
+ {
+ "id": "drum & bass",
+ "description": "Drum & Bass"
+ },
+ {
+ "id": "electronic",
+ "description": "Electronic"
+ },
+ {
+ "id": "folk",
+ "description": "Folk"
+ },
+ {
+ "id": "funk",
+ "description": "Funk"
+ },
+ {
+ "id": "hard rock",
+ "description": "Hard Rock"
+ },
+ {
+ "id": "hip hop",
+ "description": "Hip Hop"
+ },
+ {
+ "id": "holiday",
+ "description": "Holiday"
+ },
+ {
+ "id": "house",
+ "description": "House"
+ },
+ {
+ "id": "industrial",
+ "description": "Industrial"
+ },
+ {
+ "id": "jazz",
+ "description": "Jazz"
+ },
+ {
+ "id": "kids",
+ "description": "Kids"
+ },
+ {
+ "id": "latin",
+ "description": "Latin"
+ },
+ {
+ "id": "metal",
+ "description": "Metal"
+ },
+ {
+ "id": "musical",
+ "description": "Musical"
+ },
+ {
+ "id": "oldies",
+ "description": "Oldies"
+ },
+ {
+ "id": "other",
+ "description": "Other"
+ },
+ {
+ "id": "pop",
+ "description": "Pop"
+ },
+ {
+ "id": "psychedelic",
+ "description": "Psychedelic"
+ },
+ {
+ "id": "punk",
+ "description": "Punk"
+ },
+ {
+ "id": "r&b",
+ "description": "R&B"
+ },
+ {
+ "id": "rap",
+ "description": "Rap"
+ },
+ {
+ "id": "reggae",
+ "description": "Reggae"
+ },
+ {
+ "id": "religious",
+ "description": "Religious"
+ },
+ {
+ "id": "rock",
+ "description": "Rock"
+ },
+ {
+ "id": "ska",
+ "description": "Ska"
+ },
+ {
+ "id": "soft rock",
+ "description": "Soft Rock"
+ },
+ {
+ "id": "soul",
+ "description": "Soul"
+ },
+ {
+ "id": "tv & movie soundtrack",
+ "description": "TV & Movie Soundtrack"
+ },
+ {
+ "id": "techno",
+ "description": "Techno"
+ },
+ {
+ "id": "traditional",
+ "description": "Traditional"
+ },
+ {
+ "id": "trance",
+ "description": "Trance"
+ },
+ {
+ "id": "world",
+ "description": "World"
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:42.707Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/languages",
+ "body": [
+ {
+ "id": "EN",
+ "description": "English"
+ },
+ {
+ "id": "AF",
+ "description": "Afrikanns"
+ },
+ {
+ "id": "SQ",
+ "description": "Albanian"
+ },
+ {
+ "id": "AR",
+ "description": "Arabic"
+ },
+ {
+ "id": "HY",
+ "description": "Armenian"
+ },
+ {
+ "id": "EU",
+ "description": "Basque"
+ },
+ {
+ "id": "BN",
+ "description": "Bengali"
+ },
+ {
+ "id": "BG",
+ "description": "Bulgarian"
+ },
+ {
+ "id": "KM",
+ "description": "Cambodian"
+ },
+ {
+ "id": "CA",
+ "description": "Catalan"
+ },
+ {
+ "id": "ZH",
+ "description": "Chinese (Mandarin)"
+ },
+ {
+ "id": "HR",
+ "description": "Croation"
+ },
+ {
+ "id": "CS",
+ "description": "Czech"
+ },
+ {
+ "id": "DA",
+ "description": "Danish"
+ },
+ {
+ "id": "NL",
+ "description": "Dutch"
+ },
+ {
+ "id": "ET",
+ "description": "Estonian"
+ },
+ {
+ "id": "FJ",
+ "description": "Fiji"
+ },
+ {
+ "id": "FI",
+ "description": "Finnish"
+ },
+ {
+ "id": "FR",
+ "description": "French"
+ },
+ {
+ "id": "KA",
+ "description": "Georgian"
+ },
+ {
+ "id": "DE",
+ "description": "German"
+ },
+ {
+ "id": "EL",
+ "description": "Greek"
+ },
+ {
+ "id": "GU",
+ "description": "Gujarati"
+ },
+ {
+ "id": "HE",
+ "description": "Hebrew"
+ },
+ {
+ "id": "HI",
+ "description": "Hindi"
+ },
+ {
+ "id": "HU",
+ "description": "Hungarian"
+ },
+ {
+ "id": "IS",
+ "description": "Icelandic"
+ },
+ {
+ "id": "ID",
+ "description": "Indonesian"
+ },
+ {
+ "id": "GA",
+ "description": "Irish"
+ },
+ {
+ "id": "IT",
+ "description": "Italian"
+ },
+ {
+ "id": "JA",
+ "description": "Japanese"
+ },
+ {
+ "id": "JW",
+ "description": "Javanese"
+ },
+ {
+ "id": "KO",
+ "description": "Korean"
+ },
+ {
+ "id": "LA",
+ "description": "Latin"
+ },
+ {
+ "id": "LV",
+ "description": "Latvian"
+ },
+ {
+ "id": "LT",
+ "description": "Lithuanian"
+ },
+ {
+ "id": "MK",
+ "description": "Macedonian"
+ },
+ {
+ "id": "MS",
+ "description": "Malay"
+ },
+ {
+ "id": "ML",
+ "description": "Malayalam"
+ },
+ {
+ "id": "MT",
+ "description": "Maltese"
+ },
+ {
+ "id": "MI",
+ "description": "Maori"
+ },
+ {
+ "id": "MR",
+ "description": "Marathi"
+ },
+ {
+ "id": "MN",
+ "description": "Mongolian"
+ },
+ {
+ "id": "NE",
+ "description": "Nepali"
+ },
+ {
+ "id": "NO",
+ "description": "Norwegian"
+ },
+ {
+ "id": "FA",
+ "description": "Persian"
+ },
+ {
+ "id": "PL",
+ "description": "Polish"
+ },
+ {
+ "id": "PT",
+ "description": "Portuguese"
+ },
+ {
+ "id": "PA",
+ "description": "Punjabi"
+ },
+ {
+ "id": "QU",
+ "description": "Quechua"
+ },
+ {
+ "id": "RO",
+ "description": "Romanian"
+ },
+ {
+ "id": "RU",
+ "description": "Russian"
+ },
+ {
+ "id": "SM",
+ "description": "Samoan"
+ },
+ {
+ "id": "SR",
+ "description": "Serbian"
+ },
+ {
+ "id": "SK",
+ "description": "Slovak"
+ },
+ {
+ "id": "SL",
+ "description": "Slovenian"
+ },
+ {
+ "id": "ES",
+ "description": "Spanish"
+ },
+ {
+ "id": "SW",
+ "description": "Swahili"
+ },
+ {
+ "id": "SV",
+ "description": "Swedish "
+ },
+ {
+ "id": "TA",
+ "description": "Tamil"
+ },
+ {
+ "id": "TT",
+ "description": "Tatar"
+ },
+ {
+ "id": "TE",
+ "description": "Telugu"
+ },
+ {
+ "id": "TH",
+ "description": "Thai"
+ },
+ {
+ "id": "BO",
+ "description": "Tibetan"
+ },
+ {
+ "id": "TO",
+ "description": "Tonga"
+ },
+ {
+ "id": "TR",
+ "description": "Turkish"
+ },
+ {
+ "id": "UK",
+ "description": "Ukranian"
+ },
+ {
+ "id": "UR",
+ "description": "Urdu"
+ },
+ {
+ "id": "UZ",
+ "description": "Uzbek"
+ },
+ {
+ "id": "VI",
+ "description": "Vietnamese"
+ },
+ {
+ "id": "CY",
+ "description": "Welsh"
+ },
+ {
+ "id": "XH",
+ "description": "Xhosa"
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:42.776Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/chat?type=CHAT_MESSAGE&limit=20&page=0&channel=global",
+ "body": {
+ "next": null,
+ "chats": [
+ {
+ "id": "d6e478eb-c2a1-4495-b00a-84fa01aefbb6",
+ "message": "qq",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-21T07:39:21.357Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "54baff3d-b104-43aa-8747-3ca3cbba3e95",
+ "message": "tt",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-21T07:38:20.820Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "c5b51493-01d9-4e42-8daa-bf3948b858cc",
+ "message": "lk",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-20T22:44:50.270Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "07f67a95-f275-4d39-bae4-1b9b42141d91",
+ "message": "uu",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-20T22:43:05.706Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "2802579a-ed5c-4694-862b-f75f764901b6",
+ "message": "aaaa",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-20T16:25:51.294Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "cbfc23d4-02d7-4adb-8471-4dc0760ee157",
+ "message": "ssss",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-20T16:20:48.827Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "464b5f72-43ad-49bc-a984-4484fd766fca",
+ "message": "kkk",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-20T16:15:57.397Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "b5c2585a-aa76-4084-ba8a-ea63949d61b5",
+ "message": "iiii",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-20T10:27:57.145Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "f7599110-f15b-4a62-90e9-e1c42fd0b546",
+ "message": "dfgdfgdfg",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-20T09:20:10.139Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "9bfdc494-cd3a-496b-b958-102c2027890c",
+ "message": "This is nuwan",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-09T09:59:22.187Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "a894f396-e896-40f0-b626-d899c1ead63f",
+ "message": "hi test 1",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2021-09-01T18:44:36.090Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ }
+ ]
+ },
+ "timestamp": "2026-01-20T10:15:42.782Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "body": [
+ {
+ "id": "accordion",
+ "description": "Accordion",
+ "popularity": 2
+ },
+ {
+ "id": "acoustic guitar",
+ "description": "Acoustic Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "bagpipes",
+ "description": "Bagpipes",
+ "popularity": 1
+ },
+ {
+ "id": "banjo",
+ "description": "Banjo",
+ "popularity": 2
+ },
+ {
+ "id": "bass guitar",
+ "description": "Bass Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "bassoon",
+ "description": "Bassoon",
+ "popularity": 1
+ },
+ {
+ "id": "cello",
+ "description": "Cello",
+ "popularity": 1
+ },
+ {
+ "id": "charango",
+ "description": "Charango",
+ "popularity": 1
+ },
+ {
+ "id": "clarinet",
+ "description": "Clarinet",
+ "popularity": 2
+ },
+ {
+ "id": "computer",
+ "description": "Computer",
+ "popularity": 3
+ },
+ {
+ "id": "dobro",
+ "description": "Dobro",
+ "popularity": 1
+ },
+ {
+ "id": "double bass",
+ "description": "Double Bass",
+ "popularity": 2
+ },
+ {
+ "id": "drums",
+ "description": "Drums",
+ "popularity": 3
+ },
+ {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "euphonium",
+ "description": "Euphonium",
+ "popularity": 1
+ },
+ {
+ "id": "flugelhorn",
+ "description": "Flugelhorn",
+ "popularity": 1
+ },
+ {
+ "id": "flute",
+ "description": "Flute",
+ "popularity": 2
+ },
+ {
+ "id": "french horn",
+ "description": "French Horn",
+ "popularity": 1
+ },
+ {
+ "id": "glockenspiel",
+ "description": "Glockenspiel",
+ "popularity": 1
+ },
+ {
+ "id": "harmonica",
+ "description": "Harmonica",
+ "popularity": 2
+ },
+ {
+ "id": "harp",
+ "description": "Harp",
+ "popularity": 1
+ },
+ {
+ "id": "keyboard",
+ "description": "Keyboard",
+ "popularity": 3
+ },
+ {
+ "id": "mandolin",
+ "description": "Mandolin",
+ "popularity": 1
+ },
+ {
+ "id": "oboe",
+ "description": "Oboe",
+ "popularity": 1
+ },
+ {
+ "id": "orchestra",
+ "description": "Orchestra",
+ "popularity": 1
+ },
+ {
+ "id": "other",
+ "description": "Other",
+ "popularity": 1
+ },
+ {
+ "id": "piano",
+ "description": "Piano",
+ "popularity": 2
+ },
+ {
+ "id": "piccolo",
+ "description": "Piccolo",
+ "popularity": 1
+ },
+ {
+ "id": "saxophone",
+ "description": "Saxophone",
+ "popularity": 2
+ },
+ {
+ "id": "sitar",
+ "description": "Sitar",
+ "popularity": 1
+ },
+ {
+ "id": "steel guitar",
+ "description": "Steel Guitar",
+ "popularity": 1
+ },
+ {
+ "id": "theremin",
+ "description": "Theremin",
+ "popularity": 1
+ },
+ {
+ "id": "timpani",
+ "description": "Timpani",
+ "popularity": 1
+ },
+ {
+ "id": "trombone",
+ "description": "Trombone",
+ "popularity": 2
+ },
+ {
+ "id": "trumpet",
+ "description": "Trumpet",
+ "popularity": 2
+ },
+ {
+ "id": "tuba",
+ "description": "Tuba",
+ "popularity": 1
+ },
+ {
+ "id": "ukulele",
+ "description": "Ukulele",
+ "popularity": 1
+ },
+ {
+ "id": "viola",
+ "description": "Viola",
+ "popularity": 1
+ },
+ {
+ "id": "violin",
+ "description": "Violin",
+ "popularity": 2
+ },
+ {
+ "id": "vocoder",
+ "description": "Vocoder",
+ "popularity": 1
+ },
+ {
+ "id": "voice",
+ "description": "Voice",
+ "popularity": 3
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:42.823Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "body": [
+ {
+ "id": "a09f9a7e-afb7-489d-870d-e13a336e0b97",
+ "first_name": "Seth",
+ "last_name": "Call",
+ "name": "Seth Call",
+ "location": "Boston, MA",
+ "city": "Boston",
+ "state": "MA",
+ "country": "US",
+ "musician": true,
+ "email": "nuwan+6@jamkazam.com",
+ "online": false,
+ "photo_url": "https://s3.amazonaws.com/jamkazam-dev-public/avatars/a09f9a7e-afb7-489d-870d-e13a336e0b97/8EfyNy2cQPaxEsypRviW_IMG_20231224_133203_HDR.jpg"
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:42.823Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "body": [
+ {
+ "id": "acapella",
+ "description": "A Cappella"
+ },
+ {
+ "id": "african",
+ "description": "African"
+ },
+ {
+ "id": "alternative rock",
+ "description": "Alternative Rock"
+ },
+ {
+ "id": "ambient",
+ "description": "Ambient"
+ },
+ {
+ "id": "americana",
+ "description": "Americana"
+ },
+ {
+ "id": "asian",
+ "description": "Asian"
+ },
+ {
+ "id": "avante-garde",
+ "description": "Avante-Garde"
+ },
+ {
+ "id": "bluegrass",
+ "description": "Bluegrass"
+ },
+ {
+ "id": "blues",
+ "description": "Blues"
+ },
+ {
+ "id": "breakbeat",
+ "description": "Breakbeat"
+ },
+ {
+ "id": "celtic",
+ "description": "Celtic"
+ },
+ {
+ "id": "classical",
+ "description": "Classical"
+ },
+ {
+ "id": "country",
+ "description": "Country"
+ },
+ {
+ "id": "creole",
+ "description": "Creole"
+ },
+ {
+ "id": "dance",
+ "description": "Dance"
+ },
+ {
+ "id": "disco",
+ "description": "Disco"
+ },
+ {
+ "id": "downtempo",
+ "description": "Downtempo"
+ },
+ {
+ "id": "drum & bass",
+ "description": "Drum & Bass"
+ },
+ {
+ "id": "electronic",
+ "description": "Electronic"
+ },
+ {
+ "id": "folk",
+ "description": "Folk"
+ },
+ {
+ "id": "funk",
+ "description": "Funk"
+ },
+ {
+ "id": "hard rock",
+ "description": "Hard Rock"
+ },
+ {
+ "id": "hip hop",
+ "description": "Hip Hop"
+ },
+ {
+ "id": "holiday",
+ "description": "Holiday"
+ },
+ {
+ "id": "house",
+ "description": "House"
+ },
+ {
+ "id": "industrial",
+ "description": "Industrial"
+ },
+ {
+ "id": "jazz",
+ "description": "Jazz"
+ },
+ {
+ "id": "kids",
+ "description": "Kids"
+ },
+ {
+ "id": "latin",
+ "description": "Latin"
+ },
+ {
+ "id": "metal",
+ "description": "Metal"
+ },
+ {
+ "id": "musical",
+ "description": "Musical"
+ },
+ {
+ "id": "oldies",
+ "description": "Oldies"
+ },
+ {
+ "id": "other",
+ "description": "Other"
+ },
+ {
+ "id": "pop",
+ "description": "Pop"
+ },
+ {
+ "id": "psychedelic",
+ "description": "Psychedelic"
+ },
+ {
+ "id": "punk",
+ "description": "Punk"
+ },
+ {
+ "id": "r&b",
+ "description": "R&B"
+ },
+ {
+ "id": "rap",
+ "description": "Rap"
+ },
+ {
+ "id": "reggae",
+ "description": "Reggae"
+ },
+ {
+ "id": "religious",
+ "description": "Religious"
+ },
+ {
+ "id": "rock",
+ "description": "Rock"
+ },
+ {
+ "id": "ska",
+ "description": "Ska"
+ },
+ {
+ "id": "soft rock",
+ "description": "Soft Rock"
+ },
+ {
+ "id": "soul",
+ "description": "Soul"
+ },
+ {
+ "id": "tv & movie soundtrack",
+ "description": "TV & Movie Soundtrack"
+ },
+ {
+ "id": "techno",
+ "description": "Techno"
+ },
+ {
+ "id": "traditional",
+ "description": "Traditional"
+ },
+ {
+ "id": "trance",
+ "description": "Trance"
+ },
+ {
+ "id": "world",
+ "description": "World"
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:42.823Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "body": [
+ {
+ "id": "accordion",
+ "description": "Accordion",
+ "popularity": 2
+ },
+ {
+ "id": "acoustic guitar",
+ "description": "Acoustic Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "bagpipes",
+ "description": "Bagpipes",
+ "popularity": 1
+ },
+ {
+ "id": "banjo",
+ "description": "Banjo",
+ "popularity": 2
+ },
+ {
+ "id": "bass guitar",
+ "description": "Bass Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "bassoon",
+ "description": "Bassoon",
+ "popularity": 1
+ },
+ {
+ "id": "cello",
+ "description": "Cello",
+ "popularity": 1
+ },
+ {
+ "id": "charango",
+ "description": "Charango",
+ "popularity": 1
+ },
+ {
+ "id": "clarinet",
+ "description": "Clarinet",
+ "popularity": 2
+ },
+ {
+ "id": "computer",
+ "description": "Computer",
+ "popularity": 3
+ },
+ {
+ "id": "dobro",
+ "description": "Dobro",
+ "popularity": 1
+ },
+ {
+ "id": "double bass",
+ "description": "Double Bass",
+ "popularity": 2
+ },
+ {
+ "id": "drums",
+ "description": "Drums",
+ "popularity": 3
+ },
+ {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "euphonium",
+ "description": "Euphonium",
+ "popularity": 1
+ },
+ {
+ "id": "flugelhorn",
+ "description": "Flugelhorn",
+ "popularity": 1
+ },
+ {
+ "id": "flute",
+ "description": "Flute",
+ "popularity": 2
+ },
+ {
+ "id": "french horn",
+ "description": "French Horn",
+ "popularity": 1
+ },
+ {
+ "id": "glockenspiel",
+ "description": "Glockenspiel",
+ "popularity": 1
+ },
+ {
+ "id": "harmonica",
+ "description": "Harmonica",
+ "popularity": 2
+ },
+ {
+ "id": "harp",
+ "description": "Harp",
+ "popularity": 1
+ },
+ {
+ "id": "keyboard",
+ "description": "Keyboard",
+ "popularity": 3
+ },
+ {
+ "id": "mandolin",
+ "description": "Mandolin",
+ "popularity": 1
+ },
+ {
+ "id": "oboe",
+ "description": "Oboe",
+ "popularity": 1
+ },
+ {
+ "id": "orchestra",
+ "description": "Orchestra",
+ "popularity": 1
+ },
+ {
+ "id": "other",
+ "description": "Other",
+ "popularity": 1
+ },
+ {
+ "id": "piano",
+ "description": "Piano",
+ "popularity": 2
+ },
+ {
+ "id": "piccolo",
+ "description": "Piccolo",
+ "popularity": 1
+ },
+ {
+ "id": "saxophone",
+ "description": "Saxophone",
+ "popularity": 2
+ },
+ {
+ "id": "sitar",
+ "description": "Sitar",
+ "popularity": 1
+ },
+ {
+ "id": "steel guitar",
+ "description": "Steel Guitar",
+ "popularity": 1
+ },
+ {
+ "id": "theremin",
+ "description": "Theremin",
+ "popularity": 1
+ },
+ {
+ "id": "timpani",
+ "description": "Timpani",
+ "popularity": 1
+ },
+ {
+ "id": "trombone",
+ "description": "Trombone",
+ "popularity": 2
+ },
+ {
+ "id": "trumpet",
+ "description": "Trumpet",
+ "popularity": 2
+ },
+ {
+ "id": "tuba",
+ "description": "Tuba",
+ "popularity": 1
+ },
+ {
+ "id": "ukulele",
+ "description": "Ukulele",
+ "popularity": 1
+ },
+ {
+ "id": "viola",
+ "description": "Viola",
+ "popularity": 1
+ },
+ {
+ "id": "violin",
+ "description": "Violin",
+ "popularity": 2
+ },
+ {
+ "id": "vocoder",
+ "description": "Vocoder",
+ "popularity": 1
+ },
+ {
+ "id": "voice",
+ "description": "Voice",
+ "popularity": 3
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:42.824Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/subjects",
+ "body": [
+ {
+ "id": "ableton-live",
+ "description": "Ableton Live"
+ },
+ {
+ "id": "amplitube",
+ "description": "AmpliTube"
+ },
+ {
+ "id": "apple-logic-pro",
+ "description": "Apple Logic Pro"
+ },
+ {
+ "id": "arranging",
+ "description": "Arranging"
+ },
+ {
+ "id": "composing",
+ "description": "Composition"
+ },
+ {
+ "id": "conducting",
+ "description": "Conducting"
+ },
+ {
+ "id": "cubase",
+ "description": "Cubase"
+ },
+ {
+ "id": "ear-training",
+ "description": "Ear Training"
+ },
+ {
+ "id": "fl-studio",
+ "description": "FL Studio"
+ },
+ {
+ "id": "film-scoring",
+ "description": "Film Scoring"
+ },
+ {
+ "id": "garageband",
+ "description": "GarageBand"
+ },
+ {
+ "id": "guitar-ring",
+ "description": "Guitar Rig"
+ },
+ {
+ "id": "harmony",
+ "description": "Harmony"
+ },
+ {
+ "id": "improvisation",
+ "description": "Improvisation"
+ },
+ {
+ "id": "instrument-repair",
+ "description": "Instrument Repair"
+ },
+ {
+ "id": "line-6-pod",
+ "description": "Line 6 Pod"
+ },
+ {
+ "id": "music-business",
+ "description": "Music Business"
+ },
+ {
+ "id": "music-theory",
+ "description": "Music Theory"
+ },
+ {
+ "id": "music-therapy",
+ "description": "Music Therapy"
+ },
+ {
+ "id": "presonus-studio-one",
+ "description": "PreSonus Studio One"
+ },
+ {
+ "id": "pro-tools",
+ "description": "Pro Tools"
+ },
+ {
+ "id": "reaper",
+ "description": "Reaper"
+ },
+ {
+ "id": "reason",
+ "description": "Reason"
+ },
+ {
+ "id": "recording",
+ "description": "Recording & Production"
+ },
+ {
+ "id": "site-reading",
+ "description": "Sight Reading"
+ },
+ {
+ "id": "sonar",
+ "description": "Sonar"
+ },
+ {
+ "id": "songwriting",
+ "description": "Songwriting"
+ },
+ {
+ "id": "video-game-scoring",
+ "description": "Video Game Scoring"
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:42.824Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "timestamp": "2026-01-20T10:15:42.826Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "timestamp": "2026-01-20T10:15:42.829Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "body": {
+ "version": "2.0.0.1956",
+ "uri": "http://d48bcgsnmsm6a.cloudfront.net/artifacts/JamClientModern/MacOSX-M/2.0.0.1956/JamKazam-1770.dmg",
+ "sha1": "2ca2238f4a21a09c32d4a0b6f5fee78b",
+ "size": 240820609
+ },
+ "timestamp": "2026-01-20T10:15:42.921Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "body": {
+ "version": "2.0.0.1956",
+ "uri": "http://d48bcgsnmsm6a.cloudfront.net/artifacts/JamClientModern/MacOSX-M/2.0.0.1956/JamKazam-1770.dmg",
+ "sha1": "2ca2238f4a21a09c32d4a0b6f5fee78b",
+ "size": 240820609
+ },
+ "timestamp": "2026-01-20T10:15:43.013Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/healthcheck",
+ "timestamp": "2026-01-20T10:15:43.752Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/healthcheck",
+ "body": {},
+ "timestamp": "2026-01-20T10:15:43.764Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/config/client?",
+ "timestamp": "2026-01-20T10:15:43.932Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/config/client?",
+ "body": {
+ "top_message": null,
+ "event_page_top_logo_url": "/assets/event/eventbrite-logo.png"
+ },
+ "timestamp": "2026-01-20T10:15:43.946Z"
+ }
+]
\ No newline at end of file
diff --git a/jam-ui/test/fixtures/legacy-sequences/step-5-session-creation-sequence.json b/jam-ui/test/fixtures/legacy-sequences/step-5-session-creation-sequence.json
new file mode 100644
index 000000000..7f260902f
--- /dev/null
+++ b/jam-ui/test/fixtures/legacy-sequences/step-5-session-creation-sequence.json
@@ -0,0 +1,6066 @@
+[
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381?",
+ "timestamp": "2026-01-20T10:15:55.382Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/countries",
+ "timestamp": "2026-01-20T10:15:55.437Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/shopping_carts?time=1768904155592",
+ "timestamp": "2026-01-20T10:15:55.594Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "timestamp": "2026-01-20T10:15:55.655Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "timestamp": "2026-01-20T10:15:55.655Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "timestamp": "2026-01-20T10:15:55.664Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "timestamp": "2026-01-20T10:15:55.734Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "timestamp": "2026-01-20T10:15:55.734Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "timestamp": "2026-01-20T10:15:55.734Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "timestamp": "2026-01-20T10:15:55.739Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/languages",
+ "timestamp": "2026-01-20T10:15:55.739Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "timestamp": "2026-01-20T10:15:55.740Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/subjects",
+ "timestamp": "2026-01-20T10:15:55.740Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/chat?type=CHAT_MESSAGE&limit=20&page=0&channel=global",
+ "timestamp": "2026-01-20T10:15:55.740Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/sessions/scheduled?",
+ "timestamp": "2026-01-20T10:15:55.987Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381?",
+ "timestamp": "2026-01-20T10:15:55.987Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "timestamp": "2026-01-20T10:15:56.005Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications?offset=0&limit=20",
+ "timestamp": "2026-01-20T10:15:56.006Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/regions?country=US",
+ "timestamp": "2026-01-20T10:15:56.009Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381?",
+ "body": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "city": "Dallas",
+ "state": "TX",
+ "country": "US",
+ "location": "Dallas, TX",
+ "online": true,
+ "photo_url": null,
+ "musician": true,
+ "gender": "M",
+ "birth_date": null,
+ "friend_count": 1,
+ "liker_count": 0,
+ "follower_count": 77,
+ "following_count": 130,
+ "admin": true,
+ "recording_count": 0,
+ "session_count": 0,
+ "biography": "This is description with special charact xxxxxxaaaasasasas",
+ "favorite_count": 0,
+ "audio_latency": null,
+ "upcoming_session_count": 0,
+ "age": null,
+ "website": "www.nuwanchaturanga.me",
+ "skill_level": 2,
+ "reuse_card": true,
+ "email_needs_verification": false,
+ "is_a_teacher": true,
+ "is_a_student": false,
+ "is_onboarder": false,
+ "timezone": null,
+ "use_video_conferencing_server": true,
+ "email": "nuwan@jamkazam.com",
+ "original_fpfile": null,
+ "cropped_fpfile": null,
+ "crop_selection": null,
+ "session_settings": "{:band_id=>nil, :musician_access=>false, :approval_required=>false, :fan_chat=>false, :fan_access=>false, :description=>\"Private session set up just to test things out in the session interface by myself.\", :genres=>[{:id=>\"pop\", :description=>\"Pop\"}], :invitees=>[]}",
+ "show_whats_next": true,
+ "show_whats_next_count": 0,
+ "subscribe_email": false,
+ "auth_twitter": false,
+ "new_notifications": 14,
+ "sales_count": 7,
+ "purchased_jamtracks_count": 1,
+ "first_downloaded_client_at": null,
+ "created_at": "2021-05-21T18:15:28.425Z",
+ "first_opened_jamtrack_web_player": "2024-12-03T13:55:01.788Z",
+ "gifted_jamtracks": 0,
+ "has_redeemable_jamtrack": false,
+ "has_stored_credit_card?": true,
+ "remaining_test_drives": 0,
+ "jamclass_credits": 0,
+ "can_buy_test_drive?": true,
+ "lesson_package_type_id": null,
+ "school_id": null,
+ "is_guitar_center_student?": false,
+ "purchase_required": null,
+ "lesson_package_needs_purchase_id": null,
+ "user_authorizations": [
+ {
+ "uid": "RQB3YMV6KABBL",
+ "provider": "paypal",
+ "token_expiration": "2025-07-14T14:47:06.651Z"
+ }
+ ],
+ "test_drive_package_choices": [],
+ "friends": [
+ {
+ "id": "a09f9a7e-afb7-489d-870d-e13a336e0b97",
+ "first_name": "Seth",
+ "last_name": "Call",
+ "name": "Seth Call",
+ "online": false,
+ "photo_url": "https://s3.amazonaws.com/jamkazam-dev-public/avatars/a09f9a7e-afb7-489d-870d-e13a336e0b97/8EfyNy2cQPaxEsypRviW_IMG_20231224_133203_HDR.jpg"
+ }
+ ],
+ "followings": [
+ {
+ "type": "user",
+ "id": "963d5268-66b6-463a-a3ee-c97f274fc23f",
+ "name": "Peter Walker",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "cc0b060c-9891-4e91-9fe3-4268893a2fd0",
+ "name": "Oswald Becca",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "29becbf4-8be5-4078-9405-0edadc9fa42d",
+ "name": "Peter 1 Walker",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "3dfca858-0e7c-4ad4-993a-c39421d93853",
+ "name": "Peter Walker",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "fd467978-da75-421f-8e97-6406a784e87e",
+ "name": "Indrashapa Liyanage",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "a09f9a7e-afb7-489d-870d-e13a336e0b97",
+ "name": "Seth Call",
+ "location": "Boston, MA",
+ "photo_url": "https://s3.amazonaws.com/jamkazam-dev-public/avatars/a09f9a7e-afb7-489d-870d-e13a336e0b97/8EfyNy2cQPaxEsypRviW_IMG_20231224_133203_HDR.jpg"
+ },
+ {
+ "type": "user",
+ "id": "2e75f1dc-af6b-4444-a9e2-5f32db07abc1",
+ "name": "David Wilson 1",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f8f32710-3194-4666-b618-eceb21d6e3de",
+ "name": "Peter Walker",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "feb671a3-1821-48f0-bc14-aa26cf98bb25",
+ "name": "David Wilson",
+ "location": "Miami, FL",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "c2ede005-3b3a-4227-b6fc-f7e8b946b556",
+ "name": "Test 2 User",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "bcf99b5c-8fee-47ce-bf51-b3c7b821d023",
+ "name": "David Miller",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1f9debf3-58d7-46c0-896c-859b6ae8be37",
+ "name": "David Miller",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "876d1604-d309-429a-8046-e034ce1bcea4",
+ "name": "David Miller",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "name": "Nuwan Chaturanga",
+ "location": "Dallas, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "062168d9-3e7e-41ee-b8e8-9f496b8cb97a",
+ "name": "James Bond",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "5c2b1a45-5212-4a73-b5ce-007c345d97b7",
+ "name": "Makenna Gutmann Celestino Hand",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "e2eca6b2-56d9-450a-8ac4-7d107a488887",
+ "name": "Grace Roob Cynthia Cronin",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b1ddadd0-0263-47c4-bf91-e7767f386970",
+ "name": "Oswald Becca",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "0671faf1-7e39-45e3-ba9b-a3e27982e88f",
+ "name": "Carey Carroll Yolanda Ankunding",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1e94859c-b192-4bc8-9d8e-6a3ef5ec1380",
+ "name": "Filiberto Hills IV Anya Keebler MD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "749d3a9f-11fc-4593-827c-b47d0da1322e",
+ "name": "RashawnMante ThurmanFadel",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "6ceb102f-2f99-46dd-8baa-d1b1c357118f",
+ "name": "ObieJenkins EddNienow",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "042ef11a-f2ad-4e80-85d8-cf94a502e298",
+ "name": "TobinFisher MatildaKiehn",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f0ca8d87-dd9e-4d9f-afc1-ff543f29d371",
+ "name": "MrsOrionSchoen CurtisChristiansenV",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "fc3496a2-9f73-47ed-a755-02011afddded",
+ "name": "TristonRunolfsson DrJoyHoppe",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "16a32d1e-901e-460a-bd9a-d400b91ec5d5",
+ "name": "DrPatrickDuBuque JeanneVeum",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "7e43ae3e-47b2-4510-a688-91c209e5d271",
+ "name": "MrsEverardoWillms JadonGreenholt",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b39034cf-0f02-44a3-ac46-1e79f561e22f",
+ "name": "AmberOConner NoelMedhurst",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "9f7e3f8e-9ea1-41a5-a589-60ff27b40e74",
+ "name": "ErnestinaGrady CarlieLubowitz",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "5501a1a7-670d-45b9-bf2f-e644c3d8ae65",
+ "name": "MaryamAltenwerth MoseDavisDDS",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "5473d024-0dd2-434b-bea2-ed1b959f6eb8",
+ "name": "TyreeKlocko MarcusCartwright",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "a8e2ceda-51a7-4b67-87bb-5ddab937127d",
+ "name": "DaleNicolas ErnieBalistreriSr",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "819f1fff-4c76-45b8-a97f-e3ae23c44d38",
+ "name": "TerenceRosenbaum BenedictOReillyPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "caaa6dbe-d44f-4283-82b9-31e2feef8552",
+ "name": "RichardSchmeler SteveMante",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b1faa4a9-aa95-46da-98ef-d9a110cf19db",
+ "name": "CharlesChamplinSr SofiaBernierSr",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "aae38d6a-571b-453c-b84d-ac377e7dd518",
+ "name": "MabelCasperPhD TyrelStroman",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "8bac8af0-f348-4d38-9c8b-3864c21819fa",
+ "name": "DoyleParisian VelmaMarquardt",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "bae12f4f-b8a6-4cfb-8cfb-3a97293011fb",
+ "name": "FriedrichMaggioSr IvyBergePhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "492b11ae-46d3-4e77-8a0a-8550cf924fcc",
+ "name": "PierreJaskolski MrCurtTremblay",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f739a1ab-25e7-4713-9914-8c3993b34ac2",
+ "name": "FreedaConnelly ZoraRyanIV",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "da55a63e-822c-4b00-a1ff-43d1c77dd9da",
+ "name": "MrDarrelHilpert AliaLemke",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "9b3fccc7-3341-497e-943b-4223470c4d2e",
+ "name": "JudahMurphy MsRandallWalsh",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "e0ff0bfb-f7f7-4a59-8fe9-b3271a436bff",
+ "name": "MorganRempel DestineyTrompDDS",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "e6659aab-3b85-4fcf-b238-9784e8fa0c87",
+ "name": "JettBartell RayHuels",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "fa8520ee-dbbc-4c82-8a3a-3eb7a2e670b9",
+ "name": "DorthyRitchie EthelynConroy",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "c99366a3-1ca5-4be0-b241-d5ab251e2128",
+ "name": "MrsJerrodWill MissHassanMcDermott",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "5545474c-72ae-439e-b15e-ea01d8024e9a",
+ "name": "JonatanBaumbach IsadoreMohrDVM",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1de82b84-509f-4b44-8e57-83a4c84ddb65",
+ "name": "MableSporerI KarleeWestPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "c6105907-18f0-4328-8612-4a3712a87589",
+ "name": "TaniaOConnell MorrisJast",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "3befd488-1e79-4a0f-9195-55627345a896",
+ "name": "MissTremayneVonRueden MargarettQuigley",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ba54b319-f774-4df1-9998-079518bafb71",
+ "name": "AllyConn MissKimberlyHoppe",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "58d673f1-d8a0-4afa-9a88-39b890d1d97f",
+ "name": "AlvaHettinger AngelitaLeffler",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "bb141f5b-3871-45a8-9aec-c0e7caea97be",
+ "name": "JasperHodkiewicz PaytonBartonPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b8e10ae9-8d1b-4046-94c2-85d836c11819",
+ "name": "FreddyGrahamII ImeldaTrantow",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "db342b5a-a353-44cf-afa1-01106adfd4e2",
+ "name": "GavinBednar JosianeWelch",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "677457e3-fd7f-408e-939d-d3315037f00d",
+ "name": "DarrionMosciski NicoletteAufderhar",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b01bb2c0-a584-49fe-ab49-818a7fd693a5",
+ "name": "AbigaleOHara BernhardZiemann",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "af974075-2c2a-43ac-927b-2e3213b7fd56",
+ "name": "MissBreanneKunde JuliaLeannon",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "97d4fba3-fab5-4153-bf05-7466624ea6bd",
+ "name": "ImeldaFranecki LeolaWisozk",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "8680fef5-5731-4b7c-9baf-e984bdef572e",
+ "name": "VernerWunsch SallyHeathcote",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "0afab59f-2ac2-4187-8b9e-51a008c37f82",
+ "name": "TadDicki HeatherKertzmann",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "dc4ebae1-99e1-44fc-a8d8-6f45c90250d9",
+ "name": "DrKennithMetz BobbyWilderman",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "7aaa8b68-c6d9-4085-87d0-177e4252a09f",
+ "name": "BradenMosciskiII SterlingWilkinson",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "c51736bd-1110-43ba-a47a-72e90d12c7d1",
+ "name": "JakobKub MsDaneGulgowski",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "8d18316e-79e1-4a6e-889c-8151de8ac20f",
+ "name": "KyleeStamm AutumnBruenPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "18138725-f91c-4a12-a04d-43d73951559a",
+ "name": "NatHowell AbigaleAbshireSr",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "06803beb-8218-41db-ba3b-87ffabcfe59f",
+ "name": "BoydRosenbaum MrIsabellMedhurst",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "24c88514-5966-4977-b6a5-d14d71ed51a7",
+ "name": "DashawnSpencer EstellMcDermottMD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "3a0fe418-0d87-422b-b9d7-62350e4d6e06",
+ "name": "JaunitaHerzog WestleyKovacek",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "59b19985-f2ac-4a39-94a2-7a1b7d4a1589",
+ "name": "OrlandWehner WayneAufderhar",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "60a55a0f-33cf-49e3-8acb-d055f0d57b8d",
+ "name": "AntoniaDach MissArvelCrooks",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ccba202e-90d4-4204-a590-d0b385fff0b2",
+ "name": "MissEnricoSatterfield FredFeeney",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ffd059fc-86ca-4e5b-ae68-428fc9a7c151",
+ "name": "MrsLexusMayer ArianeSchroeder",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "846b2313-cf96-47a1-b747-28529f713f57",
+ "name": "MrAshleyGreen DedrickTurner",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "893a2561-be87-4bbe-b0a4-e3ebfdf66bce",
+ "name": "GillianTowne VicentaRobelDDS",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "d28c8e9f-958b-4d7d-bd27-bcbf7e40276c",
+ "name": "AnselCorkery WellingtonBalistreri",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1d6ebd32-5263-4d4c-b1cb-ece2c52d4639",
+ "name": "DrAshtynSchowalter RosaleeHuelPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "13782f1a-d49c-4e51-bffb-03c2ab5466b9",
+ "name": "DedrickCronin MaximusJones",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1847fa77-3c6c-45e6-a2fd-713c97b13bc8",
+ "name": "BillKoepp CristinaWisoky",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "127d364c-b608-452d-b9d2-870374669ac4",
+ "name": "JanieMarvin AbbieCollins",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "a94e2132-b59c-421f-8956-8da3da67edc3",
+ "name": "TrevorBogan MsJoanieHaag",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "996ca813-6994-4f08-ab55-a086d688f5a8",
+ "name": "AlainaDooleySr KianKulas",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f49925f2-3934-4bc2-9dbe-61ab3d2d0d2a",
+ "name": "BrennanKautzer BurdetteDonnelly",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "813e7f84-8c69-4a5b-97e4-7f3278d589b6",
+ "name": "BennieConn CelestinoHamill",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "9eeec010-029b-4cac-b4ea-a3ac6256bada",
+ "name": "ElsaRempel BurniceLabadie",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1b35f8f4-1c9c-4e72-bd54-052ab3b33745",
+ "name": "JoannieGlover ClarabelleLubowitz",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "6f732065-9e64-487c-88e3-713c49db7dd1",
+ "name": "LuciousMuller MiaPurdy",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "25c21fbf-ddcc-4224-86c6-8f8b3db64406",
+ "name": "KiarraVolkman DelphiaOReillyJr",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "60f9a9c1-2e1f-41e1-a55a-0ce0a3ccafff",
+ "name": "JordynOHara YasminDare",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "524299c3-ffec-473a-8b8a-5352f9bb1498",
+ "name": "ArmandMayerII RomaineOHara",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "91a0d1eb-b9ce-453f-ae01-04ab932b1d88",
+ "name": "PhoebeMertz ErichHand",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "d3db5d12-51fd-4267-9972-32d0e08ba5a0",
+ "name": "MrEdwardRyan MarieReynolds",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "0caf1682-79de-4e99-977b-6327defb04ae",
+ "name": "LilianaGibson JillianWintheiser",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "8d9319be-9435-476e-a7ee-26a3b4adb519",
+ "name": "DonnellJacobs MrEttieLakin",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "740e9322-d303-4d7a-b018-5a7ce6f228cf",
+ "name": "MrTrevorBauch MsTadMante",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ad014131-4ca9-4738-ab04-0abb21988925",
+ "name": "GoldaLeannon KevinBogisich",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b88a29c3-7d53-40db-a4cd-c74cfa383535",
+ "name": "MissPrincessStokes EstaHarris",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1047c75a-07f7-464f-9d68-abbe928721d8",
+ "name": "MissValeriePagac UniqueLowe",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "912d8c9c-ebc4-4c90-939d-a0022fac592f",
+ "name": "CarolyneYost KhalidHagenes",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "71df5db0-1b97-451e-8d4b-158780ce89b5",
+ "name": "TraceLarson PercyRempel",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "070fe31e-b2b9-4c40-ba0f-47bd2dea8bed",
+ "name": "DomenicaHeller MaryHamill",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1c6a4318-74dc-4978-9a6a-cf5218158d09",
+ "name": "LauraSchumm DomenicWindler",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1e10de58-6426-48c9-b32a-4068181cc902",
+ "name": "CristalFahey DrTheodoraAuer",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "fca4da6e-6307-4239-8369-4c823da291ea",
+ "name": "ElizaSatterfield JeramyThiel",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "c2007c10-50e2-45b2-b0ec-94d78fca7464",
+ "name": "DevenCruickshankDVM KoreyCollierSr",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "fb63837c-1621-4d5c-ae94-5dd4e966850a",
+ "name": "AmiyaFadel MonicaHyattPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "16031f9b-929a-4b2e-8dca-32ba9d011871",
+ "name": "RicoSchmeler YasmineBernier",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b07623eb-9064-4bab-b3ac-7f9ed56e70c3",
+ "name": "MittieHirthe DaneRutherford",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "0f4074d2-3f60-4afa-b67e-9aeb606fcf12",
+ "name": "DominiquePurdy TianaSchaefer",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "751d5835-a58c-4b86-a097-03e764d05e53",
+ "name": "GenevieveLegros ColleenCorwin",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "de428405-5be2-419f-b488-ad9f4c56fed5",
+ "name": "MallieWeimann MargaretteCarroll",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "0e3574ff-e190-4cc5-8424-d68a32f7814f",
+ "name": "RobertaKunde LillaKing",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "06d057b1-b13a-4f51-b2dd-02a3a688b414",
+ "name": "ValentinKoeppSr OlgaCronaPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f1afae38-4740-433c-b2e6-dcd415741052",
+ "name": "AnyaMorar DrMckenzieVeum",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "079c9ca0-74d3-4a95-9fef-e9e17a123873",
+ "name": "JasonRempel MrBlancaParisian",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "53c5a997-4dda-423f-a56e-b576b8c5fdb3",
+ "name": "MsLaverneShanahan GlenHeller",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "faa11323-ee4d-42d0-9400-955723e83d89",
+ "name": "MissVincenzoGreenholt TheodoraRath",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "94a1c9a4-a44d-4e52-badc-051c4084c193",
+ "name": "RyleySchusterII MarcelinaHillsI",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ebfcbb8f-5d10-42b8-9260-8a0e5eee8f29",
+ "name": "MarcelleMaggio MayeParker",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "a0c04c7d-1027-43f7-872b-f6150fb1970d",
+ "name": "TatumVandervort EarleneJohnson",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "e3fbc347-f15c-4bc5-9eb0-c10bf26da2dc",
+ "name": "MissCitlalliHamill NatalieKundeIV",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "241daa8a-3b79-4213-a17c-f3635e100401",
+ "name": "EverettSwift AyanaStroman",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ad2c50a9-0f56-403d-9df0-0edcece0c701",
+ "name": "RaoulCremin ReannaConsidine",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "187e18f6-32c8-437f-8292-fdbe09427d2b",
+ "name": "ClarabelleBeer JackieShields",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "e29044fe-45b3-41ae-ab00-eb9913e5daa6",
+ "name": "BrigitteRenner WillardLabadie",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "bccdc05a-c4d6-4b95-acc6-19f1a6c4abbd",
+ "name": "DavionJast ChanellePagac",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "67a02f30-f193-4490-9aec-ebf7c6619141",
+ "name": "FavianMarks EdaKirlin",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "672fc730-8e84-4e9e-97f5-c5dcd93557ba",
+ "name": "MaximusBatz RyleeMetzDDS",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f1317729-a366-4c19-9765-9f5b1d156f94",
+ "name": "ChadrickBergnaum RogersBerge",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "8ac936dc-3185-47ab-92ad-5b04e470da9f",
+ "name": "Mateo Antony",
+ "location": "Austin, TX",
+ "photo_url": null
+ }
+ ],
+ "bands": [
+ {
+ "id": "32df51d1-e323-4f02-80ba-63229b4861ed",
+ "name": "Martine Johnston",
+ "admin": false,
+ "photo_url": null,
+ "logo_url": null,
+ "genres": [
+ {
+ "id": "country",
+ "description": "Country"
+ },
+ {
+ "id": "hip hop",
+ "description": "Hip Hop"
+ },
+ {
+ "id": "techno",
+ "description": "Techno"
+ }
+ ]
+ },
+ {
+ "id": "74f50a3d-df82-47f5-8053-0281bc27403f",
+ "name": "JMam",
+ "admin": false,
+ "photo_url": null,
+ "logo_url": null,
+ "genres": [
+ {
+ "id": "blues",
+ "description": "Blues"
+ }
+ ]
+ },
+ {
+ "id": "fc24a1e0-f212-4418-98d9-f0514e0cc699",
+ "name": "Uturn",
+ "admin": false,
+ "photo_url": null,
+ "logo_url": null,
+ "genres": [
+ {
+ "id": "reggae",
+ "description": "Reggae"
+ }
+ ]
+ }
+ ],
+ "instruments": [],
+ "genres": [
+ {
+ "description": "A Cappella",
+ "id": "acapella"
+ },
+ {
+ "description": "African",
+ "id": "african"
+ },
+ {
+ "description": "Alternative Rock",
+ "id": "alternative rock"
+ },
+ {
+ "description": "Ambient",
+ "id": "ambient"
+ },
+ {
+ "description": "Drum & Bass",
+ "id": "drum & bass"
+ },
+ {
+ "description": "Electronic",
+ "id": "electronic"
+ },
+ {
+ "description": "Folk",
+ "id": "folk"
+ },
+ {
+ "description": "Funk",
+ "id": "funk"
+ },
+ {
+ "description": "Psychedelic",
+ "id": "psychedelic"
+ },
+ {
+ "description": "Punk",
+ "id": "punk"
+ },
+ {
+ "description": "R&B",
+ "id": "r&b"
+ },
+ {
+ "description": "Rap",
+ "id": "rap"
+ }
+ ],
+ "sessions": [
+ {
+ "id": "91de1362-bd56-44b2-a39b-8d7fb4d38fa5",
+ "description": "Private session set up just to test things out in the session interface by myself.",
+ "musician_access": false,
+ "approval_required": false,
+ "fan_access": false
+ }
+ ],
+ "teacher": {
+ "id": "5fd55476-320d-4532-8ad8-79f9a7d88e20",
+ "biography": "A teacher experienced teaching music for students from kindergarten to high school. ",
+ "created_at": "2022-10-20T13:35:33.210Z",
+ "introductory_video": null,
+ "lesson_duration_120": false,
+ "lesson_duration_30": false,
+ "lesson_duration_45": false,
+ "lesson_duration_60": true,
+ "lesson_duration_90": false,
+ "price_per_lesson_120_cents": null,
+ "price_per_lesson_30_cents": null,
+ "price_per_lesson_45_cents": null,
+ "price_per_lesson_60_cents": 10000,
+ "price_per_lesson_90_cents": null,
+ "price_per_month_120_cents": null,
+ "price_per_month_30_cents": null,
+ "price_per_month_45_cents": null,
+ "price_per_month_60_cents": null,
+ "price_per_month_90_cents": null,
+ "prices_per_lesson": true,
+ "prices_per_month": false,
+ "teaches_advanced": true,
+ "teaches_age_lower": 3,
+ "teaches_age_upper": 20,
+ "teaches_beginner": true,
+ "teaches_intermediate": true,
+ "updated_at": "2022-10-20T13:41:50.521Z",
+ "website": null,
+ "years_playing": 15,
+ "years_teaching": 10,
+ "teaches_test_drive": true,
+ "test_drives_per_week": 10,
+ "errors": {},
+ "profile_pct": "87.0",
+ "school_id": null,
+ "background_check_at": null,
+ "is_searchable": true,
+ "review_summary": null,
+ "school": null,
+ "recent_reviews": [],
+ "profile_pct_summary": {
+ "name_specified": true,
+ "experiences_teaching": true,
+ "experiences_education": true,
+ "experiences_award": true,
+ "has_stripe_account": null,
+ "has_teacher_bio": true,
+ "intro_video": false,
+ "years_teaching": true,
+ "years_playing": true,
+ "instruments_or_subject": true,
+ "genres": true,
+ "languages": true,
+ "teaches_ages_specified": true,
+ "teaching_level_specified": true,
+ "has_pricing_specified": true,
+ "pct": 87
+ },
+ "instruments": [
+ "acoustic guitar",
+ "drums",
+ "keyboard",
+ "voice",
+ "flute",
+ "piano"
+ ],
+ "subjects": [
+ "music-theory",
+ "composing",
+ "site-reading",
+ "guitar-ring"
+ ],
+ "genres": [
+ "classical",
+ "folk",
+ "jazz"
+ ],
+ "languages": [
+ "EN",
+ "FR"
+ ],
+ "experiences_teaching": [
+ {
+ "name": "Jr. Music Teacher",
+ "experience_type": "teaching",
+ "organization": "St. Peters College",
+ "start_year": 2005,
+ "end_year": 2010
+ }
+ ],
+ "experiences_education": [
+ {
+ "name": "Bacholor in Fine arts ",
+ "experience_type": "education",
+ "organization": "London Fine Arts University",
+ "start_year": 2012,
+ "end_year": 2015
+ }
+ ],
+ "experiences_award": [
+ {
+ "name": "Best Folk Music Singer",
+ "experience_type": "award",
+ "organization": "University of St. Gorge",
+ "start_year": 2020,
+ "end_year": null
+ }
+ ],
+ "has_rated_teacher": false
+ },
+ "owned_school_id": null,
+ "owned_retailer_id": null,
+ "geoiplocation": null,
+ "show_free_jamtrack": false,
+ "show_jamtrack_guide": true,
+ "mods": {},
+ "has_recurly_account": true,
+ "is_affiliate_partner": false,
+ "affiliate_referral_count": null,
+ "affiliate_earnings": null,
+ "last_jam_audio_latency": 5
+ },
+ "timestamp": "2026-01-20T10:15:56.227Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "timestamp": "2026-01-20T10:15:56.247Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/teacher_distributions?per_page=20&page=1",
+ "timestamp": "2026-01-20T10:15:56.247Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/countries",
+ "body": {
+ "countriesx": [
+ {
+ "countrycode": "US",
+ "countryname": "United States"
+ }
+ ]
+ },
+ "timestamp": "2026-01-20T10:15:56.247Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/shopping_carts?time=1768904155592",
+ "body": [],
+ "timestamp": "2026-01-20T10:15:56.247Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "body": [
+ {
+ "id": "acapella",
+ "description": "A Cappella"
+ },
+ {
+ "id": "african",
+ "description": "African"
+ },
+ {
+ "id": "alternative rock",
+ "description": "Alternative Rock"
+ },
+ {
+ "id": "ambient",
+ "description": "Ambient"
+ },
+ {
+ "id": "americana",
+ "description": "Americana"
+ },
+ {
+ "id": "asian",
+ "description": "Asian"
+ },
+ {
+ "id": "avante-garde",
+ "description": "Avante-Garde"
+ },
+ {
+ "id": "bluegrass",
+ "description": "Bluegrass"
+ },
+ {
+ "id": "blues",
+ "description": "Blues"
+ },
+ {
+ "id": "breakbeat",
+ "description": "Breakbeat"
+ },
+ {
+ "id": "celtic",
+ "description": "Celtic"
+ },
+ {
+ "id": "classical",
+ "description": "Classical"
+ },
+ {
+ "id": "country",
+ "description": "Country"
+ },
+ {
+ "id": "creole",
+ "description": "Creole"
+ },
+ {
+ "id": "dance",
+ "description": "Dance"
+ },
+ {
+ "id": "disco",
+ "description": "Disco"
+ },
+ {
+ "id": "downtempo",
+ "description": "Downtempo"
+ },
+ {
+ "id": "drum & bass",
+ "description": "Drum & Bass"
+ },
+ {
+ "id": "electronic",
+ "description": "Electronic"
+ },
+ {
+ "id": "folk",
+ "description": "Folk"
+ },
+ {
+ "id": "funk",
+ "description": "Funk"
+ },
+ {
+ "id": "hard rock",
+ "description": "Hard Rock"
+ },
+ {
+ "id": "hip hop",
+ "description": "Hip Hop"
+ },
+ {
+ "id": "holiday",
+ "description": "Holiday"
+ },
+ {
+ "id": "house",
+ "description": "House"
+ },
+ {
+ "id": "industrial",
+ "description": "Industrial"
+ },
+ {
+ "id": "jazz",
+ "description": "Jazz"
+ },
+ {
+ "id": "kids",
+ "description": "Kids"
+ },
+ {
+ "id": "latin",
+ "description": "Latin"
+ },
+ {
+ "id": "metal",
+ "description": "Metal"
+ },
+ {
+ "id": "musical",
+ "description": "Musical"
+ },
+ {
+ "id": "oldies",
+ "description": "Oldies"
+ },
+ {
+ "id": "other",
+ "description": "Other"
+ },
+ {
+ "id": "pop",
+ "description": "Pop"
+ },
+ {
+ "id": "psychedelic",
+ "description": "Psychedelic"
+ },
+ {
+ "id": "punk",
+ "description": "Punk"
+ },
+ {
+ "id": "r&b",
+ "description": "R&B"
+ },
+ {
+ "id": "rap",
+ "description": "Rap"
+ },
+ {
+ "id": "reggae",
+ "description": "Reggae"
+ },
+ {
+ "id": "religious",
+ "description": "Religious"
+ },
+ {
+ "id": "rock",
+ "description": "Rock"
+ },
+ {
+ "id": "ska",
+ "description": "Ska"
+ },
+ {
+ "id": "soft rock",
+ "description": "Soft Rock"
+ },
+ {
+ "id": "soul",
+ "description": "Soul"
+ },
+ {
+ "id": "tv & movie soundtrack",
+ "description": "TV & Movie Soundtrack"
+ },
+ {
+ "id": "techno",
+ "description": "Techno"
+ },
+ {
+ "id": "traditional",
+ "description": "Traditional"
+ },
+ {
+ "id": "trance",
+ "description": "Trance"
+ },
+ {
+ "id": "world",
+ "description": "World"
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:56.251Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "timestamp": "2026-01-20T10:15:56.251Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "timestamp": "2026-01-20T10:15:56.254Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "body": [
+ {
+ "id": "a09f9a7e-afb7-489d-870d-e13a336e0b97",
+ "first_name": "Seth",
+ "last_name": "Call",
+ "name": "Seth Call",
+ "location": "Boston, MA",
+ "city": "Boston",
+ "state": "MA",
+ "country": "US",
+ "musician": true,
+ "email": "nuwan+6@jamkazam.com",
+ "online": false,
+ "photo_url": "https://s3.amazonaws.com/jamkazam-dev-public/avatars/a09f9a7e-afb7-489d-870d-e13a336e0b97/8EfyNy2cQPaxEsypRviW_IMG_20231224_133203_HDR.jpg"
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:56.262Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "body": {
+ "next": null,
+ "jamtracks": [
+ {
+ "id": "1",
+ "name": "Back in Black",
+ "description": "This is a JamTrack audio file for use exclusively with the JamKazam service. This JamTrack is a high quality cover of the AC DC song \"Back in Black\".",
+ "original_artist": "AC DC",
+ "version": "0",
+ "year": null,
+ "duration": 221,
+ "allow_free": true,
+ "genres": [
+ {
+ "id": "pop",
+ "description": "Pop"
+ },
+ {
+ "id": "rock",
+ "description": "Rock"
+ }
+ ],
+ "tracks": [
+ {
+ "id": "103dea4d-f2a3-4414-8efe-d2ca378dda60",
+ "part": "Master Mix",
+ "instrument": {
+ "id": "computer",
+ "description": "Computer",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Master",
+ "position": 1000,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Master%20Mix-44100-preview-e9a5a63f34b4d523ee1842fff31f88ce.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Master%20Mix-44100-preview-25fcba7ace7086e3cb6b97d7e33ba72e.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Master%20Mix-44100-preview-9f0b072ed9f4b546e170fcdfb302137e.mp3"
+ },
+ {
+ "id": "2755cbdd-0476-4f3b-9ba1-e2da561ddb4e",
+ "part": "Lead",
+ "instrument": {
+ "id": "voice",
+ "description": "Voice",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 1,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Vocal%20-%20Lead-44100-preview-d35c328fc3936dad9a79fe102dc72950.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Vocal%20-%20Lead-44100-preview-b97b37651eae352fae3b3060918c7bcb.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Vocal%20-%20Lead-44100-preview-d35c328fc3936dad9a79fe102dc72950.aac"
+ },
+ {
+ "id": "0db7c4e1-5e8d-43fe-bd35-98acd8f68b26",
+ "part": "Drums",
+ "instrument": {
+ "id": "drums",
+ "description": "Drums",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 2,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Drums-44100-preview-03aadceb966caf40b96334bdd00234f6.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Drums-44100-preview-854914e3e0d6fdc5f0794325b0ecaead.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Drums-44100-preview-03aadceb966caf40b96334bdd00234f6.aac"
+ },
+ {
+ "id": "2cc79ab6-dab8-4905-85e6-0df5f8e087f1",
+ "part": "Bass",
+ "instrument": {
+ "id": "bass guitar",
+ "description": "Bass Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 3,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Bass-44100-preview-61c334ac87f811bd010ed3a910764c2e.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Bass-44100-preview-4066dafd7b72e9993b0c0fe1dba2b332.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Bass-44100-preview-61c334ac87f811bd010ed3a910764c2e.aac"
+ },
+ {
+ "id": "ed1d3487-3b32-442f-9c76-8a36fe3bb643",
+ "part": "Solo",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 4,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Solo-44100-preview-e9fe8572a9ac1022762642cbd92b3c34.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Solo-44100-preview-5fb058042254206cfa9fb4dcb0310b2c.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Solo-44100-preview-e9fe8572a9ac1022762642cbd92b3c34.aac"
+ },
+ {
+ "id": "f4ce7c91-7542-4e03-8fc2-68b31683d33e",
+ "part": "Rhythm 1",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 5,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%201-44100-preview-6b498479823d4131a01fa535817d5eab.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%201-44100-preview-f4cbb31dbde3e1a3e6012730a7e0e10f.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%201-44100-preview-6b498479823d4131a01fa535817d5eab.aac"
+ },
+ {
+ "id": "2d96c7ec-59f1-4d56-8a7f-7f4c75a0ccef",
+ "part": "Rhythm 2",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 6,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%202-44100-preview-a626d7c632560f6737e1b6024141289e.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%202-44100-preview-06a0e5af451f001f3465992efcd34ec0.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%202-44100-preview-a626d7c632560f6737e1b6024141289e.aac"
+ },
+ {
+ "id": "fce018ca-c897-4137-aa10-ef56a8e1831f",
+ "part": "Intro Scrapes",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 7,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Intro%20Scrapes-44100-preview-0ddfaa7154e9ba35d05d60477d5dd3e9.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Intro%20Scrapes-44100-preview-f53ce3c5f9dcf81af51560f52635fbb0.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Intro%20Scrapes-44100-preview-0ddfaa7154e9ba35d05d60477d5dd3e9.aac"
+ },
+ {
+ "id": "c9b3e0a8-4db0-4d0f-9769-398a6d56506e",
+ "part": "Main",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 8,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Main-44100-preview-234a224f75a97d7ff8f55442ece6fcde.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Main-44100-preview-828c9691f5435dea1c90182fa2618c9b.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Main-44100-preview-234a224f75a97d7ff8f55442ece6fcde.aac"
+ },
+ {
+ "id": "28c3df07-2a88-45a9-9ae6-3399a5d2eb20",
+ "part": "Sound FX",
+ "instrument": {
+ "id": "computer",
+ "description": "Computer",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 9,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Sound%20Effects-44100-preview-6c859c73036cd55bceb65f19f2d2f2f3.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Sound%20Effects-44100-preview-f840d8df4c7388f776477139025ee712.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Sound%20Effects-44100-preview-6c859c73036cd55bceb65f19f2d2f2f3.aac"
+ }
+ ],
+ "jmep": null,
+ "can_download": true,
+ "jam_track_right_id": 1428,
+ "purchased_at": 1752755050,
+ "last_mixdown_id": null,
+ "last_stem_id": null,
+ "mixdowns": [
+ {
+ "id": "5f24403f-3cfa-44f5-b36e-52b2c3c66af8",
+ "name": "db",
+ "description": null,
+ "jam_track_id": "1",
+ "packages": [
+ {
+ "id": "23b10fa0-195d-4ad5-a5a7-2cba6b8c1451",
+ "jam_track_mixdown_id": "5f24403f-3cfa-44f5-b36e-52b2c3c66af8",
+ "file_type": "mp3",
+ "sample_rate": 48,
+ "encrypt_type": null,
+ "error_count": 0,
+ "error_reason": null,
+ "error_detail": null,
+ "signing_state": "SIGNED",
+ "packaging_steps": 10,
+ "current_packaging_step": 8,
+ "version": "1"
+ }
+ ],
+ "created_at": 1753866891,
+ "settings": {
+ "count-in": false,
+ "tracks": [
+ {
+ "id": "2755cbdd-0476-4f3b-9ba1-e2da561ddb4e",
+ "mute": false
+ },
+ {
+ "id": "0db7c4e1-5e8d-43fe-bd35-98acd8f68b26",
+ "mute": true
+ },
+ {
+ "id": "2cc79ab6-dab8-4905-85e6-0df5f8e087f1",
+ "mute": true
+ },
+ {
+ "id": "ed1d3487-3b32-442f-9c76-8a36fe3bb643",
+ "mute": false
+ },
+ {
+ "id": "f4ce7c91-7542-4e03-8fc2-68b31683d33e",
+ "mute": false
+ },
+ {
+ "id": "2d96c7ec-59f1-4d56-8a7f-7f4c75a0ccef",
+ "mute": false
+ },
+ {
+ "id": "fce018ca-c897-4137-aa10-ef56a8e1831f",
+ "mute": false
+ },
+ {
+ "id": "c9b3e0a8-4db0-4d0f-9769-398a6d56506e",
+ "mute": false
+ },
+ {
+ "id": "28c3df07-2a88-45a9-9ae6-3399a5d2eb20",
+ "mute": false
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "timestamp": "2026-01-20T10:15:56.262Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/languages",
+ "body": [
+ {
+ "id": "EN",
+ "description": "English"
+ },
+ {
+ "id": "AF",
+ "description": "Afrikanns"
+ },
+ {
+ "id": "SQ",
+ "description": "Albanian"
+ },
+ {
+ "id": "AR",
+ "description": "Arabic"
+ },
+ {
+ "id": "HY",
+ "description": "Armenian"
+ },
+ {
+ "id": "EU",
+ "description": "Basque"
+ },
+ {
+ "id": "BN",
+ "description": "Bengali"
+ },
+ {
+ "id": "BG",
+ "description": "Bulgarian"
+ },
+ {
+ "id": "KM",
+ "description": "Cambodian"
+ },
+ {
+ "id": "CA",
+ "description": "Catalan"
+ },
+ {
+ "id": "ZH",
+ "description": "Chinese (Mandarin)"
+ },
+ {
+ "id": "HR",
+ "description": "Croation"
+ },
+ {
+ "id": "CS",
+ "description": "Czech"
+ },
+ {
+ "id": "DA",
+ "description": "Danish"
+ },
+ {
+ "id": "NL",
+ "description": "Dutch"
+ },
+ {
+ "id": "ET",
+ "description": "Estonian"
+ },
+ {
+ "id": "FJ",
+ "description": "Fiji"
+ },
+ {
+ "id": "FI",
+ "description": "Finnish"
+ },
+ {
+ "id": "FR",
+ "description": "French"
+ },
+ {
+ "id": "KA",
+ "description": "Georgian"
+ },
+ {
+ "id": "DE",
+ "description": "German"
+ },
+ {
+ "id": "EL",
+ "description": "Greek"
+ },
+ {
+ "id": "GU",
+ "description": "Gujarati"
+ },
+ {
+ "id": "HE",
+ "description": "Hebrew"
+ },
+ {
+ "id": "HI",
+ "description": "Hindi"
+ },
+ {
+ "id": "HU",
+ "description": "Hungarian"
+ },
+ {
+ "id": "IS",
+ "description": "Icelandic"
+ },
+ {
+ "id": "ID",
+ "description": "Indonesian"
+ },
+ {
+ "id": "GA",
+ "description": "Irish"
+ },
+ {
+ "id": "IT",
+ "description": "Italian"
+ },
+ {
+ "id": "JA",
+ "description": "Japanese"
+ },
+ {
+ "id": "JW",
+ "description": "Javanese"
+ },
+ {
+ "id": "KO",
+ "description": "Korean"
+ },
+ {
+ "id": "LA",
+ "description": "Latin"
+ },
+ {
+ "id": "LV",
+ "description": "Latvian"
+ },
+ {
+ "id": "LT",
+ "description": "Lithuanian"
+ },
+ {
+ "id": "MK",
+ "description": "Macedonian"
+ },
+ {
+ "id": "MS",
+ "description": "Malay"
+ },
+ {
+ "id": "ML",
+ "description": "Malayalam"
+ },
+ {
+ "id": "MT",
+ "description": "Maltese"
+ },
+ {
+ "id": "MI",
+ "description": "Maori"
+ },
+ {
+ "id": "MR",
+ "description": "Marathi"
+ },
+ {
+ "id": "MN",
+ "description": "Mongolian"
+ },
+ {
+ "id": "NE",
+ "description": "Nepali"
+ },
+ {
+ "id": "NO",
+ "description": "Norwegian"
+ },
+ {
+ "id": "FA",
+ "description": "Persian"
+ },
+ {
+ "id": "PL",
+ "description": "Polish"
+ },
+ {
+ "id": "PT",
+ "description": "Portuguese"
+ },
+ {
+ "id": "PA",
+ "description": "Punjabi"
+ },
+ {
+ "id": "QU",
+ "description": "Quechua"
+ },
+ {
+ "id": "RO",
+ "description": "Romanian"
+ },
+ {
+ "id": "RU",
+ "description": "Russian"
+ },
+ {
+ "id": "SM",
+ "description": "Samoan"
+ },
+ {
+ "id": "SR",
+ "description": "Serbian"
+ },
+ {
+ "id": "SK",
+ "description": "Slovak"
+ },
+ {
+ "id": "SL",
+ "description": "Slovenian"
+ },
+ {
+ "id": "ES",
+ "description": "Spanish"
+ },
+ {
+ "id": "SW",
+ "description": "Swahili"
+ },
+ {
+ "id": "SV",
+ "description": "Swedish "
+ },
+ {
+ "id": "TA",
+ "description": "Tamil"
+ },
+ {
+ "id": "TT",
+ "description": "Tatar"
+ },
+ {
+ "id": "TE",
+ "description": "Telugu"
+ },
+ {
+ "id": "TH",
+ "description": "Thai"
+ },
+ {
+ "id": "BO",
+ "description": "Tibetan"
+ },
+ {
+ "id": "TO",
+ "description": "Tonga"
+ },
+ {
+ "id": "TR",
+ "description": "Turkish"
+ },
+ {
+ "id": "UK",
+ "description": "Ukranian"
+ },
+ {
+ "id": "UR",
+ "description": "Urdu"
+ },
+ {
+ "id": "UZ",
+ "description": "Uzbek"
+ },
+ {
+ "id": "VI",
+ "description": "Vietnamese"
+ },
+ {
+ "id": "CY",
+ "description": "Welsh"
+ },
+ {
+ "id": "XH",
+ "description": "Xhosa"
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:56.268Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/subjects",
+ "body": [
+ {
+ "id": "ableton-live",
+ "description": "Ableton Live"
+ },
+ {
+ "id": "amplitube",
+ "description": "AmpliTube"
+ },
+ {
+ "id": "apple-logic-pro",
+ "description": "Apple Logic Pro"
+ },
+ {
+ "id": "arranging",
+ "description": "Arranging"
+ },
+ {
+ "id": "composing",
+ "description": "Composition"
+ },
+ {
+ "id": "conducting",
+ "description": "Conducting"
+ },
+ {
+ "id": "cubase",
+ "description": "Cubase"
+ },
+ {
+ "id": "ear-training",
+ "description": "Ear Training"
+ },
+ {
+ "id": "fl-studio",
+ "description": "FL Studio"
+ },
+ {
+ "id": "film-scoring",
+ "description": "Film Scoring"
+ },
+ {
+ "id": "garageband",
+ "description": "GarageBand"
+ },
+ {
+ "id": "guitar-ring",
+ "description": "Guitar Rig"
+ },
+ {
+ "id": "harmony",
+ "description": "Harmony"
+ },
+ {
+ "id": "improvisation",
+ "description": "Improvisation"
+ },
+ {
+ "id": "instrument-repair",
+ "description": "Instrument Repair"
+ },
+ {
+ "id": "line-6-pod",
+ "description": "Line 6 Pod"
+ },
+ {
+ "id": "music-business",
+ "description": "Music Business"
+ },
+ {
+ "id": "music-theory",
+ "description": "Music Theory"
+ },
+ {
+ "id": "music-therapy",
+ "description": "Music Therapy"
+ },
+ {
+ "id": "presonus-studio-one",
+ "description": "PreSonus Studio One"
+ },
+ {
+ "id": "pro-tools",
+ "description": "Pro Tools"
+ },
+ {
+ "id": "reaper",
+ "description": "Reaper"
+ },
+ {
+ "id": "reason",
+ "description": "Reason"
+ },
+ {
+ "id": "recording",
+ "description": "Recording & Production"
+ },
+ {
+ "id": "site-reading",
+ "description": "Sight Reading"
+ },
+ {
+ "id": "sonar",
+ "description": "Sonar"
+ },
+ {
+ "id": "songwriting",
+ "description": "Songwriting"
+ },
+ {
+ "id": "video-game-scoring",
+ "description": "Video Game Scoring"
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:56.298Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/chat?type=CHAT_MESSAGE&limit=20&page=0&channel=global",
+ "body": {
+ "next": null,
+ "chats": [
+ {
+ "id": "d6e478eb-c2a1-4495-b00a-84fa01aefbb6",
+ "message": "qq",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-21T07:39:21.357Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "54baff3d-b104-43aa-8747-3ca3cbba3e95",
+ "message": "tt",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-21T07:38:20.820Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "c5b51493-01d9-4e42-8daa-bf3948b858cc",
+ "message": "lk",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-20T22:44:50.270Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "07f67a95-f275-4d39-bae4-1b9b42141d91",
+ "message": "uu",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-20T22:43:05.706Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "2802579a-ed5c-4694-862b-f75f764901b6",
+ "message": "aaaa",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-20T16:25:51.294Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "cbfc23d4-02d7-4adb-8471-4dc0760ee157",
+ "message": "ssss",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-20T16:20:48.827Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "464b5f72-43ad-49bc-a984-4484fd766fca",
+ "message": "kkk",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-20T16:15:57.397Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "b5c2585a-aa76-4084-ba8a-ea63949d61b5",
+ "message": "iiii",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-20T10:27:57.145Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "f7599110-f15b-4a62-90e9-e1c42fd0b546",
+ "message": "dfgdfgdfg",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-20T09:20:10.139Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "9bfdc494-cd3a-496b-b958-102c2027890c",
+ "message": "This is nuwan",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2023-12-09T09:59:22.187Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ },
+ {
+ "id": "a894f396-e896-40f0-b626-d899c1ead63f",
+ "message": "hi test 1",
+ "user_id": "b2022a23-84b1-4475-a7bb-a0f87064925a",
+ "created_at": "2021-09-01T18:44:36.090Z",
+ "channel": "global",
+ "lesson_session_id": null,
+ "purpose": null,
+ "music_notation": null,
+ "claimed_recording": null,
+ "user": {
+ "name": "Anonymous"
+ }
+ }
+ ]
+ },
+ "timestamp": "2026-01-20T10:15:56.303Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/sessions/scheduled?",
+ "body": [],
+ "timestamp": "2026-01-20T10:15:56.303Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "timestamp": "2026-01-20T10:15:56.305Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "body": [
+ {
+ "id": "accordion",
+ "description": "Accordion",
+ "popularity": 2
+ },
+ {
+ "id": "acoustic guitar",
+ "description": "Acoustic Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "bagpipes",
+ "description": "Bagpipes",
+ "popularity": 1
+ },
+ {
+ "id": "banjo",
+ "description": "Banjo",
+ "popularity": 2
+ },
+ {
+ "id": "bass guitar",
+ "description": "Bass Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "bassoon",
+ "description": "Bassoon",
+ "popularity": 1
+ },
+ {
+ "id": "cello",
+ "description": "Cello",
+ "popularity": 1
+ },
+ {
+ "id": "charango",
+ "description": "Charango",
+ "popularity": 1
+ },
+ {
+ "id": "clarinet",
+ "description": "Clarinet",
+ "popularity": 2
+ },
+ {
+ "id": "computer",
+ "description": "Computer",
+ "popularity": 3
+ },
+ {
+ "id": "dobro",
+ "description": "Dobro",
+ "popularity": 1
+ },
+ {
+ "id": "double bass",
+ "description": "Double Bass",
+ "popularity": 2
+ },
+ {
+ "id": "drums",
+ "description": "Drums",
+ "popularity": 3
+ },
+ {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "euphonium",
+ "description": "Euphonium",
+ "popularity": 1
+ },
+ {
+ "id": "flugelhorn",
+ "description": "Flugelhorn",
+ "popularity": 1
+ },
+ {
+ "id": "flute",
+ "description": "Flute",
+ "popularity": 2
+ },
+ {
+ "id": "french horn",
+ "description": "French Horn",
+ "popularity": 1
+ },
+ {
+ "id": "glockenspiel",
+ "description": "Glockenspiel",
+ "popularity": 1
+ },
+ {
+ "id": "harmonica",
+ "description": "Harmonica",
+ "popularity": 2
+ },
+ {
+ "id": "harp",
+ "description": "Harp",
+ "popularity": 1
+ },
+ {
+ "id": "keyboard",
+ "description": "Keyboard",
+ "popularity": 3
+ },
+ {
+ "id": "mandolin",
+ "description": "Mandolin",
+ "popularity": 1
+ },
+ {
+ "id": "oboe",
+ "description": "Oboe",
+ "popularity": 1
+ },
+ {
+ "id": "orchestra",
+ "description": "Orchestra",
+ "popularity": 1
+ },
+ {
+ "id": "other",
+ "description": "Other",
+ "popularity": 1
+ },
+ {
+ "id": "piano",
+ "description": "Piano",
+ "popularity": 2
+ },
+ {
+ "id": "piccolo",
+ "description": "Piccolo",
+ "popularity": 1
+ },
+ {
+ "id": "saxophone",
+ "description": "Saxophone",
+ "popularity": 2
+ },
+ {
+ "id": "sitar",
+ "description": "Sitar",
+ "popularity": 1
+ },
+ {
+ "id": "steel guitar",
+ "description": "Steel Guitar",
+ "popularity": 1
+ },
+ {
+ "id": "theremin",
+ "description": "Theremin",
+ "popularity": 1
+ },
+ {
+ "id": "timpani",
+ "description": "Timpani",
+ "popularity": 1
+ },
+ {
+ "id": "trombone",
+ "description": "Trombone",
+ "popularity": 2
+ },
+ {
+ "id": "trumpet",
+ "description": "Trumpet",
+ "popularity": 2
+ },
+ {
+ "id": "tuba",
+ "description": "Tuba",
+ "popularity": 1
+ },
+ {
+ "id": "ukulele",
+ "description": "Ukulele",
+ "popularity": 1
+ },
+ {
+ "id": "viola",
+ "description": "Viola",
+ "popularity": 1
+ },
+ {
+ "id": "violin",
+ "description": "Violin",
+ "popularity": 2
+ },
+ {
+ "id": "vocoder",
+ "description": "Vocoder",
+ "popularity": 1
+ },
+ {
+ "id": "voice",
+ "description": "Voice",
+ "popularity": 3
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:56.306Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "body": [
+ {
+ "id": "acapella",
+ "description": "A Cappella"
+ },
+ {
+ "id": "african",
+ "description": "African"
+ },
+ {
+ "id": "alternative rock",
+ "description": "Alternative Rock"
+ },
+ {
+ "id": "ambient",
+ "description": "Ambient"
+ },
+ {
+ "id": "americana",
+ "description": "Americana"
+ },
+ {
+ "id": "asian",
+ "description": "Asian"
+ },
+ {
+ "id": "avante-garde",
+ "description": "Avante-Garde"
+ },
+ {
+ "id": "bluegrass",
+ "description": "Bluegrass"
+ },
+ {
+ "id": "blues",
+ "description": "Blues"
+ },
+ {
+ "id": "breakbeat",
+ "description": "Breakbeat"
+ },
+ {
+ "id": "celtic",
+ "description": "Celtic"
+ },
+ {
+ "id": "classical",
+ "description": "Classical"
+ },
+ {
+ "id": "country",
+ "description": "Country"
+ },
+ {
+ "id": "creole",
+ "description": "Creole"
+ },
+ {
+ "id": "dance",
+ "description": "Dance"
+ },
+ {
+ "id": "disco",
+ "description": "Disco"
+ },
+ {
+ "id": "downtempo",
+ "description": "Downtempo"
+ },
+ {
+ "id": "drum & bass",
+ "description": "Drum & Bass"
+ },
+ {
+ "id": "electronic",
+ "description": "Electronic"
+ },
+ {
+ "id": "folk",
+ "description": "Folk"
+ },
+ {
+ "id": "funk",
+ "description": "Funk"
+ },
+ {
+ "id": "hard rock",
+ "description": "Hard Rock"
+ },
+ {
+ "id": "hip hop",
+ "description": "Hip Hop"
+ },
+ {
+ "id": "holiday",
+ "description": "Holiday"
+ },
+ {
+ "id": "house",
+ "description": "House"
+ },
+ {
+ "id": "industrial",
+ "description": "Industrial"
+ },
+ {
+ "id": "jazz",
+ "description": "Jazz"
+ },
+ {
+ "id": "kids",
+ "description": "Kids"
+ },
+ {
+ "id": "latin",
+ "description": "Latin"
+ },
+ {
+ "id": "metal",
+ "description": "Metal"
+ },
+ {
+ "id": "musical",
+ "description": "Musical"
+ },
+ {
+ "id": "oldies",
+ "description": "Oldies"
+ },
+ {
+ "id": "other",
+ "description": "Other"
+ },
+ {
+ "id": "pop",
+ "description": "Pop"
+ },
+ {
+ "id": "psychedelic",
+ "description": "Psychedelic"
+ },
+ {
+ "id": "punk",
+ "description": "Punk"
+ },
+ {
+ "id": "r&b",
+ "description": "R&B"
+ },
+ {
+ "id": "rap",
+ "description": "Rap"
+ },
+ {
+ "id": "reggae",
+ "description": "Reggae"
+ },
+ {
+ "id": "religious",
+ "description": "Religious"
+ },
+ {
+ "id": "rock",
+ "description": "Rock"
+ },
+ {
+ "id": "ska",
+ "description": "Ska"
+ },
+ {
+ "id": "soft rock",
+ "description": "Soft Rock"
+ },
+ {
+ "id": "soul",
+ "description": "Soul"
+ },
+ {
+ "id": "tv & movie soundtrack",
+ "description": "TV & Movie Soundtrack"
+ },
+ {
+ "id": "techno",
+ "description": "Techno"
+ },
+ {
+ "id": "traditional",
+ "description": "Traditional"
+ },
+ {
+ "id": "trance",
+ "description": "Trance"
+ },
+ {
+ "id": "world",
+ "description": "World"
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:56.308Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "body": [
+ {
+ "id": "a09f9a7e-afb7-489d-870d-e13a336e0b97",
+ "first_name": "Seth",
+ "last_name": "Call",
+ "name": "Seth Call",
+ "location": "Boston, MA",
+ "city": "Boston",
+ "state": "MA",
+ "country": "US",
+ "musician": true,
+ "email": "nuwan+6@jamkazam.com",
+ "online": false,
+ "photo_url": "https://s3.amazonaws.com/jamkazam-dev-public/avatars/a09f9a7e-afb7-489d-870d-e13a336e0b97/8EfyNy2cQPaxEsypRviW_IMG_20231224_133203_HDR.jpg"
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:56.367Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications?offset=0&limit=20",
+ "body": [],
+ "timestamp": "2026-01-20T10:15:56.367Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/regions?country=US",
+ "body": {
+ "regions": [
+ {
+ "region": "TN",
+ "name": null
+ },
+ {
+ "region": "ME",
+ "name": null
+ },
+ {
+ "region": "MA",
+ "name": null
+ },
+ {
+ "region": "TX",
+ "name": null
+ },
+ {
+ "region": "OK",
+ "name": null
+ },
+ {
+ "region": "WA",
+ "name": null
+ },
+ {
+ "region": "CO",
+ "name": null
+ },
+ {
+ "region": "CA",
+ "name": null
+ },
+ {
+ "region": "AR",
+ "name": null
+ },
+ {
+ "region": "FL",
+ "name": null
+ },
+ {
+ "region": "OR",
+ "name": null
+ }
+ ]
+ },
+ "timestamp": "2026-01-20T10:15:56.367Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "body": [
+ {
+ "id": "accordion",
+ "description": "Accordion",
+ "popularity": 2
+ },
+ {
+ "id": "acoustic guitar",
+ "description": "Acoustic Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "bagpipes",
+ "description": "Bagpipes",
+ "popularity": 1
+ },
+ {
+ "id": "banjo",
+ "description": "Banjo",
+ "popularity": 2
+ },
+ {
+ "id": "bass guitar",
+ "description": "Bass Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "bassoon",
+ "description": "Bassoon",
+ "popularity": 1
+ },
+ {
+ "id": "cello",
+ "description": "Cello",
+ "popularity": 1
+ },
+ {
+ "id": "charango",
+ "description": "Charango",
+ "popularity": 1
+ },
+ {
+ "id": "clarinet",
+ "description": "Clarinet",
+ "popularity": 2
+ },
+ {
+ "id": "computer",
+ "description": "Computer",
+ "popularity": 3
+ },
+ {
+ "id": "dobro",
+ "description": "Dobro",
+ "popularity": 1
+ },
+ {
+ "id": "double bass",
+ "description": "Double Bass",
+ "popularity": 2
+ },
+ {
+ "id": "drums",
+ "description": "Drums",
+ "popularity": 3
+ },
+ {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "euphonium",
+ "description": "Euphonium",
+ "popularity": 1
+ },
+ {
+ "id": "flugelhorn",
+ "description": "Flugelhorn",
+ "popularity": 1
+ },
+ {
+ "id": "flute",
+ "description": "Flute",
+ "popularity": 2
+ },
+ {
+ "id": "french horn",
+ "description": "French Horn",
+ "popularity": 1
+ },
+ {
+ "id": "glockenspiel",
+ "description": "Glockenspiel",
+ "popularity": 1
+ },
+ {
+ "id": "harmonica",
+ "description": "Harmonica",
+ "popularity": 2
+ },
+ {
+ "id": "harp",
+ "description": "Harp",
+ "popularity": 1
+ },
+ {
+ "id": "keyboard",
+ "description": "Keyboard",
+ "popularity": 3
+ },
+ {
+ "id": "mandolin",
+ "description": "Mandolin",
+ "popularity": 1
+ },
+ {
+ "id": "oboe",
+ "description": "Oboe",
+ "popularity": 1
+ },
+ {
+ "id": "orchestra",
+ "description": "Orchestra",
+ "popularity": 1
+ },
+ {
+ "id": "other",
+ "description": "Other",
+ "popularity": 1
+ },
+ {
+ "id": "piano",
+ "description": "Piano",
+ "popularity": 2
+ },
+ {
+ "id": "piccolo",
+ "description": "Piccolo",
+ "popularity": 1
+ },
+ {
+ "id": "saxophone",
+ "description": "Saxophone",
+ "popularity": 2
+ },
+ {
+ "id": "sitar",
+ "description": "Sitar",
+ "popularity": 1
+ },
+ {
+ "id": "steel guitar",
+ "description": "Steel Guitar",
+ "popularity": 1
+ },
+ {
+ "id": "theremin",
+ "description": "Theremin",
+ "popularity": 1
+ },
+ {
+ "id": "timpani",
+ "description": "Timpani",
+ "popularity": 1
+ },
+ {
+ "id": "trombone",
+ "description": "Trombone",
+ "popularity": 2
+ },
+ {
+ "id": "trumpet",
+ "description": "Trumpet",
+ "popularity": 2
+ },
+ {
+ "id": "tuba",
+ "description": "Tuba",
+ "popularity": 1
+ },
+ {
+ "id": "ukulele",
+ "description": "Ukulele",
+ "popularity": 1
+ },
+ {
+ "id": "viola",
+ "description": "Viola",
+ "popularity": 1
+ },
+ {
+ "id": "violin",
+ "description": "Violin",
+ "popularity": 2
+ },
+ {
+ "id": "vocoder",
+ "description": "Vocoder",
+ "popularity": 1
+ },
+ {
+ "id": "voice",
+ "description": "Voice",
+ "popularity": 3
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:56.367Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/genres",
+ "body": [
+ {
+ "id": "acapella",
+ "description": "A Cappella"
+ },
+ {
+ "id": "african",
+ "description": "African"
+ },
+ {
+ "id": "alternative rock",
+ "description": "Alternative Rock"
+ },
+ {
+ "id": "ambient",
+ "description": "Ambient"
+ },
+ {
+ "id": "americana",
+ "description": "Americana"
+ },
+ {
+ "id": "asian",
+ "description": "Asian"
+ },
+ {
+ "id": "avante-garde",
+ "description": "Avante-Garde"
+ },
+ {
+ "id": "bluegrass",
+ "description": "Bluegrass"
+ },
+ {
+ "id": "blues",
+ "description": "Blues"
+ },
+ {
+ "id": "breakbeat",
+ "description": "Breakbeat"
+ },
+ {
+ "id": "celtic",
+ "description": "Celtic"
+ },
+ {
+ "id": "classical",
+ "description": "Classical"
+ },
+ {
+ "id": "country",
+ "description": "Country"
+ },
+ {
+ "id": "creole",
+ "description": "Creole"
+ },
+ {
+ "id": "dance",
+ "description": "Dance"
+ },
+ {
+ "id": "disco",
+ "description": "Disco"
+ },
+ {
+ "id": "downtempo",
+ "description": "Downtempo"
+ },
+ {
+ "id": "drum & bass",
+ "description": "Drum & Bass"
+ },
+ {
+ "id": "electronic",
+ "description": "Electronic"
+ },
+ {
+ "id": "folk",
+ "description": "Folk"
+ },
+ {
+ "id": "funk",
+ "description": "Funk"
+ },
+ {
+ "id": "hard rock",
+ "description": "Hard Rock"
+ },
+ {
+ "id": "hip hop",
+ "description": "Hip Hop"
+ },
+ {
+ "id": "holiday",
+ "description": "Holiday"
+ },
+ {
+ "id": "house",
+ "description": "House"
+ },
+ {
+ "id": "industrial",
+ "description": "Industrial"
+ },
+ {
+ "id": "jazz",
+ "description": "Jazz"
+ },
+ {
+ "id": "kids",
+ "description": "Kids"
+ },
+ {
+ "id": "latin",
+ "description": "Latin"
+ },
+ {
+ "id": "metal",
+ "description": "Metal"
+ },
+ {
+ "id": "musical",
+ "description": "Musical"
+ },
+ {
+ "id": "oldies",
+ "description": "Oldies"
+ },
+ {
+ "id": "other",
+ "description": "Other"
+ },
+ {
+ "id": "pop",
+ "description": "Pop"
+ },
+ {
+ "id": "psychedelic",
+ "description": "Psychedelic"
+ },
+ {
+ "id": "punk",
+ "description": "Punk"
+ },
+ {
+ "id": "r&b",
+ "description": "R&B"
+ },
+ {
+ "id": "rap",
+ "description": "Rap"
+ },
+ {
+ "id": "reggae",
+ "description": "Reggae"
+ },
+ {
+ "id": "religious",
+ "description": "Religious"
+ },
+ {
+ "id": "rock",
+ "description": "Rock"
+ },
+ {
+ "id": "ska",
+ "description": "Ska"
+ },
+ {
+ "id": "soft rock",
+ "description": "Soft Rock"
+ },
+ {
+ "id": "soul",
+ "description": "Soul"
+ },
+ {
+ "id": "tv & movie soundtrack",
+ "description": "TV & Movie Soundtrack"
+ },
+ {
+ "id": "techno",
+ "description": "Techno"
+ },
+ {
+ "id": "traditional",
+ "description": "Traditional"
+ },
+ {
+ "id": "trance",
+ "description": "Trance"
+ },
+ {
+ "id": "world",
+ "description": "World"
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:56.424Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/instruments",
+ "body": [
+ {
+ "id": "accordion",
+ "description": "Accordion",
+ "popularity": 2
+ },
+ {
+ "id": "acoustic guitar",
+ "description": "Acoustic Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "bagpipes",
+ "description": "Bagpipes",
+ "popularity": 1
+ },
+ {
+ "id": "banjo",
+ "description": "Banjo",
+ "popularity": 2
+ },
+ {
+ "id": "bass guitar",
+ "description": "Bass Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "bassoon",
+ "description": "Bassoon",
+ "popularity": 1
+ },
+ {
+ "id": "cello",
+ "description": "Cello",
+ "popularity": 1
+ },
+ {
+ "id": "charango",
+ "description": "Charango",
+ "popularity": 1
+ },
+ {
+ "id": "clarinet",
+ "description": "Clarinet",
+ "popularity": 2
+ },
+ {
+ "id": "computer",
+ "description": "Computer",
+ "popularity": 3
+ },
+ {
+ "id": "dobro",
+ "description": "Dobro",
+ "popularity": 1
+ },
+ {
+ "id": "double bass",
+ "description": "Double Bass",
+ "popularity": 2
+ },
+ {
+ "id": "drums",
+ "description": "Drums",
+ "popularity": 3
+ },
+ {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "euphonium",
+ "description": "Euphonium",
+ "popularity": 1
+ },
+ {
+ "id": "flugelhorn",
+ "description": "Flugelhorn",
+ "popularity": 1
+ },
+ {
+ "id": "flute",
+ "description": "Flute",
+ "popularity": 2
+ },
+ {
+ "id": "french horn",
+ "description": "French Horn",
+ "popularity": 1
+ },
+ {
+ "id": "glockenspiel",
+ "description": "Glockenspiel",
+ "popularity": 1
+ },
+ {
+ "id": "harmonica",
+ "description": "Harmonica",
+ "popularity": 2
+ },
+ {
+ "id": "harp",
+ "description": "Harp",
+ "popularity": 1
+ },
+ {
+ "id": "keyboard",
+ "description": "Keyboard",
+ "popularity": 3
+ },
+ {
+ "id": "mandolin",
+ "description": "Mandolin",
+ "popularity": 1
+ },
+ {
+ "id": "oboe",
+ "description": "Oboe",
+ "popularity": 1
+ },
+ {
+ "id": "orchestra",
+ "description": "Orchestra",
+ "popularity": 1
+ },
+ {
+ "id": "other",
+ "description": "Other",
+ "popularity": 1
+ },
+ {
+ "id": "piano",
+ "description": "Piano",
+ "popularity": 2
+ },
+ {
+ "id": "piccolo",
+ "description": "Piccolo",
+ "popularity": 1
+ },
+ {
+ "id": "saxophone",
+ "description": "Saxophone",
+ "popularity": 2
+ },
+ {
+ "id": "sitar",
+ "description": "Sitar",
+ "popularity": 1
+ },
+ {
+ "id": "steel guitar",
+ "description": "Steel Guitar",
+ "popularity": 1
+ },
+ {
+ "id": "theremin",
+ "description": "Theremin",
+ "popularity": 1
+ },
+ {
+ "id": "timpani",
+ "description": "Timpani",
+ "popularity": 1
+ },
+ {
+ "id": "trombone",
+ "description": "Trombone",
+ "popularity": 2
+ },
+ {
+ "id": "trumpet",
+ "description": "Trumpet",
+ "popularity": 2
+ },
+ {
+ "id": "tuba",
+ "description": "Tuba",
+ "popularity": 1
+ },
+ {
+ "id": "ukulele",
+ "description": "Ukulele",
+ "popularity": 1
+ },
+ {
+ "id": "viola",
+ "description": "Viola",
+ "popularity": 1
+ },
+ {
+ "id": "violin",
+ "description": "Violin",
+ "popularity": 2
+ },
+ {
+ "id": "vocoder",
+ "description": "Vocoder",
+ "popularity": 1
+ },
+ {
+ "id": "voice",
+ "description": "Voice",
+ "popularity": 3
+ }
+ ],
+ "timestamp": "2026-01-20T10:15:56.471Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "body": {
+ "next": null,
+ "jamtracks": [
+ {
+ "id": "1",
+ "name": "Back in Black",
+ "description": "This is a JamTrack audio file for use exclusively with the JamKazam service. This JamTrack is a high quality cover of the AC DC song \"Back in Black\".",
+ "original_artist": "AC DC",
+ "version": "0",
+ "year": null,
+ "duration": 221,
+ "allow_free": true,
+ "genres": [
+ {
+ "id": "pop",
+ "description": "Pop"
+ },
+ {
+ "id": "rock",
+ "description": "Rock"
+ }
+ ],
+ "tracks": [
+ {
+ "id": "103dea4d-f2a3-4414-8efe-d2ca378dda60",
+ "part": "Master Mix",
+ "instrument": {
+ "id": "computer",
+ "description": "Computer",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Master",
+ "position": 1000,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Master%20Mix-44100-preview-e9a5a63f34b4d523ee1842fff31f88ce.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Master%20Mix-44100-preview-25fcba7ace7086e3cb6b97d7e33ba72e.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Master%20Mix-44100-preview-9f0b072ed9f4b546e170fcdfb302137e.mp3"
+ },
+ {
+ "id": "2755cbdd-0476-4f3b-9ba1-e2da561ddb4e",
+ "part": "Lead",
+ "instrument": {
+ "id": "voice",
+ "description": "Voice",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 1,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Vocal%20-%20Lead-44100-preview-d35c328fc3936dad9a79fe102dc72950.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Vocal%20-%20Lead-44100-preview-b97b37651eae352fae3b3060918c7bcb.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Vocal%20-%20Lead-44100-preview-d35c328fc3936dad9a79fe102dc72950.aac"
+ },
+ {
+ "id": "0db7c4e1-5e8d-43fe-bd35-98acd8f68b26",
+ "part": "Drums",
+ "instrument": {
+ "id": "drums",
+ "description": "Drums",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 2,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Drums-44100-preview-03aadceb966caf40b96334bdd00234f6.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Drums-44100-preview-854914e3e0d6fdc5f0794325b0ecaead.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Drums-44100-preview-03aadceb966caf40b96334bdd00234f6.aac"
+ },
+ {
+ "id": "2cc79ab6-dab8-4905-85e6-0df5f8e087f1",
+ "part": "Bass",
+ "instrument": {
+ "id": "bass guitar",
+ "description": "Bass Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 3,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Bass-44100-preview-61c334ac87f811bd010ed3a910764c2e.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Bass-44100-preview-4066dafd7b72e9993b0c0fe1dba2b332.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Bass-44100-preview-61c334ac87f811bd010ed3a910764c2e.aac"
+ },
+ {
+ "id": "ed1d3487-3b32-442f-9c76-8a36fe3bb643",
+ "part": "Solo",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 4,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Solo-44100-preview-e9fe8572a9ac1022762642cbd92b3c34.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Solo-44100-preview-5fb058042254206cfa9fb4dcb0310b2c.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Solo-44100-preview-e9fe8572a9ac1022762642cbd92b3c34.aac"
+ },
+ {
+ "id": "f4ce7c91-7542-4e03-8fc2-68b31683d33e",
+ "part": "Rhythm 1",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 5,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%201-44100-preview-6b498479823d4131a01fa535817d5eab.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%201-44100-preview-f4cbb31dbde3e1a3e6012730a7e0e10f.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%201-44100-preview-6b498479823d4131a01fa535817d5eab.aac"
+ },
+ {
+ "id": "2d96c7ec-59f1-4d56-8a7f-7f4c75a0ccef",
+ "part": "Rhythm 2",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 6,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%202-44100-preview-a626d7c632560f6737e1b6024141289e.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%202-44100-preview-06a0e5af451f001f3465992efcd34ec0.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%202-44100-preview-a626d7c632560f6737e1b6024141289e.aac"
+ },
+ {
+ "id": "fce018ca-c897-4137-aa10-ef56a8e1831f",
+ "part": "Intro Scrapes",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 7,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Intro%20Scrapes-44100-preview-0ddfaa7154e9ba35d05d60477d5dd3e9.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Intro%20Scrapes-44100-preview-f53ce3c5f9dcf81af51560f52635fbb0.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Intro%20Scrapes-44100-preview-0ddfaa7154e9ba35d05d60477d5dd3e9.aac"
+ },
+ {
+ "id": "c9b3e0a8-4db0-4d0f-9769-398a6d56506e",
+ "part": "Main",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 8,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Main-44100-preview-234a224f75a97d7ff8f55442ece6fcde.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Main-44100-preview-828c9691f5435dea1c90182fa2618c9b.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Main-44100-preview-234a224f75a97d7ff8f55442ece6fcde.aac"
+ },
+ {
+ "id": "28c3df07-2a88-45a9-9ae6-3399a5d2eb20",
+ "part": "Sound FX",
+ "instrument": {
+ "id": "computer",
+ "description": "Computer",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 9,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Sound%20Effects-44100-preview-6c859c73036cd55bceb65f19f2d2f2f3.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Sound%20Effects-44100-preview-f840d8df4c7388f776477139025ee712.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Sound%20Effects-44100-preview-6c859c73036cd55bceb65f19f2d2f2f3.aac"
+ }
+ ],
+ "jmep": null,
+ "can_download": true,
+ "jam_track_right_id": 1428,
+ "purchased_at": 1752755050,
+ "last_mixdown_id": null,
+ "last_stem_id": null,
+ "mixdowns": [
+ {
+ "id": "5f24403f-3cfa-44f5-b36e-52b2c3c66af8",
+ "name": "db",
+ "description": null,
+ "jam_track_id": "1",
+ "packages": [
+ {
+ "id": "23b10fa0-195d-4ad5-a5a7-2cba6b8c1451",
+ "jam_track_mixdown_id": "5f24403f-3cfa-44f5-b36e-52b2c3c66af8",
+ "file_type": "mp3",
+ "sample_rate": 48,
+ "encrypt_type": null,
+ "error_count": 0,
+ "error_reason": null,
+ "error_detail": null,
+ "signing_state": "SIGNED",
+ "packaging_steps": 10,
+ "current_packaging_step": 8,
+ "version": "1"
+ }
+ ],
+ "created_at": 1753866891,
+ "settings": {
+ "count-in": false,
+ "tracks": [
+ {
+ "id": "2755cbdd-0476-4f3b-9ba1-e2da561ddb4e",
+ "mute": false
+ },
+ {
+ "id": "0db7c4e1-5e8d-43fe-bd35-98acd8f68b26",
+ "mute": true
+ },
+ {
+ "id": "2cc79ab6-dab8-4905-85e6-0df5f8e087f1",
+ "mute": true
+ },
+ {
+ "id": "ed1d3487-3b32-442f-9c76-8a36fe3bb643",
+ "mute": false
+ },
+ {
+ "id": "f4ce7c91-7542-4e03-8fc2-68b31683d33e",
+ "mute": false
+ },
+ {
+ "id": "2d96c7ec-59f1-4d56-8a7f-7f4c75a0ccef",
+ "mute": false
+ },
+ {
+ "id": "fce018ca-c897-4137-aa10-ef56a8e1831f",
+ "mute": false
+ },
+ {
+ "id": "c9b3e0a8-4db0-4d0f-9769-398a6d56506e",
+ "mute": false
+ },
+ {
+ "id": "28c3df07-2a88-45a9-9ae6-3399a5d2eb20",
+ "mute": false
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "timestamp": "2026-01-20T10:15:56.474Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/teacher_distributions?per_page=20&page=1",
+ "body": {
+ "next": null,
+ "entries": [],
+ "total_entries": 0
+ },
+ "timestamp": "2026-01-20T10:15:56.474Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "body": {
+ "version": "2.0.0.1956",
+ "uri": "http://d48bcgsnmsm6a.cloudfront.net/artifacts/JamClientModern/MacOSX-M/2.0.0.1956/JamKazam-1770.dmg",
+ "sha1": "2ca2238f4a21a09c32d4a0b6f5fee78b",
+ "size": 240820609
+ },
+ "timestamp": "2026-01-20T10:15:56.486Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "body": {
+ "version": "2.0.0.1956",
+ "uri": "http://d48bcgsnmsm6a.cloudfront.net/artifacts/JamClientModern/MacOSX-M/2.0.0.1956/JamKazam-1770.dmg",
+ "sha1": "2ca2238f4a21a09c32d4a0b6f5fee78b",
+ "size": 240820609
+ },
+ "timestamp": "2026-01-20T10:15:56.521Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "timestamp": "2026-01-20T10:15:57.016Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381?",
+ "body": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "city": "Dallas",
+ "state": "TX",
+ "country": "US",
+ "location": "Dallas, TX",
+ "online": true,
+ "photo_url": null,
+ "musician": true,
+ "gender": "M",
+ "birth_date": null,
+ "friend_count": 1,
+ "liker_count": 0,
+ "follower_count": 77,
+ "following_count": 130,
+ "admin": true,
+ "recording_count": 0,
+ "session_count": 0,
+ "biography": "This is description with special charact xxxxxxaaaasasasas",
+ "favorite_count": 0,
+ "audio_latency": null,
+ "upcoming_session_count": 0,
+ "age": null,
+ "website": "www.nuwanchaturanga.me",
+ "skill_level": 2,
+ "reuse_card": true,
+ "email_needs_verification": false,
+ "is_a_teacher": true,
+ "is_a_student": false,
+ "is_onboarder": false,
+ "timezone": null,
+ "use_video_conferencing_server": true,
+ "email": "nuwan@jamkazam.com",
+ "original_fpfile": null,
+ "cropped_fpfile": null,
+ "crop_selection": null,
+ "session_settings": "{:band_id=>nil, :musician_access=>false, :approval_required=>false, :fan_chat=>false, :fan_access=>false, :description=>\"Private session set up just to test things out in the session interface by myself.\", :genres=>[{:id=>\"pop\", :description=>\"Pop\"}], :invitees=>[]}",
+ "show_whats_next": true,
+ "show_whats_next_count": 0,
+ "subscribe_email": false,
+ "auth_twitter": false,
+ "new_notifications": 14,
+ "sales_count": 7,
+ "purchased_jamtracks_count": 1,
+ "first_downloaded_client_at": null,
+ "created_at": "2021-05-21T18:15:28.425Z",
+ "first_opened_jamtrack_web_player": "2024-12-03T13:55:01.788Z",
+ "gifted_jamtracks": 0,
+ "has_redeemable_jamtrack": false,
+ "has_stored_credit_card?": true,
+ "remaining_test_drives": 0,
+ "jamclass_credits": 0,
+ "can_buy_test_drive?": true,
+ "lesson_package_type_id": null,
+ "school_id": null,
+ "is_guitar_center_student?": false,
+ "purchase_required": null,
+ "lesson_package_needs_purchase_id": null,
+ "user_authorizations": [
+ {
+ "uid": "RQB3YMV6KABBL",
+ "provider": "paypal",
+ "token_expiration": "2025-07-14T14:47:06.651Z"
+ }
+ ],
+ "test_drive_package_choices": [],
+ "friends": [
+ {
+ "id": "a09f9a7e-afb7-489d-870d-e13a336e0b97",
+ "first_name": "Seth",
+ "last_name": "Call",
+ "name": "Seth Call",
+ "online": false,
+ "photo_url": "https://s3.amazonaws.com/jamkazam-dev-public/avatars/a09f9a7e-afb7-489d-870d-e13a336e0b97/8EfyNy2cQPaxEsypRviW_IMG_20231224_133203_HDR.jpg"
+ }
+ ],
+ "followings": [
+ {
+ "type": "user",
+ "id": "963d5268-66b6-463a-a3ee-c97f274fc23f",
+ "name": "Peter Walker",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "cc0b060c-9891-4e91-9fe3-4268893a2fd0",
+ "name": "Oswald Becca",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "29becbf4-8be5-4078-9405-0edadc9fa42d",
+ "name": "Peter 1 Walker",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "3dfca858-0e7c-4ad4-993a-c39421d93853",
+ "name": "Peter Walker",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "fd467978-da75-421f-8e97-6406a784e87e",
+ "name": "Indrashapa Liyanage",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "a09f9a7e-afb7-489d-870d-e13a336e0b97",
+ "name": "Seth Call",
+ "location": "Boston, MA",
+ "photo_url": "https://s3.amazonaws.com/jamkazam-dev-public/avatars/a09f9a7e-afb7-489d-870d-e13a336e0b97/8EfyNy2cQPaxEsypRviW_IMG_20231224_133203_HDR.jpg"
+ },
+ {
+ "type": "user",
+ "id": "2e75f1dc-af6b-4444-a9e2-5f32db07abc1",
+ "name": "David Wilson 1",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f8f32710-3194-4666-b618-eceb21d6e3de",
+ "name": "Peter Walker",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "feb671a3-1821-48f0-bc14-aa26cf98bb25",
+ "name": "David Wilson",
+ "location": "Miami, FL",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "c2ede005-3b3a-4227-b6fc-f7e8b946b556",
+ "name": "Test 2 User",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "bcf99b5c-8fee-47ce-bf51-b3c7b821d023",
+ "name": "David Miller",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1f9debf3-58d7-46c0-896c-859b6ae8be37",
+ "name": "David Miller",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "876d1604-d309-429a-8046-e034ce1bcea4",
+ "name": "David Miller",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "name": "Nuwan Chaturanga",
+ "location": "Dallas, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "062168d9-3e7e-41ee-b8e8-9f496b8cb97a",
+ "name": "James Bond",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "5c2b1a45-5212-4a73-b5ce-007c345d97b7",
+ "name": "Makenna Gutmann Celestino Hand",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "e2eca6b2-56d9-450a-8ac4-7d107a488887",
+ "name": "Grace Roob Cynthia Cronin",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b1ddadd0-0263-47c4-bf91-e7767f386970",
+ "name": "Oswald Becca",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "0671faf1-7e39-45e3-ba9b-a3e27982e88f",
+ "name": "Carey Carroll Yolanda Ankunding",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1e94859c-b192-4bc8-9d8e-6a3ef5ec1380",
+ "name": "Filiberto Hills IV Anya Keebler MD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "749d3a9f-11fc-4593-827c-b47d0da1322e",
+ "name": "RashawnMante ThurmanFadel",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "6ceb102f-2f99-46dd-8baa-d1b1c357118f",
+ "name": "ObieJenkins EddNienow",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "042ef11a-f2ad-4e80-85d8-cf94a502e298",
+ "name": "TobinFisher MatildaKiehn",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f0ca8d87-dd9e-4d9f-afc1-ff543f29d371",
+ "name": "MrsOrionSchoen CurtisChristiansenV",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "fc3496a2-9f73-47ed-a755-02011afddded",
+ "name": "TristonRunolfsson DrJoyHoppe",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "16a32d1e-901e-460a-bd9a-d400b91ec5d5",
+ "name": "DrPatrickDuBuque JeanneVeum",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "7e43ae3e-47b2-4510-a688-91c209e5d271",
+ "name": "MrsEverardoWillms JadonGreenholt",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b39034cf-0f02-44a3-ac46-1e79f561e22f",
+ "name": "AmberOConner NoelMedhurst",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "9f7e3f8e-9ea1-41a5-a589-60ff27b40e74",
+ "name": "ErnestinaGrady CarlieLubowitz",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "5501a1a7-670d-45b9-bf2f-e644c3d8ae65",
+ "name": "MaryamAltenwerth MoseDavisDDS",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "5473d024-0dd2-434b-bea2-ed1b959f6eb8",
+ "name": "TyreeKlocko MarcusCartwright",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "a8e2ceda-51a7-4b67-87bb-5ddab937127d",
+ "name": "DaleNicolas ErnieBalistreriSr",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "819f1fff-4c76-45b8-a97f-e3ae23c44d38",
+ "name": "TerenceRosenbaum BenedictOReillyPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "caaa6dbe-d44f-4283-82b9-31e2feef8552",
+ "name": "RichardSchmeler SteveMante",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b1faa4a9-aa95-46da-98ef-d9a110cf19db",
+ "name": "CharlesChamplinSr SofiaBernierSr",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "aae38d6a-571b-453c-b84d-ac377e7dd518",
+ "name": "MabelCasperPhD TyrelStroman",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "8bac8af0-f348-4d38-9c8b-3864c21819fa",
+ "name": "DoyleParisian VelmaMarquardt",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "bae12f4f-b8a6-4cfb-8cfb-3a97293011fb",
+ "name": "FriedrichMaggioSr IvyBergePhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "492b11ae-46d3-4e77-8a0a-8550cf924fcc",
+ "name": "PierreJaskolski MrCurtTremblay",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f739a1ab-25e7-4713-9914-8c3993b34ac2",
+ "name": "FreedaConnelly ZoraRyanIV",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "da55a63e-822c-4b00-a1ff-43d1c77dd9da",
+ "name": "MrDarrelHilpert AliaLemke",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "9b3fccc7-3341-497e-943b-4223470c4d2e",
+ "name": "JudahMurphy MsRandallWalsh",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "e0ff0bfb-f7f7-4a59-8fe9-b3271a436bff",
+ "name": "MorganRempel DestineyTrompDDS",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "e6659aab-3b85-4fcf-b238-9784e8fa0c87",
+ "name": "JettBartell RayHuels",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "fa8520ee-dbbc-4c82-8a3a-3eb7a2e670b9",
+ "name": "DorthyRitchie EthelynConroy",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "c99366a3-1ca5-4be0-b241-d5ab251e2128",
+ "name": "MrsJerrodWill MissHassanMcDermott",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "5545474c-72ae-439e-b15e-ea01d8024e9a",
+ "name": "JonatanBaumbach IsadoreMohrDVM",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1de82b84-509f-4b44-8e57-83a4c84ddb65",
+ "name": "MableSporerI KarleeWestPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "c6105907-18f0-4328-8612-4a3712a87589",
+ "name": "TaniaOConnell MorrisJast",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "3befd488-1e79-4a0f-9195-55627345a896",
+ "name": "MissTremayneVonRueden MargarettQuigley",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ba54b319-f774-4df1-9998-079518bafb71",
+ "name": "AllyConn MissKimberlyHoppe",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "58d673f1-d8a0-4afa-9a88-39b890d1d97f",
+ "name": "AlvaHettinger AngelitaLeffler",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "bb141f5b-3871-45a8-9aec-c0e7caea97be",
+ "name": "JasperHodkiewicz PaytonBartonPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b8e10ae9-8d1b-4046-94c2-85d836c11819",
+ "name": "FreddyGrahamII ImeldaTrantow",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "db342b5a-a353-44cf-afa1-01106adfd4e2",
+ "name": "GavinBednar JosianeWelch",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "677457e3-fd7f-408e-939d-d3315037f00d",
+ "name": "DarrionMosciski NicoletteAufderhar",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b01bb2c0-a584-49fe-ab49-818a7fd693a5",
+ "name": "AbigaleOHara BernhardZiemann",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "af974075-2c2a-43ac-927b-2e3213b7fd56",
+ "name": "MissBreanneKunde JuliaLeannon",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "97d4fba3-fab5-4153-bf05-7466624ea6bd",
+ "name": "ImeldaFranecki LeolaWisozk",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "8680fef5-5731-4b7c-9baf-e984bdef572e",
+ "name": "VernerWunsch SallyHeathcote",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "0afab59f-2ac2-4187-8b9e-51a008c37f82",
+ "name": "TadDicki HeatherKertzmann",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "dc4ebae1-99e1-44fc-a8d8-6f45c90250d9",
+ "name": "DrKennithMetz BobbyWilderman",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "7aaa8b68-c6d9-4085-87d0-177e4252a09f",
+ "name": "BradenMosciskiII SterlingWilkinson",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "c51736bd-1110-43ba-a47a-72e90d12c7d1",
+ "name": "JakobKub MsDaneGulgowski",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "8d18316e-79e1-4a6e-889c-8151de8ac20f",
+ "name": "KyleeStamm AutumnBruenPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "18138725-f91c-4a12-a04d-43d73951559a",
+ "name": "NatHowell AbigaleAbshireSr",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "06803beb-8218-41db-ba3b-87ffabcfe59f",
+ "name": "BoydRosenbaum MrIsabellMedhurst",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "24c88514-5966-4977-b6a5-d14d71ed51a7",
+ "name": "DashawnSpencer EstellMcDermottMD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "3a0fe418-0d87-422b-b9d7-62350e4d6e06",
+ "name": "JaunitaHerzog WestleyKovacek",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "59b19985-f2ac-4a39-94a2-7a1b7d4a1589",
+ "name": "OrlandWehner WayneAufderhar",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "60a55a0f-33cf-49e3-8acb-d055f0d57b8d",
+ "name": "AntoniaDach MissArvelCrooks",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ccba202e-90d4-4204-a590-d0b385fff0b2",
+ "name": "MissEnricoSatterfield FredFeeney",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ffd059fc-86ca-4e5b-ae68-428fc9a7c151",
+ "name": "MrsLexusMayer ArianeSchroeder",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "846b2313-cf96-47a1-b747-28529f713f57",
+ "name": "MrAshleyGreen DedrickTurner",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "893a2561-be87-4bbe-b0a4-e3ebfdf66bce",
+ "name": "GillianTowne VicentaRobelDDS",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "d28c8e9f-958b-4d7d-bd27-bcbf7e40276c",
+ "name": "AnselCorkery WellingtonBalistreri",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1d6ebd32-5263-4d4c-b1cb-ece2c52d4639",
+ "name": "DrAshtynSchowalter RosaleeHuelPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "13782f1a-d49c-4e51-bffb-03c2ab5466b9",
+ "name": "DedrickCronin MaximusJones",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1847fa77-3c6c-45e6-a2fd-713c97b13bc8",
+ "name": "BillKoepp CristinaWisoky",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "127d364c-b608-452d-b9d2-870374669ac4",
+ "name": "JanieMarvin AbbieCollins",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "a94e2132-b59c-421f-8956-8da3da67edc3",
+ "name": "TrevorBogan MsJoanieHaag",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "996ca813-6994-4f08-ab55-a086d688f5a8",
+ "name": "AlainaDooleySr KianKulas",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f49925f2-3934-4bc2-9dbe-61ab3d2d0d2a",
+ "name": "BrennanKautzer BurdetteDonnelly",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "813e7f84-8c69-4a5b-97e4-7f3278d589b6",
+ "name": "BennieConn CelestinoHamill",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "9eeec010-029b-4cac-b4ea-a3ac6256bada",
+ "name": "ElsaRempel BurniceLabadie",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1b35f8f4-1c9c-4e72-bd54-052ab3b33745",
+ "name": "JoannieGlover ClarabelleLubowitz",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "6f732065-9e64-487c-88e3-713c49db7dd1",
+ "name": "LuciousMuller MiaPurdy",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "25c21fbf-ddcc-4224-86c6-8f8b3db64406",
+ "name": "KiarraVolkman DelphiaOReillyJr",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "60f9a9c1-2e1f-41e1-a55a-0ce0a3ccafff",
+ "name": "JordynOHara YasminDare",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "524299c3-ffec-473a-8b8a-5352f9bb1498",
+ "name": "ArmandMayerII RomaineOHara",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "91a0d1eb-b9ce-453f-ae01-04ab932b1d88",
+ "name": "PhoebeMertz ErichHand",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "d3db5d12-51fd-4267-9972-32d0e08ba5a0",
+ "name": "MrEdwardRyan MarieReynolds",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "0caf1682-79de-4e99-977b-6327defb04ae",
+ "name": "LilianaGibson JillianWintheiser",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "8d9319be-9435-476e-a7ee-26a3b4adb519",
+ "name": "DonnellJacobs MrEttieLakin",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "740e9322-d303-4d7a-b018-5a7ce6f228cf",
+ "name": "MrTrevorBauch MsTadMante",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ad014131-4ca9-4738-ab04-0abb21988925",
+ "name": "GoldaLeannon KevinBogisich",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b88a29c3-7d53-40db-a4cd-c74cfa383535",
+ "name": "MissPrincessStokes EstaHarris",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1047c75a-07f7-464f-9d68-abbe928721d8",
+ "name": "MissValeriePagac UniqueLowe",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "912d8c9c-ebc4-4c90-939d-a0022fac592f",
+ "name": "CarolyneYost KhalidHagenes",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "71df5db0-1b97-451e-8d4b-158780ce89b5",
+ "name": "TraceLarson PercyRempel",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "070fe31e-b2b9-4c40-ba0f-47bd2dea8bed",
+ "name": "DomenicaHeller MaryHamill",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1c6a4318-74dc-4978-9a6a-cf5218158d09",
+ "name": "LauraSchumm DomenicWindler",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "1e10de58-6426-48c9-b32a-4068181cc902",
+ "name": "CristalFahey DrTheodoraAuer",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "fca4da6e-6307-4239-8369-4c823da291ea",
+ "name": "ElizaSatterfield JeramyThiel",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "c2007c10-50e2-45b2-b0ec-94d78fca7464",
+ "name": "DevenCruickshankDVM KoreyCollierSr",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "fb63837c-1621-4d5c-ae94-5dd4e966850a",
+ "name": "AmiyaFadel MonicaHyattPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "16031f9b-929a-4b2e-8dca-32ba9d011871",
+ "name": "RicoSchmeler YasmineBernier",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "b07623eb-9064-4bab-b3ac-7f9ed56e70c3",
+ "name": "MittieHirthe DaneRutherford",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "0f4074d2-3f60-4afa-b67e-9aeb606fcf12",
+ "name": "DominiquePurdy TianaSchaefer",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "751d5835-a58c-4b86-a097-03e764d05e53",
+ "name": "GenevieveLegros ColleenCorwin",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "de428405-5be2-419f-b488-ad9f4c56fed5",
+ "name": "MallieWeimann MargaretteCarroll",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "0e3574ff-e190-4cc5-8424-d68a32f7814f",
+ "name": "RobertaKunde LillaKing",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "06d057b1-b13a-4f51-b2dd-02a3a688b414",
+ "name": "ValentinKoeppSr OlgaCronaPhD",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f1afae38-4740-433c-b2e6-dcd415741052",
+ "name": "AnyaMorar DrMckenzieVeum",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "079c9ca0-74d3-4a95-9fef-e9e17a123873",
+ "name": "JasonRempel MrBlancaParisian",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "53c5a997-4dda-423f-a56e-b576b8c5fdb3",
+ "name": "MsLaverneShanahan GlenHeller",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "faa11323-ee4d-42d0-9400-955723e83d89",
+ "name": "MissVincenzoGreenholt TheodoraRath",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "94a1c9a4-a44d-4e52-badc-051c4084c193",
+ "name": "RyleySchusterII MarcelinaHillsI",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ebfcbb8f-5d10-42b8-9260-8a0e5eee8f29",
+ "name": "MarcelleMaggio MayeParker",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "a0c04c7d-1027-43f7-872b-f6150fb1970d",
+ "name": "TatumVandervort EarleneJohnson",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "e3fbc347-f15c-4bc5-9eb0-c10bf26da2dc",
+ "name": "MissCitlalliHamill NatalieKundeIV",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "241daa8a-3b79-4213-a17c-f3635e100401",
+ "name": "EverettSwift AyanaStroman",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "ad2c50a9-0f56-403d-9df0-0edcece0c701",
+ "name": "RaoulCremin ReannaConsidine",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "187e18f6-32c8-437f-8292-fdbe09427d2b",
+ "name": "ClarabelleBeer JackieShields",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "e29044fe-45b3-41ae-ab00-eb9913e5daa6",
+ "name": "BrigitteRenner WillardLabadie",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "bccdc05a-c4d6-4b95-acc6-19f1a6c4abbd",
+ "name": "DavionJast ChanellePagac",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "67a02f30-f193-4490-9aec-ebf7c6619141",
+ "name": "FavianMarks EdaKirlin",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "672fc730-8e84-4e9e-97f5-c5dcd93557ba",
+ "name": "MaximusBatz RyleeMetzDDS",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "f1317729-a366-4c19-9765-9f5b1d156f94",
+ "name": "ChadrickBergnaum RogersBerge",
+ "location": "Austin, TX",
+ "photo_url": null
+ },
+ {
+ "type": "user",
+ "id": "8ac936dc-3185-47ab-92ad-5b04e470da9f",
+ "name": "Mateo Antony",
+ "location": "Austin, TX",
+ "photo_url": null
+ }
+ ],
+ "bands": [
+ {
+ "id": "32df51d1-e323-4f02-80ba-63229b4861ed",
+ "name": "Martine Johnston",
+ "admin": false,
+ "photo_url": null,
+ "logo_url": null,
+ "genres": [
+ {
+ "id": "country",
+ "description": "Country"
+ },
+ {
+ "id": "hip hop",
+ "description": "Hip Hop"
+ },
+ {
+ "id": "techno",
+ "description": "Techno"
+ }
+ ]
+ },
+ {
+ "id": "74f50a3d-df82-47f5-8053-0281bc27403f",
+ "name": "JMam",
+ "admin": false,
+ "photo_url": null,
+ "logo_url": null,
+ "genres": [
+ {
+ "id": "blues",
+ "description": "Blues"
+ }
+ ]
+ },
+ {
+ "id": "fc24a1e0-f212-4418-98d9-f0514e0cc699",
+ "name": "Uturn",
+ "admin": false,
+ "photo_url": null,
+ "logo_url": null,
+ "genres": [
+ {
+ "id": "reggae",
+ "description": "Reggae"
+ }
+ ]
+ }
+ ],
+ "instruments": [],
+ "genres": [
+ {
+ "description": "A Cappella",
+ "id": "acapella"
+ },
+ {
+ "description": "African",
+ "id": "african"
+ },
+ {
+ "description": "Alternative Rock",
+ "id": "alternative rock"
+ },
+ {
+ "description": "Ambient",
+ "id": "ambient"
+ },
+ {
+ "description": "Drum & Bass",
+ "id": "drum & bass"
+ },
+ {
+ "description": "Electronic",
+ "id": "electronic"
+ },
+ {
+ "description": "Folk",
+ "id": "folk"
+ },
+ {
+ "description": "Funk",
+ "id": "funk"
+ },
+ {
+ "description": "Psychedelic",
+ "id": "psychedelic"
+ },
+ {
+ "description": "Punk",
+ "id": "punk"
+ },
+ {
+ "description": "R&B",
+ "id": "r&b"
+ },
+ {
+ "description": "Rap",
+ "id": "rap"
+ }
+ ],
+ "sessions": [
+ {
+ "id": "91de1362-bd56-44b2-a39b-8d7fb4d38fa5",
+ "description": "Private session set up just to test things out in the session interface by myself.",
+ "musician_access": false,
+ "approval_required": false,
+ "fan_access": false
+ }
+ ],
+ "teacher": {
+ "id": "5fd55476-320d-4532-8ad8-79f9a7d88e20",
+ "biography": "A teacher experienced teaching music for students from kindergarten to high school. ",
+ "created_at": "2022-10-20T13:35:33.210Z",
+ "introductory_video": null,
+ "lesson_duration_120": false,
+ "lesson_duration_30": false,
+ "lesson_duration_45": false,
+ "lesson_duration_60": true,
+ "lesson_duration_90": false,
+ "price_per_lesson_120_cents": null,
+ "price_per_lesson_30_cents": null,
+ "price_per_lesson_45_cents": null,
+ "price_per_lesson_60_cents": 10000,
+ "price_per_lesson_90_cents": null,
+ "price_per_month_120_cents": null,
+ "price_per_month_30_cents": null,
+ "price_per_month_45_cents": null,
+ "price_per_month_60_cents": null,
+ "price_per_month_90_cents": null,
+ "prices_per_lesson": true,
+ "prices_per_month": false,
+ "teaches_advanced": true,
+ "teaches_age_lower": 3,
+ "teaches_age_upper": 20,
+ "teaches_beginner": true,
+ "teaches_intermediate": true,
+ "updated_at": "2022-10-20T13:41:50.521Z",
+ "website": null,
+ "years_playing": 15,
+ "years_teaching": 10,
+ "teaches_test_drive": true,
+ "test_drives_per_week": 10,
+ "errors": {},
+ "profile_pct": "87.0",
+ "school_id": null,
+ "background_check_at": null,
+ "is_searchable": true,
+ "review_summary": null,
+ "school": null,
+ "recent_reviews": [],
+ "profile_pct_summary": {
+ "name_specified": true,
+ "experiences_teaching": true,
+ "experiences_education": true,
+ "experiences_award": true,
+ "has_stripe_account": null,
+ "has_teacher_bio": true,
+ "intro_video": false,
+ "years_teaching": true,
+ "years_playing": true,
+ "instruments_or_subject": true,
+ "genres": true,
+ "languages": true,
+ "teaches_ages_specified": true,
+ "teaching_level_specified": true,
+ "has_pricing_specified": true,
+ "pct": 87
+ },
+ "instruments": [
+ "acoustic guitar",
+ "drums",
+ "keyboard",
+ "voice",
+ "flute",
+ "piano"
+ ],
+ "subjects": [
+ "music-theory",
+ "composing",
+ "site-reading",
+ "guitar-ring"
+ ],
+ "genres": [
+ "classical",
+ "folk",
+ "jazz"
+ ],
+ "languages": [
+ "EN",
+ "FR"
+ ],
+ "experiences_teaching": [
+ {
+ "name": "Jr. Music Teacher",
+ "experience_type": "teaching",
+ "organization": "St. Peters College",
+ "start_year": 2005,
+ "end_year": 2010
+ }
+ ],
+ "experiences_education": [
+ {
+ "name": "Bacholor in Fine arts ",
+ "experience_type": "education",
+ "organization": "London Fine Arts University",
+ "start_year": 2012,
+ "end_year": 2015
+ }
+ ],
+ "experiences_award": [
+ {
+ "name": "Best Folk Music Singer",
+ "experience_type": "award",
+ "organization": "University of St. Gorge",
+ "start_year": 2020,
+ "end_year": null
+ }
+ ],
+ "has_rated_teacher": false
+ },
+ "owned_school_id": null,
+ "owned_retailer_id": null,
+ "geoiplocation": null,
+ "show_free_jamtrack": false,
+ "show_jamtrack_guide": true,
+ "mods": {},
+ "has_recurly_account": true,
+ "is_affiliate_partner": false,
+ "affiliate_referral_count": null,
+ "affiliate_earnings": null,
+ "last_jam_audio_latency": 5
+ },
+ "timestamp": "2026-01-20T10:15:57.112Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/versioncheck?product=JamClientModern&os=MacOSX-M",
+ "body": {
+ "version": "2.0.0.1956",
+ "uri": "http://d48bcgsnmsm6a.cloudfront.net/artifacts/JamClientModern/MacOSX-M/2.0.0.1956/JamKazam-1770.dmg",
+ "sha1": "2ca2238f4a21a09c32d4a0b6f5fee78b",
+ "size": 240820609
+ },
+ "timestamp": "2026-01-20T10:15:57.123Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/jamtracks/purchased?page=1&per_page=40",
+ "body": {
+ "next": null,
+ "jamtracks": [
+ {
+ "id": "1",
+ "name": "Back in Black",
+ "description": "This is a JamTrack audio file for use exclusively with the JamKazam service. This JamTrack is a high quality cover of the AC DC song \"Back in Black\".",
+ "original_artist": "AC DC",
+ "version": "0",
+ "year": null,
+ "duration": 221,
+ "allow_free": true,
+ "genres": [
+ {
+ "id": "pop",
+ "description": "Pop"
+ },
+ {
+ "id": "rock",
+ "description": "Rock"
+ }
+ ],
+ "tracks": [
+ {
+ "id": "103dea4d-f2a3-4414-8efe-d2ca378dda60",
+ "part": "Master Mix",
+ "instrument": {
+ "id": "computer",
+ "description": "Computer",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Master",
+ "position": 1000,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Master%20Mix-44100-preview-e9a5a63f34b4d523ee1842fff31f88ce.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Master%20Mix-44100-preview-25fcba7ace7086e3cb6b97d7e33ba72e.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Master%20Mix-44100-preview-9f0b072ed9f4b546e170fcdfb302137e.mp3"
+ },
+ {
+ "id": "2755cbdd-0476-4f3b-9ba1-e2da561ddb4e",
+ "part": "Lead",
+ "instrument": {
+ "id": "voice",
+ "description": "Voice",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 1,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Vocal%20-%20Lead-44100-preview-d35c328fc3936dad9a79fe102dc72950.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Vocal%20-%20Lead-44100-preview-b97b37651eae352fae3b3060918c7bcb.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Vocal%20-%20Lead-44100-preview-d35c328fc3936dad9a79fe102dc72950.aac"
+ },
+ {
+ "id": "0db7c4e1-5e8d-43fe-bd35-98acd8f68b26",
+ "part": "Drums",
+ "instrument": {
+ "id": "drums",
+ "description": "Drums",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 2,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Drums-44100-preview-03aadceb966caf40b96334bdd00234f6.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Drums-44100-preview-854914e3e0d6fdc5f0794325b0ecaead.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Drums-44100-preview-03aadceb966caf40b96334bdd00234f6.aac"
+ },
+ {
+ "id": "2cc79ab6-dab8-4905-85e6-0df5f8e087f1",
+ "part": "Bass",
+ "instrument": {
+ "id": "bass guitar",
+ "description": "Bass Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 3,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Bass-44100-preview-61c334ac87f811bd010ed3a910764c2e.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Bass-44100-preview-4066dafd7b72e9993b0c0fe1dba2b332.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Bass-44100-preview-61c334ac87f811bd010ed3a910764c2e.aac"
+ },
+ {
+ "id": "ed1d3487-3b32-442f-9c76-8a36fe3bb643",
+ "part": "Solo",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 4,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Solo-44100-preview-e9fe8572a9ac1022762642cbd92b3c34.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Solo-44100-preview-5fb058042254206cfa9fb4dcb0310b2c.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Solo-44100-preview-e9fe8572a9ac1022762642cbd92b3c34.aac"
+ },
+ {
+ "id": "f4ce7c91-7542-4e03-8fc2-68b31683d33e",
+ "part": "Rhythm 1",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 5,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%201-44100-preview-6b498479823d4131a01fa535817d5eab.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%201-44100-preview-f4cbb31dbde3e1a3e6012730a7e0e10f.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%201-44100-preview-6b498479823d4131a01fa535817d5eab.aac"
+ },
+ {
+ "id": "2d96c7ec-59f1-4d56-8a7f-7f4c75a0ccef",
+ "part": "Rhythm 2",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 6,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%202-44100-preview-a626d7c632560f6737e1b6024141289e.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%202-44100-preview-06a0e5af451f001f3465992efcd34ec0.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Rhythm%202-44100-preview-a626d7c632560f6737e1b6024141289e.aac"
+ },
+ {
+ "id": "fce018ca-c897-4137-aa10-ef56a8e1831f",
+ "part": "Intro Scrapes",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 7,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Intro%20Scrapes-44100-preview-0ddfaa7154e9ba35d05d60477d5dd3e9.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Intro%20Scrapes-44100-preview-f53ce3c5f9dcf81af51560f52635fbb0.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Intro%20Scrapes-44100-preview-0ddfaa7154e9ba35d05d60477d5dd3e9.aac"
+ },
+ {
+ "id": "c9b3e0a8-4db0-4d0f-9769-398a6d56506e",
+ "part": "Main",
+ "instrument": {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 8,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Main-44100-preview-234a224f75a97d7ff8f55442ece6fcde.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Main-44100-preview-828c9691f5435dea1c90182fa2618c9b.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Electric%20Guitar%20-%20Main-44100-preview-234a224f75a97d7ff8f55442ece6fcde.aac"
+ },
+ {
+ "id": "28c3df07-2a88-45a9-9ae6-3399a5d2eb20",
+ "part": "Sound FX",
+ "instrument": {
+ "id": "computer",
+ "description": "Computer",
+ "created_at": "2021-02-02T23:16:46.168Z",
+ "updated_at": "2021-02-02T23:16:46.168Z",
+ "popularity": 3
+ },
+ "track_type": "Track",
+ "position": 9,
+ "preview_mp3_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Sound%20Effects-44100-preview-6c859c73036cd55bceb65f19f2d2f2f3.mp3",
+ "preview_ogg_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Sound%20Effects-44100-preview-f840d8df4c7388f776477139025ee712.ogg",
+ "preview_aac_url": "https://jamkazam-dev-public.s3.amazonaws.com/jam_track_previews/AC%20DC/Back%20in%20Black/Back%20in%20Black%20Stem%20-%20Sound%20Effects-44100-preview-6c859c73036cd55bceb65f19f2d2f2f3.aac"
+ }
+ ],
+ "jmep": null,
+ "can_download": true,
+ "jam_track_right_id": 1428,
+ "purchased_at": 1752755050,
+ "last_mixdown_id": null,
+ "last_stem_id": null,
+ "mixdowns": [
+ {
+ "id": "5f24403f-3cfa-44f5-b36e-52b2c3c66af8",
+ "name": "db",
+ "description": null,
+ "jam_track_id": "1",
+ "packages": [
+ {
+ "id": "23b10fa0-195d-4ad5-a5a7-2cba6b8c1451",
+ "jam_track_mixdown_id": "5f24403f-3cfa-44f5-b36e-52b2c3c66af8",
+ "file_type": "mp3",
+ "sample_rate": 48,
+ "encrypt_type": null,
+ "error_count": 0,
+ "error_reason": null,
+ "error_detail": null,
+ "signing_state": "SIGNED",
+ "packaging_steps": 10,
+ "current_packaging_step": 8,
+ "version": "1"
+ }
+ ],
+ "created_at": 1753866891,
+ "settings": {
+ "count-in": false,
+ "tracks": [
+ {
+ "id": "2755cbdd-0476-4f3b-9ba1-e2da561ddb4e",
+ "mute": false
+ },
+ {
+ "id": "0db7c4e1-5e8d-43fe-bd35-98acd8f68b26",
+ "mute": true
+ },
+ {
+ "id": "2cc79ab6-dab8-4905-85e6-0df5f8e087f1",
+ "mute": true
+ },
+ {
+ "id": "ed1d3487-3b32-442f-9c76-8a36fe3bb643",
+ "mute": false
+ },
+ {
+ "id": "f4ce7c91-7542-4e03-8fc2-68b31683d33e",
+ "mute": false
+ },
+ {
+ "id": "2d96c7ec-59f1-4d56-8a7f-7f4c75a0ccef",
+ "mute": false
+ },
+ {
+ "id": "fce018ca-c897-4137-aa10-ef56a8e1831f",
+ "mute": false
+ },
+ {
+ "id": "c9b3e0a8-4db0-4d0f-9769-398a6d56506e",
+ "mute": false
+ },
+ {
+ "id": "28c3df07-2a88-45a9-9ae6-3399a5d2eb20",
+ "mute": false
+ }
+ ]
+ }
+ }
+ ]
+ }
+ ]
+ },
+ "timestamp": "2026-01-20T10:15:57.123Z"
+ },
+ {
+ "type": "request",
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3100/api/sessions",
+ "timestamp": "2026-01-20T10:15:57.295Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/history?includePending=false",
+ "timestamp": "2026-01-20T10:15:57.677Z"
+ },
+ {
+ "type": "response",
+ "status": 201,
+ "url": "http://www.jamkazam.local:3100/api/sessions",
+ "body": {
+ "id": "02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "music_session_id": null,
+ "name": "Private Test Session",
+ "description": "Private session set up just to test things out in the session interface by myself.",
+ "musician_access": false,
+ "approval_required": false,
+ "fan_access": false,
+ "fan_chat": false,
+ "create_type": "quick-start",
+ "band_id": null,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "genre_id": "pop",
+ "created_at": "2026-01-20T10:15:57.311Z",
+ "like_count": 0,
+ "comment_count": 0,
+ "play_count": 0,
+ "scheduled_duration": "01:00:00",
+ "language": "eng",
+ "recurring_mode": "once",
+ "language_description": "English",
+ "scheduled_start_date": "Tue 20 January 2026",
+ "access_description": "Only RSVP musicians may join. Fans may not listen to session.",
+ "timezone": "Central Time (US & Canada),America/Chicago",
+ "timezone_id": "America/Chicago",
+ "timezone_description": "Central Time (US & Canada)",
+ "musician_access_description": "Only RSVP musicians may join",
+ "fan_access_description": "Fans may not listen to session",
+ "session_removed_at": null,
+ "legal_policy": "Standard",
+ "open_rsvps": false,
+ "is_unstructured_rsvp?": false,
+ "friends_can_join": false,
+ "use_video_conferencing_server": true,
+ "creator": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "name": "Nuwan Chaturanga",
+ "photo_url": null
+ },
+ "band": null,
+ "users": [],
+ "comments": [],
+ "session_info_comments": [],
+ "music_notations": [],
+ "invitations": [],
+ "approved_rsvps": [
+ {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "resolved_photo_url": "http://localhost:3000/assets/shared/avatar_generic.png",
+ "full_score": null,
+ "audio_latency": 5,
+ "internet_score": null,
+ "instrument_list": [
+ {
+ "id": "other",
+ "desc": "Other",
+ "level": 1
+ }
+ ],
+ "rsvp_request_id": "103357a2-f2d9-496b-a52d-40ec50ddc47d"
+ }
+ ],
+ "open_slots": [],
+ "pending_invitations": [],
+ "pending_rsvp_requests": [],
+ "lesson_session": null,
+ "active_music_session": null,
+ "can_join": true,
+ "share_url": "http://www.jamkazam.local:3100/s/YJSXUSG4DW",
+ "genres": [
+ "Pop"
+ ],
+ "scheduled_start": "Tue 20 January 2026 15:45:00",
+ "pretty_scheduled_start_with_timezone": "Wednesday, January 21, 3:15-3:15 AM Asia/Kolkata",
+ "pretty_scheduled_start_short": "Wednesday, January 21 - 3:15am"
+ },
+ "timestamp": "2026-01-20T10:15:57.680Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/history?includePending=false",
+ "body": {
+ "id": "02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "music_session_id": null,
+ "name": "Private Test Session",
+ "description": "Private session set up just to test things out in the session interface by myself.",
+ "musician_access": false,
+ "approval_required": false,
+ "fan_access": false,
+ "fan_chat": false,
+ "create_type": "quick-start",
+ "band_id": null,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "genre_id": "pop",
+ "created_at": "2026-01-20T10:15:57.311Z",
+ "like_count": 0,
+ "comment_count": 0,
+ "play_count": 0,
+ "scheduled_duration": "01:00:00",
+ "language": "eng",
+ "recurring_mode": "once",
+ "language_description": "English",
+ "scheduled_start_date": "Tue 20 January 2026",
+ "access_description": "Only RSVP musicians may join. Fans may not listen to session.",
+ "timezone": "Central Time (US & Canada),America/Chicago",
+ "timezone_id": "America/Chicago",
+ "timezone_description": "Central Time (US & Canada)",
+ "musician_access_description": "Only RSVP musicians may join",
+ "fan_access_description": "Fans may not listen to session",
+ "session_removed_at": null,
+ "legal_policy": "Standard",
+ "open_rsvps": false,
+ "is_unstructured_rsvp?": false,
+ "friends_can_join": false,
+ "use_video_conferencing_server": true,
+ "creator": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "name": "Nuwan Chaturanga",
+ "photo_url": null
+ },
+ "band": null,
+ "users": [],
+ "comments": [],
+ "session_info_comments": [],
+ "music_notations": [],
+ "invitations": [],
+ "approved_rsvps": [
+ {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "resolved_photo_url": "http://localhost:3000/assets/shared/avatar_generic.png",
+ "full_score": null,
+ "audio_latency": 5,
+ "internet_score": null,
+ "instrument_list": [
+ {
+ "id": "other",
+ "desc": "Other",
+ "level": 1
+ }
+ ],
+ "rsvp_request_id": "103357a2-f2d9-496b-a52d-40ec50ddc47d"
+ }
+ ],
+ "open_slots": [],
+ "pending_invitations": [],
+ "pending_rsvp_requests": [],
+ "lesson_session": null,
+ "active_music_session": null,
+ "can_join": true,
+ "share_url": "http://www.jamkazam.local:3100/s/YJSXUSG4DW",
+ "genres": [
+ "Pop"
+ ],
+ "scheduled_start": "Tue 20 January 2026 15:45:00",
+ "pretty_scheduled_start_with_timezone": "Wednesday, January 21, 3:15-3:15 AM Asia/Kolkata",
+ "pretty_scheduled_start_short": "Wednesday, January 21 - 3:15am"
+ },
+ "timestamp": "2026-01-20T10:15:57.729Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/config/client?",
+ "timestamp": "2026-01-20T10:15:57.748Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/config/client?",
+ "body": {
+ "top_message": null,
+ "event_page_top_logo_url": "/assets/event/eventbrite-logo.png"
+ },
+ "timestamp": "2026-01-20T10:15:57.766Z"
+ },
+ {
+ "type": "request",
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/participants",
+ "timestamp": "2026-01-20T10:15:57.929Z"
+ },
+ {
+ "type": "response",
+ "status": 201,
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/participants",
+ "body": {
+ "id": "02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "name": "Private Test Session",
+ "description": "Private session set up just to test things out in the session interface by myself.",
+ "musician_access": false,
+ "approval_required": false,
+ "friends_can_join": false,
+ "fan_access": false,
+ "fan_chat": false,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "claimed_recording_initiator_id": null,
+ "track_changes_counter": 0,
+ "max_score": 0,
+ "backing_track_path": null,
+ "metronome_active": false,
+ "jam_track_initiator_id": null,
+ "jam_track_id": null,
+ "music_session_id_int": 3061,
+ "use_video_conferencing_server": true,
+ "music_notations": [],
+ "participants": [
+ {
+ "ip_address": "127.0.0.1",
+ "client_id": "b39b584a-5249-4065-9fcb-ca21d8e69b0a",
+ "joined_session_at": "2026-01-20T10:15:57.996Z",
+ "id": "a37e4a35-f994-4707-bd68-4150ae45bd6a",
+ "metronome_open": false,
+ "is_jamblaster": false,
+ "client_role": "parent",
+ "parent_client_id": "",
+ "client_id_int": 93862,
+ "tracks": [
+ {
+ "id": "2033f806-44b4-40a7-8eb3-4b4470b1ddb9",
+ "connection_id": "a37e4a35-f994-4707-bd68-4150ae45bd6a",
+ "instrument_id": "piano",
+ "sound": "stereo",
+ "client_track_id": "d4734735-0acb-4e87-9737-320efb024b3f",
+ "client_resource_id": "0x60000117dab0",
+ "updated_at": "2026-01-20T10:15:57.999Z",
+ "instrument": "Piano"
+ }
+ ],
+ "backing_tracks": [],
+ "user": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "name": "Nuwan Chaturanga",
+ "is_friend": false,
+ "connection_state": "connected",
+ "subscription": "jamsubplatinum"
+ }
+ }
+ ],
+ "invitations": [],
+ "lesson_session": null,
+ "join_requests": [],
+ "jam_track": null,
+ "claimed_recording": null,
+ "subscription": {
+ "play_time_per_month": null,
+ "play_time_per_session": null,
+ "can_record_audio": true,
+ "can_record_video": true,
+ "can_use_video": true,
+ "can_record_wave": true,
+ "video_resolution": 4,
+ "audio_max_bitrate": 5,
+ "can_broadcast": true,
+ "broadcasting_type": 3,
+ "max_players": null,
+ "pro_audio": true,
+ "has_support": true,
+ "name": "Platinum",
+ "rank": 3,
+ "remaining_month_play_time": null
+ },
+ "session_rules": {
+ "remaining_session_play_time": null
+ },
+ "can_join": true,
+ "genres": [
+ "Pop"
+ ],
+ "recording": null,
+ "share_url": "http://www.jamkazam.local:3100/s/YJSXUSG4DW",
+ "session_controller_id": "27bd4a30-d1b8-4eea-8454-01a104d59381"
+ },
+ "timestamp": "2026-01-20T10:15:58.327Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification",
+ "timestamp": "2026-01-20T10:15:58.794Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/chat?type=CHAT_MESSAGE&limit=20&page=0&channel=session&music_session=02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "timestamp": "2026-01-20T10:15:58.809Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification",
+ "body": {},
+ "timestamp": "2026-01-20T10:15:58.835Z"
+ },
+ {
+ "type": "request",
+ "method": "PUT",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "timestamp": "2026-01-20T10:15:58.859Z"
+ },
+ {
+ "type": "response",
+ "status": 204,
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "body": null,
+ "timestamp": "2026-01-20T10:15:58.963Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "timestamp": "2026-01-20T10:15:58.964Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/chat?type=CHAT_MESSAGE&limit=20&page=0&channel=session&music_session=02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "body": {
+ "next": null,
+ "chats": []
+ },
+ "timestamp": "2026-01-20T10:15:58.968Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "body": {
+ "id": "02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "name": "Private Test Session",
+ "description": "Private session set up just to test things out in the session interface by myself.",
+ "musician_access": false,
+ "approval_required": false,
+ "friends_can_join": false,
+ "fan_access": false,
+ "fan_chat": false,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "claimed_recording_initiator_id": null,
+ "track_changes_counter": 1,
+ "max_score": 0,
+ "backing_track_path": null,
+ "metronome_active": false,
+ "jam_track_initiator_id": null,
+ "jam_track_id": null,
+ "music_session_id_int": 3061,
+ "use_video_conferencing_server": true,
+ "music_notations": [],
+ "participants": [
+ {
+ "ip_address": "127.0.0.1",
+ "client_id": "b39b584a-5249-4065-9fcb-ca21d8e69b0a",
+ "joined_session_at": "2026-01-20T10:15:57.996Z",
+ "id": "a37e4a35-f994-4707-bd68-4150ae45bd6a",
+ "metronome_open": true,
+ "is_jamblaster": false,
+ "client_role": "parent",
+ "parent_client_id": "",
+ "client_id_int": 93862,
+ "tracks": [
+ {
+ "id": "2033f806-44b4-40a7-8eb3-4b4470b1ddb9",
+ "connection_id": "a37e4a35-f994-4707-bd68-4150ae45bd6a",
+ "instrument_id": "piano",
+ "sound": "stereo",
+ "client_track_id": "d4734735-0acb-4e87-9737-320efb024b3f",
+ "client_resource_id": "0x60000117dab0",
+ "updated_at": "2026-01-20T10:15:57.999Z",
+ "instrument": "Piano"
+ }
+ ],
+ "backing_tracks": [],
+ "user": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "name": "Nuwan Chaturanga",
+ "is_friend": false,
+ "connection_state": "connected",
+ "subscription": "jamsubplatinum"
+ }
+ }
+ ],
+ "invitations": [],
+ "lesson_session": null,
+ "join_requests": [],
+ "jam_track": null,
+ "claimed_recording": null,
+ "can_join": true,
+ "genres": [
+ "Pop"
+ ],
+ "recording": null,
+ "share_url": "http://www.jamkazam.local:3100/s/YJSXUSG4DW",
+ "session_controller_id": "27bd4a30-d1b8-4eea-8454-01a104d59381"
+ },
+ "timestamp": "2026-01-20T10:15:59.052Z"
+ },
+ {
+ "type": "request",
+ "method": "PUT",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "timestamp": "2026-01-20T10:15:59.264Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "timestamp": "2026-01-20T10:15:59.317Z"
+ },
+ {
+ "type": "response",
+ "status": 204,
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "body": null,
+ "timestamp": "2026-01-20T10:15:59.318Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "body": {
+ "id": "02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "name": "Private Test Session",
+ "description": "Private session set up just to test things out in the session interface by myself.",
+ "musician_access": false,
+ "approval_required": false,
+ "friends_can_join": false,
+ "fan_access": false,
+ "fan_chat": false,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "claimed_recording_initiator_id": null,
+ "track_changes_counter": 2,
+ "max_score": 0,
+ "backing_track_path": null,
+ "metronome_active": false,
+ "jam_track_initiator_id": null,
+ "jam_track_id": null,
+ "music_session_id_int": 3061,
+ "use_video_conferencing_server": true,
+ "music_notations": [],
+ "participants": [
+ {
+ "ip_address": "127.0.0.1",
+ "client_id": "b39b584a-5249-4065-9fcb-ca21d8e69b0a",
+ "joined_session_at": "2026-01-20T10:15:57.996Z",
+ "id": "a37e4a35-f994-4707-bd68-4150ae45bd6a",
+ "metronome_open": true,
+ "is_jamblaster": false,
+ "client_role": "parent",
+ "parent_client_id": "",
+ "client_id_int": 93862,
+ "tracks": [
+ {
+ "id": "2033f806-44b4-40a7-8eb3-4b4470b1ddb9",
+ "connection_id": "a37e4a35-f994-4707-bd68-4150ae45bd6a",
+ "instrument_id": "piano",
+ "sound": "stereo",
+ "client_track_id": "d4734735-0acb-4e87-9737-320efb024b3f",
+ "client_resource_id": "0x60000117dab0",
+ "updated_at": "2026-01-20T10:15:57.999Z",
+ "instrument": "Piano"
+ }
+ ],
+ "backing_tracks": [],
+ "user": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "name": "Nuwan Chaturanga",
+ "is_friend": false,
+ "connection_state": "connected",
+ "subscription": "jamsubplatinum"
+ }
+ }
+ ],
+ "invitations": [],
+ "lesson_session": null,
+ "join_requests": [],
+ "jam_track": null,
+ "claimed_recording": null,
+ "can_join": true,
+ "genres": [
+ "Pop"
+ ],
+ "recording": null,
+ "share_url": "http://www.jamkazam.local:3100/s/YJSXUSG4DW",
+ "session_controller_id": "27bd4a30-d1b8-4eea-8454-01a104d59381"
+ },
+ "timestamp": "2026-01-20T10:15:59.352Z"
+ },
+ {
+ "type": "request",
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/udp_reachable",
+ "timestamp": "2026-01-20T10:15:59.547Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/udp_reachable",
+ "body": {
+ "id": "a37e4a35-f994-4707-bd68-4150ae45bd6a",
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "client_id": "b39b584a-5249-4065-9fcb-ca21d8e69b0a",
+ "created_at": "2026-01-20T10:15:55.601Z",
+ "updated_at": "2026-01-20T10:15:58.008Z",
+ "music_session_id": "02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "ip_address": "127.0.0.1",
+ "as_musician": true,
+ "aasm_state": "connected",
+ "addr": 2130706433,
+ "locidispid": null,
+ "joined_session_at": "2026-01-20T10:15:57.996Z",
+ "client_type": "browser",
+ "stale_time": 40,
+ "expire_time": 60,
+ "last_jam_audio_latency": null,
+ "channel_id": "cda1cd05-a1e0-4c7e-c7a3-dfa8afe48761",
+ "udp_reachable": false,
+ "scoring_timeout": "2026-01-20T10:15:55.601Z",
+ "scoring_failures": 0,
+ "scoring_timeout_occurrences": 0,
+ "scoring_failures_offset": 0,
+ "gateway": "default-1",
+ "is_network_testing": false,
+ "metronome_open": true,
+ "user_active": true,
+ "is_jamblaster": false,
+ "client_role": "parent",
+ "parent_client_id": "",
+ "client_id_int": 93862
+ },
+ "timestamp": "2026-01-20T10:15:59.566Z"
+ },
+ {
+ "type": "request",
+ "method": "PUT",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "timestamp": "2026-01-20T10:16:05.013Z"
+ },
+ {
+ "type": "response",
+ "status": 204,
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "body": null,
+ "timestamp": "2026-01-20T10:16:05.045Z"
+ },
+ {
+ "type": "request",
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "timestamp": "2026-01-20T10:16:05.049Z"
+ },
+ {
+ "type": "response",
+ "status": 200,
+ "url": "http://www.jamkazam.local:3100/api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "body": {
+ "id": "02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "name": "Private Test Session",
+ "description": "Private session set up just to test things out in the session interface by myself.",
+ "musician_access": false,
+ "approval_required": false,
+ "friends_can_join": false,
+ "fan_access": false,
+ "fan_chat": false,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "claimed_recording_initiator_id": null,
+ "track_changes_counter": 3,
+ "max_score": 0,
+ "backing_track_path": null,
+ "metronome_active": false,
+ "jam_track_initiator_id": null,
+ "jam_track_id": null,
+ "music_session_id_int": 3061,
+ "use_video_conferencing_server": true,
+ "music_notations": [],
+ "participants": [
+ {
+ "ip_address": "127.0.0.1",
+ "client_id": "b39b584a-5249-4065-9fcb-ca21d8e69b0a",
+ "joined_session_at": "2026-01-20T10:15:57.996Z",
+ "id": "a37e4a35-f994-4707-bd68-4150ae45bd6a",
+ "metronome_open": true,
+ "is_jamblaster": false,
+ "client_role": "parent",
+ "parent_client_id": "",
+ "client_id_int": 93862,
+ "tracks": [
+ {
+ "id": "2033f806-44b4-40a7-8eb3-4b4470b1ddb9",
+ "connection_id": "a37e4a35-f994-4707-bd68-4150ae45bd6a",
+ "instrument_id": "piano",
+ "sound": "stereo",
+ "client_track_id": "d4734735-0acb-4e87-9737-320efb024b3f",
+ "client_resource_id": "0x60000117dab0",
+ "updated_at": "2026-01-20T10:15:57.999Z",
+ "instrument": "Piano"
+ }
+ ],
+ "backing_tracks": [],
+ "user": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "name": "Nuwan Chaturanga",
+ "is_friend": false,
+ "connection_state": "connected",
+ "subscription": "jamsubplatinum"
+ }
+ }
+ ],
+ "invitations": [],
+ "lesson_session": null,
+ "join_requests": [],
+ "jam_track": null,
+ "claimed_recording": null,
+ "can_join": true,
+ "genres": [
+ "Pop"
+ ],
+ "recording": null,
+ "share_url": "http://www.jamkazam.local:3100/s/YJSXUSG4DW",
+ "session_controller_id": "27bd4a30-d1b8-4eea-8454-01a104d59381"
+ },
+ "timestamp": "2026-01-20T10:16:05.176Z"
+ }
+]
\ No newline at end of file
diff --git a/jam-ui/test/fixtures/legacy-sequences/summary.json b/jam-ui/test/fixtures/legacy-sequences/summary.json
new file mode 100644
index 000000000..5f77445c3
--- /dev/null
+++ b/jam-ui/test/fixtures/legacy-sequences/summary.json
@@ -0,0 +1,128 @@
+{
+ "totalCalls": 70,
+ "uniqueEndpoints": 25,
+ "endpoints": [
+ {
+ "endpoint": "GET /api/genres",
+ "count": 7
+ },
+ {
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "count": 4
+ },
+ {
+ "endpoint": "GET /api/countries",
+ "count": 2
+ },
+ {
+ "endpoint": "GET /api/shopping_carts",
+ "count": 2
+ },
+ {
+ "endpoint": "GET /api/jamtracks/purchased",
+ "count": 5
+ },
+ {
+ "endpoint": "GET /api/teacher_distributions",
+ "count": 2
+ },
+ {
+ "endpoint": "GET /api/regions",
+ "count": 2
+ },
+ {
+ "endpoint": "POST /xoplatform/logger/api/logger",
+ "count": 4
+ },
+ {
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification",
+ "count": 2
+ },
+ {
+ "endpoint": "GET /api/instruments",
+ "count": 6
+ },
+ {
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "count": 4
+ },
+ {
+ "endpoint": "GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications",
+ "count": 2
+ },
+ {
+ "endpoint": "GET /api/languages",
+ "count": 2
+ },
+ {
+ "endpoint": "GET /api/subjects",
+ "count": 2
+ },
+ {
+ "endpoint": "GET /api/chat",
+ "count": 3
+ },
+ {
+ "endpoint": "GET /api/versioncheck",
+ "count": 6
+ },
+ {
+ "endpoint": "GET /api/healthcheck",
+ "count": 1
+ },
+ {
+ "endpoint": "GET /api/config/client",
+ "count": 2
+ },
+ {
+ "endpoint": "GET /api/sessions/scheduled",
+ "count": 2
+ },
+ {
+ "endpoint": "POST /api/sessions",
+ "count": 1
+ },
+ {
+ "endpoint": "GET /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/history",
+ "count": 1
+ },
+ {
+ "endpoint": "POST /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/participants",
+ "count": 1
+ },
+ {
+ "endpoint": "PUT /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks",
+ "count": 3
+ },
+ {
+ "endpoint": "GET /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23",
+ "count": 3
+ },
+ {
+ "endpoint": "POST /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/udp_reachable",
+ "count": 1
+ }
+ ],
+ "steps": [
+ {
+ "step": "login",
+ "callCount": 12
+ },
+ {
+ "step": "dashboard",
+ "callCount": 16
+ },
+ {
+ "step": "skip-modal",
+ "callCount": 1
+ },
+ {
+ "step": "navigate-to-session",
+ "callCount": 3
+ },
+ {
+ "step": "session-creation",
+ "callCount": 38
+ }
+ ]
+}
\ No newline at end of file
diff --git a/jam-ui/test/test-results/api-verification/login-actual-calls.json b/jam-ui/test/test-results/api-verification/login-actual-calls.json
new file mode 100644
index 000000000..5ba94316c
--- /dev/null
+++ b/jam-ui/test/test-results/api-verification/login-actual-calls.json
@@ -0,0 +1,1121 @@
+[
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/app_features?env=development",
+ "pathname": "/api/app_features",
+ "timestamp": 1768921509276,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 10351,
+ "responseStatus": 403,
+ "responseHeaders": {
+ "x-runtime": "0.029315",
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "no-cache",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "72bde50f-a973-45f4-b501-64eddd3e4b1e"
+ },
+ "responseBody": {
+ "message": "not logged in"
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/me",
+ "pathname": "/api/me",
+ "timestamp": 1768921509278,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 10416,
+ "responseStatus": 403,
+ "responseHeaders": {
+ "x-runtime": "0.126912",
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "no-cache",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "802a8567-0b81-4fad-86cf-e76c7fa04805"
+ },
+ "responseBody": {
+ "message": "not logged in"
+ }
+ },
+ {
+ "method": "UNKNOWN",
+ "url": "http://www.jamkazam.local:3000/api/me",
+ "pathname": "/api/me",
+ "timestamp": 1768921520102,
+ "responseStatus": 403,
+ "responseHeaders": {
+ "x-runtime": "0.082789",
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "no-cache",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "dd269772-fd50-42dd-ab5d-347f998a16f1"
+ }
+ },
+ {
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3000/api/auths/login",
+ "pathname": "/api/auths/login",
+ "timestamp": 1768921520674,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "requestBody": {
+ "email": "nuwan@jamkazam.com",
+ "password": "jam123"
+ },
+ "duration": 283,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "c351b9f8-5ed8-4138-bf0a-d15a58b5cefb",
+ "x-runtime": "0.262727",
+ "etag": "W/\"4dabf8a16746ec83912e82c5fa748292\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "photo_url": null,
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "email": "nuwan@jamkazam.com"
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/me",
+ "pathname": "/api/me",
+ "timestamp": 1768921520986,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 649,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "f8410c08-9e4e-4586-a37b-8219e5d71199",
+ "x-runtime": "0.061384",
+ "etag": "W/\"2e8034d03a4995b365b8712aa77099d7\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "email": "nuwan@jamkazam.com",
+ "photo_url": null,
+ "show_free_jamtrack": false,
+ "is_affiliate_partner": false,
+ "recording_pref": 1
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/app_features?env=development",
+ "pathname": "/api/app_features",
+ "timestamp": 1768921520986,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 653,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "39989fc5-f109-4878-9a75-04555d4574f1",
+ "x-runtime": "0.098484",
+ "etag": "W/\"d68f143b6187789a415d622035e65268\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": []
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/profile",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/profile",
+ "timestamp": 1768921521963,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 193,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "4b84cb5f-e176-456f-b1bf-70dd03616f17",
+ "x-runtime": "0.165574",
+ "etag": "W/\"7abc69d192a226c06196c531c03518c1\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "city": "Dallas",
+ "state": "TX",
+ "country": "US",
+ "location": "Dallas, TX",
+ "online": true,
+ "photo_url": null,
+ "musician": true,
+ "gender": "M",
+ "birth_date": null,
+ "friend_count": 1,
+ "liker_count": 0,
+ "follower_count": 77,
+ "following_count": 130,
+ "recording_count": 0,
+ "session_count": 0,
+ "biography": "This is description with special charact xxxxxxaaaasasasas",
+ "favorite_count": 0,
+ "audio_latency": null,
+ "upcoming_session_count": 0,
+ "age": null,
+ "website": "www.nuwanchaturanga.me",
+ "skill_level": 2,
+ "concert_count": 1,
+ "studio_session_count": 1,
+ "virtual_band": false,
+ "virtual_band_commitment": 2,
+ "traditional_band": false,
+ "traditional_band_commitment": null,
+ "traditional_band_touring": false,
+ "paid_sessions": true,
+ "paid_sessions_hourly_rate": 19900,
+ "paid_sessions_daily_rate": 200000,
+ "free_sessions": true,
+ "cowriting": false,
+ "cowriting_purpose": 2,
+ "subscribe_email": false,
+ "is_a_teacher": true,
+ "is_a_student": false,
+ "last_active_timestamp": 1768904367,
+ "v2_photo_url": "https://cdn.filestackcontent.com/grIRdpVyTgeCF7boVGNJ",
+ "v2_photo_uploaded": true,
+ "has_stored_credit_card?": true,
+ "online_presences": [
+ {
+ "id": "32fb4cd7-2a49-4691-8948-0b90a0f4e004",
+ "service_type": "soundcloud",
+ "username": "nuwanc"
+ },
+ {
+ "id": "ca988152-4f5e-4239-b6d2-a02fe02584f1",
+ "service_type": "reverbnation",
+ "username": "nuwanmusic"
+ },
+ {
+ "id": "7f6c3ace-aba7-4386-8b01-eb89b796d6bd",
+ "service_type": "bandcamp",
+ "username": "flutenuwan"
+ },
+ {
+ "id": "990b14f5-bec6-43a9-974e-fbc720ce5a15",
+ "service_type": "youtube",
+ "username": "flute by nuwan"
+ },
+ {
+ "id": "1a711996-b43a-4c0d-b12e-8777109c6e50",
+ "service_type": "facebook",
+ "username": "nuwan.chaturanga"
+ },
+ {
+ "id": "13f7785f-4625-4e4d-8234-81ad71ed1887",
+ "service_type": "twitter",
+ "username": "nchatu"
+ }
+ ],
+ "performance_samples": [],
+ "genres": [
+ {
+ "genre_id": "acapella",
+ "player_type": "JamRuby::User",
+ "genre_type": "paid_sessions"
+ },
+ {
+ "genre_id": "african",
+ "player_type": "JamRuby::User",
+ "genre_type": "paid_sessions"
+ },
+ {
+ "genre_id": "alternative rock",
+ "player_type": "JamRuby::User",
+ "genre_type": "paid_sessions"
+ },
+ {
+ "genre_id": "ambient",
+ "player_type": "JamRuby::User",
+ "genre_type": "paid_sessions"
+ },
+ {
+ "genre_id": "drum & bass",
+ "player_type": "JamRuby::User",
+ "genre_type": "free_sessions"
+ },
+ {
+ "genre_id": "electronic",
+ "player_type": "JamRuby::User",
+ "genre_type": "free_sessions"
+ },
+ {
+ "genre_id": "folk",
+ "player_type": "JamRuby::User",
+ "genre_type": "free_sessions"
+ },
+ {
+ "genre_id": "funk",
+ "player_type": "JamRuby::User",
+ "genre_type": "free_sessions"
+ },
+ {
+ "genre_id": "psychedelic",
+ "player_type": "JamRuby::User",
+ "genre_type": "cowriting"
+ },
+ {
+ "genre_id": "punk",
+ "player_type": "JamRuby::User",
+ "genre_type": "cowriting"
+ },
+ {
+ "genre_id": "r&b",
+ "player_type": "JamRuby::User",
+ "genre_type": "cowriting"
+ },
+ {
+ "genre_id": "rap",
+ "player_type": "JamRuby::User",
+ "genre_type": "cowriting"
+ }
+ ],
+ "bands": [
+ {
+ "id": "32df51d1-e323-4f02-80ba-63229b4861ed",
+ "name": "Martine Johnston",
+ "admin": false,
+ "photo_url": null,
+ "logo_url": null,
+ "website": "http://ankundinggraham.net/genoveva",
+ "genres": [
+ {
+ "id": "country",
+ "description": "Country"
+ },
+ {
+ "id": "hip hop",
+ "description": "Hip Hop"
+ },
+ {
+ "id": "techno",
+ "description": "Techno"
+ }
+ ]
+ },
+ {
+ "id": "74f50a3d-df82-47f5-8053-0281bc27403f",
+ "name": "JMam",
+ "admin": false,
+ "photo_url": null,
+ "logo_url": null,
+ "website": null,
+ "genres": [
+ {
+ "id": "blues",
+ "description": "Blues"
+ }
+ ]
+ },
+ {
+ "id": "fc24a1e0-f212-4418-98d9-f0514e0cc699",
+ "name": "Uturn",
+ "admin": false,
+ "photo_url": null,
+ "logo_url": null,
+ "website": null,
+ "genres": [
+ {
+ "id": "reggae",
+ "description": "Reggae"
+ }
+ ]
+ }
+ ],
+ "instruments": [],
+ "has_recurly_account": true,
+ "created_at_timestamp": 1621620928
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/my_notifications?offset=0&limit=20",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/my_notifications",
+ "timestamp": 1768921521963,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 336,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "7e512081-a75d-4b7b-aed8-e573edc6c3b9",
+ "x-runtime": "0.108055",
+ "etag": "W/\"f0997f4989ad2873787ec48e4e658357\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "next": null,
+ "unread_total": 0,
+ "notifications": []
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/instruments",
+ "pathname": "/api/instruments",
+ "timestamp": 1768921521965,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 518,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "b7a8c4df-af6e-4599-932b-15ea9937b58a",
+ "x-runtime": "0.220971",
+ "etag": "W/\"245d036f1b39bdde1206a6671360184a\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": [
+ {
+ "id": "accordion",
+ "description": "Accordion",
+ "popularity": 2
+ },
+ {
+ "id": "acoustic guitar",
+ "description": "Acoustic Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "bagpipes",
+ "description": "Bagpipes",
+ "popularity": 1
+ },
+ {
+ "id": "banjo",
+ "description": "Banjo",
+ "popularity": 2
+ },
+ {
+ "id": "bass guitar",
+ "description": "Bass Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "bassoon",
+ "description": "Bassoon",
+ "popularity": 1
+ },
+ {
+ "id": "cello",
+ "description": "Cello",
+ "popularity": 1
+ },
+ {
+ "id": "charango",
+ "description": "Charango",
+ "popularity": 1
+ },
+ {
+ "id": "clarinet",
+ "description": "Clarinet",
+ "popularity": 2
+ },
+ {
+ "id": "computer",
+ "description": "Computer",
+ "popularity": 3
+ },
+ {
+ "id": "dobro",
+ "description": "Dobro",
+ "popularity": 1
+ },
+ {
+ "id": "double bass",
+ "description": "Double Bass",
+ "popularity": 2
+ },
+ {
+ "id": "drums",
+ "description": "Drums",
+ "popularity": 3
+ },
+ {
+ "id": "electric guitar",
+ "description": "Electric Guitar",
+ "popularity": 3
+ },
+ {
+ "id": "euphonium",
+ "description": "Euphonium",
+ "popularity": 1
+ },
+ {
+ "id": "flugelhorn",
+ "description": "Flugelhorn",
+ "popularity": 1
+ },
+ {
+ "id": "flute",
+ "description": "Flute",
+ "popularity": 2
+ },
+ {
+ "id": "french horn",
+ "description": "French Horn",
+ "popularity": 1
+ },
+ {
+ "id": "glockenspiel",
+ "description": "Glockenspiel",
+ "popularity": 1
+ },
+ {
+ "id": "harmonica",
+ "description": "Harmonica",
+ "popularity": 2
+ },
+ {
+ "id": "harp",
+ "description": "Harp",
+ "popularity": 1
+ },
+ {
+ "id": "keyboard",
+ "description": "Keyboard",
+ "popularity": 3
+ },
+ {
+ "id": "mandolin",
+ "description": "Mandolin",
+ "popularity": 1
+ },
+ {
+ "id": "oboe",
+ "description": "Oboe",
+ "popularity": 1
+ },
+ {
+ "id": "orchestra",
+ "description": "Orchestra",
+ "popularity": 1
+ },
+ {
+ "id": "other",
+ "description": "Other",
+ "popularity": 1
+ },
+ {
+ "id": "piano",
+ "description": "Piano",
+ "popularity": 2
+ },
+ {
+ "id": "piccolo",
+ "description": "Piccolo",
+ "popularity": 1
+ },
+ {
+ "id": "saxophone",
+ "description": "Saxophone",
+ "popularity": 2
+ },
+ {
+ "id": "sitar",
+ "description": "Sitar",
+ "popularity": 1
+ },
+ {
+ "id": "steel guitar",
+ "description": "Steel Guitar",
+ "popularity": 1
+ },
+ {
+ "id": "theremin",
+ "description": "Theremin",
+ "popularity": 1
+ },
+ {
+ "id": "timpani",
+ "description": "Timpani",
+ "popularity": 1
+ },
+ {
+ "id": "trombone",
+ "description": "Trombone",
+ "popularity": 2
+ },
+ {
+ "id": "trumpet",
+ "description": "Trumpet",
+ "popularity": 2
+ },
+ {
+ "id": "tuba",
+ "description": "Tuba",
+ "popularity": 1
+ },
+ {
+ "id": "ukulele",
+ "description": "Ukulele",
+ "popularity": 1
+ },
+ {
+ "id": "viola",
+ "description": "Viola",
+ "popularity": 1
+ },
+ {
+ "id": "violin",
+ "description": "Violin",
+ "popularity": 2
+ },
+ {
+ "id": "vocoder",
+ "description": "Vocoder",
+ "popularity": 1
+ },
+ {
+ "id": "voice",
+ "description": "Voice",
+ "popularity": 3
+ }
+ ]
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/countries",
+ "pathname": "/api/countries",
+ "timestamp": 1768921521966,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 546,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "3b492459-bfe6-4430-b6cc-c8cb52d861d1",
+ "x-runtime": "0.043512",
+ "etag": "W/\"fec3b6158b06c52c8f631a3d881fd814\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "countriesx": [
+ {
+ "countrycode": "US",
+ "countryname": "United States"
+ }
+ ]
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/genres",
+ "pathname": "/api/genres",
+ "timestamp": 1768921521965,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 1129,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "a3e812af-dca8-4e7a-8894-9e4668b32401",
+ "x-runtime": "0.220261",
+ "etag": "W/\"c6c75dd9c88ce6b32ec03b52c4905ad0\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": [
+ {
+ "id": "acapella",
+ "description": "A Cappella"
+ },
+ {
+ "id": "african",
+ "description": "African"
+ },
+ {
+ "id": "alternative rock",
+ "description": "Alternative Rock"
+ },
+ {
+ "id": "ambient",
+ "description": "Ambient"
+ },
+ {
+ "id": "americana",
+ "description": "Americana"
+ },
+ {
+ "id": "asian",
+ "description": "Asian"
+ },
+ {
+ "id": "avante-garde",
+ "description": "Avante-Garde"
+ },
+ {
+ "id": "bluegrass",
+ "description": "Bluegrass"
+ },
+ {
+ "id": "blues",
+ "description": "Blues"
+ },
+ {
+ "id": "breakbeat",
+ "description": "Breakbeat"
+ },
+ {
+ "id": "celtic",
+ "description": "Celtic"
+ },
+ {
+ "id": "classical",
+ "description": "Classical"
+ },
+ {
+ "id": "country",
+ "description": "Country"
+ },
+ {
+ "id": "creole",
+ "description": "Creole"
+ },
+ {
+ "id": "dance",
+ "description": "Dance"
+ },
+ {
+ "id": "disco",
+ "description": "Disco"
+ },
+ {
+ "id": "downtempo",
+ "description": "Downtempo"
+ },
+ {
+ "id": "drum & bass",
+ "description": "Drum & Bass"
+ },
+ {
+ "id": "electronic",
+ "description": "Electronic"
+ },
+ {
+ "id": "folk",
+ "description": "Folk"
+ },
+ {
+ "id": "funk",
+ "description": "Funk"
+ },
+ {
+ "id": "hard rock",
+ "description": "Hard Rock"
+ },
+ {
+ "id": "hip hop",
+ "description": "Hip Hop"
+ },
+ {
+ "id": "holiday",
+ "description": "Holiday"
+ },
+ {
+ "id": "house",
+ "description": "House"
+ },
+ {
+ "id": "industrial",
+ "description": "Industrial"
+ },
+ {
+ "id": "jazz",
+ "description": "Jazz"
+ },
+ {
+ "id": "kids",
+ "description": "Kids"
+ },
+ {
+ "id": "latin",
+ "description": "Latin"
+ },
+ {
+ "id": "metal",
+ "description": "Metal"
+ },
+ {
+ "id": "musical",
+ "description": "Musical"
+ },
+ {
+ "id": "oldies",
+ "description": "Oldies"
+ },
+ {
+ "id": "other",
+ "description": "Other"
+ },
+ {
+ "id": "pop",
+ "description": "Pop"
+ },
+ {
+ "id": "psychedelic",
+ "description": "Psychedelic"
+ },
+ {
+ "id": "punk",
+ "description": "Punk"
+ },
+ {
+ "id": "r&b",
+ "description": "R&B"
+ },
+ {
+ "id": "rap",
+ "description": "Rap"
+ },
+ {
+ "id": "reggae",
+ "description": "Reggae"
+ },
+ {
+ "id": "religious",
+ "description": "Religious"
+ },
+ {
+ "id": "rock",
+ "description": "Rock"
+ },
+ {
+ "id": "ska",
+ "description": "Ska"
+ },
+ {
+ "id": "soft rock",
+ "description": "Soft Rock"
+ },
+ {
+ "id": "soul",
+ "description": "Soul"
+ },
+ {
+ "id": "tv & movie soundtrack",
+ "description": "TV & Movie Soundtrack"
+ },
+ {
+ "id": "techno",
+ "description": "Techno"
+ },
+ {
+ "id": "traditional",
+ "description": "Traditional"
+ },
+ {
+ "id": "trance",
+ "description": "Trance"
+ },
+ {
+ "id": "world",
+ "description": "World"
+ }
+ ]
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/regions?country=US",
+ "pathname": "/api/regions",
+ "timestamp": 1768921522332,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 816,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "ece8f5bd-bd0c-4b0f-bcbf-4a648f2bcabd",
+ "x-runtime": "0.055930",
+ "etag": "W/\"2e0a392d8e82cb45af2f387a672c8e5e\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "regions": [
+ {
+ "region": "TN",
+ "name": null
+ },
+ {
+ "region": "ME",
+ "name": null
+ },
+ {
+ "region": "MA",
+ "name": null
+ },
+ {
+ "region": "TX",
+ "name": null
+ },
+ {
+ "region": "OK",
+ "name": null
+ },
+ {
+ "region": "WA",
+ "name": null
+ },
+ {
+ "region": "CO",
+ "name": null
+ },
+ {
+ "region": "CA",
+ "name": null
+ },
+ {
+ "region": "AR",
+ "name": null
+ },
+ {
+ "region": "FL",
+ "name": null
+ },
+ {
+ "region": "OR",
+ "name": null
+ }
+ ]
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/cities?country=US®ion=TX",
+ "pathname": "/api/cities",
+ "timestamp": 1768921522334,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 815,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "0d905a88-6a2a-40f7-9f20-a249e4c53a5e",
+ "x-runtime": "0.049610",
+ "etag": "W/\"cdf324acfbe0050f30c89cfc5ffa062c\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "cities": [
+ "Austin",
+ "Dallas",
+ "Houston",
+ "San Antonio"
+ ]
+ }
+ }
+]
\ No newline at end of file
diff --git a/jam-ui/test/test-results/api-verification/login-comparison-report.md b/jam-ui/test/test-results/api-verification/login-comparison-report.md
new file mode 100644
index 000000000..60da07acf
--- /dev/null
+++ b/jam-ui/test/test-results/api-verification/login-comparison-report.md
@@ -0,0 +1,109 @@
+# API Sequence Comparison Report
+
+## Summary
+
+- **Match Status:** ā FAIL
+- **Total Calls:** 13
+- **Matched Calls:** 3
+- **Match Percentage:** 23.1%
+
+## ā Missing API Calls
+
+The following expected API calls are missing or called fewer times:
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **GET /api/shopping_carts**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **GET /api/jamtracks/purchased**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **GET /api/teacher_distributions**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **POST /xoplatform/logger/api/logger**
+ - Expected: 4 call(s)
+ - Actual: 0 call(s)
+ - Missing: 4 call(s)
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+## ā ļø Extra API Calls
+
+The following API calls were made but not expected:
+
+- **GET /api/app_features**
+ - Expected: 0 call(s)
+ - Actual: 2 call(s)
+ - Extra: 2 call(s)
+
+- **GET /api/me**
+ - Expected: 0 call(s)
+ - Actual: 2 call(s)
+ - Extra: 2 call(s)
+
+- **UNKNOWN /api/me**
+ - Expected: 0 call(s)
+ - Actual: 1 call(s)
+ - Extra: 1 call(s)
+
+- **POST /api/auths/login**
+ - Expected: 0 call(s)
+ - Actual: 1 call(s)
+ - Extra: 1 call(s)
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/profile**
+ - Expected: 0 call(s)
+ - Actual: 1 call(s)
+ - Extra: 1 call(s)
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/my_notifications**
+ - Expected: 0 call(s)
+ - Actual: 1 call(s)
+ - Extra: 1 call(s)
+
+- **GET /api/instruments**
+ - Expected: 0 call(s)
+ - Actual: 1 call(s)
+ - Extra: 1 call(s)
+
+- **GET /api/cities**
+ - Expected: 0 call(s)
+ - Actual: 1 call(s)
+ - Extra: 1 call(s)
+
+## ā ļø Out of Order Calls
+
+The following API calls occurred in a different order:
+
+- **GET /api/genres**
+ - Expected position: 0
+ - Actual position: 10
+ - Deviation: 10 positions
+
+- **GET /api/countries**
+ - Expected position: 2
+ - Actual position: 9
+ - Deviation: 7 positions
+
+- **GET /api/regions**
+ - Expected position: 6
+ - Actual position: 11
+ - Deviation: 5 positions
+
+## ā Conclusion
+
+The API sequence does NOT match the expected baseline. Please review the mismatches above.
diff --git a/jam-ui/test/test-results/api-verification/session-creation-actual-calls.json b/jam-ui/test/test-results/api-verification/session-creation-actual-calls.json
new file mode 100644
index 000000000..0a7797307
--- /dev/null
+++ b/jam-ui/test/test-results/api-verification/session-creation-actual-calls.json
@@ -0,0 +1,1134 @@
+[
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/genres",
+ "pathname": "/api/genres",
+ "timestamp": 1768927718744,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 128,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "6b4c336d-9d26-4819-9da0-cdb39c21c71e",
+ "x-runtime": "0.124489",
+ "etag": "W/\"7a4947c7d3d991a9bf52fa991b6f957a\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": [
+ {
+ "id": "acapella",
+ "description": "A Cappella"
+ },
+ {
+ "id": "african",
+ "description": "African"
+ },
+ {
+ "id": "alternative rock",
+ "description": "Alternative Rock"
+ },
+ {
+ "id": "ambient",
+ "description": "Ambient"
+ },
+ {
+ "id": "americana",
+ "description": "Americana"
+ },
+ {
+ "id": "asian",
+ "description": "Asian"
+ },
+ {
+ "id": "avante-garde",
+ "description": "Avante-Garde"
+ },
+ {
+ "id": "bluegrass",
+ "description": "Bluegrass"
+ },
+ {
+ "id": "blues",
+ "description": "Blues"
+ },
+ {
+ "id": "breakbeat",
+ "description": "Breakbeat"
+ },
+ {
+ "id": "celtic",
+ "description": "Celtic"
+ },
+ {
+ "id": "classical",
+ "description": "Classical"
+ },
+ {
+ "id": "country",
+ "description": "Country"
+ },
+ {
+ "id": "creole",
+ "description": "Creole"
+ },
+ {
+ "id": "dance",
+ "description": "Dance"
+ },
+ {
+ "id": "disco",
+ "description": "Disco"
+ },
+ {
+ "id": "downtempo",
+ "description": "Downtempo"
+ },
+ {
+ "id": "drum & bass",
+ "description": "Drum & Bass"
+ },
+ {
+ "id": "electronic",
+ "description": "Electronic"
+ },
+ {
+ "id": "folk",
+ "description": "Folk"
+ },
+ {
+ "id": "funk",
+ "description": "Funk"
+ },
+ {
+ "id": "hard rock",
+ "description": "Hard Rock"
+ },
+ {
+ "id": "hip hop",
+ "description": "Hip Hop"
+ },
+ {
+ "id": "holiday",
+ "description": "Holiday"
+ },
+ {
+ "id": "house",
+ "description": "House"
+ },
+ {
+ "id": "industrial",
+ "description": "Industrial"
+ },
+ {
+ "id": "jazz",
+ "description": "Jazz"
+ },
+ {
+ "id": "kids",
+ "description": "Kids"
+ },
+ {
+ "id": "latin",
+ "description": "Latin"
+ },
+ {
+ "id": "metal",
+ "description": "Metal"
+ },
+ {
+ "id": "musical",
+ "description": "Musical"
+ },
+ {
+ "id": "oldies",
+ "description": "Oldies"
+ },
+ {
+ "id": "other",
+ "description": "Other"
+ },
+ {
+ "id": "pop",
+ "description": "Pop"
+ },
+ {
+ "id": "psychedelic",
+ "description": "Psychedelic"
+ },
+ {
+ "id": "punk",
+ "description": "Punk"
+ },
+ {
+ "id": "r&b",
+ "description": "R&B"
+ },
+ {
+ "id": "rap",
+ "description": "Rap"
+ },
+ {
+ "id": "reggae",
+ "description": "Reggae"
+ },
+ {
+ "id": "religious",
+ "description": "Religious"
+ },
+ {
+ "id": "rock",
+ "description": "Rock"
+ },
+ {
+ "id": "ska",
+ "description": "Ska"
+ },
+ {
+ "id": "soft rock",
+ "description": "Soft Rock"
+ },
+ {
+ "id": "soul",
+ "description": "Soul"
+ },
+ {
+ "id": "tv & movie soundtrack",
+ "description": "TV & Movie Soundtrack"
+ },
+ {
+ "id": "techno",
+ "description": "Techno"
+ },
+ {
+ "id": "traditional",
+ "description": "Traditional"
+ },
+ {
+ "id": "trance",
+ "description": "Trance"
+ },
+ {
+ "id": "world",
+ "description": "World"
+ }
+ ]
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/me",
+ "pathname": "/api/me",
+ "timestamp": 1768927718745,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 149,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "bfac9b72-c1af-4e69-94e9-42182fbc5f27",
+ "x-runtime": "0.019539",
+ "etag": "W/\"594e6f8c8545980d3b4b27fc80d80af7\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "email": "nuwan@jamkazam.com",
+ "photo_url": null,
+ "show_free_jamtrack": false,
+ "is_affiliate_partner": false,
+ "recording_pref": 1
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "timestamp": 1768927718744,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 280,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "afe5245c-6592-4c3d-bc48-cbf39dfbdbcf",
+ "x-runtime": "0.035659",
+ "etag": "W/\"234672fd4db3690be252ee51dc848be6\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": [
+ {
+ "id": "a09f9a7e-afb7-489d-870d-e13a336e0b97",
+ "first_name": "Seth",
+ "last_name": "Call",
+ "name": "Seth Call",
+ "location": "Boston, MA",
+ "city": "Boston",
+ "state": "MA",
+ "country": "US",
+ "musician": true,
+ "email": "nuwan+6@jamkazam.com",
+ "online": false,
+ "photo_url": "https://s3.amazonaws.com/jamkazam-dev-public/avatars/a09f9a7e-afb7-489d-870d-e13a336e0b97/8EfyNy2cQPaxEsypRviW_IMG_20231224_133203_HDR.jpg"
+ }
+ ]
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/my_notifications?offset=0&limit=20",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/my_notifications",
+ "timestamp": 1768927718918,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 144,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "da1107d9-d218-46e7-8125-f4a31adb14a5",
+ "x-runtime": "0.037747",
+ "etag": "W/\"7e31ea1778e257d697c025a6328a5d78\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "next": null,
+ "unread_total": 0,
+ "notifications": []
+ }
+ },
+ {
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3000/api/sessions",
+ "pathname": "/api/sessions",
+ "timestamp": 1768927722478,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "requestBody": {
+ "privacy": "1",
+ "description": "Automated test session",
+ "inviteeIds": "",
+ "musician_access": true,
+ "approval_required": false,
+ "legal_terms": true,
+ "start": "Tue Jan 20 2026 10:18 PM",
+ "duration": "60",
+ "invitations": [],
+ "timezone": "Central Time (US & Canada),America/Chicago",
+ "genres": [
+ "acapella"
+ ],
+ "friends_can_join": true,
+ "is_unstructured_rsvp": false,
+ "fan_chat": false,
+ "fan_access": false,
+ "legal_policy": "legal_policy",
+ "language": "eng",
+ "name": "my session",
+ "rsvp_slots": [
+ {
+ "instrument_id": "other",
+ "proficiency_level": 3,
+ "approve": true
+ }
+ ]
+ },
+ "duration": 578,
+ "responseStatus": 201,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "e8408e38-f9dd-4c2d-aab6-7d48b9d88132",
+ "x-runtime": "0.587713",
+ "etag": "W/\"087d1cf79e0bd3757dd0b165e585dd19\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "id": "6278e6f5-013b-4cd2-8e54-061ea6306d66",
+ "music_session_id": null,
+ "name": "my session",
+ "description": "Automated test session",
+ "musician_access": true,
+ "approval_required": false,
+ "fan_access": false,
+ "fan_chat": false,
+ "create_type": null,
+ "band_id": null,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "genre_id": "acapella",
+ "created_at": "2026-01-20T16:48:42.754Z",
+ "like_count": 0,
+ "comment_count": 0,
+ "play_count": 0,
+ "scheduled_duration": "01:00:00",
+ "language": "eng",
+ "recurring_mode": "once",
+ "language_description": "English",
+ "scheduled_start_date": "Wed 21 January 2026",
+ "access_description": "Musicians may join at will. Fans may not listen to session.",
+ "timezone": "Central Time (US & Canada),America/Chicago",
+ "timezone_id": "America/Chicago",
+ "timezone_description": "Central Time (US & Canada)",
+ "musician_access_description": "Musicians may join at will",
+ "fan_access_description": "Fans may not listen to session",
+ "session_removed_at": null,
+ "legal_policy": "legal_policy",
+ "open_rsvps": false,
+ "is_unstructured_rsvp?": false,
+ "friends_can_join": true,
+ "use_video_conferencing_server": true,
+ "creator": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "name": "Nuwan Chaturanga",
+ "photo_url": null
+ },
+ "band": null,
+ "users": [],
+ "comments": [],
+ "session_info_comments": [],
+ "music_notations": [],
+ "invitations": [],
+ "approved_rsvps": [
+ {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "resolved_photo_url": "http://localhost:3000/assets/shared/avatar_generic.png",
+ "full_score": null,
+ "audio_latency": 5,
+ "internet_score": null,
+ "instrument_list": [
+ {
+ "id": "other",
+ "desc": "Other",
+ "level": 3
+ }
+ ],
+ "rsvp_request_id": "b9447b96-431d-48aa-b35a-abe00544590b"
+ }
+ ],
+ "open_slots": [],
+ "pending_invitations": [],
+ "pending_rsvp_requests": [],
+ "lesson_session": null,
+ "active_music_session": null,
+ "can_join": true,
+ "share_url": "http://www.jamkazam.local:3000/s/ENKNHSKEQMC",
+ "genres": [
+ "A Cappella"
+ ],
+ "scheduled_start": "Tue 20 January 2026 22:18:00",
+ "pretty_scheduled_start_with_timezone": "Tuesday, January 20, 10:18-10:18 PM US Central Time",
+ "pretty_scheduled_start_short": "Tuesday, January 20 - 10:18pm"
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/me",
+ "pathname": "/api/me",
+ "timestamp": 1768927723154,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 41,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "ed73cffb-5edd-4c5a-baca-f323fc4ebb3d",
+ "x-runtime": "0.024595",
+ "etag": "W/\"560927ed10a8d78794da9584ba5f58f3\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "email": "nuwan@jamkazam.com",
+ "photo_url": null,
+ "show_free_jamtrack": false,
+ "is_affiliate_partner": false,
+ "recording_pref": 1
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/app_features?env=development",
+ "pathname": "/api/app_features",
+ "timestamp": 1768927723154,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 92,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "41ee7ec5-89c5-4046-afb5-ea6265200af4",
+ "x-runtime": "0.032665",
+ "etag": "W/\"264c649084c29d56da2f9dc7d49b47e9\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": []
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/my_notifications?offset=0&limit=20",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/my_notifications",
+ "timestamp": 1768927723285,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 59,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "01f61269-8492-48f2-a96d-ebac749226a3",
+ "x-runtime": "0.043336",
+ "etag": "W/\"1df9d0fca0b40ab27122935bceca9413\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "next": null,
+ "unread_total": 0,
+ "notifications": []
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "timestamp": 1768927723299,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 54,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "7dcccf13-5196-42db-94b3-b9fce6ac6e48",
+ "x-runtime": "0.045822",
+ "etag": "W/\"e1867853da6714e4b5229f107f19c75e\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": [
+ {
+ "id": "a09f9a7e-afb7-489d-870d-e13a336e0b97",
+ "first_name": "Seth",
+ "last_name": "Call",
+ "name": "Seth Call",
+ "location": "Boston, MA",
+ "city": "Boston",
+ "state": "MA",
+ "country": "US",
+ "musician": true,
+ "email": "nuwan+6@jamkazam.com",
+ "online": false,
+ "photo_url": "https://s3.amazonaws.com/jamkazam-dev-public/avatars/a09f9a7e-afb7-489d-870d-e13a336e0b97/8EfyNy2cQPaxEsypRviW_IMG_20231224_133203_HDR.jpg"
+ }
+ ]
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/sessions/6278e6f5-013b-4cd2-8e54-061ea6306d66/history?includePending=false",
+ "pathname": "/api/sessions/6278e6f5-013b-4cd2-8e54-061ea6306d66/history",
+ "timestamp": 1768927723299,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 268,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "d21b4e3c-16b5-4a7b-8b65-22c360586a1d",
+ "x-runtime": "0.217620",
+ "etag": "W/\"087d1cf79e0bd3757dd0b165e585dd19\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "id": "6278e6f5-013b-4cd2-8e54-061ea6306d66",
+ "music_session_id": null,
+ "name": "my session",
+ "description": "Automated test session",
+ "musician_access": true,
+ "approval_required": false,
+ "fan_access": false,
+ "fan_chat": false,
+ "create_type": null,
+ "band_id": null,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "genre_id": "acapella",
+ "created_at": "2026-01-20T16:48:42.754Z",
+ "like_count": 0,
+ "comment_count": 0,
+ "play_count": 0,
+ "scheduled_duration": "01:00:00",
+ "language": "eng",
+ "recurring_mode": "once",
+ "language_description": "English",
+ "scheduled_start_date": "Wed 21 January 2026",
+ "access_description": "Musicians may join at will. Fans may not listen to session.",
+ "timezone": "Central Time (US & Canada),America/Chicago",
+ "timezone_id": "America/Chicago",
+ "timezone_description": "Central Time (US & Canada)",
+ "musician_access_description": "Musicians may join at will",
+ "fan_access_description": "Fans may not listen to session",
+ "session_removed_at": null,
+ "legal_policy": "legal_policy",
+ "open_rsvps": false,
+ "is_unstructured_rsvp?": false,
+ "friends_can_join": true,
+ "use_video_conferencing_server": true,
+ "creator": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "name": "Nuwan Chaturanga",
+ "photo_url": null
+ },
+ "band": null,
+ "users": [],
+ "comments": [],
+ "session_info_comments": [],
+ "music_notations": [],
+ "invitations": [],
+ "approved_rsvps": [
+ {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "resolved_photo_url": "http://localhost:3000/assets/shared/avatar_generic.png",
+ "full_score": null,
+ "audio_latency": 5,
+ "internet_score": null,
+ "instrument_list": [
+ {
+ "id": "other",
+ "desc": "Other",
+ "level": 3
+ }
+ ],
+ "rsvp_request_id": "b9447b96-431d-48aa-b35a-abe00544590b"
+ }
+ ],
+ "open_slots": [],
+ "pending_invitations": [],
+ "pending_rsvp_requests": [],
+ "lesson_session": null,
+ "active_music_session": null,
+ "can_join": true,
+ "share_url": "http://www.jamkazam.local:3000/s/ENKNHSKEQMC",
+ "genres": [
+ "A Cappella"
+ ],
+ "scheduled_start": "Tue 20 January 2026 22:18:00",
+ "pretty_scheduled_start_with_timezone": "Tuesday, January 20, 10:18-10:18 PM US Central Time",
+ "pretty_scheduled_start_short": "Tuesday, January 20 - 10:18pm"
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/sessions/6278e6f5-013b-4cd2-8e54-061ea6306d66/history?includePending=false",
+ "pathname": "/api/sessions/6278e6f5-013b-4cd2-8e54-061ea6306d66/history",
+ "timestamp": 1768927723662,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 91,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "x-runtime": "0.090907",
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "etag": "W/\"087d1cf79e0bd3757dd0b165e585dd19\"",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "cache-control": "max-age=0, private, must-revalidate",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "9b6abe7f-6cde-4239-b6da-e6645f6c4945"
+ },
+ "responseBody": {
+ "id": "6278e6f5-013b-4cd2-8e54-061ea6306d66",
+ "music_session_id": null,
+ "name": "my session",
+ "description": "Automated test session",
+ "musician_access": true,
+ "approval_required": false,
+ "fan_access": false,
+ "fan_chat": false,
+ "create_type": null,
+ "band_id": null,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "genre_id": "acapella",
+ "created_at": "2026-01-20T16:48:42.754Z",
+ "like_count": 0,
+ "comment_count": 0,
+ "play_count": 0,
+ "scheduled_duration": "01:00:00",
+ "language": "eng",
+ "recurring_mode": "once",
+ "language_description": "English",
+ "scheduled_start_date": "Wed 21 January 2026",
+ "access_description": "Musicians may join at will. Fans may not listen to session.",
+ "timezone": "Central Time (US & Canada),America/Chicago",
+ "timezone_id": "America/Chicago",
+ "timezone_description": "Central Time (US & Canada)",
+ "musician_access_description": "Musicians may join at will",
+ "fan_access_description": "Fans may not listen to session",
+ "session_removed_at": null,
+ "legal_policy": "legal_policy",
+ "open_rsvps": false,
+ "is_unstructured_rsvp?": false,
+ "friends_can_join": true,
+ "use_video_conferencing_server": true,
+ "creator": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "name": "Nuwan Chaturanga",
+ "photo_url": null
+ },
+ "band": null,
+ "users": [],
+ "comments": [],
+ "session_info_comments": [],
+ "music_notations": [],
+ "invitations": [],
+ "approved_rsvps": [
+ {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "resolved_photo_url": "http://localhost:3000/assets/shared/avatar_generic.png",
+ "full_score": null,
+ "audio_latency": 5,
+ "internet_score": null,
+ "instrument_list": [
+ {
+ "id": "other",
+ "desc": "Other",
+ "level": 3
+ }
+ ],
+ "rsvp_request_id": "b9447b96-431d-48aa-b35a-abe00544590b"
+ }
+ ],
+ "open_slots": [],
+ "pending_invitations": [],
+ "pending_rsvp_requests": [],
+ "lesson_session": null,
+ "active_music_session": null,
+ "can_join": true,
+ "share_url": "http://www.jamkazam.local:3000/s/ENKNHSKEQMC",
+ "genres": [
+ "A Cappella"
+ ],
+ "scheduled_start": "Tue 20 January 2026 22:18:00",
+ "pretty_scheduled_start_with_timezone": "Tuesday, January 20, 10:18-10:18 PM US Central Time",
+ "pretty_scheduled_start_short": "Tuesday, January 20 - 10:18pm"
+ }
+ },
+ {
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3000/api/sessions/6278e6f5-013b-4cd2-8e54-061ea6306d66/participants",
+ "pathname": "/api/sessions/6278e6f5-013b-4cd2-8e54-061ea6306d66/participants",
+ "timestamp": 1768927723797,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "requestBody": {
+ "client_id": "af30a870-1d86-404c-8333-027f3cc6db14",
+ "as_musician": true,
+ "tracks": [
+ {
+ "client_track_id": "d4734735-0acb-4e87-9737-320efb024b3f",
+ "client_resource_id": "0x60000117dab0",
+ "instrument_id": "piano",
+ "sound": "stereo"
+ }
+ ],
+ "client_role": "parent",
+ "parent_client_id": ""
+ },
+ "duration": 524,
+ "responseStatus": 201,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "0f9c6f22-0541-4c0e-a338-a24bb471bf81",
+ "x-runtime": "0.519323",
+ "etag": "W/\"83e77a295d4cd7b73e81313a0065f8f8\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "location": "http://www.jamkazam.local:3000/api/sessions/6278e6f5-013b-4cd2-8e54-061ea6306d66",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "id": "6278e6f5-013b-4cd2-8e54-061ea6306d66",
+ "name": "my session",
+ "description": "Automated test session",
+ "musician_access": true,
+ "approval_required": false,
+ "friends_can_join": true,
+ "fan_access": false,
+ "fan_chat": false,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "claimed_recording_initiator_id": null,
+ "track_changes_counter": 0,
+ "max_score": 0,
+ "backing_track_path": null,
+ "metronome_active": false,
+ "jam_track_initiator_id": null,
+ "jam_track_id": null,
+ "music_session_id_int": 3062,
+ "use_video_conferencing_server": true,
+ "created_at": "2026-01-20T16:48:43.865Z",
+ "music_notations": [],
+ "participants": [
+ {
+ "ip_address": "127.0.0.1",
+ "client_id": "af30a870-1d86-404c-8333-027f3cc6db14",
+ "joined_session_at": "2026-01-20T16:48:44.007Z",
+ "id": "0babbfb7-48b0-4513-b2bd-f05ca2c6091f",
+ "metronome_open": false,
+ "is_jamblaster": false,
+ "client_role": "parent",
+ "parent_client_id": "",
+ "client_id_int": 93863,
+ "tracks": [
+ {
+ "id": "67fcceb8-fb5e-4516-abb0-37b8966f2f6e",
+ "connection_id": "0babbfb7-48b0-4513-b2bd-f05ca2c6091f",
+ "instrument_id": "piano",
+ "sound": "stereo",
+ "client_track_id": "d4734735-0acb-4e87-9737-320efb024b3f",
+ "client_resource_id": "0x60000117dab0",
+ "updated_at": "2026-01-20T16:48:44.018Z",
+ "instrument": "Piano"
+ }
+ ],
+ "backing_tracks": [],
+ "user": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "name": "Nuwan Chaturanga",
+ "is_friend": false,
+ "connection_state": "connected",
+ "subscription": "jamsubplatinum"
+ }
+ }
+ ],
+ "invitations": [],
+ "lesson_session": null,
+ "join_requests": [],
+ "jam_track": null,
+ "claimed_recording": null,
+ "subscription": {
+ "play_time_per_month": null,
+ "play_time_per_session": null,
+ "can_record_audio": true,
+ "can_record_video": true,
+ "can_use_video": true,
+ "can_record_wave": true,
+ "video_resolution": 4,
+ "audio_max_bitrate": 5,
+ "can_broadcast": true,
+ "broadcasting_type": 3,
+ "max_players": null,
+ "pro_audio": true,
+ "has_support": true,
+ "name": "Platinum",
+ "rank": 3,
+ "remaining_month_play_time": null
+ },
+ "session_rules": {
+ "remaining_session_play_time": null
+ },
+ "can_join": true,
+ "genres": [
+ "A Cappella"
+ ],
+ "recording": null,
+ "share_url": "http://www.jamkazam.local:3000/s/ENKNHSKEQMC",
+ "session_controller_id": "27bd4a30-d1b8-4eea-8454-01a104d59381"
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/sessions/6278e6f5-013b-4cd2-8e54-061ea6306d66",
+ "pathname": "/api/sessions/6278e6f5-013b-4cd2-8e54-061ea6306d66",
+ "timestamp": 1768927724502,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 42,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "14c784fb-6d13-47ac-8bdb-22b1d816a6ab",
+ "x-runtime": "0.045840",
+ "etag": "W/\"656eb8e8d6e810fdd3194954919c3f24\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "id": "6278e6f5-013b-4cd2-8e54-061ea6306d66",
+ "name": "my session",
+ "description": "Automated test session",
+ "musician_access": true,
+ "approval_required": false,
+ "friends_can_join": true,
+ "fan_access": false,
+ "fan_chat": false,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "claimed_recording_initiator_id": null,
+ "track_changes_counter": 0,
+ "max_score": 0,
+ "backing_track_path": null,
+ "metronome_active": false,
+ "jam_track_initiator_id": null,
+ "jam_track_id": null,
+ "music_session_id_int": 3062,
+ "use_video_conferencing_server": true,
+ "created_at": "2026-01-20T16:48:43.865Z",
+ "music_notations": [],
+ "participants": [
+ {
+ "ip_address": "127.0.0.1",
+ "client_id": "af30a870-1d86-404c-8333-027f3cc6db14",
+ "joined_session_at": "2026-01-20T16:48:44.007Z",
+ "id": "0babbfb7-48b0-4513-b2bd-f05ca2c6091f",
+ "metronome_open": false,
+ "is_jamblaster": false,
+ "client_role": "parent",
+ "parent_client_id": "",
+ "client_id_int": 93863,
+ "tracks": [
+ {
+ "id": "67fcceb8-fb5e-4516-abb0-37b8966f2f6e",
+ "connection_id": "0babbfb7-48b0-4513-b2bd-f05ca2c6091f",
+ "instrument_id": "piano",
+ "sound": "stereo",
+ "client_track_id": "d4734735-0acb-4e87-9737-320efb024b3f",
+ "client_resource_id": "0x60000117dab0",
+ "updated_at": "2026-01-20T16:48:44.018Z",
+ "instrument": "Piano"
+ }
+ ],
+ "backing_tracks": [],
+ "user": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "name": "Nuwan Chaturanga",
+ "is_friend": false,
+ "connection_state": "connected",
+ "subscription": "jamsubplatinum"
+ }
+ }
+ ],
+ "invitations": [],
+ "lesson_session": null,
+ "join_requests": [],
+ "jam_track": null,
+ "claimed_recording": null,
+ "can_join": true,
+ "genres": [
+ "A Cappella"
+ ],
+ "recording": null,
+ "share_url": "http://www.jamkazam.local:3000/s/ENKNHSKEQMC",
+ "session_controller_id": "27bd4a30-d1b8-4eea-8454-01a104d59381"
+ }
+ }
+]
\ No newline at end of file
diff --git a/jam-ui/test/test-results/api-verification/session-creation-comparison-report.md b/jam-ui/test/test-results/api-verification/session-creation-comparison-report.md
new file mode 100644
index 000000000..4870e661a
--- /dev/null
+++ b/jam-ui/test/test-results/api-verification/session-creation-comparison-report.md
@@ -0,0 +1,184 @@
+# API Sequence Comparison Report
+
+## Summary
+
+- **Match Status:** ā FAIL
+- **Total Calls:** 13
+- **Matched Calls:** 4
+- **Match Percentage:** 30.8%
+
+## ā Missing API Calls
+
+The following expected API calls are missing or called fewer times:
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381**
+ - Expected: 2 call(s)
+ - Actual: 0 call(s)
+ - Missing: 2 call(s)
+
+- **GET /api/countries**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **GET /api/shopping_carts**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **GET /api/genres**
+ - Expected: 3 call(s)
+ - Actual: 1 call(s)
+ - Missing: 2 call(s)
+
+- **GET /api/instruments**
+ - Expected: 3 call(s)
+ - Actual: 0 call(s)
+ - Missing: 3 call(s)
+
+- **GET /api/jamtracks/purchased**
+ - Expected: 3 call(s)
+ - Actual: 0 call(s)
+ - Missing: 3 call(s)
+
+- **GET /api/languages**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **GET /api/subjects**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **GET /api/chat**
+ - Expected: 2 call(s)
+ - Actual: 0 call(s)
+ - Missing: 2 call(s)
+
+- **GET /api/sessions/scheduled**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **GET /api/regions**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **GET /api/teacher_distributions**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **GET /api/versioncheck**
+ - Expected: 3 call(s)
+ - Actual: 0 call(s)
+ - Missing: 3 call(s)
+
+- **GET /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/history**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **GET /api/config/client**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **POST /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/participants**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **PUT /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks**
+ - Expected: 3 call(s)
+ - Actual: 0 call(s)
+ - Missing: 3 call(s)
+
+- **GET /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23**
+ - Expected: 3 call(s)
+ - Actual: 0 call(s)
+ - Missing: 3 call(s)
+
+- **POST /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/udp_reachable**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+## ā ļø Extra API Calls
+
+The following API calls were made but not expected:
+
+- **GET /api/me**
+ - Expected: 0 call(s)
+ - Actual: 2 call(s)
+ - Extra: 2 call(s)
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/my_notifications**
+ - Expected: 0 call(s)
+ - Actual: 2 call(s)
+ - Extra: 2 call(s)
+
+- **GET /api/app_features**
+ - Expected: 0 call(s)
+ - Actual: 1 call(s)
+ - Extra: 1 call(s)
+
+- **GET /api/sessions/6278e6f5-013b-4cd2-8e54-061ea6306d66/history**
+ - Expected: 0 call(s)
+ - Actual: 2 call(s)
+ - Extra: 2 call(s)
+
+- **POST /api/sessions/6278e6f5-013b-4cd2-8e54-061ea6306d66/participants**
+ - Expected: 0 call(s)
+ - Actual: 1 call(s)
+ - Extra: 1 call(s)
+
+- **GET /api/sessions/6278e6f5-013b-4cd2-8e54-061ea6306d66**
+ - Expected: 0 call(s)
+ - Actual: 1 call(s)
+ - Extra: 1 call(s)
+
+## ā ļø Out of Order Calls
+
+The following API calls occurred in a different order:
+
+- **GET /api/genres**
+ - Expected position: 4
+ - Actual position: 0
+ - Deviation: 4 positions
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends**
+ - Expected position: 7
+ - Actual position: 2
+ - Deviation: 5 positions
+
+- **GET /api/genres**
+ - Expected position: 11
+ - Actual position: 0
+ - Deviation: 11 positions
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends**
+ - Expected position: 16
+ - Actual position: 2
+ - Deviation: 14 positions
+
+- **POST /api/sessions**
+ - Expected position: 25
+ - Actual position: 4
+ - Deviation: 21 positions
+
+## ā Conclusion
+
+The API sequence does NOT match the expected baseline. Please review the mismatches above.
diff --git a/jam-ui/test/test-results/e2e/complete-flow-api-calls.json b/jam-ui/test/test-results/e2e/complete-flow-api-calls.json
new file mode 100644
index 000000000..4157004ad
--- /dev/null
+++ b/jam-ui/test/test-results/e2e/complete-flow-api-calls.json
@@ -0,0 +1,772 @@
+[
+ {
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3000/api/sessions",
+ "pathname": "/api/sessions",
+ "timestamp": 1768927894879,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "requestBody": {
+ "privacy": "1",
+ "description": "Automated test session",
+ "inviteeIds": "",
+ "musician_access": true,
+ "approval_required": false,
+ "legal_terms": true,
+ "start": "Tue Jan 20 2026 10:21 PM",
+ "duration": "60",
+ "invitations": [],
+ "timezone": "Central Time (US & Canada),America/Chicago",
+ "genres": [
+ "acapella"
+ ],
+ "friends_can_join": true,
+ "is_unstructured_rsvp": false,
+ "fan_chat": false,
+ "fan_access": false,
+ "legal_policy": "legal_policy",
+ "language": "eng",
+ "name": "my session",
+ "rsvp_slots": [
+ {
+ "instrument_id": "other",
+ "proficiency_level": 3,
+ "approve": true
+ }
+ ]
+ },
+ "duration": 139,
+ "responseStatus": 201,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "ed02c69a-ca9c-4223-a4ce-1e7ef63ad112",
+ "x-runtime": "0.142518",
+ "etag": "W/\"1c90918fc0af71c877f432af9fddbff0\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "id": "c2682005-d64f-4f2e-9e72-b9017c0097fc",
+ "music_session_id": null,
+ "name": "my session",
+ "description": "Automated test session",
+ "musician_access": true,
+ "approval_required": false,
+ "fan_access": false,
+ "fan_chat": false,
+ "create_type": null,
+ "band_id": null,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "genre_id": "acapella",
+ "created_at": "2026-01-20T16:51:34.911Z",
+ "like_count": 0,
+ "comment_count": 0,
+ "play_count": 0,
+ "scheduled_duration": "01:00:00",
+ "language": "eng",
+ "recurring_mode": "once",
+ "language_description": "English",
+ "scheduled_start_date": "Wed 21 January 2026",
+ "access_description": "Musicians may join at will. Fans may not listen to session.",
+ "timezone": "Central Time (US & Canada),America/Chicago",
+ "timezone_id": "America/Chicago",
+ "timezone_description": "Central Time (US & Canada)",
+ "musician_access_description": "Musicians may join at will",
+ "fan_access_description": "Fans may not listen to session",
+ "session_removed_at": null,
+ "legal_policy": "legal_policy",
+ "open_rsvps": false,
+ "is_unstructured_rsvp?": false,
+ "friends_can_join": true,
+ "use_video_conferencing_server": true,
+ "creator": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "name": "Nuwan Chaturanga",
+ "photo_url": null
+ },
+ "band": null,
+ "users": [],
+ "comments": [],
+ "session_info_comments": [],
+ "music_notations": [],
+ "invitations": [],
+ "approved_rsvps": [
+ {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "resolved_photo_url": "http://localhost:3000/assets/shared/avatar_generic.png",
+ "full_score": null,
+ "audio_latency": 5,
+ "internet_score": null,
+ "instrument_list": [
+ {
+ "id": "other",
+ "desc": "Other",
+ "level": 3
+ }
+ ],
+ "rsvp_request_id": "3b57a648-3858-44a0-8650-45555a6dd33b"
+ }
+ ],
+ "open_slots": [],
+ "pending_invitations": [],
+ "pending_rsvp_requests": [],
+ "lesson_session": null,
+ "active_music_session": null,
+ "can_join": true,
+ "share_url": "http://www.jamkazam.local:3000/s/ZAPOFY0FCPM",
+ "genres": [
+ "A Cappella"
+ ],
+ "scheduled_start": "Tue 20 January 2026 22:21:00",
+ "pretty_scheduled_start_with_timezone": "Tuesday, January 20, 10:21-10:21 PM US Central Time",
+ "pretty_scheduled_start_short": "Tuesday, January 20 - 10:21pm"
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/app_features?env=development",
+ "pathname": "/api/app_features",
+ "timestamp": 1768927895119,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 50,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "cdd88fd7-8a3f-4ae9-bf68-f2b9b772f29a",
+ "x-runtime": "0.046358",
+ "etag": "W/\"b7b5ed7616e7f6ac80c7b989a95ff930\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": []
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/me",
+ "pathname": "/api/me",
+ "timestamp": 1768927895119,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 66,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "d56f8566-0db9-432f-b346-fdde8316de03",
+ "x-runtime": "0.020159",
+ "etag": "W/\"39d0929eb10af68175337821ac59ae6c\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "email": "nuwan@jamkazam.com",
+ "photo_url": null,
+ "show_free_jamtrack": false,
+ "is_affiliate_partner": false,
+ "recording_pref": 1
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/my_notifications?offset=0&limit=20",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/my_notifications",
+ "timestamp": 1768927895217,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 43,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "fa2daac0-4c35-401d-9fb3-24bde47fdffd",
+ "x-runtime": "0.053999",
+ "etag": "W/\"0457d24107947f8d0d88d3831e84f366\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "next": null,
+ "unread_total": 0,
+ "notifications": []
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "timestamp": 1768927895224,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 62,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "d00334f0-917d-4e65-9fd7-44a1e0f57996",
+ "x-runtime": "0.032089",
+ "etag": "W/\"733a82e20cbe8c7635b4fd37017e97c1\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": [
+ {
+ "id": "a09f9a7e-afb7-489d-870d-e13a336e0b97",
+ "first_name": "Seth",
+ "last_name": "Call",
+ "name": "Seth Call",
+ "location": "Boston, MA",
+ "city": "Boston",
+ "state": "MA",
+ "country": "US",
+ "musician": true,
+ "email": "nuwan+6@jamkazam.com",
+ "online": false,
+ "photo_url": "https://s3.amazonaws.com/jamkazam-dev-public/avatars/a09f9a7e-afb7-489d-870d-e13a336e0b97/8EfyNy2cQPaxEsypRviW_IMG_20231224_133203_HDR.jpg"
+ }
+ ]
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/sessions/c2682005-d64f-4f2e-9e72-b9017c0097fc/history?includePending=false",
+ "pathname": "/api/sessions/c2682005-d64f-4f2e-9e72-b9017c0097fc/history",
+ "timestamp": 1768927895224,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 208,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "aaa0508c-b4d8-4d24-8890-ec9266b1d4a8",
+ "x-runtime": "0.110980",
+ "etag": "W/\"1c90918fc0af71c877f432af9fddbff0\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "id": "c2682005-d64f-4f2e-9e72-b9017c0097fc",
+ "music_session_id": null,
+ "name": "my session",
+ "description": "Automated test session",
+ "musician_access": true,
+ "approval_required": false,
+ "fan_access": false,
+ "fan_chat": false,
+ "create_type": null,
+ "band_id": null,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "genre_id": "acapella",
+ "created_at": "2026-01-20T16:51:34.911Z",
+ "like_count": 0,
+ "comment_count": 0,
+ "play_count": 0,
+ "scheduled_duration": "01:00:00",
+ "language": "eng",
+ "recurring_mode": "once",
+ "language_description": "English",
+ "scheduled_start_date": "Wed 21 January 2026",
+ "access_description": "Musicians may join at will. Fans may not listen to session.",
+ "timezone": "Central Time (US & Canada),America/Chicago",
+ "timezone_id": "America/Chicago",
+ "timezone_description": "Central Time (US & Canada)",
+ "musician_access_description": "Musicians may join at will",
+ "fan_access_description": "Fans may not listen to session",
+ "session_removed_at": null,
+ "legal_policy": "legal_policy",
+ "open_rsvps": false,
+ "is_unstructured_rsvp?": false,
+ "friends_can_join": true,
+ "use_video_conferencing_server": true,
+ "creator": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "name": "Nuwan Chaturanga",
+ "photo_url": null
+ },
+ "band": null,
+ "users": [],
+ "comments": [],
+ "session_info_comments": [],
+ "music_notations": [],
+ "invitations": [],
+ "approved_rsvps": [
+ {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "resolved_photo_url": "http://localhost:3000/assets/shared/avatar_generic.png",
+ "full_score": null,
+ "audio_latency": 5,
+ "internet_score": null,
+ "instrument_list": [
+ {
+ "id": "other",
+ "desc": "Other",
+ "level": 3
+ }
+ ],
+ "rsvp_request_id": "3b57a648-3858-44a0-8650-45555a6dd33b"
+ }
+ ],
+ "open_slots": [],
+ "pending_invitations": [],
+ "pending_rsvp_requests": [],
+ "lesson_session": null,
+ "active_music_session": null,
+ "can_join": true,
+ "share_url": "http://www.jamkazam.local:3000/s/ZAPOFY0FCPM",
+ "genres": [
+ "A Cappella"
+ ],
+ "scheduled_start": "Tue 20 January 2026 22:21:00",
+ "pretty_scheduled_start_with_timezone": "Tuesday, January 20, 10:21-10:21 PM US Central Time",
+ "pretty_scheduled_start_short": "Tuesday, January 20 - 10:21pm"
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/sessions/c2682005-d64f-4f2e-9e72-b9017c0097fc/history?includePending=false",
+ "pathname": "/api/sessions/c2682005-d64f-4f2e-9e72-b9017c0097fc/history",
+ "timestamp": 1768927895444,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 97,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "x-runtime": "0.096440",
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "etag": "W/\"1c90918fc0af71c877f432af9fddbff0\"",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "cache-control": "max-age=0, private, must-revalidate",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "x-frame-options": "SAMEORIGIN",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "2c056ad2-8e49-4443-b0e2-04b5836dce4c"
+ },
+ "responseBody": {
+ "id": "c2682005-d64f-4f2e-9e72-b9017c0097fc",
+ "music_session_id": null,
+ "name": "my session",
+ "description": "Automated test session",
+ "musician_access": true,
+ "approval_required": false,
+ "fan_access": false,
+ "fan_chat": false,
+ "create_type": null,
+ "band_id": null,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "genre_id": "acapella",
+ "created_at": "2026-01-20T16:51:34.911Z",
+ "like_count": 0,
+ "comment_count": 0,
+ "play_count": 0,
+ "scheduled_duration": "01:00:00",
+ "language": "eng",
+ "recurring_mode": "once",
+ "language_description": "English",
+ "scheduled_start_date": "Wed 21 January 2026",
+ "access_description": "Musicians may join at will. Fans may not listen to session.",
+ "timezone": "Central Time (US & Canada),America/Chicago",
+ "timezone_id": "America/Chicago",
+ "timezone_description": "Central Time (US & Canada)",
+ "musician_access_description": "Musicians may join at will",
+ "fan_access_description": "Fans may not listen to session",
+ "session_removed_at": null,
+ "legal_policy": "legal_policy",
+ "open_rsvps": false,
+ "is_unstructured_rsvp?": false,
+ "friends_can_join": true,
+ "use_video_conferencing_server": true,
+ "creator": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "name": "Nuwan Chaturanga",
+ "photo_url": null
+ },
+ "band": null,
+ "users": [],
+ "comments": [],
+ "session_info_comments": [],
+ "music_notations": [],
+ "invitations": [],
+ "approved_rsvps": [
+ {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "resolved_photo_url": "http://localhost:3000/assets/shared/avatar_generic.png",
+ "full_score": null,
+ "audio_latency": 5,
+ "internet_score": null,
+ "instrument_list": [
+ {
+ "id": "other",
+ "desc": "Other",
+ "level": 3
+ }
+ ],
+ "rsvp_request_id": "3b57a648-3858-44a0-8650-45555a6dd33b"
+ }
+ ],
+ "open_slots": [],
+ "pending_invitations": [],
+ "pending_rsvp_requests": [],
+ "lesson_session": null,
+ "active_music_session": null,
+ "can_join": true,
+ "share_url": "http://www.jamkazam.local:3000/s/ZAPOFY0FCPM",
+ "genres": [
+ "A Cappella"
+ ],
+ "scheduled_start": "Tue 20 January 2026 22:21:00",
+ "pretty_scheduled_start_with_timezone": "Tuesday, January 20, 10:21-10:21 PM US Central Time",
+ "pretty_scheduled_start_short": "Tuesday, January 20 - 10:21pm"
+ }
+ },
+ {
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3000/api/sessions/c2682005-d64f-4f2e-9e72-b9017c0097fc/participants",
+ "pathname": "/api/sessions/c2682005-d64f-4f2e-9e72-b9017c0097fc/participants",
+ "timestamp": 1768927895579,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "requestBody": {
+ "client_id": "8d64a3b0-2f34-48c1-8199-74766ad6b1ac",
+ "as_musician": true,
+ "tracks": [
+ {
+ "client_track_id": "d4734735-0acb-4e87-9737-320efb024b3f",
+ "client_resource_id": "0x60000117dab0",
+ "instrument_id": "piano",
+ "sound": "stereo"
+ }
+ ],
+ "client_role": "parent",
+ "parent_client_id": ""
+ },
+ "duration": 444,
+ "responseStatus": 201,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "74ae651d-b619-436b-bf23-0a101b498f10",
+ "x-runtime": "0.440659",
+ "etag": "W/\"511bac56d5816bf59cf165f3ab9f9289\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "location": "http://www.jamkazam.local:3000/api/sessions/c2682005-d64f-4f2e-9e72-b9017c0097fc",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "id": "c2682005-d64f-4f2e-9e72-b9017c0097fc",
+ "name": "my session",
+ "description": "Automated test session",
+ "musician_access": true,
+ "approval_required": false,
+ "friends_can_join": true,
+ "fan_access": false,
+ "fan_chat": false,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "claimed_recording_initiator_id": null,
+ "track_changes_counter": 0,
+ "max_score": 0,
+ "backing_track_path": null,
+ "metronome_active": false,
+ "jam_track_initiator_id": null,
+ "jam_track_id": null,
+ "music_session_id_int": 3065,
+ "use_video_conferencing_server": true,
+ "created_at": "2026-01-20T16:51:35.602Z",
+ "music_notations": [],
+ "participants": [
+ {
+ "ip_address": "127.0.0.1",
+ "client_id": "8d64a3b0-2f34-48c1-8199-74766ad6b1ac",
+ "joined_session_at": "2026-01-20T16:51:35.654Z",
+ "id": "2a4bf89d-6da3-4e80-b253-deb796ebb489",
+ "metronome_open": false,
+ "is_jamblaster": false,
+ "client_role": "parent",
+ "parent_client_id": "",
+ "client_id_int": 93868,
+ "tracks": [
+ {
+ "id": "662bdeb9-3dfe-4753-98e4-3902b5a10534",
+ "connection_id": "2a4bf89d-6da3-4e80-b253-deb796ebb489",
+ "instrument_id": "piano",
+ "sound": "stereo",
+ "client_track_id": "d4734735-0acb-4e87-9737-320efb024b3f",
+ "client_resource_id": "0x60000117dab0",
+ "updated_at": "2026-01-20T16:51:35.657Z",
+ "instrument": "Piano"
+ }
+ ],
+ "backing_tracks": [],
+ "user": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "name": "Nuwan Chaturanga",
+ "is_friend": false,
+ "connection_state": "connected",
+ "subscription": "jamsubplatinum"
+ }
+ }
+ ],
+ "invitations": [],
+ "lesson_session": null,
+ "join_requests": [],
+ "jam_track": null,
+ "claimed_recording": null,
+ "subscription": {
+ "play_time_per_month": null,
+ "play_time_per_session": null,
+ "can_record_audio": true,
+ "can_record_video": true,
+ "can_use_video": true,
+ "can_record_wave": true,
+ "video_resolution": 4,
+ "audio_max_bitrate": 5,
+ "can_broadcast": true,
+ "broadcasting_type": 3,
+ "max_players": null,
+ "pro_audio": true,
+ "has_support": true,
+ "name": "Platinum",
+ "rank": 3,
+ "remaining_month_play_time": null
+ },
+ "session_rules": {
+ "remaining_session_play_time": null
+ },
+ "can_join": true,
+ "genres": [
+ "A Cappella"
+ ],
+ "recording": null,
+ "share_url": "http://www.jamkazam.local:3000/s/ZAPOFY0FCPM",
+ "session_controller_id": "27bd4a30-d1b8-4eea-8454-01a104d59381"
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/sessions/c2682005-d64f-4f2e-9e72-b9017c0097fc",
+ "pathname": "/api/sessions/c2682005-d64f-4f2e-9e72-b9017c0097fc",
+ "timestamp": 1768927896184,
+ "requestHeaders": {
+ "accept": "application/json",
+ "referer": "http://beta.jamkazam.local:4000/",
+ "accept-language": "en-US",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
+ "content-type": "application/json"
+ },
+ "duration": 182,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "content-encoding": "gzip",
+ "x-content-type-options": "nosniff",
+ "transfer-encoding": "chunked",
+ "x-xss-protection": "1; mode=block",
+ "x-request-id": "320d63a4-cd6e-45c2-affb-dc16a4908dd8",
+ "x-runtime": "0.075026",
+ "etag": "W/\"1140a03eccac397577d88aa4add338ae\"",
+ "x-frame-options": "SAMEORIGIN",
+ "access-control-max-age": "7200",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "access-control-expose-headers": "",
+ "vary": "Accept-Encoding, Origin",
+ "access-control-allow-credentials": "true",
+ "content-type": "application/json; charset=utf-8",
+ "cache-control": "max-age=0, private, must-revalidate"
+ },
+ "responseBody": {
+ "id": "c2682005-d64f-4f2e-9e72-b9017c0097fc",
+ "name": "my session",
+ "description": "Automated test session",
+ "musician_access": true,
+ "approval_required": false,
+ "friends_can_join": true,
+ "fan_access": false,
+ "fan_chat": false,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "claimed_recording_initiator_id": null,
+ "track_changes_counter": 0,
+ "max_score": 0,
+ "backing_track_path": null,
+ "metronome_active": false,
+ "jam_track_initiator_id": null,
+ "jam_track_id": null,
+ "music_session_id_int": 3065,
+ "use_video_conferencing_server": true,
+ "created_at": "2026-01-20T16:51:35.602Z",
+ "music_notations": [],
+ "participants": [
+ {
+ "ip_address": "127.0.0.1",
+ "client_id": "8d64a3b0-2f34-48c1-8199-74766ad6b1ac",
+ "joined_session_at": "2026-01-20T16:51:35.654Z",
+ "id": "2a4bf89d-6da3-4e80-b253-deb796ebb489",
+ "metronome_open": false,
+ "is_jamblaster": false,
+ "client_role": "parent",
+ "parent_client_id": "",
+ "client_id_int": 93868,
+ "tracks": [
+ {
+ "id": "662bdeb9-3dfe-4753-98e4-3902b5a10534",
+ "connection_id": "2a4bf89d-6da3-4e80-b253-deb796ebb489",
+ "instrument_id": "piano",
+ "sound": "stereo",
+ "client_track_id": "d4734735-0acb-4e87-9737-320efb024b3f",
+ "client_resource_id": "0x60000117dab0",
+ "updated_at": "2026-01-20T16:51:35.657Z",
+ "instrument": "Piano"
+ }
+ ],
+ "backing_tracks": [],
+ "user": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "name": "Nuwan Chaturanga",
+ "is_friend": false,
+ "connection_state": "connected",
+ "subscription": "jamsubplatinum"
+ }
+ }
+ ],
+ "invitations": [],
+ "lesson_session": null,
+ "join_requests": [],
+ "jam_track": null,
+ "claimed_recording": null,
+ "can_join": true,
+ "genres": [
+ "A Cappella"
+ ],
+ "recording": null,
+ "share_url": "http://www.jamkazam.local:3000/s/ZAPOFY0FCPM",
+ "session_controller_id": "27bd4a30-d1b8-4eea-8454-01a104d59381"
+ }
+ }
+]
\ No newline at end of file
diff --git a/jam-ui/test/test-results/e2e/complete-flow-comparison.md b/jam-ui/test/test-results/e2e/complete-flow-comparison.md
new file mode 100644
index 000000000..6ac71226d
--- /dev/null
+++ b/jam-ui/test/test-results/e2e/complete-flow-comparison.md
@@ -0,0 +1,199 @@
+# API Sequence Comparison Report
+
+## Summary
+
+- **Match Status:** ā FAIL
+- **Total Calls:** 9
+- **Matched Calls:** 2
+- **Match Percentage:** 22.2%
+
+## ā Missing API Calls
+
+The following expected API calls are missing or called fewer times:
+
+- **GET /api/genres**
+ - Expected: 7 call(s)
+ - Actual: 0 call(s)
+ - Missing: 7 call(s)
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381**
+ - Expected: 4 call(s)
+ - Actual: 0 call(s)
+ - Missing: 4 call(s)
+
+- **GET /api/countries**
+ - Expected: 2 call(s)
+ - Actual: 0 call(s)
+ - Missing: 2 call(s)
+
+- **GET /api/shopping_carts**
+ - Expected: 2 call(s)
+ - Actual: 0 call(s)
+ - Missing: 2 call(s)
+
+- **GET /api/jamtracks/purchased**
+ - Expected: 5 call(s)
+ - Actual: 0 call(s)
+ - Missing: 5 call(s)
+
+- **GET /api/teacher_distributions**
+ - Expected: 2 call(s)
+ - Actual: 0 call(s)
+ - Missing: 2 call(s)
+
+- **GET /api/regions**
+ - Expected: 2 call(s)
+ - Actual: 0 call(s)
+ - Missing: 2 call(s)
+
+- **POST /xoplatform/logger/api/logger**
+ - Expected: 4 call(s)
+ - Actual: 0 call(s)
+ - Missing: 4 call(s)
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/broadcast_notification**
+ - Expected: 2 call(s)
+ - Actual: 0 call(s)
+ - Missing: 2 call(s)
+
+- **GET /api/instruments**
+ - Expected: 6 call(s)
+ - Actual: 0 call(s)
+ - Missing: 6 call(s)
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends**
+ - Expected: 4 call(s)
+ - Actual: 1 call(s)
+ - Missing: 3 call(s)
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/notifications**
+ - Expected: 2 call(s)
+ - Actual: 0 call(s)
+ - Missing: 2 call(s)
+
+- **GET /api/languages**
+ - Expected: 2 call(s)
+ - Actual: 0 call(s)
+ - Missing: 2 call(s)
+
+- **GET /api/subjects**
+ - Expected: 2 call(s)
+ - Actual: 0 call(s)
+ - Missing: 2 call(s)
+
+- **GET /api/chat**
+ - Expected: 3 call(s)
+ - Actual: 0 call(s)
+ - Missing: 3 call(s)
+
+- **GET /api/versioncheck**
+ - Expected: 6 call(s)
+ - Actual: 0 call(s)
+ - Missing: 6 call(s)
+
+- **GET /api/healthcheck**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **GET /api/config/client**
+ - Expected: 2 call(s)
+ - Actual: 0 call(s)
+ - Missing: 2 call(s)
+
+- **GET /api/sessions/scheduled**
+ - Expected: 2 call(s)
+ - Actual: 0 call(s)
+ - Missing: 2 call(s)
+
+- **GET /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/history**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **POST /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/participants**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+- **PUT /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23/tracks**
+ - Expected: 3 call(s)
+ - Actual: 0 call(s)
+ - Missing: 3 call(s)
+
+- **GET /api/sessions/02d4846c-eb02-40d5-ab2d-fe56e6c84d23**
+ - Expected: 3 call(s)
+ - Actual: 0 call(s)
+ - Missing: 3 call(s)
+
+- **POST /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/udp_reachable**
+ - Expected: 1 call(s)
+ - Actual: 0 call(s)
+ - Missing: 1 call(s)
+
+## ā ļø Extra API Calls
+
+The following API calls were made but not expected:
+
+- **GET /api/app_features**
+ - Expected: 0 call(s)
+ - Actual: 1 call(s)
+ - Extra: 1 call(s)
+
+- **GET /api/me**
+ - Expected: 0 call(s)
+ - Actual: 1 call(s)
+ - Extra: 1 call(s)
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/my_notifications**
+ - Expected: 0 call(s)
+ - Actual: 1 call(s)
+ - Extra: 1 call(s)
+
+- **GET /api/sessions/c2682005-d64f-4f2e-9e72-b9017c0097fc/history**
+ - Expected: 0 call(s)
+ - Actual: 2 call(s)
+ - Extra: 2 call(s)
+
+- **POST /api/sessions/c2682005-d64f-4f2e-9e72-b9017c0097fc/participants**
+ - Expected: 0 call(s)
+ - Actual: 1 call(s)
+ - Extra: 1 call(s)
+
+- **GET /api/sessions/c2682005-d64f-4f2e-9e72-b9017c0097fc**
+ - Expected: 0 call(s)
+ - Actual: 1 call(s)
+ - Extra: 1 call(s)
+
+## ā ļø Out of Order Calls
+
+The following API calls occurred in a different order:
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends**
+ - Expected position: 15
+ - Actual position: 4
+ - Deviation: 11 positions
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends**
+ - Expected position: 18
+ - Actual position: 4
+ - Deviation: 14 positions
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends**
+ - Expected position: 39
+ - Actual position: 4
+ - Deviation: 35 positions
+
+- **GET /api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends**
+ - Expected position: 48
+ - Actual position: 4
+ - Deviation: 44 positions
+
+- **POST /api/sessions**
+ - Expected position: 57
+ - Actual position: 0
+ - Deviation: 57 positions
+
+## ā Conclusion
+
+The API sequence does NOT match the expected baseline. Please review the mismatches above.
diff --git a/jam-ui/test/test-results/e2e/complete-flow-websockets.json b/jam-ui/test/test-results/e2e/complete-flow-websockets.json
new file mode 100644
index 000000000..ca1bf16ab
--- /dev/null
+++ b/jam-ui/test/test-results/e2e/complete-flow-websockets.json
@@ -0,0 +1,2564 @@
+[
+ {
+ "url": "ws://beta.jamkazam.local:4000/sockjs-node",
+ "timestamp": 1768927876672,
+ "isNativeClient": false,
+ "isServerConnection": false,
+ "messages": [
+ {
+ "direction": "received",
+ "payload": "{\"type\":\"log-level\",\"data\":\"none\"}",
+ "timestamp": 1768927876679,
+ "size": 34
+ },
+ {
+ "direction": "received",
+ "payload": "{\"type\":\"hot\"}",
+ "timestamp": 1768927876679,
+ "size": 14
+ },
+ {
+ "direction": "received",
+ "payload": "{\"type\":\"liveReload\"}",
+ "timestamp": 1768927876679,
+ "size": 21
+ },
+ {
+ "direction": "received",
+ "payload": "{\"type\":\"hash\",\"data\":\"8fcec829639a752b457d\"}",
+ "timestamp": 1768927876679,
+ "size": 45
+ },
+ {
+ "direction": "received",
+ "payload": "{\"type\":\"warnings\",\"data\":[\"./src/helpers/MessageFactory.js\\nModule Warning (from ./node_modules/eslint-loader/dist/cjs.js):\\n\\n \\u001b[1mLine 103:7:\\u001b[22m 'getCookie' is assigned a value but ne...",
+ "timestamp": 1768927876691,
+ "size": 206417
+ }
+ ],
+ "closed": false
+ },
+ {
+ "url": "ws://localhost:3060/",
+ "timestamp": 1768927895119,
+ "isNativeClient": true,
+ "isServerConnection": false,
+ "messages": [
+ {
+ "direction": "sent",
+ "payload": "{\"type\":3,\"id\":0}",
+ "timestamp": 1768927895121,
+ "size": 17
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":{\"jkfrontendchannel\":{\"enums\":{\"JKAppMessage\":{\"AbortRecording\":1001,\"BringVideoWindowToFront\":1004,\"ClientJoinedSession\":1008,\"ClientLeftSession\":1009,\"ClientUpdateStartDownload\":1010,\"Client...",
+ "timestamp": 1768927895168,
+ "size": 11852
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":7,\"object\":\"jkfrontendchannel\",\"signal\":5}",
+ "timestamp": 1768927895168,
+ "size": 50
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":4}",
+ "timestamp": 1768927895168,
+ "size": 10
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927895168,
+ "size": 2732
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":2,\\\"arguments\\\":[],\\\"method\\\":1401}\"],\"id\":1}",
+ "timestamp": 1768927895218,
+ "size": 132
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1401,\\\"method_name\\\":\\\"GetAudioRecordingPreference\\\",\\\"request_id\\\":2,\\\"response\\\":2}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895258,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":1,\"type\":10}",
+ "timestamp": 1768927895262,
+ "size": 30
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":3,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":2}",
+ "timestamp": 1768927895305,
+ "size": 129
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":4,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":3}",
+ "timestamp": 1768927895305,
+ "size": 129
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":5,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":4}",
+ "timestamp": 1768927895305,
+ "size": 129
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":6,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":5}",
+ "timestamp": 1768927895305,
+ "size": 129
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":7,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":6}",
+ "timestamp": 1768927895305,
+ "size": 129
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":8,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":7}",
+ "timestamp": 1768927895305,
+ "size": 129
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":9,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":8}",
+ "timestamp": 1768927895305,
+ "size": 129
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":10,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":9}",
+ "timestamp": 1768927895306,
+ "size": 130
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":3,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895307,
+ "size": 161
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":2,\"type\":10}",
+ "timestamp": 1768927895307,
+ "size": 30
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":4,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895307,
+ "size": 161
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":3,\"type\":10}",
+ "timestamp": 1768927895307,
+ "size": 30
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":5,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895307,
+ "size": 161
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":4,\"type\":10}",
+ "timestamp": 1768927895307,
+ "size": 30
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":6,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895307,
+ "size": 161
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":5,\"type\":10}",
+ "timestamp": 1768927895307,
+ "size": 30
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":7,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895307,
+ "size": 161
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":6,\"type\":10}",
+ "timestamp": 1768927895307,
+ "size": 30
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":8,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895307,
+ "size": 161
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":7,\"type\":10}",
+ "timestamp": 1768927895307,
+ "size": 30
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":9,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895308,
+ "size": 161
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":8,\"type\":10}",
+ "timestamp": 1768927895308,
+ "size": 30
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":10,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895308,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":9,\"type\":10}",
+ "timestamp": 1768927895308,
+ "size": 30
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":11,\\\"arguments\\\":[],\\\"method\\\":1151}\"],\"id\":10}",
+ "timestamp": 1768927895316,
+ "size": 134
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":12,\\\"arguments\\\":[\\\"JK.HandleMetronomeCallback2\\\"],\\\"method\\\":1328}\"],\"id\":11}",
+ "timestamp": 1768927895316,
+ "size": 165
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1151,\\\"method_name\\\":\\\"getOperatingMode\\\",\\\"request_id\\\":11,\\\"response\\\":\\\"client\\\"}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895317,
+ "size": 161
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":13,\\\"arguments\\\":[],\\\"method\\\":1261}\"],\"id\":12}",
+ "timestamp": 1768927895317,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":10,\"type\":10}",
+ "timestamp": 1768927895317,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1328,\\\"method_name\\\":\\\"setMetronomeOpenCallback\\\",\\\"request_id\\\":12,\\\"response\\\":{\\\"process_status\\\":\\\"Success\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895317,
+ "size": 191
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":11,\"type\":10}",
+ "timestamp": 1768927895317,
+ "size": 31
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":14,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":13}",
+ "timestamp": 1768927895319,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":15,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":14}",
+ "timestamp": 1768927895319,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":16,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":15}",
+ "timestamp": 1768927895319,
+ "size": 131
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1261,\\\"method_name\\\":\\\"SessionGetMacHash\\\",\\\"request_id\\\":13,\\\"response\\\":{\\\"1b4d0ddbf9c1d7cd0a311465676d86a5892a36ea\\\":{\\\"ipaddr_0\\\":\\\"fe80::1c92:1083:c1e6:8f02%en0\\\",\\\"ipadd...",
+ "timestamp": 1768927895319,
+ "size": 1715
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":17,\\\"arguments\\\":[],\\\"method\\\":1125}\"],\"id\":16}",
+ "timestamp": 1768927895319,
+ "size": 134
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":18,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":17}",
+ "timestamp": 1768927895319,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":19,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":18}",
+ "timestamp": 1768927895320,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":20,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":19}",
+ "timestamp": 1768927895320,
+ "size": 131
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":12,\"type\":10}",
+ "timestamp": 1768927895320,
+ "size": 31
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":21,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":20}",
+ "timestamp": 1768927895320,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":22,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":21}",
+ "timestamp": 1768927895320,
+ "size": 131
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":14,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895320,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":13,\"type\":10}",
+ "timestamp": 1768927895320,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":15,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895320,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":14,\"type\":10}",
+ "timestamp": 1768927895320,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":16,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895320,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":15,\"type\":10}",
+ "timestamp": 1768927895320,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1125,\\\"method_name\\\":\\\"GetDetailedOS\\\",\\\"request_id\\\":17,\\\"response\\\":\\\"MacOSX-M\\\"}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895321,
+ "size": 160
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":23,\\\"arguments\\\":[],\\\"method\\\":1203}\"],\"id\":22}",
+ "timestamp": 1768927895322,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":16,\"type\":10}",
+ "timestamp": 1768927895322,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":18,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895322,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":17,\"type\":10}",
+ "timestamp": 1768927895322,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":19,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895323,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":18,\"type\":10}",
+ "timestamp": 1768927895323,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":20,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895323,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":19,\"type\":10}",
+ "timestamp": 1768927895323,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":21,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895323,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":20,\"type\":10}",
+ "timestamp": 1768927895323,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":22,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895323,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":21,\"type\":10}",
+ "timestamp": 1768927895323,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1203,\\\"method_name\\\":\\\"NetworkTestResult\\\",\\\"request_id\\\":23,\\\"response\\\":{\\\"preserve_port\\\":false,\\\"public_ip\\\":\\\"112.134.221.38\\\",\\\"remote_udp_blocked\\\":false,\\\"stun_failed\\...",
+ "timestamp": 1768927895323,
+ "size": 287
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":22,\"type\":10}",
+ "timestamp": 1768927895324,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927895350,
+ "size": 2732
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":24,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":23}",
+ "timestamp": 1768927895434,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":25,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":24}",
+ "timestamp": 1768927895434,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":26,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":25}",
+ "timestamp": 1768927895434,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":27,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":26}",
+ "timestamp": 1768927895434,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":28,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":27}",
+ "timestamp": 1768927895434,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":29,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":28}",
+ "timestamp": 1768927895434,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":30,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":29}",
+ "timestamp": 1768927895434,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":31,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":30}",
+ "timestamp": 1768927895434,
+ "size": 131
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":24,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895434,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":23,\"type\":10}",
+ "timestamp": 1768927895434,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":25,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895434,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":24,\"type\":10}",
+ "timestamp": 1768927895434,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":26,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895434,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":25,\"type\":10}",
+ "timestamp": 1768927895434,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":27,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895434,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":26,\"type\":10}",
+ "timestamp": 1768927895434,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":28,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895434,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":27,\"type\":10}",
+ "timestamp": 1768927895434,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":29,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895434,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":28,\"type\":10}",
+ "timestamp": 1768927895434,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":30,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895434,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":29,\"type\":10}",
+ "timestamp": 1768927895434,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":31,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895434,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":30,\"type\":10}",
+ "timestamp": 1768927895434,
+ "size": 31
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":32,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":31}",
+ "timestamp": 1768927895436,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":33,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":32}",
+ "timestamp": 1768927895437,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":34,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":33}",
+ "timestamp": 1768927895437,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":35,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":34}",
+ "timestamp": 1768927895437,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":36,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":35}",
+ "timestamp": 1768927895437,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":37,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":36}",
+ "timestamp": 1768927895437,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":38,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":37}",
+ "timestamp": 1768927895437,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":39,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":38}",
+ "timestamp": 1768927895437,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":40,\\\"arguments\\\":[{\\\"user_id\\\":\\\"27bd4a30-d1b8-4eea-8454-01a104d59381\\\",\\\"token\\\":\\\"CKXGCTBxfdGG12oXACOEYA\\\",\\\"us...",
+ "timestamp": 1768927895455,
+ "size": 537
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":32,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895455,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":31,\"type\":10}",
+ "timestamp": 1768927895457,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":33,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895457,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":32,\"type\":10}",
+ "timestamp": 1768927895457,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":34,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895457,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":33,\"type\":10}",
+ "timestamp": 1768927895457,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":35,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895457,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":34,\"type\":10}",
+ "timestamp": 1768927895457,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":36,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895458,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":35,\"type\":10}",
+ "timestamp": 1768927895458,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":37,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895458,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":36,\"type\":10}",
+ "timestamp": 1768927895458,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":38,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895458,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":37,\"type\":10}",
+ "timestamp": 1768927895458,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":39,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895458,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":38,\"type\":10}",
+ "timestamp": 1768927895458,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3007,\\\"response\\\":{\\\"message\\\":\\\"Y0dsdVoxOXlaWEY4ZkRJd05qa3dNRFl5TWpKOGZERTFmSHd4T2pFM05qZzVNamM0T1RVNk5USTFNakk0Zkh3eE5qTXhNamszTlRjNWZId3hOak14TWprM05UYzVmSHhPZFhkaGJpQkRhR0Y...",
+ "timestamp": 1768927895459,
+ "size": 321
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleAlertCallback(28, \\\\\\\"\\\\\\\")\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895459,
+ "size": 156
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1205,\\\"method_name\\\":\\\"OnLoggedIn\\\",\\\"request_id\\\":40,\\\"response\\\":{\\\"CustomUrl\\\":\\\"\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895459,
+ "size": 165
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":39,\"type\":10}",
+ "timestamp": 1768927895459,
+ "size": 31
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":41,\\\"arguments\\\":[{\\\"user_id\\\":\\\"27bd4a30-d1b8-4eea-8454-01a104d59381\\\",\\\"token\\\":\\\"CKXGCTBxfdGG12oXACOEYA\\\",\\\"us...",
+ "timestamp": 1768927895463,
+ "size": 537
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3007,\\\"response\\\":{\\\"message\\\":\\\"Y0dsdVoxOXlaWEY4ZkRFeE5Ea3hNVFkzTVh4OE1UVjhmREU2TVRjMk9Ea3lOemc1TlRvMU5EQXdORFo4ZkRFeE1ESXdNelE0TXpaOGZERXhNREl3TXpRNE16WjhmRTUxZDJGdUlFTm9ZWFI...",
+ "timestamp": 1768927895465,
+ "size": 313
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1205,\\\"method_name\\\":\\\"OnLoggedIn\\\",\\\"request_id\\\":41,\\\"response\\\":{\\\"CustomUrl\\\":\\\"\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895465,
+ "size": 165
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":40,\"type\":10}",
+ "timestamp": 1768927895465,
+ "size": 31
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":42,\\\"arguments\\\":[],\\\"method\\\":1121}\"],\"id\":41}",
+ "timestamp": 1768927895544,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1121,\\\"method_name\\\":\\\"getClientParentChildRole\\\",\\\"request_id\\\":42,\\\"response\\\":1}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895545,
+ "size": 160
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":43,\\\"arguments\\\":[],\\\"method\\\":1025}\"],\"id\":42}",
+ "timestamp": 1768927895546,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":41,\"type\":10}",
+ "timestamp": 1768927895546,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1025,\\\"method_name\\\":\\\"FTUEGetAllAudioConfigurations\\\",\\\"request_id\\\":43,\\\"response\\\":[\\\"In/Out: Scarlett 2i2 USB\\\",\\\"In: MacBook Pro Microphone, Out: MacBook Pro Speakers\\\",\\...",
+ "timestamp": 1768927895547,
+ "size": 287
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":44,\\\"arguments\\\":[],\\\"method\\\":1149}\"],\"id\":43}",
+ "timestamp": 1768927895547,
+ "size": 134
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":45,\\\"arguments\\\":[],\\\"method\\\":1269}\"],\"id\":44}",
+ "timestamp": 1768927895547,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":42,\"type\":10}",
+ "timestamp": 1768927895547,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1149,\\\"method_name\\\":\\\"GetNetworkTestScore\\\",\\\"request_id\\\":44,\\\"response\\\":0}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895547,
+ "size": 155
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":43,\"type\":10}",
+ "timestamp": 1768927895548,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1269,\\\"method_name\\\":\\\"SessionPageEnter\\\",\\\"request_id\\\":45,\\\"response\\\":{\\\"reason\\\":\\\"already_started\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895548,
+ "size": 183
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":46,\\\"arguments\\\":[true],\\\"method\\\":1256}\"],\"id\":45}",
+ "timestamp": 1768927895551,
+ "size": 138
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":44,\"type\":10}",
+ "timestamp": 1768927895552,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927895552,
+ "size": 2732
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1256,\\\"method_name\\\":\\\"SessionGetAllControlState\\\",\\\"request_id\\\":46,\\\"response\\\":[{\\\"_id\\\":10000,\\\"client_id\\\":\\\"\\\",\\\"group_id\\\":0,\\\"id\\\":\\\"1e329e9a-6aba-4449-8a3e-25d65bfb61...",
+ "timestamp": 1768927895554,
+ "size": 6295
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":47,\\\"arguments\\\":[true],\\\"method\\\":1256}\"],\"id\":46}",
+ "timestamp": 1768927895554,
+ "size": 138
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":45,\"type\":10}",
+ "timestamp": 1768927895554,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1256,\\\"method_name\\\":\\\"SessionGetAllControlState\\\",\\\"request_id\\\":47,\\\"response\\\":[{\\\"_id\\\":10000,\\\"client_id\\\":\\\"\\\",\\\"group_id\\\":0,\\\"id\\\":\\\"1e329e9a-6aba-4449-8a3e-25d65bfb61...",
+ "timestamp": 1768927895557,
+ "size": 6295
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":48,\\\"arguments\\\":[],\\\"method\\\":1198}\"],\"id\":47}",
+ "timestamp": 1768927895557,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":46,\"type\":10}",
+ "timestamp": 1768927895557,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1198,\\\"method_name\\\":\\\"LastUsedProfileName\\\",\\\"request_id\\\":48,\\\"response\\\":\\\"In/Out: Scarlett 2i2 USB\\\"}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895557,
+ "size": 182
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":49,\\\"arguments\\\":[],\\\"method\\\":1198}\"],\"id\":48}",
+ "timestamp": 1768927895565,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":47,\"type\":10}",
+ "timestamp": 1768927895565,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1198,\\\"method_name\\\":\\\"LastUsedProfileName\\\",\\\"request_id\\\":49,\\\"response\\\":\\\"In/Out: Scarlett 2i2 USB\\\"}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895565,
+ "size": 182
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":50,\\\"arguments\\\":[],\\\"method\\\":1044}\"],\"id\":49}",
+ "timestamp": 1768927895565,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":48,\"type\":10}",
+ "timestamp": 1768927895565,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1044,\\\"method_name\\\":\\\"FTUEGetExpectedLatency\\\",\\\"request_id\\\":50,\\\"response\\\":{\\\"latency\\\":11.270833969116211,\\\"latencyknown\\\":true,\\\"latencyvar\\\":1}}\"],\"object\":\"jkfrontendc...",
+ "timestamp": 1768927895566,
+ "size": 228
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":51,\\\"arguments\\\":[],\\\"method\\\":1149}\"],\"id\":50}",
+ "timestamp": 1768927895566,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":49,\"type\":10}",
+ "timestamp": 1768927895566,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1149,\\\"method_name\\\":\\\"GetNetworkTestScore\\\",\\\"request_id\\\":51,\\\"response\\\":0}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895566,
+ "size": 155
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":52,\\\"arguments\\\":[\\\"JK.HandleBridgeCallback2\\\"],\\\"method\\\":1272}\"],\"id\":51}",
+ "timestamp": 1768927895572,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":50,\"type\":10}",
+ "timestamp": 1768927895573,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1272,\\\"method_name\\\":\\\"SessionRegisterCallback\\\",\\\"request_id\\\":52,\\\"response\\\":{\\\"process_status\\\":\\\"Success\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895573,
+ "size": 190
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":53,\\\"arguments\\\":[\\\"JK.HandleAlertCallback\\\"],\\\"method\\\":1277}\"],\"id\":52}",
+ "timestamp": 1768927895573,
+ "size": 160
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":51,\"type\":10}",
+ "timestamp": 1768927895573,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1277,\\\"method_name\\\":\\\"SessionSetAlertCallback\\\",\\\"request_id\\\":53,\\\"response\\\":{\\\"process_status\\\":\\\"Success\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895574,
+ "size": 190
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":54,\\\"arguments\\\":[\\\"JK.HandleRecordingStartResult\\\",\\\"JK.HandleRecordingStopResult\\\",\\\"JK.HandleRecordingStarted\\...",
+ "timestamp": 1768927895574,
+ "size": 290
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":52,\"type\":10}",
+ "timestamp": 1768927895574,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1227,\\\"method_name\\\":\\\"RegisterRecordingCallbacks\\\",\\\"request_id\\\":54,\\\"response\\\":{\\\"process_status\\\":\\\"Success\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895574,
+ "size": 193
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":55,\\\"arguments\\\":[1000],\\\"method\\\":1279}\"],\"id\":54}",
+ "timestamp": 1768927895574,
+ "size": 138
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":53,\"type\":10}",
+ "timestamp": 1768927895574,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1279,\\\"method_name\\\":\\\"SessionSetConnectionStatusRefreshRate\\\",\\\"request_id\\\":55,\\\"response\\\":{\\\"process_status\\\":\\\"Success\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type...",
+ "timestamp": 1768927895575,
+ "size": 204
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":56,\\\"arguments\\\":[],\\\"method\\\":1121}\"],\"id\":55}",
+ "timestamp": 1768927895575,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":54,\"type\":10}",
+ "timestamp": 1768927895575,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1121,\\\"method_name\\\":\\\"getClientParentChildRole\\\",\\\"request_id\\\":56,\\\"response\\\":1}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895575,
+ "size": 160
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":57,\\\"arguments\\\":[],\\\"method\\\":1154}\"],\"id\":56}",
+ "timestamp": 1768927895576,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":55,\"type\":10}",
+ "timestamp": 1768927895576,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1154,\\\"method_name\\\":\\\"getParentClientId\\\",\\\"request_id\\\":57,\\\"response\\\":\\\"\\\"}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895576,
+ "size": 156
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":58,\\\"arguments\\\":[],\\\"method\\\":1044}\"],\"id\":57}",
+ "timestamp": 1768927895577,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":56,\"type\":10}",
+ "timestamp": 1768927895579,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1044,\\\"method_name\\\":\\\"FTUEGetExpectedLatency\\\",\\\"request_id\\\":58,\\\"response\\\":{\\\"latency\\\":11.270833969116211,\\\"latencyknown\\\":true,\\\"latencyvar\\\":1}}\"],\"object\":\"jkfrontendc...",
+ "timestamp": 1768927895579,
+ "size": 228
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":57,\"type\":10}",
+ "timestamp": 1768927895579,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1008,\\\"method_name\\\":\\\"ClientJoinedSession\\\",\\\"request_id\\\":43606,\\\"response\\\":{\\\"AudioFormat\\\":\\\"mp3\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895748,
+ "size": 182
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1121,\\\"method_name\\\":\\\"getClientParentChildRole\\\",\\\"request_id\\\":43607,\\\"response\\\":1}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895748,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1404,\\\"method_name\\\":\\\"GetCurrentRecordingId\\\",\\\"request_id\\\":43608,\\\"response\\\":\\\"\\\"}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895748,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927895750,
+ "size": 2732
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1256,\\\"method_name\\\":\\\"SessionGetAllControlState\\\",\\\"request_id\\\":43609,\\\"response\\\":[{\\\"_id\\\":10000,\\\"client_id\\\":\\\"\\\",\\\"group_id\\\":0,\\\"id\\\":\\\"1e329e9a-6aba-4449-8a3e-25d65bf...",
+ "timestamp": 1768927895751,
+ "size": 6298
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1401,\\\"method_name\\\":\\\"GetAudioRecordingPreference\\\",\\\"request_id\\\":43610,\\\"response\\\":2}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895758,
+ "size": 166
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1401,\\\"method_name\\\":\\\"GetAudioRecordingPreference\\\",\\\"request_id\\\":43611,\\\"response\\\":2}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895777,
+ "size": 166
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1378,\\\"method_name\\\":\\\"UpdateSessionInfo\\\",\\\"request_id\\\":43612,\\\"response\\\":{\\\"process_status\\\":\\\"Success\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895783,
+ "size": 187
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1256,\\\"method_name\\\":\\\"SessionGetAllControlState\\\",\\\"request_id\\\":43613,\\\"response\\\":[{\\\"_id\\\":10100,\\\"client_id\\\":\\\"\\\",\\\"group_id\\\":1,\\\"id\\\":\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356...",
+ "timestamp": 1768927895789,
+ "size": 6323
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1256,\\\"method_name\\\":\\\"SessionGetAllControlState\\\",\\\"request_id\\\":43614,\\\"response\\\":[{\\\"_id\\\":10000,\\\"client_id\\\":\\\"\\\",\\\"group_id\\\":0,\\\"id\\\":\\\"1e329e9a-6aba-4449-8a3e-25d65bf...",
+ "timestamp": 1768927895802,
+ "size": 6298
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1034,\\\"method_name\\\":\\\"FTUEGetChannels\\\",\\\"request_id\\\":43615,\\\"response\\\":{\\\"inputs\\\":[],\\\"outputs\\\":[]}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895811,
+ "size": 183
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1401,\\\"method_name\\\":\\\"GetAudioRecordingPreference\\\",\\\"request_id\\\":43616,\\\"response\\\":2}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895815,
+ "size": 166
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1256,\\\"method_name\\\":\\\"SessionGetAllControlState\\\",\\\"request_id\\\":43617,\\\"response\\\":[{\\\"_id\\\":10100,\\\"client_id\\\":\\\"\\\",\\\"group_id\\\":1,\\\"id\\\":\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356...",
+ "timestamp": 1768927895829,
+ "size": 6323
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1034,\\\"method_name\\\":\\\"FTUEGetChannels\\\",\\\"request_id\\\":43618,\\\"response\\\":{\\\"inputs\\\":[],\\\"outputs\\\":[]}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895856,
+ "size": 183
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1401,\\\"method_name\\\":\\\"GetAudioRecordingPreference\\\",\\\"request_id\\\":43619,\\\"response\\\":2}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927895859,
+ "size": 166
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927895950,
+ "size": 2732
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1122,\\\"method_name\\\":\\\"getConnectionDetail\\\",\\\"request_id\\\":43620,\\\"response\\\":[{\\\"audio\\\":{\\\"acpu\\\":2.061195135116577,\\\"audio_chat_in\\\":\\\"MacBook Pro Microphone\\\",\\\"audio_cha...",
+ "timestamp": 1768927895979,
+ "size": 1229
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1122,\\\"method_name\\\":\\\"getConnectionDetail\\\",\\\"request_id\\\":43621,\\\"response\\\":[{\\\"audio\\\":{\\\"acpu\\\":2.061195135116577,\\\"audio_chat_in\\\":\\\"MacBook Pro Microphone\\\",\\\"audio_cha...",
+ "timestamp": 1768927895980,
+ "size": 1229
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":59,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":58}",
+ "timestamp": 1768927896026,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":60,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":59}",
+ "timestamp": 1768927896026,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":61,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":60}",
+ "timestamp": 1768927896026,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":62,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":61}",
+ "timestamp": 1768927896026,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":63,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":62}",
+ "timestamp": 1768927896026,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":64,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":63}",
+ "timestamp": 1768927896026,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":65,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":64}",
+ "timestamp": 1768927896026,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":66,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":65}",
+ "timestamp": 1768927896026,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":67,\\\"arguments\\\":[true],\\\"method\\\":1256}\"],\"id\":66}",
+ "timestamp": 1768927896037,
+ "size": 138
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":68,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":67}",
+ "timestamp": 1768927896037,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":69,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":68}",
+ "timestamp": 1768927896037,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":70,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":69}",
+ "timestamp": 1768927896037,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":71,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":70}",
+ "timestamp": 1768927896037,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":72,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":71}",
+ "timestamp": 1768927896037,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":73,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":72}",
+ "timestamp": 1768927896037,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":74,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":73}",
+ "timestamp": 1768927896037,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":75,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":74}",
+ "timestamp": 1768927896037,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":76,\\\"arguments\\\":[{\\\"sessionID\\\":\\\"c2682005-d64f-4f2e-9e72-b9017c0097fc\\\"}],\\\"method\\\":1197}\"],\"id\":75}",
+ "timestamp": 1768927896044,
+ "size": 190
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":59,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896044,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":58,\"type\":10}",
+ "timestamp": 1768927896044,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":60,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896044,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":59,\"type\":10}",
+ "timestamp": 1768927896044,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":61,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896045,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":60,\"type\":10}",
+ "timestamp": 1768927896045,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":62,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896045,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":61,\"type\":10}",
+ "timestamp": 1768927896045,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":63,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896045,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":62,\"type\":10}",
+ "timestamp": 1768927896045,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":64,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896045,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":63,\"type\":10}",
+ "timestamp": 1768927896045,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":65,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896046,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":64,\"type\":10}",
+ "timestamp": 1768927896046,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":66,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896046,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":65,\"type\":10}",
+ "timestamp": 1768927896046,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1256,\\\"method_name\\\":\\\"SessionGetAllControlState\\\",\\\"request_id\\\":67,\\\"response\\\":[{\\\"_id\\\":10000,\\\"client_id\\\":\\\"\\\",\\\"group_id\\\":0,\\\"id\\\":\\\"1e329e9a-6aba-4449-8a3e-25d65bfb61...",
+ "timestamp": 1768927896046,
+ "size": 6295
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":77,\\\"arguments\\\":[false],\\\"method\\\":1256}\"],\"id\":76}",
+ "timestamp": 1768927896047,
+ "size": 139
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":66,\"type\":10}",
+ "timestamp": 1768927896047,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":68,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896047,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":67,\"type\":10}",
+ "timestamp": 1768927896047,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":69,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896047,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":68,\"type\":10}",
+ "timestamp": 1768927896047,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":70,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896047,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":69,\"type\":10}",
+ "timestamp": 1768927896047,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":71,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896047,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":70,\"type\":10}",
+ "timestamp": 1768927896047,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":72,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896048,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":71,\"type\":10}",
+ "timestamp": 1768927896048,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":73,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896048,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":72,\"type\":10}",
+ "timestamp": 1768927896048,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":74,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896048,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":73,\"type\":10}",
+ "timestamp": 1768927896048,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":75,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896048,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":74,\"type\":10}",
+ "timestamp": 1768927896048,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleAlertCallback(2, \\\\\\\"Mode change\\\\\\\")\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896083,
+ "size": 166
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleAlertCallback(2, \\\\\\\"Local Peer Stream Mixer Mode\\\\\\\")\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896084,
+ "size": 183
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1197,\\\"method_name\\\":\\\"JoinSession\\\",\\\"request_id\\\":76,\\\"response\\\":{\\\"process_status\\\":\\\"Success\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896085,
+ "size": 178
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":75,\"type\":10}",
+ "timestamp": 1768927896096,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleAlertCallback(2, \\\\\\\"RebuildRemoteUserControl\\\\\\\")\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896096,
+ "size": 179
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":78,\\\"arguments\\\":[true],\\\"method\\\":1256}\"],\"id\":77}",
+ "timestamp": 1768927896097,
+ "size": 138
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1256,\\\"method_name\\\":\\\"SessionGetAllControlState\\\",\\\"request_id\\\":77,\\\"response\\\":[{\\\"_id\\\":10100,\\\"client_id\\\":\\\"\\\",\\\"group_id\\\":1,\\\"id\\\":\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c68...",
+ "timestamp": 1768927896099,
+ "size": 6320
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":79,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":78}",
+ "timestamp": 1768927896105,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":80,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":79}",
+ "timestamp": 1768927896113,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":81,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":80}",
+ "timestamp": 1768927896113,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":82,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":81}",
+ "timestamp": 1768927896114,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":83,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":82}",
+ "timestamp": 1768927896114,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":84,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":83}",
+ "timestamp": 1768927896114,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":85,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":84}",
+ "timestamp": 1768927896114,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":86,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":85}",
+ "timestamp": 1768927896114,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":87,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":86}",
+ "timestamp": 1768927896128,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":88,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":87}",
+ "timestamp": 1768927896128,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":89,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":88}",
+ "timestamp": 1768927896128,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":90,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":89}",
+ "timestamp": 1768927896128,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":91,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":90}",
+ "timestamp": 1768927896128,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":92,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":91}",
+ "timestamp": 1768927896128,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":93,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":92}",
+ "timestamp": 1768927896128,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":94,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":93}",
+ "timestamp": 1768927896128,
+ "size": 131
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":76,\"type\":10}",
+ "timestamp": 1768927896133,
+ "size": 31
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":95,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":94}",
+ "timestamp": 1768927896141,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":96,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":95}",
+ "timestamp": 1768927896141,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":97,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":96}",
+ "timestamp": 1768927896141,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":98,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":97}",
+ "timestamp": 1768927896141,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":99,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":98}",
+ "timestamp": 1768927896141,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":100,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":99}",
+ "timestamp": 1768927896141,
+ "size": 132
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":101,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":100}",
+ "timestamp": 1768927896141,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":102,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":101}",
+ "timestamp": 1768927896141,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":103,\\\"arguments\\\":[],\\\"method\\\":1385}\"],\"id\":102}",
+ "timestamp": 1768927896155,
+ "size": 136
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1256,\\\"method_name\\\":\\\"SessionGetAllControlState\\\",\\\"request_id\\\":78,\\\"response\\\":[{\\\"_id\\\":10000,\\\"client_id\\\":\\\"\\\",\\\"group_id\\\":0,\\\"id\\\":\\\"1e329e9a-6aba-4449-8a3e-25d65bfb61...",
+ "timestamp": 1768927896162,
+ "size": 6295
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":77,\"type\":10}",
+ "timestamp": 1768927896184,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":79,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896184,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":78,\"type\":10}",
+ "timestamp": 1768927896184,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":80,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896184,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":79,\"type\":10}",
+ "timestamp": 1768927896184,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":81,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896184,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":80,\"type\":10}",
+ "timestamp": 1768927896184,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":82,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896184,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":81,\"type\":10}",
+ "timestamp": 1768927896184,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":83,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896184,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":82,\"type\":10}",
+ "timestamp": 1768927896184,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":84,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896184,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":83,\"type\":10}",
+ "timestamp": 1768927896184,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":85,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896184,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":84,\"type\":10}",
+ "timestamp": 1768927896185,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":86,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896185,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":85,\"type\":10}",
+ "timestamp": 1768927896185,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":87,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896185,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":86,\"type\":10}",
+ "timestamp": 1768927896185,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":88,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896185,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":87,\"type\":10}",
+ "timestamp": 1768927896185,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":89,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896185,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":88,\"type\":10}",
+ "timestamp": 1768927896185,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":90,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896185,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":89,\"type\":10}",
+ "timestamp": 1768927896185,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":91,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896185,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":90,\"type\":10}",
+ "timestamp": 1768927896186,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":92,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896186,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":91,\"type\":10}",
+ "timestamp": 1768927896186,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":93,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896186,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":92,\"type\":10}",
+ "timestamp": 1768927896186,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":94,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896186,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":93,\"type\":10}",
+ "timestamp": 1768927896186,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":95,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896189,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":94,\"type\":10}",
+ "timestamp": 1768927896189,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":96,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896189,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":95,\"type\":10}",
+ "timestamp": 1768927896189,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":97,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896189,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":96,\"type\":10}",
+ "timestamp": 1768927896190,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":98,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896190,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":97,\"type\":10}",
+ "timestamp": 1768927896190,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":99,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896190,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":98,\"type\":10}",
+ "timestamp": 1768927896190,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":100,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896190,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":99,\"type\":10}",
+ "timestamp": 1768927896190,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":101,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896190,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":100,\"type\":10}",
+ "timestamp": 1768927896190,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":102,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896190,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":101,\"type\":10}",
+ "timestamp": 1768927896191,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1385,\\\"method_name\\\":\\\"VSTListTrackAssignments\\\",\\\"request_id\\\":103,\\\"response\\\":{\\\"vsts\\\":[]}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896191,
+ "size": 172
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":102,\"type\":10}",
+ "timestamp": 1768927896191,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927896357,
+ "size": 2732
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927896514,
+ "size": 2732
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":104,\\\"arguments\\\":[],\\\"method\\\":1207}\"],\"id\":103}",
+ "timestamp": 1768927896524,
+ "size": 136
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":105,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":104}",
+ "timestamp": 1768927896536,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":106,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":105}",
+ "timestamp": 1768927896536,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":107,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":106}",
+ "timestamp": 1768927896536,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":108,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":107}",
+ "timestamp": 1768927896536,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":109,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":108}",
+ "timestamp": 1768927896536,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":110,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":109}",
+ "timestamp": 1768927896536,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":111,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":110}",
+ "timestamp": 1768927896536,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":112,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":111}",
+ "timestamp": 1768927896536,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":113,\\\"arguments\\\":[],\\\"method\\\":1385}\"],\"id\":112}",
+ "timestamp": 1768927896549,
+ "size": 136
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":114,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":113}",
+ "timestamp": 1768927896549,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":115,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":114}",
+ "timestamp": 1768927896549,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":116,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":115}",
+ "timestamp": 1768927896549,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":117,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":116}",
+ "timestamp": 1768927896549,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":118,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":117}",
+ "timestamp": 1768927896549,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":119,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":118}",
+ "timestamp": 1768927896549,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":120,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":119}",
+ "timestamp": 1768927896549,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":121,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":120}",
+ "timestamp": 1768927896549,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":122,\\\"arguments\\\":[],\\\"method\\\":1385}\"],\"id\":121}",
+ "timestamp": 1768927896557,
+ "size": 136
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1207,\\\"method_name\\\":\\\"OnLoggedOut\\\",\\\"request_id\\\":104,\\\"response\\\":{\\\"process_status\\\":\\\"Success\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896587,
+ "size": 179
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":103,\"type\":10}",
+ "timestamp": 1768927896589,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":105,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896589,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":104,\"type\":10}",
+ "timestamp": 1768927896589,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":106,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896589,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":105,\"type\":10}",
+ "timestamp": 1768927896589,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":107,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896589,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":106,\"type\":10}",
+ "timestamp": 1768927896589,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":108,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896589,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":107,\"type\":10}",
+ "timestamp": 1768927896589,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":109,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896589,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":108,\"type\":10}",
+ "timestamp": 1768927896589,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":110,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896590,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":109,\"type\":10}",
+ "timestamp": 1768927896590,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":111,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896590,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":110,\"type\":10}",
+ "timestamp": 1768927896590,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":112,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896590,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":111,\"type\":10}",
+ "timestamp": 1768927896590,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1385,\\\"method_name\\\":\\\"VSTListTrackAssignments\\\",\\\"request_id\\\":113,\\\"response\\\":{\\\"vsts\\\":[]}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896590,
+ "size": 172
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":112,\"type\":10}",
+ "timestamp": 1768927896590,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":114,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896590,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":113,\"type\":10}",
+ "timestamp": 1768927896590,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":115,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896591,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":114,\"type\":10}",
+ "timestamp": 1768927896591,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":116,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896591,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":115,\"type\":10}",
+ "timestamp": 1768927896591,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":117,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896591,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":116,\"type\":10}",
+ "timestamp": 1768927896591,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":118,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896591,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":117,\"type\":10}",
+ "timestamp": 1768927896591,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":119,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896591,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":118,\"type\":10}",
+ "timestamp": 1768927896591,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":120,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896592,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":119,\"type\":10}",
+ "timestamp": 1768927896592,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":121,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896593,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":120,\"type\":10}",
+ "timestamp": 1768927896593,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927896707,
+ "size": 2732
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1385,\\\"method_name\\\":\\\"VSTListTrackAssignments\\\",\\\"request_id\\\":122,\\\"response\\\":{\\\"vsts\\\":[]}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768927896708,
+ "size": 172
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":121,\"type\":10}",
+ "timestamp": 1768927896708,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927896848,
+ "size": 2732
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927897028,
+ "size": 2732
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1122,\\\"method_name\\\":\\\"getConnectionDetail\\\",\\\"request_id\\\":43622,\\\"response\\\":[{\\\"audio\\\":{\\\"acpu\\\":3.257441520690918,\\\"audio_chat_in\\\":\\\"MacBook Pro Microphone\\\",\\\"audio_cha...",
+ "timestamp": 1768927897032,
+ "size": 1256
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1122,\\\"method_name\\\":\\\"getConnectionDetail\\\",\\\"request_id\\\":43623,\\\"response\\\":[{\\\"audio\\\":{\\\"acpu\\\":3.257441520690918,\\\"audio_chat_in\\\":\\\"MacBook Pro Microphone\\\",\\\"audio_cha...",
+ "timestamp": 1768927897032,
+ "size": 1256
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927897250,
+ "size": 2732
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927897440,
+ "size": 2732
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927897641,
+ "size": 2732
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927897838,
+ "size": 2732
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927898040,
+ "size": 2732
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1122,\\\"method_name\\\":\\\"getConnectionDetail\\\",\\\"request_id\\\":43624,\\\"response\\\":[{\\\"audio\\\":{\\\"acpu\\\":2.1440341472625732,\\\"audio_chat_in\\\":\\\"MacBook Pro Microphone\\\",\\\"audio_ch...",
+ "timestamp": 1768927898042,
+ "size": 1257
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1122,\\\"method_name\\\":\\\"getConnectionDetail\\\",\\\"request_id\\\":43625,\\\"response\\\":[{\\\"audio\\\":{\\\"acpu\\\":2.1440341472625732,\\\"audio_chat_in\\\":\\\"MacBook Pro Microphone\\\",\\\"audio_ch...",
+ "timestamp": 1768927898042,
+ "size": 1257
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927898231,
+ "size": 2732
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927898428,
+ "size": 2732
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927898625,
+ "size": 2732
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleBridgeCallback2([\\\\n [\\\\n \\\\\\\"vu\\\\\\\",\\\\n \\\\\\\"7fe6542c-5da3-4bd0-b3cf-4bbf356c682b\\\\\\\",\\\\n false,\\\\n ...",
+ "timestamp": 1768927898953,
+ "size": 2732
+ }
+ ],
+ "closed": false
+ },
+ {
+ "url": "ws://localhost:6767/?channel_id=96b32dc5-15ab-4ff6-dcaa-5922d2708ed6&token=CKXGCTBxfdGG12oXACOEYA&client_type=client&client_id=8d64a3b0-2f34-48c1-8199-74766ad6b1ac&machine=1b4d0ddbf9c1d7cd0a311465676d86a5892a36ea&os=MacOSX-M&product=JamClientModern&udp_reachable=false",
+ "timestamp": 1768927895325,
+ "isNativeClient": false,
+ "isServerConnection": false,
+ "messages": [
+ {
+ "direction": "sent",
+ "payload": "{\"type\":\"LOGIN\",\"route_to\":\"server\",\"login\":{\"token\":\"CKXGCTBxfdGG12oXACOEYA\",\"client_id\":\"8d64a3b0-2f34-48c1-8199-74766ad6b1ac\",\"client_type\":\"browser\"}}",
+ "timestamp": 1768927895444,
+ "size": 154
+ },
+ {
+ "direction": "received",
+ "payload": "{\"type\":\"LOGIN_ACK\",\"route_to\":\"client\",\"login_ack\":{\"public_ip\":\"127.0.0.1\",\"client_id\":\"8d64a3b0-2f34-48c1-8199-74766ad6b1ac\",\"token\":\"CKXGCTBxfdGG12oXACOEYA\",\"heartbeat_interval\":20,\"reconnected\":f...",
+ "timestamp": 1768927895445,
+ "size": 565
+ },
+ {
+ "direction": "received",
+ "payload": "{\"type\":\"LOGIN_ACK\",\"route_to\":\"client\",\"login_ack\":{\"public_ip\":\"127.0.0.1\",\"client_id\":\"8d64a3b0-2f34-48c1-8199-74766ad6b1ac\",\"token\":\"CKXGCTBxfdGG12oXACOEYA\",\"heartbeat_interval\":20,\"reconnected\":f...",
+ "timestamp": 1768927895460,
+ "size": 565
+ },
+ {
+ "direction": "received",
+ "payload": "{\"type\":\"SESSION_JOIN\",\"route_to\":\"user:27bd4a30-d1b8-4eea-8454-01a104d59381\",\"session_join\":{\"session_id\":\"c2682005-d64f-4f2e-9e72-b9017c0097fc\",\"msg\":\"Nuwan Chaturanga has joined the session.\",\"trac...",
+ "timestamp": 1768927895725,
+ "size": 329
+ }
+ ],
+ "closed": false
+ },
+ {
+ "url": "ws://www.jamkazam.local:6767/websocket?channel_id=c8b6b7c5-b0d6-49d9-d058-08ae47c8ff7f&token=CKXGCTBxfdGG12oXACOEYA&client_type=browser&client_id=&machine=&os=MacOSX&udp_reachable=",
+ "timestamp": 1768927896521,
+ "isNativeClient": false,
+ "isServerConnection": true,
+ "messages": [],
+ "closed": true,
+ "closedAt": 1768927896586
+ }
+]
\ No newline at end of file
diff --git a/jam-ui/test/test-results/e2e/session-interface.png b/jam-ui/test/test-results/e2e/session-interface.png
new file mode 100644
index 000000000..14e163123
Binary files /dev/null and b/jam-ui/test/test-results/e2e/session-interface.png differ
diff --git a/jam-ui/test/test-results/session-join-analysis/jam-ui-all-api-calls.json b/jam-ui/test/test-results/session-join-analysis/jam-ui-all-api-calls.json
new file mode 100644
index 000000000..2538f6af6
--- /dev/null
+++ b/jam-ui/test/test-results/session-join-analysis/jam-ui-all-api-calls.json
@@ -0,0 +1,772 @@
+[
+ {
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3000/api/sessions",
+ "pathname": "/api/sessions",
+ "timestamp": 1768965359955,
+ "requestHeaders": {
+ "referer": "http://beta.jamkazam.local:4000/",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
+ "accept": "application/json",
+ "content-type": "application/json",
+ "accept-language": "en-US"
+ },
+ "requestBody": {
+ "privacy": "1",
+ "description": "Automated test session",
+ "inviteeIds": "",
+ "musician_access": true,
+ "approval_required": false,
+ "legal_terms": true,
+ "start": "Wed Jan 21 2026 08:45 AM",
+ "duration": "60",
+ "invitations": [],
+ "timezone": "Central Time (US & Canada),America/Chicago",
+ "genres": [
+ "acapella"
+ ],
+ "friends_can_join": true,
+ "is_unstructured_rsvp": false,
+ "fan_chat": false,
+ "fan_access": false,
+ "legal_policy": "legal_policy",
+ "language": "eng",
+ "name": "my session",
+ "rsvp_slots": [
+ {
+ "instrument_id": "other",
+ "proficiency_level": 3,
+ "approve": true
+ }
+ ]
+ },
+ "duration": 137,
+ "responseStatus": 201,
+ "responseHeaders": {
+ "access-control-max-age": "7200",
+ "x-request-id": "d243ef9d-ec9d-4609-a811-968f247214df",
+ "access-control-expose-headers": "",
+ "content-encoding": "gzip",
+ "etag": "W/\"a25cbf7632128cc7cb369fd38d1ef3da\"",
+ "x-content-type-options": "nosniff",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "content-type": "application/json; charset=utf-8",
+ "vary": "Accept-Encoding, Origin",
+ "x-runtime": "0.136211",
+ "x-frame-options": "SAMEORIGIN",
+ "transfer-encoding": "chunked",
+ "cache-control": "max-age=0, private, must-revalidate",
+ "access-control-allow-credentials": "true",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "x-xss-protection": "1; mode=block"
+ },
+ "responseBody": {
+ "id": "75dd4b54-87a7-4fdf-b92b-42f35f1baca9",
+ "music_session_id": null,
+ "name": "my session",
+ "description": "Automated test session",
+ "musician_access": true,
+ "approval_required": false,
+ "fan_access": false,
+ "fan_chat": false,
+ "create_type": null,
+ "band_id": null,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "genre_id": "acapella",
+ "created_at": "2026-01-21T03:15:59.980Z",
+ "like_count": 0,
+ "comment_count": 0,
+ "play_count": 0,
+ "scheduled_duration": "01:00:00",
+ "language": "eng",
+ "recurring_mode": "once",
+ "language_description": "English",
+ "scheduled_start_date": "Wed 21 January 2026",
+ "access_description": "Musicians may join at will. Fans may not listen to session.",
+ "timezone": "Central Time (US & Canada),America/Chicago",
+ "timezone_id": "America/Chicago",
+ "timezone_description": "Central Time (US & Canada)",
+ "musician_access_description": "Musicians may join at will",
+ "fan_access_description": "Fans may not listen to session",
+ "session_removed_at": null,
+ "legal_policy": "legal_policy",
+ "open_rsvps": false,
+ "is_unstructured_rsvp?": false,
+ "friends_can_join": true,
+ "use_video_conferencing_server": true,
+ "creator": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "name": "Nuwan Chaturanga",
+ "photo_url": null
+ },
+ "band": null,
+ "users": [],
+ "comments": [],
+ "session_info_comments": [],
+ "music_notations": [],
+ "invitations": [],
+ "approved_rsvps": [
+ {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "resolved_photo_url": "http://localhost:3000/assets/shared/avatar_generic.png",
+ "full_score": null,
+ "audio_latency": 5,
+ "internet_score": null,
+ "instrument_list": [
+ {
+ "id": "other",
+ "desc": "Other",
+ "level": 3
+ }
+ ],
+ "rsvp_request_id": "64910edd-bd44-4540-87e7-2408fc55511f"
+ }
+ ],
+ "open_slots": [],
+ "pending_invitations": [],
+ "pending_rsvp_requests": [],
+ "lesson_session": null,
+ "active_music_session": null,
+ "can_join": true,
+ "share_url": "http://www.jamkazam.local:3000/s/73FTWXH9JE",
+ "genres": [
+ "A Cappella"
+ ],
+ "scheduled_start": "Wed 21 January 2026 08:45:00",
+ "pretty_scheduled_start_with_timezone": "Wednesday, January 21, 8:45-8:45 AM US Central Time",
+ "pretty_scheduled_start_short": "Wednesday, January 21 - 8:45am"
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/app_features?env=development",
+ "pathname": "/api/app_features",
+ "timestamp": 1768965360167,
+ "requestHeaders": {
+ "referer": "http://beta.jamkazam.local:4000/",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
+ "accept": "application/json",
+ "content-type": "application/json",
+ "accept-language": "en-US"
+ },
+ "duration": 99,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "access-control-max-age": "7200",
+ "x-request-id": "0ba2e442-a051-4194-9582-dcd7eb8809ee",
+ "access-control-expose-headers": "",
+ "content-encoding": "gzip",
+ "etag": "W/\"73de1569c5c93f56982197c78242c09c\"",
+ "x-content-type-options": "nosniff",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "content-type": "application/json; charset=utf-8",
+ "vary": "Accept-Encoding, Origin",
+ "x-runtime": "0.027957",
+ "x-frame-options": "SAMEORIGIN",
+ "transfer-encoding": "chunked",
+ "cache-control": "max-age=0, private, must-revalidate",
+ "access-control-allow-credentials": "true",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "x-xss-protection": "1; mode=block"
+ },
+ "responseBody": []
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/me",
+ "pathname": "/api/me",
+ "timestamp": 1768965360167,
+ "requestHeaders": {
+ "referer": "http://beta.jamkazam.local:4000/",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
+ "accept": "application/json",
+ "content-type": "application/json",
+ "accept-language": "en-US"
+ },
+ "duration": 112,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "access-control-max-age": "7200",
+ "x-request-id": "190ed1a5-dd23-4947-973a-c94d06f5e5a6",
+ "access-control-expose-headers": "",
+ "content-encoding": "gzip",
+ "etag": "W/\"6bfd801d7b90ab05f542b59add03f639\"",
+ "x-content-type-options": "nosniff",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "content-type": "application/json; charset=utf-8",
+ "vary": "Accept-Encoding, Origin",
+ "x-runtime": "0.019786",
+ "x-frame-options": "SAMEORIGIN",
+ "transfer-encoding": "chunked",
+ "cache-control": "max-age=0, private, must-revalidate",
+ "access-control-allow-credentials": "true",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "x-xss-protection": "1; mode=block"
+ },
+ "responseBody": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "email": "nuwan@jamkazam.com",
+ "photo_url": null,
+ "show_free_jamtrack": false,
+ "is_affiliate_partner": false,
+ "recording_pref": 1
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/my_notifications?offset=0&limit=20",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/my_notifications",
+ "timestamp": 1768965360280,
+ "requestHeaders": {
+ "referer": "http://beta.jamkazam.local:4000/",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
+ "accept": "application/json",
+ "content-type": "application/json",
+ "accept-language": "en-US"
+ },
+ "duration": 4,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "access-control-max-age": "7200",
+ "x-request-id": "40c18691-3e9b-44fa-ac7d-8ed7b2ac3ae6",
+ "access-control-expose-headers": "",
+ "content-encoding": "gzip",
+ "etag": "W/\"a21896e7270a023e65a5c626034da71e\"",
+ "x-content-type-options": "nosniff",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "content-type": "application/json; charset=utf-8",
+ "vary": "Accept-Encoding, Origin",
+ "x-runtime": "0.059304",
+ "x-frame-options": "SAMEORIGIN",
+ "transfer-encoding": "chunked",
+ "cache-control": "max-age=0, private, must-revalidate",
+ "access-control-allow-credentials": "true",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "x-xss-protection": "1; mode=block"
+ },
+ "responseBody": {
+ "next": null,
+ "unread_total": 0,
+ "notifications": []
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "pathname": "/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "timestamp": 1768965360282,
+ "requestHeaders": {
+ "referer": "http://beta.jamkazam.local:4000/",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
+ "accept": "application/json",
+ "content-type": "application/json",
+ "accept-language": "en-US"
+ },
+ "duration": 28,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "access-control-max-age": "7200",
+ "x-request-id": "0008ee3d-a1a9-47ee-8e75-e6d957bf8130",
+ "access-control-expose-headers": "",
+ "content-encoding": "gzip",
+ "etag": "W/\"8ce855cfe7ebadc4676419d3f557926a\"",
+ "x-content-type-options": "nosniff",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "content-type": "application/json; charset=utf-8",
+ "vary": "Accept-Encoding, Origin",
+ "x-runtime": "0.025263",
+ "x-frame-options": "SAMEORIGIN",
+ "transfer-encoding": "chunked",
+ "cache-control": "max-age=0, private, must-revalidate",
+ "access-control-allow-credentials": "true",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "x-xss-protection": "1; mode=block"
+ },
+ "responseBody": [
+ {
+ "id": "a09f9a7e-afb7-489d-870d-e13a336e0b97",
+ "first_name": "Seth",
+ "last_name": "Call",
+ "name": "Seth Call",
+ "location": "Boston, MA",
+ "city": "Boston",
+ "state": "MA",
+ "country": "US",
+ "musician": true,
+ "email": "nuwan+6@jamkazam.com",
+ "online": false,
+ "photo_url": "https://s3.amazonaws.com/jamkazam-dev-public/avatars/a09f9a7e-afb7-489d-870d-e13a336e0b97/8EfyNy2cQPaxEsypRviW_IMG_20231224_133203_HDR.jpg"
+ }
+ ]
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/sessions/75dd4b54-87a7-4fdf-b92b-42f35f1baca9/history?includePending=false",
+ "pathname": "/api/sessions/75dd4b54-87a7-4fdf-b92b-42f35f1baca9/history",
+ "timestamp": 1768965360282,
+ "requestHeaders": {
+ "referer": "http://beta.jamkazam.local:4000/",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
+ "accept": "application/json",
+ "content-type": "application/json",
+ "accept-language": "en-US"
+ },
+ "duration": 202,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "access-control-max-age": "7200",
+ "x-request-id": "5a4486be-1bcf-4521-9faa-fa0be99ae3d3",
+ "access-control-expose-headers": "",
+ "content-encoding": "gzip",
+ "etag": "W/\"a25cbf7632128cc7cb369fd38d1ef3da\"",
+ "x-content-type-options": "nosniff",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "content-type": "application/json; charset=utf-8",
+ "vary": "Accept-Encoding, Origin",
+ "x-runtime": "0.171552",
+ "x-frame-options": "SAMEORIGIN",
+ "transfer-encoding": "chunked",
+ "cache-control": "max-age=0, private, must-revalidate",
+ "access-control-allow-credentials": "true",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "x-xss-protection": "1; mode=block"
+ },
+ "responseBody": {
+ "id": "75dd4b54-87a7-4fdf-b92b-42f35f1baca9",
+ "music_session_id": null,
+ "name": "my session",
+ "description": "Automated test session",
+ "musician_access": true,
+ "approval_required": false,
+ "fan_access": false,
+ "fan_chat": false,
+ "create_type": null,
+ "band_id": null,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "genre_id": "acapella",
+ "created_at": "2026-01-21T03:15:59.980Z",
+ "like_count": 0,
+ "comment_count": 0,
+ "play_count": 0,
+ "scheduled_duration": "01:00:00",
+ "language": "eng",
+ "recurring_mode": "once",
+ "language_description": "English",
+ "scheduled_start_date": "Wed 21 January 2026",
+ "access_description": "Musicians may join at will. Fans may not listen to session.",
+ "timezone": "Central Time (US & Canada),America/Chicago",
+ "timezone_id": "America/Chicago",
+ "timezone_description": "Central Time (US & Canada)",
+ "musician_access_description": "Musicians may join at will",
+ "fan_access_description": "Fans may not listen to session",
+ "session_removed_at": null,
+ "legal_policy": "legal_policy",
+ "open_rsvps": false,
+ "is_unstructured_rsvp?": false,
+ "friends_can_join": true,
+ "use_video_conferencing_server": true,
+ "creator": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "name": "Nuwan Chaturanga",
+ "photo_url": null
+ },
+ "band": null,
+ "users": [],
+ "comments": [],
+ "session_info_comments": [],
+ "music_notations": [],
+ "invitations": [],
+ "approved_rsvps": [
+ {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "resolved_photo_url": "http://localhost:3000/assets/shared/avatar_generic.png",
+ "full_score": null,
+ "audio_latency": 5,
+ "internet_score": null,
+ "instrument_list": [
+ {
+ "id": "other",
+ "desc": "Other",
+ "level": 3
+ }
+ ],
+ "rsvp_request_id": "64910edd-bd44-4540-87e7-2408fc55511f"
+ }
+ ],
+ "open_slots": [],
+ "pending_invitations": [],
+ "pending_rsvp_requests": [],
+ "lesson_session": null,
+ "active_music_session": null,
+ "can_join": true,
+ "share_url": "http://www.jamkazam.local:3000/s/73FTWXH9JE",
+ "genres": [
+ "A Cappella"
+ ],
+ "scheduled_start": "Wed 21 January 2026 08:45:00",
+ "pretty_scheduled_start_with_timezone": "Wednesday, January 21, 8:45-8:45 AM US Central Time",
+ "pretty_scheduled_start_short": "Wednesday, January 21 - 8:45am"
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/sessions/75dd4b54-87a7-4fdf-b92b-42f35f1baca9/history?includePending=false",
+ "pathname": "/api/sessions/75dd4b54-87a7-4fdf-b92b-42f35f1baca9/history",
+ "timestamp": 1768965360585,
+ "requestHeaders": {
+ "referer": "http://beta.jamkazam.local:4000/",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
+ "accept": "application/json",
+ "content-type": "application/json",
+ "accept-language": "en-US"
+ },
+ "duration": 90,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "access-control-max-age": "7200",
+ "x-request-id": "d563df44-1301-4a01-81a6-2e2641dc1b45",
+ "access-control-expose-headers": "",
+ "cache-control": "max-age=0, private, must-revalidate",
+ "content-encoding": "gzip",
+ "etag": "W/\"a25cbf7632128cc7cb369fd38d1ef3da\"",
+ "access-control-allow-credentials": "true",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "x-content-type-options": "nosniff",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "x-xss-protection": "1; mode=block",
+ "content-type": "application/json; charset=utf-8",
+ "vary": "Accept-Encoding, Origin",
+ "x-runtime": "0.084096",
+ "x-frame-options": "SAMEORIGIN"
+ },
+ "responseBody": {
+ "id": "75dd4b54-87a7-4fdf-b92b-42f35f1baca9",
+ "music_session_id": null,
+ "name": "my session",
+ "description": "Automated test session",
+ "musician_access": true,
+ "approval_required": false,
+ "fan_access": false,
+ "fan_chat": false,
+ "create_type": null,
+ "band_id": null,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "genre_id": "acapella",
+ "created_at": "2026-01-21T03:15:59.980Z",
+ "like_count": 0,
+ "comment_count": 0,
+ "play_count": 0,
+ "scheduled_duration": "01:00:00",
+ "language": "eng",
+ "recurring_mode": "once",
+ "language_description": "English",
+ "scheduled_start_date": "Wed 21 January 2026",
+ "access_description": "Musicians may join at will. Fans may not listen to session.",
+ "timezone": "Central Time (US & Canada),America/Chicago",
+ "timezone_id": "America/Chicago",
+ "timezone_description": "Central Time (US & Canada)",
+ "musician_access_description": "Musicians may join at will",
+ "fan_access_description": "Fans may not listen to session",
+ "session_removed_at": null,
+ "legal_policy": "legal_policy",
+ "open_rsvps": false,
+ "is_unstructured_rsvp?": false,
+ "friends_can_join": true,
+ "use_video_conferencing_server": true,
+ "creator": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "name": "Nuwan Chaturanga",
+ "photo_url": null
+ },
+ "band": null,
+ "users": [],
+ "comments": [],
+ "session_info_comments": [],
+ "music_notations": [],
+ "invitations": [],
+ "approved_rsvps": [
+ {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "first_name": "Nuwan",
+ "last_name": "Chaturanga",
+ "name": "Nuwan Chaturanga",
+ "resolved_photo_url": "http://localhost:3000/assets/shared/avatar_generic.png",
+ "full_score": null,
+ "audio_latency": 5,
+ "internet_score": null,
+ "instrument_list": [
+ {
+ "id": "other",
+ "desc": "Other",
+ "level": 3
+ }
+ ],
+ "rsvp_request_id": "64910edd-bd44-4540-87e7-2408fc55511f"
+ }
+ ],
+ "open_slots": [],
+ "pending_invitations": [],
+ "pending_rsvp_requests": [],
+ "lesson_session": null,
+ "active_music_session": null,
+ "can_join": true,
+ "share_url": "http://www.jamkazam.local:3000/s/73FTWXH9JE",
+ "genres": [
+ "A Cappella"
+ ],
+ "scheduled_start": "Wed 21 January 2026 08:45:00",
+ "pretty_scheduled_start_with_timezone": "Wednesday, January 21, 8:45-8:45 AM US Central Time",
+ "pretty_scheduled_start_short": "Wednesday, January 21 - 8:45am"
+ }
+ },
+ {
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3000/api/sessions/75dd4b54-87a7-4fdf-b92b-42f35f1baca9/participants",
+ "pathname": "/api/sessions/75dd4b54-87a7-4fdf-b92b-42f35f1baca9/participants",
+ "timestamp": 1768965360692,
+ "requestHeaders": {
+ "referer": "http://beta.jamkazam.local:4000/",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
+ "accept": "application/json",
+ "content-type": "application/json",
+ "accept-language": "en-US"
+ },
+ "requestBody": {
+ "client_id": "6cb293d8-1026-418f-9d4d-b240a3efa197",
+ "as_musician": true,
+ "tracks": [
+ {
+ "client_track_id": "b0cf76ae-0f87-4d0b-974c-75715b7bc9b6",
+ "client_resource_id": "0x600000e52300",
+ "instrument_id": "piano",
+ "sound": "stereo"
+ }
+ ],
+ "client_role": "parent",
+ "parent_client_id": ""
+ },
+ "duration": 229,
+ "responseStatus": 201,
+ "responseHeaders": {
+ "access-control-max-age": "7200",
+ "x-request-id": "126b756e-3b96-491d-abc6-e05a0fc780fa",
+ "access-control-expose-headers": "",
+ "content-encoding": "gzip",
+ "etag": "W/\"2c5540ef347bb18a98bafdf3550f9f74\"",
+ "x-content-type-options": "nosniff",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "content-type": "application/json; charset=utf-8",
+ "vary": "Accept-Encoding, Origin",
+ "x-runtime": "0.221143",
+ "x-frame-options": "SAMEORIGIN",
+ "transfer-encoding": "chunked",
+ "cache-control": "max-age=0, private, must-revalidate",
+ "location": "http://www.jamkazam.local:3000/api/sessions/75dd4b54-87a7-4fdf-b92b-42f35f1baca9",
+ "access-control-allow-credentials": "true",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "x-xss-protection": "1; mode=block"
+ },
+ "responseBody": {
+ "id": "75dd4b54-87a7-4fdf-b92b-42f35f1baca9",
+ "name": "my session",
+ "description": "Automated test session",
+ "musician_access": true,
+ "approval_required": false,
+ "friends_can_join": true,
+ "fan_access": false,
+ "fan_chat": false,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "claimed_recording_initiator_id": null,
+ "track_changes_counter": 0,
+ "max_score": 0,
+ "backing_track_path": null,
+ "metronome_active": false,
+ "jam_track_initiator_id": null,
+ "jam_track_id": null,
+ "music_session_id_int": 3070,
+ "use_video_conferencing_server": true,
+ "created_at": "2026-01-21T03:16:00.744Z",
+ "music_notations": [],
+ "participants": [
+ {
+ "ip_address": "127.0.0.1",
+ "client_id": "6cb293d8-1026-418f-9d4d-b240a3efa197",
+ "joined_session_at": "2026-01-21T03:16:00.776Z",
+ "id": "95ee4b0c-d824-4437-8bac-3c2387612c80",
+ "metronome_open": false,
+ "is_jamblaster": false,
+ "client_role": "parent",
+ "parent_client_id": "",
+ "client_id_int": 93886,
+ "tracks": [
+ {
+ "id": "18302dc0-49d8-4f9f-a035-86bb76029e7b",
+ "connection_id": "95ee4b0c-d824-4437-8bac-3c2387612c80",
+ "instrument_id": "piano",
+ "sound": "stereo",
+ "client_track_id": "b0cf76ae-0f87-4d0b-974c-75715b7bc9b6",
+ "client_resource_id": "0x600000e52300",
+ "updated_at": "2026-01-21T03:16:00.778Z",
+ "instrument": "Piano"
+ }
+ ],
+ "backing_tracks": [],
+ "user": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "name": "Nuwan Chaturanga",
+ "is_friend": false,
+ "connection_state": "connected",
+ "subscription": "jamsubplatinum"
+ }
+ }
+ ],
+ "invitations": [],
+ "lesson_session": null,
+ "join_requests": [],
+ "jam_track": null,
+ "claimed_recording": null,
+ "subscription": {
+ "play_time_per_month": null,
+ "play_time_per_session": null,
+ "can_record_audio": true,
+ "can_record_video": true,
+ "can_use_video": true,
+ "can_record_wave": true,
+ "video_resolution": 4,
+ "audio_max_bitrate": 5,
+ "can_broadcast": true,
+ "broadcasting_type": 3,
+ "max_players": null,
+ "pro_audio": true,
+ "has_support": true,
+ "name": "Platinum",
+ "rank": 3,
+ "remaining_month_play_time": null
+ },
+ "session_rules": {
+ "remaining_session_play_time": null
+ },
+ "can_join": true,
+ "genres": [
+ "A Cappella"
+ ],
+ "recording": null,
+ "share_url": "http://www.jamkazam.local:3000/s/73FTWXH9JE",
+ "session_controller_id": "27bd4a30-d1b8-4eea-8454-01a104d59381"
+ }
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/sessions/75dd4b54-87a7-4fdf-b92b-42f35f1baca9",
+ "pathname": "/api/sessions/75dd4b54-87a7-4fdf-b92b-42f35f1baca9",
+ "timestamp": 1768965361003,
+ "requestHeaders": {
+ "referer": "http://beta.jamkazam.local:4000/",
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
+ "accept": "application/json",
+ "content-type": "application/json",
+ "accept-language": "en-US"
+ },
+ "duration": 41,
+ "responseStatus": 200,
+ "responseHeaders": {
+ "access-control-max-age": "7200",
+ "x-request-id": "566a5e0a-fd08-43f8-9a9f-93d67633324a",
+ "access-control-expose-headers": "",
+ "content-encoding": "gzip",
+ "etag": "W/\"104777bf9b6eaaaeac5f7a30d6b85c77\"",
+ "x-content-type-options": "nosniff",
+ "access-control-allow-methods": "GET, POST, PUT, DELETE, OPTIONS",
+ "content-type": "application/json; charset=utf-8",
+ "vary": "Accept-Encoding, Origin",
+ "x-runtime": "0.039334",
+ "x-frame-options": "SAMEORIGIN",
+ "transfer-encoding": "chunked",
+ "cache-control": "max-age=0, private, must-revalidate",
+ "access-control-allow-credentials": "true",
+ "access-control-allow-origin": "http://beta.jamkazam.local:4000",
+ "x-xss-protection": "1; mode=block"
+ },
+ "responseBody": {
+ "id": "75dd4b54-87a7-4fdf-b92b-42f35f1baca9",
+ "name": "my session",
+ "description": "Automated test session",
+ "musician_access": true,
+ "approval_required": false,
+ "friends_can_join": true,
+ "fan_access": false,
+ "fan_chat": false,
+ "user_id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "claimed_recording_initiator_id": null,
+ "track_changes_counter": 0,
+ "max_score": 0,
+ "backing_track_path": null,
+ "metronome_active": false,
+ "jam_track_initiator_id": null,
+ "jam_track_id": null,
+ "music_session_id_int": 3070,
+ "use_video_conferencing_server": true,
+ "created_at": "2026-01-21T03:16:00.744Z",
+ "music_notations": [],
+ "participants": [
+ {
+ "ip_address": "127.0.0.1",
+ "client_id": "6cb293d8-1026-418f-9d4d-b240a3efa197",
+ "joined_session_at": "2026-01-21T03:16:00.776Z",
+ "id": "95ee4b0c-d824-4437-8bac-3c2387612c80",
+ "metronome_open": false,
+ "is_jamblaster": false,
+ "client_role": "parent",
+ "parent_client_id": "",
+ "client_id_int": 93886,
+ "tracks": [
+ {
+ "id": "18302dc0-49d8-4f9f-a035-86bb76029e7b",
+ "connection_id": "95ee4b0c-d824-4437-8bac-3c2387612c80",
+ "instrument_id": "piano",
+ "sound": "stereo",
+ "client_track_id": "b0cf76ae-0f87-4d0b-974c-75715b7bc9b6",
+ "client_resource_id": "0x600000e52300",
+ "updated_at": "2026-01-21T03:16:00.778Z",
+ "instrument": "Piano"
+ }
+ ],
+ "backing_tracks": [],
+ "user": {
+ "id": "27bd4a30-d1b8-4eea-8454-01a104d59381",
+ "photo_url": null,
+ "name": "Nuwan Chaturanga",
+ "is_friend": false,
+ "connection_state": "connected",
+ "subscription": "jamsubplatinum"
+ }
+ }
+ ],
+ "invitations": [],
+ "lesson_session": null,
+ "join_requests": [],
+ "jam_track": null,
+ "claimed_recording": null,
+ "can_join": true,
+ "genres": [
+ "A Cappella"
+ ],
+ "recording": null,
+ "share_url": "http://www.jamkazam.local:3000/s/73FTWXH9JE",
+ "session_controller_id": "27bd4a30-d1b8-4eea-8454-01a104d59381"
+ }
+ }
+]
\ No newline at end of file
diff --git a/jam-ui/test/test-results/session-join-analysis/jam-ui-session-join.json b/jam-ui/test/test-results/session-join-analysis/jam-ui-session-join.json
new file mode 100644
index 000000000..475a877d1
--- /dev/null
+++ b/jam-ui/test/test-results/session-join-analysis/jam-ui-session-join.json
@@ -0,0 +1,78 @@
+{
+ "timestamp": "2026-01-21T03:16:03.972Z",
+ "restApiCalls": {
+ "total": 9,
+ "sessionCreation": [
+ {
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3000/api/sessions",
+ "status": 201
+ }
+ ],
+ "addParticipant": [
+ {
+ "method": "POST",
+ "url": "http://www.jamkazam.local:3000/api/sessions/75dd4b54-87a7-4fdf-b92b-42f35f1baca9/participants",
+ "status": 201
+ }
+ ],
+ "getSessionDetails": [
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/sessions/75dd4b54-87a7-4fdf-b92b-42f35f1baca9",
+ "status": 200
+ }
+ ],
+ "getSessionHistory": [
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/sessions/75dd4b54-87a7-4fdf-b92b-42f35f1baca9/history?includePending=false",
+ "status": 200
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/sessions/75dd4b54-87a7-4fdf-b92b-42f35f1baca9/history?includePending=false",
+ "status": 200
+ }
+ ],
+ "updateTracks": [],
+ "sessionChat": [],
+ "udpReachability": [],
+ "other": [
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/app_features?env=development",
+ "status": 200
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/me",
+ "status": 200
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/my_notifications?offset=0&limit=20",
+ "status": 200
+ },
+ {
+ "method": "GET",
+ "url": "http://www.jamkazam.local:3000/api/users/27bd4a30-d1b8-4eea-8454-01a104d59381/friends",
+ "status": 200
+ }
+ ]
+ },
+ "websocketConnections": [
+ {
+ "url": "ws://localhost:3060/",
+ "type": "native",
+ "messageCount": 373,
+ "status": "open"
+ },
+ {
+ "url": "ws://localhost:6767/?channel_id=3c27dd42-1dd1-4d2f-e9f3-7092f347b244&token=CKXGCTBxfdGG12oXACOEYA&client_type=client&client_id=6cb293d8-1026-418f-9d4d-b240a3efa197&machine=1b4d0ddbf9c1d7cd0a311465676d86a5892a36ea&os=MacOSX-M&product=JamClientModern&udp_reachable=false",
+ "type": "other",
+ "messageCount": 4,
+ "status": "open"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/jam-ui/test/test-results/session-join-analysis/jam-ui-websockets.json b/jam-ui/test/test-results/session-join-analysis/jam-ui-websockets.json
new file mode 100644
index 000000000..46b8aa55e
--- /dev/null
+++ b/jam-ui/test/test-results/session-join-analysis/jam-ui-websockets.json
@@ -0,0 +1,2321 @@
+[
+ {
+ "url": "ws://beta.jamkazam.local:4000/sockjs-node",
+ "timestamp": 1768965342129,
+ "isNativeClient": false,
+ "isServerConnection": false,
+ "messages": [
+ {
+ "direction": "received",
+ "payload": "{\"type\":\"log-level\",\"data\":\"none\"}",
+ "timestamp": 1768965342131,
+ "size": 34
+ },
+ {
+ "direction": "received",
+ "payload": "{\"type\":\"hot\"}",
+ "timestamp": 1768965342131,
+ "size": 14
+ },
+ {
+ "direction": "received",
+ "payload": "{\"type\":\"liveReload\"}",
+ "timestamp": 1768965342131,
+ "size": 21
+ },
+ {
+ "direction": "received",
+ "payload": "{\"type\":\"hash\",\"data\":\"11e3ee7286f64baa34d7\"}",
+ "timestamp": 1768965342131,
+ "size": 45
+ },
+ {
+ "direction": "received",
+ "payload": "{\"type\":\"warnings\",\"data\":[\"./src/helpers/MessageFactory.js\\nModule Warning (from ./node_modules/eslint-loader/dist/cjs.js):\\n\\n \\u001b[1mLine 103:7:\\u001b[22m 'getCookie' is assigned a value but ne...",
+ "timestamp": 1768965342138,
+ "size": 206417
+ }
+ ],
+ "closed": false
+ },
+ {
+ "url": "ws://localhost:3060/",
+ "timestamp": 1768965360168,
+ "isNativeClient": true,
+ "isServerConnection": false,
+ "messages": [
+ {
+ "direction": "sent",
+ "payload": "{\"type\":3,\"id\":0}",
+ "timestamp": 1768965360170,
+ "size": 17
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":{\"jkfrontendchannel\":{\"enums\":{\"JKAppMessage\":{\"AbortRecording\":1001,\"BringVideoWindowToFront\":1004,\"ClientJoinedSession\":1008,\"ClientLeftSession\":1009,\"ClientUpdateStartDownload\":1010,\"Client...",
+ "timestamp": 1768965360269,
+ "size": 11852
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":7,\"object\":\"jkfrontendchannel\",\"signal\":5}",
+ "timestamp": 1768965360269,
+ "size": 50
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":4}",
+ "timestamp": 1768965360269,
+ "size": 10
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":2,\\\"arguments\\\":[],\\\"method\\\":1401}\"],\"id\":1}",
+ "timestamp": 1768965360281,
+ "size": 132
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1401,\\\"method_name\\\":\\\"GetAudioRecordingPreference\\\",\\\"request_id\\\":2,\\\"response\\\":2}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360282,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":1,\"type\":10}",
+ "timestamp": 1768965360282,
+ "size": 30
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":3,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":2}",
+ "timestamp": 1768965360363,
+ "size": 129
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":4,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":3}",
+ "timestamp": 1768965360363,
+ "size": 129
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":5,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":4}",
+ "timestamp": 1768965360363,
+ "size": 129
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":6,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":5}",
+ "timestamp": 1768965360363,
+ "size": 129
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":7,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":6}",
+ "timestamp": 1768965360363,
+ "size": 129
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":8,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":7}",
+ "timestamp": 1768965360363,
+ "size": 129
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":9,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":8}",
+ "timestamp": 1768965360363,
+ "size": 129
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":10,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":9}",
+ "timestamp": 1768965360363,
+ "size": 130
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":3,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360375,
+ "size": 161
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":11,\\\"arguments\\\":[],\\\"method\\\":1151}\"],\"id\":10}",
+ "timestamp": 1768965360375,
+ "size": 134
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":12,\\\"arguments\\\":[\\\"JK.HandleMetronomeCallback2\\\"],\\\"method\\\":1328}\"],\"id\":11}",
+ "timestamp": 1768965360375,
+ "size": 165
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":2,\"type\":10}",
+ "timestamp": 1768965360375,
+ "size": 30
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":4,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360375,
+ "size": 161
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":3,\"type\":10}",
+ "timestamp": 1768965360375,
+ "size": 30
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":5,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360375,
+ "size": 161
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":4,\"type\":10}",
+ "timestamp": 1768965360375,
+ "size": 30
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":6,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360375,
+ "size": 161
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":5,\"type\":10}",
+ "timestamp": 1768965360375,
+ "size": 30
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":7,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360377,
+ "size": 161
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":6,\"type\":10}",
+ "timestamp": 1768965360377,
+ "size": 30
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":8,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360377,
+ "size": 161
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":7,\"type\":10}",
+ "timestamp": 1768965360377,
+ "size": 30
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":9,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360377,
+ "size": 161
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":8,\"type\":10}",
+ "timestamp": 1768965360377,
+ "size": 30
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":10,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360377,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":9,\"type\":10}",
+ "timestamp": 1768965360377,
+ "size": 30
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":13,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":12}",
+ "timestamp": 1768965360377,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":14,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":13}",
+ "timestamp": 1768965360377,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":15,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":14}",
+ "timestamp": 1768965360377,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":16,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":15}",
+ "timestamp": 1768965360377,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":17,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":16}",
+ "timestamp": 1768965360377,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":18,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":17}",
+ "timestamp": 1768965360377,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":19,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":18}",
+ "timestamp": 1768965360378,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":20,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":19}",
+ "timestamp": 1768965360378,
+ "size": 131
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1151,\\\"method_name\\\":\\\"getOperatingMode\\\",\\\"request_id\\\":11,\\\"response\\\":\\\"client\\\"}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360378,
+ "size": 161
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":21,\\\"arguments\\\":[],\\\"method\\\":1261}\"],\"id\":20}",
+ "timestamp": 1768965360378,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":10,\"type\":10}",
+ "timestamp": 1768965360378,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1328,\\\"method_name\\\":\\\"setMetronomeOpenCallback\\\",\\\"request_id\\\":12,\\\"response\\\":{\\\"process_status\\\":\\\"Success\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360378,
+ "size": 191
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":11,\"type\":10}",
+ "timestamp": 1768965360378,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":13,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360378,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":12,\"type\":10}",
+ "timestamp": 1768965360378,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":14,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360378,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":13,\"type\":10}",
+ "timestamp": 1768965360378,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":15,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360378,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":14,\"type\":10}",
+ "timestamp": 1768965360378,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":16,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360378,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":15,\"type\":10}",
+ "timestamp": 1768965360378,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":17,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360378,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":16,\"type\":10}",
+ "timestamp": 1768965360378,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":18,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360378,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":17,\"type\":10}",
+ "timestamp": 1768965360378,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":19,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360378,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":18,\"type\":10}",
+ "timestamp": 1768965360378,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":20,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360378,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":19,\"type\":10}",
+ "timestamp": 1768965360378,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1261,\\\"method_name\\\":\\\"SessionGetMacHash\\\",\\\"request_id\\\":21,\\\"response\\\":{\\\"1b4d0ddbf9c1d7cd0a311465676d86a5892a36ea\\\":{\\\"ipaddr_0\\\":\\\"fe80::1c92:1083:c1e6:8f02%en0\\\",\\\"ipadd...",
+ "timestamp": 1768965360378,
+ "size": 1714
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":22,\\\"arguments\\\":[],\\\"method\\\":1125}\"],\"id\":21}",
+ "timestamp": 1768965360378,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":20,\"type\":10}",
+ "timestamp": 1768965360378,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1125,\\\"method_name\\\":\\\"GetDetailedOS\\\",\\\"request_id\\\":22,\\\"response\\\":\\\"MacOSX-M\\\"}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360378,
+ "size": 160
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":23,\\\"arguments\\\":[],\\\"method\\\":1203}\"],\"id\":22}",
+ "timestamp": 1768965360378,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":21,\"type\":10}",
+ "timestamp": 1768965360378,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1203,\\\"method_name\\\":\\\"NetworkTestResult\\\",\\\"request_id\\\":23,\\\"response\\\":{\\\"preserve_port\\\":false,\\\"public_ip\\\":\\\"112.134.221.38\\\",\\\"remote_udp_blocked\\\":false,\\\"stun_failed\\...",
+ "timestamp": 1768965360378,
+ "size": 287
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":22,\"type\":10}",
+ "timestamp": 1768965360378,
+ "size": 31
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":24,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":23}",
+ "timestamp": 1768965360495,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":25,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":24}",
+ "timestamp": 1768965360495,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":26,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":25}",
+ "timestamp": 1768965360495,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":27,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":26}",
+ "timestamp": 1768965360495,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":28,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":27}",
+ "timestamp": 1768965360495,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":29,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":28}",
+ "timestamp": 1768965360495,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":30,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":29}",
+ "timestamp": 1768965360495,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":31,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":30}",
+ "timestamp": 1768965360495,
+ "size": 131
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":24,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360495,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":23,\"type\":10}",
+ "timestamp": 1768965360495,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":25,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360495,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":24,\"type\":10}",
+ "timestamp": 1768965360495,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":26,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360495,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":25,\"type\":10}",
+ "timestamp": 1768965360495,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":27,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360495,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":26,\"type\":10}",
+ "timestamp": 1768965360495,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":28,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360495,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":27,\"type\":10}",
+ "timestamp": 1768965360495,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":29,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360495,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":28,\"type\":10}",
+ "timestamp": 1768965360495,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":30,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360495,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":29,\"type\":10}",
+ "timestamp": 1768965360495,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":31,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360495,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":30,\"type\":10}",
+ "timestamp": 1768965360495,
+ "size": 31
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":32,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":31}",
+ "timestamp": 1768965360578,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":33,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":32}",
+ "timestamp": 1768965360578,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":34,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":33}",
+ "timestamp": 1768965360578,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":35,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":34}",
+ "timestamp": 1768965360578,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":36,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":35}",
+ "timestamp": 1768965360578,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":37,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":36}",
+ "timestamp": 1768965360578,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":38,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":37}",
+ "timestamp": 1768965360578,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":39,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":38}",
+ "timestamp": 1768965360578,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":40,\\\"arguments\\\":[{\\\"user_id\\\":\\\"27bd4a30-d1b8-4eea-8454-01a104d59381\\\",\\\"token\\\":\\\"CKXGCTBxfdGG12oXACOEYA\\\",\\\"us...",
+ "timestamp": 1768965360593,
+ "size": 537
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":32,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360593,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":31,\"type\":10}",
+ "timestamp": 1768965360593,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":33,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360593,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":32,\"type\":10}",
+ "timestamp": 1768965360593,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":34,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360593,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":33,\"type\":10}",
+ "timestamp": 1768965360593,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":35,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360593,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":34,\"type\":10}",
+ "timestamp": 1768965360593,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":36,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360593,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":35,\"type\":10}",
+ "timestamp": 1768965360593,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":37,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360593,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":36,\"type\":10}",
+ "timestamp": 1768965360593,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":38,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360593,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":37,\"type\":10}",
+ "timestamp": 1768965360593,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":39,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360593,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":38,\"type\":10}",
+ "timestamp": 1768965360593,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3007,\\\"response\\\":{\\\"message\\\":\\\"Y0dsdVoxOXlaWEY4ZkRZMk9EY3hPVFEzTlh4OE1UVjhmREU2TVRjMk9EazJOVE0yTURvMk5UTTNOVGg4ZkRFek9EQTFNVGd4TmpaOGZERXpPREExTVRneE5qWjhmRTUxZDJGdUlFTm9ZWFI...",
+ "timestamp": 1768965360598,
+ "size": 313
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1205,\\\"method_name\\\":\\\"OnLoggedIn\\\",\\\"request_id\\\":40,\\\"response\\\":{\\\"CustomUrl\\\":\\\"\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360599,
+ "size": 165
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":39,\"type\":10}",
+ "timestamp": 1768965360599,
+ "size": 31
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":41,\\\"arguments\\\":[{\\\"user_id\\\":\\\"27bd4a30-d1b8-4eea-8454-01a104d59381\\\",\\\"token\\\":\\\"CKXGCTBxfdGG12oXACOEYA\\\",\\\"us...",
+ "timestamp": 1768965360620,
+ "size": 537
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3007,\\\"response\\\":{\\\"message\\\":\\\"Y0dsdVoxOXlaWEY4ZkRFeE5ETXhNRGN5T1RsOGZERTFmSHd4T2pFM05qZzVOalV6TmpBNk5qZ3dORFEwZkh3eE5UazJNVFkyTVRVNWZId3hOVGsyTVRZMk1UVTVmSHhPZFhkaGJpQkRhR0Y...",
+ "timestamp": 1768965360621,
+ "size": 313
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1205,\\\"method_name\\\":\\\"OnLoggedIn\\\",\\\"request_id\\\":41,\\\"response\\\":{\\\"CustomUrl\\\":\\\"\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360621,
+ "size": 165
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":40,\"type\":10}",
+ "timestamp": 1768965360621,
+ "size": 31
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":42,\\\"arguments\\\":[],\\\"method\\\":1121}\"],\"id\":41}",
+ "timestamp": 1768965360679,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1121,\\\"method_name\\\":\\\"getClientParentChildRole\\\",\\\"request_id\\\":42,\\\"response\\\":1}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360679,
+ "size": 160
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":43,\\\"arguments\\\":[],\\\"method\\\":1025}\"],\"id\":42}",
+ "timestamp": 1768965360679,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":41,\"type\":10}",
+ "timestamp": 1768965360679,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1025,\\\"method_name\\\":\\\"FTUEGetAllAudioConfigurations\\\",\\\"request_id\\\":43,\\\"response\\\":[\\\"In/Out: Scarlett 2i2 USB\\\",\\\"In: MacBook Pro Microphone, Out: MacBook Pro Speakers\\\",\\...",
+ "timestamp": 1768965360679,
+ "size": 287
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":44,\\\"arguments\\\":[],\\\"method\\\":1149}\"],\"id\":43}",
+ "timestamp": 1768965360679,
+ "size": 134
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":45,\\\"arguments\\\":[],\\\"method\\\":1269}\"],\"id\":44}",
+ "timestamp": 1768965360679,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":42,\"type\":10}",
+ "timestamp": 1768965360679,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1149,\\\"method_name\\\":\\\"GetNetworkTestScore\\\",\\\"request_id\\\":44,\\\"response\\\":0}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360679,
+ "size": 155
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":43,\"type\":10}",
+ "timestamp": 1768965360679,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1269,\\\"method_name\\\":\\\"SessionPageEnter\\\",\\\"request_id\\\":45,\\\"response\\\":{\\\"reason\\\":\\\"already_started\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360679,
+ "size": 183
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":46,\\\"arguments\\\":[true],\\\"method\\\":1256}\"],\"id\":45}",
+ "timestamp": 1768965360680,
+ "size": 138
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":44,\"type\":10}",
+ "timestamp": 1768965360680,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1256,\\\"method_name\\\":\\\"SessionGetAllControlState\\\",\\\"request_id\\\":46,\\\"response\\\":[{\\\"_id\\\":10000,\\\"client_id\\\":\\\"\\\",\\\"group_id\\\":0,\\\"id\\\":\\\"455f2096-e41f-4bd3-9ee6-52d7d26adc...",
+ "timestamp": 1768965360680,
+ "size": 6295
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":47,\\\"arguments\\\":[true],\\\"method\\\":1256}\"],\"id\":46}",
+ "timestamp": 1768965360680,
+ "size": 138
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":45,\"type\":10}",
+ "timestamp": 1768965360680,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1256,\\\"method_name\\\":\\\"SessionGetAllControlState\\\",\\\"request_id\\\":47,\\\"response\\\":[{\\\"_id\\\":10000,\\\"client_id\\\":\\\"\\\",\\\"group_id\\\":0,\\\"id\\\":\\\"455f2096-e41f-4bd3-9ee6-52d7d26adc...",
+ "timestamp": 1768965360681,
+ "size": 6295
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":48,\\\"arguments\\\":[],\\\"method\\\":1198}\"],\"id\":47}",
+ "timestamp": 1768965360681,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":46,\"type\":10}",
+ "timestamp": 1768965360681,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1198,\\\"method_name\\\":\\\"LastUsedProfileName\\\",\\\"request_id\\\":48,\\\"response\\\":\\\"In/Out: Scarlett 2i2 USB\\\"}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360681,
+ "size": 182
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":49,\\\"arguments\\\":[],\\\"method\\\":1198}\"],\"id\":48}",
+ "timestamp": 1768965360682,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":47,\"type\":10}",
+ "timestamp": 1768965360682,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1198,\\\"method_name\\\":\\\"LastUsedProfileName\\\",\\\"request_id\\\":49,\\\"response\\\":\\\"In/Out: Scarlett 2i2 USB\\\"}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360682,
+ "size": 182
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":50,\\\"arguments\\\":[],\\\"method\\\":1044}\"],\"id\":49}",
+ "timestamp": 1768965360682,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":48,\"type\":10}",
+ "timestamp": 1768965360682,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1044,\\\"method_name\\\":\\\"FTUEGetExpectedLatency\\\",\\\"request_id\\\":50,\\\"response\\\":{\\\"latency\\\":11.270833969116211,\\\"latencyknown\\\":true,\\\"latencyvar\\\":1}}\"],\"object\":\"jkfrontendc...",
+ "timestamp": 1768965360683,
+ "size": 228
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":51,\\\"arguments\\\":[],\\\"method\\\":1149}\"],\"id\":50}",
+ "timestamp": 1768965360683,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":49,\"type\":10}",
+ "timestamp": 1768965360683,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1149,\\\"method_name\\\":\\\"GetNetworkTestScore\\\",\\\"request_id\\\":51,\\\"response\\\":0}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360691,
+ "size": 155
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":52,\\\"arguments\\\":[\\\"JK.HandleBridgeCallback2\\\"],\\\"method\\\":1272}\"],\"id\":51}",
+ "timestamp": 1768965360691,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":50,\"type\":10}",
+ "timestamp": 1768965360691,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1272,\\\"method_name\\\":\\\"SessionRegisterCallback\\\",\\\"request_id\\\":52,\\\"response\\\":{\\\"process_status\\\":\\\"Success\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360691,
+ "size": 190
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":53,\\\"arguments\\\":[\\\"JK.HandleAlertCallback\\\"],\\\"method\\\":1277}\"],\"id\":52}",
+ "timestamp": 1768965360691,
+ "size": 160
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":51,\"type\":10}",
+ "timestamp": 1768965360691,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1277,\\\"method_name\\\":\\\"SessionSetAlertCallback\\\",\\\"request_id\\\":53,\\\"response\\\":{\\\"process_status\\\":\\\"Success\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360691,
+ "size": 190
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":54,\\\"arguments\\\":[\\\"JK.HandleRecordingStartResult\\\",\\\"JK.HandleRecordingStopResult\\\",\\\"JK.HandleRecordingStarted\\...",
+ "timestamp": 1768965360691,
+ "size": 290
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":52,\"type\":10}",
+ "timestamp": 1768965360691,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1227,\\\"method_name\\\":\\\"RegisterRecordingCallbacks\\\",\\\"request_id\\\":54,\\\"response\\\":{\\\"process_status\\\":\\\"Success\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360691,
+ "size": 193
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":55,\\\"arguments\\\":[1000],\\\"method\\\":1279}\"],\"id\":54}",
+ "timestamp": 1768965360691,
+ "size": 138
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":53,\"type\":10}",
+ "timestamp": 1768965360691,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1279,\\\"method_name\\\":\\\"SessionSetConnectionStatusRefreshRate\\\",\\\"request_id\\\":55,\\\"response\\\":{\\\"process_status\\\":\\\"Success\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type...",
+ "timestamp": 1768965360691,
+ "size": 204
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":56,\\\"arguments\\\":[],\\\"method\\\":1121}\"],\"id\":55}",
+ "timestamp": 1768965360691,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":54,\"type\":10}",
+ "timestamp": 1768965360691,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1121,\\\"method_name\\\":\\\"getClientParentChildRole\\\",\\\"request_id\\\":56,\\\"response\\\":1}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360691,
+ "size": 160
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":57,\\\"arguments\\\":[],\\\"method\\\":1154}\"],\"id\":56}",
+ "timestamp": 1768965360691,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":55,\"type\":10}",
+ "timestamp": 1768965360691,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1154,\\\"method_name\\\":\\\"getParentClientId\\\",\\\"request_id\\\":57,\\\"response\\\":\\\"\\\"}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360691,
+ "size": 156
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":58,\\\"arguments\\\":[],\\\"method\\\":1044}\"],\"id\":57}",
+ "timestamp": 1768965360692,
+ "size": 134
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":56,\"type\":10}",
+ "timestamp": 1768965360692,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1044,\\\"method_name\\\":\\\"FTUEGetExpectedLatency\\\",\\\"request_id\\\":58,\\\"response\\\":{\\\"latency\\\":11.270833969116211,\\\"latencyknown\\\":true,\\\"latencyvar\\\":1}}\"],\"object\":\"jkfrontendc...",
+ "timestamp": 1768965360695,
+ "size": 228
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":57,\"type\":10}",
+ "timestamp": 1768965360695,
+ "size": 31
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":59,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":58}",
+ "timestamp": 1768965360924,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":60,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":59}",
+ "timestamp": 1768965360924,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":61,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":60}",
+ "timestamp": 1768965360924,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":62,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":61}",
+ "timestamp": 1768965360924,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":63,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":62}",
+ "timestamp": 1768965360924,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":64,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":63}",
+ "timestamp": 1768965360924,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":65,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":64}",
+ "timestamp": 1768965360924,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":66,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":65}",
+ "timestamp": 1768965360924,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":67,\\\"arguments\\\":[true],\\\"method\\\":1256}\"],\"id\":66}",
+ "timestamp": 1768965360929,
+ "size": 138
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":68,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":67}",
+ "timestamp": 1768965360929,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":69,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":68}",
+ "timestamp": 1768965360929,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":70,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":69}",
+ "timestamp": 1768965360929,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":71,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":70}",
+ "timestamp": 1768965360929,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":72,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":71}",
+ "timestamp": 1768965360929,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":73,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":72}",
+ "timestamp": 1768965360929,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":74,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":73}",
+ "timestamp": 1768965360929,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":75,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":74}",
+ "timestamp": 1768965360929,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":76,\\\"arguments\\\":[{\\\"sessionID\\\":\\\"75dd4b54-87a7-4fdf-b92b-42f35f1baca9\\\"}],\\\"method\\\":1197}\"],\"id\":75}",
+ "timestamp": 1768965360929,
+ "size": 190
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":59,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360929,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":58,\"type\":10}",
+ "timestamp": 1768965360929,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":60,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360929,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":59,\"type\":10}",
+ "timestamp": 1768965360929,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":61,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360929,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":60,\"type\":10}",
+ "timestamp": 1768965360929,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":62,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360929,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":61,\"type\":10}",
+ "timestamp": 1768965360929,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":63,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360929,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":62,\"type\":10}",
+ "timestamp": 1768965360929,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":64,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360929,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":63,\"type\":10}",
+ "timestamp": 1768965360929,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":65,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360929,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":64,\"type\":10}",
+ "timestamp": 1768965360929,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":66,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360929,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":65,\"type\":10}",
+ "timestamp": 1768965360929,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1256,\\\"method_name\\\":\\\"SessionGetAllControlState\\\",\\\"request_id\\\":67,\\\"response\\\":[{\\\"_id\\\":10000,\\\"client_id\\\":\\\"\\\",\\\"group_id\\\":0,\\\"id\\\":\\\"455f2096-e41f-4bd3-9ee6-52d7d26adc...",
+ "timestamp": 1768965360929,
+ "size": 6295
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":77,\\\"arguments\\\":[false],\\\"method\\\":1256}\"],\"id\":76}",
+ "timestamp": 1768965360930,
+ "size": 139
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":66,\"type\":10}",
+ "timestamp": 1768965360930,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":68,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360930,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":67,\"type\":10}",
+ "timestamp": 1768965360930,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":69,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360930,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":68,\"type\":10}",
+ "timestamp": 1768965360930,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":70,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360930,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":69,\"type\":10}",
+ "timestamp": 1768965360930,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":71,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360930,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":70,\"type\":10}",
+ "timestamp": 1768965360930,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":72,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360930,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":71,\"type\":10}",
+ "timestamp": 1768965360930,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":73,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360930,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":72,\"type\":10}",
+ "timestamp": 1768965360930,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":74,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360930,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":73,\"type\":10}",
+ "timestamp": 1768965360930,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":75,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360930,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":74,\"type\":10}",
+ "timestamp": 1768965360930,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleAlertCallback(2, \\\\\\\"Mode change\\\\\\\")\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360968,
+ "size": 166
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleAlertCallback(2, \\\\\\\"Local Peer Stream Mixer Mode\\\\\\\")\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360968,
+ "size": 183
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1197,\\\"method_name\\\":\\\"JoinSession\\\",\\\"request_id\\\":76,\\\"response\\\":{\\\"process_status\\\":\\\"Success\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360968,
+ "size": 178
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":75,\"type\":10}",
+ "timestamp": 1768965360973,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"event_id\\\":3006,\\\"response\\\":{\\\"execute_script\\\":\\\"JK.HandleAlertCallback(2, \\\\\\\"RebuildRemoteUserControl\\\\\\\")\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965360974,
+ "size": 179
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":78,\\\"arguments\\\":[true],\\\"method\\\":1256}\"],\"id\":77}",
+ "timestamp": 1768965360974,
+ "size": 138
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1256,\\\"method_name\\\":\\\"SessionGetAllControlState\\\",\\\"request_id\\\":77,\\\"response\\\":[{\\\"_id\\\":10100,\\\"client_id\\\":\\\"\\\",\\\"group_id\\\":1,\\\"id\\\":\\\"e55a9ae1-9905-4df1-8949-e7730411b2...",
+ "timestamp": 1768965360974,
+ "size": 6320
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":79,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":78}",
+ "timestamp": 1768965360988,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":80,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":79}",
+ "timestamp": 1768965360988,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":81,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":80}",
+ "timestamp": 1768965360988,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":82,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":81}",
+ "timestamp": 1768965360988,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":83,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":82}",
+ "timestamp": 1768965360988,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":84,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":83}",
+ "timestamp": 1768965360988,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":85,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":84}",
+ "timestamp": 1768965360988,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":86,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":85}",
+ "timestamp": 1768965360988,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":87,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":86}",
+ "timestamp": 1768965360991,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":88,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":87}",
+ "timestamp": 1768965360991,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":89,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":88}",
+ "timestamp": 1768965360991,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":90,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":89}",
+ "timestamp": 1768965360991,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":91,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":90}",
+ "timestamp": 1768965360991,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":92,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":91}",
+ "timestamp": 1768965360991,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":93,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":92}",
+ "timestamp": 1768965360991,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":94,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":93}",
+ "timestamp": 1768965360991,
+ "size": 131
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":76,\"type\":10}",
+ "timestamp": 1768965360991,
+ "size": 31
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":95,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":94}",
+ "timestamp": 1768965360992,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":96,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":95}",
+ "timestamp": 1768965360992,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":97,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":96}",
+ "timestamp": 1768965360992,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":98,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":97}",
+ "timestamp": 1768965360992,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":99,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":98}",
+ "timestamp": 1768965360992,
+ "size": 131
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":100,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":99}",
+ "timestamp": 1768965360992,
+ "size": 132
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":101,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":100}",
+ "timestamp": 1768965360992,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":102,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":101}",
+ "timestamp": 1768965360992,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":103,\\\"arguments\\\":[],\\\"method\\\":1385}\"],\"id\":102}",
+ "timestamp": 1768965360992,
+ "size": 136
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1256,\\\"method_name\\\":\\\"SessionGetAllControlState\\\",\\\"request_id\\\":34,\\\"response\\\":[{\\\"_id\\\":10000,\\\"client_id\\\":\\\"\\\",\\\"group_id\\\":0,\\\"id\\\":\\\"455f2096-e41f-4bd3-9ee6-52d7d26adc...",
+ "timestamp": 1768965360993,
+ "size": 6295
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1256,\\\"method_name\\\":\\\"SessionGetAllControlState\\\",\\\"request_id\\\":78,\\\"response\\\":[{\\\"_id\\\":10000,\\\"client_id\\\":\\\"\\\",\\\"group_id\\\":0,\\\"id\\\":\\\"455f2096-e41f-4bd3-9ee6-52d7d26adc...",
+ "timestamp": 1768965360995,
+ "size": 6295
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":77,\"type\":10}",
+ "timestamp": 1768965361003,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":79,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361003,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":78,\"type\":10}",
+ "timestamp": 1768965361003,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":80,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361003,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":79,\"type\":10}",
+ "timestamp": 1768965361003,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":81,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361003,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":80,\"type\":10}",
+ "timestamp": 1768965361003,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":82,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361003,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":81,\"type\":10}",
+ "timestamp": 1768965361003,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":83,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361003,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":82,\"type\":10}",
+ "timestamp": 1768965361003,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":84,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361003,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":83,\"type\":10}",
+ "timestamp": 1768965361003,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":85,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361003,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":84,\"type\":10}",
+ "timestamp": 1768965361003,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":86,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361003,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":85,\"type\":10}",
+ "timestamp": 1768965361003,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":87,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361004,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":86,\"type\":10}",
+ "timestamp": 1768965361004,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":88,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361004,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":87,\"type\":10}",
+ "timestamp": 1768965361004,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":89,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361004,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":88,\"type\":10}",
+ "timestamp": 1768965361004,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":90,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361004,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":89,\"type\":10}",
+ "timestamp": 1768965361004,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":91,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361004,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":90,\"type\":10}",
+ "timestamp": 1768965361004,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":92,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361004,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":91,\"type\":10}",
+ "timestamp": 1768965361004,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":93,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361004,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":92,\"type\":10}",
+ "timestamp": 1768965361004,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":94,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361004,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":93,\"type\":10}",
+ "timestamp": 1768965361004,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":95,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361004,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":94,\"type\":10}",
+ "timestamp": 1768965361004,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":96,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361004,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":95,\"type\":10}",
+ "timestamp": 1768965361004,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":97,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361004,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":96,\"type\":10}",
+ "timestamp": 1768965361004,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":98,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361004,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":97,\"type\":10}",
+ "timestamp": 1768965361004,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":99,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361004,
+ "size": 162
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":98,\"type\":10}",
+ "timestamp": 1768965361004,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":100,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361004,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":99,\"type\":10}",
+ "timestamp": 1768965361004,
+ "size": 31
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":101,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361004,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":100,\"type\":10}",
+ "timestamp": 1768965361004,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":102,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361004,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":101,\"type\":10}",
+ "timestamp": 1768965361004,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1385,\\\"method_name\\\":\\\"VSTListTrackAssignments\\\",\\\"request_id\\\":103,\\\"response\\\":{\\\"vsts\\\":[]}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361004,
+ "size": 172
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":102,\"type\":10}",
+ "timestamp": 1768965361004,
+ "size": 32
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":104,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":103}",
+ "timestamp": 1768965361052,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":105,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":104}",
+ "timestamp": 1768965361052,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":106,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":105}",
+ "timestamp": 1768965361052,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":107,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":106}",
+ "timestamp": 1768965361052,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":108,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":107}",
+ "timestamp": 1768965361052,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":109,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":108}",
+ "timestamp": 1768965361052,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":110,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":109}",
+ "timestamp": 1768965361052,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":111,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":110}",
+ "timestamp": 1768965361052,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":112,\\\"arguments\\\":[],\\\"method\\\":1385}\"],\"id\":111}",
+ "timestamp": 1768965361064,
+ "size": 136
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":113,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":112}",
+ "timestamp": 1768965361064,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":114,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":113}",
+ "timestamp": 1768965361064,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":115,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":114}",
+ "timestamp": 1768965361064,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":116,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":115}",
+ "timestamp": 1768965361064,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":117,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":116}",
+ "timestamp": 1768965361064,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":118,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":117}",
+ "timestamp": 1768965361064,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":119,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":118}",
+ "timestamp": 1768965361064,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":120,\\\"arguments\\\":[\\\"jamClient\\\"]}\"],\"id\":119}",
+ "timestamp": 1768965361064,
+ "size": 133
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":121,\\\"arguments\\\":[],\\\"method\\\":1385}\"],\"id\":120}",
+ "timestamp": 1768965361065,
+ "size": 136
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":104,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361075,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":103,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":105,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361076,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":104,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":106,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361076,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":105,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":107,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361076,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":106,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":108,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361076,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":107,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":109,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361076,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":108,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":110,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361076,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":109,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":111,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361076,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":110,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1385,\\\"method_name\\\":\\\"VSTListTrackAssignments\\\",\\\"request_id\\\":112,\\\"response\\\":{\\\"vsts\\\":[]}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361076,
+ "size": 172
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":111,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":113,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361076,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":112,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":114,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361076,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":113,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":115,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361076,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":114,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":116,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361076,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":115,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":117,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361076,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":116,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":118,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361076,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":117,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":119,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361076,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":118,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":0,\\\"method_name\\\":\\\"\\\",\\\"request_id\\\":120,\\\"response\\\":{\\\"0\\\":\\\"Not a valid method\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361076,
+ "size": 163
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":119,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1385,\\\"method_name\\\":\\\"VSTListTrackAssignments\\\",\\\"request_id\\\":121,\\\"response\\\":{\\\"vsts\\\":[]}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965361076,
+ "size": 172
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":120,\"type\":10}",
+ "timestamp": 1768965361076,
+ "size": 32
+ },
+ {
+ "direction": "sent",
+ "payload": "{\"type\":6,\"object\":\"jkfrontendchannel\",\"method\":\"receiveText\",\"args\":[\"{\\\"request_id\\\":122,\\\"arguments\\\":[],\\\"method\\\":1207}\"],\"id\":121}",
+ "timestamp": 1768965362039,
+ "size": 136
+ },
+ {
+ "direction": "received",
+ "payload": "{\"args\":[\"{\\\"method_id\\\":1207,\\\"method_name\\\":\\\"OnLoggedOut\\\",\\\"request_id\\\":122,\\\"response\\\":{\\\"process_status\\\":\\\"Success\\\"}}\"],\"object\":\"jkfrontendchannel\",\"signal\":5,\"type\":1}",
+ "timestamp": 1768965362039,
+ "size": 179
+ },
+ {
+ "direction": "received",
+ "payload": "{\"data\":null,\"id\":121,\"type\":10}",
+ "timestamp": 1768965362039,
+ "size": 32
+ }
+ ],
+ "closed": false
+ },
+ {
+ "url": "ws://localhost:6767/?channel_id=3c27dd42-1dd1-4d2f-e9f3-7092f347b244&token=CKXGCTBxfdGG12oXACOEYA&client_type=client&client_id=6cb293d8-1026-418f-9d4d-b240a3efa197&machine=1b4d0ddbf9c1d7cd0a311465676d86a5892a36ea&os=MacOSX-M&product=JamClientModern&udp_reachable=false",
+ "timestamp": 1768965360378,
+ "isNativeClient": false,
+ "isServerConnection": false,
+ "messages": [
+ {
+ "direction": "sent",
+ "payload": "{\"type\":\"LOGIN\",\"route_to\":\"server\",\"login\":{\"token\":\"CKXGCTBxfdGG12oXACOEYA\",\"client_id\":\"6cb293d8-1026-418f-9d4d-b240a3efa197\",\"client_type\":\"browser\"}}",
+ "timestamp": 1768965360585,
+ "size": 154
+ },
+ {
+ "direction": "received",
+ "payload": "{\"type\":\"LOGIN_ACK\",\"route_to\":\"client\",\"login_ack\":{\"public_ip\":\"127.0.0.1\",\"client_id\":\"6cb293d8-1026-418f-9d4d-b240a3efa197\",\"token\":\"CKXGCTBxfdGG12oXACOEYA\",\"heartbeat_interval\":20,\"reconnected\":f...",
+ "timestamp": 1768965360585,
+ "size": 565
+ },
+ {
+ "direction": "received",
+ "payload": "{\"type\":\"LOGIN_ACK\",\"route_to\":\"client\",\"login_ack\":{\"public_ip\":\"127.0.0.1\",\"client_id\":\"6cb293d8-1026-418f-9d4d-b240a3efa197\",\"token\":\"CKXGCTBxfdGG12oXACOEYA\",\"heartbeat_interval\":20,\"reconnected\":f...",
+ "timestamp": 1768965360619,
+ "size": 565
+ },
+ {
+ "direction": "received",
+ "payload": "{\"type\":\"SESSION_JOIN\",\"route_to\":\"user:27bd4a30-d1b8-4eea-8454-01a104d59381\",\"session_join\":{\"session_id\":\"75dd4b54-87a7-4fdf-b92b-42f35f1baca9\",\"msg\":\"Nuwan Chaturanga has joined the session.\",\"trac...",
+ "timestamp": 1768965360814,
+ "size": 329
+ }
+ ],
+ "closed": false
+ }
+]
\ No newline at end of file
diff --git a/jam-ui/test/utils/api-interceptor.ts b/jam-ui/test/utils/api-interceptor.ts
new file mode 100644
index 000000000..a6a686bfd
--- /dev/null
+++ b/jam-ui/test/utils/api-interceptor.ts
@@ -0,0 +1,166 @@
+import { Page, Request, Response } from '@playwright/test';
+
+export interface APICall {
+ method: string;
+ url: string;
+ pathname: string;
+ timestamp: number;
+ requestHeaders?: Record;
+ requestBody?: any;
+ responseStatus?: number;
+ responseHeaders?: Record;
+ responseBody?: any;
+ duration?: number;
+}
+
+export class APIInterceptor {
+ private calls: APICall[] = [];
+ private pendingRequests: Map = new Map();
+
+ /**
+ * Start intercepting API calls on the given page
+ */
+ intercept(page: Page) {
+ page.on('request', (request: Request) => {
+ this.recordRequest(request);
+ });
+
+ page.on('response', async (response: Response) => {
+ await this.recordResponse(response);
+ });
+ }
+
+ /**
+ * Record an API request
+ */
+ private recordRequest(request: Request) {
+ const url = request.url();
+
+ // Only capture API calls
+ if (!url.includes('/api/')) {
+ return;
+ }
+
+ const parsedUrl = new URL(url);
+ const call: APICall = {
+ method: request.method(),
+ url: url,
+ pathname: parsedUrl.pathname,
+ timestamp: Date.now(),
+ requestHeaders: request.headers(),
+ };
+
+ // Try to capture request body
+ try {
+ const postData = request.postData();
+ if (postData) {
+ try {
+ call.requestBody = JSON.parse(postData);
+ } catch {
+ call.requestBody = postData;
+ }
+ }
+ } catch {
+ // Ignore if we can't get post data
+ }
+
+ // Store as pending until we get the response
+ this.pendingRequests.set(url, call);
+ }
+
+ /**
+ * Record an API response and merge with request data
+ */
+ private async recordResponse(response: Response) {
+ const url = response.url();
+
+ // Only capture API calls
+ if (!url.includes('/api/')) {
+ return;
+ }
+
+ const pendingCall = this.pendingRequests.get(url);
+
+ if (pendingCall) {
+ // Calculate duration
+ pendingCall.duration = Date.now() - pendingCall.timestamp;
+ pendingCall.responseStatus = response.status();
+ pendingCall.responseHeaders = response.headers();
+
+ // Try to capture response body
+ try {
+ const contentType = response.headers()['content-type'] || '';
+ if (contentType.includes('application/json')) {
+ pendingCall.responseBody = await response.json();
+ }
+ } catch {
+ // Ignore if we can't parse response
+ }
+
+ this.calls.push(pendingCall);
+ this.pendingRequests.delete(url);
+ } else {
+ // Response without matching request - create minimal record
+ const parsedUrl = new URL(url);
+ this.calls.push({
+ method: 'UNKNOWN',
+ url: url,
+ pathname: parsedUrl.pathname,
+ timestamp: Date.now(),
+ responseStatus: response.status(),
+ responseHeaders: response.headers(),
+ });
+ }
+ }
+
+ /**
+ * Get all captured API calls
+ */
+ getCalls(): APICall[] {
+ return this.calls;
+ }
+
+ /**
+ * Get calls filtered by method
+ */
+ getCallsByMethod(method: string): APICall[] {
+ return this.calls.filter(call => call.method === method);
+ }
+
+ /**
+ * Get calls filtered by pathname pattern
+ */
+ getCallsByPath(pattern: string | RegExp): APICall[] {
+ if (typeof pattern === 'string') {
+ return this.calls.filter(call => call.pathname.includes(pattern));
+ } else {
+ return this.calls.filter(call => pattern.test(call.pathname));
+ }
+ }
+
+ /**
+ * Get unique endpoints called
+ */
+ getUniqueEndpoints(): string[] {
+ const endpoints = new Set();
+ for (const call of this.calls) {
+ endpoints.add(`${call.method} ${call.pathname}`);
+ }
+ return Array.from(endpoints);
+ }
+
+ /**
+ * Reset the interceptor
+ */
+ reset() {
+ this.calls = [];
+ this.pendingRequests.clear();
+ }
+
+ /**
+ * Export calls to JSON
+ */
+ toJSON(): string {
+ return JSON.stringify(this.calls, null, 2);
+ }
+}
diff --git a/jam-ui/test/utils/sequence-comparator.ts b/jam-ui/test/utils/sequence-comparator.ts
new file mode 100644
index 000000000..740af5aba
--- /dev/null
+++ b/jam-ui/test/utils/sequence-comparator.ts
@@ -0,0 +1,293 @@
+import { APICall } from './api-interceptor';
+
+export interface ComparisonResult {
+ matches: boolean;
+ totalCalls: number;
+ matchedCalls: number;
+ missingCalls: EndpointMismatch[];
+ extraCalls: EndpointMismatch[];
+ outOfOrderCalls: OrderMismatch[];
+ timingVariances: TimingVariance[];
+ report: string;
+}
+
+export interface EndpointMismatch {
+ endpoint: string;
+ expectedCount: number;
+ actualCount: number;
+}
+
+export interface OrderMismatch {
+ endpoint: string;
+ expectedPosition: number;
+ actualPosition: number;
+ deviation: number;
+}
+
+export interface TimingVariance {
+ endpoint: string;
+ expectedTiming: number;
+ actualTiming: number;
+ variance: number;
+}
+
+/**
+ * Compare two API call sequences
+ */
+export function compareAPISequences(
+ actual: APICall[],
+ expected: APICall[]
+): ComparisonResult {
+ const missing: EndpointMismatch[] = [];
+ const extra: EndpointMismatch[] = [];
+ const outOfOrder: OrderMismatch[] = [];
+ const timingVariances: TimingVariance[] = [];
+
+ // Build endpoint maps
+ const actualEndpoints = buildEndpointMap(actual);
+ const expectedEndpoints = buildEndpointMap(expected);
+
+ // Find missing calls (in expected but not in actual)
+ for (const [endpoint, expectedCalls] of expectedEndpoints.entries()) {
+ const actualCalls = actualEndpoints.get(endpoint) || [];
+ if (actualCalls.length === 0) {
+ missing.push({
+ endpoint,
+ expectedCount: expectedCalls.length,
+ actualCount: 0,
+ });
+ } else if (actualCalls.length < expectedCalls.length) {
+ missing.push({
+ endpoint,
+ expectedCount: expectedCalls.length,
+ actualCount: actualCalls.length,
+ });
+ }
+ }
+
+ // Find extra calls (in actual but not in expected)
+ for (const [endpoint, actualCalls] of actualEndpoints.entries()) {
+ const expectedCalls = expectedEndpoints.get(endpoint) || [];
+ if (expectedCalls.length === 0) {
+ extra.push({
+ endpoint,
+ expectedCount: 0,
+ actualCount: actualCalls.length,
+ });
+ } else if (actualCalls.length > expectedCalls.length) {
+ extra.push({
+ endpoint,
+ expectedCount: expectedCalls.length,
+ actualCount: actualCalls.length,
+ });
+ }
+ }
+
+ // Check order
+ const orderMismatches = checkOrder(actual, expected);
+ outOfOrder.push(...orderMismatches);
+
+ // Check timing
+ const timings = checkTimingVariance(actual, expected);
+ timingVariances.push(...timings);
+
+ // Calculate match percentage
+ const totalExpected = expected.length;
+ const matched = totalExpected - missing.reduce((sum, m) => sum + (m.expectedCount - m.actualCount), 0);
+ const matchPercentage = totalExpected > 0 ? (matched / totalExpected) * 100 : 0;
+
+ // Generate report
+ const report = generateReport({
+ matches: matchPercentage >= 95,
+ totalCalls: actual.length,
+ matchedCalls: matched,
+ missingCalls: missing,
+ extraCalls: extra,
+ outOfOrderCalls: outOfOrder,
+ timingVariances: timingVariances,
+ report: '',
+ });
+
+ return {
+ matches: matchPercentage >= 95,
+ totalCalls: actual.length,
+ matchedCalls: matched,
+ missingCalls: missing,
+ extraCalls: extra,
+ outOfOrderCalls: outOfOrder,
+ timingVariances: timingVariances,
+ report,
+ };
+}
+
+/**
+ * Build a map of endpoint -> calls
+ */
+function buildEndpointMap(calls: APICall[]): Map {
+ const map = new Map();
+ for (const call of calls) {
+ const endpoint = `${call.method} ${call.pathname}`;
+ if (!map.has(endpoint)) {
+ map.set(endpoint, []);
+ }
+ map.get(endpoint)!.push(call);
+ }
+ return map;
+}
+
+/**
+ * Check if calls are in the same order
+ */
+function checkOrder(actual: APICall[], expected: APICall[]): OrderMismatch[] {
+ const mismatches: OrderMismatch[] = [];
+
+ // Create a sequence of endpoints for both
+ const actualSequence = actual.map(c => `${c.method} ${c.pathname}`);
+ const expectedSequence = expected.map(c => `${c.method} ${c.pathname}`);
+
+ // For each expected endpoint, find its position in actual
+ for (let i = 0; i < expectedSequence.length; i++) {
+ const endpoint = expectedSequence[i];
+ const actualIndex = actualSequence.indexOf(endpoint);
+
+ if (actualIndex !== -1) {
+ const deviation = Math.abs(actualIndex - i);
+ // Only report if deviation is significant (more than 3 positions)
+ if (deviation > 3) {
+ mismatches.push({
+ endpoint,
+ expectedPosition: i,
+ actualPosition: actualIndex,
+ deviation,
+ });
+ }
+ }
+ }
+
+ return mismatches;
+}
+
+/**
+ * Check timing variance between calls
+ */
+function checkTimingVariance(actual: APICall[], expected: APICall[]): TimingVariance[] {
+ const variances: TimingVariance[] = [];
+
+ if (actual.length === 0 || expected.length === 0) {
+ return variances;
+ }
+
+ // Calculate relative timings (time from first call)
+ const actualStartTime = actual[0].timestamp;
+ const expectedStartTime = expected[0].timestamp;
+
+ const actualTimings = new Map();
+ const expectedTimings = new Map();
+
+ for (const call of actual) {
+ const endpoint = `${call.method} ${call.pathname}`;
+ const relativeTime = call.timestamp - actualStartTime;
+ if (!actualTimings.has(endpoint)) {
+ actualTimings.set(endpoint, []);
+ }
+ actualTimings.get(endpoint)!.push(relativeTime);
+ }
+
+ for (const call of expected) {
+ const endpoint = `${call.method} ${call.pathname}`;
+ const relativeTime = call.timestamp - expectedStartTime;
+ if (!expectedTimings.has(endpoint)) {
+ expectedTimings.set(endpoint, []);
+ }
+ expectedTimings.get(endpoint)!.push(relativeTime);
+ }
+
+ // Compare average timings
+ for (const [endpoint, expectedTimes] of expectedTimings.entries()) {
+ const actualTimes = actualTimings.get(endpoint);
+ if (actualTimes && actualTimes.length > 0) {
+ const avgExpected = expectedTimes.reduce((a, b) => a + b, 0) / expectedTimes.length;
+ const avgActual = actualTimes.reduce((a, b) => a + b, 0) / actualTimes.length;
+ const variance = Math.abs(avgActual - avgExpected);
+
+ // Only report if variance is significant (more than 500ms)
+ if (variance > 500) {
+ variances.push({
+ endpoint,
+ expectedTiming: avgExpected,
+ actualTiming: avgActual,
+ variance,
+ });
+ }
+ }
+ }
+
+ return variances;
+}
+
+/**
+ * Generate a human-readable comparison report
+ */
+function generateReport(result: ComparisonResult): string {
+ let report = '# API Sequence Comparison Report\n\n';
+
+ report += `## Summary\n\n`;
+ report += `- **Match Status:** ${result.matches ? 'ā
PASS' : 'ā FAIL'}\n`;
+ report += `- **Total Calls:** ${result.totalCalls}\n`;
+ report += `- **Matched Calls:** ${result.matchedCalls}\n`;
+ report += `- **Match Percentage:** ${((result.matchedCalls / result.totalCalls) * 100).toFixed(1)}%\n\n`;
+
+ if (result.missingCalls.length > 0) {
+ report += `## ā Missing API Calls\n\n`;
+ report += `The following expected API calls are missing or called fewer times:\n\n`;
+ for (const missing of result.missingCalls) {
+ report += `- **${missing.endpoint}**\n`;
+ report += ` - Expected: ${missing.expectedCount} call(s)\n`;
+ report += ` - Actual: ${missing.actualCount} call(s)\n`;
+ report += ` - Missing: ${missing.expectedCount - missing.actualCount} call(s)\n\n`;
+ }
+ }
+
+ if (result.extraCalls.length > 0) {
+ report += `## ā ļø Extra API Calls\n\n`;
+ report += `The following API calls were made but not expected:\n\n`;
+ for (const extra of result.extraCalls) {
+ report += `- **${extra.endpoint}**\n`;
+ report += ` - Expected: ${extra.expectedCount} call(s)\n`;
+ report += ` - Actual: ${extra.actualCount} call(s)\n`;
+ report += ` - Extra: ${extra.actualCount - extra.expectedCount} call(s)\n\n`;
+ }
+ }
+
+ if (result.outOfOrderCalls.length > 0) {
+ report += `## ā ļø Out of Order Calls\n\n`;
+ report += `The following API calls occurred in a different order:\n\n`;
+ for (const order of result.outOfOrderCalls) {
+ report += `- **${order.endpoint}**\n`;
+ report += ` - Expected position: ${order.expectedPosition}\n`;
+ report += ` - Actual position: ${order.actualPosition}\n`;
+ report += ` - Deviation: ${order.deviation} positions\n\n`;
+ }
+ }
+
+ if (result.timingVariances.length > 0) {
+ report += `## ā±ļø Timing Variances\n\n`;
+ report += `The following API calls have significant timing differences:\n\n`;
+ for (const timing of result.timingVariances) {
+ report += `- **${timing.endpoint}**\n`;
+ report += ` - Expected timing: ${timing.expectedTiming.toFixed(0)}ms\n`;
+ report += ` - Actual timing: ${timing.actualTiming.toFixed(0)}ms\n`;
+ report += ` - Variance: ${timing.variance.toFixed(0)}ms\n\n`;
+ }
+ }
+
+ if (result.matches) {
+ report += `## ā
Conclusion\n\n`;
+ report += `The API sequence matches the expected baseline with acceptable variance.\n`;
+ } else {
+ report += `## ā Conclusion\n\n`;
+ report += `The API sequence does NOT match the expected baseline. Please review the mismatches above.\n`;
+ }
+
+ return report;
+}
diff --git a/jam-ui/test/utils/test-helpers.ts b/jam-ui/test/utils/test-helpers.ts
new file mode 100644
index 000000000..031030282
--- /dev/null
+++ b/jam-ui/test/utils/test-helpers.ts
@@ -0,0 +1,387 @@
+import { Page, expect } from '@playwright/test';
+
+export interface LoginCredentials {
+ email: string;
+ password: string;
+}
+
+export interface SessionFormData {
+ sessionName?: string;
+ sessionType?: 'private' | 'public' | 'friends';
+ description?: string;
+}
+
+/**
+ * Login to jam-ui application
+ */
+export async function loginToJamUI(
+ page: Page,
+ credentials: LoginCredentials = {
+ email: 'nuwan@jamkazam.com',
+ password: 'jam123',
+ }
+): Promise {
+ await page.goto('http://beta.jamkazam.local:4000/');
+
+ // Wait for login form to be visible
+ await page.waitForSelector('input[name="email"], input[type="email"], #email', {
+ timeout: 10000,
+ });
+
+ // Fill in credentials - try multiple selectors
+ const emailSelectors = ['input[name="email"]', 'input[type="email"]', '#email', '[placeholder*="email" i]'];
+ for (const selector of emailSelectors) {
+ try {
+ const element = await page.$(selector);
+ if (element) {
+ await page.fill(selector, credentials.email);
+ break;
+ }
+ } catch {
+ continue;
+ }
+ }
+
+ const passwordSelectors = ['input[name="password"]', 'input[type="password"]', '#password'];
+ for (const selector of passwordSelectors) {
+ try {
+ const element = await page.$(selector);
+ if (element) {
+ await page.fill(selector, credentials.password);
+ break;
+ }
+ } catch {
+ continue;
+ }
+ }
+
+ // Submit form
+ const submitSelectors = [
+ 'button[type="submit"]',
+ 'input[type="submit"]',
+ 'button:has-text("Sign In")',
+ 'button:has-text("Login")',
+ ];
+ for (const selector of submitSelectors) {
+ try {
+ const element = await page.$(selector);
+ if (element) {
+ await page.click(selector);
+ break;
+ }
+ } catch {
+ continue;
+ }
+ }
+
+ // Wait for navigation after login
+ await page.waitForLoadState('networkidle', { timeout: 15000 }).catch(() => {});
+ await page.waitForTimeout(2000);
+}
+
+/**
+ * Navigate to session creation page
+ */
+export async function navigateToSessionCreation(page: Page): Promise {
+ // Try multiple selectors for the create session link
+ const createSessionSelectors = [
+ 'text=create session',
+ 'text=Create Session',
+ 'a:has-text("create session")',
+ 'a:has-text("Create Session")',
+ '[href*="session"][href*="create"]',
+ '[data-testid="create-session"]',
+ ];
+
+ let clicked = false;
+ for (const selector of createSessionSelectors) {
+ try {
+ const element = await page.$(selector);
+ if (element) {
+ await page.click(selector);
+ clicked = true;
+ break;
+ }
+ } catch {
+ continue;
+ }
+ }
+
+ if (!clicked) {
+ throw new Error('Could not find "Create Session" link');
+ }
+
+ await page.waitForLoadState('networkidle', { timeout: 10000 }).catch(() => {});
+ await page.waitForTimeout(1000);
+}
+
+/**
+ * Fill and submit session creation form (jam-ui uses form-based creation)
+ */
+export async function fillSessionForm(page: Page, formData: SessionFormData = {}): Promise {
+ const {
+ sessionName = 'Test Session ' + Date.now(),
+ sessionType = 'private',
+ description = 'Automated test session',
+ } = formData;
+
+ console.log('Filling session creation form...');
+
+ // Wait for form to be visible
+ await page.waitForTimeout(1000);
+
+ // Fill session name - try multiple selectors
+ const nameSelectors = [
+ 'input[name="session_name"]',
+ 'input[name="name"]',
+ 'input[name="sessionName"]',
+ '#session_name',
+ '#name',
+ '#sessionName',
+ 'input[placeholder*="name" i]',
+ ];
+
+ let nameFilled = false;
+ for (const selector of nameSelectors) {
+ try {
+ const element = await page.$(selector);
+ if (element && await element.isVisible()) {
+ await page.fill(selector, sessionName);
+ console.log(` Filled session name using: ${selector}`);
+ nameFilled = true;
+ break;
+ }
+ } catch {
+ continue;
+ }
+ }
+
+ if (!nameFilled) {
+ console.log(' Warning: Could not find session name field');
+ }
+
+ // Select session type if there's a dropdown
+ const typeSelectors = [
+ 'select[name="session_type"]',
+ 'select[name="type"]',
+ 'select[name="sessionType"]',
+ '#session_type',
+ '#type',
+ '#sessionType',
+ ];
+
+ for (const selector of typeSelectors) {
+ try {
+ const element = await page.$(selector);
+ if (element && await element.isVisible()) {
+ await page.selectOption(selector, sessionType);
+ console.log(` Selected session type: ${sessionType}`);
+ break;
+ }
+ } catch {
+ continue;
+ }
+ }
+
+ // Try clicking radio buttons for session type
+ const radioSelectors = [
+ `input[type="radio"][value="${sessionType}"]`,
+ `input[type="radio"][id*="${sessionType}" i]`,
+ `label:has-text("${sessionType}") input[type="radio"]`,
+ ];
+
+ for (const selector of radioSelectors) {
+ try {
+ const element = await page.$(selector);
+ if (element && await element.isVisible()) {
+ await page.click(selector);
+ console.log(` Clicked radio for: ${sessionType}`);
+ break;
+ }
+ } catch {
+ continue;
+ }
+ }
+
+ // Fill description if field exists
+ const descSelectors = [
+ 'textarea[name="description"]',
+ 'input[name="description"]',
+ 'textarea[name="notes"]',
+ '#description',
+ '#notes',
+ ];
+
+ for (const selector of descSelectors) {
+ try {
+ const element = await page.$(selector);
+ if (element && await element.isVisible()) {
+ await page.fill(selector, description);
+ console.log(` Filled description`);
+ break;
+ }
+ } catch {
+ continue;
+ }
+ }
+
+ await page.waitForTimeout(500);
+
+ // Submit form
+ console.log('Submitting form...');
+ const submitSelectors = [
+ 'button[type="submit"]',
+ 'input[type="submit"]',
+ 'button:has-text("Create Session")',
+ 'button:has-text("Create")',
+ 'button:has-text("Submit")',
+ 'button:has-text("Start Session")',
+ ];
+
+ let submitted = false;
+ for (const selector of submitSelectors) {
+ try {
+ const element = await page.$(selector);
+ if (element && await element.isVisible()) {
+ await page.click(selector);
+ console.log(` Clicked submit button: ${selector}`);
+ submitted = true;
+ break;
+ }
+ } catch {
+ continue;
+ }
+ }
+
+ if (!submitted) {
+ throw new Error('Could not find submit button for session creation form');
+ }
+
+ await page.waitForLoadState('networkidle', { timeout: 15000 }).catch(() => {});
+ await page.waitForTimeout(3000);
+
+ console.log('Form submitted, waiting for session to load...');
+}
+
+/**
+ * Create and join session using jam-ui's form-based approach
+ * (jam-ui doesn't have Quick Start buttons - it uses a form)
+ */
+export async function createAndJoinSession(
+ page: Page,
+ sessionData: SessionFormData = {}
+): Promise {
+ console.log('\nCreating session using jam-ui form...');
+
+ // Navigate to Create Session if not already there
+ const currentUrl = page.url();
+ if (!currentUrl.includes('session') || !currentUrl.includes('create')) {
+ console.log('Navigating to Create Session page...');
+ await navigateToSessionCreation(page);
+ }
+
+ // Fill and submit the session creation form
+ await fillSessionForm(page, {
+ sessionType: 'private',
+ ...sessionData,
+ });
+
+ console.log('Session creation complete, should be in session interface now');
+}
+
+/**
+ * Legacy function for compatibility - jam-ui uses form-based creation
+ * @deprecated Use createAndJoinSession instead
+ */
+export async function clickQuickStart(page: Page, type: 'private' | 'public' | 'friends' = 'private'): Promise {
+ console.log('Note: jam-ui uses form-based session creation, not Quick Start buttons');
+ await createAndJoinSession(page, { sessionType: type });
+}
+
+/**
+ * Verify session interface is loaded
+ */
+export async function verifySessionInterfaceLoaded(page: Page): Promise {
+ // Check for key session interface elements
+ const requiredElements = [
+ { name: 'audio inputs', selectors: ['text=audio inputs', 'text=Audio Inputs', '[data-testid="audio-inputs"]'] },
+ { name: 'personal mix', selectors: ['text=personal mix', 'text=Personal Mix', '[data-testid="personal-mix"]'] },
+ { name: 'LEAVE button', selectors: ['text=LEAVE', 'button:has-text("LEAVE")', '[data-testid="leave-button"]'] },
+ ];
+
+ for (const element of requiredElements) {
+ let found = false;
+ for (const selector of element.selectors) {
+ try {
+ const el = await page.$(selector);
+ if (el) {
+ found = true;
+ break;
+ }
+ } catch {
+ continue;
+ }
+ }
+
+ if (!found) {
+ console.warn(`Expected element not found: ${element.name}`);
+ }
+ }
+}
+
+/**
+ * Wait for API calls to settle
+ */
+export async function waitForAPICalls(page: Page, timeout: number = 3000): Promise {
+ await page.waitForLoadState('networkidle', { timeout }).catch(() => {});
+ await page.waitForTimeout(1000);
+}
+
+/**
+ * Dismiss any modals or overlays
+ */
+export async function dismissModals(page: Page): Promise {
+ // Try pressing Escape
+ await page.keyboard.press('Escape');
+ await page.waitForTimeout(500);
+
+ // Try to remove dialog overlays
+ await page.evaluate(() => {
+ const overlays = document.querySelectorAll('.dialog-overlay, .modal-overlay, [role="dialog"]');
+ overlays.forEach(overlay => {
+ (overlay as HTMLElement).remove();
+ });
+ });
+
+ await page.waitForTimeout(500);
+}
+
+/**
+ * Extract session ID from current URL or page content
+ */
+export async function extractSessionId(page: Page): Promise {
+ // Try to extract from URL
+ const url = page.url();
+ const urlMatch = url.match(/session[s]?\/([a-f0-9-]{36})/i);
+ if (urlMatch) {
+ return urlMatch[1];
+ }
+
+ // Try to extract from page content
+ const sessionId = await page.evaluate(() => {
+ // Look for session ID in data attributes
+ const sessionEl = document.querySelector('[data-session-id]');
+ if (sessionEl) {
+ return sessionEl.getAttribute('data-session-id');
+ }
+
+ // Look for session ID in window object
+ if ((window as any).sessionId) {
+ return (window as any).sessionId;
+ }
+
+ return null;
+ });
+
+ return sessionId;
+}
diff --git a/jam-ui/test/utils/websocket-monitor.ts b/jam-ui/test/utils/websocket-monitor.ts
new file mode 100644
index 000000000..79148262a
--- /dev/null
+++ b/jam-ui/test/utils/websocket-monitor.ts
@@ -0,0 +1,179 @@
+import { Page, WebSocket } from '@playwright/test';
+
+export interface WSConnection {
+ url: string;
+ timestamp: number;
+ isNativeClient: boolean;
+ isServerConnection: boolean;
+ messages: WSMessage[];
+ closed: boolean;
+ closedAt?: number;
+}
+
+export interface WSMessage {
+ direction: 'sent' | 'received';
+ payload: string;
+ timestamp: number;
+ size: number;
+}
+
+export class WebSocketMonitor {
+ private connections: WSConnection[] = [];
+ private activeConnections: Map = new Map();
+
+ /**
+ * Start monitoring WebSocket connections on the given page
+ */
+ monitor(page: Page) {
+ page.on('websocket', (ws: WebSocket) => {
+ this.recordConnection(ws);
+ });
+ }
+
+ /**
+ * Record a WebSocket connection and its messages
+ */
+ private recordConnection(ws: WebSocket) {
+ const url = ws.url();
+ const timestamp = Date.now();
+
+ const connection: WSConnection = {
+ url: url,
+ timestamp: timestamp,
+ isNativeClient: url.includes('localhost:3060'),
+ isServerConnection: url.includes('jamkazam.local:6767') || url.includes('jamkazam.com:6767'),
+ messages: [],
+ closed: false,
+ };
+
+ console.log(`[WebSocket Monitor] Connection opened: ${url}`);
+
+ // Listen for sent messages
+ ws.on('framesent', frame => {
+ const payload = frame.payload.toString();
+ const message: WSMessage = {
+ direction: 'sent',
+ payload: payload,
+ timestamp: Date.now(),
+ size: payload.length,
+ };
+ connection.messages.push(message);
+ });
+
+ // Listen for received messages
+ ws.on('framereceived', frame => {
+ const payload = frame.payload.toString();
+ const message: WSMessage = {
+ direction: 'received',
+ payload: payload,
+ timestamp: Date.now(),
+ size: payload.length,
+ };
+ connection.messages.push(message);
+ });
+
+ // Listen for close
+ ws.on('close', () => {
+ connection.closed = true;
+ connection.closedAt = Date.now();
+ console.log(`[WebSocket Monitor] Connection closed: ${url}`);
+ });
+
+ this.connections.push(connection);
+ this.activeConnections.set(url, connection);
+ }
+
+ /**
+ * Get all connections
+ */
+ getConnections(): WSConnection[] {
+ return this.connections;
+ }
+
+ /**
+ * Get active (non-closed) connections
+ */
+ getActiveConnections(): WSConnection[] {
+ return this.connections.filter(conn => !conn.closed);
+ }
+
+ /**
+ * Get native client connection (ws://localhost:3060/)
+ */
+ getNativeClientConnection(): WSConnection | undefined {
+ return this.connections.find(conn => conn.isNativeClient);
+ }
+
+ /**
+ * Get server connection (ws://jamkazam.local:6767/websocket)
+ */
+ getServerConnection(): WSConnection | undefined {
+ return this.connections.find(conn => conn.isServerConnection);
+ }
+
+ /**
+ * Get connection count
+ */
+ getConnectionCount(): number {
+ return this.connections.length;
+ }
+
+ /**
+ * Get total message count across all connections
+ */
+ getTotalMessageCount(): number {
+ return this.connections.reduce((sum, conn) => sum + conn.messages.length, 0);
+ }
+
+ /**
+ * Get messages from a specific connection
+ */
+ getMessagesFromConnection(url: string): WSMessage[] {
+ const conn = this.connections.find(c => c.url === url);
+ return conn ? conn.messages : [];
+ }
+
+ /**
+ * Verify dual WebSocket connections are established
+ */
+ verifyDualConnections(): {
+ hasNativeClient: boolean;
+ hasServerConnection: boolean;
+ bothEstablished: boolean;
+ } {
+ const hasNativeClient = this.getNativeClientConnection() !== undefined;
+ const hasServerConnection = this.getServerConnection() !== undefined;
+
+ return {
+ hasNativeClient,
+ hasServerConnection,
+ bothEstablished: hasNativeClient && hasServerConnection,
+ };
+ }
+
+ /**
+ * Reset the monitor
+ */
+ reset() {
+ this.connections = [];
+ this.activeConnections.clear();
+ }
+
+ /**
+ * Export connections to JSON
+ */
+ toJSON(): string {
+ return JSON.stringify(
+ this.connections.map(conn => ({
+ ...conn,
+ // Truncate messages for readability
+ messages: conn.messages.map(msg => ({
+ ...msg,
+ payload: msg.payload.length > 200 ? msg.payload.substring(0, 200) + '...' : msg.payload,
+ })),
+ })),
+ null,
+ 2
+ );
+ }
+}
diff --git a/jam-ui/test/verify-session-flow-steps.spec.ts b/jam-ui/test/verify-session-flow-steps.spec.ts
new file mode 100644
index 000000000..57dbaee65
--- /dev/null
+++ b/jam-ui/test/verify-session-flow-steps.spec.ts
@@ -0,0 +1,497 @@
+import { chromium } from '@playwright/test';
+import * as fs from 'fs';
+import * as path from 'path';
+
+/**
+ * Detailed step-by-step verification of the session join flow
+ * This script goes through each step individually and captures API calls at each stage
+ */
+
+interface StepCapture {
+ stepNumber: number;
+ stepName: string;
+ apiCalls: any[];
+ wsMessages: any[];
+ screenshots: string[];
+ timestamp: string;
+}
+
+async function verifySessionFlow() {
+ console.log('='.repeat(80));
+ console.log('SESSION FLOW STEP-BY-STEP VERIFICATION');
+ console.log('='.repeat(80));
+ console.log();
+
+ const browser = await chromium.launch({
+ headless: false,
+ slowMo: 800,
+ });
+
+ const testResultsDir = path.join(__dirname, '../test-results/step-verification');
+ if (!fs.existsSync(testResultsDir)) {
+ fs.mkdirSync(testResultsDir, { recursive: true });
+ }
+
+ const context = await browser.newContext({
+ ignoreHTTPSErrors: true,
+ });
+
+ const page = await context.newPage();
+
+ const stepCaptures: StepCapture[] = [];
+ let currentStepApiCalls: any[] = [];
+ let currentStepWsMessages: any[] = [];
+
+ // Listen to all network activity
+ page.on('request', request => {
+ const url = request.url();
+ if (url.includes('/api/')) {
+ currentStepApiCalls.push({
+ type: 'request',
+ method: request.method(),
+ url: url,
+ timestamp: new Date().toISOString(),
+ });
+ console.log(` [API] ${request.method()} ${url}`);
+ }
+ });
+
+ page.on('response', async response => {
+ const url = response.url();
+ if (url.includes('/api/')) {
+ let body = null;
+ try {
+ const contentType = response.headers()['content-type'] || '';
+ if (contentType.includes('application/json')) {
+ body = await response.json();
+ }
+ } catch (e) {
+ // Ignore
+ }
+
+ currentStepApiCalls.push({
+ type: 'response',
+ status: response.status(),
+ url: url,
+ body: body,
+ timestamp: new Date().toISOString(),
+ });
+ }
+ });
+
+ page.on('websocket', ws => {
+ console.log(` [WebSocket] Connected: ${ws.url()}`);
+ currentStepWsMessages.push({
+ event: 'open',
+ url: ws.url(),
+ timestamp: new Date().toISOString(),
+ });
+
+ ws.on('framesent', frame => {
+ currentStepWsMessages.push({
+ event: 'sent',
+ payload: frame.payload.toString().substring(0, 200),
+ timestamp: new Date().toISOString(),
+ });
+ });
+
+ ws.on('framereceived', frame => {
+ currentStepWsMessages.push({
+ event: 'received',
+ payload: frame.payload.toString().substring(0, 200),
+ timestamp: new Date().toISOString(),
+ });
+ });
+ });
+
+ function saveStepCapture(stepNumber: number, stepName: string) {
+ const capture: StepCapture = {
+ stepNumber,
+ stepName,
+ apiCalls: [...currentStepApiCalls],
+ wsMessages: [...currentStepWsMessages],
+ screenshots: [],
+ timestamp: new Date().toISOString(),
+ };
+
+ stepCaptures.push(capture);
+
+ // Save individual step data
+ const stepDir = path.join(testResultsDir, `step-${stepNumber}`);
+ if (!fs.existsSync(stepDir)) {
+ fs.mkdirSync(stepDir, { recursive: true });
+ }
+
+ fs.writeFileSync(
+ path.join(stepDir, 'api-calls.json'),
+ JSON.stringify(currentStepApiCalls, null, 2)
+ );
+
+ fs.writeFileSync(
+ path.join(stepDir, 'ws-messages.json'),
+ JSON.stringify(currentStepWsMessages, null, 2)
+ );
+
+ console.log(` ā Captured ${currentStepApiCalls.length} API calls`);
+ console.log(` ā Captured ${currentStepWsMessages.length} WebSocket messages`);
+
+ // Reset for next step
+ currentStepApiCalls = [];
+ currentStepWsMessages = [];
+ }
+
+ try {
+ // STEP 1: User Authentication
+ console.log('\n' + '='.repeat(80));
+ console.log('STEP 1: USER AUTHENTICATION');
+ console.log('='.repeat(80));
+
+ console.log('Navigating to signin page...');
+ await page.goto('http://www.jamkazam.local:3100/signin', {
+ waitUntil: 'networkidle',
+ timeout: 30000,
+ });
+
+ await page.screenshot({
+ path: path.join(testResultsDir, 'step-1-signin-page.png'),
+ fullPage: true,
+ });
+
+ console.log('Filling in credentials...');
+ await page.fill('input#session_email', 'nuwan@jamkazam.com');
+ await page.fill('input#session_password', 'jam123');
+
+ console.log('Clicking sign in...');
+ await page.click('input[type="submit"]');
+
+ console.log('Waiting for login to complete...');
+ await page.waitForLoadState('networkidle', { timeout: 15000 }).catch(() => {});
+ await page.waitForTimeout(3000);
+
+ await page.screenshot({
+ path: path.join(testResultsDir, 'step-1-after-login.png'),
+ fullPage: true,
+ });
+
+ saveStepCapture(1, 'User Authentication');
+
+ // STEP 2: Dashboard Load
+ console.log('\n' + '='.repeat(80));
+ console.log('STEP 2: DASHBOARD LOAD');
+ console.log('='.repeat(80));
+
+ console.log('Dashboard is loading (WebSocket connection should establish)...');
+ await page.waitForTimeout(5000); // Wait for all dashboard data to load
+
+ await page.screenshot({
+ path: path.join(testResultsDir, 'step-2-dashboard-loaded.png'),
+ fullPage: true,
+ });
+
+ saveStepCapture(2, 'Dashboard Load');
+
+ // STEP 3: Skip Upgrade Modal
+ console.log('\n' + '='.repeat(80));
+ console.log('STEP 3: SKIP UPGRADE MODAL');
+ console.log('='.repeat(80));
+
+ console.log('Pressing Cmd+Shift+0 to dismiss upgrade modal...');
+ await page.keyboard.press('Meta+Shift+Digit0');
+ await page.waitForTimeout(2000);
+
+ // Check if overlay still exists and try to dismiss it
+ const overlay = await page.$('.dialog-overlay');
+ if (overlay) {
+ console.log('Overlay still present, trying to click it or escape...');
+ await page.keyboard.press('Escape');
+ await page.waitForTimeout(1000);
+
+ // If still there, try clicking outside
+ const overlayStill = await page.$('.dialog-overlay');
+ if (overlayStill) {
+ console.log('Trying to force-remove overlay...');
+ await page.evaluate(() => {
+ const overlays = document.querySelectorAll('.dialog-overlay');
+ overlays.forEach(o => o.remove());
+ });
+ await page.waitForTimeout(500);
+ }
+ }
+
+ await page.screenshot({
+ path: path.join(testResultsDir, 'step-3-modal-dismissed.png'),
+ fullPage: true,
+ });
+
+ saveStepCapture(3, 'Skip Upgrade Modal');
+
+ // STEP 4: Navigate to Create Session
+ console.log('\n' + '='.repeat(80));
+ console.log('STEP 4: NAVIGATE TO CREATE SESSION');
+ console.log('='.repeat(80));
+
+ console.log('Looking for Create Session button...');
+
+ // Remove any remaining overlays
+ await page.evaluate(() => {
+ const overlays = document.querySelectorAll('.dialog-overlay');
+ overlays.forEach(o => o.remove());
+ });
+ await page.waitForTimeout(500);
+
+ // Try multiple selectors
+ const createSessionSelectors = [
+ 'text=create session',
+ 'h2:has-text("create session")',
+ '[data-testid="create-session"]',
+ 'button:has-text("Create Session")',
+ 'a:has-text("Create Session")',
+ 'div:has-text("Create Session")',
+ '.tile:has-text("Create Session")',
+ '[title*="Create Session"]',
+ ];
+
+ let sessionClicked = false;
+ for (const selector of createSessionSelectors) {
+ try {
+ const element = await page.$(selector);
+ if (element) {
+ console.log(`Found Create Session using: ${selector}`);
+ // Use force click to bypass any remaining overlays
+ await page.click(selector, { force: true });
+ sessionClicked = true;
+ break;
+ }
+ } catch (e) {
+ console.log(`Selector ${selector} failed: ${e.message}`);
+ continue;
+ }
+ }
+
+ if (!sessionClicked) {
+ console.warn('Could not find "Create Session" button - saving partial results...');
+ }
+
+ await page.waitForLoadState('networkidle', { timeout: 10000 }).catch(() => {});
+ await page.waitForTimeout(2000);
+
+ await page.screenshot({
+ path: path.join(testResultsDir, 'step-4-session-page.png'),
+ fullPage: true,
+ });
+
+ saveStepCapture(4, 'Navigate to Create Session');
+
+ // STEP 5: Create Quick Start Session
+ console.log('\n' + '='.repeat(80));
+ console.log('STEP 5: CREATE QUICK START SESSION');
+ console.log('='.repeat(80));
+
+ console.log('Pressing Ctrl+Shift+0 to enable native client features...');
+ await page.keyboard.press('Control+Shift+Digit0');
+ await page.waitForTimeout(2000);
+
+ await page.screenshot({
+ path: path.join(testResultsDir, 'step-5-before-quickstart.png'),
+ fullPage: true,
+ });
+
+ console.log('Looking for Quick Start button...');
+ const quickStartSelectors = [
+ 'text=QUICK START PRIVATE',
+ 'text=QUICK START PUBLIC',
+ 'text=QUICK START FRIENDS',
+ 'button:has-text("QUICK START")',
+ 'button:has-text("Quick Start")',
+ '[data-testid="quick-start"]',
+ ];
+
+ let quickStartClicked = false;
+ for (const selector of quickStartSelectors) {
+ try {
+ const element = await page.$(selector);
+ if (element) {
+ console.log(`Found Quick Start button using: ${selector}`);
+ await page.click(selector, { force: true });
+ quickStartClicked = true;
+ console.log('Quick Start button clicked!');
+ break;
+ }
+ } catch (e) {
+ console.log(`Selector ${selector} failed: ${e.message}`);
+ continue;
+ }
+ }
+
+ if (!quickStartClicked) {
+ console.warn('Could not find Quick Start button - trying generic button click');
+ // Try to click any button with "QUICK START" text
+ try {
+ await page.evaluate(() => {
+ const buttons = Array.from(document.querySelectorAll('button'));
+ const quickStartBtn = buttons.find(btn => btn.textContent?.includes('QUICK START'));
+ if (quickStartBtn) {
+ (quickStartBtn as HTMLElement).click();
+ return true;
+ }
+ return false;
+ });
+ console.log('Clicked Quick Start via evaluate');
+ quickStartClicked = true;
+ } catch (e) {
+ console.error('Failed to click Quick Start button');
+ }
+ }
+
+ console.log('Waiting for session to initialize...');
+ await page.waitForLoadState('networkidle', { timeout: 10000 }).catch(() => {});
+ await page.waitForTimeout(5000); // Wait for WebSocket messages
+
+ await page.screenshot({
+ path: path.join(testResultsDir, 'step-5-session-joined.png'),
+ fullPage: true,
+ });
+
+ saveStepCapture(5, 'Create Quick Start Session');
+
+ // Generate summary report
+ console.log('\n' + '='.repeat(80));
+ console.log('GENERATING SUMMARY REPORT');
+ console.log('='.repeat(80));
+
+ const report = generateReport(stepCaptures);
+ fs.writeFileSync(path.join(testResultsDir, 'VERIFICATION_REPORT.md'), report);
+ console.log(`ā Report saved to: ${testResultsDir}/VERIFICATION_REPORT.md`);
+
+ // Save complete capture
+ fs.writeFileSync(
+ path.join(testResultsDir, 'complete-capture.json'),
+ JSON.stringify(stepCaptures, null, 2)
+ );
+
+ console.log('\nKeeping browser open for 10 seconds for inspection...');
+ await page.waitForTimeout(10000);
+
+ } catch (error) {
+ console.error('\nā Error during verification:', error);
+ await page.screenshot({
+ path: path.join(testResultsDir, 'error-screenshot.png'),
+ fullPage: true,
+ });
+ throw error;
+ } finally {
+ await context.close();
+ await browser.close();
+ }
+}
+
+function generateReport(stepCaptures: StepCapture[]): string {
+ let report = `# Session Flow Verification Report
+
+**Generated:** ${new Date().toLocaleString()}
+
+## Summary
+
+This report documents the exact API calls and WebSocket messages that occur at each step of the session join flow.
+
+`;
+
+ for (const step of stepCaptures) {
+ const apiRequests = step.apiCalls.filter(c => c.type === 'request');
+ const uniqueEndpoints = new Set(
+ apiRequests.map(c => `${c.method} ${new URL(c.url).pathname}`)
+ );
+
+ report += `
+## Step ${step.stepNumber}: ${step.stepName}
+
+**Timestamp:** ${step.timestamp}
+
+### API Calls Made (${apiRequests.length} requests)
+
+`;
+
+ if (uniqueEndpoints.size > 0) {
+ report += 'Unique endpoints called:\n';
+ for (const endpoint of Array.from(uniqueEndpoints)) {
+ const count = apiRequests.filter(
+ c => `${c.method} ${new URL(c.url).pathname}` === endpoint
+ ).length;
+ report += `- ${endpoint}${count > 1 ? ` (${count} times)` : ''}\n`;
+ }
+ } else {
+ report += 'No API calls made during this step.\n';
+ }
+
+ report += `
+### WebSocket Activity
+
+- Total messages sent/received: ${step.wsMessages.length}
+- WebSocket connection events: ${step.wsMessages.filter(m => m.event === 'open').length}
+
+`;
+
+ report += `
+### Screenshots
+
+- Available at: \`step-${step.stepNumber}/\`
+
+---
+
+`;
+ }
+
+ // Add comparison section
+ report += `
+## Key Findings
+
+### Step-by-Step API Call Summary
+
+`;
+
+ for (const step of stepCaptures) {
+ const apiRequests = step.apiCalls.filter(c => c.type === 'request');
+ report += `**Step ${step.stepNumber} (${step.stepName}):** ${apiRequests.length} API calls\n`;
+ }
+
+ report += `
+
+### WebSocket Message Summary
+
+`;
+
+ for (const step of stepCaptures) {
+ report += `**Step ${step.stepNumber} (${step.stepName}):** ${step.wsMessages.length} messages\n`;
+ }
+
+ report += `
+
+## Recommendations
+
+Based on this verification:
+
+1. Review the API calls at each step to ensure the migration plan accurately reflects them
+2. Pay special attention to Step 5 (Create Quick Start Session) - this is where session creation happens
+3. Verify WebSocket message sequences match between legacy and new implementation
+4. Check if removing the separate "trick browser" step changed any API behavior
+
+## Next Steps
+
+1. Compare this capture with the original capture to identify any differences
+2. Update the migration plan if any discrepancies are found
+3. Use these findings to create more accurate Playwright tests
+`;
+
+ return report;
+}
+
+// Run the verification
+verifySessionFlow()
+ .then(() => {
+ console.log('\nā
Verification completed successfully!');
+ process.exit(0);
+ })
+ .catch(error => {
+ console.error('\nā Verification failed:', error);
+ process.exit(1);
+ });
diff --git a/jam-ui/test/websocket-verification/ws-connection.spec.ts b/jam-ui/test/websocket-verification/ws-connection.spec.ts
new file mode 100644
index 000000000..96cc6b819
--- /dev/null
+++ b/jam-ui/test/websocket-verification/ws-connection.spec.ts
@@ -0,0 +1,174 @@
+import { test, expect } from '@playwright/test';
+import { WebSocketMonitor } from '../utils/websocket-monitor';
+import { loginToJamUI, navigateToSessionCreation, fillSessionForm, waitForAPICalls } from '../utils/test-helpers';
+import * as fs from 'fs';
+import * as path from 'path';
+
+test.describe('WebSocket Connection Verification', () => {
+ test('dual WebSocket connections are established during session join', async ({ page }) => {
+ const wsMonitor = new WebSocketMonitor();
+ wsMonitor.monitor(page);
+
+ // Login
+ await loginToJamUI(page);
+ await waitForAPICalls(page);
+
+ // Navigate to session creation
+ await navigateToSessionCreation(page);
+ await waitForAPICalls(page);
+
+ // Create session using form
+ await fillSessionForm(page);
+ await waitForAPICalls(page, 5000);
+
+ // Verify connections
+ const verification = wsMonitor.verifyDualConnections();
+
+ console.log('\nWebSocket Connection Verification:');
+ console.log(` Native client connection: ${verification.hasNativeClient ? 'YES' : 'NO'}`);
+ console.log(` Server connection: ${verification.hasServerConnection ? 'YES' : 'NO'}`);
+ console.log(` Both established: ${verification.bothEstablished ? 'YES' : 'NO'}`);
+
+ const connections = wsMonitor.getConnections();
+ console.log(`\nTotal connections: ${connections.length}`);
+ connections.forEach((conn, idx) => {
+ console.log(` ${idx + 1}. ${conn.url}`);
+ console.log(` Messages: ${conn.messages.length}`);
+ console.log(` Type: ${conn.isNativeClient ? 'Native Client' : conn.isServerConnection ? 'Server' : 'Unknown'}`);
+ });
+
+ // Save results
+ const resultsDir = path.join(__dirname, '../test-results/websocket-verification');
+ if (!fs.existsSync(resultsDir)) {
+ fs.mkdirSync(resultsDir, { recursive: true });
+ }
+
+ fs.writeFileSync(
+ path.join(resultsDir, 'connections.json'),
+ wsMonitor.toJSON()
+ );
+
+ // Assertions
+ expect(verification.bothEstablished).toBe(true);
+ expect(wsMonitor.getConnectionCount()).toBeGreaterThanOrEqual(2);
+ });
+
+ test('native client connection is to localhost:3060', async ({ page }) => {
+ const wsMonitor = new WebSocketMonitor();
+ wsMonitor.monitor(page);
+
+ await loginToJamUI(page);
+ await navigateToSessionCreation(page);
+ await page.keyboard.press('Control+Shift+Digit0');
+ await waitForAPICalls(page, 3000);
+ await clickQuickStart(page);
+ await waitForAPICalls(page, 5000);
+
+ const nativeClient = wsMonitor.getNativeClientConnection();
+
+ expect(nativeClient).toBeDefined();
+ expect(nativeClient?.url).toContain('localhost:3060');
+ expect(nativeClient?.url).toContain('ws://');
+
+ console.log(`\nNative client connection URL: ${nativeClient?.url}`);
+ console.log(`Messages sent/received: ${nativeClient?.messages.length || 0}`);
+ });
+
+ test('server connection is to jamkazam.local:6767', async ({ page }) => {
+ const wsMonitor = new WebSocketMonitor();
+ wsMonitor.monitor(page);
+
+ await loginToJamUI(page);
+ await navigateToSessionCreation(page);
+ await page.keyboard.press('Control+Shift+Digit0');
+ await waitForAPICalls(page, 3000);
+ await clickQuickStart(page);
+ await waitForAPICalls(page, 5000);
+
+ const serverConn = wsMonitor.getServerConnection();
+
+ expect(serverConn).toBeDefined();
+ expect(serverConn?.url).toMatch(/jamkazam\.(local|com):6767/);
+ expect(serverConn?.url).toContain('ws://');
+ expect(serverConn?.url).toContain('/websocket');
+
+ console.log(`\nServer connection URL: ${serverConn?.url}`);
+ console.log(`Messages sent/received: ${serverConn?.messages.length || 0}`);
+
+ // Check URL parameters
+ if (serverConn) {
+ const url = new URL(serverConn.url);
+ console.log('\nServer connection parameters:');
+ console.log(` channel_id: ${url.searchParams.get('channel_id') || 'N/A'}`);
+ console.log(` client_type: ${url.searchParams.get('client_type') || 'N/A'}`);
+ console.log(` client_id: ${url.searchParams.get('client_id') || 'N/A'}`);
+ console.log(` product: ${url.searchParams.get('product') || 'N/A'}`);
+
+ // Verify expected parameters
+ expect(url.searchParams.get('client_type')).toBe('browser');
+ expect(url.searchParams.get('product')).toBe('JamClientModern');
+ }
+ });
+
+ test('WebSocket connections send and receive messages', async ({ page }) => {
+ const wsMonitor = new WebSocketMonitor();
+ wsMonitor.monitor(page);
+
+ await loginToJamUI(page);
+ await navigateToSessionCreation(page);
+ await page.keyboard.press('Control+Shift+Digit0');
+ await waitForAPICalls(page, 3000);
+ await clickQuickStart(page);
+ await waitForAPICalls(page, 10000); // Wait longer for messages
+
+ const totalMessages = wsMonitor.getTotalMessageCount();
+
+ console.log(`\nTotal WebSocket messages: ${totalMessages}`);
+
+ const connections = wsMonitor.getConnections();
+ for (const conn of connections) {
+ const sentCount = conn.messages.filter(m => m.direction === 'sent').length;
+ const receivedCount = conn.messages.filter(m => m.direction === 'received').length;
+
+ console.log(`\n${conn.isNativeClient ? 'Native Client' : 'Server'} (${conn.url}):`);
+ console.log(` Sent: ${sentCount}`);
+ console.log(` Received: ${receivedCount}`);
+ console.log(` Total: ${conn.messages.length}`);
+ }
+
+ // Should have substantial message traffic
+ expect(totalMessages).toBeGreaterThan(100);
+ });
+
+ test('WebSocket connections remain active during session', async ({ page }) => {
+ const wsMonitor = new WebSocketMonitor();
+ wsMonitor.monitor(page);
+
+ await loginToJamUI(page);
+ await navigateToSessionCreation(page);
+ await page.keyboard.press('Control+Shift+Digit0');
+ await waitForAPICalls(page, 3000);
+ await clickQuickStart(page);
+ await waitForAPICalls(page, 5000);
+
+ // Wait a bit longer
+ await page.waitForTimeout(3000);
+
+ const activeConnections = wsMonitor.getActiveConnections();
+
+ console.log(`\nActive WebSocket connections: ${activeConnections.length}`);
+ activeConnections.forEach(conn => {
+ console.log(` ${conn.isNativeClient ? 'Native Client' : 'Server'}: OPEN`);
+ });
+
+ // Both connections should still be active
+ expect(activeConnections.length).toBeGreaterThanOrEqual(2);
+
+ // Verify neither connection is closed
+ const nativeClient = wsMonitor.getNativeClientConnection();
+ const server = wsMonitor.getServerConnection();
+
+ expect(nativeClient?.closed).toBe(false);
+ expect(server?.closed).toBe(false);
+ });
+});