@localsecurity/name-id
Version:
A utility to create and parse lexicographically sortable ID's with embeded model names and created timestamp
67 lines (66 loc) • 1.81 kB
JavaScript
import { NameID, isModelName } from "./name-id";
const ErrorResponse = (e) => Response.json({ error: e }, { status: 500 });
/**
* Handle a request with a Model Name in the body
*/
async function handleName(request) {
const __typename = await request.text();
const execute = () => {
if (isModelName(__typename)) {
const nameId = new NameID(__typename).value;
const createdAt = NameID.parse(nameId).timestamp.toISOString();
return Response.json({ nameId, createdAt, __typename });
}
else {
return ErrorResponse(`Not a valid Model Name ('${__typename}')`);
}
};
try {
return execute();
}
catch (e) {
return ErrorResponse(e);
}
}
/**
* Handle a request with a Model Object in the body
*/
async function handleObject(request) {
const object = await request.json();
const __typename = object["__typename"];
const execute = () => {
if (isModelName(__typename)) {
const nameId = new NameID(object).value;
return Response.json({ nameId, ...object });
}
else {
return ErrorResponse(`Not a valid Model Name ('${__typename}')`);
}
};
try {
return execute();
}
catch (e) {
return ErrorResponse(e);
}
}
/**
* Worker entrypoint
*/
export default {
async fetch(request, env, ctx) {
const contentType = request.headers.get("content-type") ?? "";
const execute = () => {
if (contentType.includes("json"))
return handleObject(request);
else
return handleName(request);
};
try {
return execute();
}
catch (e) {
return ErrorResponse(e);
}
},
};