From fbfa44ba9705fc271177457048aaf8311ad61005 Mon Sep 17 00:00:00 2001 From: Devin Major Date: Thu, 23 Apr 2026 14:24:54 -0400 Subject: [PATCH] all changes from April 23 2026 --- .../account-list/account-list.component.html | 5 +- .../account-list/account-list.component.ts | 6 +- .../src/app/client/actions/client.actions.ts | 1 + .../client-list/client-list.component.css | 84 + .../client-list/client-list.component.html | 20 +- .../client-list/client-list.component.ts | 68 +- .../client/src/app/client/client.module.ts | 3 +- .../src/app/client/effects/client.effects.ts | 26 +- .../app/customers/actions/customer.actions.ts | 1 + .../customer-list/customer-list.component.css | 83 + .../customer-list.component.html | 28 +- .../customer-list/customer-list.component.ts | 58 +- .../src/app/customers/customer.module.ts | 2 + .../app/customers/effects/customer.effects.ts | 22 +- .../src/app/domain/models/appconfig.model.ts | 1 + .../app/domain/services/app-config.service.ts | 2 + .../domain/services/browser-cache.service.ts | 40 +- .../domain/services/client-cache.service.ts | 40 + .../src/app/domain/services/client.service.ts | 33 +- .../domain/services/customer-cache.service.ts | 31 + .../app/domain/services/customer.service.ts | 28 +- .../domain/services/invoice-cache.service.ts | 31 + .../app/domain/services/invoice.service.ts | 27 +- .../app/domain/services/job-cache.service.ts | 11 +- .../src/app/domain/services/job.service.ts | 30 +- .../services/list-return-cache.service.ts | 20 + .../crop/crop-list/crop-list.component.html | 19 +- .../vehicle-list/vehicle-list.component.html | 19 +- .../vehicle-list/vehicle-list.component.ts | 14 + .../app/invoices/actions/invoice.actions.ts | 1 + .../costing-item/costing-item.component.html | 4 - .../app/invoices/effects/invoice.effects.ts | 10 +- .../invoices-list/invoices-list.component.css | 84 + .../invoices-list.component.html | 24 +- .../invoices-list/invoices-list.component.ts | 61 +- .../src/app/invoices/invoices.module.ts | 2 + .../client/src/app/job/effects/job.effects.ts | 1 - .../app/job/job-list/job-list.component.css | 68 + .../app/job/job-list/job-list.component.html | 8 +- .../app/job/job-list/job-list.component.ts | 34 +- Development/server/controllers/client.js | 20 +- Development/server/controllers/customer.js | 18 +- Development/server/controllers/invoice.js | 23 +- Development/server/controllers/job.js | 43 - Development/server/controllers/main.js | 1 + Development/server/helpers/env.js | 2 +- Development/server/package-lock.json | 2227 ++++++++--------- Development/server/package.json | 2 +- 48 files changed, 2118 insertions(+), 1268 deletions(-) create mode 100644 Development/client/src/app/domain/services/client-cache.service.ts create mode 100644 Development/client/src/app/domain/services/customer-cache.service.ts create mode 100644 Development/client/src/app/domain/services/invoice-cache.service.ts create mode 100644 Development/client/src/app/domain/services/list-return-cache.service.ts diff --git a/Development/client/src/app/accounts/account-list/account-list.component.html b/Development/client/src/app/accounts/account-list/account-list.component.html index 9e448a5..56808dc 100644 --- a/Development/client/src/app/accounts/account-list/account-list.component.html +++ b/Development/client/src/app/accounts/account-list/account-list.component.html @@ -23,10 +23,7 @@ [value]="dt.filters[col.field]?.value"> -
- - -
+ diff --git a/Development/client/src/app/accounts/account-list/account-list.component.ts b/Development/client/src/app/accounts/account-list/account-list.component.ts index 1bbba20..faef3c0 100644 --- a/Development/client/src/app/accounts/account-list/account-list.component.ts +++ b/Development/client/src/app/accounts/account-list/account-list.component.ts @@ -7,7 +7,7 @@ import { User } from '../models/user.model'; import * as fromUsers from '../reducers'; import * as userActions from '../actions/account.actions'; -import { RoleIds, globals, OperationalStatus, Labels } from '@app/shared/global'; +import { RoleIds, Roles, globals, OperationalStatus, Labels } from '@app/shared/global'; import { BaseComp } from '@app/shared/base/base.component'; import { Utils } from '@app/shared/utils'; @@ -26,6 +26,10 @@ export class AccountListComponent extends BaseComp implements OnInit, OnDestroy { label: globals.active, value: true }, { label: globals.notActive, value: false }, ]; + kindOpts = [ + { label: globals.all, value: null }, + ...Object.entries(Roles).map(([value, label]) => ({ label: label as string, value })) + ]; accounts: Array; isLoading: boolean; currAcc: User; diff --git a/Development/client/src/app/client/actions/client.actions.ts b/Development/client/src/app/client/actions/client.actions.ts index d23ff2d..27b1462 100644 --- a/Development/client/src/app/client/actions/client.actions.ts +++ b/Development/client/src/app/client/actions/client.actions.ts @@ -4,6 +4,7 @@ import { Client } from "../models/client.model"; export const FETCH = '[CLIENTS] Fetch clients'; export class Fetch implements Action { type: typeof FETCH = FETCH; + constructor(readonly payload?: { filters?: string; useCache?: boolean }) { } } export const FETCH_SUCCESS = '[CLIENTS] Fetch clients success'; diff --git a/Development/client/src/app/client/client-list/client-list.component.css b/Development/client/src/app/client/client-list/client-list.component.css index 01f55fc..2dd7257 100644 --- a/Development/client/src/app/client/client-list/client-list.component.css +++ b/Development/client/src/app/client/client-list/client-list.component.css @@ -3,4 +3,88 @@ To disable deselect or reselect an item on a table row Ref:https://stackoverflow.com/questions/48675497/how-to-disable-the-option-to-deselect-a-row-on-turbotable-component*/ tr.ui-state-highlight { pointer-events: none; +} + +.cache-ttl-caption { + display: flex; + align-items: center; + justify-content: space-between; + flex-wrap: nowrap; +} + +.cache-ttl-caption-title { + flex: 1 1 auto; + min-width: 0; +} + +.cache-ttl-caption-controls { + display: flex; + align-items: center; + justify-content: flex-end; + flex: 0 0 auto; + white-space: nowrap; + text-align: right; + padding-left: 8px; +} + +.cache-ttl-help { + position: relative; + display: inline-flex; + vertical-align: middle; + margin-left: 6px; + outline: none; +} + +.cache-ttl-help-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 20px; + height: 20px; + border: none; + border-radius: 50%; + font-weight: bold; + cursor: help; + color: #fff; + background: transparent; +} + +.cache-ttl-help-text { + position: absolute; + top: calc(100% + 6px); + right: 0; + width: 220px; + white-space: normal; + padding: 8px 10px; + border-radius: 4px; + background: #323232; + color: #fff; + text-align: left; + line-height: 1.35; + font-size: 12px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25); + opacity: 0; + visibility: hidden; + pointer-events: none; + z-index: 1000; + transition: opacity 0.15s ease; +} + +.cache-ttl-help:hover .cache-ttl-help-text, +.cache-ttl-help:focus .cache-ttl-help-text, +.cache-ttl-help:focus-within .cache-ttl-help-text { + opacity: 1; + visibility: visible; +} + +@media (max-width: 640px) { + .cache-ttl-caption-title, + .cache-ttl-caption-controls { + width: auto; + float: none; + } + + .cache-ttl-caption-controls { + padding-left: 4px; + } } \ No newline at end of file diff --git a/Development/client/src/app/client/client-list/client-list.component.html b/Development/client/src/app/client/client-list/client-list.component.html index c213073..79fdb5a 100644 --- a/Development/client/src/app/client/client-list/client-list.component.html +++ b/Development/client/src/app/client/client-list/client-list.component.html @@ -1,9 +1,27 @@
+ + + + + - Client List +
+
+ Client List +
+
+ + + ? + Controls how long results stay cached after you return to this page. Value is in seconds. + +
+
diff --git a/Development/client/src/app/client/client-list/client-list.component.ts b/Development/client/src/app/client/client-list/client-list.component.ts index 6ebd7af..66f6d01 100644 --- a/Development/client/src/app/client/client-list/client-list.component.ts +++ b/Development/client/src/app/client/client-list/client-list.component.ts @@ -11,6 +11,9 @@ import { RoleIds, globals } from '../../shared/global'; import { JobService } from '../../domain/services/job.service'; import { Utils } from 'src/app/shared/utils'; import { BaseComp } from 'src/app/shared/base/base.component'; +import { ClientCacheService } from '@app/domain/services/client-cache.service'; +import { ListReturnCacheService } from '@app/domain/services/list-return-cache.service'; +import { FilterDefinition, FilterChangeEvent } from '@app/shared/dynamic-filter/dynamic-filter.component'; @Component({ @@ -29,6 +32,20 @@ export class ClientListComponent extends BaseComp implements OnInit, OnDestroy { cols: any[]; loading$ = this.store.select(fromClients.isLoading); + searchAccordionOpen = sessionStorage.getItem('client-list-accordion') === 'true'; + private lastFiltersQuery: Record | undefined; + private useCacheOnReturn = false; + cacheTtlSeconds: number; + + clientFilterDefinitions: FilterDefinition[] = [ + { key: 'name', label: globals.name, dataType: 'text' }, + { key: 'username', label: globals.userName, dataType: 'text' }, + { key: 'email', label: globals.email, dataType: 'text' }, + { key: 'phone', label: globals.phone + ' ' + $localize`:@@Num:N°`, dataType: 'text' }, + { key: 'contact', label: globals.contact, dataType: 'text' }, + { key: 'address', label: globals.address, dataType: 'text' }, + ]; + get canWrite(): boolean { return this.authSvc.hasRole([RoleIds.APP, RoleIds.APP_ADM, RoleIds.OFFICER]); } @@ -36,9 +53,11 @@ export class ClientListComponent extends BaseComp implements OnInit, OnDestroy { constructor( private readonly route: ActivatedRoute, private readonly jobService: JobService, - + private readonly clientCache: ClientCacheService, + private readonly listReturnCache: ListReturnCacheService, ) { super(); + this.cacheTtlSeconds = Math.round(this.clientCache.getTtlMs() / 1000); } ngOnInit() { @@ -58,7 +77,51 @@ export class ClientListComponent extends BaseComp implements OnInit, OnDestroy { this.currClient = client; })); - this.store.dispatch(new clientActions.Fetch()); + this.useCacheOnReturn = this.listReturnCache.startVisit('clients'); + const savedFilters = sessionStorage.getItem('client-list-last-filters'); + if (savedFilters) { + try { + this.lastFiltersQuery = JSON.parse(savedFilters); + } catch (_err) { + this.lastFiltersQuery = undefined; + } + } + this.store.dispatch(savedFilters + ? new clientActions.Fetch({ filters: savedFilters, useCache: this.useCacheOnReturn }) + : new clientActions.Fetch({ useCache: this.useCacheOnReturn }) + ); + } + + onAccordionToggle(expanded: boolean) { + sessionStorage.setItem('client-list-accordion', String(expanded)); + } + + updateCacheTtl(): void { + const ttlMs = this.clientCache.setTtlMs(Number(this.cacheTtlSeconds || 0) * 1000); + this.cacheTtlSeconds = Math.round(ttlMs / 1000); + } + + onFiltersSubmit(event: FilterChangeEvent) { + const q = { ...event.query }; + const filtersStr = JSON.stringify(q); + const prevFilters = sessionStorage.getItem('client-list-last-filters'); + if (filtersStr !== prevFilters) { + this.clientCache.invalidate(); + this.useCacheOnReturn = false; + } + this.lastFiltersQuery = q; + sessionStorage.setItem('client-list-last-filters', filtersStr); + this.store.dispatch(new clientActions.Fetch({ filters: filtersStr, useCache: this.useCacheOnReturn })); + } + + reloadClients() { + this.clientCache.invalidate(); + this.useCacheOnReturn = false; + if (this.lastFiltersQuery) { + this.store.dispatch(new clientActions.Fetch({ filters: JSON.stringify(this.lastFiltersQuery), useCache: false })); + } else { + this.store.dispatch(new clientActions.Fetch({ useCache: false })); + } } onRowSelect(event) { @@ -74,6 +137,7 @@ export class ClientListComponent extends BaseComp implements OnInit, OnDestroy { } editClient() { + this.listReturnCache.markPending('clients'); this.router.navigate(['client', this.currClient._id], { relativeTo: this.route }); } diff --git a/Development/client/src/app/client/client.module.ts b/Development/client/src/app/client/client.module.ts index fcce23c..896a60b 100644 --- a/Development/client/src/app/client/client.module.ts +++ b/Development/client/src/app/client/client.module.ts @@ -13,6 +13,7 @@ import { DropdownModule } from 'primeng/dropdown'; import { TableModule } from 'primeng/table'; import { ToastModule } from 'primeng/toast'; +import { AccordionModule } from 'primeng/accordion'; import { StoreModule } from '@ngrx/store'; import { EffectsModule } from '@ngrx/effects'; @@ -28,7 +29,7 @@ import { AppSharedModule } from '../shared/app-shared.module'; @NgModule({ imports: [ CommonModule, TableModule, PaginatorModule, DialogModule, ConfirmDialogModule, ToastModule, MessagesModule, InputTextModule, - CheckboxModule, ToolbarModule, ButtonModule, DropdownModule, AppSharedModule, + CheckboxModule, ToolbarModule, ButtonModule, DropdownModule, AccordionModule, AppSharedModule, StoreModule.forFeature(fromClients.FEATURE_KEY, fromClients.reducer), EffectsModule.forFeature([ClientEffects]), ClientsRoutingModule diff --git a/Development/client/src/app/client/effects/client.effects.ts b/Development/client/src/app/client/effects/client.effects.ts index eeaf86c..8bc1ca9 100644 --- a/Development/client/src/app/client/effects/client.effects.ts +++ b/Development/client/src/app/client/effects/client.effects.ts @@ -10,6 +10,7 @@ import { ClientService } from '@app/domain/services/client.service'; import { AuthService } from '@app/domain/services/auth.service'; import { AppMessageService } from '@app/shared/app-message.service'; import { globals } from '@app/shared/global'; +import { ClientCacheService } from '@app/domain/services/client-cache.service'; @Injectable() export class ClientEffects { @@ -17,15 +18,20 @@ export class ClientEffects { private readonly actions$: Actions, private readonly clientSvc: ClientService, private readonly authSvc: AuthService, - private readonly msgSvc: AppMessageService + private readonly msgSvc: AppMessageService, + private readonly clientCache: ClientCacheService ) { } @Effect() loadClients$: Observable = this.actions$.pipe( ofType(clientActions.FETCH), - switchMap(() => - this.clientSvc.loadClients({ byPuid: this.authSvc.user.parent }).pipe( + switchMap(({ payload }) => + this.clientSvc.loadClients({ + byPuid: this.authSvc.user.parent, + useCache: payload?.useCache, + ...(payload?.filters ? { filters: payload.filters } : {}) + }).pipe( map(clients => new clientActions.FetchSuccess(clients)), catchError(err => { this.msgSvc.addFailedMsg(globals.doThingsFailed.replace('#do#', globals.load).replace('#thing#', globals.clients)); @@ -40,7 +46,10 @@ export class ClientEffects { ofType(clientActions.CREATE), switchMap(({ payload }) => this.clientSvc.saveClient(payload).pipe( - map((client) => new clientActions.CreateSuccess(client)), + map((client) => { + this.clientCache.invalidate(); + return new clientActions.CreateSuccess(client); + }), catchError(err => { this.msgSvc.addFailedMsg(globals.doThingsFailed.replace('#do#', globals.create).replace('#thing#', globals.client)); return of(new clientActions.CreateFailed()) @@ -54,7 +63,9 @@ export class ClientEffects { ofType(clientActions.UPDATE), switchMap(({ payload }) => this.clientSvc.saveClient(payload).pipe( - map(() => new clientActions.UpdateSuccess(payload)), + map(() => { + return new clientActions.UpdateSuccess(payload); + }), catchError(err => { this.msgSvc.addFailedMsg(globals.doThingsFailed.replace('#do#', globals.save).replace('#thing#', globals.client)); return of(new clientActions.UpdateFailed()); @@ -68,7 +79,10 @@ export class ClientEffects { ofType(clientActions.DELETE), switchMap(({ payload }) => this.clientSvc.deleteClient(payload).pipe( - map(() => new clientActions.DeleteSuccess(payload)), + map(() => { + this.clientCache.invalidate(); + return new clientActions.DeleteSuccess(payload); + }), catchError(err => { this.msgSvc.addFailedMsg(globals.doThingsFailed.replace('#do#', globals.delete).replace('#thing#', globals.client)); return of(new clientActions.UpdateFailed()) diff --git a/Development/client/src/app/customers/actions/customer.actions.ts b/Development/client/src/app/customers/actions/customer.actions.ts index 5d9cbc9..13ddadc 100644 --- a/Development/client/src/app/customers/actions/customer.actions.ts +++ b/Development/client/src/app/customers/actions/customer.actions.ts @@ -4,6 +4,7 @@ import { Customer } from "../models/customer.model"; export const FETCH = '[CUSTOMERS] Fetch customers'; export class Fetch implements Action { type: typeof FETCH = FETCH; + constructor(readonly payload?: { filters?: string; useCache?: boolean }) {} } export const FETCH_SUCCESS = '[CUSTOMERS] Fetch customers success'; diff --git a/Development/client/src/app/customers/customer-list/customer-list.component.css b/Development/client/src/app/customers/customer-list/customer-list.component.css index e69de29..fa8c4ba 100644 --- a/Development/client/src/app/customers/customer-list/customer-list.component.css +++ b/Development/client/src/app/customers/customer-list/customer-list.component.css @@ -0,0 +1,83 @@ +.cache-ttl-caption { + display: flex; + align-items: center; + justify-content: space-between; + flex-wrap: nowrap; +} + +.cache-ttl-caption-title { + flex: 1 1 auto; + min-width: 0; +} + +.cache-ttl-caption-controls { + display: flex; + align-items: center; + justify-content: flex-end; + flex: 0 0 auto; + white-space: nowrap; + text-align: right; + padding-left: 8px; +} + +.cache-ttl-help { + position: relative; + display: inline-flex; + vertical-align: middle; + margin-right: 8px; + outline: none; +} + +.cache-ttl-help-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 20px; + height: 20px; + border: none; + border-radius: 50%; + font-weight: bold; + cursor: help; + color: #fff; + background: transparent; +} + +.cache-ttl-help-text { + position: absolute; + top: calc(100% + 6px); + right: 0; + width: 220px; + white-space: normal; + padding: 8px 10px; + border-radius: 4px; + background: #323232; + color: #fff; + text-align: left; + line-height: 1.35; + font-size: 12px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25); + opacity: 0; + visibility: hidden; + pointer-events: none; + z-index: 1000; + transition: opacity 0.15s ease; +} + +.cache-ttl-help:hover .cache-ttl-help-text, +.cache-ttl-help:focus .cache-ttl-help-text, +.cache-ttl-help:focus-within .cache-ttl-help-text { + opacity: 1; + visibility: visible; +} + +@media (max-width: 640px) { + .cache-ttl-caption-title, + .cache-ttl-caption-controls { + width: auto; + float: none; + } + + .cache-ttl-caption-controls { + padding-left: 4px; + } +} diff --git a/Development/client/src/app/customers/customer-list/customer-list.component.html b/Development/client/src/app/customers/customer-list/customer-list.component.html index 631b5ca..16d4a16 100644 --- a/Development/client/src/app/customers/customer-list/customer-list.component.html +++ b/Development/client/src/app/customers/customer-list/customer-list.component.html @@ -1,13 +1,25 @@
+ + + + + -
-
- Customer List +
+
+ Customer List
-
+
+ + + ? + Controls how long results stay cached after you return to this page. Value is in seconds. +
@@ -34,14 +46,6 @@
-
- - -
-
- - -
diff --git a/Development/client/src/app/customers/customer-list/customer-list.component.ts b/Development/client/src/app/customers/customer-list/customer-list.component.ts index e023601..287ad76 100644 --- a/Development/client/src/app/customers/customer-list/customer-list.component.ts +++ b/Development/client/src/app/customers/customer-list/customer-list.component.ts @@ -10,6 +10,9 @@ import * as customerActions from '../actions/customer.actions'; import { globals, OperationalStatus } from '@app/shared/global'; import { BaseComp } from '@app/shared/base/base.component'; +import { CustomerCacheService } from '@app/domain/services/customer-cache.service'; +import { ListReturnCacheService } from '@app/domain/services/list-return-cache.service'; +import { FilterDefinition, FilterChangeEvent } from '@app/shared/dynamic-filter/dynamic-filter.component'; @Component({ selector: 'agm-customer-list', @@ -34,11 +37,19 @@ export class CustomerListComponent extends BaseComp implements OnInit, OnDestroy totalItems; isSelfSignup = false; + searchAccordionOpen = sessionStorage.getItem('customers-list-accordion') === 'true'; + private lastFiltersQuery: Record | undefined; + private useCacheOnReturn = false; + cacheTtlSeconds: number; + customerFilterDefinitions: FilterDefinition[]; + constructor( private readonly route: ActivatedRoute, - + private readonly customerCache: CustomerCacheService, + private readonly listReturnCache: ListReturnCacheService, ) { super(); + this.cacheTtlSeconds = Math.round(this.customerCache.getTtlMs() / 1000); this.totalItems = { '=0': '', '=1': '1 ' + $localize`:@@customer:customer`.toLocaleLowerCase(), 'other': $localize`:@@total#Customers:Total: # customers` }; this.statuses = [ @@ -56,6 +67,14 @@ export class CustomerListComponent extends BaseComp implements OnInit, OnDestroy { field: this.ACTIVE, header: globals.active, width: '9%' }, { field: this.PARTNER_NAME, header: globals.partner, width: '9%' } ]; + + this.customerFilterDefinitions = [ + { key: 'name', label: globals.name, dataType: 'text' }, + { key: 'username', label: globals.userName, dataType: 'text' }, + { key: 'email', label: globals.email, dataType: 'text' }, + { key: 'contact', label: globals.contact, dataType: 'text' }, + { key: 'createdAt', label: globals.from, dataType: 'date-preset' }, + ]; } ngOnInit() { @@ -70,7 +89,19 @@ export class CustomerListComponent extends BaseComp implements OnInit, OnDestroy this.curCust = cust; })); - this.store.dispatch(new customerActions.Fetch()); + this.useCacheOnReturn = this.listReturnCache.startVisit('customers'); + const savedFilters = sessionStorage.getItem('customers-list-last-filters'); + if (savedFilters) { + try { + this.lastFiltersQuery = JSON.parse(savedFilters); + } catch (_err) { + this.lastFiltersQuery = undefined; + } + } + this.store.dispatch(savedFilters + ? new customerActions.Fetch({ filters: savedFilters, useCache: this.useCacheOnReturn }) + : new customerActions.Fetch({ useCache: this.useCacheOnReturn }) + ); } private setCustomersAndPartners(customers: Customer[]) { @@ -101,6 +132,28 @@ export class CustomerListComponent extends BaseComp implements OnInit, OnDestroy this.store.dispatch(new customerActions.Select(event.data)); } + onAccordionToggle(expanded: boolean) { + sessionStorage.setItem('customers-list-accordion', String(expanded)); + } + + updateCacheTtl(): void { + const ttlMs = this.customerCache.setTtlMs(Number(this.cacheTtlSeconds || 0) * 1000); + this.cacheTtlSeconds = Math.round(ttlMs / 1000); + } + + onFiltersSubmit(event: FilterChangeEvent) { + const q = { ...event.query }; + const filtersStr = JSON.stringify(q); + const prevFilters = sessionStorage.getItem('customers-list-last-filters'); + if (filtersStr !== prevFilters) { + this.customerCache.invalidate(); + this.useCacheOnReturn = false; + } + this.lastFiltersQuery = q; + sessionStorage.setItem('customers-list-last-filters', filtersStr); + this.store.dispatch(new customerActions.Fetch({ filters: filtersStr, useCache: this.useCacheOnReturn })); + } + get canEdit() { return (this.curCust && this.curCust._id !== '0'); } @@ -110,6 +163,7 @@ export class CustomerListComponent extends BaseComp implements OnInit, OnDestroy } editCustomer() { + this.listReturnCache.markPending('customers'); this.router.navigate(['customer', this.curCust._id], { relativeTo: this.route }); } diff --git a/Development/client/src/app/customers/customer.module.ts b/Development/client/src/app/customers/customer.module.ts index badd796..9eb007c 100644 --- a/Development/client/src/app/customers/customer.module.ts +++ b/Development/client/src/app/customers/customer.module.ts @@ -12,6 +12,7 @@ import { MessageModule } from 'primeng/message'; import { TableModule } from 'primeng/table'; import { ToastModule } from 'primeng/toast'; import { MessagesModule } from 'primeng/messages'; +import { AccordionModule } from 'primeng/accordion'; import { AppSharedModule } from '../shared/app-shared.module'; import { ApiKeySharedModule } from '../settings/api-keys/api-key-shared.module'; @@ -43,6 +44,7 @@ import { TrialComponent } from './trial/trial.component'; TableModule, AppSharedModule, ApiKeySharedModule, + AccordionModule, StoreModule.forFeature(fromCustomers.FEATURE_KEY, fromCustomers.reducer), EffectsModule.forFeature([CustomerEffects]), diff --git a/Development/client/src/app/customers/effects/customer.effects.ts b/Development/client/src/app/customers/effects/customer.effects.ts index 533b946..cd9b512 100644 --- a/Development/client/src/app/customers/effects/customer.effects.ts +++ b/Development/client/src/app/customers/effects/customer.effects.ts @@ -9,21 +9,23 @@ import * as customerActions from '../actions/customer.actions'; import { CustomerService } from '@app/domain/services/customer.service'; import { AppMessageService } from '@app/shared/app-message.service'; import { globals } from '@app/shared/global'; +import { CustomerCacheService } from '@app/domain/services/customer-cache.service'; @Injectable() export class CustomerEffects { constructor( private readonly actions$: Actions, private readonly customerSvc: CustomerService, - private readonly msgSvc: AppMessageService + private readonly msgSvc: AppMessageService, + private readonly customerCache: CustomerCacheService ) { } @Effect() loadCustomers$: Observable = this.actions$.pipe( ofType(customerActions.FETCH), - switchMap(() => - this.customerSvc.loadCustomers().pipe( + switchMap(({ payload }) => + this.customerSvc.loadCustomers(payload?.filters, payload?.useCache).pipe( map(customers => new customerActions.FetchSuccess(customers)), catchError(err => { this.msgSvc.addFailedMsg(globals.doThingsFailed.replace('#do#', globals.load).replace('#thing#', globals.customers)); @@ -38,7 +40,10 @@ export class CustomerEffects { ofType(customerActions.CREATE), switchMap(({ payload }) => this.customerSvc.saveCustomer(payload).pipe( - map((customer) => new customerActions.CreateSuccess(customer)), + map((customer) => { + this.customerCache.invalidate(); + return new customerActions.CreateSuccess(customer); + }), catchError(err => { this.msgSvc.addFailedMsg(globals.doThingsFailed.replace('#do#', globals.create).replace('#thing#', globals.customer)); return of(new customerActions.CreateFailed()) @@ -52,7 +57,9 @@ export class CustomerEffects { ofType(customerActions.UPDATE), switchMap(({ payload }) => this.customerSvc.saveCustomer(payload).pipe( - map(() => new customerActions.UpdateSuccess(payload)), + map(() => { + return new customerActions.UpdateSuccess(payload); + }), catchError(err => { this.msgSvc.addFailedMsg(globals.doThingsFailed.replace('#do#', globals.save).replace('#thing#', globals.customer)); return of(new customerActions.UpdateFailed()); @@ -66,7 +73,10 @@ export class CustomerEffects { ofType(customerActions.DELETE), switchMap(({ payload }) => this.customerSvc.deleteCustomer(payload).pipe( - map(() => new customerActions.DeleteSuccess(payload)), + map(() => { + this.customerCache.invalidate(); + return new customerActions.DeleteSuccess(payload); + }), catchError(err => { this.msgSvc.addFailedMsg(globals.doThingsFailed.replace('#do#', globals.delete).replace('#thing#', globals.customer)); return of(new customerActions.UpdateFailed()) diff --git a/Development/client/src/app/domain/models/appconfig.model.ts b/Development/client/src/app/domain/models/appconfig.model.ts index 7b24a05..b38b0bb 100644 --- a/Development/client/src/app/domain/models/appconfig.model.ts +++ b/Development/client/src/app/domain/models/appconfig.model.ts @@ -24,6 +24,7 @@ export interface IAppConfig { noPopup: boolean; trialDays: [number]; + browserListCacheTtlMs?: number; /** Grace-period days for promo Valid Until (sysadmin only). From PROMO_MIN_EXPIRY_DAYS env. */ promoMinExpiryDays?: number; } diff --git a/Development/client/src/app/domain/services/app-config.service.ts b/Development/client/src/app/domain/services/app-config.service.ts index dbad015..39aaef0 100644 --- a/Development/client/src/app/domain/services/app-config.service.ts +++ b/Development/client/src/app/domain/services/app-config.service.ts @@ -130,6 +130,8 @@ export class AppConfigService { } if (Utils.isNulOrUndef(settings['matType'])) settings['matType'] = MatType.LIQUID; + if (Utils.isNulOrUndef(settings['browserListCacheTtlMs'])) + settings['browserListCacheTtlMs'] = 60 * 1000; this.settings = settings; this.wasSetDefault = true; diff --git a/Development/client/src/app/domain/services/browser-cache.service.ts b/Development/client/src/app/domain/services/browser-cache.service.ts index 52eb93c..8bf080c 100644 --- a/Development/client/src/app/domain/services/browser-cache.service.ts +++ b/Development/client/src/app/domain/services/browser-cache.service.ts @@ -1,6 +1,7 @@ import { Injectable } from '@angular/core'; import { from, Observable, of } from 'rxjs'; import { catchError, switchMap } from 'rxjs/operators'; +import { AppConfigService } from './app-config.service'; /** Shape of every entry stored in Cache Storage. */ export interface BrowserCacheEntry { @@ -34,6 +35,37 @@ export interface BrowserCacheEntry { export class BrowserCacheService { private readonly supported = typeof caches !== 'undefined'; + private readonly fallbackMaxAgeMs = 60_000; + + constructor(private readonly appConfig: AppConfigService) {} + + private ttlStorageKey(cacheName: string): string { + return `browser-cache-ttl:${cacheName}`; + } + + private get defaultMaxAgeMs(): number { + return this.appConfig.settings?.browserListCacheTtlMs || this.fallbackMaxAgeMs; + } + + getTtl(cacheName: string): number { + const storedValue = localStorage.getItem(this.ttlStorageKey(cacheName)); + if (storedValue === null) { + return this.defaultMaxAgeMs; + } + + const parsedValue = Number(storedValue); + return Number.isFinite(parsedValue) && parsedValue >= 0 + ? parsedValue + : this.defaultMaxAgeMs; + } + + setTtl(cacheName: string, ttlMs: number): number { + const normalizedValue = Number.isFinite(ttlMs) && ttlMs >= 0 + ? Math.floor(ttlMs) + : this.defaultMaxAgeMs; + localStorage.setItem(this.ttlStorageKey(cacheName), String(normalizedValue)); + return normalizedValue; + } /** * Build the pseudo-URL used as the cache key inside a named Cache bucket. @@ -49,12 +81,14 @@ export class BrowserCacheService { * @param cacheName Name of the Cache Storage bucket (e.g. `'agm-jobs-list-v1'`). * @param key Entry key — typically serialised query params. * @param maxAgeMs Maximum age in milliseconds before the entry is treated as stale. - * Defaults to 60 000 (1 minute). + * Defaults to `appConfig.browserListCacheTtlMs` or 60 000. * @returns The cached value, or `null` when unavailable / stale / missing. */ - get(cacheName: string, key: string, maxAgeMs: number = 60_000): Observable { + get(cacheName: string, key: string, maxAgeMs?: number): Observable { if (!this.supported) return of(null); + const effectiveMaxAgeMs = maxAgeMs ?? this.getTtl(cacheName); + return from(caches.open(cacheName)).pipe( switchMap(cache => from(cache.match(this.entryUrl(cacheName, key)))), switchMap(response => { @@ -63,7 +97,7 @@ export class BrowserCacheService { }), switchMap((entry: BrowserCacheEntry | null) => { if (!entry) return of(null); - if (Date.now() - entry.cachedAt > maxAgeMs) return of(null); + if (Date.now() - entry.cachedAt > effectiveMaxAgeMs) return of(null); return of(entry.data); }), catchError(() => of(null)) diff --git a/Development/client/src/app/domain/services/client-cache.service.ts b/Development/client/src/app/domain/services/client-cache.service.ts new file mode 100644 index 0000000..8558d21 --- /dev/null +++ b/Development/client/src/app/domain/services/client-cache.service.ts @@ -0,0 +1,40 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { BrowserCacheService } from './browser-cache.service'; + +const CACHE_NAME = 'agm-clients-list-v1'; + +/** + * Clients-list-specific facade over {@link BrowserCacheService}. + * + * Encapsulates the cache name and TTL so callers (ClientService, ClientEffects) + * don't need to know those details. + */ +@Injectable({ providedIn: 'root' }) +export class ClientCacheService { + + constructor(private readonly browserCache: BrowserCacheService) {} + + getTtlMs(): number { + return this.browserCache.getTtl(CACHE_NAME); + } + + setTtlMs(ttlMs: number): number { + return this.browserCache.setTtl(CACHE_NAME, ttlMs); + } + + /** Return cached clients for the given query-param string, or null if stale/missing. */ + get(queryParams: string): Observable { + return this.browserCache.get(CACHE_NAME, queryParams); + } + + /** Store a fresh clients list for the given query-param string. */ + put(queryParams: string, data: any[]): void { + this.browserCache.put(CACHE_NAME, queryParams, data); + } + + /** Invalidate all cached client-list entries (call after any client mutation). */ + invalidate(): void { + this.browserCache.invalidate(CACHE_NAME); + } +} diff --git a/Development/client/src/app/domain/services/client.service.ts b/Development/client/src/app/domain/services/client.service.ts index acf25c9..67198bd 100644 --- a/Development/client/src/app/domain/services/client.service.ts +++ b/Development/client/src/app/domain/services/client.service.ts @@ -1,11 +1,13 @@ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; +import { Observable, of } from 'rxjs'; +import { switchMap, tap } from 'rxjs/operators'; import { Store } from '@ngrx/store'; import { Client } from '../../client/models/client.model'; import { CustomerInvoiceSetting } from '@app/invoices/models/customer-invoice-setting.model'; +import { ClientCacheService } from './client-cache.service'; @Injectable() export class ClientService { @@ -14,12 +16,35 @@ export class ClientService { constructor( private store: Store<{}>, - private http: HttpClient + private http: HttpClient, + private readonly clientCache: ClientCacheService ) { } loadClients(options?: LoadClientOps): Observable { - return this.http.post(this.clientURL + '/search', options); + const cacheKey = JSON.stringify({ + byPuid: options?.byPuid, + filters: options?.filters || '' + }); + const requestBody = { + byPuid: options?.byPuid, + ...(options?.filters ? { filters: options.filters } : {}) + }; + + if (options?.useCache) { + return this.clientCache.get(cacheKey).pipe( + switchMap(cached => { + if (cached !== null) return of(cached as Client[]); + return this.http.post(this.clientURL + '/search', requestBody).pipe( + tap(data => this.clientCache.put(cacheKey, data)) + ); + }) + ); + } + + return this.http.post(this.clientURL + '/search', requestBody).pipe( + tap(data => this.clientCache.put(cacheKey, data)) + ); } getClient(id: string): Observable { @@ -53,6 +78,8 @@ export class ClientService { export interface LoadClientOps { byPuid: string; + filters?: string; + useCache?: boolean; } export interface ClientWithSetting extends Client { diff --git a/Development/client/src/app/domain/services/customer-cache.service.ts b/Development/client/src/app/domain/services/customer-cache.service.ts new file mode 100644 index 0000000..3b38c65 --- /dev/null +++ b/Development/client/src/app/domain/services/customer-cache.service.ts @@ -0,0 +1,31 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { BrowserCacheService } from './browser-cache.service'; + +const CACHE_NAME = 'agm-customers-list-v1'; + +@Injectable({ providedIn: 'root' }) +export class CustomerCacheService { + + constructor(private readonly browserCache: BrowserCacheService) {} + + getTtlMs(): number { + return this.browserCache.getTtl(CACHE_NAME); + } + + setTtlMs(ttlMs: number): number { + return this.browserCache.setTtl(CACHE_NAME, ttlMs); + } + + get(queryParams: string): Observable { + return this.browserCache.get(CACHE_NAME, queryParams); + } + + put(queryParams: string, data: any[]): void { + this.browserCache.put(CACHE_NAME, queryParams, data); + } + + invalidate(): void { + this.browserCache.invalidate(CACHE_NAME); + } +} diff --git a/Development/client/src/app/domain/services/customer.service.ts b/Development/client/src/app/domain/services/customer.service.ts index cae504a..abfc45a 100644 --- a/Development/client/src/app/domain/services/customer.service.ts +++ b/Development/client/src/app/domain/services/customer.service.ts @@ -1,7 +1,9 @@ import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; -import { Observable } from 'rxjs'; +import { Observable, of } from 'rxjs'; +import { switchMap, tap } from 'rxjs/operators'; import { Customer } from '../../customers/models/customer.model'; +import { CustomerCacheService } from './customer-cache.service'; @Injectable() export class CustomerService { @@ -9,12 +11,30 @@ export class CustomerService { private readonly customerURL = '/customers'; constructor( - private http: HttpClient + private http: HttpClient, + private readonly customerCache: CustomerCacheService ) { } - loadCustomers(): Observable { - return this.http.get(this.customerURL); + loadCustomers(filters?: string, useCache: boolean = false): Observable { + const cacheKey = filters || ''; + const params: any = {}; + if (filters) params.filters = filters; + + if (useCache) { + return this.customerCache.get(cacheKey).pipe( + switchMap(cached => { + if (cached !== null) return of(cached as Customer[]); + return this.http.get(this.customerURL, { params }).pipe( + tap(data => this.customerCache.put(cacheKey, data)) + ); + }) + ); + } + + return this.http.get(this.customerURL, { params }).pipe( + tap(data => this.customerCache.put(cacheKey, data)) + ); } getCustomer(id: string, view?: string): Observable { diff --git a/Development/client/src/app/domain/services/invoice-cache.service.ts b/Development/client/src/app/domain/services/invoice-cache.service.ts new file mode 100644 index 0000000..02c3420 --- /dev/null +++ b/Development/client/src/app/domain/services/invoice-cache.service.ts @@ -0,0 +1,31 @@ +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { BrowserCacheService } from './browser-cache.service'; + +const CACHE_NAME = 'agm-invoices-list-v1'; + +@Injectable({ providedIn: 'root' }) +export class InvoiceCacheService { + + constructor(private readonly browserCache: BrowserCacheService) {} + + getTtlMs(): number { + return this.browserCache.getTtl(CACHE_NAME); + } + + setTtlMs(ttlMs: number): number { + return this.browserCache.setTtl(CACHE_NAME, ttlMs); + } + + get(queryParams: string): Observable { + return this.browserCache.get(CACHE_NAME, queryParams); + } + + put(queryParams: string, data: any[]): void { + this.browserCache.put(CACHE_NAME, queryParams, data); + } + + invalidate(): void { + this.browserCache.invalidate(CACHE_NAME); + } +} diff --git a/Development/client/src/app/domain/services/invoice.service.ts b/Development/client/src/app/domain/services/invoice.service.ts index 10256cd..1d673a4 100644 --- a/Development/client/src/app/domain/services/invoice.service.ts +++ b/Development/client/src/app/domain/services/invoice.service.ts @@ -5,10 +5,11 @@ import { Observable, of } from 'rxjs'; import { Client, Invoice } from '@app/invoices/models/invoice.model'; import { CostingItem } from '@app/invoices/models/costing-item.model'; import { CustomerInvoiceSetting } from '@app/invoices/models/customer-invoice-setting.model'; -import { catchError, map } from 'rxjs/operators'; +import { catchError, map, switchMap, tap } from 'rxjs/operators'; import { AppMessageService } from '@app/shared/app-message.service'; import { RouterUtilsService } from '@app/shared/router-utils.service'; import { Utils } from '@app/shared/utils'; +import { InvoiceCacheService } from './invoice-cache.service'; @Injectable() export class InvoiceService { @@ -28,7 +29,8 @@ export class InvoiceService { constructor( private http: HttpClient, private readonly appMsgSvc: AppMessageService, - private readonly routerUtils: RouterUtilsService + private readonly routerUtils: RouterUtilsService, + private readonly invoiceCache: InvoiceCacheService ) { } // Setting @@ -71,8 +73,25 @@ export class InvoiceService { } // Invoice - getInvoices(): Observable { - return this.http.get(this.invoiceURL); + getInvoices(filters?: string, useCache: boolean = false): Observable { + const cacheKey = filters || ''; + const params: any = {}; + if (filters) params.filters = filters; + + if (useCache) { + return this.invoiceCache.get(cacheKey).pipe( + switchMap(cached => { + if (cached !== null) return of(cached as Invoice[]); + return this.http.get(this.invoiceURL, { params }).pipe( + tap(data => this.invoiceCache.put(cacheKey, data)) + ); + }) + ); + } + + return this.http.get(this.invoiceURL, { params }).pipe( + tap(data => this.invoiceCache.put(cacheKey, data)) + ); } getInvoiceById(id): Observable { diff --git a/Development/client/src/app/domain/services/job-cache.service.ts b/Development/client/src/app/domain/services/job-cache.service.ts index 2d04b16..7cf027e 100644 --- a/Development/client/src/app/domain/services/job-cache.service.ts +++ b/Development/client/src/app/domain/services/job-cache.service.ts @@ -3,7 +3,6 @@ import { Observable } from 'rxjs'; import { BrowserCacheService } from './browser-cache.service'; const CACHE_NAME = 'agm-jobs-list-v1'; -const MAX_AGE_MS = 60_000; // 1 minute /** * Jobs-list-specific facade over {@link BrowserCacheService}. @@ -16,9 +15,17 @@ export class JobCacheService { constructor(private readonly browserCache: BrowserCacheService) {} + getTtlMs(): number { + return this.browserCache.getTtl(CACHE_NAME); + } + + setTtlMs(ttlMs: number): number { + return this.browserCache.setTtl(CACHE_NAME, ttlMs); + } + /** Return cached jobs for the given query-param string, or null if stale/missing. */ get(queryParams: string): Observable { - return this.browserCache.get(CACHE_NAME, queryParams, MAX_AGE_MS); + return this.browserCache.get(CACHE_NAME, queryParams); } /** Store a fresh jobs list for the given query-param string. */ diff --git a/Development/client/src/app/domain/services/job.service.ts b/Development/client/src/app/domain/services/job.service.ts index c9dd74d..a0cdd90 100644 --- a/Development/client/src/app/domain/services/job.service.ts +++ b/Development/client/src/app/domain/services/job.service.ts @@ -45,18 +45,24 @@ export class JobService { const cacheKey = _ops.toString(); - return this.jobCache.get(cacheKey).pipe( - switchMap(cached => { - if (cached !== null) { - return new Observable(observer => { - observer.next(cached as IJob[]); - observer.complete(); - }); - } - return this.http.get(this.jobURL, { params: _ops }).pipe( - tap(data => this.jobCache.put(cacheKey, data)) - ); - }) + if (ops?.useCache) { + return this.jobCache.get(cacheKey).pipe( + switchMap(cached => { + if (cached !== null) { + return new Observable(observer => { + observer.next(cached as IJob[]); + observer.complete(); + }); + } + return this.http.get(this.jobURL, { params: _ops }).pipe( + tap(data => this.jobCache.put(cacheKey, data)) + ); + }) + ); + } + + return this.http.get(this.jobURL, { params: _ops }).pipe( + tap(data => this.jobCache.put(cacheKey, data)) ); } diff --git a/Development/client/src/app/domain/services/list-return-cache.service.ts b/Development/client/src/app/domain/services/list-return-cache.service.ts new file mode 100644 index 0000000..0fb3619 --- /dev/null +++ b/Development/client/src/app/domain/services/list-return-cache.service.ts @@ -0,0 +1,20 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ providedIn: 'root' }) +export class ListReturnCacheService { + + private storageKey(listKey: string): string { + return `list-return-cache:${listKey}`; + } + + markPending(listKey: string): void { + sessionStorage.setItem(this.storageKey(listKey), '1'); + } + + startVisit(listKey: string): boolean { + const storageKey = this.storageKey(listKey); + const shouldUseCache = sessionStorage.getItem(storageKey) === '1'; + sessionStorage.removeItem(storageKey); + return shouldUseCache; + } +} \ No newline at end of file diff --git a/Development/client/src/app/entities/crop/crop-list/crop-list.component.html b/Development/client/src/app/entities/crop/crop-list/crop-list.component.html index 720493c..414b697 100644 --- a/Development/client/src/app/entities/crop/crop-list/crop-list.component.html +++ b/Development/client/src/app/entities/crop/crop-list/crop-list.component.html @@ -16,7 +16,18 @@
- + + +
+ {{item.label}} +
+ +
+
+ {{item.label}} +
+
+
@@ -70,9 +81,9 @@ {{item.label}} -
-
-
{{item.label}}
+
+
+ {{item.label}}
diff --git a/Development/client/src/app/entities/vehicle/vehicle-list/vehicle-list.component.html b/Development/client/src/app/entities/vehicle/vehicle-list/vehicle-list.component.html index 6d40339..e5e3abe 100644 --- a/Development/client/src/app/entities/vehicle/vehicle-list/vehicle-list.component.html +++ b/Development/client/src/app/entities/vehicle/vehicle-list/vehicle-list.component.html @@ -62,12 +62,21 @@ (onChange)="dt.filter($event.value, VEHICLE_TYPE, 'equals')"> -
- - -
+ + (onChange)="dt.filter($event.value, COLOR, 'equals')"> + +
+ {{item.label}} +
+ +
+
+ {{item.label}} +
+
+
diff --git a/Development/client/src/app/entities/vehicle/vehicle-list/vehicle-list.component.ts b/Development/client/src/app/entities/vehicle/vehicle-list/vehicle-list.component.ts index 15a9167..a48579c 100644 --- a/Development/client/src/app/entities/vehicle/vehicle-list/vehicle-list.component.ts +++ b/Development/client/src/app/entities/vehicle/vehicle-list/vehicle-list.component.ts @@ -151,6 +151,20 @@ export class VehicleListComponent extends BaseComp implements OnInit, AfterViewI this.colorFilterOpts = [GC.selAll, ...GC.selSprZoneColors]; } + get sourceSystemOpts(): SelectItem[] { + const seen = new Set(); + const opts: SelectItem[] = [{ label: globals.all, value: null }]; + for (const v of (this.vehicles || [])) { + const val = v.partnerSystem || SourceSystem.AGNAV; + if (!seen.has(val)) { + seen.add(val); + const label = val === SourceSystem.AGNAV ? Labels.AGNAV_BRAND_NAME : val; + opts.push({ label, value: val }); + } + } + return opts; + } + ngOnInit() { this.user = this.route.snapshot.data['user']; this.clearNeedReview(); diff --git a/Development/client/src/app/invoices/actions/invoice.actions.ts b/Development/client/src/app/invoices/actions/invoice.actions.ts index 70bde54..75921ba 100644 --- a/Development/client/src/app/invoices/actions/invoice.actions.ts +++ b/Development/client/src/app/invoices/actions/invoice.actions.ts @@ -5,6 +5,7 @@ export const FETCH = '[INVOICES] Fetch invoices'; export class Fetch implements Action { type: typeof FETCH = FETCH; + constructor(readonly payload?: { filters?: string; useCache?: boolean }) {} } export const FETCH_SUCCESS = '[INVOICES] Fetch invoices success'; diff --git a/Development/client/src/app/invoices/costing-item/costing-item.component.html b/Development/client/src/app/invoices/costing-item/costing-item.component.html index 109170c..9d7ee88 100644 --- a/Development/client/src/app/invoices/costing-item/costing-item.component.html +++ b/Development/client/src/app/invoices/costing-item/costing-item.component.html @@ -24,10 +24,6 @@
-
- - -
diff --git a/Development/client/src/app/invoices/effects/invoice.effects.ts b/Development/client/src/app/invoices/effects/invoice.effects.ts index 7d88b32..1831082 100644 --- a/Development/client/src/app/invoices/effects/invoice.effects.ts +++ b/Development/client/src/app/invoices/effects/invoice.effects.ts @@ -7,13 +7,15 @@ import { Action } from '@ngrx/store'; import * as invoiceActions from '../actions/invoice.actions'; import { catchError, map, switchMap } from 'rxjs/operators'; import { globals } from '@app/shared/global'; +import { InvoiceCacheService } from '@app/domain/services/invoice-cache.service'; @Injectable() export class InvoiceEffects { constructor( private readonly actions$: Actions, private readonly invoiceSvc: InvoiceService, - private readonly msgSvc: AppMessageService + private readonly msgSvc: AppMessageService, + private readonly invoiceCache: InvoiceCacheService ) { } @@ -24,6 +26,7 @@ export class InvoiceEffects { const isNew = true; return this.invoiceSvc.saveInvoice(payload, isNew).pipe( map(invoice => { + this.invoiceCache.invalidate(); this.msgSvc.addSuccessMsg(globals.doThingsSuccess.replace('#do#', globals.create).replace('#thing#', globals.invoice)); return new invoiceActions.CreateSuccess(invoice); }), @@ -56,8 +59,8 @@ export class InvoiceEffects { @Effect() loadInvoice$: Observable = this.actions$.pipe( ofType(invoiceActions.FETCH), - switchMap(() => { - return this.invoiceSvc.getInvoices().pipe( + switchMap(({ payload }) => { + return this.invoiceSvc.getInvoices(payload?.filters, payload?.useCache).pipe( map(res => { return new invoiceActions.FetchSuccess(res); }), @@ -75,6 +78,7 @@ export class InvoiceEffects { switchMap(({ payload }) => { return this.invoiceSvc.deleteInvoice(payload).pipe( map((res: any[]) => { + this.invoiceCache.invalidate(); return new invoiceActions.DeleteSuccess(res?.map(i => i._id)); }), catchError(err => { diff --git a/Development/client/src/app/invoices/invoices-list/invoices-list.component.css b/Development/client/src/app/invoices/invoices-list/invoices-list.component.css index 6eb978b..542825c 100644 --- a/Development/client/src/app/invoices/invoices-list/invoices-list.component.css +++ b/Development/client/src/app/invoices/invoices-list/invoices-list.component.css @@ -11,3 +11,87 @@ border: 1px solid #4caf50; background-color: #4caf50; } + +.cache-ttl-caption { + display: flex; + align-items: center; + justify-content: space-between; + flex-wrap: nowrap; +} + +.cache-ttl-caption-title { + flex: 1 1 auto; + min-width: 0; +} + +.cache-ttl-caption-controls { + display: flex; + align-items: center; + justify-content: flex-end; + flex: 0 0 auto; + white-space: nowrap; + text-align: right; + padding-left: 8px; +} + +.cache-ttl-help { + position: relative; + display: inline-flex; + vertical-align: middle; + margin-left: 6px; + outline: none; +} + +.cache-ttl-help-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 20px; + height: 20px; + border: none; + border-radius: 50%; + font-weight: bold; + cursor: help; + color: #fff; + background: transparent; +} + +.cache-ttl-help-text { + position: absolute; + top: calc(100% + 6px); + right: 0; + width: 220px; + white-space: normal; + padding: 8px 10px; + border-radius: 4px; + background: #323232; + color: #fff; + text-align: left; + line-height: 1.35; + font-size: 12px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25); + opacity: 0; + visibility: hidden; + pointer-events: none; + z-index: 1000; + transition: opacity 0.15s ease; +} + +.cache-ttl-help:hover .cache-ttl-help-text, +.cache-ttl-help:focus .cache-ttl-help-text, +.cache-ttl-help:focus-within .cache-ttl-help-text { + opacity: 1; + visibility: visible; +} + +@media (max-width: 640px) { + .cache-ttl-caption-title, + .cache-ttl-caption-controls { + width: auto; + float: none; + } + + .cache-ttl-caption-controls { + padding-left: 4px; + } +} diff --git a/Development/client/src/app/invoices/invoices-list/invoices-list.component.html b/Development/client/src/app/invoices/invoices-list/invoices-list.component.html index 82680cb..5ef8950 100644 --- a/Development/client/src/app/invoices/invoices-list/invoices-list.component.html +++ b/Development/client/src/app/invoices/invoices-list/invoices-list.component.html @@ -1,11 +1,25 @@
+ + + + + -
-
- Invoice List +
+
+ Invoice List +
+
+ + + ? + Controls how long results stay cached after you return to this page. Value is in seconds. +
@@ -22,10 +36,6 @@ -
- - -
diff --git a/Development/client/src/app/invoices/invoices-list/invoices-list.component.ts b/Development/client/src/app/invoices/invoices-list/invoices-list.component.ts index def6f53..3c546e2 100644 --- a/Development/client/src/app/invoices/invoices-list/invoices-list.component.ts +++ b/Development/client/src/app/invoices/invoices-list/invoices-list.component.ts @@ -16,6 +16,9 @@ import { FilterUtils } from 'primeng/utils'; import { DateUtils, Utils } from '@app/shared/utils'; import { RestoreTableState } from '@app/shared/restore-table-state'; import { GAService } from '@app/shared/ga.service'; +import { InvoiceCacheService } from '@app/domain/services/invoice-cache.service'; +import { ListReturnCacheService } from '@app/domain/services/list-return-cache.service'; +import { FilterDefinition, FilterChangeEvent } from '@app/shared/dynamic-filter/dynamic-filter.component'; @Component({ selector: 'agm-invoices-list', @@ -43,13 +46,23 @@ export class InvoicesListComponent extends BaseComp implements OnInit, OnDestroy readonly invoiceStatus = invoiceStatus; + searchAccordionOpen = sessionStorage.getItem('invoices-list-accordion') === 'true'; + private lastFiltersQuery: Record | undefined; + private useCacheOnReturn = false; + cacheTtlSeconds: number; + + invoiceFilterDefinitions: FilterDefinition[]; + constructor( private readonly route: ActivatedRoute, private readonly datePipe: DatePipe, private readonly invoiceSvc: InvoiceService, - private readonly restoreTableSvc: RestoreTableState + private readonly restoreTableSvc: RestoreTableState, + private readonly invoiceCache: InvoiceCacheService, + private readonly listReturnCache: ListReturnCacheService ) { super(); + this.cacheTtlSeconds = Math.round(this.invoiceCache.getTtlMs() / 1000); this.totalInvoices = { '=0': '', '=1': $localize`:@@total#invoice:Total: # invoice`, @@ -74,6 +87,14 @@ export class InvoicesListComponent extends BaseComp implements OnInit, OnDestroy ]; this.statusFilter = []; + + this.invoiceFilterDefinitions = [ + { key: 'code', label: $localize`:@@invoiceNumber:Invoice Number`, dataType: 'text' }, + { key: 'status', label: $localize`:@@status:Status`, dataType: 'select-multi', options: this.status }, + { key: 'openDate', label: $localize`:@@openDate:Open Date`, dataType: 'date' }, + { key: 'dueDate', label: $localize`:@@dueDate:Due Date`, dataType: 'date' }, + { key: 'createdAt', label: $localize`:@@createdAt:Created Date`, dataType: 'date-preset' }, + ]; } ngOnInit(): void { @@ -97,7 +118,19 @@ export class InvoicesListComponent extends BaseComp implements OnInit, OnDestroy }); } }); - this.store.dispatch(new invoiceActions.Fetch()); + this.useCacheOnReturn = this.listReturnCache.startVisit('invoices'); + const savedFilters = sessionStorage.getItem('invoices-list-last-filters'); + if (savedFilters) { + try { + this.lastFiltersQuery = JSON.parse(savedFilters); + } catch (_err) { + this.lastFiltersQuery = undefined; + } + } + this.store.dispatch(savedFilters + ? new invoiceActions.Fetch({ filters: savedFilters, useCache: this.useCacheOnReturn }) + : new invoiceActions.Fetch({ useCache: this.useCacheOnReturn }) + ); FilterUtils[this.openDateFilter] = (value, filter): boolean => { if (filter === undefined || filter === null) { return true; @@ -180,6 +213,28 @@ export class InvoicesListComponent extends BaseComp implements OnInit, OnDestroy this.restoreTableSvc.restoreTableFirst(this.dt); } + onAccordionToggle(expanded: boolean) { + sessionStorage.setItem('invoices-list-accordion', String(expanded)); + } + + updateCacheTtl(): void { + const ttlMs = this.invoiceCache.setTtlMs(Number(this.cacheTtlSeconds || 0) * 1000); + this.cacheTtlSeconds = Math.round(ttlMs / 1000); + } + + onFiltersSubmit(event: FilterChangeEvent) { + const q = { ...event.query }; + const filtersStr = JSON.stringify(q); + const prevFilters = sessionStorage.getItem('invoices-list-last-filters'); + if (filtersStr !== prevFilters) { + this.invoiceCache.invalidate(); + this.useCacheOnReturn = false; + } + this.lastFiltersQuery = q; + sessionStorage.setItem('invoices-list-last-filters', filtersStr); + this.store.dispatch(new invoiceActions.Fetch({ filters: filtersStr, useCache: this.useCacheOnReturn })); + } + onPageChange(e) { this.restoreTableSvc.onPageChange(this.dt, e); } @@ -208,6 +263,7 @@ export class InvoicesListComponent extends BaseComp implements OnInit, OnDestroy editInvoice(invoice: Invoice) { this.selectInvoice(invoice); + this.listReturnCache.markPending('invoices'); // Track invoice selection this.gaSvc.trackInvoiceSelected({ @@ -225,6 +281,7 @@ export class InvoicesListComponent extends BaseComp implements OnInit, OnDestroy viewInvoice(invoice: Invoice) { this.selectInvoice(invoice); + this.listReturnCache.markPending('invoices'); // Track invoice selection this.gaSvc.trackInvoiceSelected({ diff --git a/Development/client/src/app/invoices/invoices.module.ts b/Development/client/src/app/invoices/invoices.module.ts index 3da8f17..93b8b33 100644 --- a/Development/client/src/app/invoices/invoices.module.ts +++ b/Development/client/src/app/invoices/invoices.module.ts @@ -39,6 +39,7 @@ import { CurrencyNamePipe } from '@app/invoices/pipes/currency-name.pipe'; import { ScrollPanelModule } from 'primeng/scrollpanel'; import { CurrencyCodePositionPipe } from '@app/invoices/pipes/currency-code-position.pipe'; import { InvoiceStatusPipe } from '@app/invoices/pipes/invoice-status.pipe'; +import { AccordionModule } from 'primeng/accordion'; @NgModule({ @@ -66,6 +67,7 @@ import { InvoiceStatusPipe } from '@app/invoices/pipes/invoice-status.pipe'; EffectsModule.forFeature([SettingEffects, InvoiceEffects, CostingItemEffects, JobEffects]), PanelModule, ScrollPanelModule, + AccordionModule, ], declarations: [InvoicesListComponent, InvoicesMgtComponent, SettingsComponent, CustomerSettingsListComponent, CustomerSettingsComponent, InvoiceEditComponent, CostingItemComponent, CostingItemTypePipe, CostingItemUnitPipe, CurrencyNamePipe, CurrencyCodePositionPipe, InvoiceStatusPipe, InvoiceDetailComponent], exports: [CostingItemTypePipe, CostingItemUnitPipe, CurrencyNamePipe, CurrencyCodePositionPipe, InvoiceStatusPipe], diff --git a/Development/client/src/app/job/effects/job.effects.ts b/Development/client/src/app/job/effects/job.effects.ts index ef55c83..714e977 100644 --- a/Development/client/src/app/job/effects/job.effects.ts +++ b/Development/client/src/app/job/effects/job.effects.ts @@ -109,7 +109,6 @@ export class JobEffects { save_method: 'manual' }); - this.jobCache.invalidate(); return new jobActions.UpdateSuccess(updatedJob) }), catchError(err => { diff --git a/Development/client/src/app/job/job-list/job-list.component.css b/Development/client/src/app/job/job-list/job-list.component.css index 9575074..d2c6d04 100644 --- a/Development/client/src/app/job/job-list/job-list.component.css +++ b/Development/client/src/app/job/job-list/job-list.component.css @@ -8,8 +8,76 @@ .inline-flex-end { display: inline-flex; justify-content: flex-end; + align-items: center; + flex-wrap: nowrap; + white-space: nowrap; + max-width: 100%; +} + +.cache-ttl-caption-controls { + display: flex; + justify-content: flex-end; + flex: 0 0 auto; + min-width: 0; +} + +.cache-ttl-help { + position: relative; + display: inline-flex; + vertical-align: middle; + margin-right: 6px; + outline: none; +} + +.cache-ttl-help-icon { + display: inline-flex; + align-items: center; + justify-content: center; + width: 20px; + height: 20px; + border: none; + border-radius: 50%; + font-weight: bold; + cursor: help; + color: #fff; + background: transparent; +} + +.cache-ttl-help-text { + position: absolute; + top: calc(100% + 6px); + right: 0; + width: 220px; + white-space: normal; + padding: 8px 10px; + border-radius: 4px; + background: #323232; + color: #fff; + text-align: left; + line-height: 1.35; + font-size: 12px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.25); + opacity: 0; + visibility: hidden; + pointer-events: none; + z-index: 1000; + transition: opacity 0.15s ease; +} + +.cache-ttl-help:hover .cache-ttl-help-text, +.cache-ttl-help:focus .cache-ttl-help-text, +.cache-ttl-help:focus-within .cache-ttl-help-text { + opacity: 1; + visibility: visible; } :host ::ng-deep .ui-fluid .ui-calendar { width: 100%; +} + +@media (max-width: 640px) { + .cache-ttl-caption-controls { + width: auto; + float: none; + } } \ No newline at end of file diff --git a/Development/client/src/app/job/job-list/job-list.component.html b/Development/client/src/app/job/job-list/job-list.component.html index 6ebcba4..993134d 100644 --- a/Development/client/src/app/job/job-list/job-list.component.html +++ b/Development/client/src/app/job/job-list/job-list.component.html @@ -101,8 +101,14 @@
-
+
+ + + ? + Controls how long results stay cached after you return to this page. Value is in seconds. + diff --git a/Development/client/src/app/job/job-list/job-list.component.ts b/Development/client/src/app/job/job-list/job-list.component.ts index 8092a68..cd70d05 100644 --- a/Development/client/src/app/job/job-list/job-list.component.ts +++ b/Development/client/src/app/job/job-list/job-list.component.ts @@ -29,6 +29,7 @@ import { InvoiceService } from '@app/domain/services/invoice.service'; import { RestoreTableState } from '@app/shared/restore-table-state'; import { GAService } from '@app/shared/ga.service'; import { JobCacheService } from '@app/domain/services/job-cache.service'; +import { ListReturnCacheService } from '@app/domain/services/list-return-cache.service'; import { FilterDefinition, FilterChangeEvent } from '@app/shared/dynamic-filter/dynamic-filter.component'; @@ -51,6 +52,8 @@ export class JobListComponent extends BaseComp implements OnInit, AfterViewInit, private currentByTime: string[] | undefined; private lastFiltersQuery: Record | undefined; + private useCacheOnReturn = false; + cacheTtlSeconds: number; jobFilterDefinitions: FilterDefinition[] = []; readonly defaultDynamicFilters = [ @@ -106,10 +109,12 @@ export class JobListComponent extends BaseComp implements OnInit, AfterViewInit, private readonly invoiceSvc: InvoiceService, private readonly restoreTableSvc: RestoreTableState, private readonly gaService: GAService, - private readonly jobCache: JobCacheService + private readonly jobCache: JobCacheService, + private readonly listReturnCache: ListReturnCacheService ) { super(); this.currClient = ({ label: globals.all, value: null }); + this.cacheTtlSeconds = Math.round(this.jobCache.getTtlMs() / 1000); this.totalJobs = { '=0': '', '=1': '1 ' + $localize`:@@job:job`.toLocaleLowerCase(), 'other': $localize`:@@total#Jobs:Total: # jobs` }; this.status = [ @@ -218,6 +223,8 @@ export class JobListComponent extends BaseComp implements OnInit, AfterViewInit, this.acre = pkg[effectiveLookupKey]?.acre; } })); + + this.useCacheOnReturn = this.listReturnCache.startVisit('jobs'); } ngAfterViewInit(): void { @@ -279,7 +286,8 @@ export class JobListComponent extends BaseComp implements OnInit, AfterViewInit, clientId: clientId, jobsByPilot: (this.authSvc.isPilotUser && this.settings.jobsByPilot), byTime: this.currentByTime, - status: statusValue + status: statusValue, + useCache: this.useCacheOnReturn })); } @@ -296,6 +304,11 @@ export class JobListComponent extends BaseComp implements OnInit, AfterViewInit, sessionStorage.setItem('job-list-accordion', String(expanded)); } + updateCacheTtl(): void { + const ttlMs = this.jobCache.setTtlMs(Number(this.cacheTtlSeconds || 0) * 1000); + this.cacheTtlSeconds = Math.round(ttlMs / 1000); + } + restoreTableFirst() { this.restoreTableSvc.restoreTableFirst(this.dt); } @@ -349,6 +362,7 @@ export class JobListComponent extends BaseComp implements OnInit, AfterViewInit, duplicateJob() { if (this.canAddNew) { + this.listReturnCache.markPending('jobs'); // Track bulk action (duplicate) this.gaService.trackJobBulkAction({ user_id: this.authSvc.user?._id || 'anonymous', @@ -365,10 +379,12 @@ export class JobListComponent extends BaseComp implements OnInit, AfterViewInit, } editJob() { + this.listReturnCache.markPending('jobs'); this.router.navigate([`./${this.currentJob._id}/edit`], { relativeTo: this.route }); } editJobMap() { + this.listReturnCache.markPending('jobs'); this.router.navigate([`./${this.currentJob._id}/editMap`, { flag: 0 }], { relativeTo: this.route }); } @@ -387,11 +403,13 @@ export class JobListComponent extends BaseComp implements OnInit, AfterViewInit, reloadJobs() { const startTime = performance.now(); this.jobCache.invalidate(); + this.useCacheOnReturn = false; if (this.lastFiltersQuery) { this.store.dispatch(new jobActions.Fetch({ jobsByPilot: (this.authSvc.isPilotUser && this.settings.jobsByPilot), - filters: JSON.stringify(this.lastFiltersQuery) + filters: JSON.stringify(this.lastFiltersQuery), + useCache: false })); } else { this.fetchJobsByClient(this.currClient && this.currClient.value); @@ -465,10 +483,18 @@ export class JobListComponent extends BaseComp implements OnInit, AfterViewInit, this.currClient = matchedClient || { label: globals.all, value: null }; this.filterClientLocked = !!clientId; + const filtersStr = JSON.stringify(q); + const prevFilters = sessionStorage.getItem('job-list-last-filters'); + if (filtersStr !== prevFilters) { + this.useCacheOnReturn = false; + } + this.lastFiltersQuery = q; + sessionStorage.setItem('job-list-last-filters', filtersStr); this.store.dispatch(new jobActions.Fetch({ jobsByPilot: (this.authSvc.isPilotUser && this.settings.jobsByPilot), - filters: JSON.stringify(q) + filters: filtersStr, + useCache: this.useCacheOnReturn })); } diff --git a/Development/server/controllers/client.js b/Development/server/controllers/client.js index c06c744..f3fa585 100644 --- a/Development/server/controllers/client.js +++ b/Development/server/controllers/client.js @@ -7,9 +7,19 @@ const Client = require('../model/client'), { updateUser_put } = require('./user'), // Import user controller functions cache = require('../helpers/mem_cache'), utils = require('../helpers/utils'), + { buildDynamicFilter } = require('../helpers/dynamic_filter'), { Errors, UserTypes } = require('../helpers/constants'), { AppError, AppParamError } = require('../helpers/app_error'); +const CLIENT_FILTER_SCHEMA = { + name: 'text', + username: 'text', + email: 'text', + phone: 'text', + contact: 'text', + address: 'text', +}; + async function createClient_post(req, res) { const _client = req.body; delete _client._id; @@ -57,7 +67,15 @@ async function deleteClient(req, res) { async function search_post(req, res) { if (!utils.isObjectId(req.body.byPuid)) AppParamError.throw(Errors.INVALID_PUID); - const clients = await Client.find({ parent: ObjectId(req.body.byPuid), markedDelete: { $ne: true } }, '-password', { lean: true }) + const baseFilter = { parent: ObjectId(req.body.byPuid), markedDelete: { $ne: true } }; + let dynFilter = {}; + if (req.body.filters) { + try { + dynFilter = buildDynamicFilter(req.body.filters, CLIENT_FILTER_SCHEMA); + } catch (_e) { /* ignore invalid filter */ } + } + + const clients = await Client.find({ ...baseFilter, ...dynFilter }, '-password', { lean: true }) .populate({ path: 'Country', select: 'code name -_id' }); res.json(clients); diff --git a/Development/server/controllers/customer.js b/Development/server/controllers/customer.js index fab1ff0..d41ac24 100644 --- a/Development/server/controllers/customer.js +++ b/Development/server/controllers/customer.js @@ -11,13 +11,25 @@ const Customer = require('../model/customer'), { AppParamError } = require('../helpers/app_error'), { validateTrial } = require('../helpers/subscription_util'), moment = require('moment'), + { buildDynamicFilter } = require('../helpers/dynamic_filter'), debug = require('debug')('agm:controllers-customer'); +const CUSTOMER_FILTER_SCHEMA = { + name: 'text', + username: 'text', + email: 'text', + contact: 'text', + createdAt: 'date-preset', +}; + async function getCustomers_get(req, res) { + const filtersStr = req.query.filters || ''; + + const dynamicFilter = filtersStr ? buildDynamicFilter(filtersStr, CUSTOMER_FILTER_SCHEMA) : {}; const customers = await Customer.aggregate( [ - { $match: { kind: UserTypes.APP, markedDelete: { $ne: true } } }, + { $match: { kind: UserTypes.APP, markedDelete: { $ne: true }, ...dynamicFilter } }, { $lookup: { from: 'jobs', // Reference the Job collection @@ -182,8 +194,7 @@ async function updateCustomer_put(req, res) { uiValue[1].premium = customer.premium; } } - } - res.json(customer); + } res.json(customer); } async function deleteCustomer(req, res) { @@ -201,7 +212,6 @@ async function deleteCustomer(req, res) { cache.delete(u[0]); } cache.delete(_id); - res.json({ message: 'deleted' }); } diff --git a/Development/server/controllers/invoice.js b/Development/server/controllers/invoice.js index 743ac89..ffb17e0 100644 --- a/Development/server/controllers/invoice.js +++ b/Development/server/controllers/invoice.js @@ -16,7 +16,16 @@ const mongoUtil = require('../helpers/mongo'), assert = require('assert'), path = require('path'), - { flattenDeep } = require('lodash'); + { flattenDeep } = require('lodash'), + { buildDynamicFilter } = require('../helpers/dynamic_filter'); + +const INVOICE_FILTER_SCHEMA = { + code: 'text', + status: 'select-multi', + openDate: 'date', + dueDate: 'date', + createdAt: 'date-preset', +}; function getParamsUpdateJobs(invoice) { assert(!utils.isEmptyObj(invoice), AppInputError.create()); @@ -45,10 +54,16 @@ async function getInvoices_get(req, res) { const isClientRole = req.ut === UserTypes.CLIENT; const userId = req.uid; + const filtersStr = req.query.filters || ''; const filter = { byPuid: puid }; if (isClientRole) filter['clients.billTo'] = userId; + if (filtersStr) { + const dynamicFilter = buildDynamicFilter(filtersStr, INVOICE_FILTER_SCHEMA); + Object.assign(filter, dynamicFilter); + } + const invoices = await Invoice.find(filter) .populate({ path: 'clients.billTo', select: 'name email -kind' }) .select('code status createdAt openDate dueDate paymentTerm clients.subTotal clients.discount clients.split clients.taxRate'); @@ -637,12 +652,14 @@ async function deleteInvoicesByIds(invoiceIds, puid) { } async function deleteInvoiceById(req, res) { - const removedInvIds = await deleteInvoicesByIds([req.params?.id], req.userInfo?.puid); + const puid = req.userInfo?.puid; + const removedInvIds = await deleteInvoicesByIds([req.params?.id], puid); res.json(removedInvIds.length ? removedInvIds[0] : []); } async function deleteInvoices(req, res) { - const removedInvIds = await deleteInvoicesByIds(req?.body?.invoiceIds, req.userInfo?.puid); + const puid = req.userInfo?.puid; + const removedInvIds = await deleteInvoicesByIds(req?.body?.invoiceIds, puid); res.json(removedInvIds); } diff --git a/Development/server/controllers/job.js b/Development/server/controllers/job.js index c3c4e52..b239948 100644 --- a/Development/server/controllers/job.js +++ b/Development/server/controllers/job.js @@ -4,7 +4,6 @@ module.exports = function (locals) { const async = require('async'), assert = require('assert'), - crypto = require('crypto'), debug = require('debug')('agm:job'), ObjectId = require('mongodb').ObjectId, { Job, JobLog, App, AppFile, AppDetail, Customer, JobAssign, Vehicle, Pilot, RptVar, User } = require('../model'), @@ -30,7 +29,6 @@ module.exports = function (locals) { { AppParamError, AppError, AppAuthError, AppInputError } = require('../helpers/app_error'), { getFormattedAddress, getDocumentCountry } = require('../helpers/user_helper'), env = require('../helpers/env'), - redisCache = require('../helpers/redis_cache'), partnerSyncService = require('../services/partner_sync_service'), taskQHelper = require('../helpers/job_queue').getInstance(), { paginateWithCursor, validateCursorParams } = require('../helpers/cursor_pagination'), @@ -50,37 +48,6 @@ module.exports = function (locals) { status: 'numeric-enum', }; - const JOBS_CACHE_TTL = env.JOBS_CACHE_TTL; - - /** - * Build a deterministic cache key for the jobs list endpoint. - * Normalises query params by sorting keys so that identical filter sets always - * produce the same key regardless of the order params were appended. - * @param {string} userScope - 'admin' or the user's puid string - * @param {object} query - req.query - * @returns {string} - */ - function buildJobsListCacheKey(userScope, query) { - const normalized = JSON.stringify( - Object.fromEntries(Object.keys(query).sort().map(k => [k, query[k]])) - ); - const hash = crypto.createHash('sha256').update(normalized).digest('hex').slice(0, 16); - return `jobs:list:${userScope}:${hash}`; - } - - /** - * Invalidate all cached jobs-list entries for a given puid scope and for the - * admin scope (since admin queries span all accounts). - * Fire-and-forget — errors are silently swallowed so they never block a response. - * @param {string|ObjectId} puid - */ - function invalidateJobsListCache(puid) { - if (!JOBS_CACHE_TTL) return; - redisCache.delByPattern(`jobs:list:${puid}:*`).catch(() => {}); - redisCache.delByPattern('jobs:list:admin:*').catch(() => {}); - } - - /** * Handles the GET request to retrieve a list of jobs based on the provided filters. * @@ -108,10 +75,6 @@ module.exports = function (locals) { // Determine scope for cache key once so it can be reused for both read and write. const userScope = req.ut === UserTypes.ADMIN ? 'admin' : String(userInfo.puid); - if (JOBS_CACHE_TTL) { - const cached = await redisCache.get(buildJobsListCacheKey(userScope, req.query)); - if (cached) return res.json(cached); - } const filtersJson = req.query['filters']; let filter = { markedDelete: { $in: [null, false] } }; @@ -204,9 +167,6 @@ module.exports = function (locals) { ]; const jobs = await Job.aggregate(pipeline); - if (JOBS_CACHE_TTL) { - redisCache.set(buildJobsListCacheKey(userScope, req.query), jobs, JOBS_CACHE_TTL).catch(() => {}); - } res.json(jobs); } @@ -258,7 +218,6 @@ module.exports = function (locals) { insertedJob.operator = _job.operator; insertedJob.vehicle = _job.vehicle; res.json(insertedJob); - invalidateJobsListCache(req.userInfo?.puid); } async function getJob_get(req, res) { @@ -437,7 +396,6 @@ module.exports = function (locals) { } res.json(retJob); - invalidateJobsListCache(req.userInfo?.puid); } async function deleteJob(req, res) { @@ -445,7 +403,6 @@ module.exports = function (locals) { const puid = req.userInfo?.puid || job?.byPuid; if (job) await job.removeFull(); res.json({ ok: true }).end(); - invalidateJobsListCache(puid); } /** diff --git a/Development/server/controllers/main.js b/Development/server/controllers/main.js index 2ada389..6890ed3 100644 --- a/Development/server/controllers/main.js +++ b/Development/server/controllers/main.js @@ -41,6 +41,7 @@ async function getAppConfig_get(req, res) { } delete userSettings.userId; + userSettings.browserListCacheTtlMs = env.BROWSER_LIST_CACHE_TTL_MS; if (isSysAdmin(userInfo.kind)) { if (utils.isEmptyArray(userSettings.trialDays)) userSettings.trialDays = DEFAULT_TRIAL_DAYS; userSettings.promoMinExpiryDays = env.PROMO_MIN_EXPIRY_DAYS; diff --git a/Development/server/helpers/env.js b/Development/server/helpers/env.js index 24fb659..a9765a9 100644 --- a/Development/server/helpers/env.js +++ b/Development/server/helpers/env.js @@ -70,6 +70,7 @@ module.exports = { APP_RATE_SKIPFAIL: utils.stringToBoolean(process.env.APP_RATE_SKIPFAIL), // true: trust all proxies, ['ip address', 'other ip address'] or number: number of proxies between user and server APP_RATE_TRUST_PROXIES: Number(process.env.APP_RATE_TRUST_PROXIES) || 1, + BROWSER_LIST_CACHE_TTL_MS: Number(process.env.BROWSER_LIST_CACHE_TTL_MS) || 60 * 1000, // Make APP_URL default to prod host or local dev APP_URL: IS_PROD ? (process.env.APP_URL || 'https://agmission.agnav.com') : (process.env.APP_URL || 'http://localhost:4200'), @@ -129,7 +130,6 @@ module.exports = { QUEUE_NAME_PARTNER: getQueueName(process.env.QUEUE_NAME_PARTNER, 'partner_tasks'), REDIS_PWD: process.env.REDIS_PWD, - JOBS_CACHE_TTL: Number(process.env.JOBS_CACHE_TTL) || 60, // seconds; set to 0 to disable SMTP_HOST: process.env.SMTP_HOST, SMTP_PORT: process.env.SMTP_PORT, diff --git a/Development/server/package-lock.json b/Development/server/package-lock.json index ddfb74a..b7b83e3 100644 --- a/Development/server/package-lock.json +++ b/Development/server/package-lock.json @@ -32,7 +32,7 @@ "debug": "^4.1.1", "dotenv": "^16.4.5", "email-templates": "11.0.3", - "error-handler": "file:../../../@agn/error-handler", + "error-handler": "file:../../../../@agn/error-handler", "exceljs": "^4.2.1", "express": "^4.18.1", "express-async-errors": "^3.1.1", @@ -92,7 +92,8 @@ "npm": ">=6.14.13 <=10.8.2" } }, - "../../../@agn/error-handler": { + "../../../../@agn/error-handler": { + "name": "error-handler", "version": "2.0.0", "license": "Proprietary", "dependencies": { @@ -227,48 +228,48 @@ } }, "node_modules/@aws-sdk/client-cognito-identity": { - "version": "3.1035.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.1035.0.tgz", - "integrity": "sha512-sHjCtR5GdKVXZ/bEXwqUMoGzak9fnI4Ny/NyG7+gAkYC1Z+CIg5Kr4QSrqGjA+N2iwCly8f2/rGAsNo+JGeaNA==", + "version": "3.1030.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.1030.0.tgz", + "integrity": "sha512-PD9RIT5eJEXsP+Dq8fncTXOFAOI+EP3fRa/z1te2xehAVawixEpAJkjEE03A4msqPWGJ2S0TM2bb6zDbP66w3g==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/credential-provider-node": "^3.972.35", - "@aws-sdk/middleware-host-header": "^3.972.10", - "@aws-sdk/middleware-logger": "^3.972.10", - "@aws-sdk/middleware-recursion-detection": "^3.972.11", - "@aws-sdk/middleware-user-agent": "^3.972.34", - "@aws-sdk/region-config-resolver": "^3.972.13", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-endpoints": "^3.996.8", - "@aws-sdk/util-user-agent-browser": "^3.972.10", - "@aws-sdk/util-user-agent-node": "^3.973.20", - "@smithy/config-resolver": "^4.4.17", - "@smithy/core": "^3.23.16", - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/hash-node": "^4.2.14", - "@smithy/invalid-dependency": "^4.2.14", - "@smithy/middleware-content-length": "^4.2.14", - "@smithy/middleware-endpoint": "^4.4.31", - "@smithy/middleware-retry": "^4.5.4", - "@smithy/middleware-serde": "^4.2.19", - "@smithy/middleware-stack": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/node-http-handler": "^4.6.0", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.12", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/credential-provider-node": "^3.972.30", + "@aws-sdk/middleware-host-header": "^3.972.9", + "@aws-sdk/middleware-logger": "^3.972.9", + "@aws-sdk/middleware-recursion-detection": "^3.972.10", + "@aws-sdk/middleware-user-agent": "^3.972.29", + "@aws-sdk/region-config-resolver": "^3.972.11", + "@aws-sdk/types": "^3.973.7", + "@aws-sdk/util-endpoints": "^3.996.6", + "@aws-sdk/util-user-agent-browser": "^3.972.9", + "@aws-sdk/util-user-agent-node": "^3.973.15", + "@smithy/config-resolver": "^4.4.14", + "@smithy/core": "^3.23.14", + "@smithy/fetch-http-handler": "^5.3.16", + "@smithy/hash-node": "^4.2.13", + "@smithy/invalid-dependency": "^4.2.13", + "@smithy/middleware-content-length": "^4.2.13", + "@smithy/middleware-endpoint": "^4.4.29", + "@smithy/middleware-retry": "^4.5.0", + "@smithy/middleware-serde": "^4.2.17", + "@smithy/middleware-stack": "^4.2.13", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/node-http-handler": "^4.5.2", + "@smithy/protocol-http": "^5.3.13", + "@smithy/smithy-client": "^4.12.9", + "@smithy/types": "^4.14.0", + "@smithy/url-parser": "^4.2.13", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.48", - "@smithy/util-defaults-mode-node": "^4.2.53", - "@smithy/util-endpoints": "^3.4.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.3", + "@smithy/util-defaults-mode-browser": "^4.3.45", + "@smithy/util-defaults-mode-node": "^4.2.49", + "@smithy/util-endpoints": "^3.3.4", + "@smithy/util-middleware": "^4.2.13", + "@smithy/util-retry": "^4.3.0", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" }, @@ -277,23 +278,22 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.974.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.974.4.tgz", - "integrity": "sha512-EbVgyzQ83/Lf6oh1O4vYY47tuYw3Aosthh865LNU77KyotKz+uvEBNmsl/bSVS/vG+IU39mCqcOHrnhmhF4lug==", + "version": "3.973.27", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.27.tgz", + "integrity": "sha512-CUZ5m8hwMCH6OYI4Li/WgMfIEx10Q2PLI9Y3XOUTPGZJ53aZ0007jCv+X/ywsaERyKPdw5MRZWk877roQksQ4A==", "optional": true, "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/xml-builder": "^3.972.18", - "@smithy/core": "^3.23.16", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/signature-v4": "^5.3.14", - "@smithy/smithy-client": "^4.12.12", - "@smithy/types": "^4.14.1", + "@aws-sdk/types": "^3.973.7", + "@aws-sdk/xml-builder": "^3.972.17", + "@smithy/core": "^3.23.14", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/property-provider": "^4.2.13", + "@smithy/protocol-http": "^5.3.13", + "@smithy/signature-v4": "^5.3.13", + "@smithy/smithy-client": "^4.12.9", + "@smithy/types": "^4.14.0", "@smithy/util-base64": "^4.3.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.3", + "@smithy/util-middleware": "^4.2.13", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" }, @@ -302,15 +302,15 @@ } }, "node_modules/@aws-sdk/credential-provider-cognito-identity": { - "version": "3.972.27", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.972.27.tgz", - "integrity": "sha512-ibA1vjaLhS1c/wNa9SSSOunjz5I72DBfAYrtM4G4sKQ3wPuk8ycfvU3AF8nEJBfefqPu2RhHxW7bEC9wiA/MTA==", + "version": "3.972.22", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.972.22.tgz", + "integrity": "sha512-ih6ORpme4i2qJqGckOQ9Lt2iiZ+5tm3bnfsT5TwoPyFnuDURXv3OdhYa3Nr/m0iJr38biqKYKdGKb5GR1KB2hw==", "optional": true, "dependencies": { - "@aws-sdk/nested-clients": "^3.997.2", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/types": "^4.14.1", + "@aws-sdk/nested-clients": "^3.996.19", + "@aws-sdk/types": "^3.973.7", + "@smithy/property-provider": "^4.2.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -318,15 +318,15 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.972.30", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.30.tgz", - "integrity": "sha512-dHpeqa29a0cBYq/h59IC2EK3AphLY96nKy4F35kBtiz9GuKDc32UYRTgjZaF8uuJCnqgw9omUZKR+9myyDHC2A==", + "version": "3.972.25", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.25.tgz", + "integrity": "sha512-6QfI0wv4jpG5CrdO/AO0JfZ2ux+tKwJPrUwmvxXF50vI5KIypKVGNF6b4vlkYEnKumDTI1NX2zUBi8JoU5QU3A==", "optional": true, "dependencies": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/types": "^3.973.7", + "@smithy/property-provider": "^4.2.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -334,20 +334,20 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.972.32", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.32.tgz", - "integrity": "sha512-A+ZTT//Mswkf9DFEM6XlngwOtYdD8X4CUcoZ2wdpgI8cCs9mcGeuhgTwbGJvealub/MeONOaUr3FbRPMKmTDjg==", + "version": "3.972.27", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.27.tgz", + "integrity": "sha512-3V3Usj9Gs93h865DqN4M2NWJhC5kXU9BvZskfN3+69omuYlE3TZxOEcVQtBGLOloJB7BVfJKXVLqeNhOzHqSlQ==", "optional": true, "dependencies": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/types": "^3.973.8", - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/node-http-handler": "^4.6.0", - "@smithy/property-provider": "^4.2.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.12", - "@smithy/types": "^4.14.1", - "@smithy/util-stream": "^4.5.24", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/types": "^3.973.7", + "@smithy/fetch-http-handler": "^5.3.16", + "@smithy/node-http-handler": "^4.5.2", + "@smithy/property-provider": "^4.2.13", + "@smithy/protocol-http": "^5.3.13", + "@smithy/smithy-client": "^4.12.9", + "@smithy/types": "^4.14.0", + "@smithy/util-stream": "^4.5.22", "tslib": "^2.6.2" }, "engines": { @@ -355,24 +355,24 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.972.34", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.34.tgz", - "integrity": "sha512-MoRc7tLnx3JpFkV2R826enEfBUVN8o9Cc7y3hnbMwiWzL/VJhgfxRQzHkEL9vWorMWP7tibltsRcLoid9fsVdw==", + "version": "3.972.29", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.29.tgz", + "integrity": "sha512-SiBuAnXecCbT/OpAf3vqyI/AVE3mTaYr9ShXLybxZiPLBiPCCOIWSGAtYYGQWMRvobBTiqOewaB+wcgMMZI2Aw==", "optional": true, "dependencies": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/credential-provider-env": "^3.972.30", - "@aws-sdk/credential-provider-http": "^3.972.32", - "@aws-sdk/credential-provider-login": "^3.972.34", - "@aws-sdk/credential-provider-process": "^3.972.30", - "@aws-sdk/credential-provider-sso": "^3.972.34", - "@aws-sdk/credential-provider-web-identity": "^3.972.34", - "@aws-sdk/nested-clients": "^3.997.2", - "@aws-sdk/types": "^3.973.8", - "@smithy/credential-provider-imds": "^4.2.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/credential-provider-env": "^3.972.25", + "@aws-sdk/credential-provider-http": "^3.972.27", + "@aws-sdk/credential-provider-login": "^3.972.29", + "@aws-sdk/credential-provider-process": "^3.972.25", + "@aws-sdk/credential-provider-sso": "^3.972.29", + "@aws-sdk/credential-provider-web-identity": "^3.972.29", + "@aws-sdk/nested-clients": "^3.996.19", + "@aws-sdk/types": "^3.973.7", + "@smithy/credential-provider-imds": "^4.2.13", + "@smithy/property-provider": "^4.2.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -380,18 +380,18 @@ } }, "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.972.34", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.34.tgz", - "integrity": "sha512-XVSklkRRQ/CQDmv3VVFdZRl5hTFgncFhZrLyi0Ai4LZk5o3jpY5HIfuTK7ad7tixPKa+iQmL9+vg9qNyYZB+nw==", + "version": "3.972.29", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.29.tgz", + "integrity": "sha512-OGOslTbOlxXexKMqhxCEbBQbUIfuhGxU5UXw3Fm56ypXHvrXH4aTt/xb5Y884LOoteP1QST1lVZzHfcTnWhiPQ==", "optional": true, "dependencies": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/nested-clients": "^3.997.2", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/nested-clients": "^3.996.19", + "@aws-sdk/types": "^3.973.7", + "@smithy/property-provider": "^4.2.13", + "@smithy/protocol-http": "^5.3.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -399,22 +399,22 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.972.35", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.35.tgz", - "integrity": "sha512-nVrY7AdGfzYgAa/jd9m06p3ES7QQDaB7zN9c+vXnVXxBRkAs9MjRDPB5AKogWuC6phddltfvHGFqLDJmyU9u/A==", + "version": "3.972.30", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.30.tgz", + "integrity": "sha512-FMnAnWxc8PG+ZrZ2OBKzY4luCUJhe9CG0B9YwYr4pzrYGLXBS2rl+UoUvjGbAwiptxRL6hyA3lFn03Bv1TLqTw==", "optional": true, "dependencies": { - "@aws-sdk/credential-provider-env": "^3.972.30", - "@aws-sdk/credential-provider-http": "^3.972.32", - "@aws-sdk/credential-provider-ini": "^3.972.34", - "@aws-sdk/credential-provider-process": "^3.972.30", - "@aws-sdk/credential-provider-sso": "^3.972.34", - "@aws-sdk/credential-provider-web-identity": "^3.972.34", - "@aws-sdk/types": "^3.973.8", - "@smithy/credential-provider-imds": "^4.2.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/credential-provider-env": "^3.972.25", + "@aws-sdk/credential-provider-http": "^3.972.27", + "@aws-sdk/credential-provider-ini": "^3.972.29", + "@aws-sdk/credential-provider-process": "^3.972.25", + "@aws-sdk/credential-provider-sso": "^3.972.29", + "@aws-sdk/credential-provider-web-identity": "^3.972.29", + "@aws-sdk/types": "^3.973.7", + "@smithy/credential-provider-imds": "^4.2.13", + "@smithy/property-provider": "^4.2.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -422,16 +422,16 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.972.30", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.30.tgz", - "integrity": "sha512-McJPomNTSEo+C6UA3Zq6pFrcyTUaVsoPPBOvbOHAoIFPc8Z2CMLndqFJOnB+9bVFiBTWQLutlVGmrocBbvv4MQ==", + "version": "3.972.25", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.25.tgz", + "integrity": "sha512-HR7ynNRdNhNsdVCOCegy1HsfsRzozCOPtD3RzzT1JouuaHobWyRfJzCBue/3jP7gECHt+kQyZUvwg/cYLWurNQ==", "optional": true, "dependencies": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/types": "^3.973.7", + "@smithy/property-provider": "^4.2.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -439,18 +439,18 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.972.34", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.34.tgz", - "integrity": "sha512-WngYb2K+/yhkDOmDfAOjoCa9Ja3he0DZiAraboKwgWoVRkajDIcDYBCVbUTxtTUldvQoe7VvHLTrBNxvftN1aQ==", + "version": "3.972.29", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.29.tgz", + "integrity": "sha512-HWv4SEq3jZDYPlwryZVef97+U8CxxRos5mK8sgGO1dQaFZpV5giZLzqGE5hkDmh2csYcBO2uf5XHjPTpZcJlig==", "optional": true, "dependencies": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/nested-clients": "^3.997.2", - "@aws-sdk/token-providers": "3.1035.0", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/nested-clients": "^3.996.19", + "@aws-sdk/token-providers": "3.1026.0", + "@aws-sdk/types": "^3.973.7", + "@smithy/property-provider": "^4.2.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -458,17 +458,17 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.972.34", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.34.tgz", - "integrity": "sha512-5KLUH+XmSNRj6amJiJSrPsCxU5l/PYDfxyqPa1MxWhHoQC3sxvGPrSib3IE+HQlfRA4e2kO0bnJy7HJdjvpuuA==", + "version": "3.972.29", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.29.tgz", + "integrity": "sha512-PdMBza1WEKEUPFEmMGCfnU2RYCz9MskU2e8JxjyUOsMKku7j9YaDKvbDi2dzC0ihFoM6ods2SbhfAAro+Gwlew==", "optional": true, "dependencies": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/nested-clients": "^3.997.2", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/nested-clients": "^3.996.19", + "@aws-sdk/types": "^3.973.7", + "@smithy/property-provider": "^4.2.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -476,30 +476,30 @@ } }, "node_modules/@aws-sdk/credential-providers": { - "version": "3.1035.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.1035.0.tgz", - "integrity": "sha512-HimZ+jVYJzeD6+pwXvhKX2mvx2fScLbjC4+oz1HF9Vuls/3lAWKHssLLVpCIuXL8Ov6cWe1vQIbwpFajuTAmEA==", + "version": "3.1030.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.1030.0.tgz", + "integrity": "sha512-hQhRax7MzsG40mc6Es2Muvfai+jfWt1j1odqP4UQtUok6Fu4qbJNRGgQ/EAi7Sb6VAL0EdY5JGGMevHz2oO+AA==", "optional": true, "dependencies": { - "@aws-sdk/client-cognito-identity": "3.1035.0", - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/credential-provider-cognito-identity": "^3.972.27", - "@aws-sdk/credential-provider-env": "^3.972.30", - "@aws-sdk/credential-provider-http": "^3.972.32", - "@aws-sdk/credential-provider-ini": "^3.972.34", - "@aws-sdk/credential-provider-login": "^3.972.34", - "@aws-sdk/credential-provider-node": "^3.972.35", - "@aws-sdk/credential-provider-process": "^3.972.30", - "@aws-sdk/credential-provider-sso": "^3.972.34", - "@aws-sdk/credential-provider-web-identity": "^3.972.34", - "@aws-sdk/nested-clients": "^3.997.2", - "@aws-sdk/types": "^3.973.8", - "@smithy/config-resolver": "^4.4.17", - "@smithy/core": "^3.23.16", - "@smithy/credential-provider-imds": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/types": "^4.14.1", + "@aws-sdk/client-cognito-identity": "3.1030.0", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/credential-provider-cognito-identity": "^3.972.22", + "@aws-sdk/credential-provider-env": "^3.972.25", + "@aws-sdk/credential-provider-http": "^3.972.27", + "@aws-sdk/credential-provider-ini": "^3.972.29", + "@aws-sdk/credential-provider-login": "^3.972.29", + "@aws-sdk/credential-provider-node": "^3.972.30", + "@aws-sdk/credential-provider-process": "^3.972.25", + "@aws-sdk/credential-provider-sso": "^3.972.29", + "@aws-sdk/credential-provider-web-identity": "^3.972.29", + "@aws-sdk/nested-clients": "^3.996.19", + "@aws-sdk/types": "^3.973.7", + "@smithy/config-resolver": "^4.4.14", + "@smithy/core": "^3.23.14", + "@smithy/credential-provider-imds": "^4.2.13", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/property-provider": "^4.2.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -507,14 +507,14 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.972.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.10.tgz", - "integrity": "sha512-IJSsIMeVQ8MMCPbuh1AbltkFhLBLXn7aejzfX5YKT/VLDHn++Dcz8886tXckE+wQssyPUhaXrJhdakO2VilRhg==", + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.9.tgz", + "integrity": "sha512-je5vRdNw4SkuTnmRbFZLdye4sQ0faLt8kwka5wnnSU30q1mHO4X+idGEJOOE+Tn1ME7Oryn05xxkDvIb3UaLaQ==", "optional": true, "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", + "@aws-sdk/types": "^3.973.7", + "@smithy/protocol-http": "^5.3.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -522,13 +522,13 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.972.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.10.tgz", - "integrity": "sha512-OOuGvvz1Dm20SjZo5oEBePFqxt5nf8AwkNDSyUHvD9/bfNASmstcYxFAHUowy4n6Io7mWUZ04JURZwSBvyQanQ==", + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.9.tgz", + "integrity": "sha512-HsVgDrruhqI28RkaXALm8grJ7Agc1wF6Et0xh6pom8NdO2VdO/SD9U/tPwUjewwK/pVoka+EShBxyCvgsPCtog==", "optional": true, "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@smithy/types": "^4.14.1", + "@aws-sdk/types": "^3.973.7", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -536,40 +536,15 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.11.tgz", - "integrity": "sha512-+zz6f79Kj9V5qFK2P+D8Ehjnw4AhphAlCAsPjUqEcInA9umtSSKMrHbSagEeOIsDNuvVrH98bjRHcyQukTrhaQ==", + "version": "3.972.10", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.10.tgz", + "integrity": "sha512-RVQQbq5orQ/GHUnXvqEOj2HHPBJm+mM+ySwZKS5UaLBwra5ugRtiH09PLUoOZRl7a1YzaOzXSuGbn9iD5j60WQ==", "optional": true, "dependencies": { - "@aws-sdk/types": "^3.973.8", + "@aws-sdk/types": "^3.973.7", "@aws/lambda-invoke-store": "^0.2.2", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.972.33", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.33.tgz", - "integrity": "sha512-n8Eh/+kq3u/EodLr8n6sQupu03QGjf122RHXCTGLaHSkavz/2beSKpRlq2oDgfmJZNkAkWF113xbyaUmyOd+YA==", - "optional": true, - "dependencies": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-arn-parser": "^3.972.3", - "@smithy/core": "^3.23.16", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/signature-v4": "^5.3.14", - "@smithy/smithy-client": "^4.12.12", - "@smithy/types": "^4.14.1", - "@smithy/util-config-provider": "^4.2.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-stream": "^4.5.24", - "@smithy/util-utf8": "^4.2.2", + "@smithy/protocol-http": "^5.3.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -577,18 +552,18 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.972.34", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.34.tgz", - "integrity": "sha512-jrmJHyYlTQocR7H4VhvSFhaoedMb2rmlOTvFWD6tNBQ/EVQhTsrNfQUYFuPiOc2wUGxbm5LgCHtnvVmCPgODHw==", + "version": "3.972.29", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.29.tgz", + "integrity": "sha512-f/sIRzuTfEjg6NsbMYvye2VsmnQoNgntntleQyx5uGacUYzszbfIlO3GcI6G6daWUmTm0IDZc11qMHWwF0o0mQ==", "optional": true, "dependencies": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-endpoints": "^3.996.8", - "@smithy/core": "^3.23.16", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "@smithy/util-retry": "^4.3.3", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/types": "^3.973.7", + "@aws-sdk/util-endpoints": "^3.996.6", + "@smithy/core": "^3.23.14", + "@smithy/protocol-http": "^5.3.13", + "@smithy/types": "^4.14.0", + "@smithy/util-retry": "^4.3.0", "tslib": "^2.6.2" }, "engines": { @@ -596,48 +571,47 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.997.2", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.2.tgz", - "integrity": "sha512-uGGQO08YetrqfInOKG5atRMrCDRQWRuZ9gGfKY6svPmuE4K7ac+XcbCkpWpjcA7yCYsBaKB/Nly4XKgPXUO1PA==", + "version": "3.996.19", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.996.19.tgz", + "integrity": "sha512-uFkmCDXvmQYLanlYdOFS0+MQWkrj9wPMt/ZCc/0J0fjPim6F5jBVBmEomvGY/j77ILW6GTPwN22Jc174Mhkw6Q==", "optional": true, "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/middleware-host-header": "^3.972.10", - "@aws-sdk/middleware-logger": "^3.972.10", - "@aws-sdk/middleware-recursion-detection": "^3.972.11", - "@aws-sdk/middleware-user-agent": "^3.972.34", - "@aws-sdk/region-config-resolver": "^3.972.13", - "@aws-sdk/signature-v4-multi-region": "^3.996.21", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-endpoints": "^3.996.8", - "@aws-sdk/util-user-agent-browser": "^3.972.10", - "@aws-sdk/util-user-agent-node": "^3.973.20", - "@smithy/config-resolver": "^4.4.17", - "@smithy/core": "^3.23.16", - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/hash-node": "^4.2.14", - "@smithy/invalid-dependency": "^4.2.14", - "@smithy/middleware-content-length": "^4.2.14", - "@smithy/middleware-endpoint": "^4.4.31", - "@smithy/middleware-retry": "^4.5.4", - "@smithy/middleware-serde": "^4.2.19", - "@smithy/middleware-stack": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/node-http-handler": "^4.6.0", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.12", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/middleware-host-header": "^3.972.9", + "@aws-sdk/middleware-logger": "^3.972.9", + "@aws-sdk/middleware-recursion-detection": "^3.972.10", + "@aws-sdk/middleware-user-agent": "^3.972.29", + "@aws-sdk/region-config-resolver": "^3.972.11", + "@aws-sdk/types": "^3.973.7", + "@aws-sdk/util-endpoints": "^3.996.6", + "@aws-sdk/util-user-agent-browser": "^3.972.9", + "@aws-sdk/util-user-agent-node": "^3.973.15", + "@smithy/config-resolver": "^4.4.14", + "@smithy/core": "^3.23.14", + "@smithy/fetch-http-handler": "^5.3.16", + "@smithy/hash-node": "^4.2.13", + "@smithy/invalid-dependency": "^4.2.13", + "@smithy/middleware-content-length": "^4.2.13", + "@smithy/middleware-endpoint": "^4.4.29", + "@smithy/middleware-retry": "^4.5.0", + "@smithy/middleware-serde": "^4.2.17", + "@smithy/middleware-stack": "^4.2.13", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/node-http-handler": "^4.5.2", + "@smithy/protocol-http": "^5.3.13", + "@smithy/smithy-client": "^4.12.9", + "@smithy/types": "^4.14.0", + "@smithy/url-parser": "^4.2.13", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.48", - "@smithy/util-defaults-mode-node": "^4.2.53", - "@smithy/util-endpoints": "^3.4.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.3", + "@smithy/util-defaults-mode-browser": "^4.3.45", + "@smithy/util-defaults-mode-node": "^4.2.49", + "@smithy/util-endpoints": "^3.3.4", + "@smithy/util-middleware": "^4.2.13", + "@smithy/util-retry": "^4.3.0", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" }, @@ -646,32 +620,15 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.972.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.13.tgz", - "integrity": "sha512-CvJ2ZIjK/jVD/lbOpowBVElJyC1YxLTIJ13yM0AEo0t2v7swOzGjSA6lJGH+DwZXQhcjUjoYwc8bVYCX5MDr1A==", + "version": "3.972.11", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.11.tgz", + "integrity": "sha512-6Q8B1dcx6BBqUTY1Mc/eROKA0FImEEY5VPSd6AGPEUf0ErjExz4snVqa9kNJSoVDV1rKaNf3qrWojgcKW+SdDg==", "optional": true, "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@smithy/config-resolver": "^4.4.17", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.996.21", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.21.tgz", - "integrity": "sha512-3EpT+C0QdmTMB5aVeJ5odWSLt9vg2oGzUXl1xvUazKGlkr9OBYnegNWqhhjGgZdv8RmSi5eS8nqqB+euNP2aqA==", - "optional": true, - "dependencies": { - "@aws-sdk/middleware-sdk-s3": "^3.972.33", - "@aws-sdk/types": "^3.973.8", - "@smithy/protocol-http": "^5.3.14", - "@smithy/signature-v4": "^5.3.14", - "@smithy/types": "^4.14.1", + "@aws-sdk/types": "^3.973.7", + "@smithy/config-resolver": "^4.4.14", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -679,17 +636,17 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.1035.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1035.0.tgz", - "integrity": "sha512-E6IO3Cn+OzBe6Sb5pnubd5Y8qSUMAsVKkD5QSwFfIx5fV1g5SkYwUDRDyPlm90RuIVcCo28wpMJU6W8wXH46Aw==", + "version": "3.1026.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1026.0.tgz", + "integrity": "sha512-Ieq/HiRrbEtrYP387Nes0XlR7H1pJiJOZKv+QyQzMYpvTiDs0VKy2ZB3E2Zf+aFovWmeE7lRE4lXyF7dYM6GgA==", "optional": true, "dependencies": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/nested-clients": "^3.997.2", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/nested-clients": "^3.996.19", + "@aws-sdk/types": "^3.973.7", + "@smithy/property-provider": "^4.2.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -697,24 +654,12 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.973.8", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.8.tgz", - "integrity": "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw==", - "optional": true, - "dependencies": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.972.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.3.tgz", - "integrity": "sha512-HzSD8PMFrvgi2Kserxuff5VitNq2sgf3w9qxmskKDiDTThWfVteJxuCS9JXiPIPtmCrp+7N9asfIaVhBFORllA==", + "version": "3.973.7", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.7.tgz", + "integrity": "sha512-reXRwoJ6CfChoqAsBszUYajAF8Z2LRE+CRcKocvFSMpIiLOtYU3aJ9trmn6VVPAzbbY5LXF+FfmUslbXk1SYFg==", "optional": true, "dependencies": { + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -722,15 +667,15 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.996.8", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.8.tgz", - "integrity": "sha512-oOZHcRDihk5iEe5V25NVWg45b3qEA8OpHWVdU/XQh8Zj4heVPAJqWvMphQnU7LkufmUo10EpvFPZuQMiFLJK3g==", + "version": "3.996.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.6.tgz", + "integrity": "sha512-2nUQ+2ih7CShuKHpGSIYvvAIOHy52dOZguYG36zptBukhw6iFwcvGfG0tes0oZFWQqEWvgZe9HLWaNlvXGdOrg==", "optional": true, "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-endpoints": "^3.4.2", + "@aws-sdk/types": "^3.973.7", + "@smithy/types": "^4.14.0", + "@smithy/url-parser": "^4.2.13", + "@smithy/util-endpoints": "^3.3.4", "tslib": "^2.6.2" }, "engines": { @@ -750,27 +695,27 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.972.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.10.tgz", - "integrity": "sha512-FAzqXvfEssGdSIz8ejatan0bOdx1qefBWKF/gWmVBXIP1HkS7v/wjjaqrAGGKvyihrXTXW00/2/1nTJtxpXz7g==", + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.9.tgz", + "integrity": "sha512-sn/LMzTbGjYqCCF24390WxPd6hkpoSptiUn5DzVp4cD71yqw+yGEGm1YCxyEoPXyc8qciM8UzLJcZBFslxo5Uw==", "optional": true, "dependencies": { - "@aws-sdk/types": "^3.973.8", - "@smithy/types": "^4.14.1", + "@aws-sdk/types": "^3.973.7", + "@smithy/types": "^4.14.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.973.20", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.20.tgz", - "integrity": "sha512-owEqyKr0z5hWwk+uHwudwNhyFMZ9f9eSWr/k/XD6yeDCI7hHyc56s4UOY1iBQmoramTbdAY4UCuLLEuKmjVXrg==", + "version": "3.973.15", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.15.tgz", + "integrity": "sha512-fYn3s9PtKdgQkczGZCFMgkNEe8aq1JCVbnRqjqN9RSVW43xn2RV9xdcZ3z01a48Jpkuh/xCmBKJxdLOo4Ozg7w==", "optional": true, "dependencies": { - "@aws-sdk/middleware-user-agent": "^3.972.34", - "@aws-sdk/types": "^3.973.8", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/types": "^4.14.1", + "@aws-sdk/middleware-user-agent": "^3.972.29", + "@aws-sdk/types": "^3.973.7", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/types": "^4.14.0", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" }, @@ -787,12 +732,12 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.972.18", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.18.tgz", - "integrity": "sha512-BMDNVG1ETXRhl1tnisQiYBef3RShJ1kfZA7x7afivTFMLirfHNTb6U71K569HNXhSXbQZsweHvSDZ6euBw8hPA==", + "version": "3.972.17", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.17.tgz", + "integrity": "sha512-Ra7hjqAZf1OXRRMueB13qex7mFJRDK/pgCvdSFemXBT8KCGnQDPoKzHY1SjN+TjJVmnpSF14W5tJ1vDamFu+Gg==", "optional": true, "dependencies": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "fast-xml-parser": "5.5.8", "tslib": "^2.6.2" }, @@ -1430,9 +1375,9 @@ } }, "node_modules/@mongodb-js/saslprep": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.8.tgz", - "integrity": "sha512-kpjr2jy2w71w0oqAMI8oibBmiF9lXxWkEQs5gMkW4hVE48bsqINGLxnCSYW62ck/NHXJQpQEfA9WlJ1sY0eqBg==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.6.tgz", + "integrity": "sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g==", "optional": true, "dependencies": { "sparse-bitfield": "^3.0.3" @@ -1642,16 +1587,16 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "node_modules/@smithy/config-resolver": { - "version": "4.4.17", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.17.tgz", - "integrity": "sha512-TzDZcAnhTyAHbXVxWZo7/tEcrIeFq20IBk8So3OLOetWpR8EwY/yEqBMBFaJMeyEiREDq4NfEl+qO3OAUD+vbQ==", + "version": "4.4.15", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.15.tgz", + "integrity": "sha512-BJdMBY5YO9iHh+lPLYdHv6LbX+J8IcPCYMl1IJdBt2KDWNHwONHrPVHk3ttYBqJd9wxv84wlbN0f7GlQzcQtNQ==", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^4.3.14", - "@smithy/types": "^4.14.1", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/types": "^4.14.0", "@smithy/util-config-provider": "^4.2.2", - "@smithy/util-endpoints": "^3.4.2", - "@smithy/util-middleware": "^4.2.14", + "@smithy/util-endpoints": "^3.4.0", + "@smithy/util-middleware": "^4.2.13", "tslib": "^2.6.2" }, "engines": { @@ -1659,18 +1604,18 @@ } }, "node_modules/@smithy/core": { - "version": "3.23.16", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.16.tgz", - "integrity": "sha512-JStomOrINQA1VqNEopLsgcdgwd42au7mykKqVr30XFw89wLt9sDxJDi4djVPRwQmmzyTGy/uOvTc2ultMpFi1w==", + "version": "3.23.14", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.14.tgz", + "integrity": "sha512-vJ0IhpZxZAkFYOegMKSrxw7ujhhT2pass/1UEcZ4kfl5srTAqtPU5I7MdYQoreVas3204ykCiNhY1o7Xlz6Yyg==", "optional": true, "dependencies": { - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", + "@smithy/protocol-http": "^5.3.13", + "@smithy/types": "^4.14.0", + "@smithy/url-parser": "^4.2.13", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-stream": "^4.5.24", + "@smithy/util-middleware": "^4.2.13", + "@smithy/util-stream": "^4.5.22", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" @@ -1680,15 +1625,15 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.14.tgz", - "integrity": "sha512-Au28zBN48ZAoXdooGUHemuVBrkE+Ie6RPmGNIAJsFqj33Vhb6xAgRifUydZ2aY+M+KaMAETAlKk5NC5h1G7wpg==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.13.tgz", + "integrity": "sha512-wboCPijzf6RJKLOvnjDAiBxGSmSnGXj35o5ZAWKDaHa/cvQ5U3ZJ13D4tMCE8JG4dxVAZFy/P0x/V9CwwdfULQ==", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^4.3.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/property-provider": "^4.2.13", + "@smithy/types": "^4.14.0", + "@smithy/url-parser": "^4.2.13", "tslib": "^2.6.2" }, "engines": { @@ -1696,14 +1641,14 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "5.3.17", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.17.tgz", - "integrity": "sha512-bXOvQzaSm6MnmLaWA1elgfQcAtN4UP3vXqV97bHuoOrHQOJiLT3ds6o9eo5bqd0TJfRFpzdGnDQdW3FACiAVdw==", + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.16.tgz", + "integrity": "sha512-nYDRUIvNd4mFmuXraRWt6w5UsZTNqtj4hXJA/iiOD4tuseIdLP9Lq38teH/SZTcIFCa2f+27o7hYpIsWktJKEQ==", "optional": true, "dependencies": { - "@smithy/protocol-http": "^5.3.14", - "@smithy/querystring-builder": "^4.2.14", - "@smithy/types": "^4.14.1", + "@smithy/protocol-http": "^5.3.13", + "@smithy/querystring-builder": "^4.2.13", + "@smithy/types": "^4.14.0", "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" }, @@ -1712,12 +1657,12 @@ } }, "node_modules/@smithy/hash-node": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.14.tgz", - "integrity": "sha512-8ZBDY2DD4wr+GGjTpPtiglEsqr0lUP+KHqgZcWczFf6qeZ/YRjMIOoQWVQlmwu7EtxKTd8YXD8lblmYcpBIA1g==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.13.tgz", + "integrity": "sha512-4/oy9h0jjmY80a2gOIo75iLl8TOPhmtx4E2Hz+PfMjvx/vLtGY4TMU/35WRyH2JHPfT5CVB38u4JRow7gnmzJA==", "optional": true, "dependencies": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" @@ -1727,12 +1672,12 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.14.tgz", - "integrity": "sha512-c21qJiTSb25xvvOp+H2TNZzPCngrvl5vIPqPB8zQ/DmJF4QWXO19x1dWfMJZ6wZuuWUPPm0gV8C0cU3+ifcWuw==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.13.tgz", + "integrity": "sha512-jvC0RB/8BLj2SMIkY0Npl425IdnxZJxInpZJbu563zIRnVjpDMXevU3VMCRSabaLB0kf/eFIOusdGstrLJ8IDg==", "optional": true, "dependencies": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -1752,13 +1697,13 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.14.tgz", - "integrity": "sha512-xhHq7fX4/3lv5NHxLUk3OeEvl0xZ+Ek3qIbWaCL4f9JwgDZEclPBElljaZCAItdGPQl/kSM4LPMOpy1MYgprpw==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.13.tgz", + "integrity": "sha512-IPMLm/LE4AZwu6qiE8Rr8vJsWhs9AtOdySRXrOM7xnvclp77Tyh7hMs/FRrMf26kgIe67vFJXXOSmVxS7oKeig==", "optional": true, "dependencies": { - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", + "@smithy/protocol-http": "^5.3.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -1766,18 +1711,18 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.4.31", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.31.tgz", - "integrity": "sha512-KJPdCIN2kOE2aGmqZd7eUTr4WQwOGgtLWgUkswGJggs7rBcQYQjcZMEDa3C0DwbOiXS9L8/wDoQHkfxBYLfiLw==", + "version": "4.4.29", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.29.tgz", + "integrity": "sha512-R9Q/58U+qBiSARGWbAbFLczECg/RmysRksX6Q8BaQEpt75I7LI6WGDZnjuC9GXSGKljEbA7N118LhGaMbfrTXw==", "optional": true, "dependencies": { - "@smithy/core": "^3.23.16", - "@smithy/middleware-serde": "^4.2.19", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-middleware": "^4.2.14", + "@smithy/core": "^3.23.14", + "@smithy/middleware-serde": "^4.2.17", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", + "@smithy/url-parser": "^4.2.13", + "@smithy/util-middleware": "^4.2.13", "tslib": "^2.6.2" }, "engines": { @@ -1785,19 +1730,19 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.5.4.tgz", - "integrity": "sha512-/z7nIFK+ZRW3Ie/l3NEVGdy34LvmEOzBrtBAvgWZ/4PrKX0xP3kWm8pkfcwUk523SqxZhdbQP9JSXgjF77Uhpw==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.5.1.tgz", + "integrity": "sha512-/zY+Gp7Qj2D2hVm3irkCyONER7E9MiX3cUUm/k2ZmhkzZkrPgwVS4aJ5NriZUEN/M0D1hhjrgjUmX04HhRwdWA==", "optional": true, "dependencies": { - "@smithy/core": "^3.23.16", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/service-error-classification": "^4.3.0", - "@smithy/smithy-client": "^4.12.12", - "@smithy/types": "^4.14.1", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.3", + "@smithy/core": "^3.23.14", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/protocol-http": "^5.3.13", + "@smithy/service-error-classification": "^4.2.13", + "@smithy/smithy-client": "^4.12.9", + "@smithy/types": "^4.14.0", + "@smithy/util-middleware": "^4.2.13", + "@smithy/util-retry": "^4.3.1", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" }, @@ -1806,14 +1751,14 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "4.2.19", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.19.tgz", - "integrity": "sha512-Q6y+W9h3iYVMCKWDoVge+OC1LKFqbEKaq8SIWG2X2bWJRpd/6dDLyICcNLT6PbjH3Rr6bmg/SeDB25XFOFfeEw==", + "version": "4.2.17", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.17.tgz", + "integrity": "sha512-0T2mcaM6v9W1xku86Dk0bEW7aEseG6KenFkPK98XNw0ZhOqOiD1MrMsdnQw9QsL3/Oa85T53iSMlm0SZdSuIEQ==", "optional": true, "dependencies": { - "@smithy/core": "^3.23.16", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", + "@smithy/core": "^3.23.14", + "@smithy/protocol-http": "^5.3.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -1821,12 +1766,12 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.14.tgz", - "integrity": "sha512-2dvkUKLuFdKsCRmOE4Mn63co0Djtsm+JMh0bYZQupN1pJwMeE8FmQmRLLzzEMN0dnNi7CDCYYH8F0EVwWiPBeA==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.13.tgz", + "integrity": "sha512-g72jN/sGDLyTanrCLH9fhg3oysO3f7tQa6eWWsMyn2BiYNCgjF24n4/I9wff/5XidFvjj9ilipAoQrurTUrLvw==", "optional": true, "dependencies": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -1834,14 +1779,14 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "4.3.14", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.14.tgz", - "integrity": "sha512-S+gFjyo/weSVL0P1b9Ts8C/CwIfNCgUPikk3sl6QVsfE/uUuO+QsF+NsE/JkpvWqqyz1wg7HFdiaZuj5CoBMRg==", + "version": "4.3.13", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.13.tgz", + "integrity": "sha512-iGxQ04DsKXLckbgnX4ipElrOTk+IHgTyu0q0WssZfYhDm9CQWHmu6cOeI5wmWRxpXbBDhIIfXMWz5tPEtcVqbw==", "optional": true, "dependencies": { - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@smithy/property-provider": "^4.2.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -1849,14 +1794,14 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.6.0.tgz", - "integrity": "sha512-P734cAoTFtuGfWa/R3jgBnGlURt2w9bYEBwQNMKf58sRM9RShirB2mKwLsVP+jlG/wxpCu8abv8NxdUts8tdLA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.5.2.tgz", + "integrity": "sha512-/oD7u8M0oj2ZTFw7GkuuHWpIxtWdLlnyNkbrWcyVYhd5RJNDuczdkb0wfnQICyNFrVPlr8YHOhamjNy3zidhmA==", "optional": true, "dependencies": { - "@smithy/protocol-http": "^5.3.14", - "@smithy/querystring-builder": "^4.2.14", - "@smithy/types": "^4.14.1", + "@smithy/protocol-http": "^5.3.13", + "@smithy/querystring-builder": "^4.2.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -1864,12 +1809,12 @@ } }, "node_modules/@smithy/property-provider": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.14.tgz", - "integrity": "sha512-WuM31CgfsnQ/10i7NYr0PyxqknD72Y5uMfUMVSniPjbEPceiTErb4eIqJQ+pdxNEAUEWrewrGjIRjVbVHsxZiQ==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.13.tgz", + "integrity": "sha512-bGzUCthxRmezuxkbu9wD33wWg9KX3hJpCXpQ93vVkPrHn9ZW6KNNdY5xAUWNuRCwQ+VyboFuWirG1lZhhkcyRQ==", "optional": true, "dependencies": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -1877,12 +1822,12 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.14.tgz", - "integrity": "sha512-dN5F8kHx8RNU0r+pCwNmFZyz6ChjMkzShy/zup6MtkRmmix4vZzJdW+di7x//b1LiynIev88FM18ie+wwPcQtQ==", + "version": "5.3.13", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.13.tgz", + "integrity": "sha512-+HsmuJUF4u8POo6s8/a2Yb/AQ5t/YgLovCuHF9oxbocqv+SZ6gd8lC2duBFiCA/vFHoHQhoq7QjqJqZC6xOxxg==", "optional": true, "dependencies": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -1890,12 +1835,12 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.14.tgz", - "integrity": "sha512-XYA5Z0IqTeF+5XDdh4BBmSA0HvbgVZIyv4cmOoUheDNR57K1HgBp9ukUMx3Cr3XpDHHpLBnexPE3LAtDsZkj2A==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.13.tgz", + "integrity": "sha512-tG4aOYFCZdPMjbgfhnIQ322H//ojujldp1SrHPHpBSb3NqgUp3dwiUGRJzie87hS1DYwWGqDuPaowoDF+rYCbQ==", "optional": true, "dependencies": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" }, @@ -1904,12 +1849,12 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.14.tgz", - "integrity": "sha512-hr+YyqBD23GVvRxGGrcc/oOeNlK3PzT5Fu4dzrDXxzS1LpFiuL2PQQqKPs87M79aW7ziMs+nvB3qdw77SqE7Lw==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.13.tgz", + "integrity": "sha512-hqW3Q4P+CDzUyQ87GrboGMeD7XYNMOF+CuTwu936UQRB/zeYn3jys8C3w+wMkDfY7CyyyVwZQ5cNFoG0x1pYmA==", "optional": true, "dependencies": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -1917,24 +1862,24 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.3.0.tgz", - "integrity": "sha512-9jKsBYQRPR0xBLgc2415RsA5PIcP2sis4oBdN9s0D13cg1B1284mNTjx9Yc+BEERXzuPm5ObktI96OxsKh8E9A==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.13.tgz", + "integrity": "sha512-a0s8XZMfOC/qpqq7RCPvJlk93rWFrElH6O++8WJKz0FqnA4Y7fkNi/0mnGgSH1C4x6MFsuBA8VKu4zxFrMe5Vw==", "optional": true, "dependencies": { - "@smithy/types": "^4.14.1" + "@smithy/types": "^4.14.0" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.9.tgz", - "integrity": "sha512-495/V2I15SHgedSJoDPD23JuSfKAp726ZI1V0wtjB07Wh7q/0tri/0e0DLefZCHgxZonrGKt/OCTpAtP1wE1kQ==", + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.8.tgz", + "integrity": "sha512-VZCZx2bZasxdqxVgEAhREvDSlkatTPnkdWy1+Kiy8w7kYPBosW0V5IeDwzDUMvWBt56zpK658rx1cOBFOYaPaw==", "optional": true, "dependencies": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -1942,16 +1887,16 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.14.tgz", - "integrity": "sha512-1D9Y/nmlVjCeSivCbhZ7hgEpmHyY1h0GvpSZt3l0xcD9JjmjVC1CHOozS6+Gh+/ldMH8JuJ6cujObQqfayAVFA==", + "version": "5.3.13", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.13.tgz", + "integrity": "sha512-YpYSyM0vMDwKbHD/JA7bVOF6kToVRpa+FM5ateEVRpsTNu564g1muBlkTubXhSKKYXInhpADF46FPyrZcTLpXg==", "optional": true, "dependencies": { "@smithy/is-array-buffer": "^4.2.2", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", + "@smithy/protocol-http": "^5.3.13", + "@smithy/types": "^4.14.0", "@smithy/util-hex-encoding": "^4.2.2", - "@smithy/util-middleware": "^4.2.14", + "@smithy/util-middleware": "^4.2.13", "@smithy/util-uri-escape": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" @@ -1961,17 +1906,17 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.12.12", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.12.tgz", - "integrity": "sha512-daO7SJn4eM6ArbmrEs+/BTbH7af8AEbSL3OMQdcRvvn8tuUcR5rU2n6DgxIV53aXMS42uwK8NgKKCh5XgqYOPQ==", + "version": "4.12.9", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.9.tgz", + "integrity": "sha512-ovaLEcTU5olSeHcRXcxV6viaKtpkHZumn6Ps0yn7dRf2rRSfy794vpjOtrWDO0d1auDSvAqxO+lyhERSXQ03EQ==", "optional": true, "dependencies": { - "@smithy/core": "^3.23.16", - "@smithy/middleware-endpoint": "^4.4.31", - "@smithy/middleware-stack": "^4.2.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "@smithy/util-stream": "^4.5.24", + "@smithy/core": "^3.23.14", + "@smithy/middleware-endpoint": "^4.4.29", + "@smithy/middleware-stack": "^4.2.13", + "@smithy/protocol-http": "^5.3.13", + "@smithy/types": "^4.14.0", + "@smithy/util-stream": "^4.5.22", "tslib": "^2.6.2" }, "engines": { @@ -1979,9 +1924,9 @@ } }, "node_modules/@smithy/types": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.14.1.tgz", - "integrity": "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.14.0.tgz", + "integrity": "sha512-OWgntFLW88kx2qvf/c/67Vno1yuXm/f9M7QFAtVkkO29IJXGBIg0ycEaBTH0kvCtwmvZxRujrgP5a86RvsXJAQ==", "optional": true, "dependencies": { "tslib": "^2.6.2" @@ -1991,13 +1936,13 @@ } }, "node_modules/@smithy/url-parser": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.14.tgz", - "integrity": "sha512-p06BiBigJ8bTA3MgnOfCtDUWnAMY0YfedO/GRpmc7p+wg3KW8vbXy1xwSu5ASy0wV7rRYtlfZOIKH4XqfhjSQQ==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.13.tgz", + "integrity": "sha512-2G03yoboIRZlZze2+PT4GZEjgwQsJjUgn6iTsvxA02bVceHR6vp4Cuk7TUnPFWKF+ffNUk3kj4COwkENS2K3vw==", "optional": true, "dependencies": { - "@smithy/querystring-parser": "^4.2.14", - "@smithy/types": "^4.14.1", + "@smithy/querystring-parser": "^4.2.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -2068,14 +2013,14 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.48", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.48.tgz", - "integrity": "sha512-hxVRVPYaRDWa6YQdse1aWX1qrksmLsvNyGBKdc32q4jFzSjxYVNWfstknAfR228TnzS4tzgswXRuYIbhXBuXFQ==", + "version": "4.3.45", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.45.tgz", + "integrity": "sha512-ag9sWc6/nWZAuK3Wm9KlFJUnRkXLrXn33RFjIAmCTFThqLHY+7wCst10BGq56FxslsDrjhSie46c8OULS+BiIw==", "optional": true, "dependencies": { - "@smithy/property-provider": "^4.2.14", - "@smithy/smithy-client": "^4.12.12", - "@smithy/types": "^4.14.1", + "@smithy/property-provider": "^4.2.13", + "@smithy/smithy-client": "^4.12.9", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -2083,17 +2028,17 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.53", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.53.tgz", - "integrity": "sha512-ybgCk+9JdBq8pYC8Y6U5fjyS8e4sboyAShetxPNL0rRBtaVl56GSFAxsolVBIea1tXR4LPIzL8i6xqmcf0+DCQ==", + "version": "4.2.50", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.50.tgz", + "integrity": "sha512-xpjncL5XozFA3No7WypTsPU1du0fFS8flIyO+Wh2nhCy7bpEapvU7BR55Bg+wrfw+1cRA+8G8UsTjaxgzrMzXg==", "optional": true, "dependencies": { - "@smithy/config-resolver": "^4.4.17", - "@smithy/credential-provider-imds": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/smithy-client": "^4.12.12", - "@smithy/types": "^4.14.1", + "@smithy/config-resolver": "^4.4.15", + "@smithy/credential-provider-imds": "^4.2.13", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/property-provider": "^4.2.13", + "@smithy/smithy-client": "^4.12.9", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -2101,13 +2046,13 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.4.2.tgz", - "integrity": "sha512-a55Tr+3OKld4TTtnT+RhKOQHyPxm3j/xL4OR83WBUhLJaKDS9dnJ7arRMOp3t31dcLhApwG9bgvrRXBHlLdIkg==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.4.0.tgz", + "integrity": "sha512-QQHGPKkw6NPcU6TJ1rNEEa201srPtZiX4k61xL163vvs9sTqW/XKz+UEuJ00uvPqoN+5Rs4Ka1UJ7+Mp03IXJw==", "optional": true, "dependencies": { - "@smithy/node-config-provider": "^4.3.14", - "@smithy/types": "^4.14.1", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -2127,12 +2072,12 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.14.tgz", - "integrity": "sha512-1Su2vj9RYNDEv/V+2E+jXkkwGsgR7dc4sfHn9Z7ruzQHJIEni9zzw5CauvRXlFJfmgcqYP8fWa0dkh2Q2YaQyw==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.13.tgz", + "integrity": "sha512-GTooyrlmRTqvUen4eK7/K1p6kryF7bnDfq6XsAbIsf2mo51B/utaH+XThY6dKgNCWzMAaH/+OLmqaBuLhLWRow==", "optional": true, "dependencies": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -2140,13 +2085,13 @@ } }, "node_modules/@smithy/util-retry": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.3.3.tgz", - "integrity": "sha512-idjUvd4M9Jj6rXkhqw4H4reHoweuK4ZxYWyOrEp4N2rOF5VtaOlQGLDQJva/8WanNXk9ScQtsAb7o5UHGvFm4A==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.3.1.tgz", + "integrity": "sha512-FwmicpgWOkP5kZUjN3y+3JIom8NLGqSAJBeoIgK0rIToI817TEBHCrd0A2qGeKQlgDeP+Jzn4i0H/NLAXGy9uQ==", "optional": true, "dependencies": { - "@smithy/service-error-classification": "^4.3.0", - "@smithy/types": "^4.14.1", + "@smithy/service-error-classification": "^4.2.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" }, "engines": { @@ -2154,14 +2099,14 @@ } }, "node_modules/@smithy/util-stream": { - "version": "4.5.24", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.24.tgz", - "integrity": "sha512-na5vv2mBSDzXewLEEoWGI7LQQkfpmFEomBsmOpzLFjqGctm0iMwXY5lAwesY9pIaErkccW0qzEOUcYP+WKneXg==", + "version": "4.5.22", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.22.tgz", + "integrity": "sha512-3H8iq/0BfQjUs2/4fbHZ9aG9yNzcuZs24LPkcX1Q7Z+qpqaGM8+qbGmE8zo9m2nCRgamyvS98cHdcWvR6YUsew==", "optional": true, "dependencies": { - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/node-http-handler": "^4.6.0", - "@smithy/types": "^4.14.1", + "@smithy/fetch-http-handler": "^5.3.16", + "@smithy/node-http-handler": "^4.5.2", + "@smithy/types": "^4.14.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", @@ -2256,12 +2201,12 @@ } }, "node_modules/@turf/bbox": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-7.3.5.tgz", - "integrity": "sha512-oG1ya/HtBjAIg4TimbWx+nOYPbY0bCvt82Bq8tm6sBw3qqtbOyRSfDz79Sq90TnH7DXJprJ1qnVGKNtZ6jemfw==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-7.3.4.tgz", + "integrity": "sha512-D5ErVWtfQbEPh11yzI69uxqrcJmbPU/9Y59f1uTapgwAwQHQztDWgsYpnL3ns8r1GmPWLP8sGJLVTIk2TZSiYA==", "dependencies": { - "@turf/helpers": "7.3.5", - "@turf/meta": "7.3.5", + "@turf/helpers": "7.3.4", + "@turf/meta": "7.3.4", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" }, @@ -2293,9 +2238,9 @@ } }, "node_modules/@turf/bbox/node_modules/@turf/helpers": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.5.tgz", - "integrity": "sha512-E/NMGV5MwbjjP7AJXBtsanC3yY8N2MQ87IGdIgkB2ji5AtBpwnH4L3gEqpYN4RlCJJWbLbzO91BbKv2waUd0eg==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.4.tgz", + "integrity": "sha512-U/S5qyqgx3WTvg4twaH0WxF3EixoTCfDsmk98g1E3/5e2YKp7JKYZdz0vivsS5/UZLJeZDEElOSFH4pUgp+l7g==", "dependencies": { "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" @@ -2305,11 +2250,11 @@ } }, "node_modules/@turf/bbox/node_modules/@turf/meta": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.5.tgz", - "integrity": "sha512-r+ohqxoyqeigFB0oFrQx/YEHIkOKqcKpCjvZkvZs7Tkv+IFco5MezAd2zd4rzK+0DfFgDP3KpJc7HqrYjvEjhg==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.4.tgz", + "integrity": "sha512-tlmw9/Hs1p2n0uoHVm1w3ugw1I6L8jv9YZrcdQa4SH5FX5UY0ATrKeIvfA55FlL//PGuYppJp+eyg/0eb4goqw==", "dependencies": { - "@turf/helpers": "7.3.5", + "@turf/helpers": "7.3.4", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" }, @@ -4078,9 +4023,9 @@ } }, "node_modules/@xmldom/xmldom": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", - "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==", + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.12.tgz", + "integrity": "sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg==", "engines": { "node": ">=10.0.0" } @@ -4872,9 +4817,9 @@ "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==" }, "node_modules/axios": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.2.tgz", - "integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz", + "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==", "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", @@ -4934,9 +4879,9 @@ ] }, "node_modules/baseline-browser-mapping": { - "version": "2.10.21", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.21.tgz", - "integrity": "sha512-Q+rUQ7Uz8AHM7DEaNdwvfFCTq7a43lNTzuS94eiWqwyxfV/wJv+oUivef51T91mmRY4d4A1u9rcSvkeufCVXlA==", + "version": "2.10.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.19.tgz", + "integrity": "sha512-qCkNLi2sfBOn8XhZQ0FXsT1Ki/Yo5P90hrkRamVFRS7/KV9hpfA4HkoWNU152+8w0zPjnxo5psx5NL3PSGgv5g==", "dev": true, "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -5389,9 +5334,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001790", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001790.tgz", - "integrity": "sha512-bOoxfJPyYo+ds6W0YfptaCWbFnJYjh2Y1Eow5lRv+vI2u8ganPZqNm1JwNh0t2ELQCqIWg4B3dWEusgAmsoyOw==", + "version": "1.0.30001788", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001788.tgz", + "integrity": "sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==", "dev": true, "funding": [ { @@ -6619,9 +6564,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.5.344", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz", - "integrity": "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==", + "version": "1.5.339", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.339.tgz", + "integrity": "sha512-Is+0BBHJ4NrdpAYiperrmp53pLywG/yV/6lIMTAnhxvzj/Cmn5Q/ogSHC6AKe7X+8kPLxxFk0cs5oc/3j/fxIg==", "dev": true }, "node_modules/email-templates": { @@ -6716,7 +6661,7 @@ } }, "node_modules/error-handler": { - "resolved": "../../../@agn/error-handler", + "resolved": "../../../../@agn/error-handler", "link": true }, "node_modules/error-symbol": { @@ -7226,9 +7171,9 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "node_modules/fast-xml-builder": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.5.tgz", - "integrity": "sha512-4TJn/8FKLeslLAH3dnohXqE3QSoxkhvaMzepOIZytwJXZO69Bfz0HBdDHzOTOon6G59Zrk6VQ2bEiv1t61rfkA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.4.tgz", + "integrity": "sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg==", "funding": [ { "type": "github", @@ -8168,9 +8113,9 @@ } }, "node_modules/hasown": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", - "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dependencies": { "function-bind": "^1.1.2" }, @@ -9223,9 +9168,9 @@ } }, "node_modules/jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dependencies": { "universalify": "^2.0.0" }, @@ -10595,11 +10540,13 @@ }, "node_modules/node-libxml/node_modules/abbrev": { "version": "1.1.1", + "extraneous": true, "inBundle": true, "license": "ISC" }, "node_modules/node-libxml/node_modules/ansi-regex": { "version": "2.1.1", + "extraneous": true, "inBundle": true, "license": "MIT", "engines": { @@ -10608,11 +10555,13 @@ }, "node_modules/node-libxml/node_modules/aproba": { "version": "1.2.0", + "extraneous": true, "inBundle": true, "license": "ISC" }, "node_modules/node-libxml/node_modules/are-we-there-yet": { "version": "1.1.5", + "extraneous": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -10641,6 +10590,7 @@ }, "node_modules/node-libxml/node_modules/code-point-at": { "version": "1.1.0", + "extraneous": true, "inBundle": true, "license": "MIT", "engines": { @@ -10659,11 +10609,13 @@ }, "node_modules/node-libxml/node_modules/console-control-strings": { "version": "1.1.0", + "extraneous": true, "inBundle": true, "license": "ISC" }, "node_modules/node-libxml/node_modules/core-util-is": { "version": "1.0.2", + "extraneous": true, "inBundle": true, "license": "MIT" }, @@ -10677,6 +10629,7 @@ }, "node_modules/node-libxml/node_modules/deep-extend": { "version": "0.6.0", + "extraneous": true, "inBundle": true, "license": "MIT", "engines": { @@ -10685,11 +10638,13 @@ }, "node_modules/node-libxml/node_modules/delegates": { "version": "1.0.0", + "extraneous": true, "inBundle": true, "license": "MIT" }, "node_modules/node-libxml/node_modules/detect-libc": { "version": "1.0.3", + "extraneous": true, "inBundle": true, "license": "Apache-2.0", "bin": { @@ -10722,6 +10677,7 @@ }, "node_modules/node-libxml/node_modules/gauge": { "version": "2.7.4", + "extraneous": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -10762,6 +10718,7 @@ }, "node_modules/node-libxml/node_modules/has-unicode": { "version": "2.0.1", + "extraneous": true, "inBundle": true, "license": "ISC" }, @@ -10775,6 +10732,7 @@ }, "node_modules/node-libxml/node_modules/iconv-lite": { "version": "0.4.24", + "extraneous": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -10786,6 +10744,7 @@ }, "node_modules/node-libxml/node_modules/ignore-walk": { "version": "3.0.3", + "extraneous": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -10808,11 +10767,13 @@ }, "node_modules/node-libxml/node_modules/ini": { "version": "1.3.8", + "extraneous": true, "inBundle": true, "license": "ISC" }, "node_modules/node-libxml/node_modules/is-fullwidth-code-point": { "version": "1.0.0", + "extraneous": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -10824,6 +10785,7 @@ }, "node_modules/node-libxml/node_modules/isarray": { "version": "1.0.0", + "extraneous": true, "inBundle": true, "license": "MIT" }, @@ -10842,17 +10804,6 @@ "version": "0.0.8", "license": "MIT" }, - "node_modules/node-libxml/node_modules/minipass": { - "version": "3.1.3", - "extraneous": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/node-libxml/node_modules/mkdirp": { "version": "0.5.1", "license": "MIT", @@ -10894,6 +10845,7 @@ }, "node_modules/node-libxml/node_modules/needle": { "version": "2.5.2", + "extraneous": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -10910,6 +10862,7 @@ }, "node_modules/node-libxml/node_modules/needle/node_modules/debug": { "version": "3.2.7", + "extraneous": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -10918,11 +10871,13 @@ }, "node_modules/node-libxml/node_modules/needle/node_modules/ms": { "version": "2.1.3", + "extraneous": true, "inBundle": true, "license": "MIT" }, "node_modules/node-libxml/node_modules/node-pre-gyp": { "version": "0.17.0", + "extraneous": true, "inBundle": true, "license": "BSD-3-Clause", "dependencies": { @@ -10943,11 +10898,13 @@ }, "node_modules/node-libxml/node_modules/node-pre-gyp/node_modules/chownr": { "version": "1.1.4", + "extraneous": true, "inBundle": true, "license": "ISC" }, "node_modules/node-libxml/node_modules/node-pre-gyp/node_modules/fs-minipass": { "version": "1.2.7", + "extraneous": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -10956,6 +10913,7 @@ }, "node_modules/node-libxml/node_modules/node-pre-gyp/node_modules/glob": { "version": "7.1.6", + "extraneous": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -10975,11 +10933,13 @@ }, "node_modules/node-libxml/node_modules/node-pre-gyp/node_modules/minimist": { "version": "1.2.5", + "extraneous": true, "inBundle": true, "license": "MIT" }, "node_modules/node-libxml/node_modules/node-pre-gyp/node_modules/minipass": { "version": "2.9.0", + "extraneous": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -10989,6 +10949,7 @@ }, "node_modules/node-libxml/node_modules/node-pre-gyp/node_modules/minizlib": { "version": "1.3.3", + "extraneous": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -10997,6 +10958,7 @@ }, "node_modules/node-libxml/node_modules/node-pre-gyp/node_modules/mkdirp": { "version": "0.5.5", + "extraneous": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -11008,6 +10970,7 @@ }, "node_modules/node-libxml/node_modules/node-pre-gyp/node_modules/nopt": { "version": "4.0.3", + "extraneous": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -11020,6 +10983,7 @@ }, "node_modules/node-libxml/node_modules/node-pre-gyp/node_modules/rimraf": { "version": "2.7.1", + "extraneous": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -11031,6 +10995,7 @@ }, "node_modules/node-libxml/node_modules/node-pre-gyp/node_modules/semver": { "version": "5.7.1", + "extraneous": true, "inBundle": true, "license": "ISC", "bin": { @@ -11039,6 +11004,7 @@ }, "node_modules/node-libxml/node_modules/node-pre-gyp/node_modules/tar": { "version": "4.4.13", + "extraneous": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -11056,11 +11022,13 @@ }, "node_modules/node-libxml/node_modules/node-pre-gyp/node_modules/yallist": { "version": "3.1.1", + "extraneous": true, "inBundle": true, "license": "ISC" }, "node_modules/node-libxml/node_modules/npm-bundled": { "version": "1.1.1", + "extraneous": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -11069,11 +11037,13 @@ }, "node_modules/node-libxml/node_modules/npm-normalize-package-bin": { "version": "1.0.1", + "extraneous": true, "inBundle": true, "license": "ISC" }, "node_modules/node-libxml/node_modules/npm-packlist": { "version": "1.4.8", + "extraneous": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -11084,6 +11054,7 @@ }, "node_modules/node-libxml/node_modules/npmlog": { "version": "4.1.2", + "extraneous": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -11095,6 +11066,7 @@ }, "node_modules/node-libxml/node_modules/number-is-nan": { "version": "1.0.1", + "extraneous": true, "inBundle": true, "license": "MIT", "engines": { @@ -11103,6 +11075,7 @@ }, "node_modules/node-libxml/node_modules/object-assign": { "version": "4.1.1", + "extraneous": true, "inBundle": true, "license": "MIT", "engines": { @@ -11119,6 +11092,7 @@ }, "node_modules/node-libxml/node_modules/os-homedir": { "version": "1.0.2", + "extraneous": true, "inBundle": true, "license": "MIT", "engines": { @@ -11127,6 +11101,7 @@ }, "node_modules/node-libxml/node_modules/os-tmpdir": { "version": "1.0.2", + "extraneous": true, "inBundle": true, "license": "MIT", "engines": { @@ -11135,6 +11110,7 @@ }, "node_modules/node-libxml/node_modules/osenv": { "version": "0.1.5", + "extraneous": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -11152,11 +11128,13 @@ }, "node_modules/node-libxml/node_modules/process-nextick-args": { "version": "2.0.1", + "extraneous": true, "inBundle": true, "license": "MIT" }, "node_modules/node-libxml/node_modules/rc": { "version": "1.2.8", + "extraneous": true, "inBundle": true, "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { @@ -11171,11 +11149,13 @@ }, "node_modules/node-libxml/node_modules/rc/node_modules/minimist": { "version": "1.2.5", + "extraneous": true, "inBundle": true, "license": "MIT" }, "node_modules/node-libxml/node_modules/readable-stream": { "version": "2.3.7", + "extraneous": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -11190,31 +11170,37 @@ }, "node_modules/node-libxml/node_modules/safe-buffer": { "version": "5.1.2", + "extraneous": true, "inBundle": true, "license": "MIT" }, "node_modules/node-libxml/node_modules/safer-buffer": { "version": "2.1.2", + "extraneous": true, "inBundle": true, "license": "MIT" }, "node_modules/node-libxml/node_modules/sax": { "version": "1.2.4", + "extraneous": true, "inBundle": true, "license": "ISC" }, "node_modules/node-libxml/node_modules/set-blocking": { "version": "2.0.0", + "extraneous": true, "inBundle": true, "license": "ISC" }, "node_modules/node-libxml/node_modules/signal-exit": { "version": "3.0.3", + "extraneous": true, "inBundle": true, "license": "ISC" }, "node_modules/node-libxml/node_modules/string_decoder": { "version": "1.1.1", + "extraneous": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -11223,6 +11209,7 @@ }, "node_modules/node-libxml/node_modules/string-width": { "version": "1.0.2", + "extraneous": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -11236,6 +11223,7 @@ }, "node_modules/node-libxml/node_modules/strip-ansi": { "version": "3.0.1", + "extraneous": true, "inBundle": true, "license": "MIT", "dependencies": { @@ -11247,6 +11235,7 @@ }, "node_modules/node-libxml/node_modules/strip-json-comments": { "version": "2.0.1", + "extraneous": true, "inBundle": true, "license": "MIT", "engines": { @@ -11266,11 +11255,13 @@ }, "node_modules/node-libxml/node_modules/util-deprecate": { "version": "1.0.2", + "extraneous": true, "inBundle": true, "license": "MIT" }, "node_modules/node-libxml/node_modules/wide-align": { "version": "1.1.3", + "extraneous": true, "inBundle": true, "license": "ISC", "dependencies": { @@ -11282,11 +11273,6 @@ "inBundle": true, "license": "ISC" }, - "node_modules/node-libxml/node_modules/yallist": { - "version": "4.0.0", - "extraneous": true, - "license": "ISC" - }, "node_modules/node-preload": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", @@ -11300,9 +11286,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.38", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", - "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", + "version": "2.0.37", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", + "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", "dev": true }, "node_modules/nodemailer": { @@ -14718,9 +14704,9 @@ } }, "node_modules/uuid": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.0.tgz", - "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==", + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", + "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" @@ -15357,441 +15343,394 @@ } }, "@aws-sdk/client-cognito-identity": { - "version": "3.1035.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.1035.0.tgz", - "integrity": "sha512-sHjCtR5GdKVXZ/bEXwqUMoGzak9fnI4Ny/NyG7+gAkYC1Z+CIg5Kr4QSrqGjA+N2iwCly8f2/rGAsNo+JGeaNA==", + "version": "3.1030.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.1030.0.tgz", + "integrity": "sha512-PD9RIT5eJEXsP+Dq8fncTXOFAOI+EP3fRa/z1te2xehAVawixEpAJkjEE03A4msqPWGJ2S0TM2bb6zDbP66w3g==", "optional": true, "requires": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/credential-provider-node": "^3.972.35", - "@aws-sdk/middleware-host-header": "^3.972.10", - "@aws-sdk/middleware-logger": "^3.972.10", - "@aws-sdk/middleware-recursion-detection": "^3.972.11", - "@aws-sdk/middleware-user-agent": "^3.972.34", - "@aws-sdk/region-config-resolver": "^3.972.13", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-endpoints": "^3.996.8", - "@aws-sdk/util-user-agent-browser": "^3.972.10", - "@aws-sdk/util-user-agent-node": "^3.973.20", - "@smithy/config-resolver": "^4.4.17", - "@smithy/core": "^3.23.16", - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/hash-node": "^4.2.14", - "@smithy/invalid-dependency": "^4.2.14", - "@smithy/middleware-content-length": "^4.2.14", - "@smithy/middleware-endpoint": "^4.4.31", - "@smithy/middleware-retry": "^4.5.4", - "@smithy/middleware-serde": "^4.2.19", - "@smithy/middleware-stack": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/node-http-handler": "^4.6.0", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.12", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/credential-provider-node": "^3.972.30", + "@aws-sdk/middleware-host-header": "^3.972.9", + "@aws-sdk/middleware-logger": "^3.972.9", + "@aws-sdk/middleware-recursion-detection": "^3.972.10", + "@aws-sdk/middleware-user-agent": "^3.972.29", + "@aws-sdk/region-config-resolver": "^3.972.11", + "@aws-sdk/types": "^3.973.7", + "@aws-sdk/util-endpoints": "^3.996.6", + "@aws-sdk/util-user-agent-browser": "^3.972.9", + "@aws-sdk/util-user-agent-node": "^3.973.15", + "@smithy/config-resolver": "^4.4.14", + "@smithy/core": "^3.23.14", + "@smithy/fetch-http-handler": "^5.3.16", + "@smithy/hash-node": "^4.2.13", + "@smithy/invalid-dependency": "^4.2.13", + "@smithy/middleware-content-length": "^4.2.13", + "@smithy/middleware-endpoint": "^4.4.29", + "@smithy/middleware-retry": "^4.5.0", + "@smithy/middleware-serde": "^4.2.17", + "@smithy/middleware-stack": "^4.2.13", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/node-http-handler": "^4.5.2", + "@smithy/protocol-http": "^5.3.13", + "@smithy/smithy-client": "^4.12.9", + "@smithy/types": "^4.14.0", + "@smithy/url-parser": "^4.2.13", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.48", - "@smithy/util-defaults-mode-node": "^4.2.53", - "@smithy/util-endpoints": "^3.4.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.3", + "@smithy/util-defaults-mode-browser": "^4.3.45", + "@smithy/util-defaults-mode-node": "^4.2.49", + "@smithy/util-endpoints": "^3.3.4", + "@smithy/util-middleware": "^4.2.13", + "@smithy/util-retry": "^4.3.0", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "@aws-sdk/core": { - "version": "3.974.4", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.974.4.tgz", - "integrity": "sha512-EbVgyzQ83/Lf6oh1O4vYY47tuYw3Aosthh865LNU77KyotKz+uvEBNmsl/bSVS/vG+IU39mCqcOHrnhmhF4lug==", + "version": "3.973.27", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.973.27.tgz", + "integrity": "sha512-CUZ5m8hwMCH6OYI4Li/WgMfIEx10Q2PLI9Y3XOUTPGZJ53aZ0007jCv+X/ywsaERyKPdw5MRZWk877roQksQ4A==", "optional": true, "requires": { - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/xml-builder": "^3.972.18", - "@smithy/core": "^3.23.16", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/signature-v4": "^5.3.14", - "@smithy/smithy-client": "^4.12.12", - "@smithy/types": "^4.14.1", + "@aws-sdk/types": "^3.973.7", + "@aws-sdk/xml-builder": "^3.972.17", + "@smithy/core": "^3.23.14", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/property-provider": "^4.2.13", + "@smithy/protocol-http": "^5.3.13", + "@smithy/signature-v4": "^5.3.13", + "@smithy/smithy-client": "^4.12.9", + "@smithy/types": "^4.14.0", "@smithy/util-base64": "^4.3.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.3", + "@smithy/util-middleware": "^4.2.13", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-cognito-identity": { - "version": "3.972.27", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.972.27.tgz", - "integrity": "sha512-ibA1vjaLhS1c/wNa9SSSOunjz5I72DBfAYrtM4G4sKQ3wPuk8ycfvU3AF8nEJBfefqPu2RhHxW7bEC9wiA/MTA==", + "version": "3.972.22", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.972.22.tgz", + "integrity": "sha512-ih6ORpme4i2qJqGckOQ9Lt2iiZ+5tm3bnfsT5TwoPyFnuDURXv3OdhYa3Nr/m0iJr38biqKYKdGKb5GR1KB2hw==", "optional": true, "requires": { - "@aws-sdk/nested-clients": "^3.997.2", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/types": "^4.14.1", + "@aws-sdk/nested-clients": "^3.996.19", + "@aws-sdk/types": "^3.973.7", + "@smithy/property-provider": "^4.2.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-env": { - "version": "3.972.30", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.30.tgz", - "integrity": "sha512-dHpeqa29a0cBYq/h59IC2EK3AphLY96nKy4F35kBtiz9GuKDc32UYRTgjZaF8uuJCnqgw9omUZKR+9myyDHC2A==", + "version": "3.972.25", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.972.25.tgz", + "integrity": "sha512-6QfI0wv4jpG5CrdO/AO0JfZ2ux+tKwJPrUwmvxXF50vI5KIypKVGNF6b4vlkYEnKumDTI1NX2zUBi8JoU5QU3A==", "optional": true, "requires": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/types": "^3.973.7", + "@smithy/property-provider": "^4.2.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-http": { - "version": "3.972.32", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.32.tgz", - "integrity": "sha512-A+ZTT//Mswkf9DFEM6XlngwOtYdD8X4CUcoZ2wdpgI8cCs9mcGeuhgTwbGJvealub/MeONOaUr3FbRPMKmTDjg==", + "version": "3.972.27", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.972.27.tgz", + "integrity": "sha512-3V3Usj9Gs93h865DqN4M2NWJhC5kXU9BvZskfN3+69omuYlE3TZxOEcVQtBGLOloJB7BVfJKXVLqeNhOzHqSlQ==", "optional": true, "requires": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/types": "^3.973.8", - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/node-http-handler": "^4.6.0", - "@smithy/property-provider": "^4.2.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.12", - "@smithy/types": "^4.14.1", - "@smithy/util-stream": "^4.5.24", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/types": "^3.973.7", + "@smithy/fetch-http-handler": "^5.3.16", + "@smithy/node-http-handler": "^4.5.2", + "@smithy/property-provider": "^4.2.13", + "@smithy/protocol-http": "^5.3.13", + "@smithy/smithy-client": "^4.12.9", + "@smithy/types": "^4.14.0", + "@smithy/util-stream": "^4.5.22", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-ini": { - "version": "3.972.34", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.34.tgz", - "integrity": "sha512-MoRc7tLnx3JpFkV2R826enEfBUVN8o9Cc7y3hnbMwiWzL/VJhgfxRQzHkEL9vWorMWP7tibltsRcLoid9fsVdw==", + "version": "3.972.29", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.972.29.tgz", + "integrity": "sha512-SiBuAnXecCbT/OpAf3vqyI/AVE3mTaYr9ShXLybxZiPLBiPCCOIWSGAtYYGQWMRvobBTiqOewaB+wcgMMZI2Aw==", "optional": true, "requires": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/credential-provider-env": "^3.972.30", - "@aws-sdk/credential-provider-http": "^3.972.32", - "@aws-sdk/credential-provider-login": "^3.972.34", - "@aws-sdk/credential-provider-process": "^3.972.30", - "@aws-sdk/credential-provider-sso": "^3.972.34", - "@aws-sdk/credential-provider-web-identity": "^3.972.34", - "@aws-sdk/nested-clients": "^3.997.2", - "@aws-sdk/types": "^3.973.8", - "@smithy/credential-provider-imds": "^4.2.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/credential-provider-env": "^3.972.25", + "@aws-sdk/credential-provider-http": "^3.972.27", + "@aws-sdk/credential-provider-login": "^3.972.29", + "@aws-sdk/credential-provider-process": "^3.972.25", + "@aws-sdk/credential-provider-sso": "^3.972.29", + "@aws-sdk/credential-provider-web-identity": "^3.972.29", + "@aws-sdk/nested-clients": "^3.996.19", + "@aws-sdk/types": "^3.973.7", + "@smithy/credential-provider-imds": "^4.2.13", + "@smithy/property-provider": "^4.2.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-login": { - "version": "3.972.34", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.34.tgz", - "integrity": "sha512-XVSklkRRQ/CQDmv3VVFdZRl5hTFgncFhZrLyi0Ai4LZk5o3jpY5HIfuTK7ad7tixPKa+iQmL9+vg9qNyYZB+nw==", + "version": "3.972.29", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.972.29.tgz", + "integrity": "sha512-OGOslTbOlxXexKMqhxCEbBQbUIfuhGxU5UXw3Fm56ypXHvrXH4aTt/xb5Y884LOoteP1QST1lVZzHfcTnWhiPQ==", "optional": true, "requires": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/nested-clients": "^3.997.2", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/nested-clients": "^3.996.19", + "@aws-sdk/types": "^3.973.7", + "@smithy/property-provider": "^4.2.13", + "@smithy/protocol-http": "^5.3.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-node": { - "version": "3.972.35", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.35.tgz", - "integrity": "sha512-nVrY7AdGfzYgAa/jd9m06p3ES7QQDaB7zN9c+vXnVXxBRkAs9MjRDPB5AKogWuC6phddltfvHGFqLDJmyU9u/A==", + "version": "3.972.30", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.972.30.tgz", + "integrity": "sha512-FMnAnWxc8PG+ZrZ2OBKzY4luCUJhe9CG0B9YwYr4pzrYGLXBS2rl+UoUvjGbAwiptxRL6hyA3lFn03Bv1TLqTw==", "optional": true, "requires": { - "@aws-sdk/credential-provider-env": "^3.972.30", - "@aws-sdk/credential-provider-http": "^3.972.32", - "@aws-sdk/credential-provider-ini": "^3.972.34", - "@aws-sdk/credential-provider-process": "^3.972.30", - "@aws-sdk/credential-provider-sso": "^3.972.34", - "@aws-sdk/credential-provider-web-identity": "^3.972.34", - "@aws-sdk/types": "^3.973.8", - "@smithy/credential-provider-imds": "^4.2.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/credential-provider-env": "^3.972.25", + "@aws-sdk/credential-provider-http": "^3.972.27", + "@aws-sdk/credential-provider-ini": "^3.972.29", + "@aws-sdk/credential-provider-process": "^3.972.25", + "@aws-sdk/credential-provider-sso": "^3.972.29", + "@aws-sdk/credential-provider-web-identity": "^3.972.29", + "@aws-sdk/types": "^3.973.7", + "@smithy/credential-provider-imds": "^4.2.13", + "@smithy/property-provider": "^4.2.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-process": { - "version": "3.972.30", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.30.tgz", - "integrity": "sha512-McJPomNTSEo+C6UA3Zq6pFrcyTUaVsoPPBOvbOHAoIFPc8Z2CMLndqFJOnB+9bVFiBTWQLutlVGmrocBbvv4MQ==", + "version": "3.972.25", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.972.25.tgz", + "integrity": "sha512-HR7ynNRdNhNsdVCOCegy1HsfsRzozCOPtD3RzzT1JouuaHobWyRfJzCBue/3jP7gECHt+kQyZUvwg/cYLWurNQ==", "optional": true, "requires": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/types": "^3.973.7", + "@smithy/property-provider": "^4.2.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-sso": { - "version": "3.972.34", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.34.tgz", - "integrity": "sha512-WngYb2K+/yhkDOmDfAOjoCa9Ja3he0DZiAraboKwgWoVRkajDIcDYBCVbUTxtTUldvQoe7VvHLTrBNxvftN1aQ==", + "version": "3.972.29", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.972.29.tgz", + "integrity": "sha512-HWv4SEq3jZDYPlwryZVef97+U8CxxRos5mK8sgGO1dQaFZpV5giZLzqGE5hkDmh2csYcBO2uf5XHjPTpZcJlig==", "optional": true, "requires": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/nested-clients": "^3.997.2", - "@aws-sdk/token-providers": "3.1035.0", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/nested-clients": "^3.996.19", + "@aws-sdk/token-providers": "3.1026.0", + "@aws-sdk/types": "^3.973.7", + "@smithy/property-provider": "^4.2.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@aws-sdk/credential-provider-web-identity": { - "version": "3.972.34", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.34.tgz", - "integrity": "sha512-5KLUH+XmSNRj6amJiJSrPsCxU5l/PYDfxyqPa1MxWhHoQC3sxvGPrSib3IE+HQlfRA4e2kO0bnJy7HJdjvpuuA==", + "version": "3.972.29", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.972.29.tgz", + "integrity": "sha512-PdMBza1WEKEUPFEmMGCfnU2RYCz9MskU2e8JxjyUOsMKku7j9YaDKvbDi2dzC0ihFoM6ods2SbhfAAro+Gwlew==", "optional": true, "requires": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/nested-clients": "^3.997.2", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/nested-clients": "^3.996.19", + "@aws-sdk/types": "^3.973.7", + "@smithy/property-provider": "^4.2.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@aws-sdk/credential-providers": { - "version": "3.1035.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.1035.0.tgz", - "integrity": "sha512-HimZ+jVYJzeD6+pwXvhKX2mvx2fScLbjC4+oz1HF9Vuls/3lAWKHssLLVpCIuXL8Ov6cWe1vQIbwpFajuTAmEA==", + "version": "3.1030.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.1030.0.tgz", + "integrity": "sha512-hQhRax7MzsG40mc6Es2Muvfai+jfWt1j1odqP4UQtUok6Fu4qbJNRGgQ/EAi7Sb6VAL0EdY5JGGMevHz2oO+AA==", "optional": true, "requires": { - "@aws-sdk/client-cognito-identity": "3.1035.0", - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/credential-provider-cognito-identity": "^3.972.27", - "@aws-sdk/credential-provider-env": "^3.972.30", - "@aws-sdk/credential-provider-http": "^3.972.32", - "@aws-sdk/credential-provider-ini": "^3.972.34", - "@aws-sdk/credential-provider-login": "^3.972.34", - "@aws-sdk/credential-provider-node": "^3.972.35", - "@aws-sdk/credential-provider-process": "^3.972.30", - "@aws-sdk/credential-provider-sso": "^3.972.34", - "@aws-sdk/credential-provider-web-identity": "^3.972.34", - "@aws-sdk/nested-clients": "^3.997.2", - "@aws-sdk/types": "^3.973.8", - "@smithy/config-resolver": "^4.4.17", - "@smithy/core": "^3.23.16", - "@smithy/credential-provider-imds": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/types": "^4.14.1", + "@aws-sdk/client-cognito-identity": "3.1030.0", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/credential-provider-cognito-identity": "^3.972.22", + "@aws-sdk/credential-provider-env": "^3.972.25", + "@aws-sdk/credential-provider-http": "^3.972.27", + "@aws-sdk/credential-provider-ini": "^3.972.29", + "@aws-sdk/credential-provider-login": "^3.972.29", + "@aws-sdk/credential-provider-node": "^3.972.30", + "@aws-sdk/credential-provider-process": "^3.972.25", + "@aws-sdk/credential-provider-sso": "^3.972.29", + "@aws-sdk/credential-provider-web-identity": "^3.972.29", + "@aws-sdk/nested-clients": "^3.996.19", + "@aws-sdk/types": "^3.973.7", + "@smithy/config-resolver": "^4.4.14", + "@smithy/core": "^3.23.14", + "@smithy/credential-provider-imds": "^4.2.13", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/property-provider": "^4.2.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@aws-sdk/middleware-host-header": { - "version": "3.972.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.10.tgz", - "integrity": "sha512-IJSsIMeVQ8MMCPbuh1AbltkFhLBLXn7aejzfX5YKT/VLDHn++Dcz8886tXckE+wQssyPUhaXrJhdakO2VilRhg==", + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.972.9.tgz", + "integrity": "sha512-je5vRdNw4SkuTnmRbFZLdye4sQ0faLt8kwka5wnnSU30q1mHO4X+idGEJOOE+Tn1ME7Oryn05xxkDvIb3UaLaQ==", "optional": true, "requires": { - "@aws-sdk/types": "^3.973.8", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", + "@aws-sdk/types": "^3.973.7", + "@smithy/protocol-http": "^5.3.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@aws-sdk/middleware-logger": { - "version": "3.972.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.10.tgz", - "integrity": "sha512-OOuGvvz1Dm20SjZo5oEBePFqxt5nf8AwkNDSyUHvD9/bfNASmstcYxFAHUowy4n6Io7mWUZ04JURZwSBvyQanQ==", + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.972.9.tgz", + "integrity": "sha512-HsVgDrruhqI28RkaXALm8grJ7Agc1wF6Et0xh6pom8NdO2VdO/SD9U/tPwUjewwK/pVoka+EShBxyCvgsPCtog==", "optional": true, "requires": { - "@aws-sdk/types": "^3.973.8", - "@smithy/types": "^4.14.1", + "@aws-sdk/types": "^3.973.7", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@aws-sdk/middleware-recursion-detection": { - "version": "3.972.11", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.11.tgz", - "integrity": "sha512-+zz6f79Kj9V5qFK2P+D8Ehjnw4AhphAlCAsPjUqEcInA9umtSSKMrHbSagEeOIsDNuvVrH98bjRHcyQukTrhaQ==", + "version": "3.972.10", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.972.10.tgz", + "integrity": "sha512-RVQQbq5orQ/GHUnXvqEOj2HHPBJm+mM+ySwZKS5UaLBwra5ugRtiH09PLUoOZRl7a1YzaOzXSuGbn9iD5j60WQ==", "optional": true, "requires": { - "@aws-sdk/types": "^3.973.8", + "@aws-sdk/types": "^3.973.7", "@aws/lambda-invoke-store": "^0.2.2", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/middleware-sdk-s3": { - "version": "3.972.33", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.972.33.tgz", - "integrity": "sha512-n8Eh/+kq3u/EodLr8n6sQupu03QGjf122RHXCTGLaHSkavz/2beSKpRlq2oDgfmJZNkAkWF113xbyaUmyOd+YA==", - "optional": true, - "requires": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-arn-parser": "^3.972.3", - "@smithy/core": "^3.23.16", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/signature-v4": "^5.3.14", - "@smithy/smithy-client": "^4.12.12", - "@smithy/types": "^4.14.1", - "@smithy/util-config-provider": "^4.2.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-stream": "^4.5.24", - "@smithy/util-utf8": "^4.2.2", + "@smithy/protocol-http": "^5.3.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@aws-sdk/middleware-user-agent": { - "version": "3.972.34", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.34.tgz", - "integrity": "sha512-jrmJHyYlTQocR7H4VhvSFhaoedMb2rmlOTvFWD6tNBQ/EVQhTsrNfQUYFuPiOc2wUGxbm5LgCHtnvVmCPgODHw==", + "version": "3.972.29", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.972.29.tgz", + "integrity": "sha512-f/sIRzuTfEjg6NsbMYvye2VsmnQoNgntntleQyx5uGacUYzszbfIlO3GcI6G6daWUmTm0IDZc11qMHWwF0o0mQ==", "optional": true, "requires": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-endpoints": "^3.996.8", - "@smithy/core": "^3.23.16", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "@smithy/util-retry": "^4.3.3", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/types": "^3.973.7", + "@aws-sdk/util-endpoints": "^3.996.6", + "@smithy/core": "^3.23.14", + "@smithy/protocol-http": "^5.3.13", + "@smithy/types": "^4.14.0", + "@smithy/util-retry": "^4.3.0", "tslib": "^2.6.2" } }, "@aws-sdk/nested-clients": { - "version": "3.997.2", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.997.2.tgz", - "integrity": "sha512-uGGQO08YetrqfInOKG5atRMrCDRQWRuZ9gGfKY6svPmuE4K7ac+XcbCkpWpjcA7yCYsBaKB/Nly4XKgPXUO1PA==", + "version": "3.996.19", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.996.19.tgz", + "integrity": "sha512-uFkmCDXvmQYLanlYdOFS0+MQWkrj9wPMt/ZCc/0J0fjPim6F5jBVBmEomvGY/j77ILW6GTPwN22Jc174Mhkw6Q==", "optional": true, "requires": { "@aws-crypto/sha256-browser": "5.2.0", "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/middleware-host-header": "^3.972.10", - "@aws-sdk/middleware-logger": "^3.972.10", - "@aws-sdk/middleware-recursion-detection": "^3.972.11", - "@aws-sdk/middleware-user-agent": "^3.972.34", - "@aws-sdk/region-config-resolver": "^3.972.13", - "@aws-sdk/signature-v4-multi-region": "^3.996.21", - "@aws-sdk/types": "^3.973.8", - "@aws-sdk/util-endpoints": "^3.996.8", - "@aws-sdk/util-user-agent-browser": "^3.972.10", - "@aws-sdk/util-user-agent-node": "^3.973.20", - "@smithy/config-resolver": "^4.4.17", - "@smithy/core": "^3.23.16", - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/hash-node": "^4.2.14", - "@smithy/invalid-dependency": "^4.2.14", - "@smithy/middleware-content-length": "^4.2.14", - "@smithy/middleware-endpoint": "^4.4.31", - "@smithy/middleware-retry": "^4.5.4", - "@smithy/middleware-serde": "^4.2.19", - "@smithy/middleware-stack": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/node-http-handler": "^4.6.0", - "@smithy/protocol-http": "^5.3.14", - "@smithy/smithy-client": "^4.12.12", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/middleware-host-header": "^3.972.9", + "@aws-sdk/middleware-logger": "^3.972.9", + "@aws-sdk/middleware-recursion-detection": "^3.972.10", + "@aws-sdk/middleware-user-agent": "^3.972.29", + "@aws-sdk/region-config-resolver": "^3.972.11", + "@aws-sdk/types": "^3.973.7", + "@aws-sdk/util-endpoints": "^3.996.6", + "@aws-sdk/util-user-agent-browser": "^3.972.9", + "@aws-sdk/util-user-agent-node": "^3.973.15", + "@smithy/config-resolver": "^4.4.14", + "@smithy/core": "^3.23.14", + "@smithy/fetch-http-handler": "^5.3.16", + "@smithy/hash-node": "^4.2.13", + "@smithy/invalid-dependency": "^4.2.13", + "@smithy/middleware-content-length": "^4.2.13", + "@smithy/middleware-endpoint": "^4.4.29", + "@smithy/middleware-retry": "^4.5.0", + "@smithy/middleware-serde": "^4.2.17", + "@smithy/middleware-stack": "^4.2.13", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/node-http-handler": "^4.5.2", + "@smithy/protocol-http": "^5.3.13", + "@smithy/smithy-client": "^4.12.9", + "@smithy/types": "^4.14.0", + "@smithy/url-parser": "^4.2.13", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", "@smithy/util-body-length-node": "^4.2.3", - "@smithy/util-defaults-mode-browser": "^4.3.48", - "@smithy/util-defaults-mode-node": "^4.2.53", - "@smithy/util-endpoints": "^3.4.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.3", + "@smithy/util-defaults-mode-browser": "^4.3.45", + "@smithy/util-defaults-mode-node": "^4.2.49", + "@smithy/util-endpoints": "^3.3.4", + "@smithy/util-middleware": "^4.2.13", + "@smithy/util-retry": "^4.3.0", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "@aws-sdk/region-config-resolver": { - "version": "3.972.13", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.13.tgz", - "integrity": "sha512-CvJ2ZIjK/jVD/lbOpowBVElJyC1YxLTIJ13yM0AEo0t2v7swOzGjSA6lJGH+DwZXQhcjUjoYwc8bVYCX5MDr1A==", + "version": "3.972.11", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.972.11.tgz", + "integrity": "sha512-6Q8B1dcx6BBqUTY1Mc/eROKA0FImEEY5VPSd6AGPEUf0ErjExz4snVqa9kNJSoVDV1rKaNf3qrWojgcKW+SdDg==", "optional": true, "requires": { - "@aws-sdk/types": "^3.973.8", - "@smithy/config-resolver": "^4.4.17", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/signature-v4-multi-region": { - "version": "3.996.21", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.996.21.tgz", - "integrity": "sha512-3EpT+C0QdmTMB5aVeJ5odWSLt9vg2oGzUXl1xvUazKGlkr9OBYnegNWqhhjGgZdv8RmSi5eS8nqqB+euNP2aqA==", - "optional": true, - "requires": { - "@aws-sdk/middleware-sdk-s3": "^3.972.33", - "@aws-sdk/types": "^3.973.8", - "@smithy/protocol-http": "^5.3.14", - "@smithy/signature-v4": "^5.3.14", - "@smithy/types": "^4.14.1", + "@aws-sdk/types": "^3.973.7", + "@smithy/config-resolver": "^4.4.14", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@aws-sdk/token-providers": { - "version": "3.1035.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1035.0.tgz", - "integrity": "sha512-E6IO3Cn+OzBe6Sb5pnubd5Y8qSUMAsVKkD5QSwFfIx5fV1g5SkYwUDRDyPlm90RuIVcCo28wpMJU6W8wXH46Aw==", + "version": "3.1026.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.1026.0.tgz", + "integrity": "sha512-Ieq/HiRrbEtrYP387Nes0XlR7H1pJiJOZKv+QyQzMYpvTiDs0VKy2ZB3E2Zf+aFovWmeE7lRE4lXyF7dYM6GgA==", "optional": true, "requires": { - "@aws-sdk/core": "^3.974.4", - "@aws-sdk/nested-clients": "^3.997.2", - "@aws-sdk/types": "^3.973.8", - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@aws-sdk/core": "^3.973.27", + "@aws-sdk/nested-clients": "^3.996.19", + "@aws-sdk/types": "^3.973.7", + "@smithy/property-provider": "^4.2.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@aws-sdk/types": { - "version": "3.973.8", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.8.tgz", - "integrity": "sha512-gjlAdtHMbtR9X5iIhVUvbVcy55KnznpC6bkDUWW9z915bi0ckdUr5cjf16Kp6xq0bP5HBD2xzgbL9F9Quv5vUw==", - "optional": true, - "requires": { - "@smithy/types": "^4.14.1", - "tslib": "^2.6.2" - } - }, - "@aws-sdk/util-arn-parser": { - "version": "3.972.3", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.972.3.tgz", - "integrity": "sha512-HzSD8PMFrvgi2Kserxuff5VitNq2sgf3w9qxmskKDiDTThWfVteJxuCS9JXiPIPtmCrp+7N9asfIaVhBFORllA==", + "version": "3.973.7", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.973.7.tgz", + "integrity": "sha512-reXRwoJ6CfChoqAsBszUYajAF8Z2LRE+CRcKocvFSMpIiLOtYU3aJ9trmn6VVPAzbbY5LXF+FfmUslbXk1SYFg==", "optional": true, "requires": { + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@aws-sdk/util-endpoints": { - "version": "3.996.8", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.8.tgz", - "integrity": "sha512-oOZHcRDihk5iEe5V25NVWg45b3qEA8OpHWVdU/XQh8Zj4heVPAJqWvMphQnU7LkufmUo10EpvFPZuQMiFLJK3g==", + "version": "3.996.6", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.996.6.tgz", + "integrity": "sha512-2nUQ+2ih7CShuKHpGSIYvvAIOHy52dOZguYG36zptBukhw6iFwcvGfG0tes0oZFWQqEWvgZe9HLWaNlvXGdOrg==", "optional": true, "requires": { - "@aws-sdk/types": "^3.973.8", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-endpoints": "^3.4.2", + "@aws-sdk/types": "^3.973.7", + "@smithy/types": "^4.14.0", + "@smithy/url-parser": "^4.2.13", + "@smithy/util-endpoints": "^3.3.4", "tslib": "^2.6.2" } }, @@ -15805,38 +15744,38 @@ } }, "@aws-sdk/util-user-agent-browser": { - "version": "3.972.10", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.10.tgz", - "integrity": "sha512-FAzqXvfEssGdSIz8ejatan0bOdx1qefBWKF/gWmVBXIP1HkS7v/wjjaqrAGGKvyihrXTXW00/2/1nTJtxpXz7g==", + "version": "3.972.9", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.972.9.tgz", + "integrity": "sha512-sn/LMzTbGjYqCCF24390WxPd6hkpoSptiUn5DzVp4cD71yqw+yGEGm1YCxyEoPXyc8qciM8UzLJcZBFslxo5Uw==", "optional": true, "requires": { - "@aws-sdk/types": "^3.973.8", - "@smithy/types": "^4.14.1", + "@aws-sdk/types": "^3.973.7", + "@smithy/types": "^4.14.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "@aws-sdk/util-user-agent-node": { - "version": "3.973.20", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.20.tgz", - "integrity": "sha512-owEqyKr0z5hWwk+uHwudwNhyFMZ9f9eSWr/k/XD6yeDCI7hHyc56s4UOY1iBQmoramTbdAY4UCuLLEuKmjVXrg==", + "version": "3.973.15", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.973.15.tgz", + "integrity": "sha512-fYn3s9PtKdgQkczGZCFMgkNEe8aq1JCVbnRqjqN9RSVW43xn2RV9xdcZ3z01a48Jpkuh/xCmBKJxdLOo4Ozg7w==", "optional": true, "requires": { - "@aws-sdk/middleware-user-agent": "^3.972.34", - "@aws-sdk/types": "^3.973.8", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/types": "^4.14.1", + "@aws-sdk/middleware-user-agent": "^3.972.29", + "@aws-sdk/types": "^3.973.7", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/types": "^4.14.0", "@smithy/util-config-provider": "^4.2.2", "tslib": "^2.6.2" } }, "@aws-sdk/xml-builder": { - "version": "3.972.18", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.18.tgz", - "integrity": "sha512-BMDNVG1ETXRhl1tnisQiYBef3RShJ1kfZA7x7afivTFMLirfHNTb6U71K569HNXhSXbQZsweHvSDZ6euBw8hPA==", + "version": "3.972.17", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.972.17.tgz", + "integrity": "sha512-Ra7hjqAZf1OXRRMueB13qex7mFJRDK/pgCvdSFemXBT8KCGnQDPoKzHY1SjN+TjJVmnpSF14W5tJ1vDamFu+Gg==", "optional": true, "requires": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "fast-xml-parser": "5.5.8", "tslib": "^2.6.2" } @@ -16362,9 +16301,9 @@ } }, "@mongodb-js/saslprep": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.8.tgz", - "integrity": "sha512-kpjr2jy2w71w0oqAMI8oibBmiF9lXxWkEQs5gMkW4hVE48bsqINGLxnCSYW62ck/NHXJQpQEfA9WlJ1sY0eqBg==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.6.tgz", + "integrity": "sha512-y+x3H1xBZd38n10NZF/rEBlvDOOMQ6LKUTHqr8R9VkJ+mmQOYtJFxIlkkK8fZrtOiL6VixbOBWMbZGBdal3Z1g==", "optional": true, "requires": { "sparse-bitfield": "^3.0.3" @@ -16528,82 +16467,82 @@ "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "@smithy/config-resolver": { - "version": "4.4.17", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.17.tgz", - "integrity": "sha512-TzDZcAnhTyAHbXVxWZo7/tEcrIeFq20IBk8So3OLOetWpR8EwY/yEqBMBFaJMeyEiREDq4NfEl+qO3OAUD+vbQ==", + "version": "4.4.15", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.15.tgz", + "integrity": "sha512-BJdMBY5YO9iHh+lPLYdHv6LbX+J8IcPCYMl1IJdBt2KDWNHwONHrPVHk3ttYBqJd9wxv84wlbN0f7GlQzcQtNQ==", "optional": true, "requires": { - "@smithy/node-config-provider": "^4.3.14", - "@smithy/types": "^4.14.1", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/types": "^4.14.0", "@smithy/util-config-provider": "^4.2.2", - "@smithy/util-endpoints": "^3.4.2", - "@smithy/util-middleware": "^4.2.14", + "@smithy/util-endpoints": "^3.4.0", + "@smithy/util-middleware": "^4.2.13", "tslib": "^2.6.2" } }, "@smithy/core": { - "version": "3.23.16", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.16.tgz", - "integrity": "sha512-JStomOrINQA1VqNEopLsgcdgwd42au7mykKqVr30XFw89wLt9sDxJDi4djVPRwQmmzyTGy/uOvTc2ultMpFi1w==", + "version": "3.23.14", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.14.tgz", + "integrity": "sha512-vJ0IhpZxZAkFYOegMKSrxw7ujhhT2pass/1UEcZ4kfl5srTAqtPU5I7MdYQoreVas3204ykCiNhY1o7Xlz6Yyg==", "optional": true, "requires": { - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", + "@smithy/protocol-http": "^5.3.13", + "@smithy/types": "^4.14.0", + "@smithy/url-parser": "^4.2.13", "@smithy/util-base64": "^4.3.2", "@smithy/util-body-length-browser": "^4.2.2", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-stream": "^4.5.24", + "@smithy/util-middleware": "^4.2.13", + "@smithy/util-stream": "^4.5.22", "@smithy/util-utf8": "^4.2.2", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "@smithy/credential-provider-imds": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.14.tgz", - "integrity": "sha512-Au28zBN48ZAoXdooGUHemuVBrkE+Ie6RPmGNIAJsFqj33Vhb6xAgRifUydZ2aY+M+KaMAETAlKk5NC5h1G7wpg==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.13.tgz", + "integrity": "sha512-wboCPijzf6RJKLOvnjDAiBxGSmSnGXj35o5ZAWKDaHa/cvQ5U3ZJ13D4tMCE8JG4dxVAZFy/P0x/V9CwwdfULQ==", "optional": true, "requires": { - "@smithy/node-config-provider": "^4.3.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/property-provider": "^4.2.13", + "@smithy/types": "^4.14.0", + "@smithy/url-parser": "^4.2.13", "tslib": "^2.6.2" } }, "@smithy/fetch-http-handler": { - "version": "5.3.17", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.17.tgz", - "integrity": "sha512-bXOvQzaSm6MnmLaWA1elgfQcAtN4UP3vXqV97bHuoOrHQOJiLT3ds6o9eo5bqd0TJfRFpzdGnDQdW3FACiAVdw==", + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.16.tgz", + "integrity": "sha512-nYDRUIvNd4mFmuXraRWt6w5UsZTNqtj4hXJA/iiOD4tuseIdLP9Lq38teH/SZTcIFCa2f+27o7hYpIsWktJKEQ==", "optional": true, "requires": { - "@smithy/protocol-http": "^5.3.14", - "@smithy/querystring-builder": "^4.2.14", - "@smithy/types": "^4.14.1", + "@smithy/protocol-http": "^5.3.13", + "@smithy/querystring-builder": "^4.2.13", + "@smithy/types": "^4.14.0", "@smithy/util-base64": "^4.3.2", "tslib": "^2.6.2" } }, "@smithy/hash-node": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.14.tgz", - "integrity": "sha512-8ZBDY2DD4wr+GGjTpPtiglEsqr0lUP+KHqgZcWczFf6qeZ/YRjMIOoQWVQlmwu7EtxKTd8YXD8lblmYcpBIA1g==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.13.tgz", + "integrity": "sha512-4/oy9h0jjmY80a2gOIo75iLl8TOPhmtx4E2Hz+PfMjvx/vLtGY4TMU/35WRyH2JHPfT5CVB38u4JRow7gnmzJA==", "optional": true, "requires": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "@smithy/invalid-dependency": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.14.tgz", - "integrity": "sha512-c21qJiTSb25xvvOp+H2TNZzPCngrvl5vIPqPB8zQ/DmJF4QWXO19x1dWfMJZ6wZuuWUPPm0gV8C0cU3+ifcWuw==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.13.tgz", + "integrity": "sha512-jvC0RB/8BLj2SMIkY0Npl425IdnxZJxInpZJbu563zIRnVjpDMXevU3VMCRSabaLB0kf/eFIOusdGstrLJ8IDg==", "optional": true, "requires": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, @@ -16617,204 +16556,204 @@ } }, "@smithy/middleware-content-length": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.14.tgz", - "integrity": "sha512-xhHq7fX4/3lv5NHxLUk3OeEvl0xZ+Ek3qIbWaCL4f9JwgDZEclPBElljaZCAItdGPQl/kSM4LPMOpy1MYgprpw==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.13.tgz", + "integrity": "sha512-IPMLm/LE4AZwu6qiE8Rr8vJsWhs9AtOdySRXrOM7xnvclp77Tyh7hMs/FRrMf26kgIe67vFJXXOSmVxS7oKeig==", "optional": true, "requires": { - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", + "@smithy/protocol-http": "^5.3.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@smithy/middleware-endpoint": { - "version": "4.4.31", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.31.tgz", - "integrity": "sha512-KJPdCIN2kOE2aGmqZd7eUTr4WQwOGgtLWgUkswGJggs7rBcQYQjcZMEDa3C0DwbOiXS9L8/wDoQHkfxBYLfiLw==", + "version": "4.4.29", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.29.tgz", + "integrity": "sha512-R9Q/58U+qBiSARGWbAbFLczECg/RmysRksX6Q8BaQEpt75I7LI6WGDZnjuC9GXSGKljEbA7N118LhGaMbfrTXw==", "optional": true, "requires": { - "@smithy/core": "^3.23.16", - "@smithy/middleware-serde": "^4.2.19", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", - "@smithy/url-parser": "^4.2.14", - "@smithy/util-middleware": "^4.2.14", + "@smithy/core": "^3.23.14", + "@smithy/middleware-serde": "^4.2.17", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", + "@smithy/url-parser": "^4.2.13", + "@smithy/util-middleware": "^4.2.13", "tslib": "^2.6.2" } }, "@smithy/middleware-retry": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.5.4.tgz", - "integrity": "sha512-/z7nIFK+ZRW3Ie/l3NEVGdy34LvmEOzBrtBAvgWZ/4PrKX0xP3kWm8pkfcwUk523SqxZhdbQP9JSXgjF77Uhpw==", + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.5.1.tgz", + "integrity": "sha512-/zY+Gp7Qj2D2hVm3irkCyONER7E9MiX3cUUm/k2ZmhkzZkrPgwVS4aJ5NriZUEN/M0D1hhjrgjUmX04HhRwdWA==", "optional": true, "requires": { - "@smithy/core": "^3.23.16", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/service-error-classification": "^4.3.0", - "@smithy/smithy-client": "^4.12.12", - "@smithy/types": "^4.14.1", - "@smithy/util-middleware": "^4.2.14", - "@smithy/util-retry": "^4.3.3", + "@smithy/core": "^3.23.14", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/protocol-http": "^5.3.13", + "@smithy/service-error-classification": "^4.2.13", + "@smithy/smithy-client": "^4.12.9", + "@smithy/types": "^4.14.0", + "@smithy/util-middleware": "^4.2.13", + "@smithy/util-retry": "^4.3.1", "@smithy/uuid": "^1.1.2", "tslib": "^2.6.2" } }, "@smithy/middleware-serde": { - "version": "4.2.19", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.19.tgz", - "integrity": "sha512-Q6y+W9h3iYVMCKWDoVge+OC1LKFqbEKaq8SIWG2X2bWJRpd/6dDLyICcNLT6PbjH3Rr6bmg/SeDB25XFOFfeEw==", + "version": "4.2.17", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.17.tgz", + "integrity": "sha512-0T2mcaM6v9W1xku86Dk0bEW7aEseG6KenFkPK98XNw0ZhOqOiD1MrMsdnQw9QsL3/Oa85T53iSMlm0SZdSuIEQ==", "optional": true, "requires": { - "@smithy/core": "^3.23.16", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", + "@smithy/core": "^3.23.14", + "@smithy/protocol-http": "^5.3.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@smithy/middleware-stack": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.14.tgz", - "integrity": "sha512-2dvkUKLuFdKsCRmOE4Mn63co0Djtsm+JMh0bYZQupN1pJwMeE8FmQmRLLzzEMN0dnNi7CDCYYH8F0EVwWiPBeA==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.13.tgz", + "integrity": "sha512-g72jN/sGDLyTanrCLH9fhg3oysO3f7tQa6eWWsMyn2BiYNCgjF24n4/I9wff/5XidFvjj9ilipAoQrurTUrLvw==", "optional": true, "requires": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@smithy/node-config-provider": { - "version": "4.3.14", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.14.tgz", - "integrity": "sha512-S+gFjyo/weSVL0P1b9Ts8C/CwIfNCgUPikk3sl6QVsfE/uUuO+QsF+NsE/JkpvWqqyz1wg7HFdiaZuj5CoBMRg==", + "version": "4.3.13", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.13.tgz", + "integrity": "sha512-iGxQ04DsKXLckbgnX4ipElrOTk+IHgTyu0q0WssZfYhDm9CQWHmu6cOeI5wmWRxpXbBDhIIfXMWz5tPEtcVqbw==", "optional": true, "requires": { - "@smithy/property-provider": "^4.2.14", - "@smithy/shared-ini-file-loader": "^4.4.9", - "@smithy/types": "^4.14.1", + "@smithy/property-provider": "^4.2.13", + "@smithy/shared-ini-file-loader": "^4.4.8", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@smithy/node-http-handler": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.6.0.tgz", - "integrity": "sha512-P734cAoTFtuGfWa/R3jgBnGlURt2w9bYEBwQNMKf58sRM9RShirB2mKwLsVP+jlG/wxpCu8abv8NxdUts8tdLA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.5.2.tgz", + "integrity": "sha512-/oD7u8M0oj2ZTFw7GkuuHWpIxtWdLlnyNkbrWcyVYhd5RJNDuczdkb0wfnQICyNFrVPlr8YHOhamjNy3zidhmA==", "optional": true, "requires": { - "@smithy/protocol-http": "^5.3.14", - "@smithy/querystring-builder": "^4.2.14", - "@smithy/types": "^4.14.1", + "@smithy/protocol-http": "^5.3.13", + "@smithy/querystring-builder": "^4.2.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@smithy/property-provider": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.14.tgz", - "integrity": "sha512-WuM31CgfsnQ/10i7NYr0PyxqknD72Y5uMfUMVSniPjbEPceiTErb4eIqJQ+pdxNEAUEWrewrGjIRjVbVHsxZiQ==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.13.tgz", + "integrity": "sha512-bGzUCthxRmezuxkbu9wD33wWg9KX3hJpCXpQ93vVkPrHn9ZW6KNNdY5xAUWNuRCwQ+VyboFuWirG1lZhhkcyRQ==", "optional": true, "requires": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@smithy/protocol-http": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.14.tgz", - "integrity": "sha512-dN5F8kHx8RNU0r+pCwNmFZyz6ChjMkzShy/zup6MtkRmmix4vZzJdW+di7x//b1LiynIev88FM18ie+wwPcQtQ==", + "version": "5.3.13", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.13.tgz", + "integrity": "sha512-+HsmuJUF4u8POo6s8/a2Yb/AQ5t/YgLovCuHF9oxbocqv+SZ6gd8lC2duBFiCA/vFHoHQhoq7QjqJqZC6xOxxg==", "optional": true, "requires": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@smithy/querystring-builder": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.14.tgz", - "integrity": "sha512-XYA5Z0IqTeF+5XDdh4BBmSA0HvbgVZIyv4cmOoUheDNR57K1HgBp9ukUMx3Cr3XpDHHpLBnexPE3LAtDsZkj2A==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.13.tgz", + "integrity": "sha512-tG4aOYFCZdPMjbgfhnIQ322H//ojujldp1SrHPHpBSb3NqgUp3dwiUGRJzie87hS1DYwWGqDuPaowoDF+rYCbQ==", "optional": true, "requires": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "@smithy/util-uri-escape": "^4.2.2", "tslib": "^2.6.2" } }, "@smithy/querystring-parser": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.14.tgz", - "integrity": "sha512-hr+YyqBD23GVvRxGGrcc/oOeNlK3PzT5Fu4dzrDXxzS1LpFiuL2PQQqKPs87M79aW7ziMs+nvB3qdw77SqE7Lw==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.13.tgz", + "integrity": "sha512-hqW3Q4P+CDzUyQ87GrboGMeD7XYNMOF+CuTwu936UQRB/zeYn3jys8C3w+wMkDfY7CyyyVwZQ5cNFoG0x1pYmA==", "optional": true, "requires": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@smithy/service-error-classification": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.3.0.tgz", - "integrity": "sha512-9jKsBYQRPR0xBLgc2415RsA5PIcP2sis4oBdN9s0D13cg1B1284mNTjx9Yc+BEERXzuPm5ObktI96OxsKh8E9A==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.13.tgz", + "integrity": "sha512-a0s8XZMfOC/qpqq7RCPvJlk93rWFrElH6O++8WJKz0FqnA4Y7fkNi/0mnGgSH1C4x6MFsuBA8VKu4zxFrMe5Vw==", "optional": true, "requires": { - "@smithy/types": "^4.14.1" + "@smithy/types": "^4.14.0" } }, "@smithy/shared-ini-file-loader": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.9.tgz", - "integrity": "sha512-495/V2I15SHgedSJoDPD23JuSfKAp726ZI1V0wtjB07Wh7q/0tri/0e0DLefZCHgxZonrGKt/OCTpAtP1wE1kQ==", + "version": "4.4.8", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.8.tgz", + "integrity": "sha512-VZCZx2bZasxdqxVgEAhREvDSlkatTPnkdWy1+Kiy8w7kYPBosW0V5IeDwzDUMvWBt56zpK658rx1cOBFOYaPaw==", "optional": true, "requires": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@smithy/signature-v4": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.14.tgz", - "integrity": "sha512-1D9Y/nmlVjCeSivCbhZ7hgEpmHyY1h0GvpSZt3l0xcD9JjmjVC1CHOozS6+Gh+/ldMH8JuJ6cujObQqfayAVFA==", + "version": "5.3.13", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.13.tgz", + "integrity": "sha512-YpYSyM0vMDwKbHD/JA7bVOF6kToVRpa+FM5ateEVRpsTNu564g1muBlkTubXhSKKYXInhpADF46FPyrZcTLpXg==", "optional": true, "requires": { "@smithy/is-array-buffer": "^4.2.2", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", + "@smithy/protocol-http": "^5.3.13", + "@smithy/types": "^4.14.0", "@smithy/util-hex-encoding": "^4.2.2", - "@smithy/util-middleware": "^4.2.14", + "@smithy/util-middleware": "^4.2.13", "@smithy/util-uri-escape": "^4.2.2", "@smithy/util-utf8": "^4.2.2", "tslib": "^2.6.2" } }, "@smithy/smithy-client": { - "version": "4.12.12", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.12.tgz", - "integrity": "sha512-daO7SJn4eM6ArbmrEs+/BTbH7af8AEbSL3OMQdcRvvn8tuUcR5rU2n6DgxIV53aXMS42uwK8NgKKCh5XgqYOPQ==", + "version": "4.12.9", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.9.tgz", + "integrity": "sha512-ovaLEcTU5olSeHcRXcxV6viaKtpkHZumn6Ps0yn7dRf2rRSfy794vpjOtrWDO0d1auDSvAqxO+lyhERSXQ03EQ==", "optional": true, "requires": { - "@smithy/core": "^3.23.16", - "@smithy/middleware-endpoint": "^4.4.31", - "@smithy/middleware-stack": "^4.2.14", - "@smithy/protocol-http": "^5.3.14", - "@smithy/types": "^4.14.1", - "@smithy/util-stream": "^4.5.24", + "@smithy/core": "^3.23.14", + "@smithy/middleware-endpoint": "^4.4.29", + "@smithy/middleware-stack": "^4.2.13", + "@smithy/protocol-http": "^5.3.13", + "@smithy/types": "^4.14.0", + "@smithy/util-stream": "^4.5.22", "tslib": "^2.6.2" } }, "@smithy/types": { - "version": "4.14.1", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.14.1.tgz", - "integrity": "sha512-59b5HtSVrVR/eYNei3BUj3DCPKD/G7EtDDe7OEJE7i7FtQFugYo6MxbotS8mVJkLNVf8gYaAlEBwwtJ9HzhWSg==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.14.0.tgz", + "integrity": "sha512-OWgntFLW88kx2qvf/c/67Vno1yuXm/f9M7QFAtVkkO29IJXGBIg0ycEaBTH0kvCtwmvZxRujrgP5a86RvsXJAQ==", "optional": true, "requires": { "tslib": "^2.6.2" } }, "@smithy/url-parser": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.14.tgz", - "integrity": "sha512-p06BiBigJ8bTA3MgnOfCtDUWnAMY0YfedO/GRpmc7p+wg3KW8vbXy1xwSu5ASy0wV7rRYtlfZOIKH4XqfhjSQQ==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.13.tgz", + "integrity": "sha512-2G03yoboIRZlZze2+PT4GZEjgwQsJjUgn6iTsvxA02bVceHR6vp4Cuk7TUnPFWKF+ffNUk3kj4COwkENS2K3vw==", "optional": true, "requires": { - "@smithy/querystring-parser": "^4.2.14", - "@smithy/types": "^4.14.1", + "@smithy/querystring-parser": "^4.2.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, @@ -16867,40 +16806,40 @@ } }, "@smithy/util-defaults-mode-browser": { - "version": "4.3.48", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.48.tgz", - "integrity": "sha512-hxVRVPYaRDWa6YQdse1aWX1qrksmLsvNyGBKdc32q4jFzSjxYVNWfstknAfR228TnzS4tzgswXRuYIbhXBuXFQ==", + "version": "4.3.45", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.45.tgz", + "integrity": "sha512-ag9sWc6/nWZAuK3Wm9KlFJUnRkXLrXn33RFjIAmCTFThqLHY+7wCst10BGq56FxslsDrjhSie46c8OULS+BiIw==", "optional": true, "requires": { - "@smithy/property-provider": "^4.2.14", - "@smithy/smithy-client": "^4.12.12", - "@smithy/types": "^4.14.1", + "@smithy/property-provider": "^4.2.13", + "@smithy/smithy-client": "^4.12.9", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@smithy/util-defaults-mode-node": { - "version": "4.2.53", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.53.tgz", - "integrity": "sha512-ybgCk+9JdBq8pYC8Y6U5fjyS8e4sboyAShetxPNL0rRBtaVl56GSFAxsolVBIea1tXR4LPIzL8i6xqmcf0+DCQ==", + "version": "4.2.50", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.50.tgz", + "integrity": "sha512-xpjncL5XozFA3No7WypTsPU1du0fFS8flIyO+Wh2nhCy7bpEapvU7BR55Bg+wrfw+1cRA+8G8UsTjaxgzrMzXg==", "optional": true, "requires": { - "@smithy/config-resolver": "^4.4.17", - "@smithy/credential-provider-imds": "^4.2.14", - "@smithy/node-config-provider": "^4.3.14", - "@smithy/property-provider": "^4.2.14", - "@smithy/smithy-client": "^4.12.12", - "@smithy/types": "^4.14.1", + "@smithy/config-resolver": "^4.4.15", + "@smithy/credential-provider-imds": "^4.2.13", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/property-provider": "^4.2.13", + "@smithy/smithy-client": "^4.12.9", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@smithy/util-endpoints": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.4.2.tgz", - "integrity": "sha512-a55Tr+3OKld4TTtnT+RhKOQHyPxm3j/xL4OR83WBUhLJaKDS9dnJ7arRMOp3t31dcLhApwG9bgvrRXBHlLdIkg==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.4.0.tgz", + "integrity": "sha512-QQHGPKkw6NPcU6TJ1rNEEa201srPtZiX4k61xL163vvs9sTqW/XKz+UEuJ00uvPqoN+5Rs4Ka1UJ7+Mp03IXJw==", "optional": true, "requires": { - "@smithy/node-config-provider": "^4.3.14", - "@smithy/types": "^4.14.1", + "@smithy/node-config-provider": "^4.3.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, @@ -16914,35 +16853,35 @@ } }, "@smithy/util-middleware": { - "version": "4.2.14", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.14.tgz", - "integrity": "sha512-1Su2vj9RYNDEv/V+2E+jXkkwGsgR7dc4sfHn9Z7ruzQHJIEni9zzw5CauvRXlFJfmgcqYP8fWa0dkh2Q2YaQyw==", + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.13.tgz", + "integrity": "sha512-GTooyrlmRTqvUen4eK7/K1p6kryF7bnDfq6XsAbIsf2mo51B/utaH+XThY6dKgNCWzMAaH/+OLmqaBuLhLWRow==", "optional": true, "requires": { - "@smithy/types": "^4.14.1", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@smithy/util-retry": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.3.3.tgz", - "integrity": "sha512-idjUvd4M9Jj6rXkhqw4H4reHoweuK4ZxYWyOrEp4N2rOF5VtaOlQGLDQJva/8WanNXk9ScQtsAb7o5UHGvFm4A==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.3.1.tgz", + "integrity": "sha512-FwmicpgWOkP5kZUjN3y+3JIom8NLGqSAJBeoIgK0rIToI817TEBHCrd0A2qGeKQlgDeP+Jzn4i0H/NLAXGy9uQ==", "optional": true, "requires": { - "@smithy/service-error-classification": "^4.3.0", - "@smithy/types": "^4.14.1", + "@smithy/service-error-classification": "^4.2.13", + "@smithy/types": "^4.14.0", "tslib": "^2.6.2" } }, "@smithy/util-stream": { - "version": "4.5.24", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.24.tgz", - "integrity": "sha512-na5vv2mBSDzXewLEEoWGI7LQQkfpmFEomBsmOpzLFjqGctm0iMwXY5lAwesY9pIaErkccW0qzEOUcYP+WKneXg==", + "version": "4.5.22", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.22.tgz", + "integrity": "sha512-3H8iq/0BfQjUs2/4fbHZ9aG9yNzcuZs24LPkcX1Q7Z+qpqaGM8+qbGmE8zo9m2nCRgamyvS98cHdcWvR6YUsew==", "optional": true, "requires": { - "@smithy/fetch-http-handler": "^5.3.17", - "@smithy/node-http-handler": "^4.6.0", - "@smithy/types": "^4.14.1", + "@smithy/fetch-http-handler": "^5.3.16", + "@smithy/node-http-handler": "^4.5.2", + "@smithy/types": "^4.14.0", "@smithy/util-base64": "^4.3.2", "@smithy/util-buffer-from": "^4.2.2", "@smithy/util-hex-encoding": "^4.2.2", @@ -17016,31 +16955,31 @@ } }, "@turf/bbox": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-7.3.5.tgz", - "integrity": "sha512-oG1ya/HtBjAIg4TimbWx+nOYPbY0bCvt82Bq8tm6sBw3qqtbOyRSfDz79Sq90TnH7DXJprJ1qnVGKNtZ6jemfw==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@turf/bbox/-/bbox-7.3.4.tgz", + "integrity": "sha512-D5ErVWtfQbEPh11yzI69uxqrcJmbPU/9Y59f1uTapgwAwQHQztDWgsYpnL3ns8r1GmPWLP8sGJLVTIk2TZSiYA==", "requires": { - "@turf/helpers": "7.3.5", - "@turf/meta": "7.3.5", + "@turf/helpers": "7.3.4", + "@turf/meta": "7.3.4", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" }, "dependencies": { "@turf/helpers": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.5.tgz", - "integrity": "sha512-E/NMGV5MwbjjP7AJXBtsanC3yY8N2MQ87IGdIgkB2ji5AtBpwnH4L3gEqpYN4RlCJJWbLbzO91BbKv2waUd0eg==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-7.3.4.tgz", + "integrity": "sha512-U/S5qyqgx3WTvg4twaH0WxF3EixoTCfDsmk98g1E3/5e2YKp7JKYZdz0vivsS5/UZLJeZDEElOSFH4pUgp+l7g==", "requires": { "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } }, "@turf/meta": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.5.tgz", - "integrity": "sha512-r+ohqxoyqeigFB0oFrQx/YEHIkOKqcKpCjvZkvZs7Tkv+IFco5MezAd2zd4rzK+0DfFgDP3KpJc7HqrYjvEjhg==", + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-7.3.4.tgz", + "integrity": "sha512-tlmw9/Hs1p2n0uoHVm1w3ugw1I6L8jv9YZrcdQa4SH5FX5UY0ATrKeIvfA55FlL//PGuYppJp+eyg/0eb4goqw==", "requires": { - "@turf/helpers": "7.3.5", + "@turf/helpers": "7.3.4", "@types/geojson": "^7946.0.10", "tslib": "^2.8.1" } @@ -18508,9 +18447,9 @@ } }, "@xmldom/xmldom": { - "version": "0.8.13", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz", - "integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==" + "version": "0.8.12", + "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.12.tgz", + "integrity": "sha512-9k/gHF6n/pAi/9tqr3m3aqkuiNosYTurLLUtc7xQ9sxB/wm7WPygCv8GYa6mS0fLJEHhqMC1ATYhz++U/lRHqg==" }, "abbrev": { "version": "1.1.1", @@ -19122,9 +19061,9 @@ "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==" }, "axios": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.2.tgz", - "integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz", + "integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==", "requires": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", @@ -19164,9 +19103,9 @@ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "baseline-browser-mapping": { - "version": "2.10.21", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.21.tgz", - "integrity": "sha512-Q+rUQ7Uz8AHM7DEaNdwvfFCTq7a43lNTzuS94eiWqwyxfV/wJv+oUivef51T91mmRY4d4A1u9rcSvkeufCVXlA==", + "version": "2.10.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.19.tgz", + "integrity": "sha512-qCkNLi2sfBOn8XhZQ0FXsT1Ki/Yo5P90hrkRamVFRS7/KV9hpfA4HkoWNU152+8w0zPjnxo5psx5NL3PSGgv5g==", "dev": true }, "bcrypt-pbkdf": { @@ -19502,9 +19441,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001790", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001790.tgz", - "integrity": "sha512-bOoxfJPyYo+ds6W0YfptaCWbFnJYjh2Y1Eow5lRv+vI2u8ganPZqNm1JwNh0t2ELQCqIWg4B3dWEusgAmsoyOw==", + "version": "1.0.30001788", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001788.tgz", + "integrity": "sha512-6q8HFp+lOQtcf7wBK+uEenxymVWkGKkjFpCvw5W25cmMwEDU45p1xQFBQv8JDlMMry7eNxyBaR+qxgmTUZkIRQ==", "dev": true }, "case-insensitive": { @@ -20441,9 +20380,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "electron-to-chromium": { - "version": "1.5.344", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz", - "integrity": "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==", + "version": "1.5.339", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.339.tgz", + "integrity": "sha512-Is+0BBHJ4NrdpAYiperrmp53pLywG/yV/6lIMTAnhxvzj/Cmn5Q/ogSHC6AKe7X+8kPLxxFk0cs5oc/3j/fxIg==", "dev": true }, "email-templates": { @@ -20521,7 +20460,7 @@ } }, "error-handler": { - "version": "file:../../../@agn/error-handler", + "version": "file:../../../../@agn/error-handler", "requires": { "debug": "^4.4.0", "key-file-storage": "^2.3.3", @@ -20913,9 +20852,9 @@ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "fast-xml-builder": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.5.tgz", - "integrity": "sha512-4TJn/8FKLeslLAH3dnohXqE3QSoxkhvaMzepOIZytwJXZO69Bfz0HBdDHzOTOon6G59Zrk6VQ2bEiv1t61rfkA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.4.tgz", + "integrity": "sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg==", "optional": true, "requires": { "path-expression-matcher": "^1.1.3" @@ -21602,9 +21541,9 @@ } }, "hasown": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", - "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "requires": { "function-bind": "^1.1.2" } @@ -22374,9 +22313,9 @@ "dev": true }, "jsonfile": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", - "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" @@ -23516,19 +23455,23 @@ "dependencies": { "abbrev": { "version": "1.1.1", - "bundled": true + "bundled": true, + "extraneous": true }, "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "extraneous": true }, "aproba": { "version": "1.2.0", - "bundled": true + "bundled": true, + "extraneous": true }, "are-we-there-yet": { "version": "1.1.5", "bundled": true, + "extraneous": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -23553,7 +23496,8 @@ }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "extraneous": true }, "commander": { "version": "2.11.0", @@ -23566,11 +23510,13 @@ }, "console-control-strings": { "version": "1.1.0", - "bundled": true + "bundled": true, + "extraneous": true }, "core-util-is": { "version": "1.0.2", - "bundled": true + "bundled": true, + "extraneous": true }, "debug": { "version": "3.1.0", @@ -23582,15 +23528,18 @@ }, "deep-extend": { "version": "0.6.0", - "bundled": true + "bundled": true, + "extraneous": true }, "delegates": { "version": "1.0.0", - "bundled": true + "bundled": true, + "extraneous": true }, "detect-libc": { "version": "1.0.3", - "bundled": true + "bundled": true, + "extraneous": true }, "diff": { "version": "3.3.1", @@ -23609,6 +23558,7 @@ "gauge": { "version": "2.7.4", "bundled": true, + "extraneous": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -23640,7 +23590,8 @@ }, "has-unicode": { "version": "2.0.1", - "bundled": true + "bundled": true, + "extraneous": true }, "he": { "version": "1.1.1", @@ -23650,6 +23601,7 @@ "iconv-lite": { "version": "0.4.24", "bundled": true, + "extraneous": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -23657,6 +23609,7 @@ "ignore-walk": { "version": "3.0.3", "bundled": true, + "extraneous": true, "requires": { "minimatch": "^3.0.4" } @@ -23675,18 +23628,21 @@ }, "ini": { "version": "1.3.8", - "bundled": true + "bundled": true, + "extraneous": true }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, + "extraneous": true, "requires": { "number-is-nan": "^1.0.0" } }, "isarray": { "version": "1.0.0", - "bundled": true + "bundled": true, + "extraneous": true }, "minimatch": { "version": "3.0.4", @@ -23698,13 +23654,6 @@ "minimist": { "version": "0.0.8" }, - "minipass": { - "version": "3.1.3", - "extraneous": true, - "requires": { - "yallist": "^4.0.0" - } - }, "mkdirp": { "version": "0.5.1", "requires": { @@ -23736,6 +23685,7 @@ "needle": { "version": "2.5.2", "bundled": true, + "extraneous": true, "requires": { "debug": "^3.2.6", "iconv-lite": "^0.4.4", @@ -23745,19 +23695,22 @@ "debug": { "version": "3.2.7", "bundled": true, + "extraneous": true, "requires": { "ms": "^2.1.1" } }, "ms": { "version": "2.1.3", - "bundled": true + "bundled": true, + "extraneous": true } } }, "node-pre-gyp": { "version": "0.17.0", "bundled": true, + "extraneous": true, "requires": { "detect-libc": "^1.0.3", "mkdirp": "^0.5.5", @@ -23773,11 +23726,13 @@ "dependencies": { "chownr": { "version": "1.1.4", - "bundled": true + "bundled": true, + "extraneous": true }, "fs-minipass": { "version": "1.2.7", "bundled": true, + "extraneous": true, "requires": { "minipass": "^2.6.0" } @@ -23785,6 +23740,7 @@ "glob": { "version": "7.1.6", "bundled": true, + "extraneous": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -23796,11 +23752,13 @@ }, "minimist": { "version": "1.2.5", - "bundled": true + "bundled": true, + "extraneous": true }, "minipass": { "version": "2.9.0", "bundled": true, + "extraneous": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -23809,6 +23767,7 @@ "minizlib": { "version": "1.3.3", "bundled": true, + "extraneous": true, "requires": { "minipass": "^2.9.0" } @@ -23816,6 +23775,7 @@ "mkdirp": { "version": "0.5.5", "bundled": true, + "extraneous": true, "requires": { "minimist": "^1.2.5" } @@ -23823,6 +23783,7 @@ "nopt": { "version": "4.0.3", "bundled": true, + "extraneous": true, "requires": { "abbrev": "1", "osenv": "^0.1.4" @@ -23831,17 +23792,20 @@ "rimraf": { "version": "2.7.1", "bundled": true, + "extraneous": true, "requires": { "glob": "^7.1.3" } }, "semver": { "version": "5.7.1", - "bundled": true + "bundled": true, + "extraneous": true }, "tar": { "version": "4.4.13", "bundled": true, + "extraneous": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", @@ -23854,24 +23818,28 @@ }, "yallist": { "version": "3.1.1", - "bundled": true + "bundled": true, + "extraneous": true } } }, "npm-bundled": { "version": "1.1.1", "bundled": true, + "extraneous": true, "requires": { "npm-normalize-package-bin": "^1.0.1" } }, "npm-normalize-package-bin": { "version": "1.0.1", - "bundled": true + "bundled": true, + "extraneous": true }, "npm-packlist": { "version": "1.4.8", "bundled": true, + "extraneous": true, "requires": { "ignore-walk": "^3.0.1", "npm-bundled": "^1.0.1", @@ -23881,6 +23849,7 @@ "npmlog": { "version": "4.1.2", "bundled": true, + "extraneous": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -23890,11 +23859,13 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "extraneous": true }, "object-assign": { "version": "4.1.1", - "bundled": true + "bundled": true, + "extraneous": true }, "once": { "version": "1.4.0", @@ -23905,15 +23876,18 @@ }, "os-homedir": { "version": "1.0.2", - "bundled": true + "bundled": true, + "extraneous": true }, "os-tmpdir": { "version": "1.0.2", - "bundled": true + "bundled": true, + "extraneous": true }, "osenv": { "version": "0.1.5", "bundled": true, + "extraneous": true, "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" @@ -23925,11 +23899,13 @@ }, "process-nextick-args": { "version": "2.0.1", - "bundled": true + "bundled": true, + "extraneous": true }, "rc": { "version": "1.2.8", "bundled": true, + "extraneous": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -23939,13 +23915,15 @@ "dependencies": { "minimist": { "version": "1.2.5", - "bundled": true + "bundled": true, + "extraneous": true } } }, "readable-stream": { "version": "2.3.7", "bundled": true, + "extraneous": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -23958,27 +23936,33 @@ }, "safe-buffer": { "version": "5.1.2", - "bundled": true + "bundled": true, + "extraneous": true }, "safer-buffer": { "version": "2.1.2", - "bundled": true + "bundled": true, + "extraneous": true }, "sax": { "version": "1.2.4", - "bundled": true + "bundled": true, + "extraneous": true }, "set-blocking": { "version": "2.0.0", - "bundled": true + "bundled": true, + "extraneous": true }, "signal-exit": { "version": "3.0.3", - "bundled": true + "bundled": true, + "extraneous": true }, "string_decoder": { "version": "1.1.1", "bundled": true, + "extraneous": true, "requires": { "safe-buffer": "~5.1.0" } @@ -23986,6 +23970,7 @@ "string-width": { "version": "1.0.2", "bundled": true, + "extraneous": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -23995,13 +23980,15 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, + "extraneous": true, "requires": { "ansi-regex": "^2.0.0" } }, "strip-json-comments": { "version": "2.0.1", - "bundled": true + "bundled": true, + "extraneous": true }, "supports-color": { "version": "4.4.0", @@ -24013,11 +24000,13 @@ }, "util-deprecate": { "version": "1.0.2", - "bundled": true + "bundled": true, + "extraneous": true }, "wide-align": { "version": "1.1.3", "bundled": true, + "extraneous": true, "requires": { "string-width": "^1.0.2 || 2" } @@ -24025,10 +24014,6 @@ "wrappy": { "version": "1.0.2", "bundled": true - }, - "yallist": { - "version": "4.0.0", - "extraneous": true } } }, @@ -24042,9 +24027,9 @@ } }, "node-releases": { - "version": "2.0.38", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", - "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", + "version": "2.0.37", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", + "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", "dev": true }, "nodemailer": { @@ -26685,9 +26670,9 @@ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, "uuid": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.0.tgz", - "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==" + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-13.0.0.tgz", + "integrity": "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==" }, "valid-data-url": { "version": "3.0.1", diff --git a/Development/server/package.json b/Development/server/package.json index 39a3613..4f54a3a 100644 --- a/Development/server/package.json +++ b/Development/server/package.json @@ -64,7 +64,7 @@ "debug": "^4.1.1", "dotenv": "^16.4.5", "email-templates": "11.0.3", - "error-handler": "file:../../../@agn/error-handler", + "error-handler": "file:../../../../@agn/error-handler", "exceljs": "^4.2.1", "express": "^4.18.1", "express-async-errors": "^3.1.1",