@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.
- package/dist/controller/api.d.ts +6 -10
- package/dist/controller/api.js +29 -6
- package/dist/controller/api.js.map +1 -1
- package/dist/controller/connection/oidc.d.ts +2 -5
- package/dist/controller/connection/oidc.js +4 -0
- package/dist/controller/connection/oidc.js.map +1 -1
- package/dist/controller/connection/saml.d.ts +2 -5
- package/dist/controller/connection/saml.js +8 -1
- package/dist/controller/connection/saml.js.map +1 -1
- package/dist/controller/oauth.js +3 -0
- package/dist/controller/oauth.js.map +1 -1
- package/dist/controller/utils.d.ts +16 -1
- package/dist/controller/utils.js +20 -8
- package/dist/controller/utils.js.map +1 -1
- package/dist/db/db.d.ts +1 -0
- package/dist/db/db.js +5 -0
- package/dist/db/db.js.map +1 -1
- package/dist/db/dynamoDb.d.ts +1 -0
- package/dist/db/dynamoDb.js +19 -6
- package/dist/db/dynamoDb.js.map +1 -1
- package/dist/db/mem.d.ts +1 -0
- package/dist/db/mem.js +10 -0
- package/dist/db/mem.js.map +1 -1
- package/dist/db/mongo.d.ts +1 -0
- package/dist/db/mongo.js +11 -0
- package/dist/db/mongo.js.map +1 -1
- package/dist/db/planetscale/entity/JacksonIndex.js.map +1 -1
- package/dist/db/planetscale/entity/JacksonStore.js.map +1 -1
- package/dist/db/planetscale/entity/JacksonTTL.js.map +1 -1
- package/dist/db/redis.d.ts +1 -0
- package/dist/db/redis.js +21 -0
- package/dist/db/redis.js.map +1 -1
- package/dist/db/sql/entity/JacksonIndex.js.map +1 -1
- package/dist/db/sql/entity/JacksonStore.js.map +1 -1
- package/dist/db/sql/entity/JacksonTTL.js.map +1 -1
- package/dist/db/sql/mariadb/entity/JacksonIndex.js.map +1 -1
- package/dist/db/sql/mariadb/entity/JacksonStore.js.map +1 -1
- package/dist/db/sql/mariadb/entity/JacksonTTL.js.map +1 -1
- package/dist/db/sql/mssql/entity/JacksonIndex.js.map +1 -1
- package/dist/db/sql/mssql/entity/JacksonStore.js.map +1 -1
- package/dist/db/sql/mssql/entity/JacksonTTL.js.map +1 -1
- package/dist/db/sql/sql.d.ts +1 -0
- package/dist/db/sql/sql.js +29 -0
- package/dist/db/sql/sql.js.map +1 -1
- package/dist/db/store.js +5 -0
- package/dist/db/store.js.map +1 -1
- package/dist/directory-sync/Base.d.ts +1 -0
- package/dist/directory-sync/Base.js +1 -0
- package/dist/directory-sync/Base.js.map +1 -1
- package/dist/directory-sync/DirectoryConfig.d.ts +20 -7
- package/dist/directory-sync/DirectoryConfig.js +53 -16
- package/dist/directory-sync/DirectoryConfig.js.map +1 -1
- package/dist/directory-sync/DirectoryGroups.js +0 -1
- package/dist/directory-sync/DirectoryGroups.js.map +1 -1
- package/dist/directory-sync/Groups.d.ts +3 -2
- package/dist/directory-sync/Groups.js +49 -19
- package/dist/directory-sync/Groups.js.map +1 -1
- package/dist/directory-sync/Users.d.ts +1 -1
- package/dist/directory-sync/Users.js +13 -9
- package/dist/directory-sync/Users.js.map +1 -1
- package/dist/directory-sync/WebhookEventsLogger.d.ts +7 -6
- package/dist/directory-sync/WebhookEventsLogger.js +26 -18
- package/dist/directory-sync/WebhookEventsLogger.js.map +1 -1
- package/dist/directory-sync/events.js +11 -18
- package/dist/directory-sync/events.js.map +1 -1
- package/dist/directory-sync/index.d.ts +3 -2
- package/dist/directory-sync/index.js +6 -5
- package/dist/directory-sync/index.js.map +1 -1
- package/dist/directory-sync/transform.d.ts +9 -5
- package/dist/directory-sync/transform.js +26 -2
- package/dist/directory-sync/transform.js.map +1 -1
- package/dist/directory-sync/types.d.ts +11 -3
- package/dist/directory-sync/utils.d.ts +2 -12
- package/dist/directory-sync/utils.js +1 -57
- package/dist/directory-sync/utils.js.map +1 -1
- package/dist/event/axios.js.map +1 -0
- package/dist/event/index.d.ts +10 -0
- package/dist/event/index.js +54 -0
- package/dist/event/index.js.map +1 -0
- package/dist/event/types.d.ts +21 -0
- package/dist/event/types.js +3 -0
- package/dist/event/types.js.map +1 -0
- package/dist/event/utils.d.ts +4 -0
- package/dist/event/utils.js +39 -0
- package/dist/event/utils.js.map +1 -0
- package/dist/event/webhook.d.ts +3 -0
- package/dist/event/webhook.js +39 -0
- package/dist/event/webhook.js.map +1 -0
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/loadConnection.js +1 -2
- package/dist/loadConnection.js.map +1 -1
- package/dist/opentelemetry/metrics.d.ts +10 -3
- package/dist/opentelemetry/metrics.js +38 -31
- package/dist/opentelemetry/metrics.js.map +1 -1
- package/dist/typings.d.ts +35 -12
- package/dist/typings.js +1 -0
- package/dist/typings.js.map +1 -1
- package/package.json +18 -17
- package/dist/directory-sync/axios.js.map +0 -1
- /package/dist/{directory-sync → event}/axios.d.ts +0 -0
- /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.
|
4
|
-
const
|
5
|
-
|
6
|
-
|
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
|
9
|
-
if (
|
10
|
-
|
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,
|
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:
|
107
|
-
|
108
|
-
|
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
|
package/dist/typings.js.map
CHANGED
@@ -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
|
+
"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.
|
44
|
-
"@aws-sdk/
|
45
|
-
"@aws-sdk/
|
46
|
-
"@boxyhq/
|
47
|
-
"@boxyhq/
|
48
|
-
"@
|
49
|
-
"axios": "1.3.
|
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.
|
52
|
+
"marked": "4.3.0",
|
53
53
|
"mixpanel": "0.17.0",
|
54
|
-
"mongodb": "5.
|
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.
|
64
|
-
"xml2js": "0.
|
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.
|
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.
|
73
|
+
"sinon": "15.0.3",
|
74
74
|
"tap": "16.3.4",
|
75
75
|
"ts-node": "10.9.1",
|
76
|
-
"tsconfig-paths": "4.
|
77
|
-
"typescript": "
|
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
|