@appweaver/core 1.5.1 → 1.6.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.
@@ -19,11 +19,16 @@ function loadProviders(baseDir) {
19
19
  (0, context_1.loadProvider)(baseDir, common_1.config.EVENTS_PROVIDER, common_1.Events);
20
20
  (0, context_1.loadProvider)(baseDir, common_1.config.SECURITY_STORE_PROVIDER, common_1.SecurityStore);
21
21
  (0, context_1.loadProvider)(baseDir, common_1.config.REDIS_PROVIDER, common_1.Redis, false);
22
- (0, context_1.loadProvider)(baseDir, common_1.config.QUEUE_PROVIDER, common_1.Queue, false);
23
- (0, context_1.loadProvider)(baseDir, common_1.config.MAILER_PROVIDER, common_1.Mailer, false);
24
- (0, context_1.loadProvider)(baseDir, common_1.config.SCHEDULER_PROVIDER, common_1.Scheduler, false);
22
+ const queueLoaded = (0, context_1.loadProvider)(baseDir, common_1.config.QUEUE_PROVIDER, common_1.Queue, false);
23
+ const mailerLoaded = common_1.config.MAILER_ENABLED &&
24
+ (0, context_1.loadProvider)(baseDir, common_1.config.MAILER_PROVIDER, common_1.Mailer, false);
25
+ if (common_1.config.SCHEDULER_ENABLED) {
26
+ (0, context_1.loadProvider)(baseDir, common_1.config.SCHEDULER_PROVIDER, common_1.Scheduler, false);
27
+ }
25
28
  // Core feature services
26
- (0, context_1.loadProvider)(__dirname, '../mailer/email-service', undefined, false);
29
+ if (mailerLoaded && queueLoaded) {
30
+ (0, context_1.loadProvider)(__dirname, '../mailer/email-service', undefined, false);
31
+ }
27
32
  (0, context_1.loadProvider)(__dirname, '../cache/cache-service');
28
33
  (0, context_1.loadProvider)(__dirname, '../storage/file-service');
29
34
  (0, context_1.loadProvider)(__dirname, '../security/auth-service');
@@ -19,7 +19,7 @@ export declare class CacheService {
19
19
  *
20
20
  * @param {string} key - The unique key to identify the value in the cache.
21
21
  * @param {Object} value - The value to store in the cache.
22
- * @param {number} [ttl] - Optional time-to-live for the cache entry in seconds.
22
+ * @param {number} [ttl] - Optional time-to-live for the cache entry in milliseconds.
23
23
  * @param {boolean} [replace=false] - Optional flag that indicates if the existing cache entry should be replaced
24
24
  * with the new value and ttl.
25
25
  * @return {Promise<boolean>} A promise that resolves to true if the key-value pair was added, or false if the key
@@ -22,12 +22,11 @@ class CacheService {
22
22
  * @return A promise that resolves to the cached value if the key exists, or null if the key is not found.
23
23
  */
24
24
  async getCachedValue(key) {
25
- const exists = await this._cache.has(key);
26
- if (exists) {
25
+ const value = await this._cache.get(key);
26
+ if (value !== null) {
27
27
  common_1.logger.debug({ key }, 'Retrieved value from cache');
28
- return this._cache.get(key);
29
28
  }
30
- return null;
29
+ return value;
31
30
  }
32
31
  /**
33
32
  * Adds a key-value pair to the cache if the key does not already exist.
@@ -35,7 +34,7 @@ class CacheService {
35
34
  *
36
35
  * @param {string} key - The unique key to identify the value in the cache.
37
36
  * @param {Object} value - The value to store in the cache.
38
- * @param {number} [ttl] - Optional time-to-live for the cache entry in seconds.
37
+ * @param {number} [ttl] - Optional time-to-live for the cache entry in milliseconds.
39
38
  * @param {boolean} [replace=false] - Optional flag that indicates if the existing cache entry should be replaced
40
39
  * with the new value and ttl.
41
40
  * @return {Promise<boolean>} A promise that resolves to true if the key-value pair was added, or false if the key
package/cache/cache.js CHANGED
@@ -11,16 +11,110 @@ class Cache extends common_1.Cache {
11
11
  _evictionIndex = this.createEvictionIndex();
12
12
  /** @internal */
13
13
  _maxSizeBytes = (0, common_1.textToBytes)(common_1.config.CACHE_MAX_SIZE);
14
+ /** @internal */
15
+ _unavailable = false;
16
+ /** @internal */
17
+ _stale = false;
18
+ /** @internal */
19
+ _recovery;
14
20
  constructor(_memory) {
15
21
  super();
16
22
  this._memory = _memory;
17
23
  }
18
24
  async onInit() {
19
25
  if (common_1.config.CACHE_ENABLED && common_1.config.CACHE_CLEAN_START) {
20
- await this.expire();
26
+ if (this._memory.isAvailable()) {
27
+ await this.expire();
28
+ }
29
+ else {
30
+ // Cleaned on the first use once the memory connects
31
+ this._stale = true;
32
+ }
21
33
  }
22
34
  }
23
35
  async get(key) {
36
+ return this.guard(null, () => this.readEntry(key));
37
+ }
38
+ async set(key, value, ttl) {
39
+ return this.guard(false, () => this.writeEntry(key, value, ttl));
40
+ }
41
+ async has(key) {
42
+ return this.guard(false, () => this._memory.hasKey(this.addPrefix(key)));
43
+ }
44
+ async evict(key) {
45
+ return this.guard(false, () => this.removeEntry(key));
46
+ }
47
+ async expire(pattern = '*') {
48
+ return this.guard(0, () => this.expireEntries(pattern));
49
+ }
50
+ async keys(pattern = '*') {
51
+ return this.guard([], async () => {
52
+ const prefixedPattern = this.addPrefix(pattern);
53
+ const prefixedKeys = await this._memory.findKeys(prefixedPattern);
54
+ return Array.from(prefixedKeys);
55
+ });
56
+ }
57
+ /**
58
+ * Runs a memory action. With `CACHE_SKIP_ON_ERROR` it falls back to the given
59
+ * value while the memory is unavailable or failing, so callers keep working
60
+ * without the cache, otherwise the error is thrown. Entries written before an
61
+ * outage may miss invalidations made during it, so the whole cache is cleared
62
+ * once the memory is available again.
63
+ *
64
+ * @internal
65
+ */
66
+ async guard(fallback, action) {
67
+ if (!common_1.config.CACHE_SKIP_ON_ERROR) {
68
+ return this.run(action);
69
+ }
70
+ if (!this._memory.isAvailable()) {
71
+ this.markUnavailable();
72
+ return fallback;
73
+ }
74
+ try {
75
+ return await this.run(action);
76
+ }
77
+ catch (error) {
78
+ this.markUnavailable(error);
79
+ return fallback;
80
+ }
81
+ }
82
+ /** @internal */
83
+ async run(action) {
84
+ if (this._stale) {
85
+ await this.recover();
86
+ }
87
+ return action();
88
+ }
89
+ /** @internal */
90
+ markUnavailable(error) {
91
+ this._stale = true;
92
+ if (!this._unavailable) {
93
+ this._unavailable = true;
94
+ common_1.logger.error(error, 'Cache is unavailable, continuing without it');
95
+ }
96
+ }
97
+ /** @internal */
98
+ recover() {
99
+ this._recovery ??= this.expireEntries('*')
100
+ .then(() => {
101
+ for (const prefixedKey of this._entryMeta.keys()) {
102
+ this._evictionIndex.remove(prefixedKey);
103
+ }
104
+ this._entryMeta.clear();
105
+ this._stale = false;
106
+ if (this._unavailable) {
107
+ this._unavailable = false;
108
+ common_1.logger.info('Cache is available again, cleared stale entries');
109
+ }
110
+ })
111
+ .finally(() => {
112
+ this._recovery = undefined;
113
+ });
114
+ return this._recovery;
115
+ }
116
+ /** @internal */
117
+ async readEntry(key) {
24
118
  const prefixedKey = this.addPrefix(key);
25
119
  const data = await this._memory.getValue(prefixedKey);
26
120
  if (data) {
@@ -39,14 +133,15 @@ class Cache extends common_1.Cache {
39
133
  this._entryMeta.set(prefixedKey, updatedMeta);
40
134
  this._evictionIndex.touch(prefixedKey, updatedMeta);
41
135
  }
42
- else if (prefixedKey in this._entryMeta) {
136
+ else if (this._entryMeta.has(prefixedKey)) {
43
137
  // Remove key from meta and index storage if it does not exist memory
44
138
  this._entryMeta.delete(prefixedKey);
45
139
  this._evictionIndex.remove(prefixedKey);
46
140
  }
47
141
  return data;
48
142
  }
49
- async set(key, value, ttl) {
143
+ /** @internal */
144
+ async writeEntry(key, value, ttl) {
50
145
  const prefixedKey = this.addPrefix(key);
51
146
  const expireMs = ttl === 0 ? undefined : (ttl ?? common_1.config.CACHE_DEFAULT_TTL);
52
147
  await this.evictExcessEntries();
@@ -66,17 +161,16 @@ class Cache extends common_1.Cache {
66
161
  await this.ensureMemoryLimit();
67
162
  return result;
68
163
  }
69
- async has(key) {
70
- return this._memory.hasKey(this.addPrefix(key));
71
- }
72
- async evict(key) {
164
+ /** @internal */
165
+ async removeEntry(key) {
73
166
  const prefixedKey = this.addPrefix(key);
74
167
  const result = await this._memory.removeValue(prefixedKey);
75
168
  this._entryMeta.delete(prefixedKey);
76
169
  this._evictionIndex.remove(prefixedKey);
77
170
  return result;
78
171
  }
79
- async expire(pattern = '*') {
172
+ /** @internal */
173
+ async expireEntries(pattern) {
80
174
  const prefixedPattern = this.addPrefix(pattern);
81
175
  const prefixedKeys = await this._memory.findKeys(prefixedPattern);
82
176
  await this._memory.removeEntries(prefixedPattern);
@@ -86,11 +180,6 @@ class Cache extends common_1.Cache {
86
180
  }
87
181
  return prefixedKeys.size;
88
182
  }
89
- async keys(pattern = '*') {
90
- const prefixedPattern = this.addPrefix(pattern);
91
- const prefixedKeys = await this._memory.findKeys(prefixedPattern);
92
- return Array.from(prefixedKeys);
93
- }
94
183
  /** @internal */
95
184
  async evictExcessEntries() {
96
185
  const now = Date.now();
@@ -26,9 +26,9 @@ export declare function define<T = DefinitionValue, S extends T = T>(value: Defi
26
26
  * @param {DefinitionClass} [definition] - An optional definition object used to define the loaded module.
27
27
  * @param {boolean} [required=true] - Indicates whether the module is required. If true, an error is thrown on failure;
28
28
  * otherwise, a warning is logged.
29
- * @return This function does not return a value. It loads a module and defines it if successful.
29
+ * @return {boolean} `true` if the module was loaded and defined, `false` otherwise.
30
30
  */
31
- export declare function loadProvider(baseDir: string, classPath: string, definition?: DefinitionClass, required?: boolean): void;
31
+ export declare function loadProvider(baseDir: string, classPath: string, definition?: DefinitionClass, required?: boolean): boolean;
32
32
  /**
33
33
  * Retrieves a definition from the application context based on the provided name.
34
34
  * The method handles specific naming conventions for models, services, routes, and policies,
@@ -78,7 +78,7 @@ function define(value, nameOrClass, mode = 'ignore') {
78
78
  * @param {DefinitionClass} [definition] - An optional definition object used to define the loaded module.
79
79
  * @param {boolean} [required=true] - Indicates whether the module is required. If true, an error is thrown on failure;
80
80
  * otherwise, a warning is logged.
81
- * @return This function does not return a value. It loads a module and defines it if successful.
81
+ * @return {boolean} `true` if the module was loaded and defined, `false` otherwise.
82
82
  */
83
83
  function loadProvider(baseDir, classPath, definition, required = true) {
84
84
  const { value, error } = (0, common_1.loadModule)(baseDir, classPath);
@@ -90,13 +90,14 @@ function loadProvider(baseDir, classPath, definition, required = true) {
90
90
  throw error ?? new Error(msg);
91
91
  }
92
92
  common_1.logger.warn(error, msg);
93
- return;
93
+ return false;
94
94
  }
95
95
  // Extract class constructor from the exported value and add it to definitions
96
96
  const ctor = Object.values(value).find((exportedValue) => (0, common_1.isConstructor)(exportedValue));
97
97
  // Define the first found class constructor, if no constructor found then
98
98
  // define anything that was first exported from this file
99
99
  define(ctor ?? Object.values(value)[0], definition);
100
+ return true;
100
101
  }
101
102
  /**
102
103
  * Retrieves a definition from the application context based on the provided name.
@@ -27,7 +27,9 @@ class HealthService {
27
27
  status: checkResults[index].success
28
28
  ? common_1.HealthCheckStatus.Up
29
29
  : common_1.HealthCheckStatus.Down,
30
- message: !hideMessages[key] ? checkResults[index].message : undefined
30
+ message: !hideMessages.includes(key)
31
+ ? checkResults[index].message
32
+ : undefined
31
33
  };
32
34
  return acc;
33
35
  }, {});
package/memory/redis.d.ts CHANGED
@@ -22,5 +22,5 @@ export declare class Redis extends CommonRedis<RedisOptions, RedisClient> {
22
22
  release: () => Promise<boolean>;
23
23
  }>;
24
24
  checkHealth(): Promise<HealthCheckResult>;
25
- private parseConnectionUrl;
25
+ isAvailable(): boolean;
26
26
  }
package/memory/redis.js CHANGED
@@ -13,19 +13,33 @@ class Redis extends common_1.Redis {
13
13
  constructor() {
14
14
  super();
15
15
  this._options = this.parseConnectionUrl(common_1.config.REDIS_URL);
16
- this._client = this.createClient({ lazyConnect: true });
16
+ // Commands fail right away while disconnected instead of queueing, so the
17
+ // callers can fall back without waiting for the reconnection
18
+ this._client = this.createClient({
19
+ connectionName: 'appweaver',
20
+ lazyConnect: true,
21
+ enableOfflineQueue: false,
22
+ maxRetriesPerRequest: 1
23
+ });
17
24
  }
18
25
  async onInit() {
19
- await this.connect();
26
+ try {
27
+ await this.connect();
28
+ }
29
+ catch {
30
+ // Logged by the connection monitor, the client keeps reconnecting
31
+ }
20
32
  }
21
33
  async onDestroy() {
22
34
  await this.disconnect();
23
35
  }
24
36
  createClient(options = {}) {
25
- return new ioredis_1.Redis({
37
+ const client = new ioredis_1.Redis({
26
38
  ...this._options,
27
39
  ...options
28
40
  });
41
+ this.monitorConnection(client);
42
+ return client;
29
43
  }
30
44
  async connect() {
31
45
  await this._client.connect();
@@ -35,7 +49,8 @@ class Redis extends common_1.Redis {
35
49
  await this._client.quit();
36
50
  }
37
51
  catch {
38
- // Ignore already closed connection error
52
+ // Stops the reconnection of a connection that is down
53
+ this._client.disconnect();
39
54
  }
40
55
  }
41
56
  async getValue(key) {
@@ -65,7 +80,7 @@ class Redis extends common_1.Redis {
65
80
  return this._client.del(...keys);
66
81
  }
67
82
  async findKeys(pattern = '*') {
68
- return new Promise((resolve) => {
83
+ return new Promise((resolve, reject) => {
69
84
  const stream = this._client.scanStream({
70
85
  match: pattern,
71
86
  count: 10000
@@ -79,6 +94,7 @@ class Redis extends common_1.Redis {
79
94
  stream.on('end', () => {
80
95
  resolve(keysSet);
81
96
  });
97
+ stream.on('error', reject);
82
98
  });
83
99
  }
84
100
  async valueSizeBytes(key) {
@@ -97,6 +113,29 @@ class Redis extends common_1.Redis {
97
113
  return { success: false, message: e.message };
98
114
  }
99
115
  }
116
+ isAvailable() {
117
+ return this._client.status === 'ready';
118
+ }
119
+ /** @internal */
120
+ monitorConnection(client) {
121
+ const name = client.options.connectionName ?? 'redis';
122
+ let lost = false;
123
+ // Logs only the first error of an outage, the client emits one on every
124
+ // failed reconnection attempt
125
+ client.on('error', (error) => {
126
+ if (!lost) {
127
+ lost = true;
128
+ common_1.logger.error(error, `Redis connection '${name}' is down, reconnecting in background`);
129
+ }
130
+ });
131
+ client.on('ready', () => {
132
+ if (lost) {
133
+ lost = false;
134
+ common_1.logger.info(`Redis connection '${name}' is restored`);
135
+ }
136
+ });
137
+ }
138
+ /** @internal */
100
139
  parseConnectionUrl(url) {
101
140
  const urlPattern = /redis:\/\/(?:(.*?)(?::(.*?))?@)?(.*?):(\d+)(?:\/(\d+))?/;
102
141
  const match = url.match(urlPattern);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appweaver/core",
3
- "version": "1.5.1",
3
+ "version": "1.6.0",
4
4
  "description": "Appweaver - the backend framework for AI-first development (@core)",
5
5
  "author": "Luka Matosevic",
6
6
  "license": "MIT",
@@ -51,7 +51,7 @@ const config = {
51
51
  "clientVersion": "7.9.1",
52
52
  "engineVersion": "e922089b7d7502aff4249d5da3420f6fa55fc6ad",
53
53
  "activeProvider": "sqlite",
54
- "inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Generated by Appweaver. Please do not edit this file manually.\n\ndatasource db {\n provider = \"sqlite\"\n}\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"./client\"\n}\n\nmodel ApiKey {\n id Int @id @default(autoincrement())\n key String\n keyHash String @unique\n name String?\n description String?\n enabled Boolean @default(true)\n expiresAt DateTime?\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel ConnectedAccount {\n id Int @id @default(autoincrement())\n provider String\n providerAccountId String\n scope String?\n lastLoginAt DateTime\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n\n @@unique([provider, providerAccountId])\n}\n\nmodel OneTimeToken {\n id Int @id @default(autoincrement())\n tokenHash String\n purpose String\n expiresAt DateTime\n data Json\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n\n @@index([tokenHash, purpose])\n}\n\nmodel Permission {\n id Int @id @default(autoincrement())\n name String @unique\n\n /// Related columns\n roles Role[] @relation(\"RolePermissionsPermission\")\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel Role {\n id Int @id @default(autoincrement())\n name String @unique\n\n /// Related columns\n permissions Permission[] @relation(\"RolePermissionsPermission\")\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel Seeder {\n id String @id @default(uuid())\n checksum String\n seederName String @unique\n startedAt DateTime\n finishedAt DateTime\n logs String?\n\n @@map(\"_seeders\")\n}\n\nmodel File {\n id Int @id @default(autoincrement())\n name String @unique\n originalName String\n mimeType String\n sizeBytes Int\n checksum String\n title String?\n description String?\n resourceField String?\n resourceName String?\n resourceId String?\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n deletedAt DateTime?\n\n @@index([resourceName, resourceId, resourceField])\n}\n",
54
+ "inlineSchema": "// This is your Prisma schema file,\n// learn more about it in the docs: https://pris.ly/d/prisma-schema\n\n// Generated by Appweaver. Please do not edit this file manually.\n\ndatasource db {\n provider = \"sqlite\"\n}\n\ngenerator client {\n provider = \"prisma-client\"\n output = \"./client\"\n}\n\nmodel ApiKey {\n id Int @id @default(autoincrement())\n key String\n keyHash String @unique\n name String?\n description String?\n enabled Boolean @default(true)\n expiresAt DateTime?\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel ConnectedAccount {\n id Int @id @default(autoincrement())\n provider String\n providerAccountId String\n scope String?\n lastLoginAt DateTime\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n\n @@unique([provider, providerAccountId])\n}\n\nmodel OneTimeToken {\n id Int @id @default(autoincrement())\n tokenHash String @unique\n purpose String\n data Json\n expiresAt DateTime\n\n /// Audit columns\n createdAt DateTime @default(now())\n\n @@index([expiresAt])\n}\n\nmodel Permission {\n id Int @id @default(autoincrement())\n name String @unique\n\n /// Related columns\n roles Role[] @relation(\"RolePermissionsPermission\")\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel Role {\n id Int @id @default(autoincrement())\n name String @unique\n\n /// Related columns\n permissions Permission[] @relation(\"RolePermissionsPermission\")\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n}\n\nmodel Seeder {\n id String @id @default(uuid())\n checksum String\n seederName String @unique\n startedAt DateTime\n finishedAt DateTime\n logs String?\n\n @@map(\"_seeders\")\n}\n\nmodel File {\n id Int @id @default(autoincrement())\n name String @unique\n originalName String\n mimeType String\n sizeBytes Int\n checksum String\n title String?\n description String?\n resourceField String?\n resourceName String?\n resourceId String?\n\n /// Audit columns\n updatedAt DateTime @updatedAt\n createdAt DateTime @default(now())\n deletedAt DateTime?\n\n @@index([resourceName, resourceId, resourceField])\n}\n",
55
55
  "runtimeDataModel": {
56
56
  "models": {},
57
57
  "enums": {},
@@ -62,10 +62,10 @@ const config = {
62
62
  "graph": ""
63
63
  }
64
64
  };
65
- config.runtimeDataModel = JSON.parse("{\"models\":{\"ApiKey\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"key\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"keyHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"enabled\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ConnectedAccount\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"provider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerAccountId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scope\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastLoginAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"OneTimeToken\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"purpose\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"data\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Permission\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roles\",\"kind\":\"object\",\"type\":\"Role\",\"relationName\":\"RolePermissionsPermission\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Role\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"permissions\",\"kind\":\"object\",\"type\":\"Permission\",\"relationName\":\"RolePermissionsPermission\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Seeder\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"checksum\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"seederName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"finishedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"logs\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":\"_seeders\"},\"File\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"originalName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mimeType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sizeBytes\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"checksum\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceField\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"deletedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}");
65
+ config.runtimeDataModel = JSON.parse("{\"models\":{\"ApiKey\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"key\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"keyHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"enabled\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"ConnectedAccount\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"provider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"providerAccountId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scope\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"lastLoginAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"OneTimeToken\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"tokenHash\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"purpose\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"data\",\"kind\":\"scalar\",\"type\":\"Json\"},{\"name\":\"expiresAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Permission\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roles\",\"kind\":\"object\",\"type\":\"Role\",\"relationName\":\"RolePermissionsPermission\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Role\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"permissions\",\"kind\":\"object\",\"type\":\"Permission\",\"relationName\":\"RolePermissionsPermission\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null},\"Seeder\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"checksum\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"seederName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"startedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"finishedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"logs\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":\"_seeders\"},\"File\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"originalName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"mimeType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"sizeBytes\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"checksum\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"title\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceField\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"resourceId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"deletedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"}],\"dbName\":null}},\"enums\":{},\"types\":{}}");
66
66
  config.parameterizationSchema = {
67
67
  strings: JSON.parse("[\"where\",\"ApiKey.findUnique\",\"ApiKey.findUniqueOrThrow\",\"orderBy\",\"cursor\",\"ApiKey.findFirst\",\"ApiKey.findFirstOrThrow\",\"ApiKey.findMany\",\"data\",\"ApiKey.createOne\",\"ApiKey.createMany\",\"ApiKey.createManyAndReturn\",\"ApiKey.updateOne\",\"ApiKey.updateMany\",\"ApiKey.updateManyAndReturn\",\"create\",\"update\",\"ApiKey.upsertOne\",\"ApiKey.deleteOne\",\"ApiKey.deleteMany\",\"having\",\"_count\",\"_avg\",\"_sum\",\"_min\",\"_max\",\"ApiKey.groupBy\",\"ApiKey.aggregate\",\"ConnectedAccount.findUnique\",\"ConnectedAccount.findUniqueOrThrow\",\"ConnectedAccount.findFirst\",\"ConnectedAccount.findFirstOrThrow\",\"ConnectedAccount.findMany\",\"ConnectedAccount.createOne\",\"ConnectedAccount.createMany\",\"ConnectedAccount.createManyAndReturn\",\"ConnectedAccount.updateOne\",\"ConnectedAccount.updateMany\",\"ConnectedAccount.updateManyAndReturn\",\"ConnectedAccount.upsertOne\",\"ConnectedAccount.deleteOne\",\"ConnectedAccount.deleteMany\",\"ConnectedAccount.groupBy\",\"ConnectedAccount.aggregate\",\"OneTimeToken.findUnique\",\"OneTimeToken.findUniqueOrThrow\",\"OneTimeToken.findFirst\",\"OneTimeToken.findFirstOrThrow\",\"OneTimeToken.findMany\",\"OneTimeToken.createOne\",\"OneTimeToken.createMany\",\"OneTimeToken.createManyAndReturn\",\"OneTimeToken.updateOne\",\"OneTimeToken.updateMany\",\"OneTimeToken.updateManyAndReturn\",\"OneTimeToken.upsertOne\",\"OneTimeToken.deleteOne\",\"OneTimeToken.deleteMany\",\"OneTimeToken.groupBy\",\"OneTimeToken.aggregate\",\"permissions\",\"roles\",\"Permission.findUnique\",\"Permission.findUniqueOrThrow\",\"Permission.findFirst\",\"Permission.findFirstOrThrow\",\"Permission.findMany\",\"Permission.createOne\",\"Permission.createMany\",\"Permission.createManyAndReturn\",\"Permission.updateOne\",\"Permission.updateMany\",\"Permission.updateManyAndReturn\",\"Permission.upsertOne\",\"Permission.deleteOne\",\"Permission.deleteMany\",\"Permission.groupBy\",\"Permission.aggregate\",\"Role.findUnique\",\"Role.findUniqueOrThrow\",\"Role.findFirst\",\"Role.findFirstOrThrow\",\"Role.findMany\",\"Role.createOne\",\"Role.createMany\",\"Role.createManyAndReturn\",\"Role.updateOne\",\"Role.updateMany\",\"Role.updateManyAndReturn\",\"Role.upsertOne\",\"Role.deleteOne\",\"Role.deleteMany\",\"Role.groupBy\",\"Role.aggregate\",\"Seeder.findUnique\",\"Seeder.findUniqueOrThrow\",\"Seeder.findFirst\",\"Seeder.findFirstOrThrow\",\"Seeder.findMany\",\"Seeder.createOne\",\"Seeder.createMany\",\"Seeder.createManyAndReturn\",\"Seeder.updateOne\",\"Seeder.updateMany\",\"Seeder.updateManyAndReturn\",\"Seeder.upsertOne\",\"Seeder.deleteOne\",\"Seeder.deleteMany\",\"Seeder.groupBy\",\"Seeder.aggregate\",\"File.findUnique\",\"File.findUniqueOrThrow\",\"File.findFirst\",\"File.findFirstOrThrow\",\"File.findMany\",\"File.createOne\",\"File.createMany\",\"File.createManyAndReturn\",\"File.updateOne\",\"File.updateMany\",\"File.updateManyAndReturn\",\"File.upsertOne\",\"File.deleteOne\",\"File.deleteMany\",\"File.groupBy\",\"File.aggregate\",\"AND\",\"OR\",\"NOT\",\"id\",\"name\",\"originalName\",\"mimeType\",\"sizeBytes\",\"checksum\",\"title\",\"description\",\"resourceField\",\"resourceName\",\"resourceId\",\"updatedAt\",\"createdAt\",\"deletedAt\",\"equals\",\"in\",\"notIn\",\"lt\",\"lte\",\"gt\",\"gte\",\"not\",\"contains\",\"startsWith\",\"endsWith\",\"seederName\",\"startedAt\",\"finishedAt\",\"logs\",\"every\",\"some\",\"none\",\"tokenHash\",\"purpose\",\"expiresAt\",\"string_contains\",\"string_starts_with\",\"string_ends_with\",\"array_starts_with\",\"array_ends_with\",\"provider\",\"providerAccountId\",\"scope\",\"lastLoginAt\",\"provider_providerAccountId\",\"key\",\"keyHash\",\"enabled\",\"connectOrCreate\",\"upsert\",\"set\",\"disconnect\",\"delete\",\"connect\",\"updateMany\",\"deleteMany\",\"increment\",\"decrement\",\"multiply\",\"divide\"]"),
68
- graph: "pQJHcAx-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_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-AQAgFgAAxQEAIBcAAL4BACAYAAC-AQAgGQAAvgEAII8BAgAAAAGQAQIAAAAEkQECAAAABJIBAgAAAAGTAQIAAAABlAECAAAAAZUBAgAAAAGWAQIAxAEAIQ4VAAC-AQAgGAAAwwEAIBkAAMMBACCPAQEAAAABkAEBAAAABJEBAQAAAASSAQEAAAABkwEBAAAAAZQBAQAAAAGVAQEAAAABlgEBAMIBACGXAQEAAAABmAEBAAAAAZkBAQAAAAEOFQAAuwEAIBgAAMEBACAZAADBAQAgjwEBAAAAAZABAQAAAAWRAQEAAAAFkgEBAAAAAZMBAQAAAAGUAQEAAAABlQEBAAAAAZYBAQDAAQAhlwEBAAAAAZgBAQAAAAGZAQEAAAABCxUAAL4BACAYAAC_AQAgGQAAvwEAII8BQAAAAAGQAUAAAAAEkQFAAAAABJIBQAAAAAGTAUAAAAABlAFAAAAAAZUBQAAAAAGWAUAAvQEAIQsVAAC7AQAgGAAAvAEAIBkAALwBACCPAUAAAAABkAFAAAAABZEBQAAAAAWSAUAAAAABkwFAAAAAAZQBQAAAAAGVAUAAAAABlgFAALoBACELFQAAuwEAIBgAALwBACAZAAC8AQAgjwFAAAAAAZABQAAAAAWRAUAAAAAFkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAAAAAAZYBQAC6AQAhCI8BAgAAAAGQAQIAAAAFkQECAAAABZIBAgAAAAGTAQIAAAABlAECAAAAAZUBAgAAAAGWAQIAuwEAIQiPAUAAAAABkAFAAAAABZEBQAAAAAWSAUAAAAABkwFAAAAAAZQBQAAAAAGVAUAAAAABlgFAALwBACELFQAAvgEAIBgAAL8BACAZAAC_AQAgjwFAAAAAAZABQAAAAASRAUAAAAAEkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAAAAAAZYBQAC9AQAhCI8BAgAAAAGQAQIAAAAEkQECAAAABJIBAgAAAAGTAQIAAAABlAECAAAAAZUBAgAAAAGWAQIAvgEAIQiPAUAAAAABkAFAAAAABJEBQAAAAASSAUAAAAABkwFAAAAAAZQBQAAAAAGVAUAAAAABlgFAAL8BACEOFQAAuwEAIBgAAMEBACAZAADBAQAgjwEBAAAAAZABAQAAAAWRAQEAAAAFkgEBAAAAAZMBAQAAAAGUAQEAAAABlQEBAAAAAZYBAQDAAQAhlwEBAAAAAZgBAQAAAAGZAQEAAAABC48BAQAAAAGQAQEAAAAFkQEBAAAABZIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQAAAAGWAQEAwQEAIZcBAQAAAAGYAQEAAAABmQEBAAAAAQ4VAAC-AQAgGAAAwwEAIBkAAMMBACCPAQEAAAABkAEBAAAABJEBAQAAAASSAQEAAAABkwEBAAAAAZQBAQAAAAGVAQEAAAABlgEBAMIBACGXAQEAAAABmAEBAAAAAZkBAQAAAAELjwEBAAAAAZABAQAAAASRAQEAAAAEkgEBAAAAAZMBAQAAAAGUAQEAAAABlQEBAAAAAZYBAQDDAQAhlwEBAAAAAZgBAQAAAAGZAQEAAAABDRUAAL4BACAWAADFAQAgFwAAvgEAIBgAAL4BACAZAAC-AQAgjwECAAAAAZABAgAAAASRAQIAAAAEkgECAAAAAZMBAgAAAAGUAQIAAAABlQECAAAAAZYBAgDEAQAhCI8BCAAAAAGQAQgAAAAEkQEIAAAABJIBCAAAAAGTAQgAAAABlAEIAAAAAZUBCAAAAAGWAQgAxQEAIRF-AADGAQAwfwAAngEAEIABAADGAQAwgQECAMcBACGCAQEAyAEAIYMBAQDIAQAhhAEBAMgBACGFAQIAxwEAIYYBAQDIAQAhhwEBAMkBACGIAQEAyQEAIYkBAQDJAQAhigEBAMkBACGLAQEAyQEAIYwBQADKAQAhjQFAAMoBACGOAUAAywEAIQiPAQIAAAABkAECAAAABJEBAgAAAASSAQIAAAABkwECAAAAAZQBAgAAAAGVAQIAAAABlgECAL4BACELjwEBAAAAAZABAQAAAASRAQEAAAAEkgEBAAAAAZMBAQAAAAGUAQEAAAABlQEBAAAAAZYBAQDDAQAhlwEBAAAAAZgBAQAAAAGZAQEAAAABC48BAQAAAAGQAQEAAAAFkQEBAAAABZIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQAAAAGWAQEAwQEAIZcBAQAAAAGYAQEAAAABmQEBAAAAAQiPAUAAAAABkAFAAAAABJEBQAAAAASSAUAAAAABkwFAAAAAAZQBQAAAAAGVAUAAAAABlgFAAL8BACEIjwFAAAAAAZABQAAAAAWRAUAAAAAFkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAAAAAAZYBQAC8AQAhCX4AAMwBADB_AACYAQAQgAEAAMwBADCBAQEAtgEAIYYBAQC2AQAhmgEBALYBACGbAUAAuAEAIZwBQAC4AQAhnQEBALcBACEJfgAAzQEAMH8AAIUBABCAAQAAzQEAMIEBAQDIAQAhhgEBAMgBACGaAQEAyAEAIZsBQADKAQAhnAFAAMoBACGdAQEAyQEAIQd-AADOAQAwfwAAfwAQgAEAAM4BADCBAQIAtQEAIYIBAQC2AQAhjAFAALgBACGNAUAAuAEAIQd-AADPAQAwfwAAaQAQgAEAAM8BADCBAQIAtQEAIYIBAQC2AQAhjAFAALgBACGNAUAAuAEAIQg9AADRAQAgfgAA0AEAMH8AAFIAEIABAADQAQAwgQECAMcBACGCAQEAyAEAIYwBQADKAQAhjQFAAMoBACEDngEAAE4AIJ8BAABOACCgAQAATgAgCDwAANMBACB-AADSAQAwfwAATgAQgAEAANIBADCBAQIAxwEAIYIBAQDIAQAhjAFAAMoBACGNAUAAygEAIQOeAQAAUgAgnwEAAFIAIKABAABSACAKCAAA1QEAIH4AANQBADB_AABJABCAAQAA1AEAMIEBAgC1AQAhjAFAALgBACGNAUAAuAEAIaEBAQC2AQAhogEBALYBACGjAUAAuAEAIQoVAAC-AQAgGAAA1gEAIBkAANYBACCPAYAAAAABlgGAAAAAAaQBAQAAAAGlAQEAAAABpgEBAAAAAacBgAAAAAGoAYAAAAABB48BgAAAAAGWAYAAAAABpAEBAAAAAaUBAQAAAAGmAQEAAAABpwGAAAAAAagBgAAAAAEKCAAA2AEAIH4AANcBADB_AAA2ABCAAQAA1wEAMIEBAgDHAQAhjAFAAMoBACGNAUAAygEAIaEBAQDIAQAhogEBAMgBACGjAUAAygEAIQePAYAAAAABlgGAAAAAAaQBAQAAAAGlAQEAAAABpgEBAAAAAacBgAAAAAGoAYAAAAABCn4AANkBADB_AAAwABCAAQAA2QEAMIEBAgC1AQAhjAFAALgBACGNAUAAuAEAIakBAQC2AQAhqgEBALYBACGrAQEAtwEAIawBQAC4AQAhCn4AANoBADB_AAAdABCAAQAA2gEAMIEBAgDHAQAhjAFAAMoBACGNAUAAygEAIakBAQDIAQAhqgEBAMgBACGrAQEAyQEAIawBQADKAQAhAqkBAQAAAAGqAQEAAAABDH4AANwBADB_AAAXABCAAQAA3AEAMIEBAgC1AQAhggEBALcBACGIAQEAtwEAIYwBQAC4AQAhjQFAALgBACGjAUAAuQEAIa4BAQC2AQAhrwEBALYBACGwASAA3QEAIQUVAAC-AQAgGAAA3wEAIBkAAN8BACCPASAAAAABlgEgAN4BACEFFQAAvgEAIBgAAN8BACAZAADfAQAgjwEgAAAAAZYBIADeAQAhAo8BIAAAAAGWASAA3wEAIQx-AADgAQAwfwAABAAQgAEAAOABADCBAQIAxwEAIYIBAQDJAQAhiAEBAMkBACGMAUAAygEAIY0BQADKAQAhowFAAMsBACGuAQEAyAEAIa8BAQDIAQAhsAEgAOEBACECjwEgAAAAAZYBIADfAQAhAAAAAAAAAbMBAQAAAAEFswECAAAAAbkBAgAAAAG6AQIAAAABuwECAAAAAbwBAgAAAAEBswEBAAAAAQGzAUAAAAABAbMBQAAAAAEAAAAAAAAAAAoPAAD2AQAwEAAA-gEAMLEBAAD3AQAwsgEAAPgBADCzAQAA-QEAMLQBAAD5AQAwtQEAAPkBADC2AQAA-QEAMLcBAAD7AQAwuAEAAPwBADAEgQECAAAAAYIBAQAAAAGMAUAAAAABjQFAAAAAAQIAAABMACAPAACAAgAgAwAAAEwAIA8AAIACACAQAAD_AQAgCD0AANEBACB-AADQAQAwfwAAUgAQgAEAANABADCBAQIAAAABggEBAAAAAYwBQADKAQAhjQFAAMoBACECAAAATAAgCAAA_wEAIAIAAAD9AQAgCAAA_gEAIAd-AAD8AQAwfwAA_QEAEIABAAD8AQAwgQECAMcBACGCAQEAyAEAIYwBQADKAQAhjQFAAMoBACEHfgAA_AEAMH8AAP0BABCAAQAA_AEAMIEBAgDHAQAhggEBAMgBACGMAUAAygEAIY0BQADKAQAhBIEBAgDpAQAhggEBAOgBACGMAUAA6wEAIY0BQADrAQAhBIEBAgDpAQAhggEBAOgBACGMAUAA6wEAIY0BQADrAQAhBIEBAgAAAAGCAQEAAAABjAFAAAAAAY0BQAAAAAEDDwAA9gEAMLEBAAD3AQAwtgEAAPkBADAAAAAAAAoPAACIAgAwEAAAjAIAMLEBAACJAgAwsgEAAIoCADCzAQAAiwIAMLQBAACLAgAwtQEAAIsCADC2AQAAiwIAMLcBAACNAgAwuAEAAI4CADAEgQECAAAAAYIBAQAAAAGMAUAAAAABjQFAAAAAAQIAAABQACAPAACSAgAgAwAAAFAAIA8AAJICACAQAACRAgAgCDwAANMBACB-AADSAQAwfwAATgAQgAEAANIBADCBAQIAAAABggEBAAAAAYwBQADKAQAhjQFAAMoBACECAAAAUAAgCAAAkQIAIAIAAACPAgAgCAAAkAIAIAd-AACOAgAwfwAAjwIAEIABAACOAgAwgQECAMcBACGCAQEAyAEAIYwBQADKAQAhjQFAAMoBACEHfgAAjgIAMH8AAI8CABCAAQAAjgIAMIEBAgDHAQAhggEBAMgBACGMAUAAygEAIY0BQADKAQAhBIEBAgDpAQAhggEBAOgBACGMAUAA6wEAIY0BQADrAQAhBIEBAgDpAQAhggEBAOgBACGMAUAA6wEAIY0BQADrAQAhBIEBAgAAAAGCAQEAAAABjAFAAAAAAY0BQAAAAAEDDwAAiAIAMLEBAACJAgAwtgEAAIsCADAAAAAAAAAAAAAAAAAAAAAAAAGzASAAAAABAAAAAAUVAAYWAAcXAAgYAAkZAAoAAAAAAAUVAAYWAAcXAAgYAAkZAAoAAAAFFQAQFgARFwASGAATGQAUAAAAAAAFFQAQFgARFwASGAATGQAUAAAABRUAGhYAGxcAHBgAHRkAHgAAAAAABRUAGhYAGxcAHBgAHRkAHgIVACM9USECFQAiPFQgATxVAAE9VgAAAAUVACcWACgXACkYACoZACsAAAAAAAUVACcWACgXACkYACoZACsAAAUVADAWADEXADIYADMZADQAAAAAAAUVADAWADEXADIYADMZADQAAAADFQA6GAA7GQA8AAAAAxUAOhgAOxkAPAAAAAUVAEIWAEMXAEQYAEUZAEYAAAAAAAUVAEIWAEMXAEQYAEUZAEYBAgECAwEFBgEGBwEHCAEJCgEKDAILDQMMDwENEQIOEgQREwESFAETFQIaGAUbGQscGwwdHAweHwwfIAwgIQwhIwwiJQIjJg0kKAwlKgImKw4nLAwoLQwpLgIqMQ8rMhUsNBYtNRYuOBYvORYwOhYxPBYyPgIzPxc0QRY1QwI2RBg3RRY4RhY5RwI6Shk7Sx8-TSA_VyBAWCBBWSBCWiBDXCBEXgJFXyRGYSBHYwJIZCVJZSBKZiBLZwJMaiZNayxObCFPbSFQbiFRbyFScCFTciFUdAJVdS1WdyFXeQJYei5ZeyFafCFbfQJcgAEvXYEBNV6DATZfhAE2YIcBNmGIATZiiQE2Y4sBNmSNAQJljgE3ZpABNmeSAQJokwE4aZQBNmqVATZrlgECbJkBOW2aAT1unAE-b50BPnCgAT5xoQE-cqIBPnOkAT50pgECdacBP3apAT53qwECeKwBQHmtAT56rgE-e68BAnyyAUF9swFH"
68
+ graph: "pQJHcAx-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_AABSABCAAQAA0AEAMIEBAgAAAAGCAQEAAAABjAFAAMoBACGNAUAAygEAIQEAAABMACAIPAAA0wEAIH4AANIBADB_AABOABCAAQAA0gEAMIEBAgDHAQAhggEBAMgBACGMAUAAygEAIY0BQADKAQAhATwAAJUCACAIPAAA0wEAIH4AANIBADB_AABOABCAAQAA0gEAMIEBAgAAAAGCAQEAAAABjAFAAMoBACGNAUAAygEAIQMAAABOACADAABPADAEAABQACAIPQAA0QEAIH4AANABADB_AABSABCAAQAA0AEAMIEBAgDHAQAhggEBAMgBACGMAUAAygEAIY0BQADKAQAhAT0AAJQCACADAAAAUgAgAwAAUwAwBAAATAAgAQAAAFIAIAEAAABOACABAAAATAAgAwAAAFIAIAMAAFMAMAQAAEwAIAMAAABSACADAABTADAEAABMACADAAAAUgAgAwAAUwAwBAAATAAgBT0AAJMCACCBAQIAAAABggEBAAAAAYwBQAAAAAGNAUAAAAABAQgAAFsAIASBAQIAAAABggEBAAAAAYwBQAAAAAGNAUAAAAABAQgAAF0AMAEIAABdADAFPQAAhwIAIIEBAgDpAQAhggEBAOgBACGMAUAA6wEAIY0BQADrAQAhAgAAAEwAIAgAAGAAIASBAQIA6QEAIYIBAQDoAQAhjAFAAOsBACGNAUAA6wEAIQIAAABSACAIAABiACACAAAAUgAgCAAAYgAgAwAAAEwAIA8AAFsAIBAAAGAAIAEAAABMACABAAAAUgAgBRUAAIICACAWAACDAgAgFwAAhgIAIBgAAIUCACAZAACEAgAgB34AAM8BADB_AABpABCAAQAAzwEAMIEBAgC1AQAhggEBALYBACGMAUAAuAEAIY0BQAC4AQAhAwAAAFIAIAMAAGgAMBQAAGkAIAMAAABSACADAABTADAEAABMACABAAAAUAAgAQAAAFAAIAMAAABOACADAABPADAEAABQACADAAAATgAgAwAATwAwBAAAUAAgAwAAAE4AIAMAAE8AMAQAAFAAIAU8AACBAgAggQECAAAAAYIBAQAAAAGMAUAAAAABjQFAAAAAAQEIAABxACAEgQECAAAAAYIBAQAAAAGMAUAAAAABjQFAAAAAAQEIAABzADABCAAAcwAwBTwAAPUBACCBAQIA6QEAIYIBAQDoAQAhjAFAAOsBACGNAUAA6wEAIQIAAABQACAIAAB2ACAEgQECAOkBACGCAQEA6AEAIYwBQADrAQAhjQFAAOsBACECAAAATgAgCAAAeAAgAgAAAE4AIAgAAHgAIAMAAABQACAPAABxACAQAAB2ACABAAAAUAAgAQAAAE4AIAUVAADwAQAgFgAA8QEAIBcAAPQBACAYAADzAQAgGQAA8gEAIAd-AADOAQAwfwAAfwAQgAEAAM4BADCBAQIAtQEAIYIBAQC2AQAhjAFAALgBACGNAUAAuAEAIQMAAABOACADAAB-ADAUAAB_ACADAAAATgAgAwAATwAwBAAAUAAgCX4AAM0BADB_AACFAQAQgAEAAM0BADCBAQEAAAABhgEBAMgBACGaAQEAAAABmwFAAMoBACGcAUAAygEAIZ0BAQDJAQAhAQAAAIIBACABAAAAggEAIAl-AADNAQAwfwAAhQEAEIABAADNAQAwgQEBAMgBACGGAQEAyAEAIZoBAQDIAQAhmwFAAMoBACGcAUAAygEAIZ0BAQDJAQAhAZ0BAADiAQAgAwAAAIUBACADAACGAQAwBAAAggEAIAMAAACFAQAgAwAAhgEAMAQAAIIBACADAAAAhQEAIAMAAIYBADAEAACCAQAgBoEBAQAAAAGGAQEAAAABmgEBAAAAAZsBQAAAAAGcAUAAAAABnQEBAAAAAQEIAACKAQAgBoEBAQAAAAGGAQEAAAABmgEBAAAAAZsBQAAAAAGcAUAAAAABnQEBAAAAAQEIAACMAQAwAQgAAIwBADAGgQEBAOgBACGGAQEA6AEAIZoBAQDoAQAhmwFAAOsBACGcAUAA6wEAIZ0BAQDqAQAhAgAAAIIBACAIAACPAQAgBoEBAQDoAQAhhgEBAOgBACGaAQEA6AEAIZsBQADrAQAhnAFAAOsBACGdAQEA6gEAIQIAAACFAQAgCAAAkQEAIAIAAACFAQAgCAAAkQEAIAMAAACCAQAgDwAAigEAIBAAAI8BACABAAAAggEAIAEAAACFAQAgBBUAAO0BACAYAADvAQAgGQAA7gEAIJ0BAADiAQAgCX4AAMwBADB_AACYAQAQgAEAAMwBADCBAQEAtgEAIYYBAQC2AQAhmgEBALYBACGbAUAAuAEAIZwBQAC4AQAhnQEBALcBACEDAAAAhQEAIAMAAJcBADAUAACYAQAgAwAAAIUBACADAACGAQAwBAAAggEAIBF-AADGAQAwfwAAngEAEIABAADGAQAwgQECAAAAAYIBAQAAAAGDAQEAyAEAIYQBAQDIAQAhhQECAMcBACGGAQEAyAEAIYcBAQDJAQAhiAEBAMkBACGJAQEAyQEAIYoBAQDJAQAhiwEBAMkBACGMAUAAygEAIY0BQADKAQAhjgFAAMsBACEBAAAAmwEAIAEAAACbAQAgEX4AAMYBADB_AACeAQAQgAEAAMYBADCBAQIAxwEAIYIBAQDIAQAhgwEBAMgBACGEAQEAyAEAIYUBAgDHAQAhhgEBAMgBACGHAQEAyQEAIYgBAQDJAQAhiQEBAMkBACGKAQEAyQEAIYsBAQDJAQAhjAFAAMoBACGNAUAAygEAIY4BQADLAQAhBocBAADiAQAgiAEAAOIBACCJAQAA4gEAIIoBAADiAQAgiwEAAOIBACCOAQAA4gEAIAMAAACeAQAgAwAAnwEAMAQAAJsBACADAAAAngEAIAMAAJ8BADAEAACbAQAgAwAAAJ4BACADAACfAQAwBAAAmwEAIA6BAQIAAAABggEBAAAAAYMBAQAAAAGEAQEAAAABhQECAAAAAYYBAQAAAAGHAQEAAAABiAEBAAAAAYkBAQAAAAGKAQEAAAABiwEBAAAAAYwBQAAAAAGNAUAAAAABjgFAAAAAAQEIAACjAQAgDoEBAgAAAAGCAQEAAAABgwEBAAAAAYQBAQAAAAGFAQIAAAABhgEBAAAAAYcBAQAAAAGIAQEAAAABiQEBAAAAAYoBAQAAAAGLAQEAAAABjAFAAAAAAY0BQAAAAAGOAUAAAAABAQgAAKUBADABCAAApQEAMA6BAQIA6QEAIYIBAQDoAQAhgwEBAOgBACGEAQEA6AEAIYUBAgDpAQAhhgEBAOgBACGHAQEA6gEAIYgBAQDqAQAhiQEBAOoBACGKAQEA6gEAIYsBAQDqAQAhjAFAAOsBACGNAUAA6wEAIY4BQADsAQAhAgAAAJsBACAIAACoAQAgDoEBAgDpAQAhggEBAOgBACGDAQEA6AEAIYQBAQDoAQAhhQECAOkBACGGAQEA6AEAIYcBAQDqAQAhiAEBAOoBACGJAQEA6gEAIYoBAQDqAQAhiwEBAOoBACGMAUAA6wEAIY0BQADrAQAhjgFAAOwBACECAAAAngEAIAgAAKoBACACAAAAngEAIAgAAKoBACADAAAAmwEAIA8AAKMBACAQAACoAQAgAQAAAJsBACABAAAAngEAIAsVAADjAQAgFgAA5AEAIBcAAOcBACAYAADmAQAgGQAA5QEAIIcBAADiAQAgiAEAAOIBACCJAQAA4gEAIIoBAADiAQAgiwEAAOIBACCOAQAA4gEAIBF-AAC0AQAwfwAAsQEAEIABAAC0AQAwgQECALUBACGCAQEAtgEAIYMBAQC2AQAhhAEBALYBACGFAQIAtQEAIYYBAQC2AQAhhwEBALcBACGIAQEAtwEAIYkBAQC3AQAhigEBALcBACGLAQEAtwEAIYwBQAC4AQAhjQFAALgBACGOAUAAuQEAIQMAAACeAQAgAwAAsAEAMBQAALEBACADAAAAngEAIAMAAJ8BADAEAACbAQAgEX4AALQBADB_AACxAQAQgAEAALQBADCBAQIAtQEAIYIBAQC2AQAhgwEBALYBACGEAQEAtgEAIYUBAgC1AQAhhgEBALYBACGHAQEAtwEAIYgBAQC3AQAhiQEBALcBACGKAQEAtwEAIYsBAQC3AQAhjAFAALgBACGNAUAAuAEAIY4BQAC5AQAhDRUAAL4BACAWAADFAQAgFwAAvgEAIBgAAL4BACAZAAC-AQAgjwECAAAAAZABAgAAAASRAQIAAAAEkgECAAAAAZMBAgAAAAGUAQIAAAABlQECAAAAAZYBAgDEAQAhDhUAAL4BACAYAADDAQAgGQAAwwEAII8BAQAAAAGQAQEAAAAEkQEBAAAABJIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQAAAAGWAQEAwgEAIZcBAQAAAAGYAQEAAAABmQEBAAAAAQ4VAAC7AQAgGAAAwQEAIBkAAMEBACCPAQEAAAABkAEBAAAABZEBAQAAAAWSAQEAAAABkwEBAAAAAZQBAQAAAAGVAQEAAAABlgEBAMABACGXAQEAAAABmAEBAAAAAZkBAQAAAAELFQAAvgEAIBgAAL8BACAZAAC_AQAgjwFAAAAAAZABQAAAAASRAUAAAAAEkgFAAAAAAZMBQAAAAAGUAUAAAAABlQFAAAAAAZYBQAC9AQAhCxUAALsBACAYAAC8AQAgGQAAvAEAII8BQAAAAAGQAUAAAAAFkQFAAAAABZIBQAAAAAGTAUAAAAABlAFAAAAAAZUBQAAAAAGWAUAAugEAIQsVAAC7AQAgGAAAvAEAIBkAALwBACCPAUAAAAABkAFAAAAABZEBQAAAAAWSAUAAAAABkwFAAAAAAZQBQAAAAAGVAUAAAAABlgFAALoBACEIjwECAAAAAZABAgAAAAWRAQIAAAAFkgECAAAAAZMBAgAAAAGUAQIAAAABlQECAAAAAZYBAgC7AQAhCI8BQAAAAAGQAUAAAAAFkQFAAAAABZIBQAAAAAGTAUAAAAABlAFAAAAAAZUBQAAAAAGWAUAAvAEAIQsVAAC-AQAgGAAAvwEAIBkAAL8BACCPAUAAAAABkAFAAAAABJEBQAAAAASSAUAAAAABkwFAAAAAAZQBQAAAAAGVAUAAAAABlgFAAL0BACEIjwECAAAAAZABAgAAAASRAQIAAAAEkgECAAAAAZMBAgAAAAGUAQIAAAABlQECAAAAAZYBAgC-AQAhCI8BQAAAAAGQAUAAAAAEkQFAAAAABJIBQAAAAAGTAUAAAAABlAFAAAAAAZUBQAAAAAGWAUAAvwEAIQ4VAAC7AQAgGAAAwQEAIBkAAMEBACCPAQEAAAABkAEBAAAABZEBAQAAAAWSAQEAAAABkwEBAAAAAZQBAQAAAAGVAQEAAAABlgEBAMABACGXAQEAAAABmAEBAAAAAZkBAQAAAAELjwEBAAAAAZABAQAAAAWRAQEAAAAFkgEBAAAAAZMBAQAAAAGUAQEAAAABlQEBAAAAAZYBAQDBAQAhlwEBAAAAAZgBAQAAAAGZAQEAAAABDhUAAL4BACAYAADDAQAgGQAAwwEAII8BAQAAAAGQAQEAAAAEkQEBAAAABJIBAQAAAAGTAQEAAAABlAEBAAAAAZUBAQAAAAGWAQEAwgEAIZcBAQAAAAGYAQEAAAABmQEBAAAAAQuPAQEAAAABkAEBAAAABJEBAQAAAASSAQEAAAABkwEBAAAAAZQBAQAAAAGVAQEAAAABlgEBAMMBACGXAQEAAAABmAEBAAAAAZkBAQAAAAENFQAAvgEAIBYAAMUBACAXAAC-AQAgGAAAvgEAIBkAAL4BACCPAQIAAAABkAECAAAABJEBAgAAAASSAQIAAAABkwECAAAAAZQBAgAAAAGVAQIAAAABlgECAMQBACEIjwEIAAAAAZABCAAAAASRAQgAAAAEkgEIAAAAAZMBCAAAAAGUAQgAAAABlQEIAAAAAZYBCADFAQAhEX4AAMYBADB_AACeAQAQgAEAAMYBADCBAQIAxwEAIYIBAQDIAQAhgwEBAMgBACGEAQEAyAEAIYUBAgDHAQAhhgEBAMgBACGHAQEAyQEAIYgBAQDJAQAhiQEBAMkBACGKAQEAyQEAIYsBAQDJAQAhjAFAAMoBACGNAUAAygEAIY4BQADLAQAhCI8BAgAAAAGQAQIAAAAEkQECAAAABJIBAgAAAAGTAQIAAAABlAECAAAAAZUBAgAAAAGWAQIAvgEAIQuPAQEAAAABkAEBAAAABJEBAQAAAASSAQEAAAABkwEBAAAAAZQBAQAAAAGVAQEAAAABlgEBAMMBACGXAQEAAAABmAEBAAAAAZkBAQAAAAELjwEBAAAAAZABAQAAAAWRAQEAAAAFkgEBAAAAAZMBAQAAAAGUAQEAAAABlQEBAAAAAZYBAQDBAQAhlwEBAAAAAZgBAQAAAAGZAQEAAAABCI8BQAAAAAGQAUAAAAAEkQFAAAAABJIBQAAAAAGTAUAAAAABlAFAAAAAAZUBQAAAAAGWAUAAvwEAIQiPAUAAAAABkAFAAAAABZEBQAAAAAWSAUAAAAABkwFAAAAAAZQBQAAAAAGVAUAAAAABlgFAALwBACEJfgAAzAEAMH8AAJgBABCAAQAAzAEAMIEBAQC2AQAhhgEBALYBACGaAQEAtgEAIZsBQAC4AQAhnAFAALgBACGdAQEAtwEAIQl-AADNAQAwfwAAhQEAEIABAADNAQAwgQEBAMgBACGGAQEAyAEAIZoBAQDIAQAhmwFAAMoBACGcAUAAygEAIZ0BAQDJAQAhB34AAM4BADB_AAB_ABCAAQAAzgEAMIEBAgC1AQAhggEBALYBACGMAUAAuAEAIY0BQAC4AQAhB34AAM8BADB_AABpABCAAQAAzwEAMIEBAgC1AQAhggEBALYBACGMAUAAuAEAIY0BQAC4AQAhCD0AANEBACB-AADQAQAwfwAAUgAQgAEAANABADCBAQIAxwEAIYIBAQDIAQAhjAFAAMoBACGNAUAAygEAIQOeAQAATgAgnwEAAE4AIKABAABOACAIPAAA0wEAIH4AANIBADB_AABOABCAAQAA0gEAMIEBAgDHAQAhggEBAMgBACGMAUAAygEAIY0BQADKAQAhA54BAABSACCfAQAAUgAgoAEAAFIAIAkIAADVAQAgfgAA1AEAMH8AAEkAEIABAADUAQAwgQECALUBACGNAUAAuAEAIaEBAQC2AQAhogEBALYBACGjAUAAuAEAIQoVAAC-AQAgGAAA1gEAIBkAANYBACCPAYAAAAABlgGAAAAAAaQBAQAAAAGlAQEAAAABpgEBAAAAAacBgAAAAAGoAYAAAAABB48BgAAAAAGWAYAAAAABpAEBAAAAAaUBAQAAAAGmAQEAAAABpwGAAAAAAagBgAAAAAEJCAAA2AEAIH4AANcBADB_AAA2ABCAAQAA1wEAMIEBAgDHAQAhjQFAAMoBACGhAQEAyAEAIaIBAQDIAQAhowFAAMoBACEHjwGAAAAAAZYBgAAAAAGkAQEAAAABpQEBAAAAAaYBAQAAAAGnAYAAAAABqAGAAAAAAQp-AADZAQAwfwAAMAAQgAEAANkBADCBAQIAtQEAIYwBQAC4AQAhjQFAALgBACGpAQEAtgEAIaoBAQC2AQAhqwEBALcBACGsAUAAuAEAIQp-AADaAQAwfwAAHQAQgAEAANoBADCBAQIAxwEAIYwBQADKAQAhjQFAAMoBACGpAQEAyAEAIaoBAQDIAQAhqwEBAMkBACGsAUAAygEAIQKpAQEAAAABqgEBAAAAAQx-AADcAQAwfwAAFwAQgAEAANwBADCBAQIAtQEAIYIBAQC3AQAhiAEBALcBACGMAUAAuAEAIY0BQAC4AQAhowFAALkBACGuAQEAtgEAIa8BAQC2AQAhsAEgAN0BACEFFQAAvgEAIBgAAN8BACAZAADfAQAgjwEgAAAAAZYBIADeAQAhBRUAAL4BACAYAADfAQAgGQAA3wEAII8BIAAAAAGWASAA3gEAIQKPASAAAAABlgEgAN8BACEMfgAA4AEAMH8AAAQAEIABAADgAQAwgQECAMcBACGCAQEAyQEAIYgBAQDJAQAhjAFAAMoBACGNAUAAygEAIaMBQADLAQAhrgEBAMgBACGvAQEAyAEAIbABIADhAQAhAo8BIAAAAAGWASAA3wEAIQAAAAAAAAGzAQEAAAABBbMBAgAAAAG5AQIAAAABugECAAAAAbsBAgAAAAG8AQIAAAABAbMBAQAAAAEBswFAAAAAAQGzAUAAAAABAAAAAAAAAAAKDwAA9gEAMBAAAPoBADCxAQAA9wEAMLIBAAD4AQAwswEAAPkBADC0AQAA-QEAMLUBAAD5AQAwtgEAAPkBADC3AQAA-wEAMLgBAAD8AQAwBIEBAgAAAAGCAQEAAAABjAFAAAAAAY0BQAAAAAECAAAATAAgDwAAgAIAIAMAAABMACAPAACAAgAgEAAA_wEAIAg9AADRAQAgfgAA0AEAMH8AAFIAEIABAADQAQAwgQECAAAAAYIBAQAAAAGMAUAAygEAIY0BQADKAQAhAgAAAEwAIAgAAP8BACACAAAA_QEAIAgAAP4BACAHfgAA_AEAMH8AAP0BABCAAQAA_AEAMIEBAgDHAQAhggEBAMgBACGMAUAAygEAIY0BQADKAQAhB34AAPwBADB_AAD9AQAQgAEAAPwBADCBAQIAxwEAIYIBAQDIAQAhjAFAAMoBACGNAUAAygEAIQSBAQIA6QEAIYIBAQDoAQAhjAFAAOsBACGNAUAA6wEAIQSBAQIA6QEAIYIBAQDoAQAhjAFAAOsBACGNAUAA6wEAIQSBAQIAAAABggEBAAAAAYwBQAAAAAGNAUAAAAABAw8AAPYBADCxAQAA9wEAMLYBAAD5AQAwAAAAAAAKDwAAiAIAMBAAAIwCADCxAQAAiQIAMLIBAACKAgAwswEAAIsCADC0AQAAiwIAMLUBAACLAgAwtgEAAIsCADC3AQAAjQIAMLgBAACOAgAwBIEBAgAAAAGCAQEAAAABjAFAAAAAAY0BQAAAAAECAAAAUAAgDwAAkgIAIAMAAABQACAPAACSAgAgEAAAkQIAIAg8AADTAQAgfgAA0gEAMH8AAE4AEIABAADSAQAwgQECAAAAAYIBAQAAAAGMAUAAygEAIY0BQADKAQAhAgAAAFAAIAgAAJECACACAAAAjwIAIAgAAJACACAHfgAAjgIAMH8AAI8CABCAAQAAjgIAMIEBAgDHAQAhggEBAMgBACGMAUAAygEAIY0BQADKAQAhB34AAI4CADB_AACPAgAQgAEAAI4CADCBAQIAxwEAIYIBAQDIAQAhjAFAAMoBACGNAUAAygEAIQSBAQIA6QEAIYIBAQDoAQAhjAFAAOsBACGNAUAA6wEAIQSBAQIA6QEAIYIBAQDoAQAhjAFAAOsBACGNAUAA6wEAIQSBAQIAAAABggEBAAAAAYwBQAAAAAGNAUAAAAABAw8AAIgCADCxAQAAiQIAMLYBAACLAgAwAAAAAAAAAAAAAAAAAAAAAAABswEgAAAAAQAAAAAFFQAGFgAHFwAIGAAJGQAKAAAAAAAFFQAGFgAHFwAIGAAJGQAKAAAABRUAEBYAERcAEhgAExkAFAAAAAAABRUAEBYAERcAEhgAExkAFAAAAAUVABoWABsXABwYAB0ZAB4AAAAAAAUVABoWABsXABwYAB0ZAB4CFQAjPVEhAhUAIjxUIAE8VQABPVYAAAAFFQAnFgAoFwApGAAqGQArAAAAAAAFFQAnFgAoFwApGAAqGQArAAAFFQAwFgAxFwAyGAAzGQA0AAAAAAAFFQAwFgAxFwAyGAAzGQA0AAAAAxUAOhgAOxkAPAAAAAMVADoYADsZADwAAAAFFQBCFgBDFwBEGABFGQBGAAAAAAAFFQBCFgBDFwBEGABFGQBGAQIBAgMBBQYBBgcBBwgBCQoBCgwCCw0DDA8BDRECDhIEERMBEhQBExUCGhgFGxkLHBsMHRwMHh8MHyAMICEMISMMIiUCIyYNJCgMJSoCJisOJywMKC0MKS4CKjEPKzIVLDQWLTUWLjgWLzkWMDoWMTwWMj4CMz8XNEEWNUMCNkQYN0UWOEYWOUcCOkoZO0sfPk0gP1cgQFggQVkgQlogQ1wgRF4CRV8kRmEgR2MCSGQlSWUgSmYgS2cCTGomTWssTmwhT20hUG4hUW8hUnAhU3IhVHQCVXUtVnchV3kCWHouWXshWnwhW30CXIABL12BATVegwE2X4QBNmCHATZhiAE2YokBNmOLATZkjQECZY4BN2aQATZnkgECaJMBOGmUATZqlQE2a5YBAmyZATltmgE9bpwBPm-dAT5woAE-caEBPnKiAT5zpAE-dKYBAnWnAT92qQE-d6sBAnisAUB5rQE-eq4BPnuvAQJ8sgFBfbMBRw"
69
69
  };
70
70
  async function decodeBase64AsWasm(wasmBase64) {
71
71
  const { Buffer } = await Promise.resolve().then(() => __importStar(require('node:buffer')));
@@ -842,9 +842,8 @@ export declare const OneTimeTokenScalarFieldEnum: {
842
842
  readonly id: "id";
843
843
  readonly tokenHash: "tokenHash";
844
844
  readonly purpose: "purpose";
845
- readonly expiresAt: "expiresAt";
846
845
  readonly data: "data";
847
- readonly updatedAt: "updatedAt";
846
+ readonly expiresAt: "expiresAt";
848
847
  readonly createdAt: "createdAt";
849
848
  };
850
849
  export type OneTimeTokenScalarFieldEnum = (typeof OneTimeTokenScalarFieldEnum)[keyof typeof OneTimeTokenScalarFieldEnum];
@@ -141,9 +141,8 @@ exports.OneTimeTokenScalarFieldEnum = {
141
141
  id: 'id',
142
142
  tokenHash: 'tokenHash',
143
143
  purpose: 'purpose',
144
- expiresAt: 'expiresAt',
145
144
  data: 'data',
146
- updatedAt: 'updatedAt',
145
+ expiresAt: 'expiresAt',
147
146
  createdAt: 'createdAt'
148
147
  };
149
148
  exports.PermissionScalarFieldEnum = {
@@ -65,9 +65,8 @@ export declare const OneTimeTokenScalarFieldEnum: {
65
65
  readonly id: "id";
66
66
  readonly tokenHash: "tokenHash";
67
67
  readonly purpose: "purpose";
68
- readonly expiresAt: "expiresAt";
69
68
  readonly data: "data";
70
- readonly updatedAt: "updatedAt";
69
+ readonly expiresAt: "expiresAt";
71
70
  readonly createdAt: "createdAt";
72
71
  };
73
72
  export type OneTimeTokenScalarFieldEnum = (typeof OneTimeTokenScalarFieldEnum)[keyof typeof OneTimeTokenScalarFieldEnum];
@@ -113,9 +113,8 @@ exports.OneTimeTokenScalarFieldEnum = {
113
113
  id: 'id',
114
114
  tokenHash: 'tokenHash',
115
115
  purpose: 'purpose',
116
- expiresAt: 'expiresAt',
117
116
  data: 'data',
118
- updatedAt: 'updatedAt',
117
+ expiresAt: 'expiresAt',
119
118
  createdAt: 'createdAt'
120
119
  };
121
120
  exports.PermissionScalarFieldEnum = {