@acorex-platform/framework-client 0.0.18 → 0.0.20
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/fesm2022/acorex-platform-framework-client-auth.mjs +872 -314
- package/fesm2022/acorex-platform-framework-client-auth.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-Euotv9l0.mjs → acorex-platform-framework-client-common-common-settings.provider-CLm2BVk-.mjs} +88 -5
- package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CLm2BVk-.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-common.mjs +2666 -693
- package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-core.mjs +685 -721
- package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-domain.mjs +16 -16
- package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +124 -72
- package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CjnQ9hAJ.mjs → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-oE8CeLE8.mjs} +8 -6
- package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-CjnQ9hAJ.mjs.map → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-oE8CeLE8.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-fFen8w8M.mjs → acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-BtLEUWAA.mjs} +4 -4
- package/fesm2022/{acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-fFen8w8M.mjs.map → acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-BtLEUWAA.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs +2988 -857
- package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +277 -185
- package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BXOMs6oD.mjs +29184 -0
- package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-BXOMs6oD.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-BzUM-JMC.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-DCK-qb-F.mjs} +34 -20
- package/fesm2022/acorex-platform-framework-client-layout-entity-attachments-page.component-DCK-qb-F.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-layout-entity-bulk-entity.command-Cs3agnpF.mjs +162 -0
- package/fesm2022/acorex-platform-framework-client-layout-entity-bulk-entity.command-Cs3agnpF.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-Ci_CTFtq.mjs → acorex-platform-framework-client-layout-entity-file-list-popup.component-p0hxDb0W.mjs} +31 -19
- package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-p0hxDb0W.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-DmiB__JR.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-DYV9YPyw.mjs} +30 -18
- package/fesm2022/acorex-platform-framework-client-layout-entity-gallery-page.component-DYV9YPyw.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +2 -27090
- package/fesm2022/acorex-platform-framework-client-layout-entity.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-views.mjs +382 -154
- package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +646 -280
- package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CIwpAXbL.mjs → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BiWerYcu.mjs} +16 -10
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-CIwpAXbL.mjs.map → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BiWerYcu.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-image-preview.popup-CazpERbX.mjs → acorex-platform-framework-client-layout-widgets-image-preview.popup-BOrrMm3U.mjs} +9 -8
- package/fesm2022/acorex-platform-framework-client-layout-widgets-image-preview.popup-BOrrMm3U.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-DKkJi40s.mjs → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-WzIiwnGC.mjs} +20 -12
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-DKkJi40s.mjs.map → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-WzIiwnGC.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DtYZfA79.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-3CO4xJB3.mjs} +32 -18
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DtYZfA79.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-3CO4xJB3.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-nMUtxAyy.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-CRST84ou.mjs} +8 -7
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-nMUtxAyy.mjs.map → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-CRST84ou.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-DvUSZ4hJ.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-FjtSRxIX.mjs} +4 -4
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-DvUSZ4hJ.mjs.map → acorex-platform-framework-client-layout-widgets-tabular-data-view-popup.component-FjtSRxIX.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BihIfkZW.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-D6HFPmGC.mjs} +10 -8
- package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BihIfkZW.mjs.map → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-D6HFPmGC.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +4868 -2548
- package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-native.mjs +7 -7
- package/fesm2022/acorex-platform-framework-client-realtime-set-presence-availability.command-CetlUjnM.mjs +29 -0
- package/fesm2022/acorex-platform-framework-client-realtime-set-presence-availability.command-CetlUjnM.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-realtime.mjs +463 -26
- package/fesm2022/acorex-platform-framework-client-realtime.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-runtime.mjs +300 -137
- package/fesm2022/acorex-platform-framework-client-runtime.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-create-view.component-QIFX11dh.mjs → acorex-platform-framework-client-themes-default-entity-master-create-view.component-yeftgJ_K.mjs} +10 -7
- package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-create-view.component-QIFX11dh.mjs.map → acorex-platform-framework-client-themes-default-entity-master-create-view.component-yeftgJ_K.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BBdellyL.mjs → acorex-platform-framework-client-themes-default-entity-master-modify-view.component-DWE3OWGm.mjs} +10 -7
- package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-modify-view.component-BBdellyL.mjs.map → acorex-platform-framework-client-themes-default-entity-master-modify-view.component-DWE3OWGm.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-CIf1VWNW.mjs → acorex-platform-framework-client-themes-default-entity-master-single-view.component-C2Abf7Lb.mjs} +21 -19
- package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-C2Abf7Lb.mjs.map +1 -0
- package/fesm2022/{acorex-platform-framework-client-themes-default-error-401.component-C_czT_JC.mjs → acorex-platform-framework-client-themes-default-error-401.component-BrTotLx1.mjs} +5 -5
- package/fesm2022/{acorex-platform-framework-client-themes-default-error-401.component-C_czT_JC.mjs.map → acorex-platform-framework-client-themes-default-error-401.component-BrTotLx1.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-default-error-404.component-C2Wu0YtF.mjs → acorex-platform-framework-client-themes-default-error-404.component-DsC7_s59.mjs} +5 -5
- package/fesm2022/{acorex-platform-framework-client-themes-default-error-404.component-C2Wu0YtF.mjs.map → acorex-platform-framework-client-themes-default-error-404.component-DsC7_s59.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-default-error-offline.component-DRz-kVsT.mjs → acorex-platform-framework-client-themes-default-error-offline.component-CngiQycG.mjs} +6 -6
- package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-CngiQycG.mjs.map +1 -0
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs +421 -265
- package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-column.component-Ci_oH7NE.mjs → acorex-platform-framework-client-themes-shared-icon-chooser-column.component-CbZALjB5.mjs} +8 -6
- package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-column.component-Ci_oH7NE.mjs.map → acorex-platform-framework-client-themes-shared-icon-chooser-column.component-CbZALjB5.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-view.component-Lb1G2Xz7.mjs → acorex-platform-framework-client-themes-shared-icon-chooser-view.component-BRrNT6x2.mjs} +8 -6
- package/fesm2022/{acorex-platform-framework-client-themes-shared-icon-chooser-view.component-Lb1G2Xz7.mjs.map → acorex-platform-framework-client-themes-shared-icon-chooser-view.component-BRrNT6x2.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-D4ubvFYf.mjs → acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-BIsQTr6B.mjs} +4 -4
- package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-D4ubvFYf.mjs.map → acorex-platform-framework-client-themes-shared-theme-color-chooser-column.component-BIsQTr6B.mjs.map} +1 -1
- package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-Br8j_BF_.mjs → acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-ZclmSbt9.mjs} +16 -10
- package/fesm2022/{acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-Br8j_BF_.mjs.map → acorex-platform-framework-client-themes-shared-theme-color-chooser-view.component-ZclmSbt9.mjs.map} +1 -1
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +538 -133
- package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
- package/fesm2022/acorex-platform-framework-client-workflow.mjs +26 -66
- package/fesm2022/acorex-platform-framework-client-workflow.mjs.map +1 -1
- package/package.json +10 -10
- package/realtime/README.md +16 -0
- package/runtime/README.md +14 -0
- package/types/acorex-platform-framework-client-auth.d.ts +291 -52
- package/types/acorex-platform-framework-client-common.d.ts +613 -87
- package/types/acorex-platform-framework-client-core.d.ts +213 -206
- package/types/acorex-platform-framework-client-layout-builder.d.ts +14 -8
- package/types/acorex-platform-framework-client-layout-components.d.ts +392 -28
- package/types/acorex-platform-framework-client-layout-entity.d.ts +667 -417
- package/types/acorex-platform-framework-client-layout-views.d.ts +31 -11
- package/types/acorex-platform-framework-client-layout-widget-core.d.ts +66 -17
- package/types/acorex-platform-framework-client-layout-widgets.d.ts +294 -67
- package/types/acorex-platform-framework-client-realtime.d.ts +183 -6
- package/types/acorex-platform-framework-client-runtime.d.ts +134 -28
- package/types/acorex-platform-framework-client-themes-default.d.ts +9 -1
- package/types/acorex-platform-framework-client-themes-shared.d.ts +8 -2
- package/types/acorex-platform-framework-client-workflow.d.ts +11 -35
- package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-Euotv9l0.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity-attachments-page.component-BzUM-JMC.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-Ci_CTFtq.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-entity-gallery-page.component-DmiB__JR.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-layout-widgets-image-preview.popup-CazpERbX.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-themes-default-entity-master-single-view.component-CIf1VWNW.mjs.map +0 -1
- package/fesm2022/acorex-platform-framework-client-themes-default-error-offline.component-DRz-kVsT.mjs.map +0 -1
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acorex-platform/framework-client",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.20",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@acorex/
|
|
6
|
-
"@acorex/
|
|
7
|
-
"@acorex/charts": "^19.0.0 || ^20.0.0 || ^22.0.0-next.0 || ^22.0.0-next.0",
|
|
8
|
-
"@acorex/
|
|
9
|
-
"@acorex/
|
|
10
|
-
"@acorex
|
|
5
|
+
"@acorex-platform/framework-shared": "0.0.20",
|
|
6
|
+
"@acorex/cdk": "^19.0.0 || ^20.0.0 || ^22.0.0-next.0 || ^22.1.0-next.0 || ^22.1.0-next.0",
|
|
7
|
+
"@acorex/charts": "^19.0.0 || ^20.0.0 || ^22.0.0-next.0 || ^22.1.0-next.0 || ^22.1.0-next.0",
|
|
8
|
+
"@acorex/components": "^19.0.0 || ^20.0.0 || ^22.0.0-next.0 || ^22.1.0-next.0 || ^22.1.0-next.0",
|
|
9
|
+
"@acorex/core": "^19.0.0 || ^20.0.0 || ^22.0.0-next.0 || ^22.1.0-next.0 || ^22.1.0-next.0",
|
|
10
|
+
"@acorex/styles": "^19.0.0 || ^20.0.0 || ^22.0.0-next.0 || ^22.1.0-next.0 || ^22.1.0-next.0",
|
|
11
11
|
"@angular/animations": "^21.0.0",
|
|
12
12
|
"@ngrx/signals": "^21.0.0",
|
|
13
|
-
"socket.io-client": "^4.0.0",
|
|
14
|
-
"tailwindcss-animate": "^1.0.0",
|
|
15
13
|
"dom-to-image": "^2.6.0",
|
|
16
14
|
"micromark": "^4.0.2",
|
|
17
|
-
"micromark-extension-gfm": "^3.0.0"
|
|
15
|
+
"micromark-extension-gfm": "^3.0.0",
|
|
16
|
+
"socket.io-client": "^4.0.0",
|
|
17
|
+
"tailwindcss-animate": "^1.0.0"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"tslib": "^2.3.0"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Framework Client Realtime
|
|
2
|
+
|
|
3
|
+
Always-on app signaling over the **built-in** Socket.IO connection. Topic handlers receive envelopes published by the server realtime module.
|
|
4
|
+
|
|
5
|
+
## Built-in vs RTC
|
|
6
|
+
|
|
7
|
+
- **This package:** inbox, chat messages, typing, entity mutations (lightweight, always on).
|
|
8
|
+
- **`extensions/rtc`:** call ring plus voice/video media when an RTC provider (e.g. LiveKit) is configured. Not a replacement for this connection.
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
import { provideRealtime } from '@acorex-platform/framework-client/realtime';
|
|
12
|
+
|
|
13
|
+
provideRealtime({ apiBaseUrl: environment.baseUrl, backend: 'builtin' });
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Inject `AXPRealtimeConnectionPort` (or `AXPRealtimeConnectionService`) for connect/subscribe; register handlers on `AXPRealtimeDispatcherService`.
|
package/runtime/README.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
1
|
# @acorex-platform/framework-client/runtime
|
|
2
2
|
|
|
3
3
|
Secondary entry point of `@acorex-platform/framework-client/platform`. It can be used by importing from `@acorex-platform/framework-client/runtime`.
|
|
4
|
+
|
|
5
|
+
## External bulk transport (other API stacks)
|
|
6
|
+
|
|
7
|
+
When the host app uses only this client library and implements the API elsewhere, override bulk with:
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
import { provideExternalRuntimeBulkTransport } from '@acorex-platform/framework-client/runtime';
|
|
11
|
+
|
|
12
|
+
providers: [
|
|
13
|
+
...provideExternalRuntimeBulkTransport((request) => myApi.bulk(request)),
|
|
14
|
+
]
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
See [`src/lib/RUNTIME_REMOTE_BULK_TRANSPORT.md`](./src/lib/RUNTIME_REMOTE_BULK_TRANSPORT.md).
|
|
@@ -1,30 +1,29 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, TemplateRef, ViewContainerRef, ModuleWithProviders, Injector, Type } from '@angular/core';
|
|
3
|
+
import { AXPMultiLanguageString, AXPOptionsData, AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from '@acorex-platform/framework-shared/core';
|
|
3
4
|
import { CanActivateFn } from '@angular/router';
|
|
4
|
-
import { AXPDataSourceDefinitionProvider, AXPDataSourceDefinition } from '@acorex-platform/framework-client/core';
|
|
5
|
-
import { AXPOptionsData, AXPExpressionEvaluatorScopeProvider, AXPExpressionEvaluatorScopeProviderContext } from '@acorex-platform/framework-shared/core';
|
|
6
5
|
import { Observable } from 'rxjs';
|
|
7
6
|
|
|
8
7
|
interface AXPEdition {
|
|
9
8
|
id: string;
|
|
10
|
-
title:
|
|
11
|
-
description?:
|
|
9
|
+
title: AXPMultiLanguageString;
|
|
10
|
+
description?: AXPMultiLanguageString;
|
|
12
11
|
}
|
|
13
12
|
interface AXPApplication {
|
|
14
13
|
id: string;
|
|
15
14
|
name: string;
|
|
16
|
-
title?:
|
|
15
|
+
title?: AXPMultiLanguageString;
|
|
17
16
|
version?: string;
|
|
18
17
|
edition?: AXPEdition;
|
|
19
|
-
description?:
|
|
18
|
+
description?: AXPMultiLanguageString;
|
|
20
19
|
logoUrl?: string;
|
|
21
20
|
}
|
|
22
21
|
|
|
23
22
|
interface AXPTenant {
|
|
24
23
|
id: string;
|
|
25
24
|
name: string;
|
|
26
|
-
title:
|
|
27
|
-
description?:
|
|
25
|
+
title: AXPMultiLanguageString;
|
|
26
|
+
description?: AXPMultiLanguageString;
|
|
28
27
|
logo?: string;
|
|
29
28
|
}
|
|
30
29
|
|
|
@@ -32,7 +31,8 @@ interface AXPUser {
|
|
|
32
31
|
id: string;
|
|
33
32
|
name: string;
|
|
34
33
|
title: string;
|
|
35
|
-
|
|
34
|
+
/** File-storage id / ref; `null` when known empty (from SignIn/Refresh). */
|
|
35
|
+
avatar?: string | null;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
declare class AXPSessionContext {
|
|
@@ -62,11 +62,6 @@ interface AXPApplicationLoader {
|
|
|
62
62
|
}
|
|
63
63
|
declare const AXP_APPLICATION_LOADER: InjectionToken<AXPApplicationLoader>;
|
|
64
64
|
|
|
65
|
-
/** Platform auth datasource registry names. */
|
|
66
|
-
declare const AXPPlatformAuthDataSourceKeys: {
|
|
67
|
-
readonly PermissionDefinitions: "platform-permission-definitions";
|
|
68
|
-
};
|
|
69
|
-
|
|
70
65
|
declare class AXPUnauthorizedError extends Error {
|
|
71
66
|
data?: {
|
|
72
67
|
redirectUrl?: string;
|
|
@@ -110,6 +105,13 @@ interface AXPPermissionGroupDefinition {
|
|
|
110
105
|
name: string;
|
|
111
106
|
title: string;
|
|
112
107
|
description?: string;
|
|
108
|
+
/**
|
|
109
|
+
* Optional parent group name. When set, this group is a **section** under the parent
|
|
110
|
+
* in the Permissions Editor right panel (not a left-nav root).
|
|
111
|
+
*/
|
|
112
|
+
parent?: string;
|
|
113
|
+
/** Optional sort order among sibling sections (lower first). */
|
|
114
|
+
order?: number;
|
|
113
115
|
permissions: AXPPermissionDefinition[];
|
|
114
116
|
}
|
|
115
117
|
type AXPPermissionDefinition = {
|
|
@@ -123,6 +125,12 @@ type AXPPermissionDefinition = {
|
|
|
123
125
|
* If any required feature is not enabled, this permission will be filtered out.
|
|
124
126
|
*/
|
|
125
127
|
requiredFeatures?: string[];
|
|
128
|
+
/**
|
|
129
|
+
* Edition / Nx module names this permission belongs to.
|
|
130
|
+
* Session and role-editor filtering keep the permission when ANY listed module is enabled
|
|
131
|
+
* (Access/Setup typically list all domain contributors; unique caps list the owner module).
|
|
132
|
+
*/
|
|
133
|
+
modules?: string[];
|
|
126
134
|
};
|
|
127
135
|
|
|
128
136
|
interface AXPPermissionLoader {
|
|
@@ -130,17 +138,24 @@ interface AXPPermissionLoader {
|
|
|
130
138
|
}
|
|
131
139
|
declare const AXP_PERMISSION_LOADER: InjectionToken<AXPPermissionLoader>;
|
|
132
140
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
+
type AXPPermissionGroupAddOptions = {
|
|
142
|
+
/** Parent group name — makes this group a right-panel section under that root. */
|
|
143
|
+
parent?: string;
|
|
144
|
+
/** Sort order among sibling sections (lower first). */
|
|
145
|
+
order?: number;
|
|
146
|
+
};
|
|
147
|
+
type AXPPermissionAddOptions = {
|
|
148
|
+
/** Required feature flags for this permission to appear. */
|
|
149
|
+
requiredFeatures?: string[];
|
|
150
|
+
/**
|
|
151
|
+
* Edition module names this permission belongs to.
|
|
152
|
+
* Availability uses ANY-match against the tenant application edition modules.
|
|
153
|
+
*/
|
|
154
|
+
modules?: string[];
|
|
155
|
+
};
|
|
141
156
|
declare class AXPPermissionDefinitionProviderContext {
|
|
142
157
|
private builders;
|
|
143
|
-
addGroup(name: string, title: string, description?: string): AXPPermissionDefinitionGroupBuilder;
|
|
158
|
+
addGroup(name: string, title: string, description?: string, options?: AXPPermissionGroupAddOptions): AXPPermissionDefinitionGroupBuilder;
|
|
144
159
|
getGroupDefinitions(): AXPPermissionGroupDefinition[];
|
|
145
160
|
findGroup(name: string): AXPPermissionDefinitionGroupBuilder | undefined;
|
|
146
161
|
isGroupDefined(name: string): boolean;
|
|
@@ -150,47 +165,59 @@ declare class AXPPermissionDefinitionGroupBuilder {
|
|
|
150
165
|
private _group;
|
|
151
166
|
get group(): AXPPermissionGroupDefinition;
|
|
152
167
|
constructor(context: AXPPermissionDefinitionProviderContext, group: AXPPermissionGroupDefinition);
|
|
153
|
-
addPermission(name: string, title: string, description?: string,
|
|
168
|
+
addPermission(name: string, title: string, description?: string, options?: AXPPermissionAddOptions | string[]): AXPPermissionDefinitionBuilder;
|
|
154
169
|
endGroup(): AXPPermissionDefinitionProviderContext;
|
|
155
|
-
findPermission(
|
|
156
|
-
findGroup(
|
|
170
|
+
findPermission(_path: string): AXPPermissionDefinition | undefined;
|
|
171
|
+
findGroup(_name: string): AXPPermissionDefinitionGroupBuilder | undefined;
|
|
157
172
|
}
|
|
158
173
|
declare class AXPPermissionDefinitionBuilder {
|
|
159
174
|
private groupBuilder;
|
|
160
175
|
private permission;
|
|
161
176
|
constructor(groupBuilder: AXPPermissionDefinitionGroupBuilder, permission: AXPPermissionDefinition);
|
|
162
|
-
addChild(name: string, title: string, description?: string,
|
|
177
|
+
addChild(name: string, title: string, description?: string, options?: AXPPermissionAddOptions | string[]): AXPPermissionDefinitionBuilder;
|
|
163
178
|
/**
|
|
164
179
|
* Set required features for this permission.
|
|
165
180
|
* @param features - Array of feature names (e.g., ['PlatformManagement.menu-customization'])
|
|
166
181
|
*/
|
|
167
182
|
requireFeatures(...features: string[]): AXPPermissionDefinitionBuilder;
|
|
183
|
+
/**
|
|
184
|
+
* Set edition module ownership for this permission (ANY-match for availability).
|
|
185
|
+
*/
|
|
186
|
+
modules(...moduleNames: string[]): AXPPermissionDefinitionBuilder;
|
|
168
187
|
endPermission(): AXPPermissionDefinitionGroupBuilder;
|
|
169
188
|
}
|
|
170
189
|
|
|
171
190
|
interface AXPPermissionDefinitionProvider {
|
|
172
191
|
define(context: AXPPermissionDefinitionProviderContext): Promise<void>;
|
|
173
192
|
}
|
|
193
|
+
/** Resolves edition module names for a permission key (product map). */
|
|
194
|
+
type AXPPermissionModulesResolver = (permissionKey: string) => readonly string[];
|
|
174
195
|
declare const AXP_PERMISSION_DEFINITION_PROVIDER: InjectionToken<AXPPermissionDefinitionProvider[]>;
|
|
196
|
+
declare const AXP_PERMISSION_MODULES_RESOLVER: InjectionToken<AXPPermissionModulesResolver>;
|
|
175
197
|
declare class AXPPermissionDefinitionService {
|
|
176
198
|
private providers;
|
|
199
|
+
private modulesResolver;
|
|
177
200
|
private sessionService;
|
|
178
201
|
private cache;
|
|
202
|
+
/** Invalidates cache when the session edition modules/features change (e.g. app switch). */
|
|
203
|
+
private cacheAvailabilityKey;
|
|
204
|
+
private buildAvailabilityKey;
|
|
179
205
|
private load;
|
|
206
|
+
/** Attach modules[] from the product resolver when providers omitted them. */
|
|
207
|
+
private enrichGroupModules;
|
|
208
|
+
private enrichPermissionModules;
|
|
180
209
|
/**
|
|
181
|
-
* Filter permissions
|
|
182
|
-
*
|
|
183
|
-
*/
|
|
184
|
-
private filterByFeatures;
|
|
185
|
-
/**
|
|
186
|
-
* Recursively filter permissions and their children based on required features.
|
|
210
|
+
* Filter permissions by edition modules (ANY-match) and required features.
|
|
211
|
+
* Keeps parent groups that still have at least one child section with permissions.
|
|
187
212
|
*/
|
|
213
|
+
private filterUnavailablePermissions;
|
|
188
214
|
private filterPermissions;
|
|
189
215
|
reload(): Promise<void>;
|
|
190
216
|
getGroups(): Promise<AXPPermissionGroupDefinition[]>;
|
|
191
217
|
getPermissions(): Promise<AXPPermissionDefinition[]>;
|
|
192
218
|
getGroup(name: string): Promise<AXPPermissionGroupDefinition | null>;
|
|
193
219
|
getPermission(name: string): Promise<AXPPermissionDefinition | null>;
|
|
220
|
+
private findPermissionRecursive;
|
|
194
221
|
static ɵfac: i0.ɵɵFactoryDeclaration<AXPPermissionDefinitionService, never>;
|
|
195
222
|
static ɵprov: i0.ɵɵInjectableDeclaration<AXPPermissionDefinitionService>;
|
|
196
223
|
}
|
|
@@ -200,7 +227,8 @@ interface AXPBaseCredentials {
|
|
|
200
227
|
[key: string]: string;
|
|
201
228
|
}
|
|
202
229
|
interface AXPTokenResult {
|
|
203
|
-
|
|
230
|
+
/** Present only for non-browser clients; SPA uses HttpOnly cookies. */
|
|
231
|
+
accessToken?: string;
|
|
204
232
|
expiresIn?: string | null;
|
|
205
233
|
refreshToken?: string;
|
|
206
234
|
idToken?: string;
|
|
@@ -210,10 +238,11 @@ interface AXPTokenResult {
|
|
|
210
238
|
interface AXPSignInResult {
|
|
211
239
|
succeed: boolean;
|
|
212
240
|
data?: {
|
|
213
|
-
|
|
241
|
+
/** Present only for non-browser clients; SPA uses HttpOnly cookies. */
|
|
242
|
+
accessToken?: string;
|
|
214
243
|
idToken?: string | null;
|
|
215
244
|
expiresIn?: string | null;
|
|
216
|
-
refreshToken
|
|
245
|
+
refreshToken?: string;
|
|
217
246
|
user: AXPUser;
|
|
218
247
|
tenant?: AXPTenant | null;
|
|
219
248
|
application?: AXPApplication | null;
|
|
@@ -228,10 +257,10 @@ declare abstract class AXPAuthStrategy {
|
|
|
228
257
|
[key: string]: any;
|
|
229
258
|
}): Promise<AXPSignInResult | void>;
|
|
230
259
|
}
|
|
260
|
+
/**
|
|
261
|
+
* Client-persisted session metadata. Tokens are never stored here — they live in HttpOnly cookies.
|
|
262
|
+
*/
|
|
231
263
|
interface AXPSessionData {
|
|
232
|
-
accessToken: string;
|
|
233
|
-
refreshToken: string;
|
|
234
|
-
idToken: string | null;
|
|
235
264
|
strategy: string;
|
|
236
265
|
user?: AXPUser | null;
|
|
237
266
|
tenant?: AXPTenant | null;
|
|
@@ -239,6 +268,8 @@ interface AXPSessionData {
|
|
|
239
268
|
expiresIn?: string | null;
|
|
240
269
|
/** When true, the client lock overlay stays active until PIN/password unlock or sign-out. */
|
|
241
270
|
locked?: boolean;
|
|
271
|
+
/** True when the server issued HttpOnly auth cookies for this session. */
|
|
272
|
+
cookieSession?: boolean;
|
|
242
273
|
}
|
|
243
274
|
|
|
244
275
|
interface AXPFeature {
|
|
@@ -296,6 +327,15 @@ interface AXPFeatureChecker {
|
|
|
296
327
|
*/
|
|
297
328
|
declare const AXP_FEATURE_CHECKER: InjectionToken<AXPFeatureChecker>;
|
|
298
329
|
|
|
330
|
+
/**
|
|
331
|
+
* Exposes `feature.check(...)` / `feature.checkAny(...)` for entity expressions
|
|
332
|
+
* (e.g. `schema.visible: '{{ feature.check("Module:Feature:X") }}'`).
|
|
333
|
+
*/
|
|
334
|
+
declare class AXPFeatureEvaluatorScopeProvider implements AXPExpressionEvaluatorScopeProvider {
|
|
335
|
+
protected sessionService: AXPSessionService;
|
|
336
|
+
provide(context: AXPExpressionEvaluatorScopeProviderContext): Promise<void>;
|
|
337
|
+
}
|
|
338
|
+
|
|
299
339
|
declare class AXPSessionService {
|
|
300
340
|
private eventService;
|
|
301
341
|
private authStrategyRegistry;
|
|
@@ -308,6 +348,9 @@ declare class AXPSessionService {
|
|
|
308
348
|
private readonly permissionChecker;
|
|
309
349
|
private readonly featureChecker;
|
|
310
350
|
private readonly accessPolicyCache;
|
|
351
|
+
/** In-memory catalog caches — shared by guards and chooser UI (one List* per bind). */
|
|
352
|
+
private tenantsListCache;
|
|
353
|
+
private applicationsListCache;
|
|
311
354
|
private status;
|
|
312
355
|
readonly status$: Observable<AXPSessionStatus>;
|
|
313
356
|
private isLoading;
|
|
@@ -318,11 +361,9 @@ declare class AXPSessionService {
|
|
|
318
361
|
private currentTenantSubject;
|
|
319
362
|
readonly tenant$: Observable<AXPTenant | null>;
|
|
320
363
|
get tenant(): AXPTenant | null;
|
|
321
|
-
get tenants$(): Observable<AXPTenant[]>;
|
|
322
364
|
private currentApplicationSubject;
|
|
323
365
|
readonly application$: Observable<AXPApplication | null>;
|
|
324
366
|
get application(): AXPApplication | null;
|
|
325
|
-
get applications$(): Observable<AXPApplication[]>;
|
|
326
367
|
private permissionsSubject;
|
|
327
368
|
readonly permissions$: Observable<never[] | string[]>;
|
|
328
369
|
get permissions(): AXPPermission[];
|
|
@@ -330,21 +371,50 @@ declare class AXPSessionService {
|
|
|
330
371
|
readonly features$: Observable<never[] | AXPFeature[]>;
|
|
331
372
|
get features(): AXPFeature[];
|
|
332
373
|
readonly isAuthenticated$: Observable<boolean>;
|
|
374
|
+
/** Synchronous counterpart to {@link isAuthenticated$}. */
|
|
375
|
+
get isAuthenticated(): boolean;
|
|
333
376
|
readonly isAuthenticatedWithLoading$: Observable<boolean>;
|
|
334
377
|
readonly isAuthorized$: Observable<boolean>;
|
|
378
|
+
/** Synchronous counterpart to {@link isAuthorized$}. */
|
|
379
|
+
get isAuthorized(): boolean;
|
|
380
|
+
/**
|
|
381
|
+
* Tenant and application are selected and permissions are loaded.
|
|
382
|
+
* Gate app-scoped runtime work (entity queries, inbox, activity).
|
|
383
|
+
*/
|
|
384
|
+
get isReadyForAppScopedApi(): boolean;
|
|
385
|
+
readonly isReadyForAppScopedApi$: Observable<boolean>;
|
|
386
|
+
/** Tenant list for the signed-in user; skips the API when there is no cookie session. */
|
|
387
|
+
readonly tenants$: Observable<AXPTenant[]>;
|
|
388
|
+
/** Application list for the current tenant; skips the API when there is no cookie session. */
|
|
389
|
+
readonly applications$: Observable<AXPApplication[]>;
|
|
335
390
|
/** Waits for session restore to finish, then emits whether the session is fully authorized. */
|
|
336
391
|
readonly isAuthorizedWithLoading$: Observable<boolean>;
|
|
337
392
|
restoreSession(): Promise<void>;
|
|
338
393
|
signin(credentials: AXPBaseCredentials): Promise<void>;
|
|
339
394
|
register(credentials: AXPBaseCredentials): Promise<void>;
|
|
340
395
|
private applySignInResult;
|
|
396
|
+
/**
|
|
397
|
+
* Clears the selected application so the user must pick one (app chooser).
|
|
398
|
+
* Keeps tenant/user/token intact and demotes status to Authenticated.
|
|
399
|
+
*/
|
|
400
|
+
clearApplicationSelection(): void;
|
|
341
401
|
updateToken(params?: {
|
|
342
402
|
[key: string]: any;
|
|
343
403
|
}): Promise<void>;
|
|
344
404
|
signout(): Promise<void>;
|
|
345
|
-
refreshToken(): Promise<
|
|
405
|
+
refreshToken(): Promise<boolean>;
|
|
406
|
+
/**
|
|
407
|
+
* Auth:GetAccessPolicy is only meaningful with tenant + application bound.
|
|
408
|
+
* Skipping incomplete contexts cuts 2 redundant calls on the common login path.
|
|
409
|
+
*/
|
|
410
|
+
private reloadAccessPolicyIfReady;
|
|
346
411
|
private loadPermissions;
|
|
347
412
|
private loadFeatures;
|
|
413
|
+
/** Shared ListTenants — used by guards and {@link tenants$}. */
|
|
414
|
+
getTenantsList(): Promise<AXPTenant[]>;
|
|
415
|
+
/** Shared ListApplications — used by guards and {@link applications$}. */
|
|
416
|
+
getApplicationsList(): Promise<AXPApplication[]>;
|
|
417
|
+
private clearCatalogCaches;
|
|
348
418
|
signInComplete(): Promise<void>;
|
|
349
419
|
/** Tenant + application must be bound before menu, permissions, and features are fully valid. */
|
|
350
420
|
private hasCompleteSessionContext;
|
|
@@ -353,12 +423,14 @@ declare class AXPSessionService {
|
|
|
353
423
|
* Authorized only once tenant and application are selected and loaders have finished.
|
|
354
424
|
*/
|
|
355
425
|
private syncSessionAuthorization;
|
|
356
|
-
setSession(
|
|
426
|
+
setSession(partial: Partial<AXPSessionData>): void;
|
|
357
427
|
/** Whether the client lock overlay should remain active after reload. */
|
|
358
428
|
isLocked(): boolean;
|
|
359
429
|
/** Persists client lock state inside {@link AXPSessionService.SESSION_KEY}. */
|
|
360
430
|
setLocked(locked: boolean): void;
|
|
361
431
|
setStrategy(strategy: string): void;
|
|
432
|
+
/** Session strategy, or pending OAuth strategy left for the callback page. */
|
|
433
|
+
private resolveStrategyName;
|
|
362
434
|
getSessionData(): AXPSessionData | null;
|
|
363
435
|
private clearSession;
|
|
364
436
|
/** Keeps in-memory subjects aligned with persisted session (e.g. after user switch). */
|
|
@@ -371,9 +443,19 @@ declare class AXPSessionService {
|
|
|
371
443
|
* Module names can be provided in PascalCase (e.g., 'SecurityManagement') or kebab-case (e.g., 'security-management').
|
|
372
444
|
*/
|
|
373
445
|
isModuleEnabled(moduleName: string): boolean;
|
|
446
|
+
/**
|
|
447
|
+
* Access tokens are HttpOnly and not readable from JS.
|
|
448
|
+
* Use {@link hasSessionCredentials} for auth gating.
|
|
449
|
+
*/
|
|
374
450
|
getToken(): string | undefined;
|
|
451
|
+
/** True when the SPA has an active cookie-backed session. */
|
|
452
|
+
hasSessionCredentials(): boolean;
|
|
375
453
|
getContext(): AXPSessionContext;
|
|
376
454
|
private invalidateAccessPolicyCache;
|
|
455
|
+
private isApplicationContextUpdate;
|
|
456
|
+
private isTenantContextUpdate;
|
|
457
|
+
private resolveApplicationAfterUpdate;
|
|
458
|
+
private isAuthenticatedStatus;
|
|
377
459
|
static ɵfac: i0.ɵɵFactoryDeclaration<AXPSessionService, never>;
|
|
378
460
|
static ɵprov: i0.ɵɵInjectableDeclaration<AXPSessionService>;
|
|
379
461
|
}
|
|
@@ -411,7 +493,6 @@ declare const AXPAuthGuard: CanActivateFn;
|
|
|
411
493
|
interface AXPAuthModuleConfigs {
|
|
412
494
|
strategies: (new () => AXPAuthStrategy)[];
|
|
413
495
|
}
|
|
414
|
-
declare function initializeAppState(service: AXPSessionService): () => Promise<void>;
|
|
415
496
|
declare class AXPAuthModule {
|
|
416
497
|
static forRoot(configs?: AXPAuthModuleConfigs): ModuleWithProviders<AXPAuthModule>;
|
|
417
498
|
static forChild(configs?: AXPAuthModuleConfigs): ModuleWithProviders<AXPAuthModule>;
|
|
@@ -483,12 +564,12 @@ interface PlatformAuthTokenResponseDto {
|
|
|
483
564
|
tenant?: {
|
|
484
565
|
id: string;
|
|
485
566
|
name?: string;
|
|
486
|
-
title?:
|
|
567
|
+
title?: AXPMultiLanguageString;
|
|
487
568
|
} | null;
|
|
488
569
|
application?: {
|
|
489
570
|
id: string;
|
|
490
571
|
name?: string;
|
|
491
|
-
title?:
|
|
572
|
+
title?: AXPMultiLanguageString;
|
|
492
573
|
} | null;
|
|
493
574
|
}
|
|
494
575
|
declare function platformOAuthSessionUpdateParams(params: {
|
|
@@ -499,14 +580,121 @@ declare function platformOAuthSessionUpdateParams(params: {
|
|
|
499
580
|
tenantId?: string;
|
|
500
581
|
applicationId?: string;
|
|
501
582
|
};
|
|
502
|
-
declare function shouldPlatformOAuthBindSession(
|
|
583
|
+
declare function shouldPlatformOAuthBindSession(hasCredentials: boolean, params: {
|
|
503
584
|
[key: string]: unknown;
|
|
504
585
|
}): boolean;
|
|
505
|
-
declare function postPlatformOAuthSessionUpdate(baseUrl: string, accessToken: string, params: {
|
|
506
|
-
[key: string]: unknown;
|
|
507
|
-
}): Promise<AXPSignInResult>;
|
|
508
586
|
declare function toPlatformOAuthSignInResult(result: PlatformAuthTokenResponseDto, context?: Partial<AXPSessionContext>): AXPSignInResult;
|
|
509
587
|
|
|
588
|
+
interface AXPPlatformOAuthDiscoveryDocument {
|
|
589
|
+
issuer?: string;
|
|
590
|
+
authorization_endpoint?: string;
|
|
591
|
+
token_endpoint?: string;
|
|
592
|
+
jwks_uri?: string;
|
|
593
|
+
}
|
|
594
|
+
interface AXPPlatformOAuthClientConfig {
|
|
595
|
+
clientId: string;
|
|
596
|
+
redirectUri: string;
|
|
597
|
+
scope: string;
|
|
598
|
+
}
|
|
599
|
+
declare const AXP_DEFAULT_PLATFORM_OAUTH_CLIENT_ID = "acorex";
|
|
600
|
+
declare const AXP_DEFAULT_PLATFORM_OAUTH_SCOPE = "openid profile email offline_access";
|
|
601
|
+
declare function resolvePlatformOAuthIssuer(baseUrl?: string): string;
|
|
602
|
+
declare function resolvePlatformOAuthRedirectUri(): string;
|
|
603
|
+
declare function resolvePlatformOAuthClientConfig(authConfig?: {
|
|
604
|
+
clientId?: string;
|
|
605
|
+
client_id?: string;
|
|
606
|
+
redirectUri?: string;
|
|
607
|
+
scope?: string;
|
|
608
|
+
} | null): AXPPlatformOAuthClientConfig;
|
|
609
|
+
declare function fetchPlatformOAuthDiscoveryDocument(issuer: string): Promise<AXPPlatformOAuthDiscoveryDocument>;
|
|
610
|
+
declare function resolvePlatformOAuthAuthorizeEndpoint(issuer: string, discovery?: AXPPlatformOAuthDiscoveryDocument | null): string;
|
|
611
|
+
declare function resolvePlatformOAuthTokenEndpoint(issuer: string, discovery?: AXPPlatformOAuthDiscoveryDocument | null): string;
|
|
612
|
+
|
|
613
|
+
interface AXPAuthLocalSignInMethod {
|
|
614
|
+
id: string;
|
|
615
|
+
title: string;
|
|
616
|
+
protocol: 'password' | 'otp' | 'custom';
|
|
617
|
+
enabled: boolean;
|
|
618
|
+
}
|
|
619
|
+
/** Public IdP row — never includes secrets. `id` is used as OAuth `acr_values`. */
|
|
620
|
+
interface AXPAuthIdentityProvider {
|
|
621
|
+
id: string;
|
|
622
|
+
title: string;
|
|
623
|
+
icon?: string;
|
|
624
|
+
priority: number;
|
|
625
|
+
}
|
|
626
|
+
interface AXPAuthListProvidersResponse {
|
|
627
|
+
localMethods: AXPAuthLocalSignInMethod[];
|
|
628
|
+
identityProviders: AXPAuthIdentityProvider[];
|
|
629
|
+
}
|
|
630
|
+
declare function asAuthListProvidersResponse(payload: unknown): AXPAuthListProvidersResponse;
|
|
631
|
+
declare function findIdentityProvider(payload: unknown, id: string): AXPAuthIdentityProvider | undefined;
|
|
632
|
+
|
|
633
|
+
interface PlatformAuthUpdateSessionInput {
|
|
634
|
+
tenantId?: string;
|
|
635
|
+
applicationId?: string;
|
|
636
|
+
tenant?: AXPTenant;
|
|
637
|
+
application?: AXPApplication;
|
|
638
|
+
}
|
|
639
|
+
declare class AXPPlatformAuthRuntimeService {
|
|
640
|
+
private readonly commandService;
|
|
641
|
+
private readonly queryService;
|
|
642
|
+
private readonly sessionService;
|
|
643
|
+
private listProvidersCache;
|
|
644
|
+
private listProvidersInFlight;
|
|
645
|
+
logout(_refreshToken?: string | null): Promise<void>;
|
|
646
|
+
refresh(_refreshToken?: string): Promise<PlatformAuthTokenResponseDto>;
|
|
647
|
+
updateSession(input: PlatformAuthUpdateSessionInput): Promise<PlatformAuthTokenResponseDto>;
|
|
648
|
+
listProviders(): Promise<AXPAuthListProvidersResponse>;
|
|
649
|
+
clearListProvidersCache(): void;
|
|
650
|
+
private executeCommand;
|
|
651
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AXPPlatformAuthRuntimeService, never>;
|
|
652
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AXPPlatformAuthRuntimeService>;
|
|
653
|
+
}
|
|
654
|
+
|
|
655
|
+
/**
|
|
656
|
+
* Best-effort plain string for thrown {@link Error} messages from command results (no i18n lookup).
|
|
657
|
+
*/
|
|
658
|
+
declare function commandMessageTextForError(value: AXPMultiLanguageString | undefined | null): string;
|
|
659
|
+
|
|
660
|
+
/**
|
|
661
|
+
* Persisted while an authorization-code redirect is in flight.
|
|
662
|
+
* `restoreSession` clears partial `AXP_SESSION` (no user / no cookies) — this key
|
|
663
|
+
* must survive so `/auth/oauth-callback` can resolve the strategy.
|
|
664
|
+
*/
|
|
665
|
+
declare const AXP_OAUTH_PENDING_STRATEGY_KEY = "axp_oauth_pending_strategy";
|
|
666
|
+
/** Set by platform OAuth strategies before redirect (PKCE). */
|
|
667
|
+
declare const AXP_OAUTH_PKCE_VERIFIER_KEY = "pkce_code_verifier";
|
|
668
|
+
declare function setOAuthPendingStrategy(strategy: string): void;
|
|
669
|
+
declare function getOAuthPendingStrategy(): string | null;
|
|
670
|
+
declare function clearOAuthPendingStrategy(): void;
|
|
671
|
+
declare function isOAuthRedirectInFlight(): boolean;
|
|
672
|
+
|
|
673
|
+
/** Debug namespace for auth session diagnostics. Filter console with `[AXP:AUTH-SESSION]`. */
|
|
674
|
+
declare const AUTH_SESSION_TRACE_NS = "AUTH-SESSION";
|
|
675
|
+
declare const AUTH_SESSION_TRACE_TITLE: {
|
|
676
|
+
/** Sign-in / register / sign-out lifecycle. */
|
|
677
|
+
readonly Lifecycle: "Lifecycle";
|
|
678
|
+
/** Cookie session restore + refresh. */
|
|
679
|
+
readonly Restore: "Restore";
|
|
680
|
+
/** Tenant / application bind via UpdateSession. */
|
|
681
|
+
readonly Workspace: "Workspace";
|
|
682
|
+
/** Auth:GetAccessPolicy load (permissions + features). */
|
|
683
|
+
readonly AccessPolicy: "AccessPolicy";
|
|
684
|
+
/** ListTenants / ListApplications. */
|
|
685
|
+
readonly Catalog: "Catalog";
|
|
686
|
+
/** Route guards (login, tenant-chooser, app-chooser). */
|
|
687
|
+
readonly Guard: "Guard";
|
|
688
|
+
};
|
|
689
|
+
|
|
690
|
+
declare function traceAuthLifecycle(message: string, data?: () => Record<string, unknown>): void;
|
|
691
|
+
declare function traceAuthLifecycleError(message: string, data?: () => Record<string, unknown>): void;
|
|
692
|
+
declare function traceAuthRestore(message: string, data?: () => Record<string, unknown>): void;
|
|
693
|
+
declare function traceAuthWorkspace(message: string, data?: () => Record<string, unknown>): void;
|
|
694
|
+
declare function traceAuthAccessPolicy(message: string, data?: () => Record<string, unknown>): void;
|
|
695
|
+
declare function traceAuthCatalog(message: string, data?: () => Record<string, unknown>): void;
|
|
696
|
+
declare function traceAuthGuard(message: string, data?: () => Record<string, unknown>): void;
|
|
697
|
+
|
|
510
698
|
/**
|
|
511
699
|
* Narrow API for refreshing cached user avatar display data.
|
|
512
700
|
* Implemented via auth-gateway; keeps auth free of layout/components imports (avoids circular deps).
|
|
@@ -757,5 +945,56 @@ declare abstract class AXPLoginChallengeProvider {
|
|
|
757
945
|
*/
|
|
758
946
|
declare const AXP_LOGIN_CHALLENGE_PROVIDER: InjectionToken<AXPLoginChallengeProvider>;
|
|
759
947
|
|
|
760
|
-
|
|
761
|
-
|
|
948
|
+
/** Protocol family for a sign-in method. */
|
|
949
|
+
type AXPSignInMethodProtocol = 'password' | 'otp' | 'oidc' | 'saml' | 'ldap' | 'custom';
|
|
950
|
+
/** One interactive step in a multi-factor / challenge flow. */
|
|
951
|
+
type AXPSignInMethodStepKind = 'credentials' | 'otp' | 'captcha' | 'external-redirect' | 'complete';
|
|
952
|
+
interface AXPSignInMethodDescriptor {
|
|
953
|
+
/** Stable id, e.g. `password`, `oidc:google`, `saml:okta-hr`. */
|
|
954
|
+
readonly id: string;
|
|
955
|
+
readonly title: string;
|
|
956
|
+
readonly protocol: AXPSignInMethodProtocol;
|
|
957
|
+
readonly enabled: boolean;
|
|
958
|
+
/** Lower = higher on the login page. */
|
|
959
|
+
readonly priority?: number;
|
|
960
|
+
readonly icon?: string;
|
|
961
|
+
}
|
|
962
|
+
interface AXPSignInMethodStep {
|
|
963
|
+
readonly kind: AXPSignInMethodStepKind;
|
|
964
|
+
readonly challengeId?: string;
|
|
965
|
+
readonly message?: string;
|
|
966
|
+
readonly redirectUrl?: string;
|
|
967
|
+
}
|
|
968
|
+
interface AXPSignInMethodStartResult {
|
|
969
|
+
readonly status: 'completed' | 'continue' | 'redirect';
|
|
970
|
+
readonly step?: AXPSignInMethodStep;
|
|
971
|
+
/** When status is completed, session cookies are already set by the server. */
|
|
972
|
+
readonly userId?: string;
|
|
973
|
+
}
|
|
974
|
+
/**
|
|
975
|
+
* Pluggable sign-in method. Multiple methods can be registered and offered at once.
|
|
976
|
+
* Session remember/refresh live in {@link AXPSessionService}; methods only prove identity.
|
|
977
|
+
*/
|
|
978
|
+
declare abstract class AXPSignInMethod {
|
|
979
|
+
abstract get descriptor(): AXPSignInMethodDescriptor;
|
|
980
|
+
/** Begin or continue the method flow. */
|
|
981
|
+
abstract start(input: Record<string, unknown>): Promise<AXPSignInMethodStartResult>;
|
|
982
|
+
/** Submit a challenge / OTP / captcha step. */
|
|
983
|
+
abstract continue(step: AXPSignInMethodStep, input: Record<string, unknown>): Promise<AXPSignInMethodStartResult>;
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
/**
|
|
987
|
+
* Registry of enabled sign-in methods for the login UI.
|
|
988
|
+
* Methods are independent of session refresh/remember (owned by session service).
|
|
989
|
+
*/
|
|
990
|
+
declare class AXPSignInMethodRegistry {
|
|
991
|
+
private readonly methods;
|
|
992
|
+
register(...methods: AXPSignInMethod[]): void;
|
|
993
|
+
get(id: string): AXPSignInMethod | undefined;
|
|
994
|
+
listEnabled(): AXPSignInMethodDescriptor[];
|
|
995
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AXPSignInMethodRegistry, never>;
|
|
996
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<AXPSignInMethodRegistry>;
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
export { AUTH_SESSION_TRACE_NS, AUTH_SESSION_TRACE_TITLE, AXPAuthGuard, AXPAuthModule, AXPAuthStrategy, AXPAuthStrategyRegistryService, AXPFeatureDirective, AXPFeatureEvaluatorScopeProvider, AXPFeatureGuard, AXPLoginChallengeComponentBase, AXPLoginChallengeProvider, AXPPermissionDefinitionBuilder, AXPPermissionDefinitionGroupBuilder, AXPPermissionDefinitionProviderContext, AXPPermissionDefinitionService, AXPPermissionDirective, AXPPermissionEvaluatorScopeProvider, AXPPermissionGuard, AXPPlatformAuthRuntimeService, AXPSessionContext, AXPSessionService, AXPSessionStatus, AXPSignInMethod, AXPSignInMethodRegistry, AXPUnauthenticatedError, AXPUnauthorizedError, AXPUserProfileIdentityService, AXP_ACCESS_POLICY_CACHE_PORT, AXP_APPLICATION_LOADER, AXP_DEFAULT_PLATFORM_OAUTH_CLIENT_ID, AXP_DEFAULT_PLATFORM_OAUTH_SCOPE, AXP_FEATURE_CHECKER, AXP_FEATURE_LOADER, AXP_LOGIN_CHALLENGE_PROVIDER, AXP_OAUTH_PENDING_STRATEGY_KEY, AXP_OAUTH_PKCE_VERIFIER_KEY, AXP_PERMISSION_CHECKER, AXP_PERMISSION_DEFINITION_PROVIDER, AXP_PERMISSION_LOADER, AXP_PERMISSION_MODULES_RESOLVER, AXP_TENANT_LOADER, AXP_USER_AVATAR_CACHE_PORT, JwtUtil, PkceUtil, TimeUtil, asAuthListProvidersResponse, clearOAuthPendingStrategy, commandMessageTextForError, fetchPlatformOAuthDiscoveryDocument, findIdentityProvider, getOAuthPendingStrategy, isOAuthRedirectInFlight, platformOAuthSessionUpdateParams, resolvePlatformOAuthAuthorizeEndpoint, resolvePlatformOAuthClientConfig, resolvePlatformOAuthIssuer, resolvePlatformOAuthRedirectUri, resolvePlatformOAuthTokenEndpoint, setOAuthPendingStrategy, shouldPlatformOAuthBindSession, toPlatformOAuthSignInResult, traceAuthAccessPolicy, traceAuthCatalog, traceAuthGuard, traceAuthLifecycle, traceAuthLifecycleError, traceAuthRestore, traceAuthWorkspace };
|
|
1000
|
+
export type { AXPAccessPolicyCachePort, AXPApplication, AXPApplicationLoader, AXPAuthIdentityProvider, AXPAuthListProvidersResponse, AXPAuthLocalSignInMethod, AXPAuthModuleConfigs, AXPBaseCredentials, AXPChallengeCheckResult, AXPChallengeContentType, AXPEdition, AXPFeature, AXPFeatureChecker, AXPFeatureLoader, AXPLoginChallengeData, AXPPermission, AXPPermissionAddOptions, AXPPermissionChecker, AXPPermissionDefinition, AXPPermissionDefinitionProvider, AXPPermissionGroupAddOptions, AXPPermissionGroupDefinition, AXPPermissionLoader, AXPPermissionModulesResolver, AXPPlatformOAuthClientConfig, AXPPlatformOAuthDiscoveryDocument, AXPSessionData, AXPSignInMethodDescriptor, AXPSignInMethodProtocol, AXPSignInMethodStartResult, AXPSignInMethodStep, AXPSignInMethodStepKind, AXPSignInResult, AXPTenant, AXPTenantLoader, AXPTokenResult, AXPUser, AXPUserAvatarCachePort, PlatformAuthTokenResponseDto, PlatformAuthUpdateSessionInput };
|