penambahan web socket

This commit is contained in:
2025-09-18 19:01:22 +07:00
parent 1d053646a9
commit d7bb2eb5bb
15070 changed files with 2402916 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
import type { APIGatewayProxyEventV2 } from "aws-lambda";
import "#nitro-internal-pollyfills";
export declare const handler: import("aws-lambda").StreamifyHandler<APIGatewayProxyEventV2, void>;

View File

@@ -0,0 +1,72 @@
import "#nitro-internal-pollyfills";
import { useNitroApp } from "nitropack/runtime";
import {
normalizeCookieHeader,
normalizeLambdaIncomingHeaders,
normalizeLambdaOutgoingHeaders
} from "nitropack/runtime/internal";
import { withQuery } from "ufo";
const nitroApp = useNitroApp();
export const handler = awslambda.streamifyResponse(
async (event, responseStream, context) => {
const query = {
...event.queryStringParameters
};
const url = withQuery(event.rawPath, query);
const method = event.requestContext?.http?.method || "get";
if ("cookies" in event && event.cookies) {
event.headers.cookie = event.cookies.join(";");
}
const r = await nitroApp.localCall({
event,
url,
context,
headers: normalizeLambdaIncomingHeaders(event.headers),
method,
query,
body: event.isBase64Encoded ? Buffer.from(event.body || "", "base64").toString("utf8") : event.body
});
const isApiGwV2 = "cookies" in event || "rawPath" in event;
const cookies = normalizeCookieHeader(r.headers["set-cookie"]);
const httpResponseMetadata = {
statusCode: r.status,
...cookies.length > 0 && {
...isApiGwV2 ? { cookies } : { multiValueHeaders: { "set-cookie": cookies } }
},
headers: {
...normalizeLambdaOutgoingHeaders(r.headers, true),
"Transfer-Encoding": "chunked"
}
};
const body = r.body ?? new ReadableStream({
start(controller) {
controller.enqueue("");
controller.close();
}
});
const writer = awslambda.HttpResponseStream.from(
// @ts-expect-error TODO: IMPORTANT! It should be a Writable according to the aws-lambda types
responseStream,
httpResponseMetadata
);
if (!body.getReader) {
writer.write(
r.body
/* TODO */
);
writer.end();
return;
}
const reader = body.getReader();
await streamToNodeStream(reader, responseStream);
writer.end();
}
);
async function streamToNodeStream(reader, writer) {
let readResult = await reader.read();
while (!readResult.done) {
writer.write(readResult.value);
readResult = await reader.read();
}
writer.end();
}

View File

@@ -0,0 +1,4 @@
import type { APIGatewayProxyEvent, APIGatewayProxyEventV2, APIGatewayProxyResult, APIGatewayProxyResultV2, Context } from "aws-lambda";
import "#nitro-internal-pollyfills";
export declare function handler(event: APIGatewayProxyEvent, context: Context): Promise<APIGatewayProxyResult>;
export declare function handler(event: APIGatewayProxyEventV2, context: Context): Promise<APIGatewayProxyResultV2>;

View File

@@ -0,0 +1,45 @@
import "#nitro-internal-pollyfills";
import { useNitroApp } from "nitropack/runtime";
import {
normalizeCookieHeader,
normalizeLambdaIncomingHeaders,
normalizeLambdaOutgoingBody,
normalizeLambdaOutgoingHeaders
} from "nitropack/runtime/internal";
import { withQuery } from "ufo";
const nitroApp = useNitroApp();
export async function handler(event, context) {
const query = {
...event.queryStringParameters,
...event.multiValueQueryStringParameters
};
const url = withQuery(
event.path || event.rawPath,
query
);
const method = event.httpMethod || event.requestContext?.http?.method || "get";
if ("cookies" in event && event.cookies) {
event.headers.cookie = event.cookies.join(";");
}
const r = await nitroApp.localCall({
event,
url,
context,
headers: normalizeLambdaIncomingHeaders(event.headers),
method,
query,
body: event.isBase64Encoded ? Buffer.from(event.body || "", "base64").toString("utf8") : event.body
});
const isApiGwV2 = "cookies" in event || "rawPath" in event;
const awsBody = await normalizeLambdaOutgoingBody(r.body, r.headers);
const cookies = normalizeCookieHeader(r.headers["set-cookie"]);
return {
...cookies.length > 0 && {
...isApiGwV2 ? { cookies } : { multiValueHeaders: { "set-cookie": cookies } }
},
statusCode: r.status,
headers: normalizeLambdaOutgoingHeaders(r.headers, true),
body: awsBody.body,
isBase64Encoded: awsBody.type === "binary"
};
}