@pawells/nestjs-auth 1.0.0-dev.3052c75

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,176 @@
1
+ /**
2
+ * Query Parameters for Admin Events
3
+ *
4
+ * Filters and pagination options for querying administrative events.
5
+ */
6
+ export interface AdminEventQuery {
7
+ /**
8
+ * Filter by operation types to include
9
+ */
10
+ operationTypes?: ('CREATE' | 'UPDATE' | 'DELETE' | 'ACTION')[];
11
+ /**
12
+ * Filter by resource types affected
13
+ */
14
+ resourceTypes?: string[];
15
+ /**
16
+ * Filter by resource path (e.g., 'users/123', 'clients/abc')
17
+ */
18
+ resourcePath?: string;
19
+ /**
20
+ * Start of date range (inclusive)
21
+ */
22
+ dateFrom?: Date;
23
+ /**
24
+ * End of date range (inclusive)
25
+ */
26
+ dateTo?: Date;
27
+ /**
28
+ * Offset for pagination (start index)
29
+ */
30
+ first?: number;
31
+ /**
32
+ * Maximum number of results to return.
33
+ * Keycloak caps this at 100; larger values are silently truncated.
34
+ */
35
+ max?: number;
36
+ }
37
+ /**
38
+ * Query Parameters for Access Events
39
+ *
40
+ * Filters and pagination options for querying authentication and authorization events.
41
+ */
42
+ export interface AccessEventQuery {
43
+ /**
44
+ * Filter by event types to include (e.g., ['LOGIN', 'LOGOUT', 'LOGIN_ERROR'])
45
+ */
46
+ type?: string[];
47
+ /**
48
+ * Filter by client ID making the request
49
+ */
50
+ client?: string;
51
+ /**
52
+ * Filter by user ID involved in the event
53
+ */
54
+ user?: string;
55
+ /**
56
+ * Start of date range (inclusive)
57
+ */
58
+ dateFrom?: Date;
59
+ /**
60
+ * End of date range (inclusive)
61
+ */
62
+ dateTo?: Date;
63
+ /**
64
+ * Offset for pagination (start index)
65
+ */
66
+ first?: number;
67
+ /**
68
+ * Maximum number of results to return.
69
+ * Keycloak caps this at 100; larger values are silently truncated.
70
+ */
71
+ max?: number;
72
+ }
73
+ /**
74
+ * Keycloak Admin Event Representation
75
+ *
76
+ * Represents a single administrative event (user creation, role assignment, client updates, etc.)
77
+ * in a Keycloak realm.
78
+ */
79
+ export interface KeycloakAdminEvent {
80
+ /**
81
+ * Event timestamp (milliseconds since epoch)
82
+ */
83
+ time: number;
84
+ /**
85
+ * ID of the realm where the event occurred
86
+ */
87
+ realmId: string;
88
+ /**
89
+ * Type of operation: CREATE, UPDATE, DELETE, or ACTION
90
+ */
91
+ operationType: 'CREATE' | 'UPDATE' | 'DELETE' | 'ACTION';
92
+ /**
93
+ * Type of resource affected (e.g., USER, CLIENT, ROLE, GROUP, etc.)
94
+ */
95
+ resourceType: string;
96
+ /**
97
+ * Path to the resource (e.g., 'users/user-id' or 'clients/client-id')
98
+ */
99
+ resourcePath: string;
100
+ /**
101
+ * Double-encoded JSON string containing the full representation of the created or updated resource.
102
+ * Present only on CREATE and UPDATE operations.
103
+ *
104
+ * **Important**: Must be decoded twice:
105
+ * ```typescript
106
+ * const decoded = JSON.parse(JSON.parse(event.representation));
107
+ * ```
108
+ */
109
+ representation?: string;
110
+ /**
111
+ * Authentication details of who performed the operation
112
+ */
113
+ authDetails?: {
114
+ /**
115
+ * Realm where the admin authenticated
116
+ */
117
+ realmId: string;
118
+ /**
119
+ * Client ID of the admin application
120
+ */
121
+ clientId: string;
122
+ /**
123
+ * User ID of the admin who performed the operation
124
+ */
125
+ userId: string;
126
+ /**
127
+ * IP address from which the operation was performed
128
+ */
129
+ ipAddress: string;
130
+ };
131
+ }
132
+ /**
133
+ * Keycloak Access Event Representation
134
+ *
135
+ * Represents a single authentication or authorization event (login, logout, permission check, etc.)
136
+ * in a Keycloak realm.
137
+ */
138
+ export interface KeycloakAccessEvent {
139
+ /**
140
+ * Event timestamp (milliseconds since epoch)
141
+ */
142
+ time: number;
143
+ /**
144
+ * ID of the realm where the event occurred
145
+ */
146
+ realmId: string;
147
+ /**
148
+ * Type of event (e.g., LOGIN, LOGOUT, LOGIN_ERROR, CODE_TO_TOKEN, etc.)
149
+ */
150
+ type: string;
151
+ /**
152
+ * Keycloak session ID, if available
153
+ */
154
+ sessionId?: string;
155
+ /**
156
+ * Keycloak user ID, if the event is tied to a user
157
+ */
158
+ userId?: string;
159
+ /**
160
+ * IP address from which the request originated
161
+ */
162
+ ipAddress?: string;
163
+ /**
164
+ * Client ID making the request
165
+ */
166
+ clientId?: string;
167
+ /**
168
+ * Additional event-specific details (keys and values depend on event type)
169
+ */
170
+ details?: Record<string, string>;
171
+ /**
172
+ * Error message, present only if the event represents a failure (e.g., LOGIN_ERROR)
173
+ */
174
+ error?: string;
175
+ }
176
+ //# sourceMappingURL=event.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.types.d.ts","sourceRoot":"","sources":["../../../../src/admin/client/types/event.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC/B;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAAE,CAAC;IAE/D;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IAEzB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,EAAE,IAAI,CAAC;IAEhB;;OAEG;IACH,MAAM,CAAC,EAAE,IAAI,CAAC;IAEd;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAChC;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAEhB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,QAAQ,CAAC,EAAE,IAAI,CAAC;IAEhB;;OAEG;IACH,MAAM,CAAC,EAAE,IAAI,CAAC;IAEd;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IAClC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,aAAa,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAEzD;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;;;;;;OAQG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,WAAW,CAAC,EAAE;QACb;;WAEG;QACH,OAAO,EAAE,MAAM,CAAC;QAEhB;;WAEG;QACH,QAAQ,EAAE,MAAM,CAAC;QAEjB;;WAEG;QACH,MAAM,EAAE,MAAM,CAAC;QAEf;;WAEG;QACH,SAAS,EAAE,MAAM,CAAC;KAClB,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IACnC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=event.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.types.js","sourceRoot":"","sources":["../../../../src/admin/client/types/event.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export * from './config.types.js';
2
+ export * from './keycloak.types.js';
3
+ export * from './event.types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/admin/client/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './config.types.js';
2
+ export * from './keycloak.types.js';
3
+ export * from './event.types.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/admin/client/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Keycloak realm representation
3
+ */
4
+ export interface RealmRepresentation {
5
+ id?: string;
6
+ realm?: string;
7
+ displayName?: string;
8
+ enabled?: boolean;
9
+ sslRequired?: string;
10
+ registrationAllowed?: boolean;
11
+ loginWithEmailAllowed?: boolean;
12
+ duplicateEmailsAllowed?: boolean;
13
+ resetPasswordAllowed?: boolean;
14
+ editUsernameAllowed?: boolean;
15
+ bruteForceProtected?: boolean;
16
+ [key: string]: unknown;
17
+ }
18
+ /**
19
+ * Keycloak user representation
20
+ */
21
+ export interface UserRepresentation {
22
+ id?: string;
23
+ username?: string;
24
+ email?: string;
25
+ firstName?: string;
26
+ lastName?: string;
27
+ enabled?: boolean;
28
+ emailVerified?: boolean;
29
+ attributes?: Record<string, string[]>;
30
+ requiredActions?: string[];
31
+ credentials?: CredentialRepresentation[];
32
+ groups?: string[];
33
+ [key: string]: unknown;
34
+ }
35
+ /**
36
+ * Keycloak credential representation
37
+ */
38
+ export interface CredentialRepresentation {
39
+ type?: string;
40
+ value?: string;
41
+ temporary?: boolean;
42
+ [key: string]: unknown;
43
+ }
44
+ /**
45
+ * Keycloak client representation
46
+ */
47
+ export interface ClientRepresentation {
48
+ id?: string;
49
+ clientId?: string;
50
+ name?: string;
51
+ description?: string;
52
+ enabled?: boolean;
53
+ clientAuthenticatorType?: string;
54
+ secret?: string;
55
+ publicClient?: boolean;
56
+ protocol?: string;
57
+ redirectUris?: string[];
58
+ webOrigins?: string[];
59
+ directAccessGrantsEnabled?: boolean;
60
+ serviceAccountsEnabled?: boolean;
61
+ standardFlowEnabled?: boolean;
62
+ implicitFlowEnabled?: boolean;
63
+ bearerOnly?: boolean;
64
+ consentRequired?: boolean;
65
+ attributes?: Record<string, string>;
66
+ [key: string]: unknown;
67
+ }
68
+ /**
69
+ * Keycloak role representation
70
+ */
71
+ export interface RoleRepresentation {
72
+ id?: string;
73
+ name?: string;
74
+ description?: string;
75
+ composite?: boolean;
76
+ clientRole?: boolean;
77
+ containerId?: string;
78
+ attributes?: Record<string, string[]>;
79
+ [key: string]: unknown;
80
+ }
81
+ /**
82
+ * Keycloak group representation
83
+ */
84
+ export interface GroupRepresentation {
85
+ id?: string;
86
+ name?: string;
87
+ path?: string;
88
+ attributes?: Record<string, string[]>;
89
+ realmRoles?: string[];
90
+ clientRoles?: Record<string, string[]>;
91
+ subGroups?: GroupRepresentation[];
92
+ [key: string]: unknown;
93
+ }
94
+ /**
95
+ * Keycloak identity provider representation
96
+ */
97
+ export interface IdentityProviderRepresentation {
98
+ alias?: string;
99
+ displayName?: string;
100
+ providerId?: string;
101
+ enabled?: boolean;
102
+ trustEmail?: boolean;
103
+ storeToken?: boolean;
104
+ addReadTokenRoleOnCreate?: boolean;
105
+ authenticateByDefault?: boolean;
106
+ linkOnly?: boolean;
107
+ firstBrokerLoginFlowAlias?: string;
108
+ config?: Record<string, string>;
109
+ [key: string]: unknown;
110
+ }
111
+ /**
112
+ * Keycloak authentication flow representation
113
+ */
114
+ export interface AuthenticationFlowRepresentation {
115
+ id?: string;
116
+ alias?: string;
117
+ description?: string;
118
+ providerId?: string;
119
+ topLevel?: boolean;
120
+ builtIn?: boolean;
121
+ authenticationExecutions?: AuthenticationExecutionInfoRepresentation[];
122
+ [key: string]: unknown;
123
+ }
124
+ /**
125
+ * Keycloak authentication execution representation
126
+ */
127
+ export interface AuthenticationExecutionInfoRepresentation {
128
+ id?: string;
129
+ requirement?: string;
130
+ displayName?: string;
131
+ alias?: string;
132
+ description?: string;
133
+ requirementChoices?: string[];
134
+ configurable?: boolean;
135
+ providerId?: string;
136
+ level?: number;
137
+ index?: number;
138
+ [key: string]: unknown;
139
+ }
140
+ /**
141
+ * Keycloak protocol mapper representation
142
+ */
143
+ export interface ProtocolMapperRepresentation {
144
+ id?: string;
145
+ name?: string;
146
+ protocol?: string;
147
+ protocolMapper?: string;
148
+ consentRequired?: boolean;
149
+ config?: Record<string, string>;
150
+ [key: string]: unknown;
151
+ }
152
+ /**
153
+ * User query parameters
154
+ */
155
+ export interface UserQuery {
156
+ briefRepresentation?: boolean;
157
+ email?: string;
158
+ emailVerified?: boolean;
159
+ enabled?: boolean;
160
+ exact?: boolean;
161
+ first?: number;
162
+ firstName?: string;
163
+ lastName?: string;
164
+ max?: number;
165
+ search?: string;
166
+ username?: string;
167
+ [key: string]: unknown;
168
+ }
169
+ //# sourceMappingURL=keycloak.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keycloak.types.d.ts","sourceRoot":"","sources":["../../../../src/admin/client/types/keycloak.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=keycloak.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keycloak.types.js","sourceRoot":"","sources":["../../../../src/admin/client/types/keycloak.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from './retry.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/admin/client/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './retry.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/admin/client/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { Logger } from '@pawells/logger';
2
+ /**
3
+ * Retry configuration options
4
+ */
5
+ export interface RetryConfig {
6
+ /**
7
+ * Maximum number of retry attempts
8
+ * @default 3
9
+ */
10
+ maxRetries?: number;
11
+ /**
12
+ * Initial delay in milliseconds before first retry
13
+ * @default 1000
14
+ */
15
+ initialDelay?: number;
16
+ /**
17
+ * Maximum delay in milliseconds between retries
18
+ * @default 30000
19
+ */
20
+ maxDelay?: number;
21
+ /**
22
+ * Backoff multiplier for exponential backoff
23
+ * @default 2
24
+ */
25
+ backoffMultiplier?: number;
26
+ /**
27
+ * HTTP status codes that should trigger a retry
28
+ * @default [408, 429, 500, 502, 503, 504]
29
+ */
30
+ retryableStatuses?: number[];
31
+ /**
32
+ * Logger instance for retry logging
33
+ */
34
+ logger?: Logger;
35
+ }
36
+ /**
37
+ * Execute a function with retry logic
38
+ */
39
+ export declare function withRetry<T>(fn: () => Promise<T>, config?: RetryConfig): Promise<T>;
40
+ //# sourceMappingURL=retry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../../../src/admin/client/utils/retry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAW9C;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE7B;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AA8CD;;GAEG;AACH,wBAAsB,SAAS,CAAC,CAAC,EAChC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,MAAM,GAAE,WAAgB,GACtB,OAAO,CAAC,CAAC,CAAC,CA0CZ"}
@@ -0,0 +1,72 @@
1
+ import { TimeoutError, RateLimitError, NetworkError } from '../errors/index.js';
2
+ const HTTP_STATUS_TIMEOUT = 408;
3
+ const HTTP_STATUS_RATE_LIMIT = 429;
4
+ const HTTP_STATUS_INTERNAL_ERROR = 500;
5
+ const HTTP_STATUS_BAD_GATEWAY = 502;
6
+ const HTTP_STATUS_SERVICE_UNAVAILABLE = 503;
7
+ const HTTP_STATUS_GATEWAY_TIMEOUT = 504;
8
+ const JITTER_FACTOR = 0.2;
9
+ /**
10
+ * Default retry configuration
11
+ */
12
+ const DEFAULT_RETRY_CONFIG = {
13
+ maxRetries: 3,
14
+ initialDelay: 1000,
15
+ maxDelay: 30000,
16
+ backoffMultiplier: 2,
17
+ retryableStatuses: [HTTP_STATUS_TIMEOUT, HTTP_STATUS_RATE_LIMIT, HTTP_STATUS_INTERNAL_ERROR, HTTP_STATUS_BAD_GATEWAY, HTTP_STATUS_SERVICE_UNAVAILABLE, HTTP_STATUS_GATEWAY_TIMEOUT],
18
+ };
19
+ /**
20
+ * Determine if an error is retryable
21
+ */
22
+ function isRetryableError(error, retryableStatuses) {
23
+ if (error instanceof TimeoutError || error instanceof RateLimitError || error instanceof NetworkError) {
24
+ return true;
25
+ }
26
+ if (error && typeof error === 'object' && 'statusCode' in error) {
27
+ const { statusCode } = error;
28
+ return statusCode !== undefined && retryableStatuses.includes(statusCode);
29
+ }
30
+ return false;
31
+ }
32
+ /**
33
+ * Calculate delay with exponential backoff and jitter
34
+ */
35
+ function calculateDelay(attempt, initialDelay, maxDelay, backoffMultiplier) {
36
+ const exponentialDelay = initialDelay * Math.pow(backoffMultiplier, attempt);
37
+ const delayWithCap = Math.min(exponentialDelay, maxDelay);
38
+ // Add jitter (±20%)
39
+ const jitter = delayWithCap * JITTER_FACTOR * (Math.random() * 2 - 1);
40
+ return Math.floor(delayWithCap + jitter);
41
+ }
42
+ /**
43
+ * Execute a function with retry logic
44
+ */
45
+ export async function withRetry(fn, config = {}) {
46
+ const { maxRetries, initialDelay, maxDelay, backoffMultiplier, retryableStatuses, } = { ...DEFAULT_RETRY_CONFIG, ...config };
47
+ let lastError;
48
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
49
+ try {
50
+ return await fn();
51
+ }
52
+ catch (error) {
53
+ lastError = error instanceof Error ? error : new Error(String(error));
54
+ // Don't retry on last attempt
55
+ if (attempt === maxRetries) {
56
+ break;
57
+ }
58
+ // Check if error is retryable
59
+ if (!isRetryableError(error, retryableStatuses)) {
60
+ throw error;
61
+ }
62
+ // Calculate delay and wait
63
+ const delay = calculateDelay(attempt, initialDelay, maxDelay, backoffMultiplier);
64
+ if (config.logger) {
65
+ config.logger.warn(`Retrying after ${delay}ms (attempt ${attempt + 1}/${maxRetries})`, { error: lastError.message });
66
+ }
67
+ await new Promise(resolve => setTimeout(resolve, delay));
68
+ }
69
+ }
70
+ throw lastError ?? new Error('Max retries exceeded');
71
+ }
72
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../../src/admin/client/utils/retry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { KeycloakAdminScope } from '../permissions/keycloak-admin.permissions.js';
2
+ export interface KeycloakAdminConfig {
3
+ enabled: boolean;
4
+ baseUrl: string;
5
+ realmName: string;
6
+ credentials: {
7
+ type: 'password';
8
+ username: string;
9
+ password: string;
10
+ } | {
11
+ type: 'clientCredentials';
12
+ clientId: string;
13
+ clientSecret: string;
14
+ };
15
+ timeout?: number;
16
+ retry?: {
17
+ maxRetries: number;
18
+ initialDelay: number;
19
+ };
20
+ /**
21
+ * Explicit list of permitted operation scopes.
22
+ *
23
+ * Defaults to all read-only scopes ({@link KEYCLOAK_DEFAULT_SCOPES}) when omitted.
24
+ * Write scopes must be explicitly declared.
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * permissions: ['users:read', 'users:write', 'federated-identity:read', 'federated-identity:write']
29
+ * ```
30
+ */
31
+ permissions?: KeycloakAdminScope[];
32
+ }
33
+ //# sourceMappingURL=keycloak.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keycloak.config.d.ts","sourceRoot":"","sources":["../../../src/admin/config/keycloak.config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAEvF,MAAM,WAAW,mBAAmB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EACR;QACD,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KACjB,GACC;QACD,IAAI,EAAE,mBAAmB,CAAC;QAC1B,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,CAAC;KACrB,CAAC;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACrB,CAAC;IACF;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,kBAAkB,EAAE,CAAC;CACnC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=keycloak.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keycloak.config.js","sourceRoot":"","sources":["../../../src/admin/config/keycloak.config.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import type { KeycloakAdminConfig } from './keycloak.config.js';
2
+ /**
3
+ * SECURITY: Default Keycloak configuration
4
+ * Credentials are intentionally left empty and MUST be provided via environment variables:
5
+ * - For password auth: KEYCLOAK_USERNAME and KEYCLOAK_PASSWORD
6
+ * - For client credentials: KEYCLOAK_CLIENT_ID and KEYCLOAK_CLIENT_SECRET
7
+ * Do not commit credentials to source code.
8
+ */
9
+ export declare const KeycloakAdminDefaults: KeycloakAdminConfig;
10
+ export declare function validateKeycloakAdminConfig(config: KeycloakAdminConfig): void;
11
+ //# sourceMappingURL=keycloak.defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keycloak.defaults.d.ts","sourceRoot":"","sources":["../../../src/admin/config/keycloak.defaults.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAOhE;;;;;;GAMG;AAEH,eAAO,MAAM,qBAAqB,EAAE,mBAcnC,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAmC7E"}
@@ -0,0 +1,60 @@
1
+ import Joi from 'joi';
2
+ import { KEYCLOAK_ALL_SCOPES } from '../permissions/keycloak-admin.permissions.js';
3
+ // Keycloak timeout constants (in milliseconds)
4
+ const KEYCLOAK_TIMEOUT = 1000;
5
+ const KEYCLOAK_TIMEOUT_30_SECONDS_MULTIPLIER = 30;
6
+ /**
7
+ * SECURITY: Default Keycloak configuration
8
+ * Credentials are intentionally left empty and MUST be provided via environment variables:
9
+ * - For password auth: KEYCLOAK_USERNAME and KEYCLOAK_PASSWORD
10
+ * - For client credentials: KEYCLOAK_CLIENT_ID and KEYCLOAK_CLIENT_SECRET
11
+ * Do not commit credentials to source code.
12
+ */
13
+ export const KeycloakAdminDefaults = {
14
+ enabled: false,
15
+ baseUrl: 'http://localhost:8080',
16
+ realmName: 'master',
17
+ credentials: {
18
+ type: 'password',
19
+ username: '', // Must be set via environment variable
20
+ password: '', // Must be set via environment variable
21
+ },
22
+ timeout: KEYCLOAK_TIMEOUT * KEYCLOAK_TIMEOUT_30_SECONDS_MULTIPLIER, // 30 seconds
23
+ retry: {
24
+ maxRetries: 3,
25
+ initialDelay: KEYCLOAK_TIMEOUT,
26
+ },
27
+ };
28
+ export function validateKeycloakAdminConfig(config) {
29
+ const schema = Joi.object({
30
+ enabled: Joi.boolean().required(),
31
+ baseUrl: Joi.string()
32
+ .uri({ scheme: ['http', 'https'] })
33
+ .required(),
34
+ realmName: Joi.string().min(1).required(),
35
+ credentials: Joi.alternatives()
36
+ .try(Joi.object({
37
+ type: Joi.string().valid('password').required(),
38
+ username: Joi.string().required(),
39
+ password: Joi.string().required(),
40
+ }), Joi.object({
41
+ type: Joi.string().valid('clientCredentials').required(),
42
+ clientId: Joi.string().required(),
43
+ clientSecret: Joi.string().required(),
44
+ }))
45
+ .required(),
46
+ timeout: Joi.number().min(KEYCLOAK_TIMEOUT).optional(),
47
+ retry: Joi.object({
48
+ maxRetries: Joi.number().min(0).required(),
49
+ initialDelay: Joi.number().min(0).required(),
50
+ }).optional(),
51
+ permissions: Joi.array()
52
+ .items(Joi.string().valid(...KEYCLOAK_ALL_SCOPES))
53
+ .optional(),
54
+ });
55
+ const { error } = schema.validate(config);
56
+ if (error) {
57
+ throw new Error(`Keycloak configuration validation failed: ${error.details.map((d) => d.message).join(', ')}`);
58
+ }
59
+ }
60
+ //# sourceMappingURL=keycloak.defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keycloak.defaults.js","sourceRoot":"","sources":["../../../src/admin/config/keycloak.defaults.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAC;AAEtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,8CAA8C,CAAC;AAEnF,+CAA+C;AAC/C,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,sCAAsC,GAAG,EAAE,CAAC;AAElD;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAwB;IACzD,OAAO,EAAE,KAAK;IACd,OAAO,EAAE,uBAAuB;IAChC,SAAS,EAAE,QAAQ;IACnB,WAAW,EAAE;QACZ,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,EAAE,EAAE,uCAAuC;QACrD,QAAQ,EAAE,EAAE,EAAE,uCAAuC;KACrD;IACD,OAAO,EAAE,gBAAgB,GAAG,sCAAsC,EAAE,aAAa;IACjF,KAAK,EAAE;QACN,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,gBAAgB;KAC9B;CACD,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,MAA2B;IACtE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACzB,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QACjC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE;aACnB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;aAClC,QAAQ,EAAE;QACZ,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACzC,WAAW,EAAE,GAAG,CAAC,YAAY,EAAE;aAC7B,GAAG,CACH,GAAG,CAAC,MAAM,CAAC;YACV,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;YAC/C,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACjC,CAAC,EACF,GAAG,CAAC,MAAM,CAAC;YACV,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE;YACxD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YACjC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SACrC,CAAC,CACF;aACA,QAAQ,EAAE;QACZ,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE;QACtD,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC;YACjB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YAC1C,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;SAC5C,CAAC,CAAC,QAAQ,EAAE;QACb,WAAW,EAAE,GAAG,CAAC,KAAK,EAAE;aACtB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,mBAAmB,CAAC,CAAC;aACjD,QAAQ,EAAE;KACZ,CAAC,CAAC;IAEH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,6CAA6C,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChH,CAAC;AACF,CAAC"}