@venizia/ignis 0.2.0-2 → 0.2.0-21
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.
- package/dist/base/applications/base.d.ts +14 -13
- package/dist/base/applications/base.d.ts.map +1 -1
- package/dist/base/applications/base.js +55 -52
- package/dist/base/applications/base.js.map +1 -1
- package/dist/base/applications/boot-steps.d.ts +13 -0
- package/dist/base/applications/boot-steps.d.ts.map +1 -0
- package/dist/base/applications/boot-steps.js +23 -0
- package/dist/base/applications/boot-steps.js.map +1 -0
- package/dist/base/applications/common/index.d.ts +2 -0
- package/dist/base/applications/common/index.d.ts.map +1 -0
- package/dist/base/applications/common/index.js +18 -0
- package/dist/base/applications/common/index.js.map +1 -0
- package/dist/base/applications/{types.d.ts → common/types.d.ts} +11 -0
- package/dist/base/applications/common/types.d.ts.map +1 -0
- package/dist/base/applications/common/types.js.map +1 -0
- package/dist/base/applications/index.d.ts +2 -1
- package/dist/base/applications/index.d.ts.map +1 -1
- package/dist/base/applications/index.js +2 -1
- package/dist/base/applications/index.js.map +1 -1
- package/dist/base/applications/server.d.ts +4 -2
- package/dist/base/applications/server.d.ts.map +1 -1
- package/dist/base/applications/server.js +25 -2
- package/dist/base/applications/server.js.map +1 -1
- package/dist/base/controllers/grpc/adapter.d.ts +2 -1
- package/dist/base/controllers/grpc/adapter.d.ts.map +1 -1
- package/dist/base/controllers/grpc/adapter.js +4 -3
- package/dist/base/controllers/grpc/adapter.js.map +1 -1
- package/dist/base/middlewares/app-error/app-error.middleware.d.ts +3 -2
- package/dist/base/middlewares/app-error/app-error.middleware.d.ts.map +1 -1
- package/dist/base/middlewares/app-error/app-error.middleware.js +4 -3
- package/dist/base/middlewares/app-error/app-error.middleware.js.map +1 -1
- package/dist/base/middlewares/request-spy/request-spy.middleware.d.ts.map +1 -1
- package/dist/base/middlewares/request-spy/request-spy.middleware.js +2 -1
- package/dist/base/middlewares/request-spy/request-spy.middleware.js.map +1 -1
- package/dist/components/api-reference/component.d.ts.map +1 -1
- package/dist/components/api-reference/component.js +4 -2
- package/dist/components/api-reference/component.js.map +1 -1
- package/dist/components/api-reference/index.d.ts +1 -1
- package/dist/components/api-reference/index.d.ts.map +1 -1
- package/dist/components/api-reference/index.js +1 -1
- package/dist/components/api-reference/index.js.map +1 -1
- package/dist/components/api-reference/ui/factory.d.ts +14 -0
- package/dist/components/api-reference/ui/factory.d.ts.map +1 -0
- package/dist/components/api-reference/{ui-factory.js → ui/factory.js} +7 -21
- package/dist/components/api-reference/ui/factory.js.map +1 -0
- package/dist/components/api-reference/ui/index.d.ts +4 -0
- package/dist/components/api-reference/ui/index.d.ts.map +1 -0
- package/dist/components/api-reference/ui/index.js +20 -0
- package/dist/components/api-reference/ui/index.js.map +1 -0
- package/dist/components/api-reference/ui/scalar.d.ts +8 -0
- package/dist/components/api-reference/ui/scalar.d.ts.map +1 -0
- package/dist/components/api-reference/ui/scalar.js +28 -0
- package/dist/components/api-reference/ui/scalar.js.map +1 -0
- package/dist/components/api-reference/ui/swagger.d.ts +8 -0
- package/dist/components/api-reference/ui/swagger.d.ts.map +1 -0
- package/dist/components/api-reference/ui/swagger.js +28 -0
- package/dist/components/api-reference/ui/swagger.js.map +1 -0
- package/dist/components/auth/authenticate/component.d.ts +10 -1
- package/dist/components/auth/authenticate/component.d.ts.map +1 -1
- package/dist/components/auth/authenticate/component.js +79 -25
- package/dist/components/auth/authenticate/component.js.map +1 -1
- package/dist/components/auth/authenticate/controllers/factory.d.ts +33 -2
- package/dist/components/auth/authenticate/controllers/factory.d.ts.map +1 -1
- package/dist/components/auth/authenticate/controllers/index.d.ts +1 -0
- package/dist/components/auth/authenticate/controllers/index.d.ts.map +1 -1
- package/dist/components/auth/authenticate/controllers/index.js +1 -0
- package/dist/components/auth/authenticate/controllers/index.js.map +1 -1
- package/dist/components/auth/authenticate/controllers/service-certs/controller.d.ts +10 -0
- package/dist/components/auth/authenticate/controllers/service-certs/controller.d.ts.map +1 -0
- package/dist/components/auth/authenticate/controllers/service-certs/controller.js +50 -0
- package/dist/components/auth/authenticate/controllers/service-certs/controller.js.map +1 -0
- package/dist/components/auth/authenticate/controllers/service-certs/definitions.d.ts +73 -0
- package/dist/components/auth/authenticate/controllers/service-certs/definitions.d.ts.map +1 -0
- package/dist/components/auth/authenticate/controllers/service-certs/definitions.js +34 -0
- package/dist/components/auth/authenticate/controllers/service-certs/definitions.js.map +1 -0
- package/dist/components/auth/authenticate/controllers/service-certs/index.d.ts +3 -0
- package/dist/components/auth/authenticate/controllers/service-certs/index.d.ts.map +1 -0
- package/dist/components/auth/authenticate/controllers/service-certs/index.js +19 -0
- package/dist/components/auth/authenticate/controllers/service-certs/index.js.map +1 -0
- package/dist/components/auth/authenticate/services/bearer/jwks/issuer.service.d.ts +16 -0
- package/dist/components/auth/authenticate/services/bearer/jwks/issuer.service.d.ts.map +1 -1
- package/dist/components/auth/authenticate/services/bearer/jwks/issuer.service.js +29 -0
- package/dist/components/auth/authenticate/services/bearer/jwks/issuer.service.js.map +1 -1
- package/dist/components/auth/authenticate/services/index.d.ts +1 -0
- package/dist/components/auth/authenticate/services/index.d.ts.map +1 -1
- package/dist/components/auth/authenticate/services/index.js +1 -0
- package/dist/components/auth/authenticate/services/index.js.map +1 -1
- package/dist/components/auth/authenticate/services/service/index.d.ts +3 -0
- package/dist/components/auth/authenticate/services/service/index.d.ts.map +1 -0
- package/dist/components/auth/authenticate/services/service/index.js +19 -0
- package/dist/components/auth/authenticate/services/service/index.js.map +1 -0
- package/dist/components/auth/authenticate/services/service/signer.service.d.ts +46 -0
- package/dist/components/auth/authenticate/services/service/signer.service.d.ts.map +1 -0
- package/dist/components/auth/authenticate/services/service/signer.service.js +135 -0
- package/dist/components/auth/authenticate/services/service/signer.service.js.map +1 -0
- package/dist/components/auth/authenticate/services/service/verifier.service.d.ts +40 -0
- package/dist/components/auth/authenticate/services/service/verifier.service.d.ts.map +1 -0
- package/dist/components/auth/authenticate/services/service/verifier.service.js +165 -0
- package/dist/components/auth/authenticate/services/service/verifier.service.js.map +1 -0
- package/dist/components/auth/authenticate/strategies/index.d.ts +2 -1
- package/dist/components/auth/authenticate/strategies/index.d.ts.map +1 -1
- package/dist/components/auth/authenticate/strategies/index.js +2 -1
- package/dist/components/auth/authenticate/strategies/index.js.map +1 -1
- package/dist/components/auth/authenticate/strategies/jwks/index.d.ts +3 -0
- package/dist/components/auth/authenticate/strategies/jwks/index.d.ts.map +1 -0
- package/dist/components/auth/authenticate/strategies/jwks/index.js +19 -0
- package/dist/components/auth/authenticate/strategies/jwks/index.js.map +1 -0
- package/dist/components/auth/authenticate/strategies/jwks/issuer.d.ts +13 -0
- package/dist/components/auth/authenticate/strategies/jwks/issuer.d.ts.map +1 -0
- package/dist/components/auth/authenticate/strategies/{jwks.strategy.js → jwks/issuer.js} +4 -27
- package/dist/components/auth/authenticate/strategies/jwks/issuer.js.map +1 -0
- package/dist/components/auth/authenticate/strategies/{jwks.strategy.d.ts → jwks/verifier.d.ts} +2 -10
- package/dist/components/auth/authenticate/strategies/jwks/verifier.d.ts.map +1 -0
- package/dist/components/auth/authenticate/strategies/jwks/verifier.js +45 -0
- package/dist/components/auth/authenticate/strategies/jwks/verifier.js.map +1 -0
- package/dist/components/auth/authenticate/strategies/service.strategy.d.ts +19 -0
- package/dist/components/auth/authenticate/strategies/service.strategy.d.ts.map +1 -0
- package/dist/components/auth/authenticate/strategies/service.strategy.js +73 -0
- package/dist/components/auth/authenticate/strategies/service.strategy.js.map +1 -0
- package/dist/components/auth/authorize/adapters/base-filtered.d.ts +1 -1
- package/dist/components/auth/authorize/adapters/base-filtered.d.ts.map +1 -1
- package/dist/components/auth/authorize/adapters/base-filtered.js +5 -8
- package/dist/components/auth/authorize/adapters/base-filtered.js.map +1 -1
- package/dist/components/auth/authorize/adapters/common/index.d.ts +2 -0
- package/dist/components/auth/authorize/adapters/common/index.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/common/index.js +18 -0
- package/dist/components/auth/authorize/adapters/common/index.js.map +1 -0
- package/dist/components/auth/authorize/adapters/{types.d.ts → common/types.d.ts} +1 -1
- package/dist/components/auth/authorize/adapters/common/types.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/common/types.js.map +1 -0
- package/dist/components/auth/authorize/adapters/connector.d.ts +10 -0
- package/dist/components/auth/authorize/adapters/connector.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/connector.js +20 -0
- package/dist/components/auth/authorize/adapters/connector.js.map +1 -0
- package/dist/components/auth/authorize/adapters/custom-grant-expander.d.ts +52 -0
- package/dist/components/auth/authorize/adapters/custom-grant-expander.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/custom-grant-expander.js +111 -0
- package/dist/components/auth/authorize/adapters/custom-grant-expander.js.map +1 -0
- package/dist/components/auth/authorize/adapters/index.d.ts +4 -2
- package/dist/components/auth/authorize/adapters/index.d.ts.map +1 -1
- package/dist/components/auth/authorize/adapters/index.js +4 -2
- package/dist/components/auth/authorize/adapters/index.js.map +1 -1
- package/dist/components/auth/authorize/adapters/scoped-casbin/adapter.d.ts +93 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/adapter.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/{scoped-casbin.adapter.js → scoped-casbin/adapter.js} +95 -97
- package/dist/components/auth/authorize/adapters/scoped-casbin/adapter.js.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/constants.d.ts +2 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/constants.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/constants.js +5 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/constants.js.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/index.d.ts +3 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/index.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/index.js +19 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/index.js.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/types.d.ts +50 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/types.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/types.js +3 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/common/types.js.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/index.d.ts +4 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/index.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/index.js +19 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/index.js.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/policy-edges.d.ts +17 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/policy-edges.d.ts.map +1 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/policy-edges.js +11 -0
- package/dist/components/auth/authorize/adapters/scoped-casbin/policy-edges.js.map +1 -0
- package/dist/components/auth/authorize/component.d.ts.map +1 -1
- package/dist/components/auth/authorize/component.js +3 -0
- package/dist/components/auth/authorize/component.js.map +1 -1
- package/dist/components/auth/authorize/enforcers/casbin.enforcer.d.ts +7 -36
- package/dist/components/auth/authorize/enforcers/casbin.enforcer.d.ts.map +1 -1
- package/dist/components/auth/authorize/enforcers/casbin.enforcer.js +48 -117
- package/dist/components/auth/authorize/enforcers/casbin.enforcer.js.map +1 -1
- package/dist/components/auth/authorize/enforcers/index.d.ts +2 -1
- package/dist/components/auth/authorize/enforcers/index.d.ts.map +1 -1
- package/dist/components/auth/authorize/enforcers/index.js +2 -1
- package/dist/components/auth/authorize/enforcers/index.js.map +1 -1
- package/dist/components/auth/authorize/enforcers/policy-line-codec.d.ts +26 -0
- package/dist/components/auth/authorize/enforcers/policy-line-codec.d.ts.map +1 -0
- package/dist/components/auth/authorize/enforcers/policy-line-codec.js +57 -0
- package/dist/components/auth/authorize/enforcers/policy-line-codec.js.map +1 -0
- package/dist/components/auth/authorize/enforcers/user-policy-line-cache.d.ts +46 -0
- package/dist/components/auth/authorize/enforcers/user-policy-line-cache.d.ts.map +1 -0
- package/dist/components/auth/authorize/enforcers/user-policy-line-cache.js +98 -0
- package/dist/components/auth/authorize/enforcers/user-policy-line-cache.js.map +1 -0
- package/dist/components/auth/authorize/index.d.ts +1 -0
- package/dist/components/auth/authorize/index.d.ts.map +1 -1
- package/dist/components/auth/authorize/index.js +1 -0
- package/dist/components/auth/authorize/index.js.map +1 -1
- package/dist/components/auth/authorize/role-managers/base.d.ts +34 -0
- package/dist/components/auth/authorize/role-managers/base.d.ts.map +1 -0
- package/dist/components/auth/authorize/role-managers/base.js +76 -0
- package/dist/components/auth/authorize/role-managers/base.js.map +1 -0
- package/dist/components/auth/authorize/role-managers/domain-hierarchy.d.ts +28 -0
- package/dist/components/auth/authorize/role-managers/domain-hierarchy.d.ts.map +1 -0
- package/dist/components/auth/authorize/role-managers/domain-hierarchy.js +77 -0
- package/dist/components/auth/authorize/role-managers/domain-hierarchy.js.map +1 -0
- package/dist/components/auth/authorize/role-managers/index.d.ts +5 -0
- package/dist/components/auth/authorize/role-managers/index.d.ts.map +1 -0
- package/dist/components/auth/authorize/role-managers/index.js +21 -0
- package/dist/components/auth/authorize/role-managers/index.js.map +1 -0
- package/dist/components/auth/authorize/role-managers/membership.d.ts +21 -0
- package/dist/components/auth/authorize/role-managers/membership.d.ts.map +1 -0
- package/dist/components/auth/authorize/role-managers/membership.js +69 -0
- package/dist/components/auth/authorize/role-managers/membership.js.map +1 -0
- package/dist/components/auth/authorize/{enforcers/resource-role-manager.d.ts → role-managers/resource.d.ts} +3 -9
- package/dist/components/auth/authorize/role-managers/resource.d.ts.map +1 -0
- package/dist/components/auth/authorize/{enforcers/resource-role-manager.js → role-managers/resource.js} +9 -21
- package/dist/components/auth/authorize/role-managers/resource.js.map +1 -0
- package/dist/components/auth/models/entities/policy-definition.model.d.ts +49 -14
- package/dist/components/auth/models/entities/policy-definition.model.d.ts.map +1 -1
- package/dist/components/auth/models/entities/policy-definition.model.js +45 -11
- package/dist/components/auth/models/entities/policy-definition.model.js.map +1 -1
- package/dist/components/auth/models/entities/user.model.d.ts +2 -2
- package/dist/components/mail/common/constants.d.ts +7 -0
- package/dist/components/mail/common/constants.d.ts.map +1 -1
- package/dist/components/mail/common/constants.js +7 -1
- package/dist/components/mail/common/constants.js.map +1 -1
- package/dist/components/mail/common/types/index.d.ts +6 -0
- package/dist/components/mail/common/types/index.d.ts.map +1 -0
- package/dist/components/mail/common/types/index.js +22 -0
- package/dist/components/mail/common/types/index.js.map +1 -0
- package/dist/components/mail/common/types/message.d.ts +48 -0
- package/dist/components/mail/common/types/message.d.ts.map +1 -0
- package/dist/components/mail/common/types/message.js +3 -0
- package/dist/components/mail/common/types/message.js.map +1 -0
- package/dist/components/mail/common/types/options.d.ts +42 -0
- package/dist/components/mail/common/types/options.d.ts.map +1 -0
- package/dist/components/mail/common/types/options.js +3 -0
- package/dist/components/mail/common/types/options.js.map +1 -0
- package/dist/components/mail/common/types/queue.d.ts +53 -0
- package/dist/components/mail/common/types/queue.d.ts.map +1 -0
- package/dist/components/mail/common/types/queue.js +3 -0
- package/dist/components/mail/common/types/queue.js.map +1 -0
- package/dist/components/mail/common/types/template.d.ts +33 -0
- package/dist/components/mail/common/types/template.d.ts.map +1 -0
- package/dist/components/mail/common/types/template.js +3 -0
- package/dist/components/mail/common/types/template.js.map +1 -0
- package/dist/components/mail/common/types/verification.d.ts +26 -0
- package/dist/components/mail/common/types/verification.d.ts.map +1 -0
- package/dist/components/mail/common/types/verification.js +3 -0
- package/dist/components/mail/common/types/verification.js.map +1 -0
- package/dist/components/mail/services/generators/index.d.ts +4 -0
- package/dist/components/mail/services/generators/index.d.ts.map +1 -0
- package/dist/components/mail/services/generators/index.js +20 -0
- package/dist/components/mail/services/generators/index.js.map +1 -0
- package/dist/components/mail/services/generators/numeric-code.d.ts +7 -0
- package/dist/components/mail/services/generators/numeric-code.d.ts.map +1 -0
- package/dist/components/mail/services/generators/numeric-code.js +20 -0
- package/dist/components/mail/services/generators/numeric-code.js.map +1 -0
- package/dist/components/mail/services/generators/random-token.d.ts +7 -0
- package/dist/components/mail/services/generators/random-token.d.ts.map +1 -0
- package/dist/components/mail/services/generators/random-token.js +18 -0
- package/dist/components/mail/services/generators/random-token.js.map +1 -0
- package/dist/components/mail/services/generators/verification-data.d.ts +9 -0
- package/dist/components/mail/services/generators/verification-data.d.ts.map +1 -0
- package/dist/components/mail/services/{generator.service.js → generators/verification-data.js} +10 -25
- package/dist/components/mail/services/generators/verification-data.js.map +1 -0
- package/dist/components/mail/services/index.d.ts +1 -1
- package/dist/components/mail/services/index.d.ts.map +1 -1
- package/dist/components/mail/services/index.js +1 -1
- package/dist/components/mail/services/index.js.map +1 -1
- package/dist/components/static-asset/controller/factory.d.ts +34 -2
- package/dist/components/static-asset/controller/factory.d.ts.map +1 -1
- package/dist/components/static-asset/models/base.model.d.ts +4 -4
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/package.json +22 -23
- package/dist/base/applications/types.d.ts.map +0 -1
- package/dist/base/applications/types.js.map +0 -1
- package/dist/components/api-reference/ui-factory.d.ts +0 -21
- package/dist/components/api-reference/ui-factory.d.ts.map +0 -1
- package/dist/components/api-reference/ui-factory.js.map +0 -1
- package/dist/components/auth/authenticate/strategies/jwks.strategy.d.ts.map +0 -1
- package/dist/components/auth/authenticate/strategies/jwks.strategy.js.map +0 -1
- package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.d.ts +0 -121
- package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.d.ts.map +0 -1
- package/dist/components/auth/authorize/adapters/scoped-casbin.adapter.js.map +0 -1
- package/dist/components/auth/authorize/adapters/types.d.ts.map +0 -1
- package/dist/components/auth/authorize/adapters/types.js.map +0 -1
- package/dist/components/auth/authorize/enforcers/resource-role-manager.d.ts.map +0 -1
- package/dist/components/auth/authorize/enforcers/resource-role-manager.js.map +0 -1
- package/dist/components/mail/common/types.d.ts +0 -201
- package/dist/components/mail/common/types.d.ts.map +0 -1
- package/dist/components/mail/common/types.js +0 -10
- package/dist/components/mail/common/types.js.map +0 -1
- package/dist/components/mail/services/generator.service.d.ts +0 -14
- package/dist/components/mail/services/generator.service.d.ts.map +0 -1
- package/dist/components/mail/services/generator.service.js.map +0 -1
- /package/dist/base/applications/{types.js → common/types.js} +0 -0
- /package/dist/components/auth/authorize/adapters/{types.js → common/types.js} +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { TContext } from '@venizia/ignis-kernel';
|
|
2
|
+
import { BaseHelper } from '@venizia/ignis-helpers/core';
|
|
3
|
+
import { Env } from 'hono';
|
|
4
|
+
import { IAuthUser, IAuthenticationStrategy } from '@venizia/ignis-kernel';
|
|
5
|
+
import { JWKSIssuerTokenService } from '../../services';
|
|
6
|
+
export declare class JWKSIssuerAuthenticationStrategy<E extends Env = Env> extends BaseHelper implements IAuthenticationStrategy<E> {
|
|
7
|
+
private service;
|
|
8
|
+
name: string;
|
|
9
|
+
standard: string;
|
|
10
|
+
constructor(service: JWKSIssuerTokenService<E>);
|
|
11
|
+
authenticate(context: TContext<E, string>): Promise<IAuthUser>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=issuer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issuer.d.ts","sourceRoot":"","sources":["../../../../../../src/components/auth/authenticate/strategies/jwks/issuer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,EAEL,SAAS,EACT,uBAAuB,EAExB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD,qBAAa,gCAAgC,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,CAC/D,SAAQ,UACR,YAAW,uBAAuB,CAAC,CAAC,CAAC;IAYnC,OAAO,CAAC,OAAO;IAVjB,IAAI,SAA+B;IACnC,QAAQ,SAAsB;gBASpB,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAK5C,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;CAI/D"}
|
|
@@ -11,16 +11,15 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
12
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
13
|
};
|
|
14
|
-
var JWKSIssuerAuthenticationStrategy_1
|
|
14
|
+
var JWKSIssuerAuthenticationStrategy_1;
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.
|
|
16
|
+
exports.JWKSIssuerAuthenticationStrategy = void 0;
|
|
17
17
|
const ignis_kernel_1 = require("@venizia/ignis-kernel");
|
|
18
18
|
const ignis_kernel_2 = require("@venizia/ignis-kernel");
|
|
19
19
|
const core_1 = require("@venizia/ignis-helpers/core");
|
|
20
20
|
const ignis_inversion_1 = require("@venizia/ignis-inversion");
|
|
21
21
|
const ignis_kernel_3 = require("@venizia/ignis-kernel");
|
|
22
|
-
const services_1 = require("
|
|
23
|
-
const services_2 = require("../services");
|
|
22
|
+
const services_1 = require("../../services");
|
|
24
23
|
let JWKSIssuerAuthenticationStrategy = JWKSIssuerAuthenticationStrategy_1 = class JWKSIssuerAuthenticationStrategy extends core_1.BaseHelper {
|
|
25
24
|
constructor(service) {
|
|
26
25
|
super({ scope: JWKSIssuerAuthenticationStrategy_1.name });
|
|
@@ -43,26 +42,4 @@ exports.JWKSIssuerAuthenticationStrategy = JWKSIssuerAuthenticationStrategy = JW
|
|
|
43
42
|
})),
|
|
44
43
|
__metadata("design:paramtypes", [services_1.JWKSIssuerTokenService])
|
|
45
44
|
], JWKSIssuerAuthenticationStrategy);
|
|
46
|
-
|
|
47
|
-
constructor(service) {
|
|
48
|
-
super({ scope: JWKSVerifierAuthenticationStrategy_1.name });
|
|
49
|
-
this.service = service;
|
|
50
|
-
this.name = ignis_kernel_3.Authentication.STRATEGY_JWT;
|
|
51
|
-
this.standard = ignis_kernel_3.JOSEStandards.JWKS;
|
|
52
|
-
}
|
|
53
|
-
authenticate(context) {
|
|
54
|
-
const token = this.service.extractCredentials(context);
|
|
55
|
-
return this.service.verify(token);
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
exports.JWKSVerifierAuthenticationStrategy = JWKSVerifierAuthenticationStrategy;
|
|
59
|
-
exports.JWKSVerifierAuthenticationStrategy = JWKSVerifierAuthenticationStrategy = JWKSVerifierAuthenticationStrategy_1 = __decorate([
|
|
60
|
-
__param(0, (0, ignis_kernel_1.inject)({
|
|
61
|
-
key: ignis_inversion_1.BindingKeys.build({
|
|
62
|
-
namespace: ignis_kernel_2.BindingNamespaces.SERVICE,
|
|
63
|
-
key: services_2.JWKSVerifierTokenService.name,
|
|
64
|
-
}),
|
|
65
|
-
})),
|
|
66
|
-
__metadata("design:paramtypes", [services_2.JWKSVerifierTokenService])
|
|
67
|
-
], JWKSVerifierAuthenticationStrategy);
|
|
68
|
-
//# sourceMappingURL=jwks.strategy.js.map
|
|
45
|
+
//# sourceMappingURL=issuer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issuer.js","sourceRoot":"","sources":["../../../../../../src/components/auth/authenticate/strategies/jwks/issuer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,wDAA+C;AAC/C,wDAA0D;AAC1D,sDAAyD;AACzD,8DAAuD;AAEvD,wDAK+B;AAC/B,6CAAwD;AAExD,IAAa,gCAAgC,wCAA7C,MAAa,gCACX,SAAQ,iBAAU;IAMlB,YAOE,OAA0C;QAE1C,KAAK,CAAC,EAAE,KAAK,EAAE,kCAAgC,CAAC,IAAI,EAAE,CAAC,CAAC;QAFhD,YAAO,GAAP,OAAO,CAA2B;QAV5C,SAAI,GAAG,6BAAc,CAAC,YAAY,CAAC;QACnC,aAAQ,GAAG,4BAAa,CAAC,IAAI,CAAC;IAY9B,CAAC;IAED,YAAY,CAAC,OAA4B;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;CACF,CAAA;AAvBY,4EAAgC;2CAAhC,gCAAgC;IAQxC,WAAA,IAAA,qBAAM,EAAC;QACN,GAAG,EAAE,6BAAW,CAAC,KAAK,CAAC;YACrB,SAAS,EAAE,gCAAiB,CAAC,OAAO;YACpC,GAAG,EAAE,iCAAsB,CAAC,IAAI;SACjC,CAAC;KACH,CAAC,CAAA;qCACe,iCAAsB;GAd9B,gCAAgC,CAuB5C"}
|
package/dist/components/auth/authenticate/strategies/{jwks.strategy.d.ts → jwks/verifier.d.ts}
RENAMED
|
@@ -2,15 +2,7 @@ import { TContext } from '@venizia/ignis-kernel';
|
|
|
2
2
|
import { BaseHelper } from '@venizia/ignis-helpers/core';
|
|
3
3
|
import { Env } from 'hono';
|
|
4
4
|
import { IAuthUser, IAuthenticationStrategy } from '@venizia/ignis-kernel';
|
|
5
|
-
import {
|
|
6
|
-
import { JWKSVerifierTokenService } from '../services';
|
|
7
|
-
export declare class JWKSIssuerAuthenticationStrategy<E extends Env = Env> extends BaseHelper implements IAuthenticationStrategy<E> {
|
|
8
|
-
private service;
|
|
9
|
-
name: string;
|
|
10
|
-
standard: string;
|
|
11
|
-
constructor(service: JWKSIssuerTokenService<E>);
|
|
12
|
-
authenticate(context: TContext<E, string>): Promise<IAuthUser>;
|
|
13
|
-
}
|
|
5
|
+
import { JWKSVerifierTokenService } from '../../services';
|
|
14
6
|
export declare class JWKSVerifierAuthenticationStrategy<E extends Env = Env> extends BaseHelper implements IAuthenticationStrategy<E> {
|
|
15
7
|
private service;
|
|
16
8
|
name: string;
|
|
@@ -18,4 +10,4 @@ export declare class JWKSVerifierAuthenticationStrategy<E extends Env = Env> ext
|
|
|
18
10
|
constructor(service: JWKSVerifierTokenService<E>);
|
|
19
11
|
authenticate(context: TContext<E, string>): Promise<IAuthUser>;
|
|
20
12
|
}
|
|
21
|
-
//# sourceMappingURL=
|
|
13
|
+
//# sourceMappingURL=verifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../../../../../../src/components/auth/authenticate/strategies/jwks/verifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjD,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAEzD,OAAO,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAC3B,OAAO,EAEL,SAAS,EACT,uBAAuB,EAExB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,qBAAa,kCAAkC,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,CACjE,SAAQ,UACR,YAAW,uBAAuB,CAAC,CAAC,CAAC;IAYnC,OAAO,CAAC,OAAO;IAVjB,IAAI,SAA+B;IACnC,QAAQ,SAAsB;gBASpB,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAK9C,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;CAI/D"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var JWKSVerifierAuthenticationStrategy_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.JWKSVerifierAuthenticationStrategy = void 0;
|
|
17
|
+
const ignis_kernel_1 = require("@venizia/ignis-kernel");
|
|
18
|
+
const ignis_kernel_2 = require("@venizia/ignis-kernel");
|
|
19
|
+
const core_1 = require("@venizia/ignis-helpers/core");
|
|
20
|
+
const ignis_inversion_1 = require("@venizia/ignis-inversion");
|
|
21
|
+
const ignis_kernel_3 = require("@venizia/ignis-kernel");
|
|
22
|
+
const services_1 = require("../../services");
|
|
23
|
+
let JWKSVerifierAuthenticationStrategy = JWKSVerifierAuthenticationStrategy_1 = class JWKSVerifierAuthenticationStrategy extends core_1.BaseHelper {
|
|
24
|
+
constructor(service) {
|
|
25
|
+
super({ scope: JWKSVerifierAuthenticationStrategy_1.name });
|
|
26
|
+
this.service = service;
|
|
27
|
+
this.name = ignis_kernel_3.Authentication.STRATEGY_JWT;
|
|
28
|
+
this.standard = ignis_kernel_3.JOSEStandards.JWKS;
|
|
29
|
+
}
|
|
30
|
+
authenticate(context) {
|
|
31
|
+
const token = this.service.extractCredentials(context);
|
|
32
|
+
return this.service.verify(token);
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
exports.JWKSVerifierAuthenticationStrategy = JWKSVerifierAuthenticationStrategy;
|
|
36
|
+
exports.JWKSVerifierAuthenticationStrategy = JWKSVerifierAuthenticationStrategy = JWKSVerifierAuthenticationStrategy_1 = __decorate([
|
|
37
|
+
__param(0, (0, ignis_kernel_1.inject)({
|
|
38
|
+
key: ignis_inversion_1.BindingKeys.build({
|
|
39
|
+
namespace: ignis_kernel_2.BindingNamespaces.SERVICE,
|
|
40
|
+
key: services_1.JWKSVerifierTokenService.name,
|
|
41
|
+
}),
|
|
42
|
+
})),
|
|
43
|
+
__metadata("design:paramtypes", [services_1.JWKSVerifierTokenService])
|
|
44
|
+
], JWKSVerifierAuthenticationStrategy);
|
|
45
|
+
//# sourceMappingURL=verifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../../../../../src/components/auth/authenticate/strategies/jwks/verifier.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,wDAA+C;AAC/C,wDAA0D;AAC1D,sDAAyD;AACzD,8DAAuD;AAEvD,wDAK+B;AAC/B,6CAA0D;AAE1D,IAAa,kCAAkC,0CAA/C,MAAa,kCACX,SAAQ,iBAAU;IAMlB,YAOE,OAA4C;QAE5C,KAAK,CAAC,EAAE,KAAK,EAAE,oCAAkC,CAAC,IAAI,EAAE,CAAC,CAAC;QAFlD,YAAO,GAAP,OAAO,CAA6B;QAV9C,SAAI,GAAG,6BAAc,CAAC,YAAY,CAAC;QACnC,aAAQ,GAAG,4BAAa,CAAC,IAAI,CAAC;IAY9B,CAAC;IAED,YAAY,CAAC,OAA4B;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;CACF,CAAA;AAvBY,gFAAkC;6CAAlC,kCAAkC;IAQ1C,WAAA,IAAA,qBAAM,EAAC;QACN,GAAG,EAAE,6BAAW,CAAC,KAAK,CAAC;YACrB,SAAS,EAAE,gCAAiB,CAAC,OAAO;YACpC,GAAG,EAAE,mCAAwB,CAAC,IAAI;SACnC,CAAC;KACH,CAAC,CAAA;qCACe,mCAAwB;GAdhC,kCAAkC,CAuB9C"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BaseHelper } from '@venizia/ignis-helpers/core';
|
|
2
|
+
import type { Env } from 'hono';
|
|
3
|
+
import type { IAuthUser, IAuthenticationStrategy, IServiceAuthOptions, TContext } from '@venizia/ignis-kernel';
|
|
4
|
+
import { ServiceAssertionVerifierService } from '../services/service/verifier.service';
|
|
5
|
+
/**
|
|
6
|
+
* Proves the CALLING SERVICE, from a per-request Ed25519 assertion verified against that caller's
|
|
7
|
+
* own JWKS. No identity round trip and no shared password.
|
|
8
|
+
*
|
|
9
|
+
* It proves which service called, never which user. `resolvePrincipal` is where the application
|
|
10
|
+
* turns a caller name into one of its own principals.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ServiceAuthenticationStrategy<E extends Env = Env> extends BaseHelper implements IAuthenticationStrategy<E> {
|
|
13
|
+
private readonly verifier;
|
|
14
|
+
private readonly options;
|
|
15
|
+
name: string;
|
|
16
|
+
constructor(verifier: ServiceAssertionVerifierService, options: IServiceAuthOptions<E>);
|
|
17
|
+
authenticate(context: TContext<E, string>): Promise<IAuthUser>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=service.strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.strategy.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authenticate/strategies/service.strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAY,MAAM,6BAA6B,CAAC;AAEnE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAShC,OAAO,KAAK,EACV,SAAS,EACT,uBAAuB,EACvB,mBAAmB,EACnB,QAAQ,EACT,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AAEvF;;;;;;GAMG;AACH,qBAAa,6BAA6B,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,CAC5D,SAAQ,UACR,YAAW,uBAAuB,CAAC,CAAC,CAAC;IAWnC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAX1B,IAAI,SAAmC;gBASpB,QAAQ,EAAE,+BAA+B,EAEzC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAK5C,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;CA8BrE"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
var ServiceAuthenticationStrategy_1;
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.ServiceAuthenticationStrategy = void 0;
|
|
17
|
+
const core_1 = require("@venizia/ignis-helpers/core");
|
|
18
|
+
const ignis_inversion_1 = require("@venizia/ignis-inversion");
|
|
19
|
+
const ignis_kernel_1 = require("@venizia/ignis-kernel");
|
|
20
|
+
const verifier_service_1 = require("../services/service/verifier.service");
|
|
21
|
+
/**
|
|
22
|
+
* Proves the CALLING SERVICE, from a per-request Ed25519 assertion verified against that caller's
|
|
23
|
+
* own JWKS. No identity round trip and no shared password.
|
|
24
|
+
*
|
|
25
|
+
* It proves which service called, never which user. `resolvePrincipal` is where the application
|
|
26
|
+
* turns a caller name into one of its own principals.
|
|
27
|
+
*/
|
|
28
|
+
let ServiceAuthenticationStrategy = ServiceAuthenticationStrategy_1 = class ServiceAuthenticationStrategy extends core_1.BaseHelper {
|
|
29
|
+
constructor(verifier, options) {
|
|
30
|
+
super({ scope: ServiceAuthenticationStrategy_1.name });
|
|
31
|
+
this.verifier = verifier;
|
|
32
|
+
this.options = options;
|
|
33
|
+
this.name = ignis_kernel_1.Authentication.STRATEGY_SERVICE;
|
|
34
|
+
}
|
|
35
|
+
async authenticate(context) {
|
|
36
|
+
const token = context.req.header(ignis_kernel_1.ServiceAssertion.HEADER);
|
|
37
|
+
if (!token) {
|
|
38
|
+
throw (0, core_1.getError)({ error: ignis_kernel_1.AuthenticationErrors.ASSERTION_MISSING });
|
|
39
|
+
}
|
|
40
|
+
// The raw url, NOT `context.req.path`: Hono hands that back percent-DECODED, so a route carrying
|
|
41
|
+
// a space or a non-ASCII slug would never match the encoded path the caller signed.
|
|
42
|
+
const { issuer } = await this.verifier.verify({
|
|
43
|
+
token,
|
|
44
|
+
method: context.req.method,
|
|
45
|
+
path: new URL(context.req.url).pathname,
|
|
46
|
+
});
|
|
47
|
+
const principal = await this.options.resolvePrincipal({ issuer, context });
|
|
48
|
+
// Validated rather than trusted. `executeAnyMode` calls `setCurrentUser` unconditionally, so an
|
|
49
|
+
// application returning a principal without a `userId` would authenticate the request and then
|
|
50
|
+
// fail at the first write, far from here. `executeAllMode` already refuses it; this closes the
|
|
51
|
+
// gap between the two modes.
|
|
52
|
+
if (!principal?.userId) {
|
|
53
|
+
this.logger
|
|
54
|
+
.for(this.authenticate.name)
|
|
55
|
+
.warn('resolvePrincipal returned no usable principal | iss: %s', issuer);
|
|
56
|
+
throw (0, core_1.getError)({ error: ignis_kernel_1.AuthenticationErrors.PRINCIPAL_UNRESOLVED });
|
|
57
|
+
}
|
|
58
|
+
// Which service called is audit-relevant even when the principal is shared across callers.
|
|
59
|
+
return { ...principal, callerService: issuer };
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
exports.ServiceAuthenticationStrategy = ServiceAuthenticationStrategy;
|
|
63
|
+
exports.ServiceAuthenticationStrategy = ServiceAuthenticationStrategy = ServiceAuthenticationStrategy_1 = __decorate([
|
|
64
|
+
__param(0, (0, ignis_kernel_1.inject)({
|
|
65
|
+
key: ignis_inversion_1.BindingKeys.build({
|
|
66
|
+
namespace: ignis_kernel_1.BindingNamespaces.SERVICE,
|
|
67
|
+
key: verifier_service_1.ServiceAssertionVerifierService.name,
|
|
68
|
+
}),
|
|
69
|
+
})),
|
|
70
|
+
__param(1, (0, ignis_kernel_1.inject)({ key: ignis_kernel_1.AuthenticateBindingKeys.SERVICE_OPTIONS })),
|
|
71
|
+
__metadata("design:paramtypes", [verifier_service_1.ServiceAssertionVerifierService, Object])
|
|
72
|
+
], ServiceAuthenticationStrategy);
|
|
73
|
+
//# sourceMappingURL=service.strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.strategy.js","sourceRoot":"","sources":["../../../../../src/components/auth/authenticate/strategies/service.strategy.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sDAAmE;AACnE,8DAAuD;AAEvD,wDAO+B;AAO/B,2EAAuF;AAEvF;;;;;;GAMG;AACH,IAAa,6BAA6B,qCAA1C,MAAa,6BACX,SAAQ,iBAAU;IAKlB,YAOE,QAA0D,EAE1D,OAAgD;QAEhD,KAAK,CAAC,EAAE,KAAK,EAAE,+BAA6B,CAAC,IAAI,EAAE,CAAC,CAAC;QAJpC,aAAQ,GAAR,QAAQ,CAAiC;QAEzC,YAAO,GAAP,OAAO,CAAwB;QAXlD,SAAI,GAAG,6BAAc,CAAC,gBAAgB,CAAC;IAcvC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAA4B;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,+BAAgB,CAAC,MAAM,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAA,eAAQ,EAAC,EAAE,KAAK,EAAE,mCAAoB,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACpE,CAAC;QAED,iGAAiG;QACjG,oFAAoF;QACpF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YAC5C,KAAK;YACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM;YAC1B,IAAI,EAAE,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ;SACxC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QAE3E,gGAAgG;QAChG,+FAA+F;QAC/F,+FAA+F;QAC/F,6BAA6B;QAC7B,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM;iBACR,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;iBAC3B,IAAI,CAAC,yDAAyD,EAAE,MAAM,CAAC,CAAC;YAC3E,MAAM,IAAA,eAAQ,EAAC,EAAE,KAAK,EAAE,mCAAoB,CAAC,oBAAoB,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,2FAA2F;QAC3F,OAAO,EAAE,GAAG,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IACjD,CAAC;CACF,CAAA;AAlDY,sEAA6B;wCAA7B,6BAA6B;IAOrC,WAAA,IAAA,qBAAM,EAAC;QACN,GAAG,EAAE,6BAAW,CAAC,KAAK,CAAC;YACrB,SAAS,EAAE,gCAAiB,CAAC,OAAO;YACpC,GAAG,EAAE,kDAA+B,CAAC,IAAI;SAC1C,CAAC;KACH,CAAC,CAAA;IAED,WAAA,IAAA,qBAAM,EAAC,EAAE,GAAG,EAAE,sCAAuB,CAAC,eAAe,EAAE,CAAC,CAAA;qCAD9B,kDAA+B;GAbjD,6BAA6B,CAkDzC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseHelper } from '@venizia/ignis-helpers/core';
|
|
2
2
|
import { type FilteredAdapter, type Model } from 'casbin';
|
|
3
3
|
import type { SQL } from 'drizzle-orm';
|
|
4
|
-
import type { ICasbinPolicyFilter, ICasbinPolicySource, TCasbinPolicyConnector } from './
|
|
4
|
+
import type { ICasbinPolicyFilter, ICasbinPolicySource, TCasbinPolicyConnector } from './common';
|
|
5
5
|
/** Read-only base for casbin FilteredAdapters backed by a datasource - owns connector plumbing and no-op write methods; subclasses implement {@link loadFilteredPolicy} per principal. */
|
|
6
6
|
export declare abstract class BaseFilteredAdapter<TFilter = ICasbinPolicyFilter> extends BaseHelper implements FilteredAdapter {
|
|
7
7
|
protected readonly dataSource: ICasbinPolicySource;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-filtered.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/base-filtered.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"base-filtered.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/base-filtered.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAEjG,0LAA0L;AAC1L,8BAAsB,mBAAmB,CAAC,OAAO,GAAG,mBAAmB,CACrE,SAAQ,UACR,YAAW,eAAe;IAE1B,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;gBAEvC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,mBAAmB,CAAA;KAAE;IAKpE,SAAS,KAAK,SAAS,IAAI,sBAAsB,CAKhD;IAED,2LAA2L;cAC3K,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE;QAAE,SAAS,EAAE,GAAG,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAKtE,mGAAmG;IACnG,QAAQ,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAEzE,UAAU,IAAI,OAAO;IAKf,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAC3B,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAG9B,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAC1B,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAC7B,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAE3C,+FAA+F;cAC/E,SAAS,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CAMlF"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BaseFilteredAdapter = void 0;
|
|
4
4
|
const utilities_1 = require("../../../../utilities");
|
|
5
5
|
const core_1 = require("@venizia/ignis-helpers/core");
|
|
6
|
+
const connector_1 = require("./connector");
|
|
6
7
|
/** Read-only base for casbin FilteredAdapters backed by a datasource - owns connector plumbing and no-op write methods; subclasses implement {@link loadFilteredPolicy} per principal. */
|
|
7
8
|
class BaseFilteredAdapter extends core_1.BaseHelper {
|
|
8
9
|
constructor(opts) {
|
|
@@ -10,14 +11,10 @@ class BaseFilteredAdapter extends core_1.BaseHelper {
|
|
|
10
11
|
this.dataSource = opts.dataSource;
|
|
11
12
|
}
|
|
12
13
|
get connector() {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
message: '[BaseFilteredAdapter] datasource exposes neither a getConnector() accessor nor a wired connector - pass a datasource whose getConnector() lazily wires the driver.',
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
return resolved;
|
|
14
|
+
return connector_1.PolicyConnectorResolver.resolve({
|
|
15
|
+
source: this.dataSource,
|
|
16
|
+
caller: 'BaseFilteredAdapter',
|
|
17
|
+
});
|
|
21
18
|
}
|
|
22
19
|
/** Runs a raw statement and returns its rows. Drizzle's `execute()` shape differs per driver (node-postgres `{ rows }`, postgres-js the row list itself) - never read `.rows` directly. */
|
|
23
20
|
async query(opts) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-filtered.js","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/base-filtered.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAC7C,
|
|
1
|
+
{"version":3,"file":"base-filtered.js","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/base-filtered.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAC7C,sDAAyD;AAGzD,2CAAsD;AAGtD,0LAA0L;AAC1L,MAAsB,mBACpB,SAAQ,iBAAU;IAKlB,YAAY,IAAwD;QAClE,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACpC,CAAC;IAED,IAAc,SAAS;QACrB,OAAO,mCAAuB,CAAC,OAAO,CAAC;YACrC,MAAM,EAAE,IAAI,CAAC,UAAU;YACvB,MAAM,EAAE,qBAAqB;SAC9B,CAAC,CAAC;IACL,CAAC;IAED,2LAA2L;IACjL,KAAK,CAAC,KAAK,CAAO,IAAwB;QAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5D,OAAO,IAAA,0BAAc,EAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAKD,UAAU;QACR,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4DAA4D;IAC5D,KAAK,CAAC,UAAU,KAAmB,CAAC;IACpC,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,CAAC,SAAS,KAAmB,CAAC;IACnC,KAAK,CAAC,YAAY,KAAmB,CAAC;IACtC,KAAK,CAAC,oBAAoB,KAAmB,CAAC;IAE9C,+FAA+F;IACrF,KAAK,CAAC,SAAS,CAAC,IAAuC;QAC/D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;CACF;AA/CD,kDA+CC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/auth/authorize/adapters/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./types"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/components/auth/authorize/adapters/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { IdType } from '
|
|
1
|
+
import type { IdType } from '../../../../../base';
|
|
2
2
|
import type { AnyType } from '@venizia/ignis-helpers/common';
|
|
3
3
|
import type { PgDatabase, PgQueryResultHKT } from 'drizzle-orm/pg-core';
|
|
4
4
|
/** Filter passed to loadFilteredPolicy: which principal's policies to load. */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../src/components/auth/authorize/adapters/common/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAExE,+EAA+E;AAC/E,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC;AAED,oPAAoP;AACpP,MAAM,MAAM,sBAAsB,GAAG,UAAU,CAAC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3F,0FAA0F;AAC1F,MAAM,WAAW,mBAAmB;IAClC,2GAA2G;IAC3G,YAAY,CAAC,IAAI,sBAAsB,CAAC;IAExC,oFAAoF;IACpF,SAAS,CAAC,EAAE,sBAAsB,CAAC;CACpC;AAED,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wGAAwG;AACxG,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,kBAAkB,GAAG;QACrC,QAAQ,CAAC,EAAE;YAAE,UAAU,EAAE,MAAM,CAAA;SAAE,CAAC;KACnC,CAAC;IAEF,0CAA0C;IAC1C,UAAU,EAAE,kBAAkB,CAAC;IAE/B,0DAA0D;IAC1D,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAE3C,2DAA2D;IAC3D,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,4CAA4C;IAC5C,UAAU,CAAC,EAAE;QAAE,GAAG,EAAE,KAAK,CAAA;KAAE,GAAG;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CACjE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/components/auth/authorize/adapters/common/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ICasbinPolicySource, TCasbinPolicyConnector } from './common';
|
|
2
|
+
/** Connector-resolution logic shared by every adapter/loader reading the casbin policy store. */
|
|
3
|
+
export declare class PolicyConnectorResolver {
|
|
4
|
+
/** Resolve the wired connector off a policy datasource. */
|
|
5
|
+
static resolve(opts: {
|
|
6
|
+
source: ICasbinPolicySource;
|
|
7
|
+
caller: string;
|
|
8
|
+
}): TCasbinPolicyConnector;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=connector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/connector.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAE5E,iGAAiG;AACjG,qBAAa,uBAAuB;IAClC,2DAA2D;IAC3D,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,mBAAmB,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,sBAAsB;CAY9F"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PolicyConnectorResolver = void 0;
|
|
4
|
+
const core_1 = require("@venizia/ignis-helpers/core");
|
|
5
|
+
/** Connector-resolution logic shared by every adapter/loader reading the casbin policy store. */
|
|
6
|
+
class PolicyConnectorResolver {
|
|
7
|
+
/** Resolve the wired connector off a policy datasource. */
|
|
8
|
+
static resolve(opts) {
|
|
9
|
+
const { source, caller } = opts;
|
|
10
|
+
const resolved = source.getConnector?.() ?? source.connector;
|
|
11
|
+
if (!resolved) {
|
|
12
|
+
throw (0, core_1.getError)({
|
|
13
|
+
message: `[${caller}] datasource exposes neither a getConnector() accessor nor a wired connector - pass a datasource whose getConnector() lazily wires the driver.`,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
return resolved;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.PolicyConnectorResolver = PolicyConnectorResolver;
|
|
20
|
+
//# sourceMappingURL=connector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connector.js","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/connector.ts"],"names":[],"mappings":";;;AAAA,sDAAuD;AAGvD,iGAAiG;AACjG,MAAa,uBAAuB;IAClC,2DAA2D;IAC3D,MAAM,CAAC,OAAO,CAAC,IAAqD;QAClE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,EAAE,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC;QAE7D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAA,eAAQ,EAAC;gBACb,OAAO,EAAE,IAAI,MAAM,gJAAgJ;aACpK,CAAC,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AAdD,0DAcC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { IdType } from '../../../../base';
|
|
2
|
+
import { BaseHelper } from '@venizia/ignis-helpers/core';
|
|
3
|
+
import { type TCustomGrantMetadata } from '@venizia/ignis-kernel';
|
|
4
|
+
import type { ICasbinPolicySource, IScopedCasbinEntities } from './common';
|
|
5
|
+
/** A custom row that survived {@link CustomGrantExpander.rejectCustomRow}, ready for op-to-catalog resolution. */
|
|
6
|
+
export type TCustomGrantRow = {
|
|
7
|
+
subjectId: IdType;
|
|
8
|
+
objectSubject: string;
|
|
9
|
+
ops: string[];
|
|
10
|
+
domain: string;
|
|
11
|
+
effect: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Expands "custom" operation-subset grants (`metadata.ops`) into one casbin line per catalogued
|
|
15
|
+
* operation. Isolated from the filtered-policy loader on purpose: it owns its own SQL
|
|
16
|
+
* (`queryOperationCatalog`) and error vocabulary, and never reaches back into ScopedCasbinAdapter.
|
|
17
|
+
*/
|
|
18
|
+
export declare class CustomGrantExpander extends BaseHelper {
|
|
19
|
+
protected readonly dataSource: ICasbinPolicySource;
|
|
20
|
+
protected readonly permission: IScopedCasbinEntities['permission'];
|
|
21
|
+
protected readonly softDelete: IScopedCasbinEntities['softDelete'];
|
|
22
|
+
constructor(opts: {
|
|
23
|
+
dataSource: ICasbinPolicySource;
|
|
24
|
+
entities: Pick<IScopedCasbinEntities, 'permission' | 'softDelete'>;
|
|
25
|
+
});
|
|
26
|
+
/** Why a custom-looking grant row cannot be honoured, or null when it is well formed. */
|
|
27
|
+
rejectCustomRow(opts: {
|
|
28
|
+
row: {
|
|
29
|
+
subjectId: IdType;
|
|
30
|
+
objectCode: string;
|
|
31
|
+
objectMethod: string;
|
|
32
|
+
};
|
|
33
|
+
parsed: TCustomGrantMetadata | null;
|
|
34
|
+
isCustomAction: boolean;
|
|
35
|
+
metadataColumnName?: string;
|
|
36
|
+
}): string | null;
|
|
37
|
+
/** Resolve every custom row's ops in one catalog query, then emit one line per resolved operation. Unresolvable ops come back as `rejections` rather than being logged here - the caller owns the logger the tests swap. */
|
|
38
|
+
expandCustomGrants(opts: {
|
|
39
|
+
subjectType: string;
|
|
40
|
+
customRows: TCustomGrantRow[];
|
|
41
|
+
}): Promise<{
|
|
42
|
+
lines: string[];
|
|
43
|
+
rejections: string[];
|
|
44
|
+
}>;
|
|
45
|
+
/** Schema-qualified table reference (`"<schema>"."<table>"`) for use after FROM/JOIN with an alias. */
|
|
46
|
+
private qualifiedTable;
|
|
47
|
+
/** `AND <alias>.<col> IS NULL` when soft-delete is on, else empty. The alias is emitted raw to match the unquoted FROM alias - quoting folds it to a different case and breaks the join. */
|
|
48
|
+
private softDeleteClause;
|
|
49
|
+
/** Resolve `(subject, method)` pairs to catalogued operations. One query for the whole extraction. */
|
|
50
|
+
private queryOperationCatalog;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=custom-grant-expander.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-grant-expander.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/custom-grant-expander.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAKL,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAI3E,kHAAkH;AAClH,MAAM,MAAM,eAAe,GAAG;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;GAIG;AACH,qBAAa,mBAAoB,SAAQ,UAAU;IACjD,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,mBAAmB,CAAC;IACnD,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;IACnE,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;gBAEvD,IAAI,EAAE;QAChB,UAAU,EAAE,mBAAmB,CAAC;QAChC,QAAQ,EAAE,IAAI,CAAC,qBAAqB,EAAE,YAAY,GAAG,YAAY,CAAC,CAAC;KACpE;IAOD,yFAAyF;IACzF,eAAe,CAAC,IAAI,EAAE;QACpB,GAAG,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAA;SAAE,CAAC;QACrE,MAAM,EAAE,oBAAoB,GAAG,IAAI,CAAC;QACpC,cAAc,EAAE,OAAO,CAAC;QACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,GAAG,MAAM,GAAG,IAAI;IAsBjB,4NAA4N;IACtN,kBAAkB,CAAC,IAAI,EAAE;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,eAAe,EAAE,CAAC;KAC/B,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAoDtD,uGAAuG;IACvG,OAAO,CAAC,cAAc;IAMtB,4LAA4L;IAC5L,OAAO,CAAC,gBAAgB;IASxB,sGAAsG;YACxF,qBAAqB;CA6BpC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CustomGrantExpander = void 0;
|
|
4
|
+
const utilities_1 = require("../../../../utilities");
|
|
5
|
+
const core_1 = require("@venizia/ignis-helpers/core");
|
|
6
|
+
const ignis_kernel_1 = require("@venizia/ignis-kernel");
|
|
7
|
+
const drizzle_orm_1 = require("drizzle-orm");
|
|
8
|
+
const connector_1 = require("./connector");
|
|
9
|
+
const DEFAULT_SCHEMA = 'public';
|
|
10
|
+
/**
|
|
11
|
+
* Expands "custom" operation-subset grants (`metadata.ops`) into one casbin line per catalogued
|
|
12
|
+
* operation. Isolated from the filtered-policy loader on purpose: it owns its own SQL
|
|
13
|
+
* (`queryOperationCatalog`) and error vocabulary, and never reaches back into ScopedCasbinAdapter.
|
|
14
|
+
*/
|
|
15
|
+
class CustomGrantExpander extends core_1.BaseHelper {
|
|
16
|
+
constructor(opts) {
|
|
17
|
+
super({ scope: CustomGrantExpander.name });
|
|
18
|
+
this.dataSource = opts.dataSource;
|
|
19
|
+
this.permission = opts.entities.permission;
|
|
20
|
+
this.softDelete = opts.entities.softDelete;
|
|
21
|
+
}
|
|
22
|
+
/** Why a custom-looking grant row cannot be honoured, or null when it is well formed. */
|
|
23
|
+
rejectCustomRow(opts) {
|
|
24
|
+
const { row, parsed, isCustomAction, metadataColumnName } = opts;
|
|
25
|
+
if (isCustomAction && !metadataColumnName) {
|
|
26
|
+
return `Skipping custom grant - entities.policyDefinition.metadata.columnName is not mapped, so metadata.ops cannot be read | subject id: ${row.subjectId} | object: ${row.objectCode}`;
|
|
27
|
+
}
|
|
28
|
+
if (isCustomAction && !parsed) {
|
|
29
|
+
return `Skipping custom grant - metadata.ops is missing, empty, or not an array of non-empty strings | subject id: ${row.subjectId} | object: ${row.objectCode}`;
|
|
30
|
+
}
|
|
31
|
+
if (!isCustomAction && parsed) {
|
|
32
|
+
return `Skipping grant - metadata.ops is present but action is not "${ignis_kernel_1.AuthorizationActions.CUSTOM}", so the intent is ambiguous | subject id: ${row.subjectId} | object: ${row.objectCode}`;
|
|
33
|
+
}
|
|
34
|
+
if (row.objectMethod !== ignis_kernel_1.AuthorizationPermissionBuilder.RESOURCE_NODE_METHOD) {
|
|
35
|
+
return `Skipping custom grant - the target must be a subject-level resource node | subject id: ${row.subjectId} | object: ${row.objectCode}`;
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
/** Resolve every custom row's ops in one catalog query, then emit one line per resolved operation. Unresolvable ops come back as `rejections` rather than being logged here - the caller owns the logger the tests swap. */
|
|
40
|
+
async expandCustomGrants(opts) {
|
|
41
|
+
if (!opts.customRows.length) {
|
|
42
|
+
return { lines: [], rejections: [] };
|
|
43
|
+
}
|
|
44
|
+
const seen = new Set();
|
|
45
|
+
const pairs = [];
|
|
46
|
+
const candidates = opts.customRows.flatMap(row => row.ops.map(op => ({ subject: row.objectSubject, method: op })));
|
|
47
|
+
for (const candidate of candidates) {
|
|
48
|
+
const key = `${candidate.subject}.${candidate.method}`;
|
|
49
|
+
if (seen.has(key)) {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
seen.add(key);
|
|
53
|
+
pairs.push(candidate);
|
|
54
|
+
}
|
|
55
|
+
const catalog = await this.queryOperationCatalog({ pairs });
|
|
56
|
+
const byKey = new Map(catalog.map(entry => [`${entry.subject}.${entry.method}`, entry]));
|
|
57
|
+
const lines = [];
|
|
58
|
+
const rejections = [];
|
|
59
|
+
for (const row of opts.customRows) {
|
|
60
|
+
const { valid, unknown } = ignis_kernel_1.GrantBuilder.getInstance().validateCustomGrantOps({
|
|
61
|
+
ops: row.ops,
|
|
62
|
+
subject: row.objectSubject,
|
|
63
|
+
catalog,
|
|
64
|
+
});
|
|
65
|
+
if (unknown.length) {
|
|
66
|
+
rejections.push(`Skipping unresolvable operations in a custom grant | subject id: ${row.subjectId} | resource: ${row.objectSubject} | unknown: ${unknown.join(', ')}`);
|
|
67
|
+
}
|
|
68
|
+
for (const op of valid) {
|
|
69
|
+
const entry = byKey.get(`${row.objectSubject}.${op}`);
|
|
70
|
+
lines.push(`${ignis_kernel_1.AuthorizationPolicyVariants.GRANT.rule}, ${opts.subjectType}_${row.subjectId}, ${row.domain}, ${entry.code}, ${entry.action}, ${row.effect}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return { lines, rejections };
|
|
74
|
+
}
|
|
75
|
+
/** Schema-qualified table reference (`"<schema>"."<table>"`) for use after FROM/JOIN with an alias. */
|
|
76
|
+
qualifiedTable(opts) {
|
|
77
|
+
const { table } = opts;
|
|
78
|
+
const schema = table.schemaName ?? DEFAULT_SCHEMA;
|
|
79
|
+
return (0, drizzle_orm_1.sql) `${drizzle_orm_1.sql.identifier(schema)}.${drizzle_orm_1.sql.identifier(table.tableName)}`;
|
|
80
|
+
}
|
|
81
|
+
/** `AND <alias>.<col> IS NULL` when soft-delete is on, else empty. The alias is emitted raw to match the unquoted FROM alias - quoting folds it to a different case and breaks the join. */
|
|
82
|
+
softDeleteClause(opts) {
|
|
83
|
+
const sd = this.softDelete;
|
|
84
|
+
if (!sd?.use) {
|
|
85
|
+
return drizzle_orm_1.sql.empty();
|
|
86
|
+
}
|
|
87
|
+
return (0, drizzle_orm_1.sql) ` AND ${drizzle_orm_1.sql.raw(opts.alias)}.${drizzle_orm_1.sql.identifier(sd.columnName)} IS NULL`;
|
|
88
|
+
}
|
|
89
|
+
/** Resolve `(subject, method)` pairs to catalogued operations. One query for the whole extraction. */
|
|
90
|
+
async queryOperationCatalog(opts) {
|
|
91
|
+
if (!opts.pairs.length) {
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
const permissionTable = this.qualifiedTable({ table: this.permission });
|
|
95
|
+
const connector = connector_1.PolicyConnectorResolver.resolve({
|
|
96
|
+
source: this.dataSource,
|
|
97
|
+
caller: CustomGrantExpander.name,
|
|
98
|
+
});
|
|
99
|
+
const result = await connector.execute((0, drizzle_orm_1.sql) `
|
|
100
|
+
SELECT permission.subject, permission.method, permission.code, permission.action
|
|
101
|
+
FROM ${permissionTable} permission
|
|
102
|
+
WHERE (permission.subject, permission.method) IN (${drizzle_orm_1.sql.join(opts.pairs.map(pair => (0, drizzle_orm_1.sql) `(${pair.subject}, ${pair.method})`), (0, drizzle_orm_1.sql) `, `)})
|
|
103
|
+
AND permission.method <> ${ignis_kernel_1.AuthorizationPermissionBuilder.RESOURCE_NODE_METHOD}${this.softDeleteClause({ alias: 'permission' })}
|
|
104
|
+
`);
|
|
105
|
+
return (0, utilities_1.readResultRows)({
|
|
106
|
+
result,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
exports.CustomGrantExpander = CustomGrantExpander;
|
|
111
|
+
//# sourceMappingURL=custom-grant-expander.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"custom-grant-expander.js","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/custom-grant-expander.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export * from './base-filtered';
|
|
2
|
-
export * from './
|
|
3
|
-
export * from './
|
|
2
|
+
export * from './common';
|
|
3
|
+
export * from './connector';
|
|
4
|
+
export * from './custom-grant-expander';
|
|
5
|
+
export * from './scoped-casbin';
|
|
4
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,yBAAyB,CAAC;AACxC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/auth/authorize/adapters/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC"}
|
|
@@ -15,6 +15,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./base-filtered"), exports);
|
|
18
|
-
__exportStar(require("./
|
|
19
|
-
__exportStar(require("./
|
|
18
|
+
__exportStar(require("./common"), exports);
|
|
19
|
+
__exportStar(require("./connector"), exports);
|
|
20
|
+
__exportStar(require("./custom-grant-expander"), exports);
|
|
21
|
+
__exportStar(require("./scoped-casbin"), exports);
|
|
20
22
|
//# sourceMappingURL=index.js.map
|