@paroicms/server
Version:
The ParoiCMS server
70 lines • 2.55 kB
JavaScript
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