Next.js website for Rocky Mountain Vending company featuring: - Product catalog with Stripe integration - Service areas and parts pages - Admin dashboard with Clerk authentication - SEO optimized pages with JSON-LD structured data Co-authored-by: Cursor <cursoragent@cursor.com>
94 lines
3.7 KiB
Text
94 lines
3.7 KiB
Text
import { NormalizedSchema } from "@smithy/core/schema";
|
|
import { HttpRequest } from "@smithy/protocol-http";
|
|
import { collectBody } from "./collect-stream-body";
|
|
import { HttpProtocol } from "./HttpProtocol";
|
|
export class RpcProtocol extends HttpProtocol {
|
|
async serializeRequest(operationSchema, input, context) {
|
|
const serializer = this.serializer;
|
|
const query = {};
|
|
const headers = {};
|
|
const endpoint = await context.endpoint();
|
|
const ns = NormalizedSchema.of(operationSchema?.input);
|
|
const schema = ns.getSchema();
|
|
let payload;
|
|
const request = new HttpRequest({
|
|
protocol: "",
|
|
hostname: "",
|
|
port: undefined,
|
|
path: "/",
|
|
fragment: undefined,
|
|
query: query,
|
|
headers: headers,
|
|
body: undefined,
|
|
});
|
|
if (endpoint) {
|
|
this.updateServiceEndpoint(request, endpoint);
|
|
this.setHostPrefix(request, operationSchema, input);
|
|
}
|
|
const _input = {
|
|
...input,
|
|
};
|
|
if (input) {
|
|
const eventStreamMember = ns.getEventStreamMember();
|
|
if (eventStreamMember) {
|
|
if (_input[eventStreamMember]) {
|
|
const initialRequest = {};
|
|
for (const [memberName, memberSchema] of ns.structIterator()) {
|
|
if (memberName !== eventStreamMember && _input[memberName]) {
|
|
serializer.write(memberSchema, _input[memberName]);
|
|
initialRequest[memberName] = serializer.flush();
|
|
}
|
|
}
|
|
payload = await this.serializeEventStream({
|
|
eventStream: _input[eventStreamMember],
|
|
requestSchema: ns,
|
|
initialRequest,
|
|
});
|
|
}
|
|
}
|
|
else {
|
|
serializer.write(schema, _input);
|
|
payload = serializer.flush();
|
|
}
|
|
}
|
|
request.headers = headers;
|
|
request.query = query;
|
|
request.body = payload;
|
|
request.method = "POST";
|
|
return request;
|
|
}
|
|
async deserializeResponse(operationSchema, context, response) {
|
|
const deserializer = this.deserializer;
|
|
const ns = NormalizedSchema.of(operationSchema.output);
|
|
const dataObject = {};
|
|
if (response.statusCode >= 300) {
|
|
const bytes = await collectBody(response.body, context);
|
|
if (bytes.byteLength > 0) {
|
|
Object.assign(dataObject, await deserializer.read(15, bytes));
|
|
}
|
|
await this.handleError(operationSchema, context, response, dataObject, this.deserializeMetadata(response));
|
|
throw new Error("@smithy/core/protocols - RPC Protocol error handler failed to throw.");
|
|
}
|
|
for (const header in response.headers) {
|
|
const value = response.headers[header];
|
|
delete response.headers[header];
|
|
response.headers[header.toLowerCase()] = value;
|
|
}
|
|
const eventStreamMember = ns.getEventStreamMember();
|
|
if (eventStreamMember) {
|
|
dataObject[eventStreamMember] = await this.deserializeEventStream({
|
|
response,
|
|
responseSchema: ns,
|
|
initialResponseContainer: dataObject,
|
|
});
|
|
}
|
|
else {
|
|
const bytes = await collectBody(response.body, context);
|
|
if (bytes.byteLength > 0) {
|
|
Object.assign(dataObject, await deserializer.read(ns, bytes));
|
|
}
|
|
}
|
|
dataObject.$metadata = this.deserializeMetadata(response);
|
|
return dataObject;
|
|
}
|
|
}
|