@boxyhq/saml-jackson 1.14.2 → 1.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +1 -1
  2. package/dist/controller/oauth.js +6 -1
  3. package/dist/controller/oauth.js.map +1 -1
  4. package/dist/controller/utils.d.ts +2 -0
  5. package/dist/controller/utils.js +6 -0
  6. package/dist/controller/utils.js.map +1 -1
  7. package/dist/db/db.d.ts +3 -3
  8. package/dist/db/db.js +4 -4
  9. package/dist/db/db.js.map +1 -1
  10. package/dist/db/mem.d.ts +3 -3
  11. package/dist/db/mem.js +4 -4
  12. package/dist/db/mem.js.map +1 -1
  13. package/dist/db/mongo.d.ts +3 -3
  14. package/dist/db/mongo.js +6 -5
  15. package/dist/db/mongo.js.map +1 -1
  16. package/dist/db/planetscale/entity/JacksonStore.js +3 -1
  17. package/dist/db/planetscale/entity/JacksonStore.js.map +1 -1
  18. package/dist/db/redis.d.ts +2 -2
  19. package/dist/db/redis.js +30 -40
  20. package/dist/db/redis.js.map +1 -1
  21. package/dist/db/sql/mariadb/entity/JacksonStore.js +3 -1
  22. package/dist/db/sql/mariadb/entity/JacksonStore.js.map +1 -1
  23. package/dist/db/sql/sql.d.ts +3 -3
  24. package/dist/db/sql/sql.js +10 -8
  25. package/dist/db/sql/sql.js.map +1 -1
  26. package/dist/db/store.js +4 -4
  27. package/dist/db/store.js.map +1 -1
  28. package/dist/directory-sync/batch-events/lock.d.ts +18 -0
  29. package/dist/directory-sync/batch-events/lock.js +79 -0
  30. package/dist/directory-sync/batch-events/lock.js.map +1 -0
  31. package/dist/directory-sync/batch-events/queue.d.ts +37 -0
  32. package/dist/directory-sync/batch-events/queue.js +234 -0
  33. package/dist/directory-sync/batch-events/queue.js.map +1 -0
  34. package/dist/directory-sync/index.d.ts +4 -2
  35. package/dist/directory-sync/index.js +39 -6
  36. package/dist/directory-sync/index.js.map +1 -1
  37. package/dist/directory-sync/non-scim/google/api.js +2 -2
  38. package/dist/directory-sync/non-scim/google/api.js.map +1 -1
  39. package/dist/directory-sync/non-scim/google/oauth.js +2 -2
  40. package/dist/directory-sync/non-scim/google/oauth.js.map +1 -1
  41. package/dist/directory-sync/scim/Base.d.ts +1 -1
  42. package/dist/directory-sync/scim/Base.js.map +1 -1
  43. package/dist/directory-sync/scim/DirectoryGroups.js +20 -7
  44. package/dist/directory-sync/scim/DirectoryGroups.js.map +1 -1
  45. package/dist/directory-sync/scim/DirectoryUsers.js +19 -6
  46. package/dist/directory-sync/scim/DirectoryUsers.js.map +1 -1
  47. package/dist/directory-sync/scim/WebhookEventsLogger.d.ts +1 -1
  48. package/dist/directory-sync/scim/WebhookEventsLogger.js +8 -1
  49. package/dist/directory-sync/scim/WebhookEventsLogger.js.map +1 -1
  50. package/dist/directory-sync/scim/utils.js.map +1 -1
  51. package/dist/directory-sync/types.d.ts +6 -1
  52. package/dist/directory-sync/types.js.map +1 -1
  53. package/dist/directory-sync/utils.d.ts +16 -0
  54. package/dist/directory-sync/{scim/events.js → utils.js} +22 -13
  55. package/dist/directory-sync/utils.js.map +1 -0
  56. package/dist/event/webhook.d.ts +2 -2
  57. package/dist/event/webhook.js.map +1 -1
  58. package/dist/opentelemetry/metrics.d.ts +1 -0
  59. package/dist/opentelemetry/metrics.js +7 -0
  60. package/dist/opentelemetry/metrics.js.map +1 -1
  61. package/dist/saml/lib.d.ts +3 -3
  62. package/dist/typings.d.ts +10 -5
  63. package/migration/mariadb/1695120700240-md_sortorder.ts +16 -0
  64. package/migration/mysql/1695120580071-ms_sortorder.ts +16 -0
  65. package/migration/planetscale/1695120599689-ms_sortorder.ts +16 -0
  66. package/package.json +18 -18
  67. package/dist/directory-sync/scim/events.d.ts +0 -9
  68. package/dist/directory-sync/scim/events.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/opentelemetry/metrics.ts"],"names":[],"mappings":";;;AAAA,6CAAmD;AAEnD,MAAM,KAAK,GAAG,SAAS,CAAC;AAExB,MAAM,QAAQ,GAAG;IACf,gBAAgB,EAAE,GAAG,EAAE,CACrB,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,2BAA2B;QACjC,cAAc,EAAE,EAAE,WAAW,EAAE,0CAA0C,EAAE;KAC5E,CAAC;IACJ,cAAc,EAAE,GAAG,EAAE,CACnB,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,wBAAwB;QAC9B,cAAc,EAAE,EAAE,WAAW,EAAE,wCAAwC,EAAE;KAC1E,CAAC;IACJ,iBAAiB,EAAE,GAAG,EAAE,CACtB,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,2BAA2B;QACjC,cAAc,EAAE,EAAE,WAAW,EAAE,2CAA2C,EAAE;KAC7E,CAAC;IACJ,cAAc,EAAE,GAAG,EAAE,CACnB,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,yBAAyB;QAC/B,cAAc,EAAE,EAAE,WAAW,EAAE,oCAAoC,EAAE;KACtE,CAAC;IACJ,UAAU,EAAE,GAAG,EAAE,CACf,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,qBAAqB;QAC3B,cAAc,EAAE,EAAE,WAAW,EAAE,gCAAgC,EAAE;KAClE,CAAC;IAEJ,aAAa,EAAE,GAAG,EAAE,CAClB,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,wBAAwB;QAC9B,cAAc,EAAE,EAAE,WAAW,EAAE,oCAAoC,EAAE;KACtE,CAAC;IAEJ,qBAAqB,EAAE,GAAG,EAAE,CAC1B,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,iCAAiC;QACvC,cAAc,EAAE,EAAE,WAAW,EAAE,4CAA4C,EAAE;KAC9E,CAAC;IAEJ,mBAAmB,EAAE,GAAG,EAAE,CACxB,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,8BAA8B;QACpC,cAAc,EAAE,EAAE,WAAW,EAAE,0CAA0C,EAAE;KAC5E,CAAC;IAEJ,sBAAsB,EAAE,GAAG,EAAE,CAC3B,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,iCAAiC;QACvC,cAAc,EAAE,EAAE,WAAW,EAAE,6CAA6C,EAAE;KAC/E,CAAC;CACL,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,MAA6B,EAAE,EAAE;IAClD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,OAAO,gBAAgB,KAAK,UAAU,EAAE;QAC1C,gBAAgB,EAAE,CAAC;KACpB;AACH,CAAC,CAAC;AAEO,8BAAS"}
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/opentelemetry/metrics.ts"],"names":[],"mappings":";;;AAAA,6CAAmD;AAEnD,MAAM,KAAK,GAAG,SAAS,CAAC;AAExB,MAAM,QAAQ,GAAG;IACf,gBAAgB,EAAE,GAAG,EAAE,CACrB,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,2BAA2B;QACjC,cAAc,EAAE,EAAE,WAAW,EAAE,0CAA0C,EAAE;KAC5E,CAAC;IACJ,cAAc,EAAE,GAAG,EAAE,CACnB,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,wBAAwB;QAC9B,cAAc,EAAE,EAAE,WAAW,EAAE,wCAAwC,EAAE;KAC1E,CAAC;IACJ,iBAAiB,EAAE,GAAG,EAAE,CACtB,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,2BAA2B;QACjC,cAAc,EAAE,EAAE,WAAW,EAAE,2CAA2C,EAAE;KAC7E,CAAC;IACJ,cAAc,EAAE,GAAG,EAAE,CACnB,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,yBAAyB;QAC/B,cAAc,EAAE,EAAE,WAAW,EAAE,oCAAoC,EAAE;KACtE,CAAC;IACJ,UAAU,EAAE,GAAG,EAAE,CACf,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,qBAAqB;QAC3B,cAAc,EAAE,EAAE,WAAW,EAAE,gCAAgC,EAAE;KAClE,CAAC;IAEJ,aAAa,EAAE,GAAG,EAAE,CAClB,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,wBAAwB;QAC9B,cAAc,EAAE,EAAE,WAAW,EAAE,oCAAoC,EAAE;KACtE,CAAC;IAEJ,qBAAqB,EAAE,GAAG,EAAE,CAC1B,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,iCAAiC;QACvC,cAAc,EAAE,EAAE,WAAW,EAAE,4CAA4C,EAAE;KAC9E,CAAC;IAEJ,mBAAmB,EAAE,GAAG,EAAE,CACxB,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,8BAA8B;QACpC,cAAc,EAAE,EAAE,WAAW,EAAE,0CAA0C,EAAE;KAC5E,CAAC;IAEJ,sBAAsB,EAAE,GAAG,EAAE,CAC3B,IAAA,0BAAgB,EAAC;QACf,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,iCAAiC;QACvC,cAAc,EAAE,EAAE,WAAW,EAAE,6CAA6C,EAAE;KAC/E,CAAC;IAEJ,sBAAsB,EAAE,GAAG,EAAE;QAC3B,IAAA,0BAAgB,EAAC;YACf,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,mCAAmC;YACzC,cAAc,EAAE,EAAE,WAAW,EAAE,8CAA8C,EAAE;SAChF,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,MAA6B,EAAE,EAAE;IAClD,MAAM,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,OAAO,gBAAgB,KAAK,UAAU,EAAE;QAC1C,gBAAgB,EAAE,CAAC;KACpB;AACH,CAAC,CAAC;AAEO,8BAAS"}
@@ -23,10 +23,10 @@ export declare const createSAMLResponse: ({ audience, issuer, acsUrl, profile, r
23
23
  privateKey: string;
24
24
  publicKey: string;
25
25
  }) => Promise<string>;
26
- type ValidateOption = {
27
- thumbprint: string;
26
+ export type ValidateOption = {
27
+ thumbprint?: string;
28
+ publicKey?: string;
28
29
  audience: string;
29
30
  privateKey: string;
30
31
  inResponseTo?: string;
31
32
  };
32
- export {};
package/dist/typings.d.ts CHANGED
@@ -4,6 +4,8 @@ export * from './ee/federated-saml/types';
4
4
  export * from './saml-tracer/types';
5
5
  export * from './directory-sync/types';
6
6
  export * from './event/types';
7
+ import db from './db/db';
8
+ export type DB = Awaited<ReturnType<typeof db.new>>;
7
9
  interface SSOConnection {
8
10
  defaultRedirectUrl: string;
9
11
  redirectUrl: string[] | string;
@@ -56,6 +58,7 @@ export interface SAMLSSORecord extends SAMLSSOConnection {
56
58
  redirectUrl?: string;
57
59
  };
58
60
  thumbprint?: string;
61
+ publicKey?: string;
59
62
  validTo?: string;
60
63
  };
61
64
  deactivated?: boolean;
@@ -289,19 +292,19 @@ export interface Records<T = any> {
289
292
  pageToken?: string;
290
293
  }
291
294
  export interface DatabaseDriver {
292
- getAll(namespace: string, pageOffset?: number, pageLimit?: number, pageToken?: string): Promise<Records>;
295
+ getAll(namespace: string, pageOffset?: number, pageLimit?: number, pageToken?: string, sortOrder?: SortOrder): Promise<Records>;
293
296
  get(namespace: string, key: string): Promise<any>;
294
297
  put(namespace: string, key: string, val: any, ttl: number, ...indexes: Index[]): Promise<any>;
295
298
  delete(namespace: string, key: string): Promise<any>;
296
- getByIndex(namespace: string, idx: Index, pageOffset?: number, pageLimit?: number, pageToken?: string): Promise<Records>;
299
+ getByIndex(namespace: string, idx: Index, pageOffset?: number, pageLimit?: number, pageToken?: string, sortOrder?: SortOrder): Promise<Records>;
297
300
  deleteMany(namespace: string, keys: string[]): Promise<void>;
298
301
  }
299
302
  export interface Storable {
300
- getAll(pageOffset?: number, pageLimit?: number, pageToken?: string): Promise<Records>;
303
+ getAll(pageOffset?: number, pageLimit?: number, pageToken?: string, sortOrder?: SortOrder): Promise<Records>;
301
304
  get(key: string): Promise<any>;
302
305
  put(key: string, val: any, ...indexes: Index[]): Promise<any>;
303
306
  delete(key: string): Promise<any>;
304
- getByIndex(idx: Index, pageOffset?: number, pageLimit?: number, pageToken?: string): Promise<Records>;
307
+ getByIndex(idx: Index, pageOffset?: number, pageLimit?: number, pageToken?: string, sortOrder?: SortOrder): Promise<Records>;
305
308
  deleteMany(keys: string[]): Promise<void>;
306
309
  }
307
310
  export interface DatabaseStore {
@@ -366,7 +369,8 @@ export interface JacksonOption {
366
369
  };
367
370
  webhook?: Webhook;
368
371
  dsync?: {
369
- providers: {
372
+ webhookBatchSize?: number;
373
+ providers?: {
370
374
  google: {
371
375
  clientId: string;
372
376
  clientSecret: string;
@@ -465,3 +469,4 @@ export type GetByProductParams = {
465
469
  pageLimit?: number;
466
470
  pageToken?: string;
467
471
  };
472
+ export type SortOrder = 'ASC' | 'DESC';
@@ -0,0 +1,16 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class MdSortorder1695120700240 implements MigrationInterface {
4
+ name = 'MdSortorder1695120700240'
5
+
6
+ public async up(queryRunner: QueryRunner): Promise<void> {
7
+ await queryRunner.query(`ALTER TABLE \`jackson_store\` CHANGE \`createdAt\` \`createdAt\` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)`);
8
+ await queryRunner.query(`ALTER TABLE \`jackson_store\` CHANGE \`modifiedAt\` \`modifiedAt\` timestamp(6) NULL`);
9
+ }
10
+
11
+ public async down(queryRunner: QueryRunner): Promise<void> {
12
+ await queryRunner.query(`ALTER TABLE \`jackson_store\` CHANGE \`modifiedAt\` \`modifiedAt\` timestamp(0) NULL`);
13
+ await queryRunner.query(`ALTER TABLE \`jackson_store\` CHANGE \`createdAt\` \`createdAt\` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP()`);
14
+ }
15
+
16
+ }
@@ -0,0 +1,16 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class MsSortorder1695120580071 implements MigrationInterface {
4
+ name = 'MsSortorder1695120580071'
5
+
6
+ public async up(queryRunner: QueryRunner): Promise<void> {
7
+ await queryRunner.query(`ALTER TABLE \`jackson_store\` CHANGE \`createdAt\` \`createdAt\` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)`);
8
+ await queryRunner.query(`ALTER TABLE \`jackson_store\` CHANGE \`modifiedAt\` \`modifiedAt\` timestamp(6) NULL`);
9
+ }
10
+
11
+ public async down(queryRunner: QueryRunner): Promise<void> {
12
+ await queryRunner.query(`ALTER TABLE \`jackson_store\` CHANGE \`modifiedAt\` \`modifiedAt\` timestamp(0) NULL`);
13
+ await queryRunner.query(`ALTER TABLE \`jackson_store\` CHANGE \`createdAt\` \`createdAt\` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP`);
14
+ }
15
+
16
+ }
@@ -0,0 +1,16 @@
1
+ import { MigrationInterface, QueryRunner } from "typeorm";
2
+
3
+ export class MsSortorder1695120599689 implements MigrationInterface {
4
+ name = 'MsSortorder1695120599689'
5
+
6
+ public async up(queryRunner: QueryRunner): Promise<void> {
7
+ await queryRunner.query(`ALTER TABLE \`jackson_store\` CHANGE \`createdAt\` \`createdAt\` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6)`);
8
+ await queryRunner.query(`ALTER TABLE \`jackson_store\` CHANGE \`modifiedAt\` \`modifiedAt\` timestamp(6) NULL`);
9
+ }
10
+
11
+ public async down(queryRunner: QueryRunner): Promise<void> {
12
+ await queryRunner.query(`ALTER TABLE \`jackson_store\` CHANGE \`modifiedAt\` \`modifiedAt\` timestamp(0) NULL`);
13
+ await queryRunner.query(`ALTER TABLE \`jackson_store\` CHANGE \`createdAt\` \`createdAt\` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP`);
14
+ }
15
+
16
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@boxyhq/saml-jackson",
3
- "version": "1.14.2",
3
+ "version": "1.15.0",
4
4
  "description": "SAML Jackson library",
5
5
  "keywords": [
6
6
  "SAML 2.0"
@@ -39,21 +39,21 @@
39
39
  "coverage-map": "map.js"
40
40
  },
41
41
  "dependencies": {
42
- "@aws-sdk/client-dynamodb": "3.433.0",
43
- "@aws-sdk/credential-providers": "3.433.0",
44
- "@aws-sdk/util-dynamodb": "3.433.0",
42
+ "@aws-sdk/client-dynamodb": "3.451.0",
43
+ "@aws-sdk/credential-providers": "3.451.0",
44
+ "@aws-sdk/util-dynamodb": "3.454.0",
45
45
  "@boxyhq/error-code-mnemonic": "0.1.1",
46
- "@boxyhq/metrics": "0.2.5",
47
- "@boxyhq/saml20": "1.2.4",
46
+ "@boxyhq/metrics": "0.2.6",
47
+ "@boxyhq/saml20": "1.3.2",
48
48
  "@googleapis/admin": "13.0.0",
49
- "axios": "1.5.1",
49
+ "axios": "1.6.2",
50
50
  "encoding": "0.1.13",
51
- "jose": "4.15.4",
51
+ "jose": "5.1.1",
52
52
  "lodash": "4.17.21",
53
53
  "mixpanel": "0.18.0",
54
- "mongodb": "6.2.0",
54
+ "mongodb": "6.3.0",
55
55
  "mssql": "10.0.1",
56
- "mysql2": "3.6.2",
56
+ "mysql2": "3.6.3",
57
57
  "node-forge": "1.3.1",
58
58
  "openid-client": "5.6.1",
59
59
  "pg": "8.11.3",
@@ -65,16 +65,16 @@
65
65
  "xmlbuilder": "15.1.1"
66
66
  },
67
67
  "devDependencies": {
68
- "@faker-js/faker": "8.2.0",
69
- "@types/lodash": "4.14.200",
70
- "@types/node": "20.8.7",
71
- "@types/sinon": "10.0.20",
72
- "@types/tap": "15.0.10",
68
+ "@faker-js/faker": "8.3.1",
69
+ "@types/lodash": "4.14.201",
70
+ "@types/node": "20.9.2",
71
+ "@types/sinon": "17.0.1",
72
+ "@types/tap": "15.0.11",
73
73
  "cross-env": "7.0.3",
74
74
  "migrate-mongo": "11.0.0",
75
- "nock": "13.3.6",
76
- "sinon": "17.0.0",
77
- "tap": "18.5.2",
75
+ "nock": "13.3.8",
76
+ "sinon": "17.0.1",
77
+ "tap": "18.6.1",
78
78
  "ts-node": "10.9.1",
79
79
  "tsconfig-paths": "4.2.0",
80
80
  "typescript": "5.2.2"
@@ -1,9 +0,0 @@
1
- import type { DirectorySyncEventType, Directory, User, Group, EventCallback, DirectorySyncEvent, IWebhookEventsLogger, IDirectoryConfig } from '../../typings';
2
- type Payload = {
3
- directory: Directory;
4
- group?: Group | null;
5
- user?: User | null;
6
- };
7
- export declare const sendEvent: (event: DirectorySyncEventType, payload: Payload, callback?: EventCallback) => Promise<void>;
8
- export declare const handleEventCallback: (directories: IDirectoryConfig, webhookEventsLogger: IWebhookEventsLogger) => Promise<(event: DirectorySyncEvent) => Promise<void>>;
9
- export {};
@@ -1 +0,0 @@
1
- {"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/directory-sync/scim/events.ts"],"names":[],"mappings":";;;;;;;;;;;;AAUA,iDAA2D;AAC3D,2CAAoD;AACpD,kDAA4D;AAIrD,MAAM,SAAS,GAAG,CACvB,KAA6B,EAC7B,OAAgB,EAChB,QAAwB,EACxB,EAAE;IACF,IAAI,CAAC,IAAA,0BAAkB,EAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QAC1C,OAAO;KACR;IAED,IAAI,CAAC,QAAQ,EAAE;QACb,OAAO;KACR;IAED,MAAM,QAAQ,CAAC,IAAA,iCAAqB,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACxD,CAAC,CAAA,CAAC;AAdW,QAAA,SAAS,aAcpB;AAEK,MAAM,mBAAmB,GAAG,CACjC,WAA6B,EAC7B,mBAAyC,EACzC,EAAE;IACF,OAAO,CAAO,KAAyB,EAAE,EAAE;QACzC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;QAE7D,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAE/D,IAAI,CAAC,SAAS,EAAE;YACd,OAAO;SACR;QAED,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE;YAC5D,OAAO;SACR;QAED,IAAI,MAAM,GAAG,GAAG,CAAC;QAEjB,IAAI;YACF,MAAM,IAAA,8BAAoB,EAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;SACtD;QAAC,OAAO,GAAQ,EAAE;YACjB,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;SACnD;QAED,IAAI,SAAS,CAAC,kBAAkB,EAAE;YAChC,MAAM,mBAAmB,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SAC9F;IACH,CAAC,CAAA,CAAC;AACJ,CAAC,CAAA,CAAC;AA7BW,QAAA,mBAAmB,uBA6B9B"}