@naman_deep_singh/communication-core 1.0.0

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 (134) hide show
  1. package/README.md +345 -0
  2. package/dist/cjs/abstract/BaseCircuitBreaker.js +253 -0
  3. package/dist/cjs/abstract/BaseClient.js +298 -0
  4. package/dist/cjs/abstract/BaseCompressionManager.js +377 -0
  5. package/dist/cjs/abstract/BaseConnectionPool.js +543 -0
  6. package/dist/cjs/abstract/BaseInterceptor.js +235 -0
  7. package/dist/cjs/abstract/BaseLoadBalancer.js +269 -0
  8. package/dist/cjs/abstract/BaseProtocol.js +269 -0
  9. package/dist/cjs/abstract/BaseRetryStrategy.js +255 -0
  10. package/dist/cjs/abstract/BaseSerializer.js +341 -0
  11. package/dist/cjs/abstract/BaseServiceDiscoverer.js +254 -0
  12. package/dist/cjs/abstract/BaseTimeoutManager.js +295 -0
  13. package/dist/cjs/abstract/index.js +25 -0
  14. package/dist/cjs/errors/CircuitBreakerError.js +16 -0
  15. package/dist/cjs/errors/CommunicationError.js +15 -0
  16. package/dist/cjs/errors/ConnectionError.js +15 -0
  17. package/dist/cjs/errors/DiscoveryError.js +15 -0
  18. package/dist/cjs/errors/LoadBalancerError.js +15 -0
  19. package/dist/cjs/errors/ProtocolError.js +15 -0
  20. package/dist/cjs/errors/RetryError.js +16 -0
  21. package/dist/cjs/errors/SerializationError.js +15 -0
  22. package/dist/cjs/errors/ServiceUnavailableError.js +15 -0
  23. package/dist/cjs/errors/TimeoutError.js +16 -0
  24. package/dist/cjs/errors/communicationErrorCodes.js +35 -0
  25. package/dist/cjs/errors/index.js +31 -0
  26. package/dist/cjs/index.js +38 -0
  27. package/dist/cjs/interfaces/CircuitBreaker.interface.js +6 -0
  28. package/dist/cjs/interfaces/Client.interface.js +6 -0
  29. package/dist/cjs/interfaces/Compression.interface.js +6 -0
  30. package/dist/cjs/interfaces/ConnectionPool.interface.js +6 -0
  31. package/dist/cjs/interfaces/Interceptor.interface.js +6 -0
  32. package/dist/cjs/interfaces/LoadBalancer.interface.js +2 -0
  33. package/dist/cjs/interfaces/Protocol.interface.js +6 -0
  34. package/dist/cjs/interfaces/RetryStrategy.interface.js +6 -0
  35. package/dist/cjs/interfaces/Serializer.interface.js +2 -0
  36. package/dist/cjs/interfaces/ServiceDiscovery.interface.js +6 -0
  37. package/dist/cjs/interfaces/Timeout.interface.js +6 -0
  38. package/dist/cjs/interfaces/index.js +6 -0
  39. package/dist/cjs/types/config.js +6 -0
  40. package/dist/cjs/types/events.js +6 -0
  41. package/dist/cjs/types/index.js +6 -0
  42. package/dist/cjs/types/request.js +6 -0
  43. package/dist/cjs/types/response.js +6 -0
  44. package/dist/cjs/types/service.js +6 -0
  45. package/dist/cjs/utils.js +200 -0
  46. package/dist/esm/abstract/BaseCircuitBreaker.js +249 -0
  47. package/dist/esm/abstract/BaseClient.js +294 -0
  48. package/dist/esm/abstract/BaseCompressionManager.js +373 -0
  49. package/dist/esm/abstract/BaseConnectionPool.js +539 -0
  50. package/dist/esm/abstract/BaseInterceptor.js +231 -0
  51. package/dist/esm/abstract/BaseLoadBalancer.js +265 -0
  52. package/dist/esm/abstract/BaseProtocol.js +265 -0
  53. package/dist/esm/abstract/BaseRetryStrategy.js +251 -0
  54. package/dist/esm/abstract/BaseSerializer.js +337 -0
  55. package/dist/esm/abstract/BaseServiceDiscoverer.js +250 -0
  56. package/dist/esm/abstract/BaseTimeoutManager.js +291 -0
  57. package/dist/esm/abstract/index.js +11 -0
  58. package/dist/esm/errors/CircuitBreakerError.js +12 -0
  59. package/dist/esm/errors/CommunicationError.js +11 -0
  60. package/dist/esm/errors/ConnectionError.js +11 -0
  61. package/dist/esm/errors/DiscoveryError.js +11 -0
  62. package/dist/esm/errors/LoadBalancerError.js +11 -0
  63. package/dist/esm/errors/ProtocolError.js +11 -0
  64. package/dist/esm/errors/RetryError.js +12 -0
  65. package/dist/esm/errors/SerializationError.js +11 -0
  66. package/dist/esm/errors/ServiceUnavailableError.js +11 -0
  67. package/dist/esm/errors/TimeoutError.js +12 -0
  68. package/dist/esm/errors/communicationErrorCodes.js +32 -0
  69. package/dist/esm/errors/index.js +17 -0
  70. package/dist/esm/index.js +18 -0
  71. package/dist/esm/interfaces/CircuitBreaker.interface.js +5 -0
  72. package/dist/esm/interfaces/Client.interface.js +5 -0
  73. package/dist/esm/interfaces/Compression.interface.js +5 -0
  74. package/dist/esm/interfaces/ConnectionPool.interface.js +5 -0
  75. package/dist/esm/interfaces/Interceptor.interface.js +5 -0
  76. package/dist/esm/interfaces/LoadBalancer.interface.js +1 -0
  77. package/dist/esm/interfaces/Protocol.interface.js +5 -0
  78. package/dist/esm/interfaces/RetryStrategy.interface.js +5 -0
  79. package/dist/esm/interfaces/Serializer.interface.js +1 -0
  80. package/dist/esm/interfaces/ServiceDiscovery.interface.js +5 -0
  81. package/dist/esm/interfaces/Timeout.interface.js +5 -0
  82. package/dist/esm/interfaces/index.js +5 -0
  83. package/dist/esm/types/config.js +5 -0
  84. package/dist/esm/types/events.js +5 -0
  85. package/dist/esm/types/index.js +5 -0
  86. package/dist/esm/types/request.js +5 -0
  87. package/dist/esm/types/response.js +5 -0
  88. package/dist/esm/types/service.js +5 -0
  89. package/dist/esm/utils.js +193 -0
  90. package/dist/types/abstract/BaseCircuitBreaker.d.ts +167 -0
  91. package/dist/types/abstract/BaseClient.d.ts +197 -0
  92. package/dist/types/abstract/BaseCompressionManager.d.ts +180 -0
  93. package/dist/types/abstract/BaseConnectionPool.d.ts +210 -0
  94. package/dist/types/abstract/BaseInterceptor.d.ts +150 -0
  95. package/dist/types/abstract/BaseLoadBalancer.d.ts +167 -0
  96. package/dist/types/abstract/BaseProtocol.d.ts +163 -0
  97. package/dist/types/abstract/BaseRetryStrategy.d.ts +130 -0
  98. package/dist/types/abstract/BaseSerializer.d.ts +181 -0
  99. package/dist/types/abstract/BaseServiceDiscoverer.d.ts +161 -0
  100. package/dist/types/abstract/BaseTimeoutManager.d.ts +145 -0
  101. package/dist/types/abstract/index.d.ts +11 -0
  102. package/dist/types/errors/CircuitBreakerError.d.ts +8 -0
  103. package/dist/types/errors/CommunicationError.d.ts +10 -0
  104. package/dist/types/errors/ConnectionError.d.ts +9 -0
  105. package/dist/types/errors/DiscoveryError.d.ts +9 -0
  106. package/dist/types/errors/LoadBalancerError.d.ts +9 -0
  107. package/dist/types/errors/ProtocolError.d.ts +9 -0
  108. package/dist/types/errors/RetryError.d.ts +11 -0
  109. package/dist/types/errors/SerializationError.d.ts +9 -0
  110. package/dist/types/errors/ServiceUnavailableError.d.ts +12 -0
  111. package/dist/types/errors/TimeoutError.d.ts +11 -0
  112. package/dist/types/errors/communicationErrorCodes.d.ts +27 -0
  113. package/dist/types/errors/index.d.ts +11 -0
  114. package/dist/types/index.d.ts +13 -0
  115. package/dist/types/interfaces/CircuitBreaker.interface.d.ts +150 -0
  116. package/dist/types/interfaces/Client.interface.d.ts +153 -0
  117. package/dist/types/interfaces/Compression.interface.d.ts +190 -0
  118. package/dist/types/interfaces/ConnectionPool.interface.d.ts +191 -0
  119. package/dist/types/interfaces/Interceptor.interface.d.ts +220 -0
  120. package/dist/types/interfaces/LoadBalancer.interface.d.ts +153 -0
  121. package/dist/types/interfaces/Protocol.interface.d.ts +117 -0
  122. package/dist/types/interfaces/RetryStrategy.interface.d.ts +160 -0
  123. package/dist/types/interfaces/Serializer.interface.d.ts +176 -0
  124. package/dist/types/interfaces/ServiceDiscovery.interface.d.ts +189 -0
  125. package/dist/types/interfaces/Timeout.interface.d.ts +135 -0
  126. package/dist/types/interfaces/index.d.ts +15 -0
  127. package/dist/types/types/config.d.ts +540 -0
  128. package/dist/types/types/events.d.ts +204 -0
  129. package/dist/types/types/index.d.ts +9 -0
  130. package/dist/types/types/request.d.ts +143 -0
  131. package/dist/types/types/response.d.ts +155 -0
  132. package/dist/types/types/service.d.ts +279 -0
  133. package/dist/types/utils.d.ts +179 -0
  134. package/package.json +88 -0
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Event types for communication layer
3
+ * @packageDocumentation
4
+ */
5
+ import type { ServiceInstance } from './service.js';
6
+ import type { CircuitBreakerState } from './config.js';
7
+ import type { CommunicationError } from '../errors/CommunicationError.js';
8
+ /**
9
+ * Base event interface
10
+ */
11
+ export interface BaseEvent {
12
+ /** Event type */
13
+ type: string;
14
+ /** Event timestamp */
15
+ timestamp: number;
16
+ /** Event source */
17
+ source?: string;
18
+ /** Correlation ID for tracing */
19
+ correlationId?: string;
20
+ /** Additional metadata */
21
+ metadata?: Record<string, unknown>;
22
+ }
23
+ /**
24
+ * Circuit breaker events
25
+ */
26
+ export interface CircuitBreakerEvent extends BaseEvent {
27
+ type: 'circuit-breaker';
28
+ /** Circuit breaker name */
29
+ name: string;
30
+ /** New state */
31
+ state: CircuitBreakerState;
32
+ /** Previous state */
33
+ previousState: CircuitBreakerState;
34
+ /** Failure count */
35
+ failureCount: number;
36
+ /** Success count */
37
+ successCount: number;
38
+ /** Error that triggered state change */
39
+ error?: CommunicationError;
40
+ }
41
+ /**
42
+ * Retry events
43
+ */
44
+ export interface RetryEvent extends BaseEvent {
45
+ type: 'retry';
46
+ /** Operation being retried */
47
+ operation: string;
48
+ /** Current retry attempt */
49
+ attempt: number;
50
+ /** Maximum retry attempts */
51
+ maxAttempts: number;
52
+ /** Delay before next retry in milliseconds */
53
+ delay: number;
54
+ /** Error that triggered retry */
55
+ error: CommunicationError;
56
+ /** Total elapsed time in milliseconds */
57
+ elapsedTime: number;
58
+ }
59
+ /**
60
+ * Service discovery events
61
+ */
62
+ export interface ServiceDiscoveryEvent extends BaseEvent {
63
+ type: 'service-discovery';
64
+ /** Service name */
65
+ serviceName: string;
66
+ /** Event subtype */
67
+ subtype: 'registered' | 'deregistered' | 'updated' | 'health-changed';
68
+ /** Service instance */
69
+ instance: ServiceInstance;
70
+ /** Previous instance state (for updates) */
71
+ previousInstance?: ServiceInstance;
72
+ /** List of all available instances after event */
73
+ allInstances: ServiceInstance[];
74
+ }
75
+ /**
76
+ * Load balancing events
77
+ */
78
+ export interface LoadBalancingEvent extends BaseEvent {
79
+ type: 'load-balancing';
80
+ /** Service name */
81
+ serviceName: string;
82
+ /** Selected instance */
83
+ selectedInstance: ServiceInstance;
84
+ /** Available instances */
85
+ availableInstances: ServiceInstance[];
86
+ /** Load balancing strategy used */
87
+ strategy: string;
88
+ /** Selection duration in milliseconds */
89
+ selectionDuration: number;
90
+ }
91
+ /**
92
+ * Protocol events
93
+ */
94
+ export interface ProtocolEvent extends BaseEvent {
95
+ type: 'protocol';
96
+ /** Protocol name */
97
+ protocol: string;
98
+ /** Event subtype */
99
+ subtype: 'request' | 'response' | 'error' | 'connection' | 'disconnection';
100
+ /** Request ID */
101
+ requestId?: string;
102
+ /** Duration in milliseconds (for request/response) */
103
+ duration?: number;
104
+ /** Status code (for HTTP responses) */
105
+ statusCode?: number;
106
+ /** Error (for error events) */
107
+ error?: CommunicationError;
108
+ /** Payload size in bytes */
109
+ payloadSize?: number;
110
+ }
111
+ /**
112
+ * Connection events
113
+ */
114
+ export interface ConnectionEvent extends BaseEvent {
115
+ type: 'connection';
116
+ /** Event subtype */
117
+ subtype: 'opened' | 'closed' | 'error' | 'reconnected';
118
+ /** Connection ID */
119
+ connectionId: string;
120
+ /** Remote address */
121
+ remoteAddress?: string;
122
+ /** Connection duration in milliseconds */
123
+ duration?: number;
124
+ /** Error (for error events) */
125
+ error?: CommunicationError;
126
+ /** Reconnection attempt number */
127
+ reconnectionAttempt?: number;
128
+ }
129
+ /**
130
+ * Metrics events
131
+ */
132
+ export interface MetricsEvent extends BaseEvent {
133
+ type: 'metrics';
134
+ /** Metrics name */
135
+ name: string;
136
+ /** Metrics value */
137
+ value: number;
138
+ /** Metrics type */
139
+ metricsType: 'counter' | 'gauge' | 'histogram' | 'summary';
140
+ /** Labels/tags */
141
+ labels?: Record<string, string>;
142
+ /** Timestamp when metrics was collected */
143
+ collectedAt: number;
144
+ }
145
+ /**
146
+ * Cache events
147
+ */
148
+ export interface CacheEvent extends BaseEvent {
149
+ type: 'cache';
150
+ /** Event subtype */
151
+ subtype: 'hit' | 'miss' | 'set' | 'delete' | 'expire' | 'clear';
152
+ /** Cache key */
153
+ key: string;
154
+ /** Cache value size in bytes */
155
+ valueSize?: number;
156
+ /** Cache TTL in milliseconds */
157
+ ttl?: number;
158
+ /** Cache hit/miss ratio */
159
+ hitRatio?: number;
160
+ }
161
+ /**
162
+ * Interceptor events
163
+ */
164
+ export interface InterceptorEvent extends BaseEvent {
165
+ type: 'interceptor';
166
+ /** Interceptor name */
167
+ interceptor: string;
168
+ /** Event subtype */
169
+ subtype: 'before' | 'after' | 'error';
170
+ /** Request ID */
171
+ requestId: string;
172
+ /** Duration in milliseconds (for after events) */
173
+ duration?: number;
174
+ /** Error (for error events) */
175
+ error?: CommunicationError;
176
+ /** Modified request/response */
177
+ modification?: {
178
+ type: 'request' | 'response';
179
+ changes: string[];
180
+ };
181
+ }
182
+ /**
183
+ * Union type of all events
184
+ */
185
+ export type CommunicationEvent = CircuitBreakerEvent | RetryEvent | ServiceDiscoveryEvent | LoadBalancingEvent | ProtocolEvent | ConnectionEvent | MetricsEvent | CacheEvent | InterceptorEvent;
186
+ /**
187
+ * Event listener callback
188
+ */
189
+ export type EventListener = (event: CommunicationEvent) => void | Promise<void>;
190
+ /**
191
+ * Event emitter interface
192
+ */
193
+ export interface EventEmitter {
194
+ /** Subscribe to events */
195
+ on(eventType: string | string[], listener: EventListener): void;
196
+ /** Subscribe to events once */
197
+ once(eventType: string | string[], listener: EventListener): void;
198
+ /** Unsubscribe from events */
199
+ off(eventType: string | string[], listener: EventListener): void;
200
+ /** Emit an event */
201
+ emit(event: CommunicationEvent): void;
202
+ /** Remove all listeners */
203
+ removeAllListeners(eventType?: string): void;
204
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Type definitions for communication layer
3
+ * @packageDocumentation
4
+ */
5
+ export type { HttpMethod, ProtocolType, ServiceDiscoveryType, LoadBalanceStrategy, CircuitBreakerState, BackoffStrategy, SerializationFormat, LogLevel, ClientConfig, ServiceDiscoveryConfig, LoadBalancingConfig, ResilienceConfig, CircuitBreakerConfig, RetryPolicyConfig, TimeoutConfig, BulkheadConfig, FallbackConfig, ConnectionPoolConfig, CompressionConfig, RateLimitConfig, BaseProtocolConfig, HttpProtocolConfig, GrpcProtocolConfig, WebSocketProtocolConfig, InterceptorConfig, SerializationConfig, LoggingConfig, MetricsConfig, CacheConfig, } from './config.js';
6
+ export type { BaseRequest, HttpRequest, GrpcRequest, WebSocketRequest, RetryConfig, CircuitBreakerRequestConfig, Request, RequestOptions, RequestContext, } from './request.js';
7
+ export type { BaseResponse, HttpResponse, GrpcResponse, WebSocketResponse, ErrorResponse, PaginatedResponse, StreamResponse, Response, } from './response.js';
8
+ export type { ServiceInstance, ServiceRegistration, WatchCallback, UnwatchFunction, HealthCheckResult, ServiceEndpoint, ServiceDependency, ServiceMetrics, ServiceRegistryConfig, ServiceInstanceFilter, ServiceDiscoveryResult, } from './service.js';
9
+ export type { BaseEvent, CircuitBreakerEvent, RetryEvent, ServiceDiscoveryEvent, LoadBalancingEvent, ProtocolEvent, ConnectionEvent, MetricsEvent, CacheEvent, InterceptorEvent, CommunicationEvent, EventListener, EventEmitter, } from './events.js';
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Request types and interfaces for communication layer
3
+ * @packageDocumentation
4
+ */
5
+ import type { HttpMethod } from './config.js';
6
+ /**
7
+ * Base request interface for all protocols
8
+ */
9
+ export interface BaseRequest {
10
+ /** Unique request identifier */
11
+ id?: string;
12
+ /** Request timestamp */
13
+ timestamp?: number;
14
+ /** Request headers */
15
+ headers?: Record<string, string>;
16
+ /** Request metadata */
17
+ metadata?: Record<string, unknown>;
18
+ /** Request timeout in milliseconds */
19
+ timeout?: number;
20
+ /** Retry configuration for this specific request */
21
+ retry?: RetryConfig;
22
+ /** Circuit breaker configuration for this request */
23
+ circuitBreaker?: CircuitBreakerRequestConfig;
24
+ }
25
+ /**
26
+ * HTTP-specific request
27
+ */
28
+ export interface HttpRequest extends BaseRequest {
29
+ /** HTTP method */
30
+ method: HttpMethod;
31
+ /** Request URL */
32
+ url: string;
33
+ /** Request body */
34
+ body?: unknown;
35
+ /** Query parameters */
36
+ query?: Record<string, string | number | boolean>;
37
+ /** Path parameters */
38
+ params?: Record<string, string>;
39
+ /** Response type */
40
+ responseType?: 'json' | 'text' | 'arraybuffer' | 'stream';
41
+ }
42
+ /**
43
+ * gRPC-specific request
44
+ */
45
+ export interface GrpcRequest extends BaseRequest {
46
+ /** gRPC service name */
47
+ service: string;
48
+ /** gRPC method name */
49
+ method: string;
50
+ /** Request payload */
51
+ payload: unknown;
52
+ /** gRPC metadata */
53
+ metadata?: Record<string, string>;
54
+ }
55
+ /**
56
+ * WebSocket-specific request
57
+ */
58
+ export interface WebSocketRequest extends BaseRequest {
59
+ /** WebSocket event type */
60
+ event: string;
61
+ /** Event data */
62
+ data: unknown;
63
+ /** Acknowledgement required */
64
+ ack?: boolean;
65
+ /** Acknowledgement timeout */
66
+ ackTimeout?: number;
67
+ }
68
+ /**
69
+ * Retry configuration for a request
70
+ */
71
+ export interface RetryConfig {
72
+ /** Maximum number of retry attempts */
73
+ maxAttempts?: number;
74
+ /** Initial retry delay in milliseconds */
75
+ initialDelay?: number;
76
+ /** Maximum retry delay in milliseconds */
77
+ maxDelay?: number;
78
+ /** Backoff multiplier */
79
+ multiplier?: number;
80
+ /** Jitter factor (0-1) */
81
+ jitter?: number;
82
+ /** Retry on specific status codes */
83
+ retryOnStatus?: number[];
84
+ /** Retry on specific error types */
85
+ retryOnErrors?: string[];
86
+ }
87
+ /**
88
+ * Circuit breaker configuration for a specific request
89
+ */
90
+ export interface CircuitBreakerRequestConfig {
91
+ /** Enable circuit breaker for this request */
92
+ enabled?: boolean;
93
+ /** Failure threshold before opening */
94
+ failureThreshold?: number;
95
+ /** Reset timeout in milliseconds */
96
+ resetTimeout?: number;
97
+ /** Half-open max attempts */
98
+ halfOpenMaxAttempts?: number;
99
+ /** Exclude this request from circuit breaker */
100
+ exclude?: boolean;
101
+ }
102
+ /**
103
+ * Union type of all request types
104
+ */
105
+ export type Request = HttpRequest | GrpcRequest | WebSocketRequest;
106
+ /**
107
+ * Request options for client calls
108
+ */
109
+ export interface RequestOptions {
110
+ /** Request headers */
111
+ headers?: Record<string, string>;
112
+ /** Request timeout in milliseconds */
113
+ timeout?: number;
114
+ /** Enable/disable retry */
115
+ retry?: boolean | RetryConfig;
116
+ /** Enable/disable circuit breaker */
117
+ circuitBreaker?: boolean | CircuitBreakerRequestConfig;
118
+ /** Request metadata */
119
+ metadata?: Record<string, unknown>;
120
+ /** Custom request ID */
121
+ requestId?: string;
122
+ }
123
+ /**
124
+ * Request context passed through interceptors
125
+ */
126
+ export interface RequestContext {
127
+ /** Request ID */
128
+ requestId: string;
129
+ /** Service name */
130
+ serviceName: string;
131
+ /** Endpoint/URL */
132
+ endpoint: string;
133
+ /** Request start timestamp */
134
+ startTime: number;
135
+ /** Request attempt number */
136
+ attempt: number;
137
+ /** Is this a retry attempt? */
138
+ isRetry: boolean;
139
+ /** Previous error (if retrying) */
140
+ previousError?: Error;
141
+ /** Custom context data */
142
+ data?: Map<string, unknown>;
143
+ }
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Response types and interfaces for communication layer
3
+ * @packageDocumentation
4
+ */
5
+ import type { HttpStatusCode } from '@naman_deep_singh/http-response';
6
+ /**
7
+ * Base response interface for all protocols
8
+ */
9
+ export interface BaseResponse<T = unknown> {
10
+ /** Response data */
11
+ data: T;
12
+ /** Response status code */
13
+ status: number;
14
+ /** Response status text */
15
+ statusText?: string;
16
+ /** Response headers */
17
+ headers?: Record<string, string>;
18
+ /** Response metadata */
19
+ metadata?: Record<string, unknown>;
20
+ /** Request duration in milliseconds */
21
+ duration?: number;
22
+ /** Request ID */
23
+ requestId?: string;
24
+ /** Is the response cached? */
25
+ cached?: boolean;
26
+ /** Cache age in milliseconds */
27
+ cacheAge?: number;
28
+ }
29
+ /**
30
+ * HTTP-specific response
31
+ */
32
+ export interface HttpResponse<T = unknown> extends BaseResponse<T> {
33
+ /** HTTP status code */
34
+ status: HttpStatusCode;
35
+ /** Response URL */
36
+ url: string;
37
+ /** Redirected URL if any */
38
+ redirected?: boolean;
39
+ /** Response size in bytes */
40
+ size?: number;
41
+ /** Response type */
42
+ type?: 'basic' | 'cors' | 'default' | 'error' | 'opaque';
43
+ }
44
+ /**
45
+ * gRPC-specific response
46
+ */
47
+ export interface GrpcResponse<T = unknown> extends BaseResponse<T> {
48
+ /** gRPC status code */
49
+ grpcCode: number;
50
+ /** gRPC status message */
51
+ grpcMessage?: string;
52
+ /** gRPC trailers */
53
+ trailers?: Record<string, string>;
54
+ }
55
+ /**
56
+ * WebSocket-specific response
57
+ */
58
+ export interface WebSocketResponse<T = unknown> extends BaseResponse<T> {
59
+ /** WebSocket event type */
60
+ event: string;
61
+ /** Is this an acknowledgement? */
62
+ ack?: boolean;
63
+ /** Sequence number */
64
+ sequence?: number;
65
+ }
66
+ /**
67
+ * Error response interface
68
+ */
69
+ export interface ErrorResponse {
70
+ /** Error message */
71
+ message: string;
72
+ /** Error code */
73
+ code: string;
74
+ /** HTTP status code */
75
+ status?: number;
76
+ /** Additional error details */
77
+ details?: Record<string, unknown>;
78
+ /** Request ID */
79
+ requestId?: string;
80
+ /** Service name */
81
+ service?: string;
82
+ /** Endpoint */
83
+ endpoint?: string;
84
+ /** Stack trace (development only) */
85
+ stack?: string;
86
+ /** Retry information */
87
+ retry?: {
88
+ /** Current retry attempt */
89
+ attempt: number;
90
+ /** Maximum retry attempts */
91
+ maxAttempts: number;
92
+ /** Next retry delay in milliseconds */
93
+ nextDelay?: number;
94
+ };
95
+ /** Circuit breaker state if applicable */
96
+ circuitBreaker?: {
97
+ /** Circuit breaker state */
98
+ state: 'closed' | 'open' | 'half-open';
99
+ /** Failures count */
100
+ failures: number;
101
+ /** Next reset time */
102
+ nextReset?: number;
103
+ };
104
+ }
105
+ /**
106
+ * Paginated response interface
107
+ */
108
+ export interface PaginatedResponse<T> {
109
+ /** Response data */
110
+ data: T[];
111
+ /** Pagination metadata */
112
+ pagination: {
113
+ /** Current page number */
114
+ page: number;
115
+ /** Items per page */
116
+ limit: number;
117
+ /** Total number of items */
118
+ total: number;
119
+ /** Total number of pages */
120
+ totalPages: number;
121
+ /** Has next page? */
122
+ hasNext: boolean;
123
+ /** Has previous page? */
124
+ hasPrev: boolean;
125
+ /** Next page URL */
126
+ next?: string;
127
+ /** Previous page URL */
128
+ prev?: string;
129
+ };
130
+ /** Response status */
131
+ status: number;
132
+ /** Response headers */
133
+ headers?: Record<string, string>;
134
+ }
135
+ /**
136
+ * Streaming response interface
137
+ */
138
+ export interface StreamResponse<T = unknown> {
139
+ /** Stream data */
140
+ data: AsyncIterable<T>;
141
+ /** Response headers */
142
+ headers?: Record<string, string>;
143
+ /** Response status */
144
+ status: number;
145
+ /** Request ID */
146
+ requestId?: string;
147
+ /** Close the stream */
148
+ close(): Promise<void>;
149
+ /** Cancel the stream */
150
+ cancel(): Promise<void>;
151
+ }
152
+ /**
153
+ * Union type of all response types
154
+ */
155
+ export type Response<T = unknown> = HttpResponse<T> | GrpcResponse<T> | WebSocketResponse<T>;