UNPKG

@paroicms/server

Version:
70 lines 2.55 kB
import { type } from "arktype"; import { siteReadyGuard } from "../../graphql/graphql.types.js"; import { createPat, deletePat, getPat, listPatsByAccount, updatePat, } from "../../personal-access-token/pat.service.js"; const CreatePatInputAT = type({ accountId: "string", "description?": "string", "expiresAt?": "string|number|Date", "+": "reject", }).pipe((input) => ({ accountId: input.accountId, description: input.description, expiresAt: input.expiresAt ? new Date(input.expiresAt) : undefined, })); const UpdatePatInputAT = type({ "description?": "string", "active?": "boolean", "+": "reject", }); function toGqlPat(pat) { return { id: pat.id, accountId: pat.accountId, tokenPreview: pat.tokenPreview, description: pat.description ?? null, createdAt: pat.createdAt, lastUsedAt: pat.lastUsedAt ?? null, expiresAt: pat.expiresAt ?? null, active: pat.active, }; } export const patResolvers = { Query: { personalAccessTokens: async (_parent, { accountId }, { siteContext }) => { siteReadyGuard(siteContext); const pats = await listPatsByAccount(siteContext, accountId); return pats.map(toGqlPat); }, personalAccessToken: async (_parent, { id }, { siteContext }) => { siteReadyGuard(siteContext); const pat = await getPat(siteContext, id); return pat ? toGqlPat(pat) : null; }, }, Mutation: { createPat: async (_parent, { input }, { siteContext }) => { siteReadyGuard(siteContext); const validatedInput = CreatePatInputAT.assert(input); const { token, pat } = await createPat(siteContext, validatedInput); return { token, pat: toGqlPat(pat), }; }, updatePat: async (_parent, { id, input }, { siteContext }) => { siteReadyGuard(siteContext); const validatedInput = UpdatePatInputAT.assert(input); await updatePat(siteContext, id, validatedInput); const pat = await getPat(siteContext, id); if (!pat) throw new Error("PAT not found after update"); return toGqlPat(pat); }, deletePat: async (_parent, { id }, { siteContext }) => { siteReadyGuard(siteContext); await deletePat(siteContext, id); return true; }, }, }; //# sourceMappingURL=pat.resolver.js.map