@masterteam/delegations 0.0.21 → 0.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@masterteam/delegations",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.23",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"directory": "../../../dist/masterteam/delegations",
|
|
6
6
|
"linkDirectory": false,
|
|
@@ -20,8 +20,8 @@
|
|
|
20
20
|
"tailwindcss": "^4.2.2",
|
|
21
21
|
"tailwindcss-primeui": "^0.6.1",
|
|
22
22
|
"@ngxs/store": "^20.1.0",
|
|
23
|
-
"@masterteam/components": "^0.0.175",
|
|
24
23
|
"@masterteam/forms": "^0.0.80",
|
|
24
|
+
"@masterteam/components": "^0.0.175",
|
|
25
25
|
"@masterteam/icons": "^0.0.15"
|
|
26
26
|
},
|
|
27
27
|
"sideEffects": false,
|
|
@@ -9,6 +9,7 @@ import { HttpContext, HttpInterceptorFn } from '@angular/common/http';
|
|
|
9
9
|
import { DynamicFormConfig } from '@masterteam/components';
|
|
10
10
|
import { ModalRef } from '@masterteam/components/dialog';
|
|
11
11
|
import { ModalService } from '@masterteam/components/modal';
|
|
12
|
+
import { TreeNode, TreeActionEvent } from '@masterteam/components/tree';
|
|
12
13
|
import * as rxjs from 'rxjs';
|
|
13
14
|
import { StateContext } from '@ngxs/store';
|
|
14
15
|
|
|
@@ -269,6 +270,7 @@ interface RejectDelegationRequest {
|
|
|
269
270
|
declare enum DelegationsActionKey {
|
|
270
271
|
GetMy = "getMy",
|
|
271
272
|
GetAssigned = "getAssigned",
|
|
273
|
+
GetAdmin = "getAdmin",
|
|
272
274
|
GetActive = "getActive",
|
|
273
275
|
GetDetail = "getDetail",
|
|
274
276
|
GetScopeOptions = "getScopeOptions",
|
|
@@ -282,6 +284,7 @@ declare enum DelegationsActionKey {
|
|
|
282
284
|
interface DelegationsStateModel extends LoadingStateShape<DelegationsActionKey> {
|
|
283
285
|
my: DelegationPage<DelegationRow> | null;
|
|
284
286
|
assigned: DelegationPage<DelegationRow> | null;
|
|
287
|
+
admin: DelegationPage<DelegationRow> | null;
|
|
285
288
|
active: DelegationPage<DelegationRow> | null;
|
|
286
289
|
detail: DelegationDetail | null;
|
|
287
290
|
scopeOptions: DelegationScopeOptions | null;
|
|
@@ -300,6 +303,7 @@ declare class TopbarDelegationMenu {
|
|
|
300
303
|
/** Path to the management page, e.g. `/control-panel/delegations` or `/delegations`. */
|
|
301
304
|
readonly managePath: _angular_core.InputSignal<string>;
|
|
302
305
|
readonly compact: _angular_core.InputSignal<boolean>;
|
|
306
|
+
readonly showManageLink: _angular_core.InputSignal<boolean>;
|
|
303
307
|
private readonly facade;
|
|
304
308
|
private readonly modal;
|
|
305
309
|
private readonly transloco;
|
|
@@ -317,7 +321,7 @@ declare class TopbarDelegationMenu {
|
|
|
317
321
|
endSession(event: MouseEvent): void;
|
|
318
322
|
private openConfirm;
|
|
319
323
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TopbarDelegationMenu, never>;
|
|
320
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TopbarDelegationMenu, "mt-topbar-delegation-menu", never, { "managePath": { "alias": "managePath"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
324
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<TopbarDelegationMenu, "mt-topbar-delegation-menu", never, { "managePath": { "alias": "managePath"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "showManageLink": { "alias": "showManageLink"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
321
325
|
}
|
|
322
326
|
|
|
323
327
|
interface StatusVisual {
|
|
@@ -410,7 +414,13 @@ declare class DelegationsList implements OnInit {
|
|
|
410
414
|
* `withComponentInputBinding()` — admin passes `data: { adminMode: true }`.
|
|
411
415
|
*/
|
|
412
416
|
readonly adminMode: _angular_core.InputSignal<boolean>;
|
|
417
|
+
readonly surfaceTitleKey: _angular_core.InputSignal<string>;
|
|
418
|
+
readonly assignedTabLabelKey: _angular_core.InputSignal<string>;
|
|
419
|
+
readonly assignedDecisionTab: _angular_core.InputSignal<boolean>;
|
|
420
|
+
readonly assignedEmptyStateKey: _angular_core.InputSignal<string>;
|
|
421
|
+
readonly assignedStatus: _angular_core.InputSignal<DelegationEffectiveStatus | null>;
|
|
413
422
|
private readonly facade;
|
|
423
|
+
private readonly location;
|
|
414
424
|
private readonly modal;
|
|
415
425
|
private readonly transloco;
|
|
416
426
|
protected readonly breadcrumbItems: _angular_core.WritableSignal<({
|
|
@@ -427,15 +437,20 @@ declare class DelegationsList implements OnInit {
|
|
|
427
437
|
routerLink?: undefined;
|
|
428
438
|
})[]>;
|
|
429
439
|
protected readonly activeTab: _angular_core.WritableSignal<DelegationTab>;
|
|
430
|
-
protected readonly
|
|
440
|
+
protected readonly surfaceTitle: _angular_core.Signal<string>;
|
|
441
|
+
protected readonly tabs: _angular_core.Signal<{
|
|
431
442
|
value: DelegationTab;
|
|
432
443
|
label: string;
|
|
433
444
|
}[]>;
|
|
434
445
|
protected readonly isLoading: _angular_core.Signal<boolean>;
|
|
446
|
+
protected readonly isLoadingScopeOptions: _angular_core.Signal<boolean>;
|
|
435
447
|
protected readonly scopeOptions: _angular_core.Signal<_masterteam_delegations.DelegationScopeOptions | null>;
|
|
436
448
|
protected readonly rows: _angular_core.Signal<DelegationRow[]>;
|
|
449
|
+
protected readonly emptyStateKey: _angular_core.Signal<string>;
|
|
437
450
|
statusCol: _angular_core.Signal<TemplateRef<unknown>>;
|
|
438
451
|
userCol: _angular_core.Signal<TemplateRef<unknown>>;
|
|
452
|
+
delegatorCol: _angular_core.Signal<TemplateRef<unknown>>;
|
|
453
|
+
delegatedUserCol: _angular_core.Signal<TemplateRef<unknown>>;
|
|
439
454
|
scopeCol: _angular_core.Signal<TemplateRef<unknown>>;
|
|
440
455
|
daysCol: _angular_core.Signal<TemplateRef<unknown>>;
|
|
441
456
|
protected readonly canCreate: _angular_core.Signal<boolean>;
|
|
@@ -446,11 +461,13 @@ declare class DelegationsList implements OnInit {
|
|
|
446
461
|
private readonly weekdayKeys;
|
|
447
462
|
ngOnInit(): void;
|
|
448
463
|
protected switchTab(tab: DelegationTab): void;
|
|
464
|
+
protected goBack(): void;
|
|
449
465
|
private loadCurrentTab;
|
|
450
466
|
private reloadCurrentTab;
|
|
451
467
|
protected has(row: DelegationRow, action: DelegationAllowedAction): boolean;
|
|
452
468
|
protected formatDays(row: DelegationRow): string;
|
|
453
469
|
protected formatScopeSummary(value: DelegationRow['scopeSummary']): string;
|
|
470
|
+
protected getListedParty(row: DelegationRow): DelegationParty;
|
|
454
471
|
private viewDetails;
|
|
455
472
|
private openForm;
|
|
456
473
|
private approve;
|
|
@@ -459,9 +476,18 @@ declare class DelegationsList implements OnInit {
|
|
|
459
476
|
private startSession;
|
|
460
477
|
private mark;
|
|
461
478
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DelegationsList, never>;
|
|
462
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DelegationsList, "mt-delegations-list", never, { "showBreadcrumb": { "alias": "showBreadcrumb"; "required": false; "isSignal": true; }; "adminMode": { "alias": "adminMode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
479
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DelegationsList, "mt-delegations-list", never, { "showBreadcrumb": { "alias": "showBreadcrumb"; "required": false; "isSignal": true; }; "adminMode": { "alias": "adminMode"; "required": false; "isSignal": true; }; "surfaceTitleKey": { "alias": "surfaceTitleKey"; "required": false; "isSignal": true; }; "assignedTabLabelKey": { "alias": "assignedTabLabelKey"; "required": false; "isSignal": true; }; "assignedDecisionTab": { "alias": "assignedDecisionTab"; "required": false; "isSignal": true; }; "assignedEmptyStateKey": { "alias": "assignedEmptyStateKey"; "required": false; "isSignal": true; }; "assignedStatus": { "alias": "assignedStatus"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
463
480
|
}
|
|
464
481
|
|
|
482
|
+
interface DelegationFormUserValue {
|
|
483
|
+
id: string;
|
|
484
|
+
userId: string;
|
|
485
|
+
displayName: string;
|
|
486
|
+
userName: string;
|
|
487
|
+
email?: string | null;
|
|
488
|
+
photo?: string | null;
|
|
489
|
+
isExternal: boolean;
|
|
490
|
+
}
|
|
465
491
|
/**
|
|
466
492
|
* Delegation create/edit form (doc 04). Uses the v2 explicit-scope endpoints so
|
|
467
493
|
* the persisted `DelegationScopeSelection` matches what scope/preview validated.
|
|
@@ -494,9 +520,10 @@ declare class DelegationForm implements OnInit {
|
|
|
494
520
|
isSaving: _angular_core.Signal<boolean>;
|
|
495
521
|
context: HttpContext;
|
|
496
522
|
protected readonly scope: _angular_core.WritableSignal<DelegationScopeSelection>;
|
|
497
|
-
|
|
523
|
+
protected readonly currentDelegator: _angular_core.WritableSignal<DelegationFormUserValue | null>;
|
|
524
|
+
/** Selected delegator id drives scope/options loading and the admin payload. */
|
|
498
525
|
protected readonly selectedDelegatorId: _angular_core.Signal<string | undefined>;
|
|
499
|
-
/**
|
|
526
|
+
/** Admin mode waits for a chosen delegator; self-service always has one. */
|
|
500
527
|
protected readonly showScopePicker: _angular_core.Signal<boolean>;
|
|
501
528
|
protected readonly specificDaysOptions: _angular_core.WritableSignal<{
|
|
502
529
|
label: string;
|
|
@@ -507,6 +534,7 @@ declare class DelegationForm implements OnInit {
|
|
|
507
534
|
ngOnInit(): void;
|
|
508
535
|
protected readonly canSubmit: _angular_core.Signal<boolean>;
|
|
509
536
|
onSubmit(): void;
|
|
537
|
+
private mapPartyToUserValue;
|
|
510
538
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DelegationForm, never>;
|
|
511
539
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<DelegationForm, "mt-delegation-form", never, { "delegationForEdit": { "alias": "delegationForEdit"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "adminMode": { "alias": "adminMode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
512
540
|
}
|
|
@@ -579,23 +607,22 @@ declare class ScopePicker {
|
|
|
579
607
|
protected readonly isPreviewing: _angular_core.Signal<boolean>;
|
|
580
608
|
protected readonly errorOptions: _angular_core.Signal<string | null>;
|
|
581
609
|
protected readonly groups: _angular_core.Signal<DelegationGrantableHierarchyGroup[]>;
|
|
610
|
+
protected readonly activeLang: _angular_core.Signal<string>;
|
|
582
611
|
/** Selected grant keys for O(1) checkbox state. */
|
|
583
612
|
protected readonly selectedKeys: _angular_core.Signal<Set<string>>;
|
|
584
|
-
|
|
613
|
+
protected readonly treeSelection: _angular_core.WritableSignal<TreeNode<any>[] | null>;
|
|
614
|
+
protected readonly treeNodes: _angular_core.Signal<TreeNode<any>[]>;
|
|
615
|
+
protected readonly grantIndex: _angular_core.Signal<Map<string, DelegationGrant>>;
|
|
585
616
|
constructor();
|
|
586
|
-
protected
|
|
587
|
-
protected toggleAccordion(group: DelegationGrantableHierarchyGroup): void;
|
|
588
|
-
protected isSelected(grant: DelegationGrant): boolean;
|
|
589
|
-
protected getGroupLabel(group: DelegationGrantableHierarchyGroup): string;
|
|
590
|
-
protected getTargetLabel(target: DelegationScopeTarget): string;
|
|
591
|
-
protected getActionLabel(grant: DelegationGrant): string;
|
|
592
|
-
protected getTargetActions(targetGroup: DelegationGrantableTargetGroup): DelegationGrant[];
|
|
617
|
+
protected onTreeAction(event: TreeActionEvent): void;
|
|
593
618
|
protected getPreviewSummary(summary: DelegationDisplayValue | undefined): string;
|
|
594
619
|
protected formatDeniedOperation(value?: string | null): string;
|
|
595
620
|
protected formatDeniedTarget(value?: string | null): string;
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
621
|
+
private buildTreeNodes;
|
|
622
|
+
private buildTargetNode;
|
|
623
|
+
private getGroupLabel;
|
|
624
|
+
private getTargetLabel;
|
|
625
|
+
private getActionLabel;
|
|
599
626
|
private currentLanguage;
|
|
600
627
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<ScopePicker, never>;
|
|
601
628
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<ScopePicker, "mt-scope-picker", never, { "scope": { "alias": "scope"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "delegatorUserId": { "alias": "delegatorUserId"; "required": false; "isSignal": true; }; }, { "scope": "scopeChange"; }, never, never, true, never>;
|
|
@@ -618,6 +645,11 @@ declare class GetAssignedDelegations {
|
|
|
618
645
|
static readonly type = "[Delegations] Get Assigned Delegations";
|
|
619
646
|
constructor(query?: DelegationListQuery);
|
|
620
647
|
}
|
|
648
|
+
declare class GetAdminDelegations {
|
|
649
|
+
query: DelegationListQuery;
|
|
650
|
+
static readonly type = "[Delegations] Get Admin Delegations";
|
|
651
|
+
constructor(query?: DelegationListQuery);
|
|
652
|
+
}
|
|
621
653
|
declare class GetActiveAssignedDelegations {
|
|
622
654
|
query: DelegationListQuery;
|
|
623
655
|
static readonly type = "[Delegations] Get Active Assigned Delegations";
|
|
@@ -707,6 +739,7 @@ declare class DelegationsState {
|
|
|
707
739
|
private http;
|
|
708
740
|
static getMy(state: DelegationsStateModel): DelegationPage<DelegationRow> | null;
|
|
709
741
|
static getAssigned(state: DelegationsStateModel): DelegationPage<DelegationRow> | null;
|
|
742
|
+
static getAdmin(state: DelegationsStateModel): DelegationPage<DelegationRow> | null;
|
|
710
743
|
static getActive(state: DelegationsStateModel): DelegationPage<DelegationRow> | null;
|
|
711
744
|
static getDetail(state: DelegationsStateModel): DelegationDetail | null;
|
|
712
745
|
static getScopeOptions(state: DelegationsStateModel): DelegationScopeOptions | null;
|
|
@@ -715,6 +748,7 @@ declare class DelegationsState {
|
|
|
715
748
|
static getErrors(state: DelegationsStateModel): Record<string, string | null | undefined>;
|
|
716
749
|
getMy(ctx: StateContext<DelegationsStateModel>, { query }: GetMyDelegations): rxjs.Observable<Response<DelegationPage<DelegationRow>>>;
|
|
717
750
|
getAssigned(ctx: StateContext<DelegationsStateModel>, { query }: GetAssignedDelegations): rxjs.Observable<Response<DelegationPage<DelegationRow>>>;
|
|
751
|
+
getAdmin(ctx: StateContext<DelegationsStateModel>, { query }: GetAdminDelegations): rxjs.Observable<Response<DelegationPage<DelegationRow>>>;
|
|
718
752
|
getActive(ctx: StateContext<DelegationsStateModel>, { query }: GetActiveAssignedDelegations): rxjs.Observable<Response<DelegationPage<DelegationRow>>>;
|
|
719
753
|
getDetail(ctx: StateContext<DelegationsStateModel>, { id }: GetDelegationDetail): rxjs.Observable<Response<DelegationDetail>>;
|
|
720
754
|
clearDetail(ctx: StateContext<DelegationsStateModel>): void;
|
|
@@ -736,6 +770,7 @@ declare class DelegationsFacade {
|
|
|
736
770
|
private readonly store;
|
|
737
771
|
readonly myPage: _angular_core.Signal<_masterteam_delegations.DelegationPage<_masterteam_delegations.DelegationRow> | null>;
|
|
738
772
|
readonly assignedPage: _angular_core.Signal<_masterteam_delegations.DelegationPage<_masterteam_delegations.DelegationRow> | null>;
|
|
773
|
+
readonly adminPage: _angular_core.Signal<_masterteam_delegations.DelegationPage<_masterteam_delegations.DelegationRow> | null>;
|
|
739
774
|
readonly activePage: _angular_core.Signal<_masterteam_delegations.DelegationPage<_masterteam_delegations.DelegationRow> | null>;
|
|
740
775
|
readonly detail: _angular_core.Signal<_masterteam_delegations.DelegationDetail | null>;
|
|
741
776
|
readonly scopeOptions: _angular_core.Signal<_masterteam_delegations.DelegationScopeOptions | null>;
|
|
@@ -744,9 +779,11 @@ declare class DelegationsFacade {
|
|
|
744
779
|
private readonly errors;
|
|
745
780
|
readonly myItems: _angular_core.Signal<_masterteam_delegations.DelegationRow[]>;
|
|
746
781
|
readonly assignedItems: _angular_core.Signal<_masterteam_delegations.DelegationRow[]>;
|
|
782
|
+
readonly adminItems: _angular_core.Signal<_masterteam_delegations.DelegationRow[]>;
|
|
747
783
|
readonly activeItems: _angular_core.Signal<_masterteam_delegations.DelegationRow[]>;
|
|
748
784
|
readonly isLoadingMy: _angular_core.Signal<boolean>;
|
|
749
785
|
readonly isLoadingAssigned: _angular_core.Signal<boolean>;
|
|
786
|
+
readonly isLoadingAdmin: _angular_core.Signal<boolean>;
|
|
750
787
|
readonly isLoadingActive: _angular_core.Signal<boolean>;
|
|
751
788
|
readonly isLoadingDetail: _angular_core.Signal<boolean>;
|
|
752
789
|
readonly isLoadingScopeOptions: _angular_core.Signal<boolean>;
|
|
@@ -757,11 +794,13 @@ declare class DelegationsFacade {
|
|
|
757
794
|
readonly isCancelling: _angular_core.Signal<boolean>;
|
|
758
795
|
readonly errorMy: _angular_core.Signal<string | null>;
|
|
759
796
|
readonly errorAssigned: _angular_core.Signal<string | null>;
|
|
797
|
+
readonly errorAdmin: _angular_core.Signal<string | null>;
|
|
760
798
|
readonly errorDetail: _angular_core.Signal<string | null>;
|
|
761
799
|
readonly errorScopeOptions: _angular_core.Signal<string | null>;
|
|
762
800
|
readonly errorSave: _angular_core.Signal<string | null>;
|
|
763
801
|
getMy(query?: DelegationListQuery): rxjs.Observable<void>;
|
|
764
802
|
getAssigned(query?: DelegationListQuery): rxjs.Observable<void>;
|
|
803
|
+
getAdmin(query?: DelegationListQuery): rxjs.Observable<void>;
|
|
765
804
|
getActive(query?: DelegationListQuery): rxjs.Observable<void>;
|
|
766
805
|
getDetail(id: number): rxjs.Observable<void>;
|
|
767
806
|
clearDetail(): rxjs.Observable<void>;
|
|
@@ -865,5 +904,5 @@ declare class DelegationSessionFacade {
|
|
|
865
904
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<DelegationSessionFacade>;
|
|
866
905
|
}
|
|
867
906
|
|
|
868
|
-
export { ApproveDelegation, CancelDelegation, ClearDelegationDetail, ClearScopePreview, CreateDelegationLegacy, CreateDelegationV2, DelegationDetailDrawer, DelegationForm, DelegationSessionActionKey, DelegationSessionFacade, DelegationSessionState, DelegationStatusChip, Delegations, DelegationsActionKey, DelegationsFacade, DelegationsList, DelegationsState, EndDelegationSession, GetActiveAssignedDelegations, GetAssignedDelegations, GetDelegationDetail, GetMyDelegations, GetScopeOptions, LoadDelegationCandidates, PreviewScope, RejectDelegation, RejectDelegationDialog, ScopePicker, StartDelegationSession, StartSessionDialog, SwitchDelegationSession, TopbarDelegationMenu, UpdateDelegationLegacy, UpdateDelegationV2, appDelegationInterceptor };
|
|
907
|
+
export { ApproveDelegation, CancelDelegation, ClearDelegationDetail, ClearScopePreview, CreateDelegationLegacy, CreateDelegationV2, DelegationDetailDrawer, DelegationForm, DelegationSessionActionKey, DelegationSessionFacade, DelegationSessionState, DelegationStatusChip, Delegations, DelegationsActionKey, DelegationsFacade, DelegationsList, DelegationsState, EndDelegationSession, GetActiveAssignedDelegations, GetAdminDelegations, GetAssignedDelegations, GetDelegationDetail, GetMyDelegations, GetScopeOptions, LoadDelegationCandidates, PreviewScope, RejectDelegation, RejectDelegationDialog, ScopePicker, StartDelegationSession, StartSessionDialog, SwitchDelegationSession, TopbarDelegationMenu, UpdateDelegationLegacy, UpdateDelegationV2, appDelegationInterceptor };
|
|
869
908
|
export type { ActiveDelegationSession, ApproveDelegationRequest, CreateDelegationLegacyRequest, CreateDelegationV2Request, DelegationAllowedAction, DelegationApprovalInfo, DelegationApprovalStatus, DelegationCancellationInfo, DelegationDayRuleMode, DelegationDetail, DelegationDisplayValue, DelegationDto, DelegationEffectiveStatus, DelegationGrant, DelegationListQuery, DelegationPage, DelegationParty, DelegationRow, DelegationScopeAction, DelegationScopeCombinationRule, DelegationScopeDeniedItem, DelegationScopeFact, DelegationScopeHierarchyGroup, DelegationScopeHierarchyTarget, DelegationScopeOptions, DelegationScopePreview, DelegationScopeSelection, DelegationScopeTarget, DelegationScopeWarning, DelegationSessionInvalidationReason, DelegationSessionStateModel, DelegationSortDirection, DelegationStatusInfo, DelegationsStateModel, RejectDelegationRequest, UpdateDelegationLegacyRequest, UpdateDelegationV2Request };
|