feat: identity cerbos implementation
This commit is contained in:
@@ -1,17 +0,0 @@
|
||||
import { HTTP } from "@cerbos/http";
|
||||
import { getEnvironmentVariable } from "@platform/config/environment.ts";
|
||||
import z from "zod";
|
||||
|
||||
export const cerbos = new HTTP(
|
||||
getEnvironmentVariable({
|
||||
key: "CERBOS_URL",
|
||||
type: z.string(),
|
||||
fallback: "http://localhost:3592",
|
||||
}),
|
||||
{
|
||||
adminCredentials: {
|
||||
username: "cerbos",
|
||||
password: "cerbosAdmin",
|
||||
},
|
||||
},
|
||||
);
|
||||
@@ -1 +0,0 @@
|
||||
export * from "./cerbos.ts";
|
||||
@@ -1,15 +0,0 @@
|
||||
{
|
||||
"name": "@platform/auth",
|
||||
"version": "0.0.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"main": "./mod.ts",
|
||||
"exports": {
|
||||
".": "./mod.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@cerbos/http": "0.23.1",
|
||||
"@platform/logger": "workspace:*",
|
||||
"zod": "4.1.11"
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
import type { ZodObject, ZodType } from "zod";
|
||||
|
||||
import type { RelayAdapter, RelayInput, RelayResponse } from "./adapter.ts";
|
||||
import { Route, type Routes } from "./route.ts";
|
||||
import { Route, type RouteFn, type Routes } from "./route.ts";
|
||||
|
||||
/**
|
||||
* Factory method for generating a new relay client instance.
|
||||
@@ -20,6 +20,8 @@ export function makeClient<TRoutes extends Routes>(config: Config, routes: TRout
|
||||
const route = routes[key];
|
||||
if (route instanceof Route) {
|
||||
client[key] = getRouteFn(route, config);
|
||||
} else if (typeof route === "function") {
|
||||
client[key] = route;
|
||||
} else {
|
||||
client[key] = getNestedRoute(config, route);
|
||||
}
|
||||
@@ -39,6 +41,8 @@ function getNestedRoute<TRoutes extends Routes>(config: Config, routes: TRoutes)
|
||||
const route = routes[key];
|
||||
if (route instanceof Route) {
|
||||
nested[key] = getRouteFn(route, config);
|
||||
} else if (typeof route === "function") {
|
||||
nested[key] = route;
|
||||
} else {
|
||||
nested[key] = getNestedRoute(config, route);
|
||||
}
|
||||
@@ -148,22 +152,26 @@ type RelayRequest = {
|
||||
|
||||
type RelayRoutes<TRoutes extends Routes> = {
|
||||
[TKey in keyof TRoutes]: TRoutes[TKey] extends Route
|
||||
? HasPayload<TRoutes[TKey]> extends true
|
||||
? (
|
||||
payload: Prettify<
|
||||
(TRoutes[TKey]["state"]["params"] extends ZodObject ? { params: TRoutes[TKey]["$params"] } : {}) &
|
||||
(TRoutes[TKey]["state"]["query"] extends ZodObject ? { query: TRoutes[TKey]["$query"] } : {}) &
|
||||
(TRoutes[TKey]["state"]["body"] extends ZodType ? { body: TRoutes[TKey]["$body"] } : {}) & {
|
||||
headers?: HeadersInit;
|
||||
}
|
||||
>,
|
||||
) => RouteResponse<TRoutes[TKey]>
|
||||
: (payload?: { headers: HeadersInit }) => RouteResponse<TRoutes[TKey]>
|
||||
: TRoutes[TKey] extends Routes
|
||||
? RelayRoutes<TRoutes[TKey]>
|
||||
: never;
|
||||
? ClientRoute<TRoutes[TKey]>
|
||||
: TRoutes[TKey] extends RouteFn
|
||||
? TRoutes[TKey]
|
||||
: TRoutes[TKey] extends Routes
|
||||
? RelayRoutes<TRoutes[TKey]>
|
||||
: never;
|
||||
};
|
||||
|
||||
type ClientRoute<TRoute extends Route> = HasPayload<TRoute> extends true
|
||||
? (
|
||||
payload: Prettify<
|
||||
(TRoute["state"]["params"] extends ZodObject ? { params: TRoute["$params"] } : {}) &
|
||||
(TRoute["state"]["query"] extends ZodObject ? { query: TRoute["$query"] } : {}) &
|
||||
(TRoute["state"]["body"] extends ZodType ? { body: TRoute["$body"] } : {}) & {
|
||||
headers?: HeadersInit;
|
||||
}
|
||||
>,
|
||||
) => RouteResponse<TRoute>
|
||||
: (payload?: { headers: HeadersInit }) => RouteResponse<TRoute>;
|
||||
|
||||
type HasPayload<TRoute extends Route> = TRoute["state"]["params"] extends ZodObject
|
||||
? true
|
||||
: TRoute["state"]["query"] extends ZodObject
|
||||
|
||||
@@ -443,9 +443,11 @@ export const route: {
|
||||
*/
|
||||
|
||||
export type Routes = {
|
||||
[key: string]: Routes | Route;
|
||||
[key: string]: Routes | Route | RouteFn;
|
||||
};
|
||||
|
||||
export type RouteFn = (...args: any[]) => any;
|
||||
|
||||
type RouteState = {
|
||||
method: RouteMethod;
|
||||
path: string;
|
||||
|
||||
Reference in New Issue
Block a user