@pvh-afl/graphql 1.2.5 → 1.2.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/customer/customer.resolver.d.ts +1 -1
- package/dist/customer/customer.resolver.d.ts.map +1 -1
- package/dist/customer/customer.resolver.js +8 -4
- package/dist/customer/customer.resolver.js.map +1 -1
- package/dist/customer/customer.service.d.ts +26 -4
- package/dist/customer/customer.service.d.ts.map +1 -1
- package/dist/customer/customer.service.js +58 -8
- package/dist/customer/customer.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -10,7 +10,7 @@ interface GqlContext {
|
|
|
10
10
|
export declare class CustomerResolver {
|
|
11
11
|
private readonly customerService;
|
|
12
12
|
constructor(customerService: CustomerService);
|
|
13
|
-
customer(ctx: GqlContext, customerAccessToken: string): Promise<Customer
|
|
13
|
+
customer(ctx: GqlContext, customerAccessToken: string): Promise<Customer>;
|
|
14
14
|
customerLogin(ctx: GqlContext, email: string, password: string): Promise<CustomerLoginResult>;
|
|
15
15
|
customerAccessTokenRenew(ctx: GqlContext, customerAccessToken: string): Promise<CustomerAccessTokenRenewResult>;
|
|
16
16
|
customerUpdate(ctx: GqlContext, user: AuthUser, input: CustomerUpdateInput): Promise<Customer>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customer.resolver.d.ts","sourceRoot":"","sources":["../../src/customer/customer.resolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0C,QAAQ,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEtH,UAAU,UAAU;IAClB,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBACa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,eAAe;
|
|
1
|
+
{"version":3,"file":"customer.resolver.d.ts","sourceRoot":"","sources":["../../src/customer/customer.resolver.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0C,QAAQ,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEtH,UAAU,UAAU;IAClB,GAAG,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBACa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,eAAe;gBAAf,eAAe,EAAE,eAAe;IAiBvD,QAAQ,CACD,GAAG,EAAE,UAAU,EAK1B,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,QAAQ,CAAC;IAkBd,aAAa,CACN,GAAG,EAAE,UAAU,EAE1B,KAAK,EAAE,MAAM,EAEb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,mBAAmB,CAAC;IAezB,wBAAwB,CACjB,GAAG,EAAE,UAAU,EAK1B,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,8BAA8B,CAAC;IAmBpC,cAAc,CACP,GAAG,EAAE,UAAU,EACX,IAAI,EAAE,QAAQ,EAK7B,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,QAAQ,CAAC;CAIrB"}
|
|
@@ -32,14 +32,18 @@ let CustomerResolver = class CustomerResolver {
|
|
|
32
32
|
exports.CustomerResolver = CustomerResolver;
|
|
33
33
|
tslib_1.__decorate([
|
|
34
34
|
(0, graphql_1.Query)(() => customer_types_1.Customer, {
|
|
35
|
-
nullable: true,
|
|
36
35
|
description: `Fetch the customer's profile (including gender and birthDate)
|
|
37
36
|
from a Storefront customerAccessToken.
|
|
38
37
|
|
|
39
38
|
Use this to rehydrate the profile from a stored token without re-authenticating
|
|
40
|
-
(e.g. on app reload or when opening the profile screen).
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
(e.g. on app reload or when opening the profile screen).
|
|
40
|
+
|
|
41
|
+
Errors distinguish a dead session from a transient failure, so the client knows
|
|
42
|
+
whether to log the user out or retry:
|
|
43
|
+
- 401 TOKEN_INVALID — the token was rejected by Shopify (expired, revoked, or
|
|
44
|
+
superseded by a login on another device). Route the user back to login.
|
|
45
|
+
- 502 / 503 — the profile could not be fetched right now (Shopify hiccup or
|
|
46
|
+
misconfig). The session may well be fine; retry rather than logging out.`,
|
|
43
47
|
}),
|
|
44
48
|
(0, common_1.UseGuards)(core_1.TenantGuard),
|
|
45
49
|
tslib_1.__param(0, (0, graphql_1.Context)()),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customer.resolver.js","sourceRoot":"","sources":["../../src/customer/customer.resolver.ts"],"names":[],"mappings":";;;;AAAA,6CAA2E;AAC3E,2CAA2C;AAC3C,wCAAiF;AACjF,yDAAqD;AACrD,qDAAsH;AAQ/G,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IACE;IAA7B,YAA6B,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;IAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"customer.resolver.js","sourceRoot":"","sources":["../../src/customer/customer.resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,11 +38,33 @@ export declare class CustomerService {
|
|
|
38
38
|
* Fetch a customer's profile from a Storefront access token.
|
|
39
39
|
*
|
|
40
40
|
* Lets the frontend rehydrate the profile (including gender / birth_date)
|
|
41
|
-
* from a stored token without re-authenticating.
|
|
42
|
-
*
|
|
43
|
-
*
|
|
41
|
+
* from a stored token without re-authenticating.
|
|
42
|
+
*
|
|
43
|
+
* Failures are split by whose fault they are — the same discipline as
|
|
44
|
+
* {@link AuthService.issueToken} on the REST side — because the client's
|
|
45
|
+
* response has to differ:
|
|
46
|
+
*
|
|
47
|
+
* - **401** — Shopify positively rejected the token (a null customer for a
|
|
48
|
+
* non-empty token, surfaced as CUSTOMER_NOT_FOUND). The token is dead — e.g.
|
|
49
|
+
* it was superseded by a login on another device — and the customer must log
|
|
50
|
+
* in again.
|
|
51
|
+
* - **503 / 502** — the call to Shopify failed, or we are misconfigured. The
|
|
52
|
+
* token may well be fine, so the client should retry rather than sign out.
|
|
53
|
+
*
|
|
54
|
+
* The earlier behaviour collapsed *both* into `null`, which meant a rate
|
|
55
|
+
* limit, a timeout or a Shopify incident looked identical to an expired token
|
|
56
|
+
* and silently logged the customer out.
|
|
57
|
+
*/
|
|
58
|
+
getProfile(brand: string, customerAccessToken: string): Promise<Customer>;
|
|
59
|
+
/**
|
|
60
|
+
* Turn a failed profile fetch into the right exception.
|
|
61
|
+
*
|
|
62
|
+
* Only a definite Shopify rejection (CUSTOMER_NOT_FOUND — a null customer for
|
|
63
|
+
* the supplied token) costs the customer their session. Everything else means
|
|
64
|
+
* the token was never actually evaluated, so we surface a retryable error
|
|
65
|
+
* rather than a 401.
|
|
44
66
|
*/
|
|
45
|
-
|
|
67
|
+
private toProfileFailure;
|
|
46
68
|
/**
|
|
47
69
|
* Update the logged-in customer's profile (firstName, lastName, gender,
|
|
48
70
|
* birth_date).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customer.service.d.ts","sourceRoot":"","sources":["../../src/customer/customer.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"customer.service.d.ts","sourceRoot":"","sources":["../../src/customer/customer.service.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,kBAAkB,EAGlB,mBAAmB,EACnB,sBAAsB,EAGvB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,QAAQ,EACR,8BAA8B,EAC9B,mBAAmB,EACnB,mBAAmB,EAEpB,MAAM,kBAAkB,CAAC;AAE1B,qBACa,eAAe;IAExB,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAFhB,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,mBAAmB,EACjC,gBAAgB,EAAE,sBAAsB;IAG3D,OAAO,CAAC,kBAAkB;IAQ1B;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAOhB;;;OAGG;IACH,OAAO,CAAC,UAAU;IAalB;;;;;;;;OAQG;IACG,KAAK,CACT,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,mBAAmB,CAAC;IAsC/B;;;;;;OAMG;IACG,UAAU,CACd,KAAK,EAAE,MAAM,EACb,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,8BAA8B,CAAC;IA+B1C;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,UAAU,CACd,KAAK,EAAE,MAAM,EACb,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,QAAQ,CAAC;IAwCpB;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IAoCxB;;;;;;;;;OASG;IACG,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,QAAQ,CAAC;CAgCrB"}
|
|
@@ -123,19 +123,28 @@ let CustomerService = class CustomerService {
|
|
|
123
123
|
* Fetch a customer's profile from a Storefront access token.
|
|
124
124
|
*
|
|
125
125
|
* Lets the frontend rehydrate the profile (including gender / birth_date)
|
|
126
|
-
* from a stored token without re-authenticating.
|
|
127
|
-
*
|
|
128
|
-
*
|
|
126
|
+
* from a stored token without re-authenticating.
|
|
127
|
+
*
|
|
128
|
+
* Failures are split by whose fault they are — the same discipline as
|
|
129
|
+
* {@link AuthService.issueToken} on the REST side — because the client's
|
|
130
|
+
* response has to differ:
|
|
131
|
+
*
|
|
132
|
+
* - **401** — Shopify positively rejected the token (a null customer for a
|
|
133
|
+
* non-empty token, surfaced as CUSTOMER_NOT_FOUND). The token is dead — e.g.
|
|
134
|
+
* it was superseded by a login on another device — and the customer must log
|
|
135
|
+
* in again.
|
|
136
|
+
* - **503 / 502** — the call to Shopify failed, or we are misconfigured. The
|
|
137
|
+
* token may well be fine, so the client should retry rather than sign out.
|
|
138
|
+
*
|
|
139
|
+
* The earlier behaviour collapsed *both* into `null`, which meant a rate
|
|
140
|
+
* limit, a timeout or a Shopify incident looked identical to an expired token
|
|
141
|
+
* and silently logged the customer out.
|
|
129
142
|
*/
|
|
130
143
|
async getProfile(brand, customerAccessToken) {
|
|
131
144
|
const commerce = this.getCommerceService(brand);
|
|
132
145
|
const customerResult = await commerce.getCustomer(customerAccessToken);
|
|
133
146
|
if (!customerResult.success || !customerResult.data) {
|
|
134
|
-
|
|
135
|
-
brand,
|
|
136
|
-
errorCode: customerResult.error?.code,
|
|
137
|
-
});
|
|
138
|
-
return null;
|
|
147
|
+
throw this.toProfileFailure(brand, customerResult.error?.code, customerResult.error?.message);
|
|
139
148
|
}
|
|
140
149
|
const customer = customerResult.data;
|
|
141
150
|
const facts = await this.adminService.getCustomerFacts(brand, customer.id);
|
|
@@ -160,6 +169,47 @@ let CustomerService = class CustomerService {
|
|
|
160
169
|
memberId: memberId ?? undefined,
|
|
161
170
|
};
|
|
162
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* Turn a failed profile fetch into the right exception.
|
|
174
|
+
*
|
|
175
|
+
* Only a definite Shopify rejection (CUSTOMER_NOT_FOUND — a null customer for
|
|
176
|
+
* the supplied token) costs the customer their session. Everything else means
|
|
177
|
+
* the token was never actually evaluated, so we surface a retryable error
|
|
178
|
+
* rather than a 401.
|
|
179
|
+
*/
|
|
180
|
+
toProfileFailure(brand, code, message) {
|
|
181
|
+
if (code === 'CUSTOMER_NOT_FOUND') {
|
|
182
|
+
// One message for every rejection reason (expired vs. superseded vs. never
|
|
183
|
+
// existed) so nothing leaks to someone probing tokens.
|
|
184
|
+
core_1.logger.info('Customer profile fetch rejected (invalid/expired token)', {
|
|
185
|
+
brand,
|
|
186
|
+
});
|
|
187
|
+
return new common_1.UnauthorizedException({
|
|
188
|
+
code: 'TOKEN_INVALID',
|
|
189
|
+
message: 'Invalid or expired customer access token',
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
if (code === 'NOT_CONFIGURED') {
|
|
193
|
+
core_1.logger.error('Customer profile fetch failed: commerce misconfigured', {
|
|
194
|
+
brand,
|
|
195
|
+
});
|
|
196
|
+
return new common_1.ServiceUnavailableException({
|
|
197
|
+
code: 'NOT_CONFIGURED',
|
|
198
|
+
message: 'Profile is temporarily unavailable',
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
// Rate limits, timeouts, 5xx, GraphQL throttling — the token was never
|
|
202
|
+
// evaluated, so the client should retry rather than be signed out.
|
|
203
|
+
core_1.logger.error('Customer profile fetch failed upstream', {
|
|
204
|
+
brand,
|
|
205
|
+
errorCode: code,
|
|
206
|
+
errorMessage: message,
|
|
207
|
+
});
|
|
208
|
+
return new common_1.BadGatewayException({
|
|
209
|
+
code: 'PROFILE_FETCH_FAILED',
|
|
210
|
+
message: 'Could not fetch the profile right now. Please try again.',
|
|
211
|
+
});
|
|
212
|
+
}
|
|
163
213
|
/**
|
|
164
214
|
* Update the logged-in customer's profile (firstName, lastName, gender,
|
|
165
215
|
* birth_date).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customer.service.js","sourceRoot":"","sources":["../../src/customer/customer.service.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"customer.service.js","sourceRoot":"","sources":["../../src/customer/customer.service.ts"],"names":[],"mappings":";;;;AAAA,2CAKwB;AACxB,wCAQuB;AACvB,qDAM0B;AAGnB,IAAM,eAAe,GAArB,MAAM,eAAe;IAEP;IACA;IACA;IAHnB,YACmB,kBAAsC,EACtC,YAAiC,EACjC,gBAAwC;QAFxC,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,iBAAY,GAAZ,YAAY,CAAqB;QACjC,qBAAgB,GAAhB,gBAAgB,CAAwB;IACxD,CAAC;IAEI,kBAAkB,CAAC,KAAa;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,kDAAkD,KAAK,EAAE,CAAC,CAAC;QAC7E,CAAC;QACD,OAAO,QAAuC,CAAC;IACjD,CAAC;IAED;;;OAGG;IACK,QAAQ,CAAC,KAAc;QAC7B,IAAI,KAAK,KAAK,uBAAM,CAAC,IAAI,IAAI,KAAK,KAAK,uBAAM,CAAC,MAAM,EAAE,CAAC;YACrD,OAAO,KAAe,CAAC;QACzB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;OAGG;IACK,UAAU,CAAC,QAA0B,EAAE,KAAoB;QACjE,OAAO;YACL,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,SAAS;YAClC,SAAS,EAAE,QAAQ,CAAC,SAAS,IAAI,SAAS;YAC1C,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,SAAS;YACxC,KAAK,EAAE,QAAQ,CAAC,KAAK,IAAI,SAAS;YAClC,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;YACnC,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,KAAK,CACT,KAAa,EACb,KAAa,EACb,QAAgB;QAEhB,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAEhD,2DAA2D;QAC3D,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,yBAAyB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC9E,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAC9C,aAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE;gBACnC,KAAK;gBACL,SAAS,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI;aACnC,CAAC,CAAC;YACH,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,IAAI,2BAA2B,CAAC,CAAC;QAC7E,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC;QAEpD,6CAA6C;QAC7C,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC/D,IAAI,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YACpD,MAAM,IAAI,KAAK,CACb,cAAc,CAAC,KAAK,EAAE,OAAO,IAAI,kCAAkC,CACpE,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC;QAErC,oEAAoE;QACpE,qEAAqE;QACrE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAE3E,aAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QAEtE,OAAO;YACL,mBAAmB,EAAE,WAAW;YAChC,SAAS;YACT,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC;SAC3C,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,UAAU,CACd,KAAa,EACb,mBAA2B;QAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAEhD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,CAAC;QAC5E,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACpC,aAAM,CAAC,IAAI,CAAC,+BAA+B,EAAE;gBAC3C,KAAK;gBACL,SAAS,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI;aAC9B,CAAC,CAAC;YACH,2EAA2E;YAC3E,uEAAuE;YACvE,4EAA4E;YAC5E,yDAAyD;YACzD,IAAI,MAAM,CAAC,KAAK,EAAE,IAAI,KAAK,mCAAmC,EAAE,CAAC;gBAC/D,MAAM,IAAI,8BAAqB,CAAC;oBAC9B,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,wDAAwD;iBAClE,CAAC,CAAC;YACL,CAAC;YACD,MAAM,IAAI,oCAA2B,CAAC;gBACpC,IAAI,EAAE,mBAAmB;gBACzB,OAAO,EAAE,0DAA0D;aACpE,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW;YAC5C,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS;SACjC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,KAAK,CAAC,UAAU,CACd,KAAa,EACb,mBAA2B;QAE3B,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAEhD,MAAM,cAAc,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;QACvE,IAAI,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YACpD,MAAM,IAAI,CAAC,gBAAgB,CACzB,KAAK,EACL,cAAc,CAAC,KAAK,EAAE,IAAI,EAC1B,cAAc,CAAC,KAAK,EAAE,OAAO,CAC9B,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC;QACrC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QAE3E,yEAAyE;QACzE,2EAA2E;QAC3E,6DAA6D;QAC7D,IAAI,QAAQ,GAAkB,IAAI,CAAC;QACnC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CACzD,KAAK,EACL,QAAQ,CAAC,KAAK,CACf,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,aAAM,CAAC,IAAI,CAAC,wDAAwD,EAAE;oBACpE,KAAK;oBACL,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;iBAC1D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO;YACL,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC;YACnC,qBAAqB,EAAE,QAAQ,IAAI,IAAI;YACvC,QAAQ,EAAE,QAAQ,IAAI,SAAS;SAChC,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACK,gBAAgB,CAAC,KAAa,EAAE,IAAa,EAAE,OAAgB;QACrE,IAAI,IAAI,KAAK,oBAAoB,EAAE,CAAC;YAClC,2EAA2E;YAC3E,uDAAuD;YACvD,aAAM,CAAC,IAAI,CAAC,yDAAyD,EAAE;gBACrE,KAAK;aACN,CAAC,CAAC;YACH,OAAO,IAAI,8BAAqB,CAAC;gBAC/B,IAAI,EAAE,eAAe;gBACrB,OAAO,EAAE,0CAA0C;aACpD,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,KAAK,gBAAgB,EAAE,CAAC;YAC9B,aAAM,CAAC,KAAK,CAAC,uDAAuD,EAAE;gBACpE,KAAK;aACN,CAAC,CAAC;YACH,OAAO,IAAI,oCAA2B,CAAC;gBACrC,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,oCAAoC;aAC9C,CAAC,CAAC;QACL,CAAC;QAED,uEAAuE;QACvE,mEAAmE;QACnE,aAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE;YACrD,KAAK;YACL,SAAS,EAAE,IAAI;YACf,YAAY,EAAE,OAAO;SACtB,CAAC,CAAC;QACH,OAAO,IAAI,4BAAmB,CAAC;YAC7B,IAAI,EAAE,sBAAsB;YAC5B,OAAO,EAAE,0DAA0D;SACpE,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,aAAa,CACjB,KAAa,EACb,UAAkB,EAClB,KAA0B;QAE1B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE;YAC7E,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,IAAI,mCAAmC,CAAC,CAAC;QAC7E,CAAC;QAED,uEAAuE;QACvE,0EAA0E;QAC1E,6EAA6E;QAC7E,oDAAoD;QACpD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAClD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC;YAChD,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC;SACtD,CAAC,CAAC;QACH,MAAM,KAAK,GAAqB,SAAS,IAAI;YAC3C,EAAE,EAAE,UAAU;YACd,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;YAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI;YAChC,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;SACzE,CAAC;QAEF,aAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QAE/D,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IAC9C,CAAC;CACF,CAAA;AAjSY,0CAAe;0BAAf,eAAe;IAD3B,IAAA,mBAAU,GAAE;6CAG4B,yBAAkB;QACxB,0BAAmB;QACf,6BAAsB;GAJhD,eAAe,CAiS3B"}
|