@cerbos/http
Version:
Client library for interacting with the Cerbos policy decision point service over HTTP from browser-based applications
151 lines • 4.36 kB
JavaScript
import { toJson, toJsonString } from "@bufbuild/protobuf";
import { stringify as queryStringify } from "qs";
import { ListAuditLogEntriesRequest_Kind, ListAuditLogEntriesRequest_KindSchema, } from "@cerbos/api/cerbos/request/v1/request_pb";
import { CerbosAdminService as admin, CerbosService as cerbos, } from "@cerbos/api/cerbos/svc/v1/svc_pb";
import { Health as health } from "@cerbos/api/grpc/health/v1/health_pb";
import { methodName } from "@cerbos/core/~internal";
export const endpoints = new Map();
function defineEndpoints(service, descs) {
for (const method of service.methods) {
const endpoint = descs[method.localName];
if (endpoint) {
endpoints.set(methodName(method), {
method: endpoint.method,
path: endpoint.path,
serialize: endpoint.serialize(method.input),
});
}
}
}
defineEndpoints(admin, {
addOrUpdatePolicy: {
method: "POST",
path: "/admin/policy",
serialize: serializeToBody,
},
addOrUpdateSchema: {
method: "POST",
path: "/admin/schema",
serialize: serializeToBody,
},
deletePolicy: {
method: "POST",
path: "/admin/policy/delete",
serialize: serializeToQueryString,
},
deleteSchema: {
method: "DELETE",
path: "/admin/schema",
serialize: serializeToQueryString,
},
disablePolicy: {
method: "POST",
path: "/admin/policy/disable",
serialize: serializeToQueryString,
},
enablePolicy: {
method: "POST",
path: "/admin/policy/enable",
serialize: serializeToQueryString,
},
getPolicy: {
method: "GET",
path: "/admin/policy",
serialize: serializeToQueryString,
},
getSchema: {
method: "GET",
path: "/admin/schema",
serialize: serializeToQueryString,
},
inspectPolicies: {
method: "GET",
path: "/admin/policies/inspect",
serialize: serializeToQueryString,
},
listAuditLogEntries: {
method: "GET",
path: "/admin/auditlog/list/",
serialize: serializeListAuditLogEntriesRequest,
},
listPolicies: {
method: "GET",
path: "/admin/policies",
serialize: serializeToQueryString,
},
listSchemas: {
method: "GET",
path: "/admin/schemas",
serialize: serializeToQueryString,
},
purgeStoreRevisions: {
method: "DELETE",
path: "/admin/store/revisions",
serialize: serializeToQueryString,
},
reloadStore: {
method: "GET",
path: "/admin/store/reload",
serialize: serializeToQueryString,
},
});
defineEndpoints(cerbos, {
checkResourceBatch: undefined,
checkResourceSet: undefined,
checkResources: {
method: "POST",
path: "/api/check/resources",
serialize: serializeToBody,
},
planResources: {
method: "POST",
path: "/api/plan/resources",
serialize: serializeToBody,
},
serverInfo: {
method: "GET",
path: "/api/server_info",
serialize: serializeToQueryString,
},
});
defineEndpoints(health, {
check: {
method: "GET",
path: "/_cerbos/health",
serialize: serializeToQueryString,
},
list: undefined,
watch: undefined,
});
function serializeToBody(schema) {
return (request, init) => ({
...init,
body: toJsonString(schema, request),
});
}
function serializeToQueryString(schema) {
return (request, { url, ...init }) => ({
...init,
url: `${url}?${toQueryString(schema, request)}`,
});
}
function serializeListAuditLogEntriesRequest(schema) {
return ({ kind, ...rest }, { url, ...init }) => {
const path = ListAuditLogEntriesRequest_KindSchema.value[kind].name;
const queryString = toQueryString(schema, {
kind: ListAuditLogEntriesRequest_Kind.UNSPECIFIED,
...rest,
});
return {
...init,
url: `${url}${path}?${queryString}`,
};
};
}
function toQueryString(schema, request) {
return queryStringify(toJson(schema, request), {
allowDots: true,
arrayFormat: "repeat",
});
}
//# sourceMappingURL=endpoints.js.map