@decaf-ts/integrations 0.2.1 → 0.3.0

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.
Files changed (49) hide show
  1. package/dist/integrations.cjs +1 -1
  2. package/dist/integrations.cjs.map +1 -1
  3. package/dist/integrations.js +1 -1
  4. package/dist/integrations.js.map +1 -1
  5. package/lib/cjs/index.cjs +3 -3
  6. package/lib/cjs/keycloak/services/KeycloakRoleService.cjs +25 -0
  7. package/lib/cjs/keycloak/services/KeycloakRoleService.cjs.map +1 -1
  8. package/lib/cjs/keycloak/services/KeycloakService.cjs +29 -0
  9. package/lib/cjs/keycloak/services/KeycloakService.cjs.map +1 -1
  10. package/lib/cjs/nest/authService.cjs +53 -2
  11. package/lib/cjs/nest/authService.cjs.map +1 -1
  12. package/lib/cjs/nest/keycloakAuthHandler.cjs +13 -6
  13. package/lib/cjs/nest/keycloakAuthHandler.cjs.map +1 -1
  14. package/lib/cjs/nest/keycloakModule.cjs +5 -3
  15. package/lib/cjs/nest/keycloakModule.cjs.map +1 -1
  16. package/lib/cjs/nest/utils.cjs +24 -0
  17. package/lib/cjs/nest/utils.cjs.map +1 -1
  18. package/lib/cjs/utils.cjs +1 -1
  19. package/lib/esm/index.js +3 -3
  20. package/lib/esm/keycloak/services/KeycloakRoleService.js +25 -0
  21. package/lib/esm/keycloak/services/KeycloakRoleService.js.map +1 -1
  22. package/lib/esm/keycloak/services/KeycloakService.js +30 -1
  23. package/lib/esm/keycloak/services/KeycloakService.js.map +1 -1
  24. package/lib/esm/nest/authService.js +54 -3
  25. package/lib/esm/nest/authService.js.map +1 -1
  26. package/lib/esm/nest/keycloakAuthHandler.js +13 -6
  27. package/lib/esm/nest/keycloakAuthHandler.js.map +1 -1
  28. package/lib/esm/nest/keycloakModule.js +5 -3
  29. package/lib/esm/nest/keycloakModule.js.map +1 -1
  30. package/lib/esm/nest/utils.js +23 -0
  31. package/lib/esm/nest/utils.js.map +1 -1
  32. package/lib/esm/utils.js +1 -1
  33. package/lib/types/index.d.cts +2 -2
  34. package/lib/types/index.d.mts +2 -2
  35. package/lib/types/keycloak/services/KeycloakRoleService.d.cts +14 -0
  36. package/lib/types/keycloak/services/KeycloakRoleService.d.mts +14 -0
  37. package/lib/types/keycloak/services/KeycloakService.d.cts +9 -0
  38. package/lib/types/keycloak/services/KeycloakService.d.mts +9 -0
  39. package/lib/types/keycloak/types.d.cts +11 -0
  40. package/lib/types/keycloak/types.d.mts +11 -0
  41. package/lib/types/nest/authService.d.cts +55 -2
  42. package/lib/types/nest/authService.d.mts +55 -2
  43. package/lib/types/nest/keycloakAuthHandler.d.cts +14 -5
  44. package/lib/types/nest/keycloakAuthHandler.d.mts +14 -5
  45. package/lib/types/nest/keycloakModule.d.cts +3 -3
  46. package/lib/types/nest/keycloakModule.d.mts +3 -3
  47. package/lib/types/nest/utils.d.cts +9 -0
  48. package/lib/types/nest/utils.d.mts +9 -0
  49. package/package.json +17 -7
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  };
10
10
  import { description } from "@decaf-ts/decoration";
11
11
  import { ClientBasedService, service, } from "@decaf-ts/core";
12
- import { NotFoundError } from "@decaf-ts/db-decorators";
12
+ import { InternalError, NotFoundError } from "@decaf-ts/db-decorators";
13
13
  import Axios from "axios";
14
14
  import * as https from "node:https";
15
15
  import { KeycloakRealmService } from "./KeycloakRealmService.js";
@@ -86,6 +86,20 @@ let KeycloakService = class KeycloakService extends ClientBasedService {
86
86
  const { ctxArgs } = (await this.logCtx(args, "addRealmRolesToUser", true)).for(this.addRealmRolesToUser);
87
87
  await this.roleService.grantRealmRolesToUser(realmName, userUUID, roleNames, ...ctxArgs);
88
88
  }
89
+ /**
90
+ * Creates a realm-level role, optionally as a composite of existing roles.
91
+ */
92
+ async createRealmRole(realmName, roleName, compositeRoles, ...args) {
93
+ const { ctxArgs } = (await this.logCtx(args, "createRealmRole", true)).for(this.createRealmRole);
94
+ await this.roleService.createRealmRole(realmName, roleName, compositeRoles, ...ctxArgs);
95
+ }
96
+ /**
97
+ * Creates a client in the configured realm and returns its UUID.
98
+ */
99
+ async createClient(config, overrides, ...args) {
100
+ const { ctxArgs } = (await this.logCtx(args, "createClient", true)).for(this.createClient);
101
+ return this.clientService.createClient(config, overrides, ...ctxArgs);
102
+ }
89
103
  async addClientRolesToUser(realmName, clientUUID, userUUID, roleNames, ...args) {
90
104
  const { ctxArgs } = (await this.logCtx(args, "addClientRolesToUser", true)).for(this.addClientRolesToUser);
91
105
  await this.roleService.grantClientRolesToUser(realmName, clientUUID, userUUID, roleNames, ...ctxArgs);
@@ -99,6 +113,7 @@ let KeycloakService = class KeycloakService extends ClientBasedService {
99
113
  const { ctxArgs } = (await this.logCtx(args, "setupOrganization", true)).for(this.setupOrganization);
100
114
  const adminAccessToken = await this.authService.getAccessToken(config.adminApiUser, ...ctxArgs);
101
115
  await this.realmService.createRealm(config.realmApiUser.realm, config.realmConfig ?? {}, ...ctxArgs);
116
+ await this.waitForRealm(config.realmApiUser.realm, ...ctxArgs);
102
117
  const realmUserUUID = await this.userService.createRealmUser(config.realmApiUser, {}, ...ctxArgs);
103
118
  config.realmApiUser.usernameUUID = realmUserUUID;
104
119
  const realmManagementUUID = await this.clientService.getClientUUID(adminAccessToken, config.realmApiUser.realm, "realm-management", ...ctxArgs);
@@ -130,6 +145,20 @@ let KeycloakService = class KeycloakService extends ClientBasedService {
130
145
  }),
131
146
  });
132
147
  }
148
+ async waitForRealm(realmName, ...args) {
149
+ const { ctxArgs } = (await this.logCtx(args, "waitForRealm", true)).for(this.waitForRealm);
150
+ const deadline = Date.now() + 15000;
151
+ while (Date.now() < deadline) {
152
+ try {
153
+ await this.realmService.getRealm(realmName, ...ctxArgs);
154
+ return;
155
+ }
156
+ catch {
157
+ await new Promise((resolve) => setTimeout(resolve, 500));
158
+ }
159
+ }
160
+ throw new InternalError(`Timed out waiting for realm ${realmName}`);
161
+ }
133
162
  async updateClientScopesRolesMappers(keycloakUser, ...args) {
134
163
  this.logCtx(args, this.updateClientScopesRolesMappers);
135
164
  const client = this.createHttpClient(this.config);
@@ -1 +1 @@
1
- {"version":3,"file":"KeycloakService.js","sourceRoot":"","sources":["../../../../src/keycloak/services/KeycloakService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EACL,kBAAkB,EAGlB,OAAO,GACR,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,kCAA+B;AAC9D,OAAO,EAAE,mBAAmB,EAAE,iCAA8B;AAC5D,OAAO,EAAE,mBAAmB,EAAE,iCAA8B;AAC5D,OAAO,EAAE,qBAAqB,EAAE,mCAAgC;AAChE,OAAO,EAAE,+BAA+B,EAAE,6CAA0C;AACpF,OAAO,EAAE,mBAAmB,EAAE,iCAA8B;AAGrD,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,kBAGpC;IAaC;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IAED,KAAK,CAAC,UAAU,CACd,GAAG,IAA6B;QAEhC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CACvB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,CAC5C,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAwB,CAAC;QACjD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEtB,GAAG,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;QACvC,OAAO,EAAE,CAAC,oBAAoB,CAAC,CAAC;QAChC,OAAO,EAAE,CAAC,mBAAmB,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC,mBAAmB,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC,qBAAqB,CAAC,CAAC;QACjC,OAAO,EAAE,CAAC,+BAA+B,CAAC,CAAC;QAC3C,OAAO,EAAE,CAAC,mBAAmB,CAAC,CAAC;QAE/B,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC5C,IAAI,CAAC,YAAY,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC/C,MAAM,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,WAAW,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;QACtD,IAAI,CAAC,aAAa,GAAG,IAAI,qBAAqB,EAAE,CAAC;QACjD,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;QACxD,IAAI,CAAC,uBAAuB,GAAG,IAAI,+BAA+B,EAAE,CAAC;QACrE,MAAM,IAAI,CAAC,uBAAuB,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;QAClE,IAAI,CAAC,WAAW,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,GAAG,CAAC,KAAK,CACP,6CAA6C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CACtE,CAAC;QACF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,mBAAwC,EACxC,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,CAC/C,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE1B,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAC5D,mBAAmB,CAAC,YAAa,EACjC,EAAE,EACF,GAAG,OAAO,CACX,CAAC;QACF,mBAAmB,CAAC,YAAa,CAAC,YAAY,GAAG,gBAAgB,CAAC;QAClE,MAAM,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAC1C,mBAAmB,CAAC,YAAa,CAAC,KAAK,EACvC,gBAAgB,EAChB,CAAC,OAAO,CAAC,EACT,GAAG,OAAO,CACX,CAAC;QACF,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,SAAiB,EACjB,OAAY,EACZ,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAC1C,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,SAAS,CACb,SAAiB,EACjB,OAAY,EACZ,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,CAC3C,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,WAAW,CACf,SAAiB,EACjB,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,CAC7C,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,YAA0B,EAC1B,OAAY,EACZ,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAChD,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,YAAY,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,QAAQ,CACZ,SAAiB,EACjB,QAAgB,EAChB,OAAY,EACZ,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAC1C,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,SAAiB,EACjB,QAAgB,EAChB,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,CAAC,CACrD,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAC;IAC9E,CAAC;IAED,KAAK,CAAC,mBAAmB,CACvB,SAAiB,EACjB,QAAgB,EAChB,SAAmB,EACnB,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,qBAAqB,EAAE,IAAI,CAAC,CACrD,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,WAAW,CAAC,qBAAqB,CAC1C,SAAS,EACT,QAAQ,EACR,SAAS,EACT,GAAG,OAAO,CACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,SAAiB,EACjB,UAAkB,EAClB,QAAgB,EAChB,SAAmB,EACnB,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,EAAE,IAAI,CAAC,CACtD,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjC,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAC3C,SAAS,EACT,UAAU,EACV,QAAQ,EACR,SAAS,EACT,GAAG,OAAO,CACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,mBAAwC,EACxC,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,oBAAoB,EAAE,IAAI,CAAC,CACpD,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAC3D,mBAAmB,CAAC,WAAY,EAChC,GAAG,OAAO,CACX,CAAC;QACF,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAC/B,eAAe,EACf,mBAAmB,CAAC,YAAa,EACjC,GAAG,OAAO,CACX,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,MAA2B,EAC3B,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,mBAAmB,EAAE,IAAI,CAAC,CACnD,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAE9B,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAC5D,MAAM,CAAC,YAAa,EACpB,GAAG,OAAO,CACX,CAAC;QAEF,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CACjC,MAAM,CAAC,YAAa,CAAC,KAAK,EAC1B,MAAM,CAAC,WAAW,IAAI,EAAE,EACxB,GAAG,OAAO,CACX,CAAC;QAEF,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,eAAe,CAC1D,MAAM,CAAC,YAAa,EACpB,EAAE,EACF,GAAG,OAAO,CACX,CAAC;QACF,MAAM,CAAC,YAAa,CAAC,YAAY,GAAG,aAAa,CAAC;QAElD,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAChE,gBAAgB,EAChB,MAAM,CAAC,YAAa,CAAC,KAAK,EAC1B,kBAAkB,EAClB,GAAG,OAAO,CACX,CAAC;QACF,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CACtC,iBAAiB,MAAM,CAAC,YAAa,CAAC,KAAK,YAAY,mBAAmB,QAAQ,EAClF,iBAAiB,MAAM,CAAC,YAAa,CAAC,KAAK,UAAU,aAAa,0BAA0B,mBAAmB,EAAE,EACjH,CAAC,gBAAgB,EAAE,2BAA2B,CAAC,EAC/C,gBAAgB,EAChB,GAAG,OAAO,CACX,CAAC;QAEF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CACtD,MAAM,EACN,SAAS,EACT,GAAG,OAAO,CACX,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QAEtC,MAAM,IAAI,CAAC,8BAA8B,CAAC,MAAM,CAAC,YAAa,EAAE,GAAG,OAAO,CAAC,CAAC;QAE5E,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,mBAAwC,EACxC,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,sBAAsB,EAAE,IAAI,CAAC,CACtD,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAEjC,MAAM,IAAI,CAAC,aAAa,CAAC,iBAAiB,CACxC,mBAAmB,EACnB,SAAS,EACT,GAAG,OAAO,CACX,CAAC;QACF,IAAI,mBAAmB,CAAC,gBAAgB,EAAE,CAAC;YACzC,MAAM,IAAI,CAAC,uBAAuB,CAAC,sBAAsB,CACvD,mBAAmB,EACnB,SAAS,EACT,GAAG,OAAO,CACX,CAAC;YACF,MAAM,IAAI,CAAC,uBAAuB,CAAC,6BAA6B,CAC9D,mBAAmB,EACnB,SAAS,EACT,GAAG,OAAO,CACX,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,SAAiB,EACjB,GAAG,IAA6B;QAEhC,MAAM,EAAE,OAAO,EAAE,GAAG,CAClB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,oBAAoB,EAAE,IAAI,CAAC,CACpD,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,CAAC;IAC7D,CAAC;IAEO,gBAAgB,CAAC,MAA2B;QAClD,OAAO,KAAK,CAAC,MAAM,CAAC;YAClB,OAAO,EAAE,GAAG,MAAM,CAAC,QAAQ,MAAM,MAAM,CAAC,IAAI,EAAE;YAC9C,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;YAC1B,UAAU,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC;gBAC1B,kBAAkB,EAAE,CAAC,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;aAClE,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,8BAA8B,CAC1C,YAA0B,EAC1B,GAAG,IAAyB;QAE5B,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAClD,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAC5D,YAAY,EACZ,GAAG,IAAI,CACR,CAAC;QACF,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC;YACzC,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,iBAAiB,YAAY,CAAC,KAAK,gBAAgB;YACrG,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,gBAAgB,EAAE;aAC5C;YACD,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;SAC3B,CAAC,CAAC;QACH,MAAM,YAAY,GAChB,IAAI,CAAC,iBAAiB,CAUpB,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QACxE,MAAM,iBAAiB,GAAG,UAAU,EAAE,eAAe,EAAE,IAAI,CACzD,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAC3C,CAAC;QACF,IAAI,CAAC,UAAU,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACtC,MAAM,IAAI,aAAa,CAAC,oCAAoC,CAAC,CAAC;QAChE,CAAC;QACD,iBAAiB,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC;QACpD,MAAM,MAAM,CAAC,OAAO,CAAC;YACnB,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,iBAAiB,YAAY,CAAC,KAAK,kBAAkB,UAAU,CAAC,EAAE,4BAA4B,iBAAiB,CAAC,EAAE,EAAE;YACtK,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC;YACvC,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,gBAAgB,EAAE;gBAC3C,cAAc,EAAE,kBAAkB;aACnC;YACD,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI;SAC3B,CAAC,CAAC;IACL,CAAC;IAEO,iBAAiB,CAAI,IAAa;QACxC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM,CAAC;YAC/B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,OAAO,IAAS,CAAC;IACnB,CAAC;CACF,CAAA;AA3WY,eAAe;IAD3B,WAAW,CAAC,yFAAyF,CAAC;;GAC1F,eAAe,CA2W3B"}
1
+ {"version":3,"file":"KeycloakService.js","sourceRoot":"","sources":["../../../../src/keycloak/services/KeycloakService.ts"],"names":[],"mappings":"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"}
@@ -2,15 +2,28 @@
2
2
  * @module integrations/nest/authService
3
3
  * @summary Nest-compatible authentication service helpers.
4
4
  * @description Request-context-aware auth helpers for Nest applications using Decaf integration patterns.
5
+ *
6
+ * Supports two modes:
7
+ * - **Verify mode** (default when `verifyUrl` is set): validates the JWT signature
8
+ * against the Keycloak JWKS endpoint using `jose.jwtVerify`.
9
+ * - **Decode-only mode** (when `verifyToken` is false / `verifyUrl` is empty):
10
+ * decodes the JWT without signature verification (dev/local mode).
5
11
  */
6
12
  import { AuthorizationError } from "@decaf-ts/core";
7
- import { extractKeycloakRoles, getRealmFromIssuer, getTokenPayload, getUser } from "./utils.js";
13
+ import { createRemoteJWKSet, jwtVerify } from "jose";
14
+ import { extractKeycloakRoles, getRealmFromIssuer, getTokenPayload, getUser, getClientRoles, } from "./utils.js";
8
15
  export class AuthService {
16
+ constructor(options = {}) {
17
+ this.verifyToken = !!options.verifyToken && !!options.verifyUrl;
18
+ this.verifyUrl = options.verifyUrl ?? "";
19
+ this.clockToleranceSeconds = options.clockToleranceSeconds ?? 5;
20
+ this.excludedClients = options.excludedClients ?? ["account"];
21
+ }
9
22
  getTokenPayload(jwt) {
10
23
  return getTokenPayload(jwt);
11
24
  }
12
25
  getRoles(jwt) {
13
- return extractKeycloakRoles(this.getTokenPayload(jwt));
26
+ return this.extractKeycloakRoles(this.getTokenPayload(jwt));
14
27
  }
15
28
  getUser(jwt) {
16
29
  return getUser(jwt);
@@ -18,15 +31,53 @@ export class AuthService {
18
31
  extractKeycloakRoles(payload) {
19
32
  return extractKeycloakRoles(payload);
20
33
  }
34
+ /**
35
+ * Extracts client roles from the `resource_access` claim, excluding
36
+ * the configured `excludedClients` (default: `["account"]`).
37
+ */
38
+ extractClientRoles(payload) {
39
+ return getClientRoles(payload, this.excludedClients);
40
+ }
21
41
  getRealmFromIssuer(jwt) {
22
42
  return getRealmFromIssuer(jwt);
23
43
  }
24
- assertValidToken(jwt) {
44
+ /**
45
+ * Validates a JWT:
46
+ * - In **verify mode**: verifies the signature against the Keycloak JWKS
47
+ * endpoint using `jose.jwtVerify`, then returns the verified payload.
48
+ * - In **decode-only mode**: decodes the JWT without verification and
49
+ * returns the payload (or throws if unparseable).
50
+ *
51
+ * @throws {AuthorizationError} when the token is invalid, expired, or
52
+ * signature verification fails.
53
+ */
54
+ async assertValidToken(jwt) {
55
+ if (this.verifyToken) {
56
+ return this.verifyAgainstJwks(jwt);
57
+ }
25
58
  const payload = this.getTokenPayload(jwt);
26
59
  if (!payload) {
27
60
  throw new AuthorizationError("Invalid token");
28
61
  }
29
62
  return payload;
30
63
  }
64
+ /**
65
+ * Verifies the JWT signature against the Keycloak JWKS endpoint.
66
+ * Lazily creates the JWKS keystore on first call.
67
+ */
68
+ async verifyAgainstJwks(jwt) {
69
+ if (!this.jwks) {
70
+ this.jwks = createRemoteJWKSet(new URL(this.verifyUrl));
71
+ }
72
+ try {
73
+ const { payload } = await jwtVerify(jwt, this.jwks, {
74
+ clockTolerance: `${this.clockToleranceSeconds}s`,
75
+ });
76
+ return payload;
77
+ }
78
+ catch (e) {
79
+ throw new AuthorizationError("Invalid token: " + (e?.message ?? e));
80
+ }
81
+ }
31
82
  }
32
83
  //# sourceMappingURL=authService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"authService.js","sourceRoot":"","sources":["../../../src/nest/authService.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,eAAe,EAAE,OAAO,EAAE,mBAAgB;AAG7F,MAAM,OAAO,WAAW;IACtB,eAAe,CAAC,GAAW;QACzB,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,QAAQ,CAAC,GAAW;QAClB,OAAO,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,oBAAoB,CAAC,OAAgB;QACnC,OAAO,oBAAoB,CAAC,OAA4C,CAAC,CAAC;IAC5E,CAAC;IAED,kBAAkB,CAAC,GAAW;QAC5B,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,gBAAgB,CAAC,GAAW;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
1
+ {"version":3,"file":"authService.js","sourceRoot":"","sources":["../../../src/nest/authService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACrD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,cAAc,GACf,mBAAgB;AA+BjB,MAAM,OAAO,WAAW;IAOtB,YAAY,UAA8B,EAAE;QAC1C,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAChE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,IAAI,CAAC,CAAC;QAChE,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC;IAED,eAAe,CAAC,GAAW;QACzB,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,QAAQ,CAAC,GAAW;QAClB,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,CAAC,GAAW;QACjB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,oBAAoB,CAAC,OAA0C;QAC7D,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAChB,OAA0C;QAE1C,OAAO,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IACvD,CAAC;IAED,kBAAkB,CAAC,GAAW;QAC5B,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,gBAAgB,CACpB,GAAW;QAEX,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACrC,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,iBAAiB,CAC7B,GAAW;QAEX,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE;gBAClD,cAAc,EAAE,GAAG,IAAI,CAAC,qBAAqB,GAAG;aACjD,CAAC,CAAC;YACH,OAAO,OAAgD,CAAC;QAC1D,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,MAAM,IAAI,kBAAkB,CAAC,iBAAiB,GAAG,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;CACF"}
@@ -1,11 +1,19 @@
1
1
  import { AuthorizationError } from "@decaf-ts/core";
2
2
  import { AuthHandler } from "@decaf-ts/for-http/server";
3
3
  import { AuthService } from "./authService.js";
4
- import { getRealmFromIssuer, getTokenPayload, extractKeycloakRoles, } from "./utils.js";
4
+ import { getRealmFromIssuer, getTokenPayload, extractKeycloakRoles, getClientRoles, } from "./utils.js";
5
5
  export class KeycloakAuthHandler extends AuthHandler {
6
- constructor(authService = new AuthService()) {
6
+ /**
7
+ * @param authService An {@link AuthService} configured with JWKS verification
8
+ * options. When omitted a default decode-only service is
9
+ * used.
10
+ * @param authServiceOptions Convenience: if `authService` is omitted, these
11
+ * options are used to construct one.
12
+ */
13
+ constructor(authService, authServiceOptions) {
7
14
  super();
8
- this.authService = authService;
15
+ this.authService =
16
+ authService ?? new AuthService(authServiceOptions ?? {});
9
17
  }
10
18
  extractFromAuth(ctx) {
11
19
  const request = ctx.switchToHttp().getRequest();
@@ -30,15 +38,13 @@ export class KeycloakAuthHandler extends AuthHandler {
30
38
  async validate(data, routeRoles, model, ...args) {
31
39
  if (data.isPublic)
32
40
  return;
33
- this.authService.assertValidToken(data.token);
41
+ await this.authService.assertValidToken(data.token);
34
42
  await super.validate(data, routeRoles, model, ...args);
35
43
  }
36
44
  }
37
45
  function isPublicRoute(req) {
38
46
  if (req.path?.startsWith("/public"))
39
47
  return true;
40
- if (req.path === "/account" && req.method === "POST")
41
- return true;
42
48
  return false;
43
49
  }
44
50
  function getToken(req) {
@@ -55,4 +61,5 @@ function resolveOrganization(payload, token) {
55
61
  return payload.azp;
56
62
  return getRealmFromIssuer(token);
57
63
  }
64
+ export { getClientRoles };
58
65
  //# sourceMappingURL=keycloakAuthHandler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"keycloakAuthHandler.js","sourceRoot":"","sources":["../../../src/nest/keycloakAuthHandler.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,kBAAkB,EAA2B,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAY,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAE5C,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,oBAAoB,GACrB,mBAAgB;AAejB,MAAM,OAAO,mBAAoB,SAAQ,WAIxC;IACC,YAA6B,cAAc,IAAI,WAAW,EAAE;QAC1D,KAAK,EAAE,CAAC;QADmB,gBAAW,GAAX,WAAW,CAAoB;IAE5D,CAAC;IAES,eAAe,CAAC,GAA6B;QACrD,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAmB,CAAC;QAEjE,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAClD,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;QAE5D,iDAAiD;QACjD,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,kBAAkB,CAAC;QAE3D,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC/D,CAAC;IAED;;;;OAIG;IACgB,KAAK,CAAC,QAAQ,CAC/B,IAAsB,EACtB,UAAgC,EAChC,KAA2B,EAC3B,GAAG,IAA6B;QAEhC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IACzD,CAAC;CACF;AAED,SAAS,aAAa,CAAC,GAAoB;IACzC,IAAI,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAClE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,GAAoB;IACpC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,6BAA6B,CAAC;QACzD,GAAG,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,CAAuB,CAAC;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7E,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAA8C,EAC9C,KAAa;IAEb,IAAI,OAAO,EAAE,GAAG;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC;IACrC,IAAI,OAAO,EAAE,GAAG;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC;IACrC,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC"}
1
+ {"version":3,"file":"keycloakAuthHandler.js","sourceRoot":"","sources":["../../../src/nest/keycloakAuthHandler.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,kBAAkB,EAA2B,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAY,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,WAAW,EAA2B,yBAAsB;AAErE,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,cAAc,GACf,mBAAgB;AAejB,MAAM,OAAO,mBAAoB,SAAQ,WAIxC;IACC;;;;;;OAMG;IACH,YACE,WAAyB,EACzB,kBAAuC;QAEvC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW;YACd,WAAW,IAAI,IAAI,WAAW,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAIS,eAAe,CAAC,GAA6B;QACrD,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAmB,CAAC;QAEjE,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAClD,CAAC;QAED,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;QAE5D,iDAAiD;QACjD,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,OAAO,EAAE,KAAK,IAAI,OAAO,EAAE,kBAAkB,CAAC;QAE3D,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC/D,CAAC;IAED;;;;OAIG;IACgB,KAAK,CAAC,QAAQ,CAC/B,IAAsB,EACtB,UAAgC,EAChC,KAA2B,EAC3B,GAAG,IAA6B;QAEhC,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO;QAC1B,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IACzD,CAAC;CACF;AAED,SAAS,aAAa,CAAC,GAAoB;IACzC,IAAI,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACjD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,GAAoB;IACpC,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,6BAA6B,CAAC;QACzD,GAAG,CAAC,OAAO,EAAE,CAAC,eAAe,CAAC,CAAuB,CAAC;IACxD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7E,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAA8C,EAC9C,KAAa;IAEb,IAAI,OAAO,EAAE,GAAG;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC;IACrC,IAAI,OAAO,EAAE,GAAG;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC;IACrC,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -6,12 +6,14 @@
6
6
  import { AuthService } from "./authService.js";
7
7
  import { KeycloakAuthHandler } from "./keycloakAuthHandler.js";
8
8
  export class KeycloakModule {
9
- constructor(authService = new AuthService(), authHandler = new KeycloakAuthHandler(authService)) {
9
+ constructor(authService, authHandler) {
10
10
  this.authService = authService;
11
11
  this.authHandler = authHandler;
12
12
  }
13
- static create() {
14
- return new KeycloakModule();
13
+ static create(options) {
14
+ const authService = new AuthService(options);
15
+ const authHandler = new KeycloakAuthHandler(authService);
16
+ return new KeycloakModule(authService, authHandler);
15
17
  }
16
18
  }
17
19
  export class AuthModule extends KeycloakModule {
@@ -1 +1 @@
1
- {"version":3,"file":"keycloakModule.js","sourceRoot":"","sources":["../../../src/nest/keycloakModule.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAAE,yBAAsB;AAC5C,OAAO,EAAE,mBAAmB,EAAE,iCAA8B;AAE5D,MAAM,OAAO,cAAc;IACzB,YACkB,cAAc,IAAI,WAAW,EAAE,EAC/B,cAAc,IAAI,mBAAmB,CAAC,WAAW,CAAC;QADlD,gBAAW,GAAX,WAAW,CAAoB;QAC/B,gBAAW,GAAX,WAAW,CAAuC;IACjE,CAAC;IAEJ,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,cAAc,EAAE,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,cAAc;CAAG"}
1
+ {"version":3,"file":"keycloakModule.js","sourceRoot":"","sources":["../../../src/nest/keycloakModule.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,WAAW,EAA2B,yBAAsB;AACrE,OAAO,EAAE,mBAAmB,EAAE,iCAA8B;AAE5D,MAAM,OAAO,cAAc;IACzB,YACkB,WAAwB,EACxB,WAAgC;QADhC,gBAAW,GAAX,WAAW,CAAa;QACxB,gBAAW,GAAX,WAAW,CAAqB;IAC/C,CAAC;IAEJ,MAAM,CAAC,MAAM,CAAC,OAA4B;QACxC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,WAAW,GAAG,IAAI,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACzD,OAAO,IAAI,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACtD,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,cAAc;CAAG"}
@@ -23,6 +23,29 @@ export function extractKeycloakRoles(payload) {
23
23
  }
24
24
  return [...roles];
25
25
  }
26
+ /**
27
+ * Extracts roles from the `resource_access` claim only, optionally excluding
28
+ * specified client IDs (e.g. `"account"`). Unlike {@link extractKeycloakRoles}
29
+ * this does NOT include `realm_access.roles`.
30
+ *
31
+ * @param payload The decoded JWT payload.
32
+ * @param excluded Client IDs to skip. @default ["account"]
33
+ */
34
+ export function getClientRoles(payload, excluded = ["account"]) {
35
+ const resourceAccess = payload?.resource_access;
36
+ if (!resourceAccess || typeof resourceAccess !== "object")
37
+ return [];
38
+ const roles = new Set();
39
+ for (const [clientId, data] of Object.entries(resourceAccess)) {
40
+ if (excluded.includes(clientId))
41
+ continue;
42
+ if (Array.isArray(data?.roles)) {
43
+ for (const role of data.roles)
44
+ roles.add(role);
45
+ }
46
+ }
47
+ return [...roles];
48
+ }
26
49
  export function getUser(jwt) {
27
50
  const payload = getTokenPayload(jwt);
28
51
  if (!payload)
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/nest/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/nest/utils.ts"],"names":[],"mappings":"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"}
package/lib/esm/utils.js CHANGED
@@ -18,7 +18,7 @@ export async function execWithLogging(command, options, log, level = LogLevel.in
18
18
  });
19
19
  child.stderr?.on("data", (data) => {
20
20
  stderr.push(data);
21
- log.error(data.trim());
21
+ log.debug(data.trim());
22
22
  });
23
23
  child.on("close", (code) => {
24
24
  if (code === 0) {
@@ -5,6 +5,6 @@
5
5
  */
6
6
  export * from "./utils.d.cts";
7
7
  export declare const VERSION: string;
8
- export declare const COMMIT = "00bac68";
9
- export declare const FULL_VERSION = "0.2.0-00bac68";
8
+ export declare const COMMIT = "5dab9b8";
9
+ export declare const FULL_VERSION = "0.2.2-5dab9b8";
10
10
  export declare const PACKAGE_NAME: string;
@@ -5,6 +5,6 @@
5
5
  */
6
6
  export * from "./utils.d.mts";
7
7
  export declare const VERSION: string;
8
- export declare const COMMIT = "00bac68";
9
- export declare const FULL_VERSION = "0.2.0-00bac68";
8
+ export declare const COMMIT = "5dab9b8";
9
+ export declare const FULL_VERSION = "0.2.2-5dab9b8";
10
10
  export declare const PACKAGE_NAME: string;
@@ -8,6 +8,20 @@ export declare class KeycloakRoleService extends ClientBasedService<AxiosInstanc
8
8
  client: AxiosInstance;
9
9
  }>;
10
10
  createClientRoles(keycloakSetupConfig: KeycloakSetupConfig, roleConfigs: KeycloakClientRoleConfig[] | undefined, ...args: MaybeContextualArg<any>): Promise<void>;
11
+ /**
12
+ * Creates a realm-level role in the specified realm.
13
+ *
14
+ * When `compositeRoles` is provided, the role is created as a Keycloak
15
+ * composite role that includes the given sub-roles. This allows role
16
+ * hierarchies (e.g. `admin ⊃ writer ⊃ reader`) so that a user assigned
17
+ * the composite role automatically inherits all sub-roles in their JWT.
18
+ *
19
+ * @param realmName The realm in which to create the role.
20
+ * @param roleName The name of the realm role to create.
21
+ * @param compositeRoles Optional array of existing realm role names to
22
+ * include as composites.
23
+ */
24
+ createRealmRole(realmName: string, roleName: string, compositeRoles: string[] | undefined, ...args: MaybeContextualArg<any>): Promise<void>;
11
25
  getRealmRoles(realmName: string, ...args: MaybeContextualArg<any>): Promise<any[]>;
12
26
  getClientRoles(realmName: string, clientUUID: string, ...args: MaybeContextualArg<any>): Promise<any[]>;
13
27
  grantRealmRolesToUser(realmName: string, userUUID: string, roleNames: string[], ...args: MaybeContextualArg<any>): Promise<void>;
@@ -8,6 +8,20 @@ export declare class KeycloakRoleService extends ClientBasedService<AxiosInstanc
8
8
  client: AxiosInstance;
9
9
  }>;
10
10
  createClientRoles(keycloakSetupConfig: KeycloakSetupConfig, roleConfigs: KeycloakClientRoleConfig[] | undefined, ...args: MaybeContextualArg<any>): Promise<void>;
11
+ /**
12
+ * Creates a realm-level role in the specified realm.
13
+ *
14
+ * When `compositeRoles` is provided, the role is created as a Keycloak
15
+ * composite role that includes the given sub-roles. This allows role
16
+ * hierarchies (e.g. `admin ⊃ writer ⊃ reader`) so that a user assigned
17
+ * the composite role automatically inherits all sub-roles in their JWT.
18
+ *
19
+ * @param realmName The realm in which to create the role.
20
+ * @param roleName The name of the realm role to create.
21
+ * @param compositeRoles Optional array of existing realm role names to
22
+ * include as composites.
23
+ */
24
+ createRealmRole(realmName: string, roleName: string, compositeRoles: string[] | undefined, ...args: MaybeContextualArg<any>): Promise<void>;
11
25
  getRealmRoles(realmName: string, ...args: MaybeContextualArg<any>): Promise<any[]>;
12
26
  getClientRoles(realmName: string, clientUUID: string, ...args: MaybeContextualArg<any>): Promise<any[]>;
13
27
  grantRealmRolesToUser(realmName: string, userUUID: string, roleNames: string[], ...args: MaybeContextualArg<any>): Promise<void>;
@@ -27,12 +27,21 @@ export declare class KeycloakService extends ClientBasedService<AxiosInstance, K
27
27
  editUser(realmName: string, userUUID: string, payload: any, ...args: MaybeContextualArg<any>): Promise<void>;
28
28
  removeUserFromRealm(realmName: string, userUUID: string, ...args: MaybeContextualArg<any>): Promise<void>;
29
29
  addRealmRolesToUser(realmName: string, userUUID: string, roleNames: string[], ...args: MaybeContextualArg<any>): Promise<void>;
30
+ /**
31
+ * Creates a realm-level role, optionally as a composite of existing roles.
32
+ */
33
+ createRealmRole(realmName: string, roleName: string, compositeRoles: string[] | undefined, ...args: MaybeContextualArg<any>): Promise<void>;
34
+ /**
35
+ * Creates a client in the configured realm and returns its UUID.
36
+ */
37
+ createClient(config: KeycloakSetupConfig, overrides: Partial<import("../types.d.cts").KeycloakClientConfig> | undefined, ...args: MaybeContextualArg<any>): Promise<string>;
30
38
  addClientRolesToUser(realmName: string, clientUUID: string, userUUID: string, roleNames: string[], ...args: MaybeContextualArg<any>): Promise<void>;
31
39
  deleteAdminApiUser(keycloakSetupConfig: KeycloakSetupConfig, ...args: MaybeContextualArg<any>): Promise<void>;
32
40
  setupOrganization(config: KeycloakSetupConfig, ...args: MaybeContextualArg<any>): Promise<KeycloakSetupConfig>;
33
41
  setupOrganizationSSO(keycloakSetupConfig: KeycloakSetupConfig, ...args: MaybeContextualArg<any>): Promise<void>;
34
42
  deleteOrganization(realmName: string, ...args: MaybeContextualArg<any>): Promise<void>;
35
43
  private createHttpClient;
44
+ private waitForRealm;
36
45
  private updateClientScopesRolesMappers;
37
46
  private parseJsonResponse;
38
47
  }
@@ -27,12 +27,21 @@ export declare class KeycloakService extends ClientBasedService<AxiosInstance, K
27
27
  editUser(realmName: string, userUUID: string, payload: any, ...args: MaybeContextualArg<any>): Promise<void>;
28
28
  removeUserFromRealm(realmName: string, userUUID: string, ...args: MaybeContextualArg<any>): Promise<void>;
29
29
  addRealmRolesToUser(realmName: string, userUUID: string, roleNames: string[], ...args: MaybeContextualArg<any>): Promise<void>;
30
+ /**
31
+ * Creates a realm-level role, optionally as a composite of existing roles.
32
+ */
33
+ createRealmRole(realmName: string, roleName: string, compositeRoles: string[] | undefined, ...args: MaybeContextualArg<any>): Promise<void>;
34
+ /**
35
+ * Creates a client in the configured realm and returns its UUID.
36
+ */
37
+ createClient(config: KeycloakSetupConfig, overrides: Partial<import("../types.d.mts").KeycloakClientConfig> | undefined, ...args: MaybeContextualArg<any>): Promise<string>;
30
38
  addClientRolesToUser(realmName: string, clientUUID: string, userUUID: string, roleNames: string[], ...args: MaybeContextualArg<any>): Promise<void>;
31
39
  deleteAdminApiUser(keycloakSetupConfig: KeycloakSetupConfig, ...args: MaybeContextualArg<any>): Promise<void>;
32
40
  setupOrganization(config: KeycloakSetupConfig, ...args: MaybeContextualArg<any>): Promise<KeycloakSetupConfig>;
33
41
  setupOrganizationSSO(keycloakSetupConfig: KeycloakSetupConfig, ...args: MaybeContextualArg<any>): Promise<void>;
34
42
  deleteOrganization(realmName: string, ...args: MaybeContextualArg<any>): Promise<void>;
35
43
  private createHttpClient;
44
+ private waitForRealm;
36
45
  private updateClientScopesRolesMappers;
37
46
  private parseJsonResponse;
38
47
  }
@@ -100,4 +100,15 @@ export interface KeycloakSetupConfig {
100
100
  client: KeycloakClientConfig;
101
101
  identityProvider?: KeycloakIdentityProviderConfig;
102
102
  realmConfig?: KeycloakRealmConfig;
103
+ /**
104
+ * When true, realm roles are created as Keycloak composite roles forming a
105
+ * hierarchy (e.g. admin ⊃ writer ⊃ reader). A user assigned the composite
106
+ * role automatically inherits all sub-roles in their JWT.
107
+ *
108
+ * When false (default), roles are independent — admin does NOT imply writer
109
+ * or reader. Each user must be explicitly granted every role they need.
110
+ *
111
+ * @default false
112
+ */
113
+ useCompositeRoles?: boolean;
103
114
  }
@@ -100,4 +100,15 @@ export interface KeycloakSetupConfig {
100
100
  client: KeycloakClientConfig;
101
101
  identityProvider?: KeycloakIdentityProviderConfig;
102
102
  realmConfig?: KeycloakRealmConfig;
103
+ /**
104
+ * When true, realm roles are created as Keycloak composite roles forming a
105
+ * hierarchy (e.g. admin ⊃ writer ⊃ reader). A user assigned the composite
106
+ * role automatically inherits all sub-roles in their JWT.
107
+ *
108
+ * When false (default), roles are independent — admin does NOT imply writer
109
+ * or reader. Each user must be explicitly granted every role they need.
110
+ *
111
+ * @default false
112
+ */
113
+ useCompositeRoles?: boolean;
103
114
  }
@@ -1,9 +1,62 @@
1
1
  import type { KeycloakAccessTokenPayload, KeycloakUser } from "./types.d.cts";
2
+ /**
3
+ * Configuration for the {@link AuthService}.
4
+ */
5
+ export interface AuthServiceOptions {
6
+ /**
7
+ * Whether to verify the JWT signature against the Keycloak JWKS endpoint.
8
+ * When `false` (or `verifyUrl` is empty), tokens are decoded without
9
+ * signature verification (dev/local mode only).
10
+ * @default false
11
+ */
12
+ verifyToken?: boolean;
13
+ /**
14
+ * The Keycloak JWKS URL (e.g. `https://keycloak/realms/myrealm/protocol/openid-connect/certs`).
15
+ * Required when `verifyToken` is `true`.
16
+ */
17
+ verifyUrl?: string;
18
+ /**
19
+ * Clock tolerance for JWT expiry verification (in seconds).
20
+ * @default 5
21
+ */
22
+ clockToleranceSeconds?: number;
23
+ /**
24
+ * Keycloak client IDs to exclude when extracting roles from `resource_access`.
25
+ * @default ["account"]
26
+ */
27
+ excludedClients?: string[];
28
+ }
2
29
  export declare class AuthService {
30
+ private readonly verifyToken;
31
+ private readonly verifyUrl;
32
+ private readonly clockToleranceSeconds;
33
+ private readonly excludedClients;
34
+ private jwks;
35
+ constructor(options?: AuthServiceOptions);
3
36
  getTokenPayload(jwt: string): KeycloakAccessTokenPayload | null;
4
37
  getRoles(jwt: string): string[];
5
38
  getUser(jwt: string): KeycloakUser | undefined;
6
- extractKeycloakRoles(payload: unknown): string[];
39
+ extractKeycloakRoles(payload: KeycloakAccessTokenPayload | null): string[];
40
+ /**
41
+ * Extracts client roles from the `resource_access` claim, excluding
42
+ * the configured `excludedClients` (default: `["account"]`).
43
+ */
44
+ extractClientRoles(payload: KeycloakAccessTokenPayload | null): string[];
7
45
  getRealmFromIssuer(jwt: string): string;
8
- assertValidToken(jwt: string): KeycloakAccessTokenPayload;
46
+ /**
47
+ * Validates a JWT:
48
+ * - In **verify mode**: verifies the signature against the Keycloak JWKS
49
+ * endpoint using `jose.jwtVerify`, then returns the verified payload.
50
+ * - In **decode-only mode**: decodes the JWT without verification and
51
+ * returns the payload (or throws if unparseable).
52
+ *
53
+ * @throws {AuthorizationError} when the token is invalid, expired, or
54
+ * signature verification fails.
55
+ */
56
+ assertValidToken(jwt: string): Promise<KeycloakAccessTokenPayload>;
57
+ /**
58
+ * Verifies the JWT signature against the Keycloak JWKS endpoint.
59
+ * Lazily creates the JWKS keystore on first call.
60
+ */
61
+ private verifyAgainstJwks;
9
62
  }
@@ -1,9 +1,62 @@
1
1
  import type { KeycloakAccessTokenPayload, KeycloakUser } from "./types.d.mts";
2
+ /**
3
+ * Configuration for the {@link AuthService}.
4
+ */
5
+ export interface AuthServiceOptions {
6
+ /**
7
+ * Whether to verify the JWT signature against the Keycloak JWKS endpoint.
8
+ * When `false` (or `verifyUrl` is empty), tokens are decoded without
9
+ * signature verification (dev/local mode only).
10
+ * @default false
11
+ */
12
+ verifyToken?: boolean;
13
+ /**
14
+ * The Keycloak JWKS URL (e.g. `https://keycloak/realms/myrealm/protocol/openid-connect/certs`).
15
+ * Required when `verifyToken` is `true`.
16
+ */
17
+ verifyUrl?: string;
18
+ /**
19
+ * Clock tolerance for JWT expiry verification (in seconds).
20
+ * @default 5
21
+ */
22
+ clockToleranceSeconds?: number;
23
+ /**
24
+ * Keycloak client IDs to exclude when extracting roles from `resource_access`.
25
+ * @default ["account"]
26
+ */
27
+ excludedClients?: string[];
28
+ }
2
29
  export declare class AuthService {
30
+ private readonly verifyToken;
31
+ private readonly verifyUrl;
32
+ private readonly clockToleranceSeconds;
33
+ private readonly excludedClients;
34
+ private jwks;
35
+ constructor(options?: AuthServiceOptions);
3
36
  getTokenPayload(jwt: string): KeycloakAccessTokenPayload | null;
4
37
  getRoles(jwt: string): string[];
5
38
  getUser(jwt: string): KeycloakUser | undefined;
6
- extractKeycloakRoles(payload: unknown): string[];
39
+ extractKeycloakRoles(payload: KeycloakAccessTokenPayload | null): string[];
40
+ /**
41
+ * Extracts client roles from the `resource_access` claim, excluding
42
+ * the configured `excludedClients` (default: `["account"]`).
43
+ */
44
+ extractClientRoles(payload: KeycloakAccessTokenPayload | null): string[];
7
45
  getRealmFromIssuer(jwt: string): string;
8
- assertValidToken(jwt: string): KeycloakAccessTokenPayload;
46
+ /**
47
+ * Validates a JWT:
48
+ * - In **verify mode**: verifies the signature against the Keycloak JWKS
49
+ * endpoint using `jose.jwtVerify`, then returns the verified payload.
50
+ * - In **decode-only mode**: decodes the JWT without verification and
51
+ * returns the payload (or throws if unparseable).
52
+ *
53
+ * @throws {AuthorizationError} when the token is invalid, expired, or
54
+ * signature verification fails.
55
+ */
56
+ assertValidToken(jwt: string): Promise<KeycloakAccessTokenPayload>;
57
+ /**
58
+ * Verifies the JWT signature against the Keycloak JWKS endpoint.
59
+ * Lazily creates the JWKS keystore on first call.
60
+ */
61
+ private verifyAgainstJwks;
9
62
  }