@equinor/fusion-framework-app 13.1.7 → 13.1.10
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/README.md +20 -1
- package/dist/esm/AppConfigurator.js +7 -3
- package/dist/esm/AppConfigurator.js.map +1 -1
- package/dist/esm/__tests__/roles-auth-inheritance.test.js +226 -0
- package/dist/esm/__tests__/roles-auth-inheritance.test.js.map +1 -0
- package/dist/esm/configure-modules.js +9 -2
- package/dist/esm/configure-modules.js.map +1 -1
- package/dist/esm/index.js +7 -7
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/version.js +1 -1
- package/dist/esm/version.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/AppConfigurator.d.ts +6 -2
- package/dist/types/AppModulesConfiguredEvent.d.ts +1 -1
- package/dist/types/__tests__/roles-auth-inheritance.test.d.ts +1 -0
- package/dist/types/configure-modules.d.ts +8 -1
- package/dist/types/enable-bookmark.d.ts +1 -1
- package/dist/types/enable-state.d.ts +1 -1
- package/dist/types/index.d.ts +7 -7
- package/dist/types/initialize-app-modules.d.ts +2 -2
- package/dist/types/types.d.ts +1 -1
- package/dist/types/version.d.ts +1 -1
- package/package.json +17 -14
package/README.md
CHANGED
|
@@ -80,6 +80,26 @@ const modules = await initialize({ fusion, env });
|
|
|
80
80
|
|
|
81
81
|
## Key Concepts
|
|
82
82
|
|
|
83
|
+
### Portal authentication is inherited by default
|
|
84
|
+
|
|
85
|
+
`configureModules` creates an `AppConfigurator` that registers `auth` alongside `event` and `http`
|
|
86
|
+
before the app's configuration callback runs. It initializes these modules with `fusion.modules`
|
|
87
|
+
as the parent reference. MSAL then reuses the portal auth provider through its version-compatible
|
|
88
|
+
`createProxyProvider` path, sharing the existing client and live account without another login.
|
|
89
|
+
The React app bootstrap uses this same path.
|
|
90
|
+
|
|
91
|
+
Ordinary hosted apps do not need `enableMSAL` to use Roles V2. Register `enableRoles` normally;
|
|
92
|
+
the real Roles client reads the inherited account before each account-scoped operation, so parent
|
|
93
|
+
account changes and sign-out are reflected in subsequent requests. An unavailable account produces
|
|
94
|
+
`RequiredAccessRolesError`, not a new login flow.
|
|
95
|
+
|
|
96
|
+
For deliberate custom authentication, use `enableMSAL` with `builder.setProvider(customAuthProvider)`.
|
|
97
|
+
The explicitly supplied provider remains authoritative, even when signed out. A bare
|
|
98
|
+
`enableMSAL` call is redundant here, and client settings alone do not override a parent provider.
|
|
99
|
+
This default registration is independent of telemetry and does not apply to bare
|
|
100
|
+
`ModulesConfigurator` bootstraps. See the
|
|
101
|
+
[Roles authentication boundary](../modules/roles/README.md#authentication-inheritance-and-custom-app-authentication).
|
|
102
|
+
|
|
83
103
|
| Concept | Description |
|
|
84
104
|
|---|---|
|
|
85
105
|
| `configureModules` | Factory function that creates an async initializer for application modules. |
|
|
@@ -180,4 +200,3 @@ and customizing the mocked parent's service discovery.
|
|
|
180
200
|
|
|
181
201
|
- [Fusion Framework documentation](https://equinor.github.io/fusion-framework/)
|
|
182
202
|
- [`@equinor/fusion-framework-react-app`](../react/app/) — React wrapper with hooks and providers
|
|
183
|
-
|
|
@@ -2,9 +2,9 @@ import { ModulesConfigurator, } from '@equinor/fusion-framework-module';
|
|
|
2
2
|
import event from '@equinor/fusion-framework-module-event';
|
|
3
3
|
import http, { configureHttpClient, configureHttp, } from '@equinor/fusion-framework-module-http';
|
|
4
4
|
import auth from '@equinor/fusion-framework-module-msal';
|
|
5
|
-
import { AppModulesConfiguredEvent } from './AppModulesConfiguredEvent';
|
|
6
|
-
import { AppConfiguratorError } from './AppConfiguratorError';
|
|
7
|
-
import { deepClone, deepFreeze } from './utils';
|
|
5
|
+
import { AppModulesConfiguredEvent } from './AppModulesConfiguredEvent.js';
|
|
6
|
+
import { AppConfiguratorError } from './AppConfiguratorError.js';
|
|
7
|
+
import { deepClone, deepFreeze } from './utils.js';
|
|
8
8
|
/**
|
|
9
9
|
* Configurator that bootstraps default Fusion application modules and provides
|
|
10
10
|
* helper methods for HTTP client and service-discovery setup.
|
|
@@ -13,6 +13,10 @@ import { deepClone, deepFreeze } from './utils';
|
|
|
13
13
|
* the `event`, `http`, and `msal` (auth) modules by default and reads any HTTP
|
|
14
14
|
* endpoints declared in the application's environment config.
|
|
15
15
|
*
|
|
16
|
+
* Hosted apps inherit parent authentication through MSAL's version-compatible proxy during
|
|
17
|
+
* initialization; no app-side `enableMSAL` call is needed. An explicitly configured auth
|
|
18
|
+
* provider takes precedence over the parent, including when that provider is signed out.
|
|
19
|
+
*
|
|
16
20
|
* @template TModules - Additional application-specific modules beyond the defaults.
|
|
17
21
|
* @template TRef - The resolved Fusion modules instance used as an initialization reference.
|
|
18
22
|
* @template TEnv - The application environment descriptor (manifest, config, basename).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppConfigurator.js","sourceRoot":"","sources":["../../src/AppConfigurator.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,mBAAmB,GACpB,MAAM,kCAAkC,CAAC;AAE1C,OAAO,KAAK,MAAM,wCAAwC,CAAC;AAE3D,OAAO,IAAI,EAAE,EACX,mBAAmB,EACnB,aAAa,GAEd,MAAM,uCAAuC,CAAC;AAE/C,OAAO,IAAI,MAAM,uCAAuC,CAAC;AAGzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"AppConfigurator.js","sourceRoot":"","sources":["../../src/AppConfigurator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { FrameworkConfigurator, init } from '@equinor/fusion-framework';
|
|
2
|
+
import { ModulesConfigurator } from '@equinor/fusion-framework-module';
|
|
3
|
+
import { enableMSAL, MsalClient, module as authModule, } from '@equinor/fusion-framework-module-msal';
|
|
4
|
+
import { enableRoles, rolesModule } from '@equinor/fusion-framework-module-roles';
|
|
5
|
+
import { RequiredAccessRolesError } from '@equinor/fusion-framework-module-roles/errors';
|
|
6
|
+
import { enableTelemetry } from '@equinor/fusion-framework-module-telemetry';
|
|
7
|
+
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
8
|
+
import { AppConfigurator } from '../AppConfigurator.js';
|
|
9
|
+
import { configureModules } from '../configure-modules.js';
|
|
10
|
+
const env = {
|
|
11
|
+
manifest: {
|
|
12
|
+
appKey: 'roles-auth-inheritance',
|
|
13
|
+
displayName: 'Roles authentication inheritance',
|
|
14
|
+
description: 'Exercises the production hosted application bootstrap',
|
|
15
|
+
type: 'standalone',
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
const activeRoles = [
|
|
19
|
+
{ systemName: 'Fusion', accessRoleName: 'Reports.Read', assignmentType: 'Global' },
|
|
20
|
+
];
|
|
21
|
+
const disposeCallbacks = [];
|
|
22
|
+
/**
|
|
23
|
+
* Supplies a deterministic external MSAL session while retaining the real client and provider.
|
|
24
|
+
*
|
|
25
|
+
* @param identifier - Local account identifier, or null for a signed-out session.
|
|
26
|
+
* @returns Client and mutable session used to simulate parent account changes.
|
|
27
|
+
*/
|
|
28
|
+
function createSession(identifier) {
|
|
29
|
+
const session = {
|
|
30
|
+
account: identifier === null ? null : createAccount(identifier),
|
|
31
|
+
};
|
|
32
|
+
const client = new MsalClient({ auth: { clientId: 'roles-inheritance-test' } });
|
|
33
|
+
const initialize = vi.spyOn(client, 'initialize').mockResolvedValue();
|
|
34
|
+
const login = vi.spyOn(client, 'login').mockRejectedValue(new Error('Unexpected login flow'));
|
|
35
|
+
vi.spyOn(client, 'getActiveAccount').mockImplementation(() => session.account);
|
|
36
|
+
return { client, session, initialize, login };
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Creates a complete MSAL account without requiring an Entra login.
|
|
40
|
+
*
|
|
41
|
+
* @param localAccountId - Account selected by the external authentication session.
|
|
42
|
+
* @returns Account shape consumed by the production MSAL provider.
|
|
43
|
+
*/
|
|
44
|
+
function createAccount(localAccountId) {
|
|
45
|
+
return {
|
|
46
|
+
localAccountId,
|
|
47
|
+
homeAccountId: `${localAccountId}.tenant`,
|
|
48
|
+
tenantId: 'tenant',
|
|
49
|
+
environment: 'login.microsoftonline.com',
|
|
50
|
+
username: 'roles-test@example.test',
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Initializes a real portal framework with controlled network and Entra boundaries.
|
|
55
|
+
*
|
|
56
|
+
* @param identifier - Initial authenticated account, or null for sign-out.
|
|
57
|
+
* @returns Portal framework, external session and HTTP request recorder.
|
|
58
|
+
*/
|
|
59
|
+
async function createPortal(identifier = 'portal-account') {
|
|
60
|
+
const external = createSession(identifier);
|
|
61
|
+
const requests = [];
|
|
62
|
+
const fetch = vi.fn(async (input, options) => {
|
|
63
|
+
const url = new URL(String(input));
|
|
64
|
+
requests.push({ url, headers: new Headers(options?.headers) });
|
|
65
|
+
// Only the external service responses are substituted; discovery, HTTP and Roles stay real.
|
|
66
|
+
if (url.hostname === 'discovery.example.test') {
|
|
67
|
+
return Response.json([
|
|
68
|
+
{ key: 'rolesv2', uri: 'https://roles.example.test', scopes: ['roles.read'] },
|
|
69
|
+
{ key: 'context', uri: 'https://context.example.test', scopes: [] },
|
|
70
|
+
]);
|
|
71
|
+
}
|
|
72
|
+
if (url.hostname === 'roles.example.test' &&
|
|
73
|
+
url.pathname.endsWith('/active-access-role-assignments')) {
|
|
74
|
+
return Response.json(activeRoles);
|
|
75
|
+
}
|
|
76
|
+
throw new Error(`Unexpected HTTP request: ${url}`);
|
|
77
|
+
});
|
|
78
|
+
vi.stubGlobal('fetch', fetch);
|
|
79
|
+
const configurator = new FrameworkConfigurator();
|
|
80
|
+
configurator.configureMsal((builder) => {
|
|
81
|
+
builder.setClient(external.client);
|
|
82
|
+
builder.setRequiresAuth(false);
|
|
83
|
+
});
|
|
84
|
+
configurator.configureServiceDiscovery({
|
|
85
|
+
client: { baseUri: 'https://discovery.example.test' },
|
|
86
|
+
});
|
|
87
|
+
const fusion = await init(configurator);
|
|
88
|
+
disposeCallbacks.push(() => configurator.dispose(fusion.modules));
|
|
89
|
+
const acquireToken = vi
|
|
90
|
+
.spyOn(fusion.modules.auth, 'acquireAccessToken')
|
|
91
|
+
.mockResolvedValue('portal-test-token');
|
|
92
|
+
const createProxy = vi.spyOn(fusion.modules.auth, 'createProxyProvider');
|
|
93
|
+
return { fusion, requests, acquireToken, createProxy, ...external };
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Boots an ordinary application through the same entry point used by React makeComponent.
|
|
97
|
+
*
|
|
98
|
+
* @param portal - Initialized portal whose modules are passed into app initialization.
|
|
99
|
+
* @param configure - Optional deliberate application authentication customization.
|
|
100
|
+
* @returns Application modules with the production Roles client initialized.
|
|
101
|
+
*/
|
|
102
|
+
async function initializeApp(portal, configure) {
|
|
103
|
+
const initialize = configureModules(async (configurator, args) => {
|
|
104
|
+
await configure?.(configurator, args);
|
|
105
|
+
enableRoles(configurator);
|
|
106
|
+
});
|
|
107
|
+
const modules = await initialize({ fusion: portal.fusion, env });
|
|
108
|
+
disposeCallbacks.push(() => modules.roles.dispose());
|
|
109
|
+
return modules;
|
|
110
|
+
}
|
|
111
|
+
describe('hosted Roles authentication through configureModules', () => {
|
|
112
|
+
afterEach(async () => {
|
|
113
|
+
// Dispose application clients before their portal and restore external boundaries last.
|
|
114
|
+
for (const dispose of disposeCallbacks.splice(0).reverse()) {
|
|
115
|
+
await dispose();
|
|
116
|
+
}
|
|
117
|
+
vi.restoreAllMocks();
|
|
118
|
+
vi.unstubAllGlobals();
|
|
119
|
+
});
|
|
120
|
+
it.each([false, true])('uses portal auth with real Roles HTTP requests (redundant enableMSAL: %s)', async (explicitEnable) => {
|
|
121
|
+
const portal = await createPortal();
|
|
122
|
+
const defaults = new AppConfigurator(env);
|
|
123
|
+
expect(defaults.modules.map(({ name }) => name)).toEqual(['event', 'http', 'auth']);
|
|
124
|
+
const modules = await initializeApp(portal, (configurator) => {
|
|
125
|
+
// Compare the historical troubleshooting workaround with ordinary app bootstrap.
|
|
126
|
+
if (explicitEnable) {
|
|
127
|
+
enableMSAL(configurator);
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
await expect(modules.roles.getActiveAccessRoleAssignments()).resolves.toEqual(activeRoles);
|
|
131
|
+
expect(portal.createProxy).toHaveBeenCalledOnce();
|
|
132
|
+
expect(portal.createProxy).toHaveBeenCalledWith(String(authModule.version));
|
|
133
|
+
expect(modules.auth.client).toBe(portal.client);
|
|
134
|
+
expect(modules.auth.account).toBe(portal.session.account);
|
|
135
|
+
expect(portal.requests.at(-1)?.url.pathname).toBe('/accounts/portal-account/active-access-role-assignments');
|
|
136
|
+
expect(portal.requests.at(-1)?.url.searchParams.get('api-version')).toBe('1.0');
|
|
137
|
+
expect(portal.requests.at(-1)?.headers.get('Authorization')).toBe('Bearer portal-test-token');
|
|
138
|
+
expect(portal.acquireToken).toHaveBeenCalledWith({ request: { scopes: ['roles.read'] } });
|
|
139
|
+
expect(portal.initialize).toHaveBeenCalledOnce();
|
|
140
|
+
expect(portal.login).not.toHaveBeenCalled();
|
|
141
|
+
});
|
|
142
|
+
it('reads parent account switches and sign-out before cache lookup, and recovers after sign-in', async () => {
|
|
143
|
+
const portal = await createPortal();
|
|
144
|
+
const modules = await initializeApp(portal);
|
|
145
|
+
await modules.roles.getActiveAccessRoleAssignments();
|
|
146
|
+
portal.session.account = createAccount('second-account');
|
|
147
|
+
await modules.roles.getActiveAccessRoleAssignments();
|
|
148
|
+
expect(portal.requests.at(-1)?.url.pathname).toContain('/accounts/second-account/');
|
|
149
|
+
const requestCount = portal.requests.length;
|
|
150
|
+
portal.session.account = null;
|
|
151
|
+
await expect(modules.roles.getActiveAccessRoleAssignments()).rejects.toBeInstanceOf(RequiredAccessRolesError);
|
|
152
|
+
expect(portal.requests).toHaveLength(requestCount);
|
|
153
|
+
portal.session.account = createAccount('third-account');
|
|
154
|
+
await expect(modules.roles.getActiveAccessRoleAssignments()).resolves.toEqual(activeRoles);
|
|
155
|
+
expect(portal.requests.at(-1)?.url.pathname).toContain('/accounts/third-account/');
|
|
156
|
+
expect(portal.initialize).toHaveBeenCalledOnce();
|
|
157
|
+
expect(portal.login).not.toHaveBeenCalled();
|
|
158
|
+
});
|
|
159
|
+
it.each([null, ''])('rejects an unauthenticated or unidentified parent account (%s)', async (id) => {
|
|
160
|
+
const portal = await createPortal(id);
|
|
161
|
+
const modules = await initializeApp(portal);
|
|
162
|
+
const requestCount = portal.requests.length;
|
|
163
|
+
await expect(modules.roles.getActiveAccessRoleAssignments()).rejects.toThrow('Roles module requires an active authenticated account to resolve Roles V2 data.');
|
|
164
|
+
expect(portal.requests).toHaveLength(requestCount);
|
|
165
|
+
expect(portal.login).not.toHaveBeenCalled();
|
|
166
|
+
});
|
|
167
|
+
it('retains an explicitly supplied app provider, including its signed-out state', async () => {
|
|
168
|
+
const portal = await createPortal();
|
|
169
|
+
const custom = createSession('custom-account');
|
|
170
|
+
const customConfigurator = new ModulesConfigurator([authModule]);
|
|
171
|
+
enableTelemetry(customConfigurator);
|
|
172
|
+
enableMSAL(customConfigurator, (builder) => {
|
|
173
|
+
builder.setClient(custom.client);
|
|
174
|
+
builder.setRequiresAuth(false);
|
|
175
|
+
});
|
|
176
|
+
const customModules = await customConfigurator.initialize();
|
|
177
|
+
const { auth } = customModules;
|
|
178
|
+
disposeCallbacks.push(() => customConfigurator.dispose(customModules));
|
|
179
|
+
const modules = await initializeApp(portal, (configurator) => {
|
|
180
|
+
enableMSAL(configurator, (builder) => builder.setProvider(auth));
|
|
181
|
+
});
|
|
182
|
+
expect(modules.auth).toBe(auth);
|
|
183
|
+
expect(portal.createProxy).not.toHaveBeenCalled();
|
|
184
|
+
await modules.roles.getActiveAccessRoleAssignments();
|
|
185
|
+
expect(portal.requests.at(-1)?.url.pathname).toContain('/accounts/custom-account/');
|
|
186
|
+
portal.session.account = createAccount('changed-portal-account');
|
|
187
|
+
custom.session.account = null;
|
|
188
|
+
const requestCount = portal.requests.length;
|
|
189
|
+
await expect(modules.roles.getActiveAccessRoleAssignments()).rejects.toBeInstanceOf(RequiredAccessRolesError);
|
|
190
|
+
expect(portal.requests).toHaveLength(requestCount);
|
|
191
|
+
expect(custom.login).not.toHaveBeenCalled();
|
|
192
|
+
});
|
|
193
|
+
it('reuses a legacy v4 parent proxy through the existing MSAL compatibility path', async () => {
|
|
194
|
+
const portal = await createPortal();
|
|
195
|
+
portal.fusion.modules.auth = portal.fusion.modules.auth.createProxyProvider('4.0.0');
|
|
196
|
+
const modules = await initializeApp(portal);
|
|
197
|
+
expect(modules.auth.client).toBe(portal.client);
|
|
198
|
+
await expect(modules.roles.getActiveAccessRoleAssignments()).resolves.toEqual(activeRoles);
|
|
199
|
+
portal.session.account = createAccount('legacy-parent-next-account');
|
|
200
|
+
await modules.roles.getActiveAccessRoleAssignments();
|
|
201
|
+
expect(portal.requests.at(-1)?.url.pathname).toContain('/accounts/legacy-parent-next-account/');
|
|
202
|
+
expect(portal.initialize).toHaveBeenCalledOnce();
|
|
203
|
+
expect(portal.login).not.toHaveBeenCalled();
|
|
204
|
+
});
|
|
205
|
+
it('distinguishes a bare module registry from the automatic app auth registration', async () => {
|
|
206
|
+
const portal = await createPortal();
|
|
207
|
+
const configurator = new ModulesConfigurator([rolesModule]);
|
|
208
|
+
const modules = await configurator.initialize(portal.fusion.modules);
|
|
209
|
+
disposeCallbacks.push(() => configurator.dispose(modules));
|
|
210
|
+
await expect(modules.roles.getActiveAccessRoleAssignments()).rejects.toBeInstanceOf(RequiredAccessRolesError);
|
|
211
|
+
expect(portal.requests.some(({ url }) => url.hostname === 'roles.example.test')).toBe(false);
|
|
212
|
+
expect(portal.createProxy).not.toHaveBeenCalled();
|
|
213
|
+
});
|
|
214
|
+
it('checks startup requirements using the inherited account without app auth configuration', async () => {
|
|
215
|
+
const portal = await createPortal();
|
|
216
|
+
const initialize = configureModules((configurator) => {
|
|
217
|
+
enableRoles(configurator, (builder) => builder.requireAccessRoles(['Reports.Read']));
|
|
218
|
+
});
|
|
219
|
+
const modules = await initialize({ fusion: portal.fusion, env });
|
|
220
|
+
disposeCallbacks.push(() => modules.roles.dispose());
|
|
221
|
+
expect(portal.requests.at(-1)?.url.pathname).toContain('/accounts/portal-account/');
|
|
222
|
+
await expect(modules.roles.hasAccessRole(['Reports.Read'], { required: true })).resolves.toBe(true);
|
|
223
|
+
expect(portal.login).not.toHaveBeenCalled();
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
//# sourceMappingURL=roles-auth-inheritance.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roles-auth-inheritance.test.js","sourceRoot":"","sources":["../../../src/__tests__/roles-auth-inheritance.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Provides the core factory function for configuring and initializing
|
|
5
5
|
* application-specific modules in the Fusion framework.
|
|
6
6
|
*/
|
|
7
|
-
import { AppConfigurator } from './AppConfigurator';
|
|
8
|
-
import { initializeAppModules } from './initialize-app-modules';
|
|
7
|
+
import { AppConfigurator } from './AppConfigurator.js';
|
|
8
|
+
import { initializeAppModules } from './initialize-app-modules.js';
|
|
9
9
|
/**
|
|
10
10
|
* Create an application module initializer for a Fusion application.
|
|
11
11
|
*
|
|
@@ -18,6 +18,13 @@ import { initializeAppModules } from './initialize-app-modules';
|
|
|
18
18
|
* 3. Invoke the optional user-supplied configuration callback.
|
|
19
19
|
* 4. Initialize all registered modules and dispatch an `onAppModulesLoaded` event.
|
|
20
20
|
*
|
|
21
|
+
* @remarks
|
|
22
|
+
* `AppConfigurator` registers auth before the callback runs. Ordinary portal-hosted apps,
|
|
23
|
+
* including apps using Roles V2, do not need to call `enableMSAL`: initialization passes
|
|
24
|
+
* `fusion.modules` as the parent reference and MSAL reuses the portal provider through its
|
|
25
|
+
* version-compatible proxy. An explicit `setProvider` configuration takes precedence.
|
|
26
|
+
* Telemetry does not supply this auth registration.
|
|
27
|
+
*
|
|
21
28
|
* @template TModules - Additional application-specific modules to register.
|
|
22
29
|
* @template TRef - The Fusion instance type, used as a configuration reference.
|
|
23
30
|
* @template TEnv - The application environment descriptor (manifest, config, basename).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure-modules.js","sourceRoot":"","sources":["../../src/configure-modules.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"configure-modules.js","sourceRoot":"","sources":["../../src/configure-modules.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuCG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAC3B,CAKE,EAA6C,EACmC,EAAE;AACpF;;;;;;;GAOG;AACH,KAAK,EAAE,IAAiC,EAAyC,EAAE;IACjF,0BAA0B;IAC1B,MAAM,YAAY,GAAG,IAAI,eAAe,CAAkC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpF,OAAO,oBAAoB,CAAC,YAAY,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AACtD,CAAC,CAAC;AAEJ,eAAe,gBAAgB,CAAC"}
|
package/dist/esm/index.js
CHANGED
|
@@ -15,14 +15,14 @@
|
|
|
15
15
|
* Bookmark support is available via the `@equinor/fusion-framework-app/enable-bookmark`
|
|
16
16
|
* sub-path export.
|
|
17
17
|
*/
|
|
18
|
-
export { AppConfigurator } from './AppConfigurator';
|
|
19
|
-
export * from './types';
|
|
20
|
-
export { configureModules, default } from './configure-modules';
|
|
21
|
-
export { AppConfiguratorError } from './AppConfiguratorError';
|
|
22
|
-
export { AppModulesConfiguredEvent } from './AppModulesConfiguredEvent';
|
|
23
|
-
export { AppModulesInitializedEvent } from './AppModulesInitializedEvent';
|
|
18
|
+
export { AppConfigurator, } from './AppConfigurator.js';
|
|
19
|
+
export * from './types.js';
|
|
20
|
+
export { configureModules, default } from './configure-modules.js';
|
|
21
|
+
export { AppConfiguratorError } from './AppConfiguratorError.js';
|
|
22
|
+
export { AppModulesConfiguredEvent } from './AppModulesConfiguredEvent.js';
|
|
23
|
+
export { AppModulesInitializedEvent } from './AppModulesInitializedEvent.js';
|
|
24
24
|
/**
|
|
25
25
|
* @deprecated Use {@link configureModules} instead. This alias will be removed in a future major version.
|
|
26
26
|
*/
|
|
27
|
-
export { configureModules as initAppModules } from './configure-modules';
|
|
27
|
+
export { configureModules as initAppModules } from './configure-modules.js';
|
|
28
28
|
//# sourceMappingURL=index.js.map
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,eAAe,GAGhB,MAAM,sBAAsB,CAAC;AAE9B,cAAc,YAAY,CAAC;AAE3B,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E;;GAEG;AACH,OAAO,EAAE,gBAAgB,IAAI,cAAc,EAAE,MAAM,wBAAwB,CAAC"}
|
package/dist/esm/version.js
CHANGED
package/dist/esm/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,MAAM,CAAC,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC"}
|