diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index bb2bef8..e839896 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -13,12 +13,12 @@ jobs:
strategy:
matrix:
- node-version: [20.x]
+ node-version: [25.x]
steps:
- - uses: actions/checkout@v3
+ - uses: actions/checkout@v6
- name: Use Node.js ${{ matrix.node-version }}
- uses: actions/setup-node@v3
+ uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
cache: 'yarn'
diff --git a/.gitignore b/.gitignore
index bc13ade..7c1f95a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -64,3 +64,5 @@ typings/
.idea/
build/
+
+/generated/prisma
diff --git a/.vscode/settings.json b/.vscode/settings.json
index ad83b87..d641c5b 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -6,11 +6,19 @@
"javascript.preferences.importModuleSpecifier": "relative",
"typescript.preferences.importModuleSpecifier": "relative",
"files.exclude": {
- "node_modules": true
+ "**/.git": true,
+ "**/.svn": true,
+ "**/.hg": true,
+ "**/CVS": true,
+ "**/.DS_Store": true,
+ "**/Thumbs.db": true,
+ "node_modules": true,
+ "**/.idea": true
},
"npm.packageManager": "yarn",
"files.eol": "\n",
"editor.insertSpaces": true,
"editor.tabSize": 4,
- "typescript.enablePromptUseWorkspaceTsdk": true
+ "typescript.enablePromptUseWorkspaceTsdk": true,
+ "explorerExclude.backup": {}
}
diff --git a/biome.json b/biome.json
index 0d61572..0e2e2b5 100644
--- a/biome.json
+++ b/biome.json
@@ -1,6 +1,12 @@
{
- "$schema": "https://biomejs.dev/schemas/2.2.4/schema.json",
- "assist": { "actions": { "source": { "organizeImports": "on" } } },
+ "$schema": "https://biomejs.dev/schemas/2.4.16/schema.json",
+ "assist": {
+ "actions": {
+ "source": {
+ "organizeImports": "on"
+ }
+ }
+ },
"vcs": {
"enabled": true,
"clientKind": "git",
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000..340062d
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,25 @@
+# DataDrop Documentation
+
+This folder is the project knowledge base for Issue 93 and related implementation work.
+
+## What is in here
+
+- [Issue 93 Specification](specs/issue-93-specification.md)
+- [Architecture](specs/architecture.md)
+- [Membership State Machine](specs/state-machine.md)
+- [BPMN-Style Lifecycle](specs/bpmn-lifecycle.md)
+- [MVP Scope](specs/mvp-scope.md)
+- [Discord API and Discord.js Sources](specs/discord-sources.md)
+- [GitHub Sources](specs/github-sources.md)
+- [Strict Traceability Matrix](specs/traceability-matrix.md)
+- [Roadmap Beyond MVP](specs/non-mvp-roadmap.md)
+
+## Visual Assets
+
+- Feature list snapshot: 
+- Project visual marker: 
+
+## Notes
+
+- Mermaid diagrams are embedded directly in markdown files.
+- Any statement tied to Discord API or Discord.js behavior is sourced in [Discord API and Discord.js Sources](specs/discord-sources.md).
diff --git a/docs/assets/datadrop-visual-marker.svg b/docs/assets/datadrop-visual-marker.svg
new file mode 100644
index 0000000..2b5af7a
--- /dev/null
+++ b/docs/assets/datadrop-visual-marker.svg
@@ -0,0 +1,60 @@
+
diff --git a/docs/assets/issue-93-feature-list.svg b/docs/assets/issue-93-feature-list.svg
new file mode 100644
index 0000000..ec5d933
--- /dev/null
+++ b/docs/assets/issue-93-feature-list.svg
@@ -0,0 +1,80 @@
+
diff --git a/docs/specs/architecture.md b/docs/specs/architecture.md
new file mode 100644
index 0000000..3b59e12
--- /dev/null
+++ b/docs/specs/architecture.md
@@ -0,0 +1,68 @@
+# Architecture
+
+## Context
+
+DataDrop has two behavior entrypoints:
+
+1. Discord Bot runtime
+2. Web App + Backend API
+
+Both must enforce the same business rules and write to the same domain model.
+
+## High-Level System Diagram
+
+```mermaid
+flowchart LR
+ U[User] -->|Discord Client| D[Discord Platform]
+ U -->|Browser| W[Web App]
+
+ D -->|Gateway Events| B[DataDrop Bot]
+ B -->|Commands, role updates, onboarding checks| D
+
+ W -->|JWT-authenticated calls| A[DataDrop Backend API]
+ A --> DB[(PostgreSQL)]
+ B --> DB
+
+ DB --> Q[Dead Letter Queue]
+ Q --> R[Staff Remediation Panel]
+
+ A --> O[Audit and Security Logs]
+ B --> O
+```
+
+## Tenant and Access Flow
+
+```mermaid
+sequenceDiagram
+ participant User
+ participant Web as Web App
+ participant Discord as Discord OAuth API
+ participant API as Backend API
+ participant DB as PostgreSQL
+
+ User->>Web: Login with Discord
+ Web->>Discord: OAuth exchange
+ Discord-->>Web: user identity + guild list
+ Web->>API: fetch guilds known by DataDrop for user
+ API->>DB: read guild memberships and roles
+ DB-->>API: guilds from platform scope
+ API-->>Web: intersection list for guild selector
+ User->>Web: select guild
+ Web->>API: request guild context
+ API->>DB: action-time authorization check
+ DB-->>API: allowed or denied
+ API-->>Web: scoped response
+```
+
+## Cross-Entrypoint Consistency
+
+Design rule:
+
+- Bot and API writes use strict optimistic locking
+- Transition preconditions include expected state and expected version
+- Conflict retries are bounded
+- Retry exhaustion creates dead-letter records
+
+## Source Notes
+
+For Discord gateway and member update semantics, see [Discord API and Discord.js Sources](discord-sources.md).
diff --git a/docs/specs/bpmn-lifecycle.md b/docs/specs/bpmn-lifecycle.md
new file mode 100644
index 0000000..62aa2a5
--- /dev/null
+++ b/docs/specs/bpmn-lifecycle.md
@@ -0,0 +1,47 @@
+# BPMN-Style Lifecycle Flow
+
+This document captures the intended operational flow for onboarding, eligibility, rules acceptance, verification, and admin override handling.
+
+## Flow Diagram
+
+```mermaid
+flowchart TD
+ A[Member joins guild] --> B[Discord onboarding starts]
+ B --> C{Onboarding completed?}
+ C -->|No| B
+ C -->|Yes| D[Eligibility evaluation from roles and rules]
+
+ D --> E{Eligible?}
+ E -->|No| X[RejectedNotEligible]
+ E -->|Yes| F[RulesAccepted]
+
+ F --> G[VerificationPending]
+ G --> H{Verification success?}
+ H -->|Code verified| I[Verified]
+ H -->|Admin implicit verification valid| I
+ H -->|Deadline exceeded| J[Kicked or Rejected]
+
+ G --> K{Admin implicit verification request}
+ K -->|State != VerificationPending| L[Hard reject override]
+ K -->|Email missing| M[Hard fail override]
+ K -->|State ok and email present| I
+
+ I --> N{Reverification campaign targeted?}
+ N -->|No| O[Remain Verified]
+ N -->|Yes| P[Return to VerificationPending]
+```
+
+## Rule Highlights
+
+1. Rules acceptance remains per guild because onboarding is a guild-bound Discord flow.
+2. Global verification identity does not bypass guild onboarding acceptance.
+3. Manual implicit verification is constrained to `VerificationPending` and requires email presence.
+4. Historical override does not provide permanent bypass entitlement in future campaigns.
+
+## Discord-Specific Notes
+
+1. Member updates are observed through gateway member update events.
+2. Onboarding and member flags are platform-defined by Discord.
+3. Membership screening and pending semantics are Discord-defined.
+
+Reference all platform-specific semantics through [Discord API and Discord.js Sources](discord-sources.md).
diff --git a/docs/specs/discord-sources.md b/docs/specs/discord-sources.md
new file mode 100644
index 0000000..c55fdb2
--- /dev/null
+++ b/docs/specs/discord-sources.md
@@ -0,0 +1,49 @@
+# Discord API and Discord.js Sources
+
+This file lists the authoritative references used for Discord-specific behavior statements in the documentation.
+
+## Discord API Sources
+
+1. Gateway Events overview
+ - https://docs.discord.com/developers/events/gateway-events
+
+2. Guild Member Update event
+ - https://docs.discord.com/developers/events/gateway-events#guild-member-update
+
+3. Guild Resource and Guild Member object
+ - https://docs.discord.com/developers/resources/guild
+
+4. Guild Member flags including onboarding-related flags
+ - https://docs.discord.com/developers/resources/guild#guild-member-object-guild-member-flags
+
+5. Membership screening `pending` behavior
+ - https://docs.discord.com/developers/resources/guild#membership-screening-object
+
+6. Guild onboarding object and prompts
+ - https://docs.discord.com/developers/resources/guild#guild-onboarding-object
+
+7. Message timestamp formatting in Discord messages
+ - https://docs.discord.com/developers/reference#message-formatting
+
+## Discord.js Sources
+
+1. Discord.js guide and docs entrypoint
+ - https://discord.js.org
+
+2. Events reference including guild member updates
+ - https://discord.js.org/docs/packages/discord.js/main/Events:Enum
+
+3. `GuildMember` structure and role/member fields
+ - https://discord.js.org/docs/packages/discord.js/main/GuildMember:Class
+
+## How to Use These Sources in This Project
+
+1. If a behavior claim depends on Discord platform event semantics, cite a Discord API source above.
+2. If a behavior claim depends on discord.js runtime object shape or event names in code, cite a Discord.js source above.
+3. For ambiguous platform behavior, rely on observed runtime tests in development and document the result in project docs.
+
+## Project-Level GitHub Sources
+
+Repository and issue references are maintained in:
+
+- [GitHub Sources](github-sources.md)
diff --git a/docs/specs/github-sources.md b/docs/specs/github-sources.md
new file mode 100644
index 0000000..7ff7ce3
--- /dev/null
+++ b/docs/specs/github-sources.md
@@ -0,0 +1,136 @@
+# GitHub Sources
+
+This file tracks project-level GitHub sources used in this documentation set.
+
+## Repository
+
+1. DataDrop repository
+ - https://github.com/section-ig/datadrop
+
+## Core Issues
+
+1. Umbrella epic
+ - Issue #93: https://github.com/section-ig/datadrop/issues/93
+
+2. Web interface scope reference
+ - Issue #91: https://github.com/section-ig/datadrop/issues/91
+
+3. Global one-time verification identity across guilds
+ - Issue #128: https://github.com/Section-IG/DataDrop/issues/128
+
+4. Per-guild onboarding and rules acceptance for globally verified users
+ - Issue #129: https://github.com/Section-IG/DataDrop/issues/129
+
+5. Global email uniqueness and duplicate-email conflict handling
+ - Issue #130: https://github.com/Section-IG/DataDrop/issues/130
+
+6. Guard manual implicit verification transitions
+ - Issue #131: https://github.com/Section-IG/DataDrop/issues/131
+
+7. Strict optimistic locking with bounded retries for transition writes
+ - Issue #132: https://github.com/Section-IG/DataDrop/issues/132
+
+8. Reverification campaigns with cohort filters and no historical override bypass
+ - Issue #133: https://github.com/Section-IG/DataDrop/issues/133
+
+9. Yearly reset dry-run summary and explicit confirmation
+ - Issue #134: https://github.com/Section-IG/DataDrop/issues/134
+
+10. Persist config create/update audit trail
+ - Issue #135: https://github.com/Section-IG/DataDrop/issues/135
+
+11. Stale-write detection and superseded update deprecation for guild config
+ - Issue #136: https://github.com/Section-IG/DataDrop/issues/136
+
+12. Self-serve data deletion and account deactivation
+ - Issue #137: https://github.com/Section-IG/DataDrop/issues/137
+
+13. Evidence retention with userId linkage and pseudonymization
+ - Issue #138: https://github.com/Section-IG/DataDrop/issues/138
+
+14. p95 under 500ms SLO instrumentation and alerting
+ - Issue #139: https://github.com/Section-IG/DataDrop/issues/139
+
+15. Dead-letter queue and remediation workflow for failed transitions
+ - Issue #140: https://github.com/Section-IG/DataDrop/issues/140
+
+## Feature List Issues (from issue board snapshot)
+
+1. Issue #94
+ - https://github.com/section-ig/datadrop/issues/94
+2. Issue #92
+ - https://github.com/section-ig/datadrop/issues/92
+3. Issue #90
+ - https://github.com/section-ig/datadrop/issues/90
+4. Issue #89
+ - https://github.com/section-ig/datadrop/issues/89
+5. Issue #88
+ - https://github.com/section-ig/datadrop/issues/88
+6. Issue #87
+ - https://github.com/section-ig/datadrop/issues/87
+7. Issue #86
+ - https://github.com/section-ig/datadrop/issues/86
+8. Issue #85
+ - https://github.com/section-ig/datadrop/issues/85
+9. Issue #84
+ - https://github.com/section-ig/datadrop/issues/84
+10. Issue #83
+ - https://github.com/section-ig/datadrop/issues/83
+11. Issue #82
+ - https://github.com/section-ig/datadrop/issues/82
+12. Issue #81
+ - https://github.com/section-ig/datadrop/issues/81
+13. Issue #80
+ - https://github.com/section-ig/datadrop/issues/80
+14. Issue #79
+ - https://github.com/section-ig/datadrop/issues/79
+15. Issue #78
+ - https://github.com/section-ig/datadrop/issues/78
+16. Issue #77
+ - https://github.com/section-ig/datadrop/issues/77
+17. Issue #76
+ - https://github.com/section-ig/datadrop/issues/76
+18. Issue #75
+ - https://github.com/section-ig/datadrop/issues/75
+19. Issue #74
+ - https://github.com/section-ig/datadrop/issues/74
+20. Issue #73
+ - https://github.com/section-ig/datadrop/issues/73
+21. Issue #72
+ - https://github.com/section-ig/datadrop/issues/72
+22. Issue #71
+ - https://github.com/section-ig/datadrop/issues/71
+23. Issue #70
+ - https://github.com/section-ig/datadrop/issues/70
+24. Issue #69
+ - https://github.com/section-ig/datadrop/issues/69
+25. Issue #68
+ - https://github.com/section-ig/datadrop/issues/68
+26. Issue #67
+ - https://github.com/section-ig/datadrop/issues/67
+
+## Specification Coverage Status
+
+Current status of specification areas previously tracked as draft-backed issue gaps:
+
+1. None currently
+
+Created from draft backlog:
+
+1. DRAFT-02 -> Issue #128: https://github.com/Section-IG/DataDrop/issues/128
+2. DRAFT-01 -> Issue #129: https://github.com/Section-IG/DataDrop/issues/129
+3. DRAFT-03 -> Issue #130: https://github.com/Section-IG/DataDrop/issues/130
+4. DRAFT-04 -> Issue #131: https://github.com/Section-IG/DataDrop/issues/131
+5. DRAFT-13 -> Issue #132: https://github.com/Section-IG/DataDrop/issues/132
+6. DRAFT-05 -> Issue #133: https://github.com/Section-IG/DataDrop/issues/133
+7. DRAFT-06 -> Issue #134: https://github.com/Section-IG/DataDrop/issues/134
+8. DRAFT-07 -> Issue #135: https://github.com/Section-IG/DataDrop/issues/135
+9. DRAFT-08 -> Issue #136: https://github.com/Section-IG/DataDrop/issues/136
+10. DRAFT-09 -> Issue #137: https://github.com/Section-IG/DataDrop/issues/137
+11. DRAFT-10 -> Issue #138: https://github.com/Section-IG/DataDrop/issues/138
+12. DRAFT-11 -> Issue #139: https://github.com/Section-IG/DataDrop/issues/139
+13. DRAFT-12 -> Issue #140: https://github.com/Section-IG/DataDrop/issues/140
+
+Cross-reference:
+
+- [Strict Traceability Matrix](traceability-matrix.md)
diff --git a/docs/specs/issue-93-specification.md b/docs/specs/issue-93-specification.md
new file mode 100644
index 0000000..a706ac7
--- /dev/null
+++ b/docs/specs/issue-93-specification.md
@@ -0,0 +1,361 @@
+# Issue 93 Specification
+
+## Purpose
+
+Issue 93 is the umbrella epic for:
+
+- Bot refactor
+- Web app delivery
+
+GitHub source links:
+
+- Repository: https://github.com/section-ig/datadrop
+- Issue #93: https://github.com/section-ig/datadrop/issues/93
+- Issue #91 (web interface scope reference): https://github.com/section-ig/datadrop/issues/91
+
+Priority order:
+
+1. Bot refactor first
+2. Web app can ship partially
+
+## MVP Definition (Non-Negotiable)
+
+MVP is done when all of the following are true:
+
+1. Bot is multi-tenant
+2. Verification is mandatory
+3. BPMN flow is enforced
+4. Start-of-year reset and announcement automation is available
+5. Before yearly reset, admins are prompted to validate or update year settings
+
+Settings requested before yearly reset include at minimum:
+
+- Year start date
+- Number of years
+- Number of groups per year
+
+These settings remain editable at any time.
+
+## Tenant Model
+
+- Tenant key is `guildId` everywhere.
+- Web app guild selection is based on intersection:
+ - guilds known by DataDrop in database
+ - guilds returned by Discord OAuth identity
+
+Ban appeal uses a separate flow because banned members are no longer in a guild member list.
+
+## Authorization Model
+
+Authorization is dual-layered:
+
+1. Login-time role-aware UI shaping
+2. Action-time permission re-check on every privileged operation
+
+## Identity and Verification
+
+Identity anchor:
+
+- Discord `userId` is canonical identity key
+
+Metadata only:
+
+- Username and discriminator changes
+
+Verification model:
+
+1. Discord OAuth only
+2. Verification required to continue platform usage
+3. Verification can be executed in web app
+4. Verification is one-time global across all guilds using DataDrop
+5. Per-guild onboarding and rules acceptance still required by Discord guild flow
+
+Email uniqueness rule:
+
+- Henallux email is globally unique per person
+- Duplicate email attempt on another Discord account is denied and staff-notified
+- If a student becomes teacher and receives new email, reverification uses the new email
+
+## State and Override Rules
+
+Manual implicit verification by admin:
+
+1. Allowed only from `VerificationPending`
+2. Hard reject in any other state
+3. Hard fail if user email is missing
+4. Successful path is `VerificationPending -> Verified`
+5. Treated as point-in-time override only
+6. Historical override does not imply future bypass in reverification campaigns
+
+Reverification campaigns:
+
+- Targeted cohorts by filters are required
+- Includes cohorts such as manually overridden users and date-based cohorts
+
+## Discord Access Enforcement
+
+- Enforcement is channel and role gating
+- Not auto-kick for unverified users by default
+
+## Start-of-Year Reset
+
+Required behavior:
+
+1. Bot prompts admin for updated configuration ahead of reset window
+2. Dry-run summary is generated
+3. Explicit admin confirmation is required
+4. Reset is applied and announcement is posted automatically
+
+## Config Management
+
+1. Redesign now and map current JSON config keys to database model
+2. No built-in config versioning requirement
+3. Create and update audit is mandatory
+4. Rollback is manual only
+5. Stale-write protection is required for concurrent updates
+
+Stale-write behavior:
+
+- User who submits outdated config is informed
+- Superseded submission is marked deprecated
+
+## Ban Appeal
+
+1. Appeal identity is strictly Discord `userId`
+2. User authenticates through Discord OAuth
+3. Reviewer set is admins, owner, and configurable reviewer roles
+4. Outcomes are `unban` or `reject`
+5. No rate limit requirement
+
+## Data Deletion and Deactivation
+
+User actions are self-serve and distinct:
+
+1. Delete my data
+2. Deactivate account
+
+Common retention behavior:
+
+- Soft delete first
+- 6-month grace period
+- Hard delete after inactivity window
+
+Evidence retention after hard delete:
+
+- Keep moderation evidence
+- Keep audit and security events
+- Keep userId linkage
+- Also include pseudonymization
+
+Deactivation access rule:
+
+- Login blocked for rolling 24 hours
+
+## Performance and Reliability
+
+1. Bot is continuous background event process
+2. Performance target is p95 under 500ms
+3. Dead-letter queue required for transition failures
+4. Staff remediation panel required
+
+Concurrency model:
+
+1. Strict optimistic locking with retry
+2. Transition writes include expected state and version preconditions
+3. Bounded retries on conflict
+4. Dead-letter after retry exhaustion
+
+## Source Traceability
+
+Any Discord API or Discord.js behavior in this document is backed by:
+
+- [Discord API and Discord.js Sources](discord-sources.md)
+
+Project issue and repository references are tracked in:
+
+- [GitHub Sources](github-sources.md)
+
+Rule-by-rule traceability and linked implementation issues are tracked in:
+
+- [Strict Traceability Matrix](traceability-matrix.md)
+
+## Updated Issue #93 Description (Ready to Paste)
+
+Issue #93 is the umbrella epic for the DataDrop bot refactor and web app delivery.
+
+Implementation priority:
+
+1. Stabilize platform and data layer first
+2. Enforce identity and verification rules second
+3. Deliver admin configuration capabilities third
+4. Deliver user-facing flows and analytics after the core is stable
+
+### Ordered Implementation Plan
+
+Phase 0: Delivery and persistence foundation
+
+1. #104 Deployment pipeline always fails
+2. #111 Change ORM to Prisma
+3. #71 The bot should log everything
+
+Phase 1: Concurrency, auditability, reliability, and SLOs
+
+1. #135 Persist config create/update audit trail
+2. #136 Implement stale-write detection and superseded update deprecation for guild config
+3. #132 Enforce strict optimistic locking with bounded retries for transition writes
+4. #140 Implement dead-letter queue and remediation workflow for failed transitions
+5. #139 Implement p95 under 500ms SLO instrumentation and alerting
+
+Phase 2: Identity and verification lifecycle
+
+1. #128 Implement global one-time verification identity across all DataDrop guilds
+2. #130 Enforce global Henallux email uniqueness with staff alert on duplicate usage
+3. #131 Guard manual implicit verification to VerificationPending with mandatory email check
+4. #129 Enforce per-guild onboarding and rules acceptance even for globally verified users
+5. #133 Add reverification campaigns with cohort filters and no historical override bypass
+
+Phase 3: Admin configuration (role and channel governance)
+
+1. #90 Configure admin role
+2. #89 Configure announcement channel
+3. #88 Configure number of years
+4. #87 Configure number of classes/groups per year
+5. #84 Configure grant-roles channel
+6. #85 Configure general roles
+7. #86 Configure role definitions (name, color, etc.)
+8. #92 Configure through Discord commands
+9. #91 Configure through web interface
+
+Phase 4: Compliance and user lifecycle
+
+1. #137 Self-serve data deletion and account deactivation with rolling 24h login block
+2. #138 Retain moderation and audit evidence with userId linkage and pseudonymization
+3. #77 User can contact guild staff by private message to the bot
+4. #68 User can appeal guild ban through web interface
+
+Phase 5: Automation, provisioning, and insights
+
+1. #72 Automatic start-of-year announcement and yearly update campaign
+2. #70 Generate server from saved guild configuration
+3. #74 Read access to guild statistics
+4. #73 Read access to dynamic leaderboard
+5. #69 Additional user feature from the feature board
+6. #94 Additional feature-list item tracked by epic
+
+### Role and Target Categorization
+
+Admin features
+
+- Bot target: #92, #90, #89, #88, #87, #86, #85, #84, #72, #71, #70
+- Web app target: #91
+- Shared bot and web target: #111, #135, #136
+
+Bot owner features
+
+- Bot target: #81 (completed), #80 (completed)
+- Platform target (ops): #104, #139, #140
+
+User features
+
+- Bot target: #77, #74, #73, #69
+- Web app target: #68, #94
+- Shared bot and web target: #128, #129, #130, #131, #133, #137, #138
+- Already completed user features: #79, #78, #76, #75, #67
+
+Feature-list items already completed in the admin bucket
+
+- #83 (completed)
+- #82 (completed)
+
+### Notes
+
+- #93 remains tracking-only and should be updated as a checklist/progress board.
+- #104 and #111 are hard prerequisites for predictable delivery speed and safe implementation of later phases.
+- #132 and #140 should be treated as a pair: conflict policy first, failure handling immediately after.
+
+## Issue #93 Checkbox Board Format (GitHub-Ready)
+
+Use this block directly in Issue #93.
+
+```md
+# Issue #93 - DataDrop Umbrella Epic
+
+This issue tracks bot refactor and web app delivery.
+
+Implementation priority:
+1. Stabilize platform and data layer first
+2. Enforce identity and verification rules second
+3. Deliver admin configuration capabilities third
+4. Deliver user-facing flows and analytics after the core is stable
+
+## Phase 0 - Delivery and persistence foundation
+
+- [ ] #104 Deployment pipeline always fails
+- [ ] #111 Change ORM to Prisma
+- [ ] #71 The bot should log everything
+
+## Phase 1 - Concurrency, auditability, reliability, and SLOs
+
+- [ ] #135 Persist config create/update audit trail
+- [ ] #136 Implement stale-write detection and superseded update deprecation for guild config
+- [ ] #132 Enforce strict optimistic locking with bounded retries for transition writes
+- [ ] #140 Implement dead-letter queue and remediation workflow for failed transitions
+- [ ] #139 Implement p95 under 500ms SLO instrumentation and alerting
+
+## Phase 2 - Identity and verification lifecycle
+
+- [ ] #128 Implement global one-time verification identity across all DataDrop guilds
+- [ ] #130 Enforce global Henallux email uniqueness with staff alert on duplicate usage
+- [ ] #131 Guard manual implicit verification to VerificationPending with mandatory email check
+- [ ] #129 Enforce per-guild onboarding and rules acceptance even for globally verified users
+- [ ] #133 Add reverification campaigns with cohort filters and no historical override bypass
+
+## Phase 3 - Admin configuration (role and channel governance)
+
+- [ ] #90 Configure admin role
+- [ ] #89 Configure announcement channel
+- [ ] #88 Configure number of years
+- [ ] #87 Configure number of classes/groups per year
+- [ ] #84 Configure grant-roles channel
+- [ ] #85 Configure general roles
+- [ ] #86 Configure role definitions (name, color, etc.)
+- [ ] #92 Configure through Discord commands
+- [ ] #91 Configure through web interface
+
+## Phase 4 - Compliance and user lifecycle
+
+- [ ] #137 Self-serve data deletion and account deactivation with rolling 24h login block
+- [ ] #138 Retain moderation and audit evidence with userId linkage and pseudonymization
+- [ ] #77 User can contact guild staff by private message to the bot
+- [ ] #68 User can appeal guild ban through web interface
+
+## Phase 5 - Automation, provisioning, and insights
+
+- [ ] #72 Automatic start-of-year announcement and yearly update campaign
+- [ ] #74 Read access to guild statistics
+- [ ] #73 Read access to dynamic leaderboard
+
+## Role and target categorization
+
+### Admin features
+
+- Bot target: #92, #90, #89, #88, #87, #86, #85, #84, #72, #71
+- Web app target: #91
+- Shared bot and web target: #111, #135, #136
+
+### Bot owner features
+
+- Platform target (ops): #104, #139, #140
+
+### User features
+
+- Bot target: #77, #74, #73
+- Web app target: #68
+- Shared bot and web target: #128, #129, #130, #131, #133, #137, #138
+
+## Tracking notes
+
+- #93 stays tracking-only.
+- #104 and #111 are prerequisites for predictable delivery.
+- #132 and #140 should be implemented as a reliability pair.
+```
diff --git a/docs/specs/mvp-scope.md b/docs/specs/mvp-scope.md
new file mode 100644
index 0000000..d91d3cd
--- /dev/null
+++ b/docs/specs/mvp-scope.md
@@ -0,0 +1,34 @@
+# MVP Scope
+
+## In Scope
+
+1. Multi-tenant behavior keyed by `guildId`.
+2. Mandatory verification flow integrated with lifecycle state machine.
+3. BPMN-aligned transition enforcement.
+4. Start-of-year automation:
+ - pre-reset admin prompt for settings
+ - dry-run summary
+ - explicit confirmation
+ - role reset and announcement
+5. Config redesign path from JSON toward database model.
+6. Core operational safety:
+ - optimistic locking with retry
+ - dead-letter queue
+ - remediation visibility for staff
+
+## Out of Scope for MVP (Later)
+
+1. discord-mailbox integration
+2. member statistics portal
+3. guild-wide statistics dashboards
+4. public or private leaderboards
+5. ban appeal web workflow
+
+## Acceptance Criteria
+
+1. A new guild can be onboarded without code changes.
+2. Unverified users remain gated from protected channels and capabilities.
+3. Manual override constraints are enforced by guard rules.
+4. Yearly reset can be executed safely with admin confirmation.
+5. Transition conflicts are handled without inconsistent state.
+6. p95 latency target under 500ms is met for core operations.
diff --git a/docs/specs/non-mvp-roadmap.md b/docs/specs/non-mvp-roadmap.md
new file mode 100644
index 0000000..68cc2c8
--- /dev/null
+++ b/docs/specs/non-mvp-roadmap.md
@@ -0,0 +1,22 @@
+# Non-MVP Roadmap
+
+## Planned Features After MVP
+
+1. Ban appeal workflow in web app
+2. Member personal stats
+3. Guild analytics
+4. Leaderboards with role-based exclusions
+5. discord-mailbox and staff communication workflows
+
+## Suggested Delivery Order
+
+1. Ban appeal and reviewer workflow
+2. Member and guild telemetry endpoints
+3. Leaderboard rendering and filters
+4. Communication workflows
+
+## Dependency Notes
+
+1. Ban appeal depends on persistent ban identity model keyed by `guildId + userId`.
+2. Stats and leaderboards depend on stable telemetry ingestion and UTC storage conventions.
+3. Web admin features depend on final config schema migration to database.
diff --git a/docs/specs/state-machine.md b/docs/specs/state-machine.md
new file mode 100644
index 0000000..934b304
--- /dev/null
+++ b/docs/specs/state-machine.md
@@ -0,0 +1,70 @@
+# Membership State Machine
+
+## Canonical Lifecycle
+
+```mermaid
+stateDiagram-v2
+ [*] --> InvitedOrJoined
+ InvitedOrJoined --> OnboardingInProgress
+ OnboardingInProgress --> OnboardingCompleted
+ OnboardingCompleted --> RoleEligible
+ RoleEligible --> RulesAccepted
+ RulesAccepted --> VerificationPending
+ VerificationPending --> Verified
+
+ VerificationPending --> RejectedNotEligible
+ VerificationPending --> Kicked
+ VerificationPending --> LeftGuild
+ VerificationPending --> Banned
+
+ Verified --> LeftGuild
+ Verified --> Banned
+
+ RejectedNotEligible --> [*]
+ Kicked --> [*]
+ LeftGuild --> [*]
+ Banned --> [*]
+```
+
+## Critical Guard Rules
+
+1. Admin implicit verification transition is valid only from `VerificationPending`.
+2. Admin implicit verification must hard fail if email is missing.
+3. Successful manual implicit verification transition is only `VerificationPending -> Verified`.
+4. Historical manual override does not grant bypass in future reverification waves.
+5. Per-guild onboarding and rules acceptance remain mandatory even when user is globally verified.
+
+## Transition Control
+
+Every transition must include:
+
+1. Expected current state
+2. Expected aggregate version
+3. Idempotency key
+4. Transition source
+5. Reason code
+
+## Reconciliation Model
+
+```mermaid
+flowchart TD
+ E[Event arrives from Bot or API] --> P[Load member aggregate]
+ P --> C{Expected state and version match?}
+ C -->|Yes| T[Apply transition]
+ T --> W[Write transition ledger + snapshot]
+ C -->|No| R[Reload and retry]
+ R --> B{Retry budget exceeded?}
+ B -->|No| C
+ B -->|Yes| D[Write dead-letter record]
+ D --> S[Show in remediation panel]
+```
+
+## Notes on Discord Signals
+
+- `GUILD_MEMBER_UPDATE` is treated as an input signal, not sole source of truth.
+- Role and flag deltas can trigger reconciliation runs.
+- No assumption is made that onboarding reruns always produce unique onboarding-specific flags changes.
+
+## Source Notes
+
+For member update events, pending behavior, and member flags, see [Discord API and Discord.js Sources](discord-sources.md).
diff --git a/docs/specs/traceability-matrix.md b/docs/specs/traceability-matrix.md
new file mode 100644
index 0000000..ed26e0c
--- /dev/null
+++ b/docs/specs/traceability-matrix.md
@@ -0,0 +1,84 @@
+# Strict Traceability Matrix
+
+This matrix maps each accepted rule to:
+
+1. Source specification section
+2. GitHub issue link when available
+3. Implementation target
+4. Validation target
+
+If no issue exists yet, the traceability row must point to an explicit GitHub issue that is still pending implementation.
+
+## Matrix
+
+| Rule ID | Rule | Source | GitHub Issue | Coverage | Implementation Target | Validation Target |
+|---|---|---|---|---|---|---|
+| TRC-001 | Issue 93 is umbrella epic for bot refactor and web app | issue-93-specification.md / Purpose | https://github.com/section-ig/datadrop/issues/93 | Existing | Planning and milestone docs under docs/specs | Release checklist by epic gates |
+| TRC-002 | Bot refactor has higher priority, web app can ship partially | issue-93-specification.md / Purpose | https://github.com/section-ig/datadrop/issues/93 | Existing | Delivery sequencing in docs/specs/mvp-scope.md and docs/specs/non-mvp-roadmap.md | Milestone scope audit |
+| TRC-003 | Multi-tenant model keyed by guildId | issue-93-specification.md / Tenant Model | https://github.com/section-ig/datadrop/issues/93 | Partial | src/models/Configuration.ts, src/services/PrismaDatabaseService.ts, prisma/schema.prisma | Integration tests for tenant isolation |
+| TRC-004 | Mandatory verification flow for platform access | issue-93-specification.md / Identity and Verification | https://github.com/section-ig/datadrop/issues/67 | Partial | src/events/interactionCreate.ts, src/events/guildMemberAdd.ts, src/datadrop.ts | End-to-end verification flow tests |
+| TRC-005 | Per-guild onboarding and rules acceptance still mandatory | issue-93-specification.md / Identity and Verification | https://github.com/Section-IG/DataDrop/issues/129 | Existing | src/events/interactionCreate.ts, src/events/guildMemberAdd.ts, src/services/CommandHandler.ts | Scenario tests: globally verified but not guild-onboarded |
+| TRC-006 | Global one-time verification across all servers using bot | issue-93-specification.md / Identity and Verification | https://github.com/Section-IG/DataDrop/issues/128 | Existing | prisma/schema.prisma, src/services/PrismaDatabaseService.ts, src/models/User.ts | Cross-guild identity tests |
+| TRC-007 | Email uniqueness and duplicate-email staff notification | issue-93-specification.md / Identity and Verification | https://github.com/Section-IG/DataDrop/issues/130 | Existing | src/events/interactionCreate.ts, src/services/PrismaDatabaseService.ts, src/commands/admins/announce.ts | Duplicate verification conflict tests |
+| TRC-008 | Admin implicit verification only from VerificationPending | issue-93-specification.md / State and Override Rules | https://github.com/Section-IG/DataDrop/issues/131 | Existing | src/events/interactionCreate.ts, src/services/PrismaDatabaseService.ts | State-guard unit tests |
+| TRC-009 | Admin implicit verification fails if email missing | issue-93-specification.md / State and Override Rules | https://github.com/Section-IG/DataDrop/issues/131 | Existing | src/events/interactionCreate.ts, src/services/PrismaDatabaseService.ts | Command failure-path tests |
+| TRC-010 | Historical manual override does not auto-bypass future reverification | issue-93-specification.md / State and Override Rules | https://github.com/Section-IG/DataDrop/issues/133 | Existing | prisma/schema.prisma, src/services/PrismaDatabaseService.ts | Reverification campaign tests |
+| TRC-011 | Reverification supports targeted cohorts by filters | issue-93-specification.md / State and Override Rules | https://github.com/Section-IG/DataDrop/issues/133 | Existing | New admin command module under src/commands/admins, db query layer in src/services/PrismaDatabaseService.ts | Cohort filter integration tests |
+| TRC-012 | Discord access blocked by role/channel gating for unverified users | issue-93-specification.md / Discord Access Enforcement | https://github.com/section-ig/datadrop/issues/75 | Partial | src/events/guildMemberAdd.ts, src/events/interactionCreate.ts, src/datadrop.ts | Permission and channel visibility tests |
+| TRC-013 | Start-of-year reset with admin pre-check prompt | issue-93-specification.md / Start-of-Year Reset | https://github.com/section-ig/datadrop/issues/72 | Partial | src/events/clientReady.ts, new scheduler service under src/services | Scheduled workflow tests |
+| TRC-014 | Year reset requires dry-run summary and explicit confirmation | issue-93-specification.md / Start-of-Year Reset | https://github.com/Section-IG/DataDrop/issues/134 | Existing | New admin command(s) under src/commands/admins, scheduler service under src/services | Dry-run confirmation flow tests |
+| TRC-015 | Config redesign from JSON to DB model | issue-93-specification.md / Config Management | https://github.com/section-ig/datadrop/issues/91 | Partial | src/config.ts, src/models/Configuration.ts, prisma/schema.prisma | Migration and fallback tests |
+| TRC-016 | Config create/update audit is mandatory | issue-93-specification.md / Config Management | https://github.com/Section-IG/DataDrop/issues/135 | Existing | prisma/schema.prisma, src/services/PrismaDatabaseService.ts, admin command handlers | Audit log assertion tests |
+| TRC-017 | Stale-write detection and deprecation of superseded config submit | issue-93-specification.md / Config Management | https://github.com/Section-IG/DataDrop/issues/136 | Existing | src/services/PrismaDatabaseService.ts, admin config command handlers | Concurrency update tests |
+| TRC-018 | Ban appeal is OAuth, strict by Discord userId, with reviewer roles | issue-93-specification.md / Ban Appeal | https://github.com/section-ig/datadrop/issues/68 | Existing (future) | Web app and API modules (to be created), moderation persistence in prisma/schema.prisma | Appeal identity and reviewer authorization tests |
+| TRC-019 | Outcomes for ban appeal are unban or reject only | issue-93-specification.md / Ban Appeal | https://github.com/section-ig/datadrop/issues/68 | Existing (future) | Web app/API moderation workflows (to be created) | Decision outcome tests |
+| TRC-020 | Self-serve delete-data and deactivate-account with distinct semantics | issue-93-specification.md / Data Deletion and Deactivation | https://github.com/Section-IG/DataDrop/issues/137 | Existing | New API endpoints (to be created), src/services/PrismaDatabaseService.ts, prisma/schema.prisma | Compliance flow tests |
+| TRC-021 | Soft delete then hard delete after 6 months inactivity | issue-93-specification.md / Data Deletion and Deactivation | Existing behavior partially in https://github.com/section-ig/datadrop/issues/93 | Partial | src/services/PrismaDatabaseService.ts, prisma/schema.prisma | Retention scheduler tests |
+| TRC-022 | Keep audit and moderation evidence with userId linkage plus pseudonymization | issue-93-specification.md / Data Deletion and Deactivation | https://github.com/Section-IG/DataDrop/issues/138 | Existing | New evidence retention model in prisma/schema.prisma and API (to be created) | Evidence retention tests |
+| TRC-023 | Deactivation blocks login for rolling 24h | issue-93-specification.md / Data Deletion and Deactivation | https://github.com/Section-IG/DataDrop/issues/137 | Existing | Web auth API (to be created), token/session middleware (to be created) | Auth gate tests |
+| TRC-024 | Performance SLO is p95 under 500ms | issue-93-specification.md / Performance and Reliability | https://github.com/Section-IG/DataDrop/issues/139 | Existing | Runtime instrumentation in bot and API (to be created) | SLO dashboards and load tests |
+| TRC-025 | Dead-letter queue and staff remediation panel for failures | issue-93-specification.md / Performance and Reliability | https://github.com/Section-IG/DataDrop/issues/140 | Existing | New queue/error subsystem (to be created), admin panel integration (to be created) | Fault injection tests |
+| TRC-026 | Strict optimistic locking with bounded retries for bot/API races | issue-93-specification.md / Performance and Reliability | https://github.com/Section-IG/DataDrop/issues/132 | Existing | src/services/PrismaDatabaseService.ts, prisma/schema.prisma, API write handlers (to be created) | Concurrency race tests |
+| TRC-027 | Web app uses Discord OAuth and JWT for backend API access | issue-93-specification.md / Identity and Verification; Security and Compliance | https://github.com/section-ig/datadrop/issues/91 | Partial | Web auth/API modules (to be created) | OAuth and JWT security tests |
+| TRC-028 | Stats and leaderboards are post-MVP with Discord plus telemetry sources | issue-93-specification.md / Data + non-mvp-roadmap.md | https://github.com/section-ig/datadrop/issues/73 and https://github.com/section-ig/datadrop/issues/74 | Existing (future) | Telemetry ingestion and reporting services (to be created) | Stats accuracy tests |
+
+## Strict Rules for Future Spec Changes
+
+1. No new rule may be accepted without a traceability row.
+2. Every row must include either an existing GitHub issue link or an issue draft reference.
+3. Every row must define at least one implementation target and one validation target.
+
+## Feature Request Coverage Map
+
+This map ensures known repository feature requests are traceable to spec scope and delivery phase.
+
+| Issue | Link | Traceability Status | Spec Mapping |
+|---|---|---|---|
+| #67 | https://github.com/section-ig/datadrop/issues/67 | Traced | issue-93-specification.md / Identity and Verification |
+| #68 | https://github.com/section-ig/datadrop/issues/68 | Traced | issue-93-specification.md / Ban Appeal |
+| #69 | https://github.com/section-ig/datadrop/issues/69 | Traced | non-mvp-roadmap.md / Planned Features |
+| #70 | https://github.com/section-ig/datadrop/issues/70 | Traced | non-mvp-roadmap.md / Dependency Notes |
+| #71 | https://github.com/section-ig/datadrop/issues/71 | Traced | issue-93-specification.md / Performance and Reliability |
+| #72 | https://github.com/section-ig/datadrop/issues/72 | Traced | issue-93-specification.md / Start-of-Year Reset |
+| #73 | https://github.com/section-ig/datadrop/issues/73 | Traced | non-mvp-roadmap.md / Planned Features |
+| #74 | https://github.com/section-ig/datadrop/issues/74 | Traced | non-mvp-roadmap.md / Planned Features |
+| #75 | https://github.com/section-ig/datadrop/issues/75 | Traced | issue-93-specification.md / Discord Access Enforcement |
+| #76 | https://github.com/section-ig/datadrop/issues/76 | Traced | issue-93-specification.md / Identity and Verification |
+| #77 | https://github.com/section-ig/datadrop/issues/77 | Traced | non-mvp-roadmap.md / Planned Features |
+| #78 | https://github.com/section-ig/datadrop/issues/78 | Traced | non-mvp-roadmap.md / Planned Features |
+| #79 | https://github.com/section-ig/datadrop/issues/79 | Traced | non-mvp-roadmap.md / Planned Features |
+| #80 | https://github.com/section-ig/datadrop/issues/80 | Traced | non-mvp-roadmap.md / Suggested Delivery Order |
+| #81 | https://github.com/section-ig/datadrop/issues/81 | Traced | issue-93-specification.md / Tenant Model and Config Management |
+| #82 | https://github.com/section-ig/datadrop/issues/82 | Traced | issue-93-specification.md / Start-of-Year Reset |
+| #83 | https://github.com/section-ig/datadrop/issues/83 | Traced | issue-93-specification.md / Config Management |
+| #84 | https://github.com/section-ig/datadrop/issues/84 | Traced | issue-93-specification.md / Config Management |
+| #85 | https://github.com/section-ig/datadrop/issues/85 | Traced | issue-93-specification.md / Config Management |
+| #86 | https://github.com/section-ig/datadrop/issues/86 | Traced | issue-93-specification.md / Config Management |
+| #87 | https://github.com/section-ig/datadrop/issues/87 | Traced | issue-93-specification.md / Start-of-Year Reset and Config Management |
+| #88 | https://github.com/section-ig/datadrop/issues/88 | Traced | issue-93-specification.md / Start-of-Year Reset and Config Management |
+| #89 | https://github.com/section-ig/datadrop/issues/89 | Traced | issue-93-specification.md / Start-of-Year Reset |
+| #90 | https://github.com/section-ig/datadrop/issues/90 | Traced | issue-93-specification.md / Authorization Model |
+| #91 | https://github.com/section-ig/datadrop/issues/91 | Traced | issue-93-specification.md / Purpose and Config Management |
+| #92 | https://github.com/section-ig/datadrop/issues/92 | Traced | issue-93-specification.md / Purpose and MVP Scope |
+| #93 | https://github.com/section-ig/datadrop/issues/93 | Traced | issue-93-specification.md / Purpose |
+| #94 | https://github.com/section-ig/datadrop/issues/94 | Traced | non-mvp-roadmap.md / Planned Features |
diff --git a/package.json b/package.json
index a1e1565..324ab7e 100644
--- a/package.json
+++ b/package.json
@@ -3,6 +3,9 @@
"version": "2.1.1",
"type": "module",
"main": "./build/index.js",
+ "prisma": {
+ "seed": "tsx prisma/seed.ts"
+ },
"scripts": {
"cu": "docker compose up --build",
"cd": "docker compose down",
@@ -10,7 +13,8 @@
"build": "rm -rf build/ && tsc",
"deploy:commands": "yarn build && node ./scripts/deploy-commands.cjs",
"lint": "biome check --write index.ts ./src ./scripts",
- "env-gen": "node ./scripts/envgen.cjs"
+ "env-gen": "node ./scripts/envgen.cjs",
+ "prisma": "dotenvx run --convention=nextjs -- prisma"
},
"repository": {
"type": "git",
@@ -23,21 +27,23 @@
},
"homepage": "https://github.com/section-IG/DataDrop#readme",
"dependencies": {
- "@dotenvx/dotenvx": "^1.51.0",
+ "@dotenvx/dotenvx": "^1.71.0",
"@hunteroi/advanced-logger": "^0.2.0",
"@hunteroi/discord-selfrole": "^4.0.5",
"@hunteroi/discord-temp-channels": "^3.3.1",
"@hunteroi/discord-verification": "^1.5.2",
+ "@prisma/client": "^7.8.0",
"discord-sync-commands": "^0.5.2",
- "discord.js": "^14.22.1",
- "nodemailer": "^7.0.6",
- "ts-postgres": "1.3.0"
+ "discord.js": "^14.26.4",
+ "nodemailer": "^8.0.10",
+ "ts-postgres": "2.0.4"
},
"devDependencies": {
- "@biomejs/biome": "^2.2.4",
- "@types/node": "^24.5.2",
- "@types/nodemailer": "^7.0.1",
- "tsx": "^4.20.5",
- "typescript": "^5.9.2"
+ "@biomejs/biome": "^2.4.16",
+ "@types/node": "^25.9.2",
+ "@types/nodemailer": "^8.0.0",
+ "prisma": "^7.8.0",
+ "tsx": "^4.22.4",
+ "typescript": "^6.0.3"
}
}
diff --git a/prisma.config.ts b/prisma.config.ts
new file mode 100644
index 0000000..831a20f
--- /dev/null
+++ b/prisma.config.ts
@@ -0,0 +1,14 @@
+// This file was generated by Prisma, and assumes you have installed the following:
+// npm install --save-dev prisma dotenv
+import "dotenv/config";
+import { defineConfig } from "prisma/config";
+
+export default defineConfig({
+ schema: "prisma/schema.prisma",
+ migrations: {
+ path: "prisma/migrations",
+ },
+ datasource: {
+ url: process.env["DATABASE_URL"],
+ },
+});
diff --git a/prisma/README.md b/prisma/README.md
new file mode 100644
index 0000000..03f2cd4
--- /dev/null
+++ b/prisma/README.md
@@ -0,0 +1,2 @@
+`yarn prisma migrate resolve --applied 0_init --preview-feature`
+or `yarn prisma migrate dev`
diff --git a/prisma/migrations/0_init/migration.sql b/prisma/migrations/0_init/migration.sql
new file mode 100644
index 0000000..264b255
--- /dev/null
+++ b/prisma/migrations/0_init/migration.sql
@@ -0,0 +1,60 @@
+-- CreateSchema
+CREATE SCHEMA IF NOT EXISTS "cron";
+
+-- CreateSchema
+CREATE SCHEMA IF NOT EXISTS "public";
+
+-- CreateExtension
+CREATE EXTENSION IF NOT EXISTS "pg_cron";
+
+-- CreateTable
+CREATE TABLE "cron"."job" (
+ "jobid" BIGSERIAL NOT NULL,
+ "schedule" TEXT NOT NULL,
+ "command" TEXT NOT NULL,
+ "nodename" TEXT NOT NULL DEFAULT 'localhost',
+ "nodeport" INTEGER NOT NULL DEFAULT inet_server_port(),
+ "database" TEXT NOT NULL DEFAULT current_database(),
+ "username" TEXT NOT NULL DEFAULT CURRENT_USER,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "jobname" TEXT,
+ CONSTRAINT "job_pkey" PRIMARY KEY ("jobid")
+);
+
+-- CreateTable
+CREATE TABLE "cron"."job_run_details" (
+ "jobid" BIGINT,
+ "runid" BIGSERIAL NOT NULL,
+ "job_pid" INTEGER,
+ "database" TEXT,
+ "username" TEXT,
+ "command" TEXT,
+ "status" TEXT,
+ "return_message" TEXT,
+ "start_time" TIMESTAMPTZ(6),
+ "end_time" TIMESTAMPTZ(6),
+ CONSTRAINT "job_run_details_pkey" PRIMARY KEY ("runid")
+);
+
+-- CreateTable
+CREATE TABLE "public"."users" (
+ "userid" TEXT NOT NULL,
+ "data" TEXT,
+ "code" TEXT,
+ "activatedcode" TEXT,
+ "activationtimestamp" TEXT,
+ "username" TEXT NOT NULL,
+ "status" INTEGER NOT NULL,
+ "nbcodecalled" INTEGER NOT NULL DEFAULT 0,
+ "nbverifycalled" INTEGER NOT NULL DEFAULT 0,
+ "createdat" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedat" TIMESTAMP(6),
+ "isdeleted" TIMESTAMP(6),
+ CONSTRAINT "users_pkey" PRIMARY KEY ("userid")
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "jobname_username_uniq" ON "cron"."job"("jobname", "username");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "users_data_key" ON "public"."users"("data");
diff --git a/prisma/schema.prisma b/prisma/schema.prisma
new file mode 100644
index 0000000..402191e
--- /dev/null
+++ b/prisma/schema.prisma
@@ -0,0 +1,68 @@
+generator client {
+ provider = "prisma-client-js"
+ previewFeatures = ["postgresqlExtensions"]
+}
+
+datasource db {
+ provider = "postgresql"
+ extensions = [pg_cron]
+ schemas = ["cron", "public"]
+}
+
+/// This model contains row level security and requires additional setup for migrations. Visit https://pris.ly/d/row-level-security for more info.
+model job {
+ jobid BigInt @id @default(autoincrement())
+ schedule String
+ command String
+ nodename String @default("localhost")
+ nodeport Int @default(dbgenerated("inet_server_port()"))
+ database String @default(dbgenerated("current_database()"))
+ username String @default(dbgenerated("CURRENT_USER"))
+ active Boolean @default(true)
+ jobname String?
+
+ @@unique([jobname, username], map: "jobname_username_uniq")
+ @@schema("cron")
+}
+
+/// This model contains row level security and requires additional setup for migrations. Visit https://pris.ly/d/row-level-security for more info.
+model job_run_details {
+ jobid BigInt?
+ runid BigInt @id @default(autoincrement())
+ job_pid Int?
+ database String?
+ username String?
+ command String?
+ status String?
+ return_message String?
+ start_time DateTime? @db.Timestamptz(6)
+ end_time DateTime? @db.Timestamptz(6)
+
+ @@schema("cron")
+}
+
+model users {
+ userid String @id
+ data String? @unique
+ code String?
+ activatedCode String?
+ activationTimestamp Int?
+ username String
+ status Int
+ nbCodeCalled Int @default(0)
+ nbVerifyCalled Int @default(0)
+ createdAt DateTime @default(now()) @db.Timestamp(6)
+ updatedAt DateTime @updatedAt @db.Timestamp(6)
+ isDeleted DateTime? @db.Timestamp(6)
+
+ @@schema("public")
+}
+
+model guild_configurations {
+ guildid String @id
+ data String
+ createdat DateTime @default(now()) @db.Timestamp(6)
+ updatedat DateTime @updatedAt @db.Timestamp(6)
+
+ @@schema("public")
+}
diff --git a/prisma/seed.ts b/prisma/seed.ts
new file mode 100644
index 0000000..2e5c08a
--- /dev/null
+++ b/prisma/seed.ts
@@ -0,0 +1,28 @@
+import { PrismaClient } from "@prisma/client";
+
+const database = new PrismaClient();
+
+async function main() {
+ database.job.upsert({
+ where: { jobid: 1 },
+ create: {
+ jobid: 1,
+ schedule: "0 0 * * *",
+ command:
+ "DELETE FROM Users WHERE isDeleted IS NOT NULL AND isDeleted < NOW() - INTERVAL '6 months'",
+ },
+ update: {
+ schedule: "0 0 * * *",
+ command:
+ "DELETE FROM Users WHERE isDeleted IS NOT NULL AND isDeleted < NOW() - INTERVAL '6 months'",
+ },
+ });
+}
+
+try {
+ await main();
+} catch (e) {
+ console.error(e);
+} finally {
+ await database.$disconnect();
+}
diff --git a/scripts/envgen.cjs b/scripts/envgen.cjs
deleted file mode 100644
index 0fad551..0000000
--- a/scripts/envgen.cjs
+++ /dev/null
@@ -1,33 +0,0 @@
-const fs = require("node:fs/promises");
-
-const path = `${__dirname}/..`;
-
-function stringifyOnSingleLine(json) {
- const object = JSON.parse(json);
- return JSON.stringify(object);
-}
-
-function extractEnvironmentName(envContent) {
- const regex = /NODE_ENV=(\w+)/;
- const matches = regex.exec(envContent);
- return matches && matches.length >= 2 && matches[1];
-}
-
-async function asASingleVariable() {
- const templatedEnv = await fs.readFile(`${path}/.env`, "utf-8");
- const environment = (
- extractEnvironmentName(templatedEnv) || "development"
- ).toLowerCase();
- const json = await fs.readFile(
- `${path}/config.${environment}.json`,
- "utf-8",
- );
-
- console.log(`Loading configuration for ${environment}`);
- await fs.writeFile(
- `${path}/.env`,
- `CONFIG=${stringifyOnSingleLine(json)}\n${templatedEnv}`,
- );
-}
-
-asASingleVariable();
diff --git a/src/config.ts b/src/config.ts
index 1e4754b..2fa786f 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -1,3 +1,6 @@
+import { readFile } from "node:fs/promises";
+import { join } from "node:path";
+
import packageInfo from "../package.json" with { type: "json" };
import type { Configuration } from "./models/index.js";
@@ -41,26 +44,56 @@ export async function readConfig(): Promise {
const environment = (
process.env.NODE_ENV || "development"
).toLowerCase();
+ const jsonPath = join(import.meta.dirname, "..", `config.${environment}.json`);
+ const json = JSON.parse(await readFile(jsonPath, "utf-8"));
- const json = JSON.parse(process.env.CONFIG ?? "{}");
- for (const prop in json) {
- if (/regex/i.exec(prop)) {
- json[prop] = new RegExp(json[prop]);
- }
- }
-
- const config = {
- ...json,
- version: `${environment}-v${packageInfo.version}`,
- };
- config.communicationServiceOptions.auth = {
- user: process.env.SMTP_USER,
- pass: process.env.SMTP_PASS,
- };
-
- return config;
+ return fromRawConfiguration(json);
} catch (err: unknown) {
console.error(err);
return defaultConfig;
}
}
+
+export function toPersistedConfiguration(
+ config: Configuration,
+): Record {
+ const { version: _, dynamicChannelPrefixRegex, communicationServiceOptions, ...rest } =
+ config;
+ const { auth: __, ...smtpOptions } = communicationServiceOptions;
+
+ return {
+ ...rest,
+ dynamicChannelPrefixRegex: dynamicChannelPrefixRegex.source,
+ communicationServiceOptions: smtpOptions,
+ };
+}
+
+export function fromPersistedConfiguration(
+ persisted: Record,
+): Configuration {
+ return fromRawConfiguration(persisted);
+}
+
+function fromRawConfiguration(raw: Record): Configuration {
+ const environment = (process.env.NODE_ENV || "development").toLowerCase();
+ const dynamicChannelPrefixRegex =
+ typeof raw.dynamicChannelPrefixRegex === "string"
+ ? new RegExp(raw.dynamicChannelPrefixRegex)
+ : defaultConfig.dynamicChannelPrefixRegex;
+ const communicationServiceOptions = {
+ ...defaultConfig.communicationServiceOptions,
+ ...(raw.communicationServiceOptions as Record),
+ auth: {
+ user: process.env.SMTP_USER ?? "",
+ pass: process.env.SMTP_PASS ?? "",
+ },
+ };
+
+ return {
+ ...defaultConfig,
+ ...(raw as Partial),
+ dynamicChannelPrefixRegex,
+ communicationServiceOptions,
+ version: `${environment}-v${packageInfo.version}`,
+ };
+}
diff --git a/src/datadrop.ts b/src/datadrop.ts
index 26da22d..faacf21 100644
--- a/src/datadrop.ts
+++ b/src/datadrop.ts
@@ -34,7 +34,6 @@ import {
type VoiceChannel,
} from "discord.js";
-import { readConfig } from "./config.js";
import { getErrorMessage, readFilesFrom } from "./helpers.js";
import type {
Command,
@@ -43,7 +42,7 @@ import type {
IDatabaseService,
User,
} from "./models/index.js";
-import { PostgresDatabaseService, SMTPService } from "./services/index.js";
+import { PrismaDatabaseService, SMTPService } from "./services/index.js";
export class DatadropClient extends Client {
#config: Configuration;
@@ -74,7 +73,7 @@ export class DatadropClient extends Client {
});
this.tempChannelsManager = new TempChannelsManager(this);
- this.database = new PostgresDatabaseService(this.logger);
+ this.database = new PrismaDatabaseService(this.logger);
const communicationService = new SMTPService(
config.communicationServiceOptions,
);
@@ -105,7 +104,18 @@ export class DatadropClient extends Client {
}
async reloadConfig(): Promise {
- this.#config = await readConfig();
+ const configFromDatabase = await this.database.readConfiguration(
+ this.#config.guildId,
+ );
+
+ if (!configFromDatabase) {
+ this.logger.warn(
+ `Aucune configuration trouvée en base pour la guilde ${this.#config.guildId}.`,
+ );
+ return;
+ }
+
+ this.#config = configFromDatabase;
}
#listenToVerificationEvents(): void {
@@ -410,6 +420,22 @@ export class DatadropClient extends Client {
await this.#bindCommands();
await this.database?.start();
+ const configFromDatabase = await this.database.readConfiguration(
+ this.#config.guildId,
+ );
+
+ if (configFromDatabase) {
+ this.#config = configFromDatabase;
+ this.logger.info(
+ `Configuration de la guilde ${this.#config.guildId} chargée depuis la base de données.`,
+ );
+ } else {
+ await this.database.writeConfiguration(this.#config);
+ this.logger.info(
+ `Configuration de la guilde ${this.#config.guildId} initialisée en base de données depuis la configuration de bootstrap.`,
+ );
+ }
+
this.login();
} catch (error) {
this.logger.error(
diff --git a/src/models/IDatabaseService.ts b/src/models/IDatabaseService.ts
index 7181e78..6d6397e 100644
--- a/src/models/IDatabaseService.ts
+++ b/src/models/IDatabaseService.ts
@@ -1,6 +1,7 @@
import type { IStoringSystem } from "@hunteroi/discord-verification";
import type { Snowflake } from "discord.js";
+import type { Configuration } from "./Configuration.js";
import type { User } from "./User.js";
export type IDatabaseService = {
@@ -25,4 +26,14 @@ export type IDatabaseService = {
*
*/
undoDelete: (userid: Snowflake) => Promise;
+
+ /**
+ * Reads a guild configuration.
+ */
+ readConfiguration: (guildId: Snowflake) => Promise;
+
+ /**
+ * Persists a guild configuration.
+ */
+ writeConfiguration: (config: Configuration) => Promise;
} & IStoringSystem;
diff --git a/src/services/PostgresDatabaseService.ts b/src/services/PostgresDatabaseService.ts
deleted file mode 100644
index 5738dcb..0000000
--- a/src/services/PostgresDatabaseService.ts
+++ /dev/null
@@ -1,326 +0,0 @@
-import type { ConsoleLogger } from "@hunteroi/advanced-logger";
-import type { Snowflake } from "discord.js";
-import {
- Client,
- type DatabaseError,
- type PreparedStatement,
- type Value,
-} from "ts-postgres";
-
-import { getErrorMessage } from "../helpers.js";
-import type { IDatabaseService, User } from "../models/index.js";
-
-export class PostgresDatabaseService implements IDatabaseService {
- readonly #logger: ConsoleLogger;
- readonly #database: Client;
-
- /**
- * Creates an instance of DatabaseService.
- * @param {Logger} logger
- * @memberof DatabaseService
- */
- constructor(logger: ConsoleLogger) {
- this.#logger = logger;
- this.#database = new Client({
- user: process.env.POSTGRES_USER,
- password: process.env.POSTGRES_PASSWORD,
- host: process.env.DATABASE_HOST,
- port: Number(process.env.DATABASE_PORT),
- database: process.env.POSTGRES_DB,
- });
- this.#listenToDatabaseEvents();
- }
-
- /**
- * @inherited
- */
- public async start(): Promise {
- await this.#database.connect();
-
- await this.#database.query(`CREATE TABLE IF NOT EXISTS Migrations (
- id serial PRIMARY KEY,
- name text UNIQUE,
- date timestamp NOT NULL DEFAULT now()
- );`);
-
- await this.#database.query(`CREATE TABLE IF NOT EXISTS Users (
- userId text NOT NULL PRIMARY KEY,
- data text UNIQUE,
- code text,
- activatedCode text,
- activationTimestamp text,
- username text NOT NULL,
- status integer NOT NULL,
- nbCodeCalled integer NOT NULL DEFAULT 0,
- nbVerifyCalled integer NOT NULL DEFAULT 0,
- createdAt timestamp NOT NULL DEFAULT now(),
- updatedAt timestamp,
- isDeleted timestamp
- );`);
- await this.#database.query(`CREATE OR REPLACE FUNCTION set_updatedAt() RETURNS TRIGGER AS $set_updatedAt$
- BEGIN
- NEW.updatedAt = now();
- RETURN NEW;
- END;
- $set_updatedAt$ LANGUAGE plpgsql;
- `);
- await this.#database.query(
- "CREATE OR REPLACE TRIGGER users_update BEFORE UPDATE ON Users FOR EACH ROW EXECUTE PROCEDURE set_updatedAt();",
- );
-
- const jobs = await this.#database.query("SELECT * FROM cron.job");
- if (jobs.rows.length === 0) {
- await this.#database.query("SELECT cron.schedule($1, $2);", [
- "0 0 * * *",
- "DELETE FROM Users WHERE isDeleted IS NOT NULL AND isDeleted < NOW() - INTERVAL '6 months'",
- ]);
- }
-
- await this.#runMigrations();
- }
-
- /**
- * @inherited
- */
- public async stop(): Promise {
- await this.#database.end();
- }
-
- /**
- * @inherited
- */
- public async read(userid: Snowflake): Promise {
- this.#logger.verbose(
- `Lecture de l'utilisateur sur base de l'identifiant ${userid}`,
- );
- const statement = await this.#database.prepare(
- "SELECT * FROM Users WHERE userId = $1;",
- );
- return await this.#executeStatement(statement, [userid]);
- }
-
- /**
- * @inherited
- */
- public async readBy(
- argument: // biome-ignore lint/suspicious/noExplicitAny: DB values can be of any type
- Map | ((user: User, index: string | number) => boolean),
- ): Promise {
- if (!(argument instanceof Map))
- throw new Error("Method not implemented.");
-
- this.#logger.verbose(
- `Lecture de l'utilisateur sur base des filtres ${JSON.stringify(argument)}`,
- );
- let sqlQuery = "SELECT * FROM Users";
- let nbArguments = 1;
- while (nbArguments <= argument.size * 2) {
- if (sqlQuery.includes("WHERE")) sqlQuery += " AND ";
- else sqlQuery += " WHERE ";
- sqlQuery += `$${nbArguments} = $${++nbArguments}`;
- nbArguments++;
- }
- const statement = await this.#database.prepare(sqlQuery);
- return await this.#executeStatement(
- statement,
- [...argument.entries()].flat(),
- );
- }
-
- /**
- * @inherited
- */
- public async write(user: User): Promise {
- this.#logger.verbose(
- `Écriture de l'utilisateur ${JSON.stringify(user)}`,
- );
-
- const userid = user.userid;
- const data = user.data;
- const offset = 3;
- const userEntries = Object.entries(user);
- const insertColumns = [
- "status",
- "code",
- "nbCodeCalled",
- "nbVerifyCalled",
- "username",
- ].sort(this.#ascendingSort);
- const insertValues = userEntries
- .filter(([prop]) => insertColumns.includes(prop))
- .sort(([prop1], [prop2]) => this.#ascendingSort(prop1, prop2));
- const updateColumns = new Set(
- [
- "status",
- "code",
- "nbCodeCalled",
- "nbVerifyCalled",
- "activatedCode",
- "activationTimestamp",
- ].sort(this.#ascendingSort),
- );
- const updateValues = userEntries
- .filter(([prop]) => updateColumns.has(prop))
- .sort(([prop1], [prop2]) => this.#ascendingSort(prop1, prop2));
-
- const sqlQuery = `INSERT INTO Users (userId, data, createdAt, ${this.#listParameters(insertColumns)})
- VALUES ($1, $2, NOW(), ${this.#listValues(insertValues, offset)})
- ON CONFLICT (userId) DO UPDATE SET ${this.#listParametersWithValues(updateValues, offset + insertValues.length)} WHERE EXCLUDED.userId = $1;`;
- const values = [
- userid,
- JSON.stringify(data),
- ...this.#deconstructValues(insertValues),
- ...this.#deconstructValues(updateValues),
- ];
-
- const statement = await this.#database.prepare(sqlQuery);
- await this.#executeStatement(statement, values, false);
- }
-
- /**
- * @inherited
- */
- public async delete(userid: Snowflake): Promise {
- this.#logger.verbose(
- `Suppresion de l'utilisateur sur base de l'identifiant ${userid}`,
- );
- const statement = await this.#database.prepare(
- "UPDATE Users SET isDeleted = NOW() WHERE userId = $1;",
- );
- await this.#executeStatement(statement, [userid], false);
- }
-
- /**
- * @inherited
- */
- public async undoDelete(userid: Snowflake): Promise {
- this.#logger.verbose(
- `Réversion de la suppresion de l'utilisateur sur base de l'identifiant ${userid}`,
- );
- const statement = await this.#database.prepare(
- "UPDATE Users SET isDeleted = NULL WHERE userId = $1;",
- );
- await this.#executeStatement(statement, [userid], false);
- }
-
- //#region private
- async #runMigrations(): Promise {
- await this.#runMigration("User soft delete", async () => {
- await this.#database.query(
- "ALTER TABLE Users ADD COLUMN IF NOT EXISTS isDeleted timestamp;",
- );
- });
- }
-
- async #runMigration(name: string, callback: () => Promise) {
- const result = await this.#database.query(
- "SELECT * FROM Migrations WHERE name = $1",
- [name],
- );
- this.#logger.verbose(
- `Running migration "${name}" with pre-query returning ${JSON.stringify(result)}`,
- );
- if (result && result.rows.length === 0) {
- await this.#database.query(
- "INSERT INTO Migrations (name) VALUES($1);",
- [name],
- );
- await callback();
- }
- }
-
- #listenToDatabaseEvents() {
- this.#database.on("connect", () =>
- this.#logger.info("Connexion établie avec la base de données!"),
- );
- this.#database.on("end", () =>
- this.#logger.info("Connexion fermée avec la base de données!"),
- );
- this.#database.on("error", (error: DatabaseError) =>
- this.#logger.error(
- `Une erreur est survenue lors de l'utilisation de la base de données: \n${error.message}`,
- ),
- );
- }
-
- #ascendingSort(string1: string, string2: string): number {
- if (string1 > string2) return 1;
- if (string1 < string2) return -1;
- return 0;
- }
-
- #listParameters(parameters: string[]): string {
- return parameters.join(", ");
- }
-
- // biome-ignore lint/suspicious/noExplicitAny: DB values can be of any type
- #listValues(values: [string, any][], offset: number): string {
- return values.map((_, index) => `$${index + offset}`).join(", ");
- }
-
- // biome-ignore lint/suspicious/noExplicitAny: DB values can be of any type
- #listParametersWithValues(values: [string, any][], offset: number) {
- return values
- .map(([prop], index) => `${prop} = $${index + offset}`)
- .join(", ");
- }
-
- // biome-ignore lint/suspicious/noExplicitAny: DB values can be of any type
- #deconstructValues(values: [string, any][]): Value[] {
- return values.flatMap(([, v]) =>
- v instanceof Object && typeof v !== "bigint"
- ? JSON.stringify(v)
- : (v ?? null),
- );
- }
-
- async #executeStatement(
- statement: PreparedStatement,
- values: Value[] = [],
- isSelect = true,
- ): Promise {
- const notFoundMessage = "User not found";
- try {
- const entities = await statement.execute(values);
- if (!isSelect) return null;
-
- const entity = [...entities].pop();
- if (!entity) throw new Error(notFoundMessage);
-
- const asDate = (value: string | undefined | null): Date | null =>
- value ? new Date(value) : null;
- const asInteger = (
- value: string | undefined | null,
- ): number | null => (value ? Number.parseInt(value, 10) : null);
- const user = {
- userid: entity.get("userid")?.valueOf(),
- data: JSON.parse(entity.get("data")?.toString() ?? "{}"),
- username: entity.get("username")?.valueOf(),
- createdAt: asDate(entity.get("createdat")?.valueOf() as string),
- updatedAt: asDate(entity.get("updatedat")?.valueOf() as string),
- status: entity.get("status")?.valueOf(),
- code: entity.get("code")?.valueOf(),
- activatedCode: entity.get("activatedcode")?.valueOf(),
- activationTimestamp: asInteger(
- entity.get("activationtimestamp")?.valueOf() as string,
- ),
- nbCodeCalled: entity.get("nbcodecalled")?.valueOf(),
- nbVerifyCalled: entity.get("nbverifycalled")?.valueOf(),
- isDeleted: asDate(entity.get("isdeleted")?.valueOf() as string),
- } as User;
-
- return user;
- } catch (error) {
- const errorMessage = getErrorMessage(error);
- if (errorMessage === notFoundMessage) {
- this.#logger.verbose(errorMessage);
- } else {
- this.#logger.error(errorMessage);
- }
- return null;
- } finally {
- await statement.close();
- }
- }
- //#endregion
-}
diff --git a/src/services/PrismaDatabaseService.ts b/src/services/PrismaDatabaseService.ts
new file mode 100644
index 0000000..8b6483d
--- /dev/null
+++ b/src/services/PrismaDatabaseService.ts
@@ -0,0 +1,216 @@
+import type { ConsoleLogger } from "@hunteroi/advanced-logger";
+import { PrismaClient } from "@prisma/client";
+import type { Snowflake } from "discord.js";
+
+import {
+ fromPersistedConfiguration,
+ toPersistedConfiguration,
+} from "../config.js";
+import { getErrorMessage } from "../helpers.js";
+import type { Configuration, IDatabaseService, User } from "../models/index.js";
+
+export class PrismaDatabaseService implements IDatabaseService {
+ readonly #logger: ConsoleLogger;
+ readonly #database: PrismaClient;
+
+ constructor(logger: ConsoleLogger) {
+ this.#logger = logger;
+ this.#database = new PrismaClient();
+ }
+
+ public async start(): Promise {
+ await this.#database.$connect();
+
+ this.#logger.info("Connexion Prisma ouverte avec la base de donnees.");
+ }
+
+ public async stop(): Promise {
+ await this.#database.$disconnect();
+
+ this.#logger.info("Connexion Prisma fermee avec la base de donnees.");
+ }
+
+ public async read(userid: Snowflake): Promise {
+ this.#logger.verbose(
+ `Lecture de l'utilisateur sur base de l'identifiant ${userid}`,
+ );
+
+ try {
+ const entity = await this.#database.users.findUnique({
+ where: { userid },
+ });
+
+ return entity ? this.#mapDatabaseUser(entity) : null;
+ } catch (error) {
+ this.#logger.error(getErrorMessage(error));
+ return null;
+ }
+ }
+
+ public async readBy(
+ argument:
+ | Map
+ | ((user: User, index: string | number) => boolean),
+ ): Promise {
+ try {
+ if (argument instanceof Map) {
+ this.#logger.verbose(
+ `Lecture de l'utilisateur sur base des filtres ${JSON.stringify([...argument.entries()])}`,
+ );
+
+ const where: Record = {};
+ for (const [key, value] of argument.entries()) {
+ where[key] =
+ typeof value === "object" && value !== null
+ ? JSON.stringify(value)
+ : value;
+ }
+
+ const entity = await this.#database.users.findFirst({ where });
+ return entity ? this.#mapDatabaseUser(entity) : null;
+ }
+
+ // Fallback for callback-based filtering expected by the storage contract.
+ const users = await this.#database.users.findMany();
+ const matched = users
+ .map((user) => this.#mapDatabaseUser(user))
+ .find(argument);
+ return matched ?? null;
+ } catch (error) {
+ this.#logger.error(getErrorMessage(error));
+ return null;
+ }
+ }
+
+ public async write(user: User): Promise {
+ this.#logger.verbose(`Ecriture de l'utilisateur ${JSON.stringify(user)}`);
+
+ try {
+ await this.#database.users.upsert({
+ where: { userid: user.userid },
+ create: {
+ userid: user.userid,
+ data: JSON.stringify(user.data),
+ code: user.code ?? null,
+ activatedCode: user.activatedCode ?? null,
+ activationTimestamp: user.activationTimestamp ?? null,
+ username: user.username,
+ status: user.status,
+ nbCodeCalled: user.nbCodeCalled,
+ nbVerifyCalled: user.nbVerifyCalled,
+ isDeleted: user.isDeleted ?? null,
+ },
+ update: {
+ data: JSON.stringify(user.data),
+ code: user.code ?? null,
+ activatedCode: user.activatedCode ?? null,
+ activationTimestamp: user.activationTimestamp ?? null,
+ username: user.username,
+ status: user.status,
+ nbCodeCalled: user.nbCodeCalled,
+ nbVerifyCalled: user.nbVerifyCalled,
+ },
+ });
+ } catch (error) {
+ this.#logger.error(getErrorMessage(error));
+ }
+ }
+
+ public async delete(userid: Snowflake): Promise {
+ this.#logger.verbose(
+ `Suppression de l'utilisateur sur base de l'identifiant ${userid}`,
+ );
+
+ try {
+ await this.#database.users.update({
+ where: { userid },
+ data: { isDeleted: new Date() },
+ });
+ } catch (error) {
+ this.#logger.error(getErrorMessage(error));
+ }
+ }
+
+ public async undoDelete(userid: Snowflake): Promise {
+ this.#logger.verbose(
+ `Reversion de la suppression de l'utilisateur sur base de l'identifiant ${userid}`,
+ );
+
+ try {
+ await this.#database.users.update({
+ where: { userid },
+ data: { isDeleted: null },
+ });
+ } catch (error) {
+ this.#logger.error(getErrorMessage(error));
+ }
+ }
+
+ public async readConfiguration(
+ guildId: Snowflake,
+ ): Promise {
+ this.#logger.verbose(`Lecture de la configuration de guilde ${guildId}`);
+
+ try {
+ const rows = await this.#database.$queryRaw<
+ Array<{ data: string }>
+ >`SELECT data FROM "GuildConfigurations" WHERE "guildId" = ${guildId} LIMIT 1`;
+ const entity = rows.at(-1);
+ if (!entity) return null;
+
+ return fromPersistedConfiguration(
+ JSON.parse(entity.data) as Record,
+ );
+ } catch (error) {
+ this.#logger.error(getErrorMessage(error));
+ return null;
+ }
+ }
+
+ public async writeConfiguration(config: Configuration): Promise {
+ this.#logger.verbose(
+ `Ecriture de la configuration de guilde ${config.guildId}`,
+ );
+
+ try {
+ await this.#database.$executeRaw`
+ INSERT INTO "GuildConfigurations" ("guildId", data, "createdAt")
+ VALUES (${config.guildId}, ${JSON.stringify(toPersistedConfiguration(config))}, NOW())
+ ON CONFLICT ("guildId")
+ DO UPDATE SET data = EXCLUDED.data, "updatedAt" = NOW();
+ `;
+ } catch (error) {
+ this.#logger.error(getErrorMessage(error));
+ }
+ }
+
+ #mapDatabaseUser(entity: {
+ userid: string;
+ data: string | null;
+ code: string | null;
+ activatedCode: string | null;
+ activationTimestamp: number | null;
+ username: string;
+ status: number;
+ nbCodeCalled: number;
+ nbVerifyCalled: number;
+ createdAt: Date;
+ updatedAt: Date;
+ isDeleted: Date | null;
+ }): User {
+ return {
+ userid: entity.userid,
+ data: JSON.parse(entity.data ?? "{}"),
+ code: entity.code ?? undefined,
+ activatedCode: entity.activatedCode ?? undefined,
+ activationTimestamp: entity.activationTimestamp ?? undefined,
+ username: entity.username,
+ status: entity.status,
+ nbCodeCalled: entity.nbCodeCalled,
+ nbVerifyCalled: entity.nbVerifyCalled,
+ createdAt: entity.createdAt,
+ updatedAt: entity.updatedAt,
+ isDeleted: entity.isDeleted,
+ } as User;
+ }
+}
diff --git a/src/services/index.ts b/src/services/index.ts
index 3d88b47..76621b5 100644
--- a/src/services/index.ts
+++ b/src/services/index.ts
@@ -1,2 +1,2 @@
-export { PostgresDatabaseService } from "./PostgresDatabaseService.js";
+export { PrismaDatabaseService } from "./PrismaDatabaseService.js";
export { SMTPService } from "./SMTPService.js";
diff --git a/tsconfig.json b/tsconfig.json
index 56cdd8e..3e2e246 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,19 +1,18 @@
{
- "compilerOptions": {
- "target": "ESNext",
- "module": "NodeNext",
- "moduleResolution": "NodeNext",
- "allowSyntheticDefaultImports": true,
- "skipLibCheck": true,
- "strict": true,
- "useUnknownInCatchVariables": true,
- "resolveJsonModule": true,
- "esModuleInterop": true,
- "forceConsistentCasingInFileNames": true,
- "noImplicitAny": false,
- "rootDir": ".",
- "outDir": "build",
- "baseUrl": ".",
- "resolvePackageJsonImports": true
- }
+ "compilerOptions": {
+ "target": "ESNext",
+ "module": "NodeNext",
+ "moduleResolution": "NodeNext",
+ "allowSyntheticDefaultImports": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "useUnknownInCatchVariables": true,
+ "resolveJsonModule": true,
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "noImplicitAny": false,
+ "rootDir": ".",
+ "outDir": "build",
+ "resolvePackageJsonImports": true
+ }
}
diff --git a/yarn.lock b/yarn.lock
index ff7c5ef..aeef1db 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,525 +2,63 @@
# yarn lockfile v1
-"@aws-crypto/sha256-browser@5.2.0":
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz#153895ef1dba6f9fce38af550e0ef58988eb649e"
- integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==
- dependencies:
- "@aws-crypto/sha256-js" "^5.2.0"
- "@aws-crypto/supports-web-crypto" "^5.2.0"
- "@aws-crypto/util" "^5.2.0"
- "@aws-sdk/types" "^3.222.0"
- "@aws-sdk/util-locate-window" "^3.0.0"
- "@smithy/util-utf8" "^2.0.0"
- tslib "^2.6.2"
-
-"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0":
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz#c4fdb773fdbed9a664fc1a95724e206cf3860042"
- integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==
- dependencies:
- "@aws-crypto/util" "^5.2.0"
- "@aws-sdk/types" "^3.222.0"
- tslib "^2.6.2"
-
-"@aws-crypto/supports-web-crypto@^5.2.0":
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz#a1e399af29269be08e695109aa15da0a07b5b5fb"
- integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==
- dependencies:
- tslib "^2.6.2"
-
-"@aws-crypto/util@^5.2.0":
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/@aws-crypto/util/-/util-5.2.0.tgz#71284c9cffe7927ddadac793c14f14886d3876da"
- integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==
- dependencies:
- "@aws-sdk/types" "^3.222.0"
- "@smithy/util-utf8" "^2.0.0"
- tslib "^2.6.2"
-
-"@aws-sdk/client-sesv2@^3.839.0":
- version "3.896.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/client-sesv2/-/client-sesv2-3.896.0.tgz#d7b4b88d74f69a008130a145942261710593da85"
- integrity sha512-KqWoxNmSKw4KYDrB3IH6AIfX855Dlorya1PcRqODa16xUp8aqoYACuBq+cjSuy5F6j9YDGSZgc20JDmWQRkN8Q==
- dependencies:
- "@aws-crypto/sha256-browser" "5.2.0"
- "@aws-crypto/sha256-js" "5.2.0"
- "@aws-sdk/core" "3.896.0"
- "@aws-sdk/credential-provider-node" "3.896.0"
- "@aws-sdk/middleware-host-header" "3.893.0"
- "@aws-sdk/middleware-logger" "3.893.0"
- "@aws-sdk/middleware-recursion-detection" "3.893.0"
- "@aws-sdk/middleware-user-agent" "3.896.0"
- "@aws-sdk/region-config-resolver" "3.893.0"
- "@aws-sdk/signature-v4-multi-region" "3.896.0"
- "@aws-sdk/types" "3.893.0"
- "@aws-sdk/util-endpoints" "3.895.0"
- "@aws-sdk/util-user-agent-browser" "3.893.0"
- "@aws-sdk/util-user-agent-node" "3.896.0"
- "@smithy/config-resolver" "^4.2.2"
- "@smithy/core" "^3.12.0"
- "@smithy/fetch-http-handler" "^5.2.1"
- "@smithy/hash-node" "^4.1.1"
- "@smithy/invalid-dependency" "^4.1.1"
- "@smithy/middleware-content-length" "^4.1.1"
- "@smithy/middleware-endpoint" "^4.2.4"
- "@smithy/middleware-retry" "^4.3.0"
- "@smithy/middleware-serde" "^4.1.1"
- "@smithy/middleware-stack" "^4.1.1"
- "@smithy/node-config-provider" "^4.2.2"
- "@smithy/node-http-handler" "^4.2.1"
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/smithy-client" "^4.6.4"
- "@smithy/types" "^4.5.0"
- "@smithy/url-parser" "^4.1.1"
- "@smithy/util-base64" "^4.1.0"
- "@smithy/util-body-length-browser" "^4.1.0"
- "@smithy/util-body-length-node" "^4.1.0"
- "@smithy/util-defaults-mode-browser" "^4.1.4"
- "@smithy/util-defaults-mode-node" "^4.1.4"
- "@smithy/util-endpoints" "^3.1.2"
- "@smithy/util-middleware" "^4.1.1"
- "@smithy/util-retry" "^4.1.2"
- "@smithy/util-utf8" "^4.1.0"
- tslib "^2.6.2"
-
-"@aws-sdk/client-sso@3.896.0":
- version "3.896.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/client-sso/-/client-sso-3.896.0.tgz#a93eb9043e28156345676c5e35035365f67897d9"
- integrity sha512-mpE3mrNili1dcvEvxaYjyoib8HlRXkb2bY5a3WeK++KObFY+HUujKtgQmiNSRX5YwQszm//fTrmGMmv9zpMcKg==
- dependencies:
- "@aws-crypto/sha256-browser" "5.2.0"
- "@aws-crypto/sha256-js" "5.2.0"
- "@aws-sdk/core" "3.896.0"
- "@aws-sdk/middleware-host-header" "3.893.0"
- "@aws-sdk/middleware-logger" "3.893.0"
- "@aws-sdk/middleware-recursion-detection" "3.893.0"
- "@aws-sdk/middleware-user-agent" "3.896.0"
- "@aws-sdk/region-config-resolver" "3.893.0"
- "@aws-sdk/types" "3.893.0"
- "@aws-sdk/util-endpoints" "3.895.0"
- "@aws-sdk/util-user-agent-browser" "3.893.0"
- "@aws-sdk/util-user-agent-node" "3.896.0"
- "@smithy/config-resolver" "^4.2.2"
- "@smithy/core" "^3.12.0"
- "@smithy/fetch-http-handler" "^5.2.1"
- "@smithy/hash-node" "^4.1.1"
- "@smithy/invalid-dependency" "^4.1.1"
- "@smithy/middleware-content-length" "^4.1.1"
- "@smithy/middleware-endpoint" "^4.2.4"
- "@smithy/middleware-retry" "^4.3.0"
- "@smithy/middleware-serde" "^4.1.1"
- "@smithy/middleware-stack" "^4.1.1"
- "@smithy/node-config-provider" "^4.2.2"
- "@smithy/node-http-handler" "^4.2.1"
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/smithy-client" "^4.6.4"
- "@smithy/types" "^4.5.0"
- "@smithy/url-parser" "^4.1.1"
- "@smithy/util-base64" "^4.1.0"
- "@smithy/util-body-length-browser" "^4.1.0"
- "@smithy/util-body-length-node" "^4.1.0"
- "@smithy/util-defaults-mode-browser" "^4.1.4"
- "@smithy/util-defaults-mode-node" "^4.1.4"
- "@smithy/util-endpoints" "^3.1.2"
- "@smithy/util-middleware" "^4.1.1"
- "@smithy/util-retry" "^4.1.2"
- "@smithy/util-utf8" "^4.1.0"
- tslib "^2.6.2"
-
-"@aws-sdk/core@3.896.0":
- version "3.896.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/core/-/core-3.896.0.tgz#883360ca8035e0844372370501c62409c0c8ce12"
- integrity sha512-uJaoyWKeGNyCyeI+cIJrD7LEB4iF/W8/x2ij7zg32OFpAAJx96N34/e+XSKp/xkJpO5FKiBOskKLnHeUsJsAPA==
- dependencies:
- "@aws-sdk/types" "3.893.0"
- "@aws-sdk/xml-builder" "3.894.0"
- "@smithy/core" "^3.12.0"
- "@smithy/node-config-provider" "^4.2.2"
- "@smithy/property-provider" "^4.1.1"
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/signature-v4" "^5.2.1"
- "@smithy/smithy-client" "^4.6.4"
- "@smithy/types" "^4.5.0"
- "@smithy/util-base64" "^4.1.0"
- "@smithy/util-middleware" "^4.1.1"
- "@smithy/util-utf8" "^4.1.0"
- tslib "^2.6.2"
-
-"@aws-sdk/credential-provider-env@3.896.0":
- version "3.896.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.896.0.tgz#f385c8395fee16abdda5f73c391dee78dd326157"
- integrity sha512-Cnqhupdkp825ICySrz4QTI64Nq3AmUAscPW8dueanni0avYBDp7RBppX4H0+6icqN569B983XNfQ0YSImQhfhg==
- dependencies:
- "@aws-sdk/core" "3.896.0"
- "@aws-sdk/types" "3.893.0"
- "@smithy/property-provider" "^4.1.1"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@aws-sdk/credential-provider-http@3.896.0":
- version "3.896.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.896.0.tgz#4715b4205c42c4adf0b6efb3e228639f1e038802"
- integrity sha512-CN0fTCKCUA1OTSx1c76o8XyJCy2WoI/av3J8r8mL6GmxTerhLRyzDy/MwxzPjTYPoL+GLEg6V4a9fRkWj1hBUA==
- dependencies:
- "@aws-sdk/core" "3.896.0"
- "@aws-sdk/types" "3.893.0"
- "@smithy/fetch-http-handler" "^5.2.1"
- "@smithy/node-http-handler" "^4.2.1"
- "@smithy/property-provider" "^4.1.1"
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/smithy-client" "^4.6.4"
- "@smithy/types" "^4.5.0"
- "@smithy/util-stream" "^4.3.2"
- tslib "^2.6.2"
-
-"@aws-sdk/credential-provider-ini@3.896.0":
- version "3.896.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.896.0.tgz#8e4eaa85ad10ce5988381ee19f6bf96d14cbcab0"
- integrity sha512-+rbYG98czzwZLTYHJasK+VBjnIeXk73mRpZXHvaa4kDNxBezdN2YsoGNpLlPSxPdbpq18LY3LRtkdFTaT6DIQA==
- dependencies:
- "@aws-sdk/core" "3.896.0"
- "@aws-sdk/credential-provider-env" "3.896.0"
- "@aws-sdk/credential-provider-http" "3.896.0"
- "@aws-sdk/credential-provider-process" "3.896.0"
- "@aws-sdk/credential-provider-sso" "3.896.0"
- "@aws-sdk/credential-provider-web-identity" "3.896.0"
- "@aws-sdk/nested-clients" "3.896.0"
- "@aws-sdk/types" "3.893.0"
- "@smithy/credential-provider-imds" "^4.1.2"
- "@smithy/property-provider" "^4.1.1"
- "@smithy/shared-ini-file-loader" "^4.2.0"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@aws-sdk/credential-provider-node@3.896.0":
- version "3.896.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.896.0.tgz#6b25a92b18d051d04b88d31ed36ff5025cfe7c10"
- integrity sha512-J0Jm+56MNngk1PIyqoJFf5FC2fjA4CYXlqODqNRDtid7yk7HB9W3UTtvxofmii5KJOLcHGNPdGnHWKkUc+xYgw==
- dependencies:
- "@aws-sdk/credential-provider-env" "3.896.0"
- "@aws-sdk/credential-provider-http" "3.896.0"
- "@aws-sdk/credential-provider-ini" "3.896.0"
- "@aws-sdk/credential-provider-process" "3.896.0"
- "@aws-sdk/credential-provider-sso" "3.896.0"
- "@aws-sdk/credential-provider-web-identity" "3.896.0"
- "@aws-sdk/types" "3.893.0"
- "@smithy/credential-provider-imds" "^4.1.2"
- "@smithy/property-provider" "^4.1.1"
- "@smithy/shared-ini-file-loader" "^4.2.0"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@aws-sdk/credential-provider-process@3.896.0":
- version "3.896.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.896.0.tgz#008a1e09f7d276336bead54a9b7572ab2a7b8b3e"
- integrity sha512-UfWVMQPZy7dus40c4LWxh5vQ+I51z0q4vf09Eqas5848e9DrGRG46GYIuc/gy+4CqEypjbg/XNMjnZfGLHxVnQ==
- dependencies:
- "@aws-sdk/core" "3.896.0"
- "@aws-sdk/types" "3.893.0"
- "@smithy/property-provider" "^4.1.1"
- "@smithy/shared-ini-file-loader" "^4.2.0"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@aws-sdk/credential-provider-sso@3.896.0":
- version "3.896.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.896.0.tgz#78609a50ed292675b691fef11f87281f4d844ad4"
- integrity sha512-77Te8WrVdLABKlv7QyetXP6aYEX1UORiahLA1PXQb/p66aFBw18Xc6JiN/6zJ4RqdyV1Xr9rwYBwGYua93ANIA==
- dependencies:
- "@aws-sdk/client-sso" "3.896.0"
- "@aws-sdk/core" "3.896.0"
- "@aws-sdk/token-providers" "3.896.0"
- "@aws-sdk/types" "3.893.0"
- "@smithy/property-provider" "^4.1.1"
- "@smithy/shared-ini-file-loader" "^4.2.0"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@aws-sdk/credential-provider-web-identity@3.896.0":
- version "3.896.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.896.0.tgz#b80271e417bd2f26f349bec5a718301a16af9772"
- integrity sha512-gwMwZWumo+V0xJplO8j2HIb1TfPsF9fbcRGXS0CanEvjg4fF2Xs1pOQl2oCw3biPZpxHB0plNZjqSF2eneGg9g==
- dependencies:
- "@aws-sdk/core" "3.896.0"
- "@aws-sdk/nested-clients" "3.896.0"
- "@aws-sdk/types" "3.893.0"
- "@smithy/property-provider" "^4.1.1"
- "@smithy/shared-ini-file-loader" "^4.2.0"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@aws-sdk/middleware-host-header@3.893.0":
- version "3.893.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.893.0.tgz#1a4b14c11cff158b383e2b859be5c468d2c2c162"
- integrity sha512-qL5xYRt80ahDfj9nDYLhpCNkDinEXvjLe/Qen/Y/u12+djrR2MB4DRa6mzBCkLkdXDtf0WAoW2EZsNCfGrmOEQ==
- dependencies:
- "@aws-sdk/types" "3.893.0"
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@aws-sdk/middleware-logger@3.893.0":
- version "3.893.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-logger/-/middleware-logger-3.893.0.tgz#4ecb20ee0771a2f3afdc07c1310b97251d3854e2"
- integrity sha512-ZqzMecjju5zkBquSIfVfCORI/3Mge21nUY4nWaGQy+NUXehqCGG4W7AiVpiHGOcY2cGJa7xeEkYcr2E2U9U0AA==
- dependencies:
- "@aws-sdk/types" "3.893.0"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@aws-sdk/middleware-recursion-detection@3.893.0":
- version "3.893.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.893.0.tgz#9fde6f10e72fcbd8ce4f0eea629c07ca64ce86ba"
- integrity sha512-H7Zotd9zUHQAr/wr3bcWHULYhEeoQrF54artgsoUGIf/9emv6LzY89QUccKIxYd6oHKNTrTyXm9F0ZZrzXNxlg==
- dependencies:
- "@aws-sdk/types" "3.893.0"
- "@aws/lambda-invoke-store" "^0.0.1"
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@aws-sdk/middleware-sdk-s3@3.896.0":
- version "3.896.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.896.0.tgz#419d558892d49b63db68265577b6ca6a1e35516e"
- integrity sha512-hlPu/AZ5Afa4ZafP+aXIjRtKm7BX57lurA+TJ+7nXm1Az8Du3Sg2tZXP2/GfqTztLIFQYj/Jy5smkJ0+1HNAPQ==
- dependencies:
- "@aws-sdk/core" "3.896.0"
- "@aws-sdk/types" "3.893.0"
- "@aws-sdk/util-arn-parser" "3.893.0"
- "@smithy/core" "^3.12.0"
- "@smithy/node-config-provider" "^4.2.2"
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/signature-v4" "^5.2.1"
- "@smithy/smithy-client" "^4.6.4"
- "@smithy/types" "^4.5.0"
- "@smithy/util-config-provider" "^4.1.0"
- "@smithy/util-middleware" "^4.1.1"
- "@smithy/util-stream" "^4.3.2"
- "@smithy/util-utf8" "^4.1.0"
- tslib "^2.6.2"
-
-"@aws-sdk/middleware-user-agent@3.896.0":
- version "3.896.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.896.0.tgz#be459f4b652e200cfded484f87353ac69fbef69f"
- integrity sha512-so/3tZH34YIeqG/QJgn5ZinnmHRdXV1ehsj4wVUrezL/dVW86jfwIkQIwpw8roOC657UoUf91c9FDhCxs3J5aQ==
- dependencies:
- "@aws-sdk/core" "3.896.0"
- "@aws-sdk/types" "3.893.0"
- "@aws-sdk/util-endpoints" "3.895.0"
- "@smithy/core" "^3.12.0"
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@aws-sdk/nested-clients@3.896.0":
- version "3.896.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/nested-clients/-/nested-clients-3.896.0.tgz#5fb0f31ca8a4a26d92b812e946e068d9b3c63bc6"
- integrity sha512-KaHALB6DIXScJL/ExmonADr3jtTV6dpOHoEeTRSskJ/aW+rhZo7kH8SLmrwOT/qX8d5tza17YyR/oRkIKY6Eaw==
- dependencies:
- "@aws-crypto/sha256-browser" "5.2.0"
- "@aws-crypto/sha256-js" "5.2.0"
- "@aws-sdk/core" "3.896.0"
- "@aws-sdk/middleware-host-header" "3.893.0"
- "@aws-sdk/middleware-logger" "3.893.0"
- "@aws-sdk/middleware-recursion-detection" "3.893.0"
- "@aws-sdk/middleware-user-agent" "3.896.0"
- "@aws-sdk/region-config-resolver" "3.893.0"
- "@aws-sdk/types" "3.893.0"
- "@aws-sdk/util-endpoints" "3.895.0"
- "@aws-sdk/util-user-agent-browser" "3.893.0"
- "@aws-sdk/util-user-agent-node" "3.896.0"
- "@smithy/config-resolver" "^4.2.2"
- "@smithy/core" "^3.12.0"
- "@smithy/fetch-http-handler" "^5.2.1"
- "@smithy/hash-node" "^4.1.1"
- "@smithy/invalid-dependency" "^4.1.1"
- "@smithy/middleware-content-length" "^4.1.1"
- "@smithy/middleware-endpoint" "^4.2.4"
- "@smithy/middleware-retry" "^4.3.0"
- "@smithy/middleware-serde" "^4.1.1"
- "@smithy/middleware-stack" "^4.1.1"
- "@smithy/node-config-provider" "^4.2.2"
- "@smithy/node-http-handler" "^4.2.1"
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/smithy-client" "^4.6.4"
- "@smithy/types" "^4.5.0"
- "@smithy/url-parser" "^4.1.1"
- "@smithy/util-base64" "^4.1.0"
- "@smithy/util-body-length-browser" "^4.1.0"
- "@smithy/util-body-length-node" "^4.1.0"
- "@smithy/util-defaults-mode-browser" "^4.1.4"
- "@smithy/util-defaults-mode-node" "^4.1.4"
- "@smithy/util-endpoints" "^3.1.2"
- "@smithy/util-middleware" "^4.1.1"
- "@smithy/util-retry" "^4.1.2"
- "@smithy/util-utf8" "^4.1.0"
- tslib "^2.6.2"
-
-"@aws-sdk/region-config-resolver@3.893.0":
- version "3.893.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.893.0.tgz#570dfd2314b3f71eb263557bb06fea36b5188cd6"
- integrity sha512-/cJvh3Zsa+Of0Zbg7vl9wp/kZtdb40yk/2+XcroAMVPO9hPvmS9r/UOm6tO7FeX4TtkRFwWaQJiTZTgSdsPY+Q==
- dependencies:
- "@aws-sdk/types" "3.893.0"
- "@smithy/node-config-provider" "^4.2.2"
- "@smithy/types" "^4.5.0"
- "@smithy/util-config-provider" "^4.1.0"
- "@smithy/util-middleware" "^4.1.1"
- tslib "^2.6.2"
-
-"@aws-sdk/signature-v4-multi-region@3.896.0":
- version "3.896.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.896.0.tgz#2aa0ca3055dc000f6d68fe48adcee612ce814d36"
- integrity sha512-txiQDEZXL9tlNP8mbnNaDtuHBYc/FCqaZ8Y76qnfM3o6CTIn0t0tTAlnx1CyFe4EaikVBgQuZvj5KfNA8PmlzA==
- dependencies:
- "@aws-sdk/middleware-sdk-s3" "3.896.0"
- "@aws-sdk/types" "3.893.0"
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/signature-v4" "^5.2.1"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@aws-sdk/token-providers@3.896.0":
- version "3.896.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/token-providers/-/token-providers-3.896.0.tgz#760cdca947129cd422ca636218addefffa932420"
- integrity sha512-WBoD+RY7tUfW9M+wGrZ2vdveR+ziZOjGHWFY3lcGnDvI8KE+fcSccEOTxgJBNBS5Z8B+WHKU2sZjb+Z7QqGwjw==
- dependencies:
- "@aws-sdk/core" "3.896.0"
- "@aws-sdk/nested-clients" "3.896.0"
- "@aws-sdk/types" "3.893.0"
- "@smithy/property-provider" "^4.1.1"
- "@smithy/shared-ini-file-loader" "^4.2.0"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@aws-sdk/types@3.893.0", "@aws-sdk/types@^3.222.0":
- version "3.893.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/types/-/types-3.893.0.tgz#1afbdb9d62bf86caeac380e3cac11a051076400a"
- integrity sha512-Aht1nn5SnA0N+Tjv0dzhAY7CQbxVtmq1bBR6xI0MhG7p2XYVh1wXuKTzrldEvQWwA3odOYunAfT9aBiKZx9qIg==
- dependencies:
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@aws-sdk/util-arn-parser@3.893.0":
- version "3.893.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.893.0.tgz#fcc9b792744b9da597662891c2422dda83881d8d"
- integrity sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==
- dependencies:
- tslib "^2.6.2"
-
-"@aws-sdk/util-endpoints@3.895.0":
- version "3.895.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-endpoints/-/util-endpoints-3.895.0.tgz#d3881250cecc40fa9d721a33661c1aaa64aba643"
- integrity sha512-MhxBvWbwxmKknuggO2NeMwOVkHOYL98pZ+1ZRI5YwckoCL3AvISMnPJgfN60ww6AIXHGpkp+HhpFdKOe8RHSEg==
- dependencies:
- "@aws-sdk/types" "3.893.0"
- "@smithy/types" "^4.5.0"
- "@smithy/url-parser" "^4.1.1"
- "@smithy/util-endpoints" "^3.1.2"
- tslib "^2.6.2"
-
-"@aws-sdk/util-locate-window@^3.0.0":
- version "3.893.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-locate-window/-/util-locate-window-3.893.0.tgz#5df15f24e1edbe12ff1fe8906f823b51cd53bae8"
- integrity sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==
- dependencies:
- tslib "^2.6.2"
-
-"@aws-sdk/util-user-agent-browser@3.893.0":
- version "3.893.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.893.0.tgz#be0aac5c73a30c2a03aedb2e3501bb277bad79a1"
- integrity sha512-PE9NtbDBW6Kgl1bG6A5fF3EPo168tnkj8TgMcT0sg4xYBWsBpq0bpJZRh+Jm5Bkwiw9IgTCLjEU7mR6xWaMB9w==
- dependencies:
- "@aws-sdk/types" "3.893.0"
- "@smithy/types" "^4.5.0"
- bowser "^2.11.0"
- tslib "^2.6.2"
-
-"@aws-sdk/util-user-agent-node@3.896.0":
- version "3.896.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.896.0.tgz#190a8aa7ffae3f8d29bacdd3835b901daf116195"
- integrity sha512-jegizucAwoxyBddKl0kRGNEgRHcfGuMeyhP1Nf+wIUmHz/9CxobIajqcVk/KRNLdZY5mSn7YG2VtP3z0BcBb0w==
- dependencies:
- "@aws-sdk/middleware-user-agent" "3.896.0"
- "@aws-sdk/types" "3.893.0"
- "@smithy/node-config-provider" "^4.2.2"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@aws-sdk/xml-builder@3.894.0":
- version "3.894.0"
- resolved "https://registry.yarnpkg.com/@aws-sdk/xml-builder/-/xml-builder-3.894.0.tgz#7110e86622345d3da220a2ed5259a30a91dec4bc"
- integrity sha512-E6EAMc9dT1a2DOdo4zyOf3fp5+NJ2wI+mcm7RaW1baFIWDwcb99PpvWoV7YEiK7oaBDshuOEGWKUSYXdW+JYgA==
- dependencies:
- "@smithy/types" "^4.5.0"
- fast-xml-parser "5.2.5"
- tslib "^2.6.2"
-
-"@aws/lambda-invoke-store@^0.0.1":
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/@aws/lambda-invoke-store/-/lambda-invoke-store-0.0.1.tgz#92d792a7dda250dfcb902e13228f37a81be57c8f"
- integrity sha512-ORHRQ2tmvnBXc8t/X9Z8IcSbBA4xTLKuN873FopzklHMeqBst7YG0d+AX97inkvDX+NChYtSr+qGfcqGFaI8Zw==
-
-"@biomejs/biome@^2.2.4":
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/@biomejs/biome/-/biome-2.2.4.tgz#184e4b83f89bd0d4151682a5aa3840df37748e17"
- integrity sha512-TBHU5bUy/Ok6m8c0y3pZiuO/BZoY/OcGxoLlrfQof5s8ISVwbVBdFINPQZyFfKwil8XibYWb7JMwnT8wT4WVPg==
+"@biomejs/biome@^2.4.16":
+ version "2.4.16"
+ resolved "https://registry.yarnpkg.com/@biomejs/biome/-/biome-2.4.16.tgz#241feeafcbc9c26ced1600e5c6016f4b3b599d24"
+ integrity sha512-x9ajFh1zChVybCiM3TN6OD4phAqLgtPZjFrZF+aTMYCPjwBO+k529TX7PPsAqtGNLeV4UgzwQnowEgS7bGmzcA==
optionalDependencies:
- "@biomejs/cli-darwin-arm64" "2.2.4"
- "@biomejs/cli-darwin-x64" "2.2.4"
- "@biomejs/cli-linux-arm64" "2.2.4"
- "@biomejs/cli-linux-arm64-musl" "2.2.4"
- "@biomejs/cli-linux-x64" "2.2.4"
- "@biomejs/cli-linux-x64-musl" "2.2.4"
- "@biomejs/cli-win32-arm64" "2.2.4"
- "@biomejs/cli-win32-x64" "2.2.4"
-
-"@biomejs/cli-darwin-arm64@2.2.4":
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.2.4.tgz#9b50620c93501e370b7e6d5a8445f117f9946a0c"
- integrity sha512-RJe2uiyaloN4hne4d2+qVj3d3gFJFbmrr5PYtkkjei1O9c+BjGXgpUPVbi8Pl8syumhzJjFsSIYkcLt2VlVLMA==
-
-"@biomejs/cli-darwin-x64@2.2.4":
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.2.4.tgz#343620c884fc8141155d114430e80e4eacfddc9e"
- integrity sha512-cFsdB4ePanVWfTnPVaUX+yr8qV8ifxjBKMkZwN7gKb20qXPxd/PmwqUH8mY5wnM9+U0QwM76CxFyBRJhC9tQwg==
-
-"@biomejs/cli-linux-arm64-musl@2.2.4":
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.2.4.tgz#cabcdadce2bc88b697f4063374224266c6f8b6e5"
- integrity sha512-7TNPkMQEWfjvJDaZRSkDCPT/2r5ESFPKx+TEev+I2BXDGIjfCZk2+b88FOhnJNHtksbOZv8ZWnxrA5gyTYhSsQ==
-
-"@biomejs/cli-linux-arm64@2.2.4":
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.2.4.tgz#55620f8f088145e62e1158eb85c568554d0c8673"
- integrity sha512-M/Iz48p4NAzMXOuH+tsn5BvG/Jb07KOMTdSVwJpicmhN309BeEyRyQX+n1XDF0JVSlu28+hiTQ2L4rZPvu7nMw==
-
-"@biomejs/cli-linux-x64-musl@2.2.4":
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.2.4.tgz#6bfaea72505afdbda66a66c998d2d169a8b55f90"
- integrity sha512-m41nFDS0ksXK2gwXL6W6yZTYPMH0LughqbsxInSKetoH6morVj43szqKx79Iudkp8WRT5SxSh7qVb8KCUiewGg==
-
-"@biomejs/cli-linux-x64@2.2.4":
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64/-/cli-linux-x64-2.2.4.tgz#8c1ed61dcafb8a5939346c714ec122651f57e1db"
- integrity sha512-orr3nnf2Dpb2ssl6aihQtvcKtLySLta4E2UcXdp7+RTa7mfJjBgIsbS0B9GC8gVu0hjOu021aU8b3/I1tn+pVQ==
-
-"@biomejs/cli-win32-arm64@2.2.4":
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.2.4.tgz#b2528f6c436e753d6083d7779f0662e08786cedb"
- integrity sha512-NXnfTeKHDFUWfxAefa57DiGmu9VyKi0cDqFpdI+1hJWQjGJhJutHPX0b5m+eXvTKOaf+brU+P0JrQAZMb5yYaQ==
-
-"@biomejs/cli-win32-x64@2.2.4":
- version "2.2.4"
- resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-x64/-/cli-win32-x64-2.2.4.tgz#c8e21413120fe073fa49b78fdd987022941ff66f"
- integrity sha512-3Y4V4zVRarVh/B/eSHczR4LYoSVyv3Dfuvm3cWs5w/HScccS0+Wt/lHOcDTRYeHjQmMYVC3rIRWqyN2EI52+zg==
+ "@biomejs/cli-darwin-arm64" "2.4.16"
+ "@biomejs/cli-darwin-x64" "2.4.16"
+ "@biomejs/cli-linux-arm64" "2.4.16"
+ "@biomejs/cli-linux-arm64-musl" "2.4.16"
+ "@biomejs/cli-linux-x64" "2.4.16"
+ "@biomejs/cli-linux-x64-musl" "2.4.16"
+ "@biomejs/cli-win32-arm64" "2.4.16"
+ "@biomejs/cli-win32-x64" "2.4.16"
+
+"@biomejs/cli-darwin-arm64@2.4.16":
+ version "2.4.16"
+ resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.4.16.tgz#c361db44920728d57e2b0a48bb88c09ad01101b9"
+ integrity sha512-wxPvu4XOA85YJk9ixSWUmq/QBHbid85BISbOAqqBM/5xQpPk9ayjk5375tOlSC0BeCwNSbPFafQBm+vBumXq0A==
+
+"@biomejs/cli-darwin-x64@2.4.16":
+ version "2.4.16"
+ resolved "https://registry.yarnpkg.com/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.4.16.tgz#4e69cfecd92f2909b87a9a1dff61f18dbc013088"
+ integrity sha512-xFCqGPwYusQJp4N4NJLi1XJiZqjwFdjhT+KqtNy+Ug3qgfczqnTa6MSDvxJF6TkuDLoYJItMapz6tAf7kCekFw==
+
+"@biomejs/cli-linux-arm64-musl@2.4.16":
+ version "2.4.16"
+ resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.4.16.tgz#5485d4a544d0818a29ce022256299ace49531779"
+ integrity sha512-oYxnW0ARfJkr72ezzF2OR8N/rtkgLUQeYtF8cFhVswbknHxtTcmzSsanVJP8yQKnGpGpc2ck6c5zLvHahL6Cbg==
+
+"@biomejs/cli-linux-arm64@2.4.16":
+ version "2.4.16"
+ resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.4.16.tgz#d6df1fb75ca5d05dec7985d74ffe503c4c3d33b1"
+ integrity sha512-2kFb4//jxfZaP6D+Rj5VkHkxgyD9EoRAVBEQb8PKRv+s4NO2zYNJKXFaJmK1CmhufJOWEfpHKaRbOja7qjmdhQ==
+
+"@biomejs/cli-linux-x64-musl@2.4.16":
+ version "2.4.16"
+ resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.4.16.tgz#4ccb530d703878a239c204b13aeb8d5c8cf80d8f"
+ integrity sha512-iHDS+MCM65DPqWGu+ECC3uoALyj2H7F4nVUPxIPjz/PIl94EUu+EDfGZDzFP+NY1EOPVt9NQvwFqq7HdMmowdg==
+
+"@biomejs/cli-linux-x64@2.4.16":
+ version "2.4.16"
+ resolved "https://registry.yarnpkg.com/@biomejs/cli-linux-x64/-/cli-linux-x64-2.4.16.tgz#725c4e4dc0ec7182bb49c18c9d301184e669889e"
+ integrity sha512-NbcBbi/nJqn5baae6wqRXdS7Gadf2uRpehSh6vMSYpG8OhkXl/Xg8aorWrJ+9VWqAT5ml90alLvorkpMW0nBwQ==
+
+"@biomejs/cli-win32-arm64@2.4.16":
+ version "2.4.16"
+ resolved "https://registry.yarnpkg.com/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.4.16.tgz#639e5433eb2c412c7798702708c96851de0b7827"
+ integrity sha512-0rgImMsNb5v/chhkIFe3wu7PEFClS6RBAYUijGL9UsYN3PanSaoK24HSSuSJb1pYbYYVjzAyZTl3gtjJ84BM8A==
+
+"@biomejs/cli-win32-x64@2.4.16":
+ version "2.4.16"
+ resolved "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.4.16.tgz"
+ integrity sha512-Kp85jgoBHa05gix6UIRjfCDiUV3w/8VIdZ247VyyO2gEjaw12WEVhdIjlxp/AMzXxqxQwbxNTDVZ3Mwd2RG5rw==
"@discordjs/builders@^1.11.2":
version "1.11.3"
- resolved "https://registry.yarnpkg.com/@discordjs/builders/-/builders-1.11.3.tgz#14b8b027e16b73136924faecaf1819b94711647c"
+ resolved "https://registry.npmjs.org/@discordjs/builders/-/builders-1.11.3.tgz"
integrity sha512-p3kf5eV49CJiRTfhtutUCeivSyQ/l2JlKodW1ZquRwwvlOWmG9+6jFShX6x8rUiYhnP6wKI96rgN/SXMy5e5aw==
dependencies:
"@discordjs/formatters" "^0.6.1"
@@ -531,26 +69,46 @@
ts-mixer "^6.0.4"
tslib "^2.6.3"
+"@discordjs/builders@^1.14.1":
+ version "1.14.1"
+ resolved "https://registry.npmjs.org/@discordjs/builders/-/builders-1.14.1.tgz"
+ integrity sha512-gSKkhXLqs96TCzk66VZuHHl8z2bQMJFGwrXC0f33ngK+FLNau4hU1PYny3DNJfNdSH+gVMzE85/d5FQ2BpcNwQ==
+ dependencies:
+ "@discordjs/formatters" "^0.6.2"
+ "@discordjs/util" "^1.2.0"
+ "@sapphire/shapeshift" "^4.0.0"
+ discord-api-types "^0.38.40"
+ fast-deep-equal "^3.1.3"
+ ts-mixer "^6.0.4"
+ tslib "^2.6.3"
+
"@discordjs/collection@1.5.3":
version "1.5.3"
- resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-1.5.3.tgz#5a1250159ebfff9efa4f963cfa7e97f1b291be18"
+ resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-1.5.3.tgz"
integrity sha512-SVb428OMd3WO1paV3rm6tSjM4wC+Kecaa1EUGX7vc6/fddvw/6lg90z4QtCqm21zvVe92vMMDt9+DkIvjXImQQ==
"@discordjs/collection@^2.1.0", "@discordjs/collection@^2.1.1":
version "2.1.1"
- resolved "https://registry.yarnpkg.com/@discordjs/collection/-/collection-2.1.1.tgz#901917bc538c12b9c3613036d317847baee08cae"
+ resolved "https://registry.npmjs.org/@discordjs/collection/-/collection-2.1.1.tgz"
integrity sha512-LiSusze9Tc7qF03sLCujF5iZp7K+vRNEDBZ86FT9aQAv3vxMLihUvKvpsCWiQ2DJq1tVckopKm1rxomgNUc9hg==
"@discordjs/formatters@^0.6.1":
version "0.6.1"
- resolved "https://registry.yarnpkg.com/@discordjs/formatters/-/formatters-0.6.1.tgz#211bf3eb060d8fe7fa1f020b8be3c4adad00555a"
+ resolved "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.6.1.tgz"
integrity sha512-5cnX+tASiPCqCWtFcFslxBVUaCetB0thvM/JyavhbXInP1HJIEU+Qv/zMrnuwSsX3yWH2lVXNJZeDK3EiP4HHg==
dependencies:
discord-api-types "^0.38.1"
+"@discordjs/formatters@^0.6.2":
+ version "0.6.2"
+ resolved "https://registry.npmjs.org/@discordjs/formatters/-/formatters-0.6.2.tgz"
+ integrity sha512-y4UPwWhH6vChKRkGdMB4odasUbHOUwy7KL+OVwF86PvT6QVOwElx+TiI1/6kcmcEe+g5YRXJFiXSXUdabqZOvQ==
+ dependencies:
+ discord-api-types "^0.38.33"
+
"@discordjs/rest@^2.5.1", "@discordjs/rest@^2.6.0":
version "2.6.0"
- resolved "https://registry.yarnpkg.com/@discordjs/rest/-/rest-2.6.0.tgz#8c449b0d5c22a4cd9c655f5d1d53a20b05c37f10"
+ resolved "https://registry.npmjs.org/@discordjs/rest/-/rest-2.6.0.tgz"
integrity sha512-RDYrhmpB7mTvmCKcpj+pc5k7POKszS4E2O9TYc+U+Y4iaCP+r910QdO43qmpOja8LRr1RJ0b3U+CqVsnPqzf4w==
dependencies:
"@discordjs/collection" "^2.1.1"
@@ -563,14 +121,36 @@
tslib "^2.6.3"
undici "6.21.3"
+"@discordjs/rest@^2.6.1":
+ version "2.6.1"
+ resolved "https://registry.npmjs.org/@discordjs/rest/-/rest-2.6.1.tgz"
+ integrity sha512-wwQdgjeaoYFiaG+atbqx6aJDpqW7JHAo0HrQkBTbYzM3/PJ3GweQIpgElNcGZ26DCUOXMyawYd0YF7vtr+fZXg==
+ dependencies:
+ "@discordjs/collection" "^2.1.1"
+ "@discordjs/util" "^1.2.0"
+ "@sapphire/async-queue" "^1.5.3"
+ "@sapphire/snowflake" "^3.5.5"
+ "@vladfrangu/async_event_emitter" "^2.4.6"
+ discord-api-types "^0.38.40"
+ magic-bytes.js "^1.13.0"
+ tslib "^2.6.3"
+ undici "6.24.1"
+
"@discordjs/util@^1.1.0", "@discordjs/util@^1.1.1":
version "1.1.1"
- resolved "https://registry.yarnpkg.com/@discordjs/util/-/util-1.1.1.tgz#bafcde0faa116c834da1258d78ec237080bbab29"
+ resolved "https://registry.npmjs.org/@discordjs/util/-/util-1.1.1.tgz"
integrity sha512-eddz6UnOBEB1oITPinyrB2Pttej49M9FZQY8NxgEvc3tq6ZICZ19m70RsmzRdDHk80O9NoYN/25AqJl8vPVf/g==
+"@discordjs/util@^1.2.0":
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/@discordjs/util/-/util-1.2.0.tgz"
+ integrity sha512-3LKP7F2+atl9vJFhaBjn4nOaSWahZ/yWjOvA4e5pnXkt2qyXRCHLxoBQy81GFtLGCq7K9lPm9R517M1U+/90Qg==
+ dependencies:
+ discord-api-types "^0.38.33"
+
"@discordjs/ws@^1.2.3":
version "1.2.3"
- resolved "https://registry.yarnpkg.com/@discordjs/ws/-/ws-1.2.3.tgz#7cf80d8528366c6810c02b43ca49958ef154c3d4"
+ resolved "https://registry.npmjs.org/@discordjs/ws/-/ws-1.2.3.tgz"
integrity sha512-wPlQDxEmlDg5IxhJPuxXr3Vy9AjYq5xCvFWGJyD7w7Np8ZGu+Mc+97LCoEc/+AYCo2IDpKioiH0/c/mj5ZR9Uw==
dependencies:
"@discordjs/collection" "^2.1.0"
@@ -583,159 +163,181 @@
tslib "^2.6.2"
ws "^8.17.0"
-"@dotenvx/dotenvx@^1.51.0":
- version "1.51.0"
- resolved "https://registry.yarnpkg.com/@dotenvx/dotenvx/-/dotenvx-1.51.0.tgz#6faf730e7cf532f0ecafdc87dc854d07e31c2915"
- integrity sha512-CbMGzyOYSyFF7d4uaeYwO9gpSBzLTnMmSmTVpCZjvpJFV69qYbjYPpzNnCz1mb2wIvEhjWjRwQWuBzTO0jITww==
+"@dotenvx/dotenvx@^1.71.0":
+ version "1.71.0"
+ resolved "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.71.0.tgz"
+ integrity sha512-KEUw/mGu+EDRhYWRTNGHIimVCs9NvMFaIXOGrHSXoCteKLE5EsJnmPjOPpYorjXVg/0xG0fbdVw720azw1z4ag==
dependencies:
commander "^11.1.0"
dotenv "^17.2.1"
eciesjs "^0.4.10"
+ enquirer "^2.4.1"
execa "^5.1.1"
fdir "^6.2.0"
ignore "^5.3.0"
object-treeify "1.1.33"
- picomatch "^4.0.2"
+ picomatch "^4.0.4"
which "^4.0.0"
+ yocto-spinner "^1.1.0"
"@ecies/ciphers@^0.2.3":
version "0.2.4"
- resolved "https://registry.yarnpkg.com/@ecies/ciphers/-/ciphers-0.2.4.tgz#20a4e51f61d521e5e311eb49385d93d91087de51"
+ resolved "https://registry.npmjs.org/@ecies/ciphers/-/ciphers-0.2.4.tgz"
integrity sha512-t+iX+Wf5nRKyNzk8dviW3Ikb/280+aEJAnw9YXvCp2tYGPSkMki+NRY+8aNLmVFv3eNtMdvViPNOPxS8SZNP+w==
-"@esbuild/aix-ppc64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.10.tgz#ee6b7163a13528e099ecf562b972f2bcebe0aa97"
- integrity sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==
-
-"@esbuild/android-arm64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.10.tgz#115fc76631e82dd06811bfaf2db0d4979c16e2cb"
- integrity sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==
-
-"@esbuild/android-arm@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.10.tgz#8d5811912da77f615398611e5bbc1333fe321aa9"
- integrity sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==
-
-"@esbuild/android-x64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.10.tgz#e3e96516b2d50d74105bb92594c473e30ddc16b1"
- integrity sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==
-
-"@esbuild/darwin-arm64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.10.tgz#6af6bb1d05887dac515de1b162b59dc71212ed76"
- integrity sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==
-
-"@esbuild/darwin-x64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.10.tgz#99ae82347fbd336fc2d28ffd4f05694e6e5b723d"
- integrity sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==
-
-"@esbuild/freebsd-arm64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.10.tgz#0c6d5558a6322b0bdb17f7025c19bd7d2359437d"
- integrity sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==
-
-"@esbuild/freebsd-x64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.10.tgz#8c35873fab8c0857a75300a3dcce4324ca0b9844"
- integrity sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==
-
-"@esbuild/linux-arm64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.10.tgz#3edc2f87b889a15b4cedaf65f498c2bed7b16b90"
- integrity sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==
-
-"@esbuild/linux-arm@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.10.tgz#86501cfdfb3d110176d80c41b27ed4611471cde7"
- integrity sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==
-
-"@esbuild/linux-ia32@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.10.tgz#e6589877876142537c6864680cd5d26a622b9d97"
- integrity sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==
-
-"@esbuild/linux-loong64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.10.tgz#11119e18781f136d8083ea10eb6be73db7532de8"
- integrity sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==
-
-"@esbuild/linux-mips64el@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.10.tgz#3052f5436b0c0c67a25658d5fc87f045e7def9e6"
- integrity sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==
-
-"@esbuild/linux-ppc64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.10.tgz#2f098920ee5be2ce799f35e367b28709925a8744"
- integrity sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==
-
-"@esbuild/linux-riscv64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.10.tgz#fa51d7fd0a22a62b51b4b94b405a3198cf7405dd"
- integrity sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==
-
-"@esbuild/linux-s390x@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.10.tgz#a27642e36fc282748fdb38954bd3ef4f85791e8a"
- integrity sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==
-
-"@esbuild/linux-x64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.10.tgz#9d9b09c0033d17529570ced6d813f98315dfe4e9"
- integrity sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==
-
-"@esbuild/netbsd-arm64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.10.tgz#25c09a659c97e8af19e3f2afd1c9190435802151"
- integrity sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==
-
-"@esbuild/netbsd-x64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.10.tgz#7fa5f6ffc19be3a0f6f5fd32c90df3dc2506937a"
- integrity sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==
-
-"@esbuild/openbsd-arm64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.10.tgz#8faa6aa1afca0c6d024398321d6cb1c18e72a1c3"
- integrity sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==
-
-"@esbuild/openbsd-x64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.10.tgz#a42979b016f29559a8453d32440d3c8cd420af5e"
- integrity sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==
-
-"@esbuild/openharmony-arm64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.10.tgz#fd87bfeadd7eeb3aa384bbba907459ffa3197cb1"
- integrity sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==
-
-"@esbuild/sunos-x64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.10.tgz#3a18f590e36cb78ae7397976b760b2b8c74407f4"
- integrity sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==
-
-"@esbuild/win32-arm64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.10.tgz#e71741a251e3fd971408827a529d2325551f530c"
- integrity sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==
-
-"@esbuild/win32-ia32@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.10.tgz#c6f010b5d3b943d8901a0c87ea55f93b8b54bf94"
- integrity sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==
-
-"@esbuild/win32-x64@0.25.10":
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.10.tgz#e4b3e255a1b4aea84f6e1d2ae0b73f826c3785bd"
- integrity sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==
+"@electric-sql/pglite-socket@0.1.1":
+ version "0.1.1"
+ resolved "https://registry.npmjs.org/@electric-sql/pglite-socket/-/pglite-socket-0.1.1.tgz"
+ integrity sha512-p2hoXw3Z3LQHwTeikdZNsFBOvXGqKY2hk51BBw+8NKND8eoH+8LFOtW9Z8CQKmTJ2qqGYu82ipqiyFZOTTXNfw==
+
+"@electric-sql/pglite-tools@0.3.1":
+ version "0.3.1"
+ resolved "https://registry.npmjs.org/@electric-sql/pglite-tools/-/pglite-tools-0.3.1.tgz"
+ integrity sha512-C+T3oivmy9bpQvSxVqXA1UDY8cB9Eb9vZHL9zxWwEUfDixbXv4G3r2LjoTdR33LD8aomR3O9ZXEO3XEwr/cUCA==
+
+"@electric-sql/pglite@0.4.1":
+ version "0.4.1"
+ resolved "https://registry.npmjs.org/@electric-sql/pglite/-/pglite-0.4.1.tgz"
+ integrity sha512-mZ9NzzUSYPOCnxHH1oAHPRzoMFJHY472raDKwXl/+6oPbpdJ7g8LsCN4FSaIIfkiCKHhb3iF/Zqo3NYxaIhU7Q==
+
+"@esbuild/aix-ppc64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz#7a289c158e29cbf59ea0afc83cc80f06d1c89402"
+ integrity sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==
+
+"@esbuild/android-arm64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz#b8828d9edfa3a92660644eb8de6e4f3c203d7b17"
+ integrity sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==
+
+"@esbuild/android-arm@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.28.0.tgz#5ec1847605e05b5dbe5df90db9ff7e3e4c58dca7"
+ integrity sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==
+
+"@esbuild/android-x64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.28.0.tgz#390642175b88ef82bad4cce03f8ab13fe9b1912e"
+ integrity sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==
+
+"@esbuild/darwin-arm64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz#ae45325960d5950cd6951e4f97396f4e1ff7d8d3"
+ integrity sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==
+
+"@esbuild/darwin-x64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz#c079247d589b6b99449659d94f06951b84bff2e4"
+ integrity sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==
+
+"@esbuild/freebsd-arm64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz#45c456215a486593c94900297202dc11c880a37a"
+ integrity sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==
+
+"@esbuild/freebsd-x64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz#0399494c1c85e4388e9b7040bd60d48f2a5b0d2c"
+ integrity sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==
+
+"@esbuild/linux-arm64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz#d6d9f09ef0de54116bf459a4d53cac7e0952fe39"
+ integrity sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==
+
+"@esbuild/linux-arm@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz#7b42ffa84c288ae94fdc431c1b28a89e3c3b9278"
+ integrity sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==
+
+"@esbuild/linux-ia32@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz#deb15d112ed8dd605346b6b953d23a21ff81253f"
+ integrity sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==
+
+"@esbuild/linux-loong64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz#81fb89d07eecc79b157dea61033757726fce0ca4"
+ integrity sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==
+
+"@esbuild/linux-mips64el@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz#d0e42691b3ff7af9fb2217b70fc01f343bdb62bb"
+ integrity sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==
+
+"@esbuild/linux-ppc64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz#389f3e5e98f17d477c467cc87136e1a076eead87"
+ integrity sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==
+
+"@esbuild/linux-riscv64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz#763bd60d59b242be12da1e67d5729f3024c605fa"
+ integrity sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==
+
+"@esbuild/linux-s390x@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz#aac6061634872e4677de693bce8030d73b1fd055"
+ integrity sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==
+
+"@esbuild/linux-x64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz#4f2917747188fe77632bcec65b2d84b422419779"
+ integrity sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==
+
+"@esbuild/netbsd-arm64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz#814df0ae57a0c386814491b8397eeba82094a947"
+ integrity sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==
+
+"@esbuild/netbsd-x64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz#e01bdf7e60fa1a08e46d46d960b0d9bb8ac210af"
+ integrity sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==
+
+"@esbuild/openbsd-arm64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz#4a15c36aacca68d2d5a4c90b710c06759f4c1ffa"
+ integrity sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==
+
+"@esbuild/openbsd-x64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz#475e6101498a8ecce3008d7c388111d7a27c17bd"
+ integrity sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==
+
+"@esbuild/openharmony-arm64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz#cfdc3957f0b7a69f1bde129aad17fcc2f6fa033e"
+ integrity sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==
+
+"@esbuild/sunos-x64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz#a013c856fecacd1c3aec985c8afe1d1cb017497d"
+ integrity sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==
+
+"@esbuild/win32-arm64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz#eae05e0f35271cad3898b43168d3e9a3bbaf47e5"
+ integrity sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==
+
+"@esbuild/win32-ia32@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz#06161ebc5bf75c08d69feb3c6b22560515913998"
+ integrity sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==
+
+"@esbuild/win32-x64@0.28.0":
+ version "0.28.0"
+ resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz"
+ integrity sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==
+
+"@hono/node-server@1.19.11":
+ version "1.19.11"
+ resolved "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.11.tgz"
+ integrity sha512-dr8/3zEaB+p0D2n/IUrlPF1HZm586qgJNXK1a9fhg/PzdtkK7Ksd5l312tJX2yBuALqDYBlG20QEbayqPyxn+g==
"@hunteroi/advanced-logger@^0.2.0":
version "0.2.0"
- resolved "https://registry.yarnpkg.com/@hunteroi/advanced-logger/-/advanced-logger-0.2.0.tgz#750064e84e2eb04e3e838c789815d41547572876"
+ resolved "https://registry.npmjs.org/@hunteroi/advanced-logger/-/advanced-logger-0.2.0.tgz"
integrity sha512-KWxMQtGXjHIrEfv8VtTxjZEwAHtJQGpyV771WKqGKwCMpbB8ULIIocRri9ncntW9qixjpPpWDgii7xbznuzqRQ==
dependencies:
chalk "^3.0.0"
@@ -743,550 +345,412 @@
"@hunteroi/discord-selfrole@^4.0.5":
version "4.0.5"
- resolved "https://registry.yarnpkg.com/@hunteroi/discord-selfrole/-/discord-selfrole-4.0.5.tgz#28bd5a4e02483c4f6db2f8a550d984b07882d4a3"
+ resolved "https://registry.npmjs.org/@hunteroi/discord-selfrole/-/discord-selfrole-4.0.5.tgz"
integrity sha512-oBxE0nY/NsV8hds0CdzJhz5jVdaOXCLPdFqBmVxG6qHDF1quccEgJN/hM3CVXwT4BrQlk2/ezNkrTnmiQlIq/w==
"@hunteroi/discord-temp-channels@^3.3.1":
version "3.3.1"
- resolved "https://registry.yarnpkg.com/@hunteroi/discord-temp-channels/-/discord-temp-channels-3.3.1.tgz#351f6657ab5482b31507b9d8e925481c05fa216c"
+ resolved "https://registry.npmjs.org/@hunteroi/discord-temp-channels/-/discord-temp-channels-3.3.1.tgz"
integrity sha512-zm0aJVnh3Nnyk5ImUhxzecWwHvlvOZICK8+8uKeiHXtrvj9gkJyYUGTWM7rvDg6BASjSlTVkLEbD5WdzOgjMiw==
"@hunteroi/discord-verification@^1.5.2":
version "1.5.2"
- resolved "https://registry.yarnpkg.com/@hunteroi/discord-verification/-/discord-verification-1.5.2.tgz#fcb6bbc626d11af2230f625f011323f5fa7edc04"
+ resolved "https://registry.npmjs.org/@hunteroi/discord-verification/-/discord-verification-1.5.2.tgz"
integrity sha512-F31p2ARYAm16tjbRadio898ype5nmhAI0eJ1vUXo08posyrxxW07VxNiy6hV09FulaM2+KwPYn7pXAZMGC2dMg==
+"@kurkle/color@^0.3.0":
+ version "0.3.4"
+ resolved "https://registry.npmjs.org/@kurkle/color/-/color-0.3.4.tgz"
+ integrity sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==
+
"@noble/ciphers@^1.3.0":
version "1.3.0"
- resolved "https://registry.yarnpkg.com/@noble/ciphers/-/ciphers-1.3.0.tgz#f64b8ff886c240e644e5573c097f86e5b43676dc"
+ resolved "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz"
integrity sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==
"@noble/curves@^1.9.1":
version "1.9.7"
- resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.7.tgz#79d04b4758a43e4bca2cbdc62e7771352fa6b951"
+ resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz"
integrity sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==
dependencies:
"@noble/hashes" "1.8.0"
"@noble/hashes@1.8.0", "@noble/hashes@^1.8.0":
version "1.8.0"
- resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a"
+ resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz"
integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==
-"@sapphire/async-queue@^1.5.2", "@sapphire/async-queue@^1.5.3":
- version "1.5.5"
- resolved "https://registry.yarnpkg.com/@sapphire/async-queue/-/async-queue-1.5.5.tgz#2b18d402bb920b65b13ad4ed8dfb6c386300dd84"
- integrity sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==
-
-"@sapphire/shapeshift@^4.0.0":
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/@sapphire/shapeshift/-/shapeshift-4.0.0.tgz#86c1b41002ff5d0b2ad21cbc3418b06834b89040"
- integrity sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==
- dependencies:
- fast-deep-equal "^3.1.3"
- lodash "^4.17.21"
-
-"@sapphire/snowflake@3.5.3":
- version "3.5.3"
- resolved "https://registry.yarnpkg.com/@sapphire/snowflake/-/snowflake-3.5.3.tgz#0c102aa2ec5b34f806e9bc8625fc6a5e1d0a0c6a"
- integrity sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==
-
-"@sapphire/snowflake@^3.5.3":
- version "3.5.5"
- resolved "https://registry.yarnpkg.com/@sapphire/snowflake/-/snowflake-3.5.5.tgz#33a60ab4231e3cab29e8a0077f342125f2c8d1bd"
- integrity sha512-xzvBr1Q1c4lCe7i6sRnrofxeO1QTP/LKQ6A6qy0iB4x5yfiSfARMEQEghojzTNALDTcv8En04qYNIco9/K9eZQ==
-
-"@smithy/abort-controller@^4.1.1":
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/@smithy/abort-controller/-/abort-controller-4.1.1.tgz#9b3872ab6b2c061486175c281dadc0a853260533"
- integrity sha512-vkzula+IwRvPR6oKQhMYioM3A/oX/lFCZiwuxkQbRhqJS2S4YRY2k7k/SyR2jMf3607HLtbEwlRxi0ndXHMjRg==
- dependencies:
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@smithy/config-resolver@^4.2.2":
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/@smithy/config-resolver/-/config-resolver-4.2.2.tgz#3f6a3c163f9b5b7f852d7d1817bc9e3b2136fa5f"
- integrity sha512-IT6MatgBWagLybZl1xQcURXRICvqz1z3APSCAI9IqdvfCkrA7RaQIEfgC6G/KvfxnDfQUDqFV+ZlixcuFznGBQ==
- dependencies:
- "@smithy/node-config-provider" "^4.2.2"
- "@smithy/types" "^4.5.0"
- "@smithy/util-config-provider" "^4.1.0"
- "@smithy/util-middleware" "^4.1.1"
- tslib "^2.6.2"
-
-"@smithy/core@^3.12.0":
- version "3.12.0"
- resolved "https://registry.yarnpkg.com/@smithy/core/-/core-3.12.0.tgz#81bb6a2a113e334ddaede9d502ff17ce4d8a2cc6"
- integrity sha512-zJeAgogZfbwlPGL93y4Z/XNeIN37YCreRUd6YMIRvaq+6RnBK8PPYYIQ85Is/GglPh3kNImD5riDCXbVSDpCiQ==
- dependencies:
- "@smithy/middleware-serde" "^4.1.1"
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/types" "^4.5.0"
- "@smithy/util-base64" "^4.1.0"
- "@smithy/util-body-length-browser" "^4.1.0"
- "@smithy/util-middleware" "^4.1.1"
- "@smithy/util-stream" "^4.3.2"
- "@smithy/util-utf8" "^4.1.0"
- "@smithy/uuid" "^1.0.0"
- tslib "^2.6.2"
-
-"@smithy/credential-provider-imds@^4.1.2":
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.1.2.tgz#68662c873dbe812c13159cb2be3c4ba8aeb52149"
- integrity sha512-JlYNq8TShnqCLg0h+afqe2wLAwZpuoSgOyzhYvTgbiKBWRov+uUve+vrZEQO6lkdLOWPh7gK5dtb9dS+KGendg==
- dependencies:
- "@smithy/node-config-provider" "^4.2.2"
- "@smithy/property-provider" "^4.1.1"
- "@smithy/types" "^4.5.0"
- "@smithy/url-parser" "^4.1.1"
- tslib "^2.6.2"
-
-"@smithy/fetch-http-handler@^5.2.1":
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.2.1.tgz#fe284a00f1b3a35edf9fba454d287b7f74ef20af"
- integrity sha512-5/3wxKNtV3wO/hk1is+CZUhL8a1yy/U+9u9LKQ9kZTkMsHaQjJhc3stFfiujtMnkITjzWfndGA2f7g9Uh9vKng==
- dependencies:
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/querystring-builder" "^4.1.1"
- "@smithy/types" "^4.5.0"
- "@smithy/util-base64" "^4.1.0"
- tslib "^2.6.2"
-
-"@smithy/hash-node@^4.1.1":
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/@smithy/hash-node/-/hash-node-4.1.1.tgz#86ceca92487492267e944e4f4507106b731e7971"
- integrity sha512-H9DIU9WBLhYrvPs9v4sYvnZ1PiAI0oc8CgNQUJ1rpN3pP7QADbTOUjchI2FB764Ub0DstH5xbTqcMJu1pnVqxA==
- dependencies:
- "@smithy/types" "^4.5.0"
- "@smithy/util-buffer-from" "^4.1.0"
- "@smithy/util-utf8" "^4.1.0"
- tslib "^2.6.2"
-
-"@smithy/invalid-dependency@^4.1.1":
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/@smithy/invalid-dependency/-/invalid-dependency-4.1.1.tgz#2511335ff889944701c7d2a3b1e4a4d6fe9ddfab"
- integrity sha512-1AqLyFlfrrDkyES8uhINRlJXmHA2FkG+3DY8X+rmLSqmFwk3DJnvhyGzyByPyewh2jbmV+TYQBEfngQax8IFGg==
- dependencies:
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@smithy/is-array-buffer@^2.2.0":
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz#f84f0d9f9a36601a9ca9381688bd1b726fd39111"
- integrity sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==
- dependencies:
- tslib "^2.6.2"
-
-"@smithy/is-array-buffer@^4.1.0":
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/@smithy/is-array-buffer/-/is-array-buffer-4.1.0.tgz#d18a2f22280e7173633cb91a9bdb6f3d8a6560b8"
- integrity sha512-ePTYUOV54wMogio+he4pBybe8fwg4sDvEVDBU8ZlHOZXbXK3/C0XfJgUCu6qAZcawv05ZhZzODGUerFBPsPUDQ==
- dependencies:
- tslib "^2.6.2"
-
-"@smithy/middleware-content-length@^4.1.1":
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/@smithy/middleware-content-length/-/middleware-content-length-4.1.1.tgz#eaea7bd14c7a0b64aef87b8c372c2a04d7b9cb72"
- integrity sha512-9wlfBBgTsRvC2JxLJxv4xDGNBrZuio3AgSl0lSFX7fneW2cGskXTYpFxCdRYD2+5yzmsiTuaAJD1Wp7gWt9y9w==
- dependencies:
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@smithy/middleware-endpoint@^4.2.4":
- version "4.2.4"
- resolved "https://registry.yarnpkg.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.2.4.tgz#d815d27b7869a66ee97b41932053ca5d5ec6315e"
- integrity sha512-FZ4hzupOmthm8Q8ujYrd0I+/MHwVMuSTdkDtIQE0xVuvJt9pLT6Q+b0p4/t+slDyrpcf+Wj7SN+ZqT5OryaaZg==
- dependencies:
- "@smithy/core" "^3.12.0"
- "@smithy/middleware-serde" "^4.1.1"
- "@smithy/node-config-provider" "^4.2.2"
- "@smithy/shared-ini-file-loader" "^4.2.0"
- "@smithy/types" "^4.5.0"
- "@smithy/url-parser" "^4.1.1"
- "@smithy/util-middleware" "^4.1.1"
- tslib "^2.6.2"
-
-"@smithy/middleware-retry@^4.3.0":
- version "4.3.0"
- resolved "https://registry.yarnpkg.com/@smithy/middleware-retry/-/middleware-retry-4.3.0.tgz#453c9668b013fbfa900957857f74f3b15936b384"
- integrity sha512-qhEX9745fAxZvtLM4bQJAVC98elWjiMO2OiHl1s6p7hUzS4QfZO1gXUYNwEK8m0J6NoCD5W52ggWxbIDHI0XSg==
- dependencies:
- "@smithy/node-config-provider" "^4.2.2"
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/service-error-classification" "^4.1.2"
- "@smithy/smithy-client" "^4.6.4"
- "@smithy/types" "^4.5.0"
- "@smithy/util-middleware" "^4.1.1"
- "@smithy/util-retry" "^4.1.2"
- "@smithy/uuid" "^1.0.0"
- tslib "^2.6.2"
-
-"@smithy/middleware-serde@^4.1.1":
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/@smithy/middleware-serde/-/middleware-serde-4.1.1.tgz#cfb99f53c744d7730928235cbe66cc7ff8a8a9b2"
- integrity sha512-lh48uQdbCoj619kRouev5XbWhCwRKLmphAif16c4J6JgJ4uXjub1PI6RL38d3BLliUvSso6klyB/LTNpWSNIyg==
- dependencies:
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@smithy/middleware-stack@^4.1.1":
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/@smithy/middleware-stack/-/middleware-stack-4.1.1.tgz#1d533fde4ccbb62d7fc0f0b8ac518b7e4791e311"
- integrity sha512-ygRnniqNcDhHzs6QAPIdia26M7e7z9gpkIMUe/pK0RsrQ7i5MblwxY8078/QCnGq6AmlUUWgljK2HlelsKIb/A==
- dependencies:
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@smithy/node-config-provider@^4.2.2":
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/@smithy/node-config-provider/-/node-config-provider-4.2.2.tgz#ede9ac2f689cfdf26815a53fadf139e6aa77bdbb"
- integrity sha512-SYGTKyPvyCfEzIN5rD8q/bYaOPZprYUPD2f5g9M7OjaYupWOoQFYJ5ho+0wvxIRf471i2SR4GoiZ2r94Jq9h6A==
- dependencies:
- "@smithy/property-provider" "^4.1.1"
- "@smithy/shared-ini-file-loader" "^4.2.0"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@smithy/node-http-handler@^4.2.1":
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/@smithy/node-http-handler/-/node-http-handler-4.2.1.tgz#d7ab8e31659030d3d5a68f0982f15c00b1e67a0c"
- integrity sha512-REyybygHlxo3TJICPF89N2pMQSf+p+tBJqpVe1+77Cfi9HBPReNjTgtZ1Vg73exq24vkqJskKDpfF74reXjxfw==
- dependencies:
- "@smithy/abort-controller" "^4.1.1"
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/querystring-builder" "^4.1.1"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@smithy/property-provider@^4.1.1":
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/@smithy/property-provider/-/property-provider-4.1.1.tgz#6e11ae6729840314afed05fd6ab48f62c654116b"
- integrity sha512-gm3ZS7DHxUbzC2wr8MUCsAabyiXY0gaj3ROWnhSx/9sPMc6eYLMM4rX81w1zsMaObj2Lq3PZtNCC1J6lpEY7zg==
- dependencies:
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@smithy/protocol-http@^5.2.1":
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/@smithy/protocol-http/-/protocol-http-5.2.1.tgz#33f2b8e4e1082c3ae0372d1322577e6fa71d7824"
- integrity sha512-T8SlkLYCwfT/6m33SIU/JOVGNwoelkrvGjFKDSDtVvAXj/9gOT78JVJEas5a+ETjOu4SVvpCstKgd0PxSu/aHw==
- dependencies:
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@smithy/querystring-builder@^4.1.1":
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/@smithy/querystring-builder/-/querystring-builder-4.1.1.tgz#4d35c1735de8214055424045a117fa5d1d5cdec1"
- integrity sha512-J9b55bfimP4z/Jg1gNo+AT84hr90p716/nvxDkPGCD4W70MPms0h8KF50RDRgBGZeL83/u59DWNqJv6tEP/DHA==
- dependencies:
- "@smithy/types" "^4.5.0"
- "@smithy/util-uri-escape" "^4.1.0"
- tslib "^2.6.2"
+"@prisma/client-runtime-utils@7.8.0":
+ version "7.8.0"
+ resolved "https://registry.npmjs.org/@prisma/client-runtime-utils/-/client-runtime-utils-7.8.0.tgz"
+ integrity sha512-5NQZztQ0oY/ADFkmd9gPuweH5A1/CCY8YQPorLLO0Mu6a87mY5gsnDkzmFmIHs9NFaLnZojzgddFVN4RpKYrdw==
-"@smithy/querystring-parser@^4.1.1":
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/@smithy/querystring-parser/-/querystring-parser-4.1.1.tgz#21b861439b2db16abeb0a6789b126705fa25eea1"
- integrity sha512-63TEp92YFz0oQ7Pj9IuI3IgnprP92LrZtRAkE3c6wLWJxfy/yOPRt39IOKerVr0JS770olzl0kGafXlAXZ1vng==
+"@prisma/client@^7.8.0":
+ version "7.8.0"
+ resolved "https://registry.npmjs.org/@prisma/client/-/client-7.8.0.tgz"
+ integrity sha512-HFp3Dawv/3sU3JtlPha90IB+48lS7zHiH4LKZPjmcE8YH5P9DOXGPvo8dqOtO7MqLDd1p2hOWMcFlRT1DMblHw==
dependencies:
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
+ "@prisma/client-runtime-utils" "7.8.0"
-"@smithy/service-error-classification@^4.1.2":
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/@smithy/service-error-classification/-/service-error-classification-4.1.2.tgz#06839c332f4620a4b80c78a0c32377732dc6697a"
- integrity sha512-Kqd8wyfmBWHZNppZSMfrQFpc3M9Y/kjyN8n8P4DqJJtuwgK1H914R471HTw7+RL+T7+kI1f1gOnL7Vb5z9+NgQ==
+"@prisma/config@7.8.0":
+ version "7.8.0"
+ resolved "https://registry.npmjs.org/@prisma/config/-/config-7.8.0.tgz"
+ integrity sha512-HFESzd9rx2ZQxlK+TL7tu1HPvCqrHiL6LCxYykI2c34mvaUuIVVl3lYuicJD/MNnzgPnyeBEMlK4WTomJCV5jw==
dependencies:
- "@smithy/types" "^4.5.0"
-
-"@smithy/shared-ini-file-loader@^4.2.0":
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.2.0.tgz#e4717242686bf611bd1a5d6f79870abe480c1c99"
- integrity sha512-OQTfmIEp2LLuWdxa8nEEPhZmiOREO6bcB6pjs0AySf4yiZhl6kMOfqmcwcY8BaBPX+0Tb+tG7/Ia/6mwpoZ7Pw==
- dependencies:
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
-
-"@smithy/signature-v4@^5.2.1":
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/@smithy/signature-v4/-/signature-v4-5.2.1.tgz#0048489d2f1b3c888382595a085edd31967498f8"
- integrity sha512-M9rZhWQLjlQVCCR37cSjHfhriGRN+FQ8UfgrYNufv66TJgk+acaggShl3KS5U/ssxivvZLlnj7QH2CUOKlxPyA==
- dependencies:
- "@smithy/is-array-buffer" "^4.1.0"
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/types" "^4.5.0"
- "@smithy/util-hex-encoding" "^4.1.0"
- "@smithy/util-middleware" "^4.1.1"
- "@smithy/util-uri-escape" "^4.1.0"
- "@smithy/util-utf8" "^4.1.0"
- tslib "^2.6.2"
+ c12 "3.3.4"
+ deepmerge-ts "7.1.5"
+ effect "3.20.0"
+ empathic "2.0.0"
-"@smithy/smithy-client@^4.6.4":
- version "4.6.4"
- resolved "https://registry.yarnpkg.com/@smithy/smithy-client/-/smithy-client-4.6.4.tgz#3a66bb71c91dadf1806adab664ba2e164a1139ab"
- integrity sha512-qL7O3VDyfzCSN9r+sdbQXGhaHtrfSJL30En6Jboj0I3bobf2g1/T0eP2L4qxqrEW26gWhJ4THI4ElVVLjYyBHg==
- dependencies:
- "@smithy/core" "^3.12.0"
- "@smithy/middleware-endpoint" "^4.2.4"
- "@smithy/middleware-stack" "^4.1.1"
- "@smithy/protocol-http" "^5.2.1"
- "@smithy/types" "^4.5.0"
- "@smithy/util-stream" "^4.3.2"
- tslib "^2.6.2"
-
-"@smithy/types@^4.5.0":
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/@smithy/types/-/types-4.5.0.tgz#850e334662a1ef1286c35814940c80880400a370"
- integrity sha512-RkUpIOsVlAwUIZXO1dsz8Zm+N72LClFfsNqf173catVlvRZiwPy0x2u0JLEA4byreOPKDZPGjmPDylMoP8ZJRg==
+"@prisma/debug@7.2.0":
+ version "7.2.0"
+ resolved "https://registry.npmjs.org/@prisma/debug/-/debug-7.2.0.tgz"
+ integrity sha512-YSGTiSlBAVJPzX4ONZmMotL+ozJwQjRmZweQNIq/ER0tQJKJynNkRB3kyvt37eOfsbMCXk3gnLF6J9OJ4QWftw==
+
+"@prisma/debug@7.8.0":
+ version "7.8.0"
+ resolved "https://registry.npmjs.org/@prisma/debug/-/debug-7.8.0.tgz"
+ integrity sha512-p+QZReysDUqXC+mk17q9a+Y/qzh4c2KYliDK30buYUyfrGeTGSyfmc0AIrJRhZJrLHhRiJa9Au/J72h3C+szvA==
+
+"@prisma/dev@0.24.3":
+ version "0.24.3"
+ resolved "https://registry.npmjs.org/@prisma/dev/-/dev-0.24.3.tgz"
+ integrity sha512-ffHlQuKXZiaDt9Go0OnCTdJZrHxK0k7omJKNV86/VjpsXu5EIHZLK0T7JSWgvNlJwh56kW9JFu9v0qJciFzepg==
+ dependencies:
+ "@electric-sql/pglite" "0.4.1"
+ "@electric-sql/pglite-socket" "0.1.1"
+ "@electric-sql/pglite-tools" "0.3.1"
+ "@hono/node-server" "1.19.11"
+ "@prisma/get-platform" "7.2.0"
+ "@prisma/query-plan-executor" "7.2.0"
+ "@prisma/streams-local" "0.1.2"
+ foreground-child "3.3.1"
+ get-port-please "3.2.0"
+ hono "^4.12.8"
+ http-status-codes "2.3.0"
+ pathe "2.0.3"
+ proper-lockfile "4.1.2"
+ remeda "2.33.4"
+ std-env "3.10.0"
+ valibot "1.2.0"
+ zeptomatch "2.1.0"
+
+"@prisma/engines-version@7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a":
+ version "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a"
+ resolved "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a.tgz"
+ integrity sha512-fJPQxCkLgA5EayWaW8eArgCvjJ+N+Kz3VyeNKMEeYiQC4alNkxRKFVAGxv/ZUzuJISKqdw+zGeDbS6mn6RCPOA==
+
+"@prisma/engines@7.8.0":
+ version "7.8.0"
+ resolved "https://registry.npmjs.org/@prisma/engines/-/engines-7.8.0.tgz"
+ integrity sha512-jx3rCnNNrt5uzbkKlegtQ2GZHxSlihMCzutgT/BP6UIDF1r9tDI39hV/0T/cHZgzJ3ELbuQPXlVZy+Y1n0pcgw==
+ dependencies:
+ "@prisma/debug" "7.8.0"
+ "@prisma/engines-version" "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a"
+ "@prisma/fetch-engine" "7.8.0"
+ "@prisma/get-platform" "7.8.0"
+
+"@prisma/fetch-engine@7.8.0":
+ version "7.8.0"
+ resolved "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-7.8.0.tgz"
+ integrity sha512-gwB0Euiz/DDRyxFRpLXYlK3RfaZUj1c5dAYMuhZYfApg7arknJlcb9bIsOHDppJmbqYaVA+yBIiFMDBfprsNPQ==
+ dependencies:
+ "@prisma/debug" "7.8.0"
+ "@prisma/engines-version" "7.8.0-6.3c6e192761c0362d496ed980de936e2f3cebcd3a"
+ "@prisma/get-platform" "7.8.0"
+
+"@prisma/get-platform@7.2.0":
+ version "7.2.0"
+ resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.2.0.tgz"
+ integrity sha512-k1V0l0Td1732EHpAfi2eySTezyllok9dXb6UQanajkJQzPUGi3vO2z7jdkz67SypFTdmbnyGYxvEvYZdZsMAVA==
dependencies:
- tslib "^2.6.2"
+ "@prisma/debug" "7.2.0"
-"@smithy/url-parser@^4.1.1":
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/@smithy/url-parser/-/url-parser-4.1.1.tgz#0e9a5e72b3cf9d7ab7305f9093af5528d9debaf6"
- integrity sha512-bx32FUpkhcaKlEoOMbScvc93isaSiRM75pQ5IgIBaMkT7qMlIibpPRONyx/0CvrXHzJLpOn/u6YiDX2hcvs7Dg==
+"@prisma/get-platform@7.8.0":
+ version "7.8.0"
+ resolved "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-7.8.0.tgz"
+ integrity sha512-WlxgRGnolL8VH2EmkH1R/DkKNr/mVdS3G2h42IZFFZ3eUrH9OT6t73kIOSlkkrv50wG123Iq8d96ufv5LlZktw==
dependencies:
- "@smithy/querystring-parser" "^4.1.1"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
+ "@prisma/debug" "7.8.0"
-"@smithy/util-base64@^4.1.0":
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-base64/-/util-base64-4.1.0.tgz#5965026081d9aef4a8246f5702807570abe538b2"
- integrity sha512-RUGd4wNb8GeW7xk+AY5ghGnIwM96V0l2uzvs/uVHf+tIuVX2WSvynk5CxNoBCsM2rQRSZElAo9rt3G5mJ/gktQ==
- dependencies:
- "@smithy/util-buffer-from" "^4.1.0"
- "@smithy/util-utf8" "^4.1.0"
- tslib "^2.6.2"
+"@prisma/query-plan-executor@7.2.0":
+ version "7.2.0"
+ resolved "https://registry.npmjs.org/@prisma/query-plan-executor/-/query-plan-executor-7.2.0.tgz"
+ integrity sha512-EOZmNzcV8uJ0mae3DhTsiHgoNCuu1J9mULQpGCh62zN3PxPTd+qI9tJvk5jOst8WHKQNwJWR3b39t0XvfBB0WQ==
-"@smithy/util-body-length-browser@^4.1.0":
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.1.0.tgz#636bdf4bc878c546627dab4b9b0e4db31b475be7"
- integrity sha512-V2E2Iez+bo6bUMOTENPr6eEmepdY8Hbs+Uc1vkDKgKNA/brTJqOW/ai3JO1BGj9GbCeLqw90pbbH7HFQyFotGQ==
+"@prisma/streams-local@0.1.2":
+ version "0.1.2"
+ resolved "https://registry.npmjs.org/@prisma/streams-local/-/streams-local-0.1.2.tgz"
+ integrity sha512-l49yTxKKF2odFxaAXTmwmkBKL3+bVQ1tFOooGifu4xkdb9NMNLxHj27XAhTylWZod8I+ISGM5erU1xcl/oBCtg==
dependencies:
- tslib "^2.6.2"
+ ajv "^8.12.0"
+ better-result "^2.7.0"
+ env-paths "^3.0.0"
+ proper-lockfile "^4.1.2"
-"@smithy/util-body-length-node@^4.1.0":
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-body-length-node/-/util-body-length-node-4.1.0.tgz#646750e4af58f97254a5d5cfeaba7d992f0152ec"
- integrity sha512-BOI5dYjheZdgR9XiEM3HJcEMCXSoqbzu7CzIgYrx0UtmvtC3tC2iDGpJLsSRFffUpy8ymsg2ARMP5fR8mtuUQQ==
+"@prisma/studio-core@0.27.3":
+ version "0.27.3"
+ resolved "https://registry.npmjs.org/@prisma/studio-core/-/studio-core-0.27.3.tgz"
+ integrity sha512-AADjNFPdsrglxHQVTmHFqv6DuKQZ5WY4p5/gVFY017twvNrSwpLJ9lqUbYYxEu2W7nbvVxTZA8deJ8LseNALsw==
dependencies:
- tslib "^2.6.2"
+ "@radix-ui/react-toggle" "1.1.10"
+ chart.js "4.5.1"
-"@smithy/util-buffer-from@^2.2.0":
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz#6fc88585165ec73f8681d426d96de5d402021e4b"
- integrity sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==
- dependencies:
- "@smithy/is-array-buffer" "^2.2.0"
- tslib "^2.6.2"
+"@radix-ui/primitive@1.1.3":
+ version "1.1.3"
+ resolved "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz"
+ integrity sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==
-"@smithy/util-buffer-from@^4.1.0":
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-buffer-from/-/util-buffer-from-4.1.0.tgz#21f9e644a0eb41226d92e4eff763f76a7db7e9cc"
- integrity sha512-N6yXcjfe/E+xKEccWEKzK6M+crMrlwaCepKja0pNnlSkm6SjAeLKKA++er5Ba0I17gvKfN/ThV+ZOx/CntKTVw==
- dependencies:
- "@smithy/is-array-buffer" "^4.1.0"
- tslib "^2.6.2"
+"@radix-ui/react-compose-refs@1.1.2":
+ version "1.1.2"
+ resolved "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz"
+ integrity sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==
-"@smithy/util-config-provider@^4.1.0":
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-config-provider/-/util-config-provider-4.1.0.tgz#6a07d73446c1e9a46d7a3c125f2a9301060bc957"
- integrity sha512-swXz2vMjrP1ZusZWVTB/ai5gK+J8U0BWvP10v9fpcFvg+Xi/87LHvHfst2IgCs1i0v4qFZfGwCmeD/KNCdJZbQ==
+"@radix-ui/react-primitive@2.1.3":
+ version "2.1.3"
+ resolved "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz"
+ integrity sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==
dependencies:
- tslib "^2.6.2"
+ "@radix-ui/react-slot" "1.2.3"
-"@smithy/util-defaults-mode-browser@^4.1.4":
- version "4.1.4"
- resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.1.4.tgz#a967e994d4581682891f7252c7a42a2d6c1841e4"
- integrity sha512-mLDJ1s4eA3vwOGaQOEPlg5LB4LdZUUMpB5UMOMofeGhWqiS7WR7dTpLiNi9zVn+YziKUd3Af5NLfxDs7NJqmIw==
+"@radix-ui/react-slot@1.2.3":
+ version "1.2.3"
+ resolved "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz"
+ integrity sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==
dependencies:
- "@smithy/property-provider" "^4.1.1"
- "@smithy/smithy-client" "^4.6.4"
- "@smithy/types" "^4.5.0"
- bowser "^2.11.0"
- tslib "^2.6.2"
-
-"@smithy/util-defaults-mode-node@^4.1.4":
- version "4.1.4"
- resolved "https://registry.yarnpkg.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.1.4.tgz#ce6b88431db4c5b42933904fd0051c91415c41ab"
- integrity sha512-pjX2iMTcOASaSanAd7bu6i3fcMMezr3NTr8Rh64etB0uHRZi+Aw86DoCxPESjY4UTIuA06hhqtTtw95o//imYA==
- dependencies:
- "@smithy/config-resolver" "^4.2.2"
- "@smithy/credential-provider-imds" "^4.1.2"
- "@smithy/node-config-provider" "^4.2.2"
- "@smithy/property-provider" "^4.1.1"
- "@smithy/smithy-client" "^4.6.4"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
+ "@radix-ui/react-compose-refs" "1.1.2"
-"@smithy/util-endpoints@^3.1.2":
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/@smithy/util-endpoints/-/util-endpoints-3.1.2.tgz#be4005c8616923d453347048ef26a439267b2782"
- integrity sha512-+AJsaaEGb5ySvf1SKMRrPZdYHRYSzMkCoK16jWnIMpREAnflVspMIDeCVSZJuj+5muZfgGpNpijE3mUNtjv01Q==
+"@radix-ui/react-toggle@1.1.10":
+ version "1.1.10"
+ resolved "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz"
+ integrity sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==
dependencies:
- "@smithy/node-config-provider" "^4.2.2"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
+ "@radix-ui/primitive" "1.1.3"
+ "@radix-ui/react-primitive" "2.1.3"
+ "@radix-ui/react-use-controllable-state" "1.2.2"
-"@smithy/util-hex-encoding@^4.1.0":
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.1.0.tgz#9b27cf0c25d0de2c8ebfe75cc20df84e5014ccc9"
- integrity sha512-1LcueNN5GYC4tr8mo14yVYbh/Ur8jHhWOxniZXii+1+ePiIbsLZ5fEI0QQGtbRRP5mOhmooos+rLmVASGGoq5w==
+"@radix-ui/react-use-controllable-state@1.2.2":
+ version "1.2.2"
+ resolved "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz"
+ integrity sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==
dependencies:
- tslib "^2.6.2"
+ "@radix-ui/react-use-effect-event" "0.0.2"
+ "@radix-ui/react-use-layout-effect" "1.1.1"
-"@smithy/util-middleware@^4.1.1":
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/@smithy/util-middleware/-/util-middleware-4.1.1.tgz#e19749a127499c9bdada713a8afd807d92d846e2"
- integrity sha512-CGmZ72mL29VMfESz7S6dekqzCh8ZISj3B+w0g1hZFXaOjGTVaSqfAEFAq8EGp8fUL+Q2l8aqNmt8U1tglTikeg==
+"@radix-ui/react-use-effect-event@0.0.2":
+ version "0.0.2"
+ resolved "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz"
+ integrity sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==
dependencies:
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
+ "@radix-ui/react-use-layout-effect" "1.1.1"
-"@smithy/util-retry@^4.1.2":
- version "4.1.2"
- resolved "https://registry.yarnpkg.com/@smithy/util-retry/-/util-retry-4.1.2.tgz#8d28c27cf69643e173c75cc18ff0186deb7cefed"
- integrity sha512-NCgr1d0/EdeP6U5PSZ9Uv5SMR5XRRYoVr1kRVtKZxWL3tixEL3UatrPIMFZSKwHlCcp2zPLDvMubVDULRqeunA==
- dependencies:
- "@smithy/service-error-classification" "^4.1.2"
- "@smithy/types" "^4.5.0"
- tslib "^2.6.2"
+"@radix-ui/react-use-layout-effect@1.1.1":
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz"
+ integrity sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==
-"@smithy/util-stream@^4.3.2":
- version "4.3.2"
- resolved "https://registry.yarnpkg.com/@smithy/util-stream/-/util-stream-4.3.2.tgz#7ce40c266b1e828d73c27e545959cda4f42fd61f"
- integrity sha512-Ka+FA2UCC/Q1dEqUanCdpqwxOFdf5Dg2VXtPtB1qxLcSGh5C1HdzklIt18xL504Wiy9nNUKwDMRTVCbKGoK69g==
- dependencies:
- "@smithy/fetch-http-handler" "^5.2.1"
- "@smithy/node-http-handler" "^4.2.1"
- "@smithy/types" "^4.5.0"
- "@smithy/util-base64" "^4.1.0"
- "@smithy/util-buffer-from" "^4.1.0"
- "@smithy/util-hex-encoding" "^4.1.0"
- "@smithy/util-utf8" "^4.1.0"
- tslib "^2.6.2"
+"@sapphire/async-queue@^1.5.2", "@sapphire/async-queue@^1.5.3":
+ version "1.5.5"
+ resolved "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.5.5.tgz"
+ integrity sha512-cvGzxbba6sav2zZkH8GPf2oGk9yYoD5qrNWdu9fRehifgnFZJMV+nuy2nON2roRO4yQQ+v7MK/Pktl/HgfsUXg==
-"@smithy/util-uri-escape@^4.1.0":
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-uri-escape/-/util-uri-escape-4.1.0.tgz#ed4a5c498f1da07122ca1e3df4ca3e2c67c6c18a"
- integrity sha512-b0EFQkq35K5NHUYxU72JuoheM6+pytEVUGlTwiFxWFpmddA+Bpz3LgsPRIpBk8lnPE47yT7AF2Egc3jVnKLuPg==
+"@sapphire/shapeshift@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/@sapphire/shapeshift/-/shapeshift-4.0.0.tgz"
+ integrity sha512-d9dUmWVA7MMiKobL3VpLF8P2aeanRTu6ypG2OIaEv/ZHH/SUQ2iHOVyi5wAPjQ+HmnMuL0whK9ez8I/raWbtIg==
dependencies:
- tslib "^2.6.2"
+ fast-deep-equal "^3.1.3"
+ lodash "^4.17.21"
-"@smithy/util-utf8@^2.0.0":
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-2.3.0.tgz#dd96d7640363259924a214313c3cf16e7dd329c5"
- integrity sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==
- dependencies:
- "@smithy/util-buffer-from" "^2.2.0"
- tslib "^2.6.2"
+"@sapphire/snowflake@3.5.3":
+ version "3.5.3"
+ resolved "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.3.tgz"
+ integrity sha512-jjmJywLAFoWeBi1W7994zZyiNWPIiqRRNAmSERxyg93xRGzNYvGjlZ0gR6x0F4gPRi2+0O6S71kOZYyr3cxaIQ==
-"@smithy/util-utf8@^4.1.0":
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/@smithy/util-utf8/-/util-utf8-4.1.0.tgz#912c33c1a06913f39daa53da79cb8f7ab740d97b"
- integrity sha512-mEu1/UIXAdNYuBcyEPbjScKi/+MQVXNIuY/7Cm5XLIWe319kDrT5SizBE95jqtmEXoDbGoZxKLCMttdZdqTZKQ==
- dependencies:
- "@smithy/util-buffer-from" "^4.1.0"
- tslib "^2.6.2"
+"@sapphire/snowflake@^3.5.3", "@sapphire/snowflake@^3.5.5":
+ version "3.5.5"
+ resolved "https://registry.npmjs.org/@sapphire/snowflake/-/snowflake-3.5.5.tgz"
+ integrity sha512-xzvBr1Q1c4lCe7i6sRnrofxeO1QTP/LKQ6A6qy0iB4x5yfiSfARMEQEghojzTNALDTcv8En04qYNIco9/K9eZQ==
-"@smithy/uuid@^1.0.0":
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/@smithy/uuid/-/uuid-1.0.0.tgz#a0fd3aa879d57e2f2fd6a7308deee864a412e1cf"
- integrity sha512-OlA/yZHh0ekYFnbUkmYBDQPE6fGfdrvgz39ktp8Xf+FA6BfxLejPTMDOG0Nfk5/rDySAz1dRbFf24zaAFYVXlQ==
- dependencies:
- tslib "^2.6.2"
+"@standard-schema/spec@^1.0.0":
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz"
+ integrity sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==
-"@types/node@*", "@types/node@^24.5.2":
- version "24.5.2"
- resolved "https://registry.yarnpkg.com/@types/node/-/node-24.5.2.tgz#52ceb83f50fe0fcfdfbd2a9fab6db2e9e7ef6446"
- integrity sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==
+"@types/node@*", "@types/node@^25.9.2":
+ version "25.9.2"
+ resolved "https://registry.npmjs.org/@types/node/-/node-25.9.2.tgz"
+ integrity sha512-G05zqtJhcDLb8uslf5EjCxXg9G1KQxiV8OS0R26IC//Eoyitzqe8z37I7cqvnZlrlSfgocQRfSn/AHBZJJFyGw==
dependencies:
- undici-types "~7.12.0"
+ undici-types ">=7.24.0 <7.24.7"
-"@types/nodemailer@^7.0.1":
- version "7.0.1"
- resolved "https://registry.yarnpkg.com/@types/nodemailer/-/nodemailer-7.0.1.tgz#d52f769bb09745cc67e09bf3935531b992d22857"
- integrity sha512-UfHAghPmGZVzaL8x9y+mKZMWyHC399+iq0MOmya5tIyenWX3lcdSb60vOmp0DocR6gCDTYTozv/ULQnREyyjkg==
+"@types/nodemailer@^8.0.0":
+ version "8.0.0"
+ resolved "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-8.0.0.tgz"
+ integrity sha512-fyf8jWULsCo0d0BuoQ75i6IeoHs47qcqxWc7yUdUcV0pOZGjUTTOvwdG1PRXUDqN/8A64yQdQdnA2pZgcdi+cA==
dependencies:
- "@aws-sdk/client-sesv2" "^3.839.0"
"@types/node" "*"
"@types/ws@^8.5.10":
version "8.18.1"
- resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.18.1.tgz#48464e4bf2ddfd17db13d845467f6070ffea4aa9"
+ resolved "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz"
integrity sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==
dependencies:
"@types/node" "*"
"@vladfrangu/async_event_emitter@^2.2.4", "@vladfrangu/async_event_emitter@^2.4.6":
version "2.4.6"
- resolved "https://registry.yarnpkg.com/@vladfrangu/async_event_emitter/-/async_event_emitter-2.4.6.tgz#508b6c45b03f917112a9008180b308ba0e4d1805"
+ resolved "https://registry.npmjs.org/@vladfrangu/async_event_emitter/-/async_event_emitter-2.4.6.tgz"
integrity sha512-RaI5qZo6D2CVS6sTHFKg1v5Ohq/+Bo2LZ5gzUEwZ/WkHhwtGTCB/sVLw8ijOkAUxasZ+WshN/Rzj4ywsABJ5ZA==
+ajv@^8.12.0:
+ version "8.20.0"
+ resolved "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz"
+ integrity sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==
+ dependencies:
+ fast-deep-equal "^3.1.3"
+ fast-uri "^3.0.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+
+ansi-colors@^4.1.1:
+ version "4.1.3"
+ resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz"
+ integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
+
+ansi-regex@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
+ integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
ansi-styles@^4.1.0:
version "4.3.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+ resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz"
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
dependencies:
color-convert "^2.0.1"
-bowser@^2.11.0:
- version "2.12.1"
- resolved "https://registry.yarnpkg.com/bowser/-/bowser-2.12.1.tgz#f9ad78d7aebc472feb63dd9635e3ce2337e0e2c1"
- integrity sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==
+aws-ssl-profiles@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz"
+ integrity sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==
+
+better-result@^2.7.0:
+ version "2.9.2"
+ resolved "https://registry.npmjs.org/better-result/-/better-result-2.9.2.tgz"
+ integrity sha512-WIFoBPCdnTOdk9inkE1ZRvCZ4P0CpSkAiLlchC65N7n9DcjZ3NhqkBOlafzpOVnO8ixyi37kicmSJ3ENhPZl7Q==
+
+c12@3.3.4:
+ version "3.3.4"
+ resolved "https://registry.npmjs.org/c12/-/c12-3.3.4.tgz"
+ integrity sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==
+ dependencies:
+ chokidar "^5.0.0"
+ confbox "^0.2.4"
+ defu "^6.1.6"
+ dotenv "^17.3.1"
+ exsolve "^1.0.8"
+ giget "^3.2.0"
+ jiti "^2.6.1"
+ ohash "^2.0.11"
+ pathe "^2.0.3"
+ perfect-debounce "^2.1.0"
+ pkg-types "^2.3.0"
+ rc9 "^3.0.1"
chalk@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
+ resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz"
integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
+chart.js@4.5.1:
+ version "4.5.1"
+ resolved "https://registry.npmjs.org/chart.js/-/chart.js-4.5.1.tgz"
+ integrity sha512-GIjfiT9dbmHRiYi6Nl2yFCq7kkwdkp1W/lp2J99rX0yo9tgJGn3lKQATztIjb5tVtevcBtIdICNWqlq5+E8/Pw==
+ dependencies:
+ "@kurkle/color" "^0.3.0"
+
+chokidar@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/chokidar/-/chokidar-5.0.0.tgz"
+ integrity sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==
+ dependencies:
+ readdirp "^5.0.0"
+
color-convert@^2.0.1:
version "2.0.1"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+ resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz"
integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
dependencies:
color-name "~1.1.4"
color-name@~1.1.4:
version "1.1.4"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz"
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
commander@^11.1.0:
version "11.1.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906"
+ resolved "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz"
integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==
-cross-spawn@^7.0.3:
+confbox@^0.2.4:
+ version "0.2.4"
+ resolved "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz"
+ integrity sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==
+
+cross-spawn@^7.0.3, cross-spawn@^7.0.6:
version "7.0.6"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
+ resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz"
integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
dependencies:
path-key "^3.1.0"
shebang-command "^2.0.0"
which "^2.0.1"
+deepmerge-ts@7.1.5:
+ version "7.1.5"
+ resolved "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz"
+ integrity sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==
+
+defu@^6.1.6:
+ version "6.1.7"
+ resolved "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz"
+ integrity sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==
+
+denque@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz"
+ integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==
+
+destr@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz"
+ integrity sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==
+
discord-api-types@^0.38.1, discord-api-types@^0.38.16:
version "0.38.26"
- resolved "https://registry.yarnpkg.com/discord-api-types/-/discord-api-types-0.38.26.tgz#d30f6bf0a4725b0a5ea46e0a12cef0b8880bbc9a"
+ resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.26.tgz"
integrity sha512-xpmPviHjIJ6dFu1eNwNDIGQ3N6qmPUUYFVAx/YZ64h7ZgPkTcKjnciD8bZe8Vbeji7yS5uYljyciunpq0J5NSw==
+discord-api-types@^0.38.33, discord-api-types@^0.38.40:
+ version "0.38.48"
+ resolved "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.38.48.tgz"
+ integrity sha512-WFUE/2o0lBlLeCQonQ+Pu2RqHAqbytBJ2RlXR91gzk05InSS6k9ShzzLYoymrA4c2oRgRKGE7/VqQJNNdGWSxQ==
+
discord-sync-commands@^0.5.2:
version "0.5.2"
- resolved "https://registry.yarnpkg.com/discord-sync-commands/-/discord-sync-commands-0.5.2.tgz#093aa08894980e5158a672139077d675d94c5f4c"
+ resolved "https://registry.npmjs.org/discord-sync-commands/-/discord-sync-commands-0.5.2.tgz"
integrity sha512-RGinA7lJ1zg1bE7Ph6ltvHXiajzUeLD8bH3TtXpB6E4PUL35jHG295WySG838+TnTzk1j9AxtRLmjeOS64c09A==
dependencies:
discord.js "^14.20.0"
-discord.js@^14.20.0, discord.js@^14.22.1:
+discord.js@^14.20.0:
version "14.22.1"
- resolved "https://registry.yarnpkg.com/discord.js/-/discord.js-14.22.1.tgz#aa364cf0108b41bac3eaa9fa1aae836d0882a91c"
+ resolved "https://registry.npmjs.org/discord.js/-/discord.js-14.22.1.tgz"
integrity sha512-3k+Kisd/v570Jr68A1kNs7qVhNehDwDJAPe4DZ2Syt+/zobf9zEcuYFvsfIaAOgCa0BiHMfOOKQY4eYINl0z7w==
dependencies:
"@discordjs/builders" "^1.11.2"
@@ -1303,14 +767,38 @@ discord.js@^14.20.0, discord.js@^14.22.1:
tslib "^2.6.3"
undici "6.21.3"
+discord.js@^14.26.4:
+ version "14.26.4"
+ resolved "https://registry.npmjs.org/discord.js/-/discord.js-14.26.4.tgz"
+ integrity sha512-4oBp8tc6Kf8IDBwAHhbsMaAqx1b5fob9SNasZT7V6yyyUydoO5i5fGuX7TmvRtR+q/WgKRnRViRoAWnG7fNyvA==
+ dependencies:
+ "@discordjs/builders" "^1.14.1"
+ "@discordjs/collection" "1.5.3"
+ "@discordjs/formatters" "^0.6.2"
+ "@discordjs/rest" "^2.6.1"
+ "@discordjs/util" "^1.2.0"
+ "@discordjs/ws" "^1.2.3"
+ "@sapphire/snowflake" "3.5.3"
+ discord-api-types "^0.38.40"
+ fast-deep-equal "3.1.3"
+ lodash.snakecase "4.1.1"
+ magic-bytes.js "^1.13.0"
+ tslib "^2.6.3"
+ undici "6.24.1"
+
dotenv@^17.2.1:
version "17.2.2"
- resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-17.2.2.tgz#4010cfe1c2be4fc0f46fd3d951afb424bc067ac6"
+ resolved "https://registry.npmjs.org/dotenv/-/dotenv-17.2.2.tgz"
integrity sha512-Sf2LSQP+bOlhKWWyhFsn0UsfdK/kCWRv1iuA2gXAwt3dyNabr6QSj00I2V10pidqz69soatm9ZwZvpQMTIOd5Q==
+dotenv@^17.3.1:
+ version "17.4.2"
+ resolved "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz"
+ integrity sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==
+
eciesjs@^0.4.10:
version "0.4.15"
- resolved "https://registry.yarnpkg.com/eciesjs/-/eciesjs-0.4.15.tgz#8c7191ce425c54627ee5c65328ab54eaa6ed4556"
+ resolved "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.15.tgz"
integrity sha512-r6kEJXDKecVOCj2nLMuXK/FCPeurW33+3JRpfXVbjLja3XUYFfD9I/JBreH6sUyzcm3G/YQboBjMla6poKeSdA==
dependencies:
"@ecies/ciphers" "^0.2.3"
@@ -1318,41 +806,67 @@ eciesjs@^0.4.10:
"@noble/curves" "^1.9.1"
"@noble/hashes" "^1.8.0"
-esbuild@~0.25.0:
- version "0.25.10"
- resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.10.tgz#37f5aa5cd14500f141be121c01b096ca83ac34a9"
- integrity sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==
+effect@3.20.0:
+ version "3.20.0"
+ resolved "https://registry.npmjs.org/effect/-/effect-3.20.0.tgz"
+ integrity sha512-qMLfDJscrNG8p/aw+IkT9W7fgj50Z4wG5bLBy0Txsxz8iUHjDIkOgO3SV0WZfnQbNG2VJYb0b+rDLMrhM4+Krw==
+ dependencies:
+ "@standard-schema/spec" "^1.0.0"
+ fast-check "^3.23.1"
+
+empathic@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz"
+ integrity sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==
+
+enquirer@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz"
+ integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==
+ dependencies:
+ ansi-colors "^4.1.1"
+ strip-ansi "^6.0.1"
+
+env-paths@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz"
+ integrity sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==
+
+esbuild@~0.28.0:
+ version "0.28.0"
+ resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz"
+ integrity sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==
optionalDependencies:
- "@esbuild/aix-ppc64" "0.25.10"
- "@esbuild/android-arm" "0.25.10"
- "@esbuild/android-arm64" "0.25.10"
- "@esbuild/android-x64" "0.25.10"
- "@esbuild/darwin-arm64" "0.25.10"
- "@esbuild/darwin-x64" "0.25.10"
- "@esbuild/freebsd-arm64" "0.25.10"
- "@esbuild/freebsd-x64" "0.25.10"
- "@esbuild/linux-arm" "0.25.10"
- "@esbuild/linux-arm64" "0.25.10"
- "@esbuild/linux-ia32" "0.25.10"
- "@esbuild/linux-loong64" "0.25.10"
- "@esbuild/linux-mips64el" "0.25.10"
- "@esbuild/linux-ppc64" "0.25.10"
- "@esbuild/linux-riscv64" "0.25.10"
- "@esbuild/linux-s390x" "0.25.10"
- "@esbuild/linux-x64" "0.25.10"
- "@esbuild/netbsd-arm64" "0.25.10"
- "@esbuild/netbsd-x64" "0.25.10"
- "@esbuild/openbsd-arm64" "0.25.10"
- "@esbuild/openbsd-x64" "0.25.10"
- "@esbuild/openharmony-arm64" "0.25.10"
- "@esbuild/sunos-x64" "0.25.10"
- "@esbuild/win32-arm64" "0.25.10"
- "@esbuild/win32-ia32" "0.25.10"
- "@esbuild/win32-x64" "0.25.10"
+ "@esbuild/aix-ppc64" "0.28.0"
+ "@esbuild/android-arm" "0.28.0"
+ "@esbuild/android-arm64" "0.28.0"
+ "@esbuild/android-x64" "0.28.0"
+ "@esbuild/darwin-arm64" "0.28.0"
+ "@esbuild/darwin-x64" "0.28.0"
+ "@esbuild/freebsd-arm64" "0.28.0"
+ "@esbuild/freebsd-x64" "0.28.0"
+ "@esbuild/linux-arm" "0.28.0"
+ "@esbuild/linux-arm64" "0.28.0"
+ "@esbuild/linux-ia32" "0.28.0"
+ "@esbuild/linux-loong64" "0.28.0"
+ "@esbuild/linux-mips64el" "0.28.0"
+ "@esbuild/linux-ppc64" "0.28.0"
+ "@esbuild/linux-riscv64" "0.28.0"
+ "@esbuild/linux-s390x" "0.28.0"
+ "@esbuild/linux-x64" "0.28.0"
+ "@esbuild/netbsd-arm64" "0.28.0"
+ "@esbuild/netbsd-x64" "0.28.0"
+ "@esbuild/openbsd-arm64" "0.28.0"
+ "@esbuild/openbsd-x64" "0.28.0"
+ "@esbuild/openharmony-arm64" "0.28.0"
+ "@esbuild/sunos-x64" "0.28.0"
+ "@esbuild/win32-arm64" "0.28.0"
+ "@esbuild/win32-ia32" "0.28.0"
+ "@esbuild/win32-x64" "0.28.0"
execa@^5.1.1:
version "5.1.1"
- resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
+ resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz"
integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
dependencies:
cross-spawn "^7.0.3"
@@ -1365,235 +879,474 @@ execa@^5.1.1:
signal-exit "^3.0.3"
strip-final-newline "^2.0.0"
+exsolve@^1.0.8:
+ version "1.0.8"
+ resolved "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz"
+ integrity sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==
+
+fast-check@^3.23.1:
+ version "3.23.2"
+ resolved "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz"
+ integrity sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==
+ dependencies:
+ pure-rand "^6.1.0"
+
fast-deep-equal@3.1.3, fast-deep-equal@^3.1.3:
version "3.1.3"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
-fast-xml-parser@5.2.5:
- version "5.2.5"
- resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz#4809fdfb1310494e341098c25cb1341a01a9144a"
- integrity sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==
- dependencies:
- strnum "^2.1.0"
+fast-uri@^3.0.1:
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz"
+ integrity sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==
fdir@^6.2.0:
version "6.5.0"
- resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.5.0.tgz#ed2ab967a331ade62f18d077dae192684d50d350"
+ resolved "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz"
integrity sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==
+foreground-child@3.3.1:
+ version "3.3.1"
+ resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz"
+ integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==
+ dependencies:
+ cross-spawn "^7.0.6"
+ signal-exit "^4.0.1"
+
fsevents@~2.3.3:
version "2.3.3"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
+generate-function@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz"
+ integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==
+ dependencies:
+ is-property "^1.0.2"
+
+get-port-please@3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/get-port-please/-/get-port-please-3.2.0.tgz"
+ integrity sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==
+
get-stream@^6.0.0:
version "6.0.1"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
+ resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz"
integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
-get-tsconfig@^4.7.5:
- version "4.10.1"
- resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.10.1.tgz#d34c1c01f47d65a606c37aa7a177bc3e56ab4b2e"
- integrity sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==
- dependencies:
- resolve-pkg-maps "^1.0.0"
+giget@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/giget/-/giget-3.2.0.tgz"
+ integrity sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A==
+
+graceful-fs@^4.2.4:
+ version "4.2.11"
+ resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz"
+ integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
+
+grammex@^3.1.11:
+ version "3.1.12"
+ resolved "https://registry.npmjs.org/grammex/-/grammex-3.1.12.tgz"
+ integrity sha512-6ufJOsSA7LcQehIJNCO7HIBykfM7DXQual0Ny780/DEcJIpBlHRvcqEBWGPYd7hrXL2GJ3oJI1MIhaXjWmLQOQ==
+
+graphmatch@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/graphmatch/-/graphmatch-1.1.1.tgz"
+ integrity sha512-5ykVn/EXM1hF0XCaWh05VbYvEiOL2lY1kBxZtaYsyvjp7cmWOU1XsAdfQBwClraEofXDT197lFbXOEVMHpvQOg==
has-flag@^4.0.0:
version "4.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
+ resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz"
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
+hono@^4.12.8:
+ version "4.12.23"
+ resolved "https://registry.npmjs.org/hono/-/hono-4.12.23.tgz"
+ integrity sha512-eIaZ9qDgu7XV0pxOCrg7/WhnQ6Ivm22UcxhXx/A3dcbqbbYgBEkc6e/J/s7j2tS96zoB0S9VBdLwQNCWwUo4LA==
+
+http-status-codes@2.3.0:
+ version "2.3.0"
+ resolved "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.3.0.tgz"
+ integrity sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==
+
human-signals@^2.1.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
+ resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
+iconv-lite@^0.7.0:
+ version "0.7.2"
+ resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz"
+ integrity sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3.0.0"
+
ignore@^5.3.0:
version "5.3.2"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
+ resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz"
integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
+is-property@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz"
+ integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==
+
is-stream@^2.0.0:
version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
+ resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz"
integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
isexe@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
isexe@^3.1.1:
version "3.1.1"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-3.1.1.tgz#4a407e2bd78ddfb14bea0c27c6f7072dde775f0d"
+ resolved "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz"
integrity sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==
+jiti@^2.6.1:
+ version "2.7.0"
+ resolved "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz"
+ integrity sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==
+
+json-schema-traverse@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz"
+ integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
lodash.snakecase@4.1.1:
version "4.1.1"
- resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d"
+ resolved "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz"
integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==
lodash@^4.17.21:
version "4.17.21"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+long@^5.2.1:
+ version "5.3.2"
+ resolved "https://registry.npmjs.org/long/-/long-5.3.2.tgz"
+ integrity sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==
+
+lru.min@^1.0.0, lru.min@^1.1.0:
+ version "1.1.4"
+ resolved "https://registry.npmjs.org/lru.min/-/lru.min-1.1.4.tgz"
+ integrity sha512-DqC6n3QQ77zdFpCMASA1a3Jlb64Hv2N2DciFGkO/4L9+q/IpIAuRlKOvCXabtRW6cQf8usbmM6BE/TOPysCdIA==
+
magic-bytes.js@^1.10.0:
version "1.12.1"
- resolved "https://registry.yarnpkg.com/magic-bytes.js/-/magic-bytes.js-1.12.1.tgz#031fedceb1fc652c1ccd917c6b45a6e8d6554245"
+ resolved "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.12.1.tgz"
integrity sha512-ThQLOhN86ZkJ7qemtVRGYM+gRgR8GEXNli9H/PMvpnZsE44Xfh3wx9kGJaldg314v85m+bFW6WBMaVHJc/c3zA==
+magic-bytes.js@^1.13.0:
+ version "1.13.0"
+ resolved "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.13.0.tgz"
+ integrity sha512-afO2mnxW7GDTXMm5/AoN1WuOcdoKhtgXjIvHmobqTD1grNplhGdv3PFOyjCVmrnOZBIT/gD/koDKpYG+0mvHcg==
+
merge-stream@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
+ resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
mimic-fn@^2.1.0:
version "2.1.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
+ resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
moment@^2.24.0:
version "2.30.1"
- resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae"
+ resolved "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz"
integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==
-nodemailer@^7.0.6:
- version "7.0.6"
- resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-7.0.6.tgz#e850630242e28c64fd666c7f6ca8382baf5a5661"
- integrity sha512-F44uVzgwo49xboqbFgBGkRaiMgtoBrBEWCVincJPK9+S9Adkzt/wXCLKbf7dxucmxfTI5gHGB+bEmdyzN6QKjw==
+mysql2@3.15.3:
+ version "3.15.3"
+ resolved "https://registry.npmjs.org/mysql2/-/mysql2-3.15.3.tgz"
+ integrity sha512-FBrGau0IXmuqg4haEZRBfHNWB5mUARw6hNwPDXXGg0XzVJ50mr/9hb267lvpVMnhZ1FON3qNd4Xfcez1rbFwSg==
+ dependencies:
+ aws-ssl-profiles "^1.1.1"
+ denque "^2.1.0"
+ generate-function "^2.3.1"
+ iconv-lite "^0.7.0"
+ long "^5.2.1"
+ lru.min "^1.0.0"
+ named-placeholders "^1.1.3"
+ seq-queue "^0.0.5"
+ sqlstring "^2.3.2"
+
+named-placeholders@^1.1.3:
+ version "1.1.6"
+ resolved "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.6.tgz"
+ integrity sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==
+ dependencies:
+ lru.min "^1.1.0"
+
+nodemailer@^8.0.10:
+ version "8.0.10"
+ resolved "https://registry.npmjs.org/nodemailer/-/nodemailer-8.0.10.tgz"
+ integrity sha512-BLFuSth7QtHOkBzyqTehWWyub0NTRDuK2Q2SQfnGLsrJnzyU+Yeh4WpV1eZGuARFj1xQJHIdnTuJZLP+b9R1GQ==
npm-run-path@^4.0.1:
version "4.0.1"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
+ resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz"
integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
dependencies:
path-key "^3.0.0"
object-treeify@1.1.33:
version "1.1.33"
- resolved "https://registry.yarnpkg.com/object-treeify/-/object-treeify-1.1.33.tgz#f06fece986830a3cba78ddd32d4c11d1f76cdf40"
+ resolved "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz"
integrity sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==
+ohash@^2.0.11:
+ version "2.0.11"
+ resolved "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz"
+ integrity sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==
+
onetime@^5.1.2:
version "5.1.2"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
+ resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz"
integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
dependencies:
mimic-fn "^2.1.0"
path-key@^3.0.0, path-key@^3.1.0:
version "3.1.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
+ resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz"
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
-picomatch@^4.0.2:
- version "4.0.3"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042"
- integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==
+pathe@2.0.3, pathe@^2.0.3:
+ version "2.0.3"
+ resolved "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz"
+ integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==
-resolve-pkg-maps@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f"
- integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==
+perfect-debounce@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-2.1.0.tgz"
+ integrity sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==
+
+picomatch@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz"
+ integrity sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==
+
+pkg-types@^2.3.0:
+ version "2.3.1"
+ resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.1.tgz"
+ integrity sha512-y+ichcgc2LrADuhLNAx8DFjVfgz91pRxfZdI3UDhxHvcVEZsenLO+7XaU5vOp0u/7V/wZ+plyuQxtrDlZJ+yeg==
+ dependencies:
+ confbox "^0.2.4"
+ exsolve "^1.0.8"
+ pathe "^2.0.3"
+
+postgres@3.4.7:
+ version "3.4.7"
+ resolved "https://registry.npmjs.org/postgres/-/postgres-3.4.7.tgz"
+ integrity sha512-Jtc2612XINuBjIl/QTWsV5UvE8UHuNblcO3vVADSrKsrc6RqGX6lOW1cEo3CM2v0XG4Nat8nI+YM7/f26VxXLw==
+
+prisma@^7.8.0:
+ version "7.8.0"
+ resolved "https://registry.npmjs.org/prisma/-/prisma-7.8.0.tgz"
+ integrity sha512-yfN4yrw7HV9kEJhoy1+jgah0jafEIQsf7uWouSsM8MvJtlubsk+kM7AIBWZ8+GJl74Yj3c+nbYqBkMOxtsZ3Lw==
+ dependencies:
+ "@prisma/config" "7.8.0"
+ "@prisma/dev" "0.24.3"
+ "@prisma/engines" "7.8.0"
+ "@prisma/studio-core" "0.27.3"
+ mysql2 "3.15.3"
+ postgres "3.4.7"
+
+proper-lockfile@4.1.2, proper-lockfile@^4.1.2:
+ version "4.1.2"
+ resolved "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz"
+ integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==
+ dependencies:
+ graceful-fs "^4.2.4"
+ retry "^0.12.0"
+ signal-exit "^3.0.2"
+
+pure-rand@^6.1.0:
+ version "6.1.0"
+ resolved "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz"
+ integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==
+
+rc9@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/rc9/-/rc9-3.0.1.tgz"
+ integrity sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==
+ dependencies:
+ defu "^6.1.6"
+ destr "^2.0.5"
+
+readdirp@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.npmjs.org/readdirp/-/readdirp-5.0.0.tgz"
+ integrity sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==
+
+remeda@2.33.4:
+ version "2.33.4"
+ resolved "https://registry.npmjs.org/remeda/-/remeda-2.33.4.tgz"
+ integrity sha512-ygHswjlc/opg2VrtiYvUOPLjxjtdKvjGz1/plDhkG66hjNjFr1xmfrs2ClNFo/E6TyUFiwYNh53bKV26oBoMGQ==
+
+require-from-string@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
+retry@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz"
+ integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
+
+"safer-buffer@>= 2.1.2 < 3.0.0":
+ version "2.1.2"
+ resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
+
+seq-queue@^0.0.5:
+ version "0.0.5"
+ resolved "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz"
+ integrity sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==
shebang-command@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
+ resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz"
integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
dependencies:
shebang-regex "^3.0.0"
shebang-regex@^3.0.0:
version "3.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
+ resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz"
integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
-signal-exit@^3.0.3:
+signal-exit@^3.0.2, signal-exit@^3.0.3:
version "3.0.7"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
+ resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+signal-exit@^4.0.1:
+ version "4.1.0"
+ resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz"
+ integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
+
+sqlstring@^2.3.2:
+ version "2.3.3"
+ resolved "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz"
+ integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==
+
+std-env@3.10.0:
+ version "3.10.0"
+ resolved "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz"
+ integrity sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==
+
+strip-ansi@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
+ integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+ dependencies:
+ ansi-regex "^5.0.1"
+
strip-final-newline@^2.0.0:
version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
+ resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz"
integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
-strnum@^2.1.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.1.1.tgz#cf2a6e0cf903728b8b2c4b971b7e36b4e82d46ab"
- integrity sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==
-
supports-color@^7.1.0:
version "7.2.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
+ resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz"
integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
dependencies:
has-flag "^4.0.0"
ts-mixer@^6.0.4:
version "6.0.4"
- resolved "https://registry.yarnpkg.com/ts-mixer/-/ts-mixer-6.0.4.tgz#1da39ceabc09d947a82140d9f09db0f84919ca28"
+ resolved "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.4.tgz"
integrity sha512-ufKpbmrugz5Aou4wcr5Wc1UUFWOLhq+Fm6qa6P0w0K5Qw2yhaUoiWszhCVuNQyNwrlGiscHOmqYoAox1PtvgjA==
-ts-postgres@1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/ts-postgres/-/ts-postgres-1.3.0.tgz#b58e3335545acd7d37d5821ff0aeb1146d9d37e5"
- integrity sha512-YQY6omZM9RiMeJpzyVn36ankicZnTbSTkHaq+NTkqrLHSRYigsNW9JsPwrZXxLt1es3mV+V6/VUj0eOVcYXq1g==
- dependencies:
- ts-typed-events "^3.0.0"
-
-ts-typed-events@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ts-typed-events/-/ts-typed-events-3.0.0.tgz#2f9d96ff962edfc936402c859370337373880faa"
- integrity sha512-+2FZ0XPX+UPR7PO8ZQjuvnuDMYRhzrDaCRaNHaBG1xSL//0oPa3XMU5yxgDTzW67VzkE33fQpx1YxWBdkaF7Zw==
+ts-postgres@2.0.4:
+ version "2.0.4"
+ resolved "https://registry.npmjs.org/ts-postgres/-/ts-postgres-2.0.4.tgz"
+ integrity sha512-KQL9xd4C2tVJdV+bshA5q9KikMrqfyc1MRQCGYF5QQSBAz+prpK/b4U1wiywOLtIBzgvFfXrvEZULu3Yp7GDsg==
tslib@^2.6.2, tslib@^2.6.3:
version "2.8.1"
- resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
+ resolved "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz"
integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
-tsx@^4.20.5:
- version "4.20.5"
- resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.20.5.tgz#856c8b2f114c50a9f4ae108126967a167f240dc7"
- integrity sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==
+tsx@^4.22.4:
+ version "4.22.4"
+ resolved "https://registry.npmjs.org/tsx/-/tsx-4.22.4.tgz"
+ integrity sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==
dependencies:
- esbuild "~0.25.0"
- get-tsconfig "^4.7.5"
+ esbuild "~0.28.0"
optionalDependencies:
fsevents "~2.3.3"
-typescript@^5.9.2:
- version "5.9.2"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.2.tgz#d93450cddec5154a2d5cabe3b8102b83316fb2a6"
- integrity sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==
+typescript@^6.0.3:
+ version "6.0.3"
+ resolved "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz"
+ integrity sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==
-undici-types@~7.12.0:
- version "7.12.0"
- resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.12.0.tgz#15c5c7475c2a3ba30659529f5cdb4674b622fafb"
- integrity sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==
+"undici-types@>=7.24.0 <7.24.7":
+ version "7.24.6"
+ resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz"
+ integrity sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==
undici@6.21.3:
version "6.21.3"
- resolved "https://registry.yarnpkg.com/undici/-/undici-6.21.3.tgz#185752ad92c3d0efe7a7d1f6854a50f83b552d7a"
+ resolved "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz"
integrity sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==
+undici@6.24.1:
+ version "6.24.1"
+ resolved "https://registry.npmjs.org/undici/-/undici-6.24.1.tgz"
+ integrity sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==
+
+valibot@1.2.0:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/valibot/-/valibot-1.2.0.tgz"
+ integrity sha512-mm1rxUsmOxzrwnX5arGS+U4T25RdvpPjPN4yR0u9pUBov9+zGVtO84tif1eY4r6zWxVxu3KzIyknJy3rxfRZZg==
+
which@^2.0.1:
version "2.0.2"
- resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
+ resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
dependencies:
isexe "^2.0.0"
which@^4.0.0:
version "4.0.0"
- resolved "https://registry.yarnpkg.com/which/-/which-4.0.0.tgz#cd60b5e74503a3fbcfbf6cd6b4138a8bae644c1a"
+ resolved "https://registry.npmjs.org/which/-/which-4.0.0.tgz"
integrity sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==
dependencies:
isexe "^3.1.1"
ws@^8.17.0:
version "8.18.3"
- resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472"
+ resolved "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz"
integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==
+
+yocto-spinner@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-1.2.0.tgz"
+ integrity sha512-Yw0hUB6UA3o4YUgKy3oSe9a4cxoaZ9sBfYDw+JSxo6Id0KoJGoxzPA24qqUXYKBWABs/zDSGTz9kww7t3F0XGw==
+ dependencies:
+ yoctocolors "^2.1.1"
+
+yoctocolors@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz"
+ integrity sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==
+
+zeptomatch@2.1.0:
+ version "2.1.0"
+ resolved "https://registry.npmjs.org/zeptomatch/-/zeptomatch-2.1.0.tgz"
+ integrity sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA==
+ dependencies:
+ grammex "^3.1.11"
+ graphmatch "^1.1.0"