@kilpi/react-client
Version:
Kilpi React Client Components · Kilpi is the authorization framework for full-stack TypeScript applications, designed for flexible, powerful, agnostic, intuitive and developer friendly authorization.
75 lines (72 loc) • 21.6 kB
text/typescript
import * as _kilpi_client from '@kilpi/client';
import * as react from 'react';
import * as _kilpi_core from '@kilpi/core';
import { AnyKilpiCore } from '@kilpi/core';
/**
* React server component plugin for automatically providing a Kilpi scope
* in React Server Components and for creating the React Server Component bindings
* to work with Kilpi.
*/
declare function ReactClientComponentPlugin<T extends AnyKilpiCore>(): _kilpi_client.KilpiClientPlugin<T, {
ReactClient: {
createComponents(): {
useSubject: () => ({
status: "idle";
subject: null;
error: null;
} | {
status: "loading";
subject: null;
error: null;
} | {
status: "error";
subject: null;
error: unknown;
} | {
status: "success";
subject: T["$$infer"]["subject"];
error: null;
}) & {
isLoading: boolean;
isError: boolean;
isSuccess: boolean;
isIdle: boolean;
};
useIsAuthorized: <TAction extends _kilpi_core.PolicysetActions<T["policies"]>>(action: TAction, ...inputs: [] | [any]) => ({
status: "idle";
isAuthorized: null;
error: null;
} | {
status: "loading";
isAuthorized: null;
error: null;
} | {
status: "error";
isAuthorized: null;
error: unknown;
} | {
status: "success";
isAuthorized: boolean;
error: null;
}) & {
isLoading: boolean;
isError: boolean;
isSuccess: boolean;
isIdle: boolean;
};
ClientAccess: <TAction extends (T["policies"] extends infer T_1 ? T_1 extends T["policies"] ? T_1 extends object ? { [Key in keyof T_1]: Key extends string | number ? T_1[Key] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key : never : `${Key}:${T_1[Key] extends infer T_2 ? T_2 extends T_1[Key] ? T_2 extends object ? { [Key_1 in keyof T_2]: Key_1 extends string | number ? T_2[Key_1] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_1 : never : `${Key_1}:${T_2[Key_1] extends infer T_3 ? T_3 extends T_2[Key_1] ? T_3 extends object ? { [Key_2 in keyof T_3]: Key_2 extends string | number ? T_3[Key_2] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_2 : never : `${Key_2}:${T_3[Key_2] extends infer T_4 ? T_4 extends T_3[Key_2] ? T_4 extends object ? { [Key_3 in keyof T_4]: Key_3 extends string | number ? T_4[Key_3] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_3 : never : `${Key_3}:${T_4[Key_3] extends infer T_5 ? T_5 extends T_4[Key_3] ? T_5 extends object ? { [Key_4 in keyof T_5]: Key_4 extends string | number ? T_5[Key_4] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_4 : never : `${Key_4}:${T_5[Key_4] extends infer T_6 ? T_6 extends T_5[Key_4] ? T_6 extends object ? { [Key_5 in keyof T_6]: Key_5 extends string | number ? T_6[Key_5] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_5 : never : `${Key_5}:${T_6[Key_5] extends infer T_7 ? T_7 extends T_6[Key_5] ? T_7 extends object ? { [Key_6 in keyof T_7]: Key_6 extends string | number ? T_7[Key_6] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_6 : never : `${Key_6}:${T_7[Key_6] extends infer T_8 ? T_8 extends T_7[Key_6] ? T_8 extends object ? { [Key_7 in keyof T_8]: Key_7 extends string | number ? T_8[Key_7] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_7 : never : `${Key_7}:${T_8[Key_7] extends infer T_9 ? T_9 extends T_8[Key_7] ? T_9 extends object ? { [Key_8 in keyof T_9]: Key_8 extends string | number ? T_9[Key_8] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_8 : never : `${Key_8}:${T_9[Key_8] extends infer T_10 ? T_10 extends T_9[Key_8] ? T_10 extends object ? { [Key_9 in keyof T_10]: Key_9 extends string | number ? T_10[Key_9] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_9 : never : `${Key_9}:${T_10[Key_9] extends infer T_11 ? T_11 extends T_10[Key_9] ? T_11 extends object ? { [Key_10 in keyof T_11]: Key_10 extends string | number ? T_11[Key_10] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_10 : never : `${Key_10}:${/*elided*/ any}` : never; }[keyof T_11] : never : never : never}` : never; }[keyof T_10] : never : never : never}` : never; }[keyof T_9] : never : never : never}` : never; }[keyof T_8] : never : never : never}` : never; }[keyof T_7] : never : never : never}` : never; }[keyof T_6] : never : never : never}` : never; }[keyof T_5] : never : never : never}` : never; }[keyof T_4] : never : never : never}` : never; }[keyof T_3] : never : never : never}` : never; }[keyof T_2] : never : never : never}` : never; }[keyof T_1] : never : never : never) | (T["policies"] extends infer T_12 ? T_12 extends T["policies"] ? T_12 extends object ? { [Key_11 in keyof T_12]: Key_11 extends string | number ? T_12[Key_11] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_11 : never : `${Key_11}:${T_12[Key_11] extends infer T_13 ? T_13 extends T_12[Key_11] ? T_13 extends object ? { [Key_12 in keyof T_13]: Key_12 extends string | number ? T_13[Key_12] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_12 : never : `${Key_12}:${T_13[Key_12] extends infer T_14 ? T_14 extends T_13[Key_12] ? T_14 extends object ? { [Key_13 in keyof T_14]: Key_13 extends string | number ? T_14[Key_13] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_13 : never : `${Key_13}:${T_14[Key_13] extends infer T_15 ? T_15 extends T_14[Key_13] ? T_15 extends object ? { [Key_14 in keyof T_15]: Key_14 extends string | number ? T_15[Key_14] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_14 : never : `${Key_14}:${T_15[Key_14] extends infer T_16 ? T_16 extends T_15[Key_14] ? T_16 extends object ? { [Key_15 in keyof T_16]: Key_15 extends string | number ? T_16[Key_15] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_15 : never : `${Key_15}:${T_16[Key_15] extends infer T_17 ? T_17 extends T_16[Key_15] ? T_17 extends object ? { [Key_16 in keyof T_17]: Key_16 extends string | number ? T_17[Key_16] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_16 : never : `${Key_16}:${T_17[Key_16] extends infer T_18 ? T_18 extends T_17[Key_16] ? T_18 extends object ? { [Key_17 in keyof T_18]: Key_17 extends string | number ? T_18[Key_17] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_17 : never : `${Key_17}:${T_18[Key_17] extends infer T_19 ? T_19 extends T_18[Key_17] ? T_19 extends object ? { [Key_18 in keyof T_19]: Key_18 extends string | number ? T_19[Key_18] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_18 : never : `${Key_18}:${T_19[Key_18] extends infer T_20 ? T_20 extends T_19[Key_18] ? T_20 extends object ? { [Key_19 in keyof T_20]: Key_19 extends string | number ? T_20[Key_19] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_19 : never : `${Key_19}:${T_20[Key_19] extends infer T_21 ? T_21 extends T_20[Key_19] ? T_21 extends object ? { [Key_20 in keyof T_21]: Key_20 extends string | number ? T_21[Key_20] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_20 : never : `${Key_20}:${T_21[Key_20] extends infer T_22 ? T_22 extends T_21[Key_20] ? T_22 extends object ? { [Key_21 in keyof T_22]: Key_21 extends string | number ? T_22[Key_21] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_21 : never : `${Key_21}:${/*elided*/ any}` : never; }[keyof T_22] : never : never : never}` : never; }[keyof T_21] : never : never : never}` : never; }[keyof T_20] : never : never : never}` : never; }[keyof T_19] : never : never : never}` : never; }[keyof T_18] : never : never : never}` : never; }[keyof T_17] : never : never : never}` : never; }[keyof T_16] : never : never : never}` : never; }[keyof T_15] : never : never : never}` : never; }[keyof T_14] : never : never : never}` : never; }[keyof T_13] : never : never : never}` : never; }[keyof T_12] : never : never : never)>(props: {
children?: React.ReactNode;
Loading?: React.ReactNode;
Unauthorized?: React.ReactNode;
Error?: React.ReactNode;
} & ({ [TAction_1 in T["policies"] extends infer T_23 ? T_23 extends T["policies"] ? T_23 extends object ? { [Key_22 in keyof T_23]: Key_22 extends string | number ? T_23[Key_22] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_22 : never : `${Key_22}:${T_23[Key_22] extends infer T_24 ? T_24 extends T_23[Key_22] ? T_24 extends object ? { [Key_23 in keyof T_24]: Key_23 extends string | number ? T_24[Key_23] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_23 : never : `${Key_23}:${T_24[Key_23] extends infer T_25 ? T_25 extends T_24[Key_23] ? T_25 extends object ? { [Key_24 in keyof T_25]: Key_24 extends string | number ? T_25[Key_24] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_24 : never : `${Key_24}:${T_25[Key_24] extends infer T_26 ? T_26 extends T_25[Key_24] ? T_26 extends object ? { [Key_25 in keyof T_26]: Key_25 extends string | number ? T_26[Key_25] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_25 : never : `${Key_25}:${T_26[Key_25] extends infer T_27 ? T_27 extends T_26[Key_25] ? T_27 extends object ? { [Key_26 in keyof T_27]: Key_26 extends string | number ? T_27[Key_26] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_26 : never : `${Key_26}:${T_27[Key_26] extends infer T_28 ? T_28 extends T_27[Key_26] ? T_28 extends object ? { [Key_27 in keyof T_28]: Key_27 extends string | number ? T_28[Key_27] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_27 : never : `${Key_27}:${T_28[Key_27] extends infer T_29 ? T_29 extends T_28[Key_27] ? T_29 extends object ? { [Key_28 in keyof T_29]: Key_28 extends string | number ? T_29[Key_28] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_28 : never : `${Key_28}:${T_29[Key_28] extends infer T_30 ? T_30 extends T_29[Key_28] ? T_30 extends object ? { [Key_29 in keyof T_30]: Key_29 extends string | number ? T_30[Key_29] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_29 : never : `${Key_29}:${T_30[Key_29] extends infer T_31 ? T_31 extends T_30[Key_29] ? T_31 extends object ? { [Key_30 in keyof T_31]: Key_30 extends string | number ? T_31[Key_30] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_30 : never : `${Key_30}:${T_31[Key_30] extends infer T_32 ? T_32 extends T_31[Key_30] ? T_32 extends object ? { [Key_31 in keyof T_32]: Key_31 extends string | number ? T_32[Key_31] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_31 : never : `${Key_31}:${T_32[Key_31] extends infer T_33 ? T_33 extends T_32[Key_31] ? T_33 extends object ? { [Key_32 in keyof T_33]: Key_32 extends string | number ? T_33[Key_32] extends (...args: infer FnParams) => any ? FnParams extends [] | [any] ? Key_32 : never : `${Key_32}:${/*elided*/ any}` : never; }[keyof T_33] : never : never : never}` : never; }[keyof T_32] : never : never : never}` : never; }[keyof T_31] : never : never : never}` : never; }[keyof T_30] : never : never : never}` : never; }[keyof T_29] : never : never : never}` : never; }[keyof T_28] : never : never : never}` : never; }[keyof T_27] : never : never : never}` : never; }[keyof T_26] : never : never : never}` : never; }[keyof T_25] : never : never : never}` : never; }[keyof T_24] : never : never : never}` : never; }[keyof T_23] : never : never : never]: {
to: TAction_1;
on?: never;
}; } & { [TAction_2 in T["policies"] extends infer T_34 ? T_34 extends T["policies"] ? T_34 extends object ? { [Key_33 in keyof T_34]: Key_33 extends string | number ? T_34[Key_33] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_33 : never : `${Key_33}:${T_34[Key_33] extends infer T_35 ? T_35 extends T_34[Key_33] ? T_35 extends object ? { [Key_34 in keyof T_35]: Key_34 extends string | number ? T_35[Key_34] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_34 : never : `${Key_34}:${T_35[Key_34] extends infer T_36 ? T_36 extends T_35[Key_34] ? T_36 extends object ? { [Key_35 in keyof T_36]: Key_35 extends string | number ? T_36[Key_35] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_35 : never : `${Key_35}:${T_36[Key_35] extends infer T_37 ? T_37 extends T_36[Key_35] ? T_37 extends object ? { [Key_36 in keyof T_37]: Key_36 extends string | number ? T_37[Key_36] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_36 : never : `${Key_36}:${T_37[Key_36] extends infer T_38 ? T_38 extends T_37[Key_36] ? T_38 extends object ? { [Key_37 in keyof T_38]: Key_37 extends string | number ? T_38[Key_37] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_37 : never : `${Key_37}:${T_38[Key_37] extends infer T_39 ? T_39 extends T_38[Key_37] ? T_39 extends object ? { [Key_38 in keyof T_39]: Key_38 extends string | number ? T_39[Key_38] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_38 : never : `${Key_38}:${T_39[Key_38] extends infer T_40 ? T_40 extends T_39[Key_38] ? T_40 extends object ? { [Key_39 in keyof T_40]: Key_39 extends string | number ? T_40[Key_39] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_39 : never : `${Key_39}:${T_40[Key_39] extends infer T_41 ? T_41 extends T_40[Key_39] ? T_41 extends object ? { [Key_40 in keyof T_41]: Key_40 extends string | number ? T_41[Key_40] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_40 : never : `${Key_40}:${T_41[Key_40] extends infer T_42 ? T_42 extends T_41[Key_40] ? T_42 extends object ? { [Key_41 in keyof T_42]: Key_41 extends string | number ? T_42[Key_41] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_41 : never : `${Key_41}:${T_42[Key_41] extends infer T_43 ? T_43 extends T_42[Key_41] ? T_43 extends object ? { [Key_42 in keyof T_43]: Key_42 extends string | number ? T_43[Key_42] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_42 : never : `${Key_42}:${T_43[Key_42] extends infer T_44 ? T_44 extends T_43[Key_42] ? T_44 extends object ? { [Key_43 in keyof T_44]: Key_43 extends string | number ? T_44[Key_43] extends (...args: infer FnParams) => any ? FnParams extends [any, any] ? Key_43 : never : `${Key_43}:${/*elided*/ any}` : never; }[keyof T_44] : never : never : never}` : never; }[keyof T_43] : never : never : never}` : never; }[keyof T_42] : never : never : never}` : never; }[keyof T_41] : never : never : never}` : never; }[keyof T_40] : never : never : never}` : never; }[keyof T_39] : never : never : never}` : never; }[keyof T_38] : never : never : never}` : never; }[keyof T_37] : never : never : never}` : never; }[keyof T_36] : never : never : never}` : never; }[keyof T_35] : never : never : never}` : never; }[keyof T_34] : never : never : never]: {
to: TAction_2;
on: _kilpi_core.InferPolicyInputs<(T["policies"] extends infer T_45 ? T_45 extends T["policies"] ? T_45 extends object ? TAction_2 extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_45 ? T_45[FirstKey] extends infer T_46 ? T_46 extends T_45[FirstKey] ? T_46 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_46 ? T_46[FirstKey] extends infer T_47 ? T_47 extends T_46[FirstKey] ? T_47 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_47 ? T_47[FirstKey] extends infer T_48 ? T_48 extends T_47[FirstKey] ? T_48 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_48 ? T_48[FirstKey] extends infer T_49 ? T_49 extends T_48[FirstKey] ? T_49 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_49 ? T_49[FirstKey] extends infer T_50 ? T_50 extends T_49[FirstKey] ? T_50 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_50 ? T_50[FirstKey] extends infer T_51 ? T_51 extends T_50[FirstKey] ? T_51 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_51 ? T_51[FirstKey] extends infer T_52 ? T_52 extends T_51[FirstKey] ? T_52 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_52 ? T_52[FirstKey] extends infer T_53 ? T_53 extends T_52[FirstKey] ? T_53 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_53 ? T_53[FirstKey] extends infer T_54 ? T_54 extends T_53[FirstKey] ? T_54 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_54 ? T_54[FirstKey] extends infer T_55 ? T_55 extends T_54[FirstKey] ? T_55 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_55 ? /*elided*/ any : never : Rest extends keyof T_55 ? T_55[Rest] : never : never : never : never : never : Rest extends keyof T_54 ? T_54[Rest] : never : never : never : never : never : Rest extends keyof T_53 ? T_53[Rest] : never : never : never : never : never : Rest extends keyof T_52 ? T_52[Rest] : never : never : never : never : never : Rest extends keyof T_51 ? T_51[Rest] : never : never : never : never : never : Rest extends keyof T_50 ? T_50[Rest] : never : never : never : never : never : Rest extends keyof T_49 ? T_49[Rest] : never : never : never : never : never : Rest extends keyof T_48 ? T_48[Rest] : never : never : never : never : never : Rest extends keyof T_47 ? T_47[Rest] : never : never : never : never : never : Rest extends keyof T_46 ? T_46[Rest] : never : never : never : never : never : TAction_2 extends keyof T_45 ? T_45[TAction_2] : never : never : never : never) extends infer T_56 ? T_56 extends (T["policies"] extends infer T_57 ? T_57 extends T["policies"] ? T_57 extends object ? TAction_2 extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_57 ? T_57[FirstKey] extends infer T_58 ? T_58 extends T_57[FirstKey] ? T_58 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_58 ? T_58[FirstKey] extends infer T_59 ? T_59 extends T_58[FirstKey] ? T_59 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_59 ? T_59[FirstKey] extends infer T_60 ? T_60 extends T_59[FirstKey] ? T_60 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_60 ? T_60[FirstKey] extends infer T_61 ? T_61 extends T_60[FirstKey] ? T_61 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_61 ? T_61[FirstKey] extends infer T_62 ? T_62 extends T_61[FirstKey] ? T_62 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_62 ? T_62[FirstKey] extends infer T_63 ? T_63 extends T_62[FirstKey] ? T_63 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_63 ? T_63[FirstKey] extends infer T_64 ? T_64 extends T_63[FirstKey] ? T_64 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_64 ? T_64[FirstKey] extends infer T_65 ? T_65 extends T_64[FirstKey] ? T_65 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_65 ? T_65[FirstKey] extends infer T_66 ? T_66 extends T_65[FirstKey] ? T_66 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_66 ? T_66[FirstKey] extends infer T_67 ? T_67 extends T_66[FirstKey] ? T_67 extends object ? Rest extends `${infer FirstKey}:${infer Rest}` ? FirstKey extends keyof T_67 ? /*elided*/ any : never : Rest extends keyof T_67 ? T_67[Rest] : never : never : never : never : never : Rest extends keyof T_66 ? T_66[Rest] : never : never : never : never : never : Rest extends keyof T_65 ? T_65[Rest] : never : never : never : never : never : Rest extends keyof T_64 ? T_64[Rest] : never : never : never : never : never : Rest extends keyof T_63 ? T_63[Rest] : never : never : never : never : never : Rest extends keyof T_62 ? T_62[Rest] : never : never : never : never : never : Rest extends keyof T_61 ? T_61[Rest] : never : never : never : never : never : Rest extends keyof T_60 ? T_60[Rest] : never : never : never : never : never : Rest extends keyof T_59 ? T_59[Rest] : never : never : never : never : never : Rest extends keyof T_58 ? T_58[Rest] : never : never : never : never : never : TAction_2 extends keyof T_57 ? T_57[TAction_2] : never : never : never : never) ? T_56 extends _kilpi_core.Policy<any, any, any> ? T_56 : never : never : never>[0];
}; })[TAction]) => react.ReactNode;
};
};
}>;
export { ReactClientComponentPlugin };