From 634e2bb2fb9afdff85cad24755fb6fcae100cbfd Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Sun, 25 May 2025 01:06:31 -0600 Subject: [PATCH 01/92] try absurd-sql, which fails in browser with: SyntaxError: Cannot use import statement outside a module (at registerSQLWorker.js... --- src/registerSQLWorker.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/registerSQLWorker.js diff --git a/src/registerSQLWorker.js b/src/registerSQLWorker.js new file mode 100644 index 00000000..68b9ac4b --- /dev/null +++ b/src/registerSQLWorker.js @@ -0,0 +1,28 @@ +import initSqlJs from '@jlongster/sql.js'; +import { SQLiteFS } from 'absurd-sql'; +import IndexedDBBackend from 'absurd-sql/dist/indexeddb-backend'; + +async function run() { + console.log("----- initSqlJs"); + let SQL = await initSqlJs({ locateFile: file => file }); + let sqlFS = new SQLiteFS(SQL.FS, new IndexedDBBackend()); + SQL.register_for_idb(sqlFS); + + SQL.FS.mkdir('/sql'); + SQL.FS.mount(sqlFS, {}, '/sql'); + + const path = '/sql/db.sqlite'; + if (typeof SharedArrayBuffer === 'undefined') { + let stream = SQL.FS.open(path, 'a+'); + await stream.node.contents.readIfFallback(); + SQL.FS.close(stream); + } + + let db = new SQL.Database(path, { filename: true }); + // You might want to try `PRAGMA page_size=8192;` too! + db.exec(` + PRAGMA journal_mode=MEMORY; + `); + console.log("----- db", db); +} +run(); From 6556eb55a35216e99154044732ee5123684e0463 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Sun, 25 May 2025 01:18:58 -0600 Subject: [PATCH 02/92] add the other pieces for the previous commit --- package-lock.json | 20 ++++++++++++++++++++ package.json | 2 ++ src/main.web.ts | 14 ++++++++++++++ vite.config.ts | 6 ++++++ 4 files changed, 42 insertions(+) diff --git a/package-lock.json b/package-lock.json index 74517e6d..7fa2ea91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "@fortawesome/fontawesome-svg-core": "^6.5.1", "@fortawesome/free-solid-svg-icons": "^6.5.1", "@fortawesome/vue-fontawesome": "^3.0.6", + "@jlongster/sql.js": "^1.6.7", "@peculiar/asn1-ecc": "^2.3.8", "@peculiar/asn1-schema": "^2.3.8", "@pvermeer/dexie-encrypted-addon": "^3.0.0", @@ -43,6 +44,7 @@ "@vue-leaflet/vue-leaflet": "^0.10.1", "@vueuse/core": "^12.3.0", "@zxing/text-encoding": "^0.9.0", + "absurd-sql": "^0.0.54", "asn1-ber": "^1.2.2", "axios": "^1.6.8", "cbor-x": "^1.5.9", @@ -6820,6 +6822,11 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/@jlongster/sql.js": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@jlongster/sql.js/-/sql.js-1.6.7.tgz", + "integrity": "sha512-4hf0kZr5WPoirdR5hUSfQ9O0JpH/qlW1CaR2wZ6zGrDz1xjSdTPuR8AW/oXzIHnJvZSEvlcIE+dfXJZwh/Lxfw==" + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", @@ -10005,6 +10012,14 @@ "node": ">=6.5" } }, + "node_modules/absurd-sql": { + "version": "0.0.54", + "resolved": "https://registry.npmjs.org/absurd-sql/-/absurd-sql-0.0.54.tgz", + "integrity": "sha512-p+SWTtpRs2t3sXMLxkTyLRZkEzxTv/zG/Bl93wibegLZTGAHGk68SJMWslRWHBGh63ka/ePGTXGHh1117++45Q==", + "dependencies": { + "safari-14-idb-fix": "^1.0.4" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -23335,6 +23350,11 @@ "tslib": "^2.1.0" } }, + "node_modules/safari-14-idb-fix": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/safari-14-idb-fix/-/safari-14-idb-fix-1.0.6.tgz", + "integrity": "sha512-oTEQOdMwRX+uCtWCKT1nx2gAeSdpr8elg/2gcaKUH00SJU2xWESfkx11nmXwTRHy7xfQoj1o4TTQvdmuBosTnA==" + }, "node_modules/safe-array-concat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", diff --git a/package.json b/package.json index b73c0967..74be7d90 100644 --- a/package.json +++ b/package.json @@ -63,6 +63,7 @@ "@fortawesome/fontawesome-svg-core": "^6.5.1", "@fortawesome/free-solid-svg-icons": "^6.5.1", "@fortawesome/vue-fontawesome": "^3.0.6", + "@jlongster/sql.js": "^1.6.7", "@peculiar/asn1-ecc": "^2.3.8", "@peculiar/asn1-schema": "^2.3.8", "@pvermeer/dexie-encrypted-addon": "^3.0.0", @@ -81,6 +82,7 @@ "@vue-leaflet/vue-leaflet": "^0.10.1", "@vueuse/core": "^12.3.0", "@zxing/text-encoding": "^0.9.0", + "absurd-sql": "^0.0.54", "asn1-ber": "^1.2.2", "axios": "^1.6.8", "cbor-x": "^1.5.9", diff --git a/src/main.web.ts b/src/main.web.ts index accff8c1..ad974034 100644 --- a/src/main.web.ts +++ b/src/main.web.ts @@ -1,5 +1,19 @@ +import { initBackend } from 'absurd-sql/dist/indexeddb-main-thread'; import { initializeApp } from "./main.common"; import "./registerServiceWorker"; // Web PWA support const app = initializeApp(); + +function sqlInit() { + // see https://github.com/jlongster/absurd-sql + let worker = new Worker(new URL('./registerSQLWorker.js', import.meta.url), { + type: 'module' + }); + // This is only required because Safari doesn't support nested + // workers. This installs a handler that will proxy creating web + // workers through the main thread + initBackend(worker); +} +sqlInit(); + app.mount("#app"); diff --git a/vite.config.ts b/vite.config.ts index c3702bc8..ac4dc310 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -4,6 +4,12 @@ import path from "path"; export default defineConfig({ plugins: [vue()], + server: { + headers: { + 'Cross-Origin-Opener-Policy': 'same-origin', + 'Cross-Origin-Embedder-Policy': 'require-corp' + } + }, resolve: { alias: { '@': path.resolve(__dirname, './src'), From 574520d9b3ffad4d38f208c048a5db7daf00fd05 Mon Sep 17 00:00:00 2001 From: Matt Raymer Date: Sun, 25 May 2025 04:52:16 -0400 Subject: [PATCH 03/92] feat(db): Implement SQLite database layer with migration support Add SQLite database implementation with comprehensive features: - Core database functionality: - Connection management and pooling - Schema creation and validation - Transaction support with rollback - Backup and restore capabilities - Health checks and integrity verification - Data migration: - Migration utilities from Dexie to SQLite - Data transformation and validation - Migration verification and rollback - Backup before migration - CRUD operations for all entities: - Accounts, contacts, and contact methods - Settings and secrets - Logging and audit trails - Type safety and error handling: - Full TypeScript type definitions - Runtime data validation - Comprehensive error handling - Transaction safety Note: Requires @wa-sqlite/sql.js package to be installed --- docs/dexie-to-sqlite-mapping.md | 389 ++++++++++++++++++++ docs/storage-implementation-checklist.md | 306 +++++++++++++++ main.js | 29 -- src/db/sqlite/init.ts | 293 +++++++++++++++ src/db/sqlite/migration.ts | 374 +++++++++++++++++++ src/db/sqlite/operations.ts | 449 +++++++++++++++++++++++ src/db/sqlite/types.ts | 349 ++++++++++++++++++ src/main.ts | 215 ----------- 8 files changed, 2160 insertions(+), 244 deletions(-) create mode 100644 docs/dexie-to-sqlite-mapping.md create mode 100644 docs/storage-implementation-checklist.md delete mode 100644 main.js create mode 100644 src/db/sqlite/init.ts create mode 100644 src/db/sqlite/migration.ts create mode 100644 src/db/sqlite/operations.ts create mode 100644 src/db/sqlite/types.ts delete mode 100644 src/main.ts diff --git a/docs/dexie-to-sqlite-mapping.md b/docs/dexie-to-sqlite-mapping.md new file mode 100644 index 00000000..8ffddc90 --- /dev/null +++ b/docs/dexie-to-sqlite-mapping.md @@ -0,0 +1,389 @@ +# Dexie to SQLite Mapping Guide + +## Schema Mapping + +### Current Dexie Schema +```typescript +// Current Dexie schema +const db = new Dexie('TimeSafariDB'); + +db.version(1).stores({ + accounts: 'did, publicKeyHex, createdAt, updatedAt', + settings: 'key, value, updatedAt', + contacts: 'id, did, name, createdAt, updatedAt' +}); +``` + +### New SQLite Schema +```sql +-- New SQLite schema +CREATE TABLE accounts ( + did TEXT PRIMARY KEY, + public_key_hex TEXT NOT NULL, + created_at INTEGER NOT NULL, + updated_at INTEGER NOT NULL +); + +CREATE TABLE settings ( + key TEXT PRIMARY KEY, + value TEXT NOT NULL, + updated_at INTEGER NOT NULL +); + +CREATE TABLE contacts ( + id TEXT PRIMARY KEY, + did TEXT NOT NULL, + name TEXT, + created_at INTEGER NOT NULL, + updated_at INTEGER NOT NULL, + FOREIGN KEY (did) REFERENCES accounts(did) +); + +-- Indexes for performance +CREATE INDEX idx_accounts_created_at ON accounts(created_at); +CREATE INDEX idx_contacts_did ON contacts(did); +CREATE INDEX idx_settings_updated_at ON settings(updated_at); +``` + +## Query Mapping + +### 1. Account Operations + +#### Get Account by DID +```typescript +// Dexie +const account = await db.accounts.get(did); + +// SQLite +const account = await db.selectOne(` + SELECT * FROM accounts WHERE did = ? +`, [did]); +``` + +#### Get All Accounts +```typescript +// Dexie +const accounts = await db.accounts.toArray(); + +// SQLite +const accounts = await db.selectAll(` + SELECT * FROM accounts ORDER BY created_at DESC +`); +``` + +#### Add Account +```typescript +// Dexie +await db.accounts.add({ + did, + publicKeyHex, + createdAt: Date.now(), + updatedAt: Date.now() +}); + +// SQLite +await db.execute(` + INSERT INTO accounts (did, public_key_hex, created_at, updated_at) + VALUES (?, ?, ?, ?) +`, [did, publicKeyHex, Date.now(), Date.now()]); +``` + +#### Update Account +```typescript +// Dexie +await db.accounts.update(did, { + publicKeyHex, + updatedAt: Date.now() +}); + +// SQLite +await db.execute(` + UPDATE accounts + SET public_key_hex = ?, updated_at = ? + WHERE did = ? +`, [publicKeyHex, Date.now(), did]); +``` + +### 2. Settings Operations + +#### Get Setting +```typescript +// Dexie +const setting = await db.settings.get(key); + +// SQLite +const setting = await db.selectOne(` + SELECT * FROM settings WHERE key = ? +`, [key]); +``` + +#### Set Setting +```typescript +// Dexie +await db.settings.put({ + key, + value, + updatedAt: Date.now() +}); + +// SQLite +await db.execute(` + INSERT INTO settings (key, value, updated_at) + VALUES (?, ?, ?) + ON CONFLICT(key) DO UPDATE SET + value = excluded.value, + updated_at = excluded.updated_at +`, [key, value, Date.now()]); +``` + +### 3. Contact Operations + +#### Get Contacts by Account +```typescript +// Dexie +const contacts = await db.contacts + .where('did') + .equals(accountDid) + .toArray(); + +// SQLite +const contacts = await db.selectAll(` + SELECT * FROM contacts + WHERE did = ? + ORDER BY created_at DESC +`, [accountDid]); +``` + +#### Add Contact +```typescript +// Dexie +await db.contacts.add({ + id: generateId(), + did: accountDid, + name, + createdAt: Date.now(), + updatedAt: Date.now() +}); + +// SQLite +await db.execute(` + INSERT INTO contacts (id, did, name, created_at, updated_at) + VALUES (?, ?, ?, ?, ?) +`, [generateId(), accountDid, name, Date.now(), Date.now()]); +``` + +## Transaction Mapping + +### Batch Operations +```typescript +// Dexie +await db.transaction('rw', [db.accounts, db.contacts], async () => { + await db.accounts.add(account); + await db.contacts.bulkAdd(contacts); +}); + +// SQLite +await db.transaction(async (tx) => { + await tx.execute(` + INSERT INTO accounts (did, public_key_hex, created_at, updated_at) + VALUES (?, ?, ?, ?) + `, [account.did, account.publicKeyHex, account.createdAt, account.updatedAt]); + + for (const contact of contacts) { + await tx.execute(` + INSERT INTO contacts (id, did, name, created_at, updated_at) + VALUES (?, ?, ?, ?, ?) + `, [contact.id, contact.did, contact.name, contact.createdAt, contact.updatedAt]); + } +}); +``` + +## Migration Helper Functions + +### 1. Data Export (Dexie to JSON) +```typescript +async function exportDexieData(): Promise { + const db = new Dexie('TimeSafariDB'); + + return { + accounts: await db.accounts.toArray(), + settings: await db.settings.toArray(), + contacts: await db.contacts.toArray(), + metadata: { + version: '1.0.0', + timestamp: Date.now(), + dexieVersion: Dexie.version + } + }; +} +``` + +### 2. Data Import (JSON to SQLite) +```typescript +async function importToSQLite(data: MigrationData): Promise { + const db = await getSQLiteConnection(); + + await db.transaction(async (tx) => { + // Import accounts + for (const account of data.accounts) { + await tx.execute(` + INSERT INTO accounts (did, public_key_hex, created_at, updated_at) + VALUES (?, ?, ?, ?) + `, [account.did, account.publicKeyHex, account.createdAt, account.updatedAt]); + } + + // Import settings + for (const setting of data.settings) { + await tx.execute(` + INSERT INTO settings (key, value, updated_at) + VALUES (?, ?, ?) + `, [setting.key, setting.value, setting.updatedAt]); + } + + // Import contacts + for (const contact of data.contacts) { + await tx.execute(` + INSERT INTO contacts (id, did, name, created_at, updated_at) + VALUES (?, ?, ?, ?, ?) + `, [contact.id, contact.did, contact.name, contact.createdAt, contact.updatedAt]); + } + }); +} +``` + +### 3. Verification +```typescript +async function verifyMigration(dexieData: MigrationData): Promise { + const db = await getSQLiteConnection(); + + // Verify account count + const accountCount = await db.selectValue( + 'SELECT COUNT(*) FROM accounts' + ); + if (accountCount !== dexieData.accounts.length) { + return false; + } + + // Verify settings count + const settingsCount = await db.selectValue( + 'SELECT COUNT(*) FROM settings' + ); + if (settingsCount !== dexieData.settings.length) { + return false; + } + + // Verify contacts count + const contactsCount = await db.selectValue( + 'SELECT COUNT(*) FROM contacts' + ); + if (contactsCount !== dexieData.contacts.length) { + return false; + } + + // Verify data integrity + for (const account of dexieData.accounts) { + const migratedAccount = await db.selectOne( + 'SELECT * FROM accounts WHERE did = ?', + [account.did] + ); + if (!migratedAccount || + migratedAccount.public_key_hex !== account.publicKeyHex) { + return false; + } + } + + return true; +} +``` + +## Performance Considerations + +### 1. Indexing +- Dexie automatically creates indexes based on the schema +- SQLite requires explicit index creation +- Added indexes for frequently queried fields + +### 2. Batch Operations +- Dexie has built-in bulk operations +- SQLite uses transactions for batch operations +- Consider chunking large datasets + +### 3. Query Optimization +- Dexie uses IndexedDB's native indexing +- SQLite requires explicit query optimization +- Use prepared statements for repeated queries + +## Error Handling + +### 1. Common Errors +```typescript +// Dexie errors +try { + await db.accounts.add(account); +} catch (error) { + if (error instanceof Dexie.ConstraintError) { + // Handle duplicate key + } +} + +// SQLite errors +try { + await db.execute(` + INSERT INTO accounts (did, public_key_hex, created_at, updated_at) + VALUES (?, ?, ?, ?) + `, [account.did, account.publicKeyHex, account.createdAt, account.updatedAt]); +} catch (error) { + if (error.code === 'SQLITE_CONSTRAINT') { + // Handle duplicate key + } +} +``` + +### 2. Transaction Recovery +```typescript +// Dexie transaction +try { + await db.transaction('rw', db.accounts, async () => { + // Operations + }); +} catch (error) { + // Dexie automatically rolls back +} + +// SQLite transaction +const db = await getSQLiteConnection(); +try { + await db.transaction(async (tx) => { + // Operations + }); +} catch (error) { + // SQLite automatically rolls back + await db.execute('ROLLBACK'); +} +``` + +## Migration Strategy + +1. **Preparation** + - Export all Dexie data + - Verify data integrity + - Create SQLite schema + - Setup indexes + +2. **Migration** + - Import data in transactions + - Verify each batch + - Handle errors gracefully + - Maintain backup + +3. **Verification** + - Compare record counts + - Verify data integrity + - Test common queries + - Validate relationships + +4. **Cleanup** + - Remove Dexie database + - Clear IndexedDB storage + - Update application code + - Remove old dependencies \ No newline at end of file diff --git a/docs/storage-implementation-checklist.md b/docs/storage-implementation-checklist.md new file mode 100644 index 00000000..b608dfcf --- /dev/null +++ b/docs/storage-implementation-checklist.md @@ -0,0 +1,306 @@ +# Storage Implementation Checklist + +## Core Services + +### 1. Storage Service Layer +- [ ] Create base `StorageService` interface + - [ ] Define common methods for all platforms + - [ ] Add platform-specific method signatures + - [ ] Include error handling types + - [ ] Add migration support methods + +- [ ] Implement platform-specific services + - [ ] `WebSQLiteService` (wa-sqlite) + - [ ] Database initialization + - [ ] VFS setup + - [ ] Connection management + - [ ] Query builder + - [ ] `NativeSQLiteService` (iOS/Android) + - [ ] SQLCipher integration + - [ ] Native bridge setup + - [ ] File system access + - [ ] `ElectronSQLiteService` + - [ ] Node SQLite integration + - [ ] IPC communication + - [ ] File system access + +### 2. Migration Services +- [ ] Implement `MigrationService` + - [ ] Backup creation + - [ ] Data verification + - [ ] Rollback procedures + - [ ] Progress tracking +- [ ] Create `MigrationUI` components + - [ ] Progress indicators + - [ ] Error handling + - [ ] User notifications + - [ ] Manual triggers + +### 3. Security Layer +- [ ] Implement `EncryptionService` + - [ ] Key management + - [ ] Encryption/decryption + - [ ] Secure storage +- [ ] Add `BiometricService` + - [ ] Platform detection + - [ ] Authentication flow + - [ ] Fallback mechanisms + +## Platform-Specific Implementation + +### Web Platform +- [ ] Setup wa-sqlite + - [ ] Install dependencies + ```json + { + "@wa-sqlite/sql.js": "^0.8.12", + "@wa-sqlite/sql.js-httpvfs": "^0.8.12" + } + ``` + - [ ] Configure VFS + - [ ] Setup worker threads + - [ ] Implement connection pooling + +- [ ] Update build configuration + - [ ] Modify `vite.config.ts` + - [ ] Add worker configuration + - [ ] Update chunk splitting + - [ ] Configure asset handling + +- [ ] Implement IndexedDB fallback + - [ ] Create fallback service + - [ ] Add data synchronization + - [ ] Handle quota exceeded + +### iOS Platform +- [ ] Setup SQLCipher + - [ ] Install pod dependencies + - [ ] Configure encryption + - [ ] Setup keychain access + - [ ] Implement secure storage + +- [ ] Update Capacitor config + - [ ] Modify `capacitor.config.ts` + - [ ] Add iOS permissions + - [ ] Configure backup + - [ ] Setup app groups + +### Android Platform +- [ ] Setup SQLCipher + - [ ] Add Gradle dependencies + - [ ] Configure encryption + - [ ] Setup keystore + - [ ] Implement secure storage + +- [ ] Update Capacitor config + - [ ] Modify `capacitor.config.ts` + - [ ] Add Android permissions + - [ ] Configure backup + - [ ] Setup file provider + +### Electron Platform +- [ ] Setup Node SQLite + - [ ] Install dependencies + - [ ] Configure IPC + - [ ] Setup file system access + - [ ] Implement secure storage + +- [ ] Update Electron config + - [ ] Modify `electron.config.ts` + - [ ] Add security policies + - [ ] Configure file access + - [ ] Setup auto-updates + +## Data Models and Types + +### 1. Database Schema +- [ ] Define tables + ```sql + -- Accounts table + CREATE TABLE accounts ( + did TEXT PRIMARY KEY, + public_key_hex TEXT NOT NULL, + created_at INTEGER NOT NULL, + updated_at INTEGER NOT NULL + ); + + -- Settings table + CREATE TABLE settings ( + key TEXT PRIMARY KEY, + value TEXT NOT NULL, + updated_at INTEGER NOT NULL + ); + + -- Contacts table + CREATE TABLE contacts ( + id TEXT PRIMARY KEY, + did TEXT NOT NULL, + name TEXT, + created_at INTEGER NOT NULL, + updated_at INTEGER NOT NULL, + FOREIGN KEY (did) REFERENCES accounts(did) + ); + ``` + +- [ ] Create indexes +- [ ] Define constraints +- [ ] Add triggers +- [ ] Setup migrations + +### 2. Type Definitions +- [ ] Create interfaces + ```typescript + interface Account { + did: string; + publicKeyHex: string; + createdAt: number; + updatedAt: number; + } + + interface Setting { + key: string; + value: string; + updatedAt: number; + } + + interface Contact { + id: string; + did: string; + name?: string; + createdAt: number; + updatedAt: number; + } + ``` + +- [ ] Add validation +- [ ] Create DTOs +- [ ] Define enums +- [ ] Add type guards + +## UI Components + +### 1. Migration UI +- [ ] Create components + - [ ] `MigrationProgress.vue` + - [ ] `MigrationError.vue` + - [ ] `MigrationSettings.vue` + - [ ] `MigrationStatus.vue` + +### 2. Settings UI +- [ ] Update components + - [ ] Add storage settings + - [ ] Add migration controls + - [ ] Add backup options + - [ ] Add security settings + +### 3. Error Handling UI +- [ ] Create components + - [ ] `StorageError.vue` + - [ ] `QuotaExceeded.vue` + - [ ] `MigrationFailed.vue` + - [ ] `RecoveryOptions.vue` + +## Testing + +### 1. Unit Tests +- [ ] Test services + - [ ] Storage service tests + - [ ] Migration service tests + - [ ] Security service tests + - [ ] Platform detection tests + +### 2. Integration Tests +- [ ] Test migrations + - [ ] Web platform tests + - [ ] iOS platform tests + - [ ] Android platform tests + - [ ] Electron platform tests + +### 3. E2E Tests +- [ ] Test workflows + - [ ] Account management + - [ ] Settings management + - [ ] Contact management + - [ ] Migration process + +## Documentation + +### 1. Technical Documentation +- [ ] Update architecture docs +- [ ] Add API documentation +- [ ] Create migration guides +- [ ] Document security measures + +### 2. User Documentation +- [ ] Update user guides +- [ ] Add troubleshooting guides +- [ ] Create FAQ +- [ ] Document new features + +## Deployment + +### 1. Build Process +- [ ] Update build scripts +- [ ] Add platform-specific builds +- [ ] Configure CI/CD +- [ ] Setup automated testing + +### 2. Release Process +- [ ] Create release checklist +- [ ] Add version management +- [ ] Setup rollback procedures +- [ ] Configure monitoring + +## Monitoring and Analytics + +### 1. Error Tracking +- [ ] Setup error logging +- [ ] Add performance monitoring +- [ ] Configure alerts +- [ ] Create dashboards + +### 2. Usage Analytics +- [ ] Add storage metrics +- [ ] Track migration success +- [ ] Monitor performance +- [ ] Collect user feedback + +## Security Audit + +### 1. Code Review +- [ ] Review encryption +- [ ] Check access controls +- [ ] Verify data handling +- [ ] Audit dependencies + +### 2. Penetration Testing +- [ ] Test data access +- [ ] Verify encryption +- [ ] Check authentication +- [ ] Review permissions + +## Success Criteria + +### 1. Performance +- [ ] Query response time < 100ms +- [ ] Migration time < 5s per 1000 records +- [ ] Storage overhead < 10% +- [ ] Memory usage < 50MB + +### 2. Reliability +- [ ] 99.9% uptime +- [ ] Zero data loss +- [ ] Automatic recovery +- [ ] Backup verification + +### 3. Security +- [ ] AES-256 encryption +- [ ] Secure key storage +- [ ] Access control +- [ ] Audit logging + +### 4. User Experience +- [ ] Smooth migration +- [ ] Clear error messages +- [ ] Progress indicators +- [ ] Recovery options \ No newline at end of file diff --git a/main.js b/main.js deleted file mode 100644 index 281eacf2..00000000 --- a/main.js +++ /dev/null @@ -1,29 +0,0 @@ -const { app, BrowserWindow } = require('electron'); -const path = require('path'); - -function createWindow() { - const win = new BrowserWindow({ - width: 1200, - height: 800, - webPreferences: { - nodeIntegration: true, - contextIsolation: false - } - }); - - win.loadFile(path.join(__dirname, 'dist-electron/www/index.html')); -} - -app.whenReady().then(createWindow); - -app.on('window-all-closed', () => { - if (process.platform !== 'darwin') { - app.quit(); - } -}); - -app.on('activate', () => { - if (BrowserWindow.getAllWindows().length === 0) { - createWindow(); - } -}); \ No newline at end of file diff --git a/src/db/sqlite/init.ts b/src/db/sqlite/init.ts new file mode 100644 index 00000000..856971d9 --- /dev/null +++ b/src/db/sqlite/init.ts @@ -0,0 +1,293 @@ +/** + * SQLite Database Initialization + * + * This module handles database initialization, including: + * - Database connection management + * - Schema creation and migration + * - Connection pooling and lifecycle + * - Error handling and recovery + */ + +import { Database, SQLite3 } from '@wa-sqlite/sql.js'; +import { DATABASE_SCHEMA, SQLiteTable } from './types'; +import { logger } from '../../utils/logger'; + +// ============================================================================ +// Database Connection Management +// ============================================================================ + +export interface DatabaseConnection { + db: Database; + sqlite3: SQLite3; + isOpen: boolean; + lastUsed: number; +} + +let connection: DatabaseConnection | null = null; +const CONNECTION_TIMEOUT = 5 * 60 * 1000; // 5 minutes + +/** + * Initialize the SQLite database connection + */ +export async function initDatabase(): Promise { + if (connection?.isOpen) { + connection.lastUsed = Date.now(); + return connection; + } + + try { + const sqlite3 = await import('@wa-sqlite/sql.js'); + const db = await sqlite3.open(':memory:'); // TODO: Configure storage location + + // Enable foreign keys + await db.exec('PRAGMA foreign_keys = ON;'); + + // Configure for better performance + await db.exec(` + PRAGMA journal_mode = WAL; + PRAGMA synchronous = NORMAL; + PRAGMA cache_size = -2000; -- Use 2MB of cache + `); + + connection = { + db, + sqlite3, + isOpen: true, + lastUsed: Date.now() + }; + + // Start connection cleanup interval + startConnectionCleanup(); + + return connection; + } catch (error) { + logger.error('[SQLite] Database initialization failed:', error); + throw new Error('Failed to initialize database'); + } +} + +/** + * Close the database connection + */ +export async function closeDatabase(): Promise { + if (!connection?.isOpen) return; + + try { + await connection.db.close(); + connection.isOpen = false; + connection = null; + } catch (error) { + logger.error('[SQLite] Database close failed:', error); + throw new Error('Failed to close database'); + } +} + +/** + * Cleanup inactive connections + */ +function startConnectionCleanup(): void { + setInterval(() => { + if (connection && Date.now() - connection.lastUsed > CONNECTION_TIMEOUT) { + closeDatabase().catch(error => { + logger.error('[SQLite] Connection cleanup failed:', error); + }); + } + }, 60000); // Check every minute +} + +// ============================================================================ +// Schema Management +// ============================================================================ + +/** + * Create the database schema + */ +export async function createSchema(): Promise { + const { db } = await initDatabase(); + + try { + await db.transaction(async () => { + for (const table of DATABASE_SCHEMA) { + await createTable(db, table); + } + }); + } catch (error) { + logger.error('[SQLite] Schema creation failed:', error); + throw new Error('Failed to create database schema'); + } +} + +/** + * Create a single table + */ +async function createTable(db: Database, table: SQLiteTable): Promise { + const columnDefs = table.columns.map(col => { + const constraints = [ + col.primaryKey ? 'PRIMARY KEY' : '', + col.unique ? 'UNIQUE' : '', + !col.nullable ? 'NOT NULL' : '', + col.references ? `REFERENCES ${col.references.table}(${col.references.column})` : '', + col.default !== undefined ? `DEFAULT ${formatDefaultValue(col.default)}` : '' + ].filter(Boolean).join(' '); + + return `${col.name} ${col.type} ${constraints}`.trim(); + }); + + const createTableSQL = ` + CREATE TABLE IF NOT EXISTS ${table.name} ( + ${columnDefs.join(',\n ')} + ); + `; + + await db.exec(createTableSQL); + + // Create indexes + if (table.indexes) { + for (const index of table.indexes) { + const createIndexSQL = ` + CREATE INDEX IF NOT EXISTS ${index.name} + ON ${table.name} (${index.columns.join(', ')}) + ${index.unique ? 'UNIQUE' : ''}; + `; + await db.exec(createIndexSQL); + } + } +} + +/** + * Format default value for SQL + */ +function formatDefaultValue(value: unknown): string { + if (value === null) return 'NULL'; + if (typeof value === 'string') return `'${value.replace(/'/g, "''")}'`; + if (typeof value === 'number') return value.toString(); + if (typeof value === 'boolean') return value ? '1' : '0'; + throw new Error(`Unsupported default value type: ${typeof value}`); +} + +// ============================================================================ +// Database Health Checks +// ============================================================================ + +/** + * Check database health + */ +export async function checkDatabaseHealth(): Promise<{ + isHealthy: boolean; + tables: string[]; + error?: string; +}> { + try { + const { db } = await initDatabase(); + + // Check if we can query the database + const tables = await db.selectAll<{ name: string }>(` + SELECT name FROM sqlite_master + WHERE type='table' AND name NOT LIKE 'sqlite_%' + `); + + return { + isHealthy: true, + tables: tables.map(t => t.name) + }; + } catch (error) { + logger.error('[SQLite] Health check failed:', error); + return { + isHealthy: false, + tables: [], + error: error instanceof Error ? error.message : 'Unknown error' + }; + } +} + +/** + * Verify database integrity + */ +export async function verifyDatabaseIntegrity(): Promise<{ + isIntegrityOk: boolean; + errors: string[]; +}> { + const { db } = await initDatabase(); + const errors: string[] = []; + + try { + // Run integrity check + const result = await db.selectAll<{ integrity_check: string }>('PRAGMA integrity_check;'); + + if (result[0]?.integrity_check !== 'ok') { + errors.push('Database integrity check failed'); + } + + // Check foreign key constraints + const fkResult = await db.selectAll<{ table: string; rowid: number; parent: string; fkid: number }>(` + PRAGMA foreign_key_check; + `); + + if (fkResult.length > 0) { + errors.push('Foreign key constraint violations found'); + } + + return { + isIntegrityOk: errors.length === 0, + errors + }; + } catch (error) { + logger.error('[SQLite] Integrity check failed:', error); + return { + isIntegrityOk: false, + errors: [error instanceof Error ? error.message : 'Unknown error'] + }; + } +} + +// ============================================================================ +// Database Backup and Recovery +// ============================================================================ + +/** + * Create a database backup + */ +export async function createBackup(): Promise { + const { db } = await initDatabase(); + + try { + // Export the database to a binary array + return await db.export(); + } catch (error) { + logger.error('[SQLite] Backup creation failed:', error); + throw new Error('Failed to create database backup'); + } +} + +/** + * Restore database from backup + */ +export async function restoreFromBackup(backup: Uint8Array): Promise { + const { db } = await initDatabase(); + + try { + // Close current connection + await closeDatabase(); + + // Create new connection and import backup + const sqlite3 = await import('@wa-sqlite/sql.js'); + const newDb = await sqlite3.open(backup); + + // Verify integrity + const { isIntegrityOk, errors } = await verifyDatabaseIntegrity(); + if (!isIntegrityOk) { + throw new Error(`Backup integrity check failed: ${errors.join(', ')}`); + } + + // Replace current connection + connection = { + db: newDb, + sqlite3, + isOpen: true, + lastUsed: Date.now() + }; + } catch (error) { + logger.error('[SQLite] Backup restoration failed:', error); + throw new Error('Failed to restore database from backup'); + } +} \ No newline at end of file diff --git a/src/db/sqlite/migration.ts b/src/db/sqlite/migration.ts new file mode 100644 index 00000000..7a38dba6 --- /dev/null +++ b/src/db/sqlite/migration.ts @@ -0,0 +1,374 @@ +/** + * SQLite Migration Utilities + * + * This module handles the migration of data from Dexie to SQLite, + * including data transformation, validation, and rollback capabilities. + */ + +import { Database } from '@wa-sqlite/sql.js'; +import { initDatabase, createSchema, createBackup } from './init'; +import { + MigrationData, + MigrationResult, + SQLiteAccount, + SQLiteContact, + SQLiteContactMethod, + SQLiteSettings, + SQLiteLog, + SQLiteSecret, + isSQLiteAccount, + isSQLiteContact, + isSQLiteSettings +} from './types'; +import { logger } from '../../utils/logger'; + +// ============================================================================ +// Migration Types +// ============================================================================ + +interface MigrationContext { + db: Database; + startTime: number; + stats: MigrationResult['stats']; + errors: Error[]; +} + +// ============================================================================ +// Migration Functions +// ============================================================================ + +/** + * Migrate data from Dexie to SQLite + */ +export async function migrateFromDexie(data: MigrationData): Promise { + const startTime = Date.now(); + const context: MigrationContext = { + db: (await initDatabase()).db, + startTime, + stats: { + accounts: 0, + contacts: 0, + contactMethods: 0, + settings: 0, + logs: 0, + secrets: 0 + }, + errors: [] + }; + + try { + // Create backup before migration + const backup = await createBackup(); + + // Create schema if needed + await createSchema(); + + // Perform migration in a transaction + await context.db.transaction(async () => { + // Migrate in order of dependencies + await migrateAccounts(context, data.accounts); + await migrateContacts(context, data.contacts); + await migrateContactMethods(context, data.contactMethods); + await migrateSettings(context, data.settings); + await migrateLogs(context, data.logs); + await migrateSecrets(context, data.secrets); + }); + + // Verify migration + const verificationResult = await verifyMigration(context, data); + if (!verificationResult.success) { + throw new Error(`Migration verification failed: ${verificationResult.error}`); + } + + return { + success: true, + stats: context.stats, + duration: Date.now() - startTime + }; + + } catch (error) { + logger.error('[SQLite] Migration failed:', error); + + // Attempt rollback + try { + await rollbackMigration(backup); + } catch (rollbackError) { + logger.error('[SQLite] Rollback failed:', rollbackError); + context.errors.push(new Error('Migration and rollback failed')); + } + + return { + success: false, + error: error instanceof Error ? error : new Error('Unknown migration error'), + stats: context.stats, + duration: Date.now() - startTime + }; + } +} + +// ============================================================================ +// Migration Helpers +// ============================================================================ + +/** + * Migrate accounts + */ +async function migrateAccounts(context: MigrationContext, accounts: SQLiteAccount[]): Promise { + for (const account of accounts) { + try { + if (!isSQLiteAccount(account)) { + throw new Error(`Invalid account data: ${JSON.stringify(account)}`); + } + + await context.db.exec(` + INSERT INTO accounts ( + did, public_key_hex, created_at, updated_at, + identity_json, mnemonic_encrypted, passkey_cred_id_hex, derivation_path + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?) + `, [ + account.did, + account.public_key_hex, + account.created_at, + account.updated_at, + account.identity_json || null, + account.mnemonic_encrypted || null, + account.passkey_cred_id_hex || null, + account.derivation_path || null + ]); + + context.stats.accounts++; + } catch (error) { + context.errors.push(new Error(`Failed to migrate account ${account.did}: ${error}`)); + throw error; // Re-throw to trigger transaction rollback + } + } +} + +/** + * Migrate contacts + */ +async function migrateContacts(context: MigrationContext, contacts: SQLiteContact[]): Promise { + for (const contact of contacts) { + try { + if (!isSQLiteContact(contact)) { + throw new Error(`Invalid contact data: ${JSON.stringify(contact)}`); + } + + await context.db.exec(` + INSERT INTO contacts ( + id, did, name, notes, profile_image_url, + public_key_base64, next_pub_key_hash_b64, + sees_me, registered, created_at, updated_at + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + `, [ + contact.id, + contact.did, + contact.name || null, + contact.notes || null, + contact.profile_image_url || null, + contact.public_key_base64 || null, + contact.next_pub_key_hash_b64 || null, + contact.sees_me ? 1 : 0, + contact.registered ? 1 : 0, + contact.created_at, + contact.updated_at + ]); + + context.stats.contacts++; + } catch (error) { + context.errors.push(new Error(`Failed to migrate contact ${contact.id}: ${error}`)); + throw error; + } + } +} + +/** + * Migrate contact methods + */ +async function migrateContactMethods( + context: MigrationContext, + methods: SQLiteContactMethod[] +): Promise { + for (const method of methods) { + try { + await context.db.exec(` + INSERT INTO contact_methods ( + id, contact_id, label, type, value, + created_at, updated_at + ) VALUES (?, ?, ?, ?, ?, ?, ?) + `, [ + method.id, + method.contact_id, + method.label, + method.type, + method.value, + method.created_at, + method.updated_at + ]); + + context.stats.contactMethods++; + } catch (error) { + context.errors.push(new Error(`Failed to migrate contact method ${method.id}: ${error}`)); + throw error; + } + } +} + +/** + * Migrate settings + */ +async function migrateSettings(context: MigrationContext, settings: SQLiteSettings[]): Promise { + for (const setting of settings) { + try { + if (!isSQLiteSettings(setting)) { + throw new Error(`Invalid settings data: ${JSON.stringify(setting)}`); + } + + await context.db.exec(` + INSERT INTO settings ( + key, account_did, value_json, created_at, updated_at + ) VALUES (?, ?, ?, ?, ?) + `, [ + setting.key, + setting.account_did || null, + setting.value_json, + setting.created_at, + setting.updated_at + ]); + + context.stats.settings++; + } catch (error) { + context.errors.push(new Error(`Failed to migrate setting ${setting.key}: ${error}`)); + throw error; + } + } +} + +/** + * Migrate logs + */ +async function migrateLogs(context: MigrationContext, logs: SQLiteLog[]): Promise { + for (const log of logs) { + try { + await context.db.exec(` + INSERT INTO logs ( + id, level, message, metadata_json, created_at + ) VALUES (?, ?, ?, ?, ?) + `, [ + log.id, + log.level, + log.message, + log.metadata_json || null, + log.created_at + ]); + + context.stats.logs++; + } catch (error) { + context.errors.push(new Error(`Failed to migrate log ${log.id}: ${error}`)); + throw error; + } + } +} + +/** + * Migrate secrets + */ +async function migrateSecrets(context: MigrationContext, secrets: SQLiteSecret[]): Promise { + for (const secret of secrets) { + try { + await context.db.exec(` + INSERT INTO secrets ( + key, value_encrypted, created_at, updated_at + ) VALUES (?, ?, ?, ?) + `, [ + secret.key, + secret.value_encrypted, + secret.created_at, + secret.updated_at + ]); + + context.stats.secrets++; + } catch (error) { + context.errors.push(new Error(`Failed to migrate secret ${secret.key}: ${error}`)); + throw error; + } + } +} + +// ============================================================================ +// Verification and Rollback +// ============================================================================ + +/** + * Verify migration success + */ +async function verifyMigration( + context: MigrationContext, + data: MigrationData +): Promise<{ success: boolean; error?: string }> { + try { + // Verify counts + const counts = await context.db.selectAll<{ table: string; count: number }>(` + SELECT 'accounts' as table, COUNT(*) as count FROM accounts + UNION ALL + SELECT 'contacts', COUNT(*) FROM contacts + UNION ALL + SELECT 'contact_methods', COUNT(*) FROM contact_methods + UNION ALL + SELECT 'settings', COUNT(*) FROM settings + UNION ALL + SELECT 'logs', COUNT(*) FROM logs + UNION ALL + SELECT 'secrets', COUNT(*) FROM secrets + `); + + const countMap = new Map(counts.map(c => [c.table, c.count])); + + if (countMap.get('accounts') !== data.accounts.length) { + return { success: false, error: 'Account count mismatch' }; + } + if (countMap.get('contacts') !== data.contacts.length) { + return { success: false, error: 'Contact count mismatch' }; + } + if (countMap.get('contact_methods') !== data.contactMethods.length) { + return { success: false, error: 'Contact method count mismatch' }; + } + if (countMap.get('settings') !== data.settings.length) { + return { success: false, error: 'Settings count mismatch' }; + } + if (countMap.get('logs') !== data.logs.length) { + return { success: false, error: 'Log count mismatch' }; + } + if (countMap.get('secrets') !== data.secrets.length) { + return { success: false, error: 'Secret count mismatch' }; + } + + return { success: true }; + } catch (error) { + return { + success: false, + error: error instanceof Error ? error.message : 'Unknown verification error' + }; + } +} + +/** + * Rollback migration + */ +async function rollbackMigration(backup: Uint8Array): Promise { + const { db } = await initDatabase(); + + try { + // Close current connection + await db.close(); + + // Restore from backup + const sqlite3 = await import('@wa-sqlite/sql.js'); + await sqlite3.open(backup); + + logger.info('[SQLite] Migration rollback successful'); + } catch (error) { + logger.error('[SQLite] Migration rollback failed:', error); + throw new Error('Failed to rollback migration'); + } +} \ No newline at end of file diff --git a/src/db/sqlite/operations.ts b/src/db/sqlite/operations.ts new file mode 100644 index 00000000..ebb6511a --- /dev/null +++ b/src/db/sqlite/operations.ts @@ -0,0 +1,449 @@ +/** + * SQLite Database Operations + * + * This module provides utility functions for common database operations, + * including CRUD operations, queries, and transactions. + */ + +import { Database } from '@wa-sqlite/sql.js'; +import { initDatabase } from './init'; +import { + SQLiteAccount, + SQLiteContact, + SQLiteContactMethod, + SQLiteSettings, + SQLiteLog, + SQLiteSecret, + isSQLiteAccount, + isSQLiteContact, + isSQLiteSettings +} from './types'; +import { logger } from '../../utils/logger'; + +// ============================================================================ +// Transaction Helpers +// ============================================================================ + +/** + * Execute a function within a transaction + */ +export async function withTransaction( + operation: (db: Database) => Promise +): Promise { + const { db } = await initDatabase(); + + try { + return await db.transaction(operation); + } catch (error) { + logger.error('[SQLite] Transaction failed:', error); + throw error; + } +} + +/** + * Execute a function with retries + */ +export async function withRetry( + operation: () => Promise, + maxRetries = 3, + delay = 1000 +): Promise { + let lastError: Error | undefined; + + for (let i = 0; i < maxRetries; i++) { + try { + return await operation(); + } catch (error) { + lastError = error instanceof Error ? error : new Error(String(error)); + + if (i < maxRetries - 1) { + await new Promise(resolve => setTimeout(resolve, delay * (i + 1))); + } + } + } + + throw lastError; +} + +// ============================================================================ +// Account Operations +// ============================================================================ + +/** + * Get account by DID + */ +export async function getAccountByDid(did: string): Promise { + const { db } = await initDatabase(); + + const accounts = await db.selectAll( + 'SELECT * FROM accounts WHERE did = ?', + [did] + ); + + return accounts[0] || null; +} + +/** + * Get all accounts + */ +export async function getAllAccounts(): Promise { + const { db } = await initDatabase(); + + return db.selectAll( + 'SELECT * FROM accounts ORDER BY created_at DESC' + ); +} + +/** + * Create or update account + */ +export async function upsertAccount(account: SQLiteAccount): Promise { + if (!isSQLiteAccount(account)) { + throw new Error('Invalid account data'); + } + + await withTransaction(async (db) => { + const existing = await db.selectOne<{ did: string }>( + 'SELECT did FROM accounts WHERE did = ?', + [account.did] + ); + + if (existing) { + await db.exec(` + UPDATE accounts SET + public_key_hex = ?, + updated_at = ?, + identity_json = ?, + mnemonic_encrypted = ?, + passkey_cred_id_hex = ?, + derivation_path = ? + WHERE did = ? + `, [ + account.public_key_hex, + Date.now(), + account.identity_json || null, + account.mnemonic_encrypted || null, + account.passkey_cred_id_hex || null, + account.derivation_path || null, + account.did + ]); + } else { + await db.exec(` + INSERT INTO accounts ( + did, public_key_hex, created_at, updated_at, + identity_json, mnemonic_encrypted, passkey_cred_id_hex, derivation_path + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?) + `, [ + account.did, + account.public_key_hex, + account.created_at, + account.updated_at, + account.identity_json || null, + account.mnemonic_encrypted || null, + account.passkey_cred_id_hex || null, + account.derivation_path || null + ]); + } + }); +} + +// ============================================================================ +// Contact Operations +// ============================================================================ + +/** + * Get contact by ID + */ +export async function getContactById(id: string): Promise { + const { db } = await initDatabase(); + + const contacts = await db.selectAll( + 'SELECT * FROM contacts WHERE id = ?', + [id] + ); + + return contacts[0] || null; +} + +/** + * Get contacts by account DID + */ +export async function getContactsByAccountDid(did: string): Promise { + const { db } = await initDatabase(); + + return db.selectAll( + 'SELECT * FROM contacts WHERE did = ? ORDER BY created_at DESC', + [did] + ); +} + +/** + * Get contact methods for a contact + */ +export async function getContactMethods(contactId: string): Promise { + const { db } = await initDatabase(); + + return db.selectAll( + 'SELECT * FROM contact_methods WHERE contact_id = ? ORDER BY created_at DESC', + [contactId] + ); +} + +/** + * Create or update contact with methods + */ +export async function upsertContact( + contact: SQLiteContact, + methods: SQLiteContactMethod[] = [] +): Promise { + if (!isSQLiteContact(contact)) { + throw new Error('Invalid contact data'); + } + + await withTransaction(async (db) => { + const existing = await db.selectOne<{ id: string }>( + 'SELECT id FROM contacts WHERE id = ?', + [contact.id] + ); + + if (existing) { + await db.exec(` + UPDATE contacts SET + did = ?, + name = ?, + notes = ?, + profile_image_url = ?, + public_key_base64 = ?, + next_pub_key_hash_b64 = ?, + sees_me = ?, + registered = ?, + updated_at = ? + WHERE id = ? + `, [ + contact.did, + contact.name || null, + contact.notes || null, + contact.profile_image_url || null, + contact.public_key_base64 || null, + contact.next_pub_key_hash_b64 || null, + contact.sees_me ? 1 : 0, + contact.registered ? 1 : 0, + Date.now(), + contact.id + ]); + } else { + await db.exec(` + INSERT INTO contacts ( + id, did, name, notes, profile_image_url, + public_key_base64, next_pub_key_hash_b64, + sees_me, registered, created_at, updated_at + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + `, [ + contact.id, + contact.did, + contact.name || null, + contact.notes || null, + contact.profile_image_url || null, + contact.public_key_base64 || null, + contact.next_pub_key_hash_b64 || null, + contact.sees_me ? 1 : 0, + contact.registered ? 1 : 0, + contact.created_at, + contact.updated_at + ]); + } + + // Update contact methods + if (methods.length > 0) { + // Delete existing methods + await db.exec( + 'DELETE FROM contact_methods WHERE contact_id = ?', + [contact.id] + ); + + // Insert new methods + for (const method of methods) { + await db.exec(` + INSERT INTO contact_methods ( + id, contact_id, label, type, value, + created_at, updated_at + ) VALUES (?, ?, ?, ?, ?, ?, ?) + `, [ + method.id, + contact.id, + method.label, + method.type, + method.value, + method.created_at, + method.updated_at + ]); + } + } + }); +} + +// ============================================================================ +// Settings Operations +// ============================================================================ + +/** + * Get setting by key + */ +export async function getSetting(key: string): Promise { + const { db } = await initDatabase(); + + const settings = await db.selectAll( + 'SELECT * FROM settings WHERE key = ?', + [key] + ); + + return settings[0] || null; +} + +/** + * Get settings by account DID + */ +export async function getSettingsByAccountDid(did: string): Promise { + const { db } = await initDatabase(); + + return db.selectAll( + 'SELECT * FROM settings WHERE account_did = ? ORDER BY updated_at DESC', + [did] + ); +} + +/** + * Set setting value + */ +export async function setSetting(setting: SQLiteSettings): Promise { + if (!isSQLiteSettings(setting)) { + throw new Error('Invalid settings data'); + } + + await withTransaction(async (db) => { + const existing = await db.selectOne<{ key: string }>( + 'SELECT key FROM settings WHERE key = ?', + [setting.key] + ); + + if (existing) { + await db.exec(` + UPDATE settings SET + account_did = ?, + value_json = ?, + updated_at = ? + WHERE key = ? + `, [ + setting.account_did || null, + setting.value_json, + Date.now(), + setting.key + ]); + } else { + await db.exec(` + INSERT INTO settings ( + key, account_did, value_json, created_at, updated_at + ) VALUES (?, ?, ?, ?, ?) + `, [ + setting.key, + setting.account_did || null, + setting.value_json, + setting.created_at, + setting.updated_at + ]); + } + }); +} + +// ============================================================================ +// Log Operations +// ============================================================================ + +/** + * Add log entry + */ +export async function addLog(log: SQLiteLog): Promise { + await withTransaction(async (db) => { + await db.exec(` + INSERT INTO logs ( + id, level, message, metadata_json, created_at + ) VALUES (?, ?, ?, ?, ?) + `, [ + log.id, + log.level, + log.message, + log.metadata_json || null, + log.created_at + ]); + }); +} + +/** + * Get logs by level + */ +export async function getLogsByLevel( + level: string, + limit = 100, + offset = 0 +): Promise { + const { db } = await initDatabase(); + + return db.selectAll( + 'SELECT * FROM logs WHERE level = ? ORDER BY created_at DESC LIMIT ? OFFSET ?', + [level, limit, offset] + ); +} + +// ============================================================================ +// Secret Operations +// ============================================================================ + +/** + * Get secret by key + */ +export async function getSecret(key: string): Promise { + const { db } = await initDatabase(); + + const secrets = await db.selectAll( + 'SELECT * FROM secrets WHERE key = ?', + [key] + ); + + return secrets[0] || null; +} + +/** + * Set secret value + */ +export async function setSecret(secret: SQLiteSecret): Promise { + await withTransaction(async (db) => { + const existing = await db.selectOne<{ key: string }>( + 'SELECT key FROM secrets WHERE key = ?', + [secret.key] + ); + + if (existing) { + await db.exec(` + UPDATE secrets SET + value_encrypted = ?, + updated_at = ? + WHERE key = ? + `, [ + secret.value_encrypted, + Date.now(), + secret.key + ]); + } else { + await db.exec(` + INSERT INTO secrets ( + key, value_encrypted, created_at, updated_at + ) VALUES (?, ?, ?, ?) + `, [ + secret.key, + secret.value_encrypted, + secret.created_at, + secret.updated_at + ]); + } + }); +} \ No newline at end of file diff --git a/src/db/sqlite/types.ts b/src/db/sqlite/types.ts new file mode 100644 index 00000000..4cfcab74 --- /dev/null +++ b/src/db/sqlite/types.ts @@ -0,0 +1,349 @@ +/** + * SQLite Type Definitions + * + * This file defines the type system for the SQLite implementation, + * mapping from the existing Dexie types to SQLite-compatible types. + * It includes both the database schema types and the runtime types. + */ + +import { SQLiteCompatibleType } from '@jlongster/sql.js'; + +// ============================================================================ +// Base Types and Utilities +// ============================================================================ + +/** + * SQLite column type mapping + */ +export type SQLiteColumnType = + | 'INTEGER' // For numbers, booleans, dates + | 'TEXT' // For strings, JSON + | 'BLOB' // For binary data + | 'REAL' // For floating point numbers + | 'NULL'; // For null values + +/** + * SQLite column definition + */ +export interface SQLiteColumn { + name: string; + type: SQLiteColumnType; + nullable?: boolean; + primaryKey?: boolean; + unique?: boolean; + references?: { + table: string; + column: string; + }; + default?: SQLiteCompatibleType; +} + +/** + * SQLite table definition + */ +export interface SQLiteTable { + name: string; + columns: SQLiteColumn[]; + indexes?: Array<{ + name: string; + columns: string[]; + unique?: boolean; + }>; +} + +// ============================================================================ +// Account Types +// ============================================================================ + +/** + * SQLite-compatible Account type + * Maps from the Dexie Account type + */ +export interface SQLiteAccount { + did: string; // TEXT PRIMARY KEY + public_key_hex: string; // TEXT NOT NULL + created_at: number; // INTEGER NOT NULL + updated_at: number; // INTEGER NOT NULL + identity_json?: string; // TEXT (encrypted JSON) + mnemonic_encrypted?: string; // TEXT (encrypted) + passkey_cred_id_hex?: string; // TEXT + derivation_path?: string; // TEXT +} + +export const ACCOUNTS_TABLE: SQLiteTable = { + name: 'accounts', + columns: [ + { name: 'did', type: 'TEXT', primaryKey: true }, + { name: 'public_key_hex', type: 'TEXT', nullable: false }, + { name: 'created_at', type: 'INTEGER', nullable: false }, + { name: 'updated_at', type: 'INTEGER', nullable: false }, + { name: 'identity_json', type: 'TEXT' }, + { name: 'mnemonic_encrypted', type: 'TEXT' }, + { name: 'passkey_cred_id_hex', type: 'TEXT' }, + { name: 'derivation_path', type: 'TEXT' } + ], + indexes: [ + { name: 'idx_accounts_created_at', columns: ['created_at'] }, + { name: 'idx_accounts_updated_at', columns: ['updated_at'] } + ] +}; + +// ============================================================================ +// Contact Types +// ============================================================================ + +/** + * SQLite-compatible ContactMethod type + */ +export interface SQLiteContactMethod { + id: string; // TEXT PRIMARY KEY + contact_id: string; // TEXT NOT NULL + label: string; // TEXT NOT NULL + type: string; // TEXT NOT NULL + value: string; // TEXT NOT NULL + created_at: number; // INTEGER NOT NULL + updated_at: number; // INTEGER NOT NULL +} + +/** + * SQLite-compatible Contact type + */ +export interface SQLiteContact { + id: string; // TEXT PRIMARY KEY + did: string; // TEXT NOT NULL + name?: string; // TEXT + notes?: string; // TEXT + profile_image_url?: string; // TEXT + public_key_base64?: string; // TEXT + next_pub_key_hash_b64?: string; // TEXT + sees_me?: boolean; // INTEGER (0 or 1) + registered?: boolean; // INTEGER (0 or 1) + created_at: number; // INTEGER NOT NULL + updated_at: number; // INTEGER NOT NULL +} + +export const CONTACTS_TABLE: SQLiteTable = { + name: 'contacts', + columns: [ + { name: 'id', type: 'TEXT', primaryKey: true }, + { name: 'did', type: 'TEXT', nullable: false }, + { name: 'name', type: 'TEXT' }, + { name: 'notes', type: 'TEXT' }, + { name: 'profile_image_url', type: 'TEXT' }, + { name: 'public_key_base64', type: 'TEXT' }, + { name: 'next_pub_key_hash_b64', type: 'TEXT' }, + { name: 'sees_me', type: 'INTEGER' }, + { name: 'registered', type: 'INTEGER' }, + { name: 'created_at', type: 'INTEGER', nullable: false }, + { name: 'updated_at', type: 'INTEGER', nullable: false } + ], + indexes: [ + { name: 'idx_contacts_did', columns: ['did'] }, + { name: 'idx_contacts_created_at', columns: ['created_at'] } + ] +}; + +export const CONTACT_METHODS_TABLE: SQLiteTable = { + name: 'contact_methods', + columns: [ + { name: 'id', type: 'TEXT', primaryKey: true }, + { name: 'contact_id', type: 'TEXT', nullable: false, + references: { table: 'contacts', column: 'id' } }, + { name: 'label', type: 'TEXT', nullable: false }, + { name: 'type', type: 'TEXT', nullable: false }, + { name: 'value', type: 'TEXT', nullable: false }, + { name: 'created_at', type: 'INTEGER', nullable: false }, + { name: 'updated_at', type: 'INTEGER', nullable: false } + ], + indexes: [ + { name: 'idx_contact_methods_contact_id', columns: ['contact_id'] } + ] +}; + +// ============================================================================ +// Settings Types +// ============================================================================ + +/** + * SQLite-compatible Settings type + */ +export interface SQLiteSettings { + key: string; // TEXT PRIMARY KEY + account_did?: string; // TEXT + value_json: string; // TEXT NOT NULL (JSON stringified) + created_at: number; // INTEGER NOT NULL + updated_at: number; // INTEGER NOT NULL +} + +export const SETTINGS_TABLE: SQLiteTable = { + name: 'settings', + columns: [ + { name: 'key', type: 'TEXT', primaryKey: true }, + { name: 'account_did', type: 'TEXT' }, + { name: 'value_json', type: 'TEXT', nullable: false }, + { name: 'created_at', type: 'INTEGER', nullable: false }, + { name: 'updated_at', type: 'INTEGER', nullable: false } + ], + indexes: [ + { name: 'idx_settings_account_did', columns: ['account_did'] }, + { name: 'idx_settings_updated_at', columns: ['updated_at'] } + ] +}; + +// ============================================================================ +// Log Types +// ============================================================================ + +/** + * SQLite-compatible Log type + */ +export interface SQLiteLog { + id: string; // TEXT PRIMARY KEY + level: string; // TEXT NOT NULL + message: string; // TEXT NOT NULL + metadata_json?: string; // TEXT (JSON stringified) + created_at: number; // INTEGER NOT NULL +} + +export const LOGS_TABLE: SQLiteTable = { + name: 'logs', + columns: [ + { name: 'id', type: 'TEXT', primaryKey: true }, + { name: 'level', type: 'TEXT', nullable: false }, + { name: 'message', type: 'TEXT', nullable: false }, + { name: 'metadata_json', type: 'TEXT' }, + { name: 'created_at', type: 'INTEGER', nullable: false } + ], + indexes: [ + { name: 'idx_logs_level', columns: ['level'] }, + { name: 'idx_logs_created_at', columns: ['created_at'] } + ] +}; + +// ============================================================================ +// Secret Types +// ============================================================================ + +/** + * SQLite-compatible Secret type + * Note: This table should be encrypted at the database level + */ +export interface SQLiteSecret { + key: string; // TEXT PRIMARY KEY + value_encrypted: string; // TEXT NOT NULL (encrypted) + created_at: number; // INTEGER NOT NULL + updated_at: number; // INTEGER NOT NULL +} + +export const SECRETS_TABLE: SQLiteTable = { + name: 'secrets', + columns: [ + { name: 'key', type: 'TEXT', primaryKey: true }, + { name: 'value_encrypted', type: 'TEXT', nullable: false }, + { name: 'created_at', type: 'INTEGER', nullable: false }, + { name: 'updated_at', type: 'INTEGER', nullable: false } + ], + indexes: [ + { name: 'idx_secrets_updated_at', columns: ['updated_at'] } + ] +}; + +// ============================================================================ +// Database Schema +// ============================================================================ + +/** + * Complete database schema definition + */ +export const DATABASE_SCHEMA: SQLiteTable[] = [ + ACCOUNTS_TABLE, + CONTACTS_TABLE, + CONTACT_METHODS_TABLE, + SETTINGS_TABLE, + LOGS_TABLE, + SECRETS_TABLE +]; + +// ============================================================================ +// Type Guards and Validators +// ============================================================================ + +/** + * Type guard for SQLiteAccount + */ +export function isSQLiteAccount(value: unknown): value is SQLiteAccount { + return ( + typeof value === 'object' && + value !== null && + typeof (value as SQLiteAccount).did === 'string' && + typeof (value as SQLiteAccount).public_key_hex === 'string' && + typeof (value as SQLiteAccount).created_at === 'number' && + typeof (value as SQLiteAccount).updated_at === 'number' + ); +} + +/** + * Type guard for SQLiteContact + */ +export function isSQLiteContact(value: unknown): value is SQLiteContact { + return ( + typeof value === 'object' && + value !== null && + typeof (value as SQLiteContact).id === 'string' && + typeof (value as SQLiteContact).did === 'string' && + typeof (value as SQLiteContact).created_at === 'number' && + typeof (value as SQLiteContact).updated_at === 'number' + ); +} + +/** + * Type guard for SQLiteSettings + */ +export function isSQLiteSettings(value: unknown): value is SQLiteSettings { + return ( + typeof value === 'object' && + value !== null && + typeof (value as SQLiteSettings).key === 'string' && + typeof (value as SQLiteSettings).value_json === 'string' && + typeof (value as SQLiteSettings).created_at === 'number' && + typeof (value as SQLiteSettings).updated_at === 'number' + ); +} + +// ============================================================================ +// Migration Types +// ============================================================================ + +/** + * Type for migration data from Dexie to SQLite + */ +export interface MigrationData { + accounts: SQLiteAccount[]; + contacts: SQLiteContact[]; + contactMethods: SQLiteContactMethod[]; + settings: SQLiteSettings[]; + logs: SQLiteLog[]; + secrets: SQLiteSecret[]; + metadata: { + version: string; + timestamp: number; + source: 'dexie'; + }; +} + +/** + * Migration result type + */ +export interface MigrationResult { + success: boolean; + error?: Error; + stats: { + accounts: number; + contacts: number; + contactMethods: number; + settings: number; + logs: number; + secrets: number; + }; + duration: number; +} \ No newline at end of file diff --git a/src/main.ts b/src/main.ts deleted file mode 100644 index 447e59c7..00000000 --- a/src/main.ts +++ /dev/null @@ -1,215 +0,0 @@ -import { createPinia } from "pinia"; -import { App as VueApp, ComponentPublicInstance, createApp } from "vue"; -import App from "./App.vue"; -import "./registerServiceWorker"; -import router from "./router"; -import axios from "axios"; -import VueAxios from "vue-axios"; -import Notifications from "notiwind"; -import "./assets/styles/tailwind.css"; - -import { library } from "@fortawesome/fontawesome-svg-core"; -import { - faArrowDown, - faArrowLeft, - faArrowRight, - faArrowRotateBackward, - faArrowUpRightFromSquare, - faArrowUp, - faBan, - faBitcoinSign, - faBurst, - faCalendar, - faCamera, - faCameraRotate, - faCaretDown, - faChair, - faCheck, - faChevronDown, - faChevronLeft, - faChevronRight, - faChevronUp, - faCircle, - faCircleCheck, - faCircleInfo, - faCircleQuestion, - faCircleUser, - faClock, - faCoins, - faComment, - faCopy, - faDollar, - faEllipsis, - faEllipsisVertical, - faEnvelopeOpenText, - faEraser, - faEye, - faEyeSlash, - faFileContract, - faFileLines, - faFilter, - faFloppyDisk, - faFolderOpen, - faForward, - faGift, - faGlobe, - faHammer, - faHand, - faHandHoldingDollar, - faHandHoldingHeart, - faHouseChimney, - faImage, - faImagePortrait, - faLeftRight, - faLightbulb, - faLink, - faLocationDot, - faLongArrowAltLeft, - faLongArrowAltRight, - faMagnifyingGlass, - faMessage, - faMinus, - faPen, - faPersonCircleCheck, - faPersonCircleQuestion, - faPlus, - faQuestion, - faQrcode, - faRightFromBracket, - faRotate, - faShareNodes, - faSpinner, - faSquare, - faSquareCaretDown, - faSquareCaretUp, - faSquarePlus, - faTrashCan, - faTriangleExclamation, - faUser, - faUsers, - faXmark, -} from "@fortawesome/free-solid-svg-icons"; - -library.add( - faArrowDown, - faArrowLeft, - faArrowRight, - faArrowRotateBackward, - faArrowUpRightFromSquare, - faArrowUp, - faBan, - faBitcoinSign, - faBurst, - faCalendar, - faCamera, - faCameraRotate, - faCaretDown, - faChair, - faCheck, - faChevronDown, - faChevronLeft, - faChevronRight, - faChevronUp, - faCircle, - faCircleCheck, - faCircleInfo, - faCircleQuestion, - faCircleUser, - faClock, - faCoins, - faComment, - faCopy, - faDollar, - faEllipsis, - faEllipsisVertical, - faEnvelopeOpenText, - faEraser, - faEye, - faEyeSlash, - faFileContract, - faFileLines, - faFilter, - faFloppyDisk, - faFolderOpen, - faForward, - faGift, - faGlobe, - faHammer, - faHand, - faHandHoldingDollar, - faHandHoldingHeart, - faHouseChimney, - faImage, - faImagePortrait, - faLeftRight, - faLightbulb, - faLink, - faLocationDot, - faLongArrowAltLeft, - faLongArrowAltRight, - faMagnifyingGlass, - faMessage, - faMinus, - faPen, - faPersonCircleCheck, - faPersonCircleQuestion, - faPlus, - faQrcode, - faQuestion, - faRotate, - faRightFromBracket, - faShareNodes, - faSpinner, - faSquare, - faSquareCaretDown, - faSquareCaretUp, - faSquarePlus, - faTrashCan, - faTriangleExclamation, - faUser, - faUsers, - faXmark, -); - -import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome"; -import Camera from "simple-vue-camera"; -import { logger } from "./utils/logger"; - -// Can trigger this with a 'throw' inside some top-level function, eg. on the HomeView -function setupGlobalErrorHandler(app: VueApp) { - // @ts-expect-error 'cause we cannot see why config is not defined - app.config.errorHandler = ( - err: Error, - instance: ComponentPublicInstance | null, - info: string, - ) => { - logger.error( - "Ouch! Global Error Handler.", - "Error:", - err, - "- Error toString:", - err.toString(), - "- Info:", - info, - "- Instance:", - instance, - ); - // Want to show a nice notiwind notification but can't figure out how. - alert( - (err.message || "Something bad happened") + - " - Try reloading or restarting the app.", - ); - }; -} - -const app = createApp(App) - .component("fa", FontAwesomeIcon) - .component("camera", Camera) - .use(createPinia()) - .use(VueAxios, axios) - .use(router) - .use(Notifications); - -setupGlobalErrorHandler(app); - -app.mount("#app"); From 54f269054f1ab0962044677ec77a96b99088f6cd Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Sun, 25 May 2025 07:45:07 -0600 Subject: [PATCH 04/92] fix error loading WASM file --- package.json | 2 +- scripts/copy-wasm.js | 15 +++++++++++++++ src/registerSQLWorker.js | 7 ++++++- vite.config.ts | 5 +++-- 4 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 scripts/copy-wasm.js diff --git a/package.json b/package.json index 74be7d90..9ef4b219 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "build": "VITE_GIT_HASH=`git log -1 --pretty=format:%h` vite build --config vite.config.mts", "lint": "eslint --ext .js,.ts,.vue --ignore-path .gitignore src", "lint-fix": "eslint --ext .js,.ts,.vue --ignore-path .gitignore --fix src", - "prebuild": "eslint --ext .js,.ts,.vue --ignore-path .gitignore src && node sw_combine.js", + "prebuild": "eslint --ext .js,.ts,.vue --ignore-path .gitignore src && node sw_combine.js && node scripts/copy-wasm.js", "test:all": "npm run test:prerequisites && npm run build && npm run test:web && npm run test:mobile", "test:prerequisites": "node scripts/check-prerequisites.js", "test:web": "npx playwright test -c playwright.config-local.ts --trace on", diff --git a/scripts/copy-wasm.js b/scripts/copy-wasm.js new file mode 100644 index 00000000..fed236be --- /dev/null +++ b/scripts/copy-wasm.js @@ -0,0 +1,15 @@ +const fs = require('fs'); +const path = require('path'); + +// Create public/wasm directory if it doesn't exist +const wasmDir = path.join(__dirname, '../public/wasm'); +if (!fs.existsSync(wasmDir)) { + fs.mkdirSync(wasmDir, { recursive: true }); +} + +// Copy the WASM file from node_modules to public/wasm +const sourceFile = path.join(__dirname, '../node_modules/@jlongster/sql.js/dist/sql-wasm.wasm'); +const targetFile = path.join(wasmDir, 'sql-wasm.wasm'); + +fs.copyFileSync(sourceFile, targetFile); +console.log('WASM file copied successfully!'); \ No newline at end of file diff --git a/src/registerSQLWorker.js b/src/registerSQLWorker.js index 68b9ac4b..d728a8e9 100644 --- a/src/registerSQLWorker.js +++ b/src/registerSQLWorker.js @@ -4,7 +4,12 @@ import IndexedDBBackend from 'absurd-sql/dist/indexeddb-backend'; async function run() { console.log("----- initSqlJs"); - let SQL = await initSqlJs({ locateFile: file => file }); + let SQL = await initSqlJs({ + locateFile: file => { + // In Vite, we need to use the full URL to the WASM file + return new URL(`/node_modules/@jlongster/sql.js/dist/${file}`, import.meta.url).href; + } + }); let sqlFS = new SQLiteFS(SQL.FS, new IndexedDBBackend()); SQL.register_for_idb(sqlFS); diff --git a/vite.config.ts b/vite.config.ts index ac4dc310..61a62e08 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -23,7 +23,7 @@ export default defineConfig({ mainFields: ['module', 'jsnext:main', 'jsnext', 'main'], }, optimizeDeps: { - include: ['nostr-tools', 'nostr-tools/nip06', 'nostr-tools/core'], + include: ['nostr-tools', 'nostr-tools/nip06', 'nostr-tools/core', '@jlongster/sql.js'], esbuildOptions: { define: { global: 'globalThis' @@ -48,5 +48,6 @@ export default defineConfig({ } } } - } + }, + assetsInclude: ['**/*.wasm'] }); \ No newline at end of file From 8c3920e1080a75d699120f60da040e6e5c18c0a1 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Sun, 25 May 2025 11:06:30 -0600 Subject: [PATCH 05/92] add DB setup with migrations --- src/components/ImageMethodDialog.vue | 1 - src/db-sql/migration.ts | 38 +++++++++++++ src/registerSQLWorker.js | 31 +---------- src/services/database.js | 81 ++++++++++++++++++++++++++++ src/services/migrationService.ts | 63 ++++++++++++++++++++++ vite.config.ts | 2 +- 6 files changed, 185 insertions(+), 31 deletions(-) create mode 100644 src/db-sql/migration.ts create mode 100644 src/services/database.js create mode 100644 src/services/migrationService.ts diff --git a/src/components/ImageMethodDialog.vue b/src/components/ImageMethodDialog.vue index f3938740..9929db86 100644 --- a/src/components/ImageMethodDialog.vue +++ b/src/components/ImageMethodDialog.vue @@ -333,7 +333,6 @@ export default class ImageMethodDialog extends Vue { * @throws {Error} When settings retrieval fails */ async mounted() { - logger.log("ImageMethodDialog mounted"); try { const settings = await retrieveSettingsForActiveAccount(); this.activeDid = settings.activeDid || ""; diff --git a/src/db-sql/migration.ts b/src/db-sql/migration.ts new file mode 100644 index 00000000..8f4cc69c --- /dev/null +++ b/src/db-sql/migration.ts @@ -0,0 +1,38 @@ +import migrationService from '../services/migrationService'; +import type { QueryExecResult } from '../services/migrationService'; + +const MIGRATIONS = [ + { + name: '001_create_accounts_table', + // see ../db/tables files for explanations + sql: ` + CREATE TABLE IF NOT EXISTS accounts ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + dateCreated TEXT NOT NULL, + derivationPath TEXT, + did TEXT NOT NULL, + identity TEXT, + mnemonic TEXT, + passkeyCredIdHex TEXT, + publicKeyHex TEXT NOT NULL + ); + + CREATE INDEX IF NOT EXISTS idx_accounts_did ON accounts(did); + CREATE INDEX IF NOT EXISTS idx_accounts_publicKeyHex ON accounts(publicKeyHex); + ` + } +]; + +export async function registerMigrations(): Promise { + // Register all migrations + for (const migration of MIGRATIONS) { + await migrationService.registerMigration(migration); + } +} + +export async function runMigrations( + sqlExec: (sql: string, params?: any[]) => Promise> +): Promise { + await registerMigrations(); + await migrationService.runMigrations(sqlExec); +} \ No newline at end of file diff --git a/src/registerSQLWorker.js b/src/registerSQLWorker.js index d728a8e9..cbff7f15 100644 --- a/src/registerSQLWorker.js +++ b/src/registerSQLWorker.js @@ -1,33 +1,6 @@ -import initSqlJs from '@jlongster/sql.js'; -import { SQLiteFS } from 'absurd-sql'; -import IndexedDBBackend from 'absurd-sql/dist/indexeddb-backend'; +import databaseService from './services/database'; async function run() { - console.log("----- initSqlJs"); - let SQL = await initSqlJs({ - locateFile: file => { - // In Vite, we need to use the full URL to the WASM file - return new URL(`/node_modules/@jlongster/sql.js/dist/${file}`, import.meta.url).href; - } - }); - let sqlFS = new SQLiteFS(SQL.FS, new IndexedDBBackend()); - SQL.register_for_idb(sqlFS); - - SQL.FS.mkdir('/sql'); - SQL.FS.mount(sqlFS, {}, '/sql'); - - const path = '/sql/db.sqlite'; - if (typeof SharedArrayBuffer === 'undefined') { - let stream = SQL.FS.open(path, 'a+'); - await stream.node.contents.readIfFallback(); - SQL.FS.close(stream); - } - - let db = new SQL.Database(path, { filename: true }); - // You might want to try `PRAGMA page_size=8192;` too! - db.exec(` - PRAGMA journal_mode=MEMORY; - `); - console.log("----- db", db); + await databaseService.initialize(); } run(); diff --git a/src/services/database.js b/src/services/database.js new file mode 100644 index 00000000..ea872ae1 --- /dev/null +++ b/src/services/database.js @@ -0,0 +1,81 @@ +import initSqlJs from '@jlongster/sql.js'; +import { SQLiteFS } from 'absurd-sql'; +import IndexedDBBackend from 'absurd-sql/dist/indexeddb-backend'; +import { runMigrations } from '../db-sql/migration'; + +class DatabaseService { + constructor() { + this.db = null; + this.SQL = null; + this.initialized = false; + } + + async initialize() { + if (this.initialized) return; + + this.SQL = await initSqlJs({ + locateFile: file => { + return new URL(`/node_modules/@jlongster/sql.js/dist/${file}`, import.meta.url).href; + } + }); + + let sqlFS = new SQLiteFS(this.SQL.FS, new IndexedDBBackend()); + this.SQL.register_for_idb(sqlFS); + + this.SQL.FS.mkdir('/sql'); + this.SQL.FS.mount(sqlFS, {}, '/sql'); + + const path = '/sql/db.sqlite'; + if (typeof SharedArrayBuffer === 'undefined') { + let stream = this.SQL.FS.open(path, 'a+'); + await stream.node.contents.readIfFallback(); + this.SQL.FS.close(stream); + } + + this.db = new this.SQL.Database(path, { filename: true }); + this.db.exec(` + PRAGMA journal_mode=MEMORY; + `); + const sqlExec = this.db.exec.bind(this.db); + + // Run migrations + await runMigrations(sqlExec); + + this.initialized = true; + } + + async query(sql, params = []) { + if (!this.initialized) { + await this.initialize(); + } + return this.db.exec(sql, params); + } + + async run(sql, params = []) { + if (!this.initialized) { + await this.initialize(); + } + return this.db.run(sql, params); + } + + async get(sql, params = []) { + if (!this.initialized) { + await this.initialize(); + } + const result = await this.db.exec(sql, params); + return result[0]?.values[0]; + } + + async all(sql, params = []) { + if (!this.initialized) { + await this.initialize(); + } + const result = await this.db.exec(sql, params); + return result[0]?.values || []; + } +} + +// Create a singleton instance +const databaseService = new DatabaseService(); + +export default databaseService; \ No newline at end of file diff --git a/src/services/migrationService.ts b/src/services/migrationService.ts new file mode 100644 index 00000000..106d06d3 --- /dev/null +++ b/src/services/migrationService.ts @@ -0,0 +1,63 @@ +type SqlValue = string | number | null | Uint8Array; + +export interface QueryExecResult { + columns: Array; + values: Array>; +} + +interface Migration { + name: string; + sql: string; +} + +export class MigrationService { + private static instance: MigrationService; + private migrations: Migration[] = []; + + private constructor() {} + + static getInstance(): MigrationService { + if (!MigrationService.instance) { + MigrationService.instance = new MigrationService(); + } + return MigrationService.instance; + } + + async registerMigration(migration: Migration): Promise { + this.migrations.push(migration); + } + + async runMigrations( + sqlExec: (sql: string, params?: any[]) => Promise> + ): Promise { + // Create migrations table if it doesn't exist + await sqlExec(` + CREATE TABLE IF NOT EXISTS migrations ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL UNIQUE, + executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP + ) + `); + + // Get list of executed migrations + const result = await sqlExec('SELECT name FROM migrations'); + const singleResult = result[0]; + const executedMigrations = new Set(singleResult.values.map(row => row[0])); + + // Run pending migrations in order + for (const migration of this.migrations) { + if (!executedMigrations.has(migration.name)) { + try { + await sqlExec(migration.sql); + await sqlExec('INSERT INTO migrations (name) VALUES (?)', [migration.name]); + console.log(`Migration ${migration.name} executed successfully`); + } catch (error) { + console.error(`Error executing migration ${migration.name}:`, error); + throw error; + } + } + } + } +} + +export default MigrationService.getInstance(); \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index 61a62e08..7f80c569 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -49,5 +49,5 @@ export default defineConfig({ } } }, - assetsInclude: ['**/*.wasm'] + assetsInclude: ['**/*.wasm', '**/*.sql'] }); \ No newline at end of file From da35b225cdf0ebba400d78b4091aa760d0cd4f66 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Sun, 25 May 2025 15:49:36 -0600 Subject: [PATCH 06/92] remove unused setting --- vite.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vite.config.ts b/vite.config.ts index 7f80c569..61a62e08 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -49,5 +49,5 @@ export default defineConfig({ } } }, - assetsInclude: ['**/*.wasm', '**/*.sql'] + assetsInclude: ['**/*.wasm'] }); \ No newline at end of file From 83771caee112f982604154c6aea44a3f416a5675 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Sun, 25 May 2025 17:55:04 -0600 Subject: [PATCH 07/92] add more to the inital migration, and refactor the locations of types --- src/db-sql/migration.ts | 71 ++++++++++++++++++++++++++-- src/interfaces/database.ts | 14 ++++++ src/libs/util.ts | 2 +- src/services/database.d.ts | 27 +++++++++++ src/services/database.js | 81 ------------------------------- src/services/database.ts | 97 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 207 insertions(+), 85 deletions(-) create mode 100644 src/interfaces/database.ts create mode 100644 src/services/database.d.ts delete mode 100644 src/services/database.js create mode 100644 src/services/database.ts diff --git a/src/db-sql/migration.ts b/src/db-sql/migration.ts index 8f4cc69c..b81a93d8 100644 --- a/src/db-sql/migration.ts +++ b/src/db-sql/migration.ts @@ -1,9 +1,10 @@ import migrationService from '../services/migrationService'; import type { QueryExecResult } from '../services/migrationService'; +// Each migration can include multiple SQL statements (with semicolons) const MIGRATIONS = [ { - name: '001_create_accounts_table', + name: '001_initial', // see ../db/tables files for explanations sql: ` CREATE TABLE IF NOT EXISTS accounts ( @@ -18,8 +19,72 @@ const MIGRATIONS = [ ); CREATE INDEX IF NOT EXISTS idx_accounts_did ON accounts(did); - CREATE INDEX IF NOT EXISTS idx_accounts_publicKeyHex ON accounts(publicKeyHex); - ` + + CREATE TABLE IF NOT EXISTS secret ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + secret TEXT NOT NULL + ); + + CREATE TABLE IF NOT EXISTS settings ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + accountDid TEXT, + activeDid TEXT, + apiServer TEXT, + filterFeedByNearby BOOLEAN, + filterFeedByVisible BOOLEAN, + finishedOnboarding BOOLEAN, + firstName TEXT, + hideRegisterPromptOnNewContact BOOLEAN, + isRegistered BOOLEAN, + lastName TEXT, + lastAckedOfferToUserJwtId TEXT, + lastAckedOfferToUserProjectsJwtId TEXT, + lastNotifiedClaimId TEXT, + lastViewedClaimId TEXT, + notifyingNewActivityTime TEXT, + notifyingReminderMessage TEXT, + notifyingReminderTime TEXT, + partnerApiServer TEXT, + passkeyExpirationMinutes INTEGER, + profileImageUrl TEXT, + searchBoxes TEXT, -- Stored as JSON string + showContactGivesInline BOOLEAN, + showGeneralAdvanced BOOLEAN, + showShortcutBvc BOOLEAN, + vapid TEXT, + warnIfProdServer BOOLEAN, + warnIfTestServer BOOLEAN, + webPushServer TEXT + ); + + CREATE INDEX IF NOT EXISTS idx_settings_accountDid ON settings(accountDid); + + CREATE TABLE IF NOT EXISTS contacts ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + did TEXT NOT NULL, + name TEXT, + contactMethods TEXT, -- Stored as JSON string + nextPubKeyHashB64 TEXT, + notes TEXT, + profileImageUrl TEXT, + publicKeyBase64 TEXT, + seesMe BOOLEAN, + registered BOOLEAN + ); + + CREATE INDEX IF NOT EXISTS idx_contacts_did ON contacts(did); + CREATE INDEX IF NOT EXISTS idx_contacts_name ON contacts(name); + + CREATE TABLE IF NOT EXISTS logs ( + date TEXT PRIMARY KEY, + message TEXT NOT NULL + ); + + CREATE TABLE IF NOT EXISTS temp ( + id TEXT PRIMARY KEY, + blobB64 TEXT + ); + ` } ]; diff --git a/src/interfaces/database.ts b/src/interfaces/database.ts new file mode 100644 index 00000000..ad61521e --- /dev/null +++ b/src/interfaces/database.ts @@ -0,0 +1,14 @@ +export type SqlValue = string | number | null | Uint8Array; + +export interface QueryExecResult { + columns: Array; + values: Array>; +} + +export interface DatabaseService { + initialize(): Promise; + query(sql: string, params?: any[]): Promise; + run(sql: string, params?: any[]): Promise<{ changes: number; lastId?: number }>; + get(sql: string, params?: any[]): Promise; + all(sql: string, params?: any[]): Promise; +} \ No newline at end of file diff --git a/src/libs/util.ts b/src/libs/util.ts index b98f747c..3c7c794d 100644 --- a/src/libs/util.ts +++ b/src/libs/util.ts @@ -549,7 +549,7 @@ export const generateSaveAndActivateIdentity = async (): Promise => { mnemonic: mnemonic, publicKeyHex: newId.keys[0].publicKeyHex, }); - + await updateDefaultSettings({ activeDid: newId.did }); } catch (error) { console.error("Failed to update default settings:", error); diff --git a/src/services/database.d.ts b/src/services/database.d.ts new file mode 100644 index 00000000..032cc419 --- /dev/null +++ b/src/services/database.d.ts @@ -0,0 +1,27 @@ +import { DatabaseService } from '../interfaces/database'; + +declare module '@jlongster/sql.js' { + interface SQL { + Database: any; + FS: any; + register_for_idb: (fs: any) => void; + } + + function initSqlJs(config: { locateFile: (file: string) => string }): Promise; + export default initSqlJs; +} + +declare module 'absurd-sql' { + export class SQLiteFS { + constructor(fs: any, backend: any); + } +} + +declare module 'absurd-sql/dist/indexeddb-backend' { + export default class IndexedDBBackend { + constructor(); + } +} + +declare const databaseService: DatabaseService; +export default databaseService; diff --git a/src/services/database.js b/src/services/database.js deleted file mode 100644 index ea872ae1..00000000 --- a/src/services/database.js +++ /dev/null @@ -1,81 +0,0 @@ -import initSqlJs from '@jlongster/sql.js'; -import { SQLiteFS } from 'absurd-sql'; -import IndexedDBBackend from 'absurd-sql/dist/indexeddb-backend'; -import { runMigrations } from '../db-sql/migration'; - -class DatabaseService { - constructor() { - this.db = null; - this.SQL = null; - this.initialized = false; - } - - async initialize() { - if (this.initialized) return; - - this.SQL = await initSqlJs({ - locateFile: file => { - return new URL(`/node_modules/@jlongster/sql.js/dist/${file}`, import.meta.url).href; - } - }); - - let sqlFS = new SQLiteFS(this.SQL.FS, new IndexedDBBackend()); - this.SQL.register_for_idb(sqlFS); - - this.SQL.FS.mkdir('/sql'); - this.SQL.FS.mount(sqlFS, {}, '/sql'); - - const path = '/sql/db.sqlite'; - if (typeof SharedArrayBuffer === 'undefined') { - let stream = this.SQL.FS.open(path, 'a+'); - await stream.node.contents.readIfFallback(); - this.SQL.FS.close(stream); - } - - this.db = new this.SQL.Database(path, { filename: true }); - this.db.exec(` - PRAGMA journal_mode=MEMORY; - `); - const sqlExec = this.db.exec.bind(this.db); - - // Run migrations - await runMigrations(sqlExec); - - this.initialized = true; - } - - async query(sql, params = []) { - if (!this.initialized) { - await this.initialize(); - } - return this.db.exec(sql, params); - } - - async run(sql, params = []) { - if (!this.initialized) { - await this.initialize(); - } - return this.db.run(sql, params); - } - - async get(sql, params = []) { - if (!this.initialized) { - await this.initialize(); - } - const result = await this.db.exec(sql, params); - return result[0]?.values[0]; - } - - async all(sql, params = []) { - if (!this.initialized) { - await this.initialize(); - } - const result = await this.db.exec(sql, params); - return result[0]?.values || []; - } -} - -// Create a singleton instance -const databaseService = new DatabaseService(); - -export default databaseService; \ No newline at end of file diff --git a/src/services/database.ts b/src/services/database.ts new file mode 100644 index 00000000..c87d1edf --- /dev/null +++ b/src/services/database.ts @@ -0,0 +1,97 @@ +// Add type declarations for external modules +declare module '@jlongster/sql.js'; +declare module 'absurd-sql'; +declare module 'absurd-sql/dist/indexeddb-backend'; + +import initSqlJs from '@jlongster/sql.js'; +import { SQLiteFS } from 'absurd-sql'; +import IndexedDBBackend from 'absurd-sql/dist/indexeddb-backend'; +import { runMigrations } from '../db-sql/migration'; +import { QueryExecResult } from './migrationService'; + +interface SQLDatabase { + exec: (sql: string, params?: any[]) => Promise; + run: (sql: string, params?: any[]) => Promise<{ changes: number; lastId?: number }>; +} + +class DatabaseService { + private db: SQLDatabase | null; + private initialized: boolean; + + constructor() { + this.db = null; + this.initialized = false; + } + + async initialize(): Promise { + if (this.initialized) return; + + const SQL = await initSqlJs({ + locateFile: (file: string) => { + return new URL(`/node_modules/@jlongster/sql.js/dist/${file}`, import.meta.url).href; + } + }); + + let sqlFS = new SQLiteFS(SQL.FS, new IndexedDBBackend()); + SQL.register_for_idb(sqlFS); + + SQL.FS.mkdir('/sql'); + SQL.FS.mount(sqlFS, {}, '/sql'); + + const path = '/sql/db.sqlite'; + if (typeof SharedArrayBuffer === 'undefined') { + let stream = SQL.FS.open(path, 'a+'); + await stream.node.contents.readIfFallback(); + SQL.FS.close(stream); + } + + this.db = new SQL.Database(path, { filename: true }); + if (!this.db) { + throw new Error('Failed to initialize database'); + } + + await this.db.exec(` + PRAGMA journal_mode=MEMORY; + `); + const sqlExec = this.db.exec.bind(this.db); + + // Run migrations + await runMigrations(sqlExec); + + this.initialized = true; + } + + private ensureInitialized(): void { + if (!this.initialized || !this.db) { + throw new Error('Database not initialized'); + } + } + + // Used for inserts, updates, and deletes + async run(sql: string, params: any[] = []): Promise<{ changes: number; lastId?: number }> { + this.ensureInitialized(); + return this.db!.run(sql, params); + } + + async query(sql: string, params: any[] = []): Promise { + this.ensureInitialized(); + return this.db!.exec(sql, params); + } + + async get(sql: string, params: any[] = []): Promise { + this.ensureInitialized(); + const result = await this.db!.exec(sql, params); + return result[0]?.values[0]; + } + + async all(sql: string, params: any[] = []): Promise { + this.ensureInitialized(); + const result = await this.db!.exec(sql, params); + return result[0]?.values || []; + } +} + +// Create a singleton instance +const databaseService = new DatabaseService(); + +export default databaseService; \ No newline at end of file From a3bdcfd168112f2730c1c1752dd03462f1b0995f Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Sun, 25 May 2025 18:32:41 -0600 Subject: [PATCH 08/92] fix problem with initialization & refactor types --- src/interfaces/database.ts | 6 +++--- src/services/database.ts | 6 ++++-- src/services/migrationService.ts | 19 +++++++++---------- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/interfaces/database.ts b/src/interfaces/database.ts index ad61521e..f828eb00 100644 --- a/src/interfaces/database.ts +++ b/src/interfaces/database.ts @@ -9,6 +9,6 @@ export interface DatabaseService { initialize(): Promise; query(sql: string, params?: any[]): Promise; run(sql: string, params?: any[]): Promise<{ changes: number; lastId?: number }>; - get(sql: string, params?: any[]): Promise; - all(sql: string, params?: any[]): Promise; -} \ No newline at end of file + getOneRow(sql: string, params?: any[]): Promise; + getAll(sql: string, params?: any[]): Promise; +} diff --git a/src/services/database.ts b/src/services/database.ts index c87d1edf..74da316d 100644 --- a/src/services/database.ts +++ b/src/services/database.ts @@ -6,8 +6,9 @@ declare module 'absurd-sql/dist/indexeddb-backend'; import initSqlJs from '@jlongster/sql.js'; import { SQLiteFS } from 'absurd-sql'; import IndexedDBBackend from 'absurd-sql/dist/indexeddb-backend'; + import { runMigrations } from '../db-sql/migration'; -import { QueryExecResult } from './migrationService'; +import type { QueryExecResult } from '../interfaces/database'; interface SQLDatabase { exec: (sql: string, params?: any[]) => Promise; @@ -73,12 +74,13 @@ class DatabaseService { return this.db!.run(sql, params); } + // Note that the resulting array may be empty if there are no results from the query async query(sql: string, params: any[] = []): Promise { this.ensureInitialized(); return this.db!.exec(sql, params); } - async get(sql: string, params: any[] = []): Promise { + async getOneRow(sql: string, params: any[] = []): Promise { this.ensureInitialized(); const result = await this.db!.exec(sql, params); return result[0]?.values[0]; diff --git a/src/services/migrationService.ts b/src/services/migrationService.ts index 106d06d3..ca640694 100644 --- a/src/services/migrationService.ts +++ b/src/services/migrationService.ts @@ -1,9 +1,4 @@ -type SqlValue = string | number | null | Uint8Array; - -export interface QueryExecResult { - columns: Array; - values: Array>; -} +import { QueryExecResult } from '../interfaces/database'; interface Migration { name: string; @@ -36,13 +31,17 @@ export class MigrationService { id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL UNIQUE, executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP - ) + ); `); // Get list of executed migrations - const result = await sqlExec('SELECT name FROM migrations'); - const singleResult = result[0]; - const executedMigrations = new Set(singleResult.values.map(row => row[0])); + const result: QueryExecResult[] = await sqlExec('SELECT name FROM migrations;'); + let executedMigrations: Set = new Set(); + // Even with that query, the QueryExecResult may be [] (which doesn't make sense to me). + if (result.length > 0) { + const singleResult = result[0]; + executedMigrations = new Set(singleResult.values.map((row: any[]) => row[0])); + } // Run pending migrations in order for (const migration of this.migrations) { From a38934e38ddcca88a79bdeee52cb50bfaca43957 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Sun, 25 May 2025 19:46:15 -0600 Subject: [PATCH 09/92] fix problems with race conditions and multiple DatabaseService instances --- src/db-sql/migration.ts | 2 +- src/libs/util.ts | 15 +++++++++ src/services/database.ts | 73 ++++++++++++++++++++++++++++++++-------- 3 files changed, 75 insertions(+), 15 deletions(-) diff --git a/src/db-sql/migration.ts b/src/db-sql/migration.ts index b81a93d8..bf7c50fb 100644 --- a/src/db-sql/migration.ts +++ b/src/db-sql/migration.ts @@ -5,7 +5,7 @@ import type { QueryExecResult } from '../services/migrationService'; const MIGRATIONS = [ { name: '001_initial', - // see ../db/tables files for explanations + // see ../db/tables files for explanations of the fields sql: ` CREATE TABLE IF NOT EXISTS accounts ( id INTEGER PRIMARY KEY AUTOINCREMENT, diff --git a/src/libs/util.ts b/src/libs/util.ts index 3c7c794d..573a5b37 100644 --- a/src/libs/util.ts +++ b/src/libs/util.ts @@ -12,6 +12,7 @@ import { updateAccountSettings, updateDefaultSettings, } from "../db/index"; +import databaseService from "../services/database"; import { Account } from "../db/tables/accounts"; import { Contact } from "../db/tables/contacts"; import { DEFAULT_PASSKEY_EXPIRATION_MINUTES } from "../db/tables/settings"; @@ -550,6 +551,20 @@ export const generateSaveAndActivateIdentity = async (): Promise => { publicKeyHex: newId.keys[0].publicKeyHex, }); + // add to the new sql db + await databaseService.run( + `INSERT INTO accounts (dateCreated, derivationPath, did, identity, mnemonic, publicKeyHex) + VALUES (?, ?, ?, ?, ?, ?)`, + [ + new Date().toISOString(), + derivationPath, + newId.did, + identity, + mnemonic, + newId.keys[0].publicKeyHex + ] + ); + await updateDefaultSettings({ activeDid: newId.did }); } catch (error) { console.error("Failed to update default settings:", error); diff --git a/src/services/database.ts b/src/services/database.ts index 74da316d..0b645adc 100644 --- a/src/services/database.ts +++ b/src/services/database.ts @@ -16,16 +16,49 @@ interface SQLDatabase { } class DatabaseService { + private static instance: DatabaseService | null = null; private db: SQLDatabase | null; private initialized: boolean; + private initializationPromise: Promise | null = null; - constructor() { + private constructor() { this.db = null; this.initialized = false; } + static getInstance(): DatabaseService { + if (!DatabaseService.instance) { + DatabaseService.instance = new DatabaseService(); + } + return DatabaseService.instance; + } + async initialize(): Promise { - if (this.initialized) return; + // If already initialized, return immediately + if (this.initialized) { + return; + } + + // If initialization is in progress, wait for it + if (this.initializationPromise) { + return this.initializationPromise; + } + + // Start initialization + this.initializationPromise = this._initialize(); + try { + await this.initializationPromise; + } catch (error) { + console.error(`DatabaseService initialize method failed:`, error); + this.initializationPromise = null; // Reset on failure + throw error; + } + } + + private async _initialize(): Promise { + if (this.initialized) { + return; + } const SQL = await initSqlJs({ locateFile: (file: string) => { @@ -48,12 +81,10 @@ class DatabaseService { this.db = new SQL.Database(path, { filename: true }); if (!this.db) { - throw new Error('Failed to initialize database'); + throw new Error('The database initialization failed. We recommend you restart or reinstall.'); } - await this.db.exec(` - PRAGMA journal_mode=MEMORY; - `); + await this.db.exec(`PRAGMA journal_mode=MEMORY;`); const sqlExec = this.db.exec.bind(this.db); // Run migrations @@ -62,38 +93,52 @@ class DatabaseService { this.initialized = true; } - private ensureInitialized(): void { - if (!this.initialized || !this.db) { - throw new Error('Database not initialized'); + private async waitForInitialization(): Promise { + // If we have an initialization promise, wait for it + if (this.initializationPromise) { + await this.initializationPromise; + return; + } + + // If not initialized and no promise, start initialization + if (!this.initialized) { + await this.initialize(); + return; + } + + // If initialized but no db, something went wrong + if (!this.db) { + console.error(`Database not properly initialized after await waitForInitialization() - initialized flag is true but db is null`); + throw new Error(`The database could not be initialized. We recommend you restart or reinstall.`); } } // Used for inserts, updates, and deletes async run(sql: string, params: any[] = []): Promise<{ changes: number; lastId?: number }> { - this.ensureInitialized(); + await this.waitForInitialization(); return this.db!.run(sql, params); } // Note that the resulting array may be empty if there are no results from the query async query(sql: string, params: any[] = []): Promise { - this.ensureInitialized(); + await this.waitForInitialization(); return this.db!.exec(sql, params); } async getOneRow(sql: string, params: any[] = []): Promise { - this.ensureInitialized(); + await this.waitForInitialization(); const result = await this.db!.exec(sql, params); return result[0]?.values[0]; } async all(sql: string, params: any[] = []): Promise { - this.ensureInitialized(); + await this.waitForInitialization(); const result = await this.db!.exec(sql, params); return result[0]?.values || []; } } // Create a singleton instance -const databaseService = new DatabaseService(); +const databaseService = DatabaseService.getInstance(); export default databaseService; \ No newline at end of file From 946e88d90366141faa1263eafdc8859be5cf1add Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Sun, 25 May 2025 20:27:06 -0600 Subject: [PATCH 10/92] add a input area for arbitrary SQL on the test page --- src/db/index.ts | 7 +++-- src/views/TestView.vue | 60 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 4 deletions(-) diff --git a/src/db/index.ts b/src/db/index.ts index 444a98db..27256da0 100644 --- a/src/db/index.ts +++ b/src/db/index.ts @@ -144,9 +144,8 @@ export async function updateDefaultSettings( // console.log("Database version:", db.verno); await safeOpenDatabase(); } catch (openError: unknown) { - console.error("Failed to open database:", openError); - const errorMessage = openError instanceof Error ? openError.message : String(openError); - throw new Error(`Database connection failed: ${errorMessage}. Please try again or restart the app.`); + console.error("Failed to open database:", openError, String(openError)); + throw new Error(`The database connection failed. We recommend you try again or restart the app.`); } const result = await db.settings.update(MASTER_SETTINGS_KEY, settingsChanges); return result; @@ -155,7 +154,7 @@ export async function updateDefaultSettings( if (error instanceof Error) { throw error; // Re-throw if it's already an Error with a message } else { - throw new Error(`Failed to update settings: ${error}`); + throw new Error(`Failed to update settings. We recommend you try again or restart the app.`); } } } diff --git a/src/views/TestView.vue b/src/views/TestView.vue index 619096dc..10bf8bfb 100644 --- a/src/views/TestView.vue +++ b/src/views/TestView.vue @@ -161,6 +161,38 @@ +
+

SQL Operations

+
+
+ +
+ +
+ +
+ +
+
+

Result:

+
{{ JSON.stringify(sqlResult, null, 2) }}
+
+
+

Image Sharing

Populates the "shared-photo" view as if they used "share_target". @@ -271,6 +303,7 @@ import { AppString, NotificationIface } from "../constants/app"; import { db, retrieveSettingsForActiveAccount } from "../db/index"; import * as vcLib from "../libs/crypto/vc"; import * as cryptoLib from "../libs/crypto"; +import databaseService from "../services/database"; import { PeerSetup, @@ -316,6 +349,10 @@ export default class Help extends Vue { peerSetup?: PeerSetup; userName?: string; + // for SQL operations + sqlQuery = ""; + sqlResult: any = null; + cryptoLib = cryptoLib; async mounted() { @@ -492,5 +529,28 @@ export default class Help extends Vue { ); logger.log("decoded", decoded); } + + async executeSql() { + try { + const isSelect = this.sqlQuery.trim().toLowerCase().startsWith('select'); + if (isSelect) { + this.sqlResult = await databaseService.query(this.sqlQuery); + } else { + this.sqlResult = await databaseService.run(this.sqlQuery); + } + console.log("SQL Result:", this.sqlResult); + } catch (error) { + console.error("SQL Error:", error); + this.$notify( + { + group: "alert", + type: "danger", + title: "SQL Error", + text: error instanceof Error ? error.message : String(error), + }, + 5000 + ); + } + } } From 5057d7d07f3ff48ce686bcefa52b3e32f7031bea Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Sun, 25 May 2025 20:37:16 -0600 Subject: [PATCH 11/92] don't always apply the camera-implementation cursor rules --- .../crowd-funder-for-time-pwa/docs/camera-implementation.mdc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.cursor/rules/crowd-funder-for-time-pwa/docs/camera-implementation.mdc b/.cursor/rules/crowd-funder-for-time-pwa/docs/camera-implementation.mdc index 22e02a57..e7fef13c 100644 --- a/.cursor/rules/crowd-funder-for-time-pwa/docs/camera-implementation.mdc +++ b/.cursor/rules/crowd-funder-for-time-pwa/docs/camera-implementation.mdc @@ -1,7 +1,7 @@ --- description: globs: -alwaysApply: true +alwaysApply: false --- # Camera Implementation Documentation From 5f24f4975dd2031a36f2ca1b7dfee9437be29586 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Sun, 25 May 2025 20:48:33 -0600 Subject: [PATCH 12/92] fix linting --- src/components/DataExportSection.vue | 2 +- src/db-sql/migration.ts | 14 +++--- src/db/index.ts | 22 +++++++--- src/interfaces/database.ts | 5 ++- src/libs/util.ts | 10 +++-- src/main.web.ts | 11 +++-- src/registerSQLWorker.js | 2 +- src/services/database.d.ts | 12 ++--- src/services/database.ts | 65 +++++++++++++++++----------- src/services/migrationService.ts | 18 +++++--- src/views/AccountViewView.vue | 10 +++-- src/views/ContactQRScanShowView.vue | 10 +++-- src/views/NewIdentifierView.vue | 10 +++-- src/views/TestView.vue | 14 +++--- 14 files changed, 130 insertions(+), 75 deletions(-) diff --git a/src/components/DataExportSection.vue b/src/components/DataExportSection.vue index be565536..a0d3eaca 100644 --- a/src/components/DataExportSection.vue +++ b/src/components/DataExportSection.vue @@ -136,7 +136,7 @@ export default class DataExportSection extends Vue { transform: (table, value, key) => { if (table === "contacts") { // Dexie inserts a number 0 when some are undefined, so we need to totally remove them. - Object.keys(value).forEach(prop => { + Object.keys(value).forEach((prop) => { if (value[prop] === undefined) { delete value[prop]; } diff --git a/src/db-sql/migration.ts b/src/db-sql/migration.ts index bf7c50fb..d1f10090 100644 --- a/src/db-sql/migration.ts +++ b/src/db-sql/migration.ts @@ -1,10 +1,10 @@ -import migrationService from '../services/migrationService'; -import type { QueryExecResult } from '../services/migrationService'; +import migrationService from "../services/migrationService"; +import type { QueryExecResult } from "../services/migrationService"; // Each migration can include multiple SQL statements (with semicolons) const MIGRATIONS = [ { - name: '001_initial', + name: "001_initial", // see ../db/tables files for explanations of the fields sql: ` CREATE TABLE IF NOT EXISTS accounts ( @@ -84,8 +84,8 @@ const MIGRATIONS = [ id TEXT PRIMARY KEY, blobB64 TEXT ); - ` - } + `, + }, ]; export async function registerMigrations(): Promise { @@ -96,8 +96,8 @@ export async function registerMigrations(): Promise { } export async function runMigrations( - sqlExec: (sql: string, params?: any[]) => Promise> + sqlExec: (sql: string, params?: any[]) => Promise>, ): Promise { await registerMigrations(); await migrationService.runMigrations(sqlExec); -} \ No newline at end of file +} diff --git a/src/db/index.ts b/src/db/index.ts index 27256da0..d25d0ed9 100644 --- a/src/db/index.ts +++ b/src/db/index.ts @@ -90,7 +90,10 @@ db.on("populate", async () => { try { await db.settings.add(DEFAULT_SETTINGS); } catch (error) { - console.error("Error populating the database with default settings:", error); + console.error( + "Error populating the database with default settings:", + error, + ); } }); @@ -105,7 +108,7 @@ async function safeOpenDatabase(retries = 1, delay = 500): Promise { // Create a promise that rejects after 5 seconds const timeoutPromise = new Promise((_, reject) => { - setTimeout(() => reject(new Error('Database open timed out')), 500); + setTimeout(() => reject(new Error("Database open timed out")), 500); }); // Race between the open operation and the timeout @@ -123,7 +126,7 @@ async function safeOpenDatabase(retries = 1, delay = 500): Promise { console.error(`Attempt ${i + 1}: Database open failed:`, error); if (i < retries - 1) { console.log(`Attempt ${i + 1}: Waiting ${delay}ms before retry...`); - await new Promise(resolve => setTimeout(resolve, delay)); + await new Promise((resolve) => setTimeout(resolve, delay)); } else { throw error; } @@ -145,16 +148,23 @@ export async function updateDefaultSettings( await safeOpenDatabase(); } catch (openError: unknown) { console.error("Failed to open database:", openError, String(openError)); - throw new Error(`The database connection failed. We recommend you try again or restart the app.`); + throw new Error( + `The database connection failed. We recommend you try again or restart the app.`, + ); } - const result = await db.settings.update(MASTER_SETTINGS_KEY, settingsChanges); + const result = await db.settings.update( + MASTER_SETTINGS_KEY, + settingsChanges, + ); return result; } catch (error) { console.error("Error updating default settings:", error); if (error instanceof Error) { throw error; // Re-throw if it's already an Error with a message } else { - throw new Error(`Failed to update settings. We recommend you try again or restart the app.`); + throw new Error( + `Failed to update settings. We recommend you try again or restart the app.`, + ); } } } diff --git a/src/interfaces/database.ts b/src/interfaces/database.ts index f828eb00..0e024c55 100644 --- a/src/interfaces/database.ts +++ b/src/interfaces/database.ts @@ -8,7 +8,10 @@ export interface QueryExecResult { export interface DatabaseService { initialize(): Promise; query(sql: string, params?: any[]): Promise; - run(sql: string, params?: any[]): Promise<{ changes: number; lastId?: number }>; + run( + sql: string, + params?: any[], + ): Promise<{ changes: number; lastId?: number }>; getOneRow(sql: string, params?: any[]): Promise; getAll(sql: string, params?: any[]): Promise; } diff --git a/src/libs/util.ts b/src/libs/util.ts index 573a5b37..51b1f063 100644 --- a/src/libs/util.ts +++ b/src/libs/util.ts @@ -561,14 +561,16 @@ export const generateSaveAndActivateIdentity = async (): Promise => { newId.did, identity, mnemonic, - newId.keys[0].publicKeyHex - ] + newId.keys[0].publicKeyHex, + ], ); - + await updateDefaultSettings({ activeDid: newId.did }); } catch (error) { console.error("Failed to update default settings:", error); - throw new Error("Failed to set default settings. Please try again or restart the app."); + throw new Error( + "Failed to set default settings. Please try again or restart the app.", + ); } await updateAccountSettings(newId.did, { isRegistered: false }); return newId.did; diff --git a/src/main.web.ts b/src/main.web.ts index ad974034..51280cc1 100644 --- a/src/main.web.ts +++ b/src/main.web.ts @@ -1,4 +1,4 @@ -import { initBackend } from 'absurd-sql/dist/indexeddb-main-thread'; +import { initBackend } from "absurd-sql/dist/indexeddb-main-thread"; import { initializeApp } from "./main.common"; import "./registerServiceWorker"; // Web PWA support @@ -6,9 +6,12 @@ const app = initializeApp(); function sqlInit() { // see https://github.com/jlongster/absurd-sql - let worker = new Worker(new URL('./registerSQLWorker.js', import.meta.url), { - type: 'module' - }); + const worker = new Worker( + new URL("./registerSQLWorker.js", import.meta.url), + { + type: "module", + }, + ); // This is only required because Safari doesn't support nested // workers. This installs a handler that will proxy creating web // workers through the main thread diff --git a/src/registerSQLWorker.js b/src/registerSQLWorker.js index cbff7f15..cac722b3 100644 --- a/src/registerSQLWorker.js +++ b/src/registerSQLWorker.js @@ -1,4 +1,4 @@ -import databaseService from './services/database'; +import databaseService from "./services/database"; async function run() { await databaseService.initialize(); diff --git a/src/services/database.d.ts b/src/services/database.d.ts index 032cc419..08032bfd 100644 --- a/src/services/database.d.ts +++ b/src/services/database.d.ts @@ -1,23 +1,25 @@ -import { DatabaseService } from '../interfaces/database'; +import { DatabaseService } from "../interfaces/database"; -declare module '@jlongster/sql.js' { +declare module "@jlongster/sql.js" { interface SQL { Database: any; FS: any; register_for_idb: (fs: any) => void; } - function initSqlJs(config: { locateFile: (file: string) => string }): Promise; + function initSqlJs(config: { + locateFile: (file: string) => string; + }): Promise; export default initSqlJs; } -declare module 'absurd-sql' { +declare module "absurd-sql" { export class SQLiteFS { constructor(fs: any, backend: any); } } -declare module 'absurd-sql/dist/indexeddb-backend' { +declare module "absurd-sql/dist/indexeddb-backend" { export default class IndexedDBBackend { constructor(); } diff --git a/src/services/database.ts b/src/services/database.ts index 0b645adc..907a0e80 100644 --- a/src/services/database.ts +++ b/src/services/database.ts @@ -1,18 +1,21 @@ // Add type declarations for external modules -declare module '@jlongster/sql.js'; -declare module 'absurd-sql'; -declare module 'absurd-sql/dist/indexeddb-backend'; +declare module "@jlongster/sql.js"; +declare module "absurd-sql"; +declare module "absurd-sql/dist/indexeddb-backend"; -import initSqlJs from '@jlongster/sql.js'; -import { SQLiteFS } from 'absurd-sql'; -import IndexedDBBackend from 'absurd-sql/dist/indexeddb-backend'; +import initSqlJs from "@jlongster/sql.js"; +import { SQLiteFS } from "absurd-sql"; +import IndexedDBBackend from "absurd-sql/dist/indexeddb-backend"; -import { runMigrations } from '../db-sql/migration'; -import type { QueryExecResult } from '../interfaces/database'; +import { runMigrations } from "../db-sql/migration"; +import type { QueryExecResult } from "../interfaces/database"; interface SQLDatabase { exec: (sql: string, params?: any[]) => Promise; - run: (sql: string, params?: any[]) => Promise<{ changes: number; lastId?: number }>; + run: ( + sql: string, + params?: any[], + ) => Promise<{ changes: number; lastId?: number }>; } class DatabaseService { @@ -62,34 +65,39 @@ class DatabaseService { const SQL = await initSqlJs({ locateFile: (file: string) => { - return new URL(`/node_modules/@jlongster/sql.js/dist/${file}`, import.meta.url).href; - } + return new URL( + `/node_modules/@jlongster/sql.js/dist/${file}`, + import.meta.url, + ).href; + }, }); - let sqlFS = new SQLiteFS(SQL.FS, new IndexedDBBackend()); + const sqlFS = new SQLiteFS(SQL.FS, new IndexedDBBackend()); SQL.register_for_idb(sqlFS); - SQL.FS.mkdir('/sql'); - SQL.FS.mount(sqlFS, {}, '/sql'); + SQL.FS.mkdir("/sql"); + SQL.FS.mount(sqlFS, {}, "/sql"); - const path = '/sql/db.sqlite'; - if (typeof SharedArrayBuffer === 'undefined') { - let stream = SQL.FS.open(path, 'a+'); + const path = "/sql/db.sqlite"; + if (typeof SharedArrayBuffer === "undefined") { + const stream = SQL.FS.open(path, "a+"); await stream.node.contents.readIfFallback(); SQL.FS.close(stream); } this.db = new SQL.Database(path, { filename: true }); if (!this.db) { - throw new Error('The database initialization failed. We recommend you restart or reinstall.'); + throw new Error( + "The database initialization failed. We recommend you restart or reinstall.", + ); } - + await this.db.exec(`PRAGMA journal_mode=MEMORY;`); const sqlExec = this.db.exec.bind(this.db); - + // Run migrations await runMigrations(sqlExec); - + this.initialized = true; } @@ -108,13 +116,20 @@ class DatabaseService { // If initialized but no db, something went wrong if (!this.db) { - console.error(`Database not properly initialized after await waitForInitialization() - initialized flag is true but db is null`); - throw new Error(`The database could not be initialized. We recommend you restart or reinstall.`); + console.error( + `Database not properly initialized after await waitForInitialization() - initialized flag is true but db is null`, + ); + throw new Error( + `The database could not be initialized. We recommend you restart or reinstall.`, + ); } } // Used for inserts, updates, and deletes - async run(sql: string, params: any[] = []): Promise<{ changes: number; lastId?: number }> { + async run( + sql: string, + params: any[] = [], + ): Promise<{ changes: number; lastId?: number }> { await this.waitForInitialization(); return this.db!.run(sql, params); } @@ -141,4 +156,4 @@ class DatabaseService { // Create a singleton instance const databaseService = DatabaseService.getInstance(); -export default databaseService; \ No newline at end of file +export default databaseService; diff --git a/src/services/migrationService.ts b/src/services/migrationService.ts index ca640694..18f49b56 100644 --- a/src/services/migrationService.ts +++ b/src/services/migrationService.ts @@ -1,4 +1,4 @@ -import { QueryExecResult } from '../interfaces/database'; +import { QueryExecResult } from "../interfaces/database"; interface Migration { name: string; @@ -23,7 +23,7 @@ export class MigrationService { } async runMigrations( - sqlExec: (sql: string, params?: any[]) => Promise> + sqlExec: (sql: string, params?: any[]) => Promise>, ): Promise { // Create migrations table if it doesn't exist await sqlExec(` @@ -35,12 +35,16 @@ export class MigrationService { `); // Get list of executed migrations - const result: QueryExecResult[] = await sqlExec('SELECT name FROM migrations;'); + const result: QueryExecResult[] = await sqlExec( + "SELECT name FROM migrations;", + ); let executedMigrations: Set = new Set(); // Even with that query, the QueryExecResult may be [] (which doesn't make sense to me). if (result.length > 0) { const singleResult = result[0]; - executedMigrations = new Set(singleResult.values.map((row: any[]) => row[0])); + executedMigrations = new Set( + singleResult.values.map((row: any[]) => row[0]), + ); } // Run pending migrations in order @@ -48,7 +52,9 @@ export class MigrationService { if (!executedMigrations.has(migration.name)) { try { await sqlExec(migration.sql); - await sqlExec('INSERT INTO migrations (name) VALUES (?)', [migration.name]); + await sqlExec("INSERT INTO migrations (name) VALUES (?)", [ + migration.name, + ]); console.log(`Migration ${migration.name} executed successfully`); } catch (error) { console.error(`Error executing migration ${migration.name}:`, error); @@ -59,4 +65,4 @@ export class MigrationService { } } -export default MigrationService.getInstance(); \ No newline at end of file +export default MigrationService.getInstance(); diff --git a/src/views/AccountViewView.vue b/src/views/AccountViewView.vue index 4dc68149..b3ae0d9e 100644 --- a/src/views/AccountViewView.vue +++ b/src/views/AccountViewView.vue @@ -76,7 +76,8 @@ Set Your Name

- (Don't worry: this is not visible to anyone until you share it with them. It's not sent to any servers.) + (Don't worry: this is not visible to anyone until you share it with + them. It's not sent to any servers.)

@@ -964,7 +965,7 @@ import { AxiosError } from "axios"; import { Buffer } from "buffer/"; import Dexie from "dexie"; import "dexie-export-import"; -// @ts-ignore - they aren't exporting it but it's there +// @ts-expect-error - they aren't exporting it but it's there import { ImportProgress } from "dexie-export-import"; import { LeafletMouseEvent } from "leaflet"; import * as R from "ramda"; @@ -1610,12 +1611,13 @@ export default class AccountViewView extends Vue { */ async submitImportFile() { if (inputImportFileNameRef.value != null) { - await db.delete() + await db + .delete() .then(async () => { // BulkError: settings.bulkAdd(): 1 of 21 operations failed. Errors: ConstraintError: Key already exists in the object store. await Dexie.import(inputImportFileNameRef.value as Blob, { progressCallback: this.progressCallback, - }) + }); }) .catch((error) => { logger.error("Error importing file:", error); diff --git a/src/views/ContactQRScanShowView.vue b/src/views/ContactQRScanShowView.vue index 65257a15..f9351cf5 100644 --- a/src/views/ContactQRScanShowView.vue +++ b/src/views/ContactQRScanShowView.vue @@ -726,9 +726,11 @@ export default class ContactQRScanShow extends Vue { // Apply mirroring after a short delay to ensure video element is ready setTimeout(() => { - const videoElement = document.querySelector('.qr-scanner video') as HTMLVideoElement; + const videoElement = document.querySelector( + ".qr-scanner video", + ) as HTMLVideoElement; if (videoElement) { - videoElement.style.transform = 'scaleX(-1)'; + videoElement.style.transform = "scaleX(-1)"; } }, 1000); } @@ -943,7 +945,9 @@ export default class ContactQRScanShow extends Vue { // Add method to detect desktop browser private detectDesktopBrowser(): boolean { const userAgent = navigator.userAgent.toLowerCase(); - return !/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(userAgent); + return !/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test( + userAgent, + ); } // Update the computed property for camera mirroring diff --git a/src/views/NewIdentifierView.vue b/src/views/NewIdentifierView.vue index 547c43ca..7613b6ff 100644 --- a/src/views/NewIdentifierView.vue +++ b/src/views/NewIdentifierView.vue @@ -34,9 +34,13 @@
Error Creating Identity - +

- Try fully restarting the app. If that doesn't work, back up all data (identities and other data) and reinstall the app. + Try fully restarting the app. If that doesn't work, back up all data + (identities and other data) and reinstall the app.

@@ -85,7 +89,7 @@ export default class NewIdentifierView extends Vue { .catch((error) => { this.loading = false; this.hitError = true; - console.error('Failed to generate identity:', error); + console.error("Failed to generate identity:", error); }); } } diff --git a/src/views/TestView.vue b/src/views/TestView.vue index 10bf8bfb..abf6d87e 100644 --- a/src/views/TestView.vue +++ b/src/views/TestView.vue @@ -167,7 +167,9 @@
@@ -178,7 +180,7 @@ placeholder="Enter your SQL query here..." >
- +
@@ -532,7 +536,7 @@ export default class Help extends Vue { async executeSql() { try { - const isSelect = this.sqlQuery.trim().toLowerCase().startsWith('select'); + const isSelect = this.sqlQuery.trim().toLowerCase().startsWith("select"); if (isSelect) { this.sqlResult = await databaseService.query(this.sqlQuery); } else { @@ -548,7 +552,7 @@ export default class Help extends Vue { title: "SQL Error", text: error instanceof Error ? error.message : String(error), }, - 5000 + 5000, ); } } From 603823d808e215ec8379bfe6e655f6c60d78e531 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Sun, 25 May 2025 20:48:51 -0600 Subject: [PATCH 13/92] add to build instructions for electron on mac --- BUILDING.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/BUILDING.md b/BUILDING.md index 165ad1aa..1a764e9a 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -241,7 +241,9 @@ docker run -d \ 1. Build the electron app in production mode: ```bash - npm run build:electron-prod + npm run build:web + npm run electron:build + npm run build:electron-mac ``` 2. Package the Electron app for macOS: From 75f6e992002d3960868ad59b8e1af54ca64fb1e4 Mon Sep 17 00:00:00 2001 From: Matt Raymer Date: Sun, 25 May 2025 22:50:32 -0400 Subject: [PATCH 14/92] chore: update migration documents and move to new home --- .cursor/rules/absurd-sql.mdc | 153 ++++++++++++++++++ {docs => doc}/dexie-to-sqlite-mapping.md | 124 +++++++------- {docs => doc}/migration-to-wa-sqlite.md | 95 ++++++++--- .../secure-storage-implementation.md | 0 .../storage-implementation-checklist.md | 29 +++- 5 files changed, 320 insertions(+), 81 deletions(-) create mode 100644 .cursor/rules/absurd-sql.mdc rename {docs => doc}/dexie-to-sqlite-mapping.md (76%) rename {docs => doc}/migration-to-wa-sqlite.md (83%) rename {docs => doc}/secure-storage-implementation.md (100%) rename {docs => doc}/storage-implementation-checklist.md (88%) diff --git a/.cursor/rules/absurd-sql.mdc b/.cursor/rules/absurd-sql.mdc new file mode 100644 index 00000000..56729c2a --- /dev/null +++ b/.cursor/rules/absurd-sql.mdc @@ -0,0 +1,153 @@ +--- +description: +globs: +alwaysApply: true +--- +# Absurd SQL - Cursor Development Guide + +## Project Overview +Absurd SQL is a backend implementation for sql.js that enables persistent SQLite databases in the browser by using IndexedDB as a block storage system. This guide provides rules and best practices for developing with this project in Cursor. + +## Project Structure +``` +absurd-sql/ +├── src/ # Source code +├── dist/ # Built files +├── package.json # Dependencies and scripts +├── rollup.config.js # Build configuration +└── jest.config.js # Test configuration +``` + +## Development Rules + +### 1. Worker Thread Requirements +- All SQL operations MUST be performed in a worker thread +- Main thread should only handle worker initialization and communication +- Never block the main thread with database operations + +### 2. Code Organization +- Keep worker code in separate files (e.g., `*.worker.js`) +- Use ES modules for imports/exports +- Follow the project's existing module structure + +### 3. Required Headers +When developing locally or deploying, ensure these headers are set: +``` +Cross-Origin-Opener-Policy: same-origin +Cross-Origin-Embedder-Policy: require-corp +``` + +### 4. Browser Compatibility +- Primary target: Modern browsers with SharedArrayBuffer support +- Fallback mode: Safari (with limitations) +- Always test in both modes + +### 5. Database Configuration +Recommended database settings: +```sql +PRAGMA journal_mode=MEMORY; +PRAGMA page_size=8192; -- Optional, but recommended +``` + +### 6. Development Workflow +1. Install dependencies: + ```bash + yarn add @jlongster/sql.js absurd-sql + ``` + +2. Development commands: + - `yarn build` - Build the project + - `yarn jest` - Run tests + - `yarn serve` - Start development server + +### 7. Testing Guidelines +- Write tests for both SharedArrayBuffer and fallback modes +- Use Jest for testing +- Include performance benchmarks for critical operations + +### 8. Performance Considerations +- Use bulk operations when possible +- Monitor read/write performance +- Consider using transactions for multiple operations +- Avoid unnecessary database connections + +### 9. Error Handling +- Implement proper error handling for: + - Worker initialization failures + - Database connection issues + - Concurrent access conflicts (in fallback mode) + - Storage quota exceeded scenarios + +### 10. Security Best Practices +- Never expose database operations directly to the client +- Validate all SQL queries +- Implement proper access controls +- Handle sensitive data appropriately + +### 11. Code Style +- Follow ESLint configuration +- Use async/await for asynchronous operations +- Document complex database operations +- Include comments for non-obvious optimizations + +### 12. Debugging +- Use `jest-debug` for debugging tests +- Monitor IndexedDB usage in browser dev tools +- Check worker communication in console +- Use performance monitoring tools + +## Common Patterns + +### Worker Initialization +```javascript +// Main thread +import { initBackend } from 'absurd-sql/dist/indexeddb-main-thread'; + +function init() { + let worker = new Worker(new URL('./index.worker.js', import.meta.url)); + initBackend(worker); +} +``` + +### Database Setup +```javascript +// Worker thread +import initSqlJs from '@jlongster/sql.js'; +import { SQLiteFS } from 'absurd-sql'; +import IndexedDBBackend from 'absurd-sql/dist/indexeddb-backend'; + +async function setupDatabase() { + let SQL = await initSqlJs({ locateFile: file => file }); + let sqlFS = new SQLiteFS(SQL.FS, new IndexedDBBackend()); + SQL.register_for_idb(sqlFS); + + SQL.FS.mkdir('/sql'); + SQL.FS.mount(sqlFS, {}, '/sql'); + + return new SQL.Database('/sql/db.sqlite', { filename: true }); +} +``` + +## Troubleshooting + +### Common Issues +1. SharedArrayBuffer not available + - Check COOP/COEP headers + - Verify browser support + - Test fallback mode + +2. Worker initialization failures + - Check file paths + - Verify module imports + - Check browser console for errors + +3. Performance issues + - Monitor IndexedDB usage + - Check for unnecessary operations + - Verify transaction usage + +## Resources +- [Project Demo](https://priceless-keller-d097e5.netlify.app/) +- [Example Project](https://github.com/jlongster/absurd-example-project) +- [Blog Post](https://jlongster.com/future-sql-web) +- [SQL.js Documentation](https://github.com/sql-js/sql.js/) \ No newline at end of file diff --git a/docs/dexie-to-sqlite-mapping.md b/doc/dexie-to-sqlite-mapping.md similarity index 76% rename from docs/dexie-to-sqlite-mapping.md rename to doc/dexie-to-sqlite-mapping.md index 8ffddc90..893b4670 100644 --- a/docs/dexie-to-sqlite-mapping.md +++ b/doc/dexie-to-sqlite-mapping.md @@ -1,4 +1,4 @@ -# Dexie to SQLite Mapping Guide +# Dexie to absurd-sql Mapping Guide ## Schema Mapping @@ -54,10 +54,11 @@ CREATE INDEX idx_settings_updated_at ON settings(updated_at); // Dexie const account = await db.accounts.get(did); -// SQLite -const account = await db.selectOne(` +// absurd-sql +const result = await db.exec(` SELECT * FROM accounts WHERE did = ? `, [did]); +const account = result[0]?.values[0]; ``` #### Get All Accounts @@ -65,10 +66,11 @@ const account = await db.selectOne(` // Dexie const accounts = await db.accounts.toArray(); -// SQLite -const accounts = await db.selectAll(` +// absurd-sql +const result = await db.exec(` SELECT * FROM accounts ORDER BY created_at DESC `); +const accounts = result[0]?.values || []; ``` #### Add Account @@ -81,8 +83,8 @@ await db.accounts.add({ updatedAt: Date.now() }); -// SQLite -await db.execute(` +// absurd-sql +await db.run(` INSERT INTO accounts (did, public_key_hex, created_at, updated_at) VALUES (?, ?, ?, ?) `, [did, publicKeyHex, Date.now(), Date.now()]); @@ -96,8 +98,8 @@ await db.accounts.update(did, { updatedAt: Date.now() }); -// SQLite -await db.execute(` +// absurd-sql +await db.run(` UPDATE accounts SET public_key_hex = ?, updated_at = ? WHERE did = ? @@ -111,10 +113,11 @@ await db.execute(` // Dexie const setting = await db.settings.get(key); -// SQLite -const setting = await db.selectOne(` +// absurd-sql +const result = await db.exec(` SELECT * FROM settings WHERE key = ? `, [key]); +const setting = result[0]?.values[0]; ``` #### Set Setting @@ -126,8 +129,8 @@ await db.settings.put({ updatedAt: Date.now() }); -// SQLite -await db.execute(` +// absurd-sql +await db.run(` INSERT INTO settings (key, value, updated_at) VALUES (?, ?, ?) ON CONFLICT(key) DO UPDATE SET @@ -146,12 +149,13 @@ const contacts = await db.contacts .equals(accountDid) .toArray(); -// SQLite -const contacts = await db.selectAll(` +// absurd-sql +const result = await db.exec(` SELECT * FROM contacts WHERE did = ? ORDER BY created_at DESC `, [accountDid]); +const contacts = result[0]?.values || []; ``` #### Add Contact @@ -165,8 +169,8 @@ await db.contacts.add({ updatedAt: Date.now() }); -// SQLite -await db.execute(` +// absurd-sql +await db.run(` INSERT INTO contacts (id, did, name, created_at, updated_at) VALUES (?, ?, ?, ?, ?) `, [generateId(), accountDid, name, Date.now(), Date.now()]); @@ -182,20 +186,25 @@ await db.transaction('rw', [db.accounts, db.contacts], async () => { await db.contacts.bulkAdd(contacts); }); -// SQLite -await db.transaction(async (tx) => { - await tx.execute(` +// absurd-sql +await db.exec('BEGIN TRANSACTION;'); +try { + await db.run(` INSERT INTO accounts (did, public_key_hex, created_at, updated_at) VALUES (?, ?, ?, ?) `, [account.did, account.publicKeyHex, account.createdAt, account.updatedAt]); for (const contact of contacts) { - await tx.execute(` + await db.run(` INSERT INTO contacts (id, did, name, created_at, updated_at) VALUES (?, ?, ?, ?, ?) `, [contact.id, contact.did, contact.name, contact.createdAt, contact.updatedAt]); } -}); + await db.exec('COMMIT;'); +} catch (error) { + await db.exec('ROLLBACK;'); + throw error; +} ``` ## Migration Helper Functions @@ -218,15 +227,14 @@ async function exportDexieData(): Promise { } ``` -### 2. Data Import (JSON to SQLite) +### 2. Data Import (JSON to absurd-sql) ```typescript -async function importToSQLite(data: MigrationData): Promise { - const db = await getSQLiteConnection(); - - await db.transaction(async (tx) => { +async function importToAbsurdSql(data: MigrationData): Promise { + await db.exec('BEGIN TRANSACTION;'); + try { // Import accounts for (const account of data.accounts) { - await tx.execute(` + await db.run(` INSERT INTO accounts (did, public_key_hex, created_at, updated_at) VALUES (?, ?, ?, ?) `, [account.did, account.publicKeyHex, account.createdAt, account.updatedAt]); @@ -234,7 +242,7 @@ async function importToSQLite(data: MigrationData): Promise { // Import settings for (const setting of data.settings) { - await tx.execute(` + await db.run(` INSERT INTO settings (key, value, updated_at) VALUES (?, ?, ?) `, [setting.key, setting.value, setting.updatedAt]); @@ -242,52 +250,52 @@ async function importToSQLite(data: MigrationData): Promise { // Import contacts for (const contact of data.contacts) { - await tx.execute(` + await db.run(` INSERT INTO contacts (id, did, name, created_at, updated_at) VALUES (?, ?, ?, ?, ?) `, [contact.id, contact.did, contact.name, contact.createdAt, contact.updatedAt]); } - }); + await db.exec('COMMIT;'); + } catch (error) { + await db.exec('ROLLBACK;'); + throw error; + } } ``` ### 3. Verification ```typescript async function verifyMigration(dexieData: MigrationData): Promise { - const db = await getSQLiteConnection(); - // Verify account count - const accountCount = await db.selectValue( - 'SELECT COUNT(*) FROM accounts' - ); + const accountResult = await db.exec('SELECT COUNT(*) as count FROM accounts'); + const accountCount = accountResult[0].values[0][0]; if (accountCount !== dexieData.accounts.length) { return false; } // Verify settings count - const settingsCount = await db.selectValue( - 'SELECT COUNT(*) FROM settings' - ); + const settingsResult = await db.exec('SELECT COUNT(*) as count FROM settings'); + const settingsCount = settingsResult[0].values[0][0]; if (settingsCount !== dexieData.settings.length) { return false; } // Verify contacts count - const contactsCount = await db.selectValue( - 'SELECT COUNT(*) FROM contacts' - ); + const contactsResult = await db.exec('SELECT COUNT(*) as count FROM contacts'); + const contactsCount = contactsResult[0].values[0][0]; if (contactsCount !== dexieData.contacts.length) { return false; } // Verify data integrity for (const account of dexieData.accounts) { - const migratedAccount = await db.selectOne( + const result = await db.exec( 'SELECT * FROM accounts WHERE did = ?', [account.did] ); + const migratedAccount = result[0]?.values[0]; if (!migratedAccount || - migratedAccount.public_key_hex !== account.publicKeyHex) { + migratedAccount[1] !== account.publicKeyHex) { // public_key_hex is second column return false; } } @@ -300,18 +308,21 @@ async function verifyMigration(dexieData: MigrationData): Promise { ### 1. Indexing - Dexie automatically creates indexes based on the schema -- SQLite requires explicit index creation +- absurd-sql requires explicit index creation - Added indexes for frequently queried fields +- Use `PRAGMA journal_mode=MEMORY;` for better performance ### 2. Batch Operations - Dexie has built-in bulk operations -- SQLite uses transactions for batch operations +- absurd-sql uses transactions for batch operations - Consider chunking large datasets +- Use prepared statements for repeated queries ### 3. Query Optimization - Dexie uses IndexedDB's native indexing -- SQLite requires explicit query optimization +- absurd-sql requires explicit query optimization - Use prepared statements for repeated queries +- Consider using `PRAGMA synchronous=NORMAL;` for better performance ## Error Handling @@ -326,14 +337,14 @@ try { } } -// SQLite errors +// absurd-sql errors try { - await db.execute(` + await db.run(` INSERT INTO accounts (did, public_key_hex, created_at, updated_at) VALUES (?, ?, ?, ?) `, [account.did, account.publicKeyHex, account.createdAt, account.updatedAt]); } catch (error) { - if (error.code === 'SQLITE_CONSTRAINT') { + if (error.message.includes('UNIQUE constraint failed')) { // Handle duplicate key } } @@ -350,15 +361,14 @@ try { // Dexie automatically rolls back } -// SQLite transaction -const db = await getSQLiteConnection(); +// absurd-sql transaction try { - await db.transaction(async (tx) => { - // Operations - }); + await db.exec('BEGIN TRANSACTION;'); + // Operations + await db.exec('COMMIT;'); } catch (error) { - // SQLite automatically rolls back - await db.execute('ROLLBACK'); + await db.exec('ROLLBACK;'); + throw error; } ``` diff --git a/docs/migration-to-wa-sqlite.md b/doc/migration-to-wa-sqlite.md similarity index 83% rename from docs/migration-to-wa-sqlite.md rename to doc/migration-to-wa-sqlite.md index b837c00e..627c112d 100644 --- a/docs/migration-to-wa-sqlite.md +++ b/doc/migration-to-wa-sqlite.md @@ -1,8 +1,8 @@ -# Migration Guide: Dexie to wa-sqlite +# Migration Guide: Dexie to absurd-sql ## Overview -This document outlines the migration process from Dexie.js to wa-sqlite for the TimeSafari app's storage implementation. The migration aims to provide a consistent SQLite-based storage solution across all platforms while maintaining data integrity and ensuring a smooth transition for users. +This document outlines the migration process from Dexie.js to absurd-sql for the TimeSafari app's storage implementation. The migration aims to provide a consistent SQLite-based storage solution across all platforms while maintaining data integrity and ensuring a smooth transition for users. ## Migration Goals @@ -43,12 +43,20 @@ This document outlines the migration process from Dexie.js to wa-sqlite for the } ``` -2. **Storage Requirements** +2. **Dependencies** + ```json + { + "@jlongster/sql.js": "^1.8.0", + "absurd-sql": "^1.8.0" + } + ``` + +3. **Storage Requirements** - Sufficient IndexedDB quota - Available disk space for SQLite - Backup storage space -3. **Platform Support** +4. **Platform Support** - Web: Modern browser with IndexedDB support - iOS: iOS 13+ with SQLite support - Android: Android 5+ with SQLite support @@ -60,9 +68,15 @@ This document outlines the migration process from Dexie.js to wa-sqlite for the ```typescript // src/services/storage/migration/MigrationService.ts +import initSqlJs from '@jlongster/sql.js'; +import { SQLiteFS } from 'absurd-sql'; +import IndexedDBBackend from 'absurd-sql/dist/indexeddb-backend'; + export class MigrationService { private static instance: MigrationService; private backup: MigrationBackup | null = null; + private sql: any = null; + private db: any = null; async prepare(): Promise { try { @@ -75,8 +89,8 @@ export class MigrationService { // 3. Verify backup integrity await this.verifyBackup(); - // 4. Initialize wa-sqlite - await this.initializeWaSqlite(); + // 4. Initialize absurd-sql + await this.initializeAbsurdSql(); } catch (error) { throw new StorageError( 'Migration preparation failed', @@ -86,6 +100,42 @@ export class MigrationService { } } + private async initializeAbsurdSql(): Promise { + // Initialize SQL.js + this.sql = await initSqlJs({ + locateFile: (file: string) => { + return new URL(`/node_modules/@jlongster/sql.js/dist/${file}`, import.meta.url).href; + } + }); + + // Setup SQLiteFS with IndexedDB backend + const sqlFS = new SQLiteFS(this.sql.FS, new IndexedDBBackend()); + this.sql.register_for_idb(sqlFS); + + // Create and mount filesystem + this.sql.FS.mkdir('/sql'); + this.sql.FS.mount(sqlFS, {}, '/sql'); + + // Open database + const path = '/sql/db.sqlite'; + if (typeof SharedArrayBuffer === 'undefined') { + let stream = this.sql.FS.open(path, 'a+'); + await stream.node.contents.readIfFallback(); + this.sql.FS.close(stream); + } + + this.db = new this.sql.Database(path, { filename: true }); + if (!this.db) { + throw new StorageError( + 'Database initialization failed', + StorageErrorCodes.INITIALIZATION_FAILED + ); + } + + // Configure database + await this.db.exec(`PRAGMA journal_mode=MEMORY;`); + } + private async checkPrerequisites(): Promise { // Check IndexedDB availability if (!window.indexedDB) { @@ -160,12 +210,11 @@ export class DataMigration { } private async migrateAccounts(accounts: Account[]): Promise { - const db = await this.getWaSqliteConnection(); - // Use transaction for atomicity - await db.transaction(async (tx) => { + await this.db.exec('BEGIN TRANSACTION;'); + try { for (const account of accounts) { - await tx.execute(` + await this.db.run(` INSERT INTO accounts (did, public_key_hex, created_at, updated_at) VALUES (?, ?, ?, ?) `, [ @@ -175,16 +224,18 @@ export class DataMigration { account.updatedAt ]); } - }); + await this.db.exec('COMMIT;'); + } catch (error) { + await this.db.exec('ROLLBACK;'); + throw error; + } } private async verifyMigration(backup: MigrationBackup): Promise { - const db = await this.getWaSqliteConnection(); - // Verify account count - const accountCount = await db.selectValue( - 'SELECT COUNT(*) FROM accounts' - ); + const result = await this.db.exec('SELECT COUNT(*) as count FROM accounts'); + const accountCount = result[0].values[0][0]; + if (accountCount !== backup.accounts.length) { throw new StorageError( 'Account count mismatch', @@ -214,8 +265,8 @@ export class RollbackService { // 3. Verify restoration await this.verifyRestoration(backup); - // 4. Clean up wa-sqlite - await this.cleanupWaSqlite(); + // 4. Clean up absurd-sql + await this.cleanupAbsurdSql(); } catch (error) { throw new StorageError( 'Rollback failed', @@ -371,6 +422,14 @@ button:hover { ```typescript // src/services/storage/migration/__tests__/MigrationService.spec.ts describe('MigrationService', () => { + it('should initialize absurd-sql correctly', async () => { + const service = MigrationService.getInstance(); + await service.initializeAbsurdSql(); + + expect(service.isInitialized()).toBe(true); + expect(service.getDatabase()).toBeDefined(); + }); + it('should create valid backup', async () => { const service = MigrationService.getInstance(); const backup = await service.createBackup(); diff --git a/docs/secure-storage-implementation.md b/doc/secure-storage-implementation.md similarity index 100% rename from docs/secure-storage-implementation.md rename to doc/secure-storage-implementation.md diff --git a/docs/storage-implementation-checklist.md b/doc/storage-implementation-checklist.md similarity index 88% rename from docs/storage-implementation-checklist.md rename to doc/storage-implementation-checklist.md index b608dfcf..cfcda815 100644 --- a/docs/storage-implementation-checklist.md +++ b/doc/storage-implementation-checklist.md @@ -10,9 +10,9 @@ - [ ] Add migration support methods - [ ] Implement platform-specific services - - [ ] `WebSQLiteService` (wa-sqlite) + - [ ] `WebSQLiteService` (absurd-sql) - [ ] Database initialization - - [ ] VFS setup + - [ ] VFS setup with IndexedDB backend - [ ] Connection management - [ ] Query builder - [ ] `NativeSQLiteService` (iOS/Android) @@ -49,17 +49,24 @@ ## Platform-Specific Implementation ### Web Platform -- [ ] Setup wa-sqlite +- [ ] Setup absurd-sql - [ ] Install dependencies ```json { - "@wa-sqlite/sql.js": "^0.8.12", - "@wa-sqlite/sql.js-httpvfs": "^0.8.12" + "@jlongster/sql.js": "^1.8.0", + "absurd-sql": "^1.8.0" } ``` - - [ ] Configure VFS + - [ ] Configure VFS with IndexedDB backend - [ ] Setup worker threads - [ ] Implement connection pooling + - [ ] Configure database pragmas + ```sql + PRAGMA journal_mode=MEMORY; + PRAGMA synchronous=NORMAL; + PRAGMA foreign_keys=ON; + PRAGMA busy_timeout=5000; + ``` - [ ] Update build configuration - [ ] Modify `vite.config.ts` @@ -71,6 +78,7 @@ - [ ] Create fallback service - [ ] Add data synchronization - [ ] Handle quota exceeded + - [ ] Implement atomic operations ### iOS Platform - [ ] Setup SQLCipher @@ -140,6 +148,11 @@ updated_at INTEGER NOT NULL, FOREIGN KEY (did) REFERENCES accounts(did) ); + + -- Indexes for performance + CREATE INDEX idx_accounts_created_at ON accounts(created_at); + CREATE INDEX idx_contacts_did ON contacts(did); + CREATE INDEX idx_settings_updated_at ON settings(updated_at); ``` - [ ] Create indexes @@ -286,12 +299,16 @@ - [ ] Migration time < 5s per 1000 records - [ ] Storage overhead < 10% - [ ] Memory usage < 50MB +- [ ] Atomic operations complete successfully +- [ ] Transaction performance meets requirements ### 2. Reliability - [ ] 99.9% uptime - [ ] Zero data loss - [ ] Automatic recovery - [ ] Backup verification +- [ ] Transaction atomicity +- [ ] Data consistency ### 3. Security - [ ] AES-256 encryption From ee441d1aea6f32d49ce8856bbee2157c08f6b6b1 Mon Sep 17 00:00:00 2001 From: Matt Raymer Date: Sun, 25 May 2025 23:09:53 -0400 Subject: [PATCH 15/92] refactor(db): improve type safety in migration system - Replace any[] with SqlValue[] type for SQL parameters in runMigrations - Update import to use QueryExecResult from interfaces/database - Add proper typing for SQL parameter values (string | number | null | Uint8Array) This change improves type safety and helps catch potential SQL parameter type mismatches at compile time, reducing the risk of runtime errors or data corruption. --- src/db-sql/migration.ts | 7 +- src/db/index.ts | 31 +-- src/db/sqlite/init.ts | 293 -------------------- src/db/sqlite/migration.ts | 374 ------------------------- src/db/sqlite/operations.ts | 449 ------------------------------- src/db/sqlite/types.ts | 349 ------------------------ src/interfaces/database.ts | 8 +- src/libs/util.ts | 2 +- src/services/database.d.ts | 8 +- src/services/database.ts | 20 +- src/services/migrationService.ts | 12 +- src/views/AccountViewView.vue | 5 +- src/views/NewIdentifierView.vue | 2 +- src/views/TestView.vue | 6 +- 14 files changed, 56 insertions(+), 1510 deletions(-) delete mode 100644 src/db/sqlite/init.ts delete mode 100644 src/db/sqlite/migration.ts delete mode 100644 src/db/sqlite/operations.ts delete mode 100644 src/db/sqlite/types.ts diff --git a/src/db-sql/migration.ts b/src/db-sql/migration.ts index d1f10090..e9a0474e 100644 --- a/src/db-sql/migration.ts +++ b/src/db-sql/migration.ts @@ -1,5 +1,5 @@ import migrationService from "../services/migrationService"; -import type { QueryExecResult } from "../services/migrationService"; +import type { QueryExecResult, SqlValue } from "../interfaces/database"; // Each migration can include multiple SQL statements (with semicolons) const MIGRATIONS = [ @@ -96,7 +96,10 @@ export async function registerMigrations(): Promise { } export async function runMigrations( - sqlExec: (sql: string, params?: any[]) => Promise>, + sqlExec: ( + sql: string, + params?: SqlValue[], + ) => Promise>, ): Promise { await registerMigrations(); await migrationService.runMigrations(sqlExec); diff --git a/src/db/index.ts b/src/db/index.ts index d25d0ed9..9a73e860 100644 --- a/src/db/index.ts +++ b/src/db/index.ts @@ -90,21 +90,18 @@ db.on("populate", async () => { try { await db.settings.add(DEFAULT_SETTINGS); } catch (error) { - console.error( - "Error populating the database with default settings:", - error, - ); + logger.error("Error populating the database with default settings:", error); } }); // Helper function to safely open the database with retries async function safeOpenDatabase(retries = 1, delay = 500): Promise { - // console.log("Starting safeOpenDatabase with retries:", retries); + // logger.log("Starting safeOpenDatabase with retries:", retries); for (let i = 0; i < retries; i++) { try { - // console.log(`Attempt ${i + 1}: Checking if database is open...`); + // logger.log(`Attempt ${i + 1}: Checking if database is open...`); if (!db.isOpen()) { - // console.log(`Attempt ${i + 1}: Database is closed, attempting to open...`); + // logger.log(`Attempt ${i + 1}: Database is closed, attempting to open...`); // Create a promise that rejects after 5 seconds const timeoutPromise = new Promise((_, reject) => { @@ -113,19 +110,19 @@ async function safeOpenDatabase(retries = 1, delay = 500): Promise { // Race between the open operation and the timeout const openPromise = db.open(); - // console.log(`Attempt ${i + 1}: Waiting for db.open() promise...`); + // logger.log(`Attempt ${i + 1}: Waiting for db.open() promise...`); await Promise.race([openPromise, timeoutPromise]); // If we get here, the open succeeded - // console.log(`Attempt ${i + 1}: Database opened successfully`); + // logger.log(`Attempt ${i + 1}: Database opened successfully`); return; } - // console.log(`Attempt ${i + 1}: Database was already open`); + // logger.log(`Attempt ${i + 1}: Database was already open`); return; } catch (error) { - console.error(`Attempt ${i + 1}: Database open failed:`, error); + logger.error(`Attempt ${i + 1}: Database open failed:`, error); if (i < retries - 1) { - console.log(`Attempt ${i + 1}: Waiting ${delay}ms before retry...`); + logger.log(`Attempt ${i + 1}: Waiting ${delay}ms before retry...`); await new Promise((resolve) => setTimeout(resolve, delay)); } else { throw error; @@ -142,12 +139,12 @@ export async function updateDefaultSettings( delete settingsChanges.id; try { try { - // console.log("Database state before open:", db.isOpen() ? "open" : "closed"); - // console.log("Database name:", db.name); - // console.log("Database version:", db.verno); + // logger.log("Database state before open:", db.isOpen() ? "open" : "closed"); + // logger.log("Database name:", db.name); + // logger.log("Database version:", db.verno); await safeOpenDatabase(); } catch (openError: unknown) { - console.error("Failed to open database:", openError, String(openError)); + logger.error("Failed to open database:", openError, String(openError)); throw new Error( `The database connection failed. We recommend you try again or restart the app.`, ); @@ -158,7 +155,7 @@ export async function updateDefaultSettings( ); return result; } catch (error) { - console.error("Error updating default settings:", error); + logger.error("Error updating default settings:", error); if (error instanceof Error) { throw error; // Re-throw if it's already an Error with a message } else { diff --git a/src/db/sqlite/init.ts b/src/db/sqlite/init.ts deleted file mode 100644 index 856971d9..00000000 --- a/src/db/sqlite/init.ts +++ /dev/null @@ -1,293 +0,0 @@ -/** - * SQLite Database Initialization - * - * This module handles database initialization, including: - * - Database connection management - * - Schema creation and migration - * - Connection pooling and lifecycle - * - Error handling and recovery - */ - -import { Database, SQLite3 } from '@wa-sqlite/sql.js'; -import { DATABASE_SCHEMA, SQLiteTable } from './types'; -import { logger } from '../../utils/logger'; - -// ============================================================================ -// Database Connection Management -// ============================================================================ - -export interface DatabaseConnection { - db: Database; - sqlite3: SQLite3; - isOpen: boolean; - lastUsed: number; -} - -let connection: DatabaseConnection | null = null; -const CONNECTION_TIMEOUT = 5 * 60 * 1000; // 5 minutes - -/** - * Initialize the SQLite database connection - */ -export async function initDatabase(): Promise { - if (connection?.isOpen) { - connection.lastUsed = Date.now(); - return connection; - } - - try { - const sqlite3 = await import('@wa-sqlite/sql.js'); - const db = await sqlite3.open(':memory:'); // TODO: Configure storage location - - // Enable foreign keys - await db.exec('PRAGMA foreign_keys = ON;'); - - // Configure for better performance - await db.exec(` - PRAGMA journal_mode = WAL; - PRAGMA synchronous = NORMAL; - PRAGMA cache_size = -2000; -- Use 2MB of cache - `); - - connection = { - db, - sqlite3, - isOpen: true, - lastUsed: Date.now() - }; - - // Start connection cleanup interval - startConnectionCleanup(); - - return connection; - } catch (error) { - logger.error('[SQLite] Database initialization failed:', error); - throw new Error('Failed to initialize database'); - } -} - -/** - * Close the database connection - */ -export async function closeDatabase(): Promise { - if (!connection?.isOpen) return; - - try { - await connection.db.close(); - connection.isOpen = false; - connection = null; - } catch (error) { - logger.error('[SQLite] Database close failed:', error); - throw new Error('Failed to close database'); - } -} - -/** - * Cleanup inactive connections - */ -function startConnectionCleanup(): void { - setInterval(() => { - if (connection && Date.now() - connection.lastUsed > CONNECTION_TIMEOUT) { - closeDatabase().catch(error => { - logger.error('[SQLite] Connection cleanup failed:', error); - }); - } - }, 60000); // Check every minute -} - -// ============================================================================ -// Schema Management -// ============================================================================ - -/** - * Create the database schema - */ -export async function createSchema(): Promise { - const { db } = await initDatabase(); - - try { - await db.transaction(async () => { - for (const table of DATABASE_SCHEMA) { - await createTable(db, table); - } - }); - } catch (error) { - logger.error('[SQLite] Schema creation failed:', error); - throw new Error('Failed to create database schema'); - } -} - -/** - * Create a single table - */ -async function createTable(db: Database, table: SQLiteTable): Promise { - const columnDefs = table.columns.map(col => { - const constraints = [ - col.primaryKey ? 'PRIMARY KEY' : '', - col.unique ? 'UNIQUE' : '', - !col.nullable ? 'NOT NULL' : '', - col.references ? `REFERENCES ${col.references.table}(${col.references.column})` : '', - col.default !== undefined ? `DEFAULT ${formatDefaultValue(col.default)}` : '' - ].filter(Boolean).join(' '); - - return `${col.name} ${col.type} ${constraints}`.trim(); - }); - - const createTableSQL = ` - CREATE TABLE IF NOT EXISTS ${table.name} ( - ${columnDefs.join(',\n ')} - ); - `; - - await db.exec(createTableSQL); - - // Create indexes - if (table.indexes) { - for (const index of table.indexes) { - const createIndexSQL = ` - CREATE INDEX IF NOT EXISTS ${index.name} - ON ${table.name} (${index.columns.join(', ')}) - ${index.unique ? 'UNIQUE' : ''}; - `; - await db.exec(createIndexSQL); - } - } -} - -/** - * Format default value for SQL - */ -function formatDefaultValue(value: unknown): string { - if (value === null) return 'NULL'; - if (typeof value === 'string') return `'${value.replace(/'/g, "''")}'`; - if (typeof value === 'number') return value.toString(); - if (typeof value === 'boolean') return value ? '1' : '0'; - throw new Error(`Unsupported default value type: ${typeof value}`); -} - -// ============================================================================ -// Database Health Checks -// ============================================================================ - -/** - * Check database health - */ -export async function checkDatabaseHealth(): Promise<{ - isHealthy: boolean; - tables: string[]; - error?: string; -}> { - try { - const { db } = await initDatabase(); - - // Check if we can query the database - const tables = await db.selectAll<{ name: string }>(` - SELECT name FROM sqlite_master - WHERE type='table' AND name NOT LIKE 'sqlite_%' - `); - - return { - isHealthy: true, - tables: tables.map(t => t.name) - }; - } catch (error) { - logger.error('[SQLite] Health check failed:', error); - return { - isHealthy: false, - tables: [], - error: error instanceof Error ? error.message : 'Unknown error' - }; - } -} - -/** - * Verify database integrity - */ -export async function verifyDatabaseIntegrity(): Promise<{ - isIntegrityOk: boolean; - errors: string[]; -}> { - const { db } = await initDatabase(); - const errors: string[] = []; - - try { - // Run integrity check - const result = await db.selectAll<{ integrity_check: string }>('PRAGMA integrity_check;'); - - if (result[0]?.integrity_check !== 'ok') { - errors.push('Database integrity check failed'); - } - - // Check foreign key constraints - const fkResult = await db.selectAll<{ table: string; rowid: number; parent: string; fkid: number }>(` - PRAGMA foreign_key_check; - `); - - if (fkResult.length > 0) { - errors.push('Foreign key constraint violations found'); - } - - return { - isIntegrityOk: errors.length === 0, - errors - }; - } catch (error) { - logger.error('[SQLite] Integrity check failed:', error); - return { - isIntegrityOk: false, - errors: [error instanceof Error ? error.message : 'Unknown error'] - }; - } -} - -// ============================================================================ -// Database Backup and Recovery -// ============================================================================ - -/** - * Create a database backup - */ -export async function createBackup(): Promise { - const { db } = await initDatabase(); - - try { - // Export the database to a binary array - return await db.export(); - } catch (error) { - logger.error('[SQLite] Backup creation failed:', error); - throw new Error('Failed to create database backup'); - } -} - -/** - * Restore database from backup - */ -export async function restoreFromBackup(backup: Uint8Array): Promise { - const { db } = await initDatabase(); - - try { - // Close current connection - await closeDatabase(); - - // Create new connection and import backup - const sqlite3 = await import('@wa-sqlite/sql.js'); - const newDb = await sqlite3.open(backup); - - // Verify integrity - const { isIntegrityOk, errors } = await verifyDatabaseIntegrity(); - if (!isIntegrityOk) { - throw new Error(`Backup integrity check failed: ${errors.join(', ')}`); - } - - // Replace current connection - connection = { - db: newDb, - sqlite3, - isOpen: true, - lastUsed: Date.now() - }; - } catch (error) { - logger.error('[SQLite] Backup restoration failed:', error); - throw new Error('Failed to restore database from backup'); - } -} \ No newline at end of file diff --git a/src/db/sqlite/migration.ts b/src/db/sqlite/migration.ts deleted file mode 100644 index 7a38dba6..00000000 --- a/src/db/sqlite/migration.ts +++ /dev/null @@ -1,374 +0,0 @@ -/** - * SQLite Migration Utilities - * - * This module handles the migration of data from Dexie to SQLite, - * including data transformation, validation, and rollback capabilities. - */ - -import { Database } from '@wa-sqlite/sql.js'; -import { initDatabase, createSchema, createBackup } from './init'; -import { - MigrationData, - MigrationResult, - SQLiteAccount, - SQLiteContact, - SQLiteContactMethod, - SQLiteSettings, - SQLiteLog, - SQLiteSecret, - isSQLiteAccount, - isSQLiteContact, - isSQLiteSettings -} from './types'; -import { logger } from '../../utils/logger'; - -// ============================================================================ -// Migration Types -// ============================================================================ - -interface MigrationContext { - db: Database; - startTime: number; - stats: MigrationResult['stats']; - errors: Error[]; -} - -// ============================================================================ -// Migration Functions -// ============================================================================ - -/** - * Migrate data from Dexie to SQLite - */ -export async function migrateFromDexie(data: MigrationData): Promise { - const startTime = Date.now(); - const context: MigrationContext = { - db: (await initDatabase()).db, - startTime, - stats: { - accounts: 0, - contacts: 0, - contactMethods: 0, - settings: 0, - logs: 0, - secrets: 0 - }, - errors: [] - }; - - try { - // Create backup before migration - const backup = await createBackup(); - - // Create schema if needed - await createSchema(); - - // Perform migration in a transaction - await context.db.transaction(async () => { - // Migrate in order of dependencies - await migrateAccounts(context, data.accounts); - await migrateContacts(context, data.contacts); - await migrateContactMethods(context, data.contactMethods); - await migrateSettings(context, data.settings); - await migrateLogs(context, data.logs); - await migrateSecrets(context, data.secrets); - }); - - // Verify migration - const verificationResult = await verifyMigration(context, data); - if (!verificationResult.success) { - throw new Error(`Migration verification failed: ${verificationResult.error}`); - } - - return { - success: true, - stats: context.stats, - duration: Date.now() - startTime - }; - - } catch (error) { - logger.error('[SQLite] Migration failed:', error); - - // Attempt rollback - try { - await rollbackMigration(backup); - } catch (rollbackError) { - logger.error('[SQLite] Rollback failed:', rollbackError); - context.errors.push(new Error('Migration and rollback failed')); - } - - return { - success: false, - error: error instanceof Error ? error : new Error('Unknown migration error'), - stats: context.stats, - duration: Date.now() - startTime - }; - } -} - -// ============================================================================ -// Migration Helpers -// ============================================================================ - -/** - * Migrate accounts - */ -async function migrateAccounts(context: MigrationContext, accounts: SQLiteAccount[]): Promise { - for (const account of accounts) { - try { - if (!isSQLiteAccount(account)) { - throw new Error(`Invalid account data: ${JSON.stringify(account)}`); - } - - await context.db.exec(` - INSERT INTO accounts ( - did, public_key_hex, created_at, updated_at, - identity_json, mnemonic_encrypted, passkey_cred_id_hex, derivation_path - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?) - `, [ - account.did, - account.public_key_hex, - account.created_at, - account.updated_at, - account.identity_json || null, - account.mnemonic_encrypted || null, - account.passkey_cred_id_hex || null, - account.derivation_path || null - ]); - - context.stats.accounts++; - } catch (error) { - context.errors.push(new Error(`Failed to migrate account ${account.did}: ${error}`)); - throw error; // Re-throw to trigger transaction rollback - } - } -} - -/** - * Migrate contacts - */ -async function migrateContacts(context: MigrationContext, contacts: SQLiteContact[]): Promise { - for (const contact of contacts) { - try { - if (!isSQLiteContact(contact)) { - throw new Error(`Invalid contact data: ${JSON.stringify(contact)}`); - } - - await context.db.exec(` - INSERT INTO contacts ( - id, did, name, notes, profile_image_url, - public_key_base64, next_pub_key_hash_b64, - sees_me, registered, created_at, updated_at - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - `, [ - contact.id, - contact.did, - contact.name || null, - contact.notes || null, - contact.profile_image_url || null, - contact.public_key_base64 || null, - contact.next_pub_key_hash_b64 || null, - contact.sees_me ? 1 : 0, - contact.registered ? 1 : 0, - contact.created_at, - contact.updated_at - ]); - - context.stats.contacts++; - } catch (error) { - context.errors.push(new Error(`Failed to migrate contact ${contact.id}: ${error}`)); - throw error; - } - } -} - -/** - * Migrate contact methods - */ -async function migrateContactMethods( - context: MigrationContext, - methods: SQLiteContactMethod[] -): Promise { - for (const method of methods) { - try { - await context.db.exec(` - INSERT INTO contact_methods ( - id, contact_id, label, type, value, - created_at, updated_at - ) VALUES (?, ?, ?, ?, ?, ?, ?) - `, [ - method.id, - method.contact_id, - method.label, - method.type, - method.value, - method.created_at, - method.updated_at - ]); - - context.stats.contactMethods++; - } catch (error) { - context.errors.push(new Error(`Failed to migrate contact method ${method.id}: ${error}`)); - throw error; - } - } -} - -/** - * Migrate settings - */ -async function migrateSettings(context: MigrationContext, settings: SQLiteSettings[]): Promise { - for (const setting of settings) { - try { - if (!isSQLiteSettings(setting)) { - throw new Error(`Invalid settings data: ${JSON.stringify(setting)}`); - } - - await context.db.exec(` - INSERT INTO settings ( - key, account_did, value_json, created_at, updated_at - ) VALUES (?, ?, ?, ?, ?) - `, [ - setting.key, - setting.account_did || null, - setting.value_json, - setting.created_at, - setting.updated_at - ]); - - context.stats.settings++; - } catch (error) { - context.errors.push(new Error(`Failed to migrate setting ${setting.key}: ${error}`)); - throw error; - } - } -} - -/** - * Migrate logs - */ -async function migrateLogs(context: MigrationContext, logs: SQLiteLog[]): Promise { - for (const log of logs) { - try { - await context.db.exec(` - INSERT INTO logs ( - id, level, message, metadata_json, created_at - ) VALUES (?, ?, ?, ?, ?) - `, [ - log.id, - log.level, - log.message, - log.metadata_json || null, - log.created_at - ]); - - context.stats.logs++; - } catch (error) { - context.errors.push(new Error(`Failed to migrate log ${log.id}: ${error}`)); - throw error; - } - } -} - -/** - * Migrate secrets - */ -async function migrateSecrets(context: MigrationContext, secrets: SQLiteSecret[]): Promise { - for (const secret of secrets) { - try { - await context.db.exec(` - INSERT INTO secrets ( - key, value_encrypted, created_at, updated_at - ) VALUES (?, ?, ?, ?) - `, [ - secret.key, - secret.value_encrypted, - secret.created_at, - secret.updated_at - ]); - - context.stats.secrets++; - } catch (error) { - context.errors.push(new Error(`Failed to migrate secret ${secret.key}: ${error}`)); - throw error; - } - } -} - -// ============================================================================ -// Verification and Rollback -// ============================================================================ - -/** - * Verify migration success - */ -async function verifyMigration( - context: MigrationContext, - data: MigrationData -): Promise<{ success: boolean; error?: string }> { - try { - // Verify counts - const counts = await context.db.selectAll<{ table: string; count: number }>(` - SELECT 'accounts' as table, COUNT(*) as count FROM accounts - UNION ALL - SELECT 'contacts', COUNT(*) FROM contacts - UNION ALL - SELECT 'contact_methods', COUNT(*) FROM contact_methods - UNION ALL - SELECT 'settings', COUNT(*) FROM settings - UNION ALL - SELECT 'logs', COUNT(*) FROM logs - UNION ALL - SELECT 'secrets', COUNT(*) FROM secrets - `); - - const countMap = new Map(counts.map(c => [c.table, c.count])); - - if (countMap.get('accounts') !== data.accounts.length) { - return { success: false, error: 'Account count mismatch' }; - } - if (countMap.get('contacts') !== data.contacts.length) { - return { success: false, error: 'Contact count mismatch' }; - } - if (countMap.get('contact_methods') !== data.contactMethods.length) { - return { success: false, error: 'Contact method count mismatch' }; - } - if (countMap.get('settings') !== data.settings.length) { - return { success: false, error: 'Settings count mismatch' }; - } - if (countMap.get('logs') !== data.logs.length) { - return { success: false, error: 'Log count mismatch' }; - } - if (countMap.get('secrets') !== data.secrets.length) { - return { success: false, error: 'Secret count mismatch' }; - } - - return { success: true }; - } catch (error) { - return { - success: false, - error: error instanceof Error ? error.message : 'Unknown verification error' - }; - } -} - -/** - * Rollback migration - */ -async function rollbackMigration(backup: Uint8Array): Promise { - const { db } = await initDatabase(); - - try { - // Close current connection - await db.close(); - - // Restore from backup - const sqlite3 = await import('@wa-sqlite/sql.js'); - await sqlite3.open(backup); - - logger.info('[SQLite] Migration rollback successful'); - } catch (error) { - logger.error('[SQLite] Migration rollback failed:', error); - throw new Error('Failed to rollback migration'); - } -} \ No newline at end of file diff --git a/src/db/sqlite/operations.ts b/src/db/sqlite/operations.ts deleted file mode 100644 index ebb6511a..00000000 --- a/src/db/sqlite/operations.ts +++ /dev/null @@ -1,449 +0,0 @@ -/** - * SQLite Database Operations - * - * This module provides utility functions for common database operations, - * including CRUD operations, queries, and transactions. - */ - -import { Database } from '@wa-sqlite/sql.js'; -import { initDatabase } from './init'; -import { - SQLiteAccount, - SQLiteContact, - SQLiteContactMethod, - SQLiteSettings, - SQLiteLog, - SQLiteSecret, - isSQLiteAccount, - isSQLiteContact, - isSQLiteSettings -} from './types'; -import { logger } from '../../utils/logger'; - -// ============================================================================ -// Transaction Helpers -// ============================================================================ - -/** - * Execute a function within a transaction - */ -export async function withTransaction( - operation: (db: Database) => Promise -): Promise { - const { db } = await initDatabase(); - - try { - return await db.transaction(operation); - } catch (error) { - logger.error('[SQLite] Transaction failed:', error); - throw error; - } -} - -/** - * Execute a function with retries - */ -export async function withRetry( - operation: () => Promise, - maxRetries = 3, - delay = 1000 -): Promise { - let lastError: Error | undefined; - - for (let i = 0; i < maxRetries; i++) { - try { - return await operation(); - } catch (error) { - lastError = error instanceof Error ? error : new Error(String(error)); - - if (i < maxRetries - 1) { - await new Promise(resolve => setTimeout(resolve, delay * (i + 1))); - } - } - } - - throw lastError; -} - -// ============================================================================ -// Account Operations -// ============================================================================ - -/** - * Get account by DID - */ -export async function getAccountByDid(did: string): Promise { - const { db } = await initDatabase(); - - const accounts = await db.selectAll( - 'SELECT * FROM accounts WHERE did = ?', - [did] - ); - - return accounts[0] || null; -} - -/** - * Get all accounts - */ -export async function getAllAccounts(): Promise { - const { db } = await initDatabase(); - - return db.selectAll( - 'SELECT * FROM accounts ORDER BY created_at DESC' - ); -} - -/** - * Create or update account - */ -export async function upsertAccount(account: SQLiteAccount): Promise { - if (!isSQLiteAccount(account)) { - throw new Error('Invalid account data'); - } - - await withTransaction(async (db) => { - const existing = await db.selectOne<{ did: string }>( - 'SELECT did FROM accounts WHERE did = ?', - [account.did] - ); - - if (existing) { - await db.exec(` - UPDATE accounts SET - public_key_hex = ?, - updated_at = ?, - identity_json = ?, - mnemonic_encrypted = ?, - passkey_cred_id_hex = ?, - derivation_path = ? - WHERE did = ? - `, [ - account.public_key_hex, - Date.now(), - account.identity_json || null, - account.mnemonic_encrypted || null, - account.passkey_cred_id_hex || null, - account.derivation_path || null, - account.did - ]); - } else { - await db.exec(` - INSERT INTO accounts ( - did, public_key_hex, created_at, updated_at, - identity_json, mnemonic_encrypted, passkey_cred_id_hex, derivation_path - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?) - `, [ - account.did, - account.public_key_hex, - account.created_at, - account.updated_at, - account.identity_json || null, - account.mnemonic_encrypted || null, - account.passkey_cred_id_hex || null, - account.derivation_path || null - ]); - } - }); -} - -// ============================================================================ -// Contact Operations -// ============================================================================ - -/** - * Get contact by ID - */ -export async function getContactById(id: string): Promise { - const { db } = await initDatabase(); - - const contacts = await db.selectAll( - 'SELECT * FROM contacts WHERE id = ?', - [id] - ); - - return contacts[0] || null; -} - -/** - * Get contacts by account DID - */ -export async function getContactsByAccountDid(did: string): Promise { - const { db } = await initDatabase(); - - return db.selectAll( - 'SELECT * FROM contacts WHERE did = ? ORDER BY created_at DESC', - [did] - ); -} - -/** - * Get contact methods for a contact - */ -export async function getContactMethods(contactId: string): Promise { - const { db } = await initDatabase(); - - return db.selectAll( - 'SELECT * FROM contact_methods WHERE contact_id = ? ORDER BY created_at DESC', - [contactId] - ); -} - -/** - * Create or update contact with methods - */ -export async function upsertContact( - contact: SQLiteContact, - methods: SQLiteContactMethod[] = [] -): Promise { - if (!isSQLiteContact(contact)) { - throw new Error('Invalid contact data'); - } - - await withTransaction(async (db) => { - const existing = await db.selectOne<{ id: string }>( - 'SELECT id FROM contacts WHERE id = ?', - [contact.id] - ); - - if (existing) { - await db.exec(` - UPDATE contacts SET - did = ?, - name = ?, - notes = ?, - profile_image_url = ?, - public_key_base64 = ?, - next_pub_key_hash_b64 = ?, - sees_me = ?, - registered = ?, - updated_at = ? - WHERE id = ? - `, [ - contact.did, - contact.name || null, - contact.notes || null, - contact.profile_image_url || null, - contact.public_key_base64 || null, - contact.next_pub_key_hash_b64 || null, - contact.sees_me ? 1 : 0, - contact.registered ? 1 : 0, - Date.now(), - contact.id - ]); - } else { - await db.exec(` - INSERT INTO contacts ( - id, did, name, notes, profile_image_url, - public_key_base64, next_pub_key_hash_b64, - sees_me, registered, created_at, updated_at - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - `, [ - contact.id, - contact.did, - contact.name || null, - contact.notes || null, - contact.profile_image_url || null, - contact.public_key_base64 || null, - contact.next_pub_key_hash_b64 || null, - contact.sees_me ? 1 : 0, - contact.registered ? 1 : 0, - contact.created_at, - contact.updated_at - ]); - } - - // Update contact methods - if (methods.length > 0) { - // Delete existing methods - await db.exec( - 'DELETE FROM contact_methods WHERE contact_id = ?', - [contact.id] - ); - - // Insert new methods - for (const method of methods) { - await db.exec(` - INSERT INTO contact_methods ( - id, contact_id, label, type, value, - created_at, updated_at - ) VALUES (?, ?, ?, ?, ?, ?, ?) - `, [ - method.id, - contact.id, - method.label, - method.type, - method.value, - method.created_at, - method.updated_at - ]); - } - } - }); -} - -// ============================================================================ -// Settings Operations -// ============================================================================ - -/** - * Get setting by key - */ -export async function getSetting(key: string): Promise { - const { db } = await initDatabase(); - - const settings = await db.selectAll( - 'SELECT * FROM settings WHERE key = ?', - [key] - ); - - return settings[0] || null; -} - -/** - * Get settings by account DID - */ -export async function getSettingsByAccountDid(did: string): Promise { - const { db } = await initDatabase(); - - return db.selectAll( - 'SELECT * FROM settings WHERE account_did = ? ORDER BY updated_at DESC', - [did] - ); -} - -/** - * Set setting value - */ -export async function setSetting(setting: SQLiteSettings): Promise { - if (!isSQLiteSettings(setting)) { - throw new Error('Invalid settings data'); - } - - await withTransaction(async (db) => { - const existing = await db.selectOne<{ key: string }>( - 'SELECT key FROM settings WHERE key = ?', - [setting.key] - ); - - if (existing) { - await db.exec(` - UPDATE settings SET - account_did = ?, - value_json = ?, - updated_at = ? - WHERE key = ? - `, [ - setting.account_did || null, - setting.value_json, - Date.now(), - setting.key - ]); - } else { - await db.exec(` - INSERT INTO settings ( - key, account_did, value_json, created_at, updated_at - ) VALUES (?, ?, ?, ?, ?) - `, [ - setting.key, - setting.account_did || null, - setting.value_json, - setting.created_at, - setting.updated_at - ]); - } - }); -} - -// ============================================================================ -// Log Operations -// ============================================================================ - -/** - * Add log entry - */ -export async function addLog(log: SQLiteLog): Promise { - await withTransaction(async (db) => { - await db.exec(` - INSERT INTO logs ( - id, level, message, metadata_json, created_at - ) VALUES (?, ?, ?, ?, ?) - `, [ - log.id, - log.level, - log.message, - log.metadata_json || null, - log.created_at - ]); - }); -} - -/** - * Get logs by level - */ -export async function getLogsByLevel( - level: string, - limit = 100, - offset = 0 -): Promise { - const { db } = await initDatabase(); - - return db.selectAll( - 'SELECT * FROM logs WHERE level = ? ORDER BY created_at DESC LIMIT ? OFFSET ?', - [level, limit, offset] - ); -} - -// ============================================================================ -// Secret Operations -// ============================================================================ - -/** - * Get secret by key - */ -export async function getSecret(key: string): Promise { - const { db } = await initDatabase(); - - const secrets = await db.selectAll( - 'SELECT * FROM secrets WHERE key = ?', - [key] - ); - - return secrets[0] || null; -} - -/** - * Set secret value - */ -export async function setSecret(secret: SQLiteSecret): Promise { - await withTransaction(async (db) => { - const existing = await db.selectOne<{ key: string }>( - 'SELECT key FROM secrets WHERE key = ?', - [secret.key] - ); - - if (existing) { - await db.exec(` - UPDATE secrets SET - value_encrypted = ?, - updated_at = ? - WHERE key = ? - `, [ - secret.value_encrypted, - Date.now(), - secret.key - ]); - } else { - await db.exec(` - INSERT INTO secrets ( - key, value_encrypted, created_at, updated_at - ) VALUES (?, ?, ?, ?) - `, [ - secret.key, - secret.value_encrypted, - secret.created_at, - secret.updated_at - ]); - } - }); -} \ No newline at end of file diff --git a/src/db/sqlite/types.ts b/src/db/sqlite/types.ts deleted file mode 100644 index 4cfcab74..00000000 --- a/src/db/sqlite/types.ts +++ /dev/null @@ -1,349 +0,0 @@ -/** - * SQLite Type Definitions - * - * This file defines the type system for the SQLite implementation, - * mapping from the existing Dexie types to SQLite-compatible types. - * It includes both the database schema types and the runtime types. - */ - -import { SQLiteCompatibleType } from '@jlongster/sql.js'; - -// ============================================================================ -// Base Types and Utilities -// ============================================================================ - -/** - * SQLite column type mapping - */ -export type SQLiteColumnType = - | 'INTEGER' // For numbers, booleans, dates - | 'TEXT' // For strings, JSON - | 'BLOB' // For binary data - | 'REAL' // For floating point numbers - | 'NULL'; // For null values - -/** - * SQLite column definition - */ -export interface SQLiteColumn { - name: string; - type: SQLiteColumnType; - nullable?: boolean; - primaryKey?: boolean; - unique?: boolean; - references?: { - table: string; - column: string; - }; - default?: SQLiteCompatibleType; -} - -/** - * SQLite table definition - */ -export interface SQLiteTable { - name: string; - columns: SQLiteColumn[]; - indexes?: Array<{ - name: string; - columns: string[]; - unique?: boolean; - }>; -} - -// ============================================================================ -// Account Types -// ============================================================================ - -/** - * SQLite-compatible Account type - * Maps from the Dexie Account type - */ -export interface SQLiteAccount { - did: string; // TEXT PRIMARY KEY - public_key_hex: string; // TEXT NOT NULL - created_at: number; // INTEGER NOT NULL - updated_at: number; // INTEGER NOT NULL - identity_json?: string; // TEXT (encrypted JSON) - mnemonic_encrypted?: string; // TEXT (encrypted) - passkey_cred_id_hex?: string; // TEXT - derivation_path?: string; // TEXT -} - -export const ACCOUNTS_TABLE: SQLiteTable = { - name: 'accounts', - columns: [ - { name: 'did', type: 'TEXT', primaryKey: true }, - { name: 'public_key_hex', type: 'TEXT', nullable: false }, - { name: 'created_at', type: 'INTEGER', nullable: false }, - { name: 'updated_at', type: 'INTEGER', nullable: false }, - { name: 'identity_json', type: 'TEXT' }, - { name: 'mnemonic_encrypted', type: 'TEXT' }, - { name: 'passkey_cred_id_hex', type: 'TEXT' }, - { name: 'derivation_path', type: 'TEXT' } - ], - indexes: [ - { name: 'idx_accounts_created_at', columns: ['created_at'] }, - { name: 'idx_accounts_updated_at', columns: ['updated_at'] } - ] -}; - -// ============================================================================ -// Contact Types -// ============================================================================ - -/** - * SQLite-compatible ContactMethod type - */ -export interface SQLiteContactMethod { - id: string; // TEXT PRIMARY KEY - contact_id: string; // TEXT NOT NULL - label: string; // TEXT NOT NULL - type: string; // TEXT NOT NULL - value: string; // TEXT NOT NULL - created_at: number; // INTEGER NOT NULL - updated_at: number; // INTEGER NOT NULL -} - -/** - * SQLite-compatible Contact type - */ -export interface SQLiteContact { - id: string; // TEXT PRIMARY KEY - did: string; // TEXT NOT NULL - name?: string; // TEXT - notes?: string; // TEXT - profile_image_url?: string; // TEXT - public_key_base64?: string; // TEXT - next_pub_key_hash_b64?: string; // TEXT - sees_me?: boolean; // INTEGER (0 or 1) - registered?: boolean; // INTEGER (0 or 1) - created_at: number; // INTEGER NOT NULL - updated_at: number; // INTEGER NOT NULL -} - -export const CONTACTS_TABLE: SQLiteTable = { - name: 'contacts', - columns: [ - { name: 'id', type: 'TEXT', primaryKey: true }, - { name: 'did', type: 'TEXT', nullable: false }, - { name: 'name', type: 'TEXT' }, - { name: 'notes', type: 'TEXT' }, - { name: 'profile_image_url', type: 'TEXT' }, - { name: 'public_key_base64', type: 'TEXT' }, - { name: 'next_pub_key_hash_b64', type: 'TEXT' }, - { name: 'sees_me', type: 'INTEGER' }, - { name: 'registered', type: 'INTEGER' }, - { name: 'created_at', type: 'INTEGER', nullable: false }, - { name: 'updated_at', type: 'INTEGER', nullable: false } - ], - indexes: [ - { name: 'idx_contacts_did', columns: ['did'] }, - { name: 'idx_contacts_created_at', columns: ['created_at'] } - ] -}; - -export const CONTACT_METHODS_TABLE: SQLiteTable = { - name: 'contact_methods', - columns: [ - { name: 'id', type: 'TEXT', primaryKey: true }, - { name: 'contact_id', type: 'TEXT', nullable: false, - references: { table: 'contacts', column: 'id' } }, - { name: 'label', type: 'TEXT', nullable: false }, - { name: 'type', type: 'TEXT', nullable: false }, - { name: 'value', type: 'TEXT', nullable: false }, - { name: 'created_at', type: 'INTEGER', nullable: false }, - { name: 'updated_at', type: 'INTEGER', nullable: false } - ], - indexes: [ - { name: 'idx_contact_methods_contact_id', columns: ['contact_id'] } - ] -}; - -// ============================================================================ -// Settings Types -// ============================================================================ - -/** - * SQLite-compatible Settings type - */ -export interface SQLiteSettings { - key: string; // TEXT PRIMARY KEY - account_did?: string; // TEXT - value_json: string; // TEXT NOT NULL (JSON stringified) - created_at: number; // INTEGER NOT NULL - updated_at: number; // INTEGER NOT NULL -} - -export const SETTINGS_TABLE: SQLiteTable = { - name: 'settings', - columns: [ - { name: 'key', type: 'TEXT', primaryKey: true }, - { name: 'account_did', type: 'TEXT' }, - { name: 'value_json', type: 'TEXT', nullable: false }, - { name: 'created_at', type: 'INTEGER', nullable: false }, - { name: 'updated_at', type: 'INTEGER', nullable: false } - ], - indexes: [ - { name: 'idx_settings_account_did', columns: ['account_did'] }, - { name: 'idx_settings_updated_at', columns: ['updated_at'] } - ] -}; - -// ============================================================================ -// Log Types -// ============================================================================ - -/** - * SQLite-compatible Log type - */ -export interface SQLiteLog { - id: string; // TEXT PRIMARY KEY - level: string; // TEXT NOT NULL - message: string; // TEXT NOT NULL - metadata_json?: string; // TEXT (JSON stringified) - created_at: number; // INTEGER NOT NULL -} - -export const LOGS_TABLE: SQLiteTable = { - name: 'logs', - columns: [ - { name: 'id', type: 'TEXT', primaryKey: true }, - { name: 'level', type: 'TEXT', nullable: false }, - { name: 'message', type: 'TEXT', nullable: false }, - { name: 'metadata_json', type: 'TEXT' }, - { name: 'created_at', type: 'INTEGER', nullable: false } - ], - indexes: [ - { name: 'idx_logs_level', columns: ['level'] }, - { name: 'idx_logs_created_at', columns: ['created_at'] } - ] -}; - -// ============================================================================ -// Secret Types -// ============================================================================ - -/** - * SQLite-compatible Secret type - * Note: This table should be encrypted at the database level - */ -export interface SQLiteSecret { - key: string; // TEXT PRIMARY KEY - value_encrypted: string; // TEXT NOT NULL (encrypted) - created_at: number; // INTEGER NOT NULL - updated_at: number; // INTEGER NOT NULL -} - -export const SECRETS_TABLE: SQLiteTable = { - name: 'secrets', - columns: [ - { name: 'key', type: 'TEXT', primaryKey: true }, - { name: 'value_encrypted', type: 'TEXT', nullable: false }, - { name: 'created_at', type: 'INTEGER', nullable: false }, - { name: 'updated_at', type: 'INTEGER', nullable: false } - ], - indexes: [ - { name: 'idx_secrets_updated_at', columns: ['updated_at'] } - ] -}; - -// ============================================================================ -// Database Schema -// ============================================================================ - -/** - * Complete database schema definition - */ -export const DATABASE_SCHEMA: SQLiteTable[] = [ - ACCOUNTS_TABLE, - CONTACTS_TABLE, - CONTACT_METHODS_TABLE, - SETTINGS_TABLE, - LOGS_TABLE, - SECRETS_TABLE -]; - -// ============================================================================ -// Type Guards and Validators -// ============================================================================ - -/** - * Type guard for SQLiteAccount - */ -export function isSQLiteAccount(value: unknown): value is SQLiteAccount { - return ( - typeof value === 'object' && - value !== null && - typeof (value as SQLiteAccount).did === 'string' && - typeof (value as SQLiteAccount).public_key_hex === 'string' && - typeof (value as SQLiteAccount).created_at === 'number' && - typeof (value as SQLiteAccount).updated_at === 'number' - ); -} - -/** - * Type guard for SQLiteContact - */ -export function isSQLiteContact(value: unknown): value is SQLiteContact { - return ( - typeof value === 'object' && - value !== null && - typeof (value as SQLiteContact).id === 'string' && - typeof (value as SQLiteContact).did === 'string' && - typeof (value as SQLiteContact).created_at === 'number' && - typeof (value as SQLiteContact).updated_at === 'number' - ); -} - -/** - * Type guard for SQLiteSettings - */ -export function isSQLiteSettings(value: unknown): value is SQLiteSettings { - return ( - typeof value === 'object' && - value !== null && - typeof (value as SQLiteSettings).key === 'string' && - typeof (value as SQLiteSettings).value_json === 'string' && - typeof (value as SQLiteSettings).created_at === 'number' && - typeof (value as SQLiteSettings).updated_at === 'number' - ); -} - -// ============================================================================ -// Migration Types -// ============================================================================ - -/** - * Type for migration data from Dexie to SQLite - */ -export interface MigrationData { - accounts: SQLiteAccount[]; - contacts: SQLiteContact[]; - contactMethods: SQLiteContactMethod[]; - settings: SQLiteSettings[]; - logs: SQLiteLog[]; - secrets: SQLiteSecret[]; - metadata: { - version: string; - timestamp: number; - source: 'dexie'; - }; -} - -/** - * Migration result type - */ -export interface MigrationResult { - success: boolean; - error?: Error; - stats: { - accounts: number; - contacts: number; - contactMethods: number; - settings: number; - logs: number; - secrets: number; - }; - duration: number; -} \ No newline at end of file diff --git a/src/interfaces/database.ts b/src/interfaces/database.ts index 0e024c55..4dda80ef 100644 --- a/src/interfaces/database.ts +++ b/src/interfaces/database.ts @@ -7,11 +7,11 @@ export interface QueryExecResult { export interface DatabaseService { initialize(): Promise; - query(sql: string, params?: any[]): Promise; + query(sql: string, params?: unknown[]): Promise; run( sql: string, - params?: any[], + params?: unknown[], ): Promise<{ changes: number; lastId?: number }>; - getOneRow(sql: string, params?: any[]): Promise; - getAll(sql: string, params?: any[]): Promise; + getOneRow(sql: string, params?: unknown[]): Promise; + getAll(sql: string, params?: unknown[]): Promise; } diff --git a/src/libs/util.ts b/src/libs/util.ts index 51b1f063..bd70fb72 100644 --- a/src/libs/util.ts +++ b/src/libs/util.ts @@ -567,7 +567,7 @@ export const generateSaveAndActivateIdentity = async (): Promise => { await updateDefaultSettings({ activeDid: newId.did }); } catch (error) { - console.error("Failed to update default settings:", error); + logger.error("Failed to update default settings:", error); throw new Error( "Failed to set default settings. Please try again or restart the app.", ); diff --git a/src/services/database.d.ts b/src/services/database.d.ts index 08032bfd..3741898e 100644 --- a/src/services/database.d.ts +++ b/src/services/database.d.ts @@ -2,9 +2,9 @@ import { DatabaseService } from "../interfaces/database"; declare module "@jlongster/sql.js" { interface SQL { - Database: any; - FS: any; - register_for_idb: (fs: any) => void; + Database: unknown; + FS: unknown; + register_for_idb: (fs: unknown) => void; } function initSqlJs(config: { @@ -15,7 +15,7 @@ declare module "@jlongster/sql.js" { declare module "absurd-sql" { export class SQLiteFS { - constructor(fs: any, backend: any); + constructor(fs: unknown, backend: unknown); } } diff --git a/src/services/database.ts b/src/services/database.ts index 907a0e80..40adbd1c 100644 --- a/src/services/database.ts +++ b/src/services/database.ts @@ -9,12 +9,13 @@ import IndexedDBBackend from "absurd-sql/dist/indexeddb-backend"; import { runMigrations } from "../db-sql/migration"; import type { QueryExecResult } from "../interfaces/database"; +import { logger } from "@/utils/logger"; interface SQLDatabase { - exec: (sql: string, params?: any[]) => Promise; + exec: (sql: string, params?: unknown[]) => Promise; run: ( sql: string, - params?: any[], + params?: unknown[], ) => Promise<{ changes: number; lastId?: number }>; } @@ -52,7 +53,7 @@ class DatabaseService { try { await this.initializationPromise; } catch (error) { - console.error(`DatabaseService initialize method failed:`, error); + logger.error(`DatabaseService initialize method failed:`, error); this.initializationPromise = null; // Reset on failure throw error; } @@ -116,7 +117,7 @@ class DatabaseService { // If initialized but no db, something went wrong if (!this.db) { - console.error( + logger.error( `Database not properly initialized after await waitForInitialization() - initialized flag is true but db is null`, ); throw new Error( @@ -128,25 +129,28 @@ class DatabaseService { // Used for inserts, updates, and deletes async run( sql: string, - params: any[] = [], + params: unknown[] = [], ): Promise<{ changes: number; lastId?: number }> { await this.waitForInitialization(); return this.db!.run(sql, params); } // Note that the resulting array may be empty if there are no results from the query - async query(sql: string, params: any[] = []): Promise { + async query(sql: string, params: unknown[] = []): Promise { await this.waitForInitialization(); return this.db!.exec(sql, params); } - async getOneRow(sql: string, params: any[] = []): Promise { + async getOneRow( + sql: string, + params: unknown[] = [], + ): Promise { await this.waitForInitialization(); const result = await this.db!.exec(sql, params); return result[0]?.values[0]; } - async all(sql: string, params: any[] = []): Promise { + async all(sql: string, params: unknown[] = []): Promise { await this.waitForInitialization(); const result = await this.db!.exec(sql, params); return result[0]?.values || []; diff --git a/src/services/migrationService.ts b/src/services/migrationService.ts index 18f49b56..74d74244 100644 --- a/src/services/migrationService.ts +++ b/src/services/migrationService.ts @@ -1,3 +1,4 @@ +import logger from "@/utils/logger"; import { QueryExecResult } from "../interfaces/database"; interface Migration { @@ -23,7 +24,10 @@ export class MigrationService { } async runMigrations( - sqlExec: (sql: string, params?: any[]) => Promise>, + sqlExec: ( + sql: string, + params?: unknown[], + ) => Promise>, ): Promise { // Create migrations table if it doesn't exist await sqlExec(` @@ -43,7 +47,7 @@ export class MigrationService { if (result.length > 0) { const singleResult = result[0]; executedMigrations = new Set( - singleResult.values.map((row: any[]) => row[0]), + singleResult.values.map((row: unknown[]) => row[0]), ); } @@ -55,9 +59,9 @@ export class MigrationService { await sqlExec("INSERT INTO migrations (name) VALUES (?)", [ migration.name, ]); - console.log(`Migration ${migration.name} executed successfully`); + logger.log(`Migration ${migration.name} executed successfully`); } catch (error) { - console.error(`Error executing migration ${migration.name}:`, error); + logger.error(`Error executing migration ${migration.name}:`, error); throw error; } } diff --git a/src/views/AccountViewView.vue b/src/views/AccountViewView.vue index b3ae0d9e..cda77e1c 100644 --- a/src/views/AccountViewView.vue +++ b/src/views/AccountViewView.vue @@ -111,7 +111,10 @@
- + { this.loading = false; this.hitError = true; - console.error("Failed to generate identity:", error); + logger.error("Failed to generate identity:", error); }); } } diff --git a/src/views/TestView.vue b/src/views/TestView.vue index abf6d87e..98915fea 100644 --- a/src/views/TestView.vue +++ b/src/views/TestView.vue @@ -355,7 +355,7 @@ export default class Help extends Vue { // for SQL operations sqlQuery = ""; - sqlResult: any = null; + sqlResult: unknown = null; cryptoLib = cryptoLib; @@ -542,9 +542,9 @@ export default class Help extends Vue { } else { this.sqlResult = await databaseService.run(this.sqlQuery); } - console.log("SQL Result:", this.sqlResult); + logger.log("SQL Result:", this.sqlResult); } catch (error) { - console.error("SQL Error:", error); + logger.error("SQL Error:", error); this.$notify( { group: "alert", From 0674d9867078d3f3e9058ce65773e8e7943b74f8 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Sun, 25 May 2025 21:29:57 -0600 Subject: [PATCH 16/92] fix BUILDING instructions --- BUILDING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BUILDING.md b/BUILDING.md index 1a764e9a..4887d7bc 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -242,8 +242,8 @@ docker run -d \ ```bash npm run build:web - npm run electron:build - npm run build:electron-mac + npm run build:electron + npm run electron:build-mac ``` 2. Package the Electron app for macOS: From e0013008b42fe660bdbe7659addc0d3307d9ee6f Mon Sep 17 00:00:00 2001 From: Matt Raymer Date: Sun, 25 May 2025 23:37:08 -0400 Subject: [PATCH 17/92] refactor: improve type safety and browser compatibility - Replace any types with SqlValue[] in migration system - Add browser-compatible implementations of Node.js modules (crypto, fs, path) - Update Vite config to handle Node.js module polyfills - Remove outdated migration documentation files --- package-lock.json | 1159 ++++++++++++++++++++++++------ package.json | 3 + src/utils/empty-module.js | 2 + src/utils/node-modules/crypto.js | 17 + src/utils/node-modules/fs.js | 18 + src/utils/node-modules/path.js | 13 + vite.config.common.mts | 29 +- 7 files changed, 1035 insertions(+), 206 deletions(-) create mode 100644 src/utils/empty-module.js create mode 100644 src/utils/node-modules/crypto.js create mode 100644 src/utils/node-modules/fs.js create mode 100644 src/utils/node-modules/path.js diff --git a/package-lock.json b/package-lock.json index 7fa2ea91..2fa16b87 100644 --- a/package-lock.json +++ b/package-lock.json @@ -108,7 +108,9 @@ "@vitejs/plugin-vue": "^5.2.1", "@vue/eslint-config-typescript": "^11.0.3", "autoprefixer": "^10.4.19", + "browserify-fs": "^1.0.0", "concurrently": "^8.2.2", + "crypto-browserify": "^3.12.1", "electron": "^33.2.1", "electron-builder": "^25.1.8", "eslint": "^8.57.0", @@ -119,6 +121,7 @@ "markdownlint": "^0.37.4", "markdownlint-cli": "^0.44.0", "npm-check-updates": "^17.1.13", + "path-browserify": "^1.0.1", "postcss": "^8.4.38", "prettier": "^3.2.5", "rimraf": "^6.0.1", @@ -6455,9 +6458,9 @@ } }, "node_modules/@ipld/dag-pb": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.1.4.tgz", - "integrity": "sha512-v8GLZoFYekDCFpgRgS158S1fkXKWVhF0T6wQJqS+aPyBDewygOjHEUJW7C2cDMw/BNwbMlzzieBwZrt7HWFsyw==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.1.5.tgz", + "integrity": "sha512-w4PZ2yPqvNmlAir7/2hsCRMqny1EY5jj26iZcSgxREJexmbAc2FI21jp26MqiNdfgAxvkCnf2N/TJI18GaDNwA==", "dependencies": { "multiformats": "^13.1.0" }, @@ -6467,9 +6470,9 @@ } }, "node_modules/@ipld/dag-pb/node_modules/multiformats": { - "version": "13.3.5", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.5.tgz", - "integrity": "sha512-dXsVGtaekmpKMHUngnXkPpXnJU9h8ee2+P85kTETViXcDkQjkWLrEkj/b5pJ23ZhvBlicr9eq3B9IJOa28R70w==" + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -7617,9 +7620,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.0.tgz", - "integrity": "sha512-KxN+zCjOYHGwCl4UCtSfZ6jrq/qi88JDUtiEFk8LELEHq2Egfc/FgW+jItZiOLRuQfb/3xJSgFuNPC9jzggX+A==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.41.1.tgz", + "integrity": "sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==", "cpu": [ "arm" ], @@ -7630,9 +7633,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.0.tgz", - "integrity": "sha512-yDvqx3lWlcugozax3DItKJI5j05B0d4Kvnjx+5mwiUpWramVvmAByYigMplaoAQ3pvdprGCTCE03eduqE/8mPQ==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.41.1.tgz", + "integrity": "sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==", "cpu": [ "arm64" ], @@ -7643,9 +7646,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.0.tgz", - "integrity": "sha512-2KOU574vD3gzcPSjxO0eyR5iWlnxxtmW1F5CkNOHmMlueKNCQkxR6+ekgWyVnz6zaZihpUNkGxjsYrkTJKhkaw==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.41.1.tgz", + "integrity": "sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==", "cpu": [ "arm64" ], @@ -7656,9 +7659,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.0.tgz", - "integrity": "sha512-gE5ACNSxHcEZyP2BA9TuTakfZvULEW4YAOtxl/A/YDbIir/wPKukde0BNPlnBiP88ecaN4BJI2TtAd+HKuZPQQ==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.41.1.tgz", + "integrity": "sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==", "cpu": [ "x64" ], @@ -7669,9 +7672,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.0.tgz", - "integrity": "sha512-GSxU6r5HnWij7FoSo7cZg3l5GPg4HFLkzsFFh0N/b16q5buW1NAWuCJ+HMtIdUEi6XF0qH+hN0TEd78laRp7Dg==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.41.1.tgz", + "integrity": "sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==", "cpu": [ "arm64" ], @@ -7682,9 +7685,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.0.tgz", - "integrity": "sha512-KGiGKGDg8qLRyOWmk6IeiHJzsN/OYxO6nSbT0Vj4MwjS2XQy/5emsmtoqLAabqrohbgLWJ5GV3s/ljdrIr8Qjg==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.41.1.tgz", + "integrity": "sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==", "cpu": [ "x64" ], @@ -7695,9 +7698,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.0.tgz", - "integrity": "sha512-46OzWeqEVQyX3N2/QdiU/CMXYDH/lSHpgfBkuhl3igpZiaB3ZIfSjKuOnybFVBQzjsLwkus2mjaESy8H41SzvA==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.41.1.tgz", + "integrity": "sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==", "cpu": [ "arm" ], @@ -7708,9 +7711,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.0.tgz", - "integrity": "sha512-lfgW3KtQP4YauqdPpcUZHPcqQXmTmH4nYU0cplNeW583CMkAGjtImw4PKli09NFi2iQgChk4e9erkwlfYem6Lg==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.41.1.tgz", + "integrity": "sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==", "cpu": [ "arm" ], @@ -7721,9 +7724,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.0.tgz", - "integrity": "sha512-nn8mEyzMbdEJzT7cwxgObuwviMx6kPRxzYiOl6o/o+ChQq23gfdlZcUNnt89lPhhz3BYsZ72rp0rxNqBSfqlqw==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.41.1.tgz", + "integrity": "sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==", "cpu": [ "arm64" ], @@ -7734,9 +7737,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.0.tgz", - "integrity": "sha512-l+QK99je2zUKGd31Gh+45c4pGDAqZSuWQiuRFCdHYC2CSiO47qUWsCcenrI6p22hvHZrDje9QjwSMAFL3iwXwQ==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.41.1.tgz", + "integrity": "sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==", "cpu": [ "arm64" ], @@ -7747,9 +7750,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.0.tgz", - "integrity": "sha512-WbnJaxPv1gPIm6S8O/Wg+wfE/OzGSXlBMbOe4ie+zMyykMOeqmgD1BhPxZQuDqwUN+0T/xOFtL2RUWBspnZj3w==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.41.1.tgz", + "integrity": "sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==", "cpu": [ "loong64" ], @@ -7760,9 +7763,9 @@ ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.0.tgz", - "integrity": "sha512-eRDWR5t67/b2g8Q/S8XPi0YdbKcCs4WQ8vklNnUYLaSWF+Cbv2axZsp4jni6/j7eKvMLYCYdcsv8dcU+a6QNFg==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.41.1.tgz", + "integrity": "sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==", "cpu": [ "ppc64" ], @@ -7773,9 +7776,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.0.tgz", - "integrity": "sha512-TWrZb6GF5jsEKG7T1IHwlLMDRy2f3DPqYldmIhnA2DVqvvhY2Ai184vZGgahRrg8k9UBWoSlHv+suRfTN7Ua4A==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.41.1.tgz", + "integrity": "sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==", "cpu": [ "riscv64" ], @@ -7786,9 +7789,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.0.tgz", - "integrity": "sha512-ieQljaZKuJpmWvd8gW87ZmSFwid6AxMDk5bhONJ57U8zT77zpZ/TPKkU9HpnnFrM4zsgr4kiGuzbIbZTGi7u9A==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.41.1.tgz", + "integrity": "sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==", "cpu": [ "riscv64" ], @@ -7799,9 +7802,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.0.tgz", - "integrity": "sha512-/L3pW48SxrWAlVsKCN0dGLB2bi8Nv8pr5S5ocSM+S0XCn5RCVCXqi8GVtHFsOBBCSeR+u9brV2zno5+mg3S4Aw==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.41.1.tgz", + "integrity": "sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==", "cpu": [ "s390x" ], @@ -7812,9 +7815,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.0.tgz", - "integrity": "sha512-XMLeKjyH8NsEDCRptf6LO8lJk23o9wvB+dJwcXMaH6ZQbbkHu2dbGIUindbMtRN6ux1xKi16iXWu6q9mu7gDhQ==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.41.1.tgz", + "integrity": "sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==", "cpu": [ "x64" ], @@ -7825,9 +7828,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.0.tgz", - "integrity": "sha512-m/P7LycHZTvSQeXhFmgmdqEiTqSV80zn6xHaQ1JSqwCtD1YGtwEK515Qmy9DcB2HK4dOUVypQxvhVSy06cJPEg==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.41.1.tgz", + "integrity": "sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==", "cpu": [ "x64" ], @@ -7838,9 +7841,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.0.tgz", - "integrity": "sha512-4yodtcOrFHpbomJGVEqZ8fzD4kfBeCbpsUy5Pqk4RluXOdsWdjLnjhiKy2w3qzcASWd04fp52Xz7JKarVJ5BTg==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.41.1.tgz", + "integrity": "sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==", "cpu": [ "arm64" ], @@ -7851,9 +7854,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.0.tgz", - "integrity": "sha512-tmazCrAsKzdkXssEc65zIE1oC6xPHwfy9d5Ta25SRCDOZS+I6RypVVShWALNuU9bxIfGA0aqrmzlzoM5wO5SPQ==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.41.1.tgz", + "integrity": "sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==", "cpu": [ "ia32" ], @@ -7864,9 +7867,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.0.tgz", - "integrity": "sha512-h1J+Yzjo/X+0EAvR2kIXJDuTuyT7drc+t2ALY0nIcGPbTatNOf0VWdhEA2Z4AAjv6X1NJV7SYo5oCTYRJhSlVA==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.41.1.tgz", + "integrity": "sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==", "cpu": [ "x64" ], @@ -9493,9 +9496,9 @@ } }, "node_modules/@veramo/did-provider-peer/node_modules/multiformats": { - "version": "13.3.5", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.5.tgz", - "integrity": "sha512-dXsVGtaekmpKMHUngnXkPpXnJU9h8ee2+P85kTETViXcDkQjkWLrEkj/b5pJ23ZhvBlicr9eq3B9IJOa28R70w==" + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==" }, "node_modules/@veramo/did-resolver": { "version": "5.6.0", @@ -10012,6 +10015,25 @@ "node": ">=6.5" } }, + "node_modules/abstract-leveldown": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", + "integrity": "sha512-TOod9d5RDExo6STLMGa+04HGkl+TlMfbDnTyN93/ETJ9DpQ0DaYLqcMZlbXvdc4W3vVo1Qrl+WhSp8zvDsJ+jA==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", + "dev": true, + "dependencies": { + "xtend": "~3.0.0" + } + }, + "node_modules/abstract-leveldown/node_modules/xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/absurd-sql": { "version": "0.0.54", "resolved": "https://registry.npmjs.org/absurd-sql/-/absurd-sql-0.0.54.tgz", @@ -11293,6 +11315,130 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-fs/-/browserify-fs-1.0.0.tgz", + "integrity": "sha512-8LqHRPuAEKvyTX34R6tsw4bO2ro6j9DmlYBhiYWHRM26Zv2cBw1fJOU0NeUQ0RkXkPn/PFBjhA0dm4AgaBurTg==", + "dev": true, + "dependencies": { + "level-filesystem": "^1.0.1", + "level-js": "^2.1.3", + "levelup": "^0.18.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "dev": true, + "dependencies": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/hash-base": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/browserify-sign/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/browserify-sign/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, "node_modules/browserslist": { "version": "4.24.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.5.tgz", @@ -12321,6 +12467,57 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "devOptional": true }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/concurrently": { "version": "8.2.2", "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", @@ -12860,6 +13057,22 @@ "node": ">= 6" } }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true + }, "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", @@ -12964,6 +13177,45 @@ "node": ">= 8" } }, + "node_modules/crypto-browserify": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/crypto-browserify/node_modules/hash-base": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/crypto-js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", @@ -13275,6 +13527,16 @@ "node": ">=10" } }, + "node_modules/deferred-leveldown": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", + "integrity": "sha512-+WCbb4+ez/SZ77Sdy1iadagFiVzMB89IKOBhglgnUkVxOxRWmmFsz8UDSNWh4Rhq+3wr/vMFlYj+rdEwWUDdng==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", + "dev": true, + "dependencies": { + "abstract-leveldown": "~0.12.1" + } + }, "node_modules/define-data-property": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", @@ -13388,6 +13650,16 @@ "node": ">=6" } }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -13514,6 +13786,23 @@ "node": ">=0.3.1" } }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true + }, "node_modules/dijkstrajs": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", @@ -13916,9 +14205,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.155", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.155.tgz", - "integrity": "sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==", + "version": "1.5.157", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.157.tgz", + "integrity": "sha512-/0ybgsQd1muo8QlnuTpKwtl0oX5YMlUGbm8xyqgDU00motRkKFFbUJySAQBWcY79rVqNLWIWa87BGVGClwAB2w==", "devOptional": true }, "node_modules/elementtree": { @@ -14023,6 +14312,18 @@ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "devOptional": true }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -14043,27 +14344,27 @@ } }, "node_modules/es-abstract": { - "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "version": "1.23.10", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.10.tgz", + "integrity": "sha512-MtUbM072wlJNyeYAe0mhzrD+M6DIJa96CZAOBBrhDbgKnB4MApIKefcyAB1eOdYn8cUNZgvwBvEzdoAYsxgEIw==", "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", - "call-bound": "^1.0.3", + "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", @@ -14079,13 +14380,13 @@ "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", + "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", + "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", @@ -14098,7 +14399,7 @@ "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -15405,7 +15706,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==", - "optional": true + "devOptional": true }, "node_modules/foreground-child": { "version": "3.3.1", @@ -15594,6 +15895,39 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/fwd-stream": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", + "integrity": "sha512-q2qaK2B38W07wfPSQDKMiKOD5Nzv2XyuvQlrmh1q0pxyHNanKHq8lwQ6n9zHucAwA5EbzRJKEgds2orn88rYTg==", + "dev": true, + "dependencies": { + "readable-stream": "~1.0.26-4" + } + }, + "node_modules/fwd-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "node_modules/fwd-stream/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/fwd-stream/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, "node_modules/gauge": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", @@ -16437,6 +16771,12 @@ "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", "dev": true }, + "node_modules/idb-wrapper": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", + "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==", + "dev": true + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -16515,6 +16855,12 @@ "node": ">=8" } }, + "node_modules/indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==", + "dev": true + }, "node_modules/infer-owner": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", @@ -16591,6 +16937,15 @@ "uint8arraylist": "^2.4.8" } }, + "node_modules/is": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", + "integrity": "sha512-ajQCouIvkcSnl2iRdK70Jug9mohIHVX9uKpoWnl115ov0R5mzBvRrXxrnHbsA+8AdwCwc/sfw7HXmd4I5EJBdQ==", + "dev": true, + "engines": { + "node": "*" + } + }, "node_modules/is-alphabetical": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", @@ -16954,6 +17309,12 @@ "node": ">=8" } }, + "node_modules/is-object": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", + "integrity": "sha512-GkfZZlIZtpkFrqyAXPQSRBMsaHAw+CgoKe2HXAkjd/sfoI9+hS8PT4wg2rJxdQyUKr7N2vHJbg7/jQtE5l5vBQ==", + "dev": true + }, "node_modules/is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", @@ -17191,6 +17552,12 @@ "url": "https://github.com/sponsors/gjtorikian/" } }, + "node_modules/isbuffer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", + "integrity": "sha512-xU+NoHp+YtKQkaM2HsQchYn0sltxMxew0HavMfHbjnucBoTSGbw745tL+Z7QBANleWM1eEQMenEpi174mIeS4g==", + "dev": true + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -17920,9 +18287,9 @@ } }, "node_modules/lan-network": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/lan-network/-/lan-network-0.1.6.tgz", - "integrity": "sha512-0qPYjNoD89v+bfhkIqFBYGBAof1xhxLqjX8bkNN1kQdP81UHpZw5TDXgEjwB+X2iCFGQmzF8TRmvg4vQcykyDA==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/lan-network/-/lan-network-0.1.7.tgz", + "integrity": "sha512-mnIlAEMu4OyEvUNdzco9xpuB9YVcPkQec+QsgycBCtPZvEqWPCDPfbAE4OJMdBBWpZWtpCn1xw9jJYlwjWI5zQ==", "optional": true, "peer": true, "bin": { @@ -17993,6 +18360,252 @@ "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==" }, + "node_modules/level-blobs": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz", + "integrity": "sha512-n0iYYCGozLd36m/Pzm206+brIgXP8mxPZazZ6ZvgKr+8YwOZ8/PPpYC5zMUu2qFygRN8RO6WC/HH3XWMW7RMVg==", + "dev": true, + "dependencies": { + "level-peek": "1.0.6", + "once": "^1.3.0", + "readable-stream": "^1.0.26-4" + } + }, + "node_modules/level-blobs/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "node_modules/level-blobs/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/level-blobs/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, + "node_modules/level-filesystem": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz", + "integrity": "sha512-PhXDuCNYpngpxp3jwMT9AYBMgOvB6zxj3DeuIywNKmZqFj2djj9XfT2XDVslfqmo0Ip79cAd3SBy3FsfOZPJ1g==", + "dev": true, + "dependencies": { + "concat-stream": "^1.4.4", + "errno": "^0.1.1", + "fwd-stream": "^1.0.4", + "level-blobs": "^0.1.7", + "level-peek": "^1.0.6", + "level-sublevel": "^5.2.0", + "octal": "^1.0.0", + "once": "^1.3.0", + "xtend": "^2.2.0" + } + }, + "node_modules/level-filesystem/node_modules/xtend": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/level-fix-range": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", + "integrity": "sha512-9llaVn6uqBiSlBP+wKiIEoBa01FwEISFgHSZiyec2S0KpyLUkGR4afW/FCZ/X8y+QJvzS0u4PGOlZDdh1/1avQ==", + "dev": true + }, + "node_modules/level-hooks": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz", + "integrity": "sha512-fxLNny/vL/G4PnkLhWsbHnEaRi+A/k8r5EH/M77npZwYL62RHi2fV0S824z3QdpAk6VTgisJwIRywzBHLK4ZVA==", + "dev": true, + "dependencies": { + "string-range": "~1.2" + } + }, + "node_modules/level-js": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz", + "integrity": "sha512-lZtjt4ZwHE00UMC1vAb271p9qzg8vKlnDeXfIesH3zL0KxhHRDjClQLGLWhyR0nK4XARnd4wc/9eD1ffd4PshQ==", + "deprecated": "Superseded by browser-level (https://github.com/Level/community#faq)", + "dev": true, + "dependencies": { + "abstract-leveldown": "~0.12.0", + "idb-wrapper": "^1.5.0", + "isbuffer": "~0.0.0", + "ltgt": "^2.1.2", + "typedarray-to-buffer": "~1.0.0", + "xtend": "~2.1.2" + } + }, + "node_modules/level-js/node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", + "dev": true + }, + "node_modules/level-js/node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "dev": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/level-peek": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz", + "integrity": "sha512-TKEzH5TxROTjQxWMczt9sizVgnmJ4F3hotBI48xCTYvOKd/4gA/uY0XjKkhJFo6BMic8Tqjf6jFMLWeg3MAbqQ==", + "dev": true, + "dependencies": { + "level-fix-range": "~1.0.2" + } + }, + "node_modules/level-sublevel": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz", + "integrity": "sha512-tO8jrFp+QZYrxx/Gnmjawuh1UBiifpvKNAcm4KCogesWr1Nm2+ckARitf+Oo7xg4OHqMW76eAqQ204BoIlscjA==", + "dev": true, + "dependencies": { + "level-fix-range": "2.0", + "level-hooks": ">=4.4.0 <5", + "string-range": "~1.2.1", + "xtend": "~2.0.4" + } + }, + "node_modules/level-sublevel/node_modules/clone": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", + "integrity": "sha512-IO78I0y6JcSpEPHzK4obKdsL7E7oLdRVDVOLwr2Hkbjsb+Eoz0dxW6tef0WizoKu0gLC4oZSZuEF4U2K6w1WQw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/level-sublevel/node_modules/level-fix-range": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz", + "integrity": "sha512-WrLfGWgwWbYPrHsYzJau+5+te89dUbENBg3/lsxOs4p2tYOhCHjbgXxBAj4DFqp3k/XBwitcRXoCh8RoCogASA==", + "dev": true, + "dependencies": { + "clone": "~0.1.9" + } + }, + "node_modules/level-sublevel/node_modules/object-keys": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz", + "integrity": "sha512-XODjdR2pBh/1qrjPcbSeSgEtKbYo7LqYNq64/TPuCf7j9SfDD3i21yatKoIy39yIWNvVM59iutfQQpCv1RfFzA==", + "deprecated": "Please update to the latest object-keys", + "dev": true, + "dependencies": { + "foreach": "~2.0.1", + "indexof": "~0.0.1", + "is": "~0.2.6" + } + }, + "node_modules/level-sublevel/node_modules/xtend": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz", + "integrity": "sha512-fOZg4ECOlrMl+A6Msr7EIFcON1L26mb4NY5rurSkOex/TWhazOrg6eXD/B0XkuiYcYhQDWLXzQxLMVJ7LXwokg==", + "dev": true, + "dependencies": { + "is-object": "~0.1.2", + "object-keys": "~0.2.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/levelup": { + "version": "0.18.6", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz", + "integrity": "sha512-uB0auyRqIVXx+hrpIUtol4VAPhLRcnxcOsd2i2m6rbFIDarO5dnrupLOStYYpEcu8ZT087Z9HEuYw1wjr6RL6Q==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", + "dev": true, + "dependencies": { + "bl": "~0.8.1", + "deferred-leveldown": "~0.2.0", + "errno": "~0.1.1", + "prr": "~0.0.0", + "readable-stream": "~1.0.26", + "semver": "~2.3.1", + "xtend": "~3.0.0" + } + }, + "node_modules/levelup/node_modules/bl": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", + "integrity": "sha512-pfqikmByp+lifZCS0p6j6KreV6kNU6Apzpm2nKOk+94cZb/jvle55+JxWiByUQ0Wo/+XnDXEy5MxxKMb6r0VIw==", + "dev": true, + "dependencies": { + "readable-stream": "~1.0.26" + } + }, + "node_modules/levelup/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "node_modules/levelup/node_modules/prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha512-LmUECmrW7RVj6mDWKjTXfKug7TFGdiz9P18HMcO4RHL+RW7MCOGNvpj5j47Rnp6ne6r4fZ2VzyUWEpKbg+tsjQ==", + "dev": true + }, + "node_modules/levelup/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/levelup/node_modules/semver": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/levelup/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, + "node_modules/levelup/node_modules/xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -18503,6 +19116,12 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, + "node_modules/ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", + "dev": true + }, "node_modules/luxon": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", @@ -19041,9 +19660,9 @@ "dev": true }, "node_modules/metro": { - "version": "0.82.3", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.82.3.tgz", - "integrity": "sha512-EfSLtuUmfsGk3znJ+zoN8cRLniQo3W1wyA+nJMfpTLdENfbbPnGRTwmKhzRcJIUh9jgkrrF4oRQ5shLtQ2DsUw==", + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.82.4.tgz", + "integrity": "sha512-/gFmw3ux9CPG5WUmygY35hpyno28zi/7OUn6+OFfbweA8l0B+PPqXXLr0/T6cf5nclCcH0d22o+02fICaShVxw==", "optional": true, "peer": true, "dependencies": { @@ -19068,18 +19687,18 @@ "jest-worker": "^29.7.0", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.82.3", - "metro-cache": "0.82.3", - "metro-cache-key": "0.82.3", - "metro-config": "0.82.3", - "metro-core": "0.82.3", - "metro-file-map": "0.82.3", - "metro-resolver": "0.82.3", - "metro-runtime": "0.82.3", - "metro-source-map": "0.82.3", - "metro-symbolicate": "0.82.3", - "metro-transform-plugins": "0.82.3", - "metro-transform-worker": "0.82.3", + "metro-babel-transformer": "0.82.4", + "metro-cache": "0.82.4", + "metro-cache-key": "0.82.4", + "metro-config": "0.82.4", + "metro-core": "0.82.4", + "metro-file-map": "0.82.4", + "metro-resolver": "0.82.4", + "metro-runtime": "0.82.4", + "metro-source-map": "0.82.4", + "metro-symbolicate": "0.82.4", + "metro-transform-plugins": "0.82.4", + "metro-transform-worker": "0.82.4", "mime-types": "^2.1.27", "nullthrows": "^1.1.1", "serialize-error": "^2.1.0", @@ -19096,9 +19715,9 @@ } }, "node_modules/metro-babel-transformer": { - "version": "0.82.3", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.82.3.tgz", - "integrity": "sha512-eC0f1MSA8rg7VoNDCYMIAIe5AEgYBskh5W8rIa4RGRdmEOsGlXbAV0AWMYoA7NlIALW/S9b10AcdIwD3n1e50w==", + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.82.4.tgz", + "integrity": "sha512-4juJahGRb1gmNbQq48lNinB6WFNfb6m0BQqi/RQibEltNiqTCxew/dBspI2EWA4xVCd3mQWGfw0TML4KurQZnQ==", "optional": true, "peer": true, "dependencies": { @@ -19129,25 +19748,25 @@ } }, "node_modules/metro-cache": { - "version": "0.82.3", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.82.3.tgz", - "integrity": "sha512-9zKhicA5GENROeP+iXku1NrI8FegtwEg3iPXHGixkm1Yppkbwsy/3lSHSiJZoT6GkZmxUDjN6sQ5QQ+/p72Msw==", + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.82.4.tgz", + "integrity": "sha512-vX0ylSMGtORKiZ4G8uP6fgfPdDiCWvLZUGZ5zIblSGylOX6JYhvExl0Zg4UA9pix/SSQu5Pnp9vdODMFsNIxhw==", "optional": true, "peer": true, "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", "https-proxy-agent": "^7.0.5", - "metro-core": "0.82.3" + "metro-core": "0.82.4" }, "engines": { "node": ">=18.18" } }, "node_modules/metro-cache-key": { - "version": "0.82.3", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.82.3.tgz", - "integrity": "sha512-dDLTUOJ7YYqGog9kR55InchwnkkHuxBXD765J3hQVWWPCy6xO9uZXZYGX1Y/tIMV8U7Ho1Sve0V13n5rFajrRQ==", + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.82.4.tgz", + "integrity": "sha512-2JCTqcpF+f2OghOpe/+x+JywfzDkrHdAqinPFWmK2ezNAU/qX0jBFaTETogPibFivxZJil37w9Yp6syX8rFUng==", "optional": true, "peer": true, "dependencies": { @@ -19158,9 +19777,9 @@ } }, "node_modules/metro-config": { - "version": "0.82.3", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.82.3.tgz", - "integrity": "sha512-GRG9sBkPvrGXD/Wu3RdEDuWg5NDixF9t0c6Zz9kZ9Aa/aQY+m85JgaCI5HYEV+UzVC/IUFFSpJiMfzQRicppLw==", + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.82.4.tgz", + "integrity": "sha512-Ki3Wumr3hKHGDS7RrHsygmmRNc/PCJrvkLn0+BWWxmbOmOcMMJDSmSI+WRlT8jd5VPZFxIi4wg+sAt5yBXAK0g==", "optional": true, "peer": true, "dependencies": { @@ -19168,34 +19787,34 @@ "cosmiconfig": "^5.0.5", "flow-enums-runtime": "^0.0.6", "jest-validate": "^29.7.0", - "metro": "0.82.3", - "metro-cache": "0.82.3", - "metro-core": "0.82.3", - "metro-runtime": "0.82.3" + "metro": "0.82.4", + "metro-cache": "0.82.4", + "metro-core": "0.82.4", + "metro-runtime": "0.82.4" }, "engines": { "node": ">=18.18" } }, "node_modules/metro-core": { - "version": "0.82.3", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.82.3.tgz", - "integrity": "sha512-JQZDdXo3hyLl1pqVT4IKEwcBK+3f11qFXeCjQ1hjVpjMwQLOqSM02J7NC/4DNSBt+qWBxWj6R5Jphcc7+9AEWw==", + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.82.4.tgz", + "integrity": "sha512-Xo4ozbxPg2vfgJGCgXZ8sVhC2M0lhTqD+tsKO2q9aelq/dCjnnSb26xZKcQO80CQOQUL7e3QWB7pLFGPjZm31A==", "optional": true, "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6", "lodash.throttle": "^4.1.1", - "metro-resolver": "0.82.3" + "metro-resolver": "0.82.4" }, "engines": { "node": ">=18.18" } }, "node_modules/metro-file-map": { - "version": "0.82.3", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.82.3.tgz", - "integrity": "sha512-o4wtloAge85MZl85F87FT59R/4tn5GvCvLfYcnzzDB20o2YX9AMxZqswrGMaei/GbD/Win5FrLF/Iq8oetcByA==", + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.82.4.tgz", + "integrity": "sha512-eO7HD1O3aeNsbEe6NBZvx1lLJUrxgyATjnDmb7bm4eyF6yWOQot9XVtxTDLNifECuvsZ4jzRiTInrbmIHkTdGA==", "optional": true, "peer": true, "dependencies": { @@ -19239,9 +19858,9 @@ "peer": true }, "node_modules/metro-minify-terser": { - "version": "0.82.3", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.82.3.tgz", - "integrity": "sha512-/3FasOULfHq1P0KPNFy5y28Th5oknPSwEbt9JELVBMAPhUnLqQkCLr4M+RQzKG3aEQN1/mEqenWApFCkk6Nm/Q==", + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.82.4.tgz", + "integrity": "sha512-W79Mi6BUwWVaM8Mc5XepcqkG+TSsCyyo//dmTsgYfJcsmReQorRFodil3bbJInETvjzdnS1mCsUo9pllNjT1Hg==", "optional": true, "peer": true, "dependencies": { @@ -19253,9 +19872,9 @@ } }, "node_modules/metro-resolver": { - "version": "0.82.3", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.82.3.tgz", - "integrity": "sha512-pdib7UrOM04j/RjWmaqmjjWRiuCbpA8BdUSuXzvBaK0QlNzHkRRDv6kiOGxgQ+UgG+KdbPcJktsW9olqiDhf9w==", + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.82.4.tgz", + "integrity": "sha512-uWoHzOBGQTPT5PjippB8rRT3iI9CTgFA9tRiLMzrseA5o7YAlgvfTdY9vFk2qyk3lW3aQfFKWkmqENryPRpu+Q==", "optional": true, "peer": true, "dependencies": { @@ -19266,9 +19885,9 @@ } }, "node_modules/metro-runtime": { - "version": "0.82.3", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.82.3.tgz", - "integrity": "sha512-J4SrUUsBy9ire8I2sFuXN5MzPmuBHlx1bjvAjdoo1ecpH2mtS3ubRqVnMotBxuK5+GhrbW0mtg5/46PVXy26cw==", + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.82.4.tgz", + "integrity": "sha512-vVyFO7H+eLXRV2E7YAUYA7aMGBECGagqxmFvC2hmErS7oq90BbPVENfAHbUWq1vWH+MRiivoRxdxlN8gBoF/dw==", "optional": true, "peer": true, "dependencies": { @@ -19280,9 +19899,9 @@ } }, "node_modules/metro-source-map": { - "version": "0.82.3", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.82.3.tgz", - "integrity": "sha512-gz7wfjz23rit6ePQ7NKE9x+VOWGKm54vli4wbphR9W+3y0bh6Ad7T0BGH9DUzRAnOnOorewrVEqFmT24mia5sg==", + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.82.4.tgz", + "integrity": "sha512-9jzDQJ0FPas1FuQFtwmBHsez2BfhFNufMowbOMeG3ZaFvzeziE8A0aJwILDS3U+V5039ssCQFiQeqDgENWvquA==", "optional": true, "peer": true, "dependencies": { @@ -19291,9 +19910,9 @@ "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-symbolicate": "0.82.3", + "metro-symbolicate": "0.82.4", "nullthrows": "^1.1.1", - "ob1": "0.82.3", + "ob1": "0.82.4", "source-map": "^0.5.6", "vlq": "^1.0.0" }, @@ -19312,15 +19931,15 @@ } }, "node_modules/metro-symbolicate": { - "version": "0.82.3", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.82.3.tgz", - "integrity": "sha512-WZKhR+QGbwkOLWP1z58Y7BFWUqLVDEEPsSQ5UI5+OWQDAwdtsPU9+sSNoJtD5qRU9qrB2XewQE3lJ2EQRRFJew==", + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.82.4.tgz", + "integrity": "sha512-LwEwAtdsx7z8rYjxjpLWxuFa2U0J6TS6ljlQM4WAATKa4uzV8unmnRuN2iNBWTmRqgNR77mzmI2vhwD4QSCo+w==", "optional": true, "peer": true, "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-source-map": "0.82.3", + "metro-source-map": "0.82.4", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" @@ -19343,9 +19962,9 @@ } }, "node_modules/metro-transform-plugins": { - "version": "0.82.3", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.82.3.tgz", - "integrity": "sha512-s1gVrkhczwMbxZLRSLCJ16K/4Sqx5IhO4sWlL6j0jlIEs1/Drn3JrkUUdQTtgmJS8SBpxmmB66cw7wnz751dVg==", + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.82.4.tgz", + "integrity": "sha512-NoWQRPHupVpnDgYguiEcm7YwDhnqW02iWWQjO2O8NsNP09rEMSq99nPjARWfukN7+KDh6YjLvTIN20mj3dk9kw==", "optional": true, "peer": true, "dependencies": { @@ -19361,9 +19980,9 @@ } }, "node_modules/metro-transform-worker": { - "version": "0.82.3", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.82.3.tgz", - "integrity": "sha512-z5Y7nYlSlLAEhjFi73uEJh69G5IC6HFZmXFcrxnY+JNlsjT2r0GgsDF4WaQGtarAIt5NP88V8983/PedwNfEcw==", + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.82.4.tgz", + "integrity": "sha512-kPI7Ad/tdAnI9PY4T+2H0cdgGeSWWdiPRKuytI806UcN4VhFL6OmYa19/4abYVYF+Cd2jo57CDuwbaxRfmXDhw==", "optional": true, "peer": true, "dependencies": { @@ -19372,13 +19991,13 @@ "@babel/parser": "^7.25.3", "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", - "metro": "0.82.3", - "metro-babel-transformer": "0.82.3", - "metro-cache": "0.82.3", - "metro-cache-key": "0.82.3", - "metro-minify-terser": "0.82.3", - "metro-source-map": "0.82.3", - "metro-transform-plugins": "0.82.3", + "metro": "0.82.4", + "metro-babel-transformer": "0.82.4", + "metro-cache": "0.82.4", + "metro-cache-key": "0.82.4", + "metro-minify-terser": "0.82.4", + "metro-source-map": "0.82.4", + "metro-transform-plugins": "0.82.4", "nullthrows": "^1.1.1" }, "engines": { @@ -20017,6 +20636,25 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true + }, "node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", @@ -20840,9 +21478,9 @@ "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" }, "node_modules/ob1": { - "version": "0.82.3", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.82.3.tgz", - "integrity": "sha512-8/SeymYlPMVODpCATHqm+X8eiuvD1GsKVa11n688V4GGgjrM3CRvrbtrYBs4t89LJDkv5CwGYPdqayuY0DmTTA==", + "version": "0.82.4", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.82.4.tgz", + "integrity": "sha512-n9S8e4l5TvkrequEAMDidl4yXesruWTNTzVkeaHSGywoTOIwTzZzKw7Z670H3eaXDZui5MJXjWGNzYowVZIxCA==", "optional": true, "peer": true, "dependencies": { @@ -20911,6 +21549,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/octal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz", + "integrity": "sha512-nnda7W8d+A3vEIY+UrDQzzboPf1vhs4JYVhff5CDkq9QNoZY7Xrxeo/htox37j9dZf7yNHevZzqtejWgy1vCqQ==", + "dev": true + }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -21120,6 +21764,53 @@ "node": ">=6" } }, + "node_modules/parse-asn1": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "dev": true, + "dependencies": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-asn1/node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/parse-asn1/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true + }, + "node_modules/parse-asn1/node_modules/hash-base": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/parse-entities": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", @@ -21175,6 +21866,12 @@ "node": ">= 0.8" } }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -21586,9 +22283,9 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "node_modules/prebuild-install/node_modules/tar-fs": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.2.tgz", - "integrity": "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", + "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -21765,9 +22462,9 @@ } }, "node_modules/protons-runtime/node_modules/multiformats": { - "version": "13.3.5", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.5.tgz", - "integrity": "sha512-dXsVGtaekmpKMHUngnXkPpXnJU9h8ee2+P85kTETViXcDkQjkWLrEkj/b5pJ23ZhvBlicr9eq3B9IJOa28R70w==" + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==" }, "node_modules/protons-runtime/node_modules/uint8arrays": { "version": "5.1.0", @@ -21782,6 +22479,32 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true + }, "node_modules/pump": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", @@ -22109,6 +22832,16 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -23154,9 +23887,9 @@ } }, "node_modules/rimraf/node_modules/jackspeak": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.0.tgz", - "integrity": "sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -23256,9 +23989,9 @@ } }, "node_modules/rollup": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.0.tgz", - "integrity": "sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg==", + "version": "4.41.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz", + "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==", "dev": true, "dependencies": { "@types/estree": "1.0.7" @@ -23271,26 +24004,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.41.0", - "@rollup/rollup-android-arm64": "4.41.0", - "@rollup/rollup-darwin-arm64": "4.41.0", - "@rollup/rollup-darwin-x64": "4.41.0", - "@rollup/rollup-freebsd-arm64": "4.41.0", - "@rollup/rollup-freebsd-x64": "4.41.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.41.0", - "@rollup/rollup-linux-arm-musleabihf": "4.41.0", - "@rollup/rollup-linux-arm64-gnu": "4.41.0", - "@rollup/rollup-linux-arm64-musl": "4.41.0", - "@rollup/rollup-linux-loongarch64-gnu": "4.41.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.41.0", - "@rollup/rollup-linux-riscv64-gnu": "4.41.0", - "@rollup/rollup-linux-riscv64-musl": "4.41.0", - "@rollup/rollup-linux-s390x-gnu": "4.41.0", - "@rollup/rollup-linux-x64-gnu": "4.41.0", - "@rollup/rollup-linux-x64-musl": "4.41.0", - "@rollup/rollup-win32-arm64-msvc": "4.41.0", - "@rollup/rollup-win32-ia32-msvc": "4.41.0", - "@rollup/rollup-win32-x64-msvc": "4.41.0", + "@rollup/rollup-android-arm-eabi": "4.41.1", + "@rollup/rollup-android-arm64": "4.41.1", + "@rollup/rollup-darwin-arm64": "4.41.1", + "@rollup/rollup-darwin-x64": "4.41.1", + "@rollup/rollup-freebsd-arm64": "4.41.1", + "@rollup/rollup-freebsd-x64": "4.41.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.41.1", + "@rollup/rollup-linux-arm-musleabihf": "4.41.1", + "@rollup/rollup-linux-arm64-gnu": "4.41.1", + "@rollup/rollup-linux-arm64-musl": "4.41.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.41.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-gnu": "4.41.1", + "@rollup/rollup-linux-riscv64-musl": "4.41.1", + "@rollup/rollup-linux-s390x-gnu": "4.41.1", + "@rollup/rollup-linux-x64-gnu": "4.41.1", + "@rollup/rollup-linux-x64-musl": "4.41.1", + "@rollup/rollup-win32-arm64-msvc": "4.41.1", + "@rollup/rollup-win32-ia32-msvc": "4.41.1", + "@rollup/rollup-win32-x64-msvc": "4.41.1", "fsevents": "~2.3.2" } }, @@ -24711,6 +25444,12 @@ "safe-buffer": "~5.2.0" } }, + "node_modules/string-range": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz", + "integrity": "sha512-tYft6IFi8SjplJpxCUxyqisD3b+R2CSkomrtJYCkvuf1KuCAWgz7YXt4O0jip7efpfCemwHEzTEAO8EuOYgh3w==", + "dev": true + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -25138,9 +25877,9 @@ } }, "node_modules/tar-fs": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.8.tgz", - "integrity": "sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.9.tgz", + "integrity": "sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==", "devOptional": true, "dependencies": { "pump": "^3.0.0", @@ -25742,6 +26481,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/typedarray-to-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz", + "integrity": "sha512-vjMKrfSoUDN8/Vnqitw2FmstOfuJ73G6CrSEKnf11A6RmasVxHqfeBcnTb6RsL4pTMuV5Zsv9IiHRphMZyckUw==", + "dev": true + }, "node_modules/typeorm": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.24.tgz", @@ -26002,9 +26753,9 @@ } }, "node_modules/uint8-varint/node_modules/multiformats": { - "version": "13.3.5", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.5.tgz", - "integrity": "sha512-dXsVGtaekmpKMHUngnXkPpXnJU9h8ee2+P85kTETViXcDkQjkWLrEkj/b5pJ23ZhvBlicr9eq3B9IJOa28R70w==" + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==" }, "node_modules/uint8-varint/node_modules/uint8arrays": { "version": "5.1.0", @@ -26023,9 +26774,9 @@ } }, "node_modules/uint8arraylist/node_modules/multiformats": { - "version": "13.3.5", - "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.5.tgz", - "integrity": "sha512-dXsVGtaekmpKMHUngnXkPpXnJU9h8ee2+P85kTETViXcDkQjkWLrEkj/b5pJ23ZhvBlicr9eq3B9IJOa28R70w==" + "version": "13.3.6", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==" }, "node_modules/uint8arraylist/node_modules/uint8arrays": { "version": "5.1.0", @@ -27614,9 +28365,9 @@ } }, "node_modules/zod": { - "version": "3.25.12", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.12.tgz", - "integrity": "sha512-A8e9eiwm2L5YEupdjn1YcxL1ZDWuL3Bc4JKvLwUrpKZZtRUDOijR7XXsV5WMuUCZPc1tFYO5yfH14STI08MquA==", + "version": "3.25.28", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.28.tgz", + "integrity": "sha512-/nt/67WYKnr5by3YS7LroZJbtcCBurDKKPBPWWzaxvVCGuG/NOsiKkrjoOhI8mJ+SQUXEbUzeB3S+6XDUEEj7Q==", "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/package.json b/package.json index 9ef4b219..8225d000 100644 --- a/package.json +++ b/package.json @@ -146,7 +146,9 @@ "@vitejs/plugin-vue": "^5.2.1", "@vue/eslint-config-typescript": "^11.0.3", "autoprefixer": "^10.4.19", + "browserify-fs": "^1.0.0", "concurrently": "^8.2.2", + "crypto-browserify": "^3.12.1", "electron": "^33.2.1", "electron-builder": "^25.1.8", "eslint": "^8.57.0", @@ -157,6 +159,7 @@ "markdownlint": "^0.37.4", "markdownlint-cli": "^0.44.0", "npm-check-updates": "^17.1.13", + "path-browserify": "^1.0.1", "postcss": "^8.4.38", "prettier": "^3.2.5", "rimraf": "^6.0.1", diff --git a/src/utils/empty-module.js b/src/utils/empty-module.js new file mode 100644 index 00000000..2915969c --- /dev/null +++ b/src/utils/empty-module.js @@ -0,0 +1,2 @@ +// Empty module to satisfy Node.js built-in module imports +export default {}; \ No newline at end of file diff --git a/src/utils/node-modules/crypto.js b/src/utils/node-modules/crypto.js new file mode 100644 index 00000000..9d9e58ac --- /dev/null +++ b/src/utils/node-modules/crypto.js @@ -0,0 +1,17 @@ +// Minimal crypto module implementation for browser using Web Crypto API +const crypto = { + ...window.crypto, + // Add any Node.js crypto methods that might be needed + randomBytes: (size) => { + const buffer = new Uint8Array(size); + window.crypto.getRandomValues(buffer); + return buffer; + }, + createHash: () => ({ + update: () => ({ + digest: () => new Uint8Array(32) // Return empty hash + }) + }) +}; + +export default crypto; \ No newline at end of file diff --git a/src/utils/node-modules/fs.js b/src/utils/node-modules/fs.js new file mode 100644 index 00000000..6e342aa0 --- /dev/null +++ b/src/utils/node-modules/fs.js @@ -0,0 +1,18 @@ +// Minimal fs module implementation for browser +const fs = { + readFileSync: () => { + throw new Error('fs.readFileSync is not supported in browser'); + }, + writeFileSync: () => { + throw new Error('fs.writeFileSync is not supported in browser'); + }, + existsSync: () => false, + mkdirSync: () => {}, + readdirSync: () => [], + statSync: () => ({ + isDirectory: () => false, + isFile: () => false + }) +}; + +export default fs; \ No newline at end of file diff --git a/src/utils/node-modules/path.js b/src/utils/node-modules/path.js new file mode 100644 index 00000000..bcee136b --- /dev/null +++ b/src/utils/node-modules/path.js @@ -0,0 +1,13 @@ +// Minimal path module implementation for browser +const path = { + resolve: (...parts) => parts.join('/'), + join: (...parts) => parts.join('/'), + dirname: (p) => p.split('/').slice(0, -1).join('/'), + basename: (p) => p.split('/').pop(), + extname: (p) => { + const parts = p.split('.'); + return parts.length > 1 ? '.' + parts.pop() : ''; + } +}; + +export default path; \ No newline at end of file diff --git a/vite.config.common.mts b/vite.config.common.mts index 483dc4d4..62a50084 100644 --- a/vite.config.common.mts +++ b/vite.config.common.mts @@ -36,7 +36,15 @@ export async function createBuildConfig(mode: string) { assetsDir: 'assets', chunkSizeWarningLimit: 1000, rollupOptions: { - external: isCapacitor ? ['@capacitor/app'] : [] + external: isCapacitor + ? ['@capacitor/app'] + : [], + output: { + format: 'es', + generatedCode: { + preset: 'es2015' + } + } } }, define: { @@ -46,11 +54,22 @@ export async function createBuildConfig(mode: string) { __dirname: isElectron ? JSON.stringify(process.cwd()) : '""', __IS_MOBILE__: JSON.stringify(isCapacitor), __USE_QR_READER__: JSON.stringify(!isCapacitor), + 'process.platform': JSON.stringify('browser'), + 'process.version': JSON.stringify('v16.0.0'), + 'process.env.NODE_DEBUG': JSON.stringify(false), + 'global.process': JSON.stringify({ + platform: 'browser', + version: 'v16.0.0', + env: { NODE_DEBUG: false } + }) }, resolve: { alias: { '@': path.resolve(__dirname, './src'), ...appConfig.aliasConfig, + 'path': path.resolve(__dirname, './src/utils/node-modules/path.js'), + 'fs': path.resolve(__dirname, './src/utils/node-modules/fs.js'), + 'crypto': path.resolve(__dirname, './src/utils/node-modules/crypto.js'), 'nostr-tools/nip06': mode === 'development' ? 'nostr-tools/nip06' : path.resolve(__dirname, 'node_modules/nostr-tools/nip06'), @@ -62,7 +81,13 @@ export async function createBuildConfig(mode: string) { } }, optimizeDeps: { - include: ['nostr-tools', 'nostr-tools/nip06', 'nostr-tools/core', 'dexie-export-import'], + include: [ + 'nostr-tools', + 'nostr-tools/nip06', + 'nostr-tools/core', + 'dexie-export-import', + '@jlongster/sql.js' + ], exclude: isElectron ? [ 'register-service-worker', 'workbox-window', From 2647c5a77d21042ae94dec6b9a54c17e7df31a1a Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Sun, 25 May 2025 21:52:27 -0600 Subject: [PATCH 18/92] fix migrations logging error --- package-lock.json | 239 ++++++++++++++++--------------- src/services/migrationService.ts | 4 +- 2 files changed, 125 insertions(+), 118 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2fa16b87..576328e2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11173,51 +11173,38 @@ } }, "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", + "integrity": "sha512-pfqikmByp+lifZCS0p6j6KreV6kNU6Apzpm2nKOk+94cZb/jvle55+JxWiByUQ0Wo/+XnDXEy5MxxKMb6r0VIw==", + "dev": true, "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "readable-stream": "~1.0.26" } }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } + "node_modules/bl/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true }, "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dev": true, "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, + "node_modules/bl/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, "node_modules/blakejs": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", @@ -11384,19 +11371,6 @@ "node": ">= 0.12" } }, - "node_modules/browserify-sign/node_modules/hash-base": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", - "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/browserify-sign/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -13203,19 +13177,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/crypto-browserify/node_modules/hash-base": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", - "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/crypto-js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", @@ -16079,6 +16040,15 @@ "xtend": "~4.0.1" } }, + "node_modules/get-pkg-repo/node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/get-pkg-repo/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -16550,29 +16520,15 @@ "devOptional": true }, "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", "dependencies": { "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "safe-buffer": "^5.2.1" }, "engines": { - "node": ">= 6" + "node": ">= 0.10" } }, "node_modules/hash.js": { @@ -18412,15 +18368,6 @@ "xtend": "^2.2.0" } }, - "node_modules/level-filesystem/node_modules/xtend": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", - "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/level-fix-range": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", @@ -18549,15 +18496,6 @@ "xtend": "~3.0.0" } }, - "node_modules/levelup/node_modules/bl": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", - "integrity": "sha512-pfqikmByp+lifZCS0p6j6KreV6kNU6Apzpm2nKOk+94cZb/jvle55+JxWiByUQ0Wo/+XnDXEy5MxxKMb6r0VIw==", - "dev": true, - "dependencies": { - "readable-stream": "~1.0.26" - } - }, "node_modules/levelup/node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -21657,6 +21595,55 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ora/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/ora/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/ora/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/own-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", @@ -21798,19 +21785,6 @@ "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", "dev": true }, - "node_modules/parse-asn1/node_modules/hash-base": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", - "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/parse-entities": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", @@ -25916,6 +25890,39 @@ "node": ">=6" } }, + "node_modules/tar-stream/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/tar-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/tar-stream/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -28187,9 +28194,9 @@ } }, "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", "dev": true, "engines": { "node": ">=0.4" diff --git a/src/services/migrationService.ts b/src/services/migrationService.ts index 74d74244..b82b8d4e 100644 --- a/src/services/migrationService.ts +++ b/src/services/migrationService.ts @@ -1,4 +1,4 @@ -import logger from "@/utils/logger"; +import { logger } from "@/utils/logger"; import { QueryExecResult } from "../interfaces/database"; interface Migration { @@ -42,7 +42,7 @@ export class MigrationService { const result: QueryExecResult[] = await sqlExec( "SELECT name FROM migrations;", ); - let executedMigrations: Set = new Set(); + let executedMigrations: Set = new Set(); // Even with that query, the QueryExecResult may be [] (which doesn't make sense to me). if (result.length > 0) { const singleResult = result[0]; From 3a6f585de09db6994f44b8cf2ddc639a80f037d4 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Mon, 26 May 2025 13:59:34 -0600 Subject: [PATCH 19/92] adjust so DB calls go to the factory --- src/libs/util.ts | 4 ++- src/services/PlatformService.ts | 18 +++++++++++ .../platforms/CapacitorPlatformService.ts | 8 +++++ .../platforms/ElectronPlatformService.ts | 8 +++++ .../platforms/PyWebViewPlatformService.ts | 8 +++++ src/services/platforms/WebPlatformService.ts | 16 ++++++++++ src/views/AccountViewView.vue | 8 ++++- src/views/HelpOnboardingView.vue | 2 +- src/views/HelpView.vue | 2 +- src/views/TestView.vue | 31 ++++++++++--------- 10 files changed, 86 insertions(+), 19 deletions(-) diff --git a/src/libs/util.ts b/src/libs/util.ts index bd70fb72..1d33f51f 100644 --- a/src/libs/util.ts +++ b/src/libs/util.ts @@ -29,6 +29,7 @@ import { KeyMeta } from "../libs/crypto/vc"; import { createPeerDid } from "../libs/crypto/vc/didPeer"; import { registerCredential } from "../libs/crypto/vc/passkeyDidPeer"; import { logger } from "../utils/logger"; +import { PlatformServiceFactory } from "@/services/PlatformServiceFactory"; export interface GiverReceiverInputInfo { did?: string; @@ -552,7 +553,8 @@ export const generateSaveAndActivateIdentity = async (): Promise => { }); // add to the new sql db - await databaseService.run( + const platformService = PlatformServiceFactory.getInstance(); + await platformService.dbExec( `INSERT INTO accounts (dateCreated, derivationPath, did, identity, mnemonic, publicKeyHex) VALUES (?, ?, ?, ?, ?, ?)`, [ diff --git a/src/services/PlatformService.ts b/src/services/PlatformService.ts index 574b1a3a..8ed8fa91 100644 --- a/src/services/PlatformService.ts +++ b/src/services/PlatformService.ts @@ -1,3 +1,5 @@ +import { QueryExecResult } from "@/interfaces/database"; + /** * Represents the result of an image capture or selection operation. * Contains both the image data as a Blob and the associated filename. @@ -98,4 +100,20 @@ export interface PlatformService { * @returns Promise that resolves when the deep link has been handled */ handleDeepLink(url: string): Promise; + + /** + * Executes a SQL query on the database. + * @param sql - The SQL query to execute + * @param params - The parameters to pass to the query + * @returns Promise resolving to the query result + */ + dbQuery(sql: string, params?: unknown[]): Promise; + + /** + * Executes a create/update/delete on the database. + * @param sql - The SQL statement to execute + * @param params - The parameters to pass to the statement + * @returns Promise resolving to the result of the statement + */ + dbExec(sql: string, params?: unknown[]): Promise<{ changes: number; lastId?: number }>; } diff --git a/src/services/platforms/CapacitorPlatformService.ts b/src/services/platforms/CapacitorPlatformService.ts index ee8f2f82..59e87de7 100644 --- a/src/services/platforms/CapacitorPlatformService.ts +++ b/src/services/platforms/CapacitorPlatformService.ts @@ -7,6 +7,7 @@ import { Filesystem, Directory, Encoding } from "@capacitor/filesystem"; import { Camera, CameraResultType, CameraSource } from "@capacitor/camera"; import { Share } from "@capacitor/share"; import { logger } from "../../utils/logger"; +import { QueryExecResult } from "@/interfaces/database"; /** * Platform service implementation for Capacitor (mobile) platform. @@ -476,4 +477,11 @@ export class CapacitorPlatformService implements PlatformService { // This is just a placeholder for the interface return Promise.resolve(); } + + dbQuery(sql: string, params?: unknown[]): Promise { + throw new Error("Not implemented for " + sql + " with params " + params); + } + dbExec(sql: string, params?: unknown[]): Promise<{ changes: number; lastId?: number }> { + throw new Error("Not implemented for " + sql + " with params " + params); + } } diff --git a/src/services/platforms/ElectronPlatformService.ts b/src/services/platforms/ElectronPlatformService.ts index 74fc8290..6353f685 100644 --- a/src/services/platforms/ElectronPlatformService.ts +++ b/src/services/platforms/ElectronPlatformService.ts @@ -4,6 +4,7 @@ import { PlatformCapabilities, } from "../PlatformService"; import { logger } from "../../utils/logger"; +import { QueryExecResult } from "@/interfaces/database"; /** * Platform service implementation for Electron (desktop) platform. @@ -108,4 +109,11 @@ export class ElectronPlatformService implements PlatformService { logger.error("handleDeepLink not implemented in Electron platform"); throw new Error("Not implemented"); } + + dbQuery(sql: string, params?: unknown[]): Promise { + throw new Error("Not implemented for " + sql + " with params " + params); + } + dbExec(sql: string, params?: unknown[]): Promise<{ changes: number; lastId?: number }> { + throw new Error("Not implemented for " + sql + " with params " + params); + } } diff --git a/src/services/platforms/PyWebViewPlatformService.ts b/src/services/platforms/PyWebViewPlatformService.ts index b27aec31..d2c07d9e 100644 --- a/src/services/platforms/PyWebViewPlatformService.ts +++ b/src/services/platforms/PyWebViewPlatformService.ts @@ -4,6 +4,7 @@ import { PlatformCapabilities, } from "../PlatformService"; import { logger } from "../../utils/logger"; +import { QueryExecResult } from "@/interfaces/database"; /** * Platform service implementation for PyWebView platform. @@ -109,4 +110,11 @@ export class PyWebViewPlatformService implements PlatformService { logger.error("handleDeepLink not implemented in PyWebView platform"); throw new Error("Not implemented"); } + + dbQuery(sql: string, params?: unknown[]): Promise { + throw new Error("Not implemented for " + sql + " with params " + params); + } + dbExec(sql: string, params?: unknown[]): Promise<{ changes: number; lastId?: number }> { + throw new Error("Not implemented for " + sql + " with params " + params); + } } diff --git a/src/services/platforms/WebPlatformService.ts b/src/services/platforms/WebPlatformService.ts index 7f09c4d3..1d076ed0 100644 --- a/src/services/platforms/WebPlatformService.ts +++ b/src/services/platforms/WebPlatformService.ts @@ -4,6 +4,8 @@ import { PlatformCapabilities, } from "../PlatformService"; import { logger } from "../../utils/logger"; +import { QueryExecResult } from "@/interfaces/database"; +import databaseService from "../database"; /** * Platform service implementation for web browser platform. @@ -359,4 +361,18 @@ export class WebPlatformService implements PlatformService { async writeAndShareFile(_fileName: string, _content: string): Promise { throw new Error("File system access not available in web platform"); } + + /** + * @see PlatformService.dbQuery + */ + dbQuery(sql: string, params?: unknown[]): Promise { + return databaseService.query(sql, params).then((result) => result[0]); + } + + /** + * @see PlatformService.dbExec + */ + dbExec(sql: string, params?: unknown[]): Promise<{ changes: number; lastId?: number }> { + return databaseService.run(sql, params); + } } diff --git a/src/views/AccountViewView.vue b/src/views/AccountViewView.vue index cda77e1c..59a2c449 100644 --- a/src/views/AccountViewView.vue +++ b/src/views/AccountViewView.vue @@ -955,7 +955,13 @@ :to="{ name: 'logs' }" class="block w-fit text-center text-md bg-gradient-to-b from-slate-400 to-slate-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-4 py-2 rounded-md mb-2" > - View Logs + Logs + + + Test Page diff --git a/src/views/HelpOnboardingView.vue b/src/views/HelpOnboardingView.vue index fa8e20f9..ce519a4a 100644 --- a/src/views/HelpOnboardingView.vue +++ b/src/views/HelpOnboardingView.vue @@ -114,5 +114,5 @@ import { Component, Vue } from "vue-facing-decorator"; import QuickNav from "../components/QuickNav.vue"; @Component({ components: { QuickNav } }) -export default class Help extends Vue {} +export default class HelpOnboardingView extends Vue {} diff --git a/src/views/HelpView.vue b/src/views/HelpView.vue index b4adb22c..f902d4ed 100644 --- a/src/views/HelpView.vue +++ b/src/views/HelpView.vue @@ -586,7 +586,7 @@ import { } from "../db/index"; @Component({ components: { QuickNav } }) -export default class Help extends Vue { +export default class HelpView extends Vue { $notify!: (notification: NotificationIface, timeout?: number) => void; $router!: Router; diff --git a/src/views/TestView.vue b/src/views/TestView.vue index 98915fea..ec9fd71d 100644 --- a/src/views/TestView.vue +++ b/src/views/TestView.vue @@ -163,25 +163,25 @@

SQL Operations

-
-
- -
+
+
+ +
-
+
-
+
- + Passkey Expiration Minutes
@@ -953,13 +953,13 @@ Logs Test Page diff --git a/src/views/TestView.vue b/src/views/TestView.vue index ec9fd71d..fc3a8f98 100644 --- a/src/views/TestView.vue +++ b/src/views/TestView.vue @@ -543,9 +543,9 @@ export default class Help extends Vue { } else { this.sqlResult = await platformService.dbExec(this.sqlQuery); } - logger.log("SQL Result:", this.sqlResult); + logger.log("Test SQL Result:", this.sqlResult); } catch (error) { - logger.error("SQL Error:", error); + logger.error("Test SQL Error:", error); this.$notify( { group: "alert", From b8fbc3f7a6342716b4ce3218f4512636c6328f73 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Mon, 26 May 2025 15:49:44 -0600 Subject: [PATCH 21/92] fix console error about "window" unavailable due to service worker --- .env.development | 1 + .env.example | 6 ------ .env.production | 1 + .env.staging | 1 + BUILDING.md | 2 +- src/constants/app.ts | 2 +- 6 files changed, 5 insertions(+), 8 deletions(-) delete mode 100644 .env.example diff --git a/.env.development b/.env.development index c6742b09..6989633c 100644 --- a/.env.development +++ b/.env.development @@ -9,4 +9,5 @@ VITE_DEFAULT_ENDORSER_API_SERVER=http://localhost:3000 # Using shared server by default to ease setup, which works for shared test users. VITE_DEFAULT_IMAGE_API_SERVER=https://test-image-api.timesafari.app VITE_DEFAULT_PARTNER_API_SERVER=http://localhost:3000 +#VITE_DEFAULT_PUSH_SERVER... can't be set up with localhost domain VITE_PASSKEYS_ENABLED=true diff --git a/.env.example b/.env.example deleted file mode 100644 index 983c4b64..00000000 --- a/.env.example +++ /dev/null @@ -1,6 +0,0 @@ -# Admin DID credentials -ADMIN_DID=did:ethr:0x0000694B58C2cC69658993A90D3840C560f2F51F -ADMIN_PRIVATE_KEY=2b6472c026ec2aa2c4235c994a63868fc9212d18b58f6cbfe861b52e71330f5b - -# API Configuration -ENDORSER_API_URL=https://test-api.endorser.ch/api/v2/claim \ No newline at end of file diff --git a/.env.production b/.env.production index d7669d93..bbf73a08 100644 --- a/.env.production +++ b/.env.production @@ -9,3 +9,4 @@ VITE_DEFAULT_ENDORSER_API_SERVER=https://api.endorser.ch VITE_DEFAULT_IMAGE_API_SERVER=https://image-api.timesafari.app VITE_DEFAULT_PARTNER_API_SERVER=https://partner-api.endorser.ch +VITE_DEFAULT_PUSH_SERVER=https://timesafari.app diff --git a/.env.staging b/.env.staging index 6f8c1fc1..a01c323c 100644 --- a/.env.staging +++ b/.env.staging @@ -9,4 +9,5 @@ VITE_DEFAULT_ENDORSER_API_SERVER=https://test-api.endorser.ch VITE_DEFAULT_IMAGE_API_SERVER=https://test-image-api.timesafari.app VITE_DEFAULT_PARTNER_API_SERVER=https://test-partner-api.endorser.ch +VITE_DEFAULT_PUSH_SERVER=https://test.timesafari.app VITE_PASSKEYS_ENABLED=true diff --git a/BUILDING.md b/BUILDING.md index 4887d7bc..d9debb77 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -84,7 +84,7 @@ Install dependencies: * For test, build the app (because test server is not yet set up to build): ```bash -TIME_SAFARI_APP_TITLE="TimeSafari_Test" VITE_APP_SERVER=https://test.timesafari.app VITE_BVC_MEETUPS_PROJECT_CLAIM_ID=https://endorser.ch/entity/01HWE8FWHQ1YGP7GFZYYPS272F VITE_DEFAULT_ENDORSER_API_SERVER=https://test-api.endorser.ch VITE_DEFAULT_IMAGE_API_SERVER=https://test-image-api.timesafari.app VITE_DEFAULT_PARTNER_API_SERVER=https://test-partner-api.endorser.ch VITE_PASSKEYS_ENABLED=true npm run build +TIME_SAFARI_APP_TITLE="TimeSafari_Test" VITE_APP_SERVER=https://test.timesafari.app VITE_BVC_MEETUPS_PROJECT_CLAIM_ID=https://endorser.ch/entity/01HWE8FWHQ1YGP7GFZYYPS272F VITE_DEFAULT_ENDORSER_API_SERVER=https://test-api.endorser.ch VITE_DEFAULT_IMAGE_API_SERVER=https://test-image-api.timesafari.app VITE_DEFAULT_PARTNER_API_SERVER=https://test-partner-api.endorser.ch VITE_DEFAULT_PUSH_SERVER=https://test.timesafari.app VITE_PASSKEYS_ENABLED=true npm run build ``` ... and transfer to the test server: diff --git a/src/constants/app.ts b/src/constants/app.ts index b49d3e34..3e9ebc4c 100644 --- a/src/constants/app.ts +++ b/src/constants/app.ts @@ -43,7 +43,7 @@ export const DEFAULT_PARTNER_API_SERVER = AppString.TEST_PARTNER_API_SERVER; export const DEFAULT_PUSH_SERVER = - window.location.protocol + "//" + window.location.host; + import.meta.env.VITE_DEFAULT_PUSH_SERVER || "https://timesafari.app"; export const IMAGE_TYPE_PROFILE = "profile"; From 8b7451330f547d469529c0653c90b7474fb0207f Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Mon, 26 May 2025 15:50:37 -0600 Subject: [PATCH 22/92] remove possibility of failing a migration script and then succeeding on later ones --- src/services/migrationService.ts | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/services/migrationService.ts b/src/services/migrationService.ts index b82b8d4e..d571f1ba 100644 --- a/src/services/migrationService.ts +++ b/src/services/migrationService.ts @@ -54,16 +54,11 @@ export class MigrationService { // Run pending migrations in order for (const migration of this.migrations) { if (!executedMigrations.has(migration.name)) { - try { - await sqlExec(migration.sql); - await sqlExec("INSERT INTO migrations (name) VALUES (?)", [ - migration.name, - ]); - logger.log(`Migration ${migration.name} executed successfully`); - } catch (error) { - logger.error(`Error executing migration ${migration.name}:`, error); - throw error; - } + await sqlExec(migration.sql); + await sqlExec("INSERT INTO migrations (name) VALUES (?)", [ + migration.name, + ]); + logger.log(`Migration ${migration.name} executed successfully`); } } } From 655c5188a4606cda9dadf00094bc4d2ccde52904 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Mon, 26 May 2025 16:28:33 -0600 Subject: [PATCH 23/92] add queueing to the DB service so that requests get processed in order --- src/services/AbsurdSqlDatabaseService.ts | 82 ++++++++++++++++++++++-- 1 file changed, 76 insertions(+), 6 deletions(-) diff --git a/src/services/AbsurdSqlDatabaseService.ts b/src/services/AbsurdSqlDatabaseService.ts index 3db18900..89add11d 100644 --- a/src/services/AbsurdSqlDatabaseService.ts +++ b/src/services/AbsurdSqlDatabaseService.ts @@ -19,11 +19,21 @@ interface AbsurdSqlDatabase { ) => Promise<{ changes: number; lastId?: number }>; } +interface QueuedOperation { + type: 'run' | 'query' | 'getOneRow' | 'getAll'; + sql: string; + params: unknown[]; + resolve: (value: any) => void; + reject: (reason: any) => void; +} + class AbsurdSqlDatabaseService implements DatabaseService { private static instance: AbsurdSqlDatabaseService | null = null; private db: AbsurdSqlDatabase | null; private initialized: boolean; private initializationPromise: Promise | null = null; + private operationQueue: QueuedOperation[] = []; + private isProcessingQueue: boolean = false; private constructor() { this.db = null; @@ -101,6 +111,68 @@ class AbsurdSqlDatabaseService implements DatabaseService { await runMigrations(sqlExec); this.initialized = true; + + // Start processing the queue after initialization + this.processQueue(); + } + + private async processQueue(): Promise { + if (this.isProcessingQueue || !this.initialized || !this.db) { + return; + } + + this.isProcessingQueue = true; + + while (this.operationQueue.length > 0) { + const operation = this.operationQueue.shift(); + if (!operation) continue; + + try { + let result; + switch (operation.type) { + case 'run': + result = await this.db.run(operation.sql, operation.params); + break; + case 'query': + result = await this.db.exec(operation.sql, operation.params); + break; + case 'getOneRow': + const queryResult = await this.db.exec(operation.sql, operation.params); + result = queryResult[0]?.values[0]; + break; + case 'getAll': + const allResult = await this.db.exec(operation.sql, operation.params); + result = allResult[0]?.values || []; + break; + } + operation.resolve(result); + } catch (error) { + operation.reject(error); + } + } + + this.isProcessingQueue = false; + } + + private async queueOperation( + type: QueuedOperation['type'], + sql: string, + params: unknown[] = [], + ): Promise { + return new Promise((resolve, reject) => { + this.operationQueue.push({ + type, + sql, + params, + resolve, + reject, + }); + + // If we're already initialized, start processing the queue + if (this.initialized && this.db) { + this.processQueue(); + } + }); } private async waitForInitialization(): Promise { @@ -133,13 +205,13 @@ class AbsurdSqlDatabaseService implements DatabaseService { params: unknown[] = [], ): Promise<{ changes: number; lastId?: number }> { await this.waitForInitialization(); - return this.db!.run(sql, params); + return this.queueOperation<{ changes: number; lastId?: number }>('run', sql, params); } // Note that the resulting array may be empty if there are no results from the query async query(sql: string, params: unknown[] = []): Promise { await this.waitForInitialization(); - return this.db!.exec(sql, params); + return this.queueOperation('query', sql, params); } async getOneRow( @@ -147,14 +219,12 @@ class AbsurdSqlDatabaseService implements DatabaseService { params: unknown[] = [], ): Promise { await this.waitForInitialization(); - const result = await this.db!.exec(sql, params); - return result[0]?.values[0]; + return this.queueOperation('getOneRow', sql, params); } async getAll(sql: string, params: unknown[] = []): Promise { await this.waitForInitialization(); - const result = await this.db!.exec(sql, params); - return result[0]?.values || []; + return this.queueOperation('getAll', sql, params); } } From b6b95cb0d0ec0ae9043e2fd72aa4df1fc40c3a31 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Mon, 26 May 2025 16:29:10 -0600 Subject: [PATCH 24/92] remove unused redirect to start page (now that we're creating an ID up front) --- src/router/index.ts | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/src/router/index.ts b/src/router/index.ts index a3d4907f..0b9aa52b 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -2,35 +2,11 @@ import { createRouter, createWebHistory, createMemoryHistory, - NavigationGuardNext, RouteLocationNormalized, RouteRecordRaw, } from "vue-router"; -import { accountsDBPromise } from "../db/index"; import { logger } from "../utils/logger"; -/** - * - * @param to :RouteLocationNormalized - * @param from :RouteLocationNormalized - * @param next :NavigationGuardNext - */ -const enterOrStart = async ( - to: RouteLocationNormalized, - from: RouteLocationNormalized, - next: NavigationGuardNext, -) => { - // one of the few times we use accountsDBPromise directly; try to avoid more usage - const accountsDB = await accountsDBPromise; - const num_accounts = await accountsDB.accounts.count(); - - if (num_accounts > 0) { - next(); - } else { - next({ name: "start" }); - } -}; - const routes: Array = [ { path: "/account", @@ -216,7 +192,6 @@ const routes: Array = [ path: "/projects", name: "projects", component: () => import("../views/ProjectsView.vue"), - beforeEnter: enterOrStart, }, { path: "/quick-action-bvc", From 5d8175aeebfff56bdbfc4a33b529e78c3997d274 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Mon, 26 May 2025 19:03:20 -0600 Subject: [PATCH 25/92] add encryption for the two SQL columns, replace basic DB utils, add USE_DEXIE_DB flag, and start adding SQL everywhere --- doc/secure-storage-implementation.md | 98 ++++++++++++++ src/constants/app.ts | 2 + src/db-sql/migration.ts | 36 ++++- src/db/databaseUtil.ts | 196 +++++++++++++++++++++++++++ src/db/index.ts | 4 +- src/libs/crypto/index.ts | 99 +++++++++++++- src/libs/util.ts | 35 +++-- src/views/TestView.vue | 26 +++- 8 files changed, 468 insertions(+), 28 deletions(-) create mode 100644 src/db/databaseUtil.ts diff --git a/doc/secure-storage-implementation.md b/doc/secure-storage-implementation.md index 17bacbdc..3aedb1dd 100644 --- a/doc/secure-storage-implementation.md +++ b/doc/secure-storage-implementation.md @@ -144,6 +144,104 @@ try { } ``` +#### A. Modifying Code + +When converting from Dexie.js to SQL-based implementation, follow these patterns: + +1. **Database Access Pattern** + ```typescript + // Before (Dexie) + const result = await db.table.where("field").equals(value).first(); + + // After (SQL) + const platform = PlatformServiceFactory.getInstance(); + const result = await platform.dbQuery( + "SELECT * FROM table WHERE field = ?", + [value] + ); + ``` + +2. **Update Operations** + ```typescript + // Before (Dexie) + await db.table.where("id").equals(id).modify(changes); + + // After (SQL) + const { sql, params } = generateUpdateStatement( + changes, + "table", + "id = ?", + [id] + ); + await platform.dbExec(sql, params); + ``` + +3. **Insert Operations** + ```typescript + // Before (Dexie) + await db.table.add(item); + + // After (SQL) + const columns = Object.keys(item); + const values = Object.values(item); + const placeholders = values.map(() => '?').join(', '); + const sql = `INSERT INTO table (${columns.join(', ')}) VALUES (${placeholders})`; + await platform.dbExec(sql, values); + ``` + +4. **Delete Operations** + ```typescript + // Before (Dexie) + await db.table.where("id").equals(id).delete(); + + // After (SQL) + await platform.dbExec("DELETE FROM table WHERE id = ?", [id]); + ``` + +5. **Result Processing** + ```typescript + // Before (Dexie) + const items = await db.table.toArray(); + + // After (SQL) + const result = await platform.dbQuery("SELECT * FROM table"); + const items = mapColumnsToValues(result.columns, result.values); + ``` + +Key Considerations: +1. Always use parameterized queries to prevent SQL injection +2. Use the `generateUpdateStatement` helper for update operations +3. Use the `mapColumnsToValues` helper for processing query results +4. Handle transactions explicitly for batch operations +5. Use appropriate error handling with the StorageError class +6. Consider platform-specific capabilities when implementing features + +Example Migration: +```typescript +// Before (Dexie) +export async function updateSettings(settings: Settings): Promise { + await db.settings.put(settings); +} + +// After (SQL) +export async function updateSettings(settings: Settings): Promise { + const platform = PlatformServiceFactory.getInstance(); + const { sql, params } = generateUpdateStatement( + settings, + "settings", + "id = ?", + [settings.id] + ); + await platform.dbExec(sql, params); +} +``` + +Remember to: +- Create database access code to use the platform service, putting it in front of the Dexie version +- Instead of removing Dexie-specific code, keep it; if we use the results of the query, then check the USE_DEXIE_DB from app.ts and if it's true then use that instead of the SQL code. +- Test thoroughly after migration +- Consider data migration needs, and warn if there are any potential migration problems + ### 3. Platform Detection ```typescript diff --git a/src/constants/app.ts b/src/constants/app.ts index 3e9ebc4c..6cfb4996 100644 --- a/src/constants/app.ts +++ b/src/constants/app.ts @@ -50,6 +50,8 @@ export const IMAGE_TYPE_PROFILE = "profile"; export const PASSKEYS_ENABLED = !!import.meta.env.VITE_PASSKEYS_ENABLED || false; +export const USE_DEXIE_DB = true; + /** * The possible values for "group" and "type" are in App.vue. * Some of this comes from the notiwind package, some is custom. diff --git a/src/db-sql/migration.ts b/src/db-sql/migration.ts index e9a0474e..ab252c16 100644 --- a/src/db-sql/migration.ts +++ b/src/db-sql/migration.ts @@ -1,5 +1,31 @@ import migrationService from "../services/migrationService"; import type { QueryExecResult, SqlValue } from "../interfaces/database"; +import { DEFAULT_ENDORSER_API_SERVER } from "@/constants/app"; + +// Generate a random secret for the secret table + +// It's not really secure to maintain the secret next to the user's data. +// However, until we have better hooks into a real wallet or reliable secure +// storage, we'll do this for user convenience. As they sign more records +// and integrate with more people, they'll value it more and want to be more +// secure, so we'll prompt them to take steps to back it up, properly encrypt, +// etc. At the beginning, we'll prompt for a password, then we'll prompt for a +// PWA so it's not in a browser... and then we hope to be integrated with a +// real wallet or something else more secure. + +// One might ask: why encrypt at all? We figure a basic encryption is better +// than none. Plus, we expect to support their own password or keystore or +// external wallet as better signing options in the future, so it's gonna be +// important to have the structure where each account access might require +// user action. + +// (Once upon a time we stored the secret in localStorage, but it frequently +// got erased, even though the IndexedDB still had the identity data. This +// ended up throwing lots of errors to the user... and they'd end up in a state +// where they couldn't take action because they couldn't unlock that identity.) + +const randomBytes = crypto.getRandomValues(new Uint8Array(32)); +const secret = btoa(String.fromCharCode(...randomBytes)); // Each migration can include multiple SQL statements (with semicolons) const MIGRATIONS = [ @@ -12,8 +38,8 @@ const MIGRATIONS = [ dateCreated TEXT NOT NULL, derivationPath TEXT, did TEXT NOT NULL, - identity TEXT, - mnemonic TEXT, + identityEncrBase64 TEXT, -- encrypted & base64-encoded + mnemonicEncrBase64 TEXT, -- encrypted & base64-encoded passkeyCredIdHex TEXT, publicKeyHex TEXT NOT NULL ); @@ -22,9 +48,11 @@ const MIGRATIONS = [ CREATE TABLE IF NOT EXISTS secret ( id INTEGER PRIMARY KEY AUTOINCREMENT, - secret TEXT NOT NULL + secretBase64 TEXT NOT NULL ); + INSERT INTO secret (id, secretBase64) VALUES (1, '${secret}'); + CREATE TABLE IF NOT EXISTS settings ( id INTEGER PRIMARY KEY AUTOINCREMENT, accountDid TEXT, @@ -59,6 +87,8 @@ const MIGRATIONS = [ CREATE INDEX IF NOT EXISTS idx_settings_accountDid ON settings(accountDid); + INSERT INTO settings (id, apiServer) VALUES (1, '${DEFAULT_ENDORSER_API_SERVER}'); + CREATE TABLE IF NOT EXISTS contacts ( id INTEGER PRIMARY KEY AUTOINCREMENT, did TEXT NOT NULL, diff --git a/src/db/databaseUtil.ts b/src/db/databaseUtil.ts new file mode 100644 index 00000000..4c803114 --- /dev/null +++ b/src/db/databaseUtil.ts @@ -0,0 +1,196 @@ +import { PlatformServiceFactory } from "@/services/PlatformServiceFactory"; +import { MASTER_SETTINGS_KEY, Settings } from "./tables/settings"; +import { logger } from "@/utils/logger"; +import { DEFAULT_ENDORSER_API_SERVER } from "@/constants/app"; + +export async function updateDefaultSettings( + settingsChanges: Settings, +): Promise { + delete settingsChanges.accountDid; // just in case + // ensure there is no "id" that would override the key + delete settingsChanges.id; + try { + const platformService = PlatformServiceFactory.getInstance(); + const { sql, params } = generateUpdateStatement(settingsChanges, "settings", "id = ?", [MASTER_SETTINGS_KEY]); + const result = await platformService.dbExec(sql, params); + return result.changes === 1; + } catch (error) { + logger.error("Error updating default settings:", error); + if (error instanceof Error) { + throw error; // Re-throw if it's already an Error with a message + } else { + throw new Error( + `Failed to update settings. We recommend you try again or restart the app.`, + ); + } + } +} + +const DEFAULT_SETTINGS: Settings = { + id: MASTER_SETTINGS_KEY, + activeDid: undefined, + apiServer: DEFAULT_ENDORSER_API_SERVER, +}; + +// retrieves default settings +export async function retrieveSettingsForDefaultAccount(): Promise { + const platform = PlatformServiceFactory.getInstance(); + const result = await platform.dbQuery("SELECT * FROM settings WHERE id = ?", MASTER_SETTINGS_KEY) + if (!result) { + return DEFAULT_SETTINGS; + } else { + return mapColumnsToValues(result.columns, result.values)[0] as Settings; + } +} + +export async function retrieveSettingsForActiveAccount(): Promise { + const defaultSettings = await retrieveSettingsForDefaultAccount(); + if (!defaultSettings.activeDid) { + return defaultSettings; + } else { + const platform = PlatformServiceFactory.getInstance(); + const result = await platform.dbQuery( + "SELECT * FROM settings WHERE accountDid = ?", + [defaultSettings.activeDid] + ); + const overrideSettings = result ? mapColumnsToValues(result.columns, result.values)[0] as Settings : {}; + return { ...defaultSettings, ...overrideSettings }; + } +} + +export async function updateAccountSettings( + accountDid: string, + settingsChanges: Settings, +): Promise { + settingsChanges.accountDid = accountDid; + delete settingsChanges.id; // key off account, not ID + + const platform = PlatformServiceFactory.getInstance(); + + // First try to update existing record + const { sql: updateSql, params: updateParams } = generateUpdateStatement( + settingsChanges, + "settings", + "accountDid = ?", + [accountDid] + ); + + const updateResult = await platform.dbExec(updateSql, updateParams); + + // If no record was updated, insert a new one + if (updateResult.changes === 1) { + return true; + } else { + const columns = Object.keys(settingsChanges); + const values = Object.values(settingsChanges); + const placeholders = values.map(() => '?').join(', '); + + const insertSql = `INSERT INTO settings (${columns.join(', ')}) VALUES (${placeholders})`; + const result = await platform.dbExec(insertSql, values); + + return result.changes === 1; + } +} + +export async function logToDb(message: string): Promise { + const platform = PlatformServiceFactory.getInstance(); + const todayKey = new Date().toDateString(); + + // Check if we have any logs for today + const result = await platform.dbQuery( + "SELECT message FROM logs WHERE date = ?", + [todayKey] + ); + + if (!result || result.values.length === 0) { + // If no logs for today, clear all previous logs + await platform.dbExec("DELETE FROM logs"); + + // Insert new log + const fullMessage = `${new Date().toISOString()} ${message}`; + await platform.dbExec( + "INSERT INTO logs (date, message) VALUES (?, ?)", + [todayKey, fullMessage] + ); + } else { + // Append to existing log + const prevMessages = result.values[0][0] as string; + const fullMessage = `${prevMessages}\n${new Date().toISOString()} ${message}`; + + await platform.dbExec( + "UPDATE logs SET message = ? WHERE date = ?", + [fullMessage, todayKey] + ); + } +} + +// similar method is in the sw_scripts/additional-scripts.js file +export async function logConsoleAndDb( + message: string, + isError = false, +): Promise { + if (isError) { + logger.error(`${new Date().toISOString()} ${message}`); + } else { + logger.log(`${new Date().toISOString()} ${message}`); + } + await logToDb(message); +} + +/** + * Generates an SQL UPDATE statement and parameters from a model object. + * @param model The model object containing fields to update + * @param tableName The name of the table to update + * @param whereClause The WHERE clause for the update (e.g. "id = ?") + * @param whereParams Parameters for the WHERE clause + * @returns Object containing the SQL statement and parameters array + */ +function generateUpdateStatement( + model: Record, + tableName: string, + whereClause: string, + whereParams: any[] = [] +): { sql: string; params: any[] } { + // Filter out undefined/null values and create SET clause + const setClauses: string[] = []; + const params: any[] = []; + + Object.entries(model).forEach(([key, value]) => { + if (value !== undefined) { + setClauses.push(`${key} = ?`); + params.push(value); + } + }); + + if (setClauses.length === 0) { + throw new Error('No valid fields to update'); + } + + const sql = `UPDATE ${tableName} SET ${setClauses.join(', ')} WHERE ${whereClause}`; + + return { + sql, + params: [...params, ...whereParams] + }; +} + +/** + * Maps an array of column names to an array of value arrays, creating objects where each column name + * is mapped to its corresponding value. + * @param columns Array of column names to use as object keys + * @param values Array of value arrays, where each inner array corresponds to one row of data + * @returns Array of objects where each object maps column names to their corresponding values + */ +export function mapColumnsToValues( + columns: string[], + values: any[][] +): Record[] { + return values.map(row => { + const obj: Record = {}; + columns.forEach((column, index) => { + obj[column] = row[index]; + }); + return obj; + }); +} + diff --git a/src/db/index.ts b/src/db/index.ts index 9a73e860..0363fe2f 100644 --- a/src/db/index.ts +++ b/src/db/index.ts @@ -26,8 +26,8 @@ type NonsensitiveTables = { }; // Using 'unknown' instead of 'any' for stricter typing and to avoid TypeScript warnings -export type SecretDexie = BaseDexie & T; -export type SensitiveDexie = BaseDexie & T; +type SecretDexie = BaseDexie & T; +type SensitiveDexie = BaseDexie & T; export type NonsensitiveDexie = BaseDexie & T; diff --git a/src/libs/crypto/index.ts b/src/libs/crypto/index.ts index 378cab01..852e348b 100644 --- a/src/libs/crypto/index.ts +++ b/src/libs/crypto/index.ts @@ -273,7 +273,7 @@ export async function decryptMessage(encryptedJson: string, password: string) { } // Test function to verify encryption/decryption -export async function testEncryptionDecryption() { +export async function testMessageEncryptionDecryption() { try { const testMessage = "Hello, this is a test message! 🚀"; const testPassword = "myTestPassword123"; @@ -299,9 +299,102 @@ export async function testEncryptionDecryption() { logger.log("\nTesting with wrong password..."); try { await decryptMessage(encrypted, "wrongPassword"); - logger.log("Should not reach here"); + logger.log("Incorrectly decrypted with wrong password ❌"); } catch (error) { - logger.log("Correctly failed with wrong password ✅"); + logger.log("Correctly failed to decrypt with wrong password ✅"); + } + + return success; + } catch (error) { + logger.error("Test failed with error:", error); + return false; + } +} + +// Simple encryption/decryption using Node's crypto +export async function simpleEncrypt(text: string, secret: string): Promise { + const iv = crypto.getRandomValues(new Uint8Array(16)); + + // Derive a 256-bit key from the secret using SHA-256 + const keyData = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(secret)); + const key = await crypto.subtle.importKey( + 'raw', + keyData, + { name: 'AES-GCM' }, + false, + ['encrypt'] + ); + + const encrypted = await crypto.subtle.encrypt( + { name: 'AES-GCM', iv }, + key, + new TextEncoder().encode(text) + ); + + // Combine IV and encrypted data + const result = new Uint8Array(iv.length + encrypted.byteLength); + result.set(iv); + result.set(new Uint8Array(encrypted), iv.length); + + return btoa(String.fromCharCode(...result)); +} + +export async function simpleDecrypt(encryptedText: string, secret: string): Promise { + const data = Uint8Array.from(atob(encryptedText), c => c.charCodeAt(0)); + + // Extract IV and encrypted data + const iv = data.slice(0, 16); + const encrypted = data.slice(16); + + // Derive the same 256-bit key from the secret using SHA-256 + const keyData = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(secret)); + const key = await crypto.subtle.importKey( + 'raw', + keyData, + { name: 'AES-GCM' }, + false, + ['decrypt'] + ); + + const decrypted = await crypto.subtle.decrypt( + { name: 'AES-GCM', iv }, + key, + encrypted + ); + + return new TextDecoder().decode(decrypted); +} + +// Test function for simple encryption/decryption +export async function testSimpleEncryptionDecryption() { + try { + const testMessage = "Hello, this is a test message! 🚀"; + const testSecret = "myTestSecret123"; + + logger.log("Original message:", testMessage); + + // Test encryption + logger.log("Encrypting..."); + const encrypted = await simpleEncrypt(testMessage, testSecret); + logger.log("Encrypted result:", encrypted); + + // Test decryption + logger.log("Decrypting..."); + const decrypted = await simpleDecrypt(encrypted, testSecret); + logger.log("Decrypted result:", decrypted); + + // Verify + const success = testMessage === decrypted; + logger.log("Test " + (success ? "PASSED ✅" : "FAILED ❌")); + logger.log("Messages match:", success); + + // Test with wrong secret + logger.log("\nTesting with wrong secret..."); + try { + await simpleDecrypt(encrypted, "wrongSecret"); + logger.log("Incorrectly decrypted with wrong secret ❌"); + } catch (error) { + logger.log("Correctly failed to decrypt with wrong secret ✅"); } return success; diff --git a/src/libs/util.ts b/src/libs/util.ts index 49b7eb66..9d0a1f36 100644 --- a/src/libs/util.ts +++ b/src/libs/util.ts @@ -5,7 +5,7 @@ import { Buffer } from "buffer"; import * as R from "ramda"; import { useClipboard } from "@vueuse/core"; -import { DEFAULT_PUSH_SERVER, NotificationIface } from "../constants/app"; +import { DEFAULT_PUSH_SERVER, NotificationIface, USE_DEXIE_DB } from "../constants/app"; import { accountsDBPromise, retrieveSettingsForActiveAccount, @@ -14,6 +14,7 @@ import { } from "../db/index"; import { Account } from "../db/tables/accounts"; import { Contact } from "../db/tables/contacts"; +import * as databaseUtil from "../db/databaseUtil"; import { DEFAULT_PASSKEY_EXPIRATION_MINUTES } from "../db/tables/settings"; import { deriveAddress, generateSeed, newIdentifier } from "../libs/crypto"; import * as serverUtil from "../libs/endorserServer"; @@ -541,16 +542,6 @@ export const generateSaveAndActivateIdentity = async (): Promise => { // one of the few times we use accountsDBPromise directly; try to avoid more usage try { - const accountsDB = await accountsDBPromise; - await accountsDB.accounts.add({ - dateCreated: new Date().toISOString(), - derivationPath: derivationPath, - did: newId.did, - identity: identity, - mnemonic: mnemonic, - publicKeyHex: newId.keys[0].publicKeyHex, - }); - // add to the new sql db const platformService = PlatformServiceFactory.getInstance(); await platformService.dbExec( @@ -565,15 +556,31 @@ export const generateSaveAndActivateIdentity = async (): Promise => { newId.keys[0].publicKeyHex, ], ); - - await updateDefaultSettings({ activeDid: newId.did }); + await databaseUtil.updateDefaultSettings({ activeDid: newId.did }); + + if (USE_DEXIE_DB) { + const accountsDB = await accountsDBPromise; + await accountsDB.accounts.add({ + dateCreated: new Date().toISOString(), + derivationPath: derivationPath, + did: newId.did, + identity: identity, + mnemonic: mnemonic, + publicKeyHex: newId.keys[0].publicKeyHex, + }); + + await updateDefaultSettings({ activeDid: newId.did }); + } } catch (error) { logger.error("Failed to update default settings:", error); throw new Error( "Failed to set default settings. Please try again or restart the app.", ); } - await updateAccountSettings(newId.did, { isRegistered: false }); + await databaseUtil.updateAccountSettings(newId.did, { isRegistered: false }); + if (USE_DEXIE_DB) { + await updateAccountSettings(newId.did, { isRegistered: false }); + } return newId.did; }; diff --git a/src/views/TestView.vue b/src/views/TestView.vue index fc3a8f98..7eb431d0 100644 --- a/src/views/TestView.vue +++ b/src/views/TestView.vue @@ -285,11 +285,20 @@
- Result: {{ encryptionTestResult }} + Result: {{ messageEncryptionTestResult }} +
+
+ + Result: {{ simpleEncryptionTestResult }}
@@ -341,7 +350,8 @@ export default class Help extends Vue { $router!: Router; // for encryption/decryption - encryptionTestResult?: boolean; + messageEncryptionTestResult?: boolean; + simpleEncryptionTestResult?: boolean; // for file import fileName?: string; @@ -434,8 +444,12 @@ export default class Help extends Vue { this.credIdHex = account.passkeyCredIdHex; } - public async testEncryptionDecryption() { - this.encryptionTestResult = await cryptoLib.testEncryptionDecryption(); + public async testMessageEncryptionDecryption() { + this.messageEncryptionTestResult = await cryptoLib.testMessageEncryptionDecryption(); + } + + public async testSimpleEncryptionDecryption() { + this.simpleEncryptionTestResult = await cryptoLib.testSimpleEncryptionDecryption(); } public async createJwtSimplewebauthn() { From 11f2527b040bae9238f781ec865c9a84a25ca81c Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Mon, 26 May 2025 20:26:28 -0600 Subject: [PATCH 26/92] start adding the SQL approach to files, also using the Dexie approach if desired --- doc/secure-storage-implementation.md | 15 +- src/constants/app.ts | 3 +- src/db/databaseUtil.ts | 65 ++++---- src/libs/endorserServer.ts | 11 +- src/views/AccountViewView.vue | 213 +++++++++++++++++++++------ 5 files changed, 224 insertions(+), 83 deletions(-) diff --git a/doc/secure-storage-implementation.md b/doc/secure-storage-implementation.md index 3aedb1dd..e1fabd4d 100644 --- a/doc/secure-storage-implementation.md +++ b/doc/secure-storage-implementation.md @@ -209,12 +209,8 @@ When converting from Dexie.js to SQL-based implementation, follow these patterns ``` Key Considerations: -1. Always use parameterized queries to prevent SQL injection -2. Use the `generateUpdateStatement` helper for update operations -3. Use the `mapColumnsToValues` helper for processing query results -4. Handle transactions explicitly for batch operations -5. Use appropriate error handling with the StorageError class -6. Consider platform-specific capabilities when implementing features +- Use the `generateUpdateStatement` helper for update operations +- Use the `mapColumnsToValues` helper for processing query results Example Migration: ```typescript @@ -238,7 +234,12 @@ export async function updateSettings(settings: Settings): Promise { Remember to: - Create database access code to use the platform service, putting it in front of the Dexie version -- Instead of removing Dexie-specific code, keep it; if we use the results of the query, then check the USE_DEXIE_DB from app.ts and if it's true then use that instead of the SQL code. +- Instead of removing Dexie-specific code, keep it. + + - For creates & updates & deletes, the duplicate code is fine. + + - For queries where we use the results, make the setting from SQL into a 'let' variable, then wrap the Dexie code in a check for USE_DEXIE_DB from app.ts and if it's true then use that result instead of the SQL code's result. + - Test thoroughly after migration - Consider data migration needs, and warn if there are any potential migration problems diff --git a/src/constants/app.ts b/src/constants/app.ts index 6cfb4996..610d1326 100644 --- a/src/constants/app.ts +++ b/src/constants/app.ts @@ -7,6 +7,7 @@ export enum AppString { // This is used in titles and verbiage inside the app. // There is also an app name without spaces, for packaging in the package.json file used in the manifest. APP_NAME = "Time Safari", + APP_NAME_NO_SPACES = "TimeSafari", PROD_ENDORSER_API_SERVER = "https://api.endorser.ch", TEST_ENDORSER_API_SERVER = "https://test-api.endorser.ch", @@ -50,7 +51,7 @@ export const IMAGE_TYPE_PROFILE = "profile"; export const PASSKEYS_ENABLED = !!import.meta.env.VITE_PASSKEYS_ENABLED || false; -export const USE_DEXIE_DB = true; +export const USE_DEXIE_DB = false; /** * The possible values for "group" and "type" are in App.vue. diff --git a/src/db/databaseUtil.ts b/src/db/databaseUtil.ts index 4c803114..b2d0276d 100644 --- a/src/db/databaseUtil.ts +++ b/src/db/databaseUtil.ts @@ -26,38 +26,6 @@ export async function updateDefaultSettings( } } -const DEFAULT_SETTINGS: Settings = { - id: MASTER_SETTINGS_KEY, - activeDid: undefined, - apiServer: DEFAULT_ENDORSER_API_SERVER, -}; - -// retrieves default settings -export async function retrieveSettingsForDefaultAccount(): Promise { - const platform = PlatformServiceFactory.getInstance(); - const result = await platform.dbQuery("SELECT * FROM settings WHERE id = ?", MASTER_SETTINGS_KEY) - if (!result) { - return DEFAULT_SETTINGS; - } else { - return mapColumnsToValues(result.columns, result.values)[0] as Settings; - } -} - -export async function retrieveSettingsForActiveAccount(): Promise { - const defaultSettings = await retrieveSettingsForDefaultAccount(); - if (!defaultSettings.activeDid) { - return defaultSettings; - } else { - const platform = PlatformServiceFactory.getInstance(); - const result = await platform.dbQuery( - "SELECT * FROM settings WHERE accountDid = ?", - [defaultSettings.activeDid] - ); - const overrideSettings = result ? mapColumnsToValues(result.columns, result.values)[0] as Settings : {}; - return { ...defaultSettings, ...overrideSettings }; - } -} - export async function updateAccountSettings( accountDid: string, settingsChanges: Settings, @@ -92,6 +60,39 @@ export async function updateAccountSettings( } } +const DEFAULT_SETTINGS: Settings = { + id: MASTER_SETTINGS_KEY, + activeDid: undefined, + apiServer: DEFAULT_ENDORSER_API_SERVER, +}; + +// retrieves default settings +export async function retrieveSettingsForDefaultAccount(): Promise { + const platform = PlatformServiceFactory.getInstance(); + const result = await platform.dbQuery("SELECT * FROM settings WHERE id = ?", [MASTER_SETTINGS_KEY]) + if (!result) { + return DEFAULT_SETTINGS; + } else { + return mapColumnsToValues(result.columns, result.values)[0] as Settings; + } +} + +export async function retrieveSettingsForActiveAccount(): Promise { + const defaultSettings = await retrieveSettingsForDefaultAccount(); + if (!defaultSettings.activeDid) { + return defaultSettings; + } else { + const platform = PlatformServiceFactory.getInstance(); + const result = await platform.dbQuery( + "SELECT * FROM settings WHERE accountDid = ?", + [defaultSettings.activeDid] + ); + const overrideSettings = result ? mapColumnsToValues(result.columns, result.values)[0] as Settings : {}; + const overrideSettingsFiltered = Object.fromEntries(Object.entries(overrideSettings).filter(([_, v]) => v !== null)); + return { ...defaultSettings, ...overrideSettingsFiltered }; + } +} + export async function logToDb(message: string): Promise { const platform = PlatformServiceFactory.getInstance(); const todayKey = new Date().toDateString(); diff --git a/src/libs/endorserServer.ts b/src/libs/endorserServer.ts index ec27db2d..6cfd0e98 100644 --- a/src/libs/endorserServer.ts +++ b/src/libs/endorserServer.ts @@ -26,6 +26,7 @@ import { DEFAULT_IMAGE_API_SERVER, NotificationIface, APP_SERVER, + USE_DEXIE_DB, } from "../constants/app"; import { Contact } from "../db/tables/contacts"; import { accessToken, deriveAddress, nextDerivationPath } from "../libs/crypto"; @@ -49,6 +50,7 @@ import { CreateAndSubmitClaimResult, } from "../interfaces"; import { logger } from "../utils/logger"; +import { PlatformServiceFactory } from "@/services/PlatformServiceFactory"; /** * Standard context for schema.org data @@ -1363,7 +1365,14 @@ export async function setVisibilityUtil( if (resp.status === 200) { const success = resp.data.success; if (success) { - db.contacts.update(contact.did, { seesMe: visibility }); + const platformService = PlatformServiceFactory.getInstance(); + await platformService.dbExec( + "UPDATE contacts SET seesMe = ? WHERE did = ?", + [visibility, contact.did], + ); + if (USE_DEXIE_DB) { + db.contacts.update(contact.did, { seesMe: visibility }); + } } return { success }; } else { diff --git a/src/views/AccountViewView.vue b/src/views/AccountViewView.vue index 543644b4..bd6916ad 100644 --- a/src/views/AccountViewView.vue +++ b/src/views/AccountViewView.vue @@ -999,6 +999,7 @@ import { DEFAULT_PUSH_SERVER, IMAGE_TYPE_PROFILE, NotificationIface, + USE_DEXIE_DB, } from "../constants/app"; import { db, @@ -1012,6 +1013,7 @@ import { DEFAULT_PASSKEY_EXPIRATION_MINUTES, MASTER_SETTINGS_KEY, } from "../db/tables/settings"; +import * as databaseUtil from "../db/databaseUtil"; import { clearPasskeyToken, EndorserRateLimits, @@ -1030,6 +1032,7 @@ import { } from "../libs/util"; import { UserProfile } from "@/libs/partnerServer"; import { logger } from "../utils/logger"; +import { PlatformServiceFactory } from "@/services/PlatformServiceFactory"; const inputImportFileNameRef = ref(); @@ -1145,9 +1148,14 @@ export default class AccountViewView extends Vue { if (error.status === 404) { // this is ok: the profile is not yet created } else { - logConsoleAndDb( + databaseUtil.logConsoleAndDb( "Error loading profile: " + errorStringForLog(error), ); + if (USE_DEXIE_DB) { + logConsoleAndDb( + "Error loading profile: " + errorStringForLog(error), + ); + } this.$notify( { group: "alert", @@ -1224,8 +1232,12 @@ export default class AccountViewView extends Vue { * Initializes component state with values from the database or defaults. */ async initializeState() { - await db.open(); - const settings = await retrieveSettingsForActiveAccount(); + let settings = await databaseUtil.retrieveSettingsForActiveAccount(); + if (USE_DEXIE_DB) { + await db.open(); + settings = await retrieveSettingsForActiveAccount(); + } + console.log("activeDid", settings.activeDid, "settings", settings); this.activeDid = settings.activeDid || ""; this.apiServer = settings.apiServer || ""; @@ -1268,42 +1280,67 @@ export default class AccountViewView extends Vue { async toggleShowContactAmounts() { this.showContactGives = !this.showContactGives; - await db.open(); - await db.settings.update(MASTER_SETTINGS_KEY, { + await databaseUtil.updateDefaultSettings({ showContactGivesInline: this.showContactGives, }); + if (USE_DEXIE_DB) { + await db.open(); + await db.settings.update(MASTER_SETTINGS_KEY, { + showContactGivesInline: this.showContactGives, + }); + } } async toggleShowGeneralAdvanced() { this.showGeneralAdvanced = !this.showGeneralAdvanced; - await db.open(); - await db.settings.update(MASTER_SETTINGS_KEY, { + await databaseUtil.updateDefaultSettings({ showGeneralAdvanced: this.showGeneralAdvanced, }); + if (USE_DEXIE_DB) { + await db.open(); + await db.settings.update(MASTER_SETTINGS_KEY, { + showGeneralAdvanced: this.showGeneralAdvanced, + }); + } } async toggleProdWarning() { this.warnIfProdServer = !this.warnIfProdServer; - await db.open(); - await db.settings.update(MASTER_SETTINGS_KEY, { + await databaseUtil.updateDefaultSettings({ warnIfProdServer: this.warnIfProdServer, }); + if (USE_DEXIE_DB) { + await db.open(); + await db.settings.update(MASTER_SETTINGS_KEY, { + warnIfProdServer: this.warnIfProdServer, + }); + } } async toggleTestWarning() { this.warnIfTestServer = !this.warnIfTestServer; - await db.open(); - await db.settings.update(MASTER_SETTINGS_KEY, { + await databaseUtil.updateDefaultSettings({ warnIfTestServer: this.warnIfTestServer, }); + if (USE_DEXIE_DB) { + await db.open(); + await db.settings.update(MASTER_SETTINGS_KEY, { + warnIfTestServer: this.warnIfTestServer, + }); + } } async toggleShowShortcutBvc() { this.showShortcutBvc = !this.showShortcutBvc; - await db.open(); - await db.settings.update(MASTER_SETTINGS_KEY, { + await databaseUtil.updateDefaultSettings({ showShortcutBvc: this.showShortcutBvc, }); + if (USE_DEXIE_DB) { + await db.open(); + await db.settings.update(MASTER_SETTINGS_KEY, { + showShortcutBvc: this.showShortcutBvc, + }); + } } readableDate(timeStr: string) { @@ -1314,9 +1351,18 @@ export default class AccountViewView extends Vue { * Processes the identity and updates the component's state. */ async processIdentity() { - const account: Account | undefined = await retrieveAccountMetadata( - this.activeDid, - ); + const platformService = PlatformServiceFactory.getInstance(); + const dbAccount = await platformService.dbQuery("SELECT * FROM accounts WHERE did = ?", [this.activeDid]); + console.log("activeDid", this.activeDid, "dbAccount", dbAccount); + let account: Account | undefined = undefined; + if (dbAccount) { + account = databaseUtil.mapColumnsToValues(dbAccount.columns, dbAccount.values)[0] as Account; + } + if (USE_DEXIE_DB) { + account = await retrieveAccountMetadata( + this.activeDid, + ); + } if (account?.identity) { const identity = JSON.parse(account.identity as string) as IIdentifier; this.publicHex = identity.keys[0].publicKeyHex; @@ -1359,9 +1405,14 @@ export default class AccountViewView extends Vue { this.$refs.pushNotificationPermission as PushNotificationPermission ).open(DAILY_CHECK_TITLE, async (success: boolean, timeText: string) => { if (success) { - await db.settings.update(MASTER_SETTINGS_KEY, { + await databaseUtil.updateDefaultSettings({ notifyingNewActivityTime: timeText, }); + if (USE_DEXIE_DB) { + await db.settings.update(MASTER_SETTINGS_KEY, { + notifyingNewActivityTime: timeText, + }); + } this.notifyingNewActivity = true; this.notifyingNewActivityTime = timeText; } @@ -1375,9 +1426,14 @@ export default class AccountViewView extends Vue { text: "", // unused, only here to satisfy type check callback: async (success) => { if (success) { - await db.settings.update(MASTER_SETTINGS_KEY, { + await databaseUtil.updateDefaultSettings({ notifyingNewActivityTime: "", }); + if (USE_DEXIE_DB) { + await db.settings.update(MASTER_SETTINGS_KEY, { + notifyingNewActivityTime: "", + }); + } this.notifyingNewActivity = false; this.notifyingNewActivityTime = ""; } @@ -1419,10 +1475,16 @@ export default class AccountViewView extends Vue { DIRECT_PUSH_TITLE, async (success: boolean, timeText: string, message?: string) => { if (success) { - await db.settings.update(MASTER_SETTINGS_KEY, { + await databaseUtil.updateDefaultSettings({ notifyingReminderMessage: message, notifyingReminderTime: timeText, }); + if (USE_DEXIE_DB) { + await db.settings.update(MASTER_SETTINGS_KEY, { + notifyingReminderMessage: message, + notifyingReminderTime: timeText, + }); + } this.notifyingReminder = true; this.notifyingReminderMessage = message || ""; this.notifyingReminderTime = timeText; @@ -1438,10 +1500,16 @@ export default class AccountViewView extends Vue { text: "", // unused, only here to satisfy type check callback: async (success) => { if (success) { - await db.settings.update(MASTER_SETTINGS_KEY, { + await databaseUtil.updateDefaultSettings({ notifyingReminderMessage: "", notifyingReminderTime: "", }); + if (USE_DEXIE_DB) { + await db.settings.update(MASTER_SETTINGS_KEY, { + notifyingReminderMessage: "", + notifyingReminderTime: "", + }); + } this.notifyingReminder = false; this.notifyingReminderMessage = ""; this.notifyingReminderTime = ""; @@ -1455,30 +1523,47 @@ export default class AccountViewView extends Vue { public async toggleHideRegisterPromptOnNewContact() { const newSetting = !this.hideRegisterPromptOnNewContact; - await db.open(); - await db.settings.update(MASTER_SETTINGS_KEY, { + await databaseUtil.updateDefaultSettings({ hideRegisterPromptOnNewContact: newSetting, }); + if (USE_DEXIE_DB) { + await db.open(); + await db.settings.update(MASTER_SETTINGS_KEY, { + hideRegisterPromptOnNewContact: newSetting, + }); + } this.hideRegisterPromptOnNewContact = newSetting; } public async updatePasskeyExpiration() { - await db.open(); - await db.settings.update(MASTER_SETTINGS_KEY, { + await databaseUtil.updateDefaultSettings({ passkeyExpirationMinutes: this.passkeyExpirationMinutes, }); + if (USE_DEXIE_DB) { + await db.open(); + await db.settings.update(MASTER_SETTINGS_KEY, { + passkeyExpirationMinutes: this.passkeyExpirationMinutes, + }); + } clearPasskeyToken(); this.passkeyExpirationDescription = tokenExpiryTimeDescription(); } public async turnOffNotifyingFlags() { // should tell the push server as well - await db.open(); - await db.settings.update(MASTER_SETTINGS_KEY, { + await databaseUtil.updateDefaultSettings({ notifyingNewActivityTime: "", notifyingReminderMessage: "", notifyingReminderTime: "", }); + if (USE_DEXIE_DB) { + await db.open(); + await db.settings.update(MASTER_SETTINGS_KEY, { + notifyingNewActivityTime: "", + notifyingReminderMessage: "", + notifyingReminderTime: "", + }); + } this.notifyingNewActivity = false; this.notifyingNewActivityTime = ""; this.notifyingReminder = false; @@ -1518,7 +1603,10 @@ export default class AccountViewView extends Vue { * @returns {Promise} The generated blob object. */ private async generateDatabaseBlob(): Promise { - return await db.export({ prettyJson: true }); + if (USE_DEXIE_DB) { + return await db.export({ prettyJson: true }); + } + throw new Error("Not implemented"); } /** @@ -1539,7 +1627,7 @@ export default class AccountViewView extends Vue { private downloadDatabaseBackup(url: string) { const downloadAnchor = this.$refs.downloadLink as HTMLAnchorElement; downloadAnchor.href = url; - downloadAnchor.download = `${db.name}-backup.json`; + downloadAnchor.download = `${AppString.APP_NAME_NO_SPACES}-backup.json`; downloadAnchor.click(); // doesn't work for some browsers, eg. DuckDuckGo } @@ -1620,7 +1708,8 @@ export default class AccountViewView extends Vue { */ async submitImportFile() { if (inputImportFileNameRef.value != null) { - await db + if (USE_DEXIE_DB) { + await db .delete() .then(async () => { // BulkError: settings.bulkAdd(): 1 of 21 operations failed. Errors: ConstraintError: Key already exists in the object store. @@ -1640,6 +1729,9 @@ export default class AccountViewView extends Vue { -1, ); }); + } else { + throw new Error("Not implemented"); + } } } @@ -1727,7 +1819,13 @@ export default class AccountViewView extends Vue { if (!this.isRegistered) { // the user was not known to be registered, but now they are (because we got no error) so let's record it try { - await updateAccountSettings(did, { isRegistered: true }); + await databaseUtil.updateAccountSettings(did, { isRegistered: true }); + if (USE_DEXIE_DB) { + await db.open(); + await db.settings.update(MASTER_SETTINGS_KEY, { + isRegistered: true, + }); + } this.isRegistered = true; } catch (err) { logger.error("Got an error updating settings:", err); @@ -1787,26 +1885,41 @@ export default class AccountViewView extends Vue { } async onClickSaveApiServer() { - await db.open(); - await db.settings.update(MASTER_SETTINGS_KEY, { + await databaseUtil.updateDefaultSettings({ apiServer: this.apiServerInput, }); + if (USE_DEXIE_DB) { + await db.open(); + await db.settings.update(MASTER_SETTINGS_KEY, { + apiServer: this.apiServerInput, + }); + } this.apiServer = this.apiServerInput; } async onClickSavePartnerServer() { - await db.open(); - await db.settings.update(MASTER_SETTINGS_KEY, { + await databaseUtil.updateDefaultSettings({ partnerApiServer: this.partnerApiServerInput, }); + if (USE_DEXIE_DB) { + await db.open(); + await db.settings.update(MASTER_SETTINGS_KEY, { + partnerApiServer: this.partnerApiServerInput, + }); + } this.partnerApiServer = this.partnerApiServerInput; } async onClickSavePushServer() { - await db.open(); - await db.settings.update(MASTER_SETTINGS_KEY, { + await databaseUtil.updateDefaultSettings({ webPushServer: this.webPushServerInput, }); + if (USE_DEXIE_DB) { + await db.open(); + await db.settings.update(MASTER_SETTINGS_KEY, { + webPushServer: this.webPushServerInput, + }); + } this.webPushServer = this.webPushServerInput; this.$notify( { @@ -1822,10 +1935,15 @@ export default class AccountViewView extends Vue { openImageDialog() { (this.$refs.imageMethodDialog as ImageMethodDialog).open( async (imgUrl) => { - await db.open(); - await db.settings.update(MASTER_SETTINGS_KEY, { + await databaseUtil.updateDefaultSettings({ profileImageUrl: imgUrl, }); + if (USE_DEXIE_DB) { + await db.open(); + await db.settings.update(MASTER_SETTINGS_KEY, { + profileImageUrl: imgUrl, + }); + } this.profileImageUrl = imgUrl; //console.log("Got image URL:", imgUrl); }, @@ -1886,10 +2004,15 @@ export default class AccountViewView extends Vue { // keep the imageUrl in localStorage so the user can try again if they want } - await db.open(); - await db.settings.update(MASTER_SETTINGS_KEY, { + await databaseUtil.updateDefaultSettings({ profileImageUrl: undefined, }); + if (USE_DEXIE_DB) { + await db.open(); + await db.settings.update(MASTER_SETTINGS_KEY, { + profileImageUrl: undefined, + }); + } this.profileImageUrl = undefined; } catch (error) { @@ -1978,7 +2101,10 @@ export default class AccountViewView extends Vue { throw Error("Profile not saved"); } } catch (error) { - logConsoleAndDb("Error saving profile: " + errorStringForLog(error)); + databaseUtil.logConsoleAndDb("Error saving profile: " + errorStringForLog(error)); + if (USE_DEXIE_DB) { + logConsoleAndDb("Error saving profile: " + errorStringForLog(error)); + } const errorMessage: string = error.response?.data?.error?.message || error.response?.data?.error || @@ -2068,7 +2194,10 @@ export default class AccountViewView extends Vue { throw Error("Profile not deleted"); } } catch (error) { - logConsoleAndDb("Error deleting profile: " + errorStringForLog(error)); + databaseUtil.logConsoleAndDb("Error deleting profile: " + errorStringForLog(error)); + if (USE_DEXIE_DB) { + logConsoleAndDb("Error deleting profile: " + errorStringForLog(error)); + } const errorMessage: string = error.response?.data?.error?.message || error.response?.data?.error || From 3c0bdeaed3730a3a1a7aa6dfff547116b800eb52 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Mon, 26 May 2025 20:43:06 -0600 Subject: [PATCH 27/92] remove debugging console statements --- src/views/AccountViewView.vue | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/views/AccountViewView.vue b/src/views/AccountViewView.vue index bd6916ad..feb44fbb 100644 --- a/src/views/AccountViewView.vue +++ b/src/views/AccountViewView.vue @@ -1237,7 +1237,6 @@ export default class AccountViewView extends Vue { await db.open(); settings = await retrieveSettingsForActiveAccount(); } - console.log("activeDid", settings.activeDid, "settings", settings); this.activeDid = settings.activeDid || ""; this.apiServer = settings.apiServer || ""; @@ -1353,7 +1352,6 @@ export default class AccountViewView extends Vue { async processIdentity() { const platformService = PlatformServiceFactory.getInstance(); const dbAccount = await platformService.dbQuery("SELECT * FROM accounts WHERE did = ?", [this.activeDid]); - console.log("activeDid", this.activeDid, "dbAccount", dbAccount); let account: Account | undefined = undefined; if (dbAccount) { account = databaseUtil.mapColumnsToValues(dbAccount.columns, dbAccount.values)[0] as Account; From 0f1ac2b2304308f23bc4673c7db185a3c5ec229a Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Tue, 27 May 2025 03:14:02 +0000 Subject: [PATCH 28/92] fix: move lexical declarations outside case blocks in AbsurdSqlDatabaseService - Move queryResult and allResult declarations outside switch statement - Change const declarations to let since they're now in outer scope - Remove const declarations from inside case blocks This fixes the 'no-case-declarations' linter errors by ensuring variables are declared in a scope that encompasses all case blocks, preventing potential scoping issues. Note: Type definition errors for external modules remain and should be addressed separately. --- package-lock.json | 3034 ++++++++++++++--- src/db/databaseUtil.ts | 88 +- src/libs/crypto/index.ts | 46 +- src/libs/endorserServer.ts | 2 +- src/libs/util.ts | 6 +- src/services/AbsurdSqlDatabaseService.ts | 38 +- src/services/PlatformService.ts | 5 +- .../platforms/CapacitorPlatformService.ts | 5 +- .../platforms/ElectronPlatformService.ts | 5 +- .../platforms/PyWebViewPlatformService.ts | 5 +- src/services/platforms/WebPlatformService.ts | 5 +- src/utils/empty-module.js | 2 +- src/utils/node-modules/crypto.js | 8 +- src/utils/node-modules/fs.js | 10 +- src/utils/node-modules/path.js | 16 +- src/views/AccountViewView.vue | 106 +- src/views/TestView.vue | 6 +- 17 files changed, 2850 insertions(+), 537 deletions(-) diff --git a/package-lock.json b/package-lock.json index 576328e2..9a185b07 100644 --- a/package-lock.json +++ b/package-lock.json @@ -135,6 +135,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@0no-co/graphql.web/-/graphql.web-1.1.2.tgz", "integrity": "sha512-N2NGsU5FLBhT8NZ+3l2YrzZSHITjNXNuDhC4iDiikv0IujaJ0Xc6xIxQZ/Ek3Cb+rgPjnLHYyJm11tInuJn+cw==", + "license": "MIT", "optional": true, "peer": true, "peerDependencies": { @@ -149,13 +150,15 @@ "node_modules/@adraffy/ens-normalize": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", - "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==" + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "license": "MIT" }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -168,6 +171,7 @@ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "devOptional": true, + "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -189,6 +193,7 @@ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", @@ -203,6 +208,7 @@ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.27.2.tgz", "integrity": "sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -212,6 +218,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.1.tgz", "integrity": "sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -242,6 +249,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "devOptional": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -251,6 +259,7 @@ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz", "integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/parser": "^7.27.1", "@babel/types": "^7.27.1", @@ -267,6 +276,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.1.tgz", "integrity": "sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.27.1" }, @@ -279,6 +289,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-validator-option": "^7.27.1", @@ -295,6 +306,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "devOptional": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -304,6 +316,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "devOptional": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -312,13 +325,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "devOptional": true + "devOptional": true, + "license": "ISC" }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz", "integrity": "sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-member-expression-to-functions": "^7.27.1", @@ -340,6 +355,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "devOptional": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -349,6 +365,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz", "integrity": "sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "regexpu-core": "^6.2.0", @@ -366,6 +383,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "devOptional": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -375,6 +393,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz", "integrity": "sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", "@babel/helper-plugin-utils": "^7.22.5", @@ -391,6 +410,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", "integrity": "sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" @@ -404,6 +424,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" @@ -417,6 +438,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz", "integrity": "sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1", @@ -434,6 +456,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/types": "^7.27.1" }, @@ -446,6 +469,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -455,6 +479,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-wrap-function": "^7.27.1", @@ -472,6 +497,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz", "integrity": "sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-member-expression-to-functions": "^7.27.1", "@babel/helper-optimise-call-expression": "^7.27.1", @@ -489,6 +515,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/traverse": "^7.27.1", "@babel/types": "^7.27.1" @@ -501,6 +528,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -509,6 +537,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -518,6 +547,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -527,6 +557,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz", "integrity": "sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.27.1", "@babel/traverse": "^7.27.1", @@ -541,6 +572,7 @@ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.27.1", "@babel/types": "^7.27.1" @@ -553,6 +585,7 @@ "version": "7.25.9", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz", "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -569,6 +602,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -582,6 +616,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -597,6 +632,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -607,6 +643,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT", "optional": true, "peer": true }, @@ -614,6 +651,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -624,6 +662,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -634,6 +673,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -647,6 +687,7 @@ "version": "7.27.2", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", + "license": "MIT", "dependencies": { "@babel/types": "^7.27.1" }, @@ -662,6 +703,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz", "integrity": "sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.27.1" @@ -678,6 +720,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -693,6 +736,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -708,6 +752,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", @@ -725,6 +770,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz", "integrity": "sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/traverse": "^7.27.1" @@ -740,6 +786,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.27.1.tgz", "integrity": "sha512-DTxe4LBPrtFdsWzgpmbBKevg3e9PBy+dXRt19kSbucbZvL2uqtdqwwpluL1jfxYE0wIDTFp1nTy/q6gNLsxXrg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -758,6 +805,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.27.1.tgz", "integrity": "sha512-hjlsMBl1aJc5lp8MoCDEZCiYzlgdRAShOjAfRw6X+GlpLpUPU7c3XNLsKFZbQk/1cRzBlJ7CXg3xJAJMrFa1Uw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -775,6 +823,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", + "license": "MIT", "optional": true, "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", @@ -792,6 +841,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" }, @@ -803,6 +853,7 @@ "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -816,6 +867,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -829,6 +881,7 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -842,6 +895,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -858,6 +912,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz", "integrity": "sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -874,6 +929,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -887,6 +943,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.27.1.tgz", "integrity": "sha512-eBC/3KSekshx19+N40MzjWqJd7KTEdOoLesAfa4IDFI8eRz5a47i5Oszus6zG/cwIXN63YhgLOMSSNJx49sENg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -903,6 +960,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "license": "MIT", "optional": true, "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" @@ -915,6 +973,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.27.1.tgz", "integrity": "sha512-p9OkPbZ5G7UT1MofwYFigGebnrzGJacoBSQM0/6bi/PUMVE+qlWDD/OalvQKbwgQzU6dl0xAv6r4X7Jme0RYxA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -932,6 +991,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz", "integrity": "sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -947,6 +1007,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz", "integrity": "sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -961,6 +1022,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -974,6 +1036,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -987,6 +1050,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1003,6 +1067,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1016,6 +1081,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1029,6 +1095,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1042,6 +1109,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1055,6 +1123,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1068,6 +1137,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1081,6 +1151,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1097,6 +1168,7 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1113,6 +1185,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz", "integrity": "sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1130,6 +1203,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1146,6 +1220,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1161,6 +1236,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz", "integrity": "sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-remap-async-to-generator": "^7.27.1", @@ -1178,6 +1254,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz", "integrity": "sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", @@ -1195,6 +1272,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1210,6 +1288,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.1.tgz", "integrity": "sha512-QEcFlMl9nGTgh1rn2nIeU5bkfb9BAjaQcWbiP4LvKxUot52ABcTkpcyJ7f2Q2U2RuQ84BNLgts3jRme2dTx6Fw==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1225,6 +1304,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz", "integrity": "sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1241,6 +1321,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz", "integrity": "sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1257,6 +1338,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz", "integrity": "sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-compilation-targets": "^7.27.1", @@ -1277,6 +1359,7 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -1286,6 +1369,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz", "integrity": "sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/template": "^7.27.1" @@ -1302,6 +1386,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.1.tgz", "integrity": "sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1317,6 +1402,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz", "integrity": "sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1333,6 +1419,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1348,6 +1435,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz", "integrity": "sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1364,6 +1452,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1379,6 +1468,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz", "integrity": "sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1394,6 +1484,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1408,6 +1499,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.27.1.tgz", "integrity": "sha512-G5eDKsu50udECw7DL2AcsysXiQyB7Nfg521t2OAJ4tbfTJ27doHLeF/vlI1NZGlLdbb/v+ibvtL1YBQqYOwJGg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1426,6 +1518,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" @@ -1442,6 +1535,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", @@ -1459,6 +1553,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz", "integrity": "sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1474,6 +1569,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1489,6 +1585,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz", "integrity": "sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1504,6 +1601,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1519,6 +1617,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1535,6 +1634,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz", "integrity": "sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1551,6 +1651,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz", "integrity": "sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", @@ -1569,6 +1670,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1585,6 +1687,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz", "integrity": "sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1601,6 +1704,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1616,6 +1720,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz", "integrity": "sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1631,6 +1736,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz", "integrity": "sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1646,6 +1752,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.2.tgz", "integrity": "sha512-AIUHD7xJ1mCrj3uPozvtngY3s0xpv7Nu7DoUSnzNY6Xam1Cy4rUznR//pvMHOhQ4AvbCexhbqXCtpxGHOGOO6g==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-plugin-utils": "^7.27.1", @@ -1664,6 +1771,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-replace-supers": "^7.27.1" @@ -1680,6 +1788,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz", "integrity": "sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1695,6 +1804,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz", "integrity": "sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" @@ -1711,6 +1821,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz", "integrity": "sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1726,6 +1837,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz", "integrity": "sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1742,6 +1854,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz", "integrity": "sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.27.1", "@babel/helper-create-class-features-plugin": "^7.27.1", @@ -1759,6 +1872,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1773,6 +1887,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.27.1.tgz", "integrity": "sha512-p9+Vl3yuHPmkirRrg021XiP+EETmPMQTLr6Ayjj85RLNEbb3Eya/4VI0vAdzQG9SEAl2Lnt7fy5lZyMzjYoZQQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1789,6 +1904,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1809,6 +1925,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1825,6 +1942,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1841,6 +1959,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1857,6 +1976,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1875,6 +1995,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.1.tgz", "integrity": "sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1890,6 +2011,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz", "integrity": "sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -1906,6 +2028,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1920,6 +2043,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.1.tgz", "integrity": "sha512-TqGF3desVsTcp3WrJGj4HfKokfCXCLcHpt4PJF0D8/iT6LPd9RS82Upw3KPeyr6B22Lfd3DO8MVrmp0oRkUDdw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -1941,6 +2065,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "optional": true, "peer": true, "bin": { @@ -1952,6 +2077,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1967,6 +2093,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz", "integrity": "sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" @@ -1983,6 +2110,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -1998,6 +2126,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -2013,6 +2142,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -2027,6 +2157,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz", "integrity": "sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -2048,6 +2179,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.27.1" }, @@ -2063,6 +2195,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz", "integrity": "sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -2079,6 +2212,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -2095,6 +2229,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz", "integrity": "sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1" @@ -2111,6 +2246,7 @@ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.27.2.tgz", "integrity": "sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.27.2", "@babel/helper-compilation-targets": "^7.27.2", @@ -2194,6 +2330,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -2203,6 +2340,7 @@ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/types": "^7.4.4", @@ -2216,6 +2354,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -2237,6 +2376,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz", "integrity": "sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -2258,6 +2398,7 @@ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -2267,6 +2408,7 @@ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", @@ -2281,6 +2423,7 @@ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.27.1", @@ -2299,6 +2442,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz", "integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -2318,6 +2462,7 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -2329,6 +2474,7 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -2337,6 +2483,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" @@ -2349,6 +2496,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/@bassist/utils/-/utils-0.4.0.tgz", "integrity": "sha512-aoFTl0jUjm8/tDZodP41wnEkvB+C5O9NFCuYN/ztL6jSUSsuBkXq90/1ifBm1XhV/zySHgLYlU1+tgo3XtQ+nA==", + "license": "MIT", "dependencies": { "@withtypes/mime": "^0.1.2" } @@ -2357,6 +2505,7 @@ "version": "1.19.1", "resolved": "https://registry.npmjs.org/@bitauth/libauth/-/libauth-1.19.1.tgz", "integrity": "sha512-R524tD5VwOt3QRHr7N518nqTVR/HKgfWL4LypekcGuNQN8R4PWScvuRcRzrY39A28kLztMv+TJdiKuMNbkU1ug==", + "license": "MIT", "optional": true, "engines": { "node": ">=8.9" @@ -2376,6 +2525,7 @@ "url": "https://opencollective.com/capawesome" } ], + "license": "Apache-2.0", "peerDependencies": { "@capacitor/core": "^6.0.0" } @@ -2384,6 +2534,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/@capacitor/android/-/android-6.2.1.tgz", "integrity": "sha512-8gd4CIiQO5LAIlPIfd5mCuodBRxMMdZZEdj8qG8m+dQ1sQ2xyemVpzHmRK8qSCHorsBUCg3D62j2cp6bEBAkdw==", + "license": "MIT", "peerDependencies": { "@capacitor/core": "^6.2.0" } @@ -2392,6 +2543,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/@capacitor/app/-/app-6.0.2.tgz", "integrity": "sha512-SiGTGgslK4TbWJVImCUL1odul7/YFkVfkYtAYS9AAEzQpxBECBeRnuN3FFBcfZ9eiN1XxFBFchhiwpxtx/c7yQ==", + "license": "MIT", "peerDependencies": { "@capacitor/core": "^6.0.0" } @@ -2401,6 +2553,7 @@ "resolved": "https://registry.npmjs.org/@capacitor/assets/-/assets-3.0.5.tgz", "integrity": "sha512-ohz/OUq61Y1Fc6aVSt0uDrUdeOA7oTH4pkWDbv/8I3UrPjH7oPkzYhShuDRUjekNp9RBi198VSFdt0CetpEOzw==", "dev": true, + "license": "MIT", "dependencies": { "@capacitor/cli": "^5.3.0", "@ionic/utils-array": "2.1.6", @@ -2427,6 +2580,7 @@ "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-5.7.8.tgz", "integrity": "sha512-qN8LDlREMhrYhOvVXahoJVNkP8LP55/YPRJrzTAFrMqlNJC18L3CzgWYIblFPnuwfbH/RxbfoZT/ydkwgVpMrw==", "dev": true, + "license": "MIT", "dependencies": { "@ionic/cli-framework-output": "^2.2.5", "@ionic/utils-fs": "^3.1.6", @@ -2459,6 +2613,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || >=14" } @@ -2468,6 +2623,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -2482,6 +2638,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", @@ -2500,6 +2657,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2515,6 +2673,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=8" } @@ -2524,6 +2683,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^9.2.0" }, @@ -2541,6 +2701,7 @@ "version": "6.1.2", "resolved": "https://registry.npmjs.org/@capacitor/camera/-/camera-6.1.2.tgz", "integrity": "sha512-UH5srvOHDzIM1o4yFkRZCsP7WfQQOvyn+aS7ycqHFbgofr/xBTqPQUdwN+COtwaZYCwnDunPFYIGQAwSdzq6jg==", + "license": "MIT", "peerDependencies": { "@capacitor/core": "^6.0.0" } @@ -2549,6 +2710,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-6.2.1.tgz", "integrity": "sha512-JKl0FpFge8PgQNInw12kcKieQ4BmOyazQ4JGJOfEpVXlgrX1yPhSZTPjngupzTCiK3I7q7iGG5kjun0fDqgSCA==", + "license": "MIT", "dependencies": { "@ionic/cli-framework-output": "^2.2.5", "@ionic/utils-fs": "^3.1.6", @@ -2580,6 +2742,7 @@ "version": "9.5.0", "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "license": "MIT", "engines": { "node": "^12.20.0 || >=14" } @@ -2588,6 +2751,7 @@ "version": "9.3.5", "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", @@ -2605,6 +2769,7 @@ "version": "8.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2619,6 +2784,7 @@ "version": "4.2.8", "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "license": "ISC", "engines": { "node": ">=8" } @@ -2627,6 +2793,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "license": "ISC", "dependencies": { "glob": "^9.2.0" }, @@ -2644,6 +2811,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-6.2.1.tgz", "integrity": "sha512-urZwxa7hVE/BnA18oCFAdizXPse6fCKanQyEqpmz6cBJ2vObwMpyJDG5jBeoSsgocS9+Ax+9vb4ducWJn0y2qQ==", + "license": "MIT", "dependencies": { "tslib": "^2.1.0" } @@ -2652,6 +2820,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/@capacitor/filesystem/-/filesystem-6.0.3.tgz", "integrity": "sha512-PdIP/yOGAbG1lq1wbFbSPhXQ9/5lpTpeiok2NneawJOk6UXvy9W7QZXRo7wXAP7J6FdzU7bKfOORRXpOJpgXyw==", + "license": "MIT", "peerDependencies": { "@capacitor/core": "^6.0.0" } @@ -2660,6 +2829,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/@capacitor/ios/-/ios-6.2.1.tgz", "integrity": "sha512-tbMlQdQjxe1wyaBvYVU1yTojKJjgluZQsJkALuJxv/6F8QTw5b6vd7X785O/O7cMpIAZfUWo/vtAHzFkRV+kXw==", + "license": "MIT", "peerDependencies": { "@capacitor/core": "^6.2.0" } @@ -2668,6 +2838,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/@capacitor/share/-/share-6.0.3.tgz", "integrity": "sha512-BkNM73Ix+yxQ7fkni8CrrGcp1kSl7u+YNoPLwWKQ1MuQ5Uav0d+CT8M67ie+3dc4jASmegnzlC6tkTmFcPTLeA==", + "license": "MIT", "peerDependencies": { "@capacitor/core": "^6.0.0" } @@ -2686,6 +2857,7 @@ "url": "https://opencollective.com/capawesome" } ], + "license": "MIT", "peerDependencies": { "@capacitor/core": "^6.0.0" } @@ -2697,6 +2869,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2709,6 +2882,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2721,6 +2895,7 @@ "cpu": [ "arm" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -2733,6 +2908,7 @@ "cpu": [ "arm64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -2745,6 +2921,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "linux" @@ -2757,6 +2934,7 @@ "cpu": [ "x64" ], + "license": "MIT", "optional": true, "os": [ "win32" @@ -2767,6 +2945,7 @@ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "devOptional": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -2779,6 +2958,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -2789,6 +2969,7 @@ "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.0", "ajv-keywords": "^3.4.1" @@ -2805,6 +2986,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/adventurer/-/adventurer-5.4.3.tgz", "integrity": "sha512-PYv82wc1kwhFeyvZYKUIzOoaSNvRj5yn72yRCTlT3K4qoChKPGIJ7K/GoFoNX3Cj0XAWSkp0shPsGFtpU1o3Kg==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -2816,6 +2998,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/adventurer-neutral/-/adventurer-neutral-5.4.3.tgz", "integrity": "sha512-FdprrUE0zXRlx4UAu5ED+wFkxwNSQSJug+lvNjTQtA675c52kkuct/U9eCcD4vcSAd38v4IIKVBMLP/1tEBVXQ==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -2827,6 +3010,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/avataaars/-/avataaars-5.4.3.tgz", "integrity": "sha512-/zC/IPCI/JOsR6gUmXLo9HH2GFujHSvWfqYf23/n8V4e9Dm0gJ3RtZ/g9Kn+6Rkd8hiNp0BUzjlSEwiONEVOug==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -2838,6 +3022,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/avataaars-neutral/-/avataaars-neutral-5.4.3.tgz", "integrity": "sha512-3hV80zzqpn2tHaitRqRqokxJ/h5vD4YXwMtdvXJq6AKCVcUiVi9ecHVP3GU4uU2zPSk7VsbadVQMXy7/Z47nRw==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -2849,6 +3034,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/big-ears/-/big-ears-5.4.3.tgz", "integrity": "sha512-MXr0m0JNAGbxDt/onoIeIclOgUZbM1eHzH+i+uyz+9mK10IZPysV5i71cL84ZFDBEEWMKVi3uWfr1sCdck3+eQ==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -2860,6 +3046,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/big-ears-neutral/-/big-ears-neutral-5.4.3.tgz", "integrity": "sha512-uMt1MvnQ6pCL0u3rpjeEjryLs5MLLcYkAkidFZ6CpziiQyehkaI/1PwZlv7/zG7CD5wZTmUQKZ5+0U4fWR8rwg==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -2871,6 +3058,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/big-smile/-/big-smile-5.4.3.tgz", "integrity": "sha512-JIBi6L9CcEhLE83CpHw/JskF7kmD4t+vIeAU95WNPm3c98lLe7h2k2ocDVnZEKpBUqxKG3lk0rFXoYM5ovSpLw==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -2882,6 +3070,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/bottts/-/bottts-5.4.3.tgz", "integrity": "sha512-yhuIB+8ptZzZgDGYOqNXplELoU/In/5zeiqsHEkJtjAEJZd6BEDqUYMHnB1IgUAic9L3gvPt7t3cv2fPbrFDPQ==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -2893,6 +3082,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/bottts-neutral/-/bottts-neutral-5.4.3.tgz", "integrity": "sha512-92mHaeDDblsF5fxX6f8JIYEGxBdIOhnVPNh88XejHBW4RBSyCvXgGVMvmnh6j4YTRoTQHObTCrxdbll4LG4qtQ==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -2904,6 +3094,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/collection/-/collection-5.4.3.tgz", "integrity": "sha512-iy+NWb4LL0LtYzxizzpXX7iP1WWFFatlEc8WjAsP6y+eKPXz7DWX0k5uJDEbHmJXpHEpvmaowV8evcL07iHwdw==", + "license": "MIT", "dependencies": { "@dicebear/adventurer": "5.4.3", "@dicebear/adventurer-neutral": "5.4.3", @@ -2942,6 +3133,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/converter/-/converter-5.4.3.tgz", "integrity": "sha512-7gXwzNfQf5v7JVOyeuOetP59NxYewOLr6QNZaV/+/Did6B6dUJqvAsHWOhmf/JEWJFDkh/6cyGZEgpM4eSxW4A==", + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.7", "tmp-promise": "^3.0.3" @@ -2970,6 +3162,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/core/-/core-5.4.3.tgz", "integrity": "sha512-qOOlqdVD1CWT0VFxABADP62oPF8WosfE+OkREYD+vZ3T7rq8kauHAUbGkvwRoB60uMld7kfZzEJNhjR7QI22IQ==", + "license": "MIT", "dependencies": { "@dicebear/converter": "5.4.3" }, @@ -2981,6 +3174,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/croodles/-/croodles-5.4.3.tgz", "integrity": "sha512-eP+BwAb7Pm8msS+hcIMyfleBYSqGngt2Ocu/cNqZV2kSLkfIOrogSb4VJTkVtwbJd2Gpt41d+AxW71QSLN2ARQ==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -2992,6 +3186,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/croodles-neutral/-/croodles-neutral-5.4.3.tgz", "integrity": "sha512-Z4wGeeUEdZjer6xKy5jimgDXQtUnW1OKQuV+LjA6bgyLTB/QmtmspZHzqCOgwZFQAydqcUoxEFWmrIpwNLujBA==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -3003,6 +3198,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/fun-emoji/-/fun-emoji-5.4.3.tgz", "integrity": "sha512-La4XonWV0abaIiE4Dj0OOtH7tH5VC1tiXmcapJJ69d3y6YfJnedyhHzD+Xk2gnWFD/X0mnmLJua++BGSrv7YkQ==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -3014,6 +3210,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/icons/-/icons-5.4.3.tgz", "integrity": "sha512-p173l+PkZBrVtUTgSFVD9dHLc9djkRtxp+tLNsGYkBjeeWmJ/kxtPH5iG7MOp1pUnCHRkWJrLyysV51sgcrNug==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -3025,6 +3222,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/identicon/-/identicon-5.4.3.tgz", "integrity": "sha512-it9tHCJ9UWdSwDzbYZVDhx8mZMQKeKXIWzmOWwS/aGHM3aONn8Kjxd6m5rnQGWFVzxxUjedrIOZxFhWuogzYOw==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -3036,6 +3234,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/initials/-/initials-5.4.3.tgz", "integrity": "sha512-SkCxoo+llqJoOXQsVoJvruQhN4QCLOOtBvNsg7aO0W0MIYPWkJoGkpzKhXVuRBEsmI/QOBfkLMBFBpiHz22n4w==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -3047,6 +3246,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/lorelei/-/lorelei-5.4.3.tgz", "integrity": "sha512-/Zn8lzt0ZCc/S2iPfrSbHqJLa6wh5AoB5S9LclhOmksZqU7RLcjF86wyrwcbg/QZFxMSxvPr8ihL7SbkbRHh3g==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -3058,6 +3258,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/lorelei-neutral/-/lorelei-neutral-5.4.3.tgz", "integrity": "sha512-eJdnpIAUPXfYiXr+9Kt4r8dDKGiDKc3SliXcqwcEiHnM54k6p6EnAM54SxbxgVsGfKfhB4RxZo2CX1CiENwxUA==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -3069,6 +3270,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/micah/-/micah-5.4.3.tgz", "integrity": "sha512-2seJqhL2a/AV233nPVuFkY7IBW9EUjB+eRYQTYHqkOfgbnExtS7t7jjC57Ot7+FHvvrMjH43r96CKBvMWHKfJw==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -3080,6 +3282,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/miniavs/-/miniavs-5.4.3.tgz", "integrity": "sha512-+L3YCUuqf1ufPbAMgVGAXPGT81a+4gPJKPn3mqYSpBY6l4xUUku8MPg0K3JDU1T/801ABT4VXkcIlHwgEz2HIg==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -3091,6 +3294,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/open-peeps/-/open-peeps-5.4.3.tgz", "integrity": "sha512-Xp/7uJBv+iCLG06e7+8KOVI7uDjk5YVj0cZpa6O+03kRF2sdglG8SBKPdT+l5iIxhAK0Yth4vzZZpjsiEqD+Jg==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -3102,6 +3306,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/personas/-/personas-5.4.3.tgz", "integrity": "sha512-Anb1ICUcA/inrGV3FxGV9KJhsOLegpFo5VOWqyqZ/EbpVf77rgNZCj7GfwyzWuSYMKsnURpbxdTVlCn2LigHeA==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -3113,6 +3318,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/pixel-art/-/pixel-art-5.4.3.tgz", "integrity": "sha512-itCXZoH5jiVq+yhRMlWyol1TiVJgx/mlZZFcEmIO2tye1QSRWG9fhC4OGln7uvQ8GpLx1cRcVBdHVFA83nuYkQ==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -3124,6 +3330,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/pixel-art-neutral/-/pixel-art-neutral-5.4.3.tgz", "integrity": "sha512-giztLosESV1u7Slkl+B/wLSuWTAvhXvVHHmvbM+jouWTM2prKlI+pyrO/02bRl4rXcW49OHmUVIZLyBFZXpaWA==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -3135,6 +3342,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/shapes/-/shapes-5.4.3.tgz", "integrity": "sha512-42l2bpAufWkoqW1qzj0A4s5vwqoEtTUfjAl5/WrqNiN9EUFIG05dz5po8CWVe7rmUBuwwRKxhj9zZ7yArtQQ6Q==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -3146,6 +3354,7 @@ "version": "5.4.3", "resolved": "https://registry.npmjs.org/@dicebear/thumbs/-/thumbs-5.4.3.tgz", "integrity": "sha512-9R8MbVkRsOXPJK4+YZ8hx8WqAPls4Ngf1ol1AQvtsU3qXs4hgTsR9Wz2h9pf+IU3dV4JaF53ubGrxWdncKYZig==", + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -3157,6 +3366,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@digitalbazaar/bitstring/-/bitstring-3.1.0.tgz", "integrity": "sha512-Cii+Sl++qaexOvv3vchhgZFfSmtHPNIPzGegaq4ffPnflVXFu+V2qrJ17aL2+gfLxrlC/zazZFuAltyKTPq7eg==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "base64url-universal": "^2.0.0", @@ -3170,6 +3380,7 @@ "version": "3.4.1", "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-3.4.1.tgz", "integrity": "sha512-Ahk1N+s7urkgj7WvvUND5f8GiWEPfUw0D41hdElaqLgu8wZScI8gdI0q+qWw5N1d35x7GCRH2uk9mi+Uzo9M3g==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "ky": "^0.33.3", @@ -3184,6 +3395,7 @@ "version": "0.33.3", "resolved": "https://registry.npmjs.org/ky/-/ky-0.33.3.tgz", "integrity": "sha512-CasD9OCEQSFIam2U8efFK81Yeg8vNMTBUqtMOHlrcWQHqUX3HeCl9Dr31u4toV7emlH8Mymk5+9p0lL6mKb/Xw==", + "license": "MIT", "optional": true, "engines": { "node": ">=14.16" @@ -3196,6 +3408,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.11.0.tgz", "integrity": "sha512-65KyweaWvk+uKKkCrfAf+xqN2/epw1IJDtlyCPxYffFCMR8u1sp2U65NtWpnozYfZxQ6IUzIlvUcw+hQ82U2Xw==", + "license": "MIT", "optional": true, "dependencies": { "abort-controller": "^3.0.0", @@ -3221,6 +3434,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", "optional": true, "dependencies": { "data-uri-to-buffer": "^4.0.0", @@ -3239,6 +3453,7 @@ "version": "5.29.0", "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", + "license": "MIT", "optional": true, "dependencies": { "@fastify/busboy": "^2.0.0" @@ -3251,12 +3466,14 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@digitalbazaar/security-context/-/security-context-1.0.1.tgz", "integrity": "sha512-0WZa6tPiTZZF8leBtQgYAfXQePFQp2z5ivpCEN/iZguYYZ0TB9qRmWtan5XH6mNFuusHtMcyIzAcReyE6rZPhA==", + "license": "BSD-3-Clause", "optional": true }, "node_modules/@digitalbazaar/vc": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/@digitalbazaar/vc/-/vc-5.0.0.tgz", "integrity": "sha512-XmLM7Ag5W+XidGnFuxFIyUFSMnHnWEMJlHei602GG94+WzFJ6Ik8txzPQL8T18egSoiTsd1VekymbIlSimhuaQ==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "credentials-context": "^2.0.0", @@ -3271,6 +3488,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/@digitalbazaar/vc-status-list/-/vc-status-list-7.1.0.tgz", "integrity": "sha512-p5uxKJlX13N8TcTuv9qFDeej+6bndU+Rh1Cez2MT+bXQE6Jpn5t336FBSHmcECB4yUfZQpkmV/LOcYU4lW8Ojw==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@digitalbazaar/bitstring": "^3.0.0", @@ -3286,12 +3504,14 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@digitalbazaar/vc-status-list-context/-/vc-status-list-context-3.1.1.tgz", "integrity": "sha512-cMVtd+EV+4KN2kUG4/vsV74JVsGE6dcpod6zRoFB/AJA2W/sZbJqR44KL3G6P262+GcAECNhtnSsKsTnQ6y8+w==", + "license": "BSD-3-Clause", "optional": true }, "node_modules/@digitalcredentials/base58-universal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@digitalcredentials/base58-universal/-/base58-universal-1.0.1.tgz", "integrity": "sha512-1xKdJnfITMvrF/sCgwBx2C4p7qcNAARyIvrAOZGqIHmBaT/hAenpC8bf44qVY+UIMuCYP23kqpIfJQebQDThDQ==", + "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=12" @@ -3301,6 +3521,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/@digitalcredentials/base64url-universal/-/base64url-universal-2.0.6.tgz", "integrity": "sha512-QJyK6xS8BYNnkKLhEAgQc6Tb9DMe+GkHnBAWJKITCxVRXJAFLhJnr+FsJnCThS3x2Y0UiiDAXoWjwMqtUrp4Kg==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "base64url": "^3.0.1" @@ -3313,6 +3534,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/@digitalcredentials/bitstring/-/bitstring-2.0.1.tgz", "integrity": "sha512-9priXvsEJGI4LYHPwLqf5jv9HtQGlG0MgeuY8Q4NHN+xWz5rYMylh1TYTVThKa3XI6xF2pR2oEfKZD21eWXveQ==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@digitalcredentials/base64url-universal": "^2.0.2", @@ -3326,6 +3548,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/@digitalcredentials/ed25519-signature-2020/-/ed25519-signature-2020-3.0.2.tgz", "integrity": "sha512-R8IrR21Dh+75CYriQov3nVHKaOVusbxfk9gyi6eCAwLHKn6fllUt+2LQfuUrL7Ts/sGIJqQcev7YvkX9GvyYRA==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@digitalcredentials/base58-universal": "^1.0.1", @@ -3342,6 +3565,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/@digitalcredentials/ed25519-verification-key-2020/-/ed25519-verification-key-2020-3.2.2.tgz", "integrity": "sha512-ZfxNFZlA379MZpf+gV2tUYyiZ15eGVgjtCQLWlyu3frWxsumUgv++o0OJlMnrDsWGwzFMRrsXcosd5+752rLOA==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@digitalcredentials/base58-universal": "^1.0.1", @@ -3357,6 +3581,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-1.1.0.tgz", "integrity": "sha512-WyftvZqye29YQ10ZnuiBeEj0lk8SN8xHU9hOznkLc85wS1cLTp6RpzlMrHxMPD9nH7S55gsBqMqgGyz93rqmkA==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "base64url": "^3.0.0" @@ -3369,6 +3594,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-6.0.0.tgz", "integrity": "sha512-XWL1LslqggNoaCI/m3I7HcvaSt9b2tYzdrXO+jHLUj9G1BvRfvV7ZTFDVY5nifYuIGAPdAGu7unPxLRustw3VA==", + "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=8.3.0" @@ -3378,6 +3604,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/@digitalcredentials/ed25519-verification-key-2020/-/ed25519-verification-key-2020-4.0.0.tgz", "integrity": "sha512-GrfITgp1guFbExZckj2q6LOxxm08PFSScr0lBYtDRezJa6CTpA9XQ8yXSSXE3LvpEi5/2uOMFxxIfKAtL1J2ww==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@digitalcredentials/keypair": "^1.0.5", @@ -3392,6 +3619,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/@digitalcredentials/http-client/-/http-client-1.2.2.tgz", "integrity": "sha512-YOwaE+vUDSwiDhZT0BbXSWVg+bvp1HA1eg/gEc8OCwCOj9Bn9FRQdu8P9Y/fnYqyFCioDwwTRzGxgJLl50baEg==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "ky": "^0.25.1", @@ -3405,6 +3633,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-6.0.0.tgz", "integrity": "sha512-5tTakj0/GsqAJi8beQFVMQ97wUJZnuxViW9xRuAATL6eOBIefGBwHkVryAgEq2I4J/xKgb/nEyw1ZXX0G8wQJQ==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@digitalcredentials/http-client": "^1.0.0", @@ -3420,6 +3649,7 @@ "version": "9.4.0", "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld-signatures/-/jsonld-signatures-9.4.0.tgz", "integrity": "sha512-DnR+HDTm7qpcDd0wcD1w6GdlAwfHjQSgu+ahion8REkCkkMRywF+CLunU7t8AZpFB2Gr/+N8naUtiEBNje1Oew==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@digitalbazaar/security-context": "^1.0.0", @@ -3436,12 +3666,14 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", + "license": "Apache-2.0", "optional": true }, "node_modules/@digitalcredentials/jsonld/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", "optional": true, "dependencies": { "yallist": "^4.0.0" @@ -3454,6 +3686,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/@digitalcredentials/keypair/-/keypair-1.0.5.tgz", "integrity": "sha512-g0QvhJMTSFCoUkEvSeggwVTJa2jFkQXjf/mpTn9sePkz+5OouMEDfXUWL61juTaxK5JWPEFc0PKlolXzHaHHHQ==", + "license": "MIT", "optional": true, "engines": { "node": ">=16.0" @@ -3463,12 +3696,14 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/@digitalcredentials/open-badges-context/-/open-badges-context-2.1.0.tgz", "integrity": "sha512-VK7X5u6OoBFxkyIFplNqUPVbo+8vFSAEoam8tSozpj05KPfcGw41Tp5p9fqMnY38oPfwtZR2yDNSctj/slrE0A==", + "license": "MIT", "optional": true }, "node_modules/@digitalcredentials/rdf-canonize": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@digitalcredentials/rdf-canonize/-/rdf-canonize-1.0.0.tgz", "integrity": "sha512-z8St0Ex2doecsExCFK1uI4gJC+a5EqYYu1xpRH1pKmqSS9l/nxfuVxexNFyaeEum4dUdg1EetIC2rTwLIFhPRA==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "fast-text-encoding": "^1.0.3", @@ -3482,6 +3717,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-6.0.1.tgz", "integrity": "sha512-TZgLoi00Jc9uv3b6jStH+G8+bCqpHIqFw9DYODz+fVjNh197ksvcYqSndUDHa2oi0HCcK+soI8j4ba3Sa4Pl4w==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@digitalbazaar/vc-status-list": "^7.0.0", @@ -3501,6 +3737,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/@digitalcredentials/vc-status-list/-/vc-status-list-5.0.2.tgz", "integrity": "sha512-PI0N7SM0tXpaNLelbCNsMAi34AjOeuhUzMSYTkHdeqRPX7oT2F3ukyOssgr4koEqDxw9shHtxHu3fSJzrzcPMQ==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@digitalbazaar/vc-status-list-context": "^3.0.1", @@ -3516,6 +3753,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-5.2.2.tgz", "integrity": "sha512-hz7YR3kv6+8UUdgMyTGl1o8NjVKKwnMry/Rh/rWeAvwL+NqgoUHorWzI3rM+PW+MPFyDC0ieXStClt9n9D9SGA==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@digitalcredentials/http-client": "^1.0.0", @@ -3531,6 +3769,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/@digitalcredentials/vc/-/vc-4.2.0.tgz", "integrity": "sha512-8Rxpn77JghJN7noBQdcMuzm/tB8vhDwPoFepr3oGd5w+CyJxOk2RnBlgIGlAAGA+mALFWECPv1rANfXno+hdjA==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@digitalcredentials/jsonld": "^5.2.1", @@ -3545,12 +3784,14 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", + "license": "Apache-2.0", "optional": true }, "node_modules/@digitalcredentials/vc-status-list/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", "optional": true, "dependencies": { "yallist": "^4.0.0" @@ -3564,6 +3805,7 @@ "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", "integrity": "sha512-i4/rNPRS84t0vSRa2HorerGRXWyF4vThfHesw0dmcWHp+cspK743UanA0suA5Q5y8kzY2y6YKrvbIUn69BCAiA==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^5.0.0", "glob": "^7.1.6", @@ -3581,6 +3823,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3591,6 +3834,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -3600,6 +3844,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3612,6 +3857,7 @@ "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", @@ -3633,6 +3879,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -3647,6 +3894,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -3656,6 +3904,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -3665,6 +3914,7 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } @@ -3674,6 +3924,7 @@ "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz", "integrity": "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.1", "fs-extra": "^9.0.1", @@ -3688,6 +3939,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -3703,6 +3955,7 @@ "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.1.tgz", "integrity": "sha512-BAfviURMHpmb1Yb50YbCxnOY0wfwaLXH5KJ4+80zS0gUkzDX3ec23naTlEqKsN+PwYn+a1cCzM7BJ4Wcd3sGzw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "compare-version": "^0.1.2", "debug": "^4.3.4", @@ -3724,6 +3977,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -3738,6 +3992,7 @@ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8.0.0" }, @@ -3750,6 +4005,7 @@ "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.6.1.tgz", "integrity": "sha512-f6596ZHpEq/YskUd8emYvOUne89ij8mQgjYFA5ru25QwbrRO+t1SImofdDv7kKOuWCmVOuU5tvfkbgGxIl3E/w==", "dev": true, + "license": "MIT", "dependencies": { "@malept/cross-spawn-promise": "^2.0.0", "chalk": "^4.0.0", @@ -3778,6 +4034,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -3792,6 +4049,7 @@ "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.1.tgz", "integrity": "sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==", "dev": true, + "license": "MIT", "dependencies": { "@electron/asar": "^3.2.7", "@malept/cross-spawn-promise": "^2.0.0", @@ -3813,6 +4071,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "aix" @@ -3829,6 +4088,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -3845,6 +4105,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -3861,6 +4122,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -3877,6 +4139,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3893,6 +4156,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3909,6 +4173,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -3925,6 +4190,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -3941,6 +4207,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -3957,6 +4224,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -3973,6 +4241,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -3989,6 +4258,7 @@ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -4005,6 +4275,7 @@ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -4021,6 +4292,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -4037,6 +4309,7 @@ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -4053,6 +4326,7 @@ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -4069,6 +4343,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -4085,6 +4360,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -4101,6 +4377,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -4117,6 +4394,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -4133,6 +4411,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -4149,6 +4428,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -4165,6 +4445,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -4178,6 +4459,7 @@ "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.4.3" }, @@ -4196,6 +4478,7 @@ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } @@ -4205,6 +4488,7 @@ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -4228,6 +4512,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4238,6 +4523,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4250,6 +4536,7 @@ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } @@ -4258,6 +4545,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "license": "MPL-2.0", "bin": { "rlp": "bin/rlp" }, @@ -4269,6 +4557,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-8.1.0.tgz", "integrity": "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==", + "license": "MPL-2.0", "dependencies": { "@ethereumjs/rlp": "^4.0.1", "ethereum-cryptography": "^2.0.0", @@ -4292,6 +4581,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", @@ -4316,6 +4606,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", @@ -4338,6 +4629,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.8.0", "@ethersproject/bytes": "^5.8.0", @@ -4360,6 +4652,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0" } @@ -4378,6 +4671,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/properties": "^5.8.0" @@ -4397,6 +4691,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", @@ -4417,6 +4712,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.8.0" } @@ -4435,6 +4731,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bignumber": "^5.8.0" } @@ -4453,6 +4750,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", @@ -4479,6 +4777,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/basex": "^5.8.0", @@ -4508,6 +4807,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abstract-signer": "^5.8.0", "@ethersproject/address": "^5.8.0", @@ -4538,6 +4838,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "js-sha3": "0.8.0" @@ -4556,7 +4857,8 @@ "type": "individual", "url": "https://www.buymeacoffee.com/ricmoo" } - ] + ], + "license": "MIT" }, "node_modules/@ethersproject/networks": { "version": "5.8.0", @@ -4572,6 +4874,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.8.0" } @@ -4590,6 +4893,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/sha2": "^5.8.0" @@ -4609,6 +4913,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/logger": "^5.8.0" } @@ -4627,6 +4932,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0" @@ -4646,6 +4952,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0" @@ -4665,6 +4972,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", @@ -4685,6 +4993,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/logger": "^5.8.0", @@ -4708,6 +5017,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/constants": "^5.8.0", @@ -4728,6 +5038,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/address": "^5.8.0", "@ethersproject/bignumber": "^5.8.0", @@ -4754,6 +5065,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/abstract-provider": "^5.8.0", "@ethersproject/abstract-signer": "^5.8.0", @@ -4786,6 +5098,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/base64": "^5.8.0", "@ethersproject/bytes": "^5.8.0", @@ -4808,6 +5121,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@ethersproject/bytes": "^5.8.0", "@ethersproject/hash": "^5.8.0", @@ -4820,6 +5134,7 @@ "version": "0.24.13", "resolved": "https://registry.npmjs.org/@expo/cli/-/cli-0.24.13.tgz", "integrity": "sha512-2LSdbvYs+WmUljnplQXMCUyNzyX4H+F4l8uExfA1hud25Bl5kyaGrx1jjtgNxMTXmfmMjvgBdK798R50imEhkA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -4893,6 +5208,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -4903,6 +5219,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -4916,6 +5233,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", "optional": true, "peer": true, "engines": { @@ -4926,6 +5244,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -4939,6 +5258,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -4949,6 +5269,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT", "optional": true, "peer": true }, @@ -4956,6 +5277,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -4966,6 +5288,7 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -4987,6 +5310,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -4997,6 +5321,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5010,6 +5335,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5025,6 +5351,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -5035,6 +5362,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -5051,6 +5379,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "optional": true, "peer": true, "engines": { @@ -5061,6 +5390,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5074,6 +5404,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", "optional": true, "peer": true, "bin": { @@ -5090,6 +5421,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5103,6 +5435,7 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5121,6 +5454,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5136,6 +5470,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -5146,6 +5481,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5160,6 +5496,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5173,6 +5510,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5186,6 +5524,7 @@ "version": "7.4.3", "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -5204,6 +5543,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", "optional": true, "peer": true, "engines": { @@ -5214,6 +5554,7 @@ "version": "0.0.5", "resolved": "https://registry.npmjs.org/@expo/code-signing-certificates/-/code-signing-certificates-0.0.5.tgz", "integrity": "sha512-BNhXkY1bblxKZpltzAx98G2Egj9g1Q+JRcvR7E99DOj862FTCX+ZPsAUtPTr7aHxwtrL7+fL3r0JSmM9kBm+Bw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5225,6 +5566,7 @@ "version": "11.0.10", "resolved": "https://registry.npmjs.org/@expo/config/-/config-11.0.10.tgz", "integrity": "sha512-8S8Krr/c5lnl0eF03tA2UGY9rGBhZcbWKz2UWw5dpL/+zstwUmog8oyuuC8aRcn7GiTQLlbBkxcMeT8sOGlhbA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5247,6 +5589,7 @@ "version": "10.0.2", "resolved": "https://registry.npmjs.org/@expo/config-plugins/-/config-plugins-10.0.2.tgz", "integrity": "sha512-TzUn3pPdpwCS0yYaSlZOClgDmCX8N4I2lfgitX5oStqmvpPtB+vqtdyqsVM02fQ2tlJIAqwBW+NHaHqqy8Jv7g==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5270,6 +5613,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5288,6 +5632,7 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -5309,6 +5654,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -5325,6 +5671,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "optional": true, "peer": true, "engines": { @@ -5335,6 +5682,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", "optional": true, "peer": true }, @@ -5342,6 +5690,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -5352,6 +5701,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz", "integrity": "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5366,6 +5716,7 @@ "version": "11.0.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -5376,6 +5727,7 @@ "version": "53.0.4", "resolved": "https://registry.npmjs.org/@expo/config-types/-/config-types-53.0.4.tgz", "integrity": "sha512-0s+9vFx83WIToEr0Iwy4CcmiUXa5BgwBmEjylBB2eojX5XAMm9mJvw9KpjAb8m7zq2G0Q6bRbeufkzgbipuNQg==", + "license": "MIT", "optional": true, "peer": true }, @@ -5383,6 +5735,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5393,6 +5746,7 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -5414,6 +5768,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -5430,6 +5785,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "optional": true, "peer": true, "engines": { @@ -5440,6 +5796,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -5450,6 +5807,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@expo/devcert/-/devcert-1.2.0.tgz", "integrity": "sha512-Uilcv3xGELD5t/b0eM4cxBFEKQRIivB3v7i+VhWLV/gL98aw810unLKKJbGAxAIhY6Ipyz8ChWibFsKFXYwstA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5462,6 +5820,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5472,6 +5831,7 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -5493,6 +5853,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -5509,6 +5870,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "optional": true, "peer": true, "engines": { @@ -5519,6 +5881,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/@expo/env/-/env-1.0.5.tgz", "integrity": "sha512-dtEZ4CAMaVrFu2+tezhU3FoGWtbzQl50xV+rNJE5lYVRjUflWiZkVHlHkWUlPAwDPifLy4TuissVfScGGPWR5g==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5533,6 +5896,7 @@ "version": "16.4.7", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "license": "BSD-2-Clause", "optional": true, "peer": true, "engines": { @@ -5546,6 +5910,7 @@ "version": "0.12.4", "resolved": "https://registry.npmjs.org/@expo/fingerprint/-/fingerprint-0.12.4.tgz", "integrity": "sha512-HOJVvjiQYVHIouCOfFf4JRrQvBDIV/12GVG2iwbw1iGwmpQVkPgEXa9lN0f2yuS4J3QXHs73wr9jvuCjMmJlfw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5568,6 +5933,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -5578,6 +5944,7 @@ "version": "0.7.4", "resolved": "https://registry.npmjs.org/@expo/image-utils/-/image-utils-0.7.4.tgz", "integrity": "sha512-LcZ82EJy/t/a1avwIboeZbO6hlw8CvsIRh2k6SWPcAOvW0RqynyKFzUJsvnjWlhUzfBEn4oI7y/Pu5Xkw3KkkA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5596,6 +5963,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -5606,6 +5974,7 @@ "version": "9.1.4", "resolved": "https://registry.npmjs.org/@expo/json-file/-/json-file-9.1.4.tgz", "integrity": "sha512-7Bv86X27fPERGhw8aJEZvRcH9sk+9BenDnEmrI3ZpywKodYSBgc8lX9Y32faNVQ/p0YbDK9zdJ0BfAKNAOyi0A==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5617,6 +5986,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5627,6 +5997,7 @@ "version": "0.20.14", "resolved": "https://registry.npmjs.org/@expo/metro-config/-/metro-config-0.20.14.tgz", "integrity": "sha512-tYDDubuZycK+NX00XN7BMu73kBur/evOPcKfxc+UBeFfgN2EifOITtdwSUDdRsbtJ2OnXwMY1HfRUG3Lq3l4cw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5655,6 +6026,7 @@ "version": "16.4.7", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "license": "BSD-2-Clause", "optional": true, "peer": true, "engines": { @@ -5668,6 +6040,7 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -5689,6 +6062,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -5705,6 +6079,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "optional": true, "peer": true, "engines": { @@ -5729,6 +6104,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5744,6 +6120,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -5754,6 +6131,7 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/@expo/osascript/-/osascript-2.2.4.tgz", "integrity": "sha512-Q+Oyj+1pdRiHHpev9YjqfMZzByFH8UhKvSszxa0acTveijjDhQgWrq4e9T/cchBHi0GWZpGczWyiyJkk1wM1dg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5768,6 +6146,7 @@ "version": "1.8.4", "resolved": "https://registry.npmjs.org/@expo/package-manager/-/package-manager-1.8.4.tgz", "integrity": "sha512-8H8tLga/NS3iS7QaX/NneRPqbObnHvVCfMCo0ShudreOFmvmgqhYjRlkZTRstSyFqefai8ONaT4VmnLHneRYYg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5783,6 +6162,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -5793,6 +6173,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5806,6 +6187,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5819,6 +6201,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5829,6 +6212,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT", "optional": true, "peer": true }, @@ -5836,6 +6220,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -5846,6 +6231,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -5856,6 +6242,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5869,6 +6256,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5884,6 +6272,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -5894,6 +6283,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5907,6 +6297,7 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz", "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5925,6 +6316,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5940,6 +6332,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5954,6 +6347,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5967,6 +6361,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5980,6 +6375,7 @@ "version": "0.3.4", "resolved": "https://registry.npmjs.org/@expo/plist/-/plist-0.3.4.tgz", "integrity": "sha512-MhBLaUJNe9FQDDU2xhSNS4SAolr6K2wuyi4+A79vYuXLkAoICsbTwcGEQJN5jPY6D9izO/jsXh5k0h+mIWQMdw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -5992,6 +6388,7 @@ "version": "0.8.10", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -6002,6 +6399,7 @@ "version": "9.0.6", "resolved": "https://registry.npmjs.org/@expo/prebuild-config/-/prebuild-config-9.0.6.tgz", "integrity": "sha512-HDTdlMkTQZ95rd6EpvuLM+xkZV03yGLc38FqI37qKFLJtUN1WnYVaWsuXKoljd1OrVEVsHe6CfqKwaPZ52D56Q==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -6021,6 +6419,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -6031,6 +6430,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.0.tgz", "integrity": "sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -6045,6 +6445,7 @@ "version": "11.0.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -6055,6 +6456,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/@expo/sdk-runtime-versions/-/sdk-runtime-versions-1.0.0.tgz", "integrity": "sha512-Doz2bfiPndXYFPMRwPyGa1k5QaKDVpY806UJj570epIiMzWaYyCtobasyfC++qfIXVb5Ocy7r3tP9d62hAQ7IQ==", + "license": "MIT", "optional": true, "peer": true }, @@ -6062,6 +6464,7 @@ "version": "1.7.2", "resolved": "https://registry.npmjs.org/@expo/spawn-async/-/spawn-async-1.7.2.tgz", "integrity": "sha512-QdWi16+CHB9JYP7gma19OVVg0BFkvU8zNj9GjWorYI8Iv8FUxjOCcYRuAmX4s/h91e4e7BPsskc8cSrZYho9Ew==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -6075,6 +6478,7 @@ "version": "9.3.2", "resolved": "https://registry.npmjs.org/@expo/sudo-prompt/-/sudo-prompt-9.3.2.tgz", "integrity": "sha512-HHQigo3rQWKMDzYDLkubN5WQOYXJJE2eNqIQC2axC2iO3mHdwnIR7FgZVvHWtBwAdzBgAP0ECp8KqS8TiMKvgw==", + "license": "MIT", "optional": true, "peer": true }, @@ -6082,6 +6486,7 @@ "version": "14.1.0", "resolved": "https://registry.npmjs.org/@expo/vector-icons/-/vector-icons-14.1.0.tgz", "integrity": "sha512-7T09UE9h8QDTsUeMGymB4i+iqvtEeaO5VvUjryFB4tugDTG/bkzViWA74hm5pfjjDEhYMXWaX112mcvhccmIwQ==", + "license": "MIT", "optional": true, "peer": true, "peerDependencies": { @@ -6094,6 +6499,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/@expo/ws-tunnel/-/ws-tunnel-1.0.6.tgz", "integrity": "sha512-nDRbLmSrJar7abvUjp3smDwH8HcbZcoOEa5jVPUv9/9CajgmWw20JNRwTuBRzWIWIkEJDkz20GoNA+tSwUqk0Q==", + "license": "MIT", "optional": true, "peer": true }, @@ -6101,6 +6507,7 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/@expo/xcpretty/-/xcpretty-4.3.2.tgz", "integrity": "sha512-ReZxZ8pdnoI3tP/dNnJdnmAk7uLT4FjsKDGW7YeDdvdOMz2XCQSmSCM9IWlrXuWtMF9zeSB6WJtEhCQ41gQOfw==", + "license": "BSD-3-Clause", "optional": true, "peer": true, "dependencies": { @@ -6117,6 +6524,7 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -6127,6 +6535,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -6136,6 +6545,7 @@ "version": "6.7.2", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.7.2.tgz", "integrity": "sha512-Zs+YeHUC5fkt7Mg1l6XTniei3k4bwG/yo3iFUtZWd/pMx9g3fdvkSK9E0FOC+++phXOka78uJcYb8JaFkW52Xg==", + "license": "MIT", "engines": { "node": ">=6" } @@ -6144,6 +6554,7 @@ "version": "6.7.2", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.7.2.tgz", "integrity": "sha512-yxtOBWDrdi5DD5o1pmVdq3WMCvnobT0LU6R8RyyVXPvFRd2o79/0NCuQoCjNTeZz9EzA9xS3JxNWfv54RIHFEA==", + "license": "MIT", "dependencies": { "@fortawesome/fontawesome-common-types": "6.7.2" }, @@ -6155,6 +6566,7 @@ "version": "6.7.2", "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.7.2.tgz", "integrity": "sha512-GsBrnOzU8uj0LECDfD5zomZJIjrPhIlWU82AHwa2s40FKH+kcxQaBvBo3Z4TxyZHIyX8XTDxsyA33/Vx9eFuQA==", + "license": "(CC-BY-4.0 AND MIT)", "dependencies": { "@fortawesome/fontawesome-common-types": "6.7.2" }, @@ -6166,6 +6578,7 @@ "version": "3.0.8", "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.8.tgz", "integrity": "sha512-yyHHAj4G8pQIDfaIsMvQpwKMboIZtcHTUvPqXjOHyldh1O1vZfH4W03VDPv5RvI9P6DLTzJQlmVgj9wCf7c2Fw==", + "license": "MIT", "peerDependencies": { "@fortawesome/fontawesome-svg-core": "~1 || ~6", "vue": ">= 3.0.0 < 4" @@ -6175,12 +6588,14 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/@hexagon/base64": { "version": "1.1.28", "resolved": "https://registry.npmjs.org/@hexagon/base64/-/base64-1.1.28.tgz", - "integrity": "sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==" + "integrity": "sha512-lhqDEAvWixy3bZ+UOYbPwUbBkwBq5C1LAJ/xPC8Oi+lL54oyakv/npbA0aU2hgCsx/1NUd4IBvV03+aUBWxerw==", + "license": "MIT" }, "node_modules/@humanwhocodes/config-array": { "version": "0.13.0", @@ -6188,6 +6603,7 @@ "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", @@ -6202,6 +6618,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6212,6 +6629,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6224,6 +6642,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -6237,13 +6656,15 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "deprecated": "Use @eslint/object-schema instead", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@hutson/parse-repository-url": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=6.9.0" } @@ -6252,6 +6673,7 @@ "version": "2.2.8", "resolved": "https://registry.npmjs.org/@ionic/cli-framework-output/-/cli-framework-output-2.2.8.tgz", "integrity": "sha512-TshtaFQsovB4NWRBydbNFawql6yul7d5bMiW1WYYf17hd99V6xdDdk3vtF51bw6sLkxON3bDQpWsnUc9/hVo3g==", + "license": "MIT", "dependencies": { "@ionic/utils-terminal": "2.3.5", "debug": "^4.0.0", @@ -6266,6 +6688,7 @@ "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.6.tgz", "integrity": "sha512-0JZ1Zkp3wURnv8oq6Qt7fMPo5MpjbLoUoa9Bu2Q4PJuSDWM8H8gwF3dQO7VTeUj3/0o1IB1wGkFWZZYgUXZMUg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.0.0", "tslib": "^2.0.1" @@ -6278,6 +6701,7 @@ "version": "3.1.7", "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.7.tgz", "integrity": "sha512-2EknRvMVfhnyhL1VhFkSLa5gOcycK91VnjfrTB0kbqkTFCOXyXgVLI5whzq7SLrgD9t1aqos3lMMQyVzaQ5gVA==", + "license": "MIT", "dependencies": { "@types/fs-extra": "^8.0.0", "debug": "^4.0.0", @@ -6292,6 +6716,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -6306,6 +6731,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.5.tgz", "integrity": "sha512-XnYNSwfewUqxq+yjER1hxTKggftpNjFLJH0s37jcrNDwbzmbpFTQTVAp4ikNK4rd9DOebX/jbeZb8jfD86IYxw==", + "license": "MIT", "dependencies": { "debug": "^4.0.0", "tslib": "^2.0.1" @@ -6318,6 +6744,7 @@ "version": "2.1.10", "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.10.tgz", "integrity": "sha512-mZ7JEowcuGQK+SKsJXi0liYTcXd2bNMR3nE0CyTROpMECUpJeAvvaBaPGZf5ERQUPeWBVuwqAqjUmIdxhz5bxw==", + "license": "MIT", "dependencies": { "@ionic/utils-object": "2.1.5", "@ionic/utils-terminal": "2.3.3", @@ -6334,6 +6761,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.3.tgz", "integrity": "sha512-RnuSfNZ5fLEyX3R5mtcMY97cGD1A0NVBbarsSQ6yMMfRJ5YHU7hHVyUfvZeClbqkBC/pAqI/rYJuXKCT9YeMCQ==", + "license": "MIT", "dependencies": { "@types/slice-ansi": "^4.0.0", "debug": "^4.0.0", @@ -6353,6 +6781,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/@ionic/utils-stream/-/utils-stream-3.1.5.tgz", "integrity": "sha512-hkm46uHvEC05X/8PHgdJi4l4zv9VQDELZTM+Kz69odtO9zZYfnt8DkfXHJqJ+PxmtiE5mk/ehJWLnn/XAczTUw==", + "license": "MIT", "dependencies": { "debug": "^4.0.0", "tslib": "^2.0.1" @@ -6365,6 +6794,7 @@ "version": "2.1.11", "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-2.1.11.tgz", "integrity": "sha512-6zCDixNmZCbMCy5np8klSxOZF85kuDyzZSTTQKQP90ZtYNCcPYmuFSzaqDwApJT4r5L3MY3JrqK1gLkc6xiUPw==", + "license": "MIT", "dependencies": { "@ionic/utils-array": "2.1.5", "@ionic/utils-fs": "3.1.6", @@ -6383,6 +6813,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.5.tgz", "integrity": "sha512-HD72a71IQVBmQckDwmA8RxNVMTbxnaLbgFOl+dO5tbvW9CkkSFCv41h6fUuNsSEVgngfkn0i98HDuZC8mk+lTA==", + "license": "MIT", "dependencies": { "debug": "^4.0.0", "tslib": "^2.0.1" @@ -6395,6 +6826,7 @@ "version": "3.1.6", "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.6.tgz", "integrity": "sha512-eikrNkK89CfGPmexjTfSWl4EYqsPSBh0Ka7by4F0PLc1hJZYtJxUZV3X4r5ecA8ikjicUmcbU7zJmAjmqutG/w==", + "license": "MIT", "dependencies": { "@types/fs-extra": "^8.0.0", "debug": "^4.0.0", @@ -6409,6 +6841,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.3.tgz", "integrity": "sha512-RnuSfNZ5fLEyX3R5mtcMY97cGD1A0NVBbarsSQ6yMMfRJ5YHU7hHVyUfvZeClbqkBC/pAqI/rYJuXKCT9YeMCQ==", + "license": "MIT", "dependencies": { "@types/slice-ansi": "^4.0.0", "debug": "^4.0.0", @@ -6428,6 +6861,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -6442,6 +6876,7 @@ "version": "2.3.5", "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.5.tgz", "integrity": "sha512-3cKScz9Jx2/Pr9ijj1OzGlBDfcmx7OMVBt4+P1uRR0SSW4cm1/y3Mo4OY3lfkuaYifMNBW8Wz6lQHbs1bihr7A==", + "license": "MIT", "dependencies": { "@types/slice-ansi": "^4.0.0", "debug": "^4.0.0", @@ -6461,6 +6896,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.1.5.tgz", "integrity": "sha512-w4PZ2yPqvNmlAir7/2hsCRMqny1EY5jj26iZcSgxREJexmbAc2FI21jp26MqiNdfgAxvkCnf2N/TJI18GaDNwA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.1.0" }, @@ -6472,12 +6908,14 @@ "node_modules/@ipld/dag-pb/node_modules/multiformats": { "version": "13.3.6", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", - "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==" + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -6494,6 +6932,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -6505,6 +6944,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -6515,12 +6955,14 @@ "node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -6537,6 +6979,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -6551,6 +6994,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -6567,6 +7011,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -6580,6 +7025,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "optional": true, "peer": true, "engines": { @@ -6590,6 +7036,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", + "license": "ISC", "optional": true, "peer": true, "engines": { @@ -6600,6 +7047,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -6617,6 +7065,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -6627,6 +7076,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -6641,6 +7091,7 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -6655,6 +7106,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -6668,6 +7120,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -6684,6 +7137,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -6697,6 +7151,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -6707,6 +7162,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause", "optional": true, "peer": true }, @@ -6714,6 +7170,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -6724,6 +7181,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -6737,6 +7195,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -6753,6 +7212,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -6771,6 +7231,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -6784,6 +7245,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -6811,6 +7273,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -6828,13 +7291,15 @@ "node_modules/@jlongster/sql.js": { "version": "1.6.7", "resolved": "https://registry.npmjs.org/@jlongster/sql.js/-/sql.js-1.6.7.tgz", - "integrity": "sha512-4hf0kZr5WPoirdR5hUSfQ9O0JpH/qlW1CaR2wZ6zGrDz1xjSdTPuR8AW/oXzIHnJvZSEvlcIE+dfXJZwh/Lxfw==" + "integrity": "sha512-4hf0kZr5WPoirdR5hUSfQ9O0JpH/qlW1CaR2wZ6zGrDz1xjSdTPuR8AW/oXzIHnJvZSEvlcIE+dfXJZwh/Lxfw==", + "license": "MIT" }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.8", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "devOptional": true, + "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -6849,6 +7314,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -6858,6 +7324,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -6867,6 +7334,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" @@ -6875,13 +7343,15 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -6890,7 +7360,8 @@ "node_modules/@levischuck/tiny-cbor": { "version": "0.2.11", "resolved": "https://registry.npmjs.org/@levischuck/tiny-cbor/-/tiny-cbor-0.2.11.tgz", - "integrity": "sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==" + "integrity": "sha512-llBRm4dT4Z89aRsm6u2oEZ8tfwL/2l6BwpZ7JcyieouniDECM5AqNgr/y08zalEIvW3RSK4upYyybDcmjXqAow==", + "license": "MIT" }, "node_modules/@malept/cross-spawn-promise": { "version": "2.0.0", @@ -6907,6 +7378,7 @@ "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" } ], + "license": "Apache-2.0", "dependencies": { "cross-spawn": "^7.0.1" }, @@ -6919,6 +7391,7 @@ "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.1", "fs-extra": "^9.0.0", @@ -6934,6 +7407,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -6947,12 +7421,14 @@ "node_modules/@multiformats/base-x": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", - "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==" + "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==", + "license": "MIT" }, "node_modules/@noble/ciphers": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.4.1.tgz", "integrity": "sha512-QCOA9cgf3Rc33owG0AYBB9wszz+Ul2kramWN8tXG44Gyciud/tbkEqvxRF/IpqQaBpRBNi9f4jdNxqB2CQCIXg==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } @@ -6961,6 +7437,7 @@ "version": "1.9.1", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.1.tgz", "integrity": "sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.8.0" }, @@ -6981,12 +7458,14 @@ "url": "https://paulmillr.com/funding/" } ], + "license": "MIT", "optional": true }, "node_modules/@noble/hashes": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz", "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==", + "license": "MIT", "engines": { "node": "^14.21.3 || >=16" }, @@ -6999,6 +7478,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "devOptional": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -7012,6 +7492,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "devOptional": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -7021,6 +7502,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "devOptional": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -7034,6 +7516,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "dev": true, + "license": "ISC", "dependencies": { "@gar/promisify": "^1.1.3", "semver": "^7.3.5" @@ -7048,6 +7531,7 @@ "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, + "license": "MIT", "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -7062,6 +7546,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -7077,6 +7562,7 @@ "resolved": "https://registry.npmjs.org/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz", "integrity": "sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==", "dev": true, + "license": "MIT", "dependencies": { "@noble/hashes": "^1.1.5" } @@ -7085,6 +7571,7 @@ "version": "2.3.16", "resolved": "https://registry.npmjs.org/@peculiar/asn1-android/-/asn1-android-2.3.16.tgz", "integrity": "sha512-a1viIv3bIahXNssrOIkXZIlI2ePpZaNmR30d4aBL99mu2rO+mT9D6zBsp7H6eROWGtmwv0Ionp5olJurIo09dw==", + "license": "MIT", "dependencies": { "@peculiar/asn1-schema": "^2.3.15", "asn1js": "^3.0.5", @@ -7094,12 +7581,14 @@ "node_modules/@peculiar/asn1-android/node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/@peculiar/asn1-ecc": { "version": "2.3.15", "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.3.15.tgz", "integrity": "sha512-/HtR91dvgog7z/WhCVdxZJ/jitJuIu8iTqiyWVgRE9Ac5imt2sT/E4obqIVGKQw7PIy+X6i8lVBoT6wC73XUgA==", + "license": "MIT", "dependencies": { "@peculiar/asn1-schema": "^2.3.15", "@peculiar/asn1-x509": "^2.3.15", @@ -7110,12 +7599,14 @@ "node_modules/@peculiar/asn1-ecc/node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/@peculiar/asn1-rsa": { "version": "2.3.15", "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.3.15.tgz", "integrity": "sha512-p6hsanvPhexRtYSOHihLvUUgrJ8y0FtOM97N5UEpC+VifFYyZa0iZ5cXjTkZoDwxJ/TTJ1IJo3HVTB2JJTpXvg==", + "license": "MIT", "dependencies": { "@peculiar/asn1-schema": "^2.3.15", "@peculiar/asn1-x509": "^2.3.15", @@ -7126,12 +7617,14 @@ "node_modules/@peculiar/asn1-rsa/node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/@peculiar/asn1-schema": { "version": "2.3.15", "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.3.15.tgz", "integrity": "sha512-QPeD8UA8axQREpgR5UTAfu2mqQmm97oUqahDtNdBcfj3qAnoXzFdQW+aNf/tD2WVXF8Fhmftxoj0eMIT++gX2w==", + "license": "MIT", "dependencies": { "asn1js": "^3.0.5", "pvtsutils": "^1.3.6", @@ -7141,12 +7634,14 @@ "node_modules/@peculiar/asn1-schema/node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/@peculiar/asn1-x509": { "version": "2.3.15", "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.3.15.tgz", "integrity": "sha512-0dK5xqTqSLaxv1FHXIcd4Q/BZNuopg+u1l23hT9rOmQ1g4dNtw0g/RnEi+TboB0gOwGtrWn269v27cMgchFIIg==", + "license": "MIT", "dependencies": { "@peculiar/asn1-schema": "^2.3.15", "asn1js": "^3.0.5", @@ -7157,12 +7652,14 @@ "node_modules/@peculiar/asn1-x509/node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/@peculiar/json-schema": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "license": "MIT", "optional": true, "dependencies": { "tslib": "^2.0.0" @@ -7175,6 +7672,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz", "integrity": "sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==", + "license": "MIT", "optional": true, "dependencies": { "@peculiar/asn1-schema": "^2.3.8", @@ -7191,6 +7689,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -7201,6 +7700,7 @@ "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz", "integrity": "sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" }, @@ -7213,6 +7713,7 @@ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.52.0.tgz", "integrity": "sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==", "dev": true, + "license": "Apache-2.0", "dependencies": { "playwright": "1.52.0" }, @@ -7228,6 +7729,7 @@ "resolved": "https://registry.npmjs.org/@prettier/plugin-xml/-/plugin-xml-2.2.0.tgz", "integrity": "sha512-UWRmygBsyj4bVXvDiqSccwT1kmsorcwQwaIy30yVh8T+Gspx4OlC0shX1y+ZuwXZvgnafmpRYKks0bAu9urJew==", "dev": true, + "license": "MIT", "dependencies": { "@xml-tools/parser": "^1.0.11", "prettier": ">=2.4.0" @@ -7238,6 +7740,7 @@ "resolved": "https://registry.npmjs.org/@pvermeer/dexie-encrypted-addon/-/dexie-encrypted-addon-3.0.0.tgz", "integrity": "sha512-GL4pUtkltLresqbdf28IIqgBl+K38ar3EbELG+LtsDOw0DCpt+0xFimx/MusEXxV3P4iBFPri5N8z/wYDUZxww==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", "dependencies": { "@pvermeer/dexie-immutable-addon": "^1.1.4", "@stablelib/base64": "^1.0.1", @@ -7254,6 +7757,7 @@ "resolved": "https://registry.npmjs.org/@pvermeer/dexie-immutable-addon/-/dexie-immutable-addon-1.1.4.tgz", "integrity": "sha512-wWf8ULFMptomkFFvHRRdUAMvWooAciMI7njhdsPHzF2fMQH5pLnLeGhEBSQ8L59aeYkpgNsP8hzW+gY8FD073g==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", "dependencies": { "lodash.clonedeep": "^4.5.0", "tslib": "^2.4.1" @@ -7266,6 +7770,7 @@ "version": "0.79.2", "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.79.2.tgz", "integrity": "sha512-5h2Z7/+/HL/0h88s0JHOdRCW4CXMCJoROxqzHqxdrjGL6EBD1DdaB4ZqkCOEVSW4Vjhir5Qb97C8i/MPWEYPtg==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -7276,6 +7781,7 @@ "version": "0.79.2", "resolved": "https://registry.npmjs.org/@react-native/babel-plugin-codegen/-/babel-plugin-codegen-0.79.2.tgz", "integrity": "sha512-d+NB7Uosn2ZWd4O4+7ZkB6q1a+0z2opD/4+Bzhk/Tv6fc5FrSftK2Noqxvo3/bhbdGFVPxf0yvLE8et4W17x/Q==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -7290,6 +7796,7 @@ "version": "0.79.2", "resolved": "https://registry.npmjs.org/@react-native/babel-preset/-/babel-preset-0.79.2.tgz", "integrity": "sha512-/HNu869oUq4FUXizpiNWrIhucsYZqu0/0spudJEzk9SEKar0EjVDP7zkg/sKK+KccNypDQGW7nFXT8onzvQ3og==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -7350,6 +7857,7 @@ "version": "0.79.2", "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.79.2.tgz", "integrity": "sha512-8JTlGLuLi1p8Jx2N/enwwEd7/2CfrqJpv90Cp77QLRX3VHF2hdyavRIxAmXMwN95k+Me7CUuPtqn2X3IBXOWYg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -7370,6 +7878,7 @@ "version": "0.79.2", "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.79.2.tgz", "integrity": "sha512-E+YEY2dL+68HyR2iahsZdyBKBUi9QyPyaN9vsnda1jNgCjNpSPk2yAF5cXsho+zKK5ZQna3JSeE1Kbi2IfGJbw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -7398,6 +7907,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -7408,6 +7918,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", "optional": true, "peer": true }, @@ -7415,6 +7926,7 @@ "version": "0.79.2", "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.79.2.tgz", "integrity": "sha512-cGmC7X6kju76DopSBNc+PRAEetbd7TWF9J9o84hOp/xL3ahxR2kuxJy0oJX8Eg8oehhGGEXTuMKHzNa3rDBeSg==", + "license": "BSD-3-Clause", "optional": true, "peer": true, "engines": { @@ -7425,6 +7937,7 @@ "version": "0.79.2", "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.79.2.tgz", "integrity": "sha512-9q4CpkklsAs1L0Bw8XYCoqqyBSrfRALGEw4/r0EkR38Y/6fVfNfdsjSns0pTLO6h0VpxswK34L/hm4uK3MoLHw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -7448,6 +7961,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -7458,6 +7972,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", "optional": true, "peer": true }, @@ -7465,6 +7980,7 @@ "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -7482,6 +7998,7 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -7492,6 +8009,7 @@ "version": "0.79.2", "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.79.2.tgz", "integrity": "sha512-6MJFemrwR0bOT0QM+2BxX9k3/pvZQNmJ3Js5pF/6owsA0cUDiCO57otiEU8Fz+UywWEzn1FoQfOfQ8vt2GYmoA==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -7502,6 +8020,7 @@ "version": "0.79.2", "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.79.2.tgz", "integrity": "sha512-IaY87Ckd4GTPMkO1/Fe8fC1IgIx3vc3q9Tyt/6qS3Mtk9nC0x9q4kSR5t+HHq0/MuvGtu8HpdxXGy5wLaM+zUw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -7512,6 +8031,7 @@ "version": "0.79.2", "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.79.2.tgz", "integrity": "sha512-+b+GNrupWrWw1okHnEENz63j7NSMqhKeFMOyzYLBwKcprG8fqJQhDIGXfizKdxeIa5NnGSAevKL1Ev1zJ56X8w==", + "license": "MIT", "optional": true, "peer": true }, @@ -7519,6 +8039,7 @@ "version": "0.79.2", "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.79.2.tgz", "integrity": "sha512-9G6ROJeP+rdw9Bvr5ruOlag11ET7j1z/En1riFFNo6W3xZvJY+alCuH1ttm12y9+zBm4n8jwCk4lGhjYaV4dKw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -7544,6 +8065,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.1.tgz", "integrity": "sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -7568,6 +8090,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.4.tgz", "integrity": "sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==", "dev": true, + "license": "MIT", "dependencies": { "serialize-javascript": "^6.0.1", "smob": "^1.0.0", @@ -7590,6 +8113,7 @@ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -7612,6 +8136,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -7627,6 +8152,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -7640,6 +8166,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -7653,6 +8180,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -7666,6 +8194,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -7679,6 +8208,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -7692,6 +8222,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -7705,6 +8236,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -7718,6 +8250,7 @@ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -7731,6 +8264,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -7744,6 +8278,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -7757,6 +8292,7 @@ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -7770,6 +8306,7 @@ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -7783,6 +8320,7 @@ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -7796,6 +8334,7 @@ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -7809,6 +8348,7 @@ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -7822,6 +8362,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -7835,6 +8376,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -7848,6 +8390,7 @@ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -7861,6 +8404,7 @@ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -7874,6 +8418,7 @@ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -7883,6 +8428,7 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.5.tgz", "integrity": "sha512-9rE6EOVeIQzt5TSu4v+K523F8u6DhBsoZWPGKlnCshhlDhy0kJzUX4V+tr2dWmzF1GdekvThABoEQBGBQI7xZw==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } @@ -7891,6 +8437,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "license": "MIT", "dependencies": { "@noble/curves": "~1.4.0", "@noble/hashes": "~1.4.0", @@ -7904,6 +8451,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.4.0" }, @@ -7915,6 +8463,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -7926,6 +8475,7 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } @@ -7934,6 +8484,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "license": "MIT", "dependencies": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" @@ -7946,6 +8497,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -7957,6 +8509,7 @@ "version": "1.1.9", "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } @@ -7965,6 +8518,7 @@ "version": "10.0.0", "resolved": "https://registry.npmjs.org/@simplewebauthn/browser/-/browser-10.0.0.tgz", "integrity": "sha512-hG0JMZD+LiLUbpQcAjS4d+t4gbprE/dLYop/CkE01ugU/9sKXflxV5s0DRjdz3uNMFecatRfb4ZLG3XvF8m5zg==", + "license": "MIT", "dependencies": { "@simplewebauthn/types": "^10.0.0" } @@ -7973,6 +8527,7 @@ "version": "10.0.1", "resolved": "https://registry.npmjs.org/@simplewebauthn/server/-/server-10.0.1.tgz", "integrity": "sha512-djNWcRn+H+6zvihBFJSpG3fzb0NQS9c/Mw5dYOtZ9H+oDw8qn9Htqxt4cpqRvSOAfwqP7rOvE9rwqVaoGGc3hg==", + "license": "MIT", "dependencies": { "@hexagon/base64": "^1.1.27", "@levischuck/tiny-cbor": "^0.2.2", @@ -7991,12 +8546,14 @@ "node_modules/@simplewebauthn/types": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/@simplewebauthn/types/-/types-10.0.0.tgz", - "integrity": "sha512-SFXke7xkgPRowY2E+8djKbdEznTVnD5R6GO7GPTthpHrokLvNKw8C3lFZypTxLI7KkCfGPfhtqB3d7OVGGa9jQ==" + "integrity": "sha512-SFXke7xkgPRowY2E+8djKbdEznTVnD5R6GO7GPTthpHrokLvNKw8C3lFZypTxLI7KkCfGPfhtqB3d7OVGGa9jQ==", + "license": "MIT" }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "license": "MIT", "optional": true, "peer": true }, @@ -8005,6 +8562,7 @@ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -8016,6 +8574,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "license": "BSD-3-Clause", "optional": true, "peer": true, "dependencies": { @@ -8026,6 +8585,7 @@ "version": "10.3.0", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "license": "BSD-3-Clause", "optional": true, "peer": true, "dependencies": { @@ -8035,17 +8595,20 @@ "node_modules/@sqltools/formatter": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", - "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==" + "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==", + "license": "MIT" }, "node_modules/@stablelib/aead": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/aead/-/aead-1.0.1.tgz", - "integrity": "sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==" + "integrity": "sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg==", + "license": "MIT" }, "node_modules/@stablelib/aes": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/aes/-/aes-1.0.1.tgz", "integrity": "sha512-bMiezJDeFONDHbMEa+Kic26962+bwkZfsHPAmcqTjLaHCAhEQuK3i1H0POPOkcHCdj75oVRIqFCraCA0cyHPvw==", + "license": "MIT", "optional": true, "dependencies": { "@stablelib/binary": "^1.0.1", @@ -8057,6 +8620,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/aes-kw/-/aes-kw-1.0.1.tgz", "integrity": "sha512-KrOkiRex1tQTbWk+hFB5fFw4vqKhNnTUtlCRf1bhUEOFp7hadWe49/sLa/P4X4FBQVoh3Z9Lj0zS1OWu/AHA1w==", + "license": "MIT", "optional": true, "dependencies": { "@stablelib/aes": "^1.0.1", @@ -8069,12 +8633,14 @@ "node_modules/@stablelib/base64": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/base64/-/base64-1.0.1.tgz", - "integrity": "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==" + "integrity": "sha512-1bnPQqSxSuc3Ii6MhBysoWCg58j97aUjuCSZrGSmDxNqtytIi0k8utUenAwTZN4V5mXXYGsVUI9zeBqy+jBOSQ==", + "license": "MIT" }, "node_modules/@stablelib/binary": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", + "license": "MIT", "dependencies": { "@stablelib/int": "^1.0.1" } @@ -8083,17 +8649,20 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/blockcipher/-/blockcipher-1.0.1.tgz", "integrity": "sha512-4bkpV8HUAv0CgI1fUqkPUEEvv3RXQ3qBkuZaSWhshXGAz1JCpriesgiO9Qs4f0KzBJkCtvcho5n7d/RKvnHbew==", + "license": "MIT", "optional": true }, "node_modules/@stablelib/bytes": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/bytes/-/bytes-1.0.1.tgz", - "integrity": "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==" + "integrity": "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==", + "license": "MIT" }, "node_modules/@stablelib/chacha": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/chacha/-/chacha-1.0.1.tgz", "integrity": "sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg==", + "license": "MIT", "dependencies": { "@stablelib/binary": "^1.0.1", "@stablelib/wipe": "^1.0.1" @@ -8103,6 +8672,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz", "integrity": "sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA==", + "license": "MIT", "dependencies": { "@stablelib/aead": "^1.0.1", "@stablelib/binary": "^1.0.1", @@ -8115,12 +8685,14 @@ "node_modules/@stablelib/constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/constant-time/-/constant-time-1.0.1.tgz", - "integrity": "sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==" + "integrity": "sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==", + "license": "MIT" }, "node_modules/@stablelib/ed25519": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.3.tgz", "integrity": "sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==", + "license": "MIT", "dependencies": { "@stablelib/random": "^1.0.2", "@stablelib/sha512": "^1.0.1", @@ -8130,17 +8702,20 @@ "node_modules/@stablelib/hash": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", - "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==" + "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==", + "license": "MIT" }, "node_modules/@stablelib/int": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", - "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==" + "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==", + "license": "MIT" }, "node_modules/@stablelib/keyagreement": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz", "integrity": "sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==", + "license": "MIT", "dependencies": { "@stablelib/bytes": "^1.0.1" } @@ -8149,6 +8724,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/poly1305/-/poly1305-1.0.1.tgz", "integrity": "sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==", + "license": "MIT", "dependencies": { "@stablelib/constant-time": "^1.0.1", "@stablelib/wipe": "^1.0.1" @@ -8158,6 +8734,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "license": "MIT", "dependencies": { "@stablelib/binary": "^1.0.1", "@stablelib/wipe": "^1.0.1" @@ -8167,6 +8744,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/sha256/-/sha256-1.0.1.tgz", "integrity": "sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ==", + "license": "MIT", "dependencies": { "@stablelib/binary": "^1.0.1", "@stablelib/hash": "^1.0.1", @@ -8177,6 +8755,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", + "license": "MIT", "dependencies": { "@stablelib/binary": "^1.0.1", "@stablelib/hash": "^1.0.1", @@ -8186,17 +8765,20 @@ "node_modules/@stablelib/utf8": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@stablelib/utf8/-/utf8-1.0.2.tgz", - "integrity": "sha512-sDL1aB2U8FIpj7SjQJMxbOFIFkKvDKQGPHSrYejHZhtLNSK3qHe6ZIfa0woWkOiaJsdYslFzrc0VWXJZHmSIQQ==" + "integrity": "sha512-sDL1aB2U8FIpj7SjQJMxbOFIFkKvDKQGPHSrYejHZhtLNSK3qHe6ZIfa0woWkOiaJsdYslFzrc0VWXJZHmSIQQ==", + "license": "MIT" }, "node_modules/@stablelib/wipe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", - "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==" + "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==", + "license": "MIT" }, "node_modules/@stablelib/x25519": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@stablelib/x25519/-/x25519-1.0.3.tgz", "integrity": "sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==", + "license": "MIT", "dependencies": { "@stablelib/keyagreement": "^1.0.1", "@stablelib/random": "^1.0.2", @@ -8207,6 +8789,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/xchacha20/-/xchacha20-1.0.1.tgz", "integrity": "sha512-1YkiZnFF4veUwBVhDnDYwo6EHeKzQK4FnLiO7ezCl/zu64uG0bCCAUROJaBkaLH+5BEsO3W7BTXTguMbSLlWSw==", + "license": "MIT", "dependencies": { "@stablelib/binary": "^1.0.1", "@stablelib/chacha": "^1.0.1", @@ -8217,6 +8800,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/xchacha20poly1305/-/xchacha20poly1305-1.0.1.tgz", "integrity": "sha512-B1Abj0sMJ8h3HNmGnJ7vHBrAvxuNka6cJJoZ1ILN7iuacXp7sUYcgOVEOTLWj+rtQMpspY9tXSCRLPmN1mQNWg==", + "license": "MIT", "dependencies": { "@stablelib/aead": "^1.0.1", "@stablelib/chacha20poly1305": "^1.0.1", @@ -8230,6 +8814,7 @@ "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "ejs": "^3.1.6", "json5": "^2.2.0", @@ -8242,6 +8827,7 @@ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "dev": true, + "license": "MIT", "dependencies": { "sourcemap-codec": "^1.4.8" } @@ -8251,6 +8837,7 @@ "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.0" }, @@ -8263,6 +8850,7 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } @@ -8271,12 +8859,14 @@ "version": "0.7.0-unstable.82", "resolved": "https://registry.npmjs.org/@transmute/credentials-context/-/credentials-context-0.7.0-unstable.82.tgz", "integrity": "sha512-2cB6UcMKeEK6kqvl5Uhpoe5iUUAcVURlRHl9nVa/Xx2JymNHyBvyXi+CGjIwf/eEk7hsgMIwDfGqq5Mcnbk5cw==", + "license": "Apache-2.0", "optional": true }, "node_modules/@transmute/ed25519-key-pair": { "version": "0.7.0-unstable.2", "resolved": "https://registry.npmjs.org/@transmute/ed25519-key-pair/-/ed25519-key-pair-0.7.0-unstable.2.tgz", "integrity": "sha512-B0jg348Z8F0+lGWQic28xVxBZiXOJYbisWp6EfP4fQdMV3G4sES9YubpdiuoZHjesDZrf6xZ7cEB81mjGJMUkA==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@stablelib/ed25519": "^1.0.1", @@ -8291,6 +8881,7 @@ "version": "0.7.0-unstable.82", "resolved": "https://registry.npmjs.org/@transmute/ed25519-signature-2018/-/ed25519-signature-2018-0.7.0-unstable.82.tgz", "integrity": "sha512-WvD+x7EpeacXEtOTmOQltSNdevwHJZ3Y53Yj8SZJ0CGzVKyqj3/F7wGvagbEUWxALe2rXrby5F6FPVS7mJwgCg==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@transmute/credentials-context": "^0.7.0-unstable.82", @@ -8307,6 +8898,7 @@ "version": "0.7.0-unstable.82", "resolved": "https://registry.npmjs.org/@transmute/jose-ld/-/jose-ld-0.7.0-unstable.82.tgz", "integrity": "sha512-FBDbb0bGs7Ssd1H6NXEXqzfF2cnIGRW2ggR13MaTeQR51CEX2lfWlf2fdioOZa0Bk1GZlmUtyEvhPTEjp302WQ==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@peculiar/webcrypto": "^1.1.6", @@ -8324,6 +8916,7 @@ "version": "0.7.0-unstable.82", "resolved": "https://registry.npmjs.org/@transmute/json-web-signature/-/json-web-signature-0.7.0-unstable.82.tgz", "integrity": "sha512-Snku9yg5sN10zkSy678n7VnHZgd7s0EQmjRylhW+mg4n9aL1SXPSbmRx6wUXfdXe1RGY1oNfDd7R5WegZVg9ew==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@transmute/ed25519-key-pair": "^0.7.0-unstable.82", @@ -8341,6 +8934,7 @@ "version": "0.7.0-unstable.82", "resolved": "https://registry.npmjs.org/@transmute/ed25519-key-pair/-/ed25519-key-pair-0.7.0-unstable.82.tgz", "integrity": "sha512-ZPMlPXAzQ59ImUP5j0EPp05ZA7H3voM23+zWINZawd4tehTaUpyCXVBPyAyHscJ4isS/l+XZnnOnYcvl9+YrXg==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@stablelib/ed25519": "^1.0.1", @@ -8355,6 +8949,7 @@ "version": "0.0.4", "resolved": "https://registry.npmjs.org/@transmute/jsonld/-/jsonld-0.0.4.tgz", "integrity": "sha512-6G++8imMYW9dtTvATPHNfrV3lLeX5E57DOmlgIDfO0A0yjkBCss1usB80NfONS26ynyveb8vTbp4nQDW9Ki4Rw==", + "license": "Apache-2.0", "optional": true, "dependencies": { "json-pointer": "^0.6.2", @@ -8368,6 +8963,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@digitalbazaar/http-client/-/http-client-1.2.0.tgz", "integrity": "sha512-W9KQQ5pUJcaR0I4c2HPJC0a7kRbZApIorZgPnEDwMBgj16iQzutGLrCXYaZOmxqVLVNqqlQ4aUJh+HBQZy4W6Q==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "esm": "^3.2.22", @@ -8382,12 +8978,14 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", + "license": "Apache-2.0", "optional": true }, "node_modules/@transmute/jsonld/node_modules/jsonld": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-5.2.0.tgz", "integrity": "sha512-JymgT6Xzk5CHEmHuEyvoTNviEPxv6ihLWSPu1gFdtjSAyM6cFqNrv02yS/SIur3BBIkCf0HjizRc24d8/FfQKw==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@digitalbazaar/http-client": "^1.1.0", @@ -8403,6 +9001,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", "optional": true, "dependencies": { "yallist": "^4.0.0" @@ -8415,6 +9014,7 @@ "version": "0.7.0-unstable.82", "resolved": "https://registry.npmjs.org/@transmute/ld-key-pair/-/ld-key-pair-0.7.0-unstable.82.tgz", "integrity": "sha512-XWnVNCL1LeohldBLu7O12tc53rzdCYjZiaMrWvEH/sNpqnZBiNWAsdLWengXhF67LqAXWMwstfbCLNTPCD+EGg==", + "license": "Apache-2.0", "optional": true, "engines": { "node": ">=16" @@ -8424,6 +9024,7 @@ "version": "0.7.0-unstable.82", "resolved": "https://registry.npmjs.org/@transmute/secp256k1-key-pair/-/secp256k1-key-pair-0.7.0-unstable.82.tgz", "integrity": "sha512-X+txATKPpwodcr0B5TPvcsi2UnSrS3UFkrALa2ui0B1zNLj56pUVMJ0FdX9eHUKdP7t5tB9iE73Y7/8NWL6exA==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@bitauth/libauth": "^1.18.1", @@ -8438,12 +9039,14 @@ "version": "0.7.0-unstable.82", "resolved": "https://registry.npmjs.org/@transmute/security-context/-/security-context-0.7.0-unstable.82.tgz", "integrity": "sha512-Hih4A3iatK8daSREtuF/y9hGnrLZGRTfBYBUlUeaGEoCrcnhNcZrn8EQmW2dqj/7VZ2W5ResxQLPljA9pVJt5w==", + "license": "Apache-2.0", "optional": true }, "node_modules/@transmute/web-crypto-key-pair": { "version": "0.7.0-unstable.82", "resolved": "https://registry.npmjs.org/@transmute/web-crypto-key-pair/-/web-crypto-key-pair-0.7.0-unstable.82.tgz", "integrity": "sha512-xhaFpW/jcYgmOZanBVkm034YX728ukVVPO0Bb53d5IcL5MiMSWjPDQfhOyX8+EZfa7rSNDOAi6zCsZMggtB9fg==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@peculiar/webcrypto": "^1.1.6", @@ -8458,6 +9061,7 @@ "version": "0.7.0-unstable.82", "resolved": "https://registry.npmjs.org/@transmute/x25519-key-pair/-/x25519-key-pair-0.7.0-unstable.82.tgz", "integrity": "sha512-y4lPzk/SY/Cy1dUCa17ES3kqvShNQwevTO16dvbuevu6YcTYBAdSCYvW9JL+ppFqPYI5NSDPUwT6kkd4wNWmsA==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@stablelib/x25519": "^1.0.0", @@ -8471,13 +9075,15 @@ "version": "7.1.3", "resolved": "https://registry.npmjs.org/@trapezedev/gradle-parse/-/gradle-parse-7.1.3.tgz", "integrity": "sha512-WQVF5pEJ5o/mUyvfGTG9nBKx9Te/ilKM3r2IT69GlbaooItT5ao7RyF1MUTBNjHLPk/xpGUY3c6PyVnjDlz0Vw==", - "dev": true + "dev": true, + "license": "SEE LICENSE" }, "node_modules/@trapezedev/project": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/@trapezedev/project/-/project-7.1.3.tgz", "integrity": "sha512-GANh8Ey73MechZrryfJoILY9hBnWqzS6AdB53zuWBCBbaiImyblXT41fWdN6pB2f5+cNI2FAUxGfVhl+LeEVbQ==", "dev": true, + "license": "SEE LICENSE", "dependencies": { "@ionic/utils-fs": "^3.1.5", "@ionic/utils-subprocess": "^2.1.8", @@ -8511,6 +9117,7 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -8523,6 +9130,7 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin-prettier.js" }, @@ -8537,6 +9145,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/@trust/keyto/-/keyto-1.0.1.tgz", "integrity": "sha512-OXTmKkrnkwktCX86XA7eWs1TQ6u64enm0syzAfNhjigbuGLy5aLhbhRYWtjt4zzdG/irWudluheRZ9Ic9pCwsA==", + "license": "MIT", "optional": true, "dependencies": { "asn1.js": "^5.2.0", @@ -8548,35 +9157,41 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/@tweenjs/tween.js": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-21.1.1.tgz", - "integrity": "sha512-O2GetAwEC/0MOiRb3lxCLIt/eeugoDPX0nu+1SFWLqGKf835ZdWsfM9RzDpjF+aKkpYMhvOnEhO+SxMnHHjpfw==" + "integrity": "sha512-O2GetAwEC/0MOiRb3lxCLIt/eeugoDPX0nu+1SFWLqGKf835ZdWsfM9RzDpjF+aKkpYMhvOnEhO+SxMnHHjpfw==", + "license": "MIT" }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -8591,6 +9206,7 @@ "version": "7.27.0", "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -8601,6 +9217,7 @@ "version": "7.4.4", "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -8612,6 +9229,7 @@ "version": "7.20.7", "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -8622,6 +9240,7 @@ "version": "5.1.6", "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -8631,6 +9250,7 @@ "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -8643,6 +9263,7 @@ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/ms": "*" } @@ -8650,23 +9271,27 @@ "node_modules/@types/dom-webcodecs": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/@types/dom-webcodecs/-/dom-webcodecs-0.1.15.tgz", - "integrity": "sha512-omOlCPvTWyPm4ZE5bZUhlSvnHM2ZWM2U+1cPiYFL/e8aV5O9MouELp+L4dMKNTON0nTeHqEg+KWDfFQMY5Wkaw==" + "integrity": "sha512-omOlCPvTWyPm4ZE5bZUhlSvnHM2ZWM2U+1cPiYFL/e8aV5O9MouELp+L4dMKNTON0nTeHqEg+KWDfFQMY5Wkaw==", + "license": "MIT" }, "node_modules/@types/emscripten": { "version": "1.40.1", "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.40.1.tgz", - "integrity": "sha512-sr53lnYkQNhjHNN0oJDdUm5564biioI5DuOpycufDVK7D3y+GR3oUswe2rlwY1nPNyusHbrJ9WoTyIHl4/Bpwg==" + "integrity": "sha512-sr53lnYkQNhjHNN0oJDdUm5564biioI5DuOpycufDVK7D3y+GR3oUswe2rlwY1nPNyusHbrJ9WoTyIHl4/Bpwg==", + "license": "MIT" }, "node_modules/@types/estree": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/fs-extra": { "version": "8.1.5", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.5.tgz", "integrity": "sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -8675,12 +9300,14 @@ "version": "7946.0.16", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -8691,12 +9318,14 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT", "optional": true, "peer": true }, @@ -8704,6 +9333,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -8714,6 +9344,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -8724,24 +9355,28 @@ "version": "4.0.9", "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" }, "node_modules/@types/katex": { "version": "0.16.7", "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -8751,6 +9386,7 @@ "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.18.tgz", "integrity": "sha512-ht2vsoPjezor5Pmzi5hdsA7F++v5UGq9OlUduWHmMZiuQGIpJ2WS5+Gg9HaAA79gNh1AIPtCqhzejcIZ3lPzXQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@types/geojson": "*" } @@ -8759,24 +9395,28 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.6.2.tgz", "integrity": "sha512-R/BdP7OxEMc44l2Ex5lSXHoIXTB2JLNa3y2QISIbr58U/YcsffyQrYW//hZSdrfxrjRZj3GcUoxMPGdO8gSYuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ms": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { "version": "20.17.50", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.50.tgz", "integrity": "sha512-Mxiq0ULv/zo1OzOhwPqOA13I81CV/W3nvd3ChtQZRT5Cwz3cr0FKo/wMSsbTqL3EXpaBAEQhva2B8ByRkOIh9A==", + "license": "MIT", "dependencies": { "undici-types": "~6.19.2" } @@ -8786,6 +9426,7 @@ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "form-data": "^4.0.0" @@ -8795,12 +9436,14 @@ "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/pbkdf2": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -8810,6 +9453,7 @@ "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@types/node": "*", @@ -8820,6 +9464,7 @@ "version": "1.5.5", "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.5.5.tgz", "integrity": "sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -8829,6 +9474,7 @@ "resolved": "https://registry.npmjs.org/@types/ramda/-/ramda-0.29.12.tgz", "integrity": "sha512-sgIEjpJhdQPB52gDF4aphs9nl0xe54CR22DPdWqT8gQHjZYmVApgA0R3/CpMbl0Y8az2TEZrPNL2zy0EvjbkLA==", "dev": true, + "license": "MIT", "dependencies": { "types-ramda": "^0.29.10" } @@ -8837,13 +9483,15 @@ "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/responselike": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -8852,6 +9500,7 @@ "version": "4.0.6", "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -8860,18 +9509,21 @@ "version": "7.7.0", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ==" + "integrity": "sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ==", + "license": "MIT" }, "node_modules/@types/sqlite3": { "version": "3.1.11", "resolved": "https://registry.npmjs.org/@types/sqlite3/-/sqlite3-3.1.11.tgz", "integrity": "sha512-KYF+QgxAnnAh7DWPdNDroxkDI3/MspH1NMx6m/N/6fT1G6+jvsw4/ZePt8R8cr7ta58aboeTfYFBDxTJ5yv15w==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -8880,6 +9532,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "license": "MIT", "optional": true, "peer": true }, @@ -8887,13 +9540,15 @@ "version": "0.17.4", "resolved": "https://registry.npmjs.org/@types/stats.js/-/stats.js-0.17.4.tgz", "integrity": "sha512-jIBvWWShCvlBqBNIZt0KAshWpvSjhkwkEu4ZUcASoAvhmrgAUI2t1dXrjSL4xXVLB4FznPrIsX3nKXFl/Dt4vA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/three": { "version": "0.155.1", "resolved": "https://registry.npmjs.org/@types/three/-/three-0.155.1.tgz", "integrity": "sha512-uNUwnz/wWRxahjIqTtDYQ1qdE1R1py21obxfuILkT+kKrjocMwRLQQA1l8nMxfQU7VXb7CXu04ucMo8OqZt4ZA==", "dev": true, + "license": "MIT", "dependencies": { "@tweenjs/tween.js": "~18.6.4", "@types/stats.js": "*", @@ -8907,48 +9562,56 @@ "version": "18.6.4", "resolved": "https://registry.npmjs.org/@tweenjs/tween.js/-/tween.js-18.6.4.tgz", "integrity": "sha512-lB9lMjuqjtuJrx7/kOkqQBtllspPIN+96OvTCeJ2j5FEzinoAXTdAMFnDAQT1KVPRlnYfBrqxtqP66vDM40xxQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ua-parser-js": { "version": "0.7.39", "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.39.tgz", "integrity": "sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/unist": { "version": "2.0.11", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/verror": { "version": "1.10.11", "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.11.tgz", "integrity": "sha512-RlDm9K7+o5stv0Co8i8ZRGxDbrTxhJtgjqjFyVh/tXQyl/rYtTKlnTvZ88oSTeYREWurwx20Js4kTuKCsFkUtg==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/@types/web-bluetooth": { "version": "0.0.21", "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", - "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==" + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" }, "node_modules/@types/webxr": { "version": "0.5.22", "resolved": "https://registry.npmjs.org/@types/webxr/-/webxr-0.5.22.tgz", "integrity": "sha512-Vr6Stjv5jPRqH690f5I5GLjVk8GSsoQSYJ2FVd/3jJF7KaqfwPi3ehfBS96mlQ2kPCwZaX6U0rG2+NGHBKkA/A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/yargs": { "version": "17.0.33", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -8959,6 +9622,7 @@ "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT", "optional": true, "peer": true }, @@ -8967,6 +9631,7 @@ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" @@ -8977,6 +9642,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.5.1", "@typescript-eslint/scope-manager": "6.21.0", @@ -9012,6 +9678,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", @@ -9040,6 +9707,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0" @@ -9057,6 +9725,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "6.21.0", "@typescript-eslint/utils": "6.21.0", @@ -9084,6 +9753,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, + "license": "MIT", "engines": { "node": "^16.0.0 || >=18.0.0" }, @@ -9097,6 +9767,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "6.21.0", "@typescript-eslint/visitor-keys": "6.21.0", @@ -9125,6 +9796,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", @@ -9150,6 +9822,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" @@ -9166,33 +9839,37 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@unimodules/core": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.1.2.tgz", - "integrity": "sha512-lY+e2TAFuebD3vshHMIRqru3X4+k7Xkba4Wa7QsDBd+ex4c4N2dHAO61E2SrGD9+TRBD8w/o7mzK6ljbqRnbyg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@unimodules/core/-/core-7.2.0.tgz", + "integrity": "sha512-Nu+bAd/xG4B2xyYMrmV3LnDr8czUQgV1XhoL3sOOMwGydDJtfpWNodGhPhEMyKq2CXo4X7DDIo8qG6W2fk6XAQ==", "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", + "license": "MIT", "optional": true, "dependencies": { - "compare-versions": "^3.4.0" + "expo-modules-core": "~0.4.0" } }, "node_modules/@unimodules/react-native-adapter": { - "version": "6.3.9", - "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.3.9.tgz", - "integrity": "sha512-i9/9Si4AQ8awls+YGAKkByFbeAsOPgUNeLoYeh2SQ3ddjxJ5ZJDtq/I74clDnpDcn8zS9pYlcDJ9fgVJa39Glw==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@unimodules/react-native-adapter/-/react-native-adapter-6.5.0.tgz", + "integrity": "sha512-F2J6gVw9a57DTVTQQunp64fqD4HVBkltOpUz1L5lEccNbQlZEA7SjnqKJzXakI7uPhhN76/n+SGb7ihzHw2swQ==", "deprecated": "replaced by the 'expo' package, learn more: https://blog.expo.dev/whats-new-in-expo-modules-infrastructure-7a7cdda81ebc", + "license": "MIT", "optional": true, "dependencies": { - "expo-modules-autolinking": "^0.0.3", - "invariant": "^2.2.4" + "expo-modules-autolinking": "^0.3.2", + "expo-modules-core": "~0.4.0" } }, "node_modules/@urql/core": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/@urql/core/-/core-5.1.1.tgz", "integrity": "sha512-aGh024z5v2oINGD/In6rAtVKTm4VmQ2TxKQBAtk2ZSME5dunZFcjltw4p5ENQg+5CBhZ3FHMzl0Oa+rwqiWqlg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -9204,6 +9881,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/@urql/exchange-retry/-/exchange-retry-1.3.1.tgz", "integrity": "sha512-EEmtFu8JTuwsInqMakhLq+U3qN8ZMd5V3pX44q0EqD2imqTDsa8ikZqJ1schVrN8HljOdN+C08cwZ1/r5uIgLw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -9234,6 +9912,7 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/@digitalcredentials/jsonld/-/jsonld-5.2.2.tgz", "integrity": "sha512-hz7YR3kv6+8UUdgMyTGl1o8NjVKKwnMry/Rh/rWeAvwL+NqgoUHorWzI3rM+PW+MPFyDC0ieXStClt9n9D9SGA==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@digitalcredentials/http-client": "^1.0.0", @@ -9249,12 +9928,14 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", + "license": "Apache-2.0", "optional": true }, "node_modules/@veramo-community/lds-ecdsa-secp256k1-recovery2020/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", "optional": true, "dependencies": { "yallist": "^4.0.0" @@ -9267,6 +9948,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/@veramo/core/-/core-5.6.0.tgz", "integrity": "sha512-H30Oi4Z3RnEUJ36a1KdD2Xht+932rfxYs2xVtvx4u1j1VcewWBttDa6XLWkVLqLMqZWZucpS8y3IJ5uFk8DEgQ==", + "license": "Apache-2.0", "dependencies": { "@veramo/core-types": "^5.6.0", "debug": "^4.3.4", @@ -9278,6 +9960,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/@veramo/core-types/-/core-types-5.6.0.tgz", "integrity": "sha512-0eyqcvgu5qqijVY+5uqt3QbawZKeDph98VkqKWDndY8rSrPyoWai019VfQCRwanBA1SjhesjSQg2LS6ZscINRw==", + "license": "Apache-2.0", "dependencies": { "credential-status": "^2.0.5", "debug": "^4.3.3", @@ -9289,6 +9972,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/@veramo/credential-ld/-/credential-ld-5.6.0.tgz", "integrity": "sha512-X68oMx5xTZruo/Otn2vqj6pM9Rd55j/ysTfnpChj+SXxm5nVnnoMeL76sLQoAyLiLib018mRxy+9rjcKWR085Q==", + "license": "Apache-2.0", "optional": true, "dependencies": { "@digitalcredentials/ed25519-signature-2020": "^3.0.2", @@ -9311,6 +9995,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/@veramo/credential-w3c/-/credential-w3c-5.6.0.tgz", "integrity": "sha512-ExCr/77sIN3C6QpWDICNkwjYcz6BuXhk6talP3m0iixMQ/TO05f6jyvnnEpRbKhuwpEBqw2JE3zszSxz+U34+A==", + "license": "Apache-2.0", "dependencies": { "@veramo/core-types": "^5.6.0", "@veramo/message-handler": "^5.6.0", @@ -9330,6 +10015,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/@veramo/data-store/-/data-store-5.6.0.tgz", "integrity": "sha512-nyhFyV4iD3DEtrbHq+R2Jt7pRRUKqdYdeoPTrnLPXFf8WFjkCUHnUv7Q5ZWbN8ABt3tmIMDqecMQZRNTcbK6Zg==", + "license": "Apache-2.0", "dependencies": { "@veramo/core-types": "^5.6.0", "@veramo/did-discovery": "^5.6.0", @@ -9346,6 +10032,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/@veramo/did-discovery/-/did-discovery-5.6.0.tgz", "integrity": "sha512-Rwzoo4oYldCYFU7FWL0aS+ICIcFE4unRafRJmIP9ZhrUR0Yx+202FBFx8md5DVcOfZ1s1vNS9EcUjeakqOWqYw==", + "license": "Apache-2.0", "dependencies": { "@veramo/core-types": "^5.6.0", "debug": "^4.3.3" @@ -9355,6 +10042,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/@veramo/did-manager/-/did-manager-5.6.0.tgz", "integrity": "sha512-CUbUeQgAeiXdm6YBdOJuBt6CDvS8A78Y+z9llaL0vdhnqB+Hme9173kSk6EuBEsQfuyt6mByYQEz9oplydpg3A==", + "license": "Apache-2.0", "dependencies": { "@veramo/core-types": "^5.6.0", "@veramo/did-discovery": "^5.6.0" @@ -9364,6 +10052,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/@veramo/did-provider-ethr/-/did-provider-ethr-5.6.0.tgz", "integrity": "sha512-2X62Q0wOu4oK4NApzn6++OMSh+R/XkcCVsPkQCTamNc8XlurOiDlY3rnaqGNF+r7Y3HjQFwNOKR/FhyqTYo7Vw==", + "license": "Apache-2.0", "dependencies": { "@veramo/core-types": "^5.6.0", "@veramo/did-manager": "^5.6.0", @@ -9376,6 +10065,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@veramo/did-provider-peer/-/did-provider-peer-6.0.0.tgz", "integrity": "sha512-U58pm/KaVtnQ15xLdJxtGDG2QhsPZgFxR0qE6X1S+p/zbI33K12nnUSvts6xrPUzoLXAETjPa1V1MA8SnXrJIg==", + "license": "Apache-2.0", "dependencies": { "@aviarytech/did-peer": "^0.0.22", "@veramo/core-types": "^6.0.0", @@ -9389,6 +10079,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", + "license": "MIT", "engines": { "node": "^14.21.3 || >=16" }, @@ -9400,6 +10091,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@veramo/core-types/-/core-types-6.0.0.tgz", "integrity": "sha512-Gdjo45veUT2DXhPmhD2hy1X9jem7IuZNjUvPIC5+qRVBT1yvWsJjOL7D+YWhbeA6LHIbNpO1a9GR2iaSL/FebA==", + "license": "Apache-2.0", "dependencies": { "credential-status": "^3.0.0", "debug": "^4.3.3", @@ -9411,6 +10103,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@veramo/did-discovery/-/did-discovery-6.0.0.tgz", "integrity": "sha512-S/r0MWAVQZSe9SGb7XfWDhdsLfsSqkzMIweOiLTjZjHndkkDJ+qX3s5gblSNcTTvOvZRsXDI3fa4IbsjhDc1PQ==", + "license": "Apache-2.0", "dependencies": { "@veramo/core-types": "^6.0.0", "debug": "^4.3.3" @@ -9420,6 +10113,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@veramo/did-manager/-/did-manager-6.0.0.tgz", "integrity": "sha512-sjF0d0ZE+h7Jw7WwGtyRhjT5MhKBwGLx2AsR2Ao0qqyloVAxVS9jDcl2DP1ZdCKC+7BR4X30E1ja99N7q3INDg==", + "license": "Apache-2.0", "dependencies": { "@veramo/core-types": "^6.0.0", "@veramo/did-discovery": "^6.0.0" @@ -9429,6 +10123,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/@veramo/utils/-/utils-6.0.0.tgz", "integrity": "sha512-IvX0QqjLfamfD6s/qUVtfWFtdb1Idd5Dvfm7RzMKSvT+D5cstFQw3v/sySKoEY8du/ruy8ZUe7v9VpCAYlngPQ==", + "license": "Apache-2.0", "dependencies": { "@ipld/dag-pb": "^4.0.5", "@noble/curves": "^1.1.0", @@ -9449,6 +10144,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/credential-status/-/credential-status-3.0.4.tgz", "integrity": "sha512-6xHMXhdIZjhyTzkXx49hR4CjHNEqFJmWEL29CNulGA0XDozHsZXVF34BZyHGz9vWD/Du05pVEDhpZL0jdLGIRw==", + "license": "Apache-2.0", "dependencies": { "did-jwt": "^8.0.0", "did-resolver": "^4.1.0" @@ -9458,6 +10154,7 @@ "version": "8.0.15", "resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-8.0.15.tgz", "integrity": "sha512-E+Qf+E0vUdAv2PcldxmvZwtPdmExaXkvwQA7tp3TKkCiK9aPNUrD7ZKSPi2lJQ2ZaGe3z0VKceQtGRl5Kolghg==", + "license": "Apache-2.0", "dependencies": { "@noble/ciphers": "^1.0.0", "@noble/curves": "^1.0.0", @@ -9474,6 +10171,7 @@ "version": "4.0.13", "resolved": "https://registry.npmjs.org/did-jwt-vc/-/did-jwt-vc-4.0.13.tgz", "integrity": "sha512-T1IUneS7Rgpao8dOeZy7dMUvAvcLLn7T8YlWRk/8HsEpaVLDx5NrjRfbfDJU8FL8CI8aBIAhoDnPQO3PNV+BWg==", + "license": "ISC", "dependencies": { "did-jwt": "^8.0.0", "did-resolver": "^4.1.0" @@ -9485,12 +10183,14 @@ "node_modules/@veramo/did-provider-peer/node_modules/did-jwt/node_modules/multiformats": { "version": "9.9.0", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", + "license": "(Apache-2.0 AND MIT)" }, "node_modules/@veramo/did-provider-peer/node_modules/did-jwt/node_modules/uint8arrays": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", + "license": "MIT", "dependencies": { "multiformats": "^9.4.2" } @@ -9498,12 +10198,14 @@ "node_modules/@veramo/did-provider-peer/node_modules/multiformats": { "version": "13.3.6", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", - "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==" + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" }, "node_modules/@veramo/did-resolver": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/@veramo/did-resolver/-/did-resolver-5.6.0.tgz", "integrity": "sha512-gwIiaveyWL1cbAbEwt+fIfsihNDU1OLd6gMLMnMKpwa809W18r/gCzgwWItbVhKYR9QmcfmS7/VpJzhCm9GPCA==", + "license": "Apache-2.0", "dependencies": { "@veramo/core-types": "^5.6.0", "@veramo/utils": "^5.6.0", @@ -9516,6 +10218,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/@veramo/key-manager/-/key-manager-5.6.0.tgz", "integrity": "sha512-RLl3X8I7ZQ0MftSbh5TntNji1TIHjH7bYAhjtBvruiWVCjwR5wNri0Y6RhZrd2k8YKk2UGB0OkscxNdF/k+98g==", + "license": "Apache-2.0", "dependencies": { "@noble/curves": "^1.1.0", "@veramo/core-types": "^5.6.0", @@ -9531,6 +10234,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/@veramo/message-handler/-/message-handler-5.6.0.tgz", "integrity": "sha512-aA9T1SQ9kx+2XcOVgdXA13EDGn03gP6lgI/171PAOVfX4nUHEFRky/FsiwT/SDFP/2IK+ekmiIVLhrhcVNCOLA==", + "license": "Apache-2.0", "dependencies": { "@veramo/core-types": "^5.6.0", "debug": "^4.3.4" @@ -9540,6 +10244,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/@veramo/utils/-/utils-5.6.0.tgz", "integrity": "sha512-Yxp686LgEPtDWUiOiv/rHHwBSi4we6VpKLL5/o9ElM6FL9z6HtE9zipU6eKRvi0J0GD78FTIxIcDKBWu+OjM1g==", + "license": "Apache-2.0", "dependencies": { "@ipld/dag-pb": "^4.0.5", "@noble/curves": "^1.1.0", @@ -9561,6 +10266,7 @@ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.4.tgz", "integrity": "sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==", "dev": true, + "license": "MIT", "engines": { "node": "^18.0.0 || >=20.0.0" }, @@ -9573,6 +10279,7 @@ "version": "0.10.1", "resolved": "https://registry.npmjs.org/@vue-leaflet/vue-leaflet/-/vue-leaflet-0.10.1.tgz", "integrity": "sha512-RNEDk8TbnwrJl8ujdbKgZRFygLCxd0aBcWLQ05q/pGv4+d0jamE3KXQgQBqGAteE1mbQsk3xoNcqqUgaIGfWVg==", + "license": "MIT", "dependencies": { "vue": "^3.2.25" }, @@ -9587,36 +10294,39 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.14.tgz", - "integrity": "sha512-k7qMHMbKvoCXIxPhquKQVw3Twid3Kg4s7+oYURxLGRd56LiuHJVrvFKI4fm2AM3c8apqODPfVJGoh8nePbXMRA==", + "version": "3.5.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.15.tgz", + "integrity": "sha512-nGRc6YJg/kxNqbv/7Tg4juirPnjHvuVdhcmDvQWVZXlLHjouq7VsKmV1hIxM/8yKM0VUfwT/Uzc0lO510ltZqw==", + "license": "MIT", "dependencies": { "@babel/parser": "^7.27.2", - "@vue/shared": "3.5.14", + "@vue/shared": "3.5.15", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.1" } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.14.tgz", - "integrity": "sha512-1aOCSqxGOea5I80U2hQJvXYpPm/aXo95xL/m/mMhgyPUsKe9jhjwWpziNAw7tYRnbz1I61rd9Mld4W9KmmRoug==", + "version": "3.5.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.15.tgz", + "integrity": "sha512-ZelQd9n+O/UCBdL00rlwCrsArSak+YLZpBVuNDio1hN3+wrCshYZEDUO3khSLAzPbF1oQS2duEoMDUHScUlYjA==", + "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.5.14", - "@vue/shared": "3.5.14" + "@vue/compiler-core": "3.5.15", + "@vue/shared": "3.5.15" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.14.tgz", - "integrity": "sha512-9T6m/9mMr81Lj58JpzsiSIjBgv2LiVoWjIVa7kuXHICUi8LiDSIotMpPRXYJsXKqyARrzjT24NAwttrMnMaCXA==", + "version": "3.5.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.15.tgz", + "integrity": "sha512-3zndKbxMsOU6afQWer75Zot/aydjtxNj0T2KLg033rAFaQUn2PGuE32ZRe4iMhflbTcAxL0yEYsRWFxtPro8RQ==", + "license": "MIT", "dependencies": { "@babel/parser": "^7.27.2", - "@vue/compiler-core": "3.5.14", - "@vue/compiler-dom": "3.5.14", - "@vue/compiler-ssr": "3.5.14", - "@vue/shared": "3.5.14", + "@vue/compiler-core": "3.5.15", + "@vue/compiler-dom": "3.5.15", + "@vue/compiler-ssr": "3.5.15", + "@vue/shared": "3.5.15", "estree-walker": "^2.0.2", "magic-string": "^0.30.17", "postcss": "^8.5.3", @@ -9624,24 +10334,27 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.14.tgz", - "integrity": "sha512-Y0G7PcBxr1yllnHuS/NxNCSPWnRGH4Ogrp0tsLA5QemDZuJLs99YjAKQ7KqkHE0vCg4QTKlQzXLKCMF7WPSl7Q==", + "version": "3.5.15", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.15.tgz", + "integrity": "sha512-gShn8zRREZbrXqTtmLSCffgZXDWv8nHc/GhsW+mbwBfNZL5pI96e7IWcIq8XGQe1TLtVbu7EV9gFIVSmfyarPg==", + "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.14", - "@vue/shared": "3.5.14" + "@vue/compiler-dom": "3.5.15", + "@vue/shared": "3.5.15" } }, "node_modules/@vue/devtools-api": { "version": "6.6.4", "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", - "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" }, "node_modules/@vue/eslint-config-typescript": { "version": "11.0.3", "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.3.tgz", "integrity": "sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/eslint-plugin": "^5.59.1", "@typescript-eslint/parser": "^5.59.1", @@ -9666,6 +10379,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.4.0", "@typescript-eslint/scope-manager": "5.62.0", @@ -9700,6 +10414,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "5.62.0", "@typescript-eslint/types": "5.62.0", @@ -9727,6 +10442,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0" @@ -9744,6 +10460,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "5.62.0", "@typescript-eslint/utils": "5.62.0", @@ -9771,6 +10488,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -9784,6 +10502,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "5.62.0", "@typescript-eslint/visitor-keys": "5.62.0", @@ -9811,6 +10530,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@types/json-schema": "^7.0.9", @@ -9837,6 +10557,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "5.62.0", "eslint-visitor-keys": "^3.3.0" @@ -9854,6 +10575,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -9867,59 +10589,66 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/@vue/reactivity": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.14.tgz", - "integrity": "sha512-7cK1Hp343Fu/SUCCO52vCabjvsYu7ZkOqyYu7bXV9P2yyfjUMUXHZafEbq244sP7gf+EZEz+77QixBTuEqkQQw==", + "version": "3.5.15", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.15.tgz", + "integrity": "sha512-GaA5VUm30YWobCwpvcs9nvFKf27EdSLKDo2jA0IXzGS344oNpFNbEQ9z+Pp5ESDaxyS8FcH0vFN/XSe95BZtHQ==", + "license": "MIT", "dependencies": { - "@vue/shared": "3.5.14" + "@vue/shared": "3.5.15" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.14.tgz", - "integrity": "sha512-w9JWEANwHXNgieAhxPpEpJa+0V5G0hz3NmjAZwlOebtfKyp2hKxKF0+qSh0Xs6/PhfGihuSdqMprMVcQU/E6ag==", + "version": "3.5.15", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.15.tgz", + "integrity": "sha512-CZAlIOQ93nj0OPpWWOx4+QDLCMzBNY85IQR4Voe6vIID149yF8g9WQaWnw042f/6JfvLttK7dnyWlC1EVCRK8Q==", + "license": "MIT", "dependencies": { - "@vue/reactivity": "3.5.14", - "@vue/shared": "3.5.14" + "@vue/reactivity": "3.5.15", + "@vue/shared": "3.5.15" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.14.tgz", - "integrity": "sha512-lCfR++IakeI35TVR80QgOelsUIdcKjd65rWAMfdSlCYnaEY5t3hYwru7vvcWaqmrK+LpI7ZDDYiGU5V3xjMacw==", - "dependencies": { - "@vue/reactivity": "3.5.14", - "@vue/runtime-core": "3.5.14", - "@vue/shared": "3.5.14", + "version": "3.5.15", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.15.tgz", + "integrity": "sha512-wFplHKzKO/v998up2iCW3RN9TNUeDMhdBcNYZgs5LOokHntrB48dyuZHspcahKZczKKh3v6i164gapMPxBTKNw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.15", + "@vue/runtime-core": "3.5.15", + "@vue/shared": "3.5.15", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.14.tgz", - "integrity": "sha512-Rf/ISLqokIvcySIYnv3tNWq40PLpNLDLSJwwVWzG6MNtyIhfbcrAxo5ZL9nARJhqjZyWWa40oRb2IDuejeuv6w==", + "version": "3.5.15", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.15.tgz", + "integrity": "sha512-Gehc693kVTYkLt6QSYEjGvqvdK2zZ/gf/D5zkgmvBdeB30dNnVZS8yY7+IlBmHRd1rR/zwaqeu06Ij04ZxBscg==", + "license": "MIT", "dependencies": { - "@vue/compiler-ssr": "3.5.14", - "@vue/shared": "3.5.14" + "@vue/compiler-ssr": "3.5.15", + "@vue/shared": "3.5.15" }, "peerDependencies": { - "vue": "3.5.14" + "vue": "3.5.15" } }, "node_modules/@vue/shared": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.14.tgz", - "integrity": "sha512-oXTwNxVfc9EtP1zzXAlSlgARLXNC84frFYkS0HHz0h3E4WZSP9sywqjqzGCP9Y34M8ipNmd380pVgmMuwELDyQ==" + "version": "3.5.15", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.15.tgz", + "integrity": "sha512-bKvgFJJL1ZX9KxMCTQY6xD9Dhe3nusd1OhyOb1cJYGqvAr0Vg8FIjHPMOEVbJ9GDT9HG+Bjdn4oS8ohKP8EvoA==", + "license": "MIT" }, "node_modules/@vueuse/core": { "version": "12.8.2", "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.8.2.tgz", "integrity": "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==", + "license": "MIT", "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "12.8.2", @@ -9934,6 +10663,7 @@ "version": "12.8.2", "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.8.2.tgz", "integrity": "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/antfu" } @@ -9942,6 +10672,7 @@ "version": "12.8.2", "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.8.2.tgz", "integrity": "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==", + "license": "MIT", "dependencies": { "vue": "^3.5.13" }, @@ -9953,6 +10684,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/@withtypes/mime/-/mime-0.1.2.tgz", "integrity": "sha512-PB9BfZGzwblUONJY0LiOwsHCA6uV3DIPj/w9ReekdHxPOl0VdUFgI5s4avKycuuq9Gf5Nz2ZPA2O36GAUzlMPA==", + "license": "MIT", "dependencies": { "mime": "^3.0.0" } @@ -9961,6 +10693,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -9973,6 +10706,7 @@ "resolved": "https://registry.npmjs.org/@xml-tools/parser/-/parser-1.0.11.tgz", "integrity": "sha512-aKqQ077XnR+oQtHJlrAflaZaL7qZsulWc/i/ZEooar5JiWj1eLt0+Wg28cpa+XLney107wXqneC+oG1IZvxkTA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "chevrotain": "7.1.1" } @@ -9983,6 +10717,7 @@ "integrity": "sha512-lm2GW5PkosIzccsaZIz7tp8cPADSIlIHWDFTR1N0SzfinhhYgeIQjFMz4rYzanCScr3DqQLeomUDArp6MWKm+g==", "deprecated": "this version is no longer supported, please update to at least 0.8.*", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -9990,24 +10725,28 @@ "node_modules/@zxing/text-encoding": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/@zxing/text-encoding/-/text-encoding-0.9.0.tgz", - "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==" + "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==", + "license": "(Unlicense OR Apache-2.0)" }, "node_modules/7zip-bin": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "devOptional": true + "devOptional": true, + "license": "ISC" }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -10021,6 +10760,7 @@ "integrity": "sha512-TOod9d5RDExo6STLMGa+04HGkl+TlMfbDnTyN93/ETJ9DpQ0DaYLqcMZlbXvdc4W3vVo1Qrl+WhSp8zvDsJ+jA==", "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dev": true, + "license": "MIT", "dependencies": { "xtend": "~3.0.0" } @@ -10046,6 +10786,7 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -10061,6 +10802,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", "devOptional": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -10073,6 +10815,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -10082,6 +10825,7 @@ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "devOptional": true, + "license": "MIT", "dependencies": { "acorn": "^8.11.0" }, @@ -10093,18 +10837,21 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/aes-js": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==" + "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", + "license": "MIT" }, "node_modules/agent-base": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "devOptional": true, + "license": "MIT", "engines": { "node": ">= 14" } @@ -10114,6 +10861,7 @@ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", "devOptional": true, + "license": "MIT", "dependencies": { "humanize-ms": "^1.2.1" }, @@ -10126,6 +10874,7 @@ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "devOptional": true, + "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -10139,6 +10888,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -10155,6 +10905,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } @@ -10163,6 +10914,7 @@ "version": "1.4.10", "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "license": "MIT", "optional": true, "peer": true }, @@ -10170,6 +10922,7 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -10186,6 +10939,7 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", "optional": true, "peer": true, "engines": { @@ -10199,6 +10953,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -10207,6 +10962,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -10221,6 +10977,7 @@ "version": "3.17.0", "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", + "license": "ISC", "engines": { "node": ">=14" } @@ -10229,13 +10986,15 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "devOptional": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -10249,6 +11008,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -10260,13 +11020,15 @@ "version": "5.0.0-alpha.10", "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-5.0.0-alpha.10.tgz", "integrity": "sha512-Ev4jj3D7Bo+O0GPD2NMvJl+PGiBAfS7pUGawntBNpCbxtpncfUixqFj9z9Jme7V7s3LBGqsWZZP54fxBX3JKJw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/app-builder-lib": { "version": "25.1.8", "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-25.1.8.tgz", "integrity": "sha512-pCqe7dfsQFBABC1jeKZXQWhGcCPF3rPCXDdfqVKjIeWBcXzyC1iOWZdfFhGl+S9MyE/k//DFmC6FzuGAUudNDg==", "dev": true, + "license": "MIT", "dependencies": { "@develar/schema-utils": "~2.6.5", "@electron/notarize": "2.5.0", @@ -10314,6 +11076,7 @@ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -10323,6 +11086,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -10337,6 +11101,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -10351,6 +11116,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", + "license": "MIT", "engines": { "node": ">= 6.0.0" } @@ -10359,13 +11125,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "devOptional": true + "devOptional": true, + "license": "ISC" }, "node_modules/archiver": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "archiver-utils": "^2.1.0", @@ -10385,6 +11153,7 @@ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "glob": "^7.1.4", @@ -10407,6 +11176,7 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/archiver-utils/node_modules/readable-stream": { @@ -10414,6 +11184,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "core-util-is": "~1.0.0", @@ -10430,6 +11201,7 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/archiver-utils/node_modules/string_decoder": { @@ -10437,6 +11209,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "safe-buffer": "~5.1.0" @@ -10447,6 +11220,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "inherits": "^2.0.3", @@ -10463,6 +11237,7 @@ "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "deprecated": "This package is no longer supported.", "devOptional": true, + "license": "ISC", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -10476,6 +11251,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "devOptional": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -10489,18 +11265,21 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" @@ -10516,13 +11295,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -10532,6 +11313,7 @@ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", @@ -10553,6 +11335,7 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10561,23 +11344,27 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/asmcrypto.js": { "version": "0.22.0", "resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz", "integrity": "sha512-usgMoyXjMbx/ZPdzTSXExhMPur2FTdz/Vo5PVx2gIaBcdAAJNOFlsdgqveM8Cff7W0v+xrf9BwjOV26JSAF9qA==", + "license": "MIT", "optional": true }, "node_modules/asn1-ber": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/asn1-ber/-/asn1-ber-1.2.2.tgz", - "integrity": "sha512-CbNem/7hxrjSiOAOOTX4iZxu+0m3jiLqlsERQwwPM1IDR/22M8IPpA1VVndCLw5KtjRYyRODbvAEIfuTogNDng==" + "integrity": "sha512-CbNem/7hxrjSiOAOOTX4iZxu+0m3jiLqlsERQwwPM1IDR/22M8IPpA1VVndCLw5KtjRYyRODbvAEIfuTogNDng==", + "license": "MIT" }, "node_modules/asn1.js": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "license": "MIT", "optional": true, "dependencies": { "bn.js": "^4.0.0", @@ -10590,12 +11377,14 @@ "version": "4.12.2", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "license": "MIT", "optional": true }, "node_modules/asn1js": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.6.tgz", "integrity": "sha512-UOCGPYbl0tv8+006qks/dTgV9ajs97X2p0FAbyS2iyCRrmLSRolDaHdp+v/CLgnzHc3fVB+CwYiUmei7ndFcgA==", + "license": "BSD-3-Clause", "dependencies": { "pvtsutils": "^1.3.6", "pvutils": "^1.1.3", @@ -10608,13 +11397,15 @@ "node_modules/asn1js/node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.8" @@ -10624,6 +11415,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -10632,13 +11424,15 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/async-exit-hook": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -10648,6 +11442,7 @@ "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -10656,18 +11451,21 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "license": "MIT", "optional": true, "peer": true }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "license": "ISC", "engines": { "node": ">= 4.0.0" } @@ -10691,6 +11489,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "browserslist": "^4.24.4", "caniuse-lite": "^1.0.30001702", @@ -10714,6 +11513,7 @@ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -10728,6 +11528,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -10738,12 +11539,14 @@ "version": "1.6.7", "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", - "devOptional": true + "devOptional": true, + "license": "Apache-2.0" }, "node_modules/b64-lite": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/b64-lite/-/b64-lite-1.4.0.tgz", "integrity": "sha512-aHe97M7DXt+dkpa8fHlCcm1CnskAHrJqEfMI0KN7dwqlzml/aUe1AGt6lk51HzrSfVD67xOso84sOpr+0wIe2w==", + "license": "MIT", "optional": true, "dependencies": { "base-64": "^0.1.0" @@ -10753,6 +11556,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/b64u-lite/-/b64u-lite-1.1.0.tgz", "integrity": "sha512-929qWGDVCRph7gQVTC6koHqQIpF4vtVaSbwLltFQo44B1bYUquALswZdBKFfrJCPEnsCOvWkJsPdQYZ/Ukhw8A==", + "license": "MIT", "optional": true, "dependencies": { "b64-lite": "^1.4.0" @@ -10762,6 +11566,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -10784,6 +11589,7 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "license": "BSD-3-Clause", "optional": true, "peer": true, "dependencies": { @@ -10801,6 +11607,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -10818,6 +11625,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz", "integrity": "sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.6", "@babel/helper-define-polyfill-provider": "^0.6.4", @@ -10832,6 +11640,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "devOptional": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -10841,6 +11650,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz", "integrity": "sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.3", "core-js-compat": "^3.40.0" @@ -10854,6 +11664,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz", "integrity": "sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==", "devOptional": true, + "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.4" }, @@ -10865,6 +11676,7 @@ "version": "0.19.13", "resolved": "https://registry.npmjs.org/babel-plugin-react-native-web/-/babel-plugin-react-native-web-0.19.13.tgz", "integrity": "sha512-4hHoto6xaN23LCyZgL9LJZc3olmAxd7b6jDzlZnKXAh4rRAbZRKNBJoOOdp46OBqgy+K0t0guTj5/mhA8inymQ==", + "license": "MIT", "optional": true, "peer": true }, @@ -10872,6 +11684,7 @@ "version": "0.25.1", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.25.1.tgz", "integrity": "sha512-IVNpGzboFLfXZUAwkLFcI/bnqVbwky0jP3eBno4HKtqvQJAHBLdgxiG6lQ4to0+Q/YCN3PO0od5NZwIKyY4REQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -10882,6 +11695,7 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-enums/-/babel-plugin-transform-flow-enums-0.0.2.tgz", "integrity": "sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -10892,6 +11706,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -10919,6 +11734,7 @@ "version": "13.1.11", "resolved": "https://registry.npmjs.org/babel-preset-expo/-/babel-preset-expo-13.1.11.tgz", "integrity": "sha512-jigWjvhRVdm9UTPJ1wjLYJ0OJvD5vLZ8YYkEknEl6+9S1JWORO/y3xtHr/hNj5n34nOilZqdXrmNFcqKc8YTsg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -10957,6 +11773,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -10967,6 +11784,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -10983,12 +11801,14 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" }, "node_modules/barcode-detector": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/barcode-detector/-/barcode-detector-2.2.2.tgz", "integrity": "sha512-JcSekql+EV93evfzF9zBr+Y6aRfkR+QFvgyzbwQ0dbymZXoAI9+WgT7H1E429f+3RKNncHz2CW98VQtaaKpmfQ==", + "license": "MIT", "dependencies": { "@types/dom-webcodecs": "^0.1.11", "zxing-wasm": "1.1.3" @@ -10999,6 +11819,7 @@ "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.4.tgz", "integrity": "sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==", "dev": true, + "license": "Apache-2.0", "optional": true }, "node_modules/bare-fs": { @@ -11006,6 +11827,7 @@ "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.1.5.tgz", "integrity": "sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==", "dev": true, + "license": "Apache-2.0", "optional": true, "dependencies": { "bare-events": "^2.5.4", @@ -11029,6 +11851,7 @@ "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.6.1.tgz", "integrity": "sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==", "dev": true, + "license": "Apache-2.0", "optional": true, "engines": { "bare": ">=1.14.0" @@ -11039,6 +11862,7 @@ "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", "dev": true, + "license": "Apache-2.0", "optional": true, "dependencies": { "bare-os": "^3.0.1" @@ -11049,6 +11873,7 @@ "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.6.5.tgz", "integrity": "sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==", "dev": true, + "license": "Apache-2.0", "optional": true, "dependencies": { "streamx": "^2.21.0" @@ -11076,6 +11901,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/base-x/-/base-x-4.0.1.tgz", "integrity": "sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==", + "license": "MIT", "optional": true }, "node_modules/base64-js": { @@ -11095,12 +11921,14 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/base64url": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "license": "MIT", "optional": true, "engines": { "node": ">=6.0.0" @@ -11110,6 +11938,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64url-universal/-/base64url-universal-2.0.0.tgz", "integrity": "sha512-6Hpg7EBf3t148C3+fMzjf+CHnADVDafWzlJUXAqqqbm4MKNXbsoPdOkWeRTjNlkYG7TpyjIpRO1Gk0SnsFD1rw==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "base64url": "^3.0.1" @@ -11121,12 +11950,14 @@ "node_modules/bech32": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", - "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==", + "license": "MIT" }, "node_modules/better-opn": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -11140,6 +11971,7 @@ "version": "1.6.52", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", "engines": { "node": ">=0.6" } @@ -11148,6 +11980,7 @@ "version": "9.3.0", "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.0.tgz", "integrity": "sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA==", + "license": "MIT", "engines": { "node": "*" } @@ -11157,6 +11990,7 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -11168,6 +12002,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", "dependencies": { "file-uri-to-path": "1.0.0" } @@ -11177,6 +12012,7 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", "integrity": "sha512-pfqikmByp+lifZCS0p6j6KreV6kNU6Apzpm2nKOk+94cZb/jvle55+JxWiByUQ0Wo/+XnDXEy5MxxKMb6r0VIw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~1.0.26" } @@ -11185,13 +12021,15 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bl/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -11203,24 +12041,28 @@ "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/blakejs": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "license": "MIT" }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bluebird-lst": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", "dev": true, + "license": "MIT", "dependencies": { "bluebird": "^3.5.5" } @@ -11228,13 +12070,15 @@ "node_modules/bn.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", - "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==" + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", + "license": "MIT" }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/boolean": { "version": "3.2.0", @@ -11242,6 +12086,7 @@ "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dev": true, + "license": "MIT", "optional": true }, "node_modules/bplist-creator": { @@ -11249,6 +12094,7 @@ "resolved": "https://registry.npmjs.org/bplist-creator/-/bplist-creator-0.1.0.tgz", "integrity": "sha512-sXaHZicyEEmY86WyueLTQesbeoH/mquvarJaQNbjuOQO+7gbFcDEWqKmcWA4cOTLzFlfgvkiVxolk1k5bBIpmg==", "devOptional": true, + "license": "MIT", "dependencies": { "stream-buffers": "2.2.x" } @@ -11257,6 +12103,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz", "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==", + "license": "MIT", "dependencies": { "big-integer": "1.6.x" }, @@ -11268,6 +12115,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -11277,6 +12125,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "devOptional": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -11287,12 +12136,14 @@ "node_modules/brorand": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "license": "MIT" }, "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "license": "MIT", "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -11307,6 +12158,7 @@ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, + "license": "MIT", "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -11318,6 +12170,7 @@ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -11341,6 +12194,7 @@ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^5.2.1", "randombytes": "^2.1.0", @@ -11355,6 +12209,7 @@ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dev": true, + "license": "ISC", "dependencies": { "bn.js": "^5.2.1", "browserify-rsa": "^4.1.0", @@ -11375,13 +12230,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/browserify-sign/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -11396,13 +12253,15 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/browserify-sign/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -11411,7 +12270,8 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/browserslist": { "version": "4.24.5", @@ -11432,6 +12292,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "caniuse-lite": "^1.0.30001716", "electron-to-chromium": "^1.5.149", @@ -11449,6 +12310,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", "dependencies": { "base-x": "^3.0.2" } @@ -11457,6 +12319,7 @@ "version": "3.0.11", "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.11.tgz", "integrity": "sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==", + "license": "MIT", "dependencies": { "safe-buffer": "^5.0.1" } @@ -11465,6 +12328,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "license": "MIT", "dependencies": { "bs58": "^4.0.0", "create-hash": "^1.1.0", @@ -11475,6 +12339,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "license": "Apache-2.0", "optional": true, "peer": true, "dependencies": { @@ -11499,6 +12364,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -11508,6 +12374,7 @@ "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", "engines": { "node": "*" } @@ -11516,23 +12383,27 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/buffer-reverse": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", - "integrity": "sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==" + "integrity": "sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==", + "license": "MIT" }, "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "license": "MIT" }, "node_modules/builder-util": { "version": "25.1.7", "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-25.1.7.tgz", "integrity": "sha512-7jPjzBwEGRbwNcep0gGNpLXG9P94VA3CPAZQCzxkFXiV2GMQKlziMbY//rXPI7WKfhsvGgFXjTcXdBEwgXw9ww==", "dev": true, + "license": "MIT", "dependencies": { "@types/debug": "^4.1.6", "7zip-bin": "~5.2.0", @@ -11557,6 +12428,7 @@ "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz", "integrity": "sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4", "sax": "^1.2.4" @@ -11570,6 +12442,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -11583,6 +12456,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -11594,6 +12468,7 @@ "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/fs": "^2.1.0", "@npmcli/move-file": "^2.0.0", @@ -11624,6 +12499,7 @@ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11643,6 +12519,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -11652,6 +12529,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -11665,6 +12543,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -11680,6 +12559,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -11691,6 +12571,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -11711,6 +12592,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -11723,6 +12605,7 @@ "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.6.0" } @@ -11732,6 +12615,7 @@ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dev": true, + "license": "MIT", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -11750,6 +12634,7 @@ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", @@ -11767,6 +12652,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" @@ -11780,6 +12666,7 @@ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" @@ -11795,6 +12682,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -11808,6 +12696,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -11818,6 +12707,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -11832,6 +12722,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -11840,6 +12731,7 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", "engines": { "node": ">=6" } @@ -11849,6 +12741,7 @@ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -11858,6 +12751,7 @@ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", @@ -11875,6 +12769,7 @@ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -11897,12 +12792,14 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/canonicalize": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-2.1.0.tgz", "integrity": "sha512-F705O3xrsUtgt98j7leetNhTWPe+5S72rlL5O4jA1pKqBVQ/dT1O1D6PFxmSXvc0SUOinWS57DKx0I3CHrXJHQ==", + "license": "Apache-2.0", "bin": { "canonicalize": "bin/canonicalize.js" } @@ -11911,6 +12808,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/canvas-renderer/-/canvas-renderer-2.2.1.tgz", "integrity": "sha512-RrBgVL5qCEDIXpJ6NrzyRNoTnXxYarqm/cS/W6ERhUJts5UQtt/XPEosGN3rqUkZ4fjBArlnCbsISJ+KCFnIAg==", + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -11920,6 +12818,7 @@ "resolved": "https://registry.npmjs.org/cbor-extract/-/cbor-extract-2.2.0.tgz", "integrity": "sha512-Ig1zM66BjLfTXpNgKpvBePq271BPOvu8MR0Jl080yG7Jsl+wAZunfrwiwA+9ruzm/WEdIV5QF/bjDZTqyAIVHA==", "hasInstallScript": true, + "license": "MIT", "optional": true, "dependencies": { "node-gyp-build-optional-packages": "5.1.1" @@ -11940,6 +12839,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/cbor-x/-/cbor-x-1.6.0.tgz", "integrity": "sha512-0kareyRwHSkL6ws5VXHEf8uY1liitysCVJjlmhaLG+IXLqhSaOO+t63coaso7yjwEzWZzLy8fJo06gZDVQM9Qg==", + "license": "MIT", "optionalDependencies": { "cbor-extract": "^2.2.0" } @@ -11949,6 +12849,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "devOptional": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -11965,6 +12866,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "devOptional": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -11977,6 +12879,7 @@ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -11987,6 +12890,7 @@ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -11997,6 +12901,7 @@ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -12007,6 +12912,7 @@ "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-7.1.1.tgz", "integrity": "sha512-wy3mC1x4ye+O+QkEinVJkPf5u2vsrDIYW9G7ZuwFl6v/Yu0LwUuT2POsb+NUWApebyxfkQq6+yDfRExbnI5rcw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "regexp-to-ast": "0.5.0" } @@ -12016,6 +12922,7 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -12040,6 +12947,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -12051,6 +12959,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "license": "ISC", "engines": { "node": ">=10" } @@ -12059,6 +12968,7 @@ "version": "0.15.2", "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", + "license": "Apache-2.0", "optional": true, "peer": true, "dependencies": { @@ -12078,6 +12988,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz", "integrity": "sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==", + "license": "Apache-2.0", "optional": true, "peer": true, "dependencies": { @@ -12094,6 +13005,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -12110,7 +13022,8 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ci-info": { "version": "3.9.0", @@ -12123,6 +13036,7 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } @@ -12131,6 +13045,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", + "license": "MIT", "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1" @@ -12142,13 +13057,15 @@ "node_modules/class-transformer": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", - "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==", + "license": "MIT" }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -12158,6 +13075,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -12170,6 +13088,7 @@ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -12182,6 +13101,7 @@ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "slice-ansi": "^3.0.0", @@ -12199,6 +13119,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "ansi-styles": "^4.0.0", @@ -12213,6 +13134,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -12227,6 +13149,7 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=0.8" } @@ -12236,6 +13159,7 @@ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" }, @@ -12248,6 +13172,7 @@ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "devOptional": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" @@ -12260,6 +13185,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -12270,13 +13196,15 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/color-string": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "devOptional": true, + "license": "MIT", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -12287,6 +13215,7 @@ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "devOptional": true, + "license": "ISC", "bin": { "color-support": "bin.js" } @@ -12295,6 +13224,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -12307,6 +13237,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, + "license": "MIT", "engines": { "node": ">= 12" } @@ -12316,6 +13247,7 @@ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -12325,6 +13257,7 @@ "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, + "license": "MIT", "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" @@ -12335,6 +13268,7 @@ "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -12343,6 +13277,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==", + "license": "MIT", "optional": true }, "node_modules/compress-commons": { @@ -12350,6 +13285,7 @@ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "buffer-crc32": "^0.2.13", @@ -12366,6 +13302,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "inherits": "^2.0.3", @@ -12380,6 +13317,7 @@ "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -12393,6 +13331,7 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.0.tgz", "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -12412,6 +13351,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -12422,6 +13362,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", "optional": true, "peer": true }, @@ -12429,6 +13370,7 @@ "version": "0.6.4", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -12439,7 +13381,8 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -12449,6 +13392,7 @@ "engines": [ "node >= 0.8" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -12460,13 +13404,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-stream/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -12481,13 +13427,15 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-stream/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -12497,6 +13445,7 @@ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.2", "date-fns": "^2.30.0", @@ -12524,6 +13473,7 @@ "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.8-rc1.tgz", "integrity": "sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg==", "dev": true, + "license": "MIT", "dependencies": { "glob": "^10.3.12", "typescript": "^5.4.3" @@ -12534,6 +13484,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -12554,6 +13505,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -12569,6 +13521,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -12578,6 +13531,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -12590,6 +13544,7 @@ "version": "3.7.0", "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -12606,6 +13561,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -12616,6 +13572,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", "optional": true, "peer": true }, @@ -12623,13 +13580,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "devOptional": true + "devOptional": true, + "license": "ISC" }, "node_modules/conventional-changelog": { "version": "3.1.25", "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz", "integrity": "sha512-ryhi3fd1mKf3fSjbLXOfK2D06YwKNic1nC9mWqybBHdObPd8KJ2vjaXZfYj1U23t+V8T8n0d7gwnc9XbIdFbyQ==", "dev": true, + "license": "MIT", "dependencies": { "conventional-changelog-angular": "^5.0.12", "conventional-changelog-atom": "^2.0.8", @@ -12652,6 +13611,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0", "q": "^1.5.1" @@ -12665,6 +13625,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-atom/-/conventional-changelog-atom-2.0.8.tgz", "integrity": "sha512-xo6v46icsFTK3bb7dY/8m2qvc8sZemRgdqLb/bjpBsH2UyOS8rKNTgcb5025Hri6IpANPApbXMg15QLb1LJpBw==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -12677,6 +13638,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-codemirror/-/conventional-changelog-codemirror-2.0.8.tgz", "integrity": "sha512-z5DAsn3uj1Vfp7po3gpt2Boc+Bdwmw2++ZHa5Ak9k0UKsYAO5mH1UBTN0qSCuJZREIhX6WU4E1p3IW2oRCNzQw==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -12689,6 +13651,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", "integrity": "sha512-LTTQV4fwOM4oLPad317V/QNQ1FY4Hju5qeBIM1uTHbrnCE+Eg4CdRZ3gO2pUeR+tzWdp80M2j3qFFEDWVqOV4g==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0", "lodash": "^4.17.15", @@ -12703,6 +13666,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", "dev": true, + "license": "MIT", "dependencies": { "add-stream": "^1.0.0", "conventional-changelog-writer": "^5.0.0", @@ -12728,6 +13692,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-ember/-/conventional-changelog-ember-2.0.9.tgz", "integrity": "sha512-ulzIReoZEvZCBDhcNYfDIsLTHzYHc7awh+eI44ZtV5cx6LVxLlVtEmcO+2/kGIHGtw+qVabJYjdI5cJOQgXh1A==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -12740,6 +13705,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-eslint/-/conventional-changelog-eslint-3.0.9.tgz", "integrity": "sha512-6NpUCMgU8qmWmyAMSZO5NrRd7rTgErjrm4VASam2u5jrZS0n38V7Y9CzTtLT2qwz5xEChDR4BduoWIr8TfwvXA==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -12752,6 +13718,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-express/-/conventional-changelog-express-2.0.6.tgz", "integrity": "sha512-SDez2f3iVJw6V563O3pRtNwXtQaSmEfTCaTBPCqn0oG0mfkq0rX4hHBq5P7De2MncoRixrALj3u3oQsNK+Q0pQ==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -12764,6 +13731,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-jquery/-/conventional-changelog-jquery-3.0.11.tgz", "integrity": "sha512-x8AWz5/Td55F7+o/9LQ6cQIPwrCjfJQ5Zmfqi8thwUEKHstEn4kTIofXub7plf1xvFA2TqhZlq7fy5OmV6BOMw==", "dev": true, + "license": "ISC", "dependencies": { "q": "^1.5.1" }, @@ -12776,6 +13744,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-jshint/-/conventional-changelog-jshint-2.0.9.tgz", "integrity": "sha512-wMLdaIzq6TNnMHMy31hql02OEQ8nCQfExw1SE0hYL5KvU+JCTuPaDO+7JiogGT2gJAxiUGATdtYYfh+nT+6riA==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0", "q": "^1.5.1" @@ -12789,6 +13758,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -12798,6 +13768,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", "dev": true, + "license": "MIT", "dependencies": { "conventional-commits-filter": "^2.0.7", "dateformat": "^3.0.0", @@ -12821,6 +13792,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -12830,6 +13802,7 @@ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", "dev": true, + "license": "MIT", "dependencies": { "lodash.ismatch": "^4.4.0", "modify-values": "^1.0.0" @@ -12843,6 +13816,7 @@ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-text-path": "^1.0.1", "JSONStream": "^1.0.4", @@ -12862,13 +13836,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/core-js-compat": { "version": "3.42.0", "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.42.0.tgz", "integrity": "sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==", "devOptional": true, + "license": "MIT", "dependencies": { "browserslist": "^4.24.4" }, @@ -12881,12 +13857,14 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cosmiconfig": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -12903,6 +13881,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -12913,6 +13892,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -12927,6 +13907,7 @@ "version": "3.14.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -12941,6 +13922,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -12951,6 +13933,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause", "optional": true, "peer": true }, @@ -12959,6 +13942,7 @@ "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "buffer": "^5.1.0" @@ -12969,6 +13953,7 @@ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "dev": true, + "license": "Apache-2.0", "peer": true, "bin": { "crc32": "bin/crc32.njs" @@ -12996,6 +13981,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "optional": true, "dependencies": { "base64-js": "^1.3.1", @@ -13007,6 +13993,7 @@ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "crc-32": "^1.2.0", @@ -13021,6 +14008,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "inherits": "^2.0.3", @@ -13036,6 +14024,7 @@ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" @@ -13045,12 +14034,14 @@ "version": "4.12.2", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -13063,6 +14054,7 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "license": "MIT", "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -13076,12 +14068,14 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/credential-status": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/credential-status/-/credential-status-2.0.6.tgz", "integrity": "sha512-l5ZwSbX/UXFJ3DQ3dFt4rc2BtfUu/rhlkefR7BL9EZsKPyCe21okJA9mDy4h/nXvMEwpYjSQEa5vzR7KZqhI9g==", + "license": "Apache-2.0", "dependencies": { "did-jwt": "^6.3.0", "did-resolver": "^4.0.0" @@ -13091,6 +14085,7 @@ "version": "6.11.6", "resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-6.11.6.tgz", "integrity": "sha512-OfbWknRxJuUqH6Lk0x+H1FsuelGugLbBDEwsoJnicFOntIG/A4y19fn0a8RLxaQbWQ5gXg0yDq5E2huSBiiXzw==", + "license": "Apache-2.0", "dependencies": { "@stablelib/ed25519": "^1.0.2", "@stablelib/random": "^1.0.1", @@ -13109,12 +14104,14 @@ "node_modules/credential-status/node_modules/multiformats": { "version": "9.9.0", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", + "license": "(Apache-2.0 AND MIT)" }, "node_modules/credential-status/node_modules/uint8arrays": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", + "license": "MIT", "dependencies": { "multiformats": "^9.4.2" } @@ -13123,17 +14120,20 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/credentials-context/-/credentials-context-2.0.0.tgz", "integrity": "sha512-/mFKax6FK26KjgV2KW2D4YqKgoJ5DVJpNt87X2Jc9IxT2HBMy7nEIlc+n7pEi+YFFe721XqrvZPd+jbyyBjsvQ==", + "license": "SEE LICENSE IN LICENSE.md", "optional": true }, "node_modules/cropperjs": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.6.2.tgz", - "integrity": "sha512-nhymn9GdnV3CqiEHJVai54TULFAE3VshJTXSqSJKa8yXAKyBKDWdhHarnlIPrshJ0WMFTGuFvG02YjLXfPiuOA==" + "integrity": "sha512-nhymn9GdnV3CqiEHJVai54TULFAE3VshJTXSqSJKa8yXAKyBKDWdhHarnlIPrshJ0WMFTGuFvG02YjLXfPiuOA==", + "license": "MIT" }, "node_modules/cross-fetch": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.1.0.tgz", "integrity": "sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==", + "license": "MIT", "dependencies": { "node-fetch": "^2.7.0" } @@ -13142,6 +14142,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -13156,6 +14157,7 @@ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", "dev": true, + "license": "MIT", "dependencies": { "browserify-cipher": "^1.0.1", "browserify-sign": "^4.2.3", @@ -13180,12 +14182,14 @@ "node_modules/crypto-js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", - "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" }, "node_modules/crypto-ld": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/crypto-ld/-/crypto-ld-7.0.0.tgz", "integrity": "sha512-RrXy6aB0TOhSiqsgavTQt1G8mKomKIaNLb2JZxj7A/Vi0EwmXguuBQoeiAvePfK6bDR3uQbqYnaLLs4irTWwgw==", + "license": "BSD-3-Clause", "optional": true, "engines": { "node": ">=14" @@ -13196,6 +14200,7 @@ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -13205,6 +14210,7 @@ "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", @@ -13221,6 +14227,7 @@ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -13233,6 +14240,7 @@ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -13243,13 +14251,15 @@ "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" }, "node_modules/dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -13258,6 +14268,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", "optional": true, "engines": { "node": ">= 12" @@ -13268,6 +14279,7 @@ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -13285,6 +14297,7 @@ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -13302,6 +14315,7 @@ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -13319,6 +14333,7 @@ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.21.0" }, @@ -13335,6 +14350,7 @@ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -13342,12 +14358,14 @@ "node_modules/dayjs": { "version": "1.11.13", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -13364,6 +14382,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -13373,6 +14392,7 @@ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, + "license": "MIT", "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" @@ -13389,6 +14409,7 @@ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -13398,6 +14419,7 @@ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz", "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==", "dev": true, + "license": "MIT", "dependencies": { "character-entities": "^2.0.0" }, @@ -13410,6 +14432,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -13424,6 +14447,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -13435,6 +14459,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.6.0.tgz", "integrity": "sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==", + "license": "MIT", "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -13448,6 +14473,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -13456,13 +14482,15 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -13472,6 +14500,7 @@ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "devOptional": true, + "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -13484,6 +14513,7 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -13494,6 +14524,7 @@ "integrity": "sha512-+WCbb4+ez/SZ77Sdy1iadagFiVzMB89IKOBhglgnUkVxOxRWmmFsz8UDSNWh4Rhq+3wr/vMFlYj+rdEwWUDdng==", "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dev": true, + "license": "MIT", "dependencies": { "abstract-leveldown": "~0.12.1" } @@ -13503,6 +14534,7 @@ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -13519,6 +14551,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", "engines": { "node": ">=8" } @@ -13528,6 +14561,7 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -13545,6 +14579,7 @@ "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", "dev": true, + "license": "MIT", "dependencies": { "globby": "^11.0.1", "graceful-fs": "^4.2.4", @@ -13568,6 +14603,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -13582,6 +14618,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -13590,12 +14627,14 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -13607,6 +14646,7 @@ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -13616,6 +14656,7 @@ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -13625,6 +14666,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -13636,6 +14678,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "license": "Apache-2.0", "engines": { "node": ">=8" } @@ -13645,6 +14688,7 @@ "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/devlop": { @@ -13652,6 +14696,7 @@ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "dev": true, + "license": "MIT", "dependencies": { "dequal": "^2.0.0" }, @@ -13664,6 +14709,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.2.7.tgz", "integrity": "sha512-2a+BXvVhY5op+smDRLxeBAivE7YcYaneXJ1la3HOkUfX9zKkE/AJ8CNgjiXbtXepFyFmJNGSbmjOwqbT749r/w==", + "license": "Apache-2.0", "engines": { "node": ">=6.0" } @@ -13672,6 +14718,7 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/dexie-export-import/-/dexie-export-import-4.1.4.tgz", "integrity": "sha512-3bw171qUuOTWSYLXI7C/0M6p1X65Rho3tu1IvD9By8jn0+3t3dLSkDlZ1BC6MbABl3kRlhtGigzC+SF+qcS5Og==", + "license": "Apache-2.0", "peerDependencies": { "dexie": "^2.0.4 || ^3.0.0 || ^4.0.1" } @@ -13681,6 +14728,7 @@ "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", "dev": true, + "license": "ISC", "dependencies": { "asap": "^2.0.0", "wrappy": "1" @@ -13690,6 +14738,7 @@ "version": "7.4.7", "resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-7.4.7.tgz", "integrity": "sha512-Apz7nIfIHSKWIMaEP5L/K8xkwByvjezjTG0xiqwKdnNj1x8M0+Yasury5Dm/KPltxi2PlGfRPf3IejRKZrT8mQ==", + "license": "Apache-2.0", "dependencies": { "@noble/ciphers": "^0.4.0", "@noble/curves": "^1.0.0", @@ -13706,6 +14755,7 @@ "version": "3.2.15", "resolved": "https://registry.npmjs.org/did-jwt-vc/-/did-jwt-vc-3.2.15.tgz", "integrity": "sha512-M/WPiL34CQUiN4bvWnZ0OFHJ3usPtstfQfbNbHAWHvwjeCGi7nAdv62VXHgy2xIhJMc790hH7PsMN3i6SCGEyg==", + "license": "ISC", "dependencies": { "did-jwt": "^7.4.5", "did-resolver": "^4.1.0" @@ -13717,12 +14767,14 @@ "node_modules/did-jwt/node_modules/multiformats": { "version": "9.9.0", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", + "license": "(Apache-2.0 AND MIT)" }, "node_modules/did-jwt/node_modules/uint8arrays": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", + "license": "MIT", "dependencies": { "multiformats": "^9.4.2" } @@ -13730,19 +14782,22 @@ "node_modules/did-resolver": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/did-resolver/-/did-resolver-4.1.0.tgz", - "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==" + "integrity": "sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==", + "license": "Apache-2.0" }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/diff": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -13752,6 +14807,7 @@ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -13762,18 +14818,21 @@ "version": "4.12.2", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/dijkstrajs": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", - "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==", + "license": "MIT" }, "node_modules/dir-compare": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", "dev": true, + "license": "MIT", "dependencies": { "minimatch": "^3.0.5", "p-limit": "^3.1.0 " @@ -13784,6 +14843,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -13794,6 +14854,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -13806,6 +14867,7 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -13817,13 +14879,15 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/dmg-builder": { "version": "25.1.8", "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-25.1.8.tgz", "integrity": "sha512-NoXo6Liy2heSklTI5OIZbCgXC1RzrDQsZkeEwXhdOro3FT1VBOvbubvscdPnjVuQ4AMwwv61oaH96AbiYg9EnQ==", "dev": true, + "license": "MIT", "dependencies": { "app-builder-lib": "25.1.8", "builder-util": "25.1.7", @@ -13841,6 +14905,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -13855,6 +14920,7 @@ "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -13881,6 +14947,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -13893,6 +14960,7 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -13907,6 +14975,7 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, + "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -13921,13 +14990,15 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.2.0" }, @@ -13943,6 +15014,7 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -13957,6 +15029,7 @@ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-obj": "^2.0.0" }, @@ -13968,6 +15041,7 @@ "version": "16.5.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -13980,6 +15054,7 @@ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", "devOptional": true, + "license": "BSD-2-Clause", "dependencies": { "dotenv": "^16.4.5" }, @@ -13994,6 +15069,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", @@ -14006,24 +15082,28 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" }, "node_modules/ed25519-signature-2018-context": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ed25519-signature-2018-context/-/ed25519-signature-2018-context-1.1.0.tgz", "integrity": "sha512-ppDWYMNwwp9bploq0fS4l048vHIq41nWsAbPq6H4mNVx9G/GxW3fwg4Ln0mqctP13MoEpREK7Biz8TbVVdYXqA==", + "license": "BSD-3-Clause", "optional": true }, "node_modules/ed25519-signature-2020-context": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ed25519-signature-2020-context/-/ed25519-signature-2020-context-1.1.0.tgz", "integrity": "sha512-dBGSmoUIK6h2vadDctrDnhhTO01PR2hJk0mRNEfrRDPCjaIwrfy4J+eziEQ9Q1m8By4f/CSRgKM1h53ydKfdNg==", + "license": "BSD-3-Clause", "optional": true }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT", "optional": true, "peer": true }, @@ -14032,6 +15112,7 @@ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -14048,6 +15129,7 @@ "integrity": "sha512-xmdAs5QWRkInC7TpXGNvzo/7exojubk+72jn1oJL7keNeIlw7xNglf8TGtJtkR4rWC5FJq0oXiIXPS9BcK2Irg==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "@electron/get": "^2.0.0", "@types/node": "^20.9.0", @@ -14065,6 +15147,7 @@ "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-25.1.8.tgz", "integrity": "sha512-poRgAtUHHOnlzZnc9PK4nzG53xh74wj2Jy7jkTrqZ0MWPoHGh1M2+C//hGeYdA+4K8w4yiVCNYoLXF7ySj2Wig==", "dev": true, + "license": "MIT", "dependencies": { "app-builder-lib": "25.1.8", "builder-util": "25.1.7", @@ -14090,6 +15173,7 @@ "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-25.1.8.tgz", "integrity": "sha512-2ntkJ+9+0GFP6nAISiMabKt6eqBB0kX1QqHNWFWAXgi0VULKGisM46luRFpIBiU3u/TDmhZMM8tzvo2Abn3ayg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "app-builder-lib": "25.1.8", @@ -14103,6 +15187,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -14118,6 +15203,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -14132,6 +15218,7 @@ "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-25.1.7.tgz", "integrity": "sha512-+jbTkR9m39eDBMP4gfbqglDd6UvBC7RLh5Y0MhFSsc6UkGHj9Vj9TWobxevHYMMqmoujL11ZLjfPpMX+Pt6YEg==", "dev": true, + "license": "MIT", "dependencies": { "@types/fs-extra": "^9.0.11", "builder-util": "25.1.7", @@ -14147,6 +15234,7 @@ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -14156,6 +15244,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -14166,15 +15255,17 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.157", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.157.tgz", - "integrity": "sha512-/0ybgsQd1muo8QlnuTpKwtl0oX5YMlUGbm8xyqgDU00motRkKFFbUJySAQBWcY79rVqNLWIWa87BGVGClwAB2w==", - "devOptional": true + "version": "1.5.158", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.158.tgz", + "integrity": "sha512-9vcp2xHhkvraY6AHw2WMi+GDSLPX42qe2xjYaVoZqFRJiOcilVQFq9mZmpuHEQpzlgGDelKlV7ZiGcmMsc8WxQ==", + "devOptional": true, + "license": "ISC" }, "node_modules/elementtree": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz", "integrity": "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==", + "license": "Apache-2.0", "dependencies": { "sax": "1.1.4" }, @@ -14185,12 +15276,14 @@ "node_modules/elementtree/node_modules/sax": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz", - "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==" + "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==", + "license": "ISC" }, "node_modules/elliptic": { "version": "6.6.1", "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -14204,17 +15297,20 @@ "node_modules/elliptic/node_modules/bn.js": { "version": "4.12.2", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", - "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==" + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "license": "MIT" }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -14225,6 +15321,7 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "license": "MIT", "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -14234,6 +15331,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", "dependencies": { "once": "^1.4.0" } @@ -14242,6 +15340,7 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -14253,6 +15352,7 @@ "version": "0.4.2", "resolved": "https://registry.npmjs.org/env-editor/-/env-editor-0.4.2.tgz", "integrity": "sha512-ObFo8v4rQJAE59M69QzwloxPZtd33TpYEIjtKD1rrFDcM1Gd7IkDxEBU+HriziN6HSHQnBJi8Dmy+JWkav5HKA==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -14263,6 +15363,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", "engines": { "node": ">=6" } @@ -14271,13 +15372,15 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/errno": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, + "license": "MIT", "dependencies": { "prr": "~1.0.1" }, @@ -14290,6 +15393,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "devOptional": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } @@ -14298,6 +15402,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -14309,6 +15414,7 @@ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.10.tgz", "integrity": "sha512-MtUbM072wlJNyeYAe0mhzrD+M6DIJa96CZAOBBrhDbgKnB4MApIKefcyAB1eOdYn8cUNZgvwBvEzdoAYsxgEIw==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", @@ -14373,6 +15479,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -14381,6 +15488,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -14389,6 +15497,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -14400,6 +15509,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", @@ -14415,6 +15525,7 @@ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", @@ -14432,6 +15543,7 @@ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/esbuild": { @@ -14440,6 +15552,7 @@ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -14476,6 +15589,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -14484,6 +15598,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT", "optional": true, "peer": true }, @@ -14492,6 +15607,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -14505,6 +15621,7 @@ "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -14560,6 +15677,7 @@ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", "dev": true, + "license": "MIT", "bin": { "eslint-config-prettier": "bin/cli.js" }, @@ -14572,6 +15690,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.0.tgz", "integrity": "sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==", "dev": true, + "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", "synckit": "^0.11.0" @@ -14602,6 +15721,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.33.0.tgz", "integrity": "sha512-174lJKuNsuDIlLpjeXc5E2Tss8P44uIimAfGD0b90k0NoirJqpG7stLuU9Vp/9ioTOrQdWVREc4mRd1BD+CvGw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "globals": "^13.24.0", @@ -14624,6 +15744,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -14640,6 +15761,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -14652,6 +15774,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -14662,6 +15785,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14673,6 +15797,7 @@ "version": "3.2.25", "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==", + "license": "MIT", "optional": true, "engines": { "node": ">=6" @@ -14683,6 +15808,7 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -14699,6 +15825,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", "optional": true, "peer": true, "bin": { @@ -14714,6 +15841,7 @@ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -14726,6 +15854,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -14738,6 +15867,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -14745,13 +15875,15 @@ "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -14760,6 +15892,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -14770,6 +15903,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz", "integrity": "sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA==", + "license": "MIT", "dependencies": { "@noble/hashes": "^1.4.0" } @@ -14778,6 +15912,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "license": "MIT", "dependencies": { "@noble/curves": "1.4.2", "@noble/hashes": "1.4.0", @@ -14789,6 +15924,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.4.0" }, @@ -14800,6 +15936,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -14811,6 +15948,7 @@ "version": "7.1.5", "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "license": "MPL-2.0", "dependencies": { "@types/bn.js": "^5.1.0", "bn.js": "^5.1.2", @@ -14826,6 +15964,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "license": "MIT", "dependencies": { "@types/pbkdf2": "^3.0.0", "@types/secp256k1": "^4.0.1", @@ -14845,9 +15984,9 @@ } }, "node_modules/ethers": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.14.1.tgz", - "integrity": "sha512-JnFiPFi3sK2Z6y7jZ3qrafDMwiXmU+6cNZ0M+kPq+mTy9skqEzwqAdFW3nb/em2xjlIVXX6Lz8ID6i3LmS4+fQ==", + "version": "6.14.3", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.14.3.tgz", + "integrity": "sha512-qq7ft/oCJohoTcsNPFaXSQUm457MA5iWqkf1Mb11ujONdg7jBI6sAOrHaTi3j0CBqIGFSCeR/RMc+qwRRub7IA==", "funding": [ { "type": "individual", @@ -14858,6 +15997,7 @@ "url": "https://www.buymeacoffee.com/ricmoo" } ], + "license": "MIT", "dependencies": { "@adraffy/ens-normalize": "1.10.1", "@noble/curves": "1.2.0", @@ -14875,6 +16015,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.2" }, @@ -14886,6 +16027,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -14897,6 +16039,7 @@ "version": "22.7.5", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "license": "MIT", "dependencies": { "undici-types": "~6.19.2" } @@ -14904,17 +16047,20 @@ "node_modules/ethers/node_modules/aes-js": { "version": "4.0.0-beta.5", "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", - "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==" + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "license": "MIT" }, "node_modules/ethers/node_modules/tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" }, "node_modules/ethjs-unit": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", + "license": "MIT", "dependencies": { "bn.js": "4.11.6", "number-to-bn": "1.7.0" @@ -14927,12 +16073,14 @@ "node_modules/ethjs-unit/node_modules/bn.js": { "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "license": "MIT" }, "node_modules/ethr-did": { "version": "3.0.35", "resolved": "https://registry.npmjs.org/ethr-did/-/ethr-did-3.0.35.tgz", "integrity": "sha512-vWTGIcdnzyTeahNw25P4eQEMo6gVQEVEg0Kit8spDPB6neUAk5HaJXfxG9i8gKPJBOgyVNkMQ/aPOgVhnSig3w==", + "license": "Apache-2.0", "dependencies": { "did-jwt": "^8.0.0", "did-resolver": "^4.1.0", @@ -14944,6 +16092,7 @@ "version": "11.0.3", "resolved": "https://registry.npmjs.org/ethr-did-resolver/-/ethr-did-resolver-11.0.3.tgz", "integrity": "sha512-lQ1T/SZfgR6Kp05/GSIXnMELxQ5H6M6OCTH4wBTVSAgHzbJiDNVIYWzg/c+NniIM88B0ViAi4CaiCHaiUlvPQg==", + "license": "Apache-2.0", "dependencies": { "did-resolver": "^4.1.0", "ethers": "^6.8.1" @@ -14953,6 +16102,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==", + "license": "MIT", "engines": { "node": "^14.21.3 || >=16" }, @@ -14964,6 +16114,7 @@ "version": "8.0.15", "resolved": "https://registry.npmjs.org/did-jwt/-/did-jwt-8.0.15.tgz", "integrity": "sha512-E+Qf+E0vUdAv2PcldxmvZwtPdmExaXkvwQA7tp3TKkCiK9aPNUrD7ZKSPi2lJQ2ZaGe3z0VKceQtGRl5Kolghg==", + "license": "Apache-2.0", "dependencies": { "@noble/ciphers": "^1.0.0", "@noble/curves": "^1.0.0", @@ -14979,12 +16130,14 @@ "node_modules/ethr-did/node_modules/multiformats": { "version": "9.9.0", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", - "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==" + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", + "license": "(Apache-2.0 AND MIT)" }, "node_modules/ethr-did/node_modules/uint8arrays": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.1.1.tgz", "integrity": "sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==", + "license": "MIT", "dependencies": { "multiformats": "^9.4.2" } @@ -14993,6 +16146,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", "engines": { "node": ">=6" } @@ -15001,6 +16155,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", "engines": { "node": ">=0.8.x" } @@ -15009,6 +16164,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "license": "MIT", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -15018,6 +16174,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/exec-async/-/exec-async-2.2.0.tgz", "integrity": "sha512-87OpwcEiMia/DeiKFzaQNBNFeN3XkkpYIh9FyOqq5mS2oKv3CBE67PXoEKcr6nodWdXNogTiQ0jE2NGuoffXPw==", + "license": "MIT", "optional": true, "peer": true }, @@ -15025,6 +16182,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", "engines": { "node": ">=6" } @@ -15033,6 +16191,7 @@ "version": "53.0.9", "resolved": "https://registry.npmjs.org/expo/-/expo-53.0.9.tgz", "integrity": "sha512-UFG68aVOpccg3s++S3pbtI3YCQCnlu/TFvhnQ5vaD3vhOox1Uk/f2O2T95jmwA/EvKvetqGj34lys3DNXvPqgQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -15082,6 +16241,7 @@ "version": "11.1.5", "resolved": "https://registry.npmjs.org/expo-asset/-/expo-asset-11.1.5.tgz", "integrity": "sha512-GEQDCqC25uDBoXHEnXeBuwpeXvI+3fRGvtzwwt0ZKKzWaN+TgeF8H7c76p3Zi4DfBMFDcduM0CmOvJX+yCCLUQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -15098,6 +16258,7 @@ "version": "17.1.6", "resolved": "https://registry.npmjs.org/expo-constants/-/expo-constants-17.1.6.tgz", "integrity": "sha512-q5mLvJiLtPcaZ7t2diSOlQ2AyxIO8YMVEJsEfI/ExkGj15JrflNQ7CALEW6IF/uNae/76qI/XcjEuuAyjdaCNw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -15113,6 +16274,7 @@ "version": "18.1.10", "resolved": "https://registry.npmjs.org/expo-file-system/-/expo-file-system-18.1.10.tgz", "integrity": "sha512-SyaWg+HitScLuyEeSG9gMSDT0hIxbM9jiZjSBP9l9zMnwZjmQwsusE6+7qGiddxJzdOhTP4YGUfvEzeeS0YL3Q==", + "license": "MIT", "optional": true, "peer": true, "peerDependencies": { @@ -15124,6 +16286,7 @@ "version": "13.3.1", "resolved": "https://registry.npmjs.org/expo-font/-/expo-font-13.3.1.tgz", "integrity": "sha512-d+xrHYvSM9WB42wj8vP9OOFWyxed5R1evphfDb6zYBmC1dA9Hf89FpT7TNFtj2Bk3clTnpmVqQTCYbbA2P3CLg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -15138,6 +16301,7 @@ "version": "14.1.4", "resolved": "https://registry.npmjs.org/expo-keep-awake/-/expo-keep-awake-14.1.4.tgz", "integrity": "sha512-wU9qOnosy4+U4z/o4h8W9PjPvcFMfZXrlUoKTMBW7F4pLqhkkP/5G4EviPZixv4XWFMjn1ExQ5rV6BX8GwJsWA==", + "license": "MIT", "optional": true, "peer": true, "peerDependencies": { @@ -15146,9 +16310,10 @@ } }, "node_modules/expo-modules-autolinking": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.0.3.tgz", - "integrity": "sha512-azkCRYj/DxbK4udDuDxA9beYzQTwpJ5a9QA0bBgha2jHtWdFGF4ZZWSY+zNA5mtU3KqzYt8jWHfoqgSvKyu1Aw==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-0.3.4.tgz", + "integrity": "sha512-Mu3CIMqEAI8aNM18U/l+7CCi+afU8dERrKjDDEx/Hu7XX3v3FcnnP+NuWDLY/e9/ETzwTJaqoRoBuzhawsuLWw==", + "license": "MIT", "optional": true, "dependencies": { "chalk": "^4.1.0", @@ -15165,6 +16330,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", "optional": true, "engines": { "node": ">= 10" @@ -15174,6 +16340,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "license": "MIT", "optional": true, "dependencies": { "at-least-node": "^1.0.0", @@ -15186,12 +16353,13 @@ } }, "node_modules/expo-modules-core": { - "version": "2.3.13", - "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.3.13.tgz", - "integrity": "sha512-vmKHv7tEo2wUQoYDV6grhsLsQfD3DUnew5Up3yNnOE1gHGQE+zhV1SBYqaPMPB12OvpyD1mlfzGhu6r9PODnng==", + "version": "0.4.10", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-0.4.10.tgz", + "integrity": "sha512-uCZA3QzF0syRaHwYY99iaNhnye4vSQGsJ/y6IAiesXdbeVahWibX4G1KoKNPUyNsKXIM4tqA+4yByUSvJe4AAw==", + "license": "MIT", "optional": true, - "peer": true, "dependencies": { + "compare-versions": "^3.4.0", "invariant": "^2.2.4" } }, @@ -15200,6 +16368,7 @@ "resolved": "https://registry.npmjs.org/expo-random/-/expo-random-14.0.1.tgz", "integrity": "sha512-gX2mtR9o+WelX21YizXUCD/y+a4ZL+RDthDmFkHxaYbdzjSYTn8u/igoje/l3WEO+/RYspmqUFa8w/ckNbt6Vg==", "deprecated": "This package is now deprecated in favor of expo-crypto, which provides the same functionality. To migrate, replace all imports from expo-random with imports from expo-crypto.", + "license": "MIT", "optional": true, "dependencies": { "base64-js": "^1.3.0" @@ -15212,6 +16381,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -15222,6 +16392,7 @@ "version": "2.1.10", "resolved": "https://registry.npmjs.org/expo-modules-autolinking/-/expo-modules-autolinking-2.1.10.tgz", "integrity": "sha512-k93fzoszrYTKbZ51DSVnewYIGUV6Gi22Su8qySXPFJEfvtDs2NUUNRHBZNKgLHvwc6xPzVC5j7JYbrpXNuY44A==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -15237,10 +16408,22 @@ "expo-modules-autolinking": "bin/expo-modules-autolinking.js" } }, + "node_modules/expo/node_modules/expo-modules-core": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/expo-modules-core/-/expo-modules-core-2.3.13.tgz", + "integrity": "sha512-vmKHv7tEo2wUQoYDV6grhsLsQfD3DUnew5Up3yNnOE1gHGQE+zhV1SBYqaPMPB12OvpyD1mlfzGhu6r9PODnng==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "invariant": "^2.2.4" + } + }, "node_modules/expo/node_modules/glob": { "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -15262,6 +16445,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -15278,6 +16462,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "optional": true, "peer": true, "engines": { @@ -15288,6 +16473,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -15298,13 +16484,15 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.2.tgz", "integrity": "sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==", - "devOptional": true + "devOptional": true, + "license": "Apache-2.0" }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -15328,31 +16516,36 @@ "engines": [ "node >=0.6.0" ], + "license": "MIT", "optional": true }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-diff": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/fast-fifo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "devOptional": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -15369,6 +16562,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "devOptional": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -15380,18 +16574,21 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-text-encoding": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", + "license": "Apache-2.0", "optional": true }, "node_modules/fast-uri": { @@ -15408,13 +16605,15 @@ "type": "opencollective", "url": "https://opencollective.com/fastify" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/fastq": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "devOptional": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -15423,6 +16622,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "license": "Apache-2.0", "optional": true, "peer": true, "dependencies": { @@ -15433,6 +16633,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", "dependencies": { "pend": "~1.2.0" } @@ -15451,6 +16652,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "optional": true, "dependencies": { "node-domexception": "^1.0.0", @@ -15464,13 +16666,15 @@ "version": "0.6.10", "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.6.10.tgz", "integrity": "sha512-IQrh3lEPM93wVCEczc9SaAOvkmcoQn/G8Bo1e8ZPlY3X3bnAxWaBdvTdvM1hP62iZp0BXWDy4vTAy4fF0+Dlpg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -15481,13 +16685,15 @@ "node_modules/file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT" }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } @@ -15497,6 +16703,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -15509,6 +16716,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "devOptional": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -15520,6 +16728,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -15539,6 +16748,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -15549,6 +16759,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", "optional": true, "peer": true }, @@ -15557,6 +16768,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "devOptional": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -15572,6 +16784,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/fix-esm/-/fix-esm-1.0.1.tgz", "integrity": "sha512-EZtb7wPXZS54GaGxaWxMlhd1DUDCnAg5srlYdu/1ZVeW+7wwR3Tp59nu52dXByFs3MBRq+SByx1wDOJpRvLEXw==", + "license": "WTFPL OR CC0-1.0", "optional": true, "dependencies": { "@babel/core": "^7.14.6", @@ -15584,6 +16797,7 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -15599,6 +16813,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -15613,12 +16828,14 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/flow-enums-runtime": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==", + "license": "MIT", "optional": true, "peer": true }, @@ -15632,6 +16849,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -15645,6 +16863,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/fontfaceobserver/-/fontfaceobserver-2.3.0.tgz", "integrity": "sha512-6FPvD/IVyT4ZlNe7Wcn5Fb/4ChigpucKYSvD6a+0iMoLn2inpo711eyIcKjmDtE5XNcgAkSH9uN/nfAeZzHEfg==", + "license": "BSD-2-Clause", "optional": true, "peer": true }, @@ -15653,6 +16872,7 @@ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.2.7" }, @@ -15667,12 +16887,14 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" @@ -15688,6 +16910,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", "engines": { "node": ">=14" }, @@ -15699,6 +16922,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -15713,6 +16937,7 @@ "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", "optional": true, "dependencies": { "fetch-blob": "^3.1.2" @@ -15726,6 +16951,7 @@ "resolved": "https://registry.npmjs.org/formidable/-/formidable-3.5.4.tgz", "integrity": "sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==", "dev": true, + "license": "MIT", "dependencies": { "@paralleldrive/cuid2": "^2.2.2", "dezalgo": "^1.0.4", @@ -15743,6 +16969,7 @@ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, + "license": "MIT", "engines": { "node": "*" }, @@ -15755,6 +16982,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/freeport-async/-/freeport-async-2.0.0.tgz", "integrity": "sha512-K7od3Uw45AJg00XUmy15+Hae2hOcgKcmN3/EF6Y7i01O0gaqiRx8sUSpsb9+BRNL8RPBrhzPsVfy8q9ADlJuWQ==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -15765,6 +16993,7 @@ "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -15774,13 +17003,15 @@ "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" }, "node_modules/fs-extra": { "version": "11.3.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", "integrity": "sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -15794,6 +17025,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -15804,13 +17036,15 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -15823,6 +17057,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15832,6 +17067,7 @@ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -15852,6 +17088,7 @@ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15869,13 +17106,15 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fwd-stream/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -15887,7 +17126,8 @@ "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/gauge": { "version": "4.0.4", @@ -15895,6 +17135,7 @@ "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "deprecated": "This package is no longer supported.", "devOptional": true, + "license": "ISC", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", @@ -15914,6 +17155,7 @@ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -15922,6 +17164,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -15930,6 +17173,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", @@ -15953,12 +17197,14 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/get-package-type": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -15970,6 +17216,7 @@ "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, + "license": "MIT", "dependencies": { "@hutson/parse-repository-url": "^3.0.0", "hosted-git-info": "^4.0.0", @@ -15988,6 +17235,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -15998,13 +17246,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/get-pkg-repo/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -16019,13 +17269,15 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/get-pkg-repo/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -16035,6 +17287,7 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -16045,6 +17298,7 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" } @@ -16054,6 +17308,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -16071,6 +17326,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" @@ -16084,6 +17340,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -16099,6 +17356,7 @@ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -16115,6 +17373,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/getenv/-/getenv-1.0.0.tgz", "integrity": "sha512-7yetJWqbS9sbn0vIfliPsFgoXMKn/YMF+Wuiog97x+urnSRRRZ7xB+uVkwGKzRgq9CDFfMQnE9ruL5DHv9c6Xg==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -16126,6 +17385,7 @@ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz", "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", "dev": true, + "license": "MIT", "dependencies": { "dargs": "^7.0.0", "lodash": "^4.17.15", @@ -16145,6 +17405,7 @@ "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "dev": true, + "license": "MIT", "dependencies": { "gitconfiglocal": "^1.0.0", "pify": "^2.3.0" @@ -16158,6 +17419,7 @@ "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-4.1.1.tgz", "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", "dev": true, + "license": "MIT", "dependencies": { "meow": "^8.0.0", "semver": "^6.0.0" @@ -16174,6 +17436,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -16183,6 +17446,7 @@ "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", "dev": true, + "license": "BSD", "dependencies": { "ini": "^1.3.2" } @@ -16191,12 +17455,14 @@ "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" }, "node_modules/glob": { "version": "7.2.3", @@ -16204,6 +17470,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "devOptional": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -16224,6 +17491,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -16236,6 +17504,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "devOptional": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -16246,6 +17515,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "devOptional": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -16258,6 +17528,7 @@ "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", "dev": true, + "license": "BSD-3-Clause", "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -16276,6 +17547,7 @@ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "type-fest": "^0.13.1" @@ -16292,6 +17564,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "optional": true, "engines": { "node": ">=10" @@ -16305,6 +17578,7 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -16320,6 +17594,7 @@ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -16336,6 +17611,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -16355,6 +17631,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -16367,6 +17644,7 @@ "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -16390,13 +17668,15 @@ "node_modules/graceful-fs": { "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==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, "node_modules/gradle-to-js": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/gradle-to-js/-/gradle-to-js-2.0.1.tgz", "integrity": "sha512-is3hDn9zb8XXnjbEeAEIqxTpLHUiGBqjegLmXPuyMBfKAggpadWFku4/AP8iYAGBX6qR9/5UIUIp47V0XI3aMw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "lodash.merge": "^4.6.2" }, @@ -16408,13 +17688,15 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", @@ -16436,6 +17718,7 @@ "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -16445,6 +17728,7 @@ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -16457,6 +17741,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -16466,6 +17751,7 @@ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -16478,6 +17764,7 @@ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, + "license": "MIT", "dependencies": { "dunder-proto": "^1.0.0" }, @@ -16492,6 +17779,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -16503,6 +17791,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -16517,12 +17806,14 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "devOptional": true + "devOptional": true, + "license": "ISC" }, "node_modules/hash-base": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", + "license": "MIT", "dependencies": { "inherits": "^2.0.4", "safe-buffer": "^5.2.1" @@ -16535,6 +17826,7 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" @@ -16544,6 +17836,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -16556,6 +17849,7 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, + "license": "MIT", "bin": { "he": "bin/he" } @@ -16564,6 +17858,7 @@ "version": "0.25.1", "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "license": "MIT", "optional": true, "peer": true }, @@ -16571,6 +17866,7 @@ "version": "0.25.1", "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -16581,6 +17877,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "license": "MIT", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", @@ -16592,6 +17889,7 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -16604,6 +17902,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -16615,12 +17914,14 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", - "devOptional": true + "devOptional": true, + "license": "BSD-2-Clause" }, "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -16638,6 +17939,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -16649,6 +17951,7 @@ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.0", "debug": "^4.3.4" @@ -16662,6 +17965,7 @@ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -16675,6 +17979,7 @@ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "devOptional": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.2", "debug": "4" @@ -16688,6 +17993,7 @@ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "devOptional": true, + "license": "MIT", "dependencies": { "ms": "^2.0.0" } @@ -16697,6 +18003,7 @@ "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -16714,6 +18021,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "devOptional": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -16725,13 +18033,15 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/idb/-/idb-7.1.1.tgz", "integrity": "sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/idb-wrapper": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ieee754": { "version": "1.2.1", @@ -16750,13 +18060,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -16765,6 +18077,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -16782,6 +18095,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -16798,6 +18112,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -16807,6 +18122,7 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -16821,7 +18137,8 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "devOptional": true + "devOptional": true, + "license": "ISC" }, "node_modules/inflight": { "version": "1.0.6", @@ -16829,6 +18146,7 @@ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "devOptional": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -16837,13 +18155,15 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, "node_modules/ini": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -16853,6 +18173,7 @@ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", @@ -16866,6 +18187,7 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", "optional": true, "dependencies": { "loose-envify": "^1.0.0" @@ -16876,6 +18198,7 @@ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "devOptional": true, + "license": "MIT", "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" @@ -16888,6 +18211,7 @@ "version": "11.2.1", "resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-11.2.1.tgz", "integrity": "sha512-gUeeX63EFgiaMgcs0cUs2ZUPvlOeEZ38okjK8twdWGZX2jYd2rCk8k/TJ3DSRIDZ2t/aZMv6I23guxHaofZE3w==", + "license": "Apache-2.0 OR MIT", "dependencies": { "protons-runtime": "^5.5.0", "uint8arraylist": "^2.4.8" @@ -16907,6 +18231,7 @@ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -16917,6 +18242,7 @@ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", "dev": true, + "license": "MIT", "dependencies": { "is-alphabetical": "^2.0.0", "is-decimal": "^2.0.0" @@ -16931,6 +18257,7 @@ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -16947,13 +18274,15 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/is-async-function": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, + "license": "MIT", "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", @@ -16973,6 +18302,7 @@ "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, + "license": "MIT", "dependencies": { "has-bigints": "^1.0.2" }, @@ -16988,6 +18318,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -17000,6 +18331,7 @@ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" @@ -17016,6 +18348,7 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -17028,6 +18361,7 @@ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, + "license": "MIT", "dependencies": { "ci-info": "^3.2.0" }, @@ -17040,6 +18374,7 @@ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "devOptional": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -17055,6 +18390,7 @@ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", @@ -17072,6 +18408,7 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" @@ -17088,6 +18425,7 @@ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -17097,6 +18435,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -17107,6 +18446,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -17122,6 +18462,7 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -17131,6 +18472,7 @@ "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, @@ -17145,6 +18487,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } @@ -17154,6 +18497,7 @@ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "get-proto": "^1.0.0", @@ -17172,6 +18516,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "devOptional": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -17183,6 +18528,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "license": "MIT", "engines": { "node": ">=6.5.0", "npm": ">=3" @@ -17193,6 +18539,7 @@ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -17203,6 +18550,7 @@ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -17211,13 +18559,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -17229,13 +18579,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -17245,6 +18597,7 @@ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" @@ -17261,6 +18614,7 @@ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -17276,6 +18630,7 @@ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -17285,6 +18640,7 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -17294,6 +18650,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -17303,6 +18660,7 @@ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", @@ -17321,6 +18679,7 @@ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -17330,6 +18689,7 @@ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -17342,6 +18702,7 @@ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, @@ -17357,6 +18718,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -17369,6 +18731,7 @@ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" @@ -17385,6 +18748,7 @@ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", @@ -17402,6 +18766,7 @@ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, + "license": "MIT", "dependencies": { "text-extensions": "^1.0.0" }, @@ -17414,6 +18779,7 @@ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.16" }, @@ -17429,6 +18795,7 @@ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -17441,6 +18808,7 @@ "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -17453,6 +18821,7 @@ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3" }, @@ -17468,6 +18837,7 @@ "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" @@ -17483,6 +18853,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -17494,13 +18865,15 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isbinaryfile": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.4.tgz", "integrity": "sha512-YKBKVkKhty7s8rxddb40oOkuP0NbaeXrQvLin6QMHL7Ypiy2RW9LwOVrVgZRyOrhQlayMd9t+D8yDy8MKFTSDQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18.0.0" }, @@ -17512,17 +18885,20 @@ "version": "0.0.0", "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", "integrity": "sha512-xU+NoHp+YtKQkaM2HsQchYn0sltxMxew0HavMfHbjnucBoTSGbw745tL+Z7QBANleWM1eEQMenEpi174mIeS4g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" }, "node_modules/isomorphic-webcrypto": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.8.tgz", "integrity": "sha512-XddQSI0WYlSCjxtm1AI8kWQOulf7hAN3k3DclF1sxDJZqOe0pcsOt675zvWW91cZH9hYs3nlA3Ev8QK5i80SxQ==", + "license": "MIT", "optional": true, "dependencies": { "@peculiar/webcrypto": "^1.0.22", @@ -17544,6 +18920,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "license": "BSD-3-Clause", "optional": true, "peer": true, "engines": { @@ -17554,6 +18931,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "license": "BSD-3-Clause", "optional": true, "peer": true, "dependencies": { @@ -17571,6 +18949,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", "optional": true, "peer": true, "bin": { @@ -17581,6 +18960,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -17596,6 +18976,7 @@ "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -17614,6 +18995,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -17624,6 +19006,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -17635,6 +19018,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/jdenticon/-/jdenticon-3.3.0.tgz", "integrity": "sha512-DhuBRNRIybGPeAjMjdHbkIfiwZCCmf8ggu7C49jhp6aJ7DYsZfudnvnTY5/1vgUhrGA7JaDAx1WevnpjCPvaGg==", + "license": "MIT", "dependencies": { "canvas-renderer": "~2.2.0" }, @@ -17649,6 +19033,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -17667,6 +19052,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -17677,6 +19063,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -17703,6 +19090,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -17724,6 +19112,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -17739,6 +19128,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -17749,6 +19139,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -17767,6 +19158,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -17780,6 +19172,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -17798,6 +19191,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -17811,6 +19205,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -17827,6 +19222,7 @@ "version": "0.16.1", "resolved": "https://registry.npmjs.org/jimp-compact/-/jimp-compact-0.16.1.tgz", "integrity": "sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==", + "license": "MIT", "optional": true, "peer": true }, @@ -17835,6 +19231,7 @@ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", "dev": true, + "license": "MIT", "bin": { "jiti": "bin/jiti.js" } @@ -17843,6 +19240,7 @@ "version": "4.15.9", "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.9.tgz", "integrity": "sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA==", + "license": "MIT", "optional": true, "funding": { "url": "https://github.com/sponsors/panva" @@ -17852,6 +19250,7 @@ "version": "0.1.9", "resolved": "https://registry.npmjs.org/js-generate-password/-/js-generate-password-0.1.9.tgz", "integrity": "sha512-eBHpI+Re+zGZIsKBmBNjJk1bt7jeY8cBJMPhb+AhZaZ/DYjerCKwN6cQDjXUxFCHVHd8u9Fn4zgFBMDFQLoSZg==", + "license": "ISC", "bin": { "js-generate-password": "dist/index.js" } @@ -17859,18 +19258,21 @@ "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==" + "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", + "license": "MIT" }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -17882,12 +19284,14 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/jsc-safe-url": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==", + "license": "0BSD", "optional": true, "peer": true }, @@ -17896,6 +19300,7 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "devOptional": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -17907,24 +19312,28 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-pointer": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/json-pointer/-/json-pointer-0.6.2.tgz", "integrity": "sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==", + "license": "MIT", "optional": true, "dependencies": { "foreach": "^2.0.4" @@ -17934,24 +19343,28 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stringify-deterministic": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/json-stringify-deterministic/-/json-stringify-deterministic-1.0.12.tgz", "integrity": "sha512-q3PN0lbUdv0pmurkBNdJH3pfFvOTL/Zp0lquqpvcjfKzt6Y0j49EPHAmVHCAS4Ceq/Y+PejWTzyiVpoY71+D6g==", + "license": "MIT", "optional": true, "engines": { "node": ">= 4" @@ -17961,13 +19374,15 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "devOptional": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -17979,12 +19394,14 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -17996,6 +19413,7 @@ "version": "8.3.3", "resolved": "https://registry.npmjs.org/jsonld/-/jsonld-8.3.3.tgz", "integrity": "sha512-9YcilrF+dLfg9NTEof/mJLMtbdX1RJ8dbWtJgE00cMOIohb1lIyJl710vFiTaiHTl6ZYODJuBd32xFvUhmv3kg==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@digitalbazaar/http-client": "^3.4.1", @@ -18011,6 +19429,7 @@ "version": "11.5.0", "resolved": "https://registry.npmjs.org/jsonld-signatures/-/jsonld-signatures-11.5.0.tgz", "integrity": "sha512-Kdto+e8uvY/5u3HYkmAbpy52bplWX9uqS8fmqdCv6oxnCFwCTM0hMt6r4rWqlhw5/aHoCHJIRxwYb4QKGC69Jw==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "@digitalbazaar/security-context": "^1.0.0", @@ -18026,6 +19445,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-4.0.1.tgz", "integrity": "sha512-B5ynHt4sasbUafzrvYI2GFARgeFcD8Sx9yXPbg7gEyT2EH76rlCv84kyO6tnxzVbxUN/uJDbK1S/MXh+DsnuTA==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "setimmediate": "^1.0.5" @@ -18038,12 +19458,14 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/canonicalize/-/canonicalize-1.0.8.tgz", "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==", + "license": "Apache-2.0", "optional": true }, "node_modules/jsonld/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", "optional": true, "dependencies": { "yallist": "^4.0.0" @@ -18059,13 +19481,15 @@ "dev": true, "engines": [ "node >= 0.2.0" - ] + ], + "license": "MIT" }, "node_modules/jsonpointer": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -18075,6 +19499,7 @@ "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, + "license": "(MIT OR Apache-2.0)", "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -18089,7 +19514,8 @@ "node_modules/jsqr": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jsqr/-/jsqr-1.4.0.tgz", - "integrity": "sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A==" + "integrity": "sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A==", + "license": "Apache-2.0" }, "node_modules/katex": { "version": "0.16.22", @@ -18100,6 +19526,7 @@ "https://opencollective.com/katex", "https://github.com/sponsors/katex" ], + "license": "MIT", "dependencies": { "commander": "^8.3.0" }, @@ -18112,6 +19539,7 @@ "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "node-addon-api": "^2.0.0", "node-gyp-build": "^4.2.0", @@ -18124,12 +19552,14 @@ "node_modules/keccak/node_modules/node-addon-api": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "license": "MIT" }, "node_modules/keccak/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -18144,6 +19574,7 @@ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -18153,6 +19584,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -18161,6 +19593,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "license": "MIT", "engines": { "node": ">=6" } @@ -18169,6 +19602,7 @@ "version": "0.25.1", "resolved": "https://registry.npmjs.org/ky/-/ky-0.25.1.tgz", "integrity": "sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA==", + "license": "MIT", "optional": true, "engines": { "node": ">=10" @@ -18181,6 +19615,7 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz", "integrity": "sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==", + "license": "MIT", "optional": true, "dependencies": { "abort-controller": "^3.0.0", @@ -18206,6 +19641,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "license": "MIT", "optional": true, "engines": { "node": ">= 6" @@ -18215,6 +19651,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==", + "license": "MIT", "optional": true, "engines": { "node": "^10.17.0 || >=12.3.0" @@ -18229,6 +19666,7 @@ "version": "3.0.0-beta.9", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz", "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==", + "license": "MIT", "optional": true, "dependencies": { "data-uri-to-buffer": "^3.0.1", @@ -18246,6 +19684,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/lan-network/-/lan-network-0.1.7.tgz", "integrity": "sha512-mnIlAEMu4OyEvUNdzco9xpuB9YVcPkQec+QsgycBCtPZvEqWPCDPfbAE4OJMdBBWpZWtpCn1xw9jJYlwjWI5zQ==", + "license": "MIT", "optional": true, "peer": true, "bin": { @@ -18256,13 +19695,15 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lazystream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "readable-stream": "^2.0.5" @@ -18276,6 +19717,7 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/lazystream/node_modules/readable-stream": { @@ -18283,6 +19725,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "core-util-is": "~1.0.0", @@ -18299,6 +19742,7 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/lazystream/node_modules/string_decoder": { @@ -18306,6 +19750,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "safe-buffer": "~5.1.0" @@ -18314,7 +19759,8 @@ "node_modules/leaflet": { "version": "1.9.4", "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", - "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==" + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==", + "license": "BSD-2-Clause" }, "node_modules/level-blobs": { "version": "0.1.7", @@ -18331,13 +19777,15 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/level-blobs/node_modules/readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -18349,7 +19797,8 @@ "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/level-filesystem": { "version": "1.2.0", @@ -18372,7 +19821,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", "integrity": "sha512-9llaVn6uqBiSlBP+wKiIEoBa01FwEISFgHSZiyec2S0KpyLUkGR4afW/FCZ/X8y+QJvzS0u4PGOlZDdh1/1avQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/level-hooks": { "version": "4.5.0", @@ -18389,6 +19839,7 @@ "integrity": "sha512-lZtjt4ZwHE00UMC1vAb271p9qzg8vKlnDeXfIesH3zL0KxhHRDjClQLGLWhyR0nK4XARnd4wc/9eD1ffd4PshQ==", "deprecated": "Superseded by browser-level (https://github.com/Level/community#faq)", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "abstract-leveldown": "~0.12.0", "idb-wrapper": "^1.5.0", @@ -18402,7 +19853,8 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/level-js/node_modules/xtend": { "version": "2.1.2", @@ -18421,6 +19873,7 @@ "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz", "integrity": "sha512-TKEzH5TxROTjQxWMczt9sizVgnmJ4F3hotBI48xCTYvOKd/4gA/uY0XjKkhJFo6BMic8Tqjf6jFMLWeg3MAbqQ==", "dev": true, + "license": "MIT", "dependencies": { "level-fix-range": "~1.0.2" } @@ -18430,6 +19883,7 @@ "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz", "integrity": "sha512-tO8jrFp+QZYrxx/Gnmjawuh1UBiifpvKNAcm4KCogesWr1Nm2+ckARitf+Oo7xg4OHqMW76eAqQ204BoIlscjA==", "dev": true, + "license": "MIT", "dependencies": { "level-fix-range": "2.0", "level-hooks": ">=4.4.0 <5", @@ -18442,6 +19896,7 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", "integrity": "sha512-IO78I0y6JcSpEPHzK4obKdsL7E7oLdRVDVOLwr2Hkbjsb+Eoz0dxW6tef0WizoKu0gLC4oZSZuEF4U2K6w1WQw==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -18451,6 +19906,7 @@ "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz", "integrity": "sha512-WrLfGWgwWbYPrHsYzJau+5+te89dUbENBg3/lsxOs4p2tYOhCHjbgXxBAj4DFqp3k/XBwitcRXoCh8RoCogASA==", "dev": true, + "license": "MIT", "dependencies": { "clone": "~0.1.9" } @@ -18461,6 +19917,7 @@ "integrity": "sha512-XODjdR2pBh/1qrjPcbSeSgEtKbYo7LqYNq64/TPuCf7j9SfDD3i21yatKoIy39yIWNvVM59iutfQQpCv1RfFzA==", "deprecated": "Please update to the latest object-keys", "dev": true, + "license": "MIT", "dependencies": { "foreach": "~2.0.1", "indexof": "~0.0.1", @@ -18486,6 +19943,7 @@ "integrity": "sha512-uB0auyRqIVXx+hrpIUtol4VAPhLRcnxcOsd2i2m6rbFIDarO5dnrupLOStYYpEcu8ZT087Z9HEuYw1wjr6RL6Q==", "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dev": true, + "license": "MIT", "dependencies": { "bl": "~0.8.1", "deferred-leveldown": "~0.2.0", @@ -18500,19 +19958,22 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/levelup/node_modules/prr": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", "integrity": "sha512-LmUECmrW7RVj6mDWKjTXfKug7TFGdiz9P18HMcO4RHL+RW7MCOGNvpj5j47Rnp6ne6r4fZ2VzyUWEpKbg+tsjQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/levelup/node_modules/readable-stream": { "version": "1.0.34", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -18525,6 +19986,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", "integrity": "sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==", "dev": true, + "license": "BSD", "bin": { "semver": "bin/semver" } @@ -18533,7 +19995,8 @@ "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/levelup/node_modules/xtend": { "version": "3.0.0", @@ -18549,6 +20012,7 @@ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -18558,6 +20022,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -18570,6 +20035,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", + "license": "Apache-2.0", "optional": true, "peer": true, "dependencies": { @@ -18581,6 +20047,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -18591,6 +20058,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", "optional": true, "peer": true }, @@ -18598,6 +20066,7 @@ "version": "1.27.0", "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.27.0.tgz", "integrity": "sha512-8f7aNmS1+etYSLHht0fQApPc2kNO8qGRutifN5rVIc6Xo6ABsEbqOr758UwI7ALVbTt4x1fllKt0PYgzD9S3yQ==", + "license": "MPL-2.0", "optional": true, "peer": true, "dependencies": { @@ -18631,6 +20100,7 @@ "arm64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "darwin" @@ -18652,6 +20122,7 @@ "x64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "darwin" @@ -18673,6 +20144,7 @@ "x64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "freebsd" @@ -18694,6 +20166,7 @@ "arm" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -18715,6 +20188,7 @@ "arm64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -18736,6 +20210,7 @@ "arm64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -18757,6 +20232,7 @@ "x64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -18778,6 +20254,7 @@ "x64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -18799,6 +20276,7 @@ "arm64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "win32" @@ -18820,6 +20298,7 @@ "x64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "win32" @@ -18837,6 +20316,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", "optional": true, "peer": true, "bin": { @@ -18850,13 +20330,15 @@ "version": "0.17.0", "resolved": "https://registry.npmjs.org/lil-gui/-/lil-gui-0.17.0.tgz", "integrity": "sha512-MVBHmgY+uEbmJNApAaPbtvNh1RCAeMnKym82SBjtp5rODTYKWtM+MXHCifLe2H2Ti1HuBGBtK/5SyG4ShQ3pUQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lilconfig": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" }, @@ -18868,13 +20350,15 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/linkify-it": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "dev": true, + "license": "MIT", "dependencies": { "uc.micro": "^2.0.0" } @@ -18884,6 +20368,7 @@ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -18899,6 +20384,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -18906,13 +20392,15 @@ "node_modules/localstorage-slim": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/localstorage-slim/-/localstorage-slim-2.7.1.tgz", - "integrity": "sha512-ExqYZl+pRpxPIcx0n0541T5CmSdRulHJCPDLrxIe23d4ehbqERDNJHcwsAVrVP09CZ/0j3PU92sI8a3KaGqXPQ==" + "integrity": "sha512-ExqYZl+pRpxPIcx0n0541T5CmSdRulHJCPDLrxIe23d4ehbqERDNJHcwsAVrVP09CZ/0j3PU92sI8a3KaGqXPQ==", + "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "devOptional": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -18927,24 +20415,28 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT" }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/lodash.difference": { @@ -18952,6 +20444,7 @@ "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/lodash.flatten": { @@ -18959,49 +20452,57 @@ "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", - "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead." + "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", + "license": "MIT" }, "node_modules/lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead." + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" }, "node_modules/lodash.ismatch": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.throttle": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", + "license": "MIT", "optional": true, "peer": true }, @@ -19010,6 +20511,7 @@ "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/log-symbols": { @@ -19017,6 +20519,7 @@ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -19032,6 +20535,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", "optional": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -19045,6 +20549,7 @@ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -19052,18 +20557,21 @@ "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" }, "node_modules/ltgt": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/luxon": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.6.1.tgz", "integrity": "sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==", + "license": "MIT", "engines": { "node": ">=12" } @@ -19072,6 +20580,7 @@ "version": "0.30.17", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" } @@ -19080,13 +20589,15 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "devOptional": true + "devOptional": true, + "license": "ISC" }, "node_modules/make-fetch-happen": { "version": "10.2.1", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "dev": true, + "license": "ISC", "dependencies": { "agentkeepalive": "^4.2.1", "cacache": "^16.1.0", @@ -19114,6 +20625,7 @@ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "4" }, @@ -19126,6 +20638,7 @@ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -19140,6 +20653,7 @@ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -19153,6 +20667,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -19161,6 +20676,7 @@ "version": "1.0.12", "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "license": "BSD-3-Clause", "optional": true, "peer": true, "dependencies": { @@ -19172,6 +20688,7 @@ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -19184,6 +20701,7 @@ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", @@ -19201,6 +20719,7 @@ "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.37.4.tgz", "integrity": "sha512-u00joA/syf3VhWh6/ybVFkib5Zpj2e5KB/cfCei8fkSRuums6nyisTWGqjTWIOFoFwuXoTBQQiqlB4qFKp8ncQ==", "dev": true, + "license": "MIT", "dependencies": { "markdown-it": "14.1.0", "micromark": "4.0.1", @@ -19224,6 +20743,7 @@ "resolved": "https://registry.npmjs.org/markdownlint-cli/-/markdownlint-cli-0.44.0.tgz", "integrity": "sha512-ZJTAONlvF9NkrIBltCdW15DxN9UTbPiKMEqAh2EU2gwIFlrCMavyCEPPO121cqfYOrLUJWW8/XKWongstmmTeQ==", "dev": true, + "license": "MIT", "dependencies": { "commander": "~13.1.0", "glob": "~10.4.5", @@ -19248,6 +20768,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" } @@ -19257,6 +20778,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -19277,6 +20799,7 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -19286,6 +20809,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -19301,6 +20825,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -19309,6 +20834,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/marky/-/marky-1.3.0.tgz", "integrity": "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==", + "license": "Apache-2.0", "optional": true, "peer": true }, @@ -19317,6 +20843,7 @@ "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "escape-string-regexp": "^4.0.0" @@ -19329,6 +20856,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -19337,6 +20865,7 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -19347,12 +20876,14 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/memoize-one": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "license": "MIT", "optional": true, "peer": true }, @@ -19361,6 +20892,7 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", @@ -19386,6 +20918,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -19398,13 +20931,15 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/meow/node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -19417,6 +20952,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -19432,6 +20968,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -19444,6 +20981,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -19462,6 +21000,7 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -19477,6 +21016,7 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -19494,6 +21034,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -19503,6 +21044,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -19515,6 +21057,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -19524,6 +21067,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -19533,6 +21077,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -19544,6 +21089,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT", "optional": true, "peer": true }, @@ -19552,6 +21098,7 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "devOptional": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -19561,6 +21108,7 @@ "resolved": "https://registry.npmjs.org/mergexml/-/mergexml-1.2.4.tgz", "integrity": "sha512-yiOlDqcVCz7AG1eSboonc18FTlfqDEKYfGoAV3Lul98u6YRV/s0kjtf4bjk47t0hLTFJR0BSYMd6BpmX3xDjNQ==", "dev": true, + "license": "ISC", "dependencies": { "@xmldom/xmldom": "^0.7.0", "formidable": "^3.5.1", @@ -19572,6 +21120,7 @@ "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.27.tgz", "integrity": "sha512-fg03WRxtkCV6ohClePNAECYsmpKKTv5L8y/X3Dn1hQrec3POx2jHZ/0P2qQ6HvsrU1BmeqXcof3NGGueG6LxwQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.0" } @@ -19580,6 +21129,7 @@ "version": "0.3.11", "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.3.11.tgz", "integrity": "sha512-LJKTl4iVNTndhL+3Uz/tfkjD0klIWsHlUzgtuNnNrsf7bAlXR30m+xYB7lHr5Z/l6e/yAIsr26Dabx6Buo4VGQ==", + "license": "MIT", "dependencies": { "bignumber.js": "^9.0.1", "buffer-reverse": "^1.0.1", @@ -19595,12 +21145,14 @@ "version": "0.18.1", "resolved": "https://registry.npmjs.org/meshoptimizer/-/meshoptimizer-0.18.1.tgz", "integrity": "sha512-ZhoIoL7TNV4s5B6+rx5mC//fw8/POGyNxS/DZyCJeiZ12ScLfVwRE/GfsxwiTkMYYD5DmK2/JXnEVXqL4rF+Sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/metro": { "version": "0.82.4", "resolved": "https://registry.npmjs.org/metro/-/metro-0.82.4.tgz", "integrity": "sha512-/gFmw3ux9CPG5WUmygY35hpyno28zi/7OUn6+OFfbweA8l0B+PPqXXLr0/T6cf5nclCcH0d22o+02fICaShVxw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19656,6 +21208,7 @@ "version": "0.82.4", "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.82.4.tgz", "integrity": "sha512-4juJahGRb1gmNbQq48lNinB6WFNfb6m0BQqi/RQibEltNiqTCxew/dBspI2EWA4xVCd3mQWGfw0TML4KurQZnQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19672,6 +21225,7 @@ "version": "0.28.1", "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.28.1.tgz", "integrity": "sha512-w3nxl/RGM7LBae0v8LH2o36+8VqwOZGv9rX1wyoWT6YaKZLqpJZ0YQ5P0LVr3tuRpf7vCx0iIG4i/VmBJejxTQ==", + "license": "MIT", "optional": true, "peer": true }, @@ -19679,6 +21233,7 @@ "version": "0.28.1", "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.28.1.tgz", "integrity": "sha512-nf8o+hE8g7UJWParnccljHumE9Vlq8F7MqIdeahl+4x0tvCUJYRrT0L7h0MMg/X9YJmkNwsfbaNNrzPtFXOscg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19689,6 +21244,7 @@ "version": "0.82.4", "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.82.4.tgz", "integrity": "sha512-vX0ylSMGtORKiZ4G8uP6fgfPdDiCWvLZUGZ5zIblSGylOX6JYhvExl0Zg4UA9pix/SSQu5Pnp9vdODMFsNIxhw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19705,6 +21261,7 @@ "version": "0.82.4", "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.82.4.tgz", "integrity": "sha512-2JCTqcpF+f2OghOpe/+x+JywfzDkrHdAqinPFWmK2ezNAU/qX0jBFaTETogPibFivxZJil37w9Yp6syX8rFUng==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19718,6 +21275,7 @@ "version": "0.82.4", "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.82.4.tgz", "integrity": "sha512-Ki3Wumr3hKHGDS7RrHsygmmRNc/PCJrvkLn0+BWWxmbOmOcMMJDSmSI+WRlT8jd5VPZFxIi4wg+sAt5yBXAK0g==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19738,6 +21296,7 @@ "version": "0.82.4", "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.82.4.tgz", "integrity": "sha512-Xo4ozbxPg2vfgJGCgXZ8sVhC2M0lhTqD+tsKO2q9aelq/dCjnnSb26xZKcQO80CQOQUL7e3QWB7pLFGPjZm31A==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19753,6 +21312,7 @@ "version": "0.82.4", "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.82.4.tgz", "integrity": "sha512-eO7HD1O3aeNsbEe6NBZvx1lLJUrxgyATjnDmb7bm4eyF6yWOQot9XVtxTDLNifECuvsZ4jzRiTInrbmIHkTdGA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19774,6 +21334,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19792,6 +21353,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", "optional": true, "peer": true }, @@ -19799,6 +21361,7 @@ "version": "0.82.4", "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.82.4.tgz", "integrity": "sha512-W79Mi6BUwWVaM8Mc5XepcqkG+TSsCyyo//dmTsgYfJcsmReQorRFodil3bbJInETvjzdnS1mCsUo9pllNjT1Hg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19813,6 +21376,7 @@ "version": "0.82.4", "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.82.4.tgz", "integrity": "sha512-uWoHzOBGQTPT5PjippB8rRT3iI9CTgFA9tRiLMzrseA5o7YAlgvfTdY9vFk2qyk3lW3aQfFKWkmqENryPRpu+Q==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19826,6 +21390,7 @@ "version": "0.82.4", "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.82.4.tgz", "integrity": "sha512-vVyFO7H+eLXRV2E7YAUYA7aMGBECGagqxmFvC2hmErS7oq90BbPVENfAHbUWq1vWH+MRiivoRxdxlN8gBoF/dw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19840,6 +21405,7 @@ "version": "0.82.4", "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.82.4.tgz", "integrity": "sha512-9jzDQJ0FPas1FuQFtwmBHsez2BfhFNufMowbOMeG3ZaFvzeziE8A0aJwILDS3U+V5039ssCQFiQeqDgENWvquA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19862,6 +21428,7 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", "optional": true, "peer": true, "engines": { @@ -19872,6 +21439,7 @@ "version": "0.82.4", "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.82.4.tgz", "integrity": "sha512-LwEwAtdsx7z8rYjxjpLWxuFa2U0J6TS6ljlQM4WAATKa4uzV8unmnRuN2iNBWTmRqgNR77mzmI2vhwD4QSCo+w==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19893,6 +21461,7 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", "optional": true, "peer": true, "engines": { @@ -19903,6 +21472,7 @@ "version": "0.82.4", "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.82.4.tgz", "integrity": "sha512-NoWQRPHupVpnDgYguiEcm7YwDhnqW02iWWQjO2O8NsNP09rEMSq99nPjARWfukN7+KDh6YjLvTIN20mj3dk9kw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19921,6 +21491,7 @@ "version": "0.82.4", "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.82.4.tgz", "integrity": "sha512-kPI7Ad/tdAnI9PY4T+2H0cdgGeSWWdiPRKuytI806UcN4VhFL6OmYa19/4abYVYF+Cd2jo57CDuwbaxRfmXDhw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19946,6 +21517,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "license": "MIT", "optional": true, "peer": true }, @@ -19953,6 +21525,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19971,6 +21544,7 @@ "version": "0.28.1", "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.28.1.tgz", "integrity": "sha512-w3nxl/RGM7LBae0v8LH2o36+8VqwOZGv9rX1wyoWT6YaKZLqpJZ0YQ5P0LVr3tuRpf7vCx0iIG4i/VmBJejxTQ==", + "license": "MIT", "optional": true, "peer": true }, @@ -19978,6 +21552,7 @@ "version": "0.28.1", "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.28.1.tgz", "integrity": "sha512-nf8o+hE8g7UJWParnccljHumE9Vlq8F7MqIdeahl+4x0tvCUJYRrT0L7h0MMg/X9YJmkNwsfbaNNrzPtFXOscg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -19988,6 +21563,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", "optional": true, "peer": true }, @@ -19995,6 +21571,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -20005,6 +21582,7 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", "optional": true, "peer": true, "engines": { @@ -20015,6 +21593,7 @@ "version": "7.5.10", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -20036,7 +21615,8 @@ "node_modules/micro-ftch": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/micro-ftch/-/micro-ftch-0.3.1.tgz", - "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==" + "integrity": "sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==", + "license": "MIT" }, "node_modules/micromark": { "version": "4.0.1", @@ -20053,6 +21633,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "@types/debug": "^4.0.0", "debug": "^4.0.0", @@ -20088,6 +21669,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "decode-named-character-reference": "^1.0.0", "devlop": "^1.0.0", @@ -20112,6 +21694,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", "dev": true, + "license": "MIT", "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", @@ -20131,6 +21714,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", "dev": true, + "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-sanitize-uri": "^2.0.0", @@ -20147,6 +21731,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", "dev": true, + "license": "MIT", "dependencies": { "devlop": "^1.0.0", "micromark-core-commonmark": "^2.0.0", @@ -20167,6 +21752,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", "dev": true, + "license": "MIT", "dependencies": { "devlop": "^1.0.0", "micromark-factory-space": "^2.0.0", @@ -20184,6 +21770,7 @@ "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", "dev": true, + "license": "MIT", "dependencies": { "@types/katex": "^0.16.0", "devlop": "^1.0.0", @@ -20213,6 +21800,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", @@ -20234,6 +21822,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "devlop": "^1.0.0", "micromark-util-character": "^2.0.0", @@ -20256,6 +21845,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-types": "^2.0.0" @@ -20276,6 +21866,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", @@ -20298,6 +21889,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-factory-space": "^2.0.0", "micromark-util-character": "^2.0.0", @@ -20320,6 +21912,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0", "micromark-util-types": "^2.0.0" @@ -20340,6 +21933,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0" } @@ -20359,6 +21953,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-symbol": "^2.0.0", @@ -20380,6 +21975,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-chunked": "^2.0.0", "micromark-util-types": "^2.0.0" @@ -20400,6 +21996,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0" } @@ -20418,7 +22015,8 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-html-tag-name": { "version": "2.0.1", @@ -20434,7 +22032,8 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-normalize-identifier": { "version": "2.0.1", @@ -20451,6 +22050,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-symbol": "^2.0.0" } @@ -20470,6 +22070,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-types": "^2.0.0" } @@ -20489,6 +22090,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", "micromark-util-encode": "^2.0.0", @@ -20510,6 +22112,7 @@ "url": "https://opencollective.com/unified" } ], + "license": "MIT", "dependencies": { "devlop": "^1.0.0", "micromark-util-chunked": "^2.0.0", @@ -20531,7 +22134,8 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromark-util-types": { "version": "2.0.1", @@ -20547,13 +22151,15 @@ "type": "OpenCollective", "url": "https://opencollective.com/unified" } - ] + ], + "license": "MIT" }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "devOptional": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -20567,6 +22173,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -20579,6 +22186,7 @@ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -20591,13 +22199,15 @@ "version": "4.12.2", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -20609,6 +22219,7 @@ "version": "1.54.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -20619,6 +22230,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -20630,6 +22242,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -20639,6 +22252,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -20648,6 +22262,7 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -20657,6 +22272,7 @@ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -20664,18 +22280,21 @@ "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "license": "MIT" }, "node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "devOptional": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -20690,6 +22309,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -20699,6 +22319,7 @@ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, + "license": "MIT", "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", @@ -20712,6 +22333,7 @@ "version": "3.3.6", "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -20724,6 +22346,7 @@ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "devOptional": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -20736,6 +22359,7 @@ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "dev": true, + "license": "MIT", "dependencies": { "minipass": "^3.1.6", "minipass-sized": "^1.0.3", @@ -20753,6 +22377,7 @@ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "devOptional": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -20765,6 +22390,7 @@ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "devOptional": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -20777,6 +22403,7 @@ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "devOptional": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -20788,6 +22415,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "license": "MIT", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -20799,12 +22427,14 @@ "node_modules/mitt": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -20815,13 +22445,15 @@ "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" }, "node_modules/modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -20829,12 +22461,14 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" }, "node_modules/msrcrypto": { "version": "1.5.8", "resolved": "https://registry.npmjs.org/msrcrypto/-/msrcrypto-1.5.8.tgz", "integrity": "sha512-ujZ0TRuozHKKm6eGbKHfXef7f+esIhEckmThVnz7RNyiOJd7a6MXj2JGBoL9cnPDW+JMG16MoTUh5X+XXjI66Q==", + "license": "Apache-2.0", "optional": true }, "node_modules/multibase": { @@ -20842,6 +22476,7 @@ "resolved": "https://registry.npmjs.org/multibase/-/multibase-4.0.6.tgz", "integrity": "sha512-x23pDe5+svdLz/k5JPGCVdfn7Q5mZVMBETiC+ORfO+sor9Sgs0smJzAjfTbM5tckeCqnaUuMYoz+k3RXMmJClQ==", "deprecated": "This module has been superseded by the multiformats module", + "license": "MIT", "dependencies": { "@multiformats/base-x": "^4.0.1" }, @@ -20854,6 +22489,7 @@ "version": "12.1.3", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz", "integrity": "sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==", + "license": "Apache-2.0 OR MIT", "engines": { "node": ">=16.0.0", "npm": ">=7.0.0" @@ -20864,6 +22500,7 @@ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "devOptional": true, + "license": "MIT", "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", @@ -20880,6 +22517,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -20890,12 +22528,14 @@ "node_modules/napi-build-utils": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", - "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==" + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" }, "node_modules/native-run": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/native-run/-/native-run-2.0.1.tgz", "integrity": "sha512-XfG1FBZLM50J10xH9361whJRC9SHZ0Bub4iNRhhI61C8Jv0e1ud19muex6sNKB51ibQNUJNuYn25MuYET/rE6w==", + "license": "MIT", "dependencies": { "@ionic/utils-fs": "^3.1.7", "@ionic/utils-terminal": "^2.3.4", @@ -20920,6 +22560,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -20928,6 +22569,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", "engines": { "node": ">= 10.x" } @@ -20936,19 +22578,22 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/natural-compare-lite": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "devOptional": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -20957,12 +22602,14 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/nested-error-stacks": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.0.1.tgz", "integrity": "sha512-SrQrok4CATudVzBS7coSz26QRSmlK9TzzoFbeKfcPBUFPjcQM9Rqvr/DlJkOrwI/0KcgvMub1n1g5Jt9EgRn4A==", + "license": "MIT", "optional": true, "peer": true }, @@ -20970,6 +22617,7 @@ "version": "3.75.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.75.0.tgz", "integrity": "sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==", + "license": "MIT", "dependencies": { "semver": "^7.3.5" }, @@ -20982,6 +22630,7 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/node-api-version": { @@ -20989,6 +22638,7 @@ "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.1.tgz", "integrity": "sha512-2xP/IGGMmmSQpI1+O/k72jF/ykvZ89JeuKX3TLJAYPDVLUalrshrLHkeVcCCZqG/eEa635cr8IBYzgnDvM2O8Q==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.3.5" } @@ -21008,6 +22658,7 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "optional": true, "engines": { "node": ">=10.5.0" @@ -21017,6 +22668,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -21036,6 +22688,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "license": "(BSD-3-Clause OR GPL-2.0)", "optional": true, "peer": true, "engines": { @@ -21047,6 +22700,7 @@ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", "dev": true, + "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", @@ -21071,6 +22725,7 @@ "version": "4.8.4", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -21081,6 +22736,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.1.1.tgz", "integrity": "sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==", + "license": "MIT", "optional": true, "dependencies": { "detect-libc": "^2.0.1" @@ -21097,6 +22753,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -21112,6 +22769,7 @@ "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-5.4.2.tgz", "integrity": "sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==", "dev": true, + "license": "MIT", "dependencies": { "css-select": "^4.2.1", "he": "1.2.0" @@ -21121,6 +22779,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "license": "MIT", "optional": true, "peer": true }, @@ -21128,13 +22787,15 @@ "version": "2.0.19", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/nopt": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "dev": true, + "license": "ISC", "dependencies": { "abbrev": "^1.0.0" }, @@ -21150,6 +22811,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -21165,6 +22827,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -21174,6 +22837,7 @@ "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -21183,6 +22847,7 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -21194,6 +22859,7 @@ "version": "2.13.0", "resolved": "https://registry.npmjs.org/nostr-tools/-/nostr-tools-2.13.0.tgz", "integrity": "sha512-A1arGsvpULqVK0NmZQqK1imwaCiPm8gcG/lo+cTax2NbNqBEYsuplbqAFdVqcGHEopmkByYbTwF76x25+oEbew==", + "license": "Unlicense", "dependencies": { "@noble/ciphers": "^0.5.1", "@noble/curves": "1.2.0", @@ -21218,6 +22884,7 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.5.3.tgz", "integrity": "sha512-B0+6IIHiqEs3BPMT0hcRmHvEj2QHOLu+uwt+tqDDeVd0oyVzh7BPrDcPjRnV1PV/5LaknXJJQvOuRGR0zQJz+w==", + "license": "MIT", "funding": { "url": "https://paulmillr.com/funding/" } @@ -21226,6 +22893,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.2" }, @@ -21237,6 +22905,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -21248,6 +22917,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "license": "MIT", "engines": { "node": ">= 16" }, @@ -21264,12 +22934,14 @@ "type": "individual", "url": "https://paulmillr.com/funding/" } - ] + ], + "license": "MIT" }, "node_modules/nostr-tools/node_modules/@scure/bip32": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", + "license": "MIT", "dependencies": { "@noble/curves": "~1.1.0", "@noble/hashes": "~1.3.1", @@ -21283,6 +22955,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "license": "MIT", "dependencies": { "@noble/hashes": "1.3.1" }, @@ -21294,6 +22967,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "license": "MIT", "dependencies": { "@noble/hashes": "~1.3.0", "@scure/base": "~1.1.0" @@ -21306,12 +22980,14 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/nostr-wasm/-/nostr-wasm-0.1.0.tgz", "integrity": "sha512-78BTryCLcLYv96ONU8Ws3Q1JzjlAt+43pWQhIl86xZmWeegYCNLPml7yQ+gG3vR6V5h4XGj+TxO+SS5dsThQIA==", + "license": "MIT", "optional": true }, "node_modules/notiwind": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/notiwind/-/notiwind-2.1.0.tgz", "integrity": "sha512-u9owDTvjWtvf1DGdHB1/pVPBK47R1yeS0NAJfWPzwJTHk+JyyLby97fOkB63L1PRfbHkbUQD6BLEiPLzG3mwbQ==", + "license": "MIT", "dependencies": { "mitt": "^3.0.1" }, @@ -21324,6 +23000,7 @@ "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-17.1.18.tgz", "integrity": "sha512-bkUy2g4v1i+3FeUf5fXMLbxmV95eG4/sS7lYE32GrUeVgQRfQEk39gpskksFunyaxQgTIdrvYbnuNbO/pSUSqw==", "dev": true, + "license": "Apache-2.0", "bin": { "ncu": "build/cli.js", "npm-check-updates": "build/cli.js" @@ -21337,6 +23014,7 @@ "version": "11.0.3", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.3.tgz", "integrity": "sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -21353,6 +23031,7 @@ "version": "7.0.2", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -21368,6 +23047,7 @@ "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "deprecated": "This package is no longer supported.", "devOptional": true, + "license": "ISC", "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", @@ -21383,6 +23063,7 @@ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -21394,6 +23075,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "license": "MIT", "optional": true, "peer": true }, @@ -21401,6 +23083,7 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", + "license": "MIT", "dependencies": { "bn.js": "4.11.6", "strip-hex-prefix": "1.0.0" @@ -21413,12 +23096,14 @@ "node_modules/number-to-bn/node_modules/bn.js": { "version": "4.11.6", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==" + "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", + "license": "MIT" }, "node_modules/ob1": { "version": "0.82.4", "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.82.4.tgz", "integrity": "sha512-n9S8e4l5TvkrequEAMDidl4yXesruWTNTzVkeaHSGywoTOIwTzZzKw7Z670H3eaXDZui5MJXjWGNzYowVZIxCA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -21433,6 +23118,7 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -21442,6 +23128,7 @@ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -21451,6 +23138,7 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -21463,6 +23151,7 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -21472,6 +23161,7 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -21491,12 +23181,14 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz", "integrity": "sha512-nnda7W8d+A3vEIY+UrDQzzboPf1vhs4JYVhff5CDkq9QNoZY7Xrxeo/htox37j9dZf7yNHevZzqtejWgy1vCqQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -21510,6 +23202,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -21520,6 +23213,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -21529,6 +23223,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -21543,6 +23238,7 @@ "version": "8.4.2", "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -21560,6 +23256,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -21577,6 +23274,7 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -21600,6 +23298,7 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -21625,6 +23324,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -21635,6 +23335,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -21649,6 +23350,7 @@ "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", @@ -21666,6 +23368,7 @@ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -21675,6 +23378,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "devOptional": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -21690,6 +23394,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "devOptional": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -21705,6 +23410,7 @@ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "devOptional": true, + "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -21719,6 +23425,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", "engines": { "node": ">=6" } @@ -21726,24 +23433,28 @@ "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" }, "node_modules/pako": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", + "license": "(MIT AND Zlib)", "optional": true }, "node_modules/papaparse": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.5.3.tgz", - "integrity": "sha512-5QvjGxYVjxO59MGU2lHVYpRWBBtKHnlIAcSe1uNFCkkptUh63NFRj0FJQm7nR67puEruUci/ZkjmEFrjCAyP4A==" + "integrity": "sha512-5QvjGxYVjxO59MGU2lHVYpRWBBtKHnlIAcSe1uNFCkkptUh63NFRj0FJQm7nR67puEruUci/ZkjmEFrjCAyP4A==", + "license": "MIT" }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -21756,6 +23467,7 @@ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dev": true, + "license": "ISC", "dependencies": { "asn1.js": "^4.10.1", "browserify-aes": "^1.2.0", @@ -21773,6 +23485,7 @@ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", @@ -21783,13 +23496,15 @@ "version": "4.12.2", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/parse-entities": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", "character-entities-legacy": "^3.0.0", @@ -21809,6 +23524,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "devOptional": true, + "license": "MIT", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -21821,6 +23537,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/parse-png/-/parse-png-2.1.0.tgz", "integrity": "sha512-Nt/a5SfCLiTnQAjx3fHlqp8hRgTL3z7kTQZzvIMS9uCAepnCyjpdEc6M/sz69WqMBdaDBw9sF1F1UaHROYzGkQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -21834,6 +23551,7 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -21844,12 +23562,14 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", "engines": { "node": ">=8" } @@ -21859,6 +23579,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -21867,6 +23588,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", "engines": { "node": ">=8" } @@ -21875,12 +23597,14 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -21896,6 +23620,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -21905,6 +23630,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -21913,6 +23639,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "license": "MIT", "dependencies": { "create-hash": "^1.1.2", "create-hmac": "^1.1.4", @@ -21929,6 +23656,7 @@ "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-0.4.1.tgz", "integrity": "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12", "npm": ">=6" @@ -21941,17 +23669,20 @@ "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -21966,6 +23697,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -21973,12 +23705,14 @@ "node_modules/pina": { "version": "0.20.2204228", "resolved": "https://registry.npmjs.org/pina/-/pina-0.20.2204228.tgz", - "integrity": "sha512-osNVZg36DsDAEPHskmnTINhM5APSLsu+y8guYYX65nidbRPmnv/trAoPnacpfh8aCpsowGWR/DAYtQHZyZq8wQ==" + "integrity": "sha512-osNVZg36DsDAEPHskmnTINhM5APSLsu+y8guYYX65nidbRPmnv/trAoPnacpfh8aCpsowGWR/DAYtQHZyZq8wQ==", + "license": "UNLICENSED" }, "node_modules/pinia": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz", "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==", + "license": "MIT", "peer": true, "dependencies": { "@vue/devtools-api": "^6.6.3", @@ -22001,6 +23735,7 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.2.3.tgz", "integrity": "sha512-Cm819WBj/s5K5DGw55EwbXDtx+EZzM0YR5AZbq9XE3u0xvXwvX2JnWoFpWIcdzISBHqy9H1UiSIUmXyXqWsQRQ==", + "license": "MIT", "peerDependencies": { "pinia": "^2.0.0" } @@ -22010,6 +23745,7 @@ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", "devOptional": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -22019,6 +23755,7 @@ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.52.0.tgz", "integrity": "sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "playwright-core": "1.52.0" }, @@ -22037,6 +23774,7 @@ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.52.0.tgz", "integrity": "sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==", "dev": true, + "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, @@ -22048,6 +23786,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", + "license": "MIT", "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", @@ -22061,6 +23800,7 @@ "version": "0.8.10", "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -22069,6 +23809,7 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -22080,6 +23821,7 @@ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -22102,6 +23844,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.8", "picocolors": "^1.1.1", @@ -22116,6 +23859,7 @@ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dev": true, + "license": "MIT", "dependencies": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -22133,6 +23877,7 @@ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", "dev": true, + "license": "MIT", "dependencies": { "camelcase-css": "^2.0.1" }, @@ -22162,6 +23907,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "lilconfig": "^3.0.0", "yaml": "^2.3.4" @@ -22197,6 +23943,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.1.1" }, @@ -22212,6 +23959,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -22224,12 +23972,14 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/prebuild-install": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "license": "MIT", "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", @@ -22254,12 +24004,14 @@ "node_modules/prebuild-install/node_modules/chownr": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" }, "node_modules/prebuild-install/node_modules/tar-fs": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", + "license": "MIT", "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", @@ -22272,6 +24024,7 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -22281,6 +24034,7 @@ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -22296,6 +24050,7 @@ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", "dev": true, + "license": "MIT", "dependencies": { "fast-diff": "^1.1.2" }, @@ -22308,6 +24063,7 @@ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -22319,6 +24075,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -22334,6 +24091,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -22347,6 +24105,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "license": "ISC", "optional": true, "peer": true, "engines": { @@ -22357,6 +24116,7 @@ "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -22365,13 +24125,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -22380,6 +24142,7 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -22390,13 +24153,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "devOptional": true + "devOptional": true, + "license": "ISC" }, "node_modules/promise-retry": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "devOptional": true, + "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -22409,6 +24174,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "license": "MIT", "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" @@ -22421,6 +24187,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "license": "MIT", "engines": { "node": ">=6" } @@ -22429,6 +24196,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.5.0.tgz", "integrity": "sha512-EsALjF9QsrEk6gbCx3lmfHxVN0ah7nG3cY7GySD4xf4g8cr7g543zB88Foh897Sr1RQJ9yDCUsoT1i1H/cVUFA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "uint8-varint": "^2.0.2", "uint8arraylist": "^2.4.3", @@ -22438,12 +24206,14 @@ "node_modules/protons-runtime/node_modules/multiformats": { "version": "13.3.6", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", - "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==" + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" }, "node_modules/protons-runtime/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } @@ -22451,19 +24221,22 @@ "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -22477,12 +24250,14 @@ "version": "4.12.2", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pump": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -22493,6 +24268,7 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -22502,6 +24278,7 @@ "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -22510,6 +24287,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "license": "MIT", "dependencies": { "tslib": "^2.8.1" } @@ -22517,12 +24295,14 @@ "node_modules/pvtsutils/node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/pvutils": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.3.tgz", "integrity": "sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==", + "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -22533,6 +24313,7 @@ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -22542,6 +24323,7 @@ "version": "1.4.21", "resolved": "https://registry.npmjs.org/qr-code-generator-vue3/-/qr-code-generator-vue3-1.4.21.tgz", "integrity": "sha512-UOnhze8vm3ej9A5w7Fl7cO2nOEJ7Nao4qgW60vlmlmaDIg0+CiDMRs3Yy6PK7Ba3Xz77bqQA7l7kJqnM1ti17g==", + "license": "MIT", "dependencies": { "@chenfengyuan/vue-qrcode": "^1.0.2", "qrcode-generator": "^1.4.3" @@ -22551,6 +24333,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/@chenfengyuan/vue-qrcode/-/vue-qrcode-1.0.2.tgz", "integrity": "sha512-hwy1d4YMJAyEh+V7dLPG8eAKACRvugzSB4ylwb6QNqo84KHTF50/5EJcBYdUhTRPfAqrxG0i6jDAXONWOGyQbQ==", + "license": "MIT", "dependencies": { "qrcode": "^1.4.4" }, @@ -22576,6 +24359,7 @@ "version": "2.8.8", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "license": "MIT", "optional": true, "peer": true, "bin": { @@ -22593,6 +24377,7 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.16.tgz", "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==", "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.", + "license": "MIT", "peer": true, "dependencies": { "@vue/compiler-sfc": "2.7.16", @@ -22603,6 +24388,7 @@ "version": "1.5.4", "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.4.tgz", "integrity": "sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==", + "license": "MIT", "dependencies": { "dijkstrajs": "^1.0.1", "pngjs": "^5.0.0", @@ -22618,7 +24404,8 @@ "node_modules/qrcode-generator": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz", - "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==" + "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==", + "license": "MIT" }, "node_modules/qrcode-terminal": { "version": "0.11.0", @@ -22634,6 +24421,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -22644,6 +24432,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -22656,6 +24445,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -22667,6 +24457,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -22681,6 +24472,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -22692,6 +24484,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "license": "MIT", "engines": { "node": ">=10.13.0" } @@ -22700,6 +24493,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -22712,12 +24506,14 @@ "node_modules/qrcode/node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "license": "ISC" }, "node_modules/qrcode/node_modules/yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -22739,6 +24535,7 @@ "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -22751,6 +24548,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -22775,13 +24573,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -22793,6 +24593,7 @@ "version": "0.29.1", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.1.tgz", "integrity": "sha512-OfxIeWzd4xdUNxlWhgFazxsA/nl3mS4/jGZI5n00uWOoSSFRhC1b6gl6xvmzUamgmqELraWp0J/qqVlXYPDPyA==", + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/ramda" @@ -22802,6 +24603,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -22811,6 +24613,7 @@ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, + "license": "MIT", "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -22820,6 +24623,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -22830,6 +24634,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -22843,12 +24648,14 @@ "node_modules/rc/node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -22857,6 +24664,7 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/rdf-canonize/-/rdf-canonize-3.4.0.tgz", "integrity": "sha512-fUeWjrkOO0t1rg7B2fdyDTvngj+9RlUyL92vOdiB7c0FPguWVsniIMjEtHH+meLBO9rzkUlUzBVXgWrjI8P9LA==", + "license": "BSD-3-Clause", "optional": true, "dependencies": { "setimmediate": "^1.0.5" @@ -22869,6 +24677,7 @@ "version": "19.1.0", "resolved": "https://registry.npmjs.org/react/-/react-19.1.0.tgz", "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -22879,6 +24688,7 @@ "version": "6.1.2", "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-6.1.2.tgz", "integrity": "sha512-ldFwzufLletzCikNJVYaxlxMLu7swJ3T2VrGfzXlMsVhZhPDKXA38DEROidaYZVgMAmQnIjymrmqto5pyfrwPA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -22890,6 +24700,7 @@ "version": "7.5.10", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -22912,6 +24723,7 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT", "optional": true, "peer": true }, @@ -22919,6 +24731,7 @@ "version": "0.79.2", "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.79.2.tgz", "integrity": "sha512-AnGzb56JvU5YCL7cAwg10+ewDquzvmgrMddiBM0GAWLwQM/6DJfGd2ZKrMuKKehHerpDDZgG+EY64gk3x3dEkw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -22979,6 +24792,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/react-native-edge-to-edge/-/react-native-edge-to-edge-1.6.0.tgz", "integrity": "sha512-2WCNdE3Qd6Fwg9+4BpbATUxCLcouF6YRY7K+J36KJ4l3y+tWN6XCqAC4DuoGblAAbb2sLkhEDp4FOlbOIot2Og==", + "license": "MIT", "optional": true, "peer": true, "peerDependencies": { @@ -22990,6 +24804,7 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/react-native-securerandom/-/react-native-securerandom-0.1.1.tgz", "integrity": "sha512-CozcCx0lpBLevxiXEb86kwLRalBCHNjiGPlw3P7Fi27U6ZLdfjOCNRHD1LtBKcvPvI3TvkBXB3GOtLvqaYJLGw==", + "license": "MIT", "optional": true, "dependencies": { "base64-js": "*" @@ -23002,6 +24817,7 @@ "version": "12.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -23012,6 +24828,7 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -23022,6 +24839,7 @@ "version": "0.14.2", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -23033,6 +24851,7 @@ "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", "integrity": "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -23045,6 +24864,7 @@ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^2.3.0" } @@ -23054,6 +24874,7 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, + "license": "MIT", "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -23068,6 +24889,7 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^2.0.0", "read-pkg": "^3.0.0" @@ -23081,6 +24903,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -23093,6 +24916,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -23106,6 +24930,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^1.0.0" }, @@ -23118,6 +24943,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -23130,6 +24956,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -23139,6 +24966,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -23147,13 +24975,15 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -23166,6 +24996,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -23178,6 +25009,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -23187,6 +25019,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -23195,6 +25028,7 @@ "version": "4.7.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", "dependencies": { "abort-controller": "^3.0.0", "buffer": "^6.0.3", @@ -23211,6 +25045,7 @@ "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "dev": true, + "license": "Apache-2.0", "peer": true, "dependencies": { "minimatch": "^5.1.0" @@ -23221,6 +25056,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -23234,6 +25070,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "dependencies": { "picomatch": "^2.2.1" }, @@ -23246,6 +25083,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -23258,6 +25096,7 @@ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -23269,13 +25108,15 @@ "node_modules/reflect-metadata": { "version": "0.1.14", "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz", - "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==" + "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==", + "license": "Apache-2.0" }, "node_modules/reflect.getprototypeof": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -23297,13 +25138,15 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/regenerate-unicode-properties": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", "devOptional": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.2" }, @@ -23315,6 +25158,7 @@ "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT", "optional": true, "peer": true }, @@ -23322,13 +25166,15 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/regexp-to-ast/-/regexp-to-ast-0.5.0.tgz", "integrity": "sha512-tlbJqcMHnPKI9zSrystikWKwHkBqu2a/Sgw01h3zFjvYrMxEDYHzzoMZnUrbIfpTFEsoRnnviOXNCzFiSc54Qw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", @@ -23349,6 +25195,7 @@ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.2.0.tgz", "integrity": "sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==", "devOptional": true, + "license": "MIT", "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.0", @@ -23364,19 +25211,22 @@ "node_modules/register-service-worker": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/register-service-worker/-/register-service-worker-1.7.2.tgz", - "integrity": "sha512-CiD3ZSanZqcMPRhtfct5K9f7i3OLCcBBWsJjLh1gW9RO/nS94sVzY59iS+fgYBOBqaBpf4EzfqUF3j9IG+xo8A==" + "integrity": "sha512-CiD3ZSanZqcMPRhtfct5K9f7i3OLCcBBWsJjLh1gW9RO/nS94sVzY59iS+fgYBOBqaBpf4EzfqUF3j9IG+xo8A==", + "license": "MIT" }, "node_modules/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/regjsparser": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.12.0.tgz", "integrity": "sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==", "devOptional": true, + "license": "BSD-2-Clause", "dependencies": { "jsesc": "~3.0.2" }, @@ -23389,6 +25239,7 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "devOptional": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, @@ -23401,6 +25252,7 @@ "resolved": "https://registry.npmjs.org/replace/-/replace-1.2.2.tgz", "integrity": "sha512-C4EDifm22XZM2b2JOYe6Mhn+lBsLBAvLbK8drfUQLTfD1KYl/n3VaW/CDju0Ny4w3xTtegBpg8YNSpFJPUDSjA==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "2.4.2", "minimatch": "3.0.5", @@ -23419,6 +25271,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -23431,6 +25284,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -23441,6 +25295,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -23455,6 +25310,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -23466,6 +25322,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -23474,13 +25331,15 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/replace/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -23490,6 +25349,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -23503,6 +25363,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -23512,6 +25373,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -23524,6 +25386,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -23536,6 +25399,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -23551,6 +25415,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -23563,6 +25428,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -23575,6 +25441,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -23589,6 +25456,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -23604,6 +25472,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -23615,19 +25484,22 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/replace/node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/replace/node_modules/yargs": { "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -23650,6 +25522,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, + "license": "ISC", "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -23662,6 +25535,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -23671,6 +25545,7 @@ "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==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -23678,7 +25553,8 @@ "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "license": "ISC" }, "node_modules/requireg": { "version": "0.2.2", @@ -23699,6 +25575,7 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -23710,6 +25587,7 @@ "resolved": "https://registry.npmjs.org/resedit/-/resedit-1.7.2.tgz", "integrity": "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==", "dev": true, + "license": "MIT", "dependencies": { "pe-library": "^0.4.1" }, @@ -23727,6 +25605,7 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "devOptional": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", @@ -23746,13 +25625,15 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -23761,6 +25642,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-workspace-root/-/resolve-workspace-root-2.0.0.tgz", "integrity": "sha512-IsaBUZETJD5WsI11Wt8PKHwaIe45or6pwNc8yflvLJ4DWtImK9kuLoH5kUva/2Mmx/RdIyr4aONNSa2v9LTJsw==", + "license": "MIT", "optional": true, "peer": true }, @@ -23768,6 +25650,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -23779,6 +25662,7 @@ "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, + "license": "MIT", "dependencies": { "lowercase-keys": "^2.0.0" }, @@ -23791,6 +25675,7 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -23804,6 +25689,7 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "devOptional": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -23813,6 +25699,7 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "devOptional": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -23823,6 +25710,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^11.0.0", "package-json-from-dist": "^1.0.0" @@ -23842,6 +25730,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.2.tgz", "integrity": "sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^4.0.1", @@ -23865,6 +25754,7 @@ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -23880,6 +25770,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.1.0.tgz", "integrity": "sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==", "dev": true, + "license": "ISC", "engines": { "node": "20 || >=22" } @@ -23889,6 +25780,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -23904,6 +25796,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -23913,6 +25806,7 @@ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" @@ -23928,6 +25822,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -23937,6 +25832,7 @@ "version": "2.2.7", "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "license": "MPL-2.0", "dependencies": { "bn.js": "^5.2.0" }, @@ -23949,6 +25845,7 @@ "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", "dev": true, + "license": "BSD-3-Clause", "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -23967,6 +25864,7 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.41.1.tgz", "integrity": "sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "1.0.7" }, @@ -24006,6 +25904,7 @@ "resolved": "https://registry.npmjs.org/run-con/-/run-con-1.3.2.tgz", "integrity": "sha512-CcfE+mYiTcKEzg0IqS08+efdnH0oJ3zV0wSUFBNrMHMuxCtXvBCLzCJHatwuXDcu/RlhjTziTo/a1ruQik6/Yg==", "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~4.1.0", @@ -24021,6 +25920,7 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -24044,6 +25944,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -24053,6 +25954,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } @@ -24060,13 +25962,15 @@ "node_modules/safari-14-idb-fix": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/safari-14-idb-fix/-/safari-14-idb-fix-1.0.6.tgz", - "integrity": "sha512-oTEQOdMwRX+uCtWCKT1nx2gAeSdpr8elg/2gcaKUH00SJU2xWESfkx11nmXwTRHy7xfQoj1o4TTQvdmuBosTnA==" + "integrity": "sha512-oTEQOdMwRX+uCtWCKT1nx2gAeSdpr8elg/2gcaKUH00SJU2xWESfkx11nmXwTRHy7xfQoj1o4TTQvdmuBosTnA==", + "license": "Apache-2.0" }, "node_modules/safe-array-concat": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", @@ -24098,13 +26002,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-push-apply": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" @@ -24121,6 +26027,7 @@ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -24137,13 +26044,15 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/sanitize-filename": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", "dev": true, + "license": "WTFPL OR ISC", "dependencies": { "truncate-utf8-bytes": "^1.0.0" } @@ -24151,30 +26060,35 @@ "node_modules/sax": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "license": "ISC" }, "node_modules/scheduler": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==", + "license": "MIT", "optional": true, "peer": true }, "node_modules/scrypt-js": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "license": "MIT" }, "node_modules/sdp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/sdp/-/sdp-3.2.0.tgz", - "integrity": "sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==" + "integrity": "sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==", + "license": "MIT" }, "node_modules/secp256k1": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "elliptic": "^6.5.7", "node-addon-api": "^5.0.0", @@ -24187,12 +26101,14 @@ "node_modules/secp256k1/node_modules/node-addon-api": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", - "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==", + "license": "MIT" }, "node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -24205,12 +26121,14 @@ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/send": { "version": "0.19.1", "resolved": "https://registry.npmjs.org/send/-/send-0.19.1.tgz", "integrity": "sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -24236,6 +26154,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -24246,6 +26165,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", "optional": true, "peer": true }, @@ -24253,6 +26173,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -24263,6 +26184,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", "optional": true, "peer": true, "bin": { @@ -24276,6 +26198,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", "optional": true, "peer": true }, @@ -24283,6 +26206,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -24296,6 +26220,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -24306,6 +26231,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "license": "MIT", "optional": true, "dependencies": { "type-fest": "^0.20.2" @@ -24322,6 +26248,7 @@ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -24330,6 +26257,7 @@ "version": "1.16.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -24346,6 +26274,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -24356,6 +26285,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", "optional": true, "peer": true }, @@ -24363,6 +26293,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -24373,6 +26304,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", "optional": true, "peer": true, "bin": { @@ -24386,6 +26318,7 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT", "optional": true, "peer": true }, @@ -24393,6 +26326,7 @@ "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -24406,6 +26340,7 @@ "version": "0.19.0", "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -24431,6 +26366,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -24441,6 +26377,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -24450,13 +26387,15 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "license": "ISC" }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -24474,6 +26413,7 @@ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -24489,6 +26429,7 @@ "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, + "license": "MIT", "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", @@ -24501,12 +26442,14 @@ "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC", "optional": true, "peer": true }, @@ -24514,6 +26457,7 @@ "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "license": "(MIT AND BSD-3-Clause)", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -24528,6 +26472,7 @@ "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", "devOptional": true, "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "color": "^4.2.3", "detect-libc": "^2.0.2", @@ -24549,12 +26494,14 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -24566,6 +26513,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", "engines": { "node": ">=8" } @@ -24575,6 +26523,7 @@ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", "devOptional": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -24587,6 +26536,7 @@ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", @@ -24606,6 +26556,7 @@ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" @@ -24622,6 +26573,7 @@ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -24640,6 +26592,7 @@ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", @@ -24657,7 +26610,8 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" }, "node_modules/simple-concat": { "version": "1.0.1", @@ -24676,7 +26630,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/simple-get": { "version": "4.0.1", @@ -24696,6 +26651,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", @@ -24707,6 +26663,7 @@ "resolved": "https://registry.npmjs.org/simple-plist/-/simple-plist-1.3.1.tgz", "integrity": "sha512-iMSw5i0XseMnrhtIzRb7XpQEXepa9xhWxGUojHBL43SIpQuDQkh3Wpy67ZbDzZVr6EKxvwVChnVpdl8hEVLDiw==", "devOptional": true, + "license": "MIT", "dependencies": { "bplist-creator": "0.1.0", "bplist-parser": "0.3.1", @@ -24718,6 +26675,7 @@ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.1.tgz", "integrity": "sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==", "devOptional": true, + "license": "MIT", "dependencies": { "big-integer": "1.6.x" }, @@ -24730,6 +26688,7 @@ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "devOptional": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.3.1" } @@ -24738,13 +26697,15 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -24755,18 +26716,21 @@ "node_modules/simple-vue-camera": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/simple-vue-camera/-/simple-vue-camera-1.1.3.tgz", - "integrity": "sha512-GVAYq1BMI9cHt+h24tu2dfIFFvhjVQ1M8IkK5LmrKcYoBA8FZlLNlhrHC2NnTPbMAXIvJn1Bqx8X6Q31+Y2+jA==" + "integrity": "sha512-GVAYq1BMI9cHt+h24tu2dfIFFvhjVQ1M8IkK5LmrKcYoBA8FZlLNlhrHC2NnTPbMAXIvJn1Bqx8X6Q31+Y2+jA==", + "license": "MIT" }, "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "license": "MIT" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -24775,6 +26739,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -24791,6 +26756,7 @@ "version": "1.6.6", "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -24802,6 +26768,7 @@ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "devOptional": true, + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -24811,13 +26778,15 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/smob/-/smob-1.5.0.tgz", "integrity": "sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/smol-toml": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.4.tgz", "integrity": "sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 18" }, @@ -24830,6 +26799,7 @@ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz", "integrity": "sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==", "devOptional": true, + "license": "MIT", "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" @@ -24844,6 +26814,7 @@ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^6.0.2", "debug": "^4.3.3", @@ -24858,6 +26829,7 @@ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "4" }, @@ -24869,6 +26841,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -24877,6 +26850,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -24886,6 +26860,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "devOptional": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -24896,7 +26871,8 @@ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/spawn-command": { "version": "0.0.2", @@ -24909,6 +26885,7 @@ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -24918,13 +26895,15 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true + "dev": true, + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -24934,13 +26913,15 @@ "version": "3.0.21", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, + "license": "MIT", "dependencies": { "through": "2" }, @@ -24953,6 +26934,7 @@ "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, + "license": "ISC", "dependencies": { "readable-stream": "^3.0.0" } @@ -24962,6 +26944,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -24975,7 +26958,8 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", - "devOptional": true + "devOptional": true, + "license": "BSD-3-Clause" }, "node_modules/sql-highlight": { "version": "6.0.0", @@ -24988,6 +26972,7 @@ "url": "https://github.com/sponsors/scriptcoded" } ], + "license": "MIT", "engines": { "node": ">=14" } @@ -24997,6 +26982,7 @@ "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz", "integrity": "sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==", "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { "bindings": "^1.5.0", "node-addon-api": "^7.0.0", @@ -25019,6 +27005,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "license": "ISC", "optional": true, "dependencies": { "@gar/promisify": "^1.0.1", @@ -25030,6 +27017,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "deprecated": "This functionality has been moved to @npmcli/fs", + "license": "MIT", "optional": true, "dependencies": { "mkdirp": "^1.0.4", @@ -25043,6 +27031,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "license": "MIT", "optional": true, "engines": { "node": ">= 6" @@ -25052,6 +27041,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", "optional": true, "dependencies": { "debug": "4" @@ -25064,6 +27054,7 @@ "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "license": "ISC", "optional": true, "dependencies": { "@npmcli/fs": "^1.0.0", @@ -25093,6 +27084,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "license": "MIT", "optional": true, "dependencies": { "@tootallnate/once": "1", @@ -25107,6 +27099,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", "optional": true, "dependencies": { "agent-base": "6", @@ -25120,6 +27113,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "license": "ISC", "optional": true, "dependencies": { "yallist": "^4.0.0" @@ -25132,6 +27126,7 @@ "version": "9.1.0", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "license": "ISC", "optional": true, "dependencies": { "agentkeepalive": "^4.1.3", @@ -25159,6 +27154,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "license": "MIT", "optional": true, "dependencies": { "minipass": "^3.1.0", @@ -25175,12 +27171,14 @@ "node_modules/sqlite3/node_modules/node-addon-api": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==" + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT" }, "node_modules/sqlite3/node_modules/node-gyp": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", + "license": "MIT", "optional": true, "dependencies": { "env-paths": "^2.2.0", @@ -25205,6 +27203,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "license": "ISC", "optional": true, "dependencies": { "abbrev": "1" @@ -25221,6 +27220,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "optional": true, "dependencies": { "glob": "^7.1.3" @@ -25236,6 +27236,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", + "license": "MIT", "optional": true, "dependencies": { "agent-base": "^6.0.2", @@ -25250,6 +27251,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "license": "ISC", "optional": true, "dependencies": { "minipass": "^3.1.1" @@ -25262,6 +27264,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "license": "ISC", "optional": true, "dependencies": { "unique-slug": "^2.0.0" @@ -25271,6 +27274,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "license": "ISC", "optional": true, "dependencies": { "imurmurhash": "^0.1.4" @@ -25281,6 +27285,7 @@ "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.1.1" }, @@ -25292,6 +27297,7 @@ "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -25305,6 +27311,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -25315,6 +27322,7 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "license": "MIT", "optional": true, "peer": true }, @@ -25322,6 +27330,7 @@ "version": "0.1.11", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -25335,6 +27344,7 @@ "version": "0.7.1", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "license": "(MIT OR CC0-1.0)", "optional": true, "peer": true, "engines": { @@ -25346,6 +27356,7 @@ "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -25354,6 +27365,7 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -25364,12 +27376,14 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/str2buf/-/str2buf-1.3.0.tgz", "integrity": "sha512-xIBmHIUHYZDP4HyoXGHYNVmxlXLXDrtFHYT0eV6IOdEj3VO9ccaF1Ejl9Oq8iFjITllpT8FhaXb4KsNmw+3EuA==", + "license": "MIT", "optional": true }, "node_modules/stream-browserify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "license": "MIT", "dependencies": { "inherits": "~2.0.4", "readable-stream": "^3.5.0" @@ -25379,6 +27393,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -25393,6 +27408,7 @@ "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-2.2.0.tgz", "integrity": "sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==", "devOptional": true, + "license": "Unlicense", "engines": { "node": ">= 0.10.0" } @@ -25402,6 +27418,7 @@ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.22.0.tgz", "integrity": "sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==", "devOptional": true, + "license": "MIT", "dependencies": { "fast-fifo": "^1.3.2", "text-decoder": "^1.1.0" @@ -25414,6 +27431,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -25422,12 +27440,14 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz", "integrity": "sha512-tYft6IFi8SjplJpxCUxyqisD3b+R2CSkomrtJYCkvuf1KuCAWgz7YXt4O0jip7efpfCemwHEzTEAO8EuOYgh3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -25442,6 +27462,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -25456,6 +27477,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", @@ -25483,6 +27505,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", @@ -25504,6 +27527,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", @@ -25522,6 +27546,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -25539,6 +27564,7 @@ "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", @@ -25553,6 +27579,7 @@ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -25561,6 +27588,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -25573,6 +27601,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -25585,6 +27614,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -25594,6 +27624,7 @@ "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -25602,6 +27633,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "license": "MIT", "dependencies": { "is-hex-prefixed": "1.0.0" }, @@ -25615,6 +27647,7 @@ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, + "license": "MIT", "dependencies": { "min-indent": "^1.0.0" }, @@ -25627,6 +27660,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -25638,6 +27672,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/structured-headers/-/structured-headers-0.4.1.tgz", "integrity": "sha512-0MP/Cxx5SzeeZ10p/bZI0S6MpgD+yxAhi1BOQ34jgnMXsCq3j1t6tQnZu+KdlL7dvJTLT3g9xN8tl10TqgFMcg==", + "license": "MIT", "optional": true, "peer": true }, @@ -25646,6 +27681,7 @@ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", "devOptional": true, + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.2", "commander": "^4.0.0", @@ -25668,6 +27704,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "devOptional": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -25677,6 +27714,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "devOptional": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -25697,6 +27735,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "devOptional": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -25712,6 +27751,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "devOptional": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -25721,6 +27761,7 @@ "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "debug": "^4.1.0" }, @@ -25733,6 +27774,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "devOptional": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -25747,6 +27789,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -25761,6 +27804,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -25775,6 +27819,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "devOptional": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -25787,6 +27832,7 @@ "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.6.tgz", "integrity": "sha512-2pR2ubZSV64f/vqm9eLPz/KOvR9Dm+Co/5ChLgeHl0yEDRc6h5hXHoxEQH8Y5Ljycozd3p1k5TTSVdzYGkPvLw==", "dev": true, + "license": "MIT", "dependencies": { "@pkgr/core": "^0.2.4" }, @@ -25802,6 +27848,7 @@ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", "dev": true, + "license": "MIT", "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", @@ -25838,6 +27885,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -25855,6 +27903,7 @@ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.9.tgz", "integrity": "sha512-XF4w9Xp+ZQgifKakjZYmFdkLoSWd34VGKcsTCwlNWM7QG3ZbaxnTsaBwnjFZqHRf/rROxaR8rXnbtwdvaDI+lA==", "devOptional": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" @@ -25869,6 +27918,7 @@ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", "devOptional": true, + "license": "MIT", "dependencies": { "b4a": "^1.6.4", "fast-fifo": "^1.2.0", @@ -25879,6 +27929,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -25894,6 +27945,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -25918,6 +27970,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -25927,6 +27980,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -25940,6 +27994,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "license": "ISC", "engines": { "node": ">=8" } @@ -25949,6 +28004,7 @@ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -25958,6 +28014,7 @@ "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", "dev": true, + "license": "MIT", "dependencies": { "async-exit-hook": "^2.0.1", "fs-extra": "^10.0.0" @@ -25968,6 +28025,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -25982,6 +28040,7 @@ "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", "dev": true, + "license": "MIT", "dependencies": { "del": "^6.0.0", "is-stream": "^2.0.0", @@ -26001,6 +28060,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -26012,6 +28072,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -26030,6 +28091,7 @@ "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.2.tgz", "integrity": "sha512-yEPUmWve+VA78bI71BW70Dh0TuV4HHd+I5SHOAfS1+QBOmvmCiiffgjR8ryyEd3KIfvPGFqoADt8LdQ6XpXIvg==", "devOptional": true, + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.14.0", @@ -26047,12 +28109,14 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -26068,6 +28132,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -26079,6 +28144,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -26093,6 +28159,7 @@ "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.3.tgz", "integrity": "sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==", "devOptional": true, + "license": "Apache-2.0", "dependencies": { "b4a": "^1.6.4" } @@ -26102,6 +28169,7 @@ "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } @@ -26110,13 +28178,15 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/thenify": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "devOptional": true, + "license": "MIT", "dependencies": { "any-promise": "^1.0.0" } @@ -26126,6 +28196,7 @@ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", "devOptional": true, + "license": "MIT", "dependencies": { "thenify": ">= 3.1.0 < 4" }, @@ -26136,12 +28207,14 @@ "node_modules/three": { "version": "0.156.1", "resolved": "https://registry.npmjs.org/three/-/three-0.156.1.tgz", - "integrity": "sha512-kP7H0FK9d/k6t/XvQ9FO6i+QrePoDcNhwl0I02+wmUJRNSLCUIDMcfObnzQvxb37/0Uc9TDT0T1HgsRRrO6SYQ==" + "integrity": "sha512-kP7H0FK9d/k6t/XvQ9FO6i+QrePoDcNhwl0I02+wmUJRNSLCUIDMcfObnzQvxb37/0Uc9TDT0T1HgsRRrO6SYQ==", + "license": "MIT" }, "node_modules/throat": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "license": "MIT", "optional": true, "peer": true }, @@ -26149,12 +28222,14 @@ "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through2": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "license": "MIT", "dependencies": { "readable-stream": "3" } @@ -26163,6 +28238,7 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -26176,6 +28252,7 @@ "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "license": "MIT", "engines": { "node": ">=14.14" } @@ -26184,6 +28261,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", + "license": "MIT", "dependencies": { "tmp": "^0.2.0" } @@ -26192,6 +28270,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "license": "BSD-3-Clause", "optional": true, "peer": true }, @@ -26200,6 +28279,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "devOptional": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -26211,6 +28291,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -26220,12 +28301,14 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" }, "node_modules/tree-kill": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "license": "MIT", "bin": { "tree-kill": "cli.js" } @@ -26234,6 +28317,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "license": "MIT", "engines": { "node": ">=0.6" } @@ -26243,6 +28327,7 @@ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -26252,6 +28337,7 @@ "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", "dev": true, + "license": "WTFPL", "dependencies": { "utf8-byte-length": "^1.0.1" } @@ -26261,6 +28347,7 @@ "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -26272,13 +28359,15 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", - "devOptional": true + "devOptional": true, + "license": "Apache-2.0" }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "devOptional": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -26321,13 +28410,15 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/ts-node/node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "devOptional": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -26336,18 +28427,21 @@ "version": "9.6.0", "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz", "integrity": "sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "license": "0BSD" }, "node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^1.8.1" }, @@ -26362,12 +28456,14 @@ "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "dev": true, + "license": "0BSD" }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" }, @@ -26378,13 +28474,15 @@ "node_modules/tweetnacl": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "license": "Unlicense" }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -26396,6 +28494,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -26407,6 +28506,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "devOptional": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -26419,6 +28519,7 @@ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -26433,6 +28534,7 @@ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", @@ -26452,6 +28554,7 @@ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", @@ -26473,6 +28576,7 @@ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -26492,18 +28596,21 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/typedarray-to-buffer": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz", "integrity": "sha512-vjMKrfSoUDN8/Vnqitw2FmstOfuJ73G6CrSEKnf11A6RmasVxHqfeBcnTb6RsL4pTMuV5Zsv9IiHRphMZyckUw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/typeorm": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.24.tgz", "integrity": "sha512-4IrHG7A0tY8l5gEGXfW56VOMfUVWEkWlH/h5wmcyZ+V8oCiLj7iTPp0lEjMEZVrxEkGSdP9ErgTKHKXQApl/oA==", + "license": "MIT", "dependencies": { "@sqltools/formatter": "^1.2.5", "ansis": "^3.17.0", @@ -26609,6 +28716,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -26625,6 +28733,7 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -26644,6 +28753,7 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -26658,6 +28768,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -26665,12 +28776,14 @@ "node_modules/typeorm/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/typeorm/node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/typeorm/node_modules/uuid": { "version": "11.1.0", @@ -26680,6 +28793,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/esm/bin/uuid" } @@ -26689,6 +28803,7 @@ "resolved": "https://registry.npmjs.org/types-ramda/-/types-ramda-0.29.10.tgz", "integrity": "sha512-5PJiW/eiTPyXXBYGZOYGezMl6qj7keBiZheRwfjJZY26QPHsNrjfJnz0mru6oeqqoTHOni893Jfd6zyUXfQRWg==", "dev": true, + "license": "MIT", "dependencies": { "ts-toolbelt": "^9.6.0" } @@ -26698,6 +28813,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "devOptional": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -26724,6 +28840,7 @@ "url": "https://github.com/sponsors/faisalman" } ], + "license": "MIT", "bin": { "ua-parser-js": "script/cli.js" }, @@ -26735,13 +28852,15 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/uglify-js": { "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", "dev": true, + "license": "BSD-2-Clause", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -26754,6 +28873,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/uint8-varint/-/uint8-varint-2.0.4.tgz", "integrity": "sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw==", + "license": "Apache-2.0 OR MIT", "dependencies": { "uint8arraylist": "^2.0.0", "uint8arrays": "^5.0.0" @@ -26762,12 +28882,14 @@ "node_modules/uint8-varint/node_modules/multiformats": { "version": "13.3.6", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", - "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==" + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" }, "node_modules/uint8-varint/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } @@ -26776,6 +28898,7 @@ "version": "2.4.8", "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.8.tgz", "integrity": "sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ==", + "license": "Apache-2.0 OR MIT", "dependencies": { "uint8arrays": "^5.0.1" } @@ -26783,12 +28906,14 @@ "node_modules/uint8arraylist/node_modules/multiformats": { "version": "13.3.6", "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.3.6.tgz", - "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==" + "integrity": "sha512-yakbt9cPYj8d3vi/8o/XWm61MrOILo7fsTL0qxNx6zS0Nso6K5JqqS2WV7vK/KSuDBvrW3KfCwAdAgarAgOmww==", + "license": "Apache-2.0 OR MIT" }, "node_modules/uint8arraylist/node_modules/uint8arrays": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^13.0.0" } @@ -26797,6 +28922,7 @@ "version": "4.0.10", "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz", "integrity": "sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==", + "license": "Apache-2.0 OR MIT", "dependencies": { "multiformats": "^12.0.1" } @@ -26806,6 +28932,7 @@ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", @@ -26823,6 +28950,7 @@ "version": "6.21.3", "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -26832,13 +28960,15 @@ "node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -26848,6 +28978,7 @@ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "devOptional": true, + "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" @@ -26861,6 +28992,7 @@ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -26870,6 +29002,7 @@ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -26879,6 +29012,7 @@ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", "dev": true, + "license": "ISC", "dependencies": { "unique-slug": "^3.0.0" }, @@ -26891,6 +29025,7 @@ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, @@ -26903,6 +29038,7 @@ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "devOptional": true, + "license": "MIT", "dependencies": { "crypto-random-string": "^2.0.0" }, @@ -26914,6 +29050,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -26922,6 +29059,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -26932,6 +29070,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "license": "MIT", "engines": { "node": ">=8" } @@ -26941,6 +29080,7 @@ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4", "yarn": "*" @@ -26965,6 +29105,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" @@ -26981,6 +29122,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -26988,23 +29130,27 @@ "node_modules/utf8": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==" + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "license": "MIT" }, "node_modules/utf8-byte-length": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", - "dev": true + "dev": true, + "license": "(WTFPL OR MIT)" }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -27019,6 +29165,7 @@ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -27027,13 +29174,15 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "devOptional": true + "devOptional": true, + "license": "MIT" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -27043,6 +29192,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", + "license": "ISC", "optional": true, "peer": true, "engines": { @@ -27053,6 +29203,7 @@ "version": "13.15.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.0.tgz", "integrity": "sha512-36B2ryl4+oL5QxZ3AzD0t5SsMNGvTtQHpjgFO5tbNxfXbMFkY822ktCDe1MnlqV3301QQI9SLHDNJokDI+Z9pA==", + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -27061,6 +29212,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", "optional": true, "peer": true, "engines": { @@ -27072,6 +29224,7 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "assert-plus": "^1.0.0", @@ -27087,6 +29240,7 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -27146,6 +29300,7 @@ "resolved": "https://registry.npmjs.org/vite-plugin-pwa/-/vite-plugin-pwa-0.19.8.tgz", "integrity": "sha512-e1oK0dfhzhDhY3VBuML6c0h8Xfx6EkOVYqolj7g+u8eRfdauZe5RLteCIA/c5gH0CBQ0CNFAuv/AFTx4Z7IXTw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4", "fast-glob": "^3.3.2", @@ -27176,6 +29331,7 @@ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-6.1.1.tgz", "integrity": "sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14.13.1 || >=16.0.0" }, @@ -27189,6 +29345,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -27201,19 +29358,21 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", + "license": "MIT", "optional": true, "peer": true }, "node_modules/vue": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.14.tgz", - "integrity": "sha512-LbOm50/vZFG6Mhy6KscQYXZMQ0LMCC/y40HDJPPvGFQ+i/lUH+PJHR6C3assgOQiXdl6tAfsXHbXYVBZZu65ew==", + "version": "3.5.15", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.15.tgz", + "integrity": "sha512-aD9zK4rB43JAMK/5BmS4LdPiEp8Fdh8P1Ve/XNuMF5YRf78fCyPE6FUbQwcaWQ5oZ1R2CD9NKE0FFOVpMR7gEQ==", + "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.5.14", - "@vue/compiler-sfc": "3.5.14", - "@vue/runtime-dom": "3.5.14", - "@vue/server-renderer": "3.5.14", - "@vue/shared": "3.5.14" + "@vue/compiler-dom": "3.5.15", + "@vue/compiler-sfc": "3.5.15", + "@vue/runtime-dom": "3.5.15", + "@vue/server-renderer": "3.5.15", + "@vue/shared": "3.5.15" }, "peerDependencies": { "typescript": "*" @@ -27228,6 +29387,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/vue-axios/-/vue-axios-3.5.2.tgz", "integrity": "sha512-GP+dct7UlAWkl1qoP3ppw0z6jcSua5/IrMpjB5O8bh089iIiJ+hdxPYH2NPEpajlYgkW5EVMP95ttXWdas1O0g==", + "license": "MIT", "peerDependencies": { "axios": "*", "vue": "^3.0.0 || ^2.0.0" @@ -27238,6 +29398,7 @@ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", "hasInstallScript": true, + "license": "MIT", "peer": true, "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", @@ -27264,6 +29425,7 @@ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4", "eslint-scope": "^7.1.1", @@ -27287,6 +29449,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/vue-facing-decorator/-/vue-facing-decorator-3.0.4.tgz", "integrity": "sha512-Lk90PevJllB6qRRdLvLFjATZrv00nof1Ob6afavKL7Pc7V3eEin3vhdvEDRORdWKVvNoXhJbHejngWVuT0Pt0g==", + "license": "MIT", "peerDependencies": { "vue": "^3.0.0" } @@ -27295,6 +29458,7 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/vue-picture-cropper/-/vue-picture-cropper-0.7.0.tgz", "integrity": "sha512-NF7+Dgso6d0GB16E5d/BbrcTIHm1VWz8dS3IjLhoBl+ZeC+yDA46CyJphQuO32SisaPmrKHN8VbiE2LgAfhnkQ==", + "license": "MIT", "dependencies": { "@bassist/utils": "^0.4.0", "cropperjs": "^1.6.1" @@ -27307,6 +29471,7 @@ "version": "5.7.2", "resolved": "https://registry.npmjs.org/vue-qrcode-reader/-/vue-qrcode-reader-5.7.2.tgz", "integrity": "sha512-MRwo8IWM+1UzvfRhOQQBqEap06nl0E8QFIb+/HxS1KiH8BqL2qhlzMVvJgMUti4m5x+XH2YlGS0v1Qshpg+Hbw==", + "license": "MIT", "dependencies": { "barcode-detector": "2.2.2", "webrtc-adapter": "8.2.3" @@ -27319,6 +29484,7 @@ "version": "4.5.1", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.1.tgz", "integrity": "sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw==", + "license": "MIT", "dependencies": { "@vue/devtools-api": "^6.6.4" }, @@ -27333,6 +29499,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "license": "Apache-2.0", "optional": true, "peer": true, "dependencies": { @@ -27344,6 +29511,7 @@ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "devOptional": true, + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } @@ -27352,6 +29520,7 @@ "version": "2.0.30", "resolved": "https://registry.npmjs.org/web-did-resolver/-/web-did-resolver-2.0.30.tgz", "integrity": "sha512-lsv0T+y/zD1bEVkcNfcppk4hQXBlqqoXfYcRG4183Yv53FkY29HNPGErwkNI/AG+lxxsUIR77JqS6pn9uHw/Vw==", + "license": "Apache-2.0", "dependencies": { "cross-fetch": "^4.1.0", "did-resolver": "^4.1.0" @@ -27361,6 +29530,7 @@ "version": "3.3.3", "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", "optional": true, "engines": { "node": ">= 8" @@ -27370,6 +29540,7 @@ "version": "1.10.4", "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.10.4.tgz", "integrity": "sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==", + "license": "LGPL-3.0", "dependencies": { "@ethereumjs/util": "^8.1.0", "bn.js": "^5.2.1", @@ -27388,6 +29559,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.8.1.tgz", "integrity": "sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A==", + "license": "MIT", "optional": true, "dependencies": { "@peculiar/asn1-schema": "^2.3.13", @@ -27401,23 +29573,27 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", "optional": true }, "node_modules/webcrypto-shim": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/webcrypto-shim/-/webcrypto-shim-0.1.7.tgz", "integrity": "sha512-JAvAQR5mRNRxZW2jKigWMjCMkjSdmP5cColRP1U/pTg69VgHXEi1orv5vVpJ55Zc5MIaPc1aaurzd9pjv2bveg==", + "license": "MIT", "optional": true }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" }, "node_modules/webrtc-adapter": { "version": "8.2.3", "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-8.2.3.tgz", "integrity": "sha512-gnmRz++suzmvxtp3ehQts6s2JtAGPuDPjA1F3a9ckNpG1kYdYuHWYpazoAnL9FS5/B21tKlhkorbdCXat0+4xQ==", + "license": "BSD-3-Clause", "dependencies": { "sdp": "^3.2.0" }, @@ -27430,6 +29606,7 @@ "version": "3.6.20", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "license": "MIT", "optional": true, "peer": true }, @@ -27437,6 +29614,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -27446,6 +29624,7 @@ "version": "8.0.0-3", "resolved": "https://registry.npmjs.org/whatwg-url-without-unicode/-/whatwg-url-without-unicode-8.0.0-3.tgz", "integrity": "sha512-HoKuzZrUlgpz35YO27XgD28uh/WJH4B0+3ttFqRo//lmq+9T/mIOJ6kqmINI9HpUpz1imRC/nR/lxKpJiv0uig==", + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -27475,6 +29654,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "optional": true, "peer": true, "dependencies": { @@ -27486,6 +29666,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "license": "BSD-2-Clause", "optional": true, "peer": true, "engines": { @@ -27496,6 +29677,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -27511,6 +29693,7 @@ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, + "license": "MIT", "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", @@ -27530,6 +29713,7 @@ "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", @@ -27557,6 +29741,7 @@ "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, + "license": "MIT", "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", @@ -27573,13 +29758,15 @@ "node_modules/which-module": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", - "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "license": "ISC" }, "node_modules/which-typed-array": { "version": "1.1.19", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", @@ -27601,6 +29788,7 @@ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "devOptional": true, + "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } @@ -27609,6 +29797,7 @@ "version": "6.3.5", "resolved": "https://registry.npmjs.org/wonka/-/wonka-6.3.5.tgz", "integrity": "sha512-SSil+ecw6B4/Dm7Pf2sAshKQ5hWFvfyGlfPbEd6A14dOH6VDjrmbY86u6nZvy9omGwwIPFR8V41+of1EezgoUw==", + "license": "MIT", "optional": true, "peer": true }, @@ -27617,6 +29806,7 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -27625,13 +29815,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/workbox-background-sync": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-7.3.0.tgz", "integrity": "sha512-PCSk3eK7Mxeuyatb22pcSx9dlgWNv3+M8PqPaYDokks8Y5/FX4soaOqj3yhAZr5k6Q5JWTOMYgaJBpbw11G9Eg==", "dev": true, + "license": "MIT", "dependencies": { "idb": "^7.0.1", "workbox-core": "7.3.0" @@ -27642,6 +29834,7 @@ "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-7.3.0.tgz", "integrity": "sha512-T9/F5VEdJVhwmrIAE+E/kq5at2OY6+OXXgOWQevnubal6sO92Gjo24v6dCVwQiclAF5NS3hlmsifRrpQzZCdUA==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "7.3.0" } @@ -27651,6 +29844,7 @@ "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-7.3.0.tgz", "integrity": "sha512-JGL6vZTPlxnlqZRhR/K/msqg3wKP+m0wfEUVosK7gsYzSgeIxvZLi1ViJJzVL7CEeI8r7rGFV973RiEqkP3lWQ==", "dev": true, + "license": "MIT", "dependencies": { "@apideck/better-ajv-errors": "^0.3.1", "@babel/core": "^7.24.4", @@ -27699,6 +29893,7 @@ "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", "integrity": "sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==", "dev": true, + "license": "MIT", "dependencies": { "json-schema": "^0.4.0", "jsonpointer": "^5.0.0", @@ -27716,6 +29911,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz", "integrity": "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.10.4", "@rollup/pluginutils": "^3.1.0" @@ -27739,6 +29935,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^3.1.0", "magic-string": "^0.25.7" @@ -27752,6 +29949,7 @@ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", @@ -27768,13 +29966,15 @@ "version": "0.0.39", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/workbox-build/node_modules/ajv": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -27790,13 +29990,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/workbox-build/node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -27811,13 +30013,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/workbox-build/node_modules/magic-string": { "version": "0.25.9", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", "dev": true, + "license": "MIT", "dependencies": { "sourcemap-codec": "^1.4.8" } @@ -27827,6 +30031,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -27839,6 +30044,7 @@ "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", "dev": true, + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -27854,6 +30060,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "whatwg-url": "^7.0.0" }, @@ -27866,6 +30073,7 @@ "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", "dev": true, + "license": "MIT", "dependencies": { "is-stream": "^2.0.0", "temp-dir": "^2.0.0", @@ -27884,6 +30092,7 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.1.0" } @@ -27893,6 +30102,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -27904,13 +30114,15 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/workbox-build/node_modules/whatwg-url": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, + "license": "MIT", "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", @@ -27922,6 +30134,7 @@ "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-7.3.0.tgz", "integrity": "sha512-eAFERIg6J2LuyELhLlmeRcJFa5e16Mj8kL2yCDbhWE+HUun9skRQrGIFVUagqWj4DMaaPSMWfAolM7XZZxNmxA==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "7.3.0" } @@ -27930,13 +30143,15 @@ "version": "7.3.0", "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-7.3.0.tgz", "integrity": "sha512-Z+mYrErfh4t3zi7NVTvOuACB0A/jA3bgxUN3PwtAVHvfEsZxV9Iju580VEETug3zYJRc0Dmii/aixI/Uxj8fmw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/workbox-expiration": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-7.3.0.tgz", "integrity": "sha512-lpnSSLp2BM+K6bgFCWc5bS1LR5pAwDWbcKt1iL87/eTSJRdLdAwGQznZE+1czLgn/X05YChsrEegTNxjM067vQ==", "dev": true, + "license": "MIT", "dependencies": { "idb": "^7.0.1", "workbox-core": "7.3.0" @@ -27947,6 +30162,7 @@ "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-7.3.0.tgz", "integrity": "sha512-ii/tSfFdhjLHZ2BrYgFNTrb/yk04pw2hasgbM70jpZfLk0vdJAXgaiMAWsoE+wfJDNWoZmBYY0hMVI0v5wWDbg==", "dev": true, + "license": "MIT", "dependencies": { "workbox-background-sync": "7.3.0", "workbox-core": "7.3.0", @@ -27959,6 +30175,7 @@ "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-7.3.0.tgz", "integrity": "sha512-fTJzogmFaTv4bShZ6aA7Bfj4Cewaq5rp30qcxl2iYM45YD79rKIhvzNHiFj1P+u5ZZldroqhASXwwoyusnr2cg==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "7.3.0" } @@ -27968,6 +30185,7 @@ "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-7.3.0.tgz", "integrity": "sha512-ckp/3t0msgXclVAYaNndAGeAoWQUv7Rwc4fdhWL69CCAb2UHo3Cef0KIUctqfQj1p8h6aGyz3w8Cy3Ihq9OmIw==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "7.3.0", "workbox-routing": "7.3.0", @@ -27979,6 +30197,7 @@ "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-7.3.0.tgz", "integrity": "sha512-EyFmM1KpDzzAouNF3+EWa15yDEenwxoeXu9bgxOEYnFfCxns7eAxA9WSSaVd8kujFFt3eIbShNqa4hLQNFvmVQ==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "7.3.0" } @@ -27988,6 +30207,7 @@ "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-7.3.0.tgz", "integrity": "sha512-BJro/MpuW35I/zjZQBcoxsctgeB+kyb2JAP5EB3EYzePg8wDGoQuUdyYQS+CheTb+GhqJeWmVs3QxLI8EBP1sg==", "dev": true, + "license": "MIT", "dependencies": { "workbox-cacheable-response": "7.3.0", "workbox-core": "7.3.0", @@ -28002,6 +30222,7 @@ "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-7.3.0.tgz", "integrity": "sha512-ZUlysUVn5ZUzMOmQN3bqu+gK98vNfgX/gSTZ127izJg/pMMy4LryAthnYtjuqcjkN4HEAx1mdgxNiKJMZQM76A==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "7.3.0" } @@ -28011,6 +30232,7 @@ "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-7.3.0.tgz", "integrity": "sha512-tmZydug+qzDFATwX7QiEL5Hdf7FrkhjaF9db1CbB39sDmEZJg3l9ayDvPxy8Y18C3Y66Nrr9kkN1f/RlkDgllg==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "7.3.0" } @@ -28020,6 +30242,7 @@ "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-7.3.0.tgz", "integrity": "sha512-SZnXucyg8x2Y61VGtDjKPO5EgPUG5NDn/v86WYHX+9ZqvAsGOytP0Jxp1bl663YUuMoXSAtsGLL+byHzEuMRpw==", "dev": true, + "license": "MIT", "dependencies": { "workbox-core": "7.3.0", "workbox-routing": "7.3.0" @@ -28029,13 +30252,15 @@ "version": "7.3.0", "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-7.3.0.tgz", "integrity": "sha512-aCUyoAZU9IZtH05mn0ACUpyHzPs0lMeJimAYkQkBsOWiqaJLgusfDCR+yllkPkFRxWpZKF8vSvgHYeG7LwhlmA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/workbox-window": { "version": "7.3.0", "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-7.3.0.tgz", "integrity": "sha512-qW8PDy16OV1UBaUNGlTVcepzrlzyzNW/ZJvFQQs2j2TzGsg6IKjcpZC1RSquqQnTOafl5pCj5bGfAHlCjOOjdA==", "dev": true, + "license": "MIT", "dependencies": { "@types/trusted-types": "^2.0.2", "workbox-core": "7.3.0" @@ -28045,6 +30270,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -28062,6 +30288,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -28077,12 +30304,14 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "license": "ISC", "optional": true, "peer": true, "dependencies": { @@ -28097,6 +30326,7 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -28118,6 +30348,7 @@ "resolved": "https://registry.npmjs.org/xcode/-/xcode-3.0.1.tgz", "integrity": "sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==", "devOptional": true, + "license": "Apache-2.0", "dependencies": { "simple-plist": "^1.1.0", "uuid": "^7.0.3" @@ -28131,6 +30362,7 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", "devOptional": true, + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -28140,6 +30372,7 @@ "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", "dev": true, + "license": "MIT", "dependencies": { "sax": "^1.2.4" }, @@ -28152,6 +30385,7 @@ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12" } @@ -28160,6 +30394,7 @@ "version": "0.5.0", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "license": "MIT", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -28172,6 +30407,7 @@ "version": "11.0.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", "engines": { "node": ">=4.0" } @@ -28180,6 +30416,7 @@ "version": "15.1.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", + "license": "MIT", "engines": { "node": ">=8.0" } @@ -28189,6 +30426,7 @@ "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz", "integrity": "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.0" } @@ -28206,6 +30444,7 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } @@ -28213,13 +30452,15 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "license": "ISC" }, "node_modules/yaml": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", "dev": true, + "license": "ISC", "bin": { "yaml": "bin.mjs" }, @@ -28231,6 +30472,7 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -28249,6 +30491,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -28257,6 +30500,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", "engines": { "node": ">=12" } @@ -28265,6 +30509,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -28275,6 +30520,7 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -28284,6 +30530,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "devOptional": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -28295,6 +30542,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-6.0.2.tgz", "integrity": "sha512-9fQb2ZhpMD0ZQXYw0ll5ya6uLQm3Xtt4DXY2RV3QO1QVI4ihSzSWirlgkDsMgGg4qK0EV4tLOJgRSH2bn0cbIw==", + "license": "MIT", "dependencies": { "lodash.get": "^4.4.2", "lodash.isequal": "^4.5.0", @@ -28314,6 +30562,7 @@ "version": "11.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", "optional": true, "engines": { "node": ">=16" @@ -28324,6 +30573,7 @@ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "archiver-utils": "^3.0.4", @@ -28339,6 +30589,7 @@ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "glob": "^7.2.3", @@ -28361,6 +30612,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "inherits": "^2.0.3", @@ -28372,9 +30624,10 @@ } }, "node_modules/zod": { - "version": "3.25.28", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.28.tgz", - "integrity": "sha512-/nt/67WYKnr5by3YS7LroZJbtcCBurDKKPBPWWzaxvVCGuG/NOsiKkrjoOhI8mJ+SQUXEbUzeB3S+6XDUEEj7Q==", + "version": "3.25.30", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.30.tgz", + "integrity": "sha512-VolhdEtu6TJr/fzGuHA/SZ5ixvXqA6ADOG9VRcQ3rdOKmF5hkmcJbyaQjUH5BgmpA9gej++zYRX7zjSmdReIwA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } @@ -28383,6 +30636,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/zxing-wasm/-/zxing-wasm-1.1.3.tgz", "integrity": "sha512-MYm9k/5YVs4ZOTIFwlRjfFKD0crhefgbnt1+6TEpmKUDFp3E2uwqGSKwQOd2hOIsta/7Usq4hnpNRYTLoljnfA==", + "license": "MIT", "dependencies": { "@types/emscripten": "^1.39.10" } diff --git a/src/db/databaseUtil.ts b/src/db/databaseUtil.ts index b2d0276d..86f672bb 100644 --- a/src/db/databaseUtil.ts +++ b/src/db/databaseUtil.ts @@ -11,7 +11,12 @@ export async function updateDefaultSettings( delete settingsChanges.id; try { const platformService = PlatformServiceFactory.getInstance(); - const { sql, params } = generateUpdateStatement(settingsChanges, "settings", "id = ?", [MASTER_SETTINGS_KEY]); + const { sql, params } = generateUpdateStatement( + settingsChanges, + "settings", + "id = ?", + [MASTER_SETTINGS_KEY], + ); const result = await platformService.dbExec(sql, params); return result.changes === 1; } catch (error) { @@ -34,28 +39,28 @@ export async function updateAccountSettings( delete settingsChanges.id; // key off account, not ID const platform = PlatformServiceFactory.getInstance(); - + // First try to update existing record const { sql: updateSql, params: updateParams } = generateUpdateStatement( settingsChanges, "settings", "accountDid = ?", - [accountDid] + [accountDid], ); - + const updateResult = await platform.dbExec(updateSql, updateParams); - + // If no record was updated, insert a new one if (updateResult.changes === 1) { return true; } else { const columns = Object.keys(settingsChanges); const values = Object.values(settingsChanges); - const placeholders = values.map(() => '?').join(', '); - - const insertSql = `INSERT INTO settings (${columns.join(', ')}) VALUES (${placeholders})`; + const placeholders = values.map(() => "?").join(", "); + + const insertSql = `INSERT INTO settings (${columns.join(", ")}) VALUES (${placeholders})`; const result = await platform.dbExec(insertSql, values); - + return result.changes === 1; } } @@ -69,7 +74,9 @@ const DEFAULT_SETTINGS: Settings = { // retrieves default settings export async function retrieveSettingsForDefaultAccount(): Promise { const platform = PlatformServiceFactory.getInstance(); - const result = await platform.dbQuery("SELECT * FROM settings WHERE id = ?", [MASTER_SETTINGS_KEY]) + const result = await platform.dbQuery("SELECT * FROM settings WHERE id = ?", [ + MASTER_SETTINGS_KEY, + ]); if (!result) { return DEFAULT_SETTINGS; } else { @@ -85,10 +92,14 @@ export async function retrieveSettingsForActiveAccount(): Promise { const platform = PlatformServiceFactory.getInstance(); const result = await platform.dbQuery( "SELECT * FROM settings WHERE accountDid = ?", - [defaultSettings.activeDid] + [defaultSettings.activeDid], + ); + const overrideSettings = result + ? (mapColumnsToValues(result.columns, result.values)[0] as Settings) + : {}; + const overrideSettingsFiltered = Object.fromEntries( + Object.entries(overrideSettings).filter(([_, v]) => v !== null), ); - const overrideSettings = result ? mapColumnsToValues(result.columns, result.values)[0] as Settings : {}; - const overrideSettingsFiltered = Object.fromEntries(Object.entries(overrideSettings).filter(([_, v]) => v !== null)); return { ...defaultSettings, ...overrideSettingsFiltered }; } } @@ -96,32 +107,32 @@ export async function retrieveSettingsForActiveAccount(): Promise { export async function logToDb(message: string): Promise { const platform = PlatformServiceFactory.getInstance(); const todayKey = new Date().toDateString(); - + // Check if we have any logs for today const result = await platform.dbQuery( "SELECT message FROM logs WHERE date = ?", - [todayKey] + [todayKey], ); - + if (!result || result.values.length === 0) { // If no logs for today, clear all previous logs await platform.dbExec("DELETE FROM logs"); - + // Insert new log const fullMessage = `${new Date().toISOString()} ${message}`; - await platform.dbExec( - "INSERT INTO logs (date, message) VALUES (?, ?)", - [todayKey, fullMessage] - ); + await platform.dbExec("INSERT INTO logs (date, message) VALUES (?, ?)", [ + todayKey, + fullMessage, + ]); } else { // Append to existing log const prevMessages = result.values[0][0] as string; const fullMessage = `${prevMessages}\n${new Date().toISOString()} ${message}`; - - await platform.dbExec( - "UPDATE logs SET message = ? WHERE date = ?", - [fullMessage, todayKey] - ); + + await platform.dbExec("UPDATE logs SET message = ? WHERE date = ?", [ + fullMessage, + todayKey, + ]); } } @@ -147,14 +158,14 @@ export async function logConsoleAndDb( * @returns Object containing the SQL statement and parameters array */ function generateUpdateStatement( - model: Record, + model: Record, tableName: string, whereClause: string, - whereParams: any[] = [] -): { sql: string; params: any[] } { + whereParams: unknown[] = [], +): { sql: string; params: unknown[] } { // Filter out undefined/null values and create SET clause const setClauses: string[] = []; - const params: any[] = []; + const params: unknown[] = []; Object.entries(model).forEach(([key, value]) => { if (value !== undefined) { @@ -164,14 +175,14 @@ function generateUpdateStatement( }); if (setClauses.length === 0) { - throw new Error('No valid fields to update'); + throw new Error("No valid fields to update"); } - const sql = `UPDATE ${tableName} SET ${setClauses.join(', ')} WHERE ${whereClause}`; - + const sql = `UPDATE ${tableName} SET ${setClauses.join(", ")} WHERE ${whereClause}`; + return { sql, - params: [...params, ...whereParams] + params: [...params, ...whereParams], }; } @@ -184,14 +195,13 @@ function generateUpdateStatement( */ export function mapColumnsToValues( columns: string[], - values: any[][] -): Record[] { - return values.map(row => { - const obj: Record = {}; + values: unknown[][], +): Record[] { + return values.map((row) => { + const obj: Record = {}; columns.forEach((column, index) => { obj[column] = row[index]; }); return obj; }); } - diff --git a/src/libs/crypto/index.ts b/src/libs/crypto/index.ts index 852e348b..57d2a62f 100644 --- a/src/libs/crypto/index.ts +++ b/src/libs/crypto/index.ts @@ -312,23 +312,29 @@ export async function testMessageEncryptionDecryption() { } // Simple encryption/decryption using Node's crypto -export async function simpleEncrypt(text: string, secret: string): Promise { +export async function simpleEncrypt( + text: string, + secret: string, +): Promise { const iv = crypto.getRandomValues(new Uint8Array(16)); - + // Derive a 256-bit key from the secret using SHA-256 - const keyData = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(secret)); + const keyData = await crypto.subtle.digest( + "SHA-256", + new TextEncoder().encode(secret), + ); const key = await crypto.subtle.importKey( - 'raw', + "raw", keyData, - { name: 'AES-GCM' }, + { name: "AES-GCM" }, false, - ['encrypt'] + ["encrypt"], ); const encrypted = await crypto.subtle.encrypt( - { name: 'AES-GCM', iv }, + { name: "AES-GCM", iv }, key, - new TextEncoder().encode(text) + new TextEncoder().encode(text), ); // Combine IV and encrypted data @@ -339,27 +345,33 @@ export async function simpleEncrypt(text: string, secret: string): Promise { - const data = Uint8Array.from(atob(encryptedText), c => c.charCodeAt(0)); - +export async function simpleDecrypt( + encryptedText: string, + secret: string, +): Promise { + const data = Uint8Array.from(atob(encryptedText), (c) => c.charCodeAt(0)); + // Extract IV and encrypted data const iv = data.slice(0, 16); const encrypted = data.slice(16); // Derive the same 256-bit key from the secret using SHA-256 - const keyData = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(secret)); + const keyData = await crypto.subtle.digest( + "SHA-256", + new TextEncoder().encode(secret), + ); const key = await crypto.subtle.importKey( - 'raw', + "raw", keyData, - { name: 'AES-GCM' }, + { name: "AES-GCM" }, false, - ['decrypt'] + ["decrypt"], ); const decrypted = await crypto.subtle.decrypt( - { name: 'AES-GCM', iv }, + { name: "AES-GCM", iv }, key, - encrypted + encrypted, ); return new TextDecoder().decode(decrypted); diff --git a/src/libs/endorserServer.ts b/src/libs/endorserServer.ts index 6cfd0e98..012cf8dd 100644 --- a/src/libs/endorserServer.ts +++ b/src/libs/endorserServer.ts @@ -1370,7 +1370,7 @@ export async function setVisibilityUtil( "UPDATE contacts SET seesMe = ? WHERE did = ?", [visibility, contact.did], ); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { db.contacts.update(contact.did, { seesMe: visibility }); } } diff --git a/src/libs/util.ts b/src/libs/util.ts index 9d0a1f36..9adc57d4 100644 --- a/src/libs/util.ts +++ b/src/libs/util.ts @@ -5,7 +5,11 @@ import { Buffer } from "buffer"; import * as R from "ramda"; import { useClipboard } from "@vueuse/core"; -import { DEFAULT_PUSH_SERVER, NotificationIface, USE_DEXIE_DB } from "../constants/app"; +import { + DEFAULT_PUSH_SERVER, + NotificationIface, + USE_DEXIE_DB, +} from "../constants/app"; import { accountsDBPromise, retrieveSettingsForActiveAccount, diff --git a/src/services/AbsurdSqlDatabaseService.ts b/src/services/AbsurdSqlDatabaseService.ts index 89add11d..4a810e7d 100644 --- a/src/services/AbsurdSqlDatabaseService.ts +++ b/src/services/AbsurdSqlDatabaseService.ts @@ -20,11 +20,11 @@ interface AbsurdSqlDatabase { } interface QueuedOperation { - type: 'run' | 'query' | 'getOneRow' | 'getAll'; + type: "run" | "query" | "getOneRow" | "getAll"; sql: string; params: unknown[]; - resolve: (value: any) => void; - reject: (reason: any) => void; + resolve: (value: unknown) => void; + reject: (reason: unknown) => void; } class AbsurdSqlDatabaseService implements DatabaseService { @@ -111,7 +111,7 @@ class AbsurdSqlDatabaseService implements DatabaseService { await runMigrations(sqlExec); this.initialized = true; - + // Start processing the queue after initialization this.processQueue(); } @@ -122,26 +122,28 @@ class AbsurdSqlDatabaseService implements DatabaseService { } this.isProcessingQueue = true; - + while (this.operationQueue.length > 0) { const operation = this.operationQueue.shift(); if (!operation) continue; try { let result; + let queryResult; + let allResult; switch (operation.type) { - case 'run': + case "run": result = await this.db.run(operation.sql, operation.params); break; - case 'query': + case "query": result = await this.db.exec(operation.sql, operation.params); break; - case 'getOneRow': - const queryResult = await this.db.exec(operation.sql, operation.params); + case "getOneRow": + queryResult = await this.db.exec(operation.sql, operation.params); result = queryResult[0]?.values[0]; break; - case 'getAll': - const allResult = await this.db.exec(operation.sql, operation.params); + case "getAll": + allResult = await this.db.exec(operation.sql, operation.params); result = allResult[0]?.values || []; break; } @@ -155,7 +157,7 @@ class AbsurdSqlDatabaseService implements DatabaseService { } private async queueOperation( - type: QueuedOperation['type'], + type: QueuedOperation["type"], sql: string, params: unknown[] = [], ): Promise { @@ -205,13 +207,17 @@ class AbsurdSqlDatabaseService implements DatabaseService { params: unknown[] = [], ): Promise<{ changes: number; lastId?: number }> { await this.waitForInitialization(); - return this.queueOperation<{ changes: number; lastId?: number }>('run', sql, params); + return this.queueOperation<{ changes: number; lastId?: number }>( + "run", + sql, + params, + ); } // Note that the resulting array may be empty if there are no results from the query async query(sql: string, params: unknown[] = []): Promise { await this.waitForInitialization(); - return this.queueOperation('query', sql, params); + return this.queueOperation("query", sql, params); } async getOneRow( @@ -219,12 +225,12 @@ class AbsurdSqlDatabaseService implements DatabaseService { params: unknown[] = [], ): Promise { await this.waitForInitialization(); - return this.queueOperation('getOneRow', sql, params); + return this.queueOperation("getOneRow", sql, params); } async getAll(sql: string, params: unknown[] = []): Promise { await this.waitForInitialization(); - return this.queueOperation('getAll', sql, params); + return this.queueOperation("getAll", sql, params); } } diff --git a/src/services/PlatformService.ts b/src/services/PlatformService.ts index 8ed8fa91..bb9a257d 100644 --- a/src/services/PlatformService.ts +++ b/src/services/PlatformService.ts @@ -115,5 +115,8 @@ export interface PlatformService { * @param params - The parameters to pass to the statement * @returns Promise resolving to the result of the statement */ - dbExec(sql: string, params?: unknown[]): Promise<{ changes: number; lastId?: number }>; + dbExec( + sql: string, + params?: unknown[], + ): Promise<{ changes: number; lastId?: number }>; } diff --git a/src/services/platforms/CapacitorPlatformService.ts b/src/services/platforms/CapacitorPlatformService.ts index 59e87de7..ed483a8d 100644 --- a/src/services/platforms/CapacitorPlatformService.ts +++ b/src/services/platforms/CapacitorPlatformService.ts @@ -481,7 +481,10 @@ export class CapacitorPlatformService implements PlatformService { dbQuery(sql: string, params?: unknown[]): Promise { throw new Error("Not implemented for " + sql + " with params " + params); } - dbExec(sql: string, params?: unknown[]): Promise<{ changes: number; lastId?: number }> { + dbExec( + sql: string, + params?: unknown[], + ): Promise<{ changes: number; lastId?: number }> { throw new Error("Not implemented for " + sql + " with params " + params); } } diff --git a/src/services/platforms/ElectronPlatformService.ts b/src/services/platforms/ElectronPlatformService.ts index 6353f685..07b6d5ed 100644 --- a/src/services/platforms/ElectronPlatformService.ts +++ b/src/services/platforms/ElectronPlatformService.ts @@ -113,7 +113,10 @@ export class ElectronPlatformService implements PlatformService { dbQuery(sql: string, params?: unknown[]): Promise { throw new Error("Not implemented for " + sql + " with params " + params); } - dbExec(sql: string, params?: unknown[]): Promise<{ changes: number; lastId?: number }> { + dbExec( + sql: string, + params?: unknown[], + ): Promise<{ changes: number; lastId?: number }> { throw new Error("Not implemented for " + sql + " with params " + params); } } diff --git a/src/services/platforms/PyWebViewPlatformService.ts b/src/services/platforms/PyWebViewPlatformService.ts index d2c07d9e..97778459 100644 --- a/src/services/platforms/PyWebViewPlatformService.ts +++ b/src/services/platforms/PyWebViewPlatformService.ts @@ -114,7 +114,10 @@ export class PyWebViewPlatformService implements PlatformService { dbQuery(sql: string, params?: unknown[]): Promise { throw new Error("Not implemented for " + sql + " with params " + params); } - dbExec(sql: string, params?: unknown[]): Promise<{ changes: number; lastId?: number }> { + dbExec( + sql: string, + params?: unknown[], + ): Promise<{ changes: number; lastId?: number }> { throw new Error("Not implemented for " + sql + " with params " + params); } } diff --git a/src/services/platforms/WebPlatformService.ts b/src/services/platforms/WebPlatformService.ts index 59006760..03bb29ee 100644 --- a/src/services/platforms/WebPlatformService.ts +++ b/src/services/platforms/WebPlatformService.ts @@ -372,7 +372,10 @@ export class WebPlatformService implements PlatformService { /** * @see PlatformService.dbExec */ - dbExec(sql: string, params?: unknown[]): Promise<{ changes: number; lastId?: number }> { + dbExec( + sql: string, + params?: unknown[], + ): Promise<{ changes: number; lastId?: number }> { return databaseService.run(sql, params); } } diff --git a/src/utils/empty-module.js b/src/utils/empty-module.js index 2915969c..5e4e544b 100644 --- a/src/utils/empty-module.js +++ b/src/utils/empty-module.js @@ -1,2 +1,2 @@ // Empty module to satisfy Node.js built-in module imports -export default {}; \ No newline at end of file +export default {}; diff --git a/src/utils/node-modules/crypto.js b/src/utils/node-modules/crypto.js index 9d9e58ac..0a25aef9 100644 --- a/src/utils/node-modules/crypto.js +++ b/src/utils/node-modules/crypto.js @@ -9,9 +9,9 @@ const crypto = { }, createHash: () => ({ update: () => ({ - digest: () => new Uint8Array(32) // Return empty hash - }) - }) + digest: () => new Uint8Array(32), // Return empty hash + }), + }), }; -export default crypto; \ No newline at end of file +export default crypto; diff --git a/src/utils/node-modules/fs.js b/src/utils/node-modules/fs.js index 6e342aa0..362022c5 100644 --- a/src/utils/node-modules/fs.js +++ b/src/utils/node-modules/fs.js @@ -1,18 +1,18 @@ // Minimal fs module implementation for browser const fs = { readFileSync: () => { - throw new Error('fs.readFileSync is not supported in browser'); + throw new Error("fs.readFileSync is not supported in browser"); }, writeFileSync: () => { - throw new Error('fs.writeFileSync is not supported in browser'); + throw new Error("fs.writeFileSync is not supported in browser"); }, existsSync: () => false, mkdirSync: () => {}, readdirSync: () => [], statSync: () => ({ isDirectory: () => false, - isFile: () => false - }) + isFile: () => false, + }), }; -export default fs; \ No newline at end of file +export default fs; diff --git a/src/utils/node-modules/path.js b/src/utils/node-modules/path.js index bcee136b..a65090b3 100644 --- a/src/utils/node-modules/path.js +++ b/src/utils/node-modules/path.js @@ -1,13 +1,13 @@ // Minimal path module implementation for browser const path = { - resolve: (...parts) => parts.join('/'), - join: (...parts) => parts.join('/'), - dirname: (p) => p.split('/').slice(0, -1).join('/'), - basename: (p) => p.split('/').pop(), + resolve: (...parts) => parts.join("/"), + join: (...parts) => parts.join("/"), + dirname: (p) => p.split("/").slice(0, -1).join("/"), + basename: (p) => p.split("/").pop(), extname: (p) => { - const parts = p.split('.'); - return parts.length > 1 ? '.' + parts.pop() : ''; - } + const parts = p.split("."); + return parts.length > 1 ? "." + parts.pop() : ""; + }, }; -export default path; \ No newline at end of file +export default path; diff --git a/src/views/AccountViewView.vue b/src/views/AccountViewView.vue index feb44fbb..8a2b20e9 100644 --- a/src/views/AccountViewView.vue +++ b/src/views/AccountViewView.vue @@ -1151,7 +1151,7 @@ export default class AccountViewView extends Vue { databaseUtil.logConsoleAndDb( "Error loading profile: " + errorStringForLog(error), ); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { logConsoleAndDb( "Error loading profile: " + errorStringForLog(error), ); @@ -1282,7 +1282,7 @@ export default class AccountViewView extends Vue { await databaseUtil.updateDefaultSettings({ showContactGivesInline: this.showContactGives, }); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { await db.open(); await db.settings.update(MASTER_SETTINGS_KEY, { showContactGivesInline: this.showContactGives, @@ -1295,7 +1295,7 @@ export default class AccountViewView extends Vue { await databaseUtil.updateDefaultSettings({ showGeneralAdvanced: this.showGeneralAdvanced, }); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { await db.open(); await db.settings.update(MASTER_SETTINGS_KEY, { showGeneralAdvanced: this.showGeneralAdvanced, @@ -1308,7 +1308,7 @@ export default class AccountViewView extends Vue { await databaseUtil.updateDefaultSettings({ warnIfProdServer: this.warnIfProdServer, }); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { await db.open(); await db.settings.update(MASTER_SETTINGS_KEY, { warnIfProdServer: this.warnIfProdServer, @@ -1321,7 +1321,7 @@ export default class AccountViewView extends Vue { await databaseUtil.updateDefaultSettings({ warnIfTestServer: this.warnIfTestServer, }); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { await db.open(); await db.settings.update(MASTER_SETTINGS_KEY, { warnIfTestServer: this.warnIfTestServer, @@ -1334,7 +1334,7 @@ export default class AccountViewView extends Vue { await databaseUtil.updateDefaultSettings({ showShortcutBvc: this.showShortcutBvc, }); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { await db.open(); await db.settings.update(MASTER_SETTINGS_KEY, { showShortcutBvc: this.showShortcutBvc, @@ -1351,15 +1351,19 @@ export default class AccountViewView extends Vue { */ async processIdentity() { const platformService = PlatformServiceFactory.getInstance(); - const dbAccount = await platformService.dbQuery("SELECT * FROM accounts WHERE did = ?", [this.activeDid]); + const dbAccount = await platformService.dbQuery( + "SELECT * FROM accounts WHERE did = ?", + [this.activeDid], + ); let account: Account | undefined = undefined; if (dbAccount) { - account = databaseUtil.mapColumnsToValues(dbAccount.columns, dbAccount.values)[0] as Account; + account = databaseUtil.mapColumnsToValues( + dbAccount.columns, + dbAccount.values, + )[0] as Account; } if (USE_DEXIE_DB) { - account = await retrieveAccountMetadata( - this.activeDid, - ); + account = await retrieveAccountMetadata(this.activeDid); } if (account?.identity) { const identity = JSON.parse(account.identity as string) as IIdentifier; @@ -1406,7 +1410,7 @@ export default class AccountViewView extends Vue { await databaseUtil.updateDefaultSettings({ notifyingNewActivityTime: timeText, }); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { await db.settings.update(MASTER_SETTINGS_KEY, { notifyingNewActivityTime: timeText, }); @@ -1427,7 +1431,7 @@ export default class AccountViewView extends Vue { await databaseUtil.updateDefaultSettings({ notifyingNewActivityTime: "", }); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { await db.settings.update(MASTER_SETTINGS_KEY, { notifyingNewActivityTime: "", }); @@ -1477,7 +1481,7 @@ export default class AccountViewView extends Vue { notifyingReminderMessage: message, notifyingReminderTime: timeText, }); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { await db.settings.update(MASTER_SETTINGS_KEY, { notifyingReminderMessage: message, notifyingReminderTime: timeText, @@ -1502,7 +1506,7 @@ export default class AccountViewView extends Vue { notifyingReminderMessage: "", notifyingReminderTime: "", }); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { await db.settings.update(MASTER_SETTINGS_KEY, { notifyingReminderMessage: "", notifyingReminderTime: "", @@ -1524,7 +1528,7 @@ export default class AccountViewView extends Vue { await databaseUtil.updateDefaultSettings({ hideRegisterPromptOnNewContact: newSetting, }); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { await db.open(); await db.settings.update(MASTER_SETTINGS_KEY, { hideRegisterPromptOnNewContact: newSetting, @@ -1537,7 +1541,7 @@ export default class AccountViewView extends Vue { await databaseUtil.updateDefaultSettings({ passkeyExpirationMinutes: this.passkeyExpirationMinutes, }); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { await db.open(); await db.settings.update(MASTER_SETTINGS_KEY, { passkeyExpirationMinutes: this.passkeyExpirationMinutes, @@ -1554,7 +1558,7 @@ export default class AccountViewView extends Vue { notifyingReminderMessage: "", notifyingReminderTime: "", }); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { await db.open(); await db.settings.update(MASTER_SETTINGS_KEY, { notifyingNewActivityTime: "", @@ -1708,25 +1712,25 @@ export default class AccountViewView extends Vue { if (inputImportFileNameRef.value != null) { if (USE_DEXIE_DB) { await db - .delete() - .then(async () => { - // BulkError: settings.bulkAdd(): 1 of 21 operations failed. Errors: ConstraintError: Key already exists in the object store. - await Dexie.import(inputImportFileNameRef.value as Blob, { - progressCallback: this.progressCallback, + .delete() + .then(async () => { + // BulkError: settings.bulkAdd(): 1 of 21 operations failed. Errors: ConstraintError: Key already exists in the object store. + await Dexie.import(inputImportFileNameRef.value as Blob, { + progressCallback: this.progressCallback, + }); + }) + .catch((error) => { + logger.error("Error importing file:", error); + this.$notify( + { + group: "alert", + type: "danger", + title: "Error Importing", + text: "There was an error in the import. Your identities and contacts may have been affected, so you may have to restore your identifier and use the contact import method.", + }, + -1, + ); }); - }) - .catch((error) => { - logger.error("Error importing file:", error); - this.$notify( - { - group: "alert", - type: "danger", - title: "Error Importing", - text: "There was an error in the import. Your identities and contacts may have been affected, so you may have to restore your identifier and use the contact import method.", - }, - -1, - ); - }); } else { throw new Error("Not implemented"); } @@ -1817,8 +1821,10 @@ export default class AccountViewView extends Vue { if (!this.isRegistered) { // the user was not known to be registered, but now they are (because we got no error) so let's record it try { - await databaseUtil.updateAccountSettings(did, { isRegistered: true }); - if (USE_DEXIE_DB) { + await databaseUtil.updateAccountSettings(did, { + isRegistered: true, + }); + if (USE_DEXIE_DB) { await db.open(); await db.settings.update(MASTER_SETTINGS_KEY, { isRegistered: true, @@ -1886,7 +1892,7 @@ export default class AccountViewView extends Vue { await databaseUtil.updateDefaultSettings({ apiServer: this.apiServerInput, }); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { await db.open(); await db.settings.update(MASTER_SETTINGS_KEY, { apiServer: this.apiServerInput, @@ -1899,7 +1905,7 @@ export default class AccountViewView extends Vue { await databaseUtil.updateDefaultSettings({ partnerApiServer: this.partnerApiServerInput, }); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { await db.open(); await db.settings.update(MASTER_SETTINGS_KEY, { partnerApiServer: this.partnerApiServerInput, @@ -1912,7 +1918,7 @@ export default class AccountViewView extends Vue { await databaseUtil.updateDefaultSettings({ webPushServer: this.webPushServerInput, }); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { await db.open(); await db.settings.update(MASTER_SETTINGS_KEY, { webPushServer: this.webPushServerInput, @@ -1936,8 +1942,8 @@ export default class AccountViewView extends Vue { await databaseUtil.updateDefaultSettings({ profileImageUrl: imgUrl, }); - if (USE_DEXIE_DB) { - await db.open(); + if (USE_DEXIE_DB) { + await db.open(); await db.settings.update(MASTER_SETTINGS_KEY, { profileImageUrl: imgUrl, }); @@ -2005,7 +2011,7 @@ export default class AccountViewView extends Vue { await databaseUtil.updateDefaultSettings({ profileImageUrl: undefined, }); - if (USE_DEXIE_DB) { + if (USE_DEXIE_DB) { await db.open(); await db.settings.update(MASTER_SETTINGS_KEY, { profileImageUrl: undefined, @@ -2099,8 +2105,10 @@ export default class AccountViewView extends Vue { throw Error("Profile not saved"); } } catch (error) { - databaseUtil.logConsoleAndDb("Error saving profile: " + errorStringForLog(error)); - if (USE_DEXIE_DB) { + databaseUtil.logConsoleAndDb( + "Error saving profile: " + errorStringForLog(error), + ); + if (USE_DEXIE_DB) { logConsoleAndDb("Error saving profile: " + errorStringForLog(error)); } const errorMessage: string = @@ -2192,8 +2200,10 @@ export default class AccountViewView extends Vue { throw Error("Profile not deleted"); } } catch (error) { - databaseUtil.logConsoleAndDb("Error deleting profile: " + errorStringForLog(error)); - if (USE_DEXIE_DB) { + databaseUtil.logConsoleAndDb( + "Error deleting profile: " + errorStringForLog(error), + ); + if (USE_DEXIE_DB) { logConsoleAndDb("Error deleting profile: " + errorStringForLog(error)); } const errorMessage: string = diff --git a/src/views/TestView.vue b/src/views/TestView.vue index 7eb431d0..969e73ec 100644 --- a/src/views/TestView.vue +++ b/src/views/TestView.vue @@ -445,11 +445,13 @@ export default class Help extends Vue { } public async testMessageEncryptionDecryption() { - this.messageEncryptionTestResult = await cryptoLib.testMessageEncryptionDecryption(); + this.messageEncryptionTestResult = + await cryptoLib.testMessageEncryptionDecryption(); } public async testSimpleEncryptionDecryption() { - this.simpleEncryptionTestResult = await cryptoLib.testSimpleEncryptionDecryption(); + this.simpleEncryptionTestResult = + await cryptoLib.testSimpleEncryptionDecryption(); } public async createJwtSimplewebauthn() { From 35f5df6b6bbd11c02eb92749cfededf3e71054ce Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Tue, 27 May 2025 03:21:55 +0000 Subject: [PATCH 29/92] fix: move lexical declarations outside case blocks fix: missing logger import Move variable declarations outside switch statement in AbsurdSqlDatabaseService to fix 'no-case-declarations' linter errors. --- src/views/NewIdentifierView.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/views/NewIdentifierView.vue b/src/views/NewIdentifierView.vue index c1a3fd0f..9ad2945b 100644 --- a/src/views/NewIdentifierView.vue +++ b/src/views/NewIdentifierView.vue @@ -69,6 +69,7 @@ import { Router } from "vue-router"; import { generateSaveAndActivateIdentity } from "../libs/util"; import QuickNav from "../components/QuickNav.vue"; +import { logger } from "../utils/logger"; @Component({ components: { QuickNav } }) export default class NewIdentifierView extends Vue { From 0bfc18c385ab47d42058544bd7a98a1a3252a6df Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Mon, 26 May 2025 22:42:20 -0600 Subject: [PATCH 30/92] add encryption & decryption for the sensitive identity & mnemonic in SQL DB --- src/components/DataExportSection.vue | 6 ++- src/constants/app.ts | 2 +- src/db-sql/migration.ts | 5 +- src/db/tables/accounts.ts | 5 ++ src/libs/crypto/index.ts | 37 ++++++++------- src/libs/util.ts | 70 ++++++++++++++++++++++------ src/views/SeedBackupView.vue | 13 ++++-- src/views/TestView.vue | 15 +++--- 8 files changed, 105 insertions(+), 48 deletions(-) diff --git a/src/components/DataExportSection.vue b/src/components/DataExportSection.vue index a0d3eaca..50291cb4 100644 --- a/src/components/DataExportSection.vue +++ b/src/components/DataExportSection.vue @@ -62,7 +62,7 @@ backup and database export, with platform-specific download instructions. * * + +`; + +// Write the Electron-specific index.html +fs.writeFileSync(path.join(wwwPath, 'index.html'), initialIndexContent); + +// Copy only necessary assets from web build +const webDistPath = path.join(__dirname, '..', 'dist'); +if (fs.existsSync(webDistPath)) { + // Copy assets directory + const assetsSrc = path.join(webDistPath, 'assets'); + const assetsDest = path.join(wwwPath, 'assets'); + if (fs.existsSync(assetsSrc)) { + fs.cpSync(assetsSrc, assetsDest, { recursive: true }); + } + + // Copy favicon + const faviconSrc = path.join(webDistPath, 'favicon.ico'); + if (fs.existsSync(faviconSrc)) { + fs.copyFileSync(faviconSrc, path.join(wwwPath, 'favicon.ico')); + } +} // Remove service worker files const swFilesToRemove = [ @@ -88,13 +127,13 @@ if (fs.existsSync(indexPath)) { // Fix asset paths console.log('Fixing asset paths in index.html...'); -let indexContent = fs.readFileSync(indexPath, 'utf8'); -indexContent = indexContent +let modifiedIndexContent = fs.readFileSync(indexPath, 'utf8'); +modifiedIndexContent = modifiedIndexContent .replace(/\/assets\//g, './assets/') .replace(/href="\//g, 'href="./') .replace(/src="\//g, 'src="./'); -fs.writeFileSync(indexPath, indexContent); +fs.writeFileSync(indexPath, modifiedIndexContent); // Verify no service worker references remain const finalContent = fs.readFileSync(indexPath, 'utf8'); @@ -103,215 +142,24 @@ if (finalContent.includes('serviceWorker') || finalContent.includes('workbox')) } // Check for remaining /assets/ paths -console.log('After path fixing, checking for remaining /assets/ paths:', indexContent.includes('/assets/')); -console.log('Sample of fixed content:', indexContent.substring(0, 500)); +console.log('After path fixing, checking for remaining /assets/ paths:', finalContent.includes('/assets/')); +console.log('Sample of fixed content:', finalContent.substring(0, 500)); console.log('Copied and fixed web files in:', wwwPath); - // Copy main process files - console.log('Copying main process files...'); - -// Create the main process file with inlined logger -const mainContent = `const { app, BrowserWindow } = require("electron"); -const path = require("path"); -const fs = require("fs"); +// Copy main process files +console.log('Copying main process files...'); -// Inline logger implementation -const logger = { - log: (...args) => console.log(...args), - error: (...args) => console.error(...args), - info: (...args) => console.info(...args), - warn: (...args) => console.warn(...args), - debug: (...args) => console.debug(...args), -}; +// Copy the main process file instead of creating a template +const mainSrcPath = path.join(__dirname, '..', 'dist-electron', 'main.js'); +const mainDestPath = path.join(electronDistPath, 'main.js'); -// Check if running in dev mode -const isDev = process.argv.includes("--inspect"); - -function createWindow() { - // Add before createWindow function - const preloadPath = path.join(__dirname, "preload.js"); - logger.log("Checking preload path:", preloadPath); - logger.log("Preload exists:", fs.existsSync(preloadPath)); - - // Create the browser window. - const mainWindow = new BrowserWindow({ - width: 1200, - height: 800, - webPreferences: { - nodeIntegration: false, - contextIsolation: true, - webSecurity: true, - allowRunningInsecureContent: false, - preload: path.join(__dirname, "preload.js"), - }, - }); - - // Always open DevTools for now - mainWindow.webContents.openDevTools(); - - // Intercept requests to fix asset paths - mainWindow.webContents.session.webRequest.onBeforeRequest( - { - urls: [ - "file://*/*/assets/*", - "file://*/assets/*", - "file:///assets/*", // Catch absolute paths - "", // Catch all URLs as a fallback - ], - }, - (details, callback) => { - let url = details.url; - - // Handle paths that don't start with file:// - if (!url.startsWith("file://") && url.includes("/assets/")) { - url = \`file://\${path.join(__dirname, "www", url)}\`; - } - - // Handle absolute paths starting with /assets/ - if (url.includes("/assets/") && !url.includes("/www/assets/")) { - const baseDir = url.includes("dist-electron") - ? url.substring( - 0, - url.indexOf("/dist-electron") + "/dist-electron".length, - ) - : \`file://\${__dirname}\`; - const assetPath = url.split("/assets/")[1]; - const newUrl = \`\${baseDir}/www/assets/\${assetPath}\`; - callback({ redirectURL: newUrl }); - return; - } - - callback({}); // No redirect for other URLs - }, - ); - - if (isDev) { - // Debug info - logger.log("Debug Info:"); - logger.log("Running in dev mode:", isDev); - logger.log("App is packaged:", app.isPackaged); - logger.log("Process resource path:", process.resourcesPath); - logger.log("App path:", app.getAppPath()); - logger.log("__dirname:", __dirname); - logger.log("process.cwd():", process.cwd()); - } - - const indexPath = path.join(__dirname, "www", "index.html"); - - if (isDev) { - logger.log("Loading index from:", indexPath); - logger.log("www path:", path.join(__dirname, "www")); - logger.log("www assets path:", path.join(__dirname, "www", "assets")); - } - - if (!fs.existsSync(indexPath)) { - logger.error(\`Index file not found at: \${indexPath}\`); - throw new Error("Index file not found"); - } - - // Add CSP headers to allow API connections, Google Fonts, and zxing-wasm - mainWindow.webContents.session.webRequest.onHeadersReceived( - (details, callback) => { - callback({ - responseHeaders: { - ...details.responseHeaders, - "Content-Security-Policy": [ - "default-src 'self';" + - "connect-src 'self' https://api.endorser.ch https://*.timesafari.app https://*.jsdelivr.net;" + - "img-src 'self' data: https: blob:;" + - "script-src 'self' 'unsafe-inline' 'unsafe-eval' https://*.jsdelivr.net;" + - "style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;" + - "font-src 'self' data: https://fonts.gstatic.com;" + - "style-src-elem 'self' 'unsafe-inline' https://fonts.googleapis.com;" + - "worker-src 'self' blob:;", - ], - }, - }); - }, - ); - - // Load the index.html - mainWindow - .loadFile(indexPath) - .then(() => { - logger.log("Successfully loaded index.html"); - if (isDev) { - mainWindow.webContents.openDevTools(); - logger.log("DevTools opened - running in dev mode"); - } - }) - .catch((err) => { - logger.error("Failed to load index.html:", err); - logger.error("Attempted path:", indexPath); - }); - - // Listen for console messages from the renderer - mainWindow.webContents.on("console-message", (_event, _level, message) => { - logger.log("Renderer Console:", message); - }); - - // Add right after creating the BrowserWindow - mainWindow.webContents.on( - "did-fail-load", - (_event, errorCode, errorDescription) => { - logger.error("Page failed to load:", errorCode, errorDescription); - }, - ); - - mainWindow.webContents.on("preload-error", (_event, preloadPath, error) => { - logger.error("Preload script error:", preloadPath, error); - }); - - mainWindow.webContents.on( - "console-message", - (_event, _level, message, line, sourceId) => { - logger.log("Renderer Console:", line, sourceId, message); - }, - ); - - // Enable remote debugging when in dev mode - if (isDev) { - mainWindow.webContents.openDevTools(); - } +if (fs.existsSync(mainSrcPath)) { + fs.copyFileSync(mainSrcPath, mainDestPath); + console.log('Copied main process file successfully'); +} else { + console.error('Main process file not found at:', mainSrcPath); + process.exit(1); } -// Handle app ready -app.whenReady().then(createWindow); - -// Handle all windows closed -app.on("window-all-closed", () => { - if (process.platform !== "darwin") { - app.quit(); - } -}); - -app.on("activate", () => { - if (BrowserWindow.getAllWindows().length === 0) { - createWindow(); - } -}); - -// Handle any errors -process.on("uncaughtException", (error) => { - logger.error("Uncaught Exception:", error); -}); -`; - -// Write the main process file -const mainDest = path.join(electronDistPath, 'main.js'); -fs.writeFileSync(mainDest, mainContent); - -// Copy preload script if it exists -const preloadSrc = path.join(__dirname, '..', 'src', 'electron', 'preload.js'); -const preloadDest = path.join(electronDistPath, 'preload.js'); -if (fs.existsSync(preloadSrc)) { - console.log(`Copying ${preloadSrc} to ${preloadDest}`); - fs.copyFileSync(preloadSrc, preloadDest); -} - -// Verify build structure -console.log('\nVerifying build structure:'); -console.log('Files in dist-electron:', fs.readdirSync(electronDistPath)); - -console.log('Build completed successfully!'); \ No newline at end of file +console.log('Electron build process completed successfully'); \ No newline at end of file diff --git a/src/db-sql/migration.ts b/src/db-sql/migration.ts index 478c2db8..ce917472 100644 --- a/src/db-sql/migration.ts +++ b/src/db-sql/migration.ts @@ -127,10 +127,7 @@ export async function registerMigrations(): Promise { } export async function runMigrations( - sqlExec: ( - sql: string, - params?: unknown[], - ) => Promise>, + sqlExec: (sql: string, params?: unknown[]) => Promise>, ): Promise { await registerMigrations(); await migrationService.runMigrations(sqlExec); diff --git a/src/db/databaseUtil.ts b/src/db/databaseUtil.ts index 7feb92cc..610d5f69 100644 --- a/src/db/databaseUtil.ts +++ b/src/db/databaseUtil.ts @@ -123,35 +123,77 @@ export async function retrieveSettingsForActiveAccount(): Promise { } } +/** + * Logs a message to the database with proper handling of concurrent writes + * @param message - The message to log + * @author Matthew Raymer + */ export async function logToDb(message: string): Promise { const platform = PlatformServiceFactory.getInstance(); const todayKey = new Date().toDateString(); + const fullMessage = `${new Date().toISOString()} ${message}`; - // Check if we have any logs for today - const result = await platform.dbQuery( - "SELECT message FROM logs WHERE date = ?", - [todayKey], - ); + try { + // Try to insert first, if it fails due to UNIQUE constraint, update instead + try { + await platform.dbExec("INSERT INTO logs (date, message) VALUES (?, ?)", [ + todayKey, + fullMessage, + ]); + } catch (error) { + // If insert fails due to UNIQUE constraint, update instead + if ( + error instanceof Error && + error.message.includes("UNIQUE constraint failed") + ) { + const result = await platform.dbQuery( + "SELECT message FROM logs WHERE date = ?", + [todayKey], + ); - if (!result || result.values.length === 0) { - // If no logs for today, clear all previous logs - await platform.dbExec("DELETE FROM logs"); + if (result && result.values.length > 0) { + const prevMessages = result.values[0][0] as string; + const updatedMessage = `${prevMessages}\n${fullMessage}`; - // Insert new log - const fullMessage = `${new Date().toISOString()} ${message}`; - await platform.dbExec("INSERT INTO logs (date, message) VALUES (?, ?)", [ - todayKey, - fullMessage, - ]); - } else { - // Append to existing log - const prevMessages = result.values[0][0] as string; - const fullMessage = `${prevMessages}\n${new Date().toISOString()} ${message}`; + await platform.dbExec("UPDATE logs SET message = ? WHERE date = ?", [ + updatedMessage, + todayKey, + ]); + } + } else { + // If it's a different error, rethrow it + throw error; + } + } - await platform.dbExec("UPDATE logs SET message = ? WHERE date = ?", [ - fullMessage, - todayKey, - ]); + // Clean up old logs (keep only last 7 days) - do this less frequently + // Only clean up if the date is different from the last cleanup + const lastCleanupKey = "last_log_cleanup"; + const result = await platform.dbQuery( + "SELECT value FROM settings WHERE key = ?", + [lastCleanupKey], + ); + + const lastCleanup = result?.values[0]?.[0] as string; + if (!lastCleanup || lastCleanup !== todayKey) { + const sevenDaysAgo = new Date(); + sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7); + await platform.dbExec("DELETE FROM logs WHERE date < ?", [ + sevenDaysAgo.toDateString(), + ]); + + // Update last cleanup date + await platform.dbExec( + "INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)", + [lastCleanupKey, todayKey], + ); + } + } catch (error) { + // Log to console as fallback + // eslint-disable-next-line no-console + console.error("Failed to log to database:", error); + // eslint-disable-next-line no-console + console.error("Original message:", message); } } diff --git a/src/electron/preload.js b/src/electron/preload.js index a26f30c4..2b37f099 100644 --- a/src/electron/preload.js +++ b/src/electron/preload.js @@ -2,24 +2,33 @@ const { contextBridge, ipcRenderer } = require("electron"); const logger = { log: (message, ...args) => { + // Always log in development, log with context in production if (process.env.NODE_ENV !== "production") { /* eslint-disable no-console */ - console.log(message, ...args); + console.log(`[Preload] ${message}`, ...args); /* eslint-enable no-console */ } }, warn: (message, ...args) => { - if (process.env.NODE_ENV !== "production") { - /* eslint-disable no-console */ - console.warn(message, ...args); - /* eslint-enable no-console */ - } + // Always log warnings + /* eslint-disable no-console */ + console.warn(`[Preload] ${message}`, ...args); + /* eslint-enable no-console */ }, error: (message, ...args) => { + // Always log errors /* eslint-disable no-console */ - console.error(message, ...args); // Errors should always be logged + console.error(`[Preload] ${message}`, ...args); /* eslint-enable no-console */ }, + info: (message, ...args) => { + // Always log info in development, log with context in production + if (process.env.NODE_ENV !== "production") { + /* eslint-disable no-console */ + console.info(`[Preload] ${message}`, ...args); + /* eslint-enable no-console */ + } + }, }; // Use a more direct path resolution approach @@ -41,7 +50,10 @@ const getPath = (pathType) => { } }; -logger.log("Preload script starting..."); +logger.info("Preload script starting..."); + +// Force electron platform in the renderer process +window.process = { env: { VITE_PLATFORM: "electron" } }; try { contextBridge.exposeInMainWorld("electronAPI", { @@ -65,6 +77,7 @@ try { env: { isElectron: true, isDev: process.env.NODE_ENV === "development", + platform: "electron", // Explicitly set platform }, // Path utilities getBasePath: () => { @@ -72,7 +85,7 @@ try { }, }); - logger.log("Preload script completed successfully"); + logger.info("Preload script completed successfully"); } catch (error) { logger.error("Error in preload script:", error); } diff --git a/src/interfaces/common.ts b/src/interfaces/common.ts index 41fa44f9..9ce181e9 100644 --- a/src/interfaces/common.ts +++ b/src/interfaces/common.ts @@ -43,14 +43,14 @@ export interface KeyMeta { derivationPath: string; registered?: boolean; profileImageUrl?: string; - identity?: string; // Stringified IIdentifier object from Veramo - passkeyCredIdHex?: string; // The Webauthn credential ID in hex, if this is from a passkey + identity?: string; // Stringified IIdentifier object from Veramo + passkeyCredIdHex?: string; // The Webauthn credential ID in hex, if this is from a passkey [key: string]: unknown; } export interface QuantitativeValue extends GenericVerifiableCredential { - '@type': 'QuantitativeValue'; - '@context': string | string[]; + "@type": "QuantitativeValue"; + "@context": string | string[]; amountOfThisGood: number; unitCode: string; [key: string]: unknown; @@ -101,10 +101,10 @@ export interface Agent { } export interface ClaimObject { - '@type': string; - '@context'?: string | string[]; + "@type": string; + "@context"?: string | string[]; fulfills?: Array<{ - '@type': string; + "@type": string; identifier?: string; [key: string]: unknown; }>; @@ -119,16 +119,16 @@ export interface ClaimObject { } export interface VerifiableCredentialClaim { - '@context': string | string[]; - '@type': string; + "@context": string | string[]; + "@type": string; type: string[]; credentialSubject: ClaimObject; [key: string]: unknown; } export interface GiveVerifiableCredential extends GenericVerifiableCredential { - '@type': 'GiveAction'; - '@context': string | string[]; + "@type": "GiveAction"; + "@context": string | string[]; object?: GenericVerifiableCredential; agent?: Agent; participant?: { @@ -136,7 +136,7 @@ export interface GiveVerifiableCredential extends GenericVerifiableCredential { [key: string]: unknown; }; fulfills?: Array<{ - '@type': string; + "@type": string; identifier?: string; [key: string]: unknown; }>; @@ -144,8 +144,8 @@ export interface GiveVerifiableCredential extends GenericVerifiableCredential { } export interface OfferVerifiableCredential extends GenericVerifiableCredential { - '@type': 'OfferAction'; - '@context': string | string[]; + "@type": "OfferAction"; + "@context": string | string[]; object?: GenericVerifiableCredential; agent?: Agent; participant?: { @@ -155,7 +155,7 @@ export interface OfferVerifiableCredential extends GenericVerifiableCredential { itemOffered?: { description?: string; isPartOf?: { - '@type': string; + "@type": string; identifier: string; [key: string]: unknown; }; @@ -164,9 +164,10 @@ export interface OfferVerifiableCredential extends GenericVerifiableCredential { [key: string]: unknown; } -export interface RegisterVerifiableCredential extends GenericVerifiableCredential { - '@type': 'RegisterAction'; - '@context': string | string[]; +export interface RegisterVerifiableCredential + extends GenericVerifiableCredential { + "@type": "RegisterAction"; + "@context": string | string[]; agent: { identifier: string; }; diff --git a/src/libs/crypto/vc/passkeyDidPeer.ts b/src/libs/crypto/vc/passkeyDidPeer.ts index 0728baa4..cb48b236 100644 --- a/src/libs/crypto/vc/passkeyDidPeer.ts +++ b/src/libs/crypto/vc/passkeyDidPeer.ts @@ -194,7 +194,9 @@ export class PeerSetup { }, }; - const credential = await navigator.credentials.get(options) as PublicKeyCredential; + const credential = (await navigator.credentials.get( + options, + )) as PublicKeyCredential; // console.log("nav credential get", credential); const response = credential?.response as AuthenticatorAssertionResponse; @@ -229,9 +231,7 @@ export class PeerSetup { .replace(/\//g, "_") .replace(/=+$/, ""); - const origSignature = Buffer.from(response?.signature).toString( - "base64", - ); + const origSignature = Buffer.from(response?.signature).toString("base64"); this.signature = origSignature .replace(/\+/g, "-") .replace(/\//g, "_") @@ -327,10 +327,7 @@ export async function verifyJwtP256( const publicKeyBytes = peerDidToPublicKeyBytes(issuerDid); // Use challenge in preimage construction - const preimage = Buffer.concat([ - authDataFromBase, - Buffer.from(challenge), - ]); + const preimage = Buffer.concat([authDataFromBase, Buffer.from(challenge)]); const isValid = p256.verify( finalSigBuffer, @@ -391,10 +388,7 @@ export async function verifyJwtWebCrypto( const finalSigBuffer = unwrapEC2Signature(sigBuffer); // Use challenge in preimage construction - const preimage = Buffer.concat([ - authDataFromBase, - Buffer.from(challenge), - ]); + const preimage = Buffer.concat([authDataFromBase, Buffer.from(challenge)]); return verifyPeerSignature(preimage, issuerDid, finalSigBuffer); } diff --git a/src/libs/endorserServer.ts b/src/libs/endorserServer.ts index 4f7aaf83..41c2a6ac 100644 --- a/src/libs/endorserServer.ts +++ b/src/libs/endorserServer.ts @@ -53,7 +53,7 @@ import { ClaimObject, VerifiableCredentialClaim, Agent, - QuantitativeValue + QuantitativeValue, } from "../interfaces/common"; import { logger } from "../utils/logger"; import { PlatformServiceFactory } from "@/services/PlatformServiceFactory"; @@ -106,11 +106,12 @@ export const CONTACT_CONFIRM_URL_PATH_TIME_SAFARI = "/contact/confirm/"; */ export const ENDORSER_CH_HANDLE_PREFIX = "https://endorser.ch/entity/"; -export const BLANK_GENERIC_SERVER_RECORD: GenericCredWrapper = { - claim: { - "@context": SCHEMA_ORG_CONTEXT, - "@type": "" - }, +export const BLANK_GENERIC_SERVER_RECORD: GenericCredWrapper = + { + claim: { + "@context": SCHEMA_ORG_CONTEXT, + "@type": "", + }, handleId: "", id: "", issuedAt: "", @@ -200,10 +201,10 @@ const testRecursivelyOnStrings = ( return input.some((item) => testRecursivelyOnStrings(item, test)); } else if (input && typeof input === "object") { return Object.values(input as Record).some((value) => - testRecursivelyOnStrings(value, test) + testRecursivelyOnStrings(value, test), ); - } - return false; + } + return false; }; // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -545,7 +546,7 @@ export async function setPlanInCache( * @returns {string|undefined} User-friendly message or undefined if none found */ export function serverMessageForUser(error: unknown): string | undefined { - if (error && typeof error === 'object' && 'response' in error) { + if (error && typeof error === "object" && "response" in error) { const err = error as AxiosErrorResponse; return err.response?.data?.error?.message; } @@ -571,21 +572,26 @@ export function errorStringForLog(error: unknown) { // --- property '_value' closes the circle } let fullError = "" + error + " - JSON: " + stringifiedError; - - if (error && typeof error === 'object' && 'response' in error) { + + if (error && typeof error === "object" && "response" in error) { const err = error as AxiosErrorResponse; const errorResponseText = JSON.stringify(err.response); - // for some reason, error.response is not included in stringify result (eg. for 400 errors on invite redemptions) - if (!R.empty(errorResponseText) && !fullError.includes(errorResponseText)) { - // add error.response stuff - if (err.response?.config && err.config && R.equals(err.config, err.response.config)) { - // but exclude "config" because it's already in there - const newErrorResponseText = JSON.stringify( + // for some reason, error.response is not included in stringify result (eg. for 400 errors on invite redemptions) + if (!R.empty(errorResponseText) && !fullError.includes(errorResponseText)) { + // add error.response stuff + if ( + err.response?.config && + err.config && + R.equals(err.config, err.response.config) + ) { + // but exclude "config" because it's already in there + const newErrorResponseText = JSON.stringify( R.omit(["config"] as never[], err.response), - ); - fullError += " - .response w/o same config JSON: " + newErrorResponseText; - } else { - fullError += " - .response JSON: " + errorResponseText; + ); + fullError += + " - .response w/o same config JSON: " + newErrorResponseText; + } else { + fullError += " - .response JSON: " + errorResponseText; } } } @@ -664,7 +670,7 @@ export function hydrateGive( "@type": "GiveAction", object: undefined, agent: undefined, - fulfills: [] + fulfills: [], }; if (lastClaimId) { @@ -679,13 +685,13 @@ export function hydrateGive( vcClaim.recipient = { identifier: toDid }; } vcClaim.description = description || undefined; - + if (amount && !isNaN(amount)) { const quantitativeValue: QuantitativeValue = { "@context": SCHEMA_ORG_CONTEXT, "@type": "QuantitativeValue", amountOfThisGood: amount, - unitCode: unitCode || "HUR" + unitCode: unitCode || "HUR", }; vcClaim.object = quantitativeValue; } @@ -697,34 +703,34 @@ export function hydrateGive( // Filter and add fulfills elements vcClaim.fulfills = vcClaim.fulfills.filter( - (elem: { '@type': string }) => elem["@type"] !== "PlanAction" + (elem: { "@type": string }) => elem["@type"] !== "PlanAction", ); - + if (fulfillsProjectHandleId) { vcClaim.fulfills.push({ "@type": "PlanAction", - identifier: fulfillsProjectHandleId + identifier: fulfillsProjectHandleId, }); } vcClaim.fulfills = vcClaim.fulfills.filter( - (elem: { '@type': string }) => elem["@type"] !== "Offer" + (elem: { "@type": string }) => elem["@type"] !== "Offer", ); - + if (fulfillsOfferHandleId) { vcClaim.fulfills.push({ "@type": "Offer", - identifier: fulfillsOfferHandleId + identifier: fulfillsOfferHandleId, }); } vcClaim.fulfills = vcClaim.fulfills.filter( - (elem: { '@type': string }) => - elem["@type"] !== "DonateAction" && elem["@type"] !== "TradeAction" + (elem: { "@type": string }) => + elem["@type"] !== "DonateAction" && elem["@type"] !== "TradeAction", ); - - vcClaim.fulfills.push({ - "@type": isTrade ? "TradeAction" : "DonateAction" + + vcClaim.fulfills.push({ + "@type": isTrade ? "TradeAction" : "DonateAction", }); vcClaim.image = imageUrl || undefined; @@ -732,7 +738,7 @@ export function hydrateGive( if (providerPlanHandleId) { vcClaim.provider = { "@type": "PlanAction", - identifier: providerPlanHandleId + identifier: providerPlanHandleId, }; } @@ -854,7 +860,7 @@ export function hydrateOffer( "@type": "OfferAction", object: undefined, agent: undefined, - itemOffered: {} + itemOffered: {}, }; if (lastClaimId) { @@ -875,7 +881,7 @@ export function hydrateOffer( "@context": SCHEMA_ORG_CONTEXT, "@type": "QuantitativeValue", amountOfThisGood: amount, - unitCode: unitCode || "HUR" + unitCode: unitCode || "HUR", }; vcClaim.object = quantitativeValue; } @@ -886,7 +892,7 @@ export function hydrateOffer( if (fulfillsProjectHandleId) { vcClaim.itemOffered.isPartOf = { "@type": "PlanAction", - identifier: fulfillsProjectHandleId + identifier: fulfillsProjectHandleId, }; } } @@ -1024,12 +1030,14 @@ export async function createAndSubmitClaim( logger.error("Error submitting claim:", error); const errorMessage: string = serverMessageForUser(error) || - (error && typeof error === 'object' && 'message' in error ? String(error.message) : undefined) || + (error && typeof error === "object" && "message" in error + ? String(error.message) + : undefined) || "Got some error submitting the claim. Check your permissions, network, and error logs."; return { success: false, - error: errorMessage + error: errorMessage, }; } } @@ -1061,10 +1069,7 @@ export async function generateEndorserJwtUrlForAccount( // Add the next key -- not recommended for the QR code for such a high resolution if (isContact) { const newDerivPath = nextDerivationPath(account.derivationPath); - const nextPublicHex = deriveAddress( - account.mnemonic, - newDerivPath, - )[2]; + const nextPublicHex = deriveAddress(account.mnemonic, newDerivPath)[2]; const nextPublicEncKey = Buffer.from(nextPublicHex, "hex"); const nextPublicEncKeyHash = sha256(nextPublicEncKey); const nextPublicEncKeyHashBase64 = @@ -1133,13 +1138,15 @@ export const capitalizeAndInsertSpacesBeforeCaps = (text: string) => { similar code is also contained in endorser-mobile **/ const claimSummary = ( - claim: GenericVerifiableCredential | GenericCredWrapper, + claim: + | GenericVerifiableCredential + | GenericCredWrapper, ) => { if (!claim) { return "something"; } let specificClaim: GenericVerifiableCredential; - if ('claim' in claim) { + if ("claim" in claim) { // It's a GenericCredWrapper specificClaim = claim.claim as GenericVerifiableCredential; } else { @@ -1180,7 +1187,7 @@ export const claimSpecialDescription = ( contacts: Array, ) => { let claim = record.claim; - if ('claim' in claim) { + if ("claim" in claim) { claim = claim.claim as GenericVerifiableCredential; } @@ -1189,12 +1196,23 @@ export const claimSpecialDescription = ( const type = claimObj["@type"] || "UnknownType"; if (type === "AgreeAction") { - return issuer + " agreed with " + claimSummary(claimObj.object as GenericVerifiableCredential); + return ( + issuer + + " agreed with " + + claimSummary(claimObj.object as GenericVerifiableCredential) + ); } else if (isAccept(claim)) { - return issuer + " accepted " + claimSummary(claimObj.object as GenericVerifiableCredential); + return ( + issuer + + " accepted " + + claimSummary(claimObj.object as GenericVerifiableCredential) + ); } else if (type === "GiveAction") { const giveClaim = claim as GiveVerifiableCredential; - const agent: Agent = giveClaim.agent || { identifier: undefined, did: undefined }; + const agent: Agent = giveClaim.agent || { + identifier: undefined, + did: undefined, + }; const agentDid = agent.did || agent.identifier; const contactInfo = agentDid ? didInfo(agentDid, activeDid, identifiers, contacts) @@ -1209,7 +1227,10 @@ export const claimSpecialDescription = ( return contactInfo + " gave" + offering + recipientInfo; } else if (type === "JoinAction") { const joinClaim = claim as ClaimObject; - const agent: Agent = joinClaim.agent || { identifier: undefined, did: undefined }; + const agent: Agent = joinClaim.agent || { + identifier: undefined, + did: undefined, + }; const agentDid = agent.did || agent.identifier; const contactInfo = agentDid ? didInfo(agentDid, activeDid, identifiers, contacts) @@ -1219,7 +1240,10 @@ export const claimSpecialDescription = ( return contactInfo + " joined" + objectInfo; } else if (isOffer(claim)) { const offerClaim = claim as OfferVerifiableCredential; - const agent: Agent = offerClaim.agent || { identifier: undefined, did: undefined }; + const agent: Agent = offerClaim.agent || { + identifier: undefined, + did: undefined, + }; const agentDid = agent.did || agent.identifier; const contactInfo = agentDid ? didInfo(agentDid, activeDid, identifiers, contacts) @@ -1234,7 +1258,10 @@ export const claimSpecialDescription = ( return contactInfo + " offered" + offering + offerRecipientInfo; } else if (type === "PlanAction") { const planClaim = claim as ClaimObject; - const agent: Agent = planClaim.agent || { identifier: undefined, did: undefined }; + const agent: Agent = planClaim.agent || { + identifier: undefined, + did: undefined, + }; const agentDid = agent.did || agent.identifier; const contactInfo = agentDid ? didInfo(agentDid, activeDid, identifiers, contacts) @@ -1244,7 +1271,10 @@ export const claimSpecialDescription = ( return contactInfo + " planned" + objectInfo; } else if (type === "Tenure") { const tenureClaim = claim as ClaimObject; - const agent: Agent = tenureClaim.agent || { identifier: undefined, did: undefined }; + const agent: Agent = tenureClaim.agent || { + identifier: undefined, + did: undefined, + }; const agentDid = agent.did || agent.identifier; const contactInfo = agentDid ? didInfo(agentDid, activeDid, identifiers, contacts) @@ -1253,11 +1283,7 @@ export const claimSpecialDescription = ( const objectInfo = object ? " " + claimSummary(object) : ""; return contactInfo + " has tenure" + objectInfo; } else { - return ( - issuer + - " declared " + - claimSummary(claim) - ); + return issuer + " declared " + claimSummary(claim); } }; @@ -1333,35 +1359,39 @@ export async function register( contact: Contact, ): Promise<{ success?: boolean; error?: string }> { try { - const vcJwt = await createInviteJwt(activeDid, contact); - const url = apiServer + "/api/v2/claim"; - const resp = await axios.post<{ - success?: { - handleId?: string; + const vcJwt = await createInviteJwt(activeDid, contact); + const url = apiServer + "/api/v2/claim"; + const resp = await axios.post<{ + success?: { + handleId?: string; embeddedRecordError?: string; }; error?: string; message?: string; }>(url, { jwtEncoded: vcJwt }); - - if (resp.data?.success?.handleId) { - return { success: true }; - } else if (resp.data?.success?.embeddedRecordError) { - let message = "There was some problem with the registration and so it may not be complete."; + + if (resp.data?.success?.handleId) { + return { success: true }; + } else if (resp.data?.success?.embeddedRecordError) { + let message = + "There was some problem with the registration and so it may not be complete."; if (typeof resp.data.success.embeddedRecordError === "string") { - message += " " + resp.data.success.embeddedRecordError; - } - return { error: message }; - } else { + message += " " + resp.data.success.embeddedRecordError; + } + return { error: message }; + } else { logger.error("Registration error:", JSON.stringify(resp.data)); return { error: "Got a server error when registering." }; } } catch (error: unknown) { - if (error && typeof error === 'object') { + if (error && typeof error === "object") { const err = error as AxiosErrorResponse; - const errorMessage = err.message || - (err.response?.data && typeof err.response.data === 'object' && 'message' in err.response.data - ? (err.response.data as { message: string }).message + const errorMessage = + err.message || + (err.response?.data && + typeof err.response.data === "object" && + "message" in err.response.data + ? (err.response.data as { message: string }).message : undefined); logger.error("Registration error:", errorMessage || JSON.stringify(err)); return { error: errorMessage || "Got a server error when registering." }; diff --git a/src/libs/util.ts b/src/libs/util.ts index ffb5dadf..b93f38c5 100644 --- a/src/libs/util.ts +++ b/src/libs/util.ts @@ -30,19 +30,13 @@ import { simpleEncrypt, } from "../libs/crypto"; import * as serverUtil from "../libs/endorserServer"; -import { - containsHiddenDid, -} from "../libs/endorserServer"; +import { containsHiddenDid } from "../libs/endorserServer"; import { GenericCredWrapper, GenericVerifiableCredential, } from "../interfaces/common"; -import { - GiveSummaryRecord, -} from "../interfaces/records"; -import { - OfferVerifiableCredential, -} from "../interfaces/claims"; +import { GiveSummaryRecord } from "../interfaces/records"; +import { OfferVerifiableCredential } from "../interfaces/claims"; import { KeyMeta } from "../interfaces/common"; import { createPeerDid } from "../libs/crypto/vc/didPeer"; import { registerCredential } from "../libs/crypto/vc/passkeyDidPeer"; @@ -406,10 +400,7 @@ export function offerGiverDid( export const canFulfillOffer = ( veriClaim: GenericCredWrapper, ) => { - return ( - veriClaim.claimType === "Offer" && - !!offerGiverDid(veriClaim) - ); + return veriClaim.claimType === "Offer" && !!offerGiverDid(veriClaim); }; // return object with paths and arrays of DIDs for any keys ending in "VisibleToDid" @@ -478,8 +469,10 @@ export function findAllVisibleToDids( * **/ -export interface AccountKeyInfo extends Omit, Omit { - derivationPath?: string; // Make it optional to match Account type +export interface AccountKeyInfo + extends Omit, + Omit { + derivationPath?: string; // Make it optional to match Account type } export const retrieveAccountCount = async (): Promise => { @@ -489,7 +482,7 @@ export const retrieveAccountCount = async (): Promise => { `SELECT COUNT(*) FROM accounts`, ); if (dbResult?.values?.[0]?.[0]) { - result = dbResult.values[0][0] as number; + result = dbResult.values[0][0] as number; } if (USE_DEXIE_DB) { @@ -638,7 +631,7 @@ export const retrieveAllFullyDecryptedAccounts = async (): Promise< ) as unknown as AccountEncrypted[]; if (USE_DEXIE_DB) { const accountsDB = await accountsDBPromise; - allAccounts = await accountsDB.accounts.toArray() as AccountEncrypted[]; + allAccounts = (await accountsDB.accounts.toArray()) as AccountEncrypted[]; } return allAccounts; }; diff --git a/src/main.common.ts b/src/main.common.ts index ab3944d3..ce7b6495 100644 --- a/src/main.common.ts +++ b/src/main.common.ts @@ -10,6 +10,12 @@ import { FontAwesomeIcon } from "./libs/fontawesome"; import Camera from "simple-vue-camera"; import { logger } from "./utils/logger"; +const platform = process.env.VITE_PLATFORM; +const pwa_enabled = process.env.VITE_PWA_ENABLED === "true"; + +logger.error("Platform", { platform }); +logger.error("PWA enabled", { pwa_enabled }); + // Global Error Handler function setupGlobalErrorHandler(app: VueApp) { logger.log("[App Init] Setting up global error handler"); diff --git a/src/main.electron.ts b/src/main.electron.ts index 3e1e492f..c71807af 100644 --- a/src/main.electron.ts +++ b/src/main.electron.ts @@ -1,4 +1,16 @@ import { initializeApp } from "./main.common"; +import { logger } from "./utils/logger"; + +const platform = process.env.VITE_PLATFORM; +const pwa_enabled = process.env.VITE_PWA_ENABLED === "true"; + +logger.info("[Electron] Initializing app"); +logger.info("[Electron] Platform:", { platform }); +logger.info("[Electron] PWA enabled:", { pwa_enabled }); + +if (pwa_enabled) { + logger.warn("[Electron] PWA is enabled, but not supported in electron"); +} const app = initializeApp(); app.mount("#app"); diff --git a/src/main.web.ts b/src/main.web.ts index 592d55fa..1b459cdc 100644 --- a/src/main.web.ts +++ b/src/main.web.ts @@ -1,11 +1,15 @@ import { initBackend } from "absurd-sql/dist/indexeddb-main-thread"; import { initializeApp } from "./main.common"; +import { logger } from "./utils/logger"; + +const platform = process.env.VITE_PLATFORM; +const pwa_enabled = process.env.VITE_PWA_ENABLED === "true"; + +logger.error("[Web] PWA enabled", { pwa_enabled }); +logger.error("[Web] Platform", { platform }); // Only import service worker for web builds -if ( - process.env.VITE_PLATFORM !== "electron" && - process.env.VITE_PWA_ENABLED === "true" -) { +if (platform !== "electron" && pwa_enabled) { import("./registerServiceWorker"); // Web PWA support } @@ -24,6 +28,10 @@ function sqlInit() { // workers through the main thread initBackend(worker); } -sqlInit(); +if (platform === "web" || platform === "development") { + sqlInit(); +} else { + logger.info("[Web] SQL not initialized for platform", { platform }); +} app.mount("#app"); diff --git a/src/services/AbsurdSqlDatabaseService.ts b/src/services/AbsurdSqlDatabaseService.ts index 99d42fec..4695251c 100644 --- a/src/services/AbsurdSqlDatabaseService.ts +++ b/src/services/AbsurdSqlDatabaseService.ts @@ -22,12 +22,12 @@ interface AbsurdSqlDatabase { ) => Promise<{ changes: number; lastId?: number }>; } -class AbsurdSqlDatabaseService implements DatabaseService { +class AbsurdSqlDatabaseService implements DatabaseService { private static instance: AbsurdSqlDatabaseService | null = null; private db: AbsurdSqlDatabase | null; private initialized: boolean; private initializationPromise: Promise | null = null; - private operationQueue: Array> = []; + private operationQueue: Array> = []; private isProcessingQueue: boolean = false; private constructor() { diff --git a/src/services/QRScanner/CapacitorQRScanner.ts b/src/services/QRScanner/CapacitorQRScanner.ts index 15cfad1b..978a4a36 100644 --- a/src/services/QRScanner/CapacitorQRScanner.ts +++ b/src/services/QRScanner/CapacitorQRScanner.ts @@ -4,7 +4,13 @@ import { StartScanOptions, LensFacing, } from "@capacitor-mlkit/barcode-scanning"; -import { QRScannerService, ScanListener, QRScannerOptions, CameraStateListener, CameraState } from "./types"; +import { + QRScannerService, + ScanListener, + QRScannerOptions, + CameraStateListener, + CameraState, +} from "./types"; import { logger } from "@/utils/logger"; export class CapacitorQRScanner implements QRScannerService { @@ -96,7 +102,10 @@ export class CapacitorQRScanner implements QRScannerService { // Check if scanning is supported if (!(await this.isSupported())) { - this.updateCameraState("error", "QR scanning not supported on this device"); + this.updateCameraState( + "error", + "QR scanning not supported on this device", + ); throw new Error("QR scanning not supported on this device"); } diff --git a/src/services/QRScanner/WebInlineQRScanner.ts b/src/services/QRScanner/WebInlineQRScanner.ts index 3c2d8b3c..5f5bceaf 100644 --- a/src/services/QRScanner/WebInlineQRScanner.ts +++ b/src/services/QRScanner/WebInlineQRScanner.ts @@ -512,7 +512,10 @@ export class WebInlineQRScanner implements QRScannerService { this.scanAttempts = 0; this.lastScanTime = Date.now(); this.updateCameraState("initializing", "Starting camera..."); - logger.error(`[WebInlineQRScanner:${this.id}] Starting scan with options:`, this.options); + logger.error( + `[WebInlineQRScanner:${this.id}] Starting scan with options:`, + this.options, + ); // Get camera stream with options logger.error( diff --git a/src/services/deepLinks.ts b/src/services/deepLinks.ts index 03e252e9..550353f7 100644 --- a/src/services/deepLinks.ts +++ b/src/services/deepLinks.ts @@ -121,10 +121,10 @@ export class DeepLinkHandler { // Validate route exists before proceeding if (!this.ROUTE_MAP[routePath]) { - throw { - code: "INVALID_ROUTE", + throw { + code: "INVALID_ROUTE", message: `Invalid route path: ${routePath}`, - details: { routePath } + details: { routePath }, }; } diff --git a/src/utils/logger.ts b/src/utils/logger.ts index ef112fa4..fa4368bd 100644 --- a/src/utils/logger.ts +++ b/src/utils/logger.ts @@ -42,7 +42,8 @@ export const logger = { info: (message: string, ...args: unknown[]) => { if ( process.env.NODE_ENV !== "production" || - process.env.VITE_PLATFORM === "capacitor" + process.env.VITE_PLATFORM === "capacitor" || + process.env.VITE_PLATFORM === "electron" ) { // eslint-disable-next-line no-console console.info(message, ...args); @@ -53,7 +54,8 @@ export const logger = { warn: (message: string, ...args: unknown[]) => { if ( process.env.NODE_ENV !== "production" || - process.env.VITE_PLATFORM === "capacitor" + process.env.VITE_PLATFORM === "capacitor" || + process.env.VITE_PLATFORM === "electron" ) { // eslint-disable-next-line no-console console.warn(message, ...args); diff --git a/src/views/ContactsView.vue b/src/views/ContactsView.vue index acf7151e..beebf6e0 100644 --- a/src/views/ContactsView.vue +++ b/src/views/ContactsView.vue @@ -995,8 +995,8 @@ export default class ContactsView extends Vue { newContact as unknown as Record, "contacts", ); - console.log("sql", sql); - console.log("params", params); + logger.error("sql", sql); + logger.error("params", params); let contactPromise = platformService.dbExec(sql, params); if (USE_DEXIE_DB) { // @ts-expect-error since the result of this promise won't be used, and this will go away soon diff --git a/src/views/ImportAccountView.vue b/src/views/ImportAccountView.vue index 616a9b3d..fcf04385 100644 --- a/src/views/ImportAccountView.vue +++ b/src/views/ImportAccountView.vue @@ -90,15 +90,12 @@ import { AppString, NotificationIface, USE_DEXIE_DB } from "../constants/app"; import * as databaseUtil from "../db/databaseUtil"; import { accountsDBPromise, - db, retrieveSettingsForActiveAccount, } from "../db/index"; -import { MASTER_SETTINGS_KEY } from "../db/tables/settings"; import { DEFAULT_ROOT_DERIVATION_PATH, deriveAddress, newIdentifier, - simpleEncrypt, } from "../libs/crypto"; import { retrieveAccountCount, saveNewIdentity } from "../libs/util"; import { PlatformServiceFactory } from "@/services/PlatformServiceFactory"; From f2c49872a6b604c82372f886d801d61392328e68 Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Wed, 28 May 2025 13:20:01 +0000 Subject: [PATCH 65/92] fix: resolve TypeScript errors in database service implementation - Remove unnecessary generic type parameter from AbsurdSqlDatabaseService - Fix type handling in operation queue and result processing - Correct WebPlatformService dbGetOneRow implementation to use imported databaseService - Add proper type annotations for database operation results This commit improves type safety and fixes several TypeScript errors that were preventing proper type checking in the database service layer. --- src/services/AbsurdSqlDatabaseService.ts | 28 +++++++++----------- src/services/platforms/WebPlatformService.ts | 4 +++ 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/services/AbsurdSqlDatabaseService.ts b/src/services/AbsurdSqlDatabaseService.ts index 4695251c..4df552a8 100644 --- a/src/services/AbsurdSqlDatabaseService.ts +++ b/src/services/AbsurdSqlDatabaseService.ts @@ -6,11 +6,11 @@ import { runMigrations } from "../db-sql/migration"; import type { DatabaseService, QueryExecResult } from "../interfaces/database"; import { logger } from "@/utils/logger"; -interface QueuedOperation { +interface QueuedOperation { type: "run" | "query" | "getOneRow" | "getAll"; sql: string; params: unknown[]; - resolve: (value: T) => void; + resolve: (value: unknown) => void; reject: (reason: unknown) => void; } @@ -22,12 +22,12 @@ interface AbsurdSqlDatabase { ) => Promise<{ changes: number; lastId?: number }>; } -class AbsurdSqlDatabaseService implements DatabaseService { +class AbsurdSqlDatabaseService implements DatabaseService { private static instance: AbsurdSqlDatabaseService | null = null; private db: AbsurdSqlDatabase | null; private initialized: boolean; private initializationPromise: Promise | null = null; - private operationQueue: Array> = []; + private operationQueue: Array = []; private isProcessingQueue: boolean = false; private constructor() { @@ -123,9 +123,7 @@ class AbsurdSqlDatabaseService implements DatabaseService { if (!operation) continue; try { - let result; - let queryResult; - let allResult; + let result: unknown; switch (operation.type) { case "run": result = await this.db.run(operation.sql, operation.params); @@ -134,11 +132,11 @@ class AbsurdSqlDatabaseService implements DatabaseService { result = await this.db.exec(operation.sql, operation.params); break; case "getOneRow": - queryResult = await this.db.exec(operation.sql, operation.params); + const queryResult = await this.db.exec(operation.sql, operation.params); result = queryResult[0]?.values[0]; break; case "getAll": - allResult = await this.db.exec(operation.sql, operation.params); + const allResult = await this.db.exec(operation.sql, operation.params); result = allResult[0]?.values || []; break; } @@ -151,17 +149,17 @@ class AbsurdSqlDatabaseService implements DatabaseService { this.isProcessingQueue = false; } - private async queueOperation( - type: QueuedOperation["type"], + private async queueOperation( + type: QueuedOperation["type"], sql: string, params: unknown[] = [], - ): Promise { - return new Promise((resolve, reject) => { - const operation: QueuedOperation = { + ): Promise { + return new Promise((resolve, reject) => { + const operation: QueuedOperation = { type, sql, params, - resolve, + resolve: (value: unknown) => resolve(value as R), reject, }; this.operationQueue.push(operation); diff --git a/src/services/platforms/WebPlatformService.ts b/src/services/platforms/WebPlatformService.ts index 14c51f76..8f8dd6b9 100644 --- a/src/services/platforms/WebPlatformService.ts +++ b/src/services/platforms/WebPlatformService.ts @@ -381,4 +381,8 @@ export class WebPlatformService implements PlatformService { ): Promise<{ changes: number; lastId?: number }> { return databaseService.run(sql, params); } + + async dbGetOneRow(sql: string, params?: unknown[]): Promise { + return databaseService.query(sql, params).then((result: QueryExecResult[]) => result[0]?.values[0]); + } } From e824fcce2e7a5c368d7fb03c156cd2939ab550db Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Wed, 28 May 2025 14:02:02 +0000 Subject: [PATCH 66/92] fix: linting issues --- package.json | 2 +- src/electron/main.ts | 30 +++++++++++++++++++- src/services/AbsurdSqlDatabaseService.ts | 5 ++-- src/services/platforms/WebPlatformService.ts | 9 ++++-- 4 files changed, 40 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 07d6d95e..9d87540b 100644 --- a/package.json +++ b/package.json @@ -182,7 +182,7 @@ ], "extraResources": [ { - "from": "dist", + "from": "dist-electron/www", "to": "www" } ], diff --git a/src/electron/main.ts b/src/electron/main.ts index 23e5966a..a0829bb9 100644 --- a/src/electron/main.ts +++ b/src/electron/main.ts @@ -25,6 +25,25 @@ function createWindow(): void { logger.log("Checking preload path:", preloadPath); logger.log("Preload exists:", fs.existsSync(preloadPath)); + // Log environment and paths + logger.log("process.cwd():", process.cwd()); + logger.log("__dirname:", __dirname); + logger.log("app.getAppPath():", app.getAppPath()); + logger.log("app.isPackaged:", app.isPackaged); + + // List files in __dirname and __dirname/www + try { + logger.log("Files in __dirname:", fs.readdirSync(__dirname)); + const wwwDir = path.join(__dirname, "www"); + if (fs.existsSync(wwwDir)) { + logger.log("Files in www:", fs.readdirSync(wwwDir)); + } else { + logger.log("www directory does not exist in __dirname"); + } + } catch (e) { + logger.error("Error reading directories:", e); + } + // Create the browser window. const mainWindow = new BrowserWindow({ width: 1200, @@ -88,7 +107,16 @@ function createWindow(): void { logger.log("process.cwd():", process.cwd()); } - const indexPath = path.join(__dirname, "www", "index.html"); + let indexPath = path.resolve(__dirname, "dist-electron", "www", "index.html"); + if (!fs.existsSync(indexPath)) { + // Fallback for dev mode + indexPath = path.resolve( + process.cwd(), + "dist-electron", + "www", + "index.html", + ); + } if (isDev) { logger.log("Loading index from:", indexPath); diff --git a/src/services/AbsurdSqlDatabaseService.ts b/src/services/AbsurdSqlDatabaseService.ts index 4df552a8..db710dce 100644 --- a/src/services/AbsurdSqlDatabaseService.ts +++ b/src/services/AbsurdSqlDatabaseService.ts @@ -123,6 +123,7 @@ class AbsurdSqlDatabaseService implements DatabaseService { if (!operation) continue; try { + let queryResult: QueryExecResult[] = []; let result: unknown; switch (operation.type) { case "run": @@ -132,11 +133,11 @@ class AbsurdSqlDatabaseService implements DatabaseService { result = await this.db.exec(operation.sql, operation.params); break; case "getOneRow": - const queryResult = await this.db.exec(operation.sql, operation.params); + queryResult = await this.db.exec(operation.sql, operation.params); result = queryResult[0]?.values[0]; break; case "getAll": - const allResult = await this.db.exec(operation.sql, operation.params); + queryResult = await this.db.exec(operation.sql, operation.params); result = allResult[0]?.values || []; break; } diff --git a/src/services/platforms/WebPlatformService.ts b/src/services/platforms/WebPlatformService.ts index 8f8dd6b9..6f66367d 100644 --- a/src/services/platforms/WebPlatformService.ts +++ b/src/services/platforms/WebPlatformService.ts @@ -382,7 +382,12 @@ export class WebPlatformService implements PlatformService { return databaseService.run(sql, params); } - async dbGetOneRow(sql: string, params?: unknown[]): Promise { - return databaseService.query(sql, params).then((result: QueryExecResult[]) => result[0]?.values[0]); + async dbGetOneRow( + sql: string, + params?: unknown[], + ): Promise { + return databaseService + .query(sql, params) + .then((result: QueryExecResult[]) => result[0]?.values[0]); } } From d2c3e5db058bfc7810102aae65b9967916b2e684 Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Wed, 28 May 2025 14:03:21 +0000 Subject: [PATCH 67/92] fix: one lint that got past me --- src/services/AbsurdSqlDatabaseService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/AbsurdSqlDatabaseService.ts b/src/services/AbsurdSqlDatabaseService.ts index db710dce..e98d6662 100644 --- a/src/services/AbsurdSqlDatabaseService.ts +++ b/src/services/AbsurdSqlDatabaseService.ts @@ -138,7 +138,7 @@ class AbsurdSqlDatabaseService implements DatabaseService { break; case "getAll": queryResult = await this.db.exec(operation.sql, operation.params); - result = allResult[0]?.values || []; + result = queryResult[0]?.values || []; break; } operation.resolve(result); From 3e90bafbd1321e2b550c3b1e3b14dc3b8cebec03 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Wed, 28 May 2025 19:37:01 -0600 Subject: [PATCH 68/92] correct & simplify the DB logging --- src/db-sql/migration.ts | 2 +- src/db/databaseUtil.ts | 60 +++++------------------- src/services/AbsurdSqlDatabaseService.ts | 8 ++++ src/views/LogView.vue | 3 +- 4 files changed, 23 insertions(+), 50 deletions(-) diff --git a/src/db-sql/migration.ts b/src/db-sql/migration.ts index ce917472..7a99724f 100644 --- a/src/db-sql/migration.ts +++ b/src/db-sql/migration.ts @@ -107,7 +107,7 @@ const MIGRATIONS = [ CREATE INDEX IF NOT EXISTS idx_contacts_name ON contacts(name); CREATE TABLE IF NOT EXISTS logs ( - date TEXT PRIMARY KEY, + date TEXT NOT NULL, message TEXT NOT NULL ); diff --git a/src/db/databaseUtil.ts b/src/db/databaseUtil.ts index 610d5f69..6ab32d4e 100644 --- a/src/db/databaseUtil.ts +++ b/src/db/databaseUtil.ts @@ -123,6 +123,8 @@ export async function retrieveSettingsForActiveAccount(): Promise { } } +let lastCleanupDate: string | null = null; + /** * Logs a message to the database with proper handling of concurrent writes * @param message - The message to log @@ -135,65 +137,29 @@ export async function logToDb(message: string): Promise { try { // Try to insert first, if it fails due to UNIQUE constraint, update instead - try { - await platform.dbExec("INSERT INTO logs (date, message) VALUES (?, ?)", [ - todayKey, - fullMessage, - ]); - } catch (error) { - // If insert fails due to UNIQUE constraint, update instead - if ( - error instanceof Error && - error.message.includes("UNIQUE constraint failed") - ) { - const result = await platform.dbQuery( - "SELECT message FROM logs WHERE date = ?", - [todayKey], - ); - - if (result && result.values.length > 0) { - const prevMessages = result.values[0][0] as string; - const updatedMessage = `${prevMessages}\n${fullMessage}`; - - await platform.dbExec("UPDATE logs SET message = ? WHERE date = ?", [ - updatedMessage, - todayKey, - ]); - } - } else { - // If it's a different error, rethrow it - throw error; - } - } + await platform.dbExec("INSERT INTO logs (date, message) VALUES (?, ?)", [ + todayKey, + fullMessage, + ]); // Clean up old logs (keep only last 7 days) - do this less frequently // Only clean up if the date is different from the last cleanup - const lastCleanupKey = "last_log_cleanup"; - const result = await platform.dbQuery( - "SELECT value FROM settings WHERE key = ?", - [lastCleanupKey], - ); - - const lastCleanup = result?.values[0]?.[0] as string; - if (!lastCleanup || lastCleanup !== todayKey) { + if (!lastCleanupDate || lastCleanupDate !== todayKey) { const sevenDaysAgo = new Date(); sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7); await platform.dbExec("DELETE FROM logs WHERE date < ?", [ sevenDaysAgo.toDateString(), ]); - - // Update last cleanup date - await platform.dbExec( - "INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)", - [lastCleanupKey, todayKey], - ); } } catch (error) { // Log to console as fallback // eslint-disable-next-line no-console - console.error("Failed to log to database:", error); - // eslint-disable-next-line no-console - console.error("Original message:", message); + console.error( + "Error logging to database:", + error, + " ... for original message:", + message, + ); } } diff --git a/src/services/AbsurdSqlDatabaseService.ts b/src/services/AbsurdSqlDatabaseService.ts index e98d6662..a8df16e3 100644 --- a/src/services/AbsurdSqlDatabaseService.ts +++ b/src/services/AbsurdSqlDatabaseService.ts @@ -143,6 +143,14 @@ class AbsurdSqlDatabaseService implements DatabaseService { } operation.resolve(result); } catch (error) { + console.log( + "Error while processing SQL queue:", + error, + " ... for sql:", + operation.sql, + " ... with params:", + operation.params, + ); operation.reject(error); } } diff --git a/src/views/LogView.vue b/src/views/LogView.vue index e90231e6..bdfe7297 100644 --- a/src/views/LogView.vue +++ b/src/views/LogView.vue @@ -35,8 +35,7 @@ No logs found.
-
-

{{ log.date }}

+
{{ log.message }}
Date: Wed, 28 May 2025 19:44:16 -0600 Subject: [PATCH 69/92] fix log cleanup check to actually pay attention to limit --- src/db/databaseUtil.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/db/databaseUtil.ts b/src/db/databaseUtil.ts index 6ab32d4e..d69b8154 100644 --- a/src/db/databaseUtil.ts +++ b/src/db/databaseUtil.ts @@ -150,6 +150,7 @@ export async function logToDb(message: string): Promise { await platform.dbExec("DELETE FROM logs WHERE date < ?", [ sevenDaysAgo.toDateString(), ]); + lastCleanupDate = todayKey; } } catch (error) { // Log to console as fallback From 01c33069c41ea85c1a9072bb46f38016023d55d4 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Wed, 28 May 2025 20:08:09 -0600 Subject: [PATCH 70/92] fix more of the logging & log display --- src/db/databaseUtil.ts | 6 +++--- src/views/LogView.vue | 21 +++++++++++---------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/db/databaseUtil.ts b/src/db/databaseUtil.ts index d69b8154..0dd5fb06 100644 --- a/src/db/databaseUtil.ts +++ b/src/db/databaseUtil.ts @@ -133,13 +133,13 @@ let lastCleanupDate: string | null = null; export async function logToDb(message: string): Promise { const platform = PlatformServiceFactory.getInstance(); const todayKey = new Date().toDateString(); - const fullMessage = `${new Date().toISOString()} ${message}`; + const nowKey = new Date().toISOString(); try { // Try to insert first, if it fails due to UNIQUE constraint, update instead await platform.dbExec("INSERT INTO logs (date, message) VALUES (?, ?)", [ - todayKey, - fullMessage, + nowKey, + message, ]); // Clean up old logs (keep only last 7 days) - do this less frequently diff --git a/src/views/LogView.vue b/src/views/LogView.vue index bdfe7297..deecbb56 100644 --- a/src/views/LogView.vue +++ b/src/views/LogView.vue @@ -38,7 +38,7 @@
{{ log.message }}
{{ log.date }} {{ log.message }}
@@ -81,21 +81,22 @@ export default class LogView extends Vue { let allLogs: Log[] = []; const platformService = PlatformServiceFactory.getInstance(); - const queryResult = await platformService.dbQuery("SELECT * FROM logs"); - allLogs = databaseUtil.mapQueryResultToValues( + const queryResult = await platformService.dbQuery( + "SELECT * FROM logs ORDER BY date DESC", + ); + this.logs = databaseUtil.mapQueryResultToValues( queryResult, ) as unknown as Log[]; if (USE_DEXIE_DB) { await db.open(); allLogs = await db.logs.toArray(); + // Sort by date in reverse chronological order + this.logs = allLogs.sort((a, b) => { + const dateA = new Date(a.date); + const dateB = new Date(b.date); + return dateB.getTime() - dateA.getTime(); + }); } - - // Sort by date in reverse chronological order - this.logs = allLogs.sort((a, b) => { - const dateA = new Date(a.date); - const dateB = new Date(b.date); - return dateB.getTime() - dateA.getTime(); - }); } catch (error) { logger.error("Error loading logs:", error); this.error = From ec1f27bab196a6b641c1ec22d37cca3ae04083e8 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Wed, 28 May 2025 20:20:09 -0600 Subject: [PATCH 71/92] fix more logging cleanup errors --- src/db/databaseUtil.ts | 3 +-- src/utils/logger.ts | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/db/databaseUtil.ts b/src/db/databaseUtil.ts index 0dd5fb06..6dddecb9 100644 --- a/src/db/databaseUtil.ts +++ b/src/db/databaseUtil.ts @@ -145,8 +145,7 @@ export async function logToDb(message: string): Promise { // Clean up old logs (keep only last 7 days) - do this less frequently // Only clean up if the date is different from the last cleanup if (!lastCleanupDate || lastCleanupDate !== todayKey) { - const sevenDaysAgo = new Date(); - sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7); + const sevenDaysAgo = new Date(new Date().getTime() - 7 * 24 * 60 * 60 * 1000); await platform.dbExec("DELETE FROM logs WHERE date < ?", [ sevenDaysAgo.toDateString(), ]); diff --git a/src/utils/logger.ts b/src/utils/logger.ts index fa4368bd..de4804e2 100644 --- a/src/utils/logger.ts +++ b/src/utils/logger.ts @@ -25,7 +25,7 @@ export const logger = { // eslint-disable-next-line no-console console.debug(message, ...args); const argsString = args.length > 0 ? " - " + safeStringify(args) : ""; - logToDb(message + argsString); + // logToDb(message + argsString); } }, log: (message: string, ...args: unknown[]) => { From ef3bfcdbd2e398678a2564ed9d2799e175ef1c6c Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Wed, 28 May 2025 20:30:00 -0600 Subject: [PATCH 72/92] fix linting --- src/db/databaseUtil.ts | 4 +++- src/services/AbsurdSqlDatabaseService.ts | 2 +- src/utils/logger.ts | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/db/databaseUtil.ts b/src/db/databaseUtil.ts index 6dddecb9..f8079c97 100644 --- a/src/db/databaseUtil.ts +++ b/src/db/databaseUtil.ts @@ -145,7 +145,9 @@ export async function logToDb(message: string): Promise { // Clean up old logs (keep only last 7 days) - do this less frequently // Only clean up if the date is different from the last cleanup if (!lastCleanupDate || lastCleanupDate !== todayKey) { - const sevenDaysAgo = new Date(new Date().getTime() - 7 * 24 * 60 * 60 * 1000); + const sevenDaysAgo = new Date( + new Date().getTime() - 7 * 24 * 60 * 60 * 1000, + ); await platform.dbExec("DELETE FROM logs WHERE date < ?", [ sevenDaysAgo.toDateString(), ]); diff --git a/src/services/AbsurdSqlDatabaseService.ts b/src/services/AbsurdSqlDatabaseService.ts index a8df16e3..878dbea5 100644 --- a/src/services/AbsurdSqlDatabaseService.ts +++ b/src/services/AbsurdSqlDatabaseService.ts @@ -143,7 +143,7 @@ class AbsurdSqlDatabaseService implements DatabaseService { } operation.resolve(result); } catch (error) { - console.log( + logger.error( "Error while processing SQL queue:", error, " ... for sql:", diff --git a/src/utils/logger.ts b/src/utils/logger.ts index de4804e2..2cbb228b 100644 --- a/src/utils/logger.ts +++ b/src/utils/logger.ts @@ -24,7 +24,7 @@ export const logger = { if (process.env.NODE_ENV !== "production") { // eslint-disable-next-line no-console console.debug(message, ...args); - const argsString = args.length > 0 ? " - " + safeStringify(args) : ""; + // const argsString = args.length > 0 ? " - " + safeStringify(args) : ""; // logToDb(message + argsString); } }, From 297c5a2dbb809acf1aeb90014029276efcec71d2 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Tue, 3 Jun 2025 19:59:28 -0600 Subject: [PATCH 73/92] disable SQLite in Java & Swift (since they don't compile) & add SQL queueing on startup At this point, the app compiles and runs in Android & iOS but DB operations fail. --- BUILDING.md | 2 + .../java/app/timesafari/MainActivity.java | 4 +- .../java/timesafari/app/MainActivity.java | 5 - ios/App/App.xcodeproj/project.pbxproj | 57 +++-- ios/App/App/AppDelegate.swift | 4 +- ios/App/Podfile | 5 + ios/App/Podfile.lock | 20 +- package-lock.json | 40 +--- package.json | 2 +- pkgx.yaml | 1 + src/db/databaseUtil.ts | 5 + .../platforms/CapacitorPlatformService.ts | 219 ++++++++++++++---- .../platforms/ElectronPlatformService.ts | 13 +- src/views/LogView.vue | 9 + 14 files changed, 273 insertions(+), 113 deletions(-) delete mode 100644 android/app/src/main/java/timesafari/app/MainActivity.java diff --git a/BUILDING.md b/BUILDING.md index d9debb77..62fb27e8 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -369,6 +369,8 @@ Prerequisites: macOS with Xcode installed 6. Use Xcode to build and run on simulator or device. + * Select Product -> Destination with some Simulator version. Then click the run arrow. + 7. Release * Under "General" renamed a bunch of things to "Time Safari" diff --git a/android/app/src/main/java/app/timesafari/MainActivity.java b/android/app/src/main/java/app/timesafari/MainActivity.java index 6fbf940e..12429d63 100644 --- a/android/app/src/main/java/app/timesafari/MainActivity.java +++ b/android/app/src/main/java/app/timesafari/MainActivity.java @@ -2,7 +2,7 @@ package app.timesafari; import android.os.Bundle; import com.getcapacitor.BridgeActivity; -import com.getcapacitor.community.sqlite.SQLite; +//import com.getcapacitor.community.sqlite.SQLite; public class MainActivity extends BridgeActivity { @Override @@ -10,6 +10,6 @@ public class MainActivity extends BridgeActivity { super.onCreate(savedInstanceState); // Initialize SQLite - registerPlugin(SQLite.class); + //registerPlugin(SQLite.class); } } \ No newline at end of file diff --git a/android/app/src/main/java/timesafari/app/MainActivity.java b/android/app/src/main/java/timesafari/app/MainActivity.java deleted file mode 100644 index cb343faa..00000000 --- a/android/app/src/main/java/timesafari/app/MainActivity.java +++ /dev/null @@ -1,5 +0,0 @@ -package timesafari.app; - -import com.getcapacitor.BridgeActivity; - -public class MainActivity extends BridgeActivity {} diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj index 1766f7e7..0c89bf53 100644 --- a/ios/App/App.xcodeproj/project.pbxproj +++ b/ios/App/App.xcodeproj/project.pbxproj @@ -14,7 +14,7 @@ 504EC30F1FED79650016851F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 504EC30E1FED79650016851F /* Assets.xcassets */; }; 504EC3121FED79650016851F /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 504EC3101FED79650016851F /* LaunchScreen.storyboard */; }; 50B271D11FEDC1A000F3C39B /* public in Resources */ = {isa = PBXBuildFile; fileRef = 50B271D01FEDC1A000F3C39B /* public */; }; - A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */; }; + 97EF2DC6FD76C3643D680B8D /* Pods_App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90DCAFB4D8948F7A50C13800 /* Pods_App.framework */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -27,9 +27,9 @@ 504EC3111FED79650016851F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 504EC3131FED79650016851F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 50B271D01FEDC1A000F3C39B /* public */ = {isa = PBXFileReference; lastKnownFileType = folder; path = public; sourceTree = ""; }; - AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_App.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = ""; }; - FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Pods/Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = ""; }; + 90DCAFB4D8948F7A50C13800 /* Pods_App.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_App.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E2E9297D5D02C549106C77F9 /* Pods-App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.release.xcconfig"; path = "Target Support Files/Pods-App/Pods-App.release.xcconfig"; sourceTree = ""; }; + EAEC6436E595F7CD3A1C9E96 /* Pods-App.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-App.debug.xcconfig"; path = "Target Support Files/Pods-App/Pods-App.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -37,17 +37,17 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - A084ECDBA7D38E1E42DFC39D /* Pods_App.framework in Frameworks */, + 97EF2DC6FD76C3643D680B8D /* Pods_App.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 27E2DDA53C4D2A4D1A88CE4A /* Frameworks */ = { + 4B546315E668C7A13939F417 /* Frameworks */ = { isa = PBXGroup; children = ( - AF277DCFFFF123FFC6DF26C7 /* Pods_App.framework */, + 90DCAFB4D8948F7A50C13800 /* Pods_App.framework */, ); name = Frameworks; sourceTree = ""; @@ -57,8 +57,8 @@ children = ( 504EC3061FED79650016851F /* App */, 504EC3051FED79650016851F /* Products */, - 7F8756D8B27F46E3366F6CEA /* Pods */, - 27E2DDA53C4D2A4D1A88CE4A /* Frameworks */, + BA325FFCDCE8D334E5C7AEBE /* Pods */, + 4B546315E668C7A13939F417 /* Frameworks */, ); sourceTree = ""; }; @@ -85,13 +85,14 @@ path = App; sourceTree = ""; }; - 7F8756D8B27F46E3366F6CEA /* Pods */ = { + BA325FFCDCE8D334E5C7AEBE /* Pods */ = { isa = PBXGroup; children = ( - FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */, - AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */, + EAEC6436E595F7CD3A1C9E96 /* Pods-App.debug.xcconfig */, + E2E9297D5D02C549106C77F9 /* Pods-App.release.xcconfig */, ); name = Pods; + path = Pods; sourceTree = ""; }; /* End PBXGroup section */ @@ -101,12 +102,12 @@ isa = PBXNativeTarget; buildConfigurationList = 504EC3161FED79650016851F /* Build configuration list for PBXNativeTarget "App" */; buildPhases = ( - 6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */, + 92977BEA1068CC097A57FC77 /* [CP] Check Pods Manifest.lock */, 504EC3001FED79650016851F /* Sources */, 504EC3011FED79650016851F /* Frameworks */, 504EC3021FED79650016851F /* Resources */, - 9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */, 012076E8FFE4BF260A79B034 /* Fix Privacy Manifest */, + 3525031ED1C96EF4CF6E9959 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -189,37 +190,41 @@ shellScript = "\"${PROJECT_DIR}/app_privacy_manifest_fixer/fixer.sh\" "; showEnvVarsInLog = 0; }; - 6634F4EFEBD30273BCE97C65 /* [CP] Check Pods Manifest.lock */ = { + 3525031ED1C96EF4CF6E9959 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", ); - name = "[CP] Check Pods Manifest.lock"; + name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-App-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-App/Pods-App-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; - 9592DBEFFC6D2A0C8D5DEB22 /* [CP] Embed Pods Frameworks */ = { + 92977BEA1068CC097A57FC77 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "[CP] Embed Pods Frameworks"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-App-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-App/Pods-App-frameworks.sh\"\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ @@ -375,11 +380,12 @@ }; 504EC3171FED79650016851F /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = FC68EB0AF532CFC21C3344DD /* Pods-App.debug.xcconfig */; + baseConfigurationReference = EAEC6436E595F7CD3A1C9E96 /* Pods-App.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 18; + DEVELOPMENT_TEAM = GM3FS5JQPH; ENABLE_APP_SANDBOX = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO; INFOPLIST_FILE = App/Info.plist; @@ -401,11 +407,12 @@ }; 504EC3181FED79650016851F /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = AF51FD2D460BCFE21FA515B2 /* Pods-App.release.xcconfig */; + baseConfigurationReference = E2E9297D5D02C549106C77F9 /* Pods-App.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 18; + DEVELOPMENT_TEAM = GM3FS5JQPH; ENABLE_APP_SANDBOX = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO; INFOPLIST_FILE = App/Info.plist; diff --git a/ios/App/App/AppDelegate.swift b/ios/App/App/AppDelegate.swift index c1c6a182..7a1b41b3 100644 --- a/ios/App/App/AppDelegate.swift +++ b/ios/App/App/AppDelegate.swift @@ -9,8 +9,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Initialize SQLite - let sqlite = SQLite() - sqlite.initialize() + //let sqlite = SQLite() + //sqlite.initialize() // Override point for customization after application launch. return true diff --git a/ios/App/Podfile b/ios/App/Podfile index 228eeecb..da98dfe6 100644 --- a/ios/App/Podfile +++ b/ios/App/Podfile @@ -27,4 +27,9 @@ end post_install do |installer| assertDeploymentTarget(installer) + installer.pods_project.targets.each do |target| + target.build_configurations.each do |config| + config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64' + end + end end diff --git a/ios/App/Podfile.lock b/ios/App/Podfile.lock index f513a8ba..fdd82e86 100644 --- a/ios/App/Podfile.lock +++ b/ios/App/Podfile.lock @@ -5,6 +5,10 @@ PODS: - Capacitor - CapacitorCamera (6.1.2): - Capacitor + - CapacitorCommunitySqlite (6.0.2): + - Capacitor + - SQLCipher + - ZIPFoundation - CapacitorCordova (6.2.1) - CapacitorFilesystem (6.0.3): - Capacitor @@ -73,11 +77,18 @@ PODS: - nanopb/decode (2.30910.0) - nanopb/encode (2.30910.0) - PromisesObjC (2.4.0) + - SQLCipher (4.9.0): + - SQLCipher/standard (= 4.9.0) + - SQLCipher/common (4.9.0) + - SQLCipher/standard (4.9.0): + - SQLCipher/common + - ZIPFoundation (0.9.19) DEPENDENCIES: - "Capacitor (from `../../node_modules/@capacitor/ios`)" - "CapacitorApp (from `../../node_modules/@capacitor/app`)" - "CapacitorCamera (from `../../node_modules/@capacitor/camera`)" + - "CapacitorCommunitySqlite (from `../../node_modules/@capacitor-community/sqlite`)" - "CapacitorCordova (from `../../node_modules/@capacitor/ios`)" - "CapacitorFilesystem (from `../../node_modules/@capacitor/filesystem`)" - "CapacitorMlkitBarcodeScanning (from `../../node_modules/@capacitor-mlkit/barcode-scanning`)" @@ -98,6 +109,8 @@ SPEC REPOS: - MLKitVision - nanopb - PromisesObjC + - SQLCipher + - ZIPFoundation EXTERNAL SOURCES: Capacitor: @@ -106,6 +119,8 @@ EXTERNAL SOURCES: :path: "../../node_modules/@capacitor/app" CapacitorCamera: :path: "../../node_modules/@capacitor/camera" + CapacitorCommunitySqlite: + :path: "../../node_modules/@capacitor-community/sqlite" CapacitorCordova: :path: "../../node_modules/@capacitor/ios" CapacitorFilesystem: @@ -121,6 +136,7 @@ SPEC CHECKSUMS: Capacitor: c95400d761e376be9da6be5a05f226c0e865cebf CapacitorApp: e1e6b7d05e444d593ca16fd6d76f2b7c48b5aea7 CapacitorCamera: 9bc7b005d0e6f1d5f525b8137045b60cffffce79 + CapacitorCommunitySqlite: 0299d20f4b00c2e6aa485a1d8932656753937b9b CapacitorCordova: 8d93e14982f440181be7304aa9559ca631d77fff CapacitorFilesystem: 59270a63c60836248812671aa3b15df673fbaf74 CapacitorMlkitBarcodeScanning: 7652be9c7922f39203a361de735d340ae37e134e @@ -138,7 +154,9 @@ SPEC CHECKSUMS: MLKitVision: 90922bca854014a856f8b649d1f1f04f63fd9c79 nanopb: 438bc412db1928dac798aa6fd75726007be04262 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 + SQLCipher: 31878d8ebd27e5c96db0b7cb695c96e9f8ad77da + ZIPFoundation: b8c29ea7ae353b309bc810586181fd073cb3312c -PODFILE CHECKSUM: 7e7e09e6937de7f015393aecf2cf7823645689b3 +PODFILE CHECKSUM: f987510f7383b04a1b09ea8472bdadcd88b6c924 COCOAPODS: 1.16.2 diff --git a/package-lock.json b/package-lock.json index c0e0569a..579ccd38 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "timesafari", "version": "0.4.6", "dependencies": { - "@capacitor-community/sqlite": "^6.0.2", + "@capacitor-community/sqlite": "6.0.2", "@capacitor-mlkit/barcode-scanning": "^6.0.0", "@capacitor/android": "^6.2.0", "@capacitor/app": "^6.0.0", @@ -2516,7 +2516,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/@capacitor-community/sqlite/-/sqlite-6.0.2.tgz", "integrity": "sha512-sj+2SPLu7E/3dM3xxcWwfNomG+aQHuN96/EFGrOtp4Dv30/2y5oIPyi6hZGjQGjPc5GDNoTQwW7vxWNzybjuMg==", - "license": "MIT", "dependencies": { "jeep-sqlite": "^2.7.2" }, @@ -8195,7 +8194,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -8208,7 +8206,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "darwin" @@ -8277,7 +8274,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -8290,7 +8286,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -8373,7 +8368,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -8386,7 +8380,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "linux" @@ -8399,7 +8392,6 @@ "cpu": [ "arm64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -8426,7 +8418,6 @@ "cpu": [ "x64" ], - "license": "MIT", "optional": true, "os": [ "win32" @@ -8818,10 +8809,9 @@ } }, "node_modules/@stencil/core": { - "version": "4.31.0", - "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.31.0.tgz", - "integrity": "sha512-Ei9MFJ6LPD9BMFs+klkHylbVOOYhG10Jv4bvoFf3GMH15kA41rSYkEdr4DiX84ZdErQE2qtFV/2SUyWoXh0AhA==", - "license": "MIT", + "version": "4.33.1", + "resolved": "https://registry.npmjs.org/@stencil/core/-/core-4.33.1.tgz", + "integrity": "sha512-12k9xhAJBkpg598it+NRmaYIdEe6TSnsL/v6/KRXDcUyTK11VYwZQej2eHnMWtqot+znJ+GNTqb5YbiXi+5Low==", "bin": { "stencil": "bin/stencil" }, @@ -12173,8 +12163,7 @@ "node_modules/browser-fs-access": { "version": "0.35.0", "resolved": "https://registry.npmjs.org/browser-fs-access/-/browser-fs-access-0.35.0.tgz", - "integrity": "sha512-sLoadumpRfsjprP8XzVjpQc0jK8yqHBx0PtUTGYj2fftT+P/t+uyDAQdMgGAPKD011in/O+YYGh7fIs0oG/viw==", - "license": "Apache-2.0" + "integrity": "sha512-sLoadumpRfsjprP8XzVjpQc0jK8yqHBx0PtUTGYj2fftT+P/t+uyDAQdMgGAPKD011in/O+YYGh7fIs0oG/viw==" }, "node_modules/browserify-aes": { "version": "1.2.0", @@ -18144,8 +18133,7 @@ "node_modules/immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "license": "MIT" + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" }, "node_modules/import-fresh": { "version": "3.3.1", @@ -19090,7 +19078,6 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/jeep-sqlite/-/jeep-sqlite-2.8.0.tgz", "integrity": "sha512-FWNUP6OAmrUHwiW7H1xH5YUQ8tN2O4l4psT1sLd7DQtHd5PfrA1nvNdeKPNj+wQBtu7elJa8WoUibTytNTaaCg==", - "license": "MIT", "dependencies": { "@stencil/core": "^4.20.0", "browser-fs-access": "^0.35.0", @@ -19591,7 +19578,6 @@ "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -19602,20 +19588,17 @@ "node_modules/jszip/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/jszip/node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "license": "(MIT AND Zlib)" + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "node_modules/jszip/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -19629,14 +19612,12 @@ "node_modules/jszip/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/jszip/node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -20159,7 +20140,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "license": "MIT", "dependencies": { "immediate": "~3.0.5" } @@ -20526,7 +20506,6 @@ "version": "1.10.0", "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", - "license": "Apache-2.0", "dependencies": { "lie": "3.1.1" } @@ -20535,7 +20514,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", - "license": "MIT", "dependencies": { "immediate": "~3.0.5" } diff --git a/package.json b/package.json index 9d87540b..b9fafaae 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "electron:build-mac-universal": "npm run build:electron-prod && electron-builder --mac --universal" }, "dependencies": { - "@capacitor-community/sqlite": "^6.0.2", + "@capacitor-community/sqlite": "6.0.2", "@capacitor-mlkit/barcode-scanning": "^6.0.0", "@capacitor/android": "^6.2.0", "@capacitor/app": "^6.0.0", diff --git a/pkgx.yaml b/pkgx.yaml index 08559bf2..89c92cb2 100644 --- a/pkgx.yaml +++ b/pkgx.yaml @@ -2,5 +2,6 @@ dependencies: - gradle - java - pod + - rubygems.org # other dependencies are discovered via package.json & requirements.txt & Gemfile (I'm guessing). diff --git a/src/db/databaseUtil.ts b/src/db/databaseUtil.ts index f8079c97..a0fdd87e 100644 --- a/src/db/databaseUtil.ts +++ b/src/db/databaseUtil.ts @@ -124,6 +124,7 @@ export async function retrieveSettingsForActiveAccount(): Promise { } let lastCleanupDate: string | null = null; +export let memoryLogs: string[] = []; /** * Logs a message to the database with proper handling of concurrent writes @@ -136,6 +137,7 @@ export async function logToDb(message: string): Promise { const nowKey = new Date().toISOString(); try { + memoryLogs.push(`${new Date().toISOString()} ${message}`); // Try to insert first, if it fails due to UNIQUE constraint, update instead await platform.dbExec("INSERT INTO logs (date, message) VALUES (?, ?)", [ nowKey, @@ -148,6 +150,9 @@ export async function logToDb(message: string): Promise { const sevenDaysAgo = new Date( new Date().getTime() - 7 * 24 * 60 * 60 * 1000, ); + memoryLogs = memoryLogs.filter( + (log) => log.split(" ")[0] > sevenDaysAgo.toDateString(), + ); await platform.dbExec("DELETE FROM logs WHERE date < ?", [ sevenDaysAgo.toDateString(), ]); diff --git a/src/services/platforms/CapacitorPlatformService.ts b/src/services/platforms/CapacitorPlatformService.ts index 8df1985f..cd237dfe 100644 --- a/src/services/platforms/CapacitorPlatformService.ts +++ b/src/services/platforms/CapacitorPlatformService.ts @@ -10,10 +10,9 @@ import { SQLiteConnection, SQLiteDBConnection, CapacitorSQLite, - Changes, } from "@capacitor-community/sqlite"; import { logger } from "../../utils/logger"; -import { QueryExecResult, SqlValue } from "@/interfaces/database"; +import { QueryExecResult } from "@/interfaces/database"; import { DEFAULT_ENDORSER_API_SERVER } from "@/constants/app"; interface Migration { @@ -21,6 +20,14 @@ interface Migration { sql: string; } +interface QueuedOperation { + type: "run" | "query" | "getOneRow" | "getAll"; + sql: string; + params: unknown[]; + resolve: (value: unknown) => void; + reject: (reason: unknown) => void; +} + /** * Platform service implementation for Capacitor (mobile) platform. * Provides native mobile functionality through Capacitor plugins for: @@ -34,12 +41,40 @@ export class CapacitorPlatformService implements PlatformService { private db: SQLiteDBConnection | null = null; private dbName = "timesafari.db"; private initialized = false; + private initializationPromise: Promise | null = null; + private operationQueue: Array = []; + private isProcessingQueue: boolean = false; constructor() { this.sqlite = new SQLiteConnection(CapacitorSQLite); } private async initializeDatabase(): Promise { + // If already initialized, return immediately + if (this.initialized) { + return; + } + + // If initialization is in progress, wait for it + if (this.initializationPromise) { + return this.initializationPromise; + } + + // Start initialization + this.initializationPromise = this._initialize(); + try { + await this.initializationPromise; + } catch (error) { + logger.error( + "[CapacitorPlatformService] Initialize method failed:", + error, + ); + this.initializationPromise = null; // Reset on failure + throw error; + } + } + + private async _initialize(): Promise { if (this.initialized) { return; } @@ -57,16 +92,142 @@ export class CapacitorPlatformService implements PlatformService { await this.db.open(); // Set journal mode to WAL for better performance - await this.db.execute("PRAGMA journal_mode=WAL;"); + // await this.db.execute("PRAGMA journal_mode=WAL;"); // Run migrations await this.runMigrations(); this.initialized = true; - logger.log("SQLite database initialized successfully"); + logger.log( + "[CapacitorPlatformService] SQLite database initialized successfully", + ); + + // Start processing the queue after initialization + this.processQueue(); } catch (error) { - logger.error("Error initializing SQLite database:", error); - throw new Error("Failed to initialize database"); + logger.error( + "[CapacitorPlatformService] Error initializing SQLite database:", + error, + ); + throw new Error( + "[CapacitorPlatformService] Failed to initialize database", + ); + } + } + + private async processQueue(): Promise { + if (this.isProcessingQueue || !this.initialized || !this.db) { + return; + } + + this.isProcessingQueue = true; + + while (this.operationQueue.length > 0) { + const operation = this.operationQueue.shift(); + if (!operation) continue; + + try { + let result: unknown; + switch (operation.type) { + case "run": { + const runResult = await this.db.run( + operation.sql, + operation.params, + ); + result = { + changes: runResult.changes?.changes || 0, + lastId: runResult.changes?.lastId, + }; + break; + } + case "query": { + const queryResult = await this.db.query( + operation.sql, + operation.params, + ); + result = { + columns: [], // SQLite plugin doesn't provide column names + values: queryResult.values || [], + }; + break; + } + case "getOneRow": { + const oneRowResult = await this.db.query( + operation.sql, + operation.params, + ); + result = oneRowResult.values?.[0]; + break; + } + case "getAll": { + const allResult = await this.db.query( + operation.sql, + operation.params, + ); + result = allResult.values || []; + break; + } + } + operation.resolve(result); + } catch (error) { + logger.error( + "[CapacitorPlatformService] Error while processing SQL queue:", + error, + " ... for sql:", + operation.sql, + " ... with params:", + operation.params, + ); + operation.reject(error); + } + } + + this.isProcessingQueue = false; + } + + private async queueOperation( + type: QueuedOperation["type"], + sql: string, + params: unknown[] = [], + ): Promise { + return new Promise((resolve, reject) => { + const operation: QueuedOperation = { + type, + sql, + params, + resolve: (value: unknown) => resolve(value as R), + reject, + }; + this.operationQueue.push(operation); + + // If we're already initialized, start processing the queue + if (this.initialized && this.db) { + this.processQueue(); + } + }); + } + + private async waitForInitialization(): Promise { + // If we have an initialization promise, wait for it + if (this.initializationPromise) { + await this.initializationPromise; + return; + } + + // If not initialized and no promise, start initialization + if (!this.initialized) { + await this.initializeDatabase(); + return; + } + + // If initialized but no db, something went wrong + if (!this.db) { + logger.error( + "[CapacitorPlatformService] Database not properly initialized after await waitForInitialization() - initialized flag is true but db is null", + ); + throw new Error( + "[CapacitorPlatformService] The database could not be initialized. We recommend you restart or reinstall.", + ); } } @@ -166,7 +327,7 @@ export class CapacitorPlatformService implements PlatformService { CREATE INDEX IF NOT EXISTS idx_contacts_name ON contacts(name); CREATE TABLE IF NOT EXISTS logs ( - date TEXT PRIMARY KEY, + date TEXT, message TEXT NOT NULL ); @@ -660,24 +821,8 @@ export class CapacitorPlatformService implements PlatformService { * @see PlatformService.dbQuery */ async dbQuery(sql: string, params?: unknown[]): Promise { - await this.initializeDatabase(); - if (!this.db) { - throw new Error("Database not initialized"); - } - - try { - const result = await this.db.query(sql, params || []); - const values = result.values || []; - return { - columns: [], // SQLite plugin doesn't provide column names in query result - values: values as SqlValue[][], - }; - } catch (error) { - logger.error("Error executing query:", error); - throw new Error( - `Database query failed: ${error instanceof Error ? error.message : String(error)}`, - ); - } + await this.waitForInitialization(); + return this.queueOperation("query", sql, params || []); } /** @@ -687,23 +832,11 @@ export class CapacitorPlatformService implements PlatformService { sql: string, params?: unknown[], ): Promise<{ changes: number; lastId?: number }> { - await this.initializeDatabase(); - if (!this.db) { - throw new Error("Database not initialized"); - } - - try { - const result = await this.db.run(sql, params || []); - const changes = result.changes as Changes; - return { - changes: changes?.changes || 0, - lastId: changes?.lastId, - }; - } catch (error) { - logger.error("Error executing statement:", error); - throw new Error( - `Database execution failed: ${error instanceof Error ? error.message : String(error)}`, - ); - } + await this.waitForInitialization(); + return this.queueOperation<{ changes: number; lastId?: number }>( + "run", + sql, + params || [], + ); } } diff --git a/src/services/platforms/ElectronPlatformService.ts b/src/services/platforms/ElectronPlatformService.ts index 5bdd455f..5700f7d6 100644 --- a/src/services/platforms/ElectronPlatformService.ts +++ b/src/services/platforms/ElectronPlatformService.ts @@ -60,10 +60,17 @@ export class ElectronPlatformService implements PlatformService { await this.runMigrations(); this.initialized = true; - logger.log("SQLite database initialized successfully"); + logger.log( + "[ElectronPlatformService] SQLite database initialized successfully", + ); } catch (error) { - logger.error("Error initializing SQLite database:", error); - throw new Error("Failed to initialize database"); + logger.error( + "[ElectronPlatformService] Error initializing SQLite database:", + error, + ); + throw new Error( + "[ElectronPlatformService] Failed to initialize database", + ); } } diff --git a/src/views/LogView.vue b/src/views/LogView.vue index deecbb56..8ef7bc39 100644 --- a/src/views/LogView.vue +++ b/src/views/LogView.vue @@ -42,6 +42,13 @@ >
+
+

Memory Logs

+
{{ memoryLogs.join("\n") }}
+
@@ -70,6 +77,7 @@ export default class LogView extends Vue { loading = true; logs: Log[] = []; error: string | null = null; + memoryLogs: string[] = []; async mounted() { await this.loadLogs(); @@ -78,6 +86,7 @@ export default class LogView extends Vue { async loadLogs() { try { this.error = null; // Clear any previous errors + this.memoryLogs = databaseUtil.memoryLogs; let allLogs: Log[] = []; const platformService = PlatformServiceFactory.getInstance(); From 03cb4720b8d5e56b22d100186a48aa29527fdf9a Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Wed, 4 Jun 2025 22:01:14 -0600 Subject: [PATCH 74/92] fix Capacitor to use the same migrations (migrations run but accounts aren't created) --- -1748433586226.log | 101 ------------ src/db-sql/migration.ts | 26 +-- src/main.common.ts | 4 +- src/services/AbsurdSqlDatabaseService.ts | 21 ++- src/services/migrationService.ts | 56 ++++--- .../platforms/CapacitorPlatformService.ts | 156 ++++-------------- 6 files changed, 95 insertions(+), 269 deletions(-) delete mode 100644 -1748433586226.log diff --git a/-1748433586226.log b/-1748433586226.log deleted file mode 100644 index c460a7d7..00000000 --- a/-1748433586226.log +++ /dev/null @@ -1,101 +0,0 @@ -VM5:29 [Preload] Preload script starting... -VM5:29 [Preload] Preload script completed successfully -main.common-DiOUyXe7.js:27 Platform Object -error @ main.common-DiOUyXe7.js:27 -main.common-DiOUyXe7.js:27 PWA enabled Object -error @ main.common-DiOUyXe7.js:27 -main.common-DiOUyXe7.js:27 [Web] PWA enabled Object -error @ main.common-DiOUyXe7.js:27 -main.common-DiOUyXe7.js:27 [Web] Platform Object -error @ main.common-DiOUyXe7.js:27 -main.common-DiOUyXe7.js:29 Opened! -main.common-DiOUyXe7.js:2552 Failed to log to database: Error: no such column: value - at E.handleError (main.common-DiOUyXe7.js:27:21133) - at E.exec (main.common-DiOUyXe7.js:27:19785) - at Rc.processQueue (main.common-DiOUyXe7.js:2379:2368) -F7 @ main.common-DiOUyXe7.js:2552 -main.common-DiOUyXe7.js:2552 Original message: PWA enabled - [{"pwa_enabled":false}] -F7 @ main.common-DiOUyXe7.js:2552 -main.common-DiOUyXe7.js:2552 Failed to log to database: Error: no such column: value - at E.handleError (main.common-DiOUyXe7.js:27:21133) - at E.exec (main.common-DiOUyXe7.js:27:19785) - at Rc.processQueue (main.common-DiOUyXe7.js:2379:2368) - at main.common-DiOUyXe7.js:2379:2816 - at new Promise () - at Rc.queueOperation (main.common-DiOUyXe7.js:2379:2685) - at Rc.query (main.common-DiOUyXe7.js:2379:3378) - at async F7 (main.common-DiOUyXe7.js:2552:117) -F7 @ main.common-DiOUyXe7.js:2552 -main.common-DiOUyXe7.js:2552 Original message: [Web] PWA enabled - [{"pwa_enabled":false}] -F7 @ main.common-DiOUyXe7.js:2552 -main.common-DiOUyXe7.js:2552 Failed to log to database: Error: no such column: value - at E.handleError (main.common-DiOUyXe7.js:27:21133) - at E.exec (main.common-DiOUyXe7.js:27:19785) - at Rc.processQueue (main.common-DiOUyXe7.js:2379:2368) - at main.common-DiOUyXe7.js:2379:2816 - at new Promise () - at Rc.queueOperation (main.common-DiOUyXe7.js:2379:2685) - at Rc.query (main.common-DiOUyXe7.js:2379:3378) - at async F7 (main.common-DiOUyXe7.js:2552:117) -F7 @ main.common-DiOUyXe7.js:2552 -main.common-DiOUyXe7.js:2552 Original message: [Web] Platform - [{"platform":"web"}] -F7 @ main.common-DiOUyXe7.js:2552 -main.common-DiOUyXe7.js:2552 Failed to log to database: Error: no such column: value - at E.handleError (main.common-DiOUyXe7.js:27:21133) - at E.exec (main.common-DiOUyXe7.js:27:19785) - at Rc.processQueue (main.common-DiOUyXe7.js:2379:2368) - at main.common-DiOUyXe7.js:2379:2816 - at new Promise () - at Rc.queueOperation (main.common-DiOUyXe7.js:2379:2685) - at Rc.query (main.common-DiOUyXe7.js:2379:3378) - at async F7 (main.common-DiOUyXe7.js:2552:117) -F7 @ main.common-DiOUyXe7.js:2552 -main.common-DiOUyXe7.js:2552 Original message: Platform - [{"platform":"web"}] -F7 @ main.common-DiOUyXe7.js:2552 -main.common-DiOUyXe7.js:2100 - - - GET https://api.endorser.ch/api/report/rateLimits 400 (Bad Request) -(anonymous) @ main.common-DiOUyXe7.js:2100 -xhr @ main.common-DiOUyXe7.js:2100 -p6 @ main.common-DiOUyXe7.js:2102 -_request @ main.common-DiOUyXe7.js:2103 -request @ main.common-DiOUyXe7.js:2102 -Yc. @ main.common-DiOUyXe7.js:2103 -(anonymous) @ main.common-DiOUyXe7.js:2098 -dJ @ main.common-DiOUyXe7.js:2295 -main.common-DiOUyXe7.js:2100 - - - GET https://api.endorser.ch/api/report/rateLimits 400 (Bad Request) -(anonymous) @ main.common-DiOUyXe7.js:2100 -xhr @ main.common-DiOUyXe7.js:2100 -p6 @ main.common-DiOUyXe7.js:2102 -_request @ main.common-DiOUyXe7.js:2103 -request @ main.common-DiOUyXe7.js:2102 -Yc. @ main.common-DiOUyXe7.js:2103 -(anonymous) @ main.common-DiOUyXe7.js:2098 -dJ @ main.common-DiOUyXe7.js:2295 -await in dJ -checkRegistrationStatus @ HomeView-DJMSCuMg.js:1 -mounted @ HomeView-DJMSCuMg.js:1 -XMLHttpRequest.send -(anonymous) @ main.common-DiOUyXe7.js:2100 -xhr @ main.common-DiOUyXe7.js:2100 -p6 @ main.common-DiOUyXe7.js:2102 -_request @ main.common-DiOUyXe7.js:2103 -request @ main.common-DiOUyXe7.js:2102 -Yc. @ main.common-DiOUyXe7.js:2103 -(anonymous) @ main.common-DiOUyXe7.js:2098 -ZG @ main.common-DiOUyXe7.js:2295 -await in ZG -initializeIdentity @ HomeView-DJMSCuMg.js:1 -XMLHttpRequest.send -(anonymous) @ main.common-DiOUyXe7.js:2100 -xhr @ main.common-DiOUyXe7.js:2100 -p6 @ main.common-DiOUyXe7.js:2102 -_request @ main.common-DiOUyXe7.js:2103 -request @ main.common-DiOUyXe7.js:2102 -Yc. @ main.common-DiOUyXe7.js:2103 -(anonymous) @ main.common-DiOUyXe7.js:2098 -dJ @ main.common-DiOUyXe7.js:2295 diff --git a/src/db-sql/migration.ts b/src/db-sql/migration.ts index 7a99724f..9cadd260 100644 --- a/src/db-sql/migration.ts +++ b/src/db-sql/migration.ts @@ -1,5 +1,4 @@ import migrationService from "../services/migrationService"; -import type { QueryExecResult } from "../interfaces/database"; import { DEFAULT_ENDORSER_API_SERVER } from "@/constants/app"; import { arrayBufferToBase64 } from "@/libs/crypto"; @@ -119,16 +118,21 @@ const MIGRATIONS = [ }, ]; -export async function registerMigrations(): Promise { - // Register all migrations +/** + * @param sqlExec - A function that executes a SQL statement and returns the result + * @param extractMigrationNames - A function that extracts the names (string array) from "select name from migrations" + */ +export async function runMigrations( + sqlExec: (sql: string) => Promise, + sqlQuery: (sql: string) => Promise, + extractMigrationNames: (result: T) => Set, +): Promise { for (const migration of MIGRATIONS) { - await migrationService.registerMigration(migration); + migrationService.registerMigration(migration); } -} - -export async function runMigrations( - sqlExec: (sql: string, params?: unknown[]) => Promise>, -): Promise { - await registerMigrations(); - await migrationService.runMigrations(sqlExec); + await migrationService.runMigrations( + sqlExec, + sqlQuery, + extractMigrationNames, + ); } diff --git a/src/main.common.ts b/src/main.common.ts index ce7b6495..93891f01 100644 --- a/src/main.common.ts +++ b/src/main.common.ts @@ -13,8 +13,8 @@ import { logger } from "./utils/logger"; const platform = process.env.VITE_PLATFORM; const pwa_enabled = process.env.VITE_PWA_ENABLED === "true"; -logger.error("Platform", { platform }); -logger.error("PWA enabled", { pwa_enabled }); +logger.error("Platform", JSON.stringify({ platform })); +logger.error("PWA enabled", JSON.stringify({ pwa_enabled })); // Global Error Handler function setupGlobalErrorHandler(app: VueApp) { diff --git a/src/services/AbsurdSqlDatabaseService.ts b/src/services/AbsurdSqlDatabaseService.ts index 878dbea5..6d7dd9c9 100644 --- a/src/services/AbsurdSqlDatabaseService.ts +++ b/src/services/AbsurdSqlDatabaseService.ts @@ -100,10 +100,27 @@ class AbsurdSqlDatabaseService implements DatabaseService { // An error is thrown without this pragma: "File has invalid page size. (the first block of a new file must be written first)" await this.db.exec(`PRAGMA journal_mode=MEMORY;`); - const sqlExec = this.db.exec.bind(this.db); + const sqlExec = this.db.run.bind(this.db); + const sqlQuery = this.db.exec.bind(this.db); + + // Extract the migration names for the absurd-sql format + const extractMigrationNames: (result: QueryExecResult[]) => Set = ( + result, + ) => { + const queryResult = result as QueryExecResult[]; + // Even with the "select name" query, the QueryExecResult may be [] (which doesn't make sense to me). + if (queryResult.length > 0) { + const singleResult = queryResult[0]; + const executedMigrations: Set = new Set( + singleResult.values.map((row) => row[0] as string), + ); + return executedMigrations; + } + return new Set(); + }; // Run migrations - await runMigrations(sqlExec); + await runMigrations(sqlExec, sqlQuery, extractMigrationNames); this.initialized = true; diff --git a/src/services/migrationService.ts b/src/services/migrationService.ts index d571f1ba..8d90b0f4 100644 --- a/src/services/migrationService.ts +++ b/src/services/migrationService.ts @@ -1,6 +1,3 @@ -import { logger } from "@/utils/logger"; -import { QueryExecResult } from "../interfaces/database"; - interface Migration { name: string; sql: string; @@ -19,46 +16,55 @@ export class MigrationService { return MigrationService.instance; } - async registerMigration(migration: Migration): Promise { + registerMigration(migration: Migration) { this.migrations.push(migration); } - async runMigrations( - sqlExec: ( - sql: string, - params?: unknown[], - ) => Promise>, + /** + * @param sqlExec - A function that executes a SQL statement and returns some update result + * @param sqlQuery - A function that executes a SQL query and returns the result in some format + * @param extractMigrationNames - A function that extracts the names (string array) from a "select name from migrations" query + */ + async runMigrations( + // note that this does not take parameters because the Capacitor SQLite 'execute' is different + sqlExec: (sql: string) => Promise, + sqlQuery: (sql: string) => Promise, + extractMigrationNames: (result: T) => Set, ): Promise { + // eslint-disable-next-line no-console + console.log("Will run migrations"); + // Create migrations table if it doesn't exist - await sqlExec(` + const result0 = await sqlExec(` CREATE TABLE IF NOT EXISTS migrations ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL UNIQUE, executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); `); + // eslint-disable-next-line no-console + console.log("Created migrations table", JSON.stringify(result0)); // Get list of executed migrations - const result: QueryExecResult[] = await sqlExec( - "SELECT name FROM migrations;", + const result1: T = await sqlQuery("SELECT name FROM migrations;"); + const executedMigrations = extractMigrationNames(result1); + // eslint-disable-next-line no-console + console.log( + "Executed migration select", + JSON.stringify(executedMigrations), ); - let executedMigrations: Set = new Set(); - // Even with that query, the QueryExecResult may be [] (which doesn't make sense to me). - if (result.length > 0) { - const singleResult = result[0]; - executedMigrations = new Set( - singleResult.values.map((row: unknown[]) => row[0]), - ); - } // Run pending migrations in order for (const migration of this.migrations) { if (!executedMigrations.has(migration.name)) { - await sqlExec(migration.sql); - await sqlExec("INSERT INTO migrations (name) VALUES (?)", [ - migration.name, - ]); - logger.log(`Migration ${migration.name} executed successfully`); + const result2 = await sqlExec(migration.sql); + // eslint-disable-next-line no-console + console.log("Executed migration", JSON.stringify(result2)); + const result3 = await sqlExec( + `INSERT INTO migrations (name) VALUES ('${migration.name}')`, + ); + // eslint-disable-next-line no-console + console.log("Updated migrations table", JSON.stringify(result3)); } } } diff --git a/src/services/platforms/CapacitorPlatformService.ts b/src/services/platforms/CapacitorPlatformService.ts index cd237dfe..cbe6a639 100644 --- a/src/services/platforms/CapacitorPlatformService.ts +++ b/src/services/platforms/CapacitorPlatformService.ts @@ -1,8 +1,3 @@ -import { - ImageResult, - PlatformService, - PlatformCapabilities, -} from "../PlatformService"; import { Filesystem, Directory, Encoding } from "@capacitor/filesystem"; import { Camera, CameraResultType, CameraSource } from "@capacitor/camera"; import { Share } from "@capacitor/share"; @@ -10,15 +5,18 @@ import { SQLiteConnection, SQLiteDBConnection, CapacitorSQLite, + capSQLiteChanges, + DBSQLiteValues, } from "@capacitor-community/sqlite"; -import { logger } from "../../utils/logger"; -import { QueryExecResult } from "@/interfaces/database"; -import { DEFAULT_ENDORSER_API_SERVER } from "@/constants/app"; -interface Migration { - name: string; - sql: string; -} +import { runMigrations } from "@/db-sql/migration"; +import { QueryExecResult } from "@/interfaces/database"; +import { + ImageResult, + PlatformService, + PlatformCapabilities, +} from "../PlatformService"; +import { logger } from "../../utils/logger"; interface QueuedOperation { type: "run" | "query" | "getOneRow" | "getAll"; @@ -39,7 +37,7 @@ interface QueuedOperation { export class CapacitorPlatformService implements PlatformService { private sqlite: SQLiteConnection; private db: SQLiteDBConnection | null = null; - private dbName = "timesafari.db"; + private dbName = "timesafari.sqlite"; private initialized = false; private initializationPromise: Promise | null = null; private operationQueue: Array = []; @@ -95,7 +93,7 @@ export class CapacitorPlatformService implements PlatformService { // await this.db.execute("PRAGMA journal_mode=WAL;"); // Run migrations - await this.runMigrations(); + await this.runCapacitorMigrations(); this.initialized = true; logger.log( @@ -170,7 +168,9 @@ export class CapacitorPlatformService implements PlatformService { } operation.resolve(result); } catch (error) { - logger.error( + // make sure you don't try to log to the DB... infinite loop! + // eslint-disable-next-line no-console + console.error( "[CapacitorPlatformService] Error while processing SQL queue:", error, " ... for sql:", @@ -231,123 +231,23 @@ export class CapacitorPlatformService implements PlatformService { } } - private async runMigrations(): Promise { + private async runCapacitorMigrations(): Promise { if (!this.db) { throw new Error("Database not initialized"); } - // Create migrations table if it doesn't exist - await this.db.execute(` - CREATE TABLE IF NOT EXISTS migrations ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT NOT NULL UNIQUE, - executed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP - ); - `); - - // Get list of executed migrations - const result = await this.db.query("SELECT name FROM migrations;"); - const executedMigrations = new Set( - result.values?.map((row) => row[0]) || [], - ); - - // Run pending migrations in order - const migrations: Migration[] = [ - { - name: "001_initial", - sql: ` - CREATE TABLE IF NOT EXISTS accounts ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - dateCreated TEXT NOT NULL, - derivationPath TEXT, - did TEXT NOT NULL, - identityEncrBase64 TEXT, - mnemonicEncrBase64 TEXT, - passkeyCredIdHex TEXT, - publicKeyHex TEXT NOT NULL - ); - - CREATE INDEX IF NOT EXISTS idx_accounts_did ON accounts(did); - - CREATE TABLE IF NOT EXISTS secret ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - secretBase64 TEXT NOT NULL - ); - - CREATE TABLE IF NOT EXISTS settings ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - accountDid TEXT, - activeDid TEXT, - apiServer TEXT, - filterFeedByNearby BOOLEAN, - filterFeedByVisible BOOLEAN, - finishedOnboarding BOOLEAN, - firstName TEXT, - hideRegisterPromptOnNewContact BOOLEAN, - isRegistered BOOLEAN, - lastName TEXT, - lastAckedOfferToUserJwtId TEXT, - lastAckedOfferToUserProjectsJwtId TEXT, - lastNotifiedClaimId TEXT, - lastViewedClaimId TEXT, - notifyingNewActivityTime TEXT, - notifyingReminderMessage TEXT, - notifyingReminderTime TEXT, - partnerApiServer TEXT, - passkeyExpirationMinutes INTEGER, - profileImageUrl TEXT, - searchBoxes TEXT, - showContactGivesInline BOOLEAN, - showGeneralAdvanced BOOLEAN, - showShortcutBvc BOOLEAN, - vapid TEXT, - warnIfProdServer BOOLEAN, - warnIfTestServer BOOLEAN, - webPushServer TEXT - ); - - CREATE INDEX IF NOT EXISTS idx_settings_accountDid ON settings(accountDid); - - INSERT INTO settings (id, apiServer) VALUES (1, '${DEFAULT_ENDORSER_API_SERVER}'); - - CREATE TABLE IF NOT EXISTS contacts ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - did TEXT NOT NULL, - name TEXT, - contactMethods TEXT, - nextPubKeyHashB64 TEXT, - notes TEXT, - profileImageUrl TEXT, - publicKeyBase64 TEXT, - seesMe BOOLEAN, - registered BOOLEAN - ); - - CREATE INDEX IF NOT EXISTS idx_contacts_did ON contacts(did); - CREATE INDEX IF NOT EXISTS idx_contacts_name ON contacts(name); - - CREATE TABLE IF NOT EXISTS logs ( - date TEXT, - message TEXT NOT NULL - ); - - CREATE TABLE IF NOT EXISTS temp ( - id TEXT PRIMARY KEY, - blobB64 TEXT - ); - `, - }, - ]; - - for (const migration of migrations) { - if (!executedMigrations.has(migration.name)) { - await this.db.execute(migration.sql); - await this.db.run("INSERT INTO migrations (name) VALUES (?)", [ - migration.name, - ]); - logger.log(`Migration ${migration.name} executed successfully`); - } - } + const extractMigrationNames: (result: DBSQLiteValues) => Set = ( + result, + ) => { + const names = + result.values?.map((row: unknown[]) => row[0] as string) || []; + return new Set(names); + }; + const sqlExec: (sql: string) => Promise = + this.db.execute.bind(this.db); + const sqlQuery: (sql: string) => Promise = + this.db.query.bind(this.db); + runMigrations(sqlExec, sqlQuery, extractMigrationNames); } /** From aa177a9b8c360110c49d2568e7637698779525c7 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Thu, 5 Jun 2025 18:13:33 -0600 Subject: [PATCH 75/92] fix extraction of migration names for SQLite via Capacitor --- src/main.common.ts | 4 ++-- src/services/platforms/CapacitorPlatformService.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main.common.ts b/src/main.common.ts index 93891f01..cb44cd6f 100644 --- a/src/main.common.ts +++ b/src/main.common.ts @@ -13,8 +13,8 @@ import { logger } from "./utils/logger"; const platform = process.env.VITE_PLATFORM; const pwa_enabled = process.env.VITE_PWA_ENABLED === "true"; -logger.error("Platform", JSON.stringify({ platform })); -logger.error("PWA enabled", JSON.stringify({ pwa_enabled })); +logger.log("Platform", JSON.stringify({ platform })); +logger.log("PWA enabled", JSON.stringify({ pwa_enabled })); // Global Error Handler function setupGlobalErrorHandler(app: VueApp) { diff --git a/src/services/platforms/CapacitorPlatformService.ts b/src/services/platforms/CapacitorPlatformService.ts index cbe6a639..320c8cc8 100644 --- a/src/services/platforms/CapacitorPlatformService.ts +++ b/src/services/platforms/CapacitorPlatformService.ts @@ -240,7 +240,7 @@ export class CapacitorPlatformService implements PlatformService { result, ) => { const names = - result.values?.map((row: unknown[]) => row[0] as string) || []; + result.values?.map((row: { name: string }) => row.name) || []; return new Set(names); }; const sqlExec: (sql: string) => Promise = From a3951c9d66f35a945e7864dae37d92e5ec1e44cf Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Thu, 5 Jun 2025 18:30:25 -0600 Subject: [PATCH 76/92] refactor for clarity (no logic changes) --- src/services/AbsurdSqlDatabaseService.ts | 11 ++--------- src/services/platforms/CapacitorPlatformService.ts | 8 ++++---- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/services/AbsurdSqlDatabaseService.ts b/src/services/AbsurdSqlDatabaseService.ts index 6d7dd9c9..ee2f00e3 100644 --- a/src/services/AbsurdSqlDatabaseService.ts +++ b/src/services/AbsurdSqlDatabaseService.ts @@ -107,16 +107,9 @@ class AbsurdSqlDatabaseService implements DatabaseService { const extractMigrationNames: (result: QueryExecResult[]) => Set = ( result, ) => { - const queryResult = result as QueryExecResult[]; // Even with the "select name" query, the QueryExecResult may be [] (which doesn't make sense to me). - if (queryResult.length > 0) { - const singleResult = queryResult[0]; - const executedMigrations: Set = new Set( - singleResult.values.map((row) => row[0] as string), - ); - return executedMigrations; - } - return new Set(); + const names = result?.[0]?.values.map((row) => row[0] as string) || []; + return new Set(names); }; // Run migrations diff --git a/src/services/platforms/CapacitorPlatformService.ts b/src/services/platforms/CapacitorPlatformService.ts index 320c8cc8..2fc08599 100644 --- a/src/services/platforms/CapacitorPlatformService.ts +++ b/src/services/platforms/CapacitorPlatformService.ts @@ -236,6 +236,10 @@ export class CapacitorPlatformService implements PlatformService { throw new Error("Database not initialized"); } + const sqlExec: (sql: string) => Promise = + this.db.execute.bind(this.db); + const sqlQuery: (sql: string) => Promise = + this.db.query.bind(this.db); const extractMigrationNames: (result: DBSQLiteValues) => Set = ( result, ) => { @@ -243,10 +247,6 @@ export class CapacitorPlatformService implements PlatformService { result.values?.map((row: { name: string }) => row.name) || []; return new Set(names); }; - const sqlExec: (sql: string) => Promise = - this.db.execute.bind(this.db); - const sqlQuery: (sql: string) => Promise = - this.db.query.bind(this.db); runMigrations(sqlExec, sqlQuery, extractMigrationNames); } From 5bb563d69486b52a29805eb4a45a0f761aa993f3 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Thu, 5 Jun 2025 19:57:59 -0600 Subject: [PATCH 77/92] fix extraction of values from SQLite queries --- src/services/platforms/CapacitorPlatformService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/platforms/CapacitorPlatformService.ts b/src/services/platforms/CapacitorPlatformService.ts index 2fc08599..eb142196 100644 --- a/src/services/platforms/CapacitorPlatformService.ts +++ b/src/services/platforms/CapacitorPlatformService.ts @@ -145,7 +145,7 @@ export class CapacitorPlatformService implements PlatformService { ); result = { columns: [], // SQLite plugin doesn't provide column names - values: queryResult.values || [], + values: (queryResult.values || []).map((row) => Object.values(row)), }; break; } From 6e1fcd8dee28ae603fb91ed1dbf0b30500ee1531 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Thu, 5 Jun 2025 20:00:51 -0600 Subject: [PATCH 78/92] remove unused DB methods (for now) --- src/interfaces/database.ts | 2 -- src/services/AbsurdSqlDatabaseService.ts | 26 ++----------------- .../platforms/CapacitorPlatformService.ts | 22 +++------------- 3 files changed, 6 insertions(+), 44 deletions(-) diff --git a/src/interfaces/database.ts b/src/interfaces/database.ts index 4dda80ef..7f491e6b 100644 --- a/src/interfaces/database.ts +++ b/src/interfaces/database.ts @@ -12,6 +12,4 @@ export interface DatabaseService { sql: string, params?: unknown[], ): Promise<{ changes: number; lastId?: number }>; - getOneRow(sql: string, params?: unknown[]): Promise; - getAll(sql: string, params?: unknown[]): Promise; } diff --git a/src/services/AbsurdSqlDatabaseService.ts b/src/services/AbsurdSqlDatabaseService.ts index ee2f00e3..0b107280 100644 --- a/src/services/AbsurdSqlDatabaseService.ts +++ b/src/services/AbsurdSqlDatabaseService.ts @@ -7,7 +7,7 @@ import type { DatabaseService, QueryExecResult } from "../interfaces/database"; import { logger } from "@/utils/logger"; interface QueuedOperation { - type: "run" | "query" | "getOneRow" | "getAll"; + type: "run" | "query"; sql: string; params: unknown[]; resolve: (value: unknown) => void; @@ -84,7 +84,7 @@ class AbsurdSqlDatabaseService implements DatabaseService { SQL.FS.mkdir("/sql"); SQL.FS.mount(sqlFS, {}, "/sql"); - const path = "/sql/timesafari.sqlite"; + const path = "/sql/timesafari.absurd-sql"; if (typeof SharedArrayBuffer === "undefined") { const stream = SQL.FS.open(path, "a+"); await stream.node.contents.readIfFallback(); @@ -133,7 +133,6 @@ class AbsurdSqlDatabaseService implements DatabaseService { if (!operation) continue; try { - let queryResult: QueryExecResult[] = []; let result: unknown; switch (operation.type) { case "run": @@ -142,14 +141,6 @@ class AbsurdSqlDatabaseService implements DatabaseService { case "query": result = await this.db.exec(operation.sql, operation.params); break; - case "getOneRow": - queryResult = await this.db.exec(operation.sql, operation.params); - result = queryResult[0]?.values[0]; - break; - case "getAll": - queryResult = await this.db.exec(operation.sql, operation.params); - result = queryResult[0]?.values || []; - break; } operation.resolve(result); } catch (error) { @@ -232,19 +223,6 @@ class AbsurdSqlDatabaseService implements DatabaseService { await this.waitForInitialization(); return this.queueOperation("query", sql, params); } - - async getOneRow( - sql: string, - params: unknown[] = [], - ): Promise { - await this.waitForInitialization(); - return this.queueOperation("getOneRow", sql, params); - } - - async getAll(sql: string, params: unknown[] = []): Promise { - await this.waitForInitialization(); - return this.queueOperation("getAll", sql, params); - } } // Create a singleton instance diff --git a/src/services/platforms/CapacitorPlatformService.ts b/src/services/platforms/CapacitorPlatformService.ts index eb142196..32579b85 100644 --- a/src/services/platforms/CapacitorPlatformService.ts +++ b/src/services/platforms/CapacitorPlatformService.ts @@ -19,7 +19,7 @@ import { import { logger } from "../../utils/logger"; interface QueuedOperation { - type: "run" | "query" | "getOneRow" | "getAll"; + type: "run" | "query"; sql: string; params: unknown[]; resolve: (value: unknown) => void; @@ -145,26 +145,12 @@ export class CapacitorPlatformService implements PlatformService { ); result = { columns: [], // SQLite plugin doesn't provide column names - values: (queryResult.values || []).map((row) => Object.values(row)), + values: (queryResult.values || []).map((row) => + Object.values(row), + ), }; break; } - case "getOneRow": { - const oneRowResult = await this.db.query( - operation.sql, - operation.params, - ); - result = oneRowResult.values?.[0]; - break; - } - case "getAll": { - const allResult = await this.db.query( - operation.sql, - operation.params, - ); - result = allResult.values || []; - break; - } } operation.resolve(result); } catch (error) { From c5228ba7ecd8b022c9d0dd22b82d04626817bde8 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Thu, 5 Jun 2025 20:06:32 -0600 Subject: [PATCH 79/92] fix retrieval of column names -- so now most ops are working (but not all, eg. set name) --- src/services/platforms/CapacitorPlatformService.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/platforms/CapacitorPlatformService.ts b/src/services/platforms/CapacitorPlatformService.ts index 32579b85..cbf83f79 100644 --- a/src/services/platforms/CapacitorPlatformService.ts +++ b/src/services/platforms/CapacitorPlatformService.ts @@ -144,7 +144,7 @@ export class CapacitorPlatformService implements PlatformService { operation.params, ); result = { - columns: [], // SQLite plugin doesn't provide column names + columns: Object.keys(queryResult.values?.[0] || {}), values: (queryResult.values || []).map((row) => Object.values(row), ), From 1d7f6266458cb3446aedd4738cd11ff50406359f Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Thu, 5 Jun 2025 20:11:32 -0600 Subject: [PATCH 80/92] fix SQL references to bad "key" -> "id" --- src/components/UserNameDialog.vue | 2 +- src/views/ContactQRScanShowView.vue | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/UserNameDialog.vue b/src/components/UserNameDialog.vue index af504930..36191771 100644 --- a/src/components/UserNameDialog.vue +++ b/src/components/UserNameDialog.vue @@ -74,7 +74,7 @@ export default class UserNameDialog extends Vue { async onClickSaveChanges() { const platformService = PlatformServiceFactory.getInstance(); await platformService.dbExec( - "UPDATE settings SET firstName = ? WHERE key = ?", + "UPDATE settings SET firstName = ? WHERE id = ?", [this.givenName, MASTER_SETTINGS_KEY], ); if (USE_DEXIE_DB) { diff --git a/src/views/ContactQRScanShowView.vue b/src/views/ContactQRScanShowView.vue index d4f6ae9e..ae1d2e6c 100644 --- a/src/views/ContactQRScanShowView.vue +++ b/src/views/ContactQRScanShowView.vue @@ -848,7 +848,7 @@ export default class ContactQRScanShow extends Vue { if (stopAsking) { const platformService = PlatformServiceFactory.getInstance(); await platformService.dbExec( - "UPDATE settings SET hideRegisterPromptOnNewContact = ? WHERE key = ?", + "UPDATE settings SET hideRegisterPromptOnNewContact = ? WHERE id = ?", [stopAsking, MASTER_SETTINGS_KEY], ); if (USE_DEXIE_DB) { @@ -863,7 +863,7 @@ export default class ContactQRScanShow extends Vue { if (stopAsking) { const platformService = PlatformServiceFactory.getInstance(); await platformService.dbExec( - "UPDATE settings SET hideRegisterPromptOnNewContact = ? WHERE key = ?", + "UPDATE settings SET hideRegisterPromptOnNewContact = ? WHERE id = ?", [stopAsking, MASTER_SETTINGS_KEY], ); if (USE_DEXIE_DB) { From 9d4f726c3153a3006137711a830c2a68b17375bf Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Thu, 5 Jun 2025 20:30:27 -0600 Subject: [PATCH 81/92] bump to build # 19 version 0.4.7 for mobile packages --- BUILDING.md | 4 ++-- CHANGELOG.md | 7 +++++++ android/app/build.gradle | 2 +- ios/App/App.xcodeproj/project.pbxproj | 4 ++-- package.json | 2 +- 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/BUILDING.md b/BUILDING.md index 62fb27e8..8e21d218 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -356,7 +356,7 @@ Prerequisites: macOS with Xcode installed xcrun agvtool new-version 15 # Unfortunately this edits Info.plist directly. #xcrun agvtool new-marketing-version 0.4.5 - cat App.xcodeproj/project.pbxproj | sed "s/MARKETING_VERSION = .*;/MARKETING_VERSION = 0.4.5;/g" > temp + cat App.xcodeproj/project.pbxproj | sed "s/MARKETING_VERSION = .*;/MARKETING_VERSION = 0.4.7;/g" > temp mv temp App.xcodeproj/project.pbxproj cd - ``` @@ -374,7 +374,7 @@ Prerequisites: macOS with Xcode installed 7. Release * Under "General" renamed a bunch of things to "Time Safari" - * Choose Product -> Destination -> Build Any iOS + * Choose Product -> Destination -> Any iOS Device * Choose Product -> Archive * This will trigger a build and take time, needing user's "login" keychain password which is just their login password, repeatedly. * If it fails with `building for 'iOS', but linking in dylib (.../.pkgx/zlib.net/v1.3.0/lib/libz.1.3.dylib) built for 'macOS'` then run XCode outside that terminal (ie. not with `npx cap open ios`). diff --git a/CHANGELOG.md b/CHANGELOG.md index c4c03a02..71657a57 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 +## [0.4.7] +### Fixed +- Cameras everywhere +### Changed +- IndexedDB -> SQLite + + ## [0.4.5] - 2025.02.23 ### Added - Total amounts of gives on project page diff --git a/android/app/build.gradle b/android/app/build.gradle index 6bd27bb8..fb01f52d 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -31,7 +31,7 @@ android { applicationId "app.timesafari.app" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 18 + versionCode 19 versionName "0.4.7" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" aaptOptions { diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj index 0c89bf53..45b03396 100644 --- a/ios/App/App.xcodeproj/project.pbxproj +++ b/ios/App/App.xcodeproj/project.pbxproj @@ -384,7 +384,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 18; + CURRENT_PROJECT_VERSION = 19; DEVELOPMENT_TEAM = GM3FS5JQPH; ENABLE_APP_SANDBOX = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -411,7 +411,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 18; + CURRENT_PROJECT_VERSION = 19; DEVELOPMENT_TEAM = GM3FS5JQPH; ENABLE_APP_SANDBOX = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO; diff --git a/package.json b/package.json index b9fafaae..22988a40 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "timesafari", - "version": "0.4.6", + "version": "0.4.7", "description": "Time Safari Application", "author": { "name": "Time Safari Team" From c1f2c3951abbbada25868c13690ecce513b9a400 Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Fri, 6 Jun 2025 09:22:35 +0000 Subject: [PATCH 82/92] feat(db): improve settings retrieval resilience and logging Enhance retrieveSettingsForActiveAccount with better error handling and logging while maintaining core functionality. Changes focus on making the system more debuggable and resilient without overcomplicating the logic. Key improvements: - Add structured error handling with specific try-catch blocks - Implement detailed logging with [databaseUtil] prefix for easy filtering - Add graceful fallbacks for searchBoxes parsing and missing settings - Improve error recovery paths with safe defaults - Maintain existing security model and data integrity Security: - No sensitive data in logs - Safe JSON parsing with fallbacks - Proper error boundaries - Consistent state management - Clear fallback paths Testing: - Verify settings retrieval works with/without active DID - Check error handling for invalid searchBoxes - Confirm logging provides clear debugging context - Validate fallback to default settings works --- package-lock.json | 4 +- src/db/databaseUtil.ts | 107 +++++++--- src/libs/util.ts | 39 ++-- .../platforms/CapacitorPlatformService.ts | 4 + src/views/AccountViewView.vue | 2 + src/views/HomeView.vue | 184 +++++++++++------- src/views/IdentitySwitcherView.vue | 21 +- 7 files changed, 253 insertions(+), 108 deletions(-) diff --git a/package-lock.json b/package-lock.json index 579ccd38..4e5c1b11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "timesafari", - "version": "0.4.6", + "version": "0.4.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "timesafari", - "version": "0.4.6", + "version": "0.4.7", "dependencies": { "@capacitor-community/sqlite": "6.0.2", "@capacitor-mlkit/barcode-scanning": "^6.0.0", diff --git a/src/db/databaseUtil.ts b/src/db/databaseUtil.ts index a0fdd87e..69c80b05 100644 --- a/src/db/databaseUtil.ts +++ b/src/db/databaseUtil.ts @@ -79,10 +79,13 @@ const DEFAULT_SETTINGS: Settings = { // retrieves default settings export async function retrieveSettingsForDefaultAccount(): Promise { + console.log("[databaseUtil] retrieveSettingsForDefaultAccount"); const platform = PlatformServiceFactory.getInstance(); - const result = await platform.dbQuery("SELECT * FROM settings WHERE id = ?", [ - MASTER_SETTINGS_KEY, - ]); + const sql = "SELECT * FROM settings WHERE id = ?"; + console.log("[databaseUtil] sql", sql); + const result = await platform.dbQuery(sql, [MASTER_SETTINGS_KEY]); + console.log("[databaseUtil] result", JSON.stringify(result, null, 2)); + console.trace("Trace from [retrieveSettingsForDefaultAccount]"); if (!result) { return DEFAULT_SETTINGS; } else { @@ -98,28 +101,86 @@ export async function retrieveSettingsForDefaultAccount(): Promise { } } +/** + * Retrieves settings for the active account, merging with default settings + * + * @returns Promise Combined settings with account-specific overrides + * @throws Will log specific errors for debugging but returns default settings on failure + */ export async function retrieveSettingsForActiveAccount(): Promise { - const defaultSettings = await retrieveSettingsForDefaultAccount(); - if (!defaultSettings.activeDid) { - return defaultSettings; - } else { - const platform = PlatformServiceFactory.getInstance(); - const result = await platform.dbQuery( - "SELECT * FROM settings WHERE accountDid = ?", - [defaultSettings.activeDid], - ); - const overrideSettings = result - ? (mapColumnsToValues(result.columns, result.values)[0] as Settings) - : {}; - const overrideSettingsFiltered = Object.fromEntries( - Object.entries(overrideSettings).filter(([_, v]) => v !== null), - ); - const settings = { ...defaultSettings, ...overrideSettingsFiltered }; - if (settings.searchBoxes) { - // @ts-expect-error - the searchBoxes field is a string in the DB - settings.searchBoxes = JSON.parse(settings.searchBoxes); + logConsoleAndDb("[databaseUtil] Starting settings retrieval for active account"); + + try { + // Get default settings first + const defaultSettings = await retrieveSettingsForDefaultAccount(); + logConsoleAndDb(`[databaseUtil] Retrieved default settings (hasActiveDid: ${!!defaultSettings.activeDid})`); + + // If no active DID, return defaults + if (!defaultSettings.activeDid) { + logConsoleAndDb("[databaseUtil] No active DID found, returning default settings"); + return defaultSettings; } - return settings; + + // Get account-specific settings + try { + const platform = PlatformServiceFactory.getInstance(); + const result = await platform.dbQuery( + "SELECT * FROM settings WHERE accountDid = ?", + [defaultSettings.activeDid], + ); + + if (!result?.values?.length) { + logConsoleAndDb(`[databaseUtil] No account-specific settings found for ${defaultSettings.activeDid}`); + return defaultSettings; + } + + // Map and filter settings + const overrideSettings = mapColumnsToValues(result.columns, result.values)[0] as Settings; + const overrideSettingsFiltered = Object.fromEntries( + Object.entries(overrideSettings).filter(([_, v]) => v !== null), + ); + + // Merge settings + const settings = { ...defaultSettings, ...overrideSettingsFiltered }; + + // Handle searchBoxes parsing + if (settings.searchBoxes) { + try { + // @ts-expect-error - the searchBoxes field is a string in the DB + settings.searchBoxes = JSON.parse(settings.searchBoxes); + } catch (error) { + logConsoleAndDb( + `[databaseUtil] Failed to parse searchBoxes for ${defaultSettings.activeDid}: ${error}`, + true + ); + // Reset to empty array on parse failure + settings.searchBoxes = []; + } + } + + logConsoleAndDb( + `[databaseUtil] Successfully merged settings for ${defaultSettings.activeDid} ` + + `(overrides: ${Object.keys(overrideSettingsFiltered).length})` + ); + return settings; + + } catch (error) { + logConsoleAndDb( + `[databaseUtil] Failed to retrieve account settings for ${defaultSettings.activeDid}: ${error}`, + true + ); + // Return defaults on error + return defaultSettings; + } + + } catch (error) { + logConsoleAndDb(`[databaseUtil] Failed to retrieve default settings: ${error}`, true); + // Return minimal default settings on complete failure + return { + id: MASTER_SETTINGS_KEY, + activeDid: undefined, + apiServer: DEFAULT_ENDORSER_API_SERVER, + }; } } diff --git a/src/libs/util.ts b/src/libs/util.ts index b93f38c5..035bd164 100644 --- a/src/libs/util.ts +++ b/src/libs/util.ts @@ -548,14 +548,20 @@ export const retrieveAccountMetadata = async ( }; export const retrieveAllAccountsMetadata = async (): Promise => { + console.log("[retrieveAllAccountsMetadata] start"); const platformService = PlatformServiceFactory.getInstance(); - const dbAccounts = await platformService.dbQuery(`SELECT * FROM accounts`); + const sql = `SELECT * FROM accounts`; + console.log("[retrieveAllAccountsMetadata] sql: ", sql); + const dbAccounts = await platformService.dbQuery(sql); + console.log("[retrieveAllAccountsMetadata] dbAccounts: ", dbAccounts); const accounts = databaseUtil.mapQueryResultToValues(dbAccounts) as Account[]; let result = accounts.map((account) => { // eslint-disable-next-line @typescript-eslint/no-unused-vars const { identity, mnemonic, ...metadata } = account; return metadata as Account; }); + console.log("[retrieveAllAccountsMetadata] result: ", result); + console.log("[retrieveAllAccountsMetadata] USE_DEXIE_DB: ", USE_DEXIE_DB); if (USE_DEXIE_DB) { // one of the few times we use accountsDBPromise directly; try to avoid more usage const accountsDB = await accountsDBPromise; @@ -566,6 +572,7 @@ export const retrieveAllAccountsMetadata = async (): Promise => { return metadata as Account; }); } + console.log("[retrieveAllAccountsMetadata] end", JSON.stringify(result, null, 2)); return result; }; @@ -646,6 +653,10 @@ export async function saveNewIdentity( derivationPath: string, ): Promise { try { + console.log("[saveNewIdentity] identity", identity); + console.log("[saveNewIdentity] mnemonic", mnemonic); + console.log("[saveNewIdentity] newId", newId); + console.log("[saveNewIdentity] derivationPath", derivationPath); // add to the new sql db const platformService = PlatformServiceFactory.getInstance(); const secrets = await platformService.dbQuery( @@ -662,18 +673,19 @@ export async function saveNewIdentity( const encryptedMnemonic = await simpleEncrypt(mnemonic, secret); const encryptedIdentityBase64 = arrayBufferToBase64(encryptedIdentity); const encryptedMnemonicBase64 = arrayBufferToBase64(encryptedMnemonic); - await platformService.dbExec( - `INSERT INTO accounts (dateCreated, derivationPath, did, identityEncrBase64, mnemonicEncrBase64, publicKeyHex) - VALUES (?, ?, ?, ?, ?, ?)`, - [ - new Date().toISOString(), - derivationPath, - newId.did, - encryptedIdentityBase64, - encryptedMnemonicBase64, - newId.keys[0].publicKeyHex, - ], - ); + const sql = `INSERT INTO accounts (dateCreated, derivationPath, did, identityEncrBase64, mnemonicEncrBase64, publicKeyHex) + VALUES (?, ?, ?, ?, ?, ?)`; + console.log("[saveNewIdentity] sql: ", sql); + const params = [ + new Date().toISOString(), + derivationPath, + newId.did, + encryptedIdentityBase64, + encryptedMnemonicBase64, + newId.keys[0].publicKeyHex, + ]; + console.log("[saveNewIdentity] params: ", params); + await platformService.dbExec(sql, params); await databaseUtil.updateDefaultSettings({ activeDid: newId.did }); if (USE_DEXIE_DB) { @@ -690,6 +702,7 @@ export async function saveNewIdentity( await updateDefaultSettings({ activeDid: newId.did }); } } catch (error) { + console.log("[saveNewIdentity] error: ", error); logger.error("Failed to update default settings:", error); throw new Error( "Failed to set default settings. Please try again or restart the app.", diff --git a/src/services/platforms/CapacitorPlatformService.ts b/src/services/platforms/CapacitorPlatformService.ts index cbf83f79..1ce0bca7 100644 --- a/src/services/platforms/CapacitorPlatformService.ts +++ b/src/services/platforms/CapacitorPlatformService.ts @@ -128,6 +128,8 @@ export class CapacitorPlatformService implements PlatformService { let result: unknown; switch (operation.type) { case "run": { + console.log("[CapacitorPlatformService] running sql:", operation.sql); + console.log("[CapacitorPlatformService] params:", operation.params); const runResult = await this.db.run( operation.sql, operation.params, @@ -139,6 +141,8 @@ export class CapacitorPlatformService implements PlatformService { break; } case "query": { + console.log("[CapacitorPlatformService] querying sql:", operation.sql); + console.log("[CapacitorPlatformService] params:", operation.params); const queryResult = await this.db.query( operation.sql, operation.params, diff --git a/src/views/AccountViewView.vue b/src/views/AccountViewView.vue index 22f342f1..66e4bf74 100644 --- a/src/views/AccountViewView.vue +++ b/src/views/AccountViewView.vue @@ -1119,6 +1119,7 @@ export default class AccountViewView extends Vue { */ async mounted() { try { + console.log("[AccountViewView] mounted"); // Initialize component state with values from the database or defaults await this.initializeState(); await this.processIdentity(); @@ -1171,6 +1172,7 @@ export default class AccountViewView extends Vue { } } } catch (error) { + console.log("[AccountViewView] error: ", JSON.stringify(error, null, 2)); // this can happen when running automated tests in dev mode because notifications don't work logger.error( "Telling user to clear cache at page create because:", diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index 4bd03745..e42f0929 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -515,49 +515,85 @@ export default class HomeView extends Vue { */ private async initializeIdentity() { try { - this.allMyDids = await retrieveAccountDids(); + // Retrieve DIDs with better error handling + try { + this.allMyDids = await retrieveAccountDids(); + logConsoleAndDb(`[HomeView] Retrieved ${this.allMyDids.length} DIDs`); + } catch (error) { + logConsoleAndDb(`[HomeView] Failed to retrieve DIDs: ${error}`, true); + throw new Error("Failed to load existing identities. Please try restarting the app."); + } + + // Create new DID if needed if (this.allMyDids.length === 0) { - this.isCreatingIdentifier = true; - const newDid = await generateSaveAndActivateIdentity(); - this.isCreatingIdentifier = false; - this.allMyDids = [newDid]; + try { + this.isCreatingIdentifier = true; + const newDid = await generateSaveAndActivateIdentity(); + this.isCreatingIdentifier = false; + this.allMyDids = [newDid]; + logConsoleAndDb(`[HomeView] Created new identity: ${newDid}`); + } catch (error) { + this.isCreatingIdentifier = false; + logConsoleAndDb(`[HomeView] Failed to create new identity: ${error}`, true); + throw new Error("Failed to create new identity. Please try again."); + } } - let settings = await databaseUtil.retrieveSettingsForActiveAccount(); - if (USE_DEXIE_DB) { - settings = await retrieveSettingsForActiveAccount(); + // Load settings with better error context + let settings; + try { + settings = await databaseUtil.retrieveSettingsForActiveAccount(); + if (USE_DEXIE_DB) { + settings = await retrieveSettingsForActiveAccount(); + } + logConsoleAndDb(`[HomeView] Retrieved settings for ${settings.activeDid || 'no active DID'}`); + } catch (error) { + logConsoleAndDb(`[HomeView] Failed to retrieve settings: ${error}`, true); + throw new Error("Failed to load user settings. Some features may be limited."); } + + // Update component state this.apiServer = settings.apiServer || ""; this.activeDid = settings.activeDid || ""; - const platformService = PlatformServiceFactory.getInstance(); - const dbContacts = await platformService.dbQuery( - "SELECT * FROM contacts", - ); - this.allContacts = databaseUtil.mapQueryResultToValues( - dbContacts, - ) as unknown as Contact[]; - if (USE_DEXIE_DB) { - this.allContacts = await db.contacts.toArray(); + + // Load contacts with graceful fallback + try { + const platformService = PlatformServiceFactory.getInstance(); + const dbContacts = await platformService.dbQuery("SELECT * FROM contacts"); + this.allContacts = databaseUtil.mapQueryResultToValues(dbContacts) as Contact[]; + if (USE_DEXIE_DB) { + this.allContacts = await db.contacts.toArray(); + } + logConsoleAndDb(`[HomeView] Retrieved ${this.allContacts.length} contacts`); + } catch (error) { + logConsoleAndDb(`[HomeView] Failed to retrieve contacts: ${error}`, true); + this.allContacts = []; // Ensure we have a valid empty array + this.$notify({ + group: "alert", + type: "warning", + title: "Contact Loading Issue", + text: "Some contact information may be unavailable.", + }, 5000); } + + // Update remaining settings this.feedLastViewedClaimId = settings.lastViewedClaimId; this.givenName = settings.firstName || ""; this.isFeedFilteredByVisible = !!settings.filterFeedByVisible; this.isFeedFilteredByNearby = !!settings.filterFeedByNearby; this.isRegistered = !!settings.isRegistered; this.lastAckedOfferToUserJwtId = settings.lastAckedOfferToUserJwtId; - this.lastAckedOfferToUserProjectsJwtId = - settings.lastAckedOfferToUserProjectsJwtId; + this.lastAckedOfferToUserProjectsJwtId = settings.lastAckedOfferToUserProjectsJwtId; this.searchBoxes = settings.searchBoxes || []; this.showShortcutBvc = !!settings.showShortcutBvc; this.isAnyFeedFilterOn = checkIsAnyFeedFilterOn(settings); + // Check onboarding status if (!settings.finishedOnboarding) { - (this.$refs.onboardingDialog as OnboardingDialog).open( - OnboardPage.Home, - ); + (this.$refs.onboardingDialog as OnboardingDialog).open(OnboardPage.Home); } - // someone may have have registered after sharing contact info, so recheck + // Check registration status if needed if (!this.isRegistered && this.activeDid) { try { const resp = await fetchEndorserRateLimits( @@ -577,51 +613,62 @@ export default class HomeView extends Vue { }); } this.isRegistered = true; + logConsoleAndDb(`[HomeView] User ${this.activeDid} is now registered`); } - } catch (e) { - // ignore the error... just keep us unregistered + } catch (error) { + logConsoleAndDb(`[HomeView] Registration check failed: ${error}`, true); + // Continue as unregistered - this is expected for new users } } - // this returns a Promise but we don't need to wait for it - this.updateAllFeed(); - - if (this.activeDid) { - const offersToUserData = await getNewOffersToUser( - this.axios, - this.apiServer, - this.activeDid, - this.lastAckedOfferToUserJwtId, - ); - this.numNewOffersToUser = offersToUserData.data.length; - this.newOffersToUserHitLimit = offersToUserData.hitLimit; - } + // Initialize feed and offers + try { + // Start feed update in background + this.updateAllFeed().catch(error => { + logConsoleAndDb(`[HomeView] Background feed update failed: ${error}`, true); + }); - if (this.activeDid) { - const offersToUserProjects = await getNewOffersToUserProjects( - this.axios, - this.apiServer, - this.activeDid, - this.lastAckedOfferToUserProjectsJwtId, - ); - this.numNewOffersToUserProjects = offersToUserProjects.data.length; - this.newOffersToUserProjectsHitLimit = offersToUserProjects.hitLimit; + // Load new offers if we have an active DID + if (this.activeDid) { + const [offersToUser, offersToProjects] = await Promise.all([ + getNewOffersToUser( + this.axios, + this.apiServer, + this.activeDid, + this.lastAckedOfferToUserJwtId, + ), + getNewOffersToUserProjects( + this.axios, + this.apiServer, + this.activeDid, + this.lastAckedOfferToUserProjectsJwtId, + ), + ]); + + this.numNewOffersToUser = offersToUser.data.length; + this.newOffersToUserHitLimit = offersToUser.hitLimit; + this.numNewOffersToUserProjects = offersToProjects.data.length; + this.newOffersToUserProjectsHitLimit = offersToProjects.hitLimit; + + logConsoleAndDb( + `[HomeView] Retrieved ${this.numNewOffersToUser} user offers and ` + + `${this.numNewOffersToUserProjects} project offers` + ); + } + } catch (error) { + logConsoleAndDb(`[HomeView] Failed to initialize feed/offers: ${error}`, true); + // Don't throw - we can continue with empty feed + this.$notify({ + group: "alert", + type: "warning", + title: "Feed Loading Issue", + text: "Some feed data may be unavailable. Pull to refresh.", + }, 5000); } - // eslint-disable-next-line @typescript-eslint/no-explicit-any - } catch (err: any) { - logConsoleAndDb("Error retrieving settings or feed: " + err, true); - this.$notify( - { - group: "alert", - type: "danger", - title: "Error", - text: - (err as { userMessage?: string })?.userMessage || - "There was an error retrieving your settings or the latest activity.", - }, - 5000, - ); + } catch (error) { + this.handleError(error); + throw error; // Re-throw to be caught by mounted() } } @@ -784,19 +831,24 @@ export default class HomeView extends Vue { * - Displays user notification * * @internal - * Called by mounted() + * Called by mounted() and initializeIdentity() * @param err Error object with optional userMessage */ private handleError(err: unknown) { - logConsoleAndDb("Error retrieving settings or feed: " + err, true); + const errorMessage = err instanceof Error ? err.message : String(err); + const userMessage = (err as { userMessage?: string })?.userMessage; + + logConsoleAndDb( + `[HomeView] Initialization error: ${errorMessage}${userMessage ? ` (${userMessage})` : ''}`, + true + ); + this.$notify( { group: "alert", type: "danger", title: "Error", - text: - (err as { userMessage?: string })?.userMessage || - "There was an error retrieving your settings or the latest activity.", + text: userMessage || "There was an error loading your data. Please try refreshing the page.", }, 5000, ); diff --git a/src/views/IdentitySwitcherView.vue b/src/views/IdentitySwitcherView.vue index 143506e8..cfb6908b 100644 --- a/src/views/IdentitySwitcherView.vue +++ b/src/views/IdentitySwitcherView.vue @@ -115,6 +115,7 @@ import { MASTER_SETTINGS_KEY } from "../db/tables/settings"; import * as databaseUtil from "../db/databaseUtil"; import { retrieveAllAccountsMetadata } from "../libs/util"; import { logger } from "../utils/logger"; +import { PlatformServiceFactory } from "@/services/PlatformServiceFactory"; @Component({ components: { QuickNav } }) export default class IdentitySwitcherView extends Vue { @@ -138,8 +139,10 @@ export default class IdentitySwitcherView extends Vue { this.apiServerInput = settings.apiServer || ""; const accounts = await retrieveAllAccountsMetadata(); + console.log("[IdentitySwitcherView] accounts: ", JSON.stringify(accounts, null, 2)); for (let n = 0; n < accounts.length; n++) { const acct = accounts[n]; + console.log("[IdentitySwitcherView] acct: ", JSON.stringify(acct, null, 2)); this.otherIdentities.push({ id: (acct.id ?? 0).toString(), did: acct.did, @@ -149,6 +152,7 @@ export default class IdentitySwitcherView extends Vue { } } } catch (err) { + console.log("[IdentitySwitcherView] error: ", JSON.stringify(err, null, 2)); this.$notify( { group: "alert", @@ -160,6 +164,7 @@ export default class IdentitySwitcherView extends Vue { ); logger.error("Telling user to clear cache at page create because:", err); } + console.log("[IdentitySwitcherView] end"); } async switchAccount(did?: string) { @@ -167,10 +172,18 @@ export default class IdentitySwitcherView extends Vue { if (did === "0") { did = undefined; } - await db.open(); - await db.settings.update(MASTER_SETTINGS_KEY, { - activeDid: did, - }); + if (USE_DEXIE_DB) { + await db.open(); + await db.settings.update(MASTER_SETTINGS_KEY, { + activeDid: did ?? "", + }); + } else { + const platformService = PlatformServiceFactory.getInstance(); + await platformService.dbExec( + `UPDATE settings SET activeDid = ? WHERE id = ?`, + [did ?? "", MASTER_SETTINGS_KEY], + ); + } this.$router.push({ name: "account" }); } From fc50a9d4c68cbb22181ae13e7a5df73b82700c5b Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Fri, 6 Jun 2025 19:06:29 -0600 Subject: [PATCH 83/92] fix problem finding offer identifiers --- src/libs/endorserServer.ts | 2 +- src/libs/util.ts | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/libs/endorserServer.ts b/src/libs/endorserServer.ts index 41c2a6ac..6febf7e9 100644 --- a/src/libs/endorserServer.ts +++ b/src/libs/endorserServer.ts @@ -136,7 +136,7 @@ export function isDid(did: string): boolean { * @param {string} did - The DID to check * @returns {boolean} True if DID is hidden */ -export function isHiddenDid(did: string): boolean { +export function isHiddenDid(did: string | undefined): boolean { return did === HIDDEN_DID; } diff --git a/src/libs/util.ts b/src/libs/util.ts index 035bd164..7c2dc7a4 100644 --- a/src/libs/util.ts +++ b/src/libs/util.ts @@ -42,6 +42,7 @@ import { createPeerDid } from "../libs/crypto/vc/didPeer"; import { registerCredential } from "../libs/crypto/vc/passkeyDidPeer"; import { logger } from "../utils/logger"; import { PlatformServiceFactory } from "@/services/PlatformServiceFactory"; +import OfferDetailsView from "@/views/OfferDetailsView.vue"; export interface GiverReceiverInputInfo { did?: string; @@ -382,11 +383,11 @@ export function offerGiverDid( ): string | undefined { let giver; const claim = veriClaim.claim as OfferVerifiableCredential; - if ( - claim.credentialSubject.offeredBy?.identifier && - !serverUtil.isHiddenDid(claim.credentialSubject.offeredBy.identifier) - ) { - giver = claim.credentialSubject.offeredBy.identifier; + const offeredBy: { identifier?: string } | undefined = + claim.offeredBy || claim.credentialSubject?.offeredBy; + const offeredById = offeredBy?.identifier; + if (offeredById && !serverUtil.isHiddenDid(offeredById)) { + giver = offeredById; } else if (veriClaim.issuer && !serverUtil.isHiddenDid(veriClaim.issuer)) { giver = veriClaim.issuer; } From 6a47f0d3e706b1de4d9d4910276e96e33f83e009 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Fri, 6 Jun 2025 19:40:53 -0600 Subject: [PATCH 84/92] format total numbers better --- src/libs/util.ts | 13 +++++++++++-- src/views/ProjectViewView.vue | 7 +++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/libs/util.ts b/src/libs/util.ts index 7c2dc7a4..b286c7f0 100644 --- a/src/libs/util.ts +++ b/src/libs/util.ts @@ -42,7 +42,6 @@ import { createPeerDid } from "../libs/crypto/vc/didPeer"; import { registerCredential } from "../libs/crypto/vc/passkeyDidPeer"; import { logger } from "../utils/logger"; import { PlatformServiceFactory } from "@/services/PlatformServiceFactory"; -import OfferDetailsView from "@/views/OfferDetailsView.vue"; export interface GiverReceiverInputInfo { did?: string; @@ -81,18 +80,21 @@ export const UNIT_LONG: Record = { }; /* eslint-enable prettier/prettier */ -const UNIT_CODES: Record> = { +const UNIT_CODES: Record = { BTC: { name: "Bitcoin", faIcon: "bitcoin-sign", + decimals: 4, }, HUR: { name: "hours", faIcon: "clock", + decimals: 0, }, USD: { name: "US Dollars", faIcon: "dollar", + decimals: 2, }, }; @@ -100,6 +102,13 @@ export function iconForUnitCode(unitCode: string) { return UNIT_CODES[unitCode]?.faIcon || "question"; } +export function formattedAmount(amount: number, unitCode: string) { + const unit = UNIT_CODES[unitCode]; + const amountStr = amount.toFixed(unit?.decimals ?? 4); + const unitName = unit?.name || "?"; + return amountStr + " " + unitName; +} + // from https://stackoverflow.com/a/175787/845494 // ... though it appears even this isn't precisely right so keep doing "|| 0" or something in sensitive places // diff --git a/src/views/ProjectViewView.vue b/src/views/ProjectViewView.vue index e3876af1..b2f23258 100644 --- a/src/views/ProjectViewView.vue +++ b/src/views/ProjectViewView.vue @@ -386,11 +386,10 @@ > - {{ givenTotalHours() }} {{ libsUtil.UNIT_SHORT["HUR"] }} + {{ libsUtil.formattedAmount(givenTotalHours(), "HUR") }} - {{ givesTotalsByUnit[0].amount }} - {{ libsUtil.UNIT_SHORT[givesTotalsByUnit[0].unit] }} + {{ libsUtil.formattedAmount(givesTotalsByUnit[0].amount, givesTotalsByUnit[0].unit) }} ... @@ -411,7 +410,7 @@ :icon="libsUtil.iconForUnitCode(total.unit)" class="fa-fw text-slate-400 mr-1" /> - {{ total.amount }} {{ libsUtil.UNIT_LONG[total.unit] }} + {{ libsUtil.formattedAmount(total.amount, total.unit) }}
From 7f63ee7c807c6124d31b1680bdd9f5250126fe4c Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Fri, 6 Jun 2025 19:45:41 -0600 Subject: [PATCH 85/92] add another way to fix the privacy policy manifest for third parties like GoogleToolboxForMac --- ios/App/App.xcodeproj/project.pbxproj | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/ios/App/App.xcodeproj/project.pbxproj b/ios/App/App.xcodeproj/project.pbxproj index 45b03396..0d2a1334 100644 --- a/ios/App/App.xcodeproj/project.pbxproj +++ b/ios/App/App.xcodeproj/project.pbxproj @@ -91,7 +91,6 @@ EAEC6436E595F7CD3A1C9E96 /* Pods-App.debug.xcconfig */, E2E9297D5D02C549106C77F9 /* Pods-App.release.xcconfig */, ); - name = Pods; path = Pods; sourceTree = ""; }; @@ -108,6 +107,7 @@ 504EC3021FED79650016851F /* Resources */, 012076E8FFE4BF260A79B034 /* Fix Privacy Manifest */, 3525031ED1C96EF4CF6E9959 /* [CP] Embed Pods Frameworks */, + 96A7EF592DF3366D00084D51 /* Fix Privacy Manifest */, ); buildRules = ( ); @@ -187,7 +187,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PROJECT_DIR}/app_privacy_manifest_fixer/fixer.sh\" "; + shellScript = "\"${PROJECT_DIR}/app_privacy_manifest_fixer/fixer.sh\" \n"; showEnvVarsInLog = 0; }; 3525031ED1C96EF4CF6E9959 /* [CP] Embed Pods Frameworks */ = { @@ -227,6 +227,25 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + 96A7EF592DF3366D00084D51 /* Fix Privacy Manifest */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + name = "Fix Privacy Manifest"; + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "$PROJECT_DIR/app_privacy_manifest_fixer/fixer.sh\n"; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -384,7 +403,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 19; + CURRENT_PROJECT_VERSION = 21; DEVELOPMENT_TEAM = GM3FS5JQPH; ENABLE_APP_SANDBOX = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO; @@ -411,7 +430,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 19; + CURRENT_PROJECT_VERSION = 21; DEVELOPMENT_TEAM = GM3FS5JQPH; ENABLE_APP_SANDBOX = NO; ENABLE_USER_SCRIPT_SANDBOXING = NO; From 38e67f3533c20a97fc5594e84ab3aedbdd491362 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Fri, 6 Jun 2025 19:50:16 -0600 Subject: [PATCH 86/92] update a DB save to match others, ie. first SQL then maybe Dexie --- src/views/IdentitySwitcherView.vue | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/views/IdentitySwitcherView.vue b/src/views/IdentitySwitcherView.vue index cfb6908b..04d9c4ac 100644 --- a/src/views/IdentitySwitcherView.vue +++ b/src/views/IdentitySwitcherView.vue @@ -172,17 +172,16 @@ export default class IdentitySwitcherView extends Vue { if (did === "0") { did = undefined; } + const platformService = PlatformServiceFactory.getInstance(); + await platformService.dbExec( + `UPDATE settings SET activeDid = ? WHERE id = ?`, + [did ?? "", MASTER_SETTINGS_KEY], + ); if (USE_DEXIE_DB) { await db.open(); await db.settings.update(MASTER_SETTINGS_KEY, { activeDid: did ?? "", }); - } else { - const platformService = PlatformServiceFactory.getInstance(); - await platformService.dbExec( - `UPDATE settings SET activeDid = ? WHERE id = ?`, - [did ?? "", MASTER_SETTINGS_KEY], - ); } this.$router.push({ name: "account" }); } From 3d8e40e92ba5555c9cc41e77df5ecc2c01a1a372 Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Sat, 7 Jun 2025 05:02:33 +0000 Subject: [PATCH 87/92] feat(export): Replace CSV export with standardized JSON format - Add contactsToExportJson utility function for standardized data export - Replace CSV export with JSON format in DataExportSection - Update file extension and MIME type to application/json - Remove Dexie-specific export logic in favor of unified SQLite/Dexie approach - Update success notifications to reflect JSON format - Add TypeScript interfaces for export data structure This change improves data portability and standardization by: - Using a consistent JSON format for data export/import - Supporting both SQLite and Dexie databases - Including all contact fields in export - Properly handling contactMethods as stringified JSON - Maintaining backward compatibility with existing import tools Security: No sensitive data exposure, maintains existing access controls --- src/components/DataExportSection.vue | 51 ++++---- src/db/databaseUtil.ts | 36 +++--- src/libs/util.ts | 109 ++++++++++++++--- src/services/migrationService.ts | 20 +-- .../platforms/CapacitorPlatformService.ts | 12 +- src/views/AccountViewView.vue | 3 - src/views/HomeView.vue | 114 ++++++++++++------ src/views/IdentitySwitcherView.vue | 4 - src/views/ProjectViewView.vue | 7 +- 9 files changed, 230 insertions(+), 126 deletions(-) diff --git a/src/components/DataExportSection.vue b/src/components/DataExportSection.vue index 27f36418..c44cab7b 100644 --- a/src/components/DataExportSection.vue +++ b/src/components/DataExportSection.vue @@ -63,13 +63,18 @@ backup and database export, with platform-specific download instructions. * *