@boxyhq/saml-jackson 1.9.3 → 1.9.6

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 (102) hide show
  1. package/dist/controller/api.d.ts +6 -10
  2. package/dist/controller/api.js +29 -6
  3. package/dist/controller/api.js.map +1 -1
  4. package/dist/controller/connection/oidc.d.ts +2 -5
  5. package/dist/controller/connection/oidc.js +4 -0
  6. package/dist/controller/connection/oidc.js.map +1 -1
  7. package/dist/controller/connection/saml.d.ts +2 -5
  8. package/dist/controller/connection/saml.js +8 -1
  9. package/dist/controller/connection/saml.js.map +1 -1
  10. package/dist/controller/oauth.js +3 -0
  11. package/dist/controller/oauth.js.map +1 -1
  12. package/dist/controller/utils.d.ts +16 -1
  13. package/dist/controller/utils.js +20 -8
  14. package/dist/controller/utils.js.map +1 -1
  15. package/dist/db/db.d.ts +1 -0
  16. package/dist/db/db.js +5 -0
  17. package/dist/db/db.js.map +1 -1
  18. package/dist/db/dynamoDb.d.ts +1 -0
  19. package/dist/db/dynamoDb.js +19 -6
  20. package/dist/db/dynamoDb.js.map +1 -1
  21. package/dist/db/mem.d.ts +1 -0
  22. package/dist/db/mem.js +10 -0
  23. package/dist/db/mem.js.map +1 -1
  24. package/dist/db/mongo.d.ts +1 -0
  25. package/dist/db/mongo.js +11 -0
  26. package/dist/db/mongo.js.map +1 -1
  27. package/dist/db/planetscale/entity/JacksonIndex.js.map +1 -1
  28. package/dist/db/planetscale/entity/JacksonStore.js.map +1 -1
  29. package/dist/db/planetscale/entity/JacksonTTL.js.map +1 -1
  30. package/dist/db/redis.d.ts +1 -0
  31. package/dist/db/redis.js +21 -0
  32. package/dist/db/redis.js.map +1 -1
  33. package/dist/db/sql/entity/JacksonIndex.js.map +1 -1
  34. package/dist/db/sql/entity/JacksonStore.js.map +1 -1
  35. package/dist/db/sql/entity/JacksonTTL.js.map +1 -1
  36. package/dist/db/sql/mariadb/entity/JacksonIndex.js.map +1 -1
  37. package/dist/db/sql/mariadb/entity/JacksonStore.js.map +1 -1
  38. package/dist/db/sql/mariadb/entity/JacksonTTL.js.map +1 -1
  39. package/dist/db/sql/mssql/entity/JacksonIndex.js.map +1 -1
  40. package/dist/db/sql/mssql/entity/JacksonStore.js.map +1 -1
  41. package/dist/db/sql/mssql/entity/JacksonTTL.js.map +1 -1
  42. package/dist/db/sql/sql.d.ts +1 -0
  43. package/dist/db/sql/sql.js +29 -0
  44. package/dist/db/sql/sql.js.map +1 -1
  45. package/dist/db/store.js +5 -0
  46. package/dist/db/store.js.map +1 -1
  47. package/dist/directory-sync/Base.d.ts +1 -0
  48. package/dist/directory-sync/Base.js +1 -0
  49. package/dist/directory-sync/Base.js.map +1 -1
  50. package/dist/directory-sync/DirectoryConfig.d.ts +20 -7
  51. package/dist/directory-sync/DirectoryConfig.js +53 -16
  52. package/dist/directory-sync/DirectoryConfig.js.map +1 -1
  53. package/dist/directory-sync/DirectoryGroups.js +0 -1
  54. package/dist/directory-sync/DirectoryGroups.js.map +1 -1
  55. package/dist/directory-sync/Groups.d.ts +3 -2
  56. package/dist/directory-sync/Groups.js +49 -19
  57. package/dist/directory-sync/Groups.js.map +1 -1
  58. package/dist/directory-sync/Users.d.ts +1 -1
  59. package/dist/directory-sync/Users.js +13 -9
  60. package/dist/directory-sync/Users.js.map +1 -1
  61. package/dist/directory-sync/WebhookEventsLogger.d.ts +7 -6
  62. package/dist/directory-sync/WebhookEventsLogger.js +26 -18
  63. package/dist/directory-sync/WebhookEventsLogger.js.map +1 -1
  64. package/dist/directory-sync/events.js +11 -18
  65. package/dist/directory-sync/events.js.map +1 -1
  66. package/dist/directory-sync/index.d.ts +3 -2
  67. package/dist/directory-sync/index.js +6 -5
  68. package/dist/directory-sync/index.js.map +1 -1
  69. package/dist/directory-sync/transform.d.ts +9 -5
  70. package/dist/directory-sync/transform.js +26 -2
  71. package/dist/directory-sync/transform.js.map +1 -1
  72. package/dist/directory-sync/types.d.ts +11 -3
  73. package/dist/directory-sync/utils.d.ts +2 -12
  74. package/dist/directory-sync/utils.js +1 -57
  75. package/dist/directory-sync/utils.js.map +1 -1
  76. package/dist/event/axios.js.map +1 -0
  77. package/dist/event/index.d.ts +10 -0
  78. package/dist/event/index.js +54 -0
  79. package/dist/event/index.js.map +1 -0
  80. package/dist/event/types.d.ts +21 -0
  81. package/dist/event/types.js +3 -0
  82. package/dist/event/types.js.map +1 -0
  83. package/dist/event/utils.d.ts +4 -0
  84. package/dist/event/utils.js +39 -0
  85. package/dist/event/utils.js.map +1 -0
  86. package/dist/event/webhook.d.ts +3 -0
  87. package/dist/event/webhook.js +39 -0
  88. package/dist/event/webhook.js.map +1 -0
  89. package/dist/index.js +4 -4
  90. package/dist/index.js.map +1 -1
  91. package/dist/loadConnection.js +1 -2
  92. package/dist/loadConnection.js.map +1 -1
  93. package/dist/opentelemetry/metrics.d.ts +10 -3
  94. package/dist/opentelemetry/metrics.js +38 -31
  95. package/dist/opentelemetry/metrics.js.map +1 -1
  96. package/dist/typings.d.ts +35 -12
  97. package/dist/typings.js +1 -0
  98. package/dist/typings.js.map +1 -1
  99. package/package.json +18 -17
  100. package/dist/directory-sync/axios.js.map +0 -1
  101. /package/dist/{directory-sync → event}/axios.d.ts +0 -0
  102. /package/dist/{directory-sync → event}/axios.js +0 -0
@@ -1,38 +1,45 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.init = exports.increment = void 0;
4
- const api_1 = require("@opentelemetry/api");
5
- let meter = api_1.metrics.getMeterProvider().getMeter('jackson');
6
- let counters;
3
+ exports.increment = void 0;
4
+ const metrics_1 = require("@boxyhq/metrics");
5
+ const METER = 'jackson';
6
+ const counters = {
7
+ createConnection: () => (0, metrics_1.incrementCounter)({
8
+ meter: METER,
9
+ name: 'jackson.connection.create',
10
+ counterOptions: { description: 'Number of IdP connection create requests' },
11
+ }),
12
+ getConnections: () => (0, metrics_1.incrementCounter)({
13
+ meter: METER,
14
+ name: 'jackson.connection.get',
15
+ counterOptions: { description: 'Number of IdP connections get requests' },
16
+ }),
17
+ deleteConnections: () => (0, metrics_1.incrementCounter)({
18
+ meter: METER,
19
+ name: 'jackson.connection.delete',
20
+ counterOptions: { description: 'Number of IdP connections delete requests' },
21
+ }),
22
+ oauthAuthorize: () => (0, metrics_1.incrementCounter)({
23
+ meter: METER,
24
+ name: 'jackson.oauth.authorize',
25
+ counterOptions: { description: 'Number of oauth authorize requests' },
26
+ }),
27
+ oauthToken: () => (0, metrics_1.incrementCounter)({
28
+ meter: METER,
29
+ name: 'jackson.oauth.token',
30
+ counterOptions: { description: 'Number of oauth token requests' },
31
+ }),
32
+ oauthUserInfo: () => (0, metrics_1.incrementCounter)({
33
+ meter: METER,
34
+ name: 'jackson.oauth.userinfo',
35
+ counterOptions: { description: 'Number of oauth user info requests' },
36
+ }),
37
+ };
7
38
  const increment = (action) => {
8
- const counter = counters[action];
9
- if (counter) {
10
- counter.add(1);
39
+ const counterIncrement = counters[action];
40
+ if (typeof counterIncrement === 'function') {
41
+ counterIncrement();
11
42
  }
12
43
  };
13
44
  exports.increment = increment;
14
- const init = () => {
15
- meter = api_1.metrics.getMeterProvider().getMeter('jackson');
16
- counters = {
17
- createConnection: meter.createCounter('jackson.connection.create', {
18
- description: 'Number of IdP connection create requests',
19
- }),
20
- getConnections: meter.createCounter('jackson.connection.get', {
21
- description: 'Number of IdP connections get requests',
22
- }),
23
- deleteConnections: meter.createCounter('jackson.connection.delete', {
24
- description: 'Number of IdP connections delete requests',
25
- }),
26
- oauthAuthorize: meter.createCounter('jackson.oauth.authorize', {
27
- description: 'Number of oauth authorize requests',
28
- }),
29
- oauthToken: meter.createCounter('jackson.oauth.token', {
30
- description: 'Number of oauth token requests',
31
- }),
32
- oauthUserInfo: meter.createCounter('jackson.oauth.userinfo', {
33
- description: 'Number of oauth user info requests',
34
- }),
35
- };
36
- };
37
- exports.init = init;
38
45
  //# sourceMappingURL=metrics.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../src/opentelemetry/metrics.ts"],"names":[],"mappings":";;;AAAA,4CAA6C;AAE7C,IAAI,KAAK,GAAG,aAAO,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC3D,IAAI,QAAQ,CAAC;AAEb,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,EAAE;IACnC,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,OAAO,EAAE;QACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;KAChB;AACH,CAAC,CAAC;AAgCO,8BAAS;AA9BlB,MAAM,IAAI,GAAG,GAAG,EAAE;IAChB,KAAK,GAAG,aAAO,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAEvD,QAAQ,GAAG;QACT,gBAAgB,EAAE,KAAK,CAAC,aAAa,CAAC,2BAA2B,EAAE;YACjE,WAAW,EAAE,0CAA0C;SACxD,CAAC;QAEF,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,wBAAwB,EAAE;YAC5D,WAAW,EAAE,wCAAwC;SACtD,CAAC;QAEF,iBAAiB,EAAE,KAAK,CAAC,aAAa,CAAC,2BAA2B,EAAE;YAClE,WAAW,EAAE,2CAA2C;SACzD,CAAC;QAEF,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC,yBAAyB,EAAE;YAC7D,WAAW,EAAE,oCAAoC;SAClD,CAAC;QAEF,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,qBAAqB,EAAE;YACrD,WAAW,EAAE,gCAAgC;SAC9C,CAAC;QAEF,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,wBAAwB,EAAE;YAC3D,WAAW,EAAE,oCAAoC;SAClD,CAAC;KACH,CAAC;AACJ,CAAC,CAAC;AAEkB,oBAAI"}
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;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"}
package/dist/typings.d.ts CHANGED
@@ -3,6 +3,7 @@ import type { IssuerMetadata } from 'openid-client';
3
3
  export * from './ee/federated-saml/types';
4
4
  export * from './saml-tracer/types';
5
5
  export * from './directory-sync/types';
6
+ export * from './event/types';
6
7
  interface SSOConnection {
7
8
  defaultRedirectUrl: string;
8
9
  redirectUrl: string[] | string;
@@ -57,6 +58,7 @@ export interface SAMLSSORecord extends SAMLSSOConnection {
57
58
  thumbprint?: string;
58
59
  validTo?: string;
59
60
  };
61
+ deactivated?: boolean;
60
62
  }
61
63
  export interface OIDCSSORecord extends SSOConnection {
62
64
  clientID: string;
@@ -68,6 +70,7 @@ export interface OIDCSSORecord extends SSOConnection {
68
70
  clientId?: string;
69
71
  clientSecret?: string;
70
72
  };
73
+ deactivated?: boolean;
71
74
  }
72
75
  export type ConnectionType = 'saml' | 'oidc';
73
76
  type ClientIDQuery = {
@@ -93,6 +96,28 @@ export type GetConfigQuery = ClientIDQuery | Omit<TenantQuery, 'strategy'>;
93
96
  export type DelConfigQuery = (ClientIDQuery & {
94
97
  clientSecret: string;
95
98
  }) | Omit<TenantQuery, 'strategy'>;
99
+ export type UpdateConnectionParams = TenantProduct & {
100
+ clientID: string;
101
+ clientSecret: string;
102
+ name?: string;
103
+ description?: string;
104
+ defaultRedirectUrl?: string;
105
+ redirectUrl?: string[] | string;
106
+ deactivated?: boolean;
107
+ };
108
+ export type UpdateSAMLConnectionParams = UpdateConnectionParams & {
109
+ encodedRawMetadata?: string;
110
+ metadataUrl?: string;
111
+ rawMetadata?: string;
112
+ forceAuthn?: boolean;
113
+ identifierFormat?: string;
114
+ };
115
+ export type UpdateOIDCConnectionParams = UpdateConnectionParams & {
116
+ oidcDiscoveryUrl?: string;
117
+ oidcMetadata?: IssuerMetadata;
118
+ oidcClientId?: string;
119
+ oidcClientSecret?: string;
120
+ };
96
121
  export interface IConnectionAPIController {
97
122
  /**
98
123
  * @deprecated Use `createSAMLConnection` instead.
@@ -103,18 +128,9 @@ export interface IConnectionAPIController {
103
128
  /**
104
129
  * @deprecated Use `updateSAMLConnection` instead.
105
130
  */
106
- updateConfig(body: SAMLSSOConnection & {
107
- clientID: string;
108
- clientSecret: string;
109
- }): Promise<void>;
110
- updateSAMLConnection(body: (SAMLSSOConnectionWithRawMetadata | SAMLSSOConnectionWithEncodedMetadata) & {
111
- clientID: string;
112
- clientSecret: string;
113
- }): Promise<void>;
114
- updateOIDCConnection(body: (OIDCSSOConnectionWithDiscoveryUrl | OIDCSSOConnectionWithMetadata) & {
115
- clientID: string;
116
- clientSecret: string;
117
- }): Promise<void>;
131
+ updateConfig(body: UpdateSAMLConnectionParams): Promise<void>;
132
+ updateSAMLConnection(body: UpdateSAMLConnectionParams): Promise<void>;
133
+ updateOIDCConnection(body: UpdateOIDCConnectionParams): Promise<void>;
118
134
  getConnections(body: GetConnectionsQuery): Promise<Array<SAMLSSORecord | OIDCSSORecord>>;
119
135
  getIDPEntityID(body: GetIDPEntityIDBody): string;
120
136
  /**
@@ -273,6 +289,7 @@ export interface DatabaseDriver {
273
289
  put(namespace: string, key: string, val: any, ttl: number, ...indexes: Index[]): Promise<any>;
274
290
  delete(namespace: string, key: string): Promise<any>;
275
291
  getByIndex(namespace: string, idx: Index, pageOffset?: number, pageLimit?: number, pageToken?: string): Promise<Records>;
292
+ deleteMany(namespace: string, keys: string[]): Promise<void>;
276
293
  }
277
294
  export interface Storable {
278
295
  getAll(pageOffset?: number, pageLimit?: number, pageToken?: string): Promise<Records>;
@@ -280,6 +297,7 @@ export interface Storable {
280
297
  put(key: string, val: any, ...indexes: Index[]): Promise<any>;
281
298
  delete(key: string): Promise<any>;
282
299
  getByIndex(idx: Index, pageOffset?: number, pageLimit?: number, pageToken?: string): Promise<Records>;
300
+ deleteMany(keys: string[]): Promise<void>;
283
301
  }
284
302
  export interface DatabaseStore {
285
303
  store(namespace: string): Storable;
@@ -340,6 +358,7 @@ export interface JacksonOption {
340
358
  host?: string;
341
359
  adminToken?: string;
342
360
  };
361
+ webhook?: Webhook;
343
362
  }
344
363
  export interface SLORequestParams {
345
364
  nameId: string;
@@ -422,3 +441,7 @@ export type AdminPortalBranding = {
422
441
  primaryColor: string | null;
423
442
  companyName: string | null;
424
443
  };
444
+ export type Webhook = {
445
+ endpoint: string;
446
+ secret: string;
447
+ };
package/dist/typings.js CHANGED
@@ -17,4 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./ee/federated-saml/types"), exports);
18
18
  __exportStar(require("./saml-tracer/types"), exports);
19
19
  __exportStar(require("./directory-sync/types"), exports);
20
+ __exportStar(require("./event/types"), exports);
20
21
  //# sourceMappingURL=typings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"typings.js","sourceRoot":"","sources":["../src/typings.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,4DAA0C;AAC1C,sDAAoC;AACpC,yDAAuC"}
1
+ {"version":3,"file":"typings.js","sourceRoot":"","sources":["../src/typings.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAGA,4DAA0C;AAC1C,sDAAoC;AACpC,yDAAuC;AACvC,gDAA8B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@boxyhq/saml-jackson",
3
- "version": "1.9.3",
3
+ "version": "1.9.6",
4
4
  "description": "SAML Jackson library",
5
5
  "keywords": [
6
6
  "SAML 2.0"
@@ -40,18 +40,18 @@
40
40
  "statements": 70
41
41
  },
42
42
  "dependencies": {
43
- "@aws-sdk/client-dynamodb": "3.259.0",
44
- "@aws-sdk/util-dynamodb": "3.259.0",
45
- "@aws-sdk/credential-providers": "3.289.0",
46
- "@boxyhq/saml20": "1.1.3",
47
- "@boxyhq/error-code-mnemonic": "0.1.0",
48
- "@opentelemetry/api": "1.4.0",
49
- "axios": "1.3.4",
43
+ "@aws-sdk/client-dynamodb": "3.309.0",
44
+ "@aws-sdk/credential-providers": "3.309.0",
45
+ "@aws-sdk/util-dynamodb": "3.309.0",
46
+ "@boxyhq/error-code-mnemonic": "0.1.1",
47
+ "@boxyhq/metrics": "0.1.0",
48
+ "@boxyhq/saml20": "1.1.5",
49
+ "axios": "1.3.5",
50
50
  "jose": "4.13.1",
51
51
  "lodash": "4.17.21",
52
- "marked": "4.2.12",
52
+ "marked": "4.3.0",
53
53
  "mixpanel": "0.17.0",
54
- "mongodb": "5.1.0",
54
+ "mongodb": "5.2.0",
55
55
  "mssql": "9.1.1",
56
56
  "mysql2": "3.2.0",
57
57
  "node-forge": "1.3.1",
@@ -60,23 +60,24 @@
60
60
  "redis": "4.6.5",
61
61
  "reflect-metadata": "0.1.13",
62
62
  "ripemd160": "2.0.2",
63
- "typeorm": "0.3.12",
64
- "xml2js": "0.4.23",
63
+ "typeorm": "0.3.14",
64
+ "xml2js": "0.5.0",
65
65
  "xmlbuilder": "15.1.1"
66
66
  },
67
67
  "devDependencies": {
68
68
  "@faker-js/faker": "7.6.0",
69
- "@types/node": "18.15.1",
69
+ "@types/node": "18.15.11",
70
70
  "@types/sinon": "10.0.13",
71
71
  "@types/tap": "15.0.8",
72
72
  "cross-env": "7.0.3",
73
- "sinon": "15.0.2",
73
+ "sinon": "15.0.3",
74
74
  "tap": "16.3.4",
75
75
  "ts-node": "10.9.1",
76
- "tsconfig-paths": "4.1.2",
77
- "typescript": "4.9.5"
76
+ "tsconfig-paths": "4.2.0",
77
+ "typescript": "5.0.4"
78
78
  },
79
79
  "engines": {
80
- "node": ">=16"
80
+ "node": ">=16",
81
+ "npm": ">=8"
81
82
  }
82
83
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"axios.js","sourceRoot":"","sources":["../../src/directory-sync/axios.ts"],"names":[],"mappings":";;;;;AAAA,kDAA0B;AAE1B,MAAM,KAAK,GAAG,CAAC,CAAC;AAChB,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,aAAa,GAAG,eAAK,CAAC,MAAM,EAAE,CAAC;AAErC,mDAAmD;AACnD,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAQ,EAAE,EAAE;IAC9D,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAE1B,IAAI,CAAC,MAAM,EAAE;QACX,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAC5B;IAED,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IAE/C,IAAI,MAAM,CAAC,YAAY,IAAI,KAAK,EAAE;QAChC,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KAC5B;IAED,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC;IAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,OAAO;QAC3C,UAAU,CAAC;YACT,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC,EAAE,UAAU,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,IAAI,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,qCAAqC,MAAM,CAAC,GAAG,eAAe,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAClG,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,kBAAe,aAAa,CAAC"}
File without changes
File without changes