@djangocfg/monitor 2.1.321 → 2.1.327

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/client.cjs +956 -1126
  2. package/dist/client.cjs.map +1 -1
  3. package/dist/client.d.cts +25 -39
  4. package/dist/client.d.ts +25 -39
  5. package/dist/client.mjs +956 -1137
  6. package/dist/client.mjs.map +1 -1
  7. package/dist/index.cjs +934 -1092
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +25 -39
  10. package/dist/index.d.ts +25 -39
  11. package/dist/index.mjs +927 -1096
  12. package/dist/index.mjs.map +1 -1
  13. package/dist/server.cjs +915 -1092
  14. package/dist/server.cjs.map +1 -1
  15. package/dist/server.d.cts +25 -39
  16. package/dist/server.d.ts +25 -39
  17. package/dist/server.mjs +907 -1095
  18. package/dist/server.mjs.map +1 -1
  19. package/package.json +7 -2
  20. package/src/_api/generated/_shared/errors.ts +70 -0
  21. package/src/_api/generated/_shared/index.ts +25 -0
  22. package/src/_api/generated/_shared/logger.ts +123 -0
  23. package/src/_api/generated/_shared/storage.ts +83 -0
  24. package/src/_api/generated/_shared/validation-events.ts +52 -0
  25. package/src/_api/generated/cfg_monitor/api.ts +122 -0
  26. package/src/_api/generated/cfg_monitor/client/client.gen.ts +280 -0
  27. package/src/_api/generated/cfg_monitor/client/index.ts +25 -0
  28. package/src/_api/generated/cfg_monitor/client/types.gen.ts +217 -0
  29. package/src/_api/generated/cfg_monitor/client/utils.gen.ts +318 -0
  30. package/src/_api/generated/cfg_monitor/client.gen.ts +16 -0
  31. package/src/_api/generated/cfg_monitor/core/auth.gen.ts +41 -0
  32. package/src/_api/generated/cfg_monitor/core/bodySerializer.gen.ts +82 -0
  33. package/src/_api/generated/cfg_monitor/core/params.gen.ts +169 -0
  34. package/src/_api/generated/cfg_monitor/core/pathSerializer.gen.ts +171 -0
  35. package/src/_api/generated/cfg_monitor/core/queryKeySerializer.gen.ts +117 -0
  36. package/src/_api/generated/cfg_monitor/core/serverSentEvents.gen.ts +242 -0
  37. package/src/_api/generated/cfg_monitor/core/types.gen.ts +104 -0
  38. package/src/_api/generated/cfg_monitor/core/utils.gen.ts +140 -0
  39. package/src/_api/generated/cfg_monitor/events.ts +198 -0
  40. package/src/_api/generated/cfg_monitor/hooks/index.ts +4 -0
  41. package/src/_api/generated/cfg_monitor/hooks/useCfgMonitorIngestCreate.ts +24 -0
  42. package/src/_api/generated/cfg_monitor/index.ts +26 -314
  43. package/src/_api/generated/cfg_monitor/schemas/EventTypeEnum.ts +9 -0
  44. package/src/_api/generated/cfg_monitor/{_utils/schemas/FrontendEventIngestRequest.schema.ts → schemas/FrontendEventIngestRequest.ts} +12 -19
  45. package/src/_api/generated/cfg_monitor/schemas/IngestBatchRequest.ts +12 -0
  46. package/src/_api/generated/cfg_monitor/schemas/LevelEnum.ts +9 -0
  47. package/src/_api/generated/cfg_monitor/schemas/index.ts +7 -0
  48. package/src/_api/generated/cfg_monitor/sdk.gen.ts +55 -0
  49. package/src/_api/generated/cfg_monitor/types.gen.ts +79 -0
  50. package/src/_api/generated/index.ts +22 -0
  51. package/src/_api/index.ts +2 -2
  52. package/src/client/capture/console.ts +2 -3
  53. package/src/client/transport/ingest.ts +21 -17
  54. package/src/server/index.ts +3 -2
  55. package/src/_api/generated/cfg_monitor/CLAUDE.md +0 -60
  56. package/src/_api/generated/cfg_monitor/_utils/fetchers/index.ts +0 -30
  57. package/src/_api/generated/cfg_monitor/_utils/fetchers/monitor.ts +0 -51
  58. package/src/_api/generated/cfg_monitor/_utils/hooks/index.ts +0 -30
  59. package/src/_api/generated/cfg_monitor/_utils/hooks/monitor.ts +0 -43
  60. package/src/_api/generated/cfg_monitor/_utils/schemas/IngestBatchRequest.schema.ts +0 -20
  61. package/src/_api/generated/cfg_monitor/_utils/schemas/index.ts +0 -22
  62. package/src/_api/generated/cfg_monitor/api-instance.ts +0 -181
  63. package/src/_api/generated/cfg_monitor/client.ts +0 -330
  64. package/src/_api/generated/cfg_monitor/enums.ts +0 -34
  65. package/src/_api/generated/cfg_monitor/errors.ts +0 -123
  66. package/src/_api/generated/cfg_monitor/http.ts +0 -160
  67. package/src/_api/generated/cfg_monitor/logger.ts +0 -261
  68. package/src/_api/generated/cfg_monitor/monitor/client.ts +0 -26
  69. package/src/_api/generated/cfg_monitor/monitor/index.ts +0 -4
  70. package/src/_api/generated/cfg_monitor/monitor/models.ts +0 -47
  71. package/src/_api/generated/cfg_monitor/retry.ts +0 -177
  72. package/src/_api/generated/cfg_monitor/schema.json +0 -181
  73. package/src/_api/generated/cfg_monitor/storage.ts +0 -163
  74. package/src/_api/generated/cfg_monitor/validation-events.ts +0 -135
@@ -1,261 +0,0 @@
1
- // @ts-nocheck
2
- // Auto-generated by DjangoCFG - see CLAUDE.md
3
- /**
4
- * API Logger with Consola
5
- * Beautiful console logging for API requests and responses
6
- *
7
- * Installation:
8
- * npm install consola
9
- */
10
-
11
- import { type ConsolaInstance, createConsola } from 'consola';
12
-
13
- /**
14
- * Request log data
15
- */
16
- export interface RequestLog {
17
- method: string;
18
- url: string;
19
- headers?: Record<string, string>;
20
- body?: any;
21
- timestamp: number;
22
- }
23
-
24
- /**
25
- * Response log data
26
- */
27
- export interface ResponseLog {
28
- status: number;
29
- statusText: string;
30
- data?: any;
31
- duration: number;
32
- timestamp: number;
33
- }
34
-
35
- /**
36
- * Error log data
37
- */
38
- export interface ErrorLog {
39
- message: string;
40
- statusCode?: number;
41
- fieldErrors?: Record<string, string[]>;
42
- duration: number;
43
- timestamp: number;
44
- }
45
-
46
- /**
47
- * Logger configuration
48
- */
49
- export interface LoggerConfig {
50
- /** Enable logging */
51
- enabled: boolean;
52
- /** Log requests */
53
- logRequests: boolean;
54
- /** Log responses */
55
- logResponses: boolean;
56
- /** Log errors */
57
- logErrors: boolean;
58
- /** Log request/response bodies */
59
- logBodies: boolean;
60
- /** Log headers (excluding sensitive ones) */
61
- logHeaders: boolean;
62
- /** Custom consola instance */
63
- consola?: ConsolaInstance;
64
- }
65
-
66
- /**
67
- * Default logger configuration
68
- */
69
- const DEFAULT_CONFIG: LoggerConfig = {
70
- enabled: process.env.NODE_ENV !== 'production',
71
- logRequests: true,
72
- logResponses: true,
73
- logErrors: true,
74
- logBodies: true,
75
- logHeaders: false,
76
- };
77
-
78
- /**
79
- * Sensitive header names to filter out
80
- */
81
- const SENSITIVE_HEADERS = [
82
- 'authorization',
83
- 'cookie',
84
- 'set-cookie',
85
- 'x-api-key',
86
- 'x-csrf-token',
87
- ];
88
-
89
- /**
90
- * API Logger class
91
- */
92
- export class APILogger {
93
- private config: LoggerConfig;
94
- private consola: ConsolaInstance;
95
-
96
- constructor(config: Partial<LoggerConfig> = {}) {
97
- this.config = { ...DEFAULT_CONFIG, ...config };
98
- this.consola = config.consola || createConsola({
99
- level: this.config.enabled ? 4 : 0,
100
- });
101
- }
102
-
103
- /**
104
- * Enable logging
105
- */
106
- enable(): void {
107
- this.config.enabled = true;
108
- }
109
-
110
- /**
111
- * Disable logging
112
- */
113
- disable(): void {
114
- this.config.enabled = false;
115
- }
116
-
117
- /**
118
- * Update configuration
119
- */
120
- setConfig(config: Partial<LoggerConfig>): void {
121
- this.config = { ...this.config, ...config };
122
- }
123
-
124
- /**
125
- * Filter sensitive headers
126
- */
127
- private filterHeaders(headers?: Record<string, string>): Record<string, string> {
128
- if (!headers) return {};
129
-
130
- const filtered: Record<string, string> = {};
131
- Object.keys(headers).forEach((key) => {
132
- const lowerKey = key.toLowerCase();
133
- if (SENSITIVE_HEADERS.includes(lowerKey)) {
134
- filtered[key] = '***';
135
- } else {
136
- filtered[key] = headers[key] || '';
137
- }
138
- });
139
-
140
- return filtered;
141
- }
142
-
143
- /**
144
- * Log request
145
- */
146
- logRequest(request: RequestLog): void {
147
- if (!this.config.enabled || !this.config.logRequests) return;
148
-
149
- const { method, url, headers, body } = request;
150
-
151
- this.consola.start(`${method} ${url}`);
152
-
153
- if (this.config.logHeaders && headers) {
154
- this.consola.debug('Headers:', this.filterHeaders(headers));
155
- }
156
-
157
- if (this.config.logBodies && body) {
158
- this.consola.debug('Body:', body);
159
- }
160
- }
161
-
162
- /**
163
- * Log response
164
- */
165
- logResponse(request: RequestLog, response: ResponseLog): void {
166
- if (!this.config.enabled || !this.config.logResponses) return;
167
-
168
- const { method, url } = request;
169
- const { status, statusText, data, duration } = response;
170
-
171
- const statusColor = status >= 500 ? 'red'
172
- : status >= 400 ? 'yellow'
173
- : status >= 300 ? 'cyan'
174
- : 'green';
175
-
176
- this.consola.success(
177
- `${method} ${url} ${status} ${statusText} (${duration}ms)`
178
- );
179
-
180
- if (this.config.logBodies && data) {
181
- this.consola.debug('Response:', data);
182
- }
183
- }
184
-
185
- /**
186
- * Log error
187
- */
188
- logError(request: RequestLog, error: ErrorLog): void {
189
- if (!this.config.enabled || !this.config.logErrors) return;
190
-
191
- const { method, url } = request;
192
- const { message, statusCode, fieldErrors, duration } = error;
193
-
194
- this.consola.error(
195
- `${method} ${url} ${statusCode || 'Network'} Error (${duration}ms)`
196
- );
197
-
198
- this.consola.error('Message:', message);
199
-
200
- if (fieldErrors && Object.keys(fieldErrors).length > 0) {
201
- this.consola.error('Field Errors:');
202
- Object.entries(fieldErrors).forEach(([field, errors]) => {
203
- errors.forEach((err) => {
204
- this.consola.error(` • ${field}: ${err}`);
205
- });
206
- });
207
- }
208
- }
209
-
210
- /**
211
- * Log general info
212
- */
213
- info(message: string, ...args: any[]): void {
214
- if (!this.config.enabled) return;
215
- this.consola.info(message, ...args);
216
- }
217
-
218
- /**
219
- * Log warning
220
- */
221
- warn(message: string, ...args: any[]): void {
222
- if (!this.config.enabled) return;
223
- this.consola.warn(message, ...args);
224
- }
225
-
226
- /**
227
- * Log error
228
- */
229
- error(message: string, ...args: any[]): void {
230
- if (!this.config.enabled) return;
231
- this.consola.error(message, ...args);
232
- }
233
-
234
- /**
235
- * Log debug
236
- */
237
- debug(message: string, ...args: any[]): void {
238
- if (!this.config.enabled) return;
239
- this.consola.debug(message, ...args);
240
- }
241
-
242
- /**
243
- * Log success
244
- */
245
- success(message: string, ...args: any[]): void {
246
- if (!this.config.enabled) return;
247
- this.consola.success(message, ...args);
248
- }
249
-
250
- /**
251
- * Create a sub-logger with prefix
252
- */
253
- withTag(tag: string): ConsolaInstance {
254
- return this.consola.withTag(tag);
255
- }
256
- }
257
-
258
- /**
259
- * Default logger instance
260
- */
261
- export const defaultLogger = new APILogger();
@@ -1,26 +0,0 @@
1
- // @ts-nocheck
2
- import * as Models from "./models";
3
-
4
-
5
- /**
6
- * API endpoints for Monitor.
7
- */
8
- export class Monitor {
9
- private client: any;
10
-
11
- constructor(client: any) {
12
- this.client = client;
13
- }
14
-
15
- /**
16
- * Ingest browser events
17
- *
18
- * Accepts a batch of up to 50 frontend events. No authentication required
19
- * — anonymous visitors can send events.
20
- */
21
- async ingestCreate(data: Models.IngestBatchRequest): Promise<any> {
22
- const response = await this.client.request('POST', "/cfg/monitor/ingest/", { body: data });
23
- return response;
24
- }
25
-
26
- }
@@ -1,4 +0,0 @@
1
- // @ts-nocheck
2
- // Auto-generated by DjangoCFG - see CLAUDE.md
3
- export * from "./client";
4
- export * as Models from "./models";
@@ -1,47 +0,0 @@
1
- // @ts-nocheck
2
- // Auto-generated by DjangoCFG - see CLAUDE.md
3
- import * as Enums from "../enums";
4
-
5
- /**
6
- * Batch of up to 50 browser events.
7
- *
8
- * Request model (no read-only fields).
9
- */
10
- export interface IngestBatchRequest {
11
- events: Array<FrontendEventIngestRequest>;
12
- }
13
-
14
- /**
15
- * Single browser event payload.
16
- *
17
- * Request model (no read-only fields).
18
- */
19
- export interface FrontendEventIngestRequest {
20
- /** * `JS_ERROR` - JS_ERROR
21
- * `NETWORK_ERROR` - NETWORK_ERROR
22
- * `ERROR` - ERROR
23
- * `WARNING` - WARNING
24
- * `PAGE_VIEW` - PAGE_VIEW
25
- * `PERFORMANCE` - PERFORMANCE
26
- * `CONSOLE` - CONSOLE */
27
- event_type: Enums.FrontendEventIngestRequestEventType;
28
- message: string;
29
- /** * `error` - error
30
- * `warning` - warning
31
- * `info` - info
32
- * `debug` - debug */
33
- level?: Enums.FrontendEventIngestRequestLevel;
34
- stack_trace?: string;
35
- url?: string;
36
- fingerprint?: string;
37
- http_status?: number | null;
38
- http_method?: string;
39
- http_url?: string;
40
- session_id?: string;
41
- user_agent?: string;
42
- build_id?: string;
43
- environment?: string;
44
- extra?: Record<string, any>;
45
- project_name?: string;
46
- }
47
-
@@ -1,177 +0,0 @@
1
- // @ts-nocheck
2
- // Auto-generated by DjangoCFG - see CLAUDE.md
3
- /**
4
- * Retry Configuration and Utilities
5
- *
6
- * Provides automatic retry logic for failed HTTP requests using p-retry.
7
- * Retries only on network errors and server errors (5xx), not client errors (4xx).
8
- */
9
-
10
- import pRetry, { AbortError } from 'p-retry';
11
- import { APIError, NetworkError } from './errors';
12
-
13
- /**
14
- * Information about a failed retry attempt.
15
- */
16
- export interface FailedAttemptInfo {
17
- /** The error that caused the failure */
18
- error: Error;
19
- /** The attempt number (1-indexed) */
20
- attemptNumber: number;
21
- /** Number of retries left */
22
- retriesLeft: number;
23
- }
24
-
25
- /**
26
- * Retry configuration options.
27
- *
28
- * Uses exponential backoff with jitter by default to avoid thundering herd.
29
- */
30
- export interface RetryConfig {
31
- /**
32
- * Maximum number of retry attempts.
33
- * @default 3
34
- */
35
- retries?: number;
36
-
37
- /**
38
- * Exponential backoff factor.
39
- * @default 2
40
- */
41
- factor?: number;
42
-
43
- /**
44
- * Minimum wait time between retries (ms).
45
- * @default 1000
46
- */
47
- minTimeout?: number;
48
-
49
- /**
50
- * Maximum wait time between retries (ms).
51
- * @default 60000
52
- */
53
- maxTimeout?: number;
54
-
55
- /**
56
- * Add randomness to wait times (jitter).
57
- * Helps avoid thundering herd problem.
58
- * @default true
59
- */
60
- randomize?: boolean;
61
-
62
- /**
63
- * Callback called on each failed attempt.
64
- */
65
- onFailedAttempt?: (info: FailedAttemptInfo) => void;
66
- }
67
-
68
- /**
69
- * Default retry configuration.
70
- */
71
- export const DEFAULT_RETRY_CONFIG: Required<RetryConfig> = {
72
- retries: 3,
73
- factor: 2,
74
- minTimeout: 1000,
75
- maxTimeout: 60000,
76
- randomize: true,
77
- onFailedAttempt: () => {},
78
- };
79
-
80
- /**
81
- * Determine if an error should trigger a retry.
82
- *
83
- * Retries on:
84
- * - Network errors (connection refused, timeout, etc.)
85
- * - Server errors (5xx status codes)
86
- * - Rate limiting (429 status code)
87
- *
88
- * Does NOT retry on:
89
- * - Client errors (4xx except 429)
90
- * - Authentication errors (401, 403)
91
- * - Not found (404)
92
- *
93
- * @param error - The error to check
94
- * @returns true if should retry, false otherwise
95
- */
96
- export function shouldRetry(error: any): boolean {
97
- // Always retry network errors
98
- if (error instanceof NetworkError) {
99
- return true;
100
- }
101
-
102
- // For API errors, check status code
103
- if (error instanceof APIError) {
104
- const status = error.statusCode;
105
-
106
- // Retry on 5xx server errors
107
- if (status >= 500 && status < 600) {
108
- return true;
109
- }
110
-
111
- // Retry on 429 (rate limit)
112
- if (status === 429) {
113
- return true;
114
- }
115
-
116
- // Do NOT retry on 4xx client errors
117
- return false;
118
- }
119
-
120
- // Retry on unknown errors (might be network issues)
121
- return true;
122
- }
123
-
124
- /**
125
- * Wrap a function with retry logic.
126
- *
127
- * @param fn - Async function to retry
128
- * @param config - Retry configuration
129
- * @returns Result of the function
130
- *
131
- * @example
132
- * ```typescript
133
- * const result = await withRetry(
134
- * async () => fetch('https://api.example.com/users'),
135
- * { retries: 5, minTimeout: 2000 }
136
- * );
137
- * ```
138
- */
139
- export async function withRetry<T>(
140
- fn: () => Promise<T>,
141
- config?: RetryConfig
142
- ): Promise<T> {
143
- const finalConfig = { ...DEFAULT_RETRY_CONFIG, ...config };
144
-
145
- return pRetry(
146
- async () => {
147
- try {
148
- return await fn();
149
- } catch (error) {
150
- // Check if we should retry this error
151
- if (!shouldRetry(error)) {
152
- // Abort retry immediately for non-retryable errors
153
- throw new AbortError(error as Error);
154
- }
155
-
156
- // Re-throw error to trigger retry
157
- throw error;
158
- }
159
- },
160
- {
161
- retries: finalConfig.retries,
162
- factor: finalConfig.factor,
163
- minTimeout: finalConfig.minTimeout,
164
- maxTimeout: finalConfig.maxTimeout,
165
- randomize: finalConfig.randomize,
166
- onFailedAttempt: finalConfig.onFailedAttempt ? (error) => {
167
- // Adapt p-retry's FailedAttemptError to our FailedAttemptInfo
168
- const pRetryError = error as any; // p-retry's internal type
169
- finalConfig.onFailedAttempt!({
170
- error: pRetryError as Error,
171
- attemptNumber: pRetryError.attemptNumber,
172
- retriesLeft: pRetryError.retriesLeft,
173
- });
174
- } : undefined,
175
- }
176
- );
177
- }
@@ -1,181 +0,0 @@
1
- {
2
- "openapi": "3.1.0",
3
- "info": {
4
- "title": "Django CFG API",
5
- "version": "1.0.0",
6
- "description": "Complete API documentation for Django CFG Demo Project",
7
- "x-django-metadata": {
8
- "group": "cfg_monitor",
9
- "apps": [
10
- "django_monitor"
11
- ],
12
- "generator": "django-client",
13
- "generator_version": "1.0.0"
14
- }
15
- },
16
- "paths": {
17
- "/cfg/monitor/ingest/": {
18
- "post": {
19
- "operationId": "cfg_monitor_ingest_create",
20
- "description": "Accepts a batch of up to 50 frontend events. No authentication required — anonymous visitors can send events.",
21
- "summary": "Ingest browser events",
22
- "tags": [
23
- "monitor"
24
- ],
25
- "requestBody": {
26
- "content": {
27
- "application/json": {
28
- "schema": {
29
- "$ref": "#/components/schemas/IngestBatchRequest"
30
- }
31
- },
32
- "application/x-www-form-urlencoded": {
33
- "schema": {
34
- "$ref": "#/components/schemas/IngestBatchRequest"
35
- }
36
- },
37
- "multipart/form-data": {
38
- "schema": {
39
- "$ref": "#/components/schemas/IngestBatchRequest"
40
- }
41
- }
42
- },
43
- "required": true
44
- },
45
- "security": [
46
- {}
47
- ],
48
- "responses": {
49
- "202": {
50
- "description": "Accepted"
51
- }
52
- },
53
- "x-async-capable": false
54
- }
55
- }
56
- },
57
- "components": {
58
- "schemas": {
59
- "FrontendEventIngestRequest": {
60
- "type": "object",
61
- "description": "Single browser event payload.",
62
- "properties": {
63
- "event_type": {
64
- "enum": [
65
- "JS_ERROR",
66
- "NETWORK_ERROR",
67
- "ERROR",
68
- "WARNING",
69
- "PAGE_VIEW",
70
- "PERFORMANCE",
71
- "CONSOLE"
72
- ],
73
- "type": "string",
74
- "description": "* `JS_ERROR` - JS_ERROR\n* `NETWORK_ERROR` - NETWORK_ERROR\n* `ERROR` - ERROR\n* `WARNING` - WARNING\n* `PAGE_VIEW` - PAGE_VIEW\n* `PERFORMANCE` - PERFORMANCE\n* `CONSOLE` - CONSOLE",
75
- "x-spec-enum-id": "33f6281564c4f844"
76
- },
77
- "message": {
78
- "type": "string",
79
- "minLength": 1,
80
- "maxLength": 5000
81
- },
82
- "level": {
83
- "enum": [
84
- "error",
85
- "warning",
86
- "info",
87
- "debug"
88
- ],
89
- "type": "string",
90
- "description": "* `error` - error\n* `warning` - warning\n* `info` - info\n* `debug` - debug",
91
- "x-spec-enum-id": "00cfb519712ff1ce",
92
- "default": "error"
93
- },
94
- "stack_trace": {
95
- "type": "string",
96
- "default": "",
97
- "maxLength": 10000
98
- },
99
- "url": {
100
- "type": "string",
101
- "default": "",
102
- "maxLength": 2000
103
- },
104
- "fingerprint": {
105
- "type": "string",
106
- "default": "",
107
- "maxLength": 64
108
- },
109
- "http_status": {
110
- "type": [
111
- "integer",
112
- "null"
113
- ]
114
- },
115
- "http_method": {
116
- "type": "string",
117
- "default": "",
118
- "maxLength": 10
119
- },
120
- "http_url": {
121
- "type": "string",
122
- "default": "",
123
- "maxLength": 2000
124
- },
125
- "session_id": {
126
- "type": "string",
127
- "default": "",
128
- "maxLength": 64
129
- },
130
- "user_agent": {
131
- "type": "string",
132
- "default": "",
133
- "maxLength": 500
134
- },
135
- "build_id": {
136
- "type": "string",
137
- "default": "",
138
- "maxLength": 100
139
- },
140
- "environment": {
141
- "type": "string",
142
- "default": "",
143
- "maxLength": 20
144
- },
145
- "extra": {},
146
- "project_name": {
147
- "type": "string",
148
- "default": "",
149
- "maxLength": 100
150
- }
151
- },
152
- "required": [
153
- "event_type",
154
- "message"
155
- ]
156
- },
157
- "IngestBatchRequest": {
158
- "type": "object",
159
- "description": "Batch of up to 50 browser events.",
160
- "properties": {
161
- "events": {
162
- "type": "array",
163
- "items": {
164
- "$ref": "#/components/schemas/FrontendEventIngestRequest"
165
- },
166
- "maxItems": 25,
167
- "minItems": 1
168
- }
169
- },
170
- "required": [
171
- "events"
172
- ]
173
- }
174
- }
175
- },
176
- "servers": [
177
- {
178
- "url": "http://localhost:8000"
179
- }
180
- ]
181
- }