@forgerock/device-client 0.0.0-beta-20251222204813

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 (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +253 -0
  3. package/dist/src/index.d.ts +2 -0
  4. package/dist/src/index.d.ts.map +1 -0
  5. package/dist/src/index.js +8 -0
  6. package/dist/src/index.js.map +1 -0
  7. package/dist/src/lib/device.store.d.ts +186 -0
  8. package/dist/src/lib/device.store.d.ts.map +1 -0
  9. package/dist/src/lib/device.store.js +306 -0
  10. package/dist/src/lib/device.store.js.map +1 -0
  11. package/dist/src/lib/device.store.utils.d.ts +4 -0
  12. package/dist/src/lib/device.store.utils.d.ts.map +1 -0
  13. package/dist/src/lib/device.store.utils.js +12 -0
  14. package/dist/src/lib/device.store.utils.js.map +1 -0
  15. package/dist/src/lib/services/index.d.ts +38 -0
  16. package/dist/src/lib/services/index.d.ts.map +1 -0
  17. package/dist/src/lib/services/index.js +98 -0
  18. package/dist/src/lib/services/index.js.map +1 -0
  19. package/dist/src/lib/types/bound-device.types.d.ts +35 -0
  20. package/dist/src/lib/types/bound-device.types.d.ts.map +1 -0
  21. package/dist/src/lib/types/bound-device.types.js +2 -0
  22. package/dist/src/lib/types/bound-device.types.js.map +1 -0
  23. package/dist/src/lib/types/index.d.ts +8 -0
  24. package/dist/src/lib/types/index.d.ts.map +1 -0
  25. package/dist/src/lib/types/index.js +14 -0
  26. package/dist/src/lib/types/index.js.map +1 -0
  27. package/dist/src/lib/types/oath.types.d.ts +42 -0
  28. package/dist/src/lib/types/oath.types.d.ts.map +1 -0
  29. package/dist/src/lib/types/oath.types.js +2 -0
  30. package/dist/src/lib/types/oath.types.js.map +1 -0
  31. package/dist/src/lib/types/profile-device.types.d.ts +57 -0
  32. package/dist/src/lib/types/profile-device.types.d.ts.map +1 -0
  33. package/dist/src/lib/types/profile-device.types.js +2 -0
  34. package/dist/src/lib/types/profile-device.types.js.map +1 -0
  35. package/dist/src/lib/types/push-device.types.d.ts +99 -0
  36. package/dist/src/lib/types/push-device.types.d.ts.map +1 -0
  37. package/dist/src/lib/types/push-device.types.js +2 -0
  38. package/dist/src/lib/types/push-device.types.js.map +1 -0
  39. package/dist/src/lib/types/updateDeviceProfile.types.d.ts +58 -0
  40. package/dist/src/lib/types/updateDeviceProfile.types.d.ts.map +1 -0
  41. package/dist/src/lib/types/updateDeviceProfile.types.js +2 -0
  42. package/dist/src/lib/types/updateDeviceProfile.types.js.map +1 -0
  43. package/dist/src/lib/types/webauthn.types.d.ts +58 -0
  44. package/dist/src/lib/types/webauthn.types.d.ts.map +1 -0
  45. package/dist/src/lib/types/webauthn.types.js +2 -0
  46. package/dist/src/lib/types/webauthn.types.js.map +1 -0
  47. package/dist/src/types.d.ts +2 -0
  48. package/dist/src/types.d.ts.map +1 -0
  49. package/dist/src/types.js +8 -0
  50. package/dist/src/types.js.map +1 -0
  51. package/dist/tsconfig.lib.tsbuildinfo +1 -0
  52. package/package.json +40 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Ping Identity Corporation
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,253 @@
1
+ # Device Client API
2
+
3
+ The `deviceClient` API provides a structured interface for managing various types of devices including OATH devices, PUSH devices, WebAuthn devices, bound devices, and device profiles. This API leverages Redux Toolkit Query (RTK Query) for efficient data fetching and state management.
4
+
5
+ ## Table of Contents
6
+
7
+ 1. [Overview](#overview)
8
+ 2. [Installation](#installation)
9
+ 3. [Configuration](#configuration)
10
+ 4. [API Methods](#api-methods)
11
+
12
+ - [OATH Management](#oath-management)
13
+ - [PUSH Management](#push-management)
14
+ - [WebAuthn Management](#webauthn-management)
15
+ - [Bound Devices Management](#bound-devices-management)
16
+ - [Device Profiling Management](#device-profiling-management)
17
+
18
+ 5. [Example Usage](#example-usage)
19
+ 6. [Error Handling](#error-handling)
20
+ 7. [License](#license)
21
+
22
+ ## Overview
23
+
24
+ The `deviceClient` function initializes the API client with the provided configuration options and sets up the Redux store with the necessary middleware and reducers.
25
+
26
+ ## Installation
27
+
28
+ To install the necessary dependencies for using the `deviceClient`, run:
29
+
30
+ ```bash
31
+ npm install @forgerock/device-client --save
32
+ ```
33
+
34
+ ## Configuration
35
+
36
+ To configure the `deviceClient`, you need to provide a `ConfigOptions` object that includes the base URL for the server and the realm path.
37
+
38
+ ```typescript
39
+ import { deviceClient } from '@forgerock/device-client';
40
+ import { type ConfigOptions } from '@forgerock/javascript-sdk';
41
+
42
+ const config: ConfigOptions = {
43
+ serverConfig: {
44
+ baseUrl: 'https://api.example.com',
45
+ },
46
+ realmPath: '/your-realm-path',
47
+ };
48
+ ```
49
+
50
+ If there is no realmPath or you wish to override the value, you can do so in the api call itself where you pass in the query.
51
+
52
+ ```typescript
53
+ const apiClient = deviceClient(config);
54
+ ```
55
+
56
+ ## API Methods
57
+
58
+ ### OATH Management
59
+
60
+ #### Methods
61
+
62
+ - **get(query: RetrieveOathQuery): Promise<OathDevice[]>**
63
+ - Retrieves Oath devices based on the specified query.
64
+
65
+ - **delete(query: RetrieveOathQuery & { device: OathDevice }): Promise\<null>**
66
+ - Deletes an Oath device based on the provided query and device information.
67
+
68
+ ### PUSH Management
69
+
70
+ #### Methods
71
+
72
+ - **get(query: PushDeviceQuery): Promise<PushDevice[]>**
73
+ - Retrieves Push devices based on the specified query.
74
+
75
+ - **delete(query: DeleteDeviceQuery): Promise\<null>**
76
+ - Deletes a Push device based on the provided query.
77
+
78
+ ### WebAuthn Management
79
+
80
+ #### Methods
81
+
82
+ - **get(query: WebAuthnQuery): Promise<WebAuthnDevice[]>**
83
+ - Retrieves WebAuthn devices based on the specified query.
84
+
85
+ - **update(query: WebAuthnQuery & { device: WebAuthnDevice }): Promise\<UpdatedWebAuthnDevice>**
86
+ - Updates the name of a WebAuthn device based on the provided query and body.
87
+
88
+ - **delete(query: WebAuthnQuery & { device: WebAuthnDevice | UpdatedWebAuthnDevice }): Promise\<null>**
89
+ - Deletes a WebAuthn device based on the provided query and body.
90
+
91
+ ### Bound Devices Management
92
+
93
+ #### Methods
94
+
95
+ - **get(query: GetBoundDevicesQuery): Promise\<Device[]>**
96
+ - Retrieves bound devices based on the specified query.
97
+
98
+ - **update(query: BoundDeviceQuery): Promise\<Device>**
99
+ - Updates the name of a bound device based on the provided query.
100
+
101
+ - **delete(query: BoundDeviceQuery): Promise\<null>**
102
+ - Deletes a bound device based on the provided query.
103
+
104
+ ### Device Profiling Management
105
+
106
+ #### Methods
107
+
108
+ - **get(query: GetProfileDevices): Promise\<ProfileDevice[]>**
109
+ - Retrieves device profiles based on the specified query.
110
+
111
+ - **update(query: ProfileDevicesQuery): Promise\<ProfileDevice>**
112
+ - Updates the name of a device profile based on the provided query.
113
+
114
+ - **delete(query: ProfileDevicesQuery): Promise\<null>**
115
+ - Deletes a device profile based on the provided query.
116
+
117
+ ## Example Usage
118
+
119
+ ### OATH Management Example
120
+
121
+ ```typescript
122
+ const oathQuery: RetrieveOathQuery = {
123
+ /* your query parameters */
124
+ };
125
+
126
+ const getResponse = await apiClient.oath.get(oathQuery);
127
+ console.log('Oath Devices:', getResponse);
128
+
129
+ const deleteOathQuery: RetrieveOathQuery & { device: OathDevice } = {
130
+ /* your delete query */
131
+ };
132
+
133
+ const deleteResponse = await apiClient.oath.delete(deleteOathQuery);
134
+ console.log('Deleted Oath Device:', deleteResponse);
135
+ ```
136
+
137
+ ### PUSH Management Example
138
+
139
+ ```typescript
140
+ const pushQuery: PushDeviceQuery = {
141
+ /* your query parameters */
142
+ };
143
+
144
+ const getResponse = await apiClient.push.get(pushQuery);
145
+ console.log('Push Devices:', getResponse);
146
+
147
+ const deletePushQuery: DeleteDeviceQuery = {
148
+ /* your delete query */
149
+ };
150
+
151
+ const deleteResponse = await apiClient.push.delete(deletePushQuery);
152
+ console.log('Deleted Push Device:', deleteResponse);
153
+ ```
154
+
155
+ ### WebAuthn Management Example
156
+
157
+ ```typescript
158
+ const webAuthnQuery: WebAuthnQuery = {
159
+ /* your query parameters */
160
+ };
161
+
162
+ const getResponse = await apiClient.webAuthn.get(webAuthnQuery);
163
+ console.log('WebAuthn Devices:', getResponse);
164
+
165
+ const updateWebAuthnQuery: WebAuthnQuery & { device: WebAuthnDevice } = {
166
+ /* your update query */
167
+ };
168
+
169
+ const updateResponse = await apiClient.webAuthn.update(updateWebAuthnQuery);
170
+ console.log('Updated WebAuthn Device:', updateResponse);
171
+
172
+ const deleteWebAuthnQuery: WebAuthnQuery & { device: WebAuthnDevice | UpdatedWebAuthnDevice } = {
173
+ /* your delete query */
174
+ };
175
+
176
+ const deleteResponse = await apiClient.webAuthn.delete(deleteWebAuthnQuery);
177
+ console.log('Deleted WebAuthn Device:', deleteResponse);
178
+ ```
179
+
180
+ ### Bound Devices Management Example
181
+
182
+ ```typescript
183
+ const bindingQuery: GetBoundDevicesQuery = {
184
+ /* your query parameters */
185
+ };
186
+
187
+ const getResponse = await apiClient.bound.get(bindingQuery);
188
+ console.log('Bound Devices:', getResponse);
189
+
190
+ const updateBindingQuery: BoundDeviceQuery = {
191
+ /* your update query */
192
+ };
193
+
194
+ const updateResponse = await apiClient.bound.update(updateBindingQuery);
195
+ console.log('Updated Bound Device:', updateResponse);
196
+
197
+ const deleteBindingQuery: BoundDeviceQuery = {
198
+ /* your delete query */
199
+ };
200
+
201
+ const deleteResponse = await apiClient.bound.delete(deleteBindingQuery);
202
+ console.log('Deleted Bound Device:', deleteResponse);
203
+ ```
204
+
205
+ ### Device Profiling Management Example
206
+
207
+ ```typescript
208
+ const profileQuery: GetProfileDevices = {
209
+ /* your query parameters */
210
+ };
211
+
212
+ const getResponse = await apiClient.profile.get(profileQuery);
213
+ console.log('Device Profiles:', getResponse);
214
+
215
+ const updateProfileQuery: ProfileDevicesQuery = {
216
+ /* your update query */
217
+ };
218
+
219
+ const updateResponse = await apiClient.profile.update(updateProfileQuery);
220
+ console.log('Updated Device Profile:', updateResponse);
221
+
222
+ const deleteProfileQuery: ProfileDevicesQuery = {
223
+ /* your delete query */
224
+ };
225
+
226
+ const deleteResponse = await apiClient.profile.delete(deleteProfileQuery);
227
+ console.log('Deleted Device Profile:', deleteResponse);
228
+ ```
229
+
230
+ ## Error Handling
231
+
232
+ When a device client method makes a request to the server and the response is not valid, it will return a promise that resolves to an error object `{ error: unknown }`. For example, to handle WebAuthn device management errors:
233
+
234
+ ```typescript
235
+ const getResponse = await apiClient.webAuthn.get(query);
236
+ if (!Array.isArray(getResponse) || 'error' in getResponse) {
237
+ // handle get device error
238
+ }
239
+
240
+ const updateResponse = await apiClient.webAuthn.update(query);
241
+ if ('error' in updateResponse) {
242
+ // handle update device error
243
+ }
244
+
245
+ const deleteResponse = await apiClient.webAuthn.delete(query);
246
+ if (deleteResponse !== null && 'error' in deleteResponse) {
247
+ // handle delete device error
248
+ }
249
+ ```
250
+
251
+ ## License
252
+
253
+ This project is licensed under the MIT License. See the LICENSE file for details.
@@ -0,0 +1,2 @@
1
+ export * from './lib/device.store.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAMA,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Copyright (c) 2025 Ping Identity Corporation. All rights reserved.
3
+ *
4
+ * This software may be modified and distributed under the terms
5
+ * of the MIT license. See the LICENSE file for details.
6
+ */
7
+ export * from './lib/device.store.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,186 @@
1
+ import { type ConfigOptions } from '@forgerock/javascript-sdk';
2
+ import { OathDevice, RetrieveOathQuery } from './types/oath.types.js';
3
+ import { DeleteDeviceQuery, PushDevice, PushDeviceQuery } from './types/push-device.types.js';
4
+ import { UpdatedWebAuthnDevice, WebAuthnDevice, WebAuthnQuery } from './types/webauthn.types.js';
5
+ import { BoundDeviceQuery, Device, GetBoundDevicesQuery } from './types/bound-device.types.js';
6
+ import { GetProfileDevices, ProfileDevice, ProfileDevicesQuery } from './types/profile-device.types.js';
7
+ /**
8
+ * @function deviceClient
9
+ * @description Returns a device management object containing methods for handling various device types
10
+ * @param {ConfigOptions} config The configuration options for the device client
11
+ * @returns Methods for handling various device types
12
+ */
13
+ export declare const deviceClient: (config: ConfigOptions) => {
14
+ /**
15
+ * Oath device management methods.
16
+ */
17
+ oath: {
18
+ /**
19
+ * Retrieves Oath devices based on the specified query.
20
+ *
21
+ * @async
22
+ * @function get
23
+ * @param {RetrieveOathQuery} query - The query used to retrieve Oath devices.
24
+ * @returns {Promise<OathDevice[] | { error: unknown }>} - A promise that resolves to the retrieved data or an error object if the response is not valid.
25
+ */
26
+ get: (query: RetrieveOathQuery) => Promise<OathDevice[] | {
27
+ error: unknown;
28
+ }>;
29
+ /**
30
+ * Deletes an Oath device based on the provided query and device information.
31
+ *
32
+ * @async
33
+ * @function delete
34
+ * @param {RetrieveOathQuery & { device: OathDevice }} query - The query and device information used to delete the Oath device.
35
+ * @returns {Promise<null | { error: unknown }>} - A promise that resolves to null or an error object if the response is not valid.
36
+ */
37
+ delete: (query: RetrieveOathQuery & {
38
+ device: OathDevice;
39
+ }) => Promise<null | {
40
+ error: unknown;
41
+ }>;
42
+ };
43
+ /**
44
+ * Push device management methods.
45
+ */
46
+ push: {
47
+ /**
48
+ * Retrieves Push devices based on the specified query.
49
+ *
50
+ * @async
51
+ * @function get
52
+ * @param {PushDeviceQuery} query - The query used to retrieve Push devices.
53
+ * @returns {Promise<PushDevice[] | { error: unknown }>} - A promise that resolves to the retrieved data or an error object if the response is not valid.
54
+ */
55
+ get: (query: PushDeviceQuery) => Promise<PushDevice[] | {
56
+ error: unknown;
57
+ }>;
58
+ /**
59
+ * Deletes a Push device based on the provided query.
60
+ *
61
+ * @async
62
+ * @function delete
63
+ * @param {DeleteDeviceQuery} query - The query used to delete the Push device.
64
+ * @returns {Promise<null | { error: unknown }>} - A promise that resolves to null or an error object if the response is not valid.
65
+ */
66
+ delete: (query: DeleteDeviceQuery) => Promise<null | {
67
+ error: unknown;
68
+ }>;
69
+ };
70
+ /**
71
+ * WebAuthn device management methods.
72
+ */
73
+ webAuthn: {
74
+ /**
75
+ * Retrieves WebAuthn devices based on the specified query.
76
+ *
77
+ * @async
78
+ * @function get
79
+ * @param {WebAuthnQuery} query - The query used to retrieve WebAuthn devices.
80
+ * @returns {Promise<WebAuthnDevice[] | { error: unknown }>} - A promise that resolves to the retrieved data or an error object if the response is not valid.
81
+ */
82
+ get: (query: WebAuthnQuery) => Promise<WebAuthnDevice[] | {
83
+ error: unknown;
84
+ }>;
85
+ /**
86
+ * Updates the name of a WebAuthn device based on the provided query and body.
87
+ *
88
+ * @async
89
+ * @function update
90
+ * @param {WebAuthnQuery & { device: WebAuthnDevice }} query - The query and body used to update the WebAuthn device name.
91
+ * @returns {Promise<UpdatedWebAuthnDevice | { error: unknown }>} - A promise that resolves to the response data or an error object if the response is not valid.
92
+ */
93
+ update: (query: WebAuthnQuery & {
94
+ device: WebAuthnDevice;
95
+ }) => Promise<UpdatedWebAuthnDevice | {
96
+ error: unknown;
97
+ }>;
98
+ /**
99
+ * Deletes a WebAuthn device based on the provided query and body.
100
+ *
101
+ * @async
102
+ * @function delete
103
+ * @param {WebAuthnQuery & { device: WebAuthnDevice | UpdatedWebAuthnDevice }} query - The query and body used to delete the WebAuthn device.
104
+ * @returns {Promise<null | { error: unknown }>} - A promise that resolves to null or an error object if the response is not valid.
105
+ */
106
+ delete: (query: WebAuthnQuery & {
107
+ device: WebAuthnDevice | UpdatedWebAuthnDevice;
108
+ }) => Promise<null | {
109
+ error: unknown;
110
+ }>;
111
+ };
112
+ /**
113
+ * Bound devices management methods.
114
+ */
115
+ bound: {
116
+ /**
117
+ * Retrieves bound devices based on the specified query.
118
+ *
119
+ * @async
120
+ * @function get
121
+ * @param {GetBoundDevicesQuery} query - The query used to retrieve bound devices.
122
+ * @returns {Promise<Device[] | { error: unknown }>} - A promise that resolves to the retrieved data or an error object if the response is not valid.
123
+ */
124
+ get: (query: GetBoundDevicesQuery) => Promise<Device[] | {
125
+ error: unknown;
126
+ }>;
127
+ /**
128
+ * Deletes a bound device based on the provided query.
129
+ *
130
+ * @async
131
+ * @function delete
132
+ * @param {BoundDeviceQuery} query - The query used to delete the bound device.
133
+ * @returns {Promise<null | { error: unknown }>} - A promise that resolves to null or an error object if the response is not valid.
134
+ */
135
+ delete: (query: BoundDeviceQuery) => Promise<null | {
136
+ error: unknown;
137
+ }>;
138
+ /**
139
+ * Updates the name of a bound device based on the provided query.
140
+ *
141
+ * @async
142
+ * @function update
143
+ * @param {BoundDeviceQuery} query - The query used to update the bound device name.
144
+ * @returns {Promise<Device | { error: unknown }>} - A promise that resolves to the response data or an error object if the response is not valid.
145
+ */
146
+ update: (query: BoundDeviceQuery) => Promise<Device | {
147
+ error: unknown;
148
+ }>;
149
+ };
150
+ profile: {
151
+ /**
152
+ * Get profile devices
153
+ *
154
+ * @async
155
+ * @function update
156
+ * @param {GetProfileDevices} query - The query used to get profile devices
157
+ * @returns {Promise<ProfileDevice[] | { error: unknown }>} - A promise that resolves to the response data or an error object if the response is not valid.
158
+ */
159
+ get: (query: GetProfileDevices) => Promise<ProfileDevice[] | {
160
+ error: unknown;
161
+ }>;
162
+ /**
163
+ * Get profile devices
164
+ *
165
+ * @async
166
+ * @function update
167
+ * @param {ProfileDevicesQuery} query - The query used to update a profile device
168
+ * @returns {Promise<ProfileDevice | { error: unknown }>} - A promise that resolves to the response data or or an error object if the response is not valid.
169
+ */
170
+ update: (query: ProfileDevicesQuery) => Promise<ProfileDevice | {
171
+ error: unknown;
172
+ }>;
173
+ /**
174
+ * Get profile devices
175
+ *
176
+ * @async
177
+ * @function update
178
+ * @param {ProfileDevicesQuery} query - The query used to update a profile device
179
+ * @returns {Promise<null | { error: unknown }>} - A promise that resolves to null or an error object if the response is not valid.
180
+ */
181
+ delete: (query: ProfileDevicesQuery) => Promise<null | {
182
+ error: unknown;
183
+ }>;
184
+ };
185
+ };
186
+ //# sourceMappingURL=device.store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device.store.d.ts","sourceRoot":"","sources":["../../../src/lib/device.store.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC9F,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AACjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC/F,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AAGzC;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,aAAa;IAc9C;;OAEG;;QAED;;;;;;;WAOG;qBACyB,iBAAiB,KAAG,OAAO,CAAC,UAAU,EAAE,GAAG;YAAE,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC;QAc1F;;;;;;;WAOG;wBAEM,iBAAiB,GAAG;YAAE,MAAM,EAAE,UAAU,CAAA;SAAE,KAChD,OAAO,CAAC,IAAI,GAAG;YAAE,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC;;IAevC;;OAEG;;QAED;;;;;;;WAOG;qBACyB,eAAe,KAAG,OAAO,CAAC,UAAU,EAAE,GAAG;YAAE,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC;QAcxF;;;;;;;WAOG;wBAC4B,iBAAiB,KAAG,OAAO,CAAC,IAAI,GAAG;YAAE,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC;;IAevF;;OAEG;;QAED;;;;;;;WAOG;qBACyB,aAAa,KAAG,OAAO,CAAC,cAAc,EAAE,GAAG;YAAE,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC;QAc1F;;;;;;;WAOG;wBAEM,aAAa,GAAG;YAAE,MAAM,EAAE,cAAc,CAAA;SAAE,KAChD,OAAO,CAAC,qBAAqB,GAAG;YAAE,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC;QActD;;;;;;;WAOG;wBAEM,aAAa,GAAG;YAAE,MAAM,EAAE,cAAc,GAAG,qBAAqB,CAAA;SAAE,KACxE,OAAO,CAAC,IAAI,GAAG;YAAE,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC;;IAiBvC;;OAEG;;QAED;;;;;;;WAOG;qBACyB,oBAAoB,KAAG,OAAO,CAAC,MAAM,EAAE,GAAG;YAAE,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC;QAczF;;;;;;;WAOG;wBAC4B,gBAAgB,KAAG,OAAO,CAAC,IAAI,GAAG;YAAE,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC;QAcpF;;;;;;;WAOG;wBAC4B,gBAAgB,KAAG,OAAO,CAAC,MAAM,GAAG;YAAE,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC;;;QAetF;;;;;;;WAOG;qBAEM,iBAAiB,KACvB,OAAO,CAAC,aAAa,EAAE,GAAG;YAAE,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC;QAahD;;;;;;;WAOG;wBAEM,mBAAmB,KACzB,OAAO,CAAC,aAAa,GAAG;YAAE,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC;QAa9C;;;;;;;WAOG;wBAC4B,mBAAmB,KAAG,OAAO,CAAC,IAAI,GAAG;YAAE,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC;;CAe5F,CAAC"}