@frontmcp/auth 1.4.0 → 1.5.0-rc.1

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/esm/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { createRequire as __frontmcpCreateRequire } from 'module';
2
- const require = __frontmcpCreateRequire(import.meta.url);
2
+ const require = __frontmcpCreateRequire(import.meta.url || 'file:///');
3
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
4
4
  var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
5
5
  get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
@@ -7,8 +7,13 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
7
7
  if (typeof require !== "undefined") return require.apply(this, arguments);
8
8
  throw Error('Dynamic require of "' + x + '" is not supported');
9
9
  });
10
- var __esm = (fn, res) => function __init() {
11
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
10
+ var __esm = (fn, res, err) => function __init() {
11
+ if (err) throw err[0];
12
+ try {
13
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
14
+ } catch (e) {
15
+ throw err = [e], e;
16
+ }
12
17
  };
13
18
 
14
19
  // libs/auth/src/cimd/cimd.cache.ts
@@ -1507,6 +1512,8 @@ var RedisAuthorizationStore = class {
1507
1512
  this.redis = redis;
1508
1513
  this.namespace = namespace;
1509
1514
  }
1515
+ redis;
1516
+ namespace;
1510
1517
  key(type, id) {
1511
1518
  return `${this.namespace}${type}:${id}`;
1512
1519
  }
@@ -3134,15 +3141,22 @@ var SessionRateLimiter = class {
3134
3141
  windowMs;
3135
3142
  maxRequests;
3136
3143
  requests = /* @__PURE__ */ new Map();
3144
+ cleanupIntervalMs;
3137
3145
  cleanupTimer = null;
3138
3146
  constructor(config = {}) {
3139
3147
  this.windowMs = config.windowMs ?? 6e4;
3140
3148
  this.maxRequests = config.maxRequests ?? 100;
3141
- const cleanupIntervalMs = config.cleanupIntervalMs ?? 6e4;
3142
- if (cleanupIntervalMs > 0) {
3143
- this.cleanupTimer = setInterval(() => this.cleanup(), cleanupIntervalMs);
3144
- if (typeof this.cleanupTimer.unref === "function") this.cleanupTimer.unref();
3145
- }
3149
+ this.cleanupIntervalMs = config.cleanupIntervalMs ?? 6e4;
3150
+ }
3151
+ /**
3152
+ * Start the periodic cleanup timer on first use (idempotent). Deferred out of
3153
+ * the constructor so constructing an instance at module scope has no side
3154
+ * effects — see the constructor note on V8-isolate global-scope restrictions.
3155
+ */
3156
+ ensureCleanupTimer() {
3157
+ if (this.cleanupTimer || this.cleanupIntervalMs <= 0) return;
3158
+ this.cleanupTimer = setInterval(() => this.cleanup(), this.cleanupIntervalMs);
3159
+ if (typeof this.cleanupTimer.unref === "function") this.cleanupTimer.unref();
3146
3160
  }
3147
3161
  /**
3148
3162
  * Check if a request is allowed for the given key.
@@ -3151,6 +3165,7 @@ var SessionRateLimiter = class {
3151
3165
  * @returns Rate limit result with allowed status and metadata
3152
3166
  */
3153
3167
  check(key) {
3168
+ this.ensureCleanupTimer();
3154
3169
  const now = Date.now();
3155
3170
  const windowStart = now - this.windowMs;
3156
3171
  let timestamps = this.requests.get(key);
@@ -3263,6 +3278,7 @@ var TinyTtlCache = class {
3263
3278
  constructor(ttlMs) {
3264
3279
  this.ttlMs = ttlMs;
3265
3280
  }
3281
+ ttlMs;
3266
3282
  map = /* @__PURE__ */ new Map();
3267
3283
  get(k) {
3268
3284
  const hit = this.map.get(k);
@@ -5048,6 +5064,9 @@ var EncryptedRedisVault = class {
5048
5064
  this.encryption = encryption;
5049
5065
  this.namespace = namespace;
5050
5066
  }
5067
+ redis;
5068
+ encryption;
5069
+ namespace;
5051
5070
  /**
5052
5071
  * Run a callback with encryption context set for the current async scope.
5053
5072
  * This is the recommended way to set encryption context as it is safe for
@@ -6308,6 +6327,7 @@ var OrchestratedAuthAccessorAdapter = class {
6308
6327
  constructor(authorization) {
6309
6328
  this.authorization = authorization;
6310
6329
  }
6330
+ authorization;
6311
6331
  get primaryProviderId() {
6312
6332
  return this.authorization.primaryProviderId;
6313
6333
  }
@@ -6363,6 +6383,7 @@ var DcrClientRegistry = class {
6363
6383
  this.redirectMatchers = config.allowedRedirectUris?.map(globToRegExp);
6364
6384
  this.seedPreRegisteredClients();
6365
6385
  }
6386
+ config;
6366
6387
  clients = /* @__PURE__ */ new Map();
6367
6388
  redirectMatchers;
6368
6389
  /** Seed `dcr.clients` so the authorize/token flows accept them without DCR. */
@@ -8767,6 +8788,12 @@ var AuthProvidersAccessorImpl = class {
8767
8788
  this.context = context;
8768
8789
  this.logger = logger;
8769
8790
  }
8791
+ registry;
8792
+ vault;
8793
+ cache;
8794
+ loader;
8795
+ context;
8796
+ logger;
8770
8797
  async get(providerName, options) {
8771
8798
  const config = this.registry.get(providerName);
8772
8799
  if (!config) {
@@ -9126,6 +9153,9 @@ var AuthProvidersVault = class {
9126
9153
  this.namespace = namespace;
9127
9154
  this.logger = logger;
9128
9155
  }
9156
+ baseVault;
9157
+ namespace;
9158
+ logger;
9129
9159
  /**
9130
9160
  * Store a credential in the vault
9131
9161
  *
@@ -9324,6 +9354,9 @@ var EagerCredentialLoader = class {
9324
9354
  this.cache = cache;
9325
9355
  this.logger = logger;
9326
9356
  }
9357
+ registry;
9358
+ cache;
9359
+ logger;
9327
9360
  /**
9328
9361
  * Load all eager credentials for a session.
9329
9362
  * Called during session initialization.
@@ -9407,6 +9440,7 @@ var LazyCredentialLoader = class {
9407
9440
  constructor(logger) {
9408
9441
  this.logger = logger;
9409
9442
  }
9443
+ logger;
9410
9444
  /** In-flight loading promises for deduplication */
9411
9445
  loading = /* @__PURE__ */ new Map();
9412
9446
  /**
@@ -10059,6 +10093,8 @@ var AuthoritiesEngine = class {
10059
10093
  this.profiles = profiles;
10060
10094
  this.evaluators = evaluators;
10061
10095
  }
10096
+ profiles;
10097
+ evaluators;
10062
10098
  /**
10063
10099
  * Evaluate an AuthoritiesMetadata value (string, string[], or policy object).
10064
10100
  */
@@ -10458,6 +10494,7 @@ var FetchCredentialMiddleware = class {
10458
10494
  this.tokenAccessor = tokenAccessor;
10459
10495
  this.appliers = new Map(Object.entries(appliers ?? {}));
10460
10496
  }
10497
+ tokenAccessor;
10461
10498
  appliers;
10462
10499
  /**
10463
10500
  * Inspect the `credentials` field. If it references a named provider,
package/esm/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frontmcp/auth",
3
- "version": "1.4.0",
3
+ "version": "1.5.0-rc.1",
4
4
  "description": "FrontMCP Auth - Authentication, session management, and credential vault",
5
5
  "author": "AgentFront <info@agentfront.dev>",
6
6
  "homepage": "https://docs.agentfront.dev",
@@ -47,25 +47,25 @@
47
47
  "node": ">=24.0.0"
48
48
  },
49
49
  "peerDependencies": {
50
- "ioredis": "^5.0.0",
50
+ "@frontmcp/lazy-zod": "1.5.0-rc.1",
51
+ "@frontmcp/storage-sqlite": "1.5.0-rc.1",
51
52
  "@vercel/kv": "^3.0.0",
52
- "@frontmcp/storage-sqlite": "1.4.0",
53
- "@frontmcp/lazy-zod": "1.4.0"
53
+ "ioredis": "^5.0.0"
54
54
  },
55
55
  "peerDependenciesMeta": {
56
- "ioredis": {
56
+ "@frontmcp/storage-sqlite": {
57
57
  "optional": true
58
58
  },
59
59
  "@vercel/kv": {
60
60
  "optional": true
61
61
  },
62
- "@frontmcp/storage-sqlite": {
62
+ "ioredis": {
63
63
  "optional": true
64
64
  }
65
65
  },
66
66
  "dependencies": {
67
- "@frontmcp/utils": "1.4.0",
68
- "@frontmcp/di": "1.4.0",
67
+ "@frontmcp/di": "1.5.0-rc.1",
68
+ "@frontmcp/utils": "1.5.0-rc.1",
69
69
  "jose": "^6.0.0"
70
70
  },
71
71
  "devDependencies": {
package/index.js CHANGED
@@ -3,8 +3,13 @@ var __defProp = Object.defineProperty;
3
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __esm = (fn, res) => function __init() {
7
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
6
+ var __esm = (fn, res, err) => function __init() {
7
+ if (err) throw err[0];
8
+ try {
9
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
10
+ } catch (e) {
11
+ throw err = [e], e;
12
+ }
8
13
  };
9
14
  var __export = (target, all) => {
10
15
  for (var name in all)
@@ -1822,6 +1827,8 @@ var RedisAuthorizationStore = class {
1822
1827
  this.redis = redis;
1823
1828
  this.namespace = namespace;
1824
1829
  }
1830
+ redis;
1831
+ namespace;
1825
1832
  key(type, id) {
1826
1833
  return `${this.namespace}${type}:${id}`;
1827
1834
  }
@@ -3429,15 +3436,22 @@ var SessionRateLimiter = class {
3429
3436
  windowMs;
3430
3437
  maxRequests;
3431
3438
  requests = /* @__PURE__ */ new Map();
3439
+ cleanupIntervalMs;
3432
3440
  cleanupTimer = null;
3433
3441
  constructor(config = {}) {
3434
3442
  this.windowMs = config.windowMs ?? 6e4;
3435
3443
  this.maxRequests = config.maxRequests ?? 100;
3436
- const cleanupIntervalMs = config.cleanupIntervalMs ?? 6e4;
3437
- if (cleanupIntervalMs > 0) {
3438
- this.cleanupTimer = setInterval(() => this.cleanup(), cleanupIntervalMs);
3439
- if (typeof this.cleanupTimer.unref === "function") this.cleanupTimer.unref();
3440
- }
3444
+ this.cleanupIntervalMs = config.cleanupIntervalMs ?? 6e4;
3445
+ }
3446
+ /**
3447
+ * Start the periodic cleanup timer on first use (idempotent). Deferred out of
3448
+ * the constructor so constructing an instance at module scope has no side
3449
+ * effects — see the constructor note on V8-isolate global-scope restrictions.
3450
+ */
3451
+ ensureCleanupTimer() {
3452
+ if (this.cleanupTimer || this.cleanupIntervalMs <= 0) return;
3453
+ this.cleanupTimer = setInterval(() => this.cleanup(), this.cleanupIntervalMs);
3454
+ if (typeof this.cleanupTimer.unref === "function") this.cleanupTimer.unref();
3441
3455
  }
3442
3456
  /**
3443
3457
  * Check if a request is allowed for the given key.
@@ -3446,6 +3460,7 @@ var SessionRateLimiter = class {
3446
3460
  * @returns Rate limit result with allowed status and metadata
3447
3461
  */
3448
3462
  check(key) {
3463
+ this.ensureCleanupTimer();
3449
3464
  const now = Date.now();
3450
3465
  const windowStart = now - this.windowMs;
3451
3466
  let timestamps = this.requests.get(key);
@@ -3558,6 +3573,7 @@ var TinyTtlCache = class {
3558
3573
  constructor(ttlMs) {
3559
3574
  this.ttlMs = ttlMs;
3560
3575
  }
3576
+ ttlMs;
3561
3577
  map = /* @__PURE__ */ new Map();
3562
3578
  get(k) {
3563
3579
  const hit = this.map.get(k);
@@ -5343,6 +5359,9 @@ var EncryptedRedisVault = class {
5343
5359
  this.encryption = encryption;
5344
5360
  this.namespace = namespace;
5345
5361
  }
5362
+ redis;
5363
+ encryption;
5364
+ namespace;
5346
5365
  /**
5347
5366
  * Run a callback with encryption context set for the current async scope.
5348
5367
  * This is the recommended way to set encryption context as it is safe for
@@ -6603,6 +6622,7 @@ var OrchestratedAuthAccessorAdapter = class {
6603
6622
  constructor(authorization) {
6604
6623
  this.authorization = authorization;
6605
6624
  }
6625
+ authorization;
6606
6626
  get primaryProviderId() {
6607
6627
  return this.authorization.primaryProviderId;
6608
6628
  }
@@ -6658,6 +6678,7 @@ var DcrClientRegistry = class {
6658
6678
  this.redirectMatchers = config.allowedRedirectUris?.map(globToRegExp);
6659
6679
  this.seedPreRegisteredClients();
6660
6680
  }
6681
+ config;
6661
6682
  clients = /* @__PURE__ */ new Map();
6662
6683
  redirectMatchers;
6663
6684
  /** Seed `dcr.clients` so the authorize/token flows accept them without DCR. */
@@ -9062,6 +9083,12 @@ var AuthProvidersAccessorImpl = class {
9062
9083
  this.context = context;
9063
9084
  this.logger = logger;
9064
9085
  }
9086
+ registry;
9087
+ vault;
9088
+ cache;
9089
+ loader;
9090
+ context;
9091
+ logger;
9065
9092
  async get(providerName, options) {
9066
9093
  const config = this.registry.get(providerName);
9067
9094
  if (!config) {
@@ -9421,6 +9448,9 @@ var AuthProvidersVault = class {
9421
9448
  this.namespace = namespace;
9422
9449
  this.logger = logger;
9423
9450
  }
9451
+ baseVault;
9452
+ namespace;
9453
+ logger;
9424
9454
  /**
9425
9455
  * Store a credential in the vault
9426
9456
  *
@@ -9619,6 +9649,9 @@ var EagerCredentialLoader = class {
9619
9649
  this.cache = cache;
9620
9650
  this.logger = logger;
9621
9651
  }
9652
+ registry;
9653
+ cache;
9654
+ logger;
9622
9655
  /**
9623
9656
  * Load all eager credentials for a session.
9624
9657
  * Called during session initialization.
@@ -9702,6 +9735,7 @@ var LazyCredentialLoader = class {
9702
9735
  constructor(logger) {
9703
9736
  this.logger = logger;
9704
9737
  }
9738
+ logger;
9705
9739
  /** In-flight loading promises for deduplication */
9706
9740
  loading = /* @__PURE__ */ new Map();
9707
9741
  /**
@@ -10354,6 +10388,8 @@ var AuthoritiesEngine = class {
10354
10388
  this.profiles = profiles;
10355
10389
  this.evaluators = evaluators;
10356
10390
  }
10391
+ profiles;
10392
+ evaluators;
10357
10393
  /**
10358
10394
  * Evaluate an AuthoritiesMetadata value (string, string[], or policy object).
10359
10395
  */
@@ -10753,6 +10789,7 @@ var FetchCredentialMiddleware = class {
10753
10789
  this.tokenAccessor = tokenAccessor;
10754
10790
  this.appliers = new Map(Object.entries(appliers ?? {}));
10755
10791
  }
10792
+ tokenAccessor;
10756
10793
  appliers;
10757
10794
  /**
10758
10795
  * Inspect the `credentials` field. If it references a named provider,
@@ -14,7 +14,8 @@
14
14
  */
15
15
  /**
16
16
  * Get the current machine ID.
17
- * Returns the override (if set via `setMachineIdOverride`) or the computed value.
17
+ * Returns the override (if set via `setMachineIdOverride`) or the lazily
18
+ * computed-and-memoized value.
18
19
  */
19
20
  export declare function getMachineId(): string;
20
21
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"machine-id.d.ts","sourceRoot":"","sources":["../../src/machine-id/machine-id.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AAqHH;;;GAGG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAEjE"}
1
+ {"version":3,"file":"machine-id.d.ts","sourceRoot":"","sources":["../../src/machine-id/machine-id.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AA8HH;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,CAMrC;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAEjE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frontmcp/auth",
3
- "version": "1.4.0",
3
+ "version": "1.5.0-rc.1",
4
4
  "description": "FrontMCP Auth - Authentication, session management, and credential vault",
5
5
  "author": "AgentFront <info@agentfront.dev>",
6
6
  "homepage": "https://docs.agentfront.dev",
@@ -47,25 +47,25 @@
47
47
  "node": ">=24.0.0"
48
48
  },
49
49
  "peerDependencies": {
50
- "ioredis": "^5.0.0",
50
+ "@frontmcp/lazy-zod": "1.5.0-rc.1",
51
+ "@frontmcp/storage-sqlite": "1.5.0-rc.1",
51
52
  "@vercel/kv": "^3.0.0",
52
- "@frontmcp/storage-sqlite": "1.4.0",
53
- "@frontmcp/lazy-zod": "1.4.0"
53
+ "ioredis": "^5.0.0"
54
54
  },
55
55
  "peerDependenciesMeta": {
56
- "ioredis": {
56
+ "@frontmcp/storage-sqlite": {
57
57
  "optional": true
58
58
  },
59
59
  "@vercel/kv": {
60
60
  "optional": true
61
61
  },
62
- "@frontmcp/storage-sqlite": {
62
+ "ioredis": {
63
63
  "optional": true
64
64
  }
65
65
  },
66
66
  "dependencies": {
67
- "@frontmcp/utils": "1.4.0",
68
- "@frontmcp/di": "1.4.0",
67
+ "@frontmcp/di": "1.5.0-rc.1",
68
+ "@frontmcp/utils": "1.5.0-rc.1",
69
69
  "jose": "^6.0.0"
70
70
  },
71
71
  "devDependencies": {
@@ -55,8 +55,15 @@ export declare class SessionRateLimiter {
55
55
  private readonly windowMs;
56
56
  private readonly maxRequests;
57
57
  private readonly requests;
58
+ private readonly cleanupIntervalMs;
58
59
  private cleanupTimer;
59
60
  constructor(config?: SessionRateLimiterConfig);
61
+ /**
62
+ * Start the periodic cleanup timer on first use (idempotent). Deferred out of
63
+ * the constructor so constructing an instance at module scope has no side
64
+ * effects — see the constructor note on V8-isolate global-scope restrictions.
65
+ */
66
+ private ensureCleanupTimer;
60
67
  /**
61
68
  * Check if a request is allowed for the given key.
62
69
  *
@@ -1 +1 @@
1
- {"version":3,"file":"session-rate-limiter.d.ts","sourceRoot":"","sources":["../../src/session/session-rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,YAAY,CAA+B;gBAEvC,MAAM,GAAE,wBAA6B;IAajD;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAuCnC;;;;;;OAMG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAWhC;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIxB;;;OAGG;IACH,OAAO,IAAI,IAAI;IAcf;;OAEG;IACH,QAAQ,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;IAWxD;;;OAGG;IACH,OAAO,IAAI,IAAI;CAOhB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,yBAAyB,oBAA2B,CAAC"}
1
+ {"version":3,"file":"session-rate-limiter.d.ts","sourceRoot":"","sources":["../../src/session/session-rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,YAAY,CAA+B;gBAEvC,MAAM,GAAE,wBAA6B;IAUjD;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe;IAwCnC;;;;;;OAMG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAWhC;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIxB;;;OAGG;IACH,OAAO,IAAI,IAAI;IAcf;;OAEG;IACH,QAAQ,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE;IAWxD;;;OAGG;IACH,OAAO,IAAI,IAAI;CAOhB;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,yBAAyB,oBAA2B,CAAC"}