@makerx/graphql-core 1.0.0 → 1.2.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.
package/context.d.ts CHANGED
@@ -7,6 +7,7 @@ export interface GraphQLContext<TLogger extends Logger = Logger, TRequestInfo ex
7
7
  user: TUser;
8
8
  started: number;
9
9
  }
10
+ export type AnyGraphqlContext = GraphQLContext<any, any, any>;
10
11
  export interface BaseRequestInfo extends Record<string, unknown> {
11
12
  requestId: string;
12
13
  protocol: 'http' | 'https' | 'ws';
@@ -46,7 +47,8 @@ export interface JwtPayload {
46
47
  iat?: number | undefined;
47
48
  jti?: string | undefined;
48
49
  }
49
- export type CreateUser<T = User | undefined> = (input: Omit<ContextInput, 'createUser'>) => Promise<T>;
50
+ export type InferUserFromContext<TContext extends AnyGraphqlContext> = TContext extends GraphQLContext<any, any, infer TUser> ? TUser : never;
51
+ export type CreateUser<T = User | undefined> = (input: Omit<ContextInput, 'createUser'>) => Promise<T> | T;
50
52
  export interface ContextInput {
51
53
  req: Request;
52
54
  claims?: JwtPayload;
@@ -56,13 +58,14 @@ export interface ContextInput {
56
58
  export type CreateContext<TContext = GraphQLContext> = (input: ContextInput) => Promise<TContext>;
57
59
  export type CreateRequestLogger = (requestMetadata: Record<string, unknown>) => Logger;
58
60
  export type AugmentRequestInfo = (input: ContextInput) => Record<string, unknown>;
59
- export interface CreateContextConfig<TContext = GraphQLContext> {
61
+ export interface CreateContextConfig<TContext extends AnyGraphqlContext = GraphQLContext> {
60
62
  requestLogger: CreateRequestLogger | Logger;
61
63
  augmentRequestInfo?: AugmentRequestInfo;
62
64
  claimsToLog?: string[];
63
- createUser?: CreateUser;
65
+ createUser?: CreateUser<InferUserFromContext<TContext>>;
64
66
  requestInfoToLog?: Array<keyof RequestInfo>;
65
67
  augmentContext?: (context: TContext) => Record<string, unknown> | Promise<Record<string, unknown>>;
66
68
  }
67
- export declare const createContextFactory: <TContext extends GraphQLContext<Logger, RequestInfo, User | undefined> = GraphQLContext<Logger, RequestInfo, User | undefined>>({ requestLogger, augmentRequestInfo, claimsToLog, createUser, requestInfoToLog, augmentContext, }: CreateContextConfig<TContext>) => CreateContext<TContext>;
69
+ export declare const createContextFactory: <TContext extends AnyGraphqlContext = GraphQLContext<Logger, RequestInfo, User | undefined>>({ requestLogger, augmentRequestInfo, claimsToLog, createUser, requestInfoToLog, augmentContext, }: CreateContextConfig<TContext>) => CreateContext<TContext>;
70
+ export declare const defaultCreateUser: CreateUser<User | undefined>;
68
71
  //# sourceMappingURL=context.d.ts.map
package/context.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
package/context.js CHANGED
@@ -3,11 +3,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.createContextFactory = void 0;
6
+ exports.defaultCreateUser = exports.createContextFactory = void 0;
7
7
  const crypto_1 = require("crypto");
8
8
  const lodash_pick_1 = __importDefault(require("lodash.pick"));
9
9
  const User_1 = require("./User");
10
- const createContextFactory = ({ requestLogger, augmentRequestInfo, claimsToLog, createUser = defaultCreateUser, requestInfoToLog, augmentContext, }) => {
10
+ const createContextFactory = ({ requestLogger, augmentRequestInfo, claimsToLog, createUser, requestInfoToLog, augmentContext, }) => {
11
11
  // the function that creates the GraphQL context
12
12
  return async (input) => {
13
13
  const { req, claims, context } = input;
@@ -76,4 +76,5 @@ const defaultCreateUser = ({ req, claims }) => {
76
76
  const accessToken = req.headers.authorization?.startsWith('Bearer') ? req.headers.authorization?.substring(7) ?? '' : '';
77
77
  return Promise.resolve(new User_1.User(claims, accessToken));
78
78
  };
79
+ exports.defaultCreateUser = defaultCreateUser;
79
80
  //# sourceMappingURL=context.js.map
package/context.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -3,4 +3,7 @@ export * from './User';
3
3
  export * from './utils';
4
4
  export * from './logging';
5
5
  export * from './subscriptions';
6
+ export * from './schema-util';
7
+ export * from './shield';
8
+ export * from './models';
6
9
  //# sourceMappingURL=index.d.ts.map
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,eAAe,CAAA;AAC7B,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA"}
package/index.js CHANGED
@@ -19,4 +19,7 @@ __exportStar(require("./User"), exports);
19
19
  __exportStar(require("./utils"), exports);
20
20
  __exportStar(require("./logging"), exports);
21
21
  __exportStar(require("./subscriptions"), exports);
22
+ __exportStar(require("./schema-util"), exports);
23
+ __exportStar(require("./shield"), exports);
24
+ __exportStar(require("./models"), exports);
22
25
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAAyB;AACzB,yCAAsB;AACtB,0CAAuB;AACvB,4CAAyB;AACzB,kDAA+B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAAyB;AACzB,yCAAsB;AACtB,0CAAuB;AACvB,4CAAyB;AACzB,kDAA+B;AAC/B,gDAA6B;AAC7B,2CAAwB;AACxB,2CAAwB"}
package/models.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export type Primitive = string | number | symbol | bigint | boolean | null | undefined | Date;
2
+ type ScalarPropsInternal<T, TKey extends keyof T, TAdditionalScalars = never> = TKey extends any ? T[TKey] extends Primitive | TAdditionalScalars ? TKey : never : never;
3
+ export type ScalarProps<T, TAdditionalScalars = never> = Pick<T, ScalarPropsInternal<T, keyof T, TAdditionalScalars>>;
4
+ export {};
5
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAAA;AAG7F,KAAK,mBAAmB,CAAC,CAAC,EAAE,IAAI,SAAS,MAAM,CAAC,EAAE,kBAAkB,GAAG,KAAK,IAAI,IAAI,SAAS,GAAG,GAC5F,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,kBAAkB,GAC5C,IAAI,GACJ,KAAK,GACP,KAAK,CAAA;AACT,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,kBAAkB,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAA"}
package/models.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=models.js.map
package/models.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "main": "index.js",
3
3
  "types": "index.d.ts",
4
4
  "name": "@makerx/graphql-core",
5
- "version": "1.0.0",
5
+ "version": "1.2.0",
6
6
  "private": false,
7
7
  "description": "A set of core GraphQL utilities that MakerX uses to build GraphQL APIs",
8
8
  "author": "MakerX",
@@ -24,6 +24,7 @@
24
24
  "lodash.pick": "^4.4.0"
25
25
  },
26
26
  "peerDependencies": {
27
+ "graphql-shield": "*",
27
28
  "express": "*",
28
29
  "graphql": "*",
29
30
  "graphql-ws": "*",
@@ -38,6 +39,7 @@
38
39
  }
39
40
  },
40
41
  "overrides": {
41
- "semver": "^7.5.3"
42
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
43
+ "@typescript-eslint/parser": "^6.0.0"
42
44
  }
43
45
  }
@@ -0,0 +1,10 @@
1
+ import { GraphQLSchema } from 'graphql';
2
+ /**
3
+ * It is possible to register a custom scalar with apollo server without defining an explicit resolver (a default resolver is used in
4
+ * this case), but it is rarely desirable. This function, when provided with your built schema, will ensure any registered scalar types
5
+ * provide at least a base level of validation by failing to parse a Symbol instance. The default resolver does not pass this test
6
+ * meaning any scalars that are falling back to the default resolver will fail.
7
+ * @param schema A schema object, the result of calling `makeExecutableSchema` from `@graphql-tools/schema`
8
+ */
9
+ export declare function requireExplicitResolversForScalars(schema: GraphQLSchema): void;
10
+ //# sourceMappingURL=schema-util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-util.d.ts","sourceRoot":"","sources":["../src/schema-util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,aAAa,EAAE,MAAM,SAAS,CAAA;AAE1D;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,aAAa,QAevE"}
package/schema-util.js ADDED
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requireExplicitResolversForScalars = void 0;
4
+ const graphql_1 = require("graphql");
5
+ /**
6
+ * It is possible to register a custom scalar with apollo server without defining an explicit resolver (a default resolver is used in
7
+ * this case), but it is rarely desirable. This function, when provided with your built schema, will ensure any registered scalar types
8
+ * provide at least a base level of validation by failing to parse a Symbol instance. The default resolver does not pass this test
9
+ * meaning any scalars that are falling back to the default resolver will fail.
10
+ * @param schema A schema object, the result of calling `makeExecutableSchema` from `@graphql-tools/schema`
11
+ */
12
+ function requireExplicitResolversForScalars(schema) {
13
+ const testSymbol = Symbol('testSymbol');
14
+ const scalars = Object.values(schema.getTypeMap()).filter((t) => t instanceof graphql_1.GraphQLScalarType);
15
+ for (const scalar of scalars) {
16
+ if (scalar.name === 'Void')
17
+ continue;
18
+ try {
19
+ scalar.parseValue(testSymbol);
20
+ }
21
+ catch {
22
+ // We expect that a parser should not handle parsing a symbol
23
+ continue;
24
+ }
25
+ throw new Error(`Scalar ${scalar.name} does not appear to have an explicit resolver, or is not performing sufficient validation when parsing input`);
26
+ }
27
+ }
28
+ exports.requireExplicitResolversForScalars = requireExplicitResolversForScalars;
29
+ //# sourceMappingURL=schema-util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-util.js","sourceRoot":"","sources":["../src/schema-util.ts"],"names":[],"mappings":";;;AAAA,qCAA0D;AAE1D;;;;;;GAMG;AACH,SAAgB,kCAAkC,CAAC,MAAqB;IACtE,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;IACvC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAA0B,EAAE,CAAC,CAAC,YAAY,2BAAiB,CAAC,CAAA;IACxH,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;YAAE,SAAQ;QACpC,IAAI;YACF,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAA;SAC9B;QAAC,MAAM;YACN,6DAA6D;YAC7D,SAAQ;SACT;QACD,MAAM,IAAI,KAAK,CACb,UAAU,MAAM,CAAC,IAAI,8GAA8G,CACpI,CAAA;KACF;AACH,CAAC;AAfD,gFAeC"}
package/shield.d.ts ADDED
@@ -0,0 +1,43 @@
1
+ import { ShieldRule } from 'graphql-shield/typings/types';
2
+ import { Primitive } from './models';
3
+ import { and, chain, or, race } from 'graphql-shield';
4
+ type RuleCombinator = typeof chain | typeof race | typeof or | typeof and;
5
+ export declare const createRule: <TContext, TParent = unknown, TArgs = unknown>(logic: (parent: TParent, args: TArgs, ctx: TContext) => boolean | Promise<boolean> | Error, cache?: 'contextual' | 'strict') => import("graphql-shield/typings/rules").Rule;
6
+ /**
7
+ * Combines a given rule with all existing defined rules using the provided combinator
8
+ * @param schema The existing shield schema with rules
9
+ * @param rule The rule to be combined with existing rules
10
+ * @param combinator The combinator to use. Eg. and | or | chain | race
11
+ *
12
+ * Usage:
13
+ *
14
+ * const updatedSchema = combineRuleWithAll(shieldSchema, rules.accountNotBlocked, chain)
15
+ */
16
+ export declare function combineRuleWithAll<T>(schema: ShieldSchema<T>, rule: ShieldRule, combinator: RuleCombinator): ShieldSchema<T>;
17
+ /**
18
+ * Creates graphql shield middleware making use of generics to type the definition of the rules.
19
+ * @param schema A mapping of schema objects to the shield rules that define the access to that object
20
+ * @param fallbackRule A fallback rule to apply to any object or property which doesn't have a defined rule.
21
+ *
22
+ * Usage:
23
+ * import { Resolvers } from '../generated/types'
24
+ *
25
+ * const shieldSchema = createShieldSchema<Resolvers>({
26
+ * Query: {
27
+ * getThings: allow,
28
+ * dontGetThings: deny,
29
+ * }
30
+ * })
31
+ *
32
+ * let schema = makeExecutableSchema({...})
33
+ *
34
+ * schema = applyMiddleware(schema, shieldSchema)
35
+ */
36
+ export declare function createShieldSchema<TRootResolvers>(schema: ShieldSchema<TRootResolvers>, fallbackRule?: ShieldRule): import("graphql-middleware").IMiddlewareGenerator<any, any, any>;
37
+ export type ShieldSchema<TResolver> = TResolver extends Primitive ? ShieldRule : {
38
+ [key in keyof TResolver]?: ShieldSchema<TResolver[key]> | ShieldRule;
39
+ } & {
40
+ '*'?: ShieldRule;
41
+ };
42
+ export {};
43
+ //# sourceMappingURL=shield.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shield.d.ts","sourceRoot":"","sources":["../src/shield.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,UAAU,EAAE,MAAM,8BAA8B,CAAA;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,OAAO,EAAS,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAgB,MAAM,gBAAgB,CAAA;AAE1E,KAAK,cAAc,GAAG,OAAO,KAAK,GAAG,OAAO,IAAI,GAAG,OAAO,EAAE,GAAG,OAAO,GAAG,CAAA;AAEzE,eAAO,MAAM,UAAU,yGACmC,OAAO,GAAG,QAAQ,OAAO,CAAC,GAAG,KAAK,UACnF,YAAY,GAAG,QAAQ,gDAC2C,CAAA;AAE3E;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,CAS5H;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,MAAM,EAAE,YAAY,CAAC,cAAc,CAAC,EAAE,YAAY,GAAE,UAAkB,oEAKxH;AAED,MAAM,MAAM,YAAY,CAAC,SAAS,IAAI,SAAS,SAAS,SAAS,GAC7D,UAAU,GACV;KACG,GAAG,IAAI,MAAM,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,UAAU;CACrE,GAAG;IACF,GAAG,CAAC,EAAE,UAAU,CAAA;CACjB,CAAA"}
package/shield.js ADDED
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createShieldSchema = exports.combineRuleWithAll = exports.createRule = void 0;
4
+ const graphql_shield_1 = require("graphql-shield");
5
+ const createRule = (logic, cache = 'strict') => (0, graphql_shield_1.rule)({ cache })(async (parent, args, ctx) => logic(parent, args, ctx));
6
+ exports.createRule = createRule;
7
+ /**
8
+ * Combines a given rule with all existing defined rules using the provided combinator
9
+ * @param schema The existing shield schema with rules
10
+ * @param rule The rule to be combined with existing rules
11
+ * @param combinator The combinator to use. Eg. and | or | chain | race
12
+ *
13
+ * Usage:
14
+ *
15
+ * const updatedSchema = combineRuleWithAll(shieldSchema, rules.accountNotBlocked, chain)
16
+ */
17
+ function combineRuleWithAll(schema, rule, combinator) {
18
+ return Object.fromEntries(Object.entries(schema).map(([key, value]) => {
19
+ if (value.constructor.name !== 'Object') {
20
+ return [key, combinator(rule, value)];
21
+ }
22
+ return [key, combineRuleWithAll(value, rule, combinator)];
23
+ }));
24
+ }
25
+ exports.combineRuleWithAll = combineRuleWithAll;
26
+ /**
27
+ * Creates graphql shield middleware making use of generics to type the definition of the rules.
28
+ * @param schema A mapping of schema objects to the shield rules that define the access to that object
29
+ * @param fallbackRule A fallback rule to apply to any object or property which doesn't have a defined rule.
30
+ *
31
+ * Usage:
32
+ * import { Resolvers } from '../generated/types'
33
+ *
34
+ * const shieldSchema = createShieldSchema<Resolvers>({
35
+ * Query: {
36
+ * getThings: allow,
37
+ * dontGetThings: deny,
38
+ * }
39
+ * })
40
+ *
41
+ * let schema = makeExecutableSchema({...})
42
+ *
43
+ * schema = applyMiddleware(schema, shieldSchema)
44
+ */
45
+ function createShieldSchema(schema, fallbackRule = graphql_shield_1.allow) {
46
+ return (0, graphql_shield_1.shield)(schema, {
47
+ allowExternalErrors: true,
48
+ fallbackRule: fallbackRule,
49
+ });
50
+ }
51
+ exports.createShieldSchema = createShieldSchema;
52
+ //# sourceMappingURL=shield.js.map
package/shield.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shield.js","sourceRoot":"","sources":["../src/shield.ts"],"names":[],"mappings":";;;AAEA,mDAA0E;AAInE,MAAM,UAAU,GAAG,CACxB,KAA0F,EAC1F,QAAiC,QAAQ,EACzC,EAAE,CAAC,IAAA,qBAAI,EAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;AAH9D,QAAA,UAAU,cAGoD;AAE3E;;;;;;;;;GASG;AACH,SAAgB,kBAAkB,CAAI,MAAuB,EAAE,IAAgB,EAAE,UAA0B;IACzG,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QAC1C,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ,EAAE;YACvC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;SACtC;QACD,OAAO,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAA;IAC3D,CAAC,CAAC,CACgB,CAAA;AACtB,CAAC;AATD,gDASC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,kBAAkB,CAAiB,MAAoC,EAAE,eAA2B,sBAAK;IACvH,OAAO,IAAA,uBAAM,EAAC,MAAgB,EAAE;QAC9B,mBAAmB,EAAE,IAAI;QACzB,YAAY,EAAE,YAAY;KAC3B,CAAC,CAAA;AACJ,CAAC;AALD,gDAKC"}