@bool-ts/guard-sdk 1.1.0-beta.2 → 1.1.0-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1,4 @@
1
- export type TPartialTuple<T extends readonly any[]> = T extends readonly [infer Head, ...infer Tail] ? TPartialTuple<Tail> | [Head, ...TPartialTuple<Tail>] : [];
1
+ export type TPartialTuple<T extends readonly any[]> = T extends readonly [
2
+ infer Head,
3
+ ...infer Tail
4
+ ] ? TPartialTuple<Tail> | [Head, ...TPartialTuple<Tail>] : [];
@@ -1,5 +1,2 @@
1
1
  import type { TPartialTuple } from "./partialTuple";
2
- export type TPartialTupleNonEmpty<T extends readonly any[]> = T extends readonly [
3
- infer Head,
4
- ...infer Tail
5
- ] ? [Head, ...TPartialTuple<Tail>] | TPartialTupleNonEmpty<Tail> : never;
2
+ export type TPartialTupleNonEmpty<T extends readonly any[]> = T extends readonly [infer Head, ...infer Tail] ? [Head, ...TPartialTuple<Tail>] | TPartialTupleNonEmpty<Tail> : never;
package/package.json CHANGED
@@ -4,11 +4,14 @@
4
4
  "url": "https://github.com/BoolTS/guard-sdk/issues"
5
5
  },
6
6
  "dependencies": {
7
- "jose": "^6.1.0",
8
- "zod": "^4.1.12"
7
+ "jose": "^6.1.3",
8
+ "reflect-metadata": "^0.2.2",
9
+ "zod": "^4.2.1"
9
10
  },
10
11
  "devDependencies": {
12
+ "@bool-ts/core": "^2.1.3",
11
13
  "@types/bun": "latest",
14
+ "prettier": "^3.7.4",
12
15
  "typescript": "^5.9.3"
13
16
  },
14
17
  "files": [
@@ -29,10 +32,6 @@
29
32
  "license": "MIT",
30
33
  "main": "./dist/index.js",
31
34
  "name": "@bool-ts/guard-sdk",
32
- "peerDependencies": {
33
- "@bool-ts/core": "^2.0.4",
34
- "reflect-metadata": "^0.2.2"
35
- },
36
35
  "private": false,
37
36
  "publishConfig": {
38
37
  "access": "public"
@@ -43,8 +42,9 @@
43
42
  },
44
43
  "scripts": {
45
44
  "build": "tsc --emitDeclarationOnly && bun run app.build.ts",
45
+ "format": "prettier \"**/*.ts\" --write",
46
46
  "test": "bun --hot run __test/index.ts"
47
47
  },
48
48
  "types": "./dist/index.d.ts",
49
- "version": "1.1.0-beta.2"
49
+ "version": "1.1.0-beta.4"
50
50
  }
@@ -5,7 +5,8 @@ import { Keys } from "../constants";
5
5
 
6
6
  export const ActionGuard =
7
7
  <
8
- const T extends readonly TResourceDefinition[] = readonly TResourceDefinition[],
8
+ const T extends readonly TResourceDefinition[] =
9
+ readonly TResourceDefinition[],
9
10
  K extends TConstructor<Object> | Object = Object
10
11
  >(
11
12
  options?: TActionGuardOptions<T>
@@ -1 +1,3 @@
1
+ export { ActionGuard } from "./actionGuard.decorator";
1
2
  export { AuthState } from "./authState.decorator";
3
+ export { ControllerGuard } from "./controllerGuard.decorator";
@@ -0,0 +1,35 @@
1
+ import type { IGuard, THttpRouteModel } from "@bool-ts/core";
2
+ import type { TAuthState } from "../interfaces/client.interface";
3
+
4
+ import { Guard as BoolTsGuard, RouteModel } from "@bool-ts/core";
5
+ import { Keys } from "../constants";
6
+ import { AuthState } from "../decorators/authState.decorator";
7
+
8
+ @BoolTsGuard()
9
+ export class Guard implements IGuard {
10
+ enforce(
11
+ @RouteModel()
12
+ routeModel: THttpRouteModel,
13
+ @AuthState()
14
+ authState: TAuthState
15
+ ) {
16
+ const actionMetadataKeys = Reflect.getOwnMetadataKeys(
17
+ routeModel.class.prototype,
18
+ routeModel.funcName
19
+ );
20
+
21
+ if (actionMetadataKeys.includes(Keys.guardMetadata)) {
22
+ return !authState ? false : true;
23
+ }
24
+
25
+ const controllerMetadataKeys = Reflect.getOwnMetadataKeys(
26
+ routeModel.class
27
+ );
28
+
29
+ if (controllerMetadataKeys.includes(Keys.guardMetadata)) {
30
+ return !authState ? false : true;
31
+ }
32
+
33
+ return true;
34
+ }
35
+ }
@@ -1,3 +1,3 @@
1
- export * from "./interceptor";
1
+ export * from "./guard";
2
2
  export * from "./loader";
3
3
  export * from "./middleware";
@@ -17,7 +17,7 @@ export const loader = async ({
17
17
  credential,
18
18
  definition,
19
19
  options
20
- }: TLoaderParameters): Promise<[Symbol, Client]> => {
20
+ }: TLoaderParameters): Promise<[symbol, Client]> => {
21
21
  const boolGuardClient = new Client({ credential, definition, options });
22
22
 
23
23
  await boolGuardClient.signToken();
@@ -1,7 +1,12 @@
1
1
  import type { IContext, IMiddleware } from "@bool-ts/core";
2
2
  import type { IClient, TAuthState } from "../interfaces/client.interface";
3
3
 
4
- import { Middleware as BoolMiddleware, Context, Inject, RequestHeaders } from "@bool-ts/core";
4
+ import {
5
+ Middleware as BoolMiddleware,
6
+ Context,
7
+ Inject,
8
+ RequestHeaders
9
+ } from "@bool-ts/core";
5
10
  import { object, string } from "zod/v4";
6
11
  import { Keys } from "../constants";
7
12
 
@@ -44,7 +49,9 @@ export class Middleware implements IMiddleware {
44
49
  @RequestHeaders()
45
50
  requestHeaders: Headers
46
51
  ) {
47
- const headersValidation = await headersSchema.safeParseAsync(requestHeaders.toJSON());
52
+ const headersValidation = await headersSchema.safeParseAsync(
53
+ requestHeaders.toJSON()
54
+ );
48
55
 
49
56
  if (!headersValidation.success) {
50
57
  return context.set(Keys.authState, undefined);
@@ -54,9 +61,10 @@ export class Middleware implements IMiddleware {
54
61
  } = headersValidation.data;
55
62
 
56
63
  try {
57
- const { account, credential } = await this.clientInstance.verifyToken({
58
- token: token
59
- });
64
+ const { account, credential } =
65
+ await this.clientInstance.verifyToken({
66
+ token: token
67
+ });
60
68
 
61
69
  const authState: TAuthState = Object.freeze({
62
70
  account: account,
@@ -1,4 +1,7 @@
1
- export type TDefaultAccountMetadata = Record<string, string | number | Date | null | undefined>;
1
+ export type TDefaultAccountMetadata = Record<
2
+ string,
3
+ string | number | Date | null | undefined
4
+ >;
2
5
 
3
6
  export interface IAccount<T = TDefaultAccountMetadata> {
4
7
  uuid: string;
@@ -1,3 +1,7 @@
1
1
  export type TApiResponse<T> = Readonly<{
2
- data: Awaited<ReturnType<T extends (...args: any) => Promise<infer R> ? () => R : never>>;
2
+ data: Awaited<
3
+ ReturnType<
4
+ T extends (...args: any) => Promise<infer R> ? () => R : never
5
+ >
6
+ >;
3
7
  }>;
@@ -50,9 +50,7 @@ export interface IClient<
50
50
  account: IAccount<TAccountMetadata>;
51
51
  credential: IAccountCredential;
52
52
  }>;
53
- verifyToken(args: {
54
- token: string;
55
- }): Promise<{
53
+ verifyToken(args: { token: string }): Promise<{
56
54
  account: IAccount<TAccountMetadata>;
57
55
  credential: IAccountCredential;
58
56
  }>;
@@ -1,5 +1,9 @@
1
1
  export type { IAccount } from "./account.interface";
2
2
  export type { IAccountCredential } from "./accountCredential.interface";
3
3
  export type { TApiResponse } from "./base";
4
- export type { IClient, TAuthState, TClientCredential as TClientConfigs, TClientOptions } from "./client.interface";
5
-
4
+ export type {
5
+ IClient,
6
+ TAuthState,
7
+ TClientCredential as TClientConfigs,
8
+ TClientOptions
9
+ } from "./client.interface";
@@ -1,10 +1,10 @@
1
1
  type DeepReadonly<T> = T extends (...args: any[]) => any
2
2
  ? T
3
3
  : T extends readonly any[]
4
- ? { readonly [K in keyof T]: DeepReadonly<T[K]> }
5
- : T extends object
6
- ? { readonly [K in keyof T]: DeepReadonly<T[K]> }
7
- : T;
4
+ ? { readonly [K in keyof T]: DeepReadonly<T[K]> }
5
+ : T extends object
6
+ ? { readonly [K in keyof T]: DeepReadonly<T[K]> }
7
+ : T;
8
8
 
9
9
  export function deepFreeze<const T>(obj: T): DeepReadonly<T> {
10
10
  if (typeof obj !== "object" || obj === null) return obj as any;
@@ -1,7 +1,7 @@
1
1
  export type TInArray<T, X> = T extends readonly [X, ...infer _Rest]
2
2
  ? true
3
3
  : T extends readonly [X]
4
- ? true
5
- : T extends readonly [infer _, ...infer Rest]
6
- ? TInArray<Rest, X>
7
- : false;
4
+ ? true
5
+ : T extends readonly [infer _, ...infer Rest]
6
+ ? TInArray<Rest, X>
7
+ : false;
@@ -1,3 +1,6 @@
1
- export type TPartialTuple<T extends readonly any[]> = T extends readonly [infer Head, ...infer Tail]
1
+ export type TPartialTuple<T extends readonly any[]> = T extends readonly [
2
+ infer Head,
3
+ ...infer Tail
4
+ ]
2
5
  ? TPartialTuple<Tail> | [Head, ...TPartialTuple<Tail>]
3
6
  : [];
@@ -1,8 +1,9 @@
1
1
  import type { TPartialTuple } from "./partialTuple";
2
2
  import type { TPermutationTuple } from "./permutationTuple";
3
3
 
4
- export type TPartialTupleUnordered<T extends readonly any[]> = TPartialTuple<T> extends infer S
5
- ? S extends readonly any[]
6
- ? TPermutationTuple<S[number]>
7
- : never
8
- : never;
4
+ export type TPartialTupleUnordered<T extends readonly any[]> =
5
+ TPartialTuple<T> extends infer S
6
+ ? S extends readonly any[]
7
+ ? TPermutationTuple<S[number]>
8
+ : never
9
+ : never;
@@ -1,8 +1,6 @@
1
1
  import type { TPartialTuple } from "./partialTuple";
2
2
 
3
- export type TPartialTupleNonEmpty<T extends readonly any[]> = T extends readonly [
4
- infer Head,
5
- ...infer Tail
6
- ]
7
- ? [Head, ...TPartialTuple<Tail>] | TPartialTupleNonEmpty<Tail>
8
- : never;
3
+ export type TPartialTupleNonEmpty<T extends readonly any[]> =
4
+ T extends readonly [infer Head, ...infer Tail]
5
+ ? [Head, ...TPartialTuple<Tail>] | TPartialTupleNonEmpty<Tail>
6
+ : never;
@@ -1,5 +1,5 @@
1
1
  export type TPermutationTuple<T, K = T> = [T] extends [never]
2
2
  ? []
3
3
  : T extends any
4
- ? [T, ...TPermutationTuple<Exclude<K, T>>]
5
- : never;
4
+ ? [T, ...TPermutationTuple<Exclude<K, T>>]
5
+ : never;
@@ -1,47 +0,0 @@
1
- import type { IInterceptor, THttpRouteModel } from "@bool-ts/core";
2
- import type { TAuthState } from "../interfaces/client.interface";
3
-
4
- import { Interceptor as BoolInterceptor, HttpClientError, RouteModel } from "@bool-ts/core";
5
- import { Keys } from "../constants";
6
- import { AuthState } from "../decorators/authState.decorator";
7
-
8
- @BoolInterceptor()
9
- export class Interceptor implements IInterceptor {
10
- open(
11
- @RouteModel()
12
- routeModel: THttpRouteModel,
13
- @AuthState()
14
- authState: TAuthState
15
- ) {
16
- const actionMetadataKeys = Reflect.getOwnMetadataKeys(
17
- routeModel.class.prototype,
18
- routeModel.funcName
19
- );
20
-
21
- if (actionMetadataKeys.includes(Keys.authState)) {
22
- if (!authState) {
23
- throw new HttpClientError({
24
- httpCode: 401,
25
- message: "Unauthorized",
26
- data: undefined
27
- });
28
- }
29
-
30
- return;
31
- }
32
-
33
- const controllerMetadataKeys = Reflect.getOwnMetadataKeys(routeModel.class);
34
-
35
- if (controllerMetadataKeys.includes(Keys.authState)) {
36
- if (!authState) {
37
- throw new HttpClientError({
38
- httpCode: 401,
39
- message: "Unauthorized",
40
- data: undefined
41
- });
42
- }
43
-
44
- return;
45
- }
46
- }
47
- }