@scrawn/core 0.0.3 → 0.0.6
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.
- package/dist/config.d.ts +41 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +32 -0
- package/dist/config.js.map +1 -0
- package/dist/core/auth/apiKeyAuth.d.ts +58 -0
- package/dist/core/auth/apiKeyAuth.d.ts.map +1 -0
- package/dist/core/auth/apiKeyAuth.js +66 -0
- package/dist/core/auth/apiKeyAuth.js.map +1 -0
- package/dist/core/auth/baseAuth.d.ts +70 -0
- package/dist/core/auth/baseAuth.d.ts.map +1 -0
- package/dist/core/auth/baseAuth.js +22 -0
- package/dist/core/auth/baseAuth.js.map +1 -0
- package/dist/core/errors/index.d.ts +192 -0
- package/dist/core/errors/index.d.ts.map +1 -0
- package/dist/core/errors/index.js +280 -0
- package/dist/core/errors/index.js.map +1 -0
- package/dist/core/grpc/callContext.d.ts +18 -0
- package/dist/core/grpc/callContext.d.ts.map +1 -0
- package/dist/core/grpc/callContext.js +35 -0
- package/dist/core/grpc/callContext.js.map +1 -0
- package/dist/core/grpc/client.d.ts +16 -0
- package/dist/core/grpc/client.d.ts.map +1 -0
- package/dist/core/grpc/client.js +30 -0
- package/dist/core/grpc/client.js.map +1 -0
- package/dist/core/grpc/index.d.ts +14 -0
- package/dist/core/grpc/index.d.ts.map +1 -0
- package/dist/core/grpc/index.js +13 -0
- package/dist/core/grpc/index.js.map +1 -0
- package/dist/core/grpc/requestBuilder.d.ts +15 -0
- package/dist/core/grpc/requestBuilder.d.ts.map +1 -0
- package/dist/core/grpc/requestBuilder.js +56 -0
- package/dist/core/grpc/requestBuilder.js.map +1 -0
- package/dist/core/grpc/streamRequestBuilder.d.ts +13 -0
- package/dist/core/grpc/streamRequestBuilder.d.ts.map +1 -0
- package/dist/core/grpc/streamRequestBuilder.js +60 -0
- package/dist/core/grpc/streamRequestBuilder.js.map +1 -0
- package/dist/core/grpc/types.d.ts +7 -0
- package/dist/core/grpc/types.d.ts.map +1 -0
- package/dist/core/grpc/types.js +2 -0
- package/dist/core/grpc/types.js.map +1 -0
- package/dist/core/pricing/builders.d.ts +157 -0
- package/dist/core/pricing/builders.d.ts.map +1 -0
- package/dist/core/pricing/builders.js +218 -0
- package/dist/core/pricing/builders.js.map +1 -0
- package/dist/core/pricing/index.d.ts +30 -0
- package/dist/core/pricing/index.d.ts.map +1 -0
- package/dist/core/pricing/index.js +32 -0
- package/dist/core/pricing/index.js.map +1 -0
- package/dist/core/pricing/resolve.d.ts +39 -0
- package/dist/core/pricing/resolve.d.ts.map +1 -0
- package/dist/core/pricing/resolve.js +50 -0
- package/dist/core/pricing/resolve.js.map +1 -0
- package/dist/core/pricing/serialize.d.ts +55 -0
- package/dist/core/pricing/serialize.d.ts.map +1 -0
- package/dist/core/pricing/serialize.js +127 -0
- package/dist/core/pricing/serialize.js.map +1 -0
- package/dist/core/pricing/types.d.ts +122 -0
- package/dist/core/pricing/types.d.ts.map +1 -0
- package/dist/core/pricing/types.js +17 -0
- package/dist/core/pricing/types.js.map +1 -0
- package/dist/core/pricing/validate.d.ts +56 -0
- package/dist/core/pricing/validate.d.ts.map +1 -0
- package/dist/core/pricing/validate.js +162 -0
- package/dist/core/pricing/validate.js.map +1 -0
- package/dist/core/scrawn.d.ts +398 -0
- package/dist/core/scrawn.d.ts.map +1 -0
- package/dist/core/scrawn.js +729 -0
- package/dist/core/scrawn.js.map +1 -0
- package/dist/core/types/auth.d.ts +31 -0
- package/dist/core/types/auth.d.ts.map +1 -0
- package/dist/core/types/auth.js +2 -0
- package/dist/core/types/auth.js.map +1 -0
- package/dist/core/types/event.d.ts +283 -0
- package/dist/core/types/event.d.ts.map +1 -0
- package/dist/core/types/event.js +143 -0
- package/dist/core/types/event.js.map +1 -0
- package/dist/gen/auth/v1/auth_grpc_pb.d.ts +3 -0
- package/dist/gen/auth/v1/auth_pb.d.ts +65 -0
- package/dist/gen/data/v1/data_grpc_pb.d.ts +5 -0
- package/dist/gen/data/v1/data_pb.d.ts +254 -0
- package/dist/gen/event/v1/event_grpc_pb.d.ts +3 -0
- package/dist/gen/event/v1/event_pb.d.ts +278 -0
- package/dist/gen/payment/v1/payment_grpc_pb.d.ts +3 -0
- package/dist/gen/payment/v1/payment_pb.d.ts +45 -0
- package/dist/gen/query/v1/query_grpc_pb.d.ts +5 -0
- package/dist/gen/query/v1/query_pb.d.ts +359 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/forkAsyncIterable.d.ts +13 -0
- package/dist/utils/forkAsyncIterable.d.ts.map +1 -0
- package/dist/utils/forkAsyncIterable.js +78 -0
- package/dist/utils/forkAsyncIterable.js.map +1 -0
- package/dist/utils/logger.d.ts +10 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +62 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/pathMatcher.d.ts +25 -0
- package/dist/utils/pathMatcher.d.ts.map +1 -0
- package/dist/utils/pathMatcher.js +46 -0
- package/dist/utils/pathMatcher.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comprehensive error handling system for the Scrawn SDK.
|
|
3
|
+
*
|
|
4
|
+
* Provides structured error classes with rich metadata for better debugging
|
|
5
|
+
* and error handling by SDK consumers.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* try {
|
|
10
|
+
* await scrawn.sdkCallEventConsumer({ ... });
|
|
11
|
+
* } catch (error) {
|
|
12
|
+
* if (error instanceof ScrawnAuthenticationError) {
|
|
13
|
+
* console.error('Auth failed:', error.message);
|
|
14
|
+
* // Refresh API key
|
|
15
|
+
* } else if (error instanceof ScrawnNetworkError && error.retryable) {
|
|
16
|
+
* // Retry the request
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Base error class for all Scrawn SDK errors.
|
|
23
|
+
* Extends native Error with additional metadata fields.
|
|
24
|
+
*/
|
|
25
|
+
export class ScrawnError extends Error {
|
|
26
|
+
constructor(message, options) {
|
|
27
|
+
super(message);
|
|
28
|
+
this.name = "ScrawnError";
|
|
29
|
+
this.code = options.code;
|
|
30
|
+
this.retryable = options.retryable ?? false;
|
|
31
|
+
this.statusCode = options.statusCode;
|
|
32
|
+
this.requestId = options.requestId;
|
|
33
|
+
this.details = options.details;
|
|
34
|
+
this.cause = options.cause;
|
|
35
|
+
// Maintains proper stack trace for where our error was thrown
|
|
36
|
+
if (Error.captureStackTrace) {
|
|
37
|
+
Error.captureStackTrace(this, this.constructor);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Convert error to a plain object for logging/serialization.
|
|
42
|
+
*/
|
|
43
|
+
// fallow-ignore-next-line unused-class-member
|
|
44
|
+
toJSON() {
|
|
45
|
+
return {
|
|
46
|
+
name: this.name,
|
|
47
|
+
code: this.code,
|
|
48
|
+
message: this.message,
|
|
49
|
+
retryable: this.retryable,
|
|
50
|
+
statusCode: this.statusCode,
|
|
51
|
+
requestId: this.requestId,
|
|
52
|
+
details: this.details,
|
|
53
|
+
stack: this.stack,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Authentication or authorization error (401, 403).
|
|
59
|
+
* Thrown when API key is invalid, expired, or lacks permissions.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* throw new ScrawnAuthenticationError('Invalid API key', {
|
|
64
|
+
* statusCode: 401,
|
|
65
|
+
* requestId: 'req_123'
|
|
66
|
+
* });
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export class ScrawnAuthenticationError extends ScrawnError {
|
|
70
|
+
constructor(message, options) {
|
|
71
|
+
super(message, {
|
|
72
|
+
code: "AUTHENTICATION_ERROR",
|
|
73
|
+
retryable: false,
|
|
74
|
+
statusCode: options?.statusCode ?? 401,
|
|
75
|
+
requestId: options?.requestId,
|
|
76
|
+
details: options?.details,
|
|
77
|
+
cause: options?.cause,
|
|
78
|
+
});
|
|
79
|
+
this.name = "ScrawnAuthenticationError";
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Validation error (400).
|
|
84
|
+
* Thrown when request payload fails validation.
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* throw new ScrawnValidationError('Invalid userId', {
|
|
89
|
+
* details: { field: 'userId', constraint: 'non-empty' }
|
|
90
|
+
* });
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export class ScrawnValidationError extends ScrawnError {
|
|
94
|
+
constructor(message, options) {
|
|
95
|
+
super(message, {
|
|
96
|
+
code: "VALIDATION_ERROR",
|
|
97
|
+
retryable: false,
|
|
98
|
+
statusCode: 400,
|
|
99
|
+
requestId: options?.requestId,
|
|
100
|
+
details: options?.details,
|
|
101
|
+
cause: options?.cause,
|
|
102
|
+
});
|
|
103
|
+
this.name = "ScrawnValidationError";
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Rate limit error (429).
|
|
108
|
+
* Thrown when API rate limits are exceeded.
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* throw new ScrawnRateLimitError('Rate limit exceeded', {
|
|
113
|
+
* details: { retryAfter: 60 }
|
|
114
|
+
* });
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
export class ScrawnRateLimitError extends ScrawnError {
|
|
118
|
+
constructor(message, options) {
|
|
119
|
+
super(message, {
|
|
120
|
+
code: "RATE_LIMIT_ERROR",
|
|
121
|
+
retryable: true,
|
|
122
|
+
statusCode: 429,
|
|
123
|
+
requestId: options?.requestId,
|
|
124
|
+
details: options?.details,
|
|
125
|
+
cause: options?.cause,
|
|
126
|
+
});
|
|
127
|
+
this.name = "ScrawnRateLimitError";
|
|
128
|
+
this.retryAfter = options?.retryAfter;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Network-related error (timeout, connection failure, DNS issues).
|
|
133
|
+
* These are typically retryable.
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ```typescript
|
|
137
|
+
* throw new ScrawnNetworkError('Connection timeout', {
|
|
138
|
+
* cause: originalError,
|
|
139
|
+
* details: { timeout: 30000 }
|
|
140
|
+
* });
|
|
141
|
+
* ```
|
|
142
|
+
*/
|
|
143
|
+
export class ScrawnNetworkError extends ScrawnError {
|
|
144
|
+
constructor(message, options) {
|
|
145
|
+
super(message, {
|
|
146
|
+
code: "NETWORK_ERROR",
|
|
147
|
+
retryable: true,
|
|
148
|
+
requestId: options?.requestId,
|
|
149
|
+
details: options?.details,
|
|
150
|
+
cause: options?.cause,
|
|
151
|
+
});
|
|
152
|
+
this.name = "ScrawnNetworkError";
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* API error from the Scrawn backend (5xx or other server errors).
|
|
157
|
+
* May be retryable depending on status code.
|
|
158
|
+
*
|
|
159
|
+
* @example
|
|
160
|
+
* ```typescript
|
|
161
|
+
* throw new ScrawnAPIError('Internal server error', {
|
|
162
|
+
* statusCode: 500,
|
|
163
|
+
* retryable: true,
|
|
164
|
+
* requestId: 'req_123'
|
|
165
|
+
* });
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
export class ScrawnAPIError extends ScrawnError {
|
|
169
|
+
constructor(message, options) {
|
|
170
|
+
super(message, {
|
|
171
|
+
code: "API_ERROR",
|
|
172
|
+
retryable: options.retryable ?? options.statusCode >= 500,
|
|
173
|
+
statusCode: options.statusCode,
|
|
174
|
+
requestId: options.requestId,
|
|
175
|
+
details: options.details,
|
|
176
|
+
cause: options.cause,
|
|
177
|
+
});
|
|
178
|
+
this.name = "ScrawnAPIError";
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Configuration error (invalid SDK initialization or settings).
|
|
183
|
+
* Not retryable - requires code changes.
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```typescript
|
|
187
|
+
* throw new ScrawnConfigError('Invalid baseURL format', {
|
|
188
|
+
* details: { baseURL: 'invalid-url' }
|
|
189
|
+
* });
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
export class ScrawnConfigError extends ScrawnError {
|
|
193
|
+
constructor(message, options) {
|
|
194
|
+
super(message, {
|
|
195
|
+
code: "CONFIG_ERROR",
|
|
196
|
+
retryable: false,
|
|
197
|
+
details: options?.details,
|
|
198
|
+
cause: options?.cause,
|
|
199
|
+
});
|
|
200
|
+
this.name = "ScrawnConfigError";
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Helper function to convert gRPC errors to Scrawn errors.
|
|
205
|
+
* Maps gRPC status codes to appropriate Scrawn error types.
|
|
206
|
+
*
|
|
207
|
+
* @internal
|
|
208
|
+
*/
|
|
209
|
+
export function convertGrpcError(error, requestId) {
|
|
210
|
+
const message = error instanceof Error ? error.message : "Unknown error occurred";
|
|
211
|
+
// Handle @grpc/grpc-js ServiceError
|
|
212
|
+
if (error && typeof error === "object" && "code" in error) {
|
|
213
|
+
const code = error.code;
|
|
214
|
+
const details = "details" in error ? error.details : undefined;
|
|
215
|
+
const fullMessage = details ? `${message}: ${details}` : message;
|
|
216
|
+
// @grpc/grpc-js status codes: https://grpc.github.io/grpc/core/md_status_codes.html
|
|
217
|
+
switch (code) {
|
|
218
|
+
case 16: // UNAUTHENTICATED
|
|
219
|
+
case 7: // PERMISSION_DENIED
|
|
220
|
+
return new ScrawnAuthenticationError(fullMessage, {
|
|
221
|
+
statusCode: code === 16 ? 401 : 403,
|
|
222
|
+
requestId,
|
|
223
|
+
cause: error,
|
|
224
|
+
});
|
|
225
|
+
case 3: // INVALID_ARGUMENT
|
|
226
|
+
return new ScrawnValidationError(fullMessage, {
|
|
227
|
+
requestId,
|
|
228
|
+
cause: error,
|
|
229
|
+
});
|
|
230
|
+
case 8: // RESOURCE_EXHAUSTED (rate limit)
|
|
231
|
+
return new ScrawnRateLimitError(fullMessage, {
|
|
232
|
+
requestId,
|
|
233
|
+
cause: error,
|
|
234
|
+
});
|
|
235
|
+
case 14: // UNAVAILABLE
|
|
236
|
+
case 4: // DEADLINE_EXCEEDED
|
|
237
|
+
return new ScrawnNetworkError(fullMessage, {
|
|
238
|
+
requestId,
|
|
239
|
+
details: { grpcCode: code },
|
|
240
|
+
cause: error,
|
|
241
|
+
});
|
|
242
|
+
case 13: // INTERNAL
|
|
243
|
+
case 2: // UNKNOWN
|
|
244
|
+
case 12: // UNIMPLEMENTED
|
|
245
|
+
return new ScrawnAPIError(fullMessage, {
|
|
246
|
+
statusCode: 500,
|
|
247
|
+
retryable: code !== 12,
|
|
248
|
+
requestId,
|
|
249
|
+
details: { grpcCode: code },
|
|
250
|
+
cause: error,
|
|
251
|
+
});
|
|
252
|
+
default:
|
|
253
|
+
return new ScrawnAPIError(fullMessage, {
|
|
254
|
+
statusCode: 500,
|
|
255
|
+
retryable: false,
|
|
256
|
+
requestId,
|
|
257
|
+
details: { grpcCode: code },
|
|
258
|
+
cause: error,
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
// Fallback for unknown error types
|
|
263
|
+
return new ScrawnNetworkError(message, {
|
|
264
|
+
requestId,
|
|
265
|
+
cause: error instanceof Error ? error : undefined,
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Helper to check if an error is a Scrawn error.
|
|
270
|
+
*/
|
|
271
|
+
export function isScrawnError(error) {
|
|
272
|
+
return error instanceof ScrawnError;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Helper to check if an error is retryable.
|
|
276
|
+
*/
|
|
277
|
+
export function isRetryableError(error) {
|
|
278
|
+
return isScrawnError(error) && error.retryable;
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/errors/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as grpc from "@grpc/grpc-js";
|
|
2
|
+
import { ScrawnLogger } from "../../utils/logger.js";
|
|
3
|
+
export declare class GrpcCallContext<C extends grpc.ServiceClientConstructor> {
|
|
4
|
+
readonly ClientConstructor: C;
|
|
5
|
+
readonly methodName: string;
|
|
6
|
+
readonly target: string;
|
|
7
|
+
readonly credentials: grpc.ChannelCredentials;
|
|
8
|
+
readonly log: ScrawnLogger;
|
|
9
|
+
private readonly metadata;
|
|
10
|
+
constructor(target: string, credentials: grpc.ChannelCredentials, ClientConstructor: C, methodName: string, loggerName: string);
|
|
11
|
+
addMetadata(key: string, value: string): void;
|
|
12
|
+
getMetadata(): grpc.Metadata;
|
|
13
|
+
getServiceName(): string;
|
|
14
|
+
logCallStart(): void;
|
|
15
|
+
logCallSuccess(): void;
|
|
16
|
+
logCallError(error: unknown): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=callContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callContext.d.ts","sourceRoot":"","sources":["../../../src/core/grpc/callContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,qBAAa,eAAe,CAAC,CAAC,SAAS,IAAI,CAAC,wBAAwB;IAClE,SAAgB,iBAAiB,EAAE,CAAC,CAAC;IACrC,SAAgB,UAAU,EAAE,MAAM,CAAC;IACnC,SAAgB,MAAM,EAAE,MAAM,CAAC;IAC/B,SAAgB,WAAW,EAAE,IAAI,CAAC,kBAAkB,CAAC;IACrD,SAAgB,GAAG,EAAE,YAAY,CAAC;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;gBAG9C,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,IAAI,CAAC,kBAAkB,EACpC,iBAAiB,EAAE,CAAC,EACpB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM;IASpB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI7C,WAAW,IAAI,IAAI,CAAC,QAAQ;IAQ5B,cAAc,IAAI,MAAM;IAIxB,YAAY,IAAI,IAAI;IAMpB,cAAc,IAAI,IAAI;IAMtB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;CAKnC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as grpc from "@grpc/grpc-js";
|
|
2
|
+
import { ScrawnLogger } from "../../utils/logger.js";
|
|
3
|
+
export class GrpcCallContext {
|
|
4
|
+
constructor(target, credentials, ClientConstructor, methodName, loggerName) {
|
|
5
|
+
this.metadata = new grpc.Metadata();
|
|
6
|
+
this.target = target;
|
|
7
|
+
this.credentials = credentials;
|
|
8
|
+
this.ClientConstructor = ClientConstructor;
|
|
9
|
+
this.methodName = methodName;
|
|
10
|
+
this.log = new ScrawnLogger(loggerName);
|
|
11
|
+
}
|
|
12
|
+
addMetadata(key, value) {
|
|
13
|
+
this.metadata.set(key, value);
|
|
14
|
+
}
|
|
15
|
+
getMetadata() {
|
|
16
|
+
const copy = new grpc.Metadata();
|
|
17
|
+
for (const [key, values] of Object.entries(this.metadata.getMap())) {
|
|
18
|
+
copy.set(key, values);
|
|
19
|
+
}
|
|
20
|
+
return copy;
|
|
21
|
+
}
|
|
22
|
+
getServiceName() {
|
|
23
|
+
return this.ClientConstructor.serviceName;
|
|
24
|
+
}
|
|
25
|
+
logCallStart() {
|
|
26
|
+
this.log.info(`Making gRPC call to ${this.getServiceName()}.${this.methodName}`);
|
|
27
|
+
}
|
|
28
|
+
logCallSuccess() {
|
|
29
|
+
this.log.info(`Successfully completed gRPC call to ${this.getServiceName()}.${this.methodName}`);
|
|
30
|
+
}
|
|
31
|
+
logCallError(error) {
|
|
32
|
+
this.log.error(`gRPC call to ${this.getServiceName()}.${this.methodName} failed: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=callContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callContext.js","sourceRoot":"","sources":["../../../src/core/grpc/callContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,OAAO,eAAe;IAQ1B,YACE,MAAc,EACd,WAAoC,EACpC,iBAAoB,EACpB,UAAkB,EAClB,UAAkB;QAPH,aAAQ,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAS9C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,GAAG,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IAED,WAAW,CAAC,GAAW,EAAE,KAAa;QACpC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,WAAW;QACT,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YACnE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC;IAC5C,CAAC;IAED,YAAY;QACV,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,uBAAuB,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAClE,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,uCAAuC,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,CAClF,CAAC;IACJ,CAAC;IAED,YAAY,CAAC,KAAc;QACzB,IAAI,CAAC,GAAG,CAAC,KAAK,CACZ,gBAAgB,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,UAAU,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAC/H,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as grpc from "@grpc/grpc-js";
|
|
2
|
+
import { RequestBuilder } from "./requestBuilder.js";
|
|
3
|
+
import { StreamRequestBuilder } from "./streamRequestBuilder.js";
|
|
4
|
+
export interface GrpcClientOptions {
|
|
5
|
+
secure?: boolean;
|
|
6
|
+
credentials?: grpc.ChannelCredentials;
|
|
7
|
+
}
|
|
8
|
+
export declare class GrpcClient {
|
|
9
|
+
private readonly target;
|
|
10
|
+
private readonly credentials;
|
|
11
|
+
constructor(target: string, options?: GrpcClientOptions);
|
|
12
|
+
newCall<C extends grpc.ServiceClientConstructor>(client: C, method: string): RequestBuilder<C>;
|
|
13
|
+
newStreamCall<C extends grpc.ServiceClientConstructor>(client: C, method: string): StreamRequestBuilder<C>;
|
|
14
|
+
getTarget(): string;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/core/grpc/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAKjE,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,IAAI,CAAC,kBAAkB,CAAC;CACvC;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;gBAE1C,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB;IAmBvD,OAAO,CAAC,CAAC,SAAS,IAAI,CAAC,wBAAwB,EAC7C,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,MAAM,GACb,cAAc,CAAC,CAAC,CAAC;IAMpB,aAAa,CAAC,CAAC,SAAS,IAAI,CAAC,wBAAwB,EACnD,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,MAAM,GACb,oBAAoB,CAAC,CAAC,CAAC;IAM1B,SAAS,IAAI,MAAM;CAGpB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as grpc from "@grpc/grpc-js";
|
|
2
|
+
import { GrpcCallContext } from "./callContext.js";
|
|
3
|
+
import { RequestBuilder } from "./requestBuilder.js";
|
|
4
|
+
import { StreamRequestBuilder } from "./streamRequestBuilder.js";
|
|
5
|
+
import { ScrawnLogger } from "../../utils/logger.js";
|
|
6
|
+
const log = new ScrawnLogger("GrpcClient");
|
|
7
|
+
export class GrpcClient {
|
|
8
|
+
constructor(target, options) {
|
|
9
|
+
if (!target || !target.includes(":")) {
|
|
10
|
+
throw new Error(`Invalid target format: ${target}. Expected host:port format.`);
|
|
11
|
+
}
|
|
12
|
+
this.target = target;
|
|
13
|
+
this.credentials =
|
|
14
|
+
options?.credentials ??
|
|
15
|
+
(options?.secure
|
|
16
|
+
? grpc.credentials.createSsl()
|
|
17
|
+
: grpc.credentials.createInsecure());
|
|
18
|
+
log.info(`Initialized gRPC client for ${target} (${options?.secure ? "secure" : "insecure"})`);
|
|
19
|
+
}
|
|
20
|
+
newCall(client, method) {
|
|
21
|
+
return new RequestBuilder(new GrpcCallContext(this.target, this.credentials, client, method, "RequestBuilder"));
|
|
22
|
+
}
|
|
23
|
+
newStreamCall(client, method) {
|
|
24
|
+
return new StreamRequestBuilder(new GrpcCallContext(this.target, this.credentials, client, method, "StreamRequestBuilder"));
|
|
25
|
+
}
|
|
26
|
+
getTarget() {
|
|
27
|
+
return this.target;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/core/grpc/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC;AAO3C,MAAM,OAAO,UAAU;IAIrB,YAAY,MAAc,EAAE,OAA2B;QACrD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CACb,0BAA0B,MAAM,8BAA8B,CAC/D,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW;YACd,OAAO,EAAE,WAAW;gBACpB,CAAC,OAAO,EAAE,MAAM;oBACd,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;oBAC9B,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC,CAAC;QAEzC,GAAG,CAAC,IAAI,CACN,+BAA+B,MAAM,KAAK,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,GAAG,CACrF,CAAC;IACJ,CAAC;IAED,OAAO,CACL,MAAS,EACT,MAAc;QAEd,OAAO,IAAI,cAAc,CACvB,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,CACrF,CAAC;IACJ,CAAC;IAED,aAAa,CACX,MAAS,EACT,MAAc;QAEd,OAAO,IAAI,oBAAoB,CAC7B,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAC3F,CAAC;IACJ,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* gRPC abstraction layer - Type-safe fluent API for gRPC calls.
|
|
3
|
+
*
|
|
4
|
+
* This module provides a beautiful, type-safe interface for making gRPC calls
|
|
5
|
+
* with automatic type inference, compile-time validation, and a fluent API.
|
|
6
|
+
*
|
|
7
|
+
* @module grpc
|
|
8
|
+
*/
|
|
9
|
+
export { GrpcClient, type GrpcClientOptions } from "./client.js";
|
|
10
|
+
export { GrpcCallContext } from "./callContext.js";
|
|
11
|
+
export { RequestBuilder } from "./requestBuilder.js";
|
|
12
|
+
export { StreamRequestBuilder } from "./streamRequestBuilder.js";
|
|
13
|
+
export type { GrpcCallOptions, ServiceMethodName } from "./types.js";
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/grpc/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* gRPC abstraction layer - Type-safe fluent API for gRPC calls.
|
|
3
|
+
*
|
|
4
|
+
* This module provides a beautiful, type-safe interface for making gRPC calls
|
|
5
|
+
* with automatic type inference, compile-time validation, and a fluent API.
|
|
6
|
+
*
|
|
7
|
+
* @module grpc
|
|
8
|
+
*/
|
|
9
|
+
export { GrpcClient } from "./client.js";
|
|
10
|
+
export { GrpcCallContext } from "./callContext.js";
|
|
11
|
+
export { RequestBuilder } from "./requestBuilder.js";
|
|
12
|
+
export { StreamRequestBuilder } from "./streamRequestBuilder.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/grpc/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAA0B,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as grpc from "@grpc/grpc-js";
|
|
2
|
+
import type { GrpcCallOptions } from "./types.js";
|
|
3
|
+
import type { GrpcCallContext } from "./callContext.js";
|
|
4
|
+
export declare class RequestBuilder<C extends grpc.ServiceClientConstructor> {
|
|
5
|
+
private readonly ctx;
|
|
6
|
+
private payload;
|
|
7
|
+
private hasPayload;
|
|
8
|
+
private options;
|
|
9
|
+
constructor(ctx: GrpcCallContext<C>);
|
|
10
|
+
addMetadata(key: string, value: string): this;
|
|
11
|
+
addPayload(payload: unknown): this;
|
|
12
|
+
setOptions(options: GrpcCallOptions): this;
|
|
13
|
+
request<TResponse = unknown>(): Promise<TResponse>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=requestBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestBuilder.d.ts","sourceRoot":"","sources":["../../../src/core/grpc/requestBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,qBAAa,cAAc,CAAC,CAAC,SAAS,IAAI,CAAC,wBAAwB;IACjE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAuB;gBAE1B,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC;IAKnC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7C,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAWlC,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAMpC,OAAO,CAAC,SAAS,GAAG,OAAO,KAAK,OAAO,CAAC,SAAS,CAAC;CA8CzD"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export class RequestBuilder {
|
|
2
|
+
constructor(ctx) {
|
|
3
|
+
this.hasPayload = false;
|
|
4
|
+
this.options = {};
|
|
5
|
+
this.ctx = ctx;
|
|
6
|
+
}
|
|
7
|
+
// fallow-ignore-next-line unused-class-member
|
|
8
|
+
addMetadata(key, value) {
|
|
9
|
+
this.ctx.addMetadata(key, value);
|
|
10
|
+
return this;
|
|
11
|
+
}
|
|
12
|
+
addPayload(payload) {
|
|
13
|
+
if (this.hasPayload) {
|
|
14
|
+
throw new Error("Payload has already been set for this request");
|
|
15
|
+
}
|
|
16
|
+
this.payload = payload;
|
|
17
|
+
this.hasPayload = true;
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
// fallow-ignore-next-line unused-class-member
|
|
21
|
+
setOptions(options) {
|
|
22
|
+
this.options = { ...this.options, ...options };
|
|
23
|
+
return this;
|
|
24
|
+
}
|
|
25
|
+
// fallow-ignore-next-line unused-class-member
|
|
26
|
+
async request() {
|
|
27
|
+
if (!this.hasPayload) {
|
|
28
|
+
throw new Error("Cannot make request without payload. Call addPayload() first.");
|
|
29
|
+
}
|
|
30
|
+
this.ctx.logCallStart();
|
|
31
|
+
try {
|
|
32
|
+
const client = new this.ctx.ClientConstructor(this.ctx.target, this.ctx.credentials);
|
|
33
|
+
const method = client[this.ctx.methodName];
|
|
34
|
+
const callOptions = {};
|
|
35
|
+
if (this.options.deadline !== undefined) {
|
|
36
|
+
callOptions.deadline = this.options.deadline;
|
|
37
|
+
}
|
|
38
|
+
const response = await new Promise((resolve, reject) => {
|
|
39
|
+
method.call(client, this.payload, this.options.metadata ?? this.ctx.getMetadata(), callOptions, (error, response) => {
|
|
40
|
+
if (error) {
|
|
41
|
+
reject(error);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
resolve(response);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
this.ctx.logCallSuccess();
|
|
48
|
+
return response;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
this.ctx.logCallError(error);
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=requestBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestBuilder.js","sourceRoot":"","sources":["../../../src/core/grpc/requestBuilder.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,cAAc;IAMzB,YAAY,GAAuB;QAH3B,eAAU,GAAG,KAAK,CAAC;QACnB,YAAO,GAAoB,EAAE,CAAC;QAGpC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,8CAA8C;IAC9C,WAAW,CAAC,GAAW,EAAE,KAAa;QACpC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,OAAgB;QACzB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8CAA8C;IAC9C,UAAU,CAAC,OAAwB;QACjC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8CAA8C;IAC9C,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAExB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAC3C,IAAI,CAAC,GAAG,CAAC,MAAM,EACf,IAAI,CAAC,GAAG,CAAC,WAAW,CACoB,CAAC;YAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAKhC,CAAC;YAEV,MAAM,WAAW,GAAqB,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACxC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC/C,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAChE,MAAM,CAAC,IAAI,CACT,MAAM,EACN,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAC/C,WAAW,EACX,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;oBAClB,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,CAAC,KAAK,CAAC,CAAC;wBACd,OAAO;oBACT,CAAC;oBACD,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACpB,CAAC,CACF,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as grpc from "@grpc/grpc-js";
|
|
2
|
+
import type { GrpcCallOptions } from "./types.js";
|
|
3
|
+
import type { GrpcCallContext } from "./callContext.js";
|
|
4
|
+
export declare class StreamRequestBuilder<C extends grpc.ServiceClientConstructor> {
|
|
5
|
+
private readonly ctx;
|
|
6
|
+
private hasSent;
|
|
7
|
+
private options;
|
|
8
|
+
constructor(ctx: GrpcCallContext<C>);
|
|
9
|
+
addMetadata(key: string, value: string): this;
|
|
10
|
+
setOptions(options: GrpcCallOptions): this;
|
|
11
|
+
stream<TResponse = unknown>(items: AsyncIterable<unknown>): Promise<TResponse>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=streamRequestBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamRequestBuilder.d.ts","sourceRoot":"","sources":["../../../src/core/grpc/streamRequestBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,eAAe,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAExD,qBAAa,oBAAoB,CAAC,CAAC,SAAS,IAAI,CAAC,wBAAwB;IACvE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqB;IACzC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAuB;gBAE1B,GAAG,EAAE,eAAe,CAAC,CAAC,CAAC;IAKnC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7C,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAMpC,MAAM,CAAC,SAAS,GAAG,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;CAyDrF"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
export class StreamRequestBuilder {
|
|
2
|
+
constructor(ctx) {
|
|
3
|
+
this.hasSent = false;
|
|
4
|
+
this.options = {};
|
|
5
|
+
this.ctx = ctx;
|
|
6
|
+
}
|
|
7
|
+
// fallow-ignore-next-line unused-class-member
|
|
8
|
+
addMetadata(key, value) {
|
|
9
|
+
this.ctx.addMetadata(key, value);
|
|
10
|
+
return this;
|
|
11
|
+
}
|
|
12
|
+
// fallow-ignore-next-line unused-class-member
|
|
13
|
+
setOptions(options) {
|
|
14
|
+
this.options = { ...this.options, ...options };
|
|
15
|
+
return this;
|
|
16
|
+
}
|
|
17
|
+
// fallow-ignore-next-line unused-class-member
|
|
18
|
+
async stream(items) {
|
|
19
|
+
if (this.hasSent) {
|
|
20
|
+
throw new Error("Stream has already been sent for this request");
|
|
21
|
+
}
|
|
22
|
+
this.hasSent = true;
|
|
23
|
+
this.ctx.logCallStart();
|
|
24
|
+
try {
|
|
25
|
+
const client = new this.ctx.ClientConstructor(this.ctx.target, this.ctx.credentials);
|
|
26
|
+
const method = client[this.ctx.methodName];
|
|
27
|
+
const callOptions = {};
|
|
28
|
+
if (this.options.deadline !== undefined) {
|
|
29
|
+
callOptions.deadline = this.options.deadline;
|
|
30
|
+
}
|
|
31
|
+
const response = await new Promise((resolve, reject) => {
|
|
32
|
+
const stream = method.call(client, this.options.metadata ?? this.ctx.getMetadata(), callOptions, (error, result) => {
|
|
33
|
+
if (error) {
|
|
34
|
+
reject(error);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
resolve(result);
|
|
38
|
+
});
|
|
39
|
+
(async () => {
|
|
40
|
+
try {
|
|
41
|
+
for await (const item of items) {
|
|
42
|
+
stream.write(item);
|
|
43
|
+
}
|
|
44
|
+
stream.end();
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
stream.destroy(error);
|
|
48
|
+
}
|
|
49
|
+
})();
|
|
50
|
+
});
|
|
51
|
+
this.ctx.logCallSuccess();
|
|
52
|
+
return response;
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
this.ctx.logCallError(error);
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=streamRequestBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamRequestBuilder.js","sourceRoot":"","sources":["../../../src/core/grpc/streamRequestBuilder.ts"],"names":[],"mappings":"AAIA,MAAM,OAAO,oBAAoB;IAK/B,YAAY,GAAuB;QAH3B,YAAO,GAAG,KAAK,CAAC;QAChB,YAAO,GAAoB,EAAE,CAAC;QAGpC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,8CAA8C;IAC9C,WAAW,CAAC,GAAW,EAAE,KAAa;QACpC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8CAA8C;IAC9C,UAAU,CAAC,OAAwB;QACjC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8CAA8C;IAC9C,KAAK,CAAC,MAAM,CAAsB,KAA6B;QAC7D,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;QAExB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAC3C,IAAI,CAAC,GAAG,CAAC,MAAM,EACf,IAAI,CAAC,GAAG,CAAC,WAAW,CACoB,CAAC;YAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAIF,CAAC;YAExC,MAAM,WAAW,GAAqB,EAAE,CAAC;YACzC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACxC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC/C,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAChE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CACxB,MAAM,EACN,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAC/C,WAAW,EACX,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;oBAChB,IAAI,KAAK,EAAE,CAAC;wBACV,MAAM,CAAC,KAAK,CAAC,CAAC;wBACd,OAAO;oBACT,CAAC;oBACD,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClB,CAAC,CACF,CAAC;gBAEF,CAAC,KAAK,IAAI,EAAE;oBACV,IAAI,CAAC;wBACH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;4BAC/B,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBACrB,CAAC;wBACD,MAAM,CAAC,GAAG,EAAE,CAAC;oBACf,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,MAAM,CAAC,OAAO,CAAC,KAAc,CAAC,CAAC;oBACjC,CAAC;gBACH,CAAC,CAAC,EAAE,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;YAC1B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/grpc/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,IAAI,MAAM,eAAe,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;IACzB,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC;CAC1B;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/grpc/types.ts"],"names":[],"mappings":""}
|