UNPKG

@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
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); } }, };