@forklaunch/core 0.14.8 → 0.14.9
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/lib/http/index.d.mts +1 -1
- package/lib/http/index.d.ts +1 -1
- package/lib/http/index.js +77 -67
- package/lib/http/index.js.map +1 -1
- package/lib/http/index.mjs +33 -23
- package/lib/http/index.mjs.map +1 -1
- package/package.json +3 -3
package/lib/http/index.d.mts
CHANGED
@@ -1698,7 +1698,7 @@ declare function isPortBound(port: number, host?: string): Promise<boolean>;
|
|
1698
1698
|
declare function createHmacToken({ method, path, body, timestamp, nonce, secretKey }: {
|
1699
1699
|
method: string;
|
1700
1700
|
path: string;
|
1701
|
-
body
|
1701
|
+
body?: unknown;
|
1702
1702
|
timestamp: string;
|
1703
1703
|
nonce: string;
|
1704
1704
|
secretKey: string;
|
package/lib/http/index.d.ts
CHANGED
@@ -1698,7 +1698,7 @@ declare function isPortBound(port: number, host?: string): Promise<boolean>;
|
|
1698
1698
|
declare function createHmacToken({ method, path, body, timestamp, nonce, secretKey }: {
|
1699
1699
|
method: string;
|
1700
1700
|
path: string;
|
1701
|
-
body
|
1701
|
+
body?: unknown;
|
1702
1702
|
timestamp: string;
|
1703
1703
|
nonce: string;
|
1704
1704
|
secretKey: string;
|
package/lib/http/index.js
CHANGED
@@ -102,7 +102,7 @@ function cors(corsOptions) {
|
|
102
102
|
}
|
103
103
|
|
104
104
|
// src/http/router/expressLikeRouter.ts
|
105
|
-
var
|
105
|
+
var import_common9 = require("@forklaunch/common");
|
106
106
|
|
107
107
|
// src/http/guards/hasVersionedSchema.ts
|
108
108
|
function hasVersionedSchema(contractDetails) {
|
@@ -157,12 +157,13 @@ function isTypedHandler(maybeTypedHandler) {
|
|
157
157
|
}
|
158
158
|
|
159
159
|
// src/http/middleware/request/auth.middleware.ts
|
160
|
-
var
|
160
|
+
var import_common3 = require("@forklaunch/common");
|
161
161
|
|
162
162
|
// src/http/discriminateAuthMethod.ts
|
163
163
|
var import_jose = require("jose");
|
164
164
|
|
165
165
|
// src/http/createHmacToken.ts
|
166
|
+
var import_common2 = require("@forklaunch/common");
|
166
167
|
var import_crypto = require("crypto");
|
167
168
|
function createHmacToken({
|
168
169
|
method,
|
@@ -173,10 +174,11 @@ function createHmacToken({
|
|
173
174
|
secretKey
|
174
175
|
}) {
|
175
176
|
const hmac = (0, import_crypto.createHmac)("sha256", secretKey);
|
177
|
+
const bodyString = body ? `${(0, import_common2.safeStringify)(body)}
|
178
|
+
` : void 0;
|
176
179
|
hmac.update(`${method}
|
177
180
|
${path}
|
178
|
-
${
|
179
|
-
${timestamp}
|
181
|
+
${bodyString}${timestamp}
|
180
182
|
${nonce}`);
|
181
183
|
return hmac.digest("base64");
|
182
184
|
}
|
@@ -249,7 +251,15 @@ async function discriminateAuthMethod(auth) {
|
|
249
251
|
type: "hmac",
|
250
252
|
auth: {
|
251
253
|
secretKeys: auth.hmac.secretKeys,
|
252
|
-
verificationFunction: async (
|
254
|
+
verificationFunction: async ({
|
255
|
+
method,
|
256
|
+
path,
|
257
|
+
body,
|
258
|
+
timestamp,
|
259
|
+
nonce,
|
260
|
+
signature,
|
261
|
+
secretKey
|
262
|
+
}) => {
|
253
263
|
return createHmacToken({
|
254
264
|
method,
|
255
265
|
path,
|
@@ -362,15 +372,15 @@ async function checkAuthorizationToken(authorizationMethod, globalOptions, autho
|
|
362
372
|
if (!parsedKeyId || !parsedTimestamp || !parsedNonce || !parsedSignature) {
|
363
373
|
return invalidAuthorizationTokenFormat;
|
364
374
|
}
|
365
|
-
const verificationResult = await auth.verificationFunction(
|
366
|
-
req?.method ?? "",
|
367
|
-
req?.path ?? "",
|
368
|
-
|
369
|
-
parsedTimestamp,
|
370
|
-
parsedNonce,
|
371
|
-
parsedSignature,
|
372
|
-
collapsedAuthorizationMethod.hmac.secretKeys[parsedKeyId]
|
373
|
-
);
|
375
|
+
const verificationResult = await auth.verificationFunction({
|
376
|
+
method: req?.method ?? "",
|
377
|
+
path: req?.path ?? "",
|
378
|
+
body: req?.body,
|
379
|
+
timestamp: parsedTimestamp,
|
380
|
+
nonce: parsedNonce,
|
381
|
+
signature: parsedSignature,
|
382
|
+
secretKey: collapsedAuthorizationMethod.hmac.secretKeys[parsedKeyId]
|
383
|
+
});
|
374
384
|
if (!verificationResult) {
|
375
385
|
return invalidAuthorizationSignature;
|
376
386
|
}
|
@@ -416,7 +426,7 @@ async function checkAuthorizationToken(authorizationMethod, globalOptions, autho
|
|
416
426
|
break;
|
417
427
|
}
|
418
428
|
default:
|
419
|
-
(0,
|
429
|
+
(0, import_common3.isNever)(type);
|
420
430
|
return [401, "Invalid Authorization method."];
|
421
431
|
}
|
422
432
|
if (isHmacMethod(collapsedAuthorizationMethod) && resourceId == null) {
|
@@ -503,7 +513,7 @@ async function parseRequestAuth(req, res, next) {
|
|
503
513
|
}
|
504
514
|
|
505
515
|
// src/http/middleware/request/createContext.middleware.ts
|
506
|
-
var
|
516
|
+
var import_common4 = require("@forklaunch/common");
|
507
517
|
var import_api = require("@opentelemetry/api");
|
508
518
|
var import_uuid = require("uuid");
|
509
519
|
|
@@ -530,7 +540,7 @@ function createContext(schemaValidator) {
|
|
530
540
|
req.context.span?.setAttribute(ATTR_CORRELATION_ID, correlationId);
|
531
541
|
req.context.span?.setAttribute(
|
532
542
|
import_semantic_conventions.ATTR_SERVICE_NAME,
|
533
|
-
(0,
|
543
|
+
(0, import_common4.getEnvVar)("OTEL_SERVICE_NAME")
|
534
544
|
);
|
535
545
|
}
|
536
546
|
next?.();
|
@@ -538,10 +548,10 @@ function createContext(schemaValidator) {
|
|
538
548
|
}
|
539
549
|
|
540
550
|
// src/http/middleware/request/enrichDetails.middleware.ts
|
541
|
-
var
|
551
|
+
var import_common7 = require("@forklaunch/common");
|
542
552
|
|
543
553
|
// src/http/telemetry/openTelemetryCollector.ts
|
544
|
-
var
|
554
|
+
var import_common6 = require("@forklaunch/common");
|
545
555
|
var import_opentelemetry_instrumentation_hyper_express = require("@forklaunch/opentelemetry-instrumentation-hyper-express");
|
546
556
|
var import_api3 = require("@opentelemetry/api");
|
547
557
|
var import_exporter_logs_otlp_http = require("@opentelemetry/exporter-logs-otlp-http");
|
@@ -562,7 +572,7 @@ function isForklaunchRequest(request) {
|
|
562
572
|
}
|
563
573
|
|
564
574
|
// src/http/telemetry/pinoLogger.ts
|
565
|
-
var
|
575
|
+
var import_common5 = require("@forklaunch/common");
|
566
576
|
var import_api2 = require("@opentelemetry/api");
|
567
577
|
var import_api_logs = require("@opentelemetry/api-logs");
|
568
578
|
var import_pino = __toESM(require("pino"));
|
@@ -594,7 +604,7 @@ function mapSeverity(level) {
|
|
594
604
|
case "fatal":
|
595
605
|
return 21;
|
596
606
|
default:
|
597
|
-
(0,
|
607
|
+
(0, import_common5.isNever)(level);
|
598
608
|
return 0;
|
599
609
|
}
|
600
610
|
}
|
@@ -787,24 +797,24 @@ var OpenTelemetryCollector = class {
|
|
787
797
|
return this.metrics[metricId];
|
788
798
|
}
|
789
799
|
};
|
790
|
-
import_dotenv.default.config({ path: (0,
|
800
|
+
import_dotenv.default.config({ path: (0, import_common6.getEnvVar)("DOTENV_FILE_PATH") });
|
791
801
|
new import_sdk_node.NodeSDK({
|
792
802
|
resource: (0, import_resources.resourceFromAttributes)({
|
793
|
-
[import_semantic_conventions2.ATTR_SERVICE_NAME]: (0,
|
803
|
+
[import_semantic_conventions2.ATTR_SERVICE_NAME]: (0, import_common6.getEnvVar)("OTEL_SERVICE_NAME")
|
794
804
|
}),
|
795
805
|
traceExporter: new import_exporter_trace_otlp_http.OTLPTraceExporter({
|
796
|
-
url: `${(0,
|
806
|
+
url: `${(0, import_common6.getEnvVar)("OTEL_EXPORTER_OTLP_ENDPOINT") ?? "http://localhost:4318"}/v1/traces`
|
797
807
|
}),
|
798
808
|
metricReader: new import_sdk_metrics.PeriodicExportingMetricReader({
|
799
809
|
exporter: new import_exporter_metrics_otlp_http.OTLPMetricExporter({
|
800
|
-
url: `${(0,
|
810
|
+
url: `${(0, import_common6.getEnvVar)("OTEL_EXPORTER_OTLP_ENDPOINT") ?? "http://localhost:4318"}/v1/metrics`
|
801
811
|
}),
|
802
812
|
exportIntervalMillis: 5e3
|
803
813
|
}),
|
804
814
|
logRecordProcessors: [
|
805
815
|
new import_sdk_logs.BatchLogRecordProcessor(
|
806
816
|
new import_exporter_logs_otlp_http.OTLPLogExporter({
|
807
|
-
url: `${(0,
|
817
|
+
url: `${(0, import_common6.getEnvVar)("OTEL_EXPORTER_OTLP_ENDPOINT") ?? "http://localhost:4318"}/v1/logs`
|
808
818
|
})
|
809
819
|
)
|
810
820
|
],
|
@@ -813,7 +823,7 @@ new import_sdk_node.NodeSDK({
|
|
813
823
|
applyCustomAttributesOnSpan: (span, request) => {
|
814
824
|
span.setAttribute(
|
815
825
|
import_semantic_conventions2.ATTR_SERVICE_NAME,
|
816
|
-
(0,
|
826
|
+
(0, import_common6.getEnvVar)("OTEL_SERVICE_NAME") ?? "unknown"
|
817
827
|
);
|
818
828
|
if (isForklaunchRequest(request)) {
|
819
829
|
span.setAttribute(ATTR_API_NAME, request.contractDetails?.name);
|
@@ -825,10 +835,10 @@ new import_sdk_node.NodeSDK({
|
|
825
835
|
new import_opentelemetry_instrumentation_hyper_express.HyperExpressInstrumentation()
|
826
836
|
]
|
827
837
|
}).start();
|
828
|
-
var httpRequestsTotalCounter = import_api3.metrics.getMeter((0,
|
838
|
+
var httpRequestsTotalCounter = import_api3.metrics.getMeter((0, import_common6.getEnvVar)("OTEL_SERVICE_NAME") || "unknown").createCounter("http_requests_total", {
|
829
839
|
description: "Number of HTTP requests"
|
830
840
|
});
|
831
|
-
var httpServerDurationHistogram = import_api3.metrics.getMeter((0,
|
841
|
+
var httpServerDurationHistogram = import_api3.metrics.getMeter((0, import_common6.getEnvVar)("OTEL_SERVICE_NAME") || "unknown").createHistogram("http_server_duration", {
|
832
842
|
description: "Duration of HTTP server requests",
|
833
843
|
unit: "s"
|
834
844
|
});
|
@@ -848,7 +858,7 @@ function enrichDetails(path, contractDetails, requestSchema, responseSchemas, op
|
|
848
858
|
const [seconds, nanoseconds] = process.hrtime(startTime);
|
849
859
|
const durationMs = seconds + nanoseconds / 1e9;
|
850
860
|
httpServerDurationHistogram.record(durationMs, {
|
851
|
-
[import_semantic_conventions.ATTR_SERVICE_NAME]: (0,
|
861
|
+
[import_semantic_conventions.ATTR_SERVICE_NAME]: (0, import_common7.getEnvVar)("OTEL_SERVICE_NAME") || "unknown",
|
852
862
|
[ATTR_API_NAME]: req.contractDetails?.name || "unknown",
|
853
863
|
[import_semantic_conventions.ATTR_HTTP_REQUEST_METHOD]: req.method,
|
854
864
|
[import_semantic_conventions.ATTR_HTTP_ROUTE]: req.originalPath || "unknown",
|
@@ -860,7 +870,7 @@ function enrichDetails(path, contractDetails, requestSchema, responseSchemas, op
|
|
860
870
|
}
|
861
871
|
|
862
872
|
// src/http/middleware/request/parse.middleware.ts
|
863
|
-
var
|
873
|
+
var import_common8 = require("@forklaunch/common");
|
864
874
|
var import_validator = require("@forklaunch/validator");
|
865
875
|
|
866
876
|
// src/http/guards/hasSend.ts
|
@@ -888,7 +898,7 @@ function parse(req, res, next) {
|
|
888
898
|
let parsedRequest;
|
889
899
|
let collectedParseErrors;
|
890
900
|
if (req.contractDetails.versions) {
|
891
|
-
if ((0,
|
901
|
+
if ((0, import_common8.isRecord)(req.requestSchema)) {
|
892
902
|
let runningParseErrors = "";
|
893
903
|
matchedVersions = [];
|
894
904
|
Object.entries(req.requestSchema).forEach(([version, schema]) => {
|
@@ -1280,13 +1290,13 @@ var ForklaunchExpressLikeRouter = class _ForklaunchExpressLikeRouter {
|
|
1280
1290
|
versionedContractDetails,
|
1281
1291
|
contractDetails.params
|
1282
1292
|
);
|
1283
|
-
if ((0,
|
1293
|
+
if ((0, import_common9.isRecord)(requestSchema)) {
|
1284
1294
|
requestSchema = {
|
1285
1295
|
...requestSchema,
|
1286
1296
|
[version]: versionedRequestSchema
|
1287
1297
|
};
|
1288
1298
|
}
|
1289
|
-
if ((0,
|
1299
|
+
if ((0, import_common9.isRecord)(responseSchemas)) {
|
1290
1300
|
responseSchemas = {
|
1291
1301
|
...responseSchemas,
|
1292
1302
|
[version]: versionedResponseSchemas
|
@@ -1475,8 +1485,8 @@ var ForklaunchExpressLikeRouter = class _ForklaunchExpressLikeRouter {
|
|
1475
1485
|
...resolvedMiddlewares,
|
1476
1486
|
this.#parseAndRunControllerHandler(controllerHandler)
|
1477
1487
|
);
|
1478
|
-
(0,
|
1479
|
-
...this._fetchMap[(0,
|
1488
|
+
(0, import_common9.toRecord)(this._fetchMap)[(0, import_common9.sanitizePathSlashes)(`${this.basePath}${path}`)] = {
|
1489
|
+
...this._fetchMap[(0, import_common9.sanitizePathSlashes)(`${this.basePath}${path}`)] ?? {},
|
1480
1490
|
[method.toUpperCase()]: contractDetails.versions ? Object.fromEntries(
|
1481
1491
|
Object.keys(contractDetails.versions).map((version) => [
|
1482
1492
|
version,
|
@@ -1484,7 +1494,7 @@ var ForklaunchExpressLikeRouter = class _ForklaunchExpressLikeRouter {
|
|
1484
1494
|
])
|
1485
1495
|
) : this.#localParamRequest(handlers, controllerHandler)
|
1486
1496
|
};
|
1487
|
-
(0,
|
1497
|
+
(0, import_common9.toRecord)(this.sdk)[(0, import_common9.toPrettyCamelCase)(contractDetails.name)] = contractDetails.versions ? Object.fromEntries(
|
1488
1498
|
Object.keys(contractDetails.versions).map((version) => [
|
1489
1499
|
version,
|
1490
1500
|
(req) => this.#localParamRequest(
|
@@ -1583,10 +1593,10 @@ var ForklaunchExpressLikeRouter = class _ForklaunchExpressLikeRouter {
|
|
1583
1593
|
}
|
1584
1594
|
addRouterToSdk(router) {
|
1585
1595
|
Object.entries(router._fetchMap).map(
|
1586
|
-
([key, value]) => (0,
|
1596
|
+
([key, value]) => (0, import_common9.toRecord)(this._fetchMap)[(0, import_common9.sanitizePathSlashes)(`${this.basePath}${key}`)] = value
|
1587
1597
|
);
|
1588
|
-
const existingSdk = this.sdk[router.sdkName ?? (0,
|
1589
|
-
(0,
|
1598
|
+
const existingSdk = this.sdk[router.sdkName ?? (0, import_common9.toPrettyCamelCase)(router.basePath)];
|
1599
|
+
(0, import_common9.toRecord)(this.sdk)[router.sdkName ?? (0, import_common9.toPrettyCamelCase)(router.basePath)] = {
|
1590
1600
|
...typeof existingSdk === "object" ? existingSdk : {},
|
1591
1601
|
...router.sdk
|
1592
1602
|
};
|
@@ -2985,7 +2995,7 @@ var getCodeForStatus = (status) => {
|
|
2985
2995
|
var httpStatusCodes_default = HTTPStatuses;
|
2986
2996
|
|
2987
2997
|
// src/http/mcpGenerator/mcpGenerator.ts
|
2988
|
-
var
|
2998
|
+
var import_common10 = require("@forklaunch/common");
|
2989
2999
|
var import_fastmcp_fork = require("@forklaunch/fastmcp-fork");
|
2990
3000
|
var import_zod = require("@forklaunch/validator/zod");
|
2991
3001
|
|
@@ -3122,7 +3132,7 @@ function generateMcpServer(schemaValidator, protocol, host, port, version, appli
|
|
3122
3132
|
if (discriminatedBody) {
|
3123
3133
|
switch (discriminatedBody.parserType) {
|
3124
3134
|
case "json": {
|
3125
|
-
parsedBody = (0,
|
3135
|
+
parsedBody = (0, import_common10.safeStringify)(body);
|
3126
3136
|
break;
|
3127
3137
|
}
|
3128
3138
|
case "text": {
|
@@ -3135,7 +3145,7 @@ function generateMcpServer(schemaValidator, protocol, host, port, version, appli
|
|
3135
3145
|
}
|
3136
3146
|
case "multipart": {
|
3137
3147
|
const formData = new FormData();
|
3138
|
-
if ((0,
|
3148
|
+
if ((0, import_common10.isRecord)(body)) {
|
3139
3149
|
for (const key in body) {
|
3140
3150
|
if (typeof body[key] === "string" || body[key] instanceof Blob) {
|
3141
3151
|
formData.append(key, body[key]);
|
@@ -3150,11 +3160,11 @@ function generateMcpServer(schemaValidator, protocol, host, port, version, appli
|
|
3150
3160
|
break;
|
3151
3161
|
}
|
3152
3162
|
case "urlEncoded": {
|
3153
|
-
if ((0,
|
3163
|
+
if ((0, import_common10.isRecord)(body)) {
|
3154
3164
|
parsedBody = new URLSearchParams(
|
3155
3165
|
Object.entries(body).map(([key, value]) => [
|
3156
3166
|
key,
|
3157
|
-
(0,
|
3167
|
+
(0, import_common10.safeStringify)(value)
|
3158
3168
|
])
|
3159
3169
|
);
|
3160
3170
|
} else {
|
@@ -3163,8 +3173,8 @@ function generateMcpServer(schemaValidator, protocol, host, port, version, appli
|
|
3163
3173
|
break;
|
3164
3174
|
}
|
3165
3175
|
default: {
|
3166
|
-
(0,
|
3167
|
-
parsedBody = (0,
|
3176
|
+
(0, import_common10.isNever)(discriminatedBody.parserType);
|
3177
|
+
parsedBody = (0, import_common10.safeStringify)(body);
|
3168
3178
|
break;
|
3169
3179
|
}
|
3170
3180
|
}
|
@@ -3173,7 +3183,7 @@ function generateMcpServer(schemaValidator, protocol, host, port, version, appli
|
|
3173
3183
|
const queryString = new URLSearchParams(
|
3174
3184
|
Object.entries(query).map(([key, value]) => [
|
3175
3185
|
key,
|
3176
|
-
(0,
|
3186
|
+
(0, import_common10.safeStringify)(value)
|
3177
3187
|
])
|
3178
3188
|
).toString();
|
3179
3189
|
url += queryString ? `?${queryString}` : "";
|
@@ -3206,7 +3216,7 @@ function generateMcpServer(schemaValidator, protocol, host, port, version, appli
|
|
3206
3216
|
content: [
|
3207
3217
|
{
|
3208
3218
|
type: "text",
|
3209
|
-
text: (0,
|
3219
|
+
text: (0, import_common10.safeStringify)(await response.json())
|
3210
3220
|
}
|
3211
3221
|
]
|
3212
3222
|
};
|
@@ -3360,18 +3370,18 @@ ${parseErrors.join("\n\n")}`
|
|
3360
3370
|
}
|
3361
3371
|
|
3362
3372
|
// src/http/middleware/response/enrichExpressLikeSend.middleware.ts
|
3363
|
-
var
|
3373
|
+
var import_common12 = require("@forklaunch/common");
|
3364
3374
|
var import_stream = require("stream");
|
3365
3375
|
|
3366
3376
|
// src/http/telemetry/recordMetric.ts
|
3367
|
-
var
|
3377
|
+
var import_common11 = require("@forklaunch/common");
|
3368
3378
|
var import_semantic_conventions3 = require("@opentelemetry/semantic-conventions");
|
3369
3379
|
function recordMetric(req, res) {
|
3370
3380
|
if (res.metricRecorded) {
|
3371
3381
|
return;
|
3372
3382
|
}
|
3373
3383
|
httpRequestsTotalCounter.add(1, {
|
3374
|
-
[import_semantic_conventions3.ATTR_SERVICE_NAME]: (0,
|
3384
|
+
[import_semantic_conventions3.ATTR_SERVICE_NAME]: (0, import_common11.getEnvVar)("OTEL_SERVICE_NAME"),
|
3375
3385
|
[ATTR_API_NAME]: req.contractDetails?.name,
|
3376
3386
|
[import_semantic_conventions3.ATTR_HTTP_REQUEST_METHOD]: req.method,
|
3377
3387
|
[import_semantic_conventions3.ATTR_HTTP_ROUTE]: req.originalPath,
|
@@ -3420,8 +3430,8 @@ function enrichExpressLikeSend(instance, req, res, originalOperation, originalSe
|
|
3420
3430
|
`attachment; filename="${data.name}"`
|
3421
3431
|
);
|
3422
3432
|
}
|
3423
|
-
if ((0,
|
3424
|
-
import_stream.Readable.from((0,
|
3433
|
+
if ((0, import_common12.isNodeJsWriteableStream)(res)) {
|
3434
|
+
import_stream.Readable.from((0, import_common12.readableStreamToAsyncIterable)(data.stream())).pipe(
|
3425
3435
|
res
|
3426
3436
|
);
|
3427
3437
|
} else {
|
@@ -3430,7 +3440,7 @@ function enrichExpressLikeSend(instance, req, res, originalOperation, originalSe
|
|
3430
3440
|
originalSend.call(instance, "Not a NodeJS WritableStream");
|
3431
3441
|
errorSent = true;
|
3432
3442
|
}
|
3433
|
-
} else if ((0,
|
3443
|
+
} else if ((0, import_common12.isAsyncGenerator)(data)) {
|
3434
3444
|
let firstPass = true;
|
3435
3445
|
const transformer = new import_stream.Transform({
|
3436
3446
|
objectMode: true,
|
@@ -3458,7 +3468,7 @@ ${res.locals.errorMessage}`;
|
|
3458
3468
|
if (!errorSent) {
|
3459
3469
|
let data2 = "";
|
3460
3470
|
for (const [key, value] of Object.entries(chunk)) {
|
3461
|
-
data2 += `${key}: ${typeof value === "string" ? value : (0,
|
3471
|
+
data2 += `${key}: ${typeof value === "string" ? value : (0, import_common12.safeStringify)(value)}
|
3462
3472
|
`;
|
3463
3473
|
}
|
3464
3474
|
data2 += "\n";
|
@@ -3466,7 +3476,7 @@ ${res.locals.errorMessage}`;
|
|
3466
3476
|
}
|
3467
3477
|
}
|
3468
3478
|
});
|
3469
|
-
if ((0,
|
3479
|
+
if ((0, import_common12.isNodeJsWriteableStream)(res)) {
|
3470
3480
|
import_stream.Readable.from(data).pipe(transformer).pipe(res);
|
3471
3481
|
} else {
|
3472
3482
|
res.type("text/plain");
|
@@ -3477,7 +3487,7 @@ ${res.locals.errorMessage}`;
|
|
3477
3487
|
} else {
|
3478
3488
|
const parserType = responseBodies?.[Number(res.statusCode)]?.parserType;
|
3479
3489
|
res.bodyData = data;
|
3480
|
-
if ((0,
|
3490
|
+
if ((0, import_common12.isRecord)(data)) {
|
3481
3491
|
switch (parserType) {
|
3482
3492
|
case "json":
|
3483
3493
|
res.bodyData = "json" in data ? data.json : data;
|
@@ -3498,7 +3508,7 @@ ${res.locals.errorMessage}`;
|
|
3498
3508
|
res.bodyData = data;
|
3499
3509
|
break;
|
3500
3510
|
default:
|
3501
|
-
(0,
|
3511
|
+
(0, import_common12.isNever)(parserType);
|
3502
3512
|
res.bodyData = data;
|
3503
3513
|
break;
|
3504
3514
|
}
|
@@ -3534,7 +3544,7 @@ ${res.locals.errorMessage}`;
|
|
3534
3544
|
}
|
3535
3545
|
|
3536
3546
|
// src/http/openApiV3Generator/openApiV3Generator.ts
|
3537
|
-
var
|
3547
|
+
var import_common13 = require("@forklaunch/common");
|
3538
3548
|
var OPENAPI_DEFAULT_VERSION = Symbol("default");
|
3539
3549
|
function toUpperCase(str) {
|
3540
3550
|
return str.charAt(0).toUpperCase() + str.slice(1);
|
@@ -3757,7 +3767,7 @@ function generateOpenApiSpecs(schemaValidator, serverUrls, serverDescriptions, a
|
|
3757
3767
|
].forEach(({ fullPath, router }) => {
|
3758
3768
|
const controllerName = transformBasePath(fullPath);
|
3759
3769
|
router.routes.forEach((route) => {
|
3760
|
-
const openApiPath = (0,
|
3770
|
+
const openApiPath = (0, import_common13.openApiCompliantPath)(
|
3761
3771
|
`${fullPath}${route.path === "/" ? "" : route.path}`
|
3762
3772
|
);
|
3763
3773
|
const { name, summary, params, versions, auth, options: options2 } = route.contractDetails;
|
@@ -3862,7 +3872,7 @@ function generateOpenApiSpecs(schemaValidator, serverUrls, serverDescriptions, a
|
|
3862
3872
|
}
|
3863
3873
|
|
3864
3874
|
// src/http/sdk/sdkClient.ts
|
3865
|
-
var
|
3875
|
+
var import_common14 = require("@forklaunch/common");
|
3866
3876
|
|
3867
3877
|
// src/http/guards/isSdkRouter.ts
|
3868
3878
|
function isSdkRouter(value) {
|
@@ -3874,12 +3884,12 @@ function mapToSdk(schemaValidator, routerMap, runningPath = void 0) {
|
|
3874
3884
|
const routerUniquenessCache = /* @__PURE__ */ new Set();
|
3875
3885
|
return Object.fromEntries(
|
3876
3886
|
Object.entries(routerMap).map(([key, value]) => {
|
3877
|
-
if (routerUniquenessCache.has((0,
|
3887
|
+
if (routerUniquenessCache.has((0, import_common14.hashString)((0, import_common14.safeStringify)(value)))) {
|
3878
3888
|
throw new Error(
|
3879
3889
|
`SdkClient: Cannot use the same router pointer twice. Please clone the duplicate router with .clone() or only use the router once.`
|
3880
3890
|
);
|
3881
3891
|
}
|
3882
|
-
routerUniquenessCache.add((0,
|
3892
|
+
routerUniquenessCache.add((0, import_common14.hashString)((0, import_common14.safeStringify)(value)));
|
3883
3893
|
const currentPath = runningPath ? [runningPath, key].join(".") : key;
|
3884
3894
|
if (isSdkRouter(value)) {
|
3885
3895
|
Object.entries(value.sdkPaths).forEach(([routePath, sdkKey]) => {
|
@@ -3928,7 +3938,7 @@ function mapToFetch(schemaValidator, routerMap) {
|
|
3928
3938
|
return ((path, ...reqInit) => {
|
3929
3939
|
const method = reqInit[0]?.method;
|
3930
3940
|
const version = reqInit[0] != null && "version" in reqInit[0] ? reqInit[0].version : void 0;
|
3931
|
-
return (version ? (0,
|
3941
|
+
return (version ? (0, import_common14.toRecord)((0, import_common14.toRecord)(flattenedFetchMap[path])[method ?? "GET"])[version] : (0, import_common14.toRecord)(flattenedFetchMap[path])[method ?? "GET"])(path, reqInit[0]);
|
3932
3942
|
});
|
3933
3943
|
}
|
3934
3944
|
function sdkClient(schemaValidator, routerMap) {
|
@@ -3940,7 +3950,7 @@ function sdkClient(schemaValidator, routerMap) {
|
|
3940
3950
|
}
|
3941
3951
|
|
3942
3952
|
// src/http/sdk/sdkRouter.ts
|
3943
|
-
var
|
3953
|
+
var import_common15 = require("@forklaunch/common");
|
3944
3954
|
function sdkRouter(schemaValidator, controller, router) {
|
3945
3955
|
const controllerSdkPaths = [];
|
3946
3956
|
const mappedSdk = Object.fromEntries(
|
@@ -3950,7 +3960,7 @@ function sdkRouter(schemaValidator, controller, router) {
|
|
3950
3960
|
router.sdkPaths[sdkPath] = key;
|
3951
3961
|
return [
|
3952
3962
|
key,
|
3953
|
-
router.sdk[(0,
|
3963
|
+
router.sdk[(0, import_common15.toPrettyCamelCase)(value.contractDetails.name)]
|
3954
3964
|
];
|
3955
3965
|
})
|
3956
3966
|
);
|