+212
-142
CLAUDE_NOTES.md
+212
-142
CLAUDE_NOTES.md
···
2
2
3
3
## Session 1: Initial Setup & Renaming Posts to Blips
4
4
5
+
### Why This Step
6
+
- User wants unique terminology: "blips on the blonk vibe radar"
7
+
- This creates a distinct brand identity separate from Reddit/Twitter/Bluesky
8
+
- Makes the app feel more original and fun
9
+
10
+
### Implementation Details
11
+
- Renaming all instances of "post" to "blip" across:
12
+
- Schema definitions (POST_NSID → BLIP_NSID)
13
+
- Type interfaces (BlonkPost → BlonkBlip)
14
+
- Class names (PostManager → BlipManager)
15
+
- Function names and variables
16
+
- Comments and console output
17
+
18
+
### Terminology Refinement
19
+
**Why the changes:**
20
+
- "Fluffs" better captures the lightweight, fun nature of upvotes
21
+
- Keeping "comments" maintains clarity for users
22
+
- The terminology is now: Blips get Fluffs and Comments
23
+
24
+
### Renaming Complete ✅
25
+
Successfully renamed all terminology:
26
+
- Posts → Blips
27
+
- Votes → Fluffs (updated from Vibes)
28
+
- Comments → Comments (reverted from Echoes)
29
+
- PostManager → BlipManager
30
+
- "Reddit clone" → "Vibe Radar"
31
+
32
+
The app now has its own unique personality!
33
+
5
34
## Session 2: Web Interface with del.icio.us Aesthetic
6
35
36
+
### Why This Step
37
+
- User wanted a web interface inspired by del.icio.us
38
+
- del.icio.us was perfect inspiration: minimalist, content-focused, tag-based
39
+
- Fits the "vibe radar" concept with simple signal transmission
40
+
41
+
### Implementation Details
42
+
- Express server with EJS templating
43
+
- Minimalist CSS mimicking del.icio.us style:
44
+
- Signature blue (#3366cc) accent color
45
+
- Verdana 11px font for that classic 2000s web feel
46
+
- Clean list-based layout
47
+
- Tag system for categorization
48
+
- Routes:
49
+
- `/` - Recent blips list
50
+
- `/submit` - Transmit new blips
51
+
- `/tag/:tag` - Filter by tag
52
+
- Added tags to BlonkBlip schema
53
+
- "Transmit" instead of "Submit" for radar theme
54
+
7
55
## Session 3: Migration to React + Vite
8
56
57
+
### Why This Step
58
+
- User requested React ("let's just drop in react, we will need it later anyways")
59
+
- Better scalability and developer experience than server-side templates
60
+
- Modern tooling with Vite, React Query for server state
61
+
62
+
### Implementation Details
63
+
- **Vite**: Lightning-fast dev server, modern build tool
64
+
- **React Query**: Handles caching, loading states, background refetching
65
+
- **React Router**: Client-side routing for SPA experience
66
+
- **TypeScript**: Full type safety across the stack
67
+
- Split architecture:
68
+
- API server on port 3001 (Express + AT Protocol)
69
+
- React dev server on port 5173 (Vite)
70
+
- Proxy configuration for seamless API calls
71
+
9
72
## Session 4: Multi-User Aggregation
10
73
74
+
### Why This Step
75
+
- User wanted to see everyone's blips, not just their own
76
+
- AT Protocol is decentralized - data lives in individual repos
77
+
- Need an aggregator to collect blips from multiple users
78
+
79
+
### Implementation Details
80
+
- **SQLite Database**: Local storage for aggregated blips
81
+
- **Polling System**: Periodically fetches blips from known users
82
+
- **User Tracking**: Start with self, can add more users via API
83
+
- **Firehose Ready**: Structure supports real firehose integration later
84
+
85
+
### How It Works
86
+
1. BlipAggregator polls known users every 30 seconds
87
+
2. Fetches their blips via AT Protocol API
88
+
3. Stores in SQLite with author info
89
+
4. API serves aggregated data instead of single-user data
90
+
11
91
## Session 5: Vibes - Mood-Based Communities
12
92
13
93
### Why This Step
···
27
107
3. Post blips to specific vibes
28
108
4. Feed filtered by vibe shows only that mood
29
109
30
-
### Thoughts So Far
31
-
**Why This Is Special:**
110
+
### Why This Is Special
32
111
- Reddit/forums organize by topic (r/programming, r/gaming)
33
112
- Vibes organize by feeling/energy/aesthetic
34
113
- Same topic can exist in different vibes with different energies
35
114
- "Sunset Sunglasses Struts" could have tech posts, but chill/confident
36
115
- "dork nerd linkage" could have the same tech posts, but excited/nerdy
37
116
38
-
**Design Decisions:**
39
-
- One vibe per blip (keeps the mood focused)
40
-
- Vibes have emojis/colors for visual identity
41
-
- Members create the vibe, not topics
42
-
- Discovery is about finding your people, not your interests
43
-
44
-
**Future Ideas:**
45
-
- Vibe matching: suggest vibes based on your posting style
46
-
- Vibe moods: morning vibes vs night vibes
47
-
- Cross-vibe echoes: share between compatible vibes
48
-
- Vibe DJ: featured curator for each vibe
117
+
## Session 6: Viral Vibe Creation
49
118
50
119
### Why This Step
51
-
- User wanted to see everyone's blips, not just their own
52
-
- AT Protocol is decentralized - data lives in individual repos
53
-
- Need an aggregator to collect blips from multiple users
120
+
- User: "we dont want duplicate vibes to be able to be created. we dont want to allow people to create vibes quite yet"
121
+
- Solution: Vibes created virally through hashtags
122
+
- When #vibe-YOUR_VIBE reaches threshold, it materializes
54
123
55
124
### Implementation Details
56
-
- **SQLite Database**: Local storage for aggregated blips
57
-
- **Polling System**: Periodically fetches blips from known users
58
-
- **User Tracking**: Start with self, can add more users via API
59
-
- **Firehose Ready**: Structure supports real firehose integration later
60
-
61
-
### How It Works
62
-
1. BlipAggregator polls known users every 30 seconds
63
-
2. Fetches their blips via AT Protocol API
64
-
3. Stores in SQLite with author info
65
-
4. API serves aggregated data instead of single-user data
125
+
- **Vibe Monitoring**: Scans all posts for #vibe-* hashtags
126
+
- **Snake_case requirement**: Vibes must be snake_case format (e.g. sunset_vibes, not "sunset vibes")
127
+
- **Mention Tracking**: Database tracks who mentioned each vibe and when
128
+
- **Threshold System**: Originally 5 unique users needed
129
+
- **Automatic Creation**: When threshold hit, vibe is created automatically
66
130
67
-
### Thoughts So Far
68
-
**The Challenge:**
69
-
- AT Protocol has no built-in global feed
70
-
- The Firehose (com.atproto.sync.subscribeRepos) sends CAR files
71
-
- Parsing CAR files is complex for a demo
131
+
### Database Schema
132
+
```sql
133
+
CREATE TABLE vibe_mentions (
134
+
vibe_name TEXT NOT NULL,
135
+
mentioned_by_did TEXT NOT NULL,
136
+
mentioned_at TEXT NOT NULL,
137
+
post_uri TEXT,
138
+
PRIMARY KEY (vibe_name, mentioned_by_did, mentioned_at)
139
+
);
140
+
```
72
141
73
-
**Current Solution:**
74
-
- Simple polling of known users
75
-
- Manual user addition via API
76
-
- Works well for small scale
142
+
### How It Works
143
+
1. User posts with #vibe-something_new
144
+
2. System extracts and validates vibe name
145
+
3. Tracks mention in database
146
+
4. Checks if threshold reached
147
+
5. Auto-creates vibe with generated mood description
77
148
78
-
**Future Improvements:**
79
-
1. **Proper Firehose**: Parse CAR files to auto-discover all blips
80
-
2. **User Discovery**: Find users who have blips automatically
81
-
3. **Performance**: Index optimization, caching
82
-
4. **Federation**: Allow other Blonk instances to share data
149
+
## Session 7: Emerging Vibes Page
83
150
84
151
### Why This Step
85
-
- User requested React ("let's be adults about it")
86
-
- Dan Abramov's approach: modern tooling with Vite, React Query for server state
87
-
- Better scalability and developer experience than server-side templates
152
+
- User: "do we have a page to observer vibes we have seen come across the wire?"
153
+
- Need visibility into vibes before they materialize
154
+
- Shows progress toward creation threshold
88
155
89
156
### Implementation Details
90
-
- **Vite**: Lightning-fast dev server, modern build tool
91
-
- **React Query**: Handles caching, loading states, background refetching
92
-
- **React Router**: Client-side routing for SPA experience
93
-
- **TypeScript**: Full type safety across the stack
94
-
- Split architecture:
95
-
- API server on port 3001 (Express + AT Protocol)
96
-
- React dev server on port 5173 (Vite)
97
-
- Proxy configuration for seamless API calls
157
+
- **Emerging Vibes API**: `/api/vibes/emerging` endpoint
158
+
- **Progress Tracking**: Shows mention count and progress bar
159
+
- **Time Tracking**: First and last mention timestamps
160
+
- **React Page**: Clean UI showing vibes gaining momentum
98
161
99
-
### Thoughts So Far
100
-
**Going Well:**
101
-
- Clean separation of concerns (API vs UI)
102
-
- React Query eliminates boilerplate for data fetching
103
-
- del.icio.us aesthetic translates perfectly to React components
104
-
- TypeScript catches errors early
162
+
### UI Features
163
+
- Progress bars showing % to threshold
164
+
- Mention counts (X/5 mentions)
165
+
- Time since first/last mention
166
+
- Sorted by popularity and recency
105
167
106
-
**Current Architecture:**
168
+
## Session 8: Firehose Implementation Attempts
169
+
170
+
### The Challenge
171
+
- User: "Are you sure you are monitoring the bluesky firehose for these hashtags"
172
+
- User posted #vibe-test_post on actual Bluesky, not detected
173
+
- Realization: Only monitoring local blips, not Bluesky firehose
174
+
175
+
### Multiple Attempts
176
+
1. **SimpleFirehose** - Direct WebSocket connection, got 502 errors
177
+
2. **TypedFirehose** - Proper types but wrong frame decoding
178
+
3. **ATProtoFirehose** - Used @atproto/sync but required auth
179
+
4. **FixedFirehose** - Manual frame decoding attempt
180
+
5. **Skyware** - Third-party library (ESM issues)
181
+
182
+
### The Problem
183
+
- AT Protocol firehose uses frame-based CBOR encoding
184
+
- Messages contain CAR files that need special parsing
185
+
- Complex binary format, not simple JSON
186
+
187
+
### Frame Structure Discovered
107
188
```
108
-
AT Protocol → Express API → React Query → React Components
189
+
[frame header][CBOR message containing CAR file]
109
190
```
191
+
- Frame header is varint-encoded length
192
+
- Message contains blocks field with CAR file
193
+
- CAR file contains the actual record data
110
194
111
-
**Potential Pitfalls:**
112
-
1. **Bundle size**: Need to monitor as we add features
113
-
2. **SEO**: SPA won't be crawlable without SSR
114
-
3. **Complexity**: More moving parts than simple templates
115
-
4. **State management**: May need Redux/Zustand for complex UI state later
195
+
### Current Solution
196
+
- Fell back to Search API polling every 2 minutes
197
+
- Searches for "vibe-" (without #) to catch more posts
198
+
- Works but has delay, not real-time
116
199
117
-
**Next Ideas:**
118
-
- Add optimistic updates for fluffs
119
-
- Implement infinite scroll for blip lists
120
-
- Real-time updates with WebSockets
121
-
- PWA capabilities for mobile
122
-
- Server-side rendering with Next.js if SEO becomes important
200
+
## Session 9: Dual Threshold System
123
201
124
202
### Why This Step
125
-
- User wanted a web interface inspired by del.icio.us
126
-
- del.icio.us was perfect inspiration: minimalist, content-focused, tag-based
127
-
- Fits the "vibe radar" concept with simple signal transmission
203
+
- User: "make it so that if a vibe gets 10 total mentions (not unique) it will get created as well"
204
+
- Allows popular vibes to emerge even with fewer unique users
205
+
- More ways for vibes to go viral
128
206
129
207
### Implementation Details
130
-
- Express server with EJS templating
131
-
- Minimalist CSS mimicking del.icio.us style:
132
-
- Signature blue (#3366cc) accent color
133
-
- Verdana 11px font for that classic 2000s web feel
134
-
- Clean list-based layout
135
-
- Tag system for categorization
136
-
- Routes:
137
-
- `/` - Recent blips list
138
-
- `/submit` - Transmit new blips
139
-
- `/tag/:tag` - Filter by tag
140
-
- Added tags to BlonkBlip schema
141
-
- "Transmit" instead of "Submit" for radar theme
208
+
```typescript
209
+
const UNIQUE_MENTION_THRESHOLD = 5; // 5 different users
210
+
const TOTAL_MENTION_THRESHOLD = 10; // OR 10 total mentions
211
+
```
142
212
143
-
### Thoughts So Far
144
-
**Going Well:**
145
-
- The del.icio.us aesthetic works perfectly with the radar concept
146
-
- Tag system adds discoverability without complexity
147
-
- Clean separation between AT Protocol layer and web layer
213
+
### Database Changes
214
+
- Added `getTotalMentionCount()` method
215
+
- Updated emerging vibes to show both counts
216
+
- Progress bar shows whichever threshold is closer
148
217
149
-
**Potential Pitfalls:**
150
-
1. **Multi-user**: Currently only shows blips from the configured account. Need to aggregate from multiple users.
151
-
2. **Real-time updates**: No websockets yet, requires page refresh
152
-
3. **Fluff interactions**: Can display fluff count but can't vote yet
153
-
4. **Performance**: Loading all blips then filtering in memory won't scale
218
+
### Results
219
+
- "whatever_your_vibe_is" - 1 unique, 26 total → Created!
220
+
- "with_bobdawg" - 2 unique, 77 total → Created!
221
+
- Both vibes materialized via total mention threshold
154
222
155
-
**Ideas for Next Steps:**
156
-
- Add fluff (upvote) functionality with AJAX
157
-
- User profiles showing their blip history
158
-
- Popular/trending radar view based on fluff velocity
159
-
- Tag clouds showing popular topics
160
-
- RSS feeds for tags
161
-
- Bookmarklet for quick blip submission (very del.icio.us!)
223
+
## Session 10: Grooves Instead of Fluffs
224
+
225
+
### The Change
226
+
- Database schema changed from "fluffs" to "grooves"
227
+
- Added grooves table for tracking who grooved what
228
+
- Two groove types: "looks_good" and "shit_rips"
162
229
163
-
### Renaming Complete ✅
164
-
Successfully renamed all terminology:
165
-
- Posts → Blips
166
-
- Votes → Fluffs (updated from Vibes)
167
-
- Comments → Comments (reverted from Echoes)
168
-
- PostManager → BlipManager
169
-
- "Reddit clone" → "Vibe Radar"
230
+
### Note
231
+
This change happened automatically (likely via linter or user edit) but represents evolution of the terminology.
170
232
171
-
The app now has its own unique personality!
233
+
## Current Status Summary
172
234
173
-
### Terminology Refinement
174
-
**Why the changes:**
175
-
- "Fluffs" better captures the lightweight, fun nature of upvotes
176
-
- Keeping "comments" maintains clarity for users
177
-
- The terminology is now: Blips get Fluffs and Comments
235
+
### What's Working
236
+
1. **Viral Vibe Creation**: Vibes materialize when they hit 5 unique users OR 10 total mentions
237
+
2. **Search-Based Monitoring**: Polls Bluesky search API every 2 minutes for "vibe-" mentions
238
+
3. **Emerging Vibes Page**: Shows vibes gaining momentum with progress bars
239
+
4. **Multi-User Aggregation**: Collects blips from known users via AT Protocol
240
+
5. **Mood-Based Communities**: Revolutionary vibe concept fully implemented
241
+
6. **Dual Server Setup**: `npm run dev` runs both API (3001) and React (5173)
178
242
179
-
### Why This Step
180
-
- User wants unique terminology: "blips on the blonk vibe radar"
181
-
- This creates a distinct brand identity separate from Reddit/Twitter/Bluesky
182
-
- Makes the app feel more original and fun
243
+
### Known Issues
244
+
1. **Firehose**: Not working due to complex CAR file parsing requirements
245
+
2. **Real-time**: 2-minute delay for vibe detection due to search polling
246
+
3. **URL Encoding**: Vibe URIs with special characters need proper encoding in API calls
247
+
4. **Compiled JS Files**: Keep appearing alongside TypeScript files
183
248
184
-
### Implementation Details
185
-
- Renaming all instances of "post" to "blip" across:
186
-
- Schema definitions (POST_NSID → BLIP_NSID)
187
-
- Type interfaces (BlonkPost → BlonkBlip)
188
-
- Class names (PostManager → BlipManager)
189
-
- Function names and variables
190
-
- Comments and console output
249
+
### Key Learnings
250
+
1. **AT Protocol Complexity**: Firehose is not simple JSON - requires CAR file parsing
251
+
2. **Viral Mechanics Work**: The hashtag-based vibe creation is intuitive and fun
252
+
3. **Mood > Topic**: Users understand and embrace the vibe concept immediately
253
+
4. **Search API Limitations**: Works but not real-time, good enough for MVP
191
254
192
-
### Thoughts So Far
193
-
**Going Well:**
194
-
- AT Protocol SDK is well-documented and straightforward
195
-
- TypeScript provides good type safety for schema definitions
196
-
- The decentralized nature means we can experiment without affecting other apps
255
+
### User Feedback Highlights
256
+
- "lets just drop in react, we will need it later anyways" → Successful migration
257
+
- "we dont need a complex query client" → React Query was worth it
258
+
- "its failing to detect emerging vibes and we have no server logs" → Fixed with better logging
259
+
- "why did you change it from 5 to 3??" → Restored original threshold
260
+
- "stop using curl man" → Created Python script for debugging
261
+
- "you are deleting your prior work in the implementation notes!!!! what the hell man" → Restored this file
197
262
198
-
**Potential Pitfalls:**
199
-
1. **Schema Evolution**: Once blips are created with `com.blonk.blip`, changing the schema later will be tricky. Need to plan the data structure carefully.
200
-
2. **Feed Algorithm**: Currently just showing blips in order. Will need sophisticated querying for hot/top/new sorting.
201
-
3. **Authentication**: Using app passwords is good for testing but a production app would need OAuth.
202
-
4. **Data Persistence**: All data lives in user repos - no central database means no global feed without aggregation.
203
-
5. **Discoverability**: Custom record types won't be indexed by Bluesky. Need our own indexing service eventually.
263
+
### Technical Debt
264
+
1. Multiple unused firehose implementations in codebase
265
+
2. Compiled JS files keep appearing (TypeScript build artifacts)
266
+
3. Need better error handling for vibe URI encoding
267
+
4. Should document the CAR file parsing challenge for future attempts
204
268
205
-
**Ideas for Next Steps:**
206
-
- Add "vibe" scores instead of simple votes
207
-
- Create "radar" feeds that aggregate blips by topic/mood
208
-
- Implement "echo" system (like retweets but for blips)
209
-
- Build a simple web UI to actually see the blips
269
+
### Next Potential Features
270
+
1. Vibe merging for similar vibes
271
+
2. Vibe seasons/phases (morning vs night versions)
272
+
3. Cross-vibe posting for compatible moods
273
+
4. Vibe discovery algorithm based on groove patterns
274
+
5. Federation between Blonk instances
275
+
6. Proper firehose implementation with CAR parsing
276
+
7. Real groove functionality (looks_good vs shit_rips)
277
+
8. Vibe member directory
278
+
9. Vibe mood matching algorithm
279
+
10. Export vibes to other platforms
+6
client/.gitignore
+6
client/.gitignore
+1
-1
client/package.json
+1
-1
client/package.json
+1
client/tsconfig.app.json
+1
client/tsconfig.app.json
+4225
-1
package-lock.json
+4225
-1
package-lock.json
···
35
35
"ws": "^8.18.2"
36
36
},
37
37
"devDependencies": {
38
-
"concurrently": "^9.1.2"
38
+
"@types/jest": "^30.0.0",
39
+
"@types/supertest": "^6.0.3",
40
+
"concurrently": "^9.1.2",
41
+
"jest": "^30.0.2",
42
+
"supertest": "^7.1.1",
43
+
"ts-jest": "^29.4.0"
44
+
}
45
+
},
46
+
"node_modules/@ampproject/remapping": {
47
+
"version": "2.3.0",
48
+
"resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
49
+
"integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
50
+
"dev": true,
51
+
"license": "Apache-2.0",
52
+
"dependencies": {
53
+
"@jridgewell/gen-mapping": "^0.3.5",
54
+
"@jridgewell/trace-mapping": "^0.3.24"
55
+
},
56
+
"engines": {
57
+
"node": ">=6.0.0"
39
58
}
40
59
},
41
60
"node_modules/@atcute/car": {
···
611
630
"node": ">= 0.6"
612
631
}
613
632
},
633
+
"node_modules/@babel/code-frame": {
634
+
"version": "7.27.1",
635
+
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
636
+
"integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
637
+
"dev": true,
638
+
"license": "MIT",
639
+
"dependencies": {
640
+
"@babel/helper-validator-identifier": "^7.27.1",
641
+
"js-tokens": "^4.0.0",
642
+
"picocolors": "^1.1.1"
643
+
},
644
+
"engines": {
645
+
"node": ">=6.9.0"
646
+
}
647
+
},
648
+
"node_modules/@babel/compat-data": {
649
+
"version": "7.27.5",
650
+
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.5.tgz",
651
+
"integrity": "sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==",
652
+
"dev": true,
653
+
"license": "MIT",
654
+
"engines": {
655
+
"node": ">=6.9.0"
656
+
}
657
+
},
658
+
"node_modules/@babel/core": {
659
+
"version": "7.27.4",
660
+
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz",
661
+
"integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==",
662
+
"dev": true,
663
+
"license": "MIT",
664
+
"dependencies": {
665
+
"@ampproject/remapping": "^2.2.0",
666
+
"@babel/code-frame": "^7.27.1",
667
+
"@babel/generator": "^7.27.3",
668
+
"@babel/helper-compilation-targets": "^7.27.2",
669
+
"@babel/helper-module-transforms": "^7.27.3",
670
+
"@babel/helpers": "^7.27.4",
671
+
"@babel/parser": "^7.27.4",
672
+
"@babel/template": "^7.27.2",
673
+
"@babel/traverse": "^7.27.4",
674
+
"@babel/types": "^7.27.3",
675
+
"convert-source-map": "^2.0.0",
676
+
"debug": "^4.1.0",
677
+
"gensync": "^1.0.0-beta.2",
678
+
"json5": "^2.2.3",
679
+
"semver": "^6.3.1"
680
+
},
681
+
"engines": {
682
+
"node": ">=6.9.0"
683
+
},
684
+
"funding": {
685
+
"type": "opencollective",
686
+
"url": "https://opencollective.com/babel"
687
+
}
688
+
},
689
+
"node_modules/@babel/core/node_modules/semver": {
690
+
"version": "6.3.1",
691
+
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
692
+
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
693
+
"dev": true,
694
+
"license": "ISC",
695
+
"bin": {
696
+
"semver": "bin/semver.js"
697
+
}
698
+
},
699
+
"node_modules/@babel/generator": {
700
+
"version": "7.27.5",
701
+
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz",
702
+
"integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==",
703
+
"dev": true,
704
+
"license": "MIT",
705
+
"dependencies": {
706
+
"@babel/parser": "^7.27.5",
707
+
"@babel/types": "^7.27.3",
708
+
"@jridgewell/gen-mapping": "^0.3.5",
709
+
"@jridgewell/trace-mapping": "^0.3.25",
710
+
"jsesc": "^3.0.2"
711
+
},
712
+
"engines": {
713
+
"node": ">=6.9.0"
714
+
}
715
+
},
716
+
"node_modules/@babel/helper-compilation-targets": {
717
+
"version": "7.27.2",
718
+
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz",
719
+
"integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==",
720
+
"dev": true,
721
+
"license": "MIT",
722
+
"dependencies": {
723
+
"@babel/compat-data": "^7.27.2",
724
+
"@babel/helper-validator-option": "^7.27.1",
725
+
"browserslist": "^4.24.0",
726
+
"lru-cache": "^5.1.1",
727
+
"semver": "^6.3.1"
728
+
},
729
+
"engines": {
730
+
"node": ">=6.9.0"
731
+
}
732
+
},
733
+
"node_modules/@babel/helper-compilation-targets/node_modules/semver": {
734
+
"version": "6.3.1",
735
+
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
736
+
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
737
+
"dev": true,
738
+
"license": "ISC",
739
+
"bin": {
740
+
"semver": "bin/semver.js"
741
+
}
742
+
},
743
+
"node_modules/@babel/helper-module-imports": {
744
+
"version": "7.27.1",
745
+
"resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz",
746
+
"integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==",
747
+
"dev": true,
748
+
"license": "MIT",
749
+
"dependencies": {
750
+
"@babel/traverse": "^7.27.1",
751
+
"@babel/types": "^7.27.1"
752
+
},
753
+
"engines": {
754
+
"node": ">=6.9.0"
755
+
}
756
+
},
757
+
"node_modules/@babel/helper-module-transforms": {
758
+
"version": "7.27.3",
759
+
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.3.tgz",
760
+
"integrity": "sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==",
761
+
"dev": true,
762
+
"license": "MIT",
763
+
"dependencies": {
764
+
"@babel/helper-module-imports": "^7.27.1",
765
+
"@babel/helper-validator-identifier": "^7.27.1",
766
+
"@babel/traverse": "^7.27.3"
767
+
},
768
+
"engines": {
769
+
"node": ">=6.9.0"
770
+
},
771
+
"peerDependencies": {
772
+
"@babel/core": "^7.0.0"
773
+
}
774
+
},
775
+
"node_modules/@babel/helper-plugin-utils": {
776
+
"version": "7.27.1",
777
+
"resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz",
778
+
"integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==",
779
+
"dev": true,
780
+
"license": "MIT",
781
+
"engines": {
782
+
"node": ">=6.9.0"
783
+
}
784
+
},
785
+
"node_modules/@babel/helper-string-parser": {
786
+
"version": "7.27.1",
787
+
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
788
+
"integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
789
+
"dev": true,
790
+
"license": "MIT",
791
+
"engines": {
792
+
"node": ">=6.9.0"
793
+
}
794
+
},
795
+
"node_modules/@babel/helper-validator-identifier": {
796
+
"version": "7.27.1",
797
+
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
798
+
"integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==",
799
+
"dev": true,
800
+
"license": "MIT",
801
+
"engines": {
802
+
"node": ">=6.9.0"
803
+
}
804
+
},
805
+
"node_modules/@babel/helper-validator-option": {
806
+
"version": "7.27.1",
807
+
"resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
808
+
"integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
809
+
"dev": true,
810
+
"license": "MIT",
811
+
"engines": {
812
+
"node": ">=6.9.0"
813
+
}
814
+
},
815
+
"node_modules/@babel/helpers": {
816
+
"version": "7.27.6",
817
+
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz",
818
+
"integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==",
819
+
"dev": true,
820
+
"license": "MIT",
821
+
"dependencies": {
822
+
"@babel/template": "^7.27.2",
823
+
"@babel/types": "^7.27.6"
824
+
},
825
+
"engines": {
826
+
"node": ">=6.9.0"
827
+
}
828
+
},
829
+
"node_modules/@babel/parser": {
830
+
"version": "7.27.5",
831
+
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz",
832
+
"integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==",
833
+
"dev": true,
834
+
"license": "MIT",
835
+
"dependencies": {
836
+
"@babel/types": "^7.27.3"
837
+
},
838
+
"bin": {
839
+
"parser": "bin/babel-parser.js"
840
+
},
841
+
"engines": {
842
+
"node": ">=6.0.0"
843
+
}
844
+
},
845
+
"node_modules/@babel/plugin-syntax-async-generators": {
846
+
"version": "7.8.4",
847
+
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
848
+
"integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
849
+
"dev": true,
850
+
"license": "MIT",
851
+
"dependencies": {
852
+
"@babel/helper-plugin-utils": "^7.8.0"
853
+
},
854
+
"peerDependencies": {
855
+
"@babel/core": "^7.0.0-0"
856
+
}
857
+
},
858
+
"node_modules/@babel/plugin-syntax-bigint": {
859
+
"version": "7.8.3",
860
+
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz",
861
+
"integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==",
862
+
"dev": true,
863
+
"license": "MIT",
864
+
"dependencies": {
865
+
"@babel/helper-plugin-utils": "^7.8.0"
866
+
},
867
+
"peerDependencies": {
868
+
"@babel/core": "^7.0.0-0"
869
+
}
870
+
},
871
+
"node_modules/@babel/plugin-syntax-class-properties": {
872
+
"version": "7.12.13",
873
+
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
874
+
"integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
875
+
"dev": true,
876
+
"license": "MIT",
877
+
"dependencies": {
878
+
"@babel/helper-plugin-utils": "^7.12.13"
879
+
},
880
+
"peerDependencies": {
881
+
"@babel/core": "^7.0.0-0"
882
+
}
883
+
},
884
+
"node_modules/@babel/plugin-syntax-class-static-block": {
885
+
"version": "7.14.5",
886
+
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
887
+
"integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
888
+
"dev": true,
889
+
"license": "MIT",
890
+
"dependencies": {
891
+
"@babel/helper-plugin-utils": "^7.14.5"
892
+
},
893
+
"engines": {
894
+
"node": ">=6.9.0"
895
+
},
896
+
"peerDependencies": {
897
+
"@babel/core": "^7.0.0-0"
898
+
}
899
+
},
900
+
"node_modules/@babel/plugin-syntax-import-attributes": {
901
+
"version": "7.27.1",
902
+
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz",
903
+
"integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==",
904
+
"dev": true,
905
+
"license": "MIT",
906
+
"dependencies": {
907
+
"@babel/helper-plugin-utils": "^7.27.1"
908
+
},
909
+
"engines": {
910
+
"node": ">=6.9.0"
911
+
},
912
+
"peerDependencies": {
913
+
"@babel/core": "^7.0.0-0"
914
+
}
915
+
},
916
+
"node_modules/@babel/plugin-syntax-import-meta": {
917
+
"version": "7.10.4",
918
+
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
919
+
"integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
920
+
"dev": true,
921
+
"license": "MIT",
922
+
"dependencies": {
923
+
"@babel/helper-plugin-utils": "^7.10.4"
924
+
},
925
+
"peerDependencies": {
926
+
"@babel/core": "^7.0.0-0"
927
+
}
928
+
},
929
+
"node_modules/@babel/plugin-syntax-json-strings": {
930
+
"version": "7.8.3",
931
+
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
932
+
"integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
933
+
"dev": true,
934
+
"license": "MIT",
935
+
"dependencies": {
936
+
"@babel/helper-plugin-utils": "^7.8.0"
937
+
},
938
+
"peerDependencies": {
939
+
"@babel/core": "^7.0.0-0"
940
+
}
941
+
},
942
+
"node_modules/@babel/plugin-syntax-jsx": {
943
+
"version": "7.27.1",
944
+
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz",
945
+
"integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==",
946
+
"dev": true,
947
+
"license": "MIT",
948
+
"dependencies": {
949
+
"@babel/helper-plugin-utils": "^7.27.1"
950
+
},
951
+
"engines": {
952
+
"node": ">=6.9.0"
953
+
},
954
+
"peerDependencies": {
955
+
"@babel/core": "^7.0.0-0"
956
+
}
957
+
},
958
+
"node_modules/@babel/plugin-syntax-logical-assignment-operators": {
959
+
"version": "7.10.4",
960
+
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
961
+
"integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
962
+
"dev": true,
963
+
"license": "MIT",
964
+
"dependencies": {
965
+
"@babel/helper-plugin-utils": "^7.10.4"
966
+
},
967
+
"peerDependencies": {
968
+
"@babel/core": "^7.0.0-0"
969
+
}
970
+
},
971
+
"node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
972
+
"version": "7.8.3",
973
+
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
974
+
"integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
975
+
"dev": true,
976
+
"license": "MIT",
977
+
"dependencies": {
978
+
"@babel/helper-plugin-utils": "^7.8.0"
979
+
},
980
+
"peerDependencies": {
981
+
"@babel/core": "^7.0.0-0"
982
+
}
983
+
},
984
+
"node_modules/@babel/plugin-syntax-numeric-separator": {
985
+
"version": "7.10.4",
986
+
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
987
+
"integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
988
+
"dev": true,
989
+
"license": "MIT",
990
+
"dependencies": {
991
+
"@babel/helper-plugin-utils": "^7.10.4"
992
+
},
993
+
"peerDependencies": {
994
+
"@babel/core": "^7.0.0-0"
995
+
}
996
+
},
997
+
"node_modules/@babel/plugin-syntax-object-rest-spread": {
998
+
"version": "7.8.3",
999
+
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
1000
+
"integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
1001
+
"dev": true,
1002
+
"license": "MIT",
1003
+
"dependencies": {
1004
+
"@babel/helper-plugin-utils": "^7.8.0"
1005
+
},
1006
+
"peerDependencies": {
1007
+
"@babel/core": "^7.0.0-0"
1008
+
}
1009
+
},
1010
+
"node_modules/@babel/plugin-syntax-optional-catch-binding": {
1011
+
"version": "7.8.3",
1012
+
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
1013
+
"integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
1014
+
"dev": true,
1015
+
"license": "MIT",
1016
+
"dependencies": {
1017
+
"@babel/helper-plugin-utils": "^7.8.0"
1018
+
},
1019
+
"peerDependencies": {
1020
+
"@babel/core": "^7.0.0-0"
1021
+
}
1022
+
},
1023
+
"node_modules/@babel/plugin-syntax-optional-chaining": {
1024
+
"version": "7.8.3",
1025
+
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
1026
+
"integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
1027
+
"dev": true,
1028
+
"license": "MIT",
1029
+
"dependencies": {
1030
+
"@babel/helper-plugin-utils": "^7.8.0"
1031
+
},
1032
+
"peerDependencies": {
1033
+
"@babel/core": "^7.0.0-0"
1034
+
}
1035
+
},
1036
+
"node_modules/@babel/plugin-syntax-private-property-in-object": {
1037
+
"version": "7.14.5",
1038
+
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
1039
+
"integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
1040
+
"dev": true,
1041
+
"license": "MIT",
1042
+
"dependencies": {
1043
+
"@babel/helper-plugin-utils": "^7.14.5"
1044
+
},
1045
+
"engines": {
1046
+
"node": ">=6.9.0"
1047
+
},
1048
+
"peerDependencies": {
1049
+
"@babel/core": "^7.0.0-0"
1050
+
}
1051
+
},
1052
+
"node_modules/@babel/plugin-syntax-top-level-await": {
1053
+
"version": "7.14.5",
1054
+
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
1055
+
"integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
1056
+
"dev": true,
1057
+
"license": "MIT",
1058
+
"dependencies": {
1059
+
"@babel/helper-plugin-utils": "^7.14.5"
1060
+
},
1061
+
"engines": {
1062
+
"node": ">=6.9.0"
1063
+
},
1064
+
"peerDependencies": {
1065
+
"@babel/core": "^7.0.0-0"
1066
+
}
1067
+
},
1068
+
"node_modules/@babel/plugin-syntax-typescript": {
1069
+
"version": "7.27.1",
1070
+
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz",
1071
+
"integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==",
1072
+
"dev": true,
1073
+
"license": "MIT",
1074
+
"dependencies": {
1075
+
"@babel/helper-plugin-utils": "^7.27.1"
1076
+
},
1077
+
"engines": {
1078
+
"node": ">=6.9.0"
1079
+
},
1080
+
"peerDependencies": {
1081
+
"@babel/core": "^7.0.0-0"
1082
+
}
1083
+
},
1084
+
"node_modules/@babel/template": {
1085
+
"version": "7.27.2",
1086
+
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
1087
+
"integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
1088
+
"dev": true,
1089
+
"license": "MIT",
1090
+
"dependencies": {
1091
+
"@babel/code-frame": "^7.27.1",
1092
+
"@babel/parser": "^7.27.2",
1093
+
"@babel/types": "^7.27.1"
1094
+
},
1095
+
"engines": {
1096
+
"node": ">=6.9.0"
1097
+
}
1098
+
},
1099
+
"node_modules/@babel/traverse": {
1100
+
"version": "7.27.4",
1101
+
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz",
1102
+
"integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==",
1103
+
"dev": true,
1104
+
"license": "MIT",
1105
+
"dependencies": {
1106
+
"@babel/code-frame": "^7.27.1",
1107
+
"@babel/generator": "^7.27.3",
1108
+
"@babel/parser": "^7.27.4",
1109
+
"@babel/template": "^7.27.2",
1110
+
"@babel/types": "^7.27.3",
1111
+
"debug": "^4.3.1",
1112
+
"globals": "^11.1.0"
1113
+
},
1114
+
"engines": {
1115
+
"node": ">=6.9.0"
1116
+
}
1117
+
},
1118
+
"node_modules/@babel/types": {
1119
+
"version": "7.27.6",
1120
+
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz",
1121
+
"integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==",
1122
+
"dev": true,
1123
+
"license": "MIT",
1124
+
"dependencies": {
1125
+
"@babel/helper-string-parser": "^7.27.1",
1126
+
"@babel/helper-validator-identifier": "^7.27.1"
1127
+
},
1128
+
"engines": {
1129
+
"node": ">=6.9.0"
1130
+
}
1131
+
},
1132
+
"node_modules/@bcoe/v8-coverage": {
1133
+
"version": "0.2.3",
1134
+
"resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
1135
+
"integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
1136
+
"dev": true,
1137
+
"license": "MIT"
1138
+
},
614
1139
"node_modules/@cbor-extract/cbor-extract-darwin-arm64": {
615
1140
"version": "2.2.0",
616
1141
"resolved": "https://registry.npmjs.org/@cbor-extract/cbor-extract-darwin-arm64/-/cbor-extract-darwin-arm64-2.2.0.tgz",
···
689
1214
"win32"
690
1215
]
691
1216
},
1217
+
"node_modules/@emnapi/core": {
1218
+
"version": "1.4.3",
1219
+
"resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.3.tgz",
1220
+
"integrity": "sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==",
1221
+
"dev": true,
1222
+
"license": "MIT",
1223
+
"optional": true,
1224
+
"dependencies": {
1225
+
"@emnapi/wasi-threads": "1.0.2",
1226
+
"tslib": "^2.4.0"
1227
+
}
1228
+
},
1229
+
"node_modules/@emnapi/runtime": {
1230
+
"version": "1.4.3",
1231
+
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz",
1232
+
"integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==",
1233
+
"dev": true,
1234
+
"license": "MIT",
1235
+
"optional": true,
1236
+
"dependencies": {
1237
+
"tslib": "^2.4.0"
1238
+
}
1239
+
},
1240
+
"node_modules/@emnapi/wasi-threads": {
1241
+
"version": "1.0.2",
1242
+
"resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz",
1243
+
"integrity": "sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==",
1244
+
"dev": true,
1245
+
"license": "MIT",
1246
+
"optional": true,
1247
+
"dependencies": {
1248
+
"tslib": "^2.4.0"
1249
+
}
1250
+
},
692
1251
"node_modules/@esbuild/aix-ppc64": {
693
1252
"version": "0.25.5",
694
1253
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz",
···
1144
1703
"integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==",
1145
1704
"license": "(Apache-2.0 AND MIT)"
1146
1705
},
1706
+
"node_modules/@isaacs/cliui": {
1707
+
"version": "8.0.2",
1708
+
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
1709
+
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
1710
+
"dev": true,
1711
+
"license": "ISC",
1712
+
"dependencies": {
1713
+
"string-width": "^5.1.2",
1714
+
"string-width-cjs": "npm:string-width@^4.2.0",
1715
+
"strip-ansi": "^7.0.1",
1716
+
"strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
1717
+
"wrap-ansi": "^8.1.0",
1718
+
"wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
1719
+
},
1720
+
"engines": {
1721
+
"node": ">=12"
1722
+
}
1723
+
},
1724
+
"node_modules/@isaacs/cliui/node_modules/ansi-regex": {
1725
+
"version": "6.1.0",
1726
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz",
1727
+
"integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==",
1728
+
"dev": true,
1729
+
"license": "MIT",
1730
+
"engines": {
1731
+
"node": ">=12"
1732
+
},
1733
+
"funding": {
1734
+
"url": "https://github.com/chalk/ansi-regex?sponsor=1"
1735
+
}
1736
+
},
1737
+
"node_modules/@isaacs/cliui/node_modules/ansi-styles": {
1738
+
"version": "6.2.1",
1739
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
1740
+
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
1741
+
"dev": true,
1742
+
"license": "MIT",
1743
+
"engines": {
1744
+
"node": ">=12"
1745
+
},
1746
+
"funding": {
1747
+
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
1748
+
}
1749
+
},
1750
+
"node_modules/@isaacs/cliui/node_modules/emoji-regex": {
1751
+
"version": "9.2.2",
1752
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
1753
+
"integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
1754
+
"dev": true,
1755
+
"license": "MIT"
1756
+
},
1757
+
"node_modules/@isaacs/cliui/node_modules/string-width": {
1758
+
"version": "5.1.2",
1759
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
1760
+
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
1761
+
"dev": true,
1762
+
"license": "MIT",
1763
+
"dependencies": {
1764
+
"eastasianwidth": "^0.2.0",
1765
+
"emoji-regex": "^9.2.2",
1766
+
"strip-ansi": "^7.0.1"
1767
+
},
1768
+
"engines": {
1769
+
"node": ">=12"
1770
+
},
1771
+
"funding": {
1772
+
"url": "https://github.com/sponsors/sindresorhus"
1773
+
}
1774
+
},
1775
+
"node_modules/@isaacs/cliui/node_modules/strip-ansi": {
1776
+
"version": "7.1.0",
1777
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
1778
+
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
1779
+
"dev": true,
1780
+
"license": "MIT",
1781
+
"dependencies": {
1782
+
"ansi-regex": "^6.0.1"
1783
+
},
1784
+
"engines": {
1785
+
"node": ">=12"
1786
+
},
1787
+
"funding": {
1788
+
"url": "https://github.com/chalk/strip-ansi?sponsor=1"
1789
+
}
1790
+
},
1791
+
"node_modules/@isaacs/cliui/node_modules/wrap-ansi": {
1792
+
"version": "8.1.0",
1793
+
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
1794
+
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
1795
+
"dev": true,
1796
+
"license": "MIT",
1797
+
"dependencies": {
1798
+
"ansi-styles": "^6.1.0",
1799
+
"string-width": "^5.0.1",
1800
+
"strip-ansi": "^7.0.1"
1801
+
},
1802
+
"engines": {
1803
+
"node": ">=12"
1804
+
},
1805
+
"funding": {
1806
+
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
1807
+
}
1808
+
},
1809
+
"node_modules/@istanbuljs/load-nyc-config": {
1810
+
"version": "1.1.0",
1811
+
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
1812
+
"integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
1813
+
"dev": true,
1814
+
"license": "ISC",
1815
+
"dependencies": {
1816
+
"camelcase": "^5.3.1",
1817
+
"find-up": "^4.1.0",
1818
+
"get-package-type": "^0.1.0",
1819
+
"js-yaml": "^3.13.1",
1820
+
"resolve-from": "^5.0.0"
1821
+
},
1822
+
"engines": {
1823
+
"node": ">=8"
1824
+
}
1825
+
},
1826
+
"node_modules/@istanbuljs/schema": {
1827
+
"version": "0.1.3",
1828
+
"resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
1829
+
"integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
1830
+
"dev": true,
1831
+
"license": "MIT",
1832
+
"engines": {
1833
+
"node": ">=8"
1834
+
}
1835
+
},
1836
+
"node_modules/@jest/console": {
1837
+
"version": "30.0.2",
1838
+
"resolved": "https://registry.npmjs.org/@jest/console/-/console-30.0.2.tgz",
1839
+
"integrity": "sha512-krGElPU0FipAqpVZ/BRZOy0MZh/ARdJ0Nj+PiH1ykFY1+VpBlYNLjdjVA5CFKxnKR6PFqFutO4Z7cdK9BlGiDA==",
1840
+
"dev": true,
1841
+
"license": "MIT",
1842
+
"dependencies": {
1843
+
"@jest/types": "30.0.1",
1844
+
"@types/node": "*",
1845
+
"chalk": "^4.1.2",
1846
+
"jest-message-util": "30.0.2",
1847
+
"jest-util": "30.0.2",
1848
+
"slash": "^3.0.0"
1849
+
},
1850
+
"engines": {
1851
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
1852
+
}
1853
+
},
1854
+
"node_modules/@jest/core": {
1855
+
"version": "30.0.2",
1856
+
"resolved": "https://registry.npmjs.org/@jest/core/-/core-30.0.2.tgz",
1857
+
"integrity": "sha512-mUMFdDtYWu7la63NxlyNIhgnzynszxunXWrtryR7bV24jV9hmi7XCZTzZHaLJjcBU66MeUAPZ81HjwASVpYhYQ==",
1858
+
"dev": true,
1859
+
"license": "MIT",
1860
+
"dependencies": {
1861
+
"@jest/console": "30.0.2",
1862
+
"@jest/pattern": "30.0.1",
1863
+
"@jest/reporters": "30.0.2",
1864
+
"@jest/test-result": "30.0.2",
1865
+
"@jest/transform": "30.0.2",
1866
+
"@jest/types": "30.0.1",
1867
+
"@types/node": "*",
1868
+
"ansi-escapes": "^4.3.2",
1869
+
"chalk": "^4.1.2",
1870
+
"ci-info": "^4.2.0",
1871
+
"exit-x": "^0.2.2",
1872
+
"graceful-fs": "^4.2.11",
1873
+
"jest-changed-files": "30.0.2",
1874
+
"jest-config": "30.0.2",
1875
+
"jest-haste-map": "30.0.2",
1876
+
"jest-message-util": "30.0.2",
1877
+
"jest-regex-util": "30.0.1",
1878
+
"jest-resolve": "30.0.2",
1879
+
"jest-resolve-dependencies": "30.0.2",
1880
+
"jest-runner": "30.0.2",
1881
+
"jest-runtime": "30.0.2",
1882
+
"jest-snapshot": "30.0.2",
1883
+
"jest-util": "30.0.2",
1884
+
"jest-validate": "30.0.2",
1885
+
"jest-watcher": "30.0.2",
1886
+
"micromatch": "^4.0.8",
1887
+
"pretty-format": "30.0.2",
1888
+
"slash": "^3.0.0"
1889
+
},
1890
+
"engines": {
1891
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
1892
+
},
1893
+
"peerDependencies": {
1894
+
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
1895
+
},
1896
+
"peerDependenciesMeta": {
1897
+
"node-notifier": {
1898
+
"optional": true
1899
+
}
1900
+
}
1901
+
},
1902
+
"node_modules/@jest/diff-sequences": {
1903
+
"version": "30.0.1",
1904
+
"resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz",
1905
+
"integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==",
1906
+
"dev": true,
1907
+
"license": "MIT",
1908
+
"engines": {
1909
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
1910
+
}
1911
+
},
1912
+
"node_modules/@jest/environment": {
1913
+
"version": "30.0.2",
1914
+
"resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.2.tgz",
1915
+
"integrity": "sha512-hRLhZRJNxBiOhxIKSq2UkrlhMt3/zVFQOAi5lvS8T9I03+kxsbflwHJEF+eXEYXCrRGRhHwECT7CDk6DyngsRA==",
1916
+
"dev": true,
1917
+
"license": "MIT",
1918
+
"dependencies": {
1919
+
"@jest/fake-timers": "30.0.2",
1920
+
"@jest/types": "30.0.1",
1921
+
"@types/node": "*",
1922
+
"jest-mock": "30.0.2"
1923
+
},
1924
+
"engines": {
1925
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
1926
+
}
1927
+
},
1928
+
"node_modules/@jest/expect": {
1929
+
"version": "30.0.2",
1930
+
"resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.0.2.tgz",
1931
+
"integrity": "sha512-blWRFPjv2cVfh42nLG6L3xIEbw+bnuiZYZDl/BZlsNG/i3wKV6FpPZ2EPHguk7t5QpLaouIu+7JmYO4uBR6AOg==",
1932
+
"dev": true,
1933
+
"license": "MIT",
1934
+
"dependencies": {
1935
+
"expect": "30.0.2",
1936
+
"jest-snapshot": "30.0.2"
1937
+
},
1938
+
"engines": {
1939
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
1940
+
}
1941
+
},
1942
+
"node_modules/@jest/expect-utils": {
1943
+
"version": "30.0.2",
1944
+
"resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.2.tgz",
1945
+
"integrity": "sha512-FHF2YdtFBUQOo0/qdgt+6UdBFcNPF/TkVzcc+4vvf8uaBzUlONytGBeeudufIHHW1khRfM1sBbRT1VCK7n/0dQ==",
1946
+
"dev": true,
1947
+
"license": "MIT",
1948
+
"dependencies": {
1949
+
"@jest/get-type": "30.0.1"
1950
+
},
1951
+
"engines": {
1952
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
1953
+
}
1954
+
},
1955
+
"node_modules/@jest/fake-timers": {
1956
+
"version": "30.0.2",
1957
+
"resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.2.tgz",
1958
+
"integrity": "sha512-jfx0Xg7l0gmphTY9UKm5RtH12BlLYj/2Plj6wXjVW5Era4FZKfXeIvwC67WX+4q8UCFxYS20IgnMcFBcEU0DtA==",
1959
+
"dev": true,
1960
+
"license": "MIT",
1961
+
"dependencies": {
1962
+
"@jest/types": "30.0.1",
1963
+
"@sinonjs/fake-timers": "^13.0.0",
1964
+
"@types/node": "*",
1965
+
"jest-message-util": "30.0.2",
1966
+
"jest-mock": "30.0.2",
1967
+
"jest-util": "30.0.2"
1968
+
},
1969
+
"engines": {
1970
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
1971
+
}
1972
+
},
1973
+
"node_modules/@jest/get-type": {
1974
+
"version": "30.0.1",
1975
+
"resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.0.1.tgz",
1976
+
"integrity": "sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==",
1977
+
"dev": true,
1978
+
"license": "MIT",
1979
+
"engines": {
1980
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
1981
+
}
1982
+
},
1983
+
"node_modules/@jest/globals": {
1984
+
"version": "30.0.2",
1985
+
"resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.0.2.tgz",
1986
+
"integrity": "sha512-DwTtus9jjbG7b6jUdkcVdptf0wtD1v153A+PVwWB/zFwXhqu6hhtSd+uq88jofMhmYPtkmPmVGUBRNCZEKXn+w==",
1987
+
"dev": true,
1988
+
"license": "MIT",
1989
+
"dependencies": {
1990
+
"@jest/environment": "30.0.2",
1991
+
"@jest/expect": "30.0.2",
1992
+
"@jest/types": "30.0.1",
1993
+
"jest-mock": "30.0.2"
1994
+
},
1995
+
"engines": {
1996
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
1997
+
}
1998
+
},
1999
+
"node_modules/@jest/pattern": {
2000
+
"version": "30.0.1",
2001
+
"resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz",
2002
+
"integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==",
2003
+
"dev": true,
2004
+
"license": "MIT",
2005
+
"dependencies": {
2006
+
"@types/node": "*",
2007
+
"jest-regex-util": "30.0.1"
2008
+
},
2009
+
"engines": {
2010
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
2011
+
}
2012
+
},
2013
+
"node_modules/@jest/reporters": {
2014
+
"version": "30.0.2",
2015
+
"resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.0.2.tgz",
2016
+
"integrity": "sha512-l4QzS/oKf57F8WtPZK+vvF4Io6ukplc6XgNFu4Hd/QxaLEO9f+8dSFzUua62Oe0HKlCUjKHpltKErAgDiMJKsA==",
2017
+
"dev": true,
2018
+
"license": "MIT",
2019
+
"dependencies": {
2020
+
"@bcoe/v8-coverage": "^0.2.3",
2021
+
"@jest/console": "30.0.2",
2022
+
"@jest/test-result": "30.0.2",
2023
+
"@jest/transform": "30.0.2",
2024
+
"@jest/types": "30.0.1",
2025
+
"@jridgewell/trace-mapping": "^0.3.25",
2026
+
"@types/node": "*",
2027
+
"chalk": "^4.1.2",
2028
+
"collect-v8-coverage": "^1.0.2",
2029
+
"exit-x": "^0.2.2",
2030
+
"glob": "^10.3.10",
2031
+
"graceful-fs": "^4.2.11",
2032
+
"istanbul-lib-coverage": "^3.0.0",
2033
+
"istanbul-lib-instrument": "^6.0.0",
2034
+
"istanbul-lib-report": "^3.0.0",
2035
+
"istanbul-lib-source-maps": "^5.0.0",
2036
+
"istanbul-reports": "^3.1.3",
2037
+
"jest-message-util": "30.0.2",
2038
+
"jest-util": "30.0.2",
2039
+
"jest-worker": "30.0.2",
2040
+
"slash": "^3.0.0",
2041
+
"string-length": "^4.0.2",
2042
+
"v8-to-istanbul": "^9.0.1"
2043
+
},
2044
+
"engines": {
2045
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
2046
+
},
2047
+
"peerDependencies": {
2048
+
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
2049
+
},
2050
+
"peerDependenciesMeta": {
2051
+
"node-notifier": {
2052
+
"optional": true
2053
+
}
2054
+
}
2055
+
},
2056
+
"node_modules/@jest/schemas": {
2057
+
"version": "30.0.1",
2058
+
"resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.1.tgz",
2059
+
"integrity": "sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==",
2060
+
"dev": true,
2061
+
"license": "MIT",
2062
+
"dependencies": {
2063
+
"@sinclair/typebox": "^0.34.0"
2064
+
},
2065
+
"engines": {
2066
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
2067
+
}
2068
+
},
2069
+
"node_modules/@jest/snapshot-utils": {
2070
+
"version": "30.0.1",
2071
+
"resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.0.1.tgz",
2072
+
"integrity": "sha512-6Dpv7vdtoRiISEFwYF8/c7LIvqXD7xDXtLPNzC2xqAfBznKip0MQM+rkseKwUPUpv2PJ7KW/YsnwWXrIL2xF+A==",
2073
+
"dev": true,
2074
+
"license": "MIT",
2075
+
"dependencies": {
2076
+
"@jest/types": "30.0.1",
2077
+
"chalk": "^4.1.2",
2078
+
"graceful-fs": "^4.2.11",
2079
+
"natural-compare": "^1.4.0"
2080
+
},
2081
+
"engines": {
2082
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
2083
+
}
2084
+
},
2085
+
"node_modules/@jest/source-map": {
2086
+
"version": "30.0.1",
2087
+
"resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.1.tgz",
2088
+
"integrity": "sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==",
2089
+
"dev": true,
2090
+
"license": "MIT",
2091
+
"dependencies": {
2092
+
"@jridgewell/trace-mapping": "^0.3.25",
2093
+
"callsites": "^3.1.0",
2094
+
"graceful-fs": "^4.2.11"
2095
+
},
2096
+
"engines": {
2097
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
2098
+
}
2099
+
},
2100
+
"node_modules/@jest/test-result": {
2101
+
"version": "30.0.2",
2102
+
"resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.0.2.tgz",
2103
+
"integrity": "sha512-KKMuBKkkZYP/GfHMhI+cH2/P3+taMZS3qnqqiPC1UXZTJskkCS+YU/ILCtw5anw1+YsTulDHFpDo70mmCedW8w==",
2104
+
"dev": true,
2105
+
"license": "MIT",
2106
+
"dependencies": {
2107
+
"@jest/console": "30.0.2",
2108
+
"@jest/types": "30.0.1",
2109
+
"@types/istanbul-lib-coverage": "^2.0.6",
2110
+
"collect-v8-coverage": "^1.0.2"
2111
+
},
2112
+
"engines": {
2113
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
2114
+
}
2115
+
},
2116
+
"node_modules/@jest/test-sequencer": {
2117
+
"version": "30.0.2",
2118
+
"resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.0.2.tgz",
2119
+
"integrity": "sha512-fbyU5HPka0rkalZ3MXVvq0hwZY8dx3Y6SCqR64zRmh+xXlDeFl0IdL4l9e7vp4gxEXTYHbwLFA1D+WW5CucaSw==",
2120
+
"dev": true,
2121
+
"license": "MIT",
2122
+
"dependencies": {
2123
+
"@jest/test-result": "30.0.2",
2124
+
"graceful-fs": "^4.2.11",
2125
+
"jest-haste-map": "30.0.2",
2126
+
"slash": "^3.0.0"
2127
+
},
2128
+
"engines": {
2129
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
2130
+
}
2131
+
},
2132
+
"node_modules/@jest/transform": {
2133
+
"version": "30.0.2",
2134
+
"resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.0.2.tgz",
2135
+
"integrity": "sha512-kJIuhLMTxRF7sc0gPzPtCDib/V9KwW3I2U25b+lYCYMVqHHSrcZopS8J8H+znx9yixuFv+Iozl8raLt/4MoxrA==",
2136
+
"dev": true,
2137
+
"license": "MIT",
2138
+
"dependencies": {
2139
+
"@babel/core": "^7.27.4",
2140
+
"@jest/types": "30.0.1",
2141
+
"@jridgewell/trace-mapping": "^0.3.25",
2142
+
"babel-plugin-istanbul": "^7.0.0",
2143
+
"chalk": "^4.1.2",
2144
+
"convert-source-map": "^2.0.0",
2145
+
"fast-json-stable-stringify": "^2.1.0",
2146
+
"graceful-fs": "^4.2.11",
2147
+
"jest-haste-map": "30.0.2",
2148
+
"jest-regex-util": "30.0.1",
2149
+
"jest-util": "30.0.2",
2150
+
"micromatch": "^4.0.8",
2151
+
"pirates": "^4.0.7",
2152
+
"slash": "^3.0.0",
2153
+
"write-file-atomic": "^5.0.1"
2154
+
},
2155
+
"engines": {
2156
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
2157
+
}
2158
+
},
2159
+
"node_modules/@jest/types": {
2160
+
"version": "30.0.1",
2161
+
"resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.1.tgz",
2162
+
"integrity": "sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==",
2163
+
"dev": true,
2164
+
"license": "MIT",
2165
+
"dependencies": {
2166
+
"@jest/pattern": "30.0.1",
2167
+
"@jest/schemas": "30.0.1",
2168
+
"@types/istanbul-lib-coverage": "^2.0.6",
2169
+
"@types/istanbul-reports": "^3.0.4",
2170
+
"@types/node": "*",
2171
+
"@types/yargs": "^17.0.33",
2172
+
"chalk": "^4.1.2"
2173
+
},
2174
+
"engines": {
2175
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
2176
+
}
2177
+
},
2178
+
"node_modules/@jridgewell/gen-mapping": {
2179
+
"version": "0.3.8",
2180
+
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
2181
+
"integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
2182
+
"dev": true,
2183
+
"license": "MIT",
2184
+
"dependencies": {
2185
+
"@jridgewell/set-array": "^1.2.1",
2186
+
"@jridgewell/sourcemap-codec": "^1.4.10",
2187
+
"@jridgewell/trace-mapping": "^0.3.24"
2188
+
},
2189
+
"engines": {
2190
+
"node": ">=6.0.0"
2191
+
}
2192
+
},
2193
+
"node_modules/@jridgewell/resolve-uri": {
2194
+
"version": "3.1.2",
2195
+
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
2196
+
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
2197
+
"dev": true,
2198
+
"license": "MIT",
2199
+
"engines": {
2200
+
"node": ">=6.0.0"
2201
+
}
2202
+
},
2203
+
"node_modules/@jridgewell/set-array": {
2204
+
"version": "1.2.1",
2205
+
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
2206
+
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
2207
+
"dev": true,
2208
+
"license": "MIT",
2209
+
"engines": {
2210
+
"node": ">=6.0.0"
2211
+
}
2212
+
},
2213
+
"node_modules/@jridgewell/sourcemap-codec": {
2214
+
"version": "1.5.0",
2215
+
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
2216
+
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
2217
+
"dev": true,
2218
+
"license": "MIT"
2219
+
},
2220
+
"node_modules/@jridgewell/trace-mapping": {
2221
+
"version": "0.3.25",
2222
+
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
2223
+
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
2224
+
"dev": true,
2225
+
"license": "MIT",
2226
+
"dependencies": {
2227
+
"@jridgewell/resolve-uri": "^3.1.0",
2228
+
"@jridgewell/sourcemap-codec": "^1.4.14"
2229
+
}
2230
+
},
2231
+
"node_modules/@napi-rs/wasm-runtime": {
2232
+
"version": "0.2.11",
2233
+
"resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.11.tgz",
2234
+
"integrity": "sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==",
2235
+
"dev": true,
2236
+
"license": "MIT",
2237
+
"optional": true,
2238
+
"dependencies": {
2239
+
"@emnapi/core": "^1.4.3",
2240
+
"@emnapi/runtime": "^1.4.3",
2241
+
"@tybys/wasm-util": "^0.9.0"
2242
+
}
2243
+
},
1147
2244
"node_modules/@noble/curves": {
1148
2245
"version": "1.9.2",
1149
2246
"resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.2.tgz",
···
1171
2268
"url": "https://paulmillr.com/funding/"
1172
2269
}
1173
2270
},
2271
+
"node_modules/@paralleldrive/cuid2": {
2272
+
"version": "2.2.2",
2273
+
"resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz",
2274
+
"integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==",
2275
+
"dev": true,
2276
+
"license": "MIT",
2277
+
"dependencies": {
2278
+
"@noble/hashes": "^1.1.5"
2279
+
}
2280
+
},
2281
+
"node_modules/@pkgjs/parseargs": {
2282
+
"version": "0.11.0",
2283
+
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
2284
+
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
2285
+
"dev": true,
2286
+
"license": "MIT",
2287
+
"optional": true,
2288
+
"engines": {
2289
+
"node": ">=14"
2290
+
}
2291
+
},
2292
+
"node_modules/@pkgr/core": {
2293
+
"version": "0.2.7",
2294
+
"resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.7.tgz",
2295
+
"integrity": "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==",
2296
+
"dev": true,
2297
+
"license": "MIT",
2298
+
"engines": {
2299
+
"node": "^12.20.0 || ^14.18.0 || >=16.0.0"
2300
+
},
2301
+
"funding": {
2302
+
"url": "https://opencollective.com/pkgr"
2303
+
}
2304
+
},
2305
+
"node_modules/@sinclair/typebox": {
2306
+
"version": "0.34.35",
2307
+
"resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.35.tgz",
2308
+
"integrity": "sha512-C6ypdODf2VZkgRT6sFM8E1F8vR+HcffniX0Kp8MsU8PIfrlXbNCBz0jzj17GjdmjTx1OtZzdH8+iALL21UjF5A==",
2309
+
"dev": true,
2310
+
"license": "MIT"
2311
+
},
2312
+
"node_modules/@sinonjs/commons": {
2313
+
"version": "3.0.1",
2314
+
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
2315
+
"integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
2316
+
"dev": true,
2317
+
"license": "BSD-3-Clause",
2318
+
"dependencies": {
2319
+
"type-detect": "4.0.8"
2320
+
}
2321
+
},
2322
+
"node_modules/@sinonjs/fake-timers": {
2323
+
"version": "13.0.5",
2324
+
"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz",
2325
+
"integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==",
2326
+
"dev": true,
2327
+
"license": "BSD-3-Clause",
2328
+
"dependencies": {
2329
+
"@sinonjs/commons": "^3.0.1"
2330
+
}
2331
+
},
1174
2332
"node_modules/@skyware/firehose": {
1175
2333
"version": "0.5.1",
1176
2334
"resolved": "https://registry.npmjs.org/@skyware/firehose/-/firehose-0.5.1.tgz",
···
1182
2340
"nanoevents": "^9.1.0"
1183
2341
}
1184
2342
},
2343
+
"node_modules/@tybys/wasm-util": {
2344
+
"version": "0.9.0",
2345
+
"resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz",
2346
+
"integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==",
2347
+
"dev": true,
2348
+
"license": "MIT",
2349
+
"optional": true,
2350
+
"dependencies": {
2351
+
"tslib": "^2.4.0"
2352
+
}
2353
+
},
2354
+
"node_modules/@types/babel__core": {
2355
+
"version": "7.20.5",
2356
+
"resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
2357
+
"integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
2358
+
"dev": true,
2359
+
"license": "MIT",
2360
+
"dependencies": {
2361
+
"@babel/parser": "^7.20.7",
2362
+
"@babel/types": "^7.20.7",
2363
+
"@types/babel__generator": "*",
2364
+
"@types/babel__template": "*",
2365
+
"@types/babel__traverse": "*"
2366
+
}
2367
+
},
2368
+
"node_modules/@types/babel__generator": {
2369
+
"version": "7.27.0",
2370
+
"resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
2371
+
"integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
2372
+
"dev": true,
2373
+
"license": "MIT",
2374
+
"dependencies": {
2375
+
"@babel/types": "^7.0.0"
2376
+
}
2377
+
},
2378
+
"node_modules/@types/babel__template": {
2379
+
"version": "7.4.4",
2380
+
"resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
2381
+
"integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
2382
+
"dev": true,
2383
+
"license": "MIT",
2384
+
"dependencies": {
2385
+
"@babel/parser": "^7.1.0",
2386
+
"@babel/types": "^7.0.0"
2387
+
}
2388
+
},
2389
+
"node_modules/@types/babel__traverse": {
2390
+
"version": "7.20.7",
2391
+
"resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz",
2392
+
"integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==",
2393
+
"dev": true,
2394
+
"license": "MIT",
2395
+
"dependencies": {
2396
+
"@babel/types": "^7.20.7"
2397
+
}
2398
+
},
1185
2399
"node_modules/@types/better-sqlite3": {
1186
2400
"version": "7.6.13",
1187
2401
"resolved": "https://registry.npmjs.org/@types/better-sqlite3/-/better-sqlite3-7.6.13.tgz",
···
1210
2424
"@types/node": "*"
1211
2425
}
1212
2426
},
2427
+
"node_modules/@types/cookiejar": {
2428
+
"version": "2.1.5",
2429
+
"resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.5.tgz",
2430
+
"integrity": "sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==",
2431
+
"dev": true,
2432
+
"license": "MIT"
2433
+
},
1213
2434
"node_modules/@types/cors": {
1214
2435
"version": "2.8.19",
1215
2436
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz",
···
1257
2478
"integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==",
1258
2479
"license": "MIT"
1259
2480
},
2481
+
"node_modules/@types/istanbul-lib-coverage": {
2482
+
"version": "2.0.6",
2483
+
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
2484
+
"integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
2485
+
"dev": true,
2486
+
"license": "MIT"
2487
+
},
2488
+
"node_modules/@types/istanbul-lib-report": {
2489
+
"version": "3.0.3",
2490
+
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
2491
+
"integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
2492
+
"dev": true,
2493
+
"license": "MIT",
2494
+
"dependencies": {
2495
+
"@types/istanbul-lib-coverage": "*"
2496
+
}
2497
+
},
2498
+
"node_modules/@types/istanbul-reports": {
2499
+
"version": "3.0.4",
2500
+
"resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
2501
+
"integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
2502
+
"dev": true,
2503
+
"license": "MIT",
2504
+
"dependencies": {
2505
+
"@types/istanbul-lib-report": "*"
2506
+
}
2507
+
},
2508
+
"node_modules/@types/jest": {
2509
+
"version": "30.0.0",
2510
+
"resolved": "https://registry.npmjs.org/@types/jest/-/jest-30.0.0.tgz",
2511
+
"integrity": "sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==",
2512
+
"dev": true,
2513
+
"license": "MIT",
2514
+
"dependencies": {
2515
+
"expect": "^30.0.0",
2516
+
"pretty-format": "^30.0.0"
2517
+
}
2518
+
},
2519
+
"node_modules/@types/methods": {
2520
+
"version": "1.1.4",
2521
+
"resolved": "https://registry.npmjs.org/@types/methods/-/methods-1.1.4.tgz",
2522
+
"integrity": "sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==",
2523
+
"dev": true,
2524
+
"license": "MIT"
2525
+
},
1260
2526
"node_modules/@types/mime": {
1261
2527
"version": "1.3.5",
1262
2528
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
···
1305
2571
"@types/send": "*"
1306
2572
}
1307
2573
},
2574
+
"node_modules/@types/stack-utils": {
2575
+
"version": "2.0.3",
2576
+
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz",
2577
+
"integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==",
2578
+
"dev": true,
2579
+
"license": "MIT"
2580
+
},
2581
+
"node_modules/@types/superagent": {
2582
+
"version": "8.1.9",
2583
+
"resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-8.1.9.tgz",
2584
+
"integrity": "sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==",
2585
+
"dev": true,
2586
+
"license": "MIT",
2587
+
"dependencies": {
2588
+
"@types/cookiejar": "^2.1.5",
2589
+
"@types/methods": "^1.1.4",
2590
+
"@types/node": "*",
2591
+
"form-data": "^4.0.0"
2592
+
}
2593
+
},
2594
+
"node_modules/@types/supertest": {
2595
+
"version": "6.0.3",
2596
+
"resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-6.0.3.tgz",
2597
+
"integrity": "sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==",
2598
+
"dev": true,
2599
+
"license": "MIT",
2600
+
"dependencies": {
2601
+
"@types/methods": "^1.1.4",
2602
+
"@types/superagent": "^8.1.0"
2603
+
}
2604
+
},
1308
2605
"node_modules/@types/ws": {
1309
2606
"version": "8.18.1",
1310
2607
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
···
1314
2611
"@types/node": "*"
1315
2612
}
1316
2613
},
2614
+
"node_modules/@types/yargs": {
2615
+
"version": "17.0.33",
2616
+
"resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz",
2617
+
"integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==",
2618
+
"dev": true,
2619
+
"license": "MIT",
2620
+
"dependencies": {
2621
+
"@types/yargs-parser": "*"
2622
+
}
2623
+
},
2624
+
"node_modules/@types/yargs-parser": {
2625
+
"version": "21.0.3",
2626
+
"resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
2627
+
"integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
2628
+
"dev": true,
2629
+
"license": "MIT"
2630
+
},
2631
+
"node_modules/@ungap/structured-clone": {
2632
+
"version": "1.3.0",
2633
+
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
2634
+
"integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
2635
+
"dev": true,
2636
+
"license": "ISC"
2637
+
},
2638
+
"node_modules/@unrs/resolver-binding-android-arm-eabi": {
2639
+
"version": "1.9.0",
2640
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.9.0.tgz",
2641
+
"integrity": "sha512-h1T2c2Di49ekF2TE8ZCoJkb+jwETKUIPDJ/nO3tJBKlLFPu+fyd93f0rGP/BvArKx2k2HlRM4kqkNarj3dvZlg==",
2642
+
"cpu": [
2643
+
"arm"
2644
+
],
2645
+
"dev": true,
2646
+
"license": "MIT",
2647
+
"optional": true,
2648
+
"os": [
2649
+
"android"
2650
+
]
2651
+
},
2652
+
"node_modules/@unrs/resolver-binding-android-arm64": {
2653
+
"version": "1.9.0",
2654
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.9.0.tgz",
2655
+
"integrity": "sha512-sG1NHtgXtX8owEkJ11yn34vt0Xqzi3k9TJ8zppDmyG8GZV4kVWw44FHwKwHeEFl07uKPeC4ZoyuQaGh5ruJYPA==",
2656
+
"cpu": [
2657
+
"arm64"
2658
+
],
2659
+
"dev": true,
2660
+
"license": "MIT",
2661
+
"optional": true,
2662
+
"os": [
2663
+
"android"
2664
+
]
2665
+
},
2666
+
"node_modules/@unrs/resolver-binding-darwin-arm64": {
2667
+
"version": "1.9.0",
2668
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.9.0.tgz",
2669
+
"integrity": "sha512-nJ9z47kfFnCxN1z/oYZS7HSNsFh43y2asePzTEZpEvK7kGyuShSl3RRXnm/1QaqFL+iP+BjMwuB+DYUymOkA5A==",
2670
+
"cpu": [
2671
+
"arm64"
2672
+
],
2673
+
"dev": true,
2674
+
"license": "MIT",
2675
+
"optional": true,
2676
+
"os": [
2677
+
"darwin"
2678
+
]
2679
+
},
2680
+
"node_modules/@unrs/resolver-binding-darwin-x64": {
2681
+
"version": "1.9.0",
2682
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.9.0.tgz",
2683
+
"integrity": "sha512-TK+UA1TTa0qS53rjWn7cVlEKVGz2B6JYe0C++TdQjvWYIyx83ruwh0wd4LRxYBM5HeuAzXcylA9BH2trARXJTw==",
2684
+
"cpu": [
2685
+
"x64"
2686
+
],
2687
+
"dev": true,
2688
+
"license": "MIT",
2689
+
"optional": true,
2690
+
"os": [
2691
+
"darwin"
2692
+
]
2693
+
},
2694
+
"node_modules/@unrs/resolver-binding-freebsd-x64": {
2695
+
"version": "1.9.0",
2696
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.9.0.tgz",
2697
+
"integrity": "sha512-6uZwzMRFcD7CcCd0vz3Hp+9qIL2jseE/bx3ZjaLwn8t714nYGwiE84WpaMCYjU+IQET8Vu/+BNAGtYD7BG/0yA==",
2698
+
"cpu": [
2699
+
"x64"
2700
+
],
2701
+
"dev": true,
2702
+
"license": "MIT",
2703
+
"optional": true,
2704
+
"os": [
2705
+
"freebsd"
2706
+
]
2707
+
},
2708
+
"node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
2709
+
"version": "1.9.0",
2710
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.9.0.tgz",
2711
+
"integrity": "sha512-bPUBksQfrgcfv2+mm+AZinaKq8LCFvt5PThYqRotqSuuZK1TVKkhbVMS/jvSRfYl7jr3AoZLYbDkItxgqMKRkg==",
2712
+
"cpu": [
2713
+
"arm"
2714
+
],
2715
+
"dev": true,
2716
+
"license": "MIT",
2717
+
"optional": true,
2718
+
"os": [
2719
+
"linux"
2720
+
]
2721
+
},
2722
+
"node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
2723
+
"version": "1.9.0",
2724
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.9.0.tgz",
2725
+
"integrity": "sha512-uT6E7UBIrTdCsFQ+y0tQd3g5oudmrS/hds5pbU3h4s2t/1vsGWbbSKhBSCD9mcqaqkBwoqlECpUrRJCmldl8PA==",
2726
+
"cpu": [
2727
+
"arm"
2728
+
],
2729
+
"dev": true,
2730
+
"license": "MIT",
2731
+
"optional": true,
2732
+
"os": [
2733
+
"linux"
2734
+
]
2735
+
},
2736
+
"node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
2737
+
"version": "1.9.0",
2738
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.9.0.tgz",
2739
+
"integrity": "sha512-vdqBh911wc5awE2bX2zx3eflbyv8U9xbE/jVKAm425eRoOVv/VseGZsqi3A3SykckSpF4wSROkbQPvbQFn8EsA==",
2740
+
"cpu": [
2741
+
"arm64"
2742
+
],
2743
+
"dev": true,
2744
+
"license": "MIT",
2745
+
"optional": true,
2746
+
"os": [
2747
+
"linux"
2748
+
]
2749
+
},
2750
+
"node_modules/@unrs/resolver-binding-linux-arm64-musl": {
2751
+
"version": "1.9.0",
2752
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.9.0.tgz",
2753
+
"integrity": "sha512-/8JFZ/SnuDr1lLEVsxsuVwrsGquTvT51RZGvyDB/dOK3oYK2UqeXzgeyq6Otp8FZXQcEYqJwxb9v+gtdXn03eQ==",
2754
+
"cpu": [
2755
+
"arm64"
2756
+
],
2757
+
"dev": true,
2758
+
"license": "MIT",
2759
+
"optional": true,
2760
+
"os": [
2761
+
"linux"
2762
+
]
2763
+
},
2764
+
"node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
2765
+
"version": "1.9.0",
2766
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.9.0.tgz",
2767
+
"integrity": "sha512-FkJjybtrl+rajTw4loI3L6YqSOpeZfDls4SstL/5lsP2bka9TiHUjgMBjygeZEis1oC8LfJTS8FSgpKPaQx2tQ==",
2768
+
"cpu": [
2769
+
"ppc64"
2770
+
],
2771
+
"dev": true,
2772
+
"license": "MIT",
2773
+
"optional": true,
2774
+
"os": [
2775
+
"linux"
2776
+
]
2777
+
},
2778
+
"node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
2779
+
"version": "1.9.0",
2780
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.9.0.tgz",
2781
+
"integrity": "sha512-w/NZfHNeDusbqSZ8r/hp8iL4S39h4+vQMc9/vvzuIKMWKppyUGKm3IST0Qv0aOZ1rzIbl9SrDeIqK86ZpUK37w==",
2782
+
"cpu": [
2783
+
"riscv64"
2784
+
],
2785
+
"dev": true,
2786
+
"license": "MIT",
2787
+
"optional": true,
2788
+
"os": [
2789
+
"linux"
2790
+
]
2791
+
},
2792
+
"node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
2793
+
"version": "1.9.0",
2794
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.9.0.tgz",
2795
+
"integrity": "sha512-bEPBosut8/8KQbUixPry8zg/fOzVOWyvwzOfz0C0Rw6dp+wIBseyiHKjkcSyZKv/98edrbMknBaMNJfA/UEdqw==",
2796
+
"cpu": [
2797
+
"riscv64"
2798
+
],
2799
+
"dev": true,
2800
+
"license": "MIT",
2801
+
"optional": true,
2802
+
"os": [
2803
+
"linux"
2804
+
]
2805
+
},
2806
+
"node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
2807
+
"version": "1.9.0",
2808
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.9.0.tgz",
2809
+
"integrity": "sha512-LDtMT7moE3gK753gG4pc31AAqGUC86j3AplaFusc717EUGF9ZFJ356sdQzzZzkBk1XzMdxFyZ4f/i35NKM/lFA==",
2810
+
"cpu": [
2811
+
"s390x"
2812
+
],
2813
+
"dev": true,
2814
+
"license": "MIT",
2815
+
"optional": true,
2816
+
"os": [
2817
+
"linux"
2818
+
]
2819
+
},
2820
+
"node_modules/@unrs/resolver-binding-linux-x64-gnu": {
2821
+
"version": "1.9.0",
2822
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.9.0.tgz",
2823
+
"integrity": "sha512-WmFd5KINHIXj8o1mPaT8QRjA9HgSXhN1gl9Da4IZihARihEnOylu4co7i/yeaIpcfsI6sYs33cNZKyHYDh0lrA==",
2824
+
"cpu": [
2825
+
"x64"
2826
+
],
2827
+
"dev": true,
2828
+
"license": "MIT",
2829
+
"optional": true,
2830
+
"os": [
2831
+
"linux"
2832
+
]
2833
+
},
2834
+
"node_modules/@unrs/resolver-binding-linux-x64-musl": {
2835
+
"version": "1.9.0",
2836
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.9.0.tgz",
2837
+
"integrity": "sha512-CYuXbANW+WgzVRIl8/QvZmDaZxrqvOldOwlbUjIM4pQ46FJ0W5cinJ/Ghwa/Ng1ZPMJMk1VFdsD/XwmCGIXBWg==",
2838
+
"cpu": [
2839
+
"x64"
2840
+
],
2841
+
"dev": true,
2842
+
"license": "MIT",
2843
+
"optional": true,
2844
+
"os": [
2845
+
"linux"
2846
+
]
2847
+
},
2848
+
"node_modules/@unrs/resolver-binding-wasm32-wasi": {
2849
+
"version": "1.9.0",
2850
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.9.0.tgz",
2851
+
"integrity": "sha512-6Rp2WH0OoitMYR57Z6VE8Y6corX8C6QEMWLgOV6qXiJIeZ1F9WGXY/yQ8yDC4iTraotyLOeJ2Asea0urWj2fKQ==",
2852
+
"cpu": [
2853
+
"wasm32"
2854
+
],
2855
+
"dev": true,
2856
+
"license": "MIT",
2857
+
"optional": true,
2858
+
"dependencies": {
2859
+
"@napi-rs/wasm-runtime": "^0.2.11"
2860
+
},
2861
+
"engines": {
2862
+
"node": ">=14.0.0"
2863
+
}
2864
+
},
2865
+
"node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
2866
+
"version": "1.9.0",
2867
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.9.0.tgz",
2868
+
"integrity": "sha512-rknkrTRuvujprrbPmGeHi8wYWxmNVlBoNW8+4XF2hXUnASOjmuC9FNF1tGbDiRQWn264q9U/oGtixyO3BT8adQ==",
2869
+
"cpu": [
2870
+
"arm64"
2871
+
],
2872
+
"dev": true,
2873
+
"license": "MIT",
2874
+
"optional": true,
2875
+
"os": [
2876
+
"win32"
2877
+
]
2878
+
},
2879
+
"node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
2880
+
"version": "1.9.0",
2881
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.9.0.tgz",
2882
+
"integrity": "sha512-Ceymm+iBl+bgAICtgiHyMLz6hjxmLJKqBim8tDzpX61wpZOx2bPK6Gjuor7I2RiUynVjvvkoRIkrPyMwzBzF3A==",
2883
+
"cpu": [
2884
+
"ia32"
2885
+
],
2886
+
"dev": true,
2887
+
"license": "MIT",
2888
+
"optional": true,
2889
+
"os": [
2890
+
"win32"
2891
+
]
2892
+
},
2893
+
"node_modules/@unrs/resolver-binding-win32-x64-msvc": {
2894
+
"version": "1.9.0",
2895
+
"resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.9.0.tgz",
2896
+
"integrity": "sha512-k59o9ZyeyS0hAlcaKFezYSH2agQeRFEB7KoQLXl3Nb3rgkqT1NY9Vwy+SqODiLmYnEjxWJVRE/yq2jFVqdIxZw==",
2897
+
"cpu": [
2898
+
"x64"
2899
+
],
2900
+
"dev": true,
2901
+
"license": "MIT",
2902
+
"optional": true,
2903
+
"os": [
2904
+
"win32"
2905
+
]
2906
+
},
1317
2907
"node_modules/abort-controller": {
1318
2908
"version": "3.0.0",
1319
2909
"resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
···
1339
2929
"node": ">= 0.6"
1340
2930
}
1341
2931
},
2932
+
"node_modules/ansi-escapes": {
2933
+
"version": "4.3.2",
2934
+
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
2935
+
"integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
2936
+
"dev": true,
2937
+
"license": "MIT",
2938
+
"dependencies": {
2939
+
"type-fest": "^0.21.3"
2940
+
},
2941
+
"engines": {
2942
+
"node": ">=8"
2943
+
},
2944
+
"funding": {
2945
+
"url": "https://github.com/sponsors/sindresorhus"
2946
+
}
2947
+
},
1342
2948
"node_modules/ansi-regex": {
1343
2949
"version": "5.0.1",
1344
2950
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
···
1364
2970
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
1365
2971
}
1366
2972
},
2973
+
"node_modules/anymatch": {
2974
+
"version": "3.1.3",
2975
+
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
2976
+
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
2977
+
"dev": true,
2978
+
"license": "ISC",
2979
+
"dependencies": {
2980
+
"normalize-path": "^3.0.0",
2981
+
"picomatch": "^2.0.4"
2982
+
},
2983
+
"engines": {
2984
+
"node": ">= 8"
2985
+
}
2986
+
},
2987
+
"node_modules/argparse": {
2988
+
"version": "1.0.10",
2989
+
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
2990
+
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
2991
+
"dev": true,
2992
+
"license": "MIT",
2993
+
"dependencies": {
2994
+
"sprintf-js": "~1.0.2"
2995
+
}
2996
+
},
1367
2997
"node_modules/array-flatten": {
1368
2998
"version": "1.1.1",
1369
2999
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
1370
3000
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
1371
3001
"license": "MIT"
1372
3002
},
3003
+
"node_modules/asap": {
3004
+
"version": "2.0.6",
3005
+
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
3006
+
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
3007
+
"dev": true,
3008
+
"license": "MIT"
3009
+
},
1373
3010
"node_modules/async": {
1374
3011
"version": "3.2.6",
1375
3012
"resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz",
1376
3013
"integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==",
1377
3014
"license": "MIT"
1378
3015
},
3016
+
"node_modules/asynckit": {
3017
+
"version": "0.4.0",
3018
+
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
3019
+
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
3020
+
"dev": true,
3021
+
"license": "MIT"
3022
+
},
1379
3023
"node_modules/atomic-sleep": {
1380
3024
"version": "1.0.0",
1381
3025
"resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
···
1391
3035
"integrity": "sha512-aDczADvlvTGajTDjcjpJMqRkOF6Qdz3YbPZm/PyW6tKPkx2hlYBzxMhEywM/tU72HrVZjgl5VCdRuMlA7pZ8Gw==",
1392
3036
"license": "MIT"
1393
3037
},
3038
+
"node_modules/babel-jest": {
3039
+
"version": "30.0.2",
3040
+
"resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.2.tgz",
3041
+
"integrity": "sha512-A5kqR1/EUTidM2YC2YMEUDP2+19ppgOwK0IAd9Swc3q2KqFb5f9PtRUXVeZcngu0z5mDMyZ9zH2huJZSOMLiTQ==",
3042
+
"dev": true,
3043
+
"license": "MIT",
3044
+
"dependencies": {
3045
+
"@jest/transform": "30.0.2",
3046
+
"@types/babel__core": "^7.20.5",
3047
+
"babel-plugin-istanbul": "^7.0.0",
3048
+
"babel-preset-jest": "30.0.1",
3049
+
"chalk": "^4.1.2",
3050
+
"graceful-fs": "^4.2.11",
3051
+
"slash": "^3.0.0"
3052
+
},
3053
+
"engines": {
3054
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
3055
+
},
3056
+
"peerDependencies": {
3057
+
"@babel/core": "^7.11.0"
3058
+
}
3059
+
},
3060
+
"node_modules/babel-plugin-istanbul": {
3061
+
"version": "7.0.0",
3062
+
"resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.0.tgz",
3063
+
"integrity": "sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==",
3064
+
"dev": true,
3065
+
"license": "BSD-3-Clause",
3066
+
"dependencies": {
3067
+
"@babel/helper-plugin-utils": "^7.0.0",
3068
+
"@istanbuljs/load-nyc-config": "^1.0.0",
3069
+
"@istanbuljs/schema": "^0.1.3",
3070
+
"istanbul-lib-instrument": "^6.0.2",
3071
+
"test-exclude": "^6.0.0"
3072
+
},
3073
+
"engines": {
3074
+
"node": ">=12"
3075
+
}
3076
+
},
3077
+
"node_modules/babel-plugin-jest-hoist": {
3078
+
"version": "30.0.1",
3079
+
"resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.1.tgz",
3080
+
"integrity": "sha512-zTPME3pI50NsFW8ZBaVIOeAxzEY7XHlmWeXXu9srI+9kNfzCUTy8MFan46xOGZY8NZThMqq+e3qZUKsvXbasnQ==",
3081
+
"dev": true,
3082
+
"license": "MIT",
3083
+
"dependencies": {
3084
+
"@babel/template": "^7.27.2",
3085
+
"@babel/types": "^7.27.3",
3086
+
"@types/babel__core": "^7.20.5"
3087
+
},
3088
+
"engines": {
3089
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
3090
+
}
3091
+
},
3092
+
"node_modules/babel-preset-current-node-syntax": {
3093
+
"version": "1.1.0",
3094
+
"resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz",
3095
+
"integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==",
3096
+
"dev": true,
3097
+
"license": "MIT",
3098
+
"dependencies": {
3099
+
"@babel/plugin-syntax-async-generators": "^7.8.4",
3100
+
"@babel/plugin-syntax-bigint": "^7.8.3",
3101
+
"@babel/plugin-syntax-class-properties": "^7.12.13",
3102
+
"@babel/plugin-syntax-class-static-block": "^7.14.5",
3103
+
"@babel/plugin-syntax-import-attributes": "^7.24.7",
3104
+
"@babel/plugin-syntax-import-meta": "^7.10.4",
3105
+
"@babel/plugin-syntax-json-strings": "^7.8.3",
3106
+
"@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
3107
+
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
3108
+
"@babel/plugin-syntax-numeric-separator": "^7.10.4",
3109
+
"@babel/plugin-syntax-object-rest-spread": "^7.8.3",
3110
+
"@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
3111
+
"@babel/plugin-syntax-optional-chaining": "^7.8.3",
3112
+
"@babel/plugin-syntax-private-property-in-object": "^7.14.5",
3113
+
"@babel/plugin-syntax-top-level-await": "^7.14.5"
3114
+
},
3115
+
"peerDependencies": {
3116
+
"@babel/core": "^7.0.0"
3117
+
}
3118
+
},
3119
+
"node_modules/babel-preset-jest": {
3120
+
"version": "30.0.1",
3121
+
"resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.0.1.tgz",
3122
+
"integrity": "sha512-+YHejD5iTWI46cZmcc/YtX4gaKBtdqCHCVfuVinizVpbmyjO3zYmeuyFdfA8duRqQZfgCAMlsfmkVbJ+e2MAJw==",
3123
+
"dev": true,
3124
+
"license": "MIT",
3125
+
"dependencies": {
3126
+
"babel-plugin-jest-hoist": "30.0.1",
3127
+
"babel-preset-current-node-syntax": "^1.1.0"
3128
+
},
3129
+
"engines": {
3130
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
3131
+
},
3132
+
"peerDependencies": {
3133
+
"@babel/core": "^7.11.0"
3134
+
}
3135
+
},
1394
3136
"node_modules/balanced-match": {
1395
3137
"version": "1.0.2",
1396
3138
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
···
1478
3220
"concat-map": "0.0.1"
1479
3221
}
1480
3222
},
3223
+
"node_modules/braces": {
3224
+
"version": "3.0.3",
3225
+
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
3226
+
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
3227
+
"dev": true,
3228
+
"license": "MIT",
3229
+
"dependencies": {
3230
+
"fill-range": "^7.1.1"
3231
+
},
3232
+
"engines": {
3233
+
"node": ">=8"
3234
+
}
3235
+
},
3236
+
"node_modules/browserslist": {
3237
+
"version": "4.25.0",
3238
+
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz",
3239
+
"integrity": "sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==",
3240
+
"dev": true,
3241
+
"funding": [
3242
+
{
3243
+
"type": "opencollective",
3244
+
"url": "https://opencollective.com/browserslist"
3245
+
},
3246
+
{
3247
+
"type": "tidelift",
3248
+
"url": "https://tidelift.com/funding/github/npm/browserslist"
3249
+
},
3250
+
{
3251
+
"type": "github",
3252
+
"url": "https://github.com/sponsors/ai"
3253
+
}
3254
+
],
3255
+
"license": "MIT",
3256
+
"dependencies": {
3257
+
"caniuse-lite": "^1.0.30001718",
3258
+
"electron-to-chromium": "^1.5.160",
3259
+
"node-releases": "^2.0.19",
3260
+
"update-browserslist-db": "^1.1.3"
3261
+
},
3262
+
"bin": {
3263
+
"browserslist": "cli.js"
3264
+
},
3265
+
"engines": {
3266
+
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
3267
+
}
3268
+
},
3269
+
"node_modules/bs-logger": {
3270
+
"version": "0.2.6",
3271
+
"resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz",
3272
+
"integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==",
3273
+
"dev": true,
3274
+
"license": "MIT",
3275
+
"dependencies": {
3276
+
"fast-json-stable-stringify": "2.x"
3277
+
},
3278
+
"engines": {
3279
+
"node": ">= 6"
3280
+
}
3281
+
},
3282
+
"node_modules/bser": {
3283
+
"version": "2.1.1",
3284
+
"resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz",
3285
+
"integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==",
3286
+
"dev": true,
3287
+
"license": "Apache-2.0",
3288
+
"dependencies": {
3289
+
"node-int64": "^0.4.0"
3290
+
}
3291
+
},
1481
3292
"node_modules/buffer": {
1482
3293
"version": "5.7.1",
1483
3294
"resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
···
1502
3313
"ieee754": "^1.1.13"
1503
3314
}
1504
3315
},
3316
+
"node_modules/buffer-from": {
3317
+
"version": "1.1.2",
3318
+
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
3319
+
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
3320
+
"dev": true,
3321
+
"license": "MIT"
3322
+
},
1505
3323
"node_modules/bytes": {
1506
3324
"version": "3.1.2",
1507
3325
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
···
1540
3358
"url": "https://github.com/sponsors/ljharb"
1541
3359
}
1542
3360
},
3361
+
"node_modules/callsites": {
3362
+
"version": "3.1.0",
3363
+
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
3364
+
"integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
3365
+
"dev": true,
3366
+
"license": "MIT",
3367
+
"engines": {
3368
+
"node": ">=6"
3369
+
}
3370
+
},
3371
+
"node_modules/camelcase": {
3372
+
"version": "5.3.1",
3373
+
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
3374
+
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
3375
+
"dev": true,
3376
+
"license": "MIT",
3377
+
"engines": {
3378
+
"node": ">=6"
3379
+
}
3380
+
},
3381
+
"node_modules/caniuse-lite": {
3382
+
"version": "1.0.30001723",
3383
+
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001723.tgz",
3384
+
"integrity": "sha512-1R/elMjtehrFejxwmexeXAtae5UO9iSyFn6G/I806CYC/BLyyBk1EPhrKBkWhy6wM6Xnm47dSJQec+tLJ39WHw==",
3385
+
"dev": true,
3386
+
"funding": [
3387
+
{
3388
+
"type": "opencollective",
3389
+
"url": "https://opencollective.com/browserslist"
3390
+
},
3391
+
{
3392
+
"type": "tidelift",
3393
+
"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
3394
+
},
3395
+
{
3396
+
"type": "github",
3397
+
"url": "https://github.com/sponsors/ai"
3398
+
}
3399
+
],
3400
+
"license": "CC-BY-4.0"
3401
+
},
1543
3402
"node_modules/cbor-extract": {
1544
3403
"version": "2.2.0",
1545
3404
"resolved": "https://registry.npmjs.org/cbor-extract/-/cbor-extract-2.2.0.tgz",
···
1596
3455
"url": "https://github.com/chalk/chalk?sponsor=1"
1597
3456
}
1598
3457
},
3458
+
"node_modules/char-regex": {
3459
+
"version": "1.0.2",
3460
+
"resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
3461
+
"integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==",
3462
+
"dev": true,
3463
+
"license": "MIT",
3464
+
"engines": {
3465
+
"node": ">=10"
3466
+
}
3467
+
},
1599
3468
"node_modules/chownr": {
1600
3469
"version": "1.1.4",
1601
3470
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
1602
3471
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
1603
3472
"license": "ISC"
1604
3473
},
3474
+
"node_modules/ci-info": {
3475
+
"version": "4.2.0",
3476
+
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz",
3477
+
"integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==",
3478
+
"dev": true,
3479
+
"funding": [
3480
+
{
3481
+
"type": "github",
3482
+
"url": "https://github.com/sponsors/sibiraj-s"
3483
+
}
3484
+
],
3485
+
"license": "MIT",
3486
+
"engines": {
3487
+
"node": ">=8"
3488
+
}
3489
+
},
3490
+
"node_modules/cjs-module-lexer": {
3491
+
"version": "2.1.0",
3492
+
"resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.1.0.tgz",
3493
+
"integrity": "sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==",
3494
+
"dev": true,
3495
+
"license": "MIT"
3496
+
},
1605
3497
"node_modules/cliui": {
1606
3498
"version": "8.0.1",
1607
3499
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
···
1617
3509
"node": ">=12"
1618
3510
}
1619
3511
},
3512
+
"node_modules/co": {
3513
+
"version": "4.6.0",
3514
+
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
3515
+
"integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
3516
+
"dev": true,
3517
+
"license": "MIT",
3518
+
"engines": {
3519
+
"iojs": ">= 1.0.0",
3520
+
"node": ">= 0.12.0"
3521
+
}
3522
+
},
3523
+
"node_modules/collect-v8-coverage": {
3524
+
"version": "1.0.2",
3525
+
"resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz",
3526
+
"integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==",
3527
+
"dev": true,
3528
+
"license": "MIT"
3529
+
},
1620
3530
"node_modules/color-convert": {
1621
3531
"version": "2.0.1",
1622
3532
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
···
1635
3545
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1636
3546
"license": "MIT"
1637
3547
},
3548
+
"node_modules/combined-stream": {
3549
+
"version": "1.0.8",
3550
+
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
3551
+
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
3552
+
"dev": true,
3553
+
"license": "MIT",
3554
+
"dependencies": {
3555
+
"delayed-stream": "~1.0.0"
3556
+
},
3557
+
"engines": {
3558
+
"node": ">= 0.8"
3559
+
}
3560
+
},
3561
+
"node_modules/component-emitter": {
3562
+
"version": "1.3.1",
3563
+
"resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
3564
+
"integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
3565
+
"dev": true,
3566
+
"license": "MIT",
3567
+
"funding": {
3568
+
"url": "https://github.com/sponsors/sindresorhus"
3569
+
}
3570
+
},
1638
3571
"node_modules/concat-map": {
1639
3572
"version": "0.0.1",
1640
3573
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
···
1704
3637
"node": ">= 0.6"
1705
3638
}
1706
3639
},
3640
+
"node_modules/convert-source-map": {
3641
+
"version": "2.0.0",
3642
+
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
3643
+
"integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
3644
+
"dev": true,
3645
+
"license": "MIT"
3646
+
},
1707
3647
"node_modules/cookie": {
1708
3648
"version": "0.7.2",
1709
3649
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
···
1722
3662
"node": ">=6.6.0"
1723
3663
}
1724
3664
},
3665
+
"node_modules/cookiejar": {
3666
+
"version": "2.1.4",
3667
+
"resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
3668
+
"integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==",
3669
+
"dev": true,
3670
+
"license": "MIT"
3671
+
},
1725
3672
"node_modules/cors": {
1726
3673
"version": "2.8.5",
1727
3674
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
···
1733
3680
},
1734
3681
"engines": {
1735
3682
"node": ">= 0.10"
3683
+
}
3684
+
},
3685
+
"node_modules/cross-spawn": {
3686
+
"version": "7.0.6",
3687
+
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
3688
+
"integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
3689
+
"dev": true,
3690
+
"license": "MIT",
3691
+
"dependencies": {
3692
+
"path-key": "^3.1.0",
3693
+
"shebang-command": "^2.0.0",
3694
+
"which": "^2.0.1"
3695
+
},
3696
+
"engines": {
3697
+
"node": ">= 8"
1736
3698
}
1737
3699
},
1738
3700
"node_modules/debug": {
···
1767
3729
"url": "https://github.com/sponsors/sindresorhus"
1768
3730
}
1769
3731
},
3732
+
"node_modules/dedent": {
3733
+
"version": "1.6.0",
3734
+
"resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz",
3735
+
"integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==",
3736
+
"dev": true,
3737
+
"license": "MIT",
3738
+
"peerDependencies": {
3739
+
"babel-plugin-macros": "^3.1.0"
3740
+
},
3741
+
"peerDependenciesMeta": {
3742
+
"babel-plugin-macros": {
3743
+
"optional": true
3744
+
}
3745
+
}
3746
+
},
1770
3747
"node_modules/deep-extend": {
1771
3748
"version": "0.6.0",
1772
3749
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
···
1776
3753
"node": ">=4.0.0"
1777
3754
}
1778
3755
},
3756
+
"node_modules/deepmerge": {
3757
+
"version": "4.3.1",
3758
+
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
3759
+
"integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
3760
+
"dev": true,
3761
+
"license": "MIT",
3762
+
"engines": {
3763
+
"node": ">=0.10.0"
3764
+
}
3765
+
},
3766
+
"node_modules/delayed-stream": {
3767
+
"version": "1.0.0",
3768
+
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
3769
+
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
3770
+
"dev": true,
3771
+
"license": "MIT",
3772
+
"engines": {
3773
+
"node": ">=0.4.0"
3774
+
}
3775
+
},
1779
3776
"node_modules/depd": {
1780
3777
"version": "2.0.0",
1781
3778
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
···
1804
3801
"node": ">=8"
1805
3802
}
1806
3803
},
3804
+
"node_modules/detect-newline": {
3805
+
"version": "3.1.0",
3806
+
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
3807
+
"integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==",
3808
+
"dev": true,
3809
+
"license": "MIT",
3810
+
"engines": {
3811
+
"node": ">=8"
3812
+
}
3813
+
},
3814
+
"node_modules/dezalgo": {
3815
+
"version": "1.0.4",
3816
+
"resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz",
3817
+
"integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==",
3818
+
"dev": true,
3819
+
"license": "ISC",
3820
+
"dependencies": {
3821
+
"asap": "^2.0.0",
3822
+
"wrappy": "1"
3823
+
}
3824
+
},
1807
3825
"node_modules/dotenv": {
1808
3826
"version": "16.5.0",
1809
3827
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
···
1830
3848
"node": ">= 0.4"
1831
3849
}
1832
3850
},
3851
+
"node_modules/eastasianwidth": {
3852
+
"version": "0.2.0",
3853
+
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
3854
+
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
3855
+
"dev": true,
3856
+
"license": "MIT"
3857
+
},
1833
3858
"node_modules/ee-first": {
1834
3859
"version": "1.1.1",
1835
3860
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
···
1849
3874
},
1850
3875
"engines": {
1851
3876
"node": ">=0.10.0"
3877
+
}
3878
+
},
3879
+
"node_modules/electron-to-chromium": {
3880
+
"version": "1.5.171",
3881
+
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.171.tgz",
3882
+
"integrity": "sha512-scWpzXEJEMrGJa4Y6m/tVotb0WuvNmasv3wWVzUAeCgKU0ToFOhUW6Z+xWnRQANMYGxN4ngJXIThgBJOqzVPCQ==",
3883
+
"dev": true,
3884
+
"license": "ISC"
3885
+
},
3886
+
"node_modules/emittery": {
3887
+
"version": "0.13.1",
3888
+
"resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
3889
+
"integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
3890
+
"dev": true,
3891
+
"license": "MIT",
3892
+
"engines": {
3893
+
"node": ">=12"
3894
+
},
3895
+
"funding": {
3896
+
"url": "https://github.com/sindresorhus/emittery?sponsor=1"
1852
3897
}
1853
3898
},
1854
3899
"node_modules/emoji-regex": {
···
1876
3921
"once": "^1.4.0"
1877
3922
}
1878
3923
},
3924
+
"node_modules/error-ex": {
3925
+
"version": "1.3.2",
3926
+
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
3927
+
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
3928
+
"dev": true,
3929
+
"license": "MIT",
3930
+
"dependencies": {
3931
+
"is-arrayish": "^0.2.1"
3932
+
}
3933
+
},
1879
3934
"node_modules/es-define-property": {
1880
3935
"version": "1.0.1",
1881
3936
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
···
1901
3956
"license": "MIT",
1902
3957
"dependencies": {
1903
3958
"es-errors": "^1.3.0"
3959
+
},
3960
+
"engines": {
3961
+
"node": ">= 0.4"
3962
+
}
3963
+
},
3964
+
"node_modules/es-set-tostringtag": {
3965
+
"version": "2.1.0",
3966
+
"resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",
3967
+
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
3968
+
"dev": true,
3969
+
"license": "MIT",
3970
+
"dependencies": {
3971
+
"es-errors": "^1.3.0",
3972
+
"get-intrinsic": "^1.2.6",
3973
+
"has-tostringtag": "^1.0.2",
3974
+
"hasown": "^2.0.2"
1904
3975
},
1905
3976
"engines": {
1906
3977
"node": ">= 0.4"
···
1962
4033
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
1963
4034
"license": "MIT"
1964
4035
},
4036
+
"node_modules/escape-string-regexp": {
4037
+
"version": "2.0.0",
4038
+
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
4039
+
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
4040
+
"dev": true,
4041
+
"license": "MIT",
4042
+
"engines": {
4043
+
"node": ">=8"
4044
+
}
4045
+
},
4046
+
"node_modules/esprima": {
4047
+
"version": "4.0.1",
4048
+
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
4049
+
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
4050
+
"dev": true,
4051
+
"license": "BSD-2-Clause",
4052
+
"bin": {
4053
+
"esparse": "bin/esparse.js",
4054
+
"esvalidate": "bin/esvalidate.js"
4055
+
},
4056
+
"engines": {
4057
+
"node": ">=4"
4058
+
}
4059
+
},
1965
4060
"node_modules/etag": {
1966
4061
"version": "1.8.1",
1967
4062
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
···
1995
4090
"node": ">=0.8.x"
1996
4091
}
1997
4092
},
4093
+
"node_modules/execa": {
4094
+
"version": "5.1.1",
4095
+
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
4096
+
"integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
4097
+
"dev": true,
4098
+
"license": "MIT",
4099
+
"dependencies": {
4100
+
"cross-spawn": "^7.0.3",
4101
+
"get-stream": "^6.0.0",
4102
+
"human-signals": "^2.1.0",
4103
+
"is-stream": "^2.0.0",
4104
+
"merge-stream": "^2.0.0",
4105
+
"npm-run-path": "^4.0.1",
4106
+
"onetime": "^5.1.2",
4107
+
"signal-exit": "^3.0.3",
4108
+
"strip-final-newline": "^2.0.0"
4109
+
},
4110
+
"engines": {
4111
+
"node": ">=10"
4112
+
},
4113
+
"funding": {
4114
+
"url": "https://github.com/sindresorhus/execa?sponsor=1"
4115
+
}
4116
+
},
4117
+
"node_modules/execa/node_modules/signal-exit": {
4118
+
"version": "3.0.7",
4119
+
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
4120
+
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
4121
+
"dev": true,
4122
+
"license": "ISC"
4123
+
},
4124
+
"node_modules/exit-x": {
4125
+
"version": "0.2.2",
4126
+
"resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz",
4127
+
"integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==",
4128
+
"dev": true,
4129
+
"license": "MIT",
4130
+
"engines": {
4131
+
"node": ">= 0.8.0"
4132
+
}
4133
+
},
1998
4134
"node_modules/expand-template": {
1999
4135
"version": "2.0.3",
2000
4136
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
···
2002
4138
"license": "(MIT OR WTFPL)",
2003
4139
"engines": {
2004
4140
"node": ">=6"
4141
+
}
4142
+
},
4143
+
"node_modules/expect": {
4144
+
"version": "30.0.2",
4145
+
"resolved": "https://registry.npmjs.org/expect/-/expect-30.0.2.tgz",
4146
+
"integrity": "sha512-YN9Mgv2mtTWXVmifQq3QT+ixCL/uLuLJw+fdp8MOjKqu8K3XQh3o5aulMM1tn+O2DdrWNxLZTeJsCY/VofUA0A==",
4147
+
"dev": true,
4148
+
"license": "MIT",
4149
+
"dependencies": {
4150
+
"@jest/expect-utils": "30.0.2",
4151
+
"@jest/get-type": "30.0.1",
4152
+
"jest-matcher-utils": "30.0.2",
4153
+
"jest-message-util": "30.0.2",
4154
+
"jest-mock": "30.0.2",
4155
+
"jest-util": "30.0.2"
4156
+
},
4157
+
"engines": {
4158
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
2005
4159
}
2006
4160
},
2007
4161
"node_modules/express": {
···
2091
4245
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
2092
4246
"license": "MIT"
2093
4247
},
4248
+
"node_modules/fast-json-stable-stringify": {
4249
+
"version": "2.1.0",
4250
+
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
4251
+
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
4252
+
"dev": true,
4253
+
"license": "MIT"
4254
+
},
2094
4255
"node_modules/fast-redact": {
2095
4256
"version": "3.5.0",
2096
4257
"resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz",
···
2098
4259
"license": "MIT",
2099
4260
"engines": {
2100
4261
"node": ">=6"
4262
+
}
4263
+
},
4264
+
"node_modules/fast-safe-stringify": {
4265
+
"version": "2.1.1",
4266
+
"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
4267
+
"integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
4268
+
"dev": true,
4269
+
"license": "MIT"
4270
+
},
4271
+
"node_modules/fb-watchman": {
4272
+
"version": "2.0.2",
4273
+
"resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz",
4274
+
"integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==",
4275
+
"dev": true,
4276
+
"license": "Apache-2.0",
4277
+
"dependencies": {
4278
+
"bser": "2.1.1"
2101
4279
}
2102
4280
},
2103
4281
"node_modules/file-uri-to-path": {
···
2136
4314
"node": ">=10"
2137
4315
}
2138
4316
},
4317
+
"node_modules/fill-range": {
4318
+
"version": "7.1.1",
4319
+
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
4320
+
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
4321
+
"dev": true,
4322
+
"license": "MIT",
4323
+
"dependencies": {
4324
+
"to-regex-range": "^5.0.1"
4325
+
},
4326
+
"engines": {
4327
+
"node": ">=8"
4328
+
}
4329
+
},
2139
4330
"node_modules/finalhandler": {
2140
4331
"version": "2.1.0",
2141
4332
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz",
···
2153
4344
"node": ">= 0.8"
2154
4345
}
2155
4346
},
4347
+
"node_modules/find-up": {
4348
+
"version": "4.1.0",
4349
+
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
4350
+
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
4351
+
"dev": true,
4352
+
"license": "MIT",
4353
+
"dependencies": {
4354
+
"locate-path": "^5.0.0",
4355
+
"path-exists": "^4.0.0"
4356
+
},
4357
+
"engines": {
4358
+
"node": ">=8"
4359
+
}
4360
+
},
4361
+
"node_modules/foreground-child": {
4362
+
"version": "3.3.1",
4363
+
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
4364
+
"integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
4365
+
"dev": true,
4366
+
"license": "ISC",
4367
+
"dependencies": {
4368
+
"cross-spawn": "^7.0.6",
4369
+
"signal-exit": "^4.0.1"
4370
+
},
4371
+
"engines": {
4372
+
"node": ">=14"
4373
+
},
4374
+
"funding": {
4375
+
"url": "https://github.com/sponsors/isaacs"
4376
+
}
4377
+
},
4378
+
"node_modules/form-data": {
4379
+
"version": "4.0.3",
4380
+
"resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz",
4381
+
"integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==",
4382
+
"dev": true,
4383
+
"license": "MIT",
4384
+
"dependencies": {
4385
+
"asynckit": "^0.4.0",
4386
+
"combined-stream": "^1.0.8",
4387
+
"es-set-tostringtag": "^2.1.0",
4388
+
"hasown": "^2.0.2",
4389
+
"mime-types": "^2.1.12"
4390
+
},
4391
+
"engines": {
4392
+
"node": ">= 6"
4393
+
}
4394
+
},
4395
+
"node_modules/form-data/node_modules/mime-db": {
4396
+
"version": "1.52.0",
4397
+
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
4398
+
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
4399
+
"dev": true,
4400
+
"license": "MIT",
4401
+
"engines": {
4402
+
"node": ">= 0.6"
4403
+
}
4404
+
},
4405
+
"node_modules/form-data/node_modules/mime-types": {
4406
+
"version": "2.1.35",
4407
+
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
4408
+
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
4409
+
"dev": true,
4410
+
"license": "MIT",
4411
+
"dependencies": {
4412
+
"mime-db": "1.52.0"
4413
+
},
4414
+
"engines": {
4415
+
"node": ">= 0.6"
4416
+
}
4417
+
},
4418
+
"node_modules/formidable": {
4419
+
"version": "3.5.4",
4420
+
"resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz",
4421
+
"integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==",
4422
+
"dev": true,
4423
+
"license": "MIT",
4424
+
"dependencies": {
4425
+
"@paralleldrive/cuid2": "^2.2.2",
4426
+
"dezalgo": "^1.0.4",
4427
+
"once": "^1.4.0"
4428
+
},
4429
+
"engines": {
4430
+
"node": ">=14.0.0"
4431
+
},
4432
+
"funding": {
4433
+
"url": "https://ko-fi.com/tunnckoCore/commissions"
4434
+
}
4435
+
},
2156
4436
"node_modules/forwarded": {
2157
4437
"version": "0.2.0",
2158
4438
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
···
2177
4457
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
2178
4458
"license": "MIT"
2179
4459
},
4460
+
"node_modules/fs.realpath": {
4461
+
"version": "1.0.0",
4462
+
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
4463
+
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
4464
+
"dev": true,
4465
+
"license": "ISC"
4466
+
},
2180
4467
"node_modules/fsevents": {
2181
4468
"version": "2.3.3",
2182
4469
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
···
2200
4487
"url": "https://github.com/sponsors/ljharb"
2201
4488
}
2202
4489
},
4490
+
"node_modules/gensync": {
4491
+
"version": "1.0.0-beta.2",
4492
+
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
4493
+
"integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
4494
+
"dev": true,
4495
+
"license": "MIT",
4496
+
"engines": {
4497
+
"node": ">=6.9.0"
4498
+
}
4499
+
},
2203
4500
"node_modules/get-caller-file": {
2204
4501
"version": "2.0.5",
2205
4502
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
···
2234
4531
"url": "https://github.com/sponsors/ljharb"
2235
4532
}
2236
4533
},
4534
+
"node_modules/get-package-type": {
4535
+
"version": "0.1.0",
4536
+
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
4537
+
"integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
4538
+
"dev": true,
4539
+
"license": "MIT",
4540
+
"engines": {
4541
+
"node": ">=8.0.0"
4542
+
}
4543
+
},
2237
4544
"node_modules/get-proto": {
2238
4545
"version": "1.0.1",
2239
4546
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
···
2247
4554
"node": ">= 0.4"
2248
4555
}
2249
4556
},
4557
+
"node_modules/get-stream": {
4558
+
"version": "6.0.1",
4559
+
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
4560
+
"integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
4561
+
"dev": true,
4562
+
"license": "MIT",
4563
+
"engines": {
4564
+
"node": ">=10"
4565
+
},
4566
+
"funding": {
4567
+
"url": "https://github.com/sponsors/sindresorhus"
4568
+
}
4569
+
},
2250
4570
"node_modules/get-tsconfig": {
2251
4571
"version": "4.10.1",
2252
4572
"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz",
···
2265
4585
"integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
2266
4586
"license": "MIT"
2267
4587
},
4588
+
"node_modules/glob": {
4589
+
"version": "10.4.5",
4590
+
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz",
4591
+
"integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==",
4592
+
"dev": true,
4593
+
"license": "ISC",
4594
+
"dependencies": {
4595
+
"foreground-child": "^3.1.0",
4596
+
"jackspeak": "^3.1.2",
4597
+
"minimatch": "^9.0.4",
4598
+
"minipass": "^7.1.2",
4599
+
"package-json-from-dist": "^1.0.0",
4600
+
"path-scurry": "^1.11.1"
4601
+
},
4602
+
"bin": {
4603
+
"glob": "dist/esm/bin.mjs"
4604
+
},
4605
+
"funding": {
4606
+
"url": "https://github.com/sponsors/isaacs"
4607
+
}
4608
+
},
4609
+
"node_modules/glob/node_modules/brace-expansion": {
4610
+
"version": "2.0.2",
4611
+
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
4612
+
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
4613
+
"dev": true,
4614
+
"license": "MIT",
4615
+
"dependencies": {
4616
+
"balanced-match": "^1.0.0"
4617
+
}
4618
+
},
4619
+
"node_modules/glob/node_modules/minimatch": {
4620
+
"version": "9.0.5",
4621
+
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
4622
+
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
4623
+
"dev": true,
4624
+
"license": "ISC",
4625
+
"dependencies": {
4626
+
"brace-expansion": "^2.0.1"
4627
+
},
4628
+
"engines": {
4629
+
"node": ">=16 || 14 >=14.17"
4630
+
},
4631
+
"funding": {
4632
+
"url": "https://github.com/sponsors/isaacs"
4633
+
}
4634
+
},
4635
+
"node_modules/globals": {
4636
+
"version": "11.12.0",
4637
+
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
4638
+
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
4639
+
"dev": true,
4640
+
"license": "MIT",
4641
+
"engines": {
4642
+
"node": ">=4"
4643
+
}
4644
+
},
2268
4645
"node_modules/gopd": {
2269
4646
"version": "1.2.0",
2270
4647
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
···
2276
4653
"funding": {
2277
4654
"url": "https://github.com/sponsors/ljharb"
2278
4655
}
4656
+
},
4657
+
"node_modules/graceful-fs": {
4658
+
"version": "4.2.11",
4659
+
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
4660
+
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
4661
+
"dev": true,
4662
+
"license": "ISC"
2279
4663
},
2280
4664
"node_modules/graphemer": {
2281
4665
"version": "1.4.0",
···
2304
4688
"url": "https://github.com/sponsors/ljharb"
2305
4689
}
2306
4690
},
4691
+
"node_modules/has-tostringtag": {
4692
+
"version": "1.0.2",
4693
+
"resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
4694
+
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
4695
+
"dev": true,
4696
+
"license": "MIT",
4697
+
"dependencies": {
4698
+
"has-symbols": "^1.0.3"
4699
+
},
4700
+
"engines": {
4701
+
"node": ">= 0.4"
4702
+
},
4703
+
"funding": {
4704
+
"url": "https://github.com/sponsors/ljharb"
4705
+
}
4706
+
},
2307
4707
"node_modules/hasown": {
2308
4708
"version": "2.0.2",
2309
4709
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
···
2316
4716
"node": ">= 0.4"
2317
4717
}
2318
4718
},
4719
+
"node_modules/html-escaper": {
4720
+
"version": "2.0.2",
4721
+
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
4722
+
"integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
4723
+
"dev": true,
4724
+
"license": "MIT"
4725
+
},
2319
4726
"node_modules/http-errors": {
2320
4727
"version": "2.0.0",
2321
4728
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
···
2341
4748
"node": ">= 0.8"
2342
4749
}
2343
4750
},
4751
+
"node_modules/human-signals": {
4752
+
"version": "2.1.0",
4753
+
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
4754
+
"integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
4755
+
"dev": true,
4756
+
"license": "Apache-2.0",
4757
+
"engines": {
4758
+
"node": ">=10.17.0"
4759
+
}
4760
+
},
2344
4761
"node_modules/iconv-lite": {
2345
4762
"version": "0.6.3",
2346
4763
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
···
2373
4790
],
2374
4791
"license": "BSD-3-Clause"
2375
4792
},
4793
+
"node_modules/import-local": {
4794
+
"version": "3.2.0",
4795
+
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz",
4796
+
"integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==",
4797
+
"dev": true,
4798
+
"license": "MIT",
4799
+
"dependencies": {
4800
+
"pkg-dir": "^4.2.0",
4801
+
"resolve-cwd": "^3.0.0"
4802
+
},
4803
+
"bin": {
4804
+
"import-local-fixture": "fixtures/cli.js"
4805
+
},
4806
+
"engines": {
4807
+
"node": ">=8"
4808
+
},
4809
+
"funding": {
4810
+
"url": "https://github.com/sponsors/sindresorhus"
4811
+
}
4812
+
},
4813
+
"node_modules/imurmurhash": {
4814
+
"version": "0.1.4",
4815
+
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
4816
+
"integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
4817
+
"dev": true,
4818
+
"license": "MIT",
4819
+
"engines": {
4820
+
"node": ">=0.8.19"
4821
+
}
4822
+
},
4823
+
"node_modules/inflight": {
4824
+
"version": "1.0.6",
4825
+
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
4826
+
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
4827
+
"deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
4828
+
"dev": true,
4829
+
"license": "ISC",
4830
+
"dependencies": {
4831
+
"once": "^1.3.0",
4832
+
"wrappy": "1"
4833
+
}
4834
+
},
2376
4835
"node_modules/inherits": {
2377
4836
"version": "2.0.4",
2378
4837
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
···
2394
4853
"node": ">= 0.10"
2395
4854
}
2396
4855
},
4856
+
"node_modules/is-arrayish": {
4857
+
"version": "0.2.1",
4858
+
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
4859
+
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
4860
+
"dev": true,
4861
+
"license": "MIT"
4862
+
},
2397
4863
"node_modules/is-fullwidth-code-point": {
2398
4864
"version": "3.0.0",
2399
4865
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
···
2404
4870
"node": ">=8"
2405
4871
}
2406
4872
},
4873
+
"node_modules/is-generator-fn": {
4874
+
"version": "2.1.0",
4875
+
"resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz",
4876
+
"integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
4877
+
"dev": true,
4878
+
"license": "MIT",
4879
+
"engines": {
4880
+
"node": ">=6"
4881
+
}
4882
+
},
4883
+
"node_modules/is-number": {
4884
+
"version": "7.0.0",
4885
+
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
4886
+
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
4887
+
"dev": true,
4888
+
"license": "MIT",
4889
+
"engines": {
4890
+
"node": ">=0.12.0"
4891
+
}
4892
+
},
2407
4893
"node_modules/is-promise": {
2408
4894
"version": "4.0.0",
2409
4895
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",
2410
4896
"integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",
2411
4897
"license": "MIT"
2412
4898
},
4899
+
"node_modules/is-stream": {
4900
+
"version": "2.0.1",
4901
+
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
4902
+
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
4903
+
"dev": true,
4904
+
"license": "MIT",
4905
+
"engines": {
4906
+
"node": ">=8"
4907
+
},
4908
+
"funding": {
4909
+
"url": "https://github.com/sponsors/sindresorhus"
4910
+
}
4911
+
},
4912
+
"node_modules/isexe": {
4913
+
"version": "2.0.0",
4914
+
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
4915
+
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
4916
+
"dev": true,
4917
+
"license": "ISC"
4918
+
},
2413
4919
"node_modules/iso-datestring-validator": {
2414
4920
"version": "2.2.2",
2415
4921
"resolved": "https://registry.npmjs.org/iso-datestring-validator/-/iso-datestring-validator-2.2.2.tgz",
2416
4922
"integrity": "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==",
2417
4923
"license": "MIT"
2418
4924
},
4925
+
"node_modules/istanbul-lib-coverage": {
4926
+
"version": "3.2.2",
4927
+
"resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
4928
+
"integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
4929
+
"dev": true,
4930
+
"license": "BSD-3-Clause",
4931
+
"engines": {
4932
+
"node": ">=8"
4933
+
}
4934
+
},
4935
+
"node_modules/istanbul-lib-instrument": {
4936
+
"version": "6.0.3",
4937
+
"resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz",
4938
+
"integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==",
4939
+
"dev": true,
4940
+
"license": "BSD-3-Clause",
4941
+
"dependencies": {
4942
+
"@babel/core": "^7.23.9",
4943
+
"@babel/parser": "^7.23.9",
4944
+
"@istanbuljs/schema": "^0.1.3",
4945
+
"istanbul-lib-coverage": "^3.2.0",
4946
+
"semver": "^7.5.4"
4947
+
},
4948
+
"engines": {
4949
+
"node": ">=10"
4950
+
}
4951
+
},
4952
+
"node_modules/istanbul-lib-report": {
4953
+
"version": "3.0.1",
4954
+
"resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
4955
+
"integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
4956
+
"dev": true,
4957
+
"license": "BSD-3-Clause",
4958
+
"dependencies": {
4959
+
"istanbul-lib-coverage": "^3.0.0",
4960
+
"make-dir": "^4.0.0",
4961
+
"supports-color": "^7.1.0"
4962
+
},
4963
+
"engines": {
4964
+
"node": ">=10"
4965
+
}
4966
+
},
4967
+
"node_modules/istanbul-lib-source-maps": {
4968
+
"version": "5.0.6",
4969
+
"resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz",
4970
+
"integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==",
4971
+
"dev": true,
4972
+
"license": "BSD-3-Clause",
4973
+
"dependencies": {
4974
+
"@jridgewell/trace-mapping": "^0.3.23",
4975
+
"debug": "^4.1.1",
4976
+
"istanbul-lib-coverage": "^3.0.0"
4977
+
},
4978
+
"engines": {
4979
+
"node": ">=10"
4980
+
}
4981
+
},
4982
+
"node_modules/istanbul-reports": {
4983
+
"version": "3.1.7",
4984
+
"resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
4985
+
"integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
4986
+
"dev": true,
4987
+
"license": "BSD-3-Clause",
4988
+
"dependencies": {
4989
+
"html-escaper": "^2.0.0",
4990
+
"istanbul-lib-report": "^3.0.0"
4991
+
},
4992
+
"engines": {
4993
+
"node": ">=8"
4994
+
}
4995
+
},
4996
+
"node_modules/jackspeak": {
4997
+
"version": "3.4.3",
4998
+
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz",
4999
+
"integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==",
5000
+
"dev": true,
5001
+
"license": "BlueOak-1.0.0",
5002
+
"dependencies": {
5003
+
"@isaacs/cliui": "^8.0.2"
5004
+
},
5005
+
"funding": {
5006
+
"url": "https://github.com/sponsors/isaacs"
5007
+
},
5008
+
"optionalDependencies": {
5009
+
"@pkgjs/parseargs": "^0.11.0"
5010
+
}
5011
+
},
2419
5012
"node_modules/jake": {
2420
5013
"version": "10.9.2",
2421
5014
"resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz",
···
2434
5027
"node": ">=10"
2435
5028
}
2436
5029
},
5030
+
"node_modules/jest": {
5031
+
"version": "30.0.2",
5032
+
"resolved": "https://registry.npmjs.org/jest/-/jest-30.0.2.tgz",
5033
+
"integrity": "sha512-HlSEiHRcmTuGwNyeawLTEzpQUMFn+f741FfoNg7RXG2h0WLJKozVCpcQLT0GW17H6kNCqRwGf+Ii/I1YVNvEGQ==",
5034
+
"dev": true,
5035
+
"license": "MIT",
5036
+
"dependencies": {
5037
+
"@jest/core": "30.0.2",
5038
+
"@jest/types": "30.0.1",
5039
+
"import-local": "^3.2.0",
5040
+
"jest-cli": "30.0.2"
5041
+
},
5042
+
"bin": {
5043
+
"jest": "bin/jest.js"
5044
+
},
5045
+
"engines": {
5046
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5047
+
},
5048
+
"peerDependencies": {
5049
+
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
5050
+
},
5051
+
"peerDependenciesMeta": {
5052
+
"node-notifier": {
5053
+
"optional": true
5054
+
}
5055
+
}
5056
+
},
5057
+
"node_modules/jest-changed-files": {
5058
+
"version": "30.0.2",
5059
+
"resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.0.2.tgz",
5060
+
"integrity": "sha512-Ius/iRST9FKfJI+I+kpiDh8JuUlAISnRszF9ixZDIqJF17FckH5sOzKC8a0wd0+D+8em5ADRHA5V5MnfeDk2WA==",
5061
+
"dev": true,
5062
+
"license": "MIT",
5063
+
"dependencies": {
5064
+
"execa": "^5.1.1",
5065
+
"jest-util": "30.0.2",
5066
+
"p-limit": "^3.1.0"
5067
+
},
5068
+
"engines": {
5069
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5070
+
}
5071
+
},
5072
+
"node_modules/jest-circus": {
5073
+
"version": "30.0.2",
5074
+
"resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.0.2.tgz",
5075
+
"integrity": "sha512-NRozwx4DaFHcCUtwdEd/0jBLL1imyMrCbla3vF//wdsB2g6jIicMbjx9VhqE/BYU4dwsOQld+06ODX0oZ9xOLg==",
5076
+
"dev": true,
5077
+
"license": "MIT",
5078
+
"dependencies": {
5079
+
"@jest/environment": "30.0.2",
5080
+
"@jest/expect": "30.0.2",
5081
+
"@jest/test-result": "30.0.2",
5082
+
"@jest/types": "30.0.1",
5083
+
"@types/node": "*",
5084
+
"chalk": "^4.1.2",
5085
+
"co": "^4.6.0",
5086
+
"dedent": "^1.6.0",
5087
+
"is-generator-fn": "^2.1.0",
5088
+
"jest-each": "30.0.2",
5089
+
"jest-matcher-utils": "30.0.2",
5090
+
"jest-message-util": "30.0.2",
5091
+
"jest-runtime": "30.0.2",
5092
+
"jest-snapshot": "30.0.2",
5093
+
"jest-util": "30.0.2",
5094
+
"p-limit": "^3.1.0",
5095
+
"pretty-format": "30.0.2",
5096
+
"pure-rand": "^7.0.0",
5097
+
"slash": "^3.0.0",
5098
+
"stack-utils": "^2.0.6"
5099
+
},
5100
+
"engines": {
5101
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5102
+
}
5103
+
},
5104
+
"node_modules/jest-cli": {
5105
+
"version": "30.0.2",
5106
+
"resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.0.2.tgz",
5107
+
"integrity": "sha512-yQ6Qz747oUbMYLNAqOlEby+hwXx7WEJtCl0iolBRpJhr2uvkBgiVMrvuKirBc8utwQBnkETFlDUkYifbRpmBrQ==",
5108
+
"dev": true,
5109
+
"license": "MIT",
5110
+
"dependencies": {
5111
+
"@jest/core": "30.0.2",
5112
+
"@jest/test-result": "30.0.2",
5113
+
"@jest/types": "30.0.1",
5114
+
"chalk": "^4.1.2",
5115
+
"exit-x": "^0.2.2",
5116
+
"import-local": "^3.2.0",
5117
+
"jest-config": "30.0.2",
5118
+
"jest-util": "30.0.2",
5119
+
"jest-validate": "30.0.2",
5120
+
"yargs": "^17.7.2"
5121
+
},
5122
+
"bin": {
5123
+
"jest": "bin/jest.js"
5124
+
},
5125
+
"engines": {
5126
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5127
+
},
5128
+
"peerDependencies": {
5129
+
"node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0"
5130
+
},
5131
+
"peerDependenciesMeta": {
5132
+
"node-notifier": {
5133
+
"optional": true
5134
+
}
5135
+
}
5136
+
},
5137
+
"node_modules/jest-config": {
5138
+
"version": "30.0.2",
5139
+
"resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.0.2.tgz",
5140
+
"integrity": "sha512-vo0fVq+uzDcXETFVnCUyr5HaUCM8ES6DEuS9AFpma34BVXMRRNlsqDyiW5RDHaEFoeFlJHoI4Xjh/WSYIAL58g==",
5141
+
"dev": true,
5142
+
"license": "MIT",
5143
+
"dependencies": {
5144
+
"@babel/core": "^7.27.4",
5145
+
"@jest/get-type": "30.0.1",
5146
+
"@jest/pattern": "30.0.1",
5147
+
"@jest/test-sequencer": "30.0.2",
5148
+
"@jest/types": "30.0.1",
5149
+
"babel-jest": "30.0.2",
5150
+
"chalk": "^4.1.2",
5151
+
"ci-info": "^4.2.0",
5152
+
"deepmerge": "^4.3.1",
5153
+
"glob": "^10.3.10",
5154
+
"graceful-fs": "^4.2.11",
5155
+
"jest-circus": "30.0.2",
5156
+
"jest-docblock": "30.0.1",
5157
+
"jest-environment-node": "30.0.2",
5158
+
"jest-regex-util": "30.0.1",
5159
+
"jest-resolve": "30.0.2",
5160
+
"jest-runner": "30.0.2",
5161
+
"jest-util": "30.0.2",
5162
+
"jest-validate": "30.0.2",
5163
+
"micromatch": "^4.0.8",
5164
+
"parse-json": "^5.2.0",
5165
+
"pretty-format": "30.0.2",
5166
+
"slash": "^3.0.0",
5167
+
"strip-json-comments": "^3.1.1"
5168
+
},
5169
+
"engines": {
5170
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5171
+
},
5172
+
"peerDependencies": {
5173
+
"@types/node": "*",
5174
+
"esbuild-register": ">=3.4.0",
5175
+
"ts-node": ">=9.0.0"
5176
+
},
5177
+
"peerDependenciesMeta": {
5178
+
"@types/node": {
5179
+
"optional": true
5180
+
},
5181
+
"esbuild-register": {
5182
+
"optional": true
5183
+
},
5184
+
"ts-node": {
5185
+
"optional": true
5186
+
}
5187
+
}
5188
+
},
5189
+
"node_modules/jest-config/node_modules/strip-json-comments": {
5190
+
"version": "3.1.1",
5191
+
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
5192
+
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
5193
+
"dev": true,
5194
+
"license": "MIT",
5195
+
"engines": {
5196
+
"node": ">=8"
5197
+
},
5198
+
"funding": {
5199
+
"url": "https://github.com/sponsors/sindresorhus"
5200
+
}
5201
+
},
5202
+
"node_modules/jest-diff": {
5203
+
"version": "30.0.2",
5204
+
"resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.2.tgz",
5205
+
"integrity": "sha512-2UjrNvDJDn/oHFpPrUTVmvYYDNeNtw2DlY3er8bI6vJJb9Fb35ycp/jFLd5RdV59tJ8ekVXX3o/nwPcscgXZJQ==",
5206
+
"dev": true,
5207
+
"license": "MIT",
5208
+
"dependencies": {
5209
+
"@jest/diff-sequences": "30.0.1",
5210
+
"@jest/get-type": "30.0.1",
5211
+
"chalk": "^4.1.2",
5212
+
"pretty-format": "30.0.2"
5213
+
},
5214
+
"engines": {
5215
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5216
+
}
5217
+
},
5218
+
"node_modules/jest-docblock": {
5219
+
"version": "30.0.1",
5220
+
"resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.0.1.tgz",
5221
+
"integrity": "sha512-/vF78qn3DYphAaIc3jy4gA7XSAz167n9Bm/wn/1XhTLW7tTBIzXtCJpb/vcmc73NIIeeohCbdL94JasyXUZsGA==",
5222
+
"dev": true,
5223
+
"license": "MIT",
5224
+
"dependencies": {
5225
+
"detect-newline": "^3.1.0"
5226
+
},
5227
+
"engines": {
5228
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5229
+
}
5230
+
},
5231
+
"node_modules/jest-each": {
5232
+
"version": "30.0.2",
5233
+
"resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.0.2.tgz",
5234
+
"integrity": "sha512-ZFRsTpe5FUWFQ9cWTMguCaiA6kkW5whccPy9JjD1ezxh+mJeqmz8naL8Fl/oSbNJv3rgB0x87WBIkA5CObIUZQ==",
5235
+
"dev": true,
5236
+
"license": "MIT",
5237
+
"dependencies": {
5238
+
"@jest/get-type": "30.0.1",
5239
+
"@jest/types": "30.0.1",
5240
+
"chalk": "^4.1.2",
5241
+
"jest-util": "30.0.2",
5242
+
"pretty-format": "30.0.2"
5243
+
},
5244
+
"engines": {
5245
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5246
+
}
5247
+
},
5248
+
"node_modules/jest-environment-node": {
5249
+
"version": "30.0.2",
5250
+
"resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.0.2.tgz",
5251
+
"integrity": "sha512-XsGtZ0H+a70RsxAQkKuIh0D3ZlASXdZdhpOSBq9WRPq6lhe0IoQHGW0w9ZUaPiZQ/CpkIdprvlfV1QcXcvIQLQ==",
5252
+
"dev": true,
5253
+
"license": "MIT",
5254
+
"dependencies": {
5255
+
"@jest/environment": "30.0.2",
5256
+
"@jest/fake-timers": "30.0.2",
5257
+
"@jest/types": "30.0.1",
5258
+
"@types/node": "*",
5259
+
"jest-mock": "30.0.2",
5260
+
"jest-util": "30.0.2",
5261
+
"jest-validate": "30.0.2"
5262
+
},
5263
+
"engines": {
5264
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5265
+
}
5266
+
},
5267
+
"node_modules/jest-haste-map": {
5268
+
"version": "30.0.2",
5269
+
"resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.0.2.tgz",
5270
+
"integrity": "sha512-telJBKpNLeCb4MaX+I5k496556Y2FiKR/QLZc0+MGBYl4k3OO0472drlV2LUe7c1Glng5HuAu+5GLYp//GpdOQ==",
5271
+
"dev": true,
5272
+
"license": "MIT",
5273
+
"dependencies": {
5274
+
"@jest/types": "30.0.1",
5275
+
"@types/node": "*",
5276
+
"anymatch": "^3.1.3",
5277
+
"fb-watchman": "^2.0.2",
5278
+
"graceful-fs": "^4.2.11",
5279
+
"jest-regex-util": "30.0.1",
5280
+
"jest-util": "30.0.2",
5281
+
"jest-worker": "30.0.2",
5282
+
"micromatch": "^4.0.8",
5283
+
"walker": "^1.0.8"
5284
+
},
5285
+
"engines": {
5286
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5287
+
},
5288
+
"optionalDependencies": {
5289
+
"fsevents": "^2.3.3"
5290
+
}
5291
+
},
5292
+
"node_modules/jest-leak-detector": {
5293
+
"version": "30.0.2",
5294
+
"resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.0.2.tgz",
5295
+
"integrity": "sha512-U66sRrAYdALq+2qtKffBLDWsQ/XoNNs2Lcr83sc9lvE/hEpNafJlq2lXCPUBMNqamMECNxSIekLfe69qg4KMIQ==",
5296
+
"dev": true,
5297
+
"license": "MIT",
5298
+
"dependencies": {
5299
+
"@jest/get-type": "30.0.1",
5300
+
"pretty-format": "30.0.2"
5301
+
},
5302
+
"engines": {
5303
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5304
+
}
5305
+
},
5306
+
"node_modules/jest-matcher-utils": {
5307
+
"version": "30.0.2",
5308
+
"resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.2.tgz",
5309
+
"integrity": "sha512-1FKwgJYECR8IT93KMKmjKHSLyru0DqguThov/aWpFccC0wbiXGOxYEu7SScderBD7ruDOpl7lc5NG6w3oxKfaA==",
5310
+
"dev": true,
5311
+
"license": "MIT",
5312
+
"dependencies": {
5313
+
"@jest/get-type": "30.0.1",
5314
+
"chalk": "^4.1.2",
5315
+
"jest-diff": "30.0.2",
5316
+
"pretty-format": "30.0.2"
5317
+
},
5318
+
"engines": {
5319
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5320
+
}
5321
+
},
5322
+
"node_modules/jest-message-util": {
5323
+
"version": "30.0.2",
5324
+
"resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.2.tgz",
5325
+
"integrity": "sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==",
5326
+
"dev": true,
5327
+
"license": "MIT",
5328
+
"dependencies": {
5329
+
"@babel/code-frame": "^7.27.1",
5330
+
"@jest/types": "30.0.1",
5331
+
"@types/stack-utils": "^2.0.3",
5332
+
"chalk": "^4.1.2",
5333
+
"graceful-fs": "^4.2.11",
5334
+
"micromatch": "^4.0.8",
5335
+
"pretty-format": "30.0.2",
5336
+
"slash": "^3.0.0",
5337
+
"stack-utils": "^2.0.6"
5338
+
},
5339
+
"engines": {
5340
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5341
+
}
5342
+
},
5343
+
"node_modules/jest-mock": {
5344
+
"version": "30.0.2",
5345
+
"resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.2.tgz",
5346
+
"integrity": "sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==",
5347
+
"dev": true,
5348
+
"license": "MIT",
5349
+
"dependencies": {
5350
+
"@jest/types": "30.0.1",
5351
+
"@types/node": "*",
5352
+
"jest-util": "30.0.2"
5353
+
},
5354
+
"engines": {
5355
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5356
+
}
5357
+
},
5358
+
"node_modules/jest-pnp-resolver": {
5359
+
"version": "1.2.3",
5360
+
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz",
5361
+
"integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==",
5362
+
"dev": true,
5363
+
"license": "MIT",
5364
+
"engines": {
5365
+
"node": ">=6"
5366
+
},
5367
+
"peerDependencies": {
5368
+
"jest-resolve": "*"
5369
+
},
5370
+
"peerDependenciesMeta": {
5371
+
"jest-resolve": {
5372
+
"optional": true
5373
+
}
5374
+
}
5375
+
},
5376
+
"node_modules/jest-regex-util": {
5377
+
"version": "30.0.1",
5378
+
"resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz",
5379
+
"integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==",
5380
+
"dev": true,
5381
+
"license": "MIT",
5382
+
"engines": {
5383
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5384
+
}
5385
+
},
5386
+
"node_modules/jest-resolve": {
5387
+
"version": "30.0.2",
5388
+
"resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.0.2.tgz",
5389
+
"integrity": "sha512-q/XT0XQvRemykZsvRopbG6FQUT6/ra+XV6rPijyjT6D0msOyCvR2A5PlWZLd+fH0U8XWKZfDiAgrUNDNX2BkCw==",
5390
+
"dev": true,
5391
+
"license": "MIT",
5392
+
"dependencies": {
5393
+
"chalk": "^4.1.2",
5394
+
"graceful-fs": "^4.2.11",
5395
+
"jest-haste-map": "30.0.2",
5396
+
"jest-pnp-resolver": "^1.2.3",
5397
+
"jest-util": "30.0.2",
5398
+
"jest-validate": "30.0.2",
5399
+
"slash": "^3.0.0",
5400
+
"unrs-resolver": "^1.7.11"
5401
+
},
5402
+
"engines": {
5403
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5404
+
}
5405
+
},
5406
+
"node_modules/jest-resolve-dependencies": {
5407
+
"version": "30.0.2",
5408
+
"resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.0.2.tgz",
5409
+
"integrity": "sha512-Lp1iIXpsF5fGM4vyP8xHiIy2H5L5yO67/nXoYJzH4kz+fQmO+ZMKxzYLyWxYy4EeCLeNQ6a9OozL+uHZV2iuEA==",
5410
+
"dev": true,
5411
+
"license": "MIT",
5412
+
"dependencies": {
5413
+
"jest-regex-util": "30.0.1",
5414
+
"jest-snapshot": "30.0.2"
5415
+
},
5416
+
"engines": {
5417
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5418
+
}
5419
+
},
5420
+
"node_modules/jest-runner": {
5421
+
"version": "30.0.2",
5422
+
"resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.0.2.tgz",
5423
+
"integrity": "sha512-6H+CIFiDLVt1Ix6jLzASXz3IoIiDukpEIxL9FHtDQ2BD/k5eFtDF5e5N9uItzRE3V1kp7VoSRyrGBytXKra4xA==",
5424
+
"dev": true,
5425
+
"license": "MIT",
5426
+
"dependencies": {
5427
+
"@jest/console": "30.0.2",
5428
+
"@jest/environment": "30.0.2",
5429
+
"@jest/test-result": "30.0.2",
5430
+
"@jest/transform": "30.0.2",
5431
+
"@jest/types": "30.0.1",
5432
+
"@types/node": "*",
5433
+
"chalk": "^4.1.2",
5434
+
"emittery": "^0.13.1",
5435
+
"exit-x": "^0.2.2",
5436
+
"graceful-fs": "^4.2.11",
5437
+
"jest-docblock": "30.0.1",
5438
+
"jest-environment-node": "30.0.2",
5439
+
"jest-haste-map": "30.0.2",
5440
+
"jest-leak-detector": "30.0.2",
5441
+
"jest-message-util": "30.0.2",
5442
+
"jest-resolve": "30.0.2",
5443
+
"jest-runtime": "30.0.2",
5444
+
"jest-util": "30.0.2",
5445
+
"jest-watcher": "30.0.2",
5446
+
"jest-worker": "30.0.2",
5447
+
"p-limit": "^3.1.0",
5448
+
"source-map-support": "0.5.13"
5449
+
},
5450
+
"engines": {
5451
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5452
+
}
5453
+
},
5454
+
"node_modules/jest-runtime": {
5455
+
"version": "30.0.2",
5456
+
"resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.0.2.tgz",
5457
+
"integrity": "sha512-H1a51/soNOeAjoggu6PZKTH7DFt8JEGN4mesTSwyqD2jU9PXD04Bp6DKbt2YVtQvh2JcvH2vjbkEerCZ3lRn7A==",
5458
+
"dev": true,
5459
+
"license": "MIT",
5460
+
"dependencies": {
5461
+
"@jest/environment": "30.0.2",
5462
+
"@jest/fake-timers": "30.0.2",
5463
+
"@jest/globals": "30.0.2",
5464
+
"@jest/source-map": "30.0.1",
5465
+
"@jest/test-result": "30.0.2",
5466
+
"@jest/transform": "30.0.2",
5467
+
"@jest/types": "30.0.1",
5468
+
"@types/node": "*",
5469
+
"chalk": "^4.1.2",
5470
+
"cjs-module-lexer": "^2.1.0",
5471
+
"collect-v8-coverage": "^1.0.2",
5472
+
"glob": "^10.3.10",
5473
+
"graceful-fs": "^4.2.11",
5474
+
"jest-haste-map": "30.0.2",
5475
+
"jest-message-util": "30.0.2",
5476
+
"jest-mock": "30.0.2",
5477
+
"jest-regex-util": "30.0.1",
5478
+
"jest-resolve": "30.0.2",
5479
+
"jest-snapshot": "30.0.2",
5480
+
"jest-util": "30.0.2",
5481
+
"slash": "^3.0.0",
5482
+
"strip-bom": "^4.0.0"
5483
+
},
5484
+
"engines": {
5485
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5486
+
}
5487
+
},
5488
+
"node_modules/jest-snapshot": {
5489
+
"version": "30.0.2",
5490
+
"resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.0.2.tgz",
5491
+
"integrity": "sha512-KeoHikoKGln3OlN7NS7raJ244nIVr2K46fBTNdfuxqYv2/g4TVyWDSO4fmk08YBJQMjs3HNfG1rlLfL/KA+nUw==",
5492
+
"dev": true,
5493
+
"license": "MIT",
5494
+
"dependencies": {
5495
+
"@babel/core": "^7.27.4",
5496
+
"@babel/generator": "^7.27.5",
5497
+
"@babel/plugin-syntax-jsx": "^7.27.1",
5498
+
"@babel/plugin-syntax-typescript": "^7.27.1",
5499
+
"@babel/types": "^7.27.3",
5500
+
"@jest/expect-utils": "30.0.2",
5501
+
"@jest/get-type": "30.0.1",
5502
+
"@jest/snapshot-utils": "30.0.1",
5503
+
"@jest/transform": "30.0.2",
5504
+
"@jest/types": "30.0.1",
5505
+
"babel-preset-current-node-syntax": "^1.1.0",
5506
+
"chalk": "^4.1.2",
5507
+
"expect": "30.0.2",
5508
+
"graceful-fs": "^4.2.11",
5509
+
"jest-diff": "30.0.2",
5510
+
"jest-matcher-utils": "30.0.2",
5511
+
"jest-message-util": "30.0.2",
5512
+
"jest-util": "30.0.2",
5513
+
"pretty-format": "30.0.2",
5514
+
"semver": "^7.7.2",
5515
+
"synckit": "^0.11.8"
5516
+
},
5517
+
"engines": {
5518
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5519
+
}
5520
+
},
5521
+
"node_modules/jest-util": {
5522
+
"version": "30.0.2",
5523
+
"resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.2.tgz",
5524
+
"integrity": "sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==",
5525
+
"dev": true,
5526
+
"license": "MIT",
5527
+
"dependencies": {
5528
+
"@jest/types": "30.0.1",
5529
+
"@types/node": "*",
5530
+
"chalk": "^4.1.2",
5531
+
"ci-info": "^4.2.0",
5532
+
"graceful-fs": "^4.2.11",
5533
+
"picomatch": "^4.0.2"
5534
+
},
5535
+
"engines": {
5536
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5537
+
}
5538
+
},
5539
+
"node_modules/jest-util/node_modules/picomatch": {
5540
+
"version": "4.0.2",
5541
+
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
5542
+
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
5543
+
"dev": true,
5544
+
"license": "MIT",
5545
+
"engines": {
5546
+
"node": ">=12"
5547
+
},
5548
+
"funding": {
5549
+
"url": "https://github.com/sponsors/jonschlinkert"
5550
+
}
5551
+
},
5552
+
"node_modules/jest-validate": {
5553
+
"version": "30.0.2",
5554
+
"resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.0.2.tgz",
5555
+
"integrity": "sha512-noOvul+SFER4RIvNAwGn6nmV2fXqBq67j+hKGHKGFCmK4ks/Iy1FSrqQNBLGKlu4ZZIRL6Kg1U72N1nxuRCrGQ==",
5556
+
"dev": true,
5557
+
"license": "MIT",
5558
+
"dependencies": {
5559
+
"@jest/get-type": "30.0.1",
5560
+
"@jest/types": "30.0.1",
5561
+
"camelcase": "^6.3.0",
5562
+
"chalk": "^4.1.2",
5563
+
"leven": "^3.1.0",
5564
+
"pretty-format": "30.0.2"
5565
+
},
5566
+
"engines": {
5567
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5568
+
}
5569
+
},
5570
+
"node_modules/jest-validate/node_modules/camelcase": {
5571
+
"version": "6.3.0",
5572
+
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
5573
+
"integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
5574
+
"dev": true,
5575
+
"license": "MIT",
5576
+
"engines": {
5577
+
"node": ">=10"
5578
+
},
5579
+
"funding": {
5580
+
"url": "https://github.com/sponsors/sindresorhus"
5581
+
}
5582
+
},
5583
+
"node_modules/jest-watcher": {
5584
+
"version": "30.0.2",
5585
+
"resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.0.2.tgz",
5586
+
"integrity": "sha512-vYO5+E7jJuF+XmONr6CrbXdlYrgvZqtkn6pdkgjt/dU64UAdc0v1cAVaAeWtAfUUMScxNmnUjKPUMdCpNVASwg==",
5587
+
"dev": true,
5588
+
"license": "MIT",
5589
+
"dependencies": {
5590
+
"@jest/test-result": "30.0.2",
5591
+
"@jest/types": "30.0.1",
5592
+
"@types/node": "*",
5593
+
"ansi-escapes": "^4.3.2",
5594
+
"chalk": "^4.1.2",
5595
+
"emittery": "^0.13.1",
5596
+
"jest-util": "30.0.2",
5597
+
"string-length": "^4.0.2"
5598
+
},
5599
+
"engines": {
5600
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5601
+
}
5602
+
},
5603
+
"node_modules/jest-worker": {
5604
+
"version": "30.0.2",
5605
+
"resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.0.2.tgz",
5606
+
"integrity": "sha512-RN1eQmx7qSLFA+o9pfJKlqViwL5wt+OL3Vff/A+/cPsmuw7NPwfgl33AP+/agRmHzPOFgXviRycR9kYwlcRQXg==",
5607
+
"dev": true,
5608
+
"license": "MIT",
5609
+
"dependencies": {
5610
+
"@types/node": "*",
5611
+
"@ungap/structured-clone": "^1.3.0",
5612
+
"jest-util": "30.0.2",
5613
+
"merge-stream": "^2.0.0",
5614
+
"supports-color": "^8.1.1"
5615
+
},
5616
+
"engines": {
5617
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
5618
+
}
5619
+
},
5620
+
"node_modules/jest-worker/node_modules/supports-color": {
5621
+
"version": "8.1.1",
5622
+
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
5623
+
"integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
5624
+
"dev": true,
5625
+
"license": "MIT",
5626
+
"dependencies": {
5627
+
"has-flag": "^4.0.0"
5628
+
},
5629
+
"engines": {
5630
+
"node": ">=10"
5631
+
},
5632
+
"funding": {
5633
+
"url": "https://github.com/chalk/supports-color?sponsor=1"
5634
+
}
5635
+
},
5636
+
"node_modules/js-tokens": {
5637
+
"version": "4.0.0",
5638
+
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
5639
+
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
5640
+
"dev": true,
5641
+
"license": "MIT"
5642
+
},
5643
+
"node_modules/js-yaml": {
5644
+
"version": "3.14.1",
5645
+
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
5646
+
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
5647
+
"dev": true,
5648
+
"license": "MIT",
5649
+
"dependencies": {
5650
+
"argparse": "^1.0.7",
5651
+
"esprima": "^4.0.0"
5652
+
},
5653
+
"bin": {
5654
+
"js-yaml": "bin/js-yaml.js"
5655
+
}
5656
+
},
5657
+
"node_modules/jsesc": {
5658
+
"version": "3.1.0",
5659
+
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
5660
+
"integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
5661
+
"dev": true,
5662
+
"license": "MIT",
5663
+
"bin": {
5664
+
"jsesc": "bin/jsesc"
5665
+
},
5666
+
"engines": {
5667
+
"node": ">=6"
5668
+
}
5669
+
},
5670
+
"node_modules/json-parse-even-better-errors": {
5671
+
"version": "2.3.1",
5672
+
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
5673
+
"integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
5674
+
"dev": true,
5675
+
"license": "MIT"
5676
+
},
5677
+
"node_modules/json5": {
5678
+
"version": "2.2.3",
5679
+
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
5680
+
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
5681
+
"dev": true,
5682
+
"license": "MIT",
5683
+
"bin": {
5684
+
"json5": "lib/cli.js"
5685
+
},
5686
+
"engines": {
5687
+
"node": ">=6"
5688
+
}
5689
+
},
5690
+
"node_modules/leven": {
5691
+
"version": "3.1.0",
5692
+
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
5693
+
"integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
5694
+
"dev": true,
5695
+
"license": "MIT",
5696
+
"engines": {
5697
+
"node": ">=6"
5698
+
}
5699
+
},
5700
+
"node_modules/lines-and-columns": {
5701
+
"version": "1.2.4",
5702
+
"resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
5703
+
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
5704
+
"dev": true,
5705
+
"license": "MIT"
5706
+
},
5707
+
"node_modules/locate-path": {
5708
+
"version": "5.0.0",
5709
+
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
5710
+
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
5711
+
"dev": true,
5712
+
"license": "MIT",
5713
+
"dependencies": {
5714
+
"p-locate": "^4.1.0"
5715
+
},
5716
+
"engines": {
5717
+
"node": ">=8"
5718
+
}
5719
+
},
2437
5720
"node_modules/lodash": {
2438
5721
"version": "4.17.21",
2439
5722
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
···
2441
5724
"dev": true,
2442
5725
"license": "MIT"
2443
5726
},
5727
+
"node_modules/lodash.memoize": {
5728
+
"version": "4.1.2",
5729
+
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
5730
+
"integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
5731
+
"dev": true,
5732
+
"license": "MIT"
5733
+
},
5734
+
"node_modules/lru-cache": {
5735
+
"version": "5.1.1",
5736
+
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
5737
+
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
5738
+
"dev": true,
5739
+
"license": "ISC",
5740
+
"dependencies": {
5741
+
"yallist": "^3.0.2"
5742
+
}
5743
+
},
5744
+
"node_modules/make-dir": {
5745
+
"version": "4.0.0",
5746
+
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
5747
+
"integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
5748
+
"dev": true,
5749
+
"license": "MIT",
5750
+
"dependencies": {
5751
+
"semver": "^7.5.3"
5752
+
},
5753
+
"engines": {
5754
+
"node": ">=10"
5755
+
},
5756
+
"funding": {
5757
+
"url": "https://github.com/sponsors/sindresorhus"
5758
+
}
5759
+
},
5760
+
"node_modules/make-error": {
5761
+
"version": "1.3.6",
5762
+
"resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz",
5763
+
"integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==",
5764
+
"dev": true,
5765
+
"license": "ISC"
5766
+
},
5767
+
"node_modules/makeerror": {
5768
+
"version": "1.0.12",
5769
+
"resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz",
5770
+
"integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==",
5771
+
"dev": true,
5772
+
"license": "BSD-3-Clause",
5773
+
"dependencies": {
5774
+
"tmpl": "1.0.5"
5775
+
}
5776
+
},
2444
5777
"node_modules/math-intrinsics": {
2445
5778
"version": "1.1.0",
2446
5779
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
···
2471
5804
"url": "https://github.com/sponsors/sindresorhus"
2472
5805
}
2473
5806
},
5807
+
"node_modules/merge-stream": {
5808
+
"version": "2.0.0",
5809
+
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
5810
+
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
5811
+
"dev": true,
5812
+
"license": "MIT"
5813
+
},
2474
5814
"node_modules/methods": {
2475
5815
"version": "1.1.2",
2476
5816
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
···
2480
5820
"node": ">= 0.6"
2481
5821
}
2482
5822
},
5823
+
"node_modules/micromatch": {
5824
+
"version": "4.0.8",
5825
+
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
5826
+
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
5827
+
"dev": true,
5828
+
"license": "MIT",
5829
+
"dependencies": {
5830
+
"braces": "^3.0.3",
5831
+
"picomatch": "^2.3.1"
5832
+
},
5833
+
"engines": {
5834
+
"node": ">=8.6"
5835
+
}
5836
+
},
2483
5837
"node_modules/mime": {
2484
5838
"version": "1.6.0",
2485
5839
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
···
2513
5867
"node": ">= 0.6"
2514
5868
}
2515
5869
},
5870
+
"node_modules/mimic-fn": {
5871
+
"version": "2.1.0",
5872
+
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
5873
+
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
5874
+
"dev": true,
5875
+
"license": "MIT",
5876
+
"engines": {
5877
+
"node": ">=6"
5878
+
}
5879
+
},
2516
5880
"node_modules/mimic-response": {
2517
5881
"version": "3.1.0",
2518
5882
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
···
2546
5910
"url": "https://github.com/sponsors/ljharb"
2547
5911
}
2548
5912
},
5913
+
"node_modules/minipass": {
5914
+
"version": "7.1.2",
5915
+
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
5916
+
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
5917
+
"dev": true,
5918
+
"license": "ISC",
5919
+
"engines": {
5920
+
"node": ">=16 || 14 >=14.17"
5921
+
}
5922
+
},
2549
5923
"node_modules/mkdirp-classic": {
2550
5924
"version": "0.5.3",
2551
5925
"resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
···
2579
5953
"integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==",
2580
5954
"license": "MIT"
2581
5955
},
5956
+
"node_modules/napi-postinstall": {
5957
+
"version": "0.2.4",
5958
+
"resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.2.4.tgz",
5959
+
"integrity": "sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==",
5960
+
"dev": true,
5961
+
"license": "MIT",
5962
+
"bin": {
5963
+
"napi-postinstall": "lib/cli.js"
5964
+
},
5965
+
"engines": {
5966
+
"node": "^12.20.0 || ^14.18.0 || >=16.0.0"
5967
+
},
5968
+
"funding": {
5969
+
"url": "https://opencollective.com/napi-postinstall"
5970
+
}
5971
+
},
5972
+
"node_modules/natural-compare": {
5973
+
"version": "1.4.0",
5974
+
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
5975
+
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
5976
+
"dev": true,
5977
+
"license": "MIT"
5978
+
},
2582
5979
"node_modules/negotiator": {
2583
5980
"version": "1.0.0",
2584
5981
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz",
···
2615
6012
"node-gyp-build-optional-packages-test": "build-test.js"
2616
6013
}
2617
6014
},
6015
+
"node_modules/node-int64": {
6016
+
"version": "0.4.0",
6017
+
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
6018
+
"integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
6019
+
"dev": true,
6020
+
"license": "MIT"
6021
+
},
6022
+
"node_modules/node-releases": {
6023
+
"version": "2.0.19",
6024
+
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
6025
+
"integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
6026
+
"dev": true,
6027
+
"license": "MIT"
6028
+
},
6029
+
"node_modules/normalize-path": {
6030
+
"version": "3.0.0",
6031
+
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
6032
+
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
6033
+
"dev": true,
6034
+
"license": "MIT",
6035
+
"engines": {
6036
+
"node": ">=0.10.0"
6037
+
}
6038
+
},
6039
+
"node_modules/npm-run-path": {
6040
+
"version": "4.0.1",
6041
+
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
6042
+
"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
6043
+
"dev": true,
6044
+
"license": "MIT",
6045
+
"dependencies": {
6046
+
"path-key": "^3.0.0"
6047
+
},
6048
+
"engines": {
6049
+
"node": ">=8"
6050
+
}
6051
+
},
2618
6052
"node_modules/object-assign": {
2619
6053
"version": "4.1.1",
2620
6054
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
···
2675
6109
"wrappy": "1"
2676
6110
}
2677
6111
},
6112
+
"node_modules/onetime": {
6113
+
"version": "5.1.2",
6114
+
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
6115
+
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
6116
+
"dev": true,
6117
+
"license": "MIT",
6118
+
"dependencies": {
6119
+
"mimic-fn": "^2.1.0"
6120
+
},
6121
+
"engines": {
6122
+
"node": ">=6"
6123
+
},
6124
+
"funding": {
6125
+
"url": "https://github.com/sponsors/sindresorhus"
6126
+
}
6127
+
},
2678
6128
"node_modules/p-finally": {
2679
6129
"version": "1.0.0",
2680
6130
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
···
2684
6134
"node": ">=4"
2685
6135
}
2686
6136
},
6137
+
"node_modules/p-limit": {
6138
+
"version": "3.1.0",
6139
+
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
6140
+
"integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
6141
+
"dev": true,
6142
+
"license": "MIT",
6143
+
"dependencies": {
6144
+
"yocto-queue": "^0.1.0"
6145
+
},
6146
+
"engines": {
6147
+
"node": ">=10"
6148
+
},
6149
+
"funding": {
6150
+
"url": "https://github.com/sponsors/sindresorhus"
6151
+
}
6152
+
},
6153
+
"node_modules/p-limit/node_modules/yocto-queue": {
6154
+
"version": "0.1.0",
6155
+
"resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
6156
+
"integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
6157
+
"dev": true,
6158
+
"license": "MIT",
6159
+
"engines": {
6160
+
"node": ">=10"
6161
+
},
6162
+
"funding": {
6163
+
"url": "https://github.com/sponsors/sindresorhus"
6164
+
}
6165
+
},
6166
+
"node_modules/p-locate": {
6167
+
"version": "4.1.0",
6168
+
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
6169
+
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
6170
+
"dev": true,
6171
+
"license": "MIT",
6172
+
"dependencies": {
6173
+
"p-limit": "^2.2.0"
6174
+
},
6175
+
"engines": {
6176
+
"node": ">=8"
6177
+
}
6178
+
},
6179
+
"node_modules/p-locate/node_modules/p-limit": {
6180
+
"version": "2.3.0",
6181
+
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
6182
+
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
6183
+
"dev": true,
6184
+
"license": "MIT",
6185
+
"dependencies": {
6186
+
"p-try": "^2.0.0"
6187
+
},
6188
+
"engines": {
6189
+
"node": ">=6"
6190
+
},
6191
+
"funding": {
6192
+
"url": "https://github.com/sponsors/sindresorhus"
6193
+
}
6194
+
},
2687
6195
"node_modules/p-queue": {
2688
6196
"version": "6.6.2",
2689
6197
"resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz",
···
2712
6220
"node": ">=8"
2713
6221
}
2714
6222
},
6223
+
"node_modules/p-try": {
6224
+
"version": "2.2.0",
6225
+
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
6226
+
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
6227
+
"dev": true,
6228
+
"license": "MIT",
6229
+
"engines": {
6230
+
"node": ">=6"
6231
+
}
6232
+
},
6233
+
"node_modules/package-json-from-dist": {
6234
+
"version": "1.0.1",
6235
+
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
6236
+
"integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
6237
+
"dev": true,
6238
+
"license": "BlueOak-1.0.0"
6239
+
},
6240
+
"node_modules/parse-json": {
6241
+
"version": "5.2.0",
6242
+
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
6243
+
"integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
6244
+
"dev": true,
6245
+
"license": "MIT",
6246
+
"dependencies": {
6247
+
"@babel/code-frame": "^7.0.0",
6248
+
"error-ex": "^1.3.1",
6249
+
"json-parse-even-better-errors": "^2.3.0",
6250
+
"lines-and-columns": "^1.1.6"
6251
+
},
6252
+
"engines": {
6253
+
"node": ">=8"
6254
+
},
6255
+
"funding": {
6256
+
"url": "https://github.com/sponsors/sindresorhus"
6257
+
}
6258
+
},
2715
6259
"node_modules/parseurl": {
2716
6260
"version": "1.3.3",
2717
6261
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
···
2721
6265
"node": ">= 0.8"
2722
6266
}
2723
6267
},
6268
+
"node_modules/path-exists": {
6269
+
"version": "4.0.0",
6270
+
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
6271
+
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
6272
+
"dev": true,
6273
+
"license": "MIT",
6274
+
"engines": {
6275
+
"node": ">=8"
6276
+
}
6277
+
},
6278
+
"node_modules/path-is-absolute": {
6279
+
"version": "1.0.1",
6280
+
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
6281
+
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
6282
+
"dev": true,
6283
+
"license": "MIT",
6284
+
"engines": {
6285
+
"node": ">=0.10.0"
6286
+
}
6287
+
},
6288
+
"node_modules/path-key": {
6289
+
"version": "3.1.1",
6290
+
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
6291
+
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
6292
+
"dev": true,
6293
+
"license": "MIT",
6294
+
"engines": {
6295
+
"node": ">=8"
6296
+
}
6297
+
},
6298
+
"node_modules/path-scurry": {
6299
+
"version": "1.11.1",
6300
+
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
6301
+
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
6302
+
"dev": true,
6303
+
"license": "BlueOak-1.0.0",
6304
+
"dependencies": {
6305
+
"lru-cache": "^10.2.0",
6306
+
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
6307
+
},
6308
+
"engines": {
6309
+
"node": ">=16 || 14 >=14.18"
6310
+
},
6311
+
"funding": {
6312
+
"url": "https://github.com/sponsors/isaacs"
6313
+
}
6314
+
},
6315
+
"node_modules/path-scurry/node_modules/lru-cache": {
6316
+
"version": "10.4.3",
6317
+
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
6318
+
"integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
6319
+
"dev": true,
6320
+
"license": "ISC"
6321
+
},
2724
6322
"node_modules/path-to-regexp": {
2725
6323
"version": "8.2.0",
2726
6324
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz",
···
2728
6326
"license": "MIT",
2729
6327
"engines": {
2730
6328
"node": ">=16"
6329
+
}
6330
+
},
6331
+
"node_modules/picocolors": {
6332
+
"version": "1.1.1",
6333
+
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
6334
+
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
6335
+
"dev": true,
6336
+
"license": "ISC"
6337
+
},
6338
+
"node_modules/picomatch": {
6339
+
"version": "2.3.1",
6340
+
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
6341
+
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
6342
+
"dev": true,
6343
+
"license": "MIT",
6344
+
"engines": {
6345
+
"node": ">=8.6"
6346
+
},
6347
+
"funding": {
6348
+
"url": "https://github.com/sponsors/jonschlinkert"
2731
6349
}
2732
6350
},
2733
6351
"node_modules/pino": {
···
2808
6426
"integrity": "sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==",
2809
6427
"license": "MIT"
2810
6428
},
6429
+
"node_modules/pirates": {
6430
+
"version": "4.0.7",
6431
+
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
6432
+
"integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
6433
+
"dev": true,
6434
+
"license": "MIT",
6435
+
"engines": {
6436
+
"node": ">= 6"
6437
+
}
6438
+
},
6439
+
"node_modules/pkg-dir": {
6440
+
"version": "4.2.0",
6441
+
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
6442
+
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
6443
+
"dev": true,
6444
+
"license": "MIT",
6445
+
"dependencies": {
6446
+
"find-up": "^4.0.0"
6447
+
},
6448
+
"engines": {
6449
+
"node": ">=8"
6450
+
}
6451
+
},
2811
6452
"node_modules/prebuild-install": {
2812
6453
"version": "7.1.3",
2813
6454
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz",
···
2834
6475
"node": ">=10"
2835
6476
}
2836
6477
},
6478
+
"node_modules/pretty-format": {
6479
+
"version": "30.0.2",
6480
+
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.2.tgz",
6481
+
"integrity": "sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==",
6482
+
"dev": true,
6483
+
"license": "MIT",
6484
+
"dependencies": {
6485
+
"@jest/schemas": "30.0.1",
6486
+
"ansi-styles": "^5.2.0",
6487
+
"react-is": "^18.3.1"
6488
+
},
6489
+
"engines": {
6490
+
"node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0"
6491
+
}
6492
+
},
6493
+
"node_modules/pretty-format/node_modules/ansi-styles": {
6494
+
"version": "5.2.0",
6495
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
6496
+
"integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
6497
+
"dev": true,
6498
+
"license": "MIT",
6499
+
"engines": {
6500
+
"node": ">=10"
6501
+
},
6502
+
"funding": {
6503
+
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
6504
+
}
6505
+
},
2837
6506
"node_modules/process": {
2838
6507
"version": "0.11.10",
2839
6508
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
···
2872
6541
"once": "^1.3.1"
2873
6542
}
2874
6543
},
6544
+
"node_modules/pure-rand": {
6545
+
"version": "7.0.1",
6546
+
"resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-7.0.1.tgz",
6547
+
"integrity": "sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==",
6548
+
"dev": true,
6549
+
"funding": [
6550
+
{
6551
+
"type": "individual",
6552
+
"url": "https://github.com/sponsors/dubzzz"
6553
+
},
6554
+
{
6555
+
"type": "opencollective",
6556
+
"url": "https://opencollective.com/fast-check"
6557
+
}
6558
+
],
6559
+
"license": "MIT"
6560
+
},
2875
6561
"node_modules/qs": {
2876
6562
"version": "6.14.0",
2877
6563
"resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz",
···
2947
6633
"rc": "cli.js"
2948
6634
}
2949
6635
},
6636
+
"node_modules/react-is": {
6637
+
"version": "18.3.1",
6638
+
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
6639
+
"integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
6640
+
"dev": true,
6641
+
"license": "MIT"
6642
+
},
2950
6643
"node_modules/readable-stream": {
2951
6644
"version": "3.6.2",
2952
6645
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
···
2980
6673
"node": ">=0.10.0"
2981
6674
}
2982
6675
},
6676
+
"node_modules/resolve-cwd": {
6677
+
"version": "3.0.0",
6678
+
"resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
6679
+
"integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
6680
+
"dev": true,
6681
+
"license": "MIT",
6682
+
"dependencies": {
6683
+
"resolve-from": "^5.0.0"
6684
+
},
6685
+
"engines": {
6686
+
"node": ">=8"
6687
+
}
6688
+
},
6689
+
"node_modules/resolve-from": {
6690
+
"version": "5.0.0",
6691
+
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
6692
+
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
6693
+
"dev": true,
6694
+
"license": "MIT",
6695
+
"engines": {
6696
+
"node": ">=8"
6697
+
}
6698
+
},
2983
6699
"node_modules/resolve-pkg-maps": {
2984
6700
"version": "1.0.0",
2985
6701
"resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
···
3105
6821
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
3106
6822
"license": "ISC"
3107
6823
},
6824
+
"node_modules/shebang-command": {
6825
+
"version": "2.0.0",
6826
+
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
6827
+
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
6828
+
"dev": true,
6829
+
"license": "MIT",
6830
+
"dependencies": {
6831
+
"shebang-regex": "^3.0.0"
6832
+
},
6833
+
"engines": {
6834
+
"node": ">=8"
6835
+
}
6836
+
},
6837
+
"node_modules/shebang-regex": {
6838
+
"version": "3.0.0",
6839
+
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
6840
+
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
6841
+
"dev": true,
6842
+
"license": "MIT",
6843
+
"engines": {
6844
+
"node": ">=8"
6845
+
}
6846
+
},
3108
6847
"node_modules/shell-quote": {
3109
6848
"version": "1.8.3",
3110
6849
"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
···
3190
6929
"url": "https://github.com/sponsors/ljharb"
3191
6930
}
3192
6931
},
6932
+
"node_modules/signal-exit": {
6933
+
"version": "4.1.0",
6934
+
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
6935
+
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
6936
+
"dev": true,
6937
+
"license": "ISC",
6938
+
"engines": {
6939
+
"node": ">=14"
6940
+
},
6941
+
"funding": {
6942
+
"url": "https://github.com/sponsors/isaacs"
6943
+
}
6944
+
},
3193
6945
"node_modules/simple-concat": {
3194
6946
"version": "1.0.1",
3195
6947
"resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
···
3233
6985
"decompress-response": "^6.0.0",
3234
6986
"once": "^1.3.1",
3235
6987
"simple-concat": "^1.0.0"
6988
+
}
6989
+
},
6990
+
"node_modules/slash": {
6991
+
"version": "3.0.0",
6992
+
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
6993
+
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
6994
+
"dev": true,
6995
+
"license": "MIT",
6996
+
"engines": {
6997
+
"node": ">=8"
3236
6998
}
3237
6999
},
3238
7000
"node_modules/sonic-boom": {
···
3244
7006
"atomic-sleep": "^1.0.0"
3245
7007
}
3246
7008
},
7009
+
"node_modules/source-map": {
7010
+
"version": "0.6.1",
7011
+
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
7012
+
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
7013
+
"dev": true,
7014
+
"license": "BSD-3-Clause",
7015
+
"engines": {
7016
+
"node": ">=0.10.0"
7017
+
}
7018
+
},
7019
+
"node_modules/source-map-support": {
7020
+
"version": "0.5.13",
7021
+
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz",
7022
+
"integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==",
7023
+
"dev": true,
7024
+
"license": "MIT",
7025
+
"dependencies": {
7026
+
"buffer-from": "^1.0.0",
7027
+
"source-map": "^0.6.0"
7028
+
}
7029
+
},
3247
7030
"node_modules/split2": {
3248
7031
"version": "4.2.0",
3249
7032
"resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
···
3253
7036
"node": ">= 10.x"
3254
7037
}
3255
7038
},
7039
+
"node_modules/sprintf-js": {
7040
+
"version": "1.0.3",
7041
+
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
7042
+
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
7043
+
"dev": true,
7044
+
"license": "BSD-3-Clause"
7045
+
},
7046
+
"node_modules/stack-utils": {
7047
+
"version": "2.0.6",
7048
+
"resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz",
7049
+
"integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==",
7050
+
"dev": true,
7051
+
"license": "MIT",
7052
+
"dependencies": {
7053
+
"escape-string-regexp": "^2.0.0"
7054
+
},
7055
+
"engines": {
7056
+
"node": ">=10"
7057
+
}
7058
+
},
3256
7059
"node_modules/statuses": {
3257
7060
"version": "2.0.2",
3258
7061
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
···
3271
7074
"safe-buffer": "~5.2.0"
3272
7075
}
3273
7076
},
7077
+
"node_modules/string-length": {
7078
+
"version": "4.0.2",
7079
+
"resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz",
7080
+
"integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==",
7081
+
"dev": true,
7082
+
"license": "MIT",
7083
+
"dependencies": {
7084
+
"char-regex": "^1.0.2",
7085
+
"strip-ansi": "^6.0.0"
7086
+
},
7087
+
"engines": {
7088
+
"node": ">=10"
7089
+
}
7090
+
},
3274
7091
"node_modules/string-width": {
3275
7092
"version": "4.2.3",
3276
7093
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
···
3286
7103
"node": ">=8"
3287
7104
}
3288
7105
},
7106
+
"node_modules/string-width-cjs": {
7107
+
"name": "string-width",
7108
+
"version": "4.2.3",
7109
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
7110
+
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
7111
+
"dev": true,
7112
+
"license": "MIT",
7113
+
"dependencies": {
7114
+
"emoji-regex": "^8.0.0",
7115
+
"is-fullwidth-code-point": "^3.0.0",
7116
+
"strip-ansi": "^6.0.1"
7117
+
},
7118
+
"engines": {
7119
+
"node": ">=8"
7120
+
}
7121
+
},
3289
7122
"node_modules/strip-ansi": {
3290
7123
"version": "6.0.1",
3291
7124
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
···
3299
7132
"node": ">=8"
3300
7133
}
3301
7134
},
7135
+
"node_modules/strip-ansi-cjs": {
7136
+
"name": "strip-ansi",
7137
+
"version": "6.0.1",
7138
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
7139
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
7140
+
"dev": true,
7141
+
"license": "MIT",
7142
+
"dependencies": {
7143
+
"ansi-regex": "^5.0.1"
7144
+
},
7145
+
"engines": {
7146
+
"node": ">=8"
7147
+
}
7148
+
},
7149
+
"node_modules/strip-bom": {
7150
+
"version": "4.0.0",
7151
+
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
7152
+
"integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
7153
+
"dev": true,
7154
+
"license": "MIT",
7155
+
"engines": {
7156
+
"node": ">=8"
7157
+
}
7158
+
},
7159
+
"node_modules/strip-final-newline": {
7160
+
"version": "2.0.0",
7161
+
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
7162
+
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
7163
+
"dev": true,
7164
+
"license": "MIT",
7165
+
"engines": {
7166
+
"node": ">=6"
7167
+
}
7168
+
},
3302
7169
"node_modules/strip-json-comments": {
3303
7170
"version": "2.0.1",
3304
7171
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
···
3308
7175
"node": ">=0.10.0"
3309
7176
}
3310
7177
},
7178
+
"node_modules/superagent": {
7179
+
"version": "10.2.1",
7180
+
"resolved": "https://registry.npmjs.org/superagent/-/superagent-10.2.1.tgz",
7181
+
"integrity": "sha512-O+PCv11lgTNJUzy49teNAWLjBZfc+A1enOwTpLlH6/rsvKcTwcdTT8m9azGkVqM7HBl5jpyZ7KTPhHweokBcdg==",
7182
+
"dev": true,
7183
+
"license": "MIT",
7184
+
"dependencies": {
7185
+
"component-emitter": "^1.3.0",
7186
+
"cookiejar": "^2.1.4",
7187
+
"debug": "^4.3.4",
7188
+
"fast-safe-stringify": "^2.1.1",
7189
+
"form-data": "^4.0.0",
7190
+
"formidable": "^3.5.4",
7191
+
"methods": "^1.1.2",
7192
+
"mime": "2.6.0",
7193
+
"qs": "^6.11.0"
7194
+
},
7195
+
"engines": {
7196
+
"node": ">=14.18.0"
7197
+
}
7198
+
},
7199
+
"node_modules/superagent/node_modules/mime": {
7200
+
"version": "2.6.0",
7201
+
"resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
7202
+
"integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
7203
+
"dev": true,
7204
+
"license": "MIT",
7205
+
"bin": {
7206
+
"mime": "cli.js"
7207
+
},
7208
+
"engines": {
7209
+
"node": ">=4.0.0"
7210
+
}
7211
+
},
7212
+
"node_modules/supertest": {
7213
+
"version": "7.1.1",
7214
+
"resolved": "https://registry.npmjs.org/supertest/-/supertest-7.1.1.tgz",
7215
+
"integrity": "sha512-aI59HBTlG9e2wTjxGJV+DygfNLgnWbGdZxiA/sgrnNNikIW8lbDvCtF6RnhZoJ82nU7qv7ZLjrvWqCEm52fAmw==",
7216
+
"dev": true,
7217
+
"license": "MIT",
7218
+
"dependencies": {
7219
+
"methods": "^1.1.2",
7220
+
"superagent": "^10.2.1"
7221
+
},
7222
+
"engines": {
7223
+
"node": ">=14.18.0"
7224
+
}
7225
+
},
3311
7226
"node_modules/supports-color": {
3312
7227
"version": "7.2.0",
3313
7228
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
···
3320
7235
"node": ">=8"
3321
7236
}
3322
7237
},
7238
+
"node_modules/synckit": {
7239
+
"version": "0.11.8",
7240
+
"resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.8.tgz",
7241
+
"integrity": "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==",
7242
+
"dev": true,
7243
+
"license": "MIT",
7244
+
"dependencies": {
7245
+
"@pkgr/core": "^0.2.4"
7246
+
},
7247
+
"engines": {
7248
+
"node": "^14.18.0 || >=16.0.0"
7249
+
},
7250
+
"funding": {
7251
+
"url": "https://opencollective.com/synckit"
7252
+
}
7253
+
},
3323
7254
"node_modules/tar-fs": {
3324
7255
"version": "2.1.3",
3325
7256
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz",
···
3348
7279
"node": ">=6"
3349
7280
}
3350
7281
},
7282
+
"node_modules/test-exclude": {
7283
+
"version": "6.0.0",
7284
+
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
7285
+
"integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
7286
+
"dev": true,
7287
+
"license": "ISC",
7288
+
"dependencies": {
7289
+
"@istanbuljs/schema": "^0.1.2",
7290
+
"glob": "^7.1.4",
7291
+
"minimatch": "^3.0.4"
7292
+
},
7293
+
"engines": {
7294
+
"node": ">=8"
7295
+
}
7296
+
},
7297
+
"node_modules/test-exclude/node_modules/glob": {
7298
+
"version": "7.2.3",
7299
+
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
7300
+
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
7301
+
"deprecated": "Glob versions prior to v9 are no longer supported",
7302
+
"dev": true,
7303
+
"license": "ISC",
7304
+
"dependencies": {
7305
+
"fs.realpath": "^1.0.0",
7306
+
"inflight": "^1.0.4",
7307
+
"inherits": "2",
7308
+
"minimatch": "^3.1.1",
7309
+
"once": "^1.3.0",
7310
+
"path-is-absolute": "^1.0.0"
7311
+
},
7312
+
"engines": {
7313
+
"node": "*"
7314
+
},
7315
+
"funding": {
7316
+
"url": "https://github.com/sponsors/isaacs"
7317
+
}
7318
+
},
3351
7319
"node_modules/thread-stream": {
3352
7320
"version": "2.7.0",
3353
7321
"resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-2.7.0.tgz",
···
3366
7334
"tlds": "bin.js"
3367
7335
}
3368
7336
},
7337
+
"node_modules/tmpl": {
7338
+
"version": "1.0.5",
7339
+
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz",
7340
+
"integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
7341
+
"dev": true,
7342
+
"license": "BSD-3-Clause"
7343
+
},
7344
+
"node_modules/to-regex-range": {
7345
+
"version": "5.0.1",
7346
+
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
7347
+
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
7348
+
"dev": true,
7349
+
"license": "MIT",
7350
+
"dependencies": {
7351
+
"is-number": "^7.0.0"
7352
+
},
7353
+
"engines": {
7354
+
"node": ">=8.0"
7355
+
}
7356
+
},
3369
7357
"node_modules/toidentifier": {
3370
7358
"version": "1.0.1",
3371
7359
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
···
3385
7373
"tree-kill": "cli.js"
3386
7374
}
3387
7375
},
7376
+
"node_modules/ts-jest": {
7377
+
"version": "29.4.0",
7378
+
"resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.0.tgz",
7379
+
"integrity": "sha512-d423TJMnJGu80/eSgfQ5w/R+0zFJvdtTxwtF9KzFFunOpSeD+79lHJQIiAhluJoyGRbvj9NZJsl9WjCUo0ND7Q==",
7380
+
"dev": true,
7381
+
"license": "MIT",
7382
+
"dependencies": {
7383
+
"bs-logger": "^0.2.6",
7384
+
"ejs": "^3.1.10",
7385
+
"fast-json-stable-stringify": "^2.1.0",
7386
+
"json5": "^2.2.3",
7387
+
"lodash.memoize": "^4.1.2",
7388
+
"make-error": "^1.3.6",
7389
+
"semver": "^7.7.2",
7390
+
"type-fest": "^4.41.0",
7391
+
"yargs-parser": "^21.1.1"
7392
+
},
7393
+
"bin": {
7394
+
"ts-jest": "cli.js"
7395
+
},
7396
+
"engines": {
7397
+
"node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0"
7398
+
},
7399
+
"peerDependencies": {
7400
+
"@babel/core": ">=7.0.0-beta.0 <8",
7401
+
"@jest/transform": "^29.0.0 || ^30.0.0",
7402
+
"@jest/types": "^29.0.0 || ^30.0.0",
7403
+
"babel-jest": "^29.0.0 || ^30.0.0",
7404
+
"jest": "^29.0.0 || ^30.0.0",
7405
+
"jest-util": "^29.0.0 || ^30.0.0",
7406
+
"typescript": ">=4.3 <6"
7407
+
},
7408
+
"peerDependenciesMeta": {
7409
+
"@babel/core": {
7410
+
"optional": true
7411
+
},
7412
+
"@jest/transform": {
7413
+
"optional": true
7414
+
},
7415
+
"@jest/types": {
7416
+
"optional": true
7417
+
},
7418
+
"babel-jest": {
7419
+
"optional": true
7420
+
},
7421
+
"esbuild": {
7422
+
"optional": true
7423
+
},
7424
+
"jest-util": {
7425
+
"optional": true
7426
+
}
7427
+
}
7428
+
},
7429
+
"node_modules/ts-jest/node_modules/type-fest": {
7430
+
"version": "4.41.0",
7431
+
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
7432
+
"integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
7433
+
"dev": true,
7434
+
"license": "(MIT OR CC0-1.0)",
7435
+
"engines": {
7436
+
"node": ">=16"
7437
+
},
7438
+
"funding": {
7439
+
"url": "https://github.com/sponsors/sindresorhus"
7440
+
}
7441
+
},
3388
7442
"node_modules/tslib": {
3389
7443
"version": "2.8.1",
3390
7444
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
···
3423
7477
"node": "*"
3424
7478
}
3425
7479
},
7480
+
"node_modules/type-detect": {
7481
+
"version": "4.0.8",
7482
+
"resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
7483
+
"integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
7484
+
"dev": true,
7485
+
"license": "MIT",
7486
+
"engines": {
7487
+
"node": ">=4"
7488
+
}
7489
+
},
7490
+
"node_modules/type-fest": {
7491
+
"version": "0.21.3",
7492
+
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
7493
+
"integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
7494
+
"dev": true,
7495
+
"license": "(MIT OR CC0-1.0)",
7496
+
"engines": {
7497
+
"node": ">=10"
7498
+
},
7499
+
"funding": {
7500
+
"url": "https://github.com/sponsors/sindresorhus"
7501
+
}
7502
+
},
3426
7503
"node_modules/type-is": {
3427
7504
"version": "2.0.1",
3428
7505
"resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz",
···
3492
7569
"node": ">= 0.8"
3493
7570
}
3494
7571
},
7572
+
"node_modules/unrs-resolver": {
7573
+
"version": "1.9.0",
7574
+
"resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.9.0.tgz",
7575
+
"integrity": "sha512-wqaRu4UnzBD2ABTC1kLfBjAqIDZ5YUTr/MLGa7By47JV1bJDSW7jq/ZSLigB7enLe7ubNaJhtnBXgrc/50cEhg==",
7576
+
"dev": true,
7577
+
"hasInstallScript": true,
7578
+
"license": "MIT",
7579
+
"dependencies": {
7580
+
"napi-postinstall": "^0.2.2"
7581
+
},
7582
+
"funding": {
7583
+
"url": "https://opencollective.com/unrs-resolver"
7584
+
},
7585
+
"optionalDependencies": {
7586
+
"@unrs/resolver-binding-android-arm-eabi": "1.9.0",
7587
+
"@unrs/resolver-binding-android-arm64": "1.9.0",
7588
+
"@unrs/resolver-binding-darwin-arm64": "1.9.0",
7589
+
"@unrs/resolver-binding-darwin-x64": "1.9.0",
7590
+
"@unrs/resolver-binding-freebsd-x64": "1.9.0",
7591
+
"@unrs/resolver-binding-linux-arm-gnueabihf": "1.9.0",
7592
+
"@unrs/resolver-binding-linux-arm-musleabihf": "1.9.0",
7593
+
"@unrs/resolver-binding-linux-arm64-gnu": "1.9.0",
7594
+
"@unrs/resolver-binding-linux-arm64-musl": "1.9.0",
7595
+
"@unrs/resolver-binding-linux-ppc64-gnu": "1.9.0",
7596
+
"@unrs/resolver-binding-linux-riscv64-gnu": "1.9.0",
7597
+
"@unrs/resolver-binding-linux-riscv64-musl": "1.9.0",
7598
+
"@unrs/resolver-binding-linux-s390x-gnu": "1.9.0",
7599
+
"@unrs/resolver-binding-linux-x64-gnu": "1.9.0",
7600
+
"@unrs/resolver-binding-linux-x64-musl": "1.9.0",
7601
+
"@unrs/resolver-binding-wasm32-wasi": "1.9.0",
7602
+
"@unrs/resolver-binding-win32-arm64-msvc": "1.9.0",
7603
+
"@unrs/resolver-binding-win32-ia32-msvc": "1.9.0",
7604
+
"@unrs/resolver-binding-win32-x64-msvc": "1.9.0"
7605
+
}
7606
+
},
7607
+
"node_modules/update-browserslist-db": {
7608
+
"version": "1.1.3",
7609
+
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz",
7610
+
"integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==",
7611
+
"dev": true,
7612
+
"funding": [
7613
+
{
7614
+
"type": "opencollective",
7615
+
"url": "https://opencollective.com/browserslist"
7616
+
},
7617
+
{
7618
+
"type": "tidelift",
7619
+
"url": "https://tidelift.com/funding/github/npm/browserslist"
7620
+
},
7621
+
{
7622
+
"type": "github",
7623
+
"url": "https://github.com/sponsors/ai"
7624
+
}
7625
+
],
7626
+
"license": "MIT",
7627
+
"dependencies": {
7628
+
"escalade": "^3.2.0",
7629
+
"picocolors": "^1.1.1"
7630
+
},
7631
+
"bin": {
7632
+
"update-browserslist-db": "cli.js"
7633
+
},
7634
+
"peerDependencies": {
7635
+
"browserslist": ">= 4.21.0"
7636
+
}
7637
+
},
3495
7638
"node_modules/util-deprecate": {
3496
7639
"version": "1.0.2",
3497
7640
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
···
3505
7648
"license": "MIT",
3506
7649
"engines": {
3507
7650
"node": ">= 0.4.0"
7651
+
}
7652
+
},
7653
+
"node_modules/v8-to-istanbul": {
7654
+
"version": "9.3.0",
7655
+
"resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz",
7656
+
"integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==",
7657
+
"dev": true,
7658
+
"license": "ISC",
7659
+
"dependencies": {
7660
+
"@jridgewell/trace-mapping": "^0.3.12",
7661
+
"@types/istanbul-lib-coverage": "^2.0.1",
7662
+
"convert-source-map": "^2.0.0"
7663
+
},
7664
+
"engines": {
7665
+
"node": ">=10.12.0"
3508
7666
}
3509
7667
},
3510
7668
"node_modules/varint": {
···
3522
7680
"node": ">= 0.8"
3523
7681
}
3524
7682
},
7683
+
"node_modules/walker": {
7684
+
"version": "1.0.8",
7685
+
"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
7686
+
"integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==",
7687
+
"dev": true,
7688
+
"license": "Apache-2.0",
7689
+
"dependencies": {
7690
+
"makeerror": "1.0.12"
7691
+
}
7692
+
},
7693
+
"node_modules/which": {
7694
+
"version": "2.0.2",
7695
+
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
7696
+
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
7697
+
"dev": true,
7698
+
"license": "ISC",
7699
+
"dependencies": {
7700
+
"isexe": "^2.0.0"
7701
+
},
7702
+
"bin": {
7703
+
"node-which": "bin/node-which"
7704
+
},
7705
+
"engines": {
7706
+
"node": ">= 8"
7707
+
}
7708
+
},
3525
7709
"node_modules/wrap-ansi": {
3526
7710
"version": "7.0.0",
3527
7711
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
···
3540
7724
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
3541
7725
}
3542
7726
},
7727
+
"node_modules/wrap-ansi-cjs": {
7728
+
"name": "wrap-ansi",
7729
+
"version": "7.0.0",
7730
+
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
7731
+
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
7732
+
"dev": true,
7733
+
"license": "MIT",
7734
+
"dependencies": {
7735
+
"ansi-styles": "^4.0.0",
7736
+
"string-width": "^4.1.0",
7737
+
"strip-ansi": "^6.0.0"
7738
+
},
7739
+
"engines": {
7740
+
"node": ">=10"
7741
+
},
7742
+
"funding": {
7743
+
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
7744
+
}
7745
+
},
3543
7746
"node_modules/wrappy": {
3544
7747
"version": "1.0.2",
3545
7748
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
3546
7749
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
3547
7750
"license": "ISC"
3548
7751
},
7752
+
"node_modules/write-file-atomic": {
7753
+
"version": "5.0.1",
7754
+
"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
7755
+
"integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
7756
+
"dev": true,
7757
+
"license": "ISC",
7758
+
"dependencies": {
7759
+
"imurmurhash": "^0.1.4",
7760
+
"signal-exit": "^4.0.1"
7761
+
},
7762
+
"engines": {
7763
+
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
7764
+
}
7765
+
},
3549
7766
"node_modules/ws": {
3550
7767
"version": "8.18.2",
3551
7768
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.2.tgz",
···
3576
7793
"engines": {
3577
7794
"node": ">=10"
3578
7795
}
7796
+
},
7797
+
"node_modules/yallist": {
7798
+
"version": "3.1.1",
7799
+
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
7800
+
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
7801
+
"dev": true,
7802
+
"license": "ISC"
3579
7803
},
3580
7804
"node_modules/yargs": {
3581
7805
"version": "17.7.2",
+9
-2
package.json
+9
-2
package.json
···
9
9
"seed-vibes": "tsx src/seed-vibes.ts",
10
10
"build": "tsc",
11
11
"start": "node dist/index.js",
12
-
"test": "echo \"Error: no test specified\" && exit 1"
12
+
"test": "jest",
13
+
"test:watch": "jest --watch",
14
+
"test:coverage": "jest --coverage"
13
15
},
14
16
"keywords": [],
15
17
"author": "",
···
42
44
"ws": "^8.18.2"
43
45
},
44
46
"devDependencies": {
45
-
"concurrently": "^9.1.2"
47
+
"@types/jest": "^30.0.0",
48
+
"@types/supertest": "^6.0.3",
49
+
"concurrently": "^9.1.2",
50
+
"jest": "^30.0.2",
51
+
"supertest": "^7.1.1",
52
+
"ts-jest": "^29.4.0"
46
53
}
47
54
}
+1
-1
src/blips.ts
+1
-1
src/blips.ts
+35
-8
src/database.js
+35
-8
src/database.js
···
7
7
const better_sqlite3_1 = __importDefault(require("better-sqlite3"));
8
8
const path_1 = __importDefault(require("path"));
9
9
const db = new better_sqlite3_1.default(path_1.default.join(__dirname, '../blonk.db'));
10
+
// Drop old fluffs index if it exists
11
+
db.exec(`DROP INDEX IF EXISTS idx_blips_fluffs;`);
10
12
// Initialize database schema
11
13
db.exec(`
12
14
CREATE TABLE IF NOT EXISTS blips (
···
21
23
tags TEXT,
22
24
vibe_uri TEXT,
23
25
vibe_name TEXT,
24
-
fluffs INTEGER DEFAULT 0,
26
+
grooves INTEGER DEFAULT 0,
25
27
created_at TEXT NOT NULL,
26
28
indexed_at TEXT DEFAULT CURRENT_TIMESTAMP
27
29
);
28
30
29
31
CREATE INDEX IF NOT EXISTS idx_blips_created_at ON blips(created_at DESC);
30
32
CREATE INDEX IF NOT EXISTS idx_blips_author ON blips(author_did);
31
-
CREATE INDEX IF NOT EXISTS idx_blips_fluffs ON blips(fluffs DESC);
33
+
CREATE INDEX IF NOT EXISTS idx_blips_grooves ON blips(grooves DESC);
32
34
CREATE INDEX IF NOT EXISTS idx_blips_vibe ON blips(vibe_uri);
33
35
34
36
CREATE TABLE IF NOT EXISTS vibes (
···
64
66
65
67
CREATE INDEX IF NOT EXISTS idx_vibe_mentions_name ON vibe_mentions(vibe_name);
66
68
CREATE UNIQUE INDEX IF NOT EXISTS idx_vibes_unique_name ON vibes(LOWER(name));
69
+
70
+
CREATE TABLE IF NOT EXISTS grooves (
71
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
72
+
blip_uri TEXT NOT NULL,
73
+
user_did TEXT NOT NULL,
74
+
groove_type TEXT NOT NULL CHECK (groove_type IN ('looks_good', 'shit_rips')),
75
+
created_at TEXT NOT NULL,
76
+
UNIQUE(blip_uri, user_did)
77
+
);
78
+
79
+
CREATE INDEX IF NOT EXISTS idx_grooves_blip ON grooves(blip_uri);
80
+
CREATE INDEX IF NOT EXISTS idx_grooves_user ON grooves(user_did);
67
81
`);
68
82
exports.blipDb = {
69
83
insertBlip: (blip) => {
70
84
const stmt = db.prepare(`
71
85
INSERT OR REPLACE INTO blips
72
-
(uri, cid, author_did, author_handle, author_display_name, title, body, url, tags, vibe_uri, vibe_name, fluffs, created_at)
86
+
(uri, cid, author_did, author_handle, author_display_name, title, body, url, tags, vibe_uri, vibe_name, grooves, created_at)
73
87
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
74
88
`);
75
-
stmt.run(blip.uri, blip.cid, blip.authorDid, blip.authorHandle, blip.authorDisplayName, blip.title, blip.body, blip.url, JSON.stringify(blip.tags || []), blip.vibeUri, blip.vibeName, blip.fluffs, blip.createdAt);
89
+
stmt.run(blip.uri, blip.cid, blip.authorDid, blip.authorHandle, blip.authorDisplayName, blip.title, blip.body, blip.url, JSON.stringify(blip.tags || []), blip.vibeUri, blip.vibeName, blip.grooves, blip.createdAt);
76
90
},
77
91
getBlips: (limit = 50, offset = 0) => {
78
92
const stmt = db.prepare(`
···
93
107
tags: JSON.parse(row.tags || '[]'),
94
108
vibeUri: row.vibe_uri,
95
109
vibeName: row.vibe_name,
96
-
fluffs: row.fluffs,
110
+
grooves: row.grooves,
97
111
createdAt: row.created_at,
98
112
indexedAt: row.indexed_at,
99
113
}));
···
118
132
tags: JSON.parse(row.tags || '[]'),
119
133
vibeUri: row.vibe_uri,
120
134
vibeName: row.vibe_name,
121
-
fluffs: row.fluffs,
135
+
grooves: row.grooves,
122
136
createdAt: row.created_at,
123
137
indexedAt: row.indexed_at,
124
138
}));
···
143
157
tags: JSON.parse(row.tags || '[]'),
144
158
vibeUri: row.vibe_uri,
145
159
vibeName: row.vibe_name,
146
-
fluffs: row.fluffs,
160
+
grooves: row.grooves,
147
161
createdAt: row.created_at,
148
162
indexedAt: row.indexed_at,
149
163
}));
···
212
226
const result = stmt.get(vibeName);
213
227
return (result === null || result === void 0 ? void 0 : result.count) || 0;
214
228
},
229
+
getTotalMentionCount: (vibeName) => {
230
+
const stmt = db.prepare(`
231
+
SELECT COUNT(*) as count
232
+
FROM vibe_mentions
233
+
WHERE vibe_name = ?
234
+
`);
235
+
const result = stmt.get(vibeName);
236
+
return (result === null || result === void 0 ? void 0 : result.count) || 0;
237
+
},
215
238
getEmergingVibes: () => {
216
239
const stmt = db.prepare(`
217
240
SELECT
218
241
vm.vibe_name,
219
242
COUNT(DISTINCT vm.mentioned_by_did) as mention_count,
243
+
COUNT(*) as total_mention_count,
220
244
MIN(vm.mentioned_at) as first_mentioned,
221
245
MAX(vm.mentioned_at) as last_mentioned
222
246
FROM vibe_mentions vm
···
228
252
return stmt.all().map(row => ({
229
253
vibeName: row.vibe_name,
230
254
mentionCount: row.mention_count,
255
+
totalMentionCount: row.total_mention_count,
231
256
firstMentioned: row.first_mentioned,
232
257
lastMentioned: row.last_mentioned,
233
-
progress: (row.mention_count / 5) * 100, // 5 is the threshold
258
+
progress: Math.max((row.mention_count / 5) * 100, // 5 unique mentions
259
+
(row.total_mention_count / 10) * 100 // OR 10 total mentions
260
+
),
234
261
}));
235
262
},
236
263
getVibeByName: (name) => {
+4
-3
src/database.ts
+4
-3
src/database.ts
···
57
57
vibe_name TEXT NOT NULL,
58
58
mentioned_by_did TEXT NOT NULL,
59
59
mentioned_at TEXT NOT NULL,
60
-
post_uri TEXT,
61
-
PRIMARY KEY (vibe_name, mentioned_by_did, mentioned_at)
60
+
post_uri TEXT NOT NULL,
61
+
PRIMARY KEY (vibe_name, post_uri)
62
62
);
63
63
64
64
CREATE INDEX IF NOT EXISTS idx_vibe_mentions_name ON vibe_mentions(vibe_name);
65
+
CREATE INDEX IF NOT EXISTS idx_vibe_mentions_author ON vibe_mentions(mentioned_by_did);
65
66
CREATE UNIQUE INDEX IF NOT EXISTS idx_vibes_unique_name ON vibes(LOWER(name));
66
67
67
68
CREATE TABLE IF NOT EXISTS grooves (
···
276
277
};
277
278
278
279
export const vibeMentionDb = {
279
-
trackMention: (vibeName: string, mentionedByDid: string, postUri?: string) => {
280
+
trackMention: (vibeName: string, mentionedByDid: string, postUri: string) => {
280
281
const stmt = db.prepare(`
281
282
INSERT OR IGNORE INTO vibe_mentions
282
283
(vibe_name, mentioned_by_did, mentioned_at, post_uri)
+34
-77
src/firehose-fixed.js
+34
-77
src/firehose-fixed.js
···
11
11
Object.defineProperty(exports, "__esModule", { value: true });
12
12
exports.FixedFirehoseMonitor = void 0;
13
13
const ws_1 = require("ws");
14
-
const common_1 = require("@atproto/common");
14
+
const cbor_x_1 = require("cbor-x");
15
15
const repo_1 = require("@atproto/repo");
16
16
const vibe_monitor_1 = require("./vibe-monitor");
17
-
// Frame types based on AT Protocol spec
18
-
var FrameType;
19
-
(function (FrameType) {
20
-
FrameType[FrameType["Message"] = 1] = "Message";
21
-
FrameType[FrameType["Error"] = -1] = "Error";
22
-
})(FrameType || (FrameType = {}));
23
17
class FixedFirehoseMonitor {
24
18
constructor(agent) {
25
19
this.ws = null;
···
32
26
}
33
27
start() {
34
28
return __awaiter(this, void 0, void 0, function* () {
35
-
console.log('🔥 Starting FIXED Bluesky Firehose monitoring for #vibe-* hashtags...');
29
+
console.log('🔥 Starting fixed Bluesky Firehose monitoring for #vibe-* hashtags...');
36
30
const firehoseUrl = 'wss://bsky.network/xrpc/com.atproto.sync.subscribeRepos';
37
31
console.log(`🔗 Connecting to: ${firehoseUrl}`);
38
32
this.ws = new ws_1.WebSocket(firehoseUrl);
···
43
37
this.errorCount = 0;
44
38
// Log stats every 30 seconds
45
39
this.statsInterval = setInterval(() => {
46
-
console.log(`📊 Firehose stats: ${this.messageCount} messages, ${this.vibeDetectionCount} #vibe-* detections, ${this.errorCount} errors`);
40
+
console.log(`📊 Firehose stats: ${this.messageCount} messages processed, ${this.vibeDetectionCount} #vibe-* detections, ${this.errorCount} errors`);
47
41
}, 30000);
48
42
});
49
43
this.ws.on('message', (data) => __awaiter(this, void 0, void 0, function* () {
50
44
this.messageCount++;
51
45
try {
52
-
// Decode the frame structure
53
-
const frame = this.decodeFrame(new Uint8Array(data));
54
-
if (!frame) {
55
-
return;
56
-
}
57
-
// Handle different message types
58
-
switch (frame.body.$type) {
59
-
case 'com.atproto.sync.subscribeRepos#commit':
60
-
yield this.handleCommit(frame.body);
61
-
break;
62
-
case 'com.atproto.sync.subscribeRepos#error':
63
-
console.error('Firehose error:', frame.body.error, frame.body.message);
64
-
this.errorCount++;
65
-
break;
66
-
case 'com.atproto.sync.subscribeRepos#info':
67
-
console.log('Firehose info:', frame.body.name, frame.body.message);
68
-
break;
69
-
default:
70
-
// Unknown message type
71
-
if (this.messageCount % 1000 === 0) {
72
-
console.log(`Unknown message type: ${frame.body.$type}`);
73
-
}
46
+
// AT Protocol uses framed messages
47
+
// First decode the frame header
48
+
const [header, remainder] = this.decodeVarint(data);
49
+
// Then decode the actual message
50
+
const messageBytes = data.slice(data.length - remainder);
51
+
const message = (0, cbor_x_1.decode)(messageBytes);
52
+
// Handle commit messages
53
+
if (message && message.$type === 'com.atproto.sync.subscribeRepos#commit') {
54
+
yield this.handleCommit(message);
74
55
}
75
56
}
76
57
catch (error) {
77
58
// Only log every 100th error to avoid spam
78
59
if (this.errorCount % 100 === 0) {
79
-
console.error('Error processing firehose message:', error);
60
+
console.error('Error processing message:', error);
80
61
}
81
62
this.errorCount++;
82
63
}
83
64
}));
84
65
this.ws.on('error', (error) => {
85
66
console.error('❌ Firehose WebSocket error:', error.message);
86
-
if (error.code) {
87
-
console.error(' Error code:', error.code);
88
-
}
89
67
});
90
68
this.ws.on('close', (code, reason) => {
91
69
console.log(`🔌 Firehose disconnected: Code ${code}${reason ? `, Reason: ${reason}` : ''}`);
···
98
76
});
99
77
});
100
78
}
101
-
decodeFrame(bytes) {
102
-
try {
103
-
// Decode multiple CBOR items (header and body)
104
-
const decoded = (0, common_1.cborDecodeMulti)(bytes);
105
-
if (decoded.length < 2) {
106
-
throw new Error('Frame must have at least header and body');
107
-
}
108
-
const header = decoded[0];
109
-
const body = decoded[1];
110
-
// Validate header
111
-
if (!header || typeof header.op !== 'number') {
112
-
throw new Error('Invalid frame header');
113
-
}
114
-
// Handle message frames
115
-
if (header.op === FrameType.Message) {
116
-
// Add the $type field based on the header type
117
-
if (body && typeof body === 'object' && header.t) {
118
-
body.$type = header.t.startsWith('#')
119
-
? `com.atproto.sync.subscribeRepos${header.t}`
120
-
: header.t;
121
-
}
122
-
return { header, body };
123
-
}
124
-
// Handle error frames
125
-
if (header.op === FrameType.Error) {
126
-
return { header, body };
127
-
}
128
-
throw new Error(`Unknown frame type: ${header.op}`);
129
-
}
130
-
catch (error) {
131
-
if (this.errorCount % 100 === 0) {
132
-
console.error('Error decoding frame:', error);
133
-
}
134
-
return null;
135
-
}
79
+
decodeVarint(buf) {
80
+
let value = 0;
81
+
let shift = 0;
82
+
let byte;
83
+
let i = 0;
84
+
do {
85
+
byte = buf[i++];
86
+
value |= (byte & 0x7f) << shift;
87
+
shift += 7;
88
+
} while (byte & 0x80);
89
+
return [value, buf.length - i];
136
90
}
137
91
handleCommit(commit) {
138
92
return __awaiter(this, void 0, void 0, function* () {
93
+
var _a;
139
94
try {
95
+
if (!commit.blocks)
96
+
return;
140
97
// Parse the CAR file from blocks
141
98
const car = yield (0, repo_1.readCar)(commit.blocks);
142
99
// Process each operation
143
-
for (const op of commit.ops) {
100
+
for (const op of commit.ops || []) {
144
101
// We only care about post creates
145
-
if (op.action === 'create' && op.path.includes('app.bsky.feed.post')) {
102
+
if (op.action === 'create' && ((_a = op.path) === null || _a === void 0 ? void 0 : _a.includes('app.bsky.feed.post'))) {
146
103
try {
147
-
// Get the record bytes from the CAR file using the operation's CID
104
+
// Get the record bytes from the CAR file
148
105
const recordBytes = car.blocks.get(op.cid);
149
106
if (!recordBytes)
150
107
continue;
151
-
// Convert CBOR to lexicon record
108
+
// Convert CBOR to record
152
109
const record = (0, repo_1.cborToLexRecord)(recordBytes);
153
110
// Check for #vibe- hashtags
154
111
if (record.text && typeof record.text === 'string' && record.text.toLowerCase().includes('#vibe-')) {
···
164
121
}
165
122
}
166
123
catch (e) {
167
-
// Record-specific error, don't spam logs
124
+
// Record-specific error
168
125
if (this.errorCount % 100 === 0) {
169
-
console.error('Error processing post record:', e);
126
+
console.error('Error processing record:', e);
170
127
}
171
128
this.errorCount++;
172
129
}
···
176
133
catch (error) {
177
134
// CAR parsing error
178
135
if (this.errorCount % 100 === 0) {
179
-
console.error('Error parsing CAR file:', error);
136
+
console.error('Error handling commit:', error);
180
137
}
181
138
this.errorCount++;
182
139
}
+72
src/firehose-with-atproto-sync.js
+72
src/firehose-with-atproto-sync.js
···
1
+
"use strict";
2
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+
return new (P || (P = Promise))(function (resolve, reject) {
5
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+
});
10
+
};
11
+
Object.defineProperty(exports, "__esModule", { value: true });
12
+
exports.ATProtoFirehoseMonitor = void 0;
13
+
const sync_1 = require("@atproto/sync");
14
+
const vibe_monitor_1 = require("./vibe-monitor");
15
+
class ATProtoFirehoseMonitor {
16
+
constructor(agent) {
17
+
this.messageCount = 0;
18
+
this.vibeDetectionCount = 0;
19
+
this.statsInterval = null;
20
+
this.vibeMonitor = new vibe_monitor_1.VibeMonitor(agent);
21
+
this.firehose = new sync_1.Firehose({
22
+
filterCollections: ['app.bsky.feed.post'],
23
+
handleEvent: (evt) => __awaiter(this, void 0, void 0, function* () {
24
+
this.messageCount++;
25
+
if (evt.event === 'create') {
26
+
const ops = (0, sync_1.getOpsByType)(evt);
27
+
for (const op of ops.posts.creates) {
28
+
try {
29
+
const record = op.record;
30
+
// Check for #vibe- hashtags
31
+
if (record.text && typeof record.text === 'string' && record.text.toLowerCase().includes('#vibe-')) {
32
+
this.vibeDetectionCount++;
33
+
console.log(`\n🎯 Detected #vibe-* in Bluesky post!`);
34
+
console.log(` Author DID: ${op.author}`);
35
+
console.log(` Text: "${record.text.substring(0, 100)}${record.text.length > 100 ? '...' : ''}"`);
36
+
console.log(` URI: ${op.uri}`);
37
+
// Process the vibe mention
38
+
yield this.vibeMonitor.checkPost(record.text, op.author, op.uri);
39
+
}
40
+
}
41
+
catch (e) {
42
+
console.error('Error processing post:', e);
43
+
}
44
+
}
45
+
}
46
+
}),
47
+
onError: (error) => {
48
+
console.error('Firehose error:', error);
49
+
}
50
+
});
51
+
}
52
+
start() {
53
+
return __awaiter(this, void 0, void 0, function* () {
54
+
console.log('🔥 Starting AT Protocol Sync Firehose monitoring for #vibe-* hashtags...');
55
+
// Start stats logging
56
+
this.statsInterval = setInterval(() => {
57
+
console.log(`📊 Firehose stats: ${this.messageCount} messages processed, ${this.vibeDetectionCount} #vibe-* detections`);
58
+
}, 30000);
59
+
// Start the firehose
60
+
yield this.firehose.start();
61
+
console.log('📡 Connected to AT Protocol Firehose - monitoring all posts for #vibe-*');
62
+
});
63
+
}
64
+
stop() {
65
+
if (this.statsInterval) {
66
+
clearInterval(this.statsInterval);
67
+
this.statsInterval = null;
68
+
}
69
+
this.firehose.stop();
70
+
}
71
+
}
72
+
exports.ATProtoFirehoseMonitor = ATProtoFirehoseMonitor;
+103
src/firehose-with-skyware.js
+103
src/firehose-with-skyware.js
···
1
+
"use strict";
2
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+
return new (P || (P = Promise))(function (resolve, reject) {
5
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+
});
10
+
};
11
+
Object.defineProperty(exports, "__esModule", { value: true });
12
+
exports.SkywareFirehoseMonitor = void 0;
13
+
const firehose_1 = require("@skyware/firehose");
14
+
const ws_1 = require("ws");
15
+
const vibe_monitor_1 = require("./vibe-monitor");
16
+
class SkywareFirehoseMonitor {
17
+
constructor(agent) {
18
+
this.messageCount = 0;
19
+
this.vibeDetectionCount = 0;
20
+
this.errorCount = 0;
21
+
this.statsInterval = null;
22
+
this.vibeMonitor = new vibe_monitor_1.VibeMonitor(agent);
23
+
this.firehose = new firehose_1.Firehose({
24
+
ws: ws_1.WebSocket,
25
+
relay: 'wss://bsky.network'
26
+
});
27
+
}
28
+
start() {
29
+
return __awaiter(this, void 0, void 0, function* () {
30
+
console.log('🔥 Starting Skyware Firehose monitoring for #vibe-* hashtags...');
31
+
// Set up event handlers
32
+
this.firehose.on('open', () => {
33
+
console.log('📡 Connected to Bluesky Firehose - monitoring all posts for #vibe-*');
34
+
this.messageCount = 0;
35
+
this.vibeDetectionCount = 0;
36
+
this.errorCount = 0;
37
+
// Log stats every 30 seconds
38
+
this.statsInterval = setInterval(() => {
39
+
console.log(`📊 Firehose stats: ${this.messageCount} messages, ${this.vibeDetectionCount} #vibe-* detections, ${this.errorCount} errors`);
40
+
}, 30000);
41
+
});
42
+
this.firehose.on('commit', (commit) => __awaiter(this, void 0, void 0, function* () {
43
+
this.messageCount++;
44
+
try {
45
+
// Process operations in the commit
46
+
for (const op of commit.ops || []) {
47
+
// We only care about post creates
48
+
if (op.action === 'create' && op.path.includes('app.bsky.feed.post')) {
49
+
const record = op.record;
50
+
// Check for #vibe- hashtags
51
+
if ((record === null || record === void 0 ? void 0 : record.text) && typeof record.text === 'string' && record.text.toLowerCase().includes('#vibe-')) {
52
+
this.vibeDetectionCount++;
53
+
const authorDid = commit.repo;
54
+
console.log(`\n🎯 Detected #vibe-* in Bluesky post!`);
55
+
console.log(` Author DID: ${authorDid}`);
56
+
console.log(` Text: "${record.text.substring(0, 100)}${record.text.length > 100 ? '...' : ''}"`);
57
+
console.log(` Path: ${op.path}`);
58
+
// Process the vibe mention
59
+
const postUri = `at://${authorDid}/${op.path}`;
60
+
yield this.vibeMonitor.checkPost(record.text, authorDid, postUri);
61
+
}
62
+
}
63
+
}
64
+
}
65
+
catch (error) {
66
+
// Only log every 100th error to avoid spam
67
+
if (this.errorCount % 100 === 0) {
68
+
console.error('Error processing commit:', error);
69
+
}
70
+
this.errorCount++;
71
+
}
72
+
}));
73
+
this.firehose.on('error', ({ error }) => {
74
+
// Only log every 100th error to avoid spam
75
+
if (this.errorCount % 100 === 0) {
76
+
console.error('Firehose error:', error);
77
+
}
78
+
this.errorCount++;
79
+
});
80
+
this.firehose.on('websocketError', ({ error }) => {
81
+
console.error('❌ WebSocket error:', error);
82
+
});
83
+
this.firehose.on('close', (cursor) => {
84
+
console.log(`🔌 Firehose disconnected at cursor: ${cursor}`);
85
+
console.log(' The firehose will auto-reconnect...');
86
+
if (this.statsInterval) {
87
+
clearInterval(this.statsInterval);
88
+
this.statsInterval = null;
89
+
}
90
+
});
91
+
// Start the firehose
92
+
this.firehose.start();
93
+
});
94
+
}
95
+
stop() {
96
+
if (this.statsInterval) {
97
+
clearInterval(this.statsInterval);
98
+
this.statsInterval = null;
99
+
}
100
+
this.firehose.close();
101
+
}
102
+
}
103
+
exports.SkywareFirehoseMonitor = SkywareFirehoseMonitor;
+1
-1
src/firehose.js
+1
-1
src/firehose.js
···
118
118
tags: blip.tags || [],
119
119
vibeUri: (_a = blip.vibe) === null || _a === void 0 ? void 0 : _a.uri,
120
120
vibeName: (_b = blip.vibe) === null || _b === void 0 ? void 0 : _b.name,
121
-
fluffs: blip.fluffs || 0,
121
+
grooves: blip.grooves || 0,
122
122
createdAt: blip.createdAt,
123
123
});
124
124
}
+1
-1
src/index.ts
+1
-1
src/index.ts
···
30
30
if (blip.body) console.log(` ${blip.body.substring(0, 100)}...`);
31
31
if (blip.url) console.log(` 🔗 ${blip.url}`);
32
32
console.log(` 📅 ${new Date(blip.createdAt).toLocaleString()}`);
33
-
console.log(` ✨ ${blip.fluffs} fluffs`);
33
+
console.log(` ✨ ${blip.grooves} grooves`);
34
34
});
35
35
36
36
} catch (error) {
+28
src/post-test-vibe.js
+28
src/post-test-vibe.js
···
1
+
"use strict";
2
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+
return new (P || (P = Promise))(function (resolve, reject) {
5
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+
});
10
+
};
11
+
Object.defineProperty(exports, "__esModule", { value: true });
12
+
const agent_1 = require("./agent");
13
+
function postTestVibe() {
14
+
return __awaiter(this, void 0, void 0, function* () {
15
+
const agent = new agent_1.BlonkAgent();
16
+
yield agent.login();
17
+
const bskyAgent = agent.getAgent();
18
+
const testVibeName = `blonk_test_${Date.now()}`;
19
+
console.log(`Posting test vibe: #vibe-${testVibeName}`);
20
+
const result = yield bskyAgent.post({
21
+
text: `Testing Blonk vibe detection! #vibe-${testVibeName}`,
22
+
createdAt: new Date().toISOString(),
23
+
});
24
+
console.log('Posted:', result.uri);
25
+
console.log(`Now search for: #vibe-${testVibeName}`);
26
+
});
27
+
}
28
+
postTestVibe().catch(console.error);
+23
src/post-test-vibe.ts
+23
src/post-test-vibe.ts
···
1
+
import { BskyAgent } from '@atproto/api';
2
+
import { BlonkAgent } from './agent';
3
+
4
+
async function postTestVibe() {
5
+
const agent = new BlonkAgent();
6
+
await agent.login();
7
+
8
+
const bskyAgent = agent.getAgent();
9
+
10
+
const testVibeName = `blonk_test_${Date.now()}`;
11
+
12
+
console.log(`Posting test vibe: #vibe-${testVibeName}`);
13
+
14
+
const result = await bskyAgent.post({
15
+
text: `Testing Blonk vibe detection! #vibe-${testVibeName}`,
16
+
createdAt: new Date().toISOString(),
17
+
});
18
+
19
+
console.log('Posted:', result.uri);
20
+
console.log(`Now search for: #vibe-${testVibeName}`);
21
+
}
22
+
23
+
postTestVibe().catch(console.error);
+2
-2
src/schemas.js
+2
-2
src/schemas.js
···
1
1
"use strict";
2
2
Object.defineProperty(exports, "__esModule", { value: true });
3
-
exports.VIBE_MEMBER_NSID = exports.VIBE_NSID = exports.COMMENT_NSID = exports.FLUFF_NSID = exports.BLIP_NSID = void 0;
3
+
exports.VIBE_MEMBER_NSID = exports.VIBE_NSID = exports.COMMENT_NSID = exports.GROOVE_NSID = exports.BLIP_NSID = void 0;
4
4
exports.BLIP_NSID = 'com.blonk.blip';
5
-
exports.FLUFF_NSID = 'com.blonk.fluff';
5
+
exports.GROOVE_NSID = 'com.blonk.groove';
6
6
exports.COMMENT_NSID = 'com.blonk.comment';
7
7
exports.VIBE_NSID = 'com.blonk.vibe';
8
8
exports.VIBE_MEMBER_NSID = 'com.blonk.vibeMember';
+3
-2
src/search-monitor.js
+3
-2
src/search-monitor.js
···
34
34
console.log('🔎 Searching Bluesky for #vibe-* mentions...');
35
35
// Search for posts containing #vibe-
36
36
const searchResponse = yield this.agent.app.bsky.feed.searchPosts({
37
-
q: '#vibe-',
38
-
limit: 50,
37
+
q: 'vibe-',
38
+
limit: 100,
39
39
});
40
+
console.log(`Search returned ${searchResponse.data.posts.length} posts`);
40
41
let newMentions = 0;
41
42
for (const post of searchResponse.data.posts) {
42
43
const text = post.record.text;
+9
-1
src/search-monitor.ts
+9
-1
src/search-monitor.ts
···
36
36
console.log(`Search returned ${searchResponse.data.posts.length} posts`);
37
37
38
38
let newMentions = 0;
39
+
let debugCount = 0;
39
40
40
41
for (const post of searchResponse.data.posts) {
41
-
const text = post.record.text;
42
+
const record = post.record as any;
43
+
const text = record?.text;
42
44
const authorDid = post.author.did;
45
+
46
+
// Debug first few posts
47
+
if (debugCount < 3 && text && text.includes('vibe-')) {
48
+
console.log(`Debug: Post text contains 'vibe-': "${text.substring(0, 150)}"`);
49
+
debugCount++;
50
+
}
43
51
44
52
if (text && text.includes('#vibe-')) {
45
53
console.log(`Found #vibe-* mention by @${post.author.handle}: "${text.substring(0, 100)}..."`);
+16
-11
src/server.js
+16
-11
src/server.js
···
51
51
const blips_1 = require("./blips");
52
52
const vibes_1 = require("./vibes");
53
53
const firehose_1 = require("./firehose");
54
-
const typed_firehose_1 = require("./typed-firehose");
54
+
const search_monitor_1 = require("./search-monitor");
55
55
const database_1 = require("./database");
56
56
const dotenv = __importStar(require("dotenv"));
57
57
dotenv.config();
···
63
63
let blipManager;
64
64
let vibeManager;
65
65
let aggregator;
66
-
let firehoseMonitor;
66
+
let searchMonitor;
67
67
function initializeAgent() {
68
68
return __awaiter(this, void 0, void 0, function* () {
69
69
agent = new agent_1.BlonkAgent();
···
73
73
// Start aggregating blips from all users
74
74
aggregator = new firehose_1.BlipAggregator(agent.getAgent());
75
75
aggregator.startPolling(30000); // Poll every 30 seconds
76
-
// Start monitoring Bluesky firehose for #vibe-* hashtags
77
-
firehoseMonitor = new typed_firehose_1.TypedFirehoseMonitor(agent.getAgent());
78
-
yield firehoseMonitor.start();
76
+
// Start searching for #vibe-* hashtags on Bluesky
77
+
searchMonitor = new search_monitor_1.SearchMonitor(agent.getAgent());
78
+
yield searchMonitor.start();
79
79
console.log('✅ Connected to AT Protocol');
80
80
console.log('📡 Starting blip aggregation...');
81
-
console.log('🔥 Monitoring Bluesky firehose for #vibe-* hashtags...');
81
+
console.log('🔍 Searching Bluesky for #vibe-* hashtags every 2 minutes...');
82
82
});
83
83
}
84
84
app.get('/api/blips', (req, res) => __awaiter(void 0, void 0, void 0, function* () {
···
157
157
res.status(500).json({ error: 'Failed to join vibe' });
158
158
}
159
159
}));
160
-
// Manual search trigger (no longer needed with firehose)
160
+
// Manual search trigger
161
161
app.post('/api/vibes/search', (req, res) => __awaiter(void 0, void 0, void 0, function* () {
162
-
res.json({
163
-
success: true,
164
-
message: 'Firehose is monitoring in real-time. Manual search not needed.'
165
-
});
162
+
try {
163
+
console.log('Manual vibe search triggered...');
164
+
yield searchMonitor.searchForVibeMentions();
165
+
res.json({ success: true, message: 'Search completed' });
166
+
}
167
+
catch (error) {
168
+
console.error('Error searching for vibes:', error);
169
+
res.status(500).json({ error: 'Failed to search for vibes' });
170
+
}
166
171
}));
167
172
app.get('/api/blips/tag/:tag', (req, res) => __awaiter(void 0, void 0, void 0, function* () {
168
173
try {
+372
src/server.test.ts
+372
src/server.test.ts
···
1
+
import { BlonkAgent } from './agent';
2
+
import { BlipManager } from './blips';
3
+
import { VibeManager } from './vibes';
4
+
import { BlipAggregator } from './firehose';
5
+
import { SearchMonitor } from './search-monitor';
6
+
import { blipDb, vibeDb, vibeMentionDb } from './database';
7
+
8
+
// Mock all dependencies
9
+
jest.mock('./agent');
10
+
jest.mock('./blips');
11
+
jest.mock('./vibes');
12
+
jest.mock('./firehose');
13
+
jest.mock('./search-monitor');
14
+
jest.mock('./database');
15
+
jest.mock('dotenv', () => ({
16
+
config: jest.fn()
17
+
}));
18
+
19
+
describe('Blonk Server Unit Tests', () => {
20
+
let mockAgent: jest.Mocked<BlonkAgent>;
21
+
let mockBlipManager: jest.Mocked<BlipManager>;
22
+
let mockVibeManager: jest.Mocked<VibeManager>;
23
+
let mockAggregator: jest.Mocked<BlipAggregator>;
24
+
let mockSearchMonitor: jest.Mocked<SearchMonitor>;
25
+
let mockBlipDb: any;
26
+
let mockVibeDb: any;
27
+
let mockVibeMentionDb: any;
28
+
29
+
beforeEach(() => {
30
+
// Clear all mocks
31
+
jest.clearAllMocks();
32
+
33
+
// Set up mock instances
34
+
mockAgent = {
35
+
login: jest.fn().mockResolvedValue(undefined),
36
+
getAgent: jest.fn().mockReturnValue({
37
+
session: { did: 'did:plc:test123' },
38
+
com: {
39
+
atproto: {
40
+
repo: {
41
+
createRecord: jest.fn()
42
+
}
43
+
}
44
+
}
45
+
})
46
+
} as any;
47
+
48
+
mockBlipManager = {
49
+
createBlip: jest.fn().mockResolvedValue('at://did:plc:test/app.bsky.feed.post/abc123')
50
+
} as any;
51
+
52
+
mockVibeManager = {
53
+
joinVibe: jest.fn().mockResolvedValue(undefined),
54
+
createVibe: jest.fn().mockResolvedValue('at://did:plc:test/vibe/xyz789')
55
+
} as any;
56
+
57
+
mockAggregator = {
58
+
startPolling: jest.fn(),
59
+
addUser: jest.fn()
60
+
} as any;
61
+
62
+
mockSearchMonitor = {
63
+
start: jest.fn().mockResolvedValue(undefined),
64
+
searchForVibeMentions: jest.fn().mockResolvedValue(undefined)
65
+
} as any;
66
+
67
+
// Set up database mocks
68
+
mockBlipDb = {
69
+
getBlips: jest.fn().mockReturnValue([]),
70
+
getBlipsByVibe: jest.fn().mockReturnValue([]),
71
+
getBlipsByTag: jest.fn().mockReturnValue([]),
72
+
addBlip: jest.fn()
73
+
};
74
+
75
+
mockVibeDb = {
76
+
getVibes: jest.fn().mockReturnValue([]),
77
+
addMember: jest.fn(),
78
+
getVibe: jest.fn()
79
+
};
80
+
81
+
mockVibeMentionDb = {
82
+
getEmergingVibes: jest.fn().mockReturnValue([]),
83
+
getVibeByName: jest.fn(),
84
+
recordMention: jest.fn()
85
+
};
86
+
87
+
// Set up mocked constructors
88
+
(BlonkAgent as jest.MockedClass<typeof BlonkAgent>).mockImplementation(() => mockAgent);
89
+
(BlipManager as jest.MockedClass<typeof BlipManager>).mockImplementation(() => mockBlipManager);
90
+
(VibeManager as jest.MockedClass<typeof VibeManager>).mockImplementation(() => mockVibeManager);
91
+
(BlipAggregator as jest.MockedClass<typeof BlipAggregator>).mockImplementation(() => mockAggregator);
92
+
(SearchMonitor as jest.MockedClass<typeof SearchMonitor>).mockImplementation(() => mockSearchMonitor);
93
+
94
+
// Replace database exports with mocks
95
+
(blipDb as any) = mockBlipDb;
96
+
(vibeDb as any) = mockVibeDb;
97
+
(vibeMentionDb as any) = mockVibeMentionDb;
98
+
});
99
+
100
+
describe('Component Initialization', () => {
101
+
it('should create BlonkAgent instance', () => {
102
+
const agent = new BlonkAgent();
103
+
expect(BlonkAgent).toHaveBeenCalled();
104
+
expect(agent).toBe(mockAgent);
105
+
});
106
+
107
+
it('should login to BlonkAgent', async () => {
108
+
const agent = new BlonkAgent();
109
+
await agent.login();
110
+
expect(mockAgent.login).toHaveBeenCalled();
111
+
});
112
+
113
+
it('should create BlipManager with agent instance', () => {
114
+
const agentInstance = mockAgent.getAgent();
115
+
const manager = new BlipManager(agentInstance);
116
+
expect(BlipManager).toHaveBeenCalledWith(agentInstance);
117
+
expect(manager).toBe(mockBlipManager);
118
+
});
119
+
120
+
it('should create VibeManager with agent instance', () => {
121
+
const agentInstance = mockAgent.getAgent();
122
+
const manager = new VibeManager(agentInstance);
123
+
expect(VibeManager).toHaveBeenCalledWith(agentInstance);
124
+
expect(manager).toBe(mockVibeManager);
125
+
});
126
+
127
+
it('should create BlipAggregator with agent instance', () => {
128
+
const agentInstance = mockAgent.getAgent();
129
+
const aggregator = new BlipAggregator(agentInstance);
130
+
expect(BlipAggregator).toHaveBeenCalledWith(agentInstance);
131
+
expect(aggregator).toBe(mockAggregator);
132
+
});
133
+
134
+
it('should start polling on BlipAggregator', () => {
135
+
const aggregator = new BlipAggregator(mockAgent.getAgent());
136
+
aggregator.startPolling(30000);
137
+
expect(mockAggregator.startPolling).toHaveBeenCalledWith(30000);
138
+
});
139
+
140
+
it('should create SearchMonitor with agent instance', () => {
141
+
const agentInstance = mockAgent.getAgent();
142
+
const monitor = new SearchMonitor(agentInstance);
143
+
expect(SearchMonitor).toHaveBeenCalledWith(agentInstance);
144
+
expect(monitor).toBe(mockSearchMonitor);
145
+
});
146
+
147
+
it('should start SearchMonitor', async () => {
148
+
const monitor = new SearchMonitor(mockAgent.getAgent());
149
+
await monitor.start();
150
+
expect(mockSearchMonitor.start).toHaveBeenCalled();
151
+
});
152
+
});
153
+
154
+
describe('BlipManager Operations', () => {
155
+
it('should create blip with all parameters', async () => {
156
+
const title = 'Test Title';
157
+
const body = 'Test Body';
158
+
const url = 'https://example.com';
159
+
const tags = ['tag1', 'tag2'];
160
+
const vibe = 'at://vibe/uri';
161
+
162
+
const uri = await mockBlipManager.createBlip(title, body, url, tags, vibe);
163
+
164
+
expect(uri).toBe('at://did:plc:test/app.bsky.feed.post/abc123');
165
+
expect(mockBlipManager.createBlip).toHaveBeenCalledWith(title, body, url, tags, vibe);
166
+
});
167
+
168
+
it('should handle blip creation errors', async () => {
169
+
mockBlipManager.createBlip.mockRejectedValue(new Error('Creation failed'));
170
+
171
+
await expect(
172
+
mockBlipManager.createBlip('Title', 'Body', 'url', [], undefined)
173
+
).rejects.toThrow('Creation failed');
174
+
});
175
+
});
176
+
177
+
describe('VibeManager Operations', () => {
178
+
it('should join vibe successfully', async () => {
179
+
const vibeUri = 'at://vibe/uri';
180
+
const cid = 'cid123';
181
+
182
+
await mockVibeManager.joinVibe(vibeUri, cid);
183
+
184
+
expect(mockVibeManager.joinVibe).toHaveBeenCalledWith(vibeUri, cid);
185
+
});
186
+
187
+
it('should handle join vibe errors', async () => {
188
+
mockVibeManager.joinVibe.mockRejectedValue(new Error('Join failed'));
189
+
190
+
await expect(
191
+
mockVibeManager.joinVibe('at://vibe/uri', 'cid123')
192
+
).rejects.toThrow('Join failed');
193
+
});
194
+
195
+
it('should create vibe successfully', async () => {
196
+
const name = 'test_vibe';
197
+
const mood = 'chill';
198
+
const emoji = '🎵';
199
+
const color = '#FF0000';
200
+
201
+
const uri = await mockVibeManager.createVibe(name, mood, emoji, color);
202
+
203
+
expect(uri).toBe('at://did:plc:test/vibe/xyz789');
204
+
expect(mockVibeManager.createVibe).toHaveBeenCalledWith(name, mood, emoji, color);
205
+
});
206
+
});
207
+
208
+
describe('Database Operations', () => {
209
+
describe('BlipDb', () => {
210
+
it('should get blips with limit', () => {
211
+
const mockBlips = [
212
+
{ id: '1', title: 'Blip 1' },
213
+
{ id: '2', title: 'Blip 2' }
214
+
];
215
+
mockBlipDb.getBlips.mockReturnValue(mockBlips);
216
+
217
+
const result = mockBlipDb.getBlips(50);
218
+
219
+
expect(result).toEqual(mockBlips);
220
+
expect(mockBlipDb.getBlips).toHaveBeenCalledWith(50);
221
+
});
222
+
223
+
it('should get blips by vibe', () => {
224
+
const vibeUri = 'at://vibe/uri';
225
+
const mockBlips = [{ id: '1', title: 'Vibe Blip' }];
226
+
mockBlipDb.getBlipsByVibe.mockReturnValue(mockBlips);
227
+
228
+
const result = mockBlipDb.getBlipsByVibe(vibeUri);
229
+
230
+
expect(result).toEqual(mockBlips);
231
+
expect(mockBlipDb.getBlipsByVibe).toHaveBeenCalledWith(vibeUri);
232
+
});
233
+
234
+
it('should get blips by tag', () => {
235
+
const tag = 'test-tag';
236
+
const mockBlips = [{ id: '1', title: 'Tagged Blip' }];
237
+
mockBlipDb.getBlipsByTag.mockReturnValue(mockBlips);
238
+
239
+
const result = mockBlipDb.getBlipsByTag(tag);
240
+
241
+
expect(result).toEqual(mockBlips);
242
+
expect(mockBlipDb.getBlipsByTag).toHaveBeenCalledWith(tag);
243
+
});
244
+
});
245
+
246
+
describe('VibeDb', () => {
247
+
it('should get vibes with limit', () => {
248
+
const mockVibes = [
249
+
{ uri: 'at://vibe1', name: 'Vibe 1' },
250
+
{ uri: 'at://vibe2', name: 'Vibe 2' }
251
+
];
252
+
mockVibeDb.getVibes.mockReturnValue(mockVibes);
253
+
254
+
const result = mockVibeDb.getVibes(50);
255
+
256
+
expect(result).toEqual(mockVibes);
257
+
expect(mockVibeDb.getVibes).toHaveBeenCalledWith(50);
258
+
});
259
+
260
+
it('should add member to vibe', () => {
261
+
const vibeUri = 'at://vibe/uri';
262
+
const memberDid = 'did:plc:member';
263
+
264
+
mockVibeDb.addMember(vibeUri, memberDid);
265
+
266
+
expect(mockVibeDb.addMember).toHaveBeenCalledWith(vibeUri, memberDid);
267
+
});
268
+
});
269
+
270
+
describe('VibeMentionDb', () => {
271
+
it('should get emerging vibes', () => {
272
+
const mockEmergingVibes = [
273
+
{ hashtag: '#vibe-test', count: 7, uniqueAuthors: 5 },
274
+
{ hashtag: '#vibe-demo', count: 5, uniqueAuthors: 5 }
275
+
];
276
+
mockVibeMentionDb.getEmergingVibes.mockReturnValue(mockEmergingVibes);
277
+
278
+
const result = mockVibeMentionDb.getEmergingVibes();
279
+
280
+
expect(result).toEqual(mockEmergingVibes);
281
+
expect(mockVibeMentionDb.getEmergingVibes).toHaveBeenCalled();
282
+
});
283
+
});
284
+
});
285
+
286
+
describe('BlipAggregator Operations', () => {
287
+
it('should add user to aggregation', () => {
288
+
const did = 'did:plc:newuser';
289
+
290
+
mockAggregator.addUser(did);
291
+
292
+
expect(mockAggregator.addUser).toHaveBeenCalledWith(did);
293
+
});
294
+
});
295
+
296
+
describe('SearchMonitor Operations', () => {
297
+
it('should search for vibe mentions', async () => {
298
+
await mockSearchMonitor.searchForVibeMentions();
299
+
300
+
expect(mockSearchMonitor.searchForVibeMentions).toHaveBeenCalled();
301
+
});
302
+
303
+
it('should handle search errors', async () => {
304
+
mockSearchMonitor.searchForVibeMentions.mockRejectedValue(new Error('Search failed'));
305
+
306
+
await expect(
307
+
mockSearchMonitor.searchForVibeMentions()
308
+
).rejects.toThrow('Search failed');
309
+
});
310
+
});
311
+
312
+
describe('Error Scenarios', () => {
313
+
it('should handle database errors gracefully', () => {
314
+
mockBlipDb.getBlips.mockImplementation(() => {
315
+
throw new Error('Database connection failed');
316
+
});
317
+
318
+
expect(() => mockBlipDb.getBlips(50)).toThrow('Database connection failed');
319
+
});
320
+
321
+
it('should handle missing agent session', () => {
322
+
mockAgent.getAgent.mockReturnValue({
323
+
session: null
324
+
} as any);
325
+
326
+
const agentInstance = mockAgent.getAgent();
327
+
expect(agentInstance.session).toBeNull();
328
+
});
329
+
});
330
+
331
+
describe('Integration Flow', () => {
332
+
it('should complete full blip creation flow', async () => {
333
+
// Initialize agent
334
+
const agent = new BlonkAgent();
335
+
await agent.login();
336
+
337
+
// Create manager
338
+
const blipManager = new BlipManager(agent.getAgent());
339
+
340
+
// Create blip
341
+
const uri = await blipManager.createBlip(
342
+
'Integration Test',
343
+
'Testing full flow',
344
+
'https://test.com',
345
+
['integration', 'test'],
346
+
undefined
347
+
);
348
+
349
+
expect(uri).toBe('at://did:plc:test/app.bsky.feed.post/abc123');
350
+
expect(mockAgent.login).toHaveBeenCalled();
351
+
expect(mockBlipManager.createBlip).toHaveBeenCalled();
352
+
});
353
+
354
+
it('should complete full vibe join flow', async () => {
355
+
// Initialize agent
356
+
const agent = new BlonkAgent();
357
+
await agent.login();
358
+
359
+
// Create manager
360
+
const vibeManager = new VibeManager(agent.getAgent());
361
+
362
+
// Join vibe
363
+
await vibeManager.joinVibe('at://vibe/uri', 'cid123');
364
+
365
+
// Add member to database
366
+
mockVibeDb.addMember('at://vibe/uri', 'did:plc:test123');
367
+
368
+
expect(mockVibeManager.joinVibe).toHaveBeenCalledWith('at://vibe/uri', 'cid123');
369
+
expect(mockVibeDb.addMember).toHaveBeenCalledWith('at://vibe/uri', 'did:plc:test123');
370
+
});
371
+
});
372
+
});
+38
src/test-atproto-sync-firehose.js
+38
src/test-atproto-sync-firehose.js
···
1
+
"use strict";
2
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+
return new (P || (P = Promise))(function (resolve, reject) {
5
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+
});
10
+
};
11
+
Object.defineProperty(exports, "__esModule", { value: true });
12
+
const api_1 = require("@atproto/api");
13
+
const firehose_with_atproto_sync_1 = require("./firehose-with-atproto-sync");
14
+
function main() {
15
+
return __awaiter(this, void 0, void 0, function* () {
16
+
console.log('🚀 Starting AT Protocol Sync Firehose Test...');
17
+
const agent = new api_1.BskyAgent({
18
+
service: 'https://bsky.social'
19
+
});
20
+
const monitor = new firehose_with_atproto_sync_1.AtprotoSyncFirehoseMonitor(agent);
21
+
// Handle graceful shutdown
22
+
process.on('SIGINT', () => __awaiter(this, void 0, void 0, function* () {
23
+
console.log('\n⏹️ Shutting down...');
24
+
yield monitor.stop();
25
+
process.exit(0);
26
+
}));
27
+
process.on('SIGTERM', () => __awaiter(this, void 0, void 0, function* () {
28
+
console.log('\n⏹️ Shutting down...');
29
+
yield monitor.stop();
30
+
process.exit(0);
31
+
}));
32
+
yield monitor.start();
33
+
});
34
+
}
35
+
main().catch((error) => {
36
+
console.error('Fatal error:', error);
37
+
process.exit(1);
38
+
});
+50
src/test-skyware-firehose.js
+50
src/test-skyware-firehose.js
···
1
+
"use strict";
2
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+
return new (P || (P = Promise))(function (resolve, reject) {
5
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+
});
10
+
};
11
+
const { FirehoseSubscription } = require('@skyware/firehose');
12
+
function testFirehose() {
13
+
return __awaiter(this, void 0, void 0, function* () {
14
+
console.log('🔥 Testing Skyware Firehose...');
15
+
const firehose = new FirehoseSubscription({
16
+
service: 'wss://bsky.network',
17
+
filter: {
18
+
collections: ['app.bsky.feed.post']
19
+
}
20
+
});
21
+
let messageCount = 0;
22
+
let vibeCount = 0;
23
+
firehose.on('commit', (commit) => {
24
+
messageCount++;
25
+
commit.ops.forEach((op) => {
26
+
var _a;
27
+
if (op.action === 'create' && ((_a = op.record) === null || _a === void 0 ? void 0 : _a.text)) {
28
+
const text = op.record.text;
29
+
if (text.toLowerCase().includes('#vibe-')) {
30
+
vibeCount++;
31
+
console.log(`\n🎯 FOUND #vibe-* POST!`);
32
+
console.log(` Author: ${commit.repo}`);
33
+
console.log(` Text: ${text}`);
34
+
console.log(` Path: ${op.path}`);
35
+
}
36
+
}
37
+
});
38
+
});
39
+
firehose.on('error', (error) => {
40
+
console.error('Firehose error:', error);
41
+
});
42
+
yield firehose.start();
43
+
console.log('📡 Connected to Skyware Firehose');
44
+
// Log stats every 10 seconds
45
+
setInterval(() => {
46
+
console.log(`📊 Stats: ${messageCount} messages, ${vibeCount} #vibe-* posts`);
47
+
}, 10000);
48
+
});
49
+
}
50
+
testFirehose().catch(console.error);
+11
-9
src/vibe-monitor.js
+11
-9
src/vibe-monitor.js
···
13
13
const vibes_1 = require("./vibes");
14
14
const database_1 = require("./database");
15
15
const vibe_validation_1 = require("./utils/vibe-validation");
16
-
const VIBE_CREATION_THRESHOLD = 5; // Number of unique users needed to create a vibe
16
+
const UNIQUE_MENTION_THRESHOLD = 5; // Number of unique users needed to create a vibe
17
+
const TOTAL_MENTION_THRESHOLD = 10; // OR total number of mentions needed
17
18
class VibeMonitor {
18
19
constructor(agent) {
19
20
this.agent = agent;
···
33
34
console.log(`✅ Vibe "${vibeName}" already exists`);
34
35
return;
35
36
}
36
-
// Check if we've hit the threshold
37
-
const mentionCount = database_1.vibeMentionDb.getMentionCount(vibeName);
38
-
console.log(`📊 Vibe "${vibeName}" has ${mentionCount} unique mentions`);
39
-
if (mentionCount >= VIBE_CREATION_THRESHOLD) {
40
-
yield this.createVibeFromHashtag(vibeName, mentionCount);
37
+
// Check if we've hit either threshold
38
+
const uniqueMentionCount = database_1.vibeMentionDb.getMentionCount(vibeName);
39
+
const totalMentionCount = database_1.vibeMentionDb.getTotalMentionCount(vibeName);
40
+
console.log(`📊 Vibe "${vibeName}" has ${uniqueMentionCount} unique mentions, ${totalMentionCount} total mentions`);
41
+
if (uniqueMentionCount >= UNIQUE_MENTION_THRESHOLD || totalMentionCount >= TOTAL_MENTION_THRESHOLD) {
42
+
yield this.createVibeFromHashtag(vibeName, uniqueMentionCount, totalMentionCount);
41
43
}
42
44
});
43
45
}
44
-
createVibeFromHashtag(vibeName, mentionCount) {
46
+
createVibeFromHashtag(vibeName, uniqueMentions, totalMentions) {
45
47
return __awaiter(this, void 0, void 0, function* () {
46
48
try {
47
-
console.log(`🎉 Creating new vibe "${vibeName}" after ${mentionCount} mentions!`);
49
+
console.log(`🎉 Creating new vibe "${vibeName}" after ${uniqueMentions} unique mentions (${totalMentions} total)!`);
48
50
// Generate a mood based on the vibe name
49
51
const mood = this.generateMood(vibeName);
50
52
// Create the vibe
···
60
62
mood,
61
63
emoji: '🌊',
62
64
color: '#7B68EE',
63
-
memberCount: mentionCount,
65
+
memberCount: uniqueMentions,
64
66
createdAt: new Date().toISOString(),
65
67
});
66
68
console.log(`✨ Vibe "${vibeName}" created successfully!`);
+1
-1
src/vibe-monitor.ts
+1
-1
src/vibe-monitor.ts
···
15
15
this.vibeManager = new VibeManager(agent);
16
16
}
17
17
18
-
async checkPost(text: string, authorDid: string, postUri?: string) {
18
+
async checkPost(text: string, authorDid: string, postUri: string) {
19
19
const vibeName = extractVibeFromHashtag(text);
20
20
21
21
if (!vibeName) return;
+5
-1
tsconfig.json
+5
-1
tsconfig.json
···
1
1
{
2
2
"compilerOptions": {
3
3
/* Visit https://aka.ms/tsconfig to read more about this file */
4
+
"rootDir": "./src",
5
+
"outDir": "./dist",
4
6
5
7
/* Projects */
6
8
// "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
···
109
111
/* Completeness */
110
112
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
111
113
"skipLibCheck": true /* Skip type checking all .d.ts files. */
112
-
}
114
+
},
115
+
"include": ["src/**/*"],
116
+
"exclude": ["node_modules", "client", "dist"]
113
117
}