@pawells/nestjs-auth 1.0.0-dev.4c8c698

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 (194) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +602 -0
  3. package/build/LICENSE +21 -0
  4. package/build/README.md +602 -0
  5. package/build/admin/client/client.d.ts +82 -0
  6. package/build/admin/client/client.d.ts.map +1 -0
  7. package/build/admin/client/client.js +157 -0
  8. package/build/admin/client/client.js.map +1 -0
  9. package/build/admin/client/errors/base-error.d.ts +58 -0
  10. package/build/admin/client/errors/base-error.d.ts.map +1 -0
  11. package/build/admin/client/errors/base-error.js +100 -0
  12. package/build/admin/client/errors/base-error.js.map +1 -0
  13. package/build/admin/client/errors/index.d.ts +2 -0
  14. package/build/admin/client/errors/index.d.ts.map +1 -0
  15. package/build/admin/client/errors/index.js +2 -0
  16. package/build/admin/client/errors/index.js.map +1 -0
  17. package/build/admin/client/index.d.ts +6 -0
  18. package/build/admin/client/index.d.ts.map +1 -0
  19. package/build/admin/client/index.js +11 -0
  20. package/build/admin/client/index.js.map +1 -0
  21. package/build/admin/client/services/authentication.service.d.ts +54 -0
  22. package/build/admin/client/services/authentication.service.d.ts.map +1 -0
  23. package/build/admin/client/services/authentication.service.js +99 -0
  24. package/build/admin/client/services/authentication.service.js.map +1 -0
  25. package/build/admin/client/services/base-service.d.ts +39 -0
  26. package/build/admin/client/services/base-service.d.ts.map +1 -0
  27. package/build/admin/client/services/base-service.js +107 -0
  28. package/build/admin/client/services/base-service.js.map +1 -0
  29. package/build/admin/client/services/client.service.d.ts +86 -0
  30. package/build/admin/client/services/client.service.d.ts.map +1 -0
  31. package/build/admin/client/services/client.service.js +193 -0
  32. package/build/admin/client/services/client.service.js.map +1 -0
  33. package/build/admin/client/services/event.service.d.ts +84 -0
  34. package/build/admin/client/services/event.service.d.ts.map +1 -0
  35. package/build/admin/client/services/event.service.js +155 -0
  36. package/build/admin/client/services/event.service.js.map +1 -0
  37. package/build/admin/client/services/federated-identity.service.d.ts +89 -0
  38. package/build/admin/client/services/federated-identity.service.d.ts.map +1 -0
  39. package/build/admin/client/services/federated-identity.service.js +120 -0
  40. package/build/admin/client/services/federated-identity.service.js.map +1 -0
  41. package/build/admin/client/services/group.service.d.ts +52 -0
  42. package/build/admin/client/services/group.service.d.ts.map +1 -0
  43. package/build/admin/client/services/group.service.js +105 -0
  44. package/build/admin/client/services/group.service.js.map +1 -0
  45. package/build/admin/client/services/identity-provider.service.d.ts +47 -0
  46. package/build/admin/client/services/identity-provider.service.d.ts.map +1 -0
  47. package/build/admin/client/services/identity-provider.service.js +86 -0
  48. package/build/admin/client/services/identity-provider.service.js.map +1 -0
  49. package/build/admin/client/services/index.d.ts +11 -0
  50. package/build/admin/client/services/index.d.ts.map +1 -0
  51. package/build/admin/client/services/index.js +11 -0
  52. package/build/admin/client/services/index.js.map +1 -0
  53. package/build/admin/client/services/realm.service.d.ts +41 -0
  54. package/build/admin/client/services/realm.service.d.ts.map +1 -0
  55. package/build/admin/client/services/realm.service.js +80 -0
  56. package/build/admin/client/services/realm.service.js.map +1 -0
  57. package/build/admin/client/services/role.service.d.ts +45 -0
  58. package/build/admin/client/services/role.service.d.ts.map +1 -0
  59. package/build/admin/client/services/role.service.js +92 -0
  60. package/build/admin/client/services/role.service.js.map +1 -0
  61. package/build/admin/client/services/user.service.d.ts +84 -0
  62. package/build/admin/client/services/user.service.d.ts.map +1 -0
  63. package/build/admin/client/services/user.service.js +216 -0
  64. package/build/admin/client/services/user.service.js.map +1 -0
  65. package/build/admin/client/types/config.types.d.ts +59 -0
  66. package/build/admin/client/types/config.types.d.ts.map +1 -0
  67. package/build/admin/client/types/config.types.js +13 -0
  68. package/build/admin/client/types/config.types.js.map +1 -0
  69. package/build/admin/client/types/event.types.d.ts +176 -0
  70. package/build/admin/client/types/event.types.d.ts.map +1 -0
  71. package/build/admin/client/types/event.types.js +2 -0
  72. package/build/admin/client/types/event.types.js.map +1 -0
  73. package/build/admin/client/types/index.d.ts +4 -0
  74. package/build/admin/client/types/index.d.ts.map +1 -0
  75. package/build/admin/client/types/index.js +4 -0
  76. package/build/admin/client/types/index.js.map +1 -0
  77. package/build/admin/client/types/keycloak.types.d.ts +169 -0
  78. package/build/admin/client/types/keycloak.types.d.ts.map +1 -0
  79. package/build/admin/client/types/keycloak.types.js +2 -0
  80. package/build/admin/client/types/keycloak.types.js.map +1 -0
  81. package/build/admin/client/utils/index.d.ts +2 -0
  82. package/build/admin/client/utils/index.d.ts.map +1 -0
  83. package/build/admin/client/utils/index.js +2 -0
  84. package/build/admin/client/utils/index.js.map +1 -0
  85. package/build/admin/client/utils/retry.d.ts +40 -0
  86. package/build/admin/client/utils/retry.d.ts.map +1 -0
  87. package/build/admin/client/utils/retry.js +72 -0
  88. package/build/admin/client/utils/retry.js.map +1 -0
  89. package/build/admin/config/keycloak.config.d.ts +33 -0
  90. package/build/admin/config/keycloak.config.d.ts.map +1 -0
  91. package/build/admin/config/keycloak.config.js +2 -0
  92. package/build/admin/config/keycloak.config.js.map +1 -0
  93. package/build/admin/config/keycloak.defaults.d.ts +11 -0
  94. package/build/admin/config/keycloak.defaults.d.ts.map +1 -0
  95. package/build/admin/config/keycloak.defaults.js +60 -0
  96. package/build/admin/config/keycloak.defaults.js.map +1 -0
  97. package/build/admin/health/keycloak.health.d.ts +13 -0
  98. package/build/admin/health/keycloak.health.d.ts.map +1 -0
  99. package/build/admin/health/keycloak.health.js +54 -0
  100. package/build/admin/health/keycloak.health.js.map +1 -0
  101. package/build/admin/index.d.ts +10 -0
  102. package/build/admin/index.d.ts.map +1 -0
  103. package/build/admin/index.js +9 -0
  104. package/build/admin/index.js.map +1 -0
  105. package/build/admin/keycloak-admin.interfaces.d.ts +45 -0
  106. package/build/admin/keycloak-admin.interfaces.d.ts.map +1 -0
  107. package/build/admin/keycloak-admin.interfaces.js +2 -0
  108. package/build/admin/keycloak-admin.interfaces.js.map +1 -0
  109. package/build/admin/keycloak-admin.module.d.ts +23 -0
  110. package/build/admin/keycloak-admin.module.d.ts.map +1 -0
  111. package/build/admin/keycloak-admin.module.js +101 -0
  112. package/build/admin/keycloak-admin.module.js.map +1 -0
  113. package/build/admin/keycloak.constants.d.ts +16 -0
  114. package/build/admin/keycloak.constants.d.ts.map +1 -0
  115. package/build/admin/keycloak.constants.js +16 -0
  116. package/build/admin/keycloak.constants.js.map +1 -0
  117. package/build/admin/permissions/index.d.ts +2 -0
  118. package/build/admin/permissions/index.d.ts.map +1 -0
  119. package/build/admin/permissions/index.js +2 -0
  120. package/build/admin/permissions/index.js.map +1 -0
  121. package/build/admin/permissions/keycloak-admin.permissions.d.ts +45 -0
  122. package/build/admin/permissions/keycloak-admin.permissions.d.ts.map +1 -0
  123. package/build/admin/permissions/keycloak-admin.permissions.js +68 -0
  124. package/build/admin/permissions/keycloak-admin.permissions.js.map +1 -0
  125. package/build/admin/services/keycloak-admin.service.d.ts +64 -0
  126. package/build/admin/services/keycloak-admin.service.d.ts.map +1 -0
  127. package/build/admin/services/keycloak-admin.service.js +152 -0
  128. package/build/admin/services/keycloak-admin.service.js.map +1 -0
  129. package/build/decorators/auth-decorators.d.ts +217 -0
  130. package/build/decorators/auth-decorators.d.ts.map +1 -0
  131. package/build/decorators/auth-decorators.js +251 -0
  132. package/build/decorators/auth-decorators.js.map +1 -0
  133. package/build/decorators/context-utils.d.ts +101 -0
  134. package/build/decorators/context-utils.d.ts.map +1 -0
  135. package/build/decorators/context-utils.js +178 -0
  136. package/build/decorators/context-utils.js.map +1 -0
  137. package/build/decorators/graphql-auth-decorators.d.ts +144 -0
  138. package/build/decorators/graphql-auth-decorators.d.ts.map +1 -0
  139. package/build/decorators/graphql-auth-decorators.js +152 -0
  140. package/build/decorators/graphql-auth-decorators.js.map +1 -0
  141. package/build/decorators/index.d.ts +5 -0
  142. package/build/decorators/index.d.ts.map +1 -0
  143. package/build/decorators/index.js +4 -0
  144. package/build/decorators/index.js.map +1 -0
  145. package/build/guards/index.d.ts +4 -0
  146. package/build/guards/index.d.ts.map +1 -0
  147. package/build/guards/index.js +4 -0
  148. package/build/guards/index.js.map +1 -0
  149. package/build/guards/jwt-auth.guard.d.ts +52 -0
  150. package/build/guards/jwt-auth.guard.d.ts.map +1 -0
  151. package/build/guards/jwt-auth.guard.js +97 -0
  152. package/build/guards/jwt-auth.guard.js.map +1 -0
  153. package/build/guards/permission.guard.d.ts +37 -0
  154. package/build/guards/permission.guard.d.ts.map +1 -0
  155. package/build/guards/permission.guard.js +73 -0
  156. package/build/guards/permission.guard.js.map +1 -0
  157. package/build/guards/role.guard.d.ts +33 -0
  158. package/build/guards/role.guard.d.ts.map +1 -0
  159. package/build/guards/role.guard.js +69 -0
  160. package/build/guards/role.guard.js.map +1 -0
  161. package/build/index.d.ts +92 -0
  162. package/build/index.d.ts.map +1 -0
  163. package/build/index.js +98 -0
  164. package/build/index.js.map +1 -0
  165. package/build/keycloak/index.d.ts +7 -0
  166. package/build/keycloak/index.d.ts.map +1 -0
  167. package/build/keycloak/index.js +5 -0
  168. package/build/keycloak/index.js.map +1 -0
  169. package/build/keycloak/keycloak.constants.d.ts +2 -0
  170. package/build/keycloak/keycloak.constants.d.ts.map +1 -0
  171. package/build/keycloak/keycloak.constants.js +2 -0
  172. package/build/keycloak/keycloak.constants.js.map +1 -0
  173. package/build/keycloak/keycloak.interfaces.d.ts +12 -0
  174. package/build/keycloak/keycloak.interfaces.d.ts.map +1 -0
  175. package/build/keycloak/keycloak.interfaces.js +2 -0
  176. package/build/keycloak/keycloak.interfaces.js.map +1 -0
  177. package/build/keycloak/keycloak.module.d.ts +56 -0
  178. package/build/keycloak/keycloak.module.d.ts.map +1 -0
  179. package/build/keycloak/keycloak.module.js +104 -0
  180. package/build/keycloak/keycloak.module.js.map +1 -0
  181. package/build/keycloak/keycloak.types.d.ts +60 -0
  182. package/build/keycloak/keycloak.types.d.ts.map +1 -0
  183. package/build/keycloak/keycloak.types.js +2 -0
  184. package/build/keycloak/keycloak.types.js.map +1 -0
  185. package/build/keycloak/services/jwks-cache.service.d.ts +64 -0
  186. package/build/keycloak/services/jwks-cache.service.d.ts.map +1 -0
  187. package/build/keycloak/services/jwks-cache.service.js +176 -0
  188. package/build/keycloak/services/jwks-cache.service.js.map +1 -0
  189. package/build/keycloak/services/keycloak-token-validation.service.d.ts +88 -0
  190. package/build/keycloak/services/keycloak-token-validation.service.d.ts.map +1 -0
  191. package/build/keycloak/services/keycloak-token-validation.service.js +243 -0
  192. package/build/keycloak/services/keycloak-token-validation.service.js.map +1 -0
  193. package/build/package.json +72 -0
  194. package/package.json +93 -0
@@ -0,0 +1,157 @@
1
+ import { randomUUID } from 'node:crypto';
2
+ import KcAdminClient from '@keycloak/keycloak-admin-client';
3
+ import { isPasswordCredentials, isClientCredentials } from './types/index.js';
4
+ import { RealmService, UserService, ClientService, RoleService, GroupService, IdentityProviderService, AuthenticationService, FederatedIdentityService, EventService, } from './services/index.js';
5
+ // Short client identifier length (last N characters of UUID)
6
+ const CLIENT_ID_SHORT_LENGTH = 12;
7
+ /**
8
+ * Keycloak Admin API client
9
+ */
10
+ export class KeycloakClient {
11
+ /**
12
+ * Unique identifier for this client instance
13
+ */
14
+ ClientUUID;
15
+ /**
16
+ * Short client identifier (last 12 characters of UUID)
17
+ */
18
+ ClientID;
19
+ /**
20
+ * Realm service for managing realms
21
+ */
22
+ Realms;
23
+ /**
24
+ * User service for managing users
25
+ */
26
+ Users;
27
+ /**
28
+ * Client service for managing OAuth/OIDC clients
29
+ */
30
+ Clients;
31
+ /**
32
+ * Role service for managing roles
33
+ */
34
+ Roles;
35
+ /**
36
+ * Group service for managing groups
37
+ */
38
+ Groups;
39
+ /**
40
+ * Identity provider service
41
+ */
42
+ IdentityProviders;
43
+ /**
44
+ * Authentication service for managing auth flows
45
+ */
46
+ Authentication;
47
+ /**
48
+ * Federated identity service
49
+ */
50
+ FederatedIdentities;
51
+ /**
52
+ * Event service for querying admin and access events
53
+ */
54
+ Events;
55
+ /**
56
+ * Internal Keycloak admin client
57
+ */
58
+ adminClient;
59
+ /**
60
+ * Client configuration
61
+ */
62
+ config;
63
+ /**
64
+ * Create a new Keycloak client instance
65
+ */
66
+ constructor(config, grantedScopes) {
67
+ this.config = {
68
+ realmName: 'master',
69
+ timeout: 30000,
70
+ ...config,
71
+ };
72
+ // Generate client identifiers
73
+ this.ClientUUID = randomUUID();
74
+ this.ClientID = this.ClientUUID.slice(-CLIENT_ID_SHORT_LENGTH);
75
+ // Initialize admin client
76
+ this.adminClient = new KcAdminClient({
77
+ baseUrl: this.config.baseUrl,
78
+ ...(this.config.realmName && { realmName: this.config.realmName }),
79
+ });
80
+ // Initialize services
81
+ const { logger, retry } = this.config;
82
+ this.Realms = new RealmService(this.adminClient, grantedScopes, logger, retry);
83
+ this.Users = new UserService(this.adminClient, grantedScopes, logger, retry);
84
+ this.Clients = new ClientService(this.adminClient, grantedScopes, logger, retry);
85
+ this.Roles = new RoleService(this.adminClient, grantedScopes, logger, retry);
86
+ this.Groups = new GroupService(this.adminClient, grantedScopes, logger, retry);
87
+ this.IdentityProviders = new IdentityProviderService(this.adminClient, grantedScopes, logger, retry);
88
+ this.Authentication = new AuthenticationService(this.adminClient, grantedScopes, logger, retry);
89
+ this.FederatedIdentities = new FederatedIdentityService(this.adminClient, grantedScopes, logger, retry);
90
+ this.Events = new EventService(this.adminClient, grantedScopes, logger, retry);
91
+ if (this.config.logger) {
92
+ this.config.logger.info('KeycloakClient initialized', {
93
+ clientId: this.ClientID,
94
+ baseUrl: this.config.baseUrl,
95
+ realm: this.config.realmName,
96
+ });
97
+ }
98
+ }
99
+ /**
100
+ * Authenticate with Keycloak admin API
101
+ * This must be called before making API requests
102
+ */
103
+ async authenticate() {
104
+ try {
105
+ if (isPasswordCredentials(this.config.credentials)) {
106
+ await this.adminClient.auth({
107
+ username: this.config.credentials.username,
108
+ password: this.config.credentials.password,
109
+ grantType: 'password',
110
+ clientId: 'admin-cli',
111
+ });
112
+ if (this.config.logger) {
113
+ this.config.logger.info('Authenticated with Keycloak using password credentials', {
114
+ username: this.config.credentials.username,
115
+ });
116
+ }
117
+ }
118
+ else if (isClientCredentials(this.config.credentials)) {
119
+ await this.adminClient.auth({
120
+ grantType: 'client_credentials',
121
+ clientId: this.config.credentials.clientId,
122
+ clientSecret: this.config.credentials.clientSecret,
123
+ });
124
+ if (this.config.logger) {
125
+ this.config.logger.info('Authenticated with Keycloak using client credentials', {
126
+ clientId: this.config.credentials.clientId,
127
+ });
128
+ }
129
+ }
130
+ }
131
+ catch (error) {
132
+ if (this.config.logger) {
133
+ this.config.logger.error('Failed to authenticate with Keycloak', { error });
134
+ }
135
+ throw error;
136
+ }
137
+ }
138
+ /**
139
+ * Check if the client is authenticated
140
+ */
141
+ isAuthenticated() {
142
+ return this.adminClient.accessToken !== undefined;
143
+ }
144
+ /**
145
+ * Get the current access token
146
+ */
147
+ getAccessToken() {
148
+ return this.adminClient.accessToken;
149
+ }
150
+ /**
151
+ * Set the access token manually (for use with external auth)
152
+ */
153
+ setAccessToken(token) {
154
+ this.adminClient.setAccessToken(token);
155
+ }
156
+ }
157
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/admin/client/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { BaseApplicationError } from '@pawells/nestjs-shared/common';
2
+ /**
3
+ * Base error class for Keycloak client errors
4
+ */
5
+ export declare class KeycloakClientError extends BaseApplicationError {
6
+ readonly cause?: Error | undefined;
7
+ readonly response?: unknown;
8
+ constructor(message: string, statusCode?: number, response?: unknown, cause?: Error | undefined);
9
+ }
10
+ /**
11
+ * Authentication error - failed to authenticate with Keycloak
12
+ */
13
+ export declare class AuthenticationError extends KeycloakClientError {
14
+ constructor(message: string, statusCode?: number, response?: unknown);
15
+ }
16
+ /**
17
+ * Authorization error - authenticated but not authorized for the operation
18
+ */
19
+ export declare class AuthorizationError extends KeycloakClientError {
20
+ constructor(message: string, statusCode?: number, response?: unknown);
21
+ }
22
+ /**
23
+ * Resource not found error
24
+ */
25
+ export declare class NotFoundError extends KeycloakClientError {
26
+ constructor(message: string, response?: unknown);
27
+ }
28
+ /**
29
+ * Validation error - invalid request data
30
+ */
31
+ export declare class ValidationError extends KeycloakClientError {
32
+ constructor(message: string, response?: unknown);
33
+ }
34
+ /**
35
+ * Rate limit error - too many requests
36
+ */
37
+ export declare class RateLimitError extends KeycloakClientError {
38
+ constructor(message: string, response?: unknown);
39
+ }
40
+ /**
41
+ * Timeout error - request took too long
42
+ */
43
+ export declare class TimeoutError extends KeycloakClientError {
44
+ constructor(message: string);
45
+ }
46
+ /**
47
+ * Network error - connection failed
48
+ */
49
+ export declare class NetworkError extends KeycloakClientError {
50
+ constructor(message: string, cause?: Error);
51
+ }
52
+ /**
53
+ * Conflict error - resource already exists or conflicting operation
54
+ */
55
+ export declare class ConflictError extends KeycloakClientError {
56
+ constructor(message: string, response?: unknown);
57
+ }
58
+ //# sourceMappingURL=base-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-error.d.ts","sourceRoot":"","sources":["../../../../src/admin/client/errors/base-error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAWrE;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,oBAAoB;aAOlC,KAAK,CAAC,EAAE,KAAK;IANvC,SAAgB,QAAQ,CAAC,EAAE,OAAO,CAAC;gBAGlC,OAAO,EAAE,MAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,OAAO,EACO,KAAK,CAAC,EAAE,KAAK,YAAA;CAWvC;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,mBAAmB;gBAC/C,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO;CAIpE;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,mBAAmB;gBAC9C,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO;CAIpE;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,mBAAmB;gBACzC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO;CAI/C;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,mBAAmB;gBAC3C,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO;CAI/C;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,mBAAmB;gBAC1C,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO;CAI/C;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,mBAAmB;gBACxC,OAAO,EAAE,MAAM;CAI3B;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,mBAAmB;gBACxC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;CAI1C;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,mBAAmB;gBACzC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO;CAI/C"}
@@ -0,0 +1,100 @@
1
+ import { BaseApplicationError } from '@pawells/nestjs-shared/common';
2
+ const HTTP_STATUS_BAD_REQUEST = 400;
3
+ const HTTP_STATUS_UNAUTHORIZED = 401;
4
+ const HTTP_STATUS_FORBIDDEN = 403;
5
+ const HTTP_STATUS_NOT_FOUND = 404;
6
+ const HTTP_STATUS_REQUEST_TIMEOUT = 408;
7
+ const HTTP_STATUS_CONFLICT = 409;
8
+ const HTTP_STATUS_RATE_LIMIT = 429;
9
+ const HTTP_STATUS_INTERNAL_SERVER_ERROR = 500;
10
+ /**
11
+ * Base error class for Keycloak client errors
12
+ */
13
+ export class KeycloakClientError extends BaseApplicationError {
14
+ cause;
15
+ response;
16
+ constructor(message, statusCode, response, cause) {
17
+ const errorCode = `KEYCLOAK_${statusCode ? 'HTTP_' + statusCode : 'CLIENT_ERROR'}`;
18
+ super(message, {
19
+ code: errorCode,
20
+ statusCode: statusCode ?? HTTP_STATUS_INTERNAL_SERVER_ERROR,
21
+ context: { response, cause },
22
+ });
23
+ this.cause = cause;
24
+ this.name = 'KeycloakClientError';
25
+ this.response = response;
26
+ }
27
+ }
28
+ /**
29
+ * Authentication error - failed to authenticate with Keycloak
30
+ */
31
+ export class AuthenticationError extends KeycloakClientError {
32
+ constructor(message, statusCode, response) {
33
+ super(message, statusCode ?? HTTP_STATUS_UNAUTHORIZED, response);
34
+ this.name = 'AuthenticationError';
35
+ }
36
+ }
37
+ /**
38
+ * Authorization error - authenticated but not authorized for the operation
39
+ */
40
+ export class AuthorizationError extends KeycloakClientError {
41
+ constructor(message, statusCode, response) {
42
+ super(message, statusCode ?? HTTP_STATUS_FORBIDDEN, response);
43
+ this.name = 'AuthorizationError';
44
+ }
45
+ }
46
+ /**
47
+ * Resource not found error
48
+ */
49
+ export class NotFoundError extends KeycloakClientError {
50
+ constructor(message, response) {
51
+ super(message, HTTP_STATUS_NOT_FOUND, response);
52
+ this.name = 'NotFoundError';
53
+ }
54
+ }
55
+ /**
56
+ * Validation error - invalid request data
57
+ */
58
+ export class ValidationError extends KeycloakClientError {
59
+ constructor(message, response) {
60
+ super(message, HTTP_STATUS_BAD_REQUEST, response);
61
+ this.name = 'ValidationError';
62
+ }
63
+ }
64
+ /**
65
+ * Rate limit error - too many requests
66
+ */
67
+ export class RateLimitError extends KeycloakClientError {
68
+ constructor(message, response) {
69
+ super(message, HTTP_STATUS_RATE_LIMIT, response);
70
+ this.name = 'RateLimitError';
71
+ }
72
+ }
73
+ /**
74
+ * Timeout error - request took too long
75
+ */
76
+ export class TimeoutError extends KeycloakClientError {
77
+ constructor(message) {
78
+ super(message, HTTP_STATUS_REQUEST_TIMEOUT);
79
+ this.name = 'TimeoutError';
80
+ }
81
+ }
82
+ /**
83
+ * Network error - connection failed
84
+ */
85
+ export class NetworkError extends KeycloakClientError {
86
+ constructor(message, cause) {
87
+ super(message, undefined, undefined, cause);
88
+ this.name = 'NetworkError';
89
+ }
90
+ }
91
+ /**
92
+ * Conflict error - resource already exists or conflicting operation
93
+ */
94
+ export class ConflictError extends KeycloakClientError {
95
+ constructor(message, response) {
96
+ super(message, HTTP_STATUS_CONFLICT, response);
97
+ this.name = 'ConflictError';
98
+ }
99
+ }
100
+ //# sourceMappingURL=base-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-error.js","sourceRoot":"","sources":["../../../../src/admin/client/errors/base-error.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './base-error.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/admin/client/errors/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './base-error.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/admin/client/errors/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './client.js';
2
+ export * from './services/index.js';
3
+ export * from './types/index.js';
4
+ export * from './errors/index.js';
5
+ export * from './utils/index.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/admin/client/index.ts"],"names":[],"mappings":"AACA,cAAc,aAAa,CAAC;AAG5B,cAAc,qBAAqB,CAAC;AAGpC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,11 @@
1
+ // Main client
2
+ export * from './client.js';
3
+ // Services
4
+ export * from './services/index.js';
5
+ // Types
6
+ export * from './types/index.js';
7
+ // Errors
8
+ export * from './errors/index.js';
9
+ // Utils
10
+ export * from './utils/index.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/admin/client/index.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,cAAc,aAAa,CAAC;AAE5B,WAAW;AACX,cAAc,qBAAqB,CAAC;AAEpC,QAAQ;AACR,cAAc,kBAAkB,CAAC;AAEjC,SAAS;AACT,cAAc,mBAAmB,CAAC;AAElC,QAAQ;AACR,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,54 @@
1
+ import type { AuthenticationFlowRepresentation, AuthenticationExecutionInfoRepresentation } from '../types/index.js';
2
+ import { BaseService } from './base-service.js';
3
+ /**
4
+ * Service for managing Keycloak authentication flows.
5
+ *
6
+ * Provides methods for querying and managing authentication flow configurations. Authentication flows
7
+ * define the steps users must complete to authenticate (e.g., username/password, MFA, social login).
8
+ * Flows can be customized by adding, removing, or reordering authenticators.
9
+ * Requires `authentication:read` and `authentication:write` scopes depending on the operation.
10
+ *
11
+ * Part of {@link KeycloakAdminService.authentication | KeycloakAdminService#authentication}.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const flows = await keycloak.authentication.getFlows('my-realm');
16
+ * const flow = await keycloak.authentication.getFlow('my-realm', 'flow-id');
17
+ * await keycloak.authentication.createFlow('my-realm', {
18
+ * alias: 'my-flow',
19
+ * description: 'Custom auth flow',
20
+ * builtIn: false,
21
+ * providerId: 'basic-flow',
22
+ * topLevel: true,
23
+ * });
24
+ * ```
25
+ */
26
+ export declare class AuthenticationService extends BaseService {
27
+ /**
28
+ * Get all authentication flows
29
+ */
30
+ getFlows(realm: string): Promise<AuthenticationFlowRepresentation[]>;
31
+ /**
32
+ * Get a specific authentication flow
33
+ */
34
+ getFlow(realm: string, flowId: string): Promise<AuthenticationFlowRepresentation>;
35
+ /**
36
+ * Create an authentication flow
37
+ */
38
+ createFlow(realm: string, flow: AuthenticationFlowRepresentation): Promise<void>;
39
+ /**
40
+ * Delete an authentication flow
41
+ */
42
+ deleteFlow(realm: string, flowId: string): Promise<void>;
43
+ /**
44
+ * Get executions for a flow
45
+ */
46
+ getExecutions(realm: string, flowAlias: string): Promise<AuthenticationExecutionInfoRepresentation[]>;
47
+ /**
48
+ * Add an execution to a flow
49
+ */
50
+ createExecution(realm: string, flowAlias: string, execution: {
51
+ provider: string;
52
+ }): Promise<void>;
53
+ }
54
+ //# sourceMappingURL=authentication.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication.service.d.ts","sourceRoot":"","sources":["../../../../src/admin/client/services/authentication.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,gCAAgC,EAChC,yCAAyC,EACzC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,qBAAsB,SAAQ,WAAW;IACrD;;OAEG;IACU,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gCAAgC,EAAE,CAAC;IAWjF;;OAEG;IACU,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gCAAgC,CAAC;IAW9F;;OAEG;IACU,UAAU,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,gCAAgC,GACpC,OAAO,CAAC,IAAI,CAAC;IAWhB;;OAEG;IACU,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrE;;OAEG;IACU,aAAa,CACzB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GACf,OAAO,CAAC,yCAAyC,EAAE,CAAC;IAWvD;;OAEG;IACU,eAAe,CAC3B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,GAC7B,OAAO,CAAC,IAAI,CAAC;CAahB"}
@@ -0,0 +1,99 @@
1
+ import { BaseService } from './base-service.js';
2
+ /**
3
+ * Service for managing Keycloak authentication flows.
4
+ *
5
+ * Provides methods for querying and managing authentication flow configurations. Authentication flows
6
+ * define the steps users must complete to authenticate (e.g., username/password, MFA, social login).
7
+ * Flows can be customized by adding, removing, or reordering authenticators.
8
+ * Requires `authentication:read` and `authentication:write` scopes depending on the operation.
9
+ *
10
+ * Part of {@link KeycloakAdminService.authentication | KeycloakAdminService#authentication}.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const flows = await keycloak.authentication.getFlows('my-realm');
15
+ * const flow = await keycloak.authentication.getFlow('my-realm', 'flow-id');
16
+ * await keycloak.authentication.createFlow('my-realm', {
17
+ * alias: 'my-flow',
18
+ * description: 'Custom auth flow',
19
+ * builtIn: false,
20
+ * providerId: 'basic-flow',
21
+ * topLevel: true,
22
+ * });
23
+ * ```
24
+ */
25
+ export class AuthenticationService extends BaseService {
26
+ /**
27
+ * Get all authentication flows
28
+ */
29
+ async getFlows(realm) {
30
+ this.requireScope('authentication:read');
31
+ try {
32
+ return (await this.withRetry(() => this.adminClient.authenticationManagement.getFlows({ realm })));
33
+ }
34
+ catch (error) {
35
+ return this.handleError(error);
36
+ }
37
+ }
38
+ /**
39
+ * Get a specific authentication flow
40
+ */
41
+ async getFlow(realm, flowId) {
42
+ this.requireScope('authentication:read');
43
+ try {
44
+ return (await this.withRetry(() => this.adminClient.authenticationManagement.getFlow({ realm, flowId })));
45
+ }
46
+ catch (error) {
47
+ return this.handleError(error);
48
+ }
49
+ }
50
+ /**
51
+ * Create an authentication flow
52
+ */
53
+ async createFlow(realm, flow) {
54
+ this.requireScope('authentication:write');
55
+ try {
56
+ await this.withRetry(() => this.adminClient.authenticationManagement.createFlow({ ...flow, realm }));
57
+ }
58
+ catch (error) {
59
+ this.handleError(error);
60
+ }
61
+ }
62
+ /**
63
+ * Delete an authentication flow
64
+ */
65
+ async deleteFlow(realm, flowId) {
66
+ this.requireScope('authentication:write');
67
+ try {
68
+ await this.withRetry(() => this.adminClient.authenticationManagement.deleteFlow({ realm, flowId }));
69
+ }
70
+ catch (error) {
71
+ this.handleError(error);
72
+ }
73
+ }
74
+ /**
75
+ * Get executions for a flow
76
+ */
77
+ async getExecutions(realm, flowAlias) {
78
+ this.requireScope('authentication:read');
79
+ try {
80
+ return (await this.withRetry(() => this.adminClient.authenticationManagement.getExecutions({ realm, flow: flowAlias })));
81
+ }
82
+ catch (error) {
83
+ return this.handleError(error);
84
+ }
85
+ }
86
+ /**
87
+ * Add an execution to a flow
88
+ */
89
+ async createExecution(realm, flowAlias, execution) {
90
+ this.requireScope('authentication:write');
91
+ try {
92
+ await this.withRetry(() => this.adminClient.authenticationManagement.addExecution({ realm, flow: flowAlias }, execution));
93
+ }
94
+ catch (error) {
95
+ this.handleError(error);
96
+ }
97
+ }
98
+ }
99
+ //# sourceMappingURL=authentication.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentication.service.js","sourceRoot":"","sources":["../../../../src/admin/client/services/authentication.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import type KcAdminClient from '@keycloak/keycloak-admin-client';
2
+ import type { Logger } from '@pawells/logger';
3
+ import type { RetryConfig } from '../utils/index.js';
4
+ import type { KeycloakAdminScope } from '../../permissions/keycloak-admin.permissions.js';
5
+ /**
6
+ * Base service class for Keycloak admin API client services.
7
+ *
8
+ * Provides shared functionality for all admin sub-services: error handling with classified
9
+ * exceptions, retry logic for transient failures, and scope-based access control.
10
+ * All Keycloak admin operations (user, role, client, group management, etc.) inherit from this class.
11
+ *
12
+ * Subclasses must call {@link requireScope} before API operations to enforce permission control.
13
+ *
14
+ * @abstract
15
+ */
16
+ export declare abstract class BaseService {
17
+ private readonly logger;
18
+ protected adminClient: KcAdminClient;
19
+ protected grantedScopes: ReadonlySet<KeycloakAdminScope>;
20
+ protected loggerConfig?: Logger;
21
+ protected retryConfig?: RetryConfig;
22
+ constructor(adminClient: KcAdminClient, grantedScopes: ReadonlySet<KeycloakAdminScope>, loggerConfig?: Logger, retryConfig?: RetryConfig);
23
+ /**
24
+ * Asserts that the given scope is granted. Throws {@link KeycloakAdminScopeError}
25
+ * synchronously if not, before any network request is made.
26
+ * All mutation operations ({@link KeycloakAdminScope} ending in `:write`) are
27
+ * audit-logged at INFO level when the check passes.
28
+ */
29
+ protected requireScope(scope: KeycloakAdminScope): void;
30
+ /**
31
+ * Execute a function with retry logic
32
+ */
33
+ protected withRetry<T>(fn: () => Promise<T>, options?: RetryConfig): Promise<T>;
34
+ /**
35
+ * Handle and transform errors from Keycloak admin client
36
+ */
37
+ protected handleError(error: unknown): never;
38
+ }
39
+ //# sourceMappingURL=base-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-service.d.ts","sourceRoot":"","sources":["../../../../src/admin/client/services/base-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,aAAa,MAAM,iCAAiC,CAAC;AACjE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAWrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AAS1F;;;;;;;;;;GAUG;AACH,8BAAsB,WAAW;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IAEnC,SAAS,CAAC,WAAW,EAAE,aAAa,CAAC;IAErC,SAAS,CAAC,aAAa,EAAE,WAAW,CAAC,kBAAkB,CAAC,CAAC;IAEzD,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEhC,SAAS,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;gBAGnC,WAAW,EAAE,aAAa,EAC1B,aAAa,EAAE,WAAW,CAAC,kBAAkB,CAAC,EAC9C,YAAY,CAAC,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,WAAW;IAS1B;;;;;OAKG;IACH,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE,kBAAkB,GAAG,IAAI;IAWvD;;OAEG;cACa,SAAS,CAAC,CAAC,EAC1B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,CAAC,CAAC;IAWb;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK;CAyD5C"}