Bibhu Mishra Claude Sonnet 4.6 commited on
Commit
fd6fef0
·
1 Parent(s): 60d33d0

feat: add NestJS in-process scheduler to replace unreliable GitHub cron

Browse files

GitHub Actions scheduled workflows were firing hours late or not at all.
This adds @nestjs/schedule with four @Cron jobs inside the NestJS process
(which stays live via the keepalive workflow) to dispatch the same
workflow_dispatch calls at the correct UTC times:
- Market Analyst: 13:30 UTC Mon-Fri
- Paper Trader: 14:30, 17:00, 19:45 UTC Mon-Fri

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

api/package.json CHANGED
@@ -26,6 +26,7 @@
26
  "@nestjs/jwt": "^11.0.2",
27
  "@nestjs/passport": "^11.0.5",
28
  "@nestjs/platform-express": "^11.0.1",
 
29
  "@nestjs/serve-static": "^5.0.5",
30
  "@nestjs/typeorm": "^11.0.2",
31
  "@types/pg": "^8.20.0",
 
26
  "@nestjs/jwt": "^11.0.2",
27
  "@nestjs/passport": "^11.0.5",
28
  "@nestjs/platform-express": "^11.0.1",
29
+ "@nestjs/schedule": "^6.1.3",
30
  "@nestjs/serve-static": "^5.0.5",
31
  "@nestjs/typeorm": "^11.0.2",
32
  "@types/pg": "^8.20.0",
api/src/agent-runs/agent-runs.module.ts CHANGED
@@ -3,12 +3,13 @@ import { TypeOrmModule } from '@nestjs/typeorm';
3
  import { AgentRun } from '../common/entities/agent-run.entity';
4
  import { AuthModule } from '../auth/auth.module';
5
  import { AgentRunsController } from './agent-runs.controller';
 
6
  import { AgentRunsService } from './agent-runs.service';
7
 
8
  @Module({
9
  imports: [TypeOrmModule.forFeature([AgentRun]), AuthModule],
10
  controllers: [AgentRunsController],
11
- providers: [AgentRunsService],
12
  exports: [AgentRunsService],
13
  })
14
  export class AgentRunsModule {}
 
3
  import { AgentRun } from '../common/entities/agent-run.entity';
4
  import { AuthModule } from '../auth/auth.module';
5
  import { AgentRunsController } from './agent-runs.controller';
6
+ import { AgentRunsScheduler } from './agent-runs.scheduler';
7
  import { AgentRunsService } from './agent-runs.service';
8
 
9
  @Module({
10
  imports: [TypeOrmModule.forFeature([AgentRun]), AuthModule],
11
  controllers: [AgentRunsController],
12
+ providers: [AgentRunsService, AgentRunsScheduler],
13
  exports: [AgentRunsService],
14
  })
15
  export class AgentRunsModule {}
api/src/agent-runs/agent-runs.scheduler.ts ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Injectable, Logger } from '@nestjs/common';
2
+ import { Cron } from '@nestjs/schedule';
3
+ import { AgentRunsService } from './agent-runs.service';
4
+
5
+ @Injectable()
6
+ export class AgentRunsScheduler {
7
+ private readonly logger = new Logger(AgentRunsScheduler.name);
8
+
9
+ constructor(private readonly agentRunsService: AgentRunsService) {}
10
+
11
+ // Market Analyst — 7:30 AM CST / 8:30 AM CDT (13:30 UTC), Mon–Fri
12
+ @Cron('30 13 * * 1-5', { timeZone: 'UTC' })
13
+ async runMarketAnalyst() {
14
+ this.logger.log('Scheduled trigger: market_analyst');
15
+ await this.agentRunsService.trigger('market_analyst');
16
+ }
17
+
18
+ // Paper Trader — 8:30 AM CST / 9:30 AM CDT (14:30 UTC), Mon–Fri
19
+ @Cron('30 14 * * 1-5', { timeZone: 'UTC' })
20
+ async runPaperTraderMorning() {
21
+ this.logger.log('Scheduled trigger: paper_trader (morning)');
22
+ await this.agentRunsService.trigger('paper_trader');
23
+ }
24
+
25
+ // Paper Trader — 11:00 AM CST / 12:00 PM CDT (17:00 UTC), Mon–Fri
26
+ @Cron('0 17 * * 1-5', { timeZone: 'UTC' })
27
+ async runPaperTraderMidday() {
28
+ this.logger.log('Scheduled trigger: paper_trader (midday)');
29
+ await this.agentRunsService.trigger('paper_trader');
30
+ }
31
+
32
+ // Paper Trader — 1:45 PM CST / 2:45 PM CDT (19:45 UTC), Mon–Fri
33
+ @Cron('45 19 * * 1-5', { timeZone: 'UTC' })
34
+ async runPaperTraderAfternoon() {
35
+ this.logger.log('Scheduled trigger: paper_trader (afternoon)');
36
+ await this.agentRunsService.trigger('paper_trader');
37
+ }
38
+ }
api/src/app.module.ts CHANGED
@@ -13,6 +13,7 @@ import * as path from 'path';
13
  const pgTypes = require('pg').types;
14
  pgTypes.setTypeParser(1114, (v: string) => (v ? new Date(v.replace(' ', 'T') + 'Z') : null));
15
  pgTypes.setTypeParser(1184, (v: string) => (v ? new Date(v) : null));
 
16
  import { SqliteDateSubscriber } from './common/sqlite-date.subscriber';
17
  import { AgentRunsModule } from './agent-runs/agent-runs.module';
18
  import { AuthModule } from './auth/auth.module';
@@ -48,6 +49,7 @@ const ENTITIES = [
48
  @Module({
49
  imports: [
50
  ConfigModule.forRoot({ isGlobal: true, envFilePath: ENV_PATH }),
 
51
  TypeOrmModule.forRootAsync({
52
  imports: [ConfigModule],
53
  inject: [ConfigService],
 
13
  const pgTypes = require('pg').types;
14
  pgTypes.setTypeParser(1114, (v: string) => (v ? new Date(v.replace(' ', 'T') + 'Z') : null));
15
  pgTypes.setTypeParser(1184, (v: string) => (v ? new Date(v) : null));
16
+ import { ScheduleModule } from '@nestjs/schedule';
17
  import { SqliteDateSubscriber } from './common/sqlite-date.subscriber';
18
  import { AgentRunsModule } from './agent-runs/agent-runs.module';
19
  import { AuthModule } from './auth/auth.module';
 
49
  @Module({
50
  imports: [
51
  ConfigModule.forRoot({ isGlobal: true, envFilePath: ENV_PATH }),
52
+ ScheduleModule.forRoot(),
53
  TypeOrmModule.forRootAsync({
54
  imports: [ConfigModule],
55
  inject: [ConfigService],
package-lock.json CHANGED
@@ -25,6 +25,7 @@
25
  "@nestjs/jwt": "^11.0.2",
26
  "@nestjs/passport": "^11.0.5",
27
  "@nestjs/platform-express": "^11.0.1",
 
28
  "@nestjs/serve-static": "^5.0.5",
29
  "@nestjs/typeorm": "^11.0.2",
30
  "@types/pg": "^8.20.0",
@@ -392,14 +393,6 @@
392
  "dev": true,
393
  "license": "MIT"
394
  },
395
- "api/node_modules/@borewit/text-codec": {
396
- "version": "0.2.2",
397
- "license": "MIT",
398
- "funding": {
399
- "type": "github",
400
- "url": "https://github.com/sponsors/Borewit"
401
- }
402
- },
403
  "api/node_modules/@colors/colors": {
404
  "version": "1.5.0",
405
  "dev": true,
@@ -1492,13 +1485,6 @@
1492
  "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
1493
  }
1494
  },
1495
- "api/node_modules/@lukeed/csprng": {
1496
- "version": "1.1.0",
1497
- "license": "MIT",
1498
- "engines": {
1499
- "node": ">=8"
1500
- }
1501
- },
1502
  "api/node_modules/@nestjs/cli": {
1503
  "version": "11.0.23",
1504
  "dev": true,
@@ -1673,35 +1659,6 @@
1673
  }
1674
  }
1675
  },
1676
- "api/node_modules/@nestjs/common": {
1677
- "version": "11.1.27",
1678
- "license": "MIT",
1679
- "dependencies": {
1680
- "file-type": "21.3.4",
1681
- "iterare": "1.2.1",
1682
- "load-esm": "1.0.3",
1683
- "tslib": "2.8.1",
1684
- "uid": "2.0.2"
1685
- },
1686
- "funding": {
1687
- "type": "opencollective",
1688
- "url": "https://opencollective.com/nest"
1689
- },
1690
- "peerDependencies": {
1691
- "class-transformer": ">=0.4.1",
1692
- "class-validator": ">=0.13.2",
1693
- "reflect-metadata": "^0.1.12 || ^0.2.0",
1694
- "rxjs": "^7.1.0"
1695
- },
1696
- "peerDependenciesMeta": {
1697
- "class-transformer": {
1698
- "optional": true
1699
- },
1700
- "class-validator": {
1701
- "optional": true
1702
- }
1703
- }
1704
- },
1705
  "api/node_modules/@nestjs/config": {
1706
  "version": "4.0.4",
1707
  "license": "MIT",
@@ -1715,43 +1672,6 @@
1715
  "rxjs": "^7.1.0"
1716
  }
1717
  },
1718
- "api/node_modules/@nestjs/core": {
1719
- "version": "11.1.27",
1720
- "license": "MIT",
1721
- "dependencies": {
1722
- "fast-safe-stringify": "2.1.1",
1723
- "iterare": "1.2.1",
1724
- "path-to-regexp": "8.4.2",
1725
- "tslib": "2.8.1",
1726
- "uid": "2.0.2"
1727
- },
1728
- "engines": {
1729
- "node": ">= 20"
1730
- },
1731
- "funding": {
1732
- "type": "opencollective",
1733
- "url": "https://opencollective.com/nest"
1734
- },
1735
- "peerDependencies": {
1736
- "@nestjs/common": "^11.0.0",
1737
- "@nestjs/microservices": "^11.0.0",
1738
- "@nestjs/platform-express": "^11.0.0",
1739
- "@nestjs/websockets": "^11.0.0",
1740
- "reflect-metadata": "^0.1.12 || ^0.2.0",
1741
- "rxjs": "^7.1.0"
1742
- },
1743
- "peerDependenciesMeta": {
1744
- "@nestjs/microservices": {
1745
- "optional": true
1746
- },
1747
- "@nestjs/platform-express": {
1748
- "optional": true
1749
- },
1750
- "@nestjs/websockets": {
1751
- "optional": true
1752
- }
1753
- }
1754
- },
1755
  "api/node_modules/@nestjs/jwt": {
1756
  "version": "11.0.2",
1757
  "license": "MIT",
@@ -2008,25 +1928,6 @@
2008
  "version": "1.2.5",
2009
  "license": "MIT"
2010
  },
2011
- "api/node_modules/@tokenizer/inflate": {
2012
- "version": "0.4.1",
2013
- "license": "MIT",
2014
- "dependencies": {
2015
- "debug": "^4.4.3",
2016
- "token-types": "^6.1.1"
2017
- },
2018
- "engines": {
2019
- "node": ">=18"
2020
- },
2021
- "funding": {
2022
- "type": "github",
2023
- "url": "https://github.com/sponsors/Borewit"
2024
- }
2025
- },
2026
- "api/node_modules/@tokenizer/token": {
2027
- "version": "0.3.0",
2028
- "license": "MIT"
2029
- },
2030
  "api/node_modules/@tsconfig/node10": {
2031
  "version": "1.0.12",
2032
  "devOptional": true,
@@ -3996,10 +3897,6 @@
3996
  "dev": true,
3997
  "license": "MIT"
3998
  },
3999
- "api/node_modules/fast-safe-stringify": {
4000
- "version": "2.1.1",
4001
- "license": "MIT"
4002
- },
4003
  "api/node_modules/fb-watchman": {
4004
  "version": "2.0.2",
4005
  "dev": true,
@@ -4019,22 +3916,6 @@
4019
  "node": ">=16.0.0"
4020
  }
4021
  },
4022
- "api/node_modules/file-type": {
4023
- "version": "21.3.4",
4024
- "license": "MIT",
4025
- "dependencies": {
4026
- "@tokenizer/inflate": "^0.4.1",
4027
- "strtok3": "^10.3.4",
4028
- "token-types": "^6.1.1",
4029
- "uint8array-extras": "^1.4.0"
4030
- },
4031
- "engines": {
4032
- "node": ">=20"
4033
- },
4034
- "funding": {
4035
- "url": "https://github.com/sindresorhus/file-type?sponsor=1"
4036
- }
4037
- },
4038
  "api/node_modules/file-uri-to-path": {
4039
  "version": "1.0.0",
4040
  "license": "MIT"
@@ -4400,24 +4281,6 @@
4400
  "url": "https://opencollective.com/express"
4401
  }
4402
  },
4403
- "api/node_modules/ieee754": {
4404
- "version": "1.2.1",
4405
- "funding": [
4406
- {
4407
- "type": "github",
4408
- "url": "https://github.com/sponsors/feross"
4409
- },
4410
- {
4411
- "type": "patreon",
4412
- "url": "https://www.patreon.com/feross"
4413
- },
4414
- {
4415
- "type": "consulting",
4416
- "url": "https://feross.org/support"
4417
- }
4418
- ],
4419
- "license": "BSD-3-Clause"
4420
- },
4421
  "api/node_modules/ignore": {
4422
  "version": "5.3.2",
4423
  "dev": true,
@@ -4615,13 +4478,6 @@
4615
  "node": ">=8"
4616
  }
4617
  },
4618
- "api/node_modules/iterare": {
4619
- "version": "1.2.1",
4620
- "license": "ISC",
4621
- "engines": {
4622
- "node": ">=6"
4623
- }
4624
- },
4625
  "api/node_modules/jackspeak": {
4626
  "version": "3.4.3",
4627
  "dev": true,
@@ -5413,23 +5269,6 @@
5413
  "dev": true,
5414
  "license": "MIT"
5415
  },
5416
- "api/node_modules/load-esm": {
5417
- "version": "1.0.3",
5418
- "funding": [
5419
- {
5420
- "type": "github",
5421
- "url": "https://github.com/sponsors/Borewit"
5422
- },
5423
- {
5424
- "type": "buymeacoffee",
5425
- "url": "https://buymeacoffee.com/borewit"
5426
- }
5427
- ],
5428
- "license": "MIT",
5429
- "engines": {
5430
- "node": ">=13.2.0"
5431
- }
5432
- },
5433
  "api/node_modules/loader-runner": {
5434
  "version": "4.3.2",
5435
  "dev": true,
@@ -6035,14 +5874,6 @@
6035
  "node": ">=0.10.0"
6036
  }
6037
  },
6038
- "api/node_modules/path-to-regexp": {
6039
- "version": "8.4.2",
6040
- "license": "MIT",
6041
- "funding": {
6042
- "type": "opencollective",
6043
- "url": "https://opencollective.com/express"
6044
- }
6045
- },
6046
  "api/node_modules/path-type": {
6047
  "version": "4.0.0",
6048
  "dev": true,
@@ -6334,10 +6165,6 @@
6334
  "url": "https://paulmillr.com/funding/"
6335
  }
6336
  },
6337
- "api/node_modules/reflect-metadata": {
6338
- "version": "0.2.2",
6339
- "license": "Apache-2.0"
6340
- },
6341
  "api/node_modules/resolve-cwd": {
6342
  "version": "3.0.0",
6343
  "dev": true,
@@ -6670,20 +6497,6 @@
6670
  "url": "https://github.com/sponsors/sindresorhus"
6671
  }
6672
  },
6673
- "api/node_modules/strtok3": {
6674
- "version": "10.3.5",
6675
- "license": "MIT",
6676
- "dependencies": {
6677
- "@tokenizer/token": "^0.3.0"
6678
- },
6679
- "engines": {
6680
- "node": ">=18"
6681
- },
6682
- "funding": {
6683
- "type": "github",
6684
- "url": "https://github.com/sponsors/Borewit"
6685
- }
6686
- },
6687
  "api/node_modules/superagent": {
6688
  "version": "10.3.0",
6689
  "dev": true,
@@ -6991,22 +6804,6 @@
6991
  "node": ">=0.6"
6992
  }
6993
  },
6994
- "api/node_modules/token-types": {
6995
- "version": "6.1.2",
6996
- "license": "MIT",
6997
- "dependencies": {
6998
- "@borewit/text-codec": "^0.2.1",
6999
- "@tokenizer/token": "^0.3.0",
7000
- "ieee754": "^1.2.1"
7001
- },
7002
- "engines": {
7003
- "node": ">=14.16"
7004
- },
7005
- "funding": {
7006
- "type": "github",
7007
- "url": "https://github.com/sponsors/Borewit"
7008
- }
7009
- },
7010
  "api/node_modules/ts-api-utils": {
7011
  "version": "2.5.0",
7012
  "dev": true,
@@ -7491,26 +7288,6 @@
7491
  "node": ">=0.8.0"
7492
  }
7493
  },
7494
- "api/node_modules/uid": {
7495
- "version": "2.0.2",
7496
- "license": "MIT",
7497
- "dependencies": {
7498
- "@lukeed/csprng": "^1.0.0"
7499
- },
7500
- "engines": {
7501
- "node": ">=8"
7502
- }
7503
- },
7504
- "api/node_modules/uint8array-extras": {
7505
- "version": "1.5.0",
7506
- "license": "MIT",
7507
- "engines": {
7508
- "node": ">=18"
7509
- },
7510
- "funding": {
7511
- "url": "https://github.com/sponsors/sindresorhus"
7512
- }
7513
- },
7514
  "api/node_modules/undici-types": {
7515
  "version": "7.18.2",
7516
  "license": "MIT"
@@ -9434,6 +9211,16 @@
9434
  "node": ">=6.9.0"
9435
  }
9436
  },
 
 
 
 
 
 
 
 
 
 
9437
  "node_modules/@emnapi/core": {
9438
  "version": "1.10.0",
9439
  "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz",
@@ -9534,6 +9321,15 @@
9534
  "@jridgewell/sourcemap-codec": "^1.4.14"
9535
  }
9536
  },
 
 
 
 
 
 
 
 
 
9537
  "node_modules/@napi-rs/wasm-runtime": {
9538
  "version": "1.1.5",
9539
  "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz",
@@ -9553,6 +9349,89 @@
9553
  "@emnapi/runtime": "^1.7.1"
9554
  }
9555
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9556
  "node_modules/@oxc-project/types": {
9557
  "version": "0.133.0",
9558
  "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz",
@@ -10297,6 +10176,29 @@
10297
  "win32"
10298
  ]
10299
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10300
  "node_modules/@trickfilm400/rollup-plugin-off-main-thread": {
10301
  "version": "3.0.0-pre1",
10302
  "resolved": "https://registry.npmjs.org/@trickfilm400/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-3.0.0-pre1.tgz",
@@ -10331,6 +10233,12 @@
10331
  "dev": true,
10332
  "license": "MIT"
10333
  },
 
 
 
 
 
 
10334
  "node_modules/@types/node": {
10335
  "version": "25.9.3",
10336
  "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.3.tgz",
@@ -10821,6 +10729,23 @@
10821
  "url": "https://opencollective.com/core-js"
10822
  }
10823
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10824
  "node_modules/cross-spawn": {
10825
  "version": "7.0.6",
10826
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
@@ -11221,6 +11146,12 @@
11221
  "dev": true,
11222
  "license": "MIT"
11223
  },
 
 
 
 
 
 
11224
  "node_modules/fast-uri": {
11225
  "version": "3.1.2",
11226
  "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz",
@@ -11255,6 +11186,24 @@
11255
  }
11256
  }
11257
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11258
  "node_modules/filelist": {
11259
  "version": "1.0.6",
11260
  "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz",
@@ -11652,6 +11601,26 @@
11652
  "dev": true,
11653
  "license": "ISC"
11654
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11655
  "node_modules/internal-slot": {
11656
  "version": "1.1.0",
11657
  "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
@@ -12106,6 +12075,15 @@
12106
  "dev": true,
12107
  "license": "ISC"
12108
  },
 
 
 
 
 
 
 
 
 
12109
  "node_modules/jackspeak": {
12110
  "version": "4.2.3",
12111
  "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz",
@@ -12472,6 +12450,25 @@
12472
  "url": "https://opencollective.com/parcel"
12473
  }
12474
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12475
  "node_modules/lodash.debounce": {
12476
  "version": "4.0.8",
12477
  "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
@@ -12496,6 +12493,15 @@
12496
  "yallist": "^3.0.2"
12497
  }
12498
  },
 
 
 
 
 
 
 
 
 
12499
  "node_modules/magic-string": {
12500
  "version": "0.30.21",
12501
  "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
@@ -12686,6 +12692,16 @@
12686
  "node": "20 || >=22"
12687
  }
12688
  },
 
 
 
 
 
 
 
 
 
 
12689
  "node_modules/pg": {
12690
  "version": "8.21.0",
12691
  "resolved": "https://registry.npmjs.org/pg/-/pg-8.21.0.tgz",
@@ -12893,6 +12909,12 @@
12893
  "node": ">=6"
12894
  }
12895
  },
 
 
 
 
 
 
12896
  "node_modules/reflect.getprototypeof": {
12897
  "version": "1.0.10",
12898
  "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
@@ -13588,6 +13610,22 @@
13588
  "node": ">=10"
13589
  }
13590
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13591
  "node_modules/supports-color": {
13592
  "version": "8.1.1",
13593
  "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
@@ -13681,6 +13719,24 @@
13681
  "url": "https://github.com/sponsors/SuperchupuDev"
13682
  }
13683
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13684
  "node_modules/tr46": {
13685
  "version": "1.0.1",
13686
  "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
@@ -13802,6 +13858,30 @@
13802
  "resolved": "ui",
13803
  "link": true
13804
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13805
  "node_modules/unbox-primitive": {
13806
  "version": "1.1.0",
13807
  "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",
 
25
  "@nestjs/jwt": "^11.0.2",
26
  "@nestjs/passport": "^11.0.5",
27
  "@nestjs/platform-express": "^11.0.1",
28
+ "@nestjs/schedule": "^6.1.3",
29
  "@nestjs/serve-static": "^5.0.5",
30
  "@nestjs/typeorm": "^11.0.2",
31
  "@types/pg": "^8.20.0",
 
393
  "dev": true,
394
  "license": "MIT"
395
  },
 
 
 
 
 
 
 
 
396
  "api/node_modules/@colors/colors": {
397
  "version": "1.5.0",
398
  "dev": true,
 
1485
  "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
1486
  }
1487
  },
 
 
 
 
 
 
 
1488
  "api/node_modules/@nestjs/cli": {
1489
  "version": "11.0.23",
1490
  "dev": true,
 
1659
  }
1660
  }
1661
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1662
  "api/node_modules/@nestjs/config": {
1663
  "version": "4.0.4",
1664
  "license": "MIT",
 
1672
  "rxjs": "^7.1.0"
1673
  }
1674
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1675
  "api/node_modules/@nestjs/jwt": {
1676
  "version": "11.0.2",
1677
  "license": "MIT",
 
1928
  "version": "1.2.5",
1929
  "license": "MIT"
1930
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1931
  "api/node_modules/@tsconfig/node10": {
1932
  "version": "1.0.12",
1933
  "devOptional": true,
 
3897
  "dev": true,
3898
  "license": "MIT"
3899
  },
 
 
 
 
3900
  "api/node_modules/fb-watchman": {
3901
  "version": "2.0.2",
3902
  "dev": true,
 
3916
  "node": ">=16.0.0"
3917
  }
3918
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3919
  "api/node_modules/file-uri-to-path": {
3920
  "version": "1.0.0",
3921
  "license": "MIT"
 
4281
  "url": "https://opencollective.com/express"
4282
  }
4283
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4284
  "api/node_modules/ignore": {
4285
  "version": "5.3.2",
4286
  "dev": true,
 
4478
  "node": ">=8"
4479
  }
4480
  },
 
 
 
 
 
 
 
4481
  "api/node_modules/jackspeak": {
4482
  "version": "3.4.3",
4483
  "dev": true,
 
5269
  "dev": true,
5270
  "license": "MIT"
5271
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5272
  "api/node_modules/loader-runner": {
5273
  "version": "4.3.2",
5274
  "dev": true,
 
5874
  "node": ">=0.10.0"
5875
  }
5876
  },
 
 
 
 
 
 
 
 
5877
  "api/node_modules/path-type": {
5878
  "version": "4.0.0",
5879
  "dev": true,
 
6165
  "url": "https://paulmillr.com/funding/"
6166
  }
6167
  },
 
 
 
 
6168
  "api/node_modules/resolve-cwd": {
6169
  "version": "3.0.0",
6170
  "dev": true,
 
6497
  "url": "https://github.com/sponsors/sindresorhus"
6498
  }
6499
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6500
  "api/node_modules/superagent": {
6501
  "version": "10.3.0",
6502
  "dev": true,
 
6804
  "node": ">=0.6"
6805
  }
6806
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6807
  "api/node_modules/ts-api-utils": {
6808
  "version": "2.5.0",
6809
  "dev": true,
 
7288
  "node": ">=0.8.0"
7289
  }
7290
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7291
  "api/node_modules/undici-types": {
7292
  "version": "7.18.2",
7293
  "license": "MIT"
 
9211
  "node": ">=6.9.0"
9212
  }
9213
  },
9214
+ "node_modules/@borewit/text-codec": {
9215
+ "version": "0.2.2",
9216
+ "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz",
9217
+ "integrity": "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==",
9218
+ "license": "MIT",
9219
+ "funding": {
9220
+ "type": "github",
9221
+ "url": "https://github.com/sponsors/Borewit"
9222
+ }
9223
+ },
9224
  "node_modules/@emnapi/core": {
9225
  "version": "1.10.0",
9226
  "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz",
 
9321
  "@jridgewell/sourcemap-codec": "^1.4.14"
9322
  }
9323
  },
9324
+ "node_modules/@lukeed/csprng": {
9325
+ "version": "1.1.0",
9326
+ "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz",
9327
+ "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==",
9328
+ "license": "MIT",
9329
+ "engines": {
9330
+ "node": ">=8"
9331
+ }
9332
+ },
9333
  "node_modules/@napi-rs/wasm-runtime": {
9334
  "version": "1.1.5",
9335
  "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.5.tgz",
 
9349
  "@emnapi/runtime": "^1.7.1"
9350
  }
9351
  },
9352
+ "node_modules/@nestjs/common": {
9353
+ "version": "11.1.27",
9354
+ "resolved": "https://registry.npmjs.org/@nestjs/common/-/common-11.1.27.tgz",
9355
+ "integrity": "sha512-kEGSzqM2lWr4whh4Ubflw+oPZSEzxvRMu9WL+LveZploJWTjec5bBlCiRVlVzTPg2kIwBiLwWSvCCW7Wnin1gg==",
9356
+ "license": "MIT",
9357
+ "dependencies": {
9358
+ "file-type": "21.3.4",
9359
+ "iterare": "1.2.1",
9360
+ "load-esm": "1.0.3",
9361
+ "tslib": "2.8.1",
9362
+ "uid": "2.0.2"
9363
+ },
9364
+ "funding": {
9365
+ "type": "opencollective",
9366
+ "url": "https://opencollective.com/nest"
9367
+ },
9368
+ "peerDependencies": {
9369
+ "class-transformer": ">=0.4.1",
9370
+ "class-validator": ">=0.13.2",
9371
+ "reflect-metadata": "^0.1.12 || ^0.2.0",
9372
+ "rxjs": "^7.1.0"
9373
+ },
9374
+ "peerDependenciesMeta": {
9375
+ "class-transformer": {
9376
+ "optional": true
9377
+ },
9378
+ "class-validator": {
9379
+ "optional": true
9380
+ }
9381
+ }
9382
+ },
9383
+ "node_modules/@nestjs/core": {
9384
+ "version": "11.1.27",
9385
+ "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-11.1.27.tgz",
9386
+ "integrity": "sha512-K6DX7hcqmZdeXkv7tsPakKBRCgqL19a4mtbX4FluY0hWtFdtPKp6lbe+lb8gWPfvLdbOWr/CPScn7BSjBX+Ecg==",
9387
+ "license": "MIT",
9388
+ "dependencies": {
9389
+ "fast-safe-stringify": "2.1.1",
9390
+ "iterare": "1.2.1",
9391
+ "path-to-regexp": "8.4.2",
9392
+ "tslib": "2.8.1",
9393
+ "uid": "2.0.2"
9394
+ },
9395
+ "engines": {
9396
+ "node": ">= 20"
9397
+ },
9398
+ "funding": {
9399
+ "type": "opencollective",
9400
+ "url": "https://opencollective.com/nest"
9401
+ },
9402
+ "peerDependencies": {
9403
+ "@nestjs/common": "^11.0.0",
9404
+ "@nestjs/microservices": "^11.0.0",
9405
+ "@nestjs/platform-express": "^11.0.0",
9406
+ "@nestjs/websockets": "^11.0.0",
9407
+ "reflect-metadata": "^0.1.12 || ^0.2.0",
9408
+ "rxjs": "^7.1.0"
9409
+ },
9410
+ "peerDependenciesMeta": {
9411
+ "@nestjs/microservices": {
9412
+ "optional": true
9413
+ },
9414
+ "@nestjs/platform-express": {
9415
+ "optional": true
9416
+ },
9417
+ "@nestjs/websockets": {
9418
+ "optional": true
9419
+ }
9420
+ }
9421
+ },
9422
+ "node_modules/@nestjs/schedule": {
9423
+ "version": "6.1.3",
9424
+ "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-6.1.3.tgz",
9425
+ "integrity": "sha512-RflMFOpR16Dwd1jAUbeB4mfGTCh65fvEdL4mSjQPJChpkRGRjIXjb+6YQcK2faQrVT60c9DmLmoVR7/ONCtuYQ==",
9426
+ "license": "MIT",
9427
+ "dependencies": {
9428
+ "cron": "4.4.0"
9429
+ },
9430
+ "peerDependencies": {
9431
+ "@nestjs/common": "^10.0.0 || ^11.0.0",
9432
+ "@nestjs/core": "^10.0.0 || ^11.0.0"
9433
+ }
9434
+ },
9435
  "node_modules/@oxc-project/types": {
9436
  "version": "0.133.0",
9437
  "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.133.0.tgz",
 
10176
  "win32"
10177
  ]
10178
  },
10179
+ "node_modules/@tokenizer/inflate": {
10180
+ "version": "0.4.1",
10181
+ "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz",
10182
+ "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==",
10183
+ "license": "MIT",
10184
+ "dependencies": {
10185
+ "debug": "^4.4.3",
10186
+ "token-types": "^6.1.1"
10187
+ },
10188
+ "engines": {
10189
+ "node": ">=18"
10190
+ },
10191
+ "funding": {
10192
+ "type": "github",
10193
+ "url": "https://github.com/sponsors/Borewit"
10194
+ }
10195
+ },
10196
+ "node_modules/@tokenizer/token": {
10197
+ "version": "0.3.0",
10198
+ "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz",
10199
+ "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==",
10200
+ "license": "MIT"
10201
+ },
10202
  "node_modules/@trickfilm400/rollup-plugin-off-main-thread": {
10203
  "version": "3.0.0-pre1",
10204
  "resolved": "https://registry.npmjs.org/@trickfilm400/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-3.0.0-pre1.tgz",
 
10233
  "dev": true,
10234
  "license": "MIT"
10235
  },
10236
+ "node_modules/@types/luxon": {
10237
+ "version": "3.7.2",
10238
+ "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.7.2.tgz",
10239
+ "integrity": "sha512-gW+Oib+vUtGJBtNC8V9Reww0oIpusw+4m81uncg9REGZAJfqOQHfo/nkabnc7w0QReXyPqjrbWMJk6NuAkiX3Q==",
10240
+ "license": "MIT"
10241
+ },
10242
  "node_modules/@types/node": {
10243
  "version": "25.9.3",
10244
  "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.3.tgz",
 
10729
  "url": "https://opencollective.com/core-js"
10730
  }
10731
  },
10732
+ "node_modules/cron": {
10733
+ "version": "4.4.0",
10734
+ "resolved": "https://registry.npmjs.org/cron/-/cron-4.4.0.tgz",
10735
+ "integrity": "sha512-fkdfq+b+AHI4cKdhZlppHveI/mgz2qpiYxcm+t5E5TsxX7QrLS1VE0+7GENEk9z0EeGPcpSciGv6ez24duWhwQ==",
10736
+ "license": "MIT",
10737
+ "dependencies": {
10738
+ "@types/luxon": "~3.7.0",
10739
+ "luxon": "~3.7.0"
10740
+ },
10741
+ "engines": {
10742
+ "node": ">=18.x"
10743
+ },
10744
+ "funding": {
10745
+ "type": "ko-fi",
10746
+ "url": "https://ko-fi.com/intcreator"
10747
+ }
10748
+ },
10749
  "node_modules/cross-spawn": {
10750
  "version": "7.0.6",
10751
  "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
 
11146
  "dev": true,
11147
  "license": "MIT"
11148
  },
11149
+ "node_modules/fast-safe-stringify": {
11150
+ "version": "2.1.1",
11151
+ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
11152
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
11153
+ "license": "MIT"
11154
+ },
11155
  "node_modules/fast-uri": {
11156
  "version": "3.1.2",
11157
  "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz",
 
11186
  }
11187
  }
11188
  },
11189
+ "node_modules/file-type": {
11190
+ "version": "21.3.4",
11191
+ "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.3.4.tgz",
11192
+ "integrity": "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==",
11193
+ "license": "MIT",
11194
+ "dependencies": {
11195
+ "@tokenizer/inflate": "^0.4.1",
11196
+ "strtok3": "^10.3.4",
11197
+ "token-types": "^6.1.1",
11198
+ "uint8array-extras": "^1.4.0"
11199
+ },
11200
+ "engines": {
11201
+ "node": ">=20"
11202
+ },
11203
+ "funding": {
11204
+ "url": "https://github.com/sindresorhus/file-type?sponsor=1"
11205
+ }
11206
+ },
11207
  "node_modules/filelist": {
11208
  "version": "1.0.6",
11209
  "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz",
 
11601
  "dev": true,
11602
  "license": "ISC"
11603
  },
11604
+ "node_modules/ieee754": {
11605
+ "version": "1.2.1",
11606
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
11607
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
11608
+ "funding": [
11609
+ {
11610
+ "type": "github",
11611
+ "url": "https://github.com/sponsors/feross"
11612
+ },
11613
+ {
11614
+ "type": "patreon",
11615
+ "url": "https://www.patreon.com/feross"
11616
+ },
11617
+ {
11618
+ "type": "consulting",
11619
+ "url": "https://feross.org/support"
11620
+ }
11621
+ ],
11622
+ "license": "BSD-3-Clause"
11623
+ },
11624
  "node_modules/internal-slot": {
11625
  "version": "1.1.0",
11626
  "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz",
 
12075
  "dev": true,
12076
  "license": "ISC"
12077
  },
12078
+ "node_modules/iterare": {
12079
+ "version": "1.2.1",
12080
+ "resolved": "https://registry.npmjs.org/iterare/-/iterare-1.2.1.tgz",
12081
+ "integrity": "sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==",
12082
+ "license": "ISC",
12083
+ "engines": {
12084
+ "node": ">=6"
12085
+ }
12086
+ },
12087
  "node_modules/jackspeak": {
12088
  "version": "4.2.3",
12089
  "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz",
 
12450
  "url": "https://opencollective.com/parcel"
12451
  }
12452
  },
12453
+ "node_modules/load-esm": {
12454
+ "version": "1.0.3",
12455
+ "resolved": "https://registry.npmjs.org/load-esm/-/load-esm-1.0.3.tgz",
12456
+ "integrity": "sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA==",
12457
+ "funding": [
12458
+ {
12459
+ "type": "github",
12460
+ "url": "https://github.com/sponsors/Borewit"
12461
+ },
12462
+ {
12463
+ "type": "buymeacoffee",
12464
+ "url": "https://buymeacoffee.com/borewit"
12465
+ }
12466
+ ],
12467
+ "license": "MIT",
12468
+ "engines": {
12469
+ "node": ">=13.2.0"
12470
+ }
12471
+ },
12472
  "node_modules/lodash.debounce": {
12473
  "version": "4.0.8",
12474
  "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
 
12493
  "yallist": "^3.0.2"
12494
  }
12495
  },
12496
+ "node_modules/luxon": {
12497
+ "version": "3.7.2",
12498
+ "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.7.2.tgz",
12499
+ "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==",
12500
+ "license": "MIT",
12501
+ "engines": {
12502
+ "node": ">=12"
12503
+ }
12504
+ },
12505
  "node_modules/magic-string": {
12506
  "version": "0.30.21",
12507
  "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
 
12692
  "node": "20 || >=22"
12693
  }
12694
  },
12695
+ "node_modules/path-to-regexp": {
12696
+ "version": "8.4.2",
12697
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz",
12698
+ "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==",
12699
+ "license": "MIT",
12700
+ "funding": {
12701
+ "type": "opencollective",
12702
+ "url": "https://opencollective.com/express"
12703
+ }
12704
+ },
12705
  "node_modules/pg": {
12706
  "version": "8.21.0",
12707
  "resolved": "https://registry.npmjs.org/pg/-/pg-8.21.0.tgz",
 
12909
  "node": ">=6"
12910
  }
12911
  },
12912
+ "node_modules/reflect-metadata": {
12913
+ "version": "0.2.2",
12914
+ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz",
12915
+ "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==",
12916
+ "license": "Apache-2.0"
12917
+ },
12918
  "node_modules/reflect.getprototypeof": {
12919
  "version": "1.0.10",
12920
  "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz",
 
13610
  "node": ">=10"
13611
  }
13612
  },
13613
+ "node_modules/strtok3": {
13614
+ "version": "10.3.5",
13615
+ "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.5.tgz",
13616
+ "integrity": "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==",
13617
+ "license": "MIT",
13618
+ "dependencies": {
13619
+ "@tokenizer/token": "^0.3.0"
13620
+ },
13621
+ "engines": {
13622
+ "node": ">=18"
13623
+ },
13624
+ "funding": {
13625
+ "type": "github",
13626
+ "url": "https://github.com/sponsors/Borewit"
13627
+ }
13628
+ },
13629
  "node_modules/supports-color": {
13630
  "version": "8.1.1",
13631
  "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
 
13719
  "url": "https://github.com/sponsors/SuperchupuDev"
13720
  }
13721
  },
13722
+ "node_modules/token-types": {
13723
+ "version": "6.1.2",
13724
+ "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz",
13725
+ "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==",
13726
+ "license": "MIT",
13727
+ "dependencies": {
13728
+ "@borewit/text-codec": "^0.2.1",
13729
+ "@tokenizer/token": "^0.3.0",
13730
+ "ieee754": "^1.2.1"
13731
+ },
13732
+ "engines": {
13733
+ "node": ">=14.16"
13734
+ },
13735
+ "funding": {
13736
+ "type": "github",
13737
+ "url": "https://github.com/sponsors/Borewit"
13738
+ }
13739
+ },
13740
  "node_modules/tr46": {
13741
  "version": "1.0.1",
13742
  "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
 
13858
  "resolved": "ui",
13859
  "link": true
13860
  },
13861
+ "node_modules/uid": {
13862
+ "version": "2.0.2",
13863
+ "resolved": "https://registry.npmjs.org/uid/-/uid-2.0.2.tgz",
13864
+ "integrity": "sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==",
13865
+ "license": "MIT",
13866
+ "dependencies": {
13867
+ "@lukeed/csprng": "^1.0.0"
13868
+ },
13869
+ "engines": {
13870
+ "node": ">=8"
13871
+ }
13872
+ },
13873
+ "node_modules/uint8array-extras": {
13874
+ "version": "1.5.0",
13875
+ "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz",
13876
+ "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==",
13877
+ "license": "MIT",
13878
+ "engines": {
13879
+ "node": ">=18"
13880
+ },
13881
+ "funding": {
13882
+ "url": "https://github.com/sponsors/sindresorhus"
13883
+ }
13884
+ },
13885
  "node_modules/unbox-primitive": {
13886
  "version": "1.1.0",
13887
  "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz",