@owlmeans/web-oidc-rp 0.1.1 → 0.1.3
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/LICENSE +1 -1
- package/README.md +39 -477
- package/build/@/components/ui/progress.d.ts +5 -0
- package/build/@/components/ui/progress.d.ts.map +1 -0
- package/build/@/components/ui/progress.js +11 -0
- package/build/@/components/ui/progress.js.map +1 -0
- package/build/@/lib/utils.d.ts +3 -0
- package/build/@/lib/utils.d.ts.map +1 -0
- package/build/@/lib/utils.js +6 -0
- package/build/@/lib/utils.js.map +1 -0
- package/build/auth/plugins/google-client.d.ts +3 -0
- package/build/auth/plugins/google-client.d.ts.map +1 -0
- package/build/auth/plugins/google-client.js +71 -0
- package/build/auth/plugins/google-client.js.map +1 -0
- package/build/auth/plugins/helpers.d.ts +16 -0
- package/build/auth/plugins/helpers.d.ts.map +1 -0
- package/build/auth/plugins/helpers.js +31 -0
- package/build/auth/plugins/helpers.js.map +1 -0
- package/build/auth/plugins/index.d.ts.map +1 -1
- package/build/auth/plugins/index.js +3 -1
- package/build/auth/plugins/index.js.map +1 -1
- package/build/auth/plugins/oidc-client.d.ts.map +1 -1
- package/build/auth/plugins/oidc-client.js +6 -2
- package/build/auth/plugins/oidc-client.js.map +1 -1
- package/build/guard.d.ts +3 -2
- package/build/guard.d.ts.map +1 -1
- package/build/guard.js +5 -4
- package/build/guard.js.map +1 -1
- package/build/service.d.ts.map +1 -1
- package/build/service.js +12 -3
- package/build/service.js.map +1 -1
- package/build/types.d.ts +6 -0
- package/build/types.d.ts.map +1 -1
- package/components.json +21 -0
- package/package.json +40 -19
- package/src/@/components/ui/progress.tsx +44 -0
- package/src/@/globals.css +17 -0
- package/src/@/lib/utils.ts +6 -0
- package/src/auth/plugins/google-client.tsx +94 -0
- package/src/auth/plugins/helpers.ts +39 -0
- package/src/auth/plugins/index.ts +3 -1
- package/src/auth/plugins/oidc-client.tsx +6 -2
- package/src/guard.ts +13 -10
- package/src/service.ts +13 -3
- package/src/types.ts +7 -0
- package/tests/context.ts +16 -0
- package/tests/google-client.spec.ts +64 -0
- package/tests/tsconfig.json +12 -0
- package/tsconfig.json +9 -11
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { AuthenticationStage, CAUTHEN_AUTHEN_TYPED } from '@owlmeans/auth';
|
|
3
|
+
import { DEFAULT_ALIAS as AUTH_SERVICE } from '@owlmeans/client-auth';
|
|
4
|
+
import { GOOGLE_CLIENT_AUTH } from '@owlmeans/oidc';
|
|
5
|
+
import { useContext, useValue } from '@owlmeans/client';
|
|
6
|
+
import { HOME } from '@owlmeans/web-client';
|
|
7
|
+
import { Progress } from '@/components/ui/progress';
|
|
8
|
+
import { extractGoogleUrl, buildCallbackCredentials } from './helpers.js';
|
|
9
|
+
export const googleClientPlugin = {
|
|
10
|
+
type: GOOGLE_CLIENT_AUTH,
|
|
11
|
+
Implementation: Renderer => ({ type, stage, control }) => {
|
|
12
|
+
const context = useContext();
|
|
13
|
+
Renderer = Renderer ?? googleClientPlugin.Renderer;
|
|
14
|
+
useValue(async (cancel) => {
|
|
15
|
+
switch (control.stage) {
|
|
16
|
+
case AuthenticationStage.Init: {
|
|
17
|
+
const hasState = await control.hasPersistentState();
|
|
18
|
+
if (cancel?.current)
|
|
19
|
+
return;
|
|
20
|
+
// Returning from Google redirect — restore state and authenticate
|
|
21
|
+
if (hasState) {
|
|
22
|
+
await control.restore();
|
|
23
|
+
await control.cleanUpState();
|
|
24
|
+
const url = new URL(window.location.href);
|
|
25
|
+
const code = url.searchParams.get('code');
|
|
26
|
+
if (code != null) {
|
|
27
|
+
const auth = buildCallbackCredentials(url.searchParams.toString(), type, control.allowance?.challenge ?? '');
|
|
28
|
+
const token = await control.authenticate(auth);
|
|
29
|
+
if (token.token !== '') {
|
|
30
|
+
const authService = context.service(AUTH_SERVICE);
|
|
31
|
+
await authService.authenticate(token);
|
|
32
|
+
}
|
|
33
|
+
// Navigate to app root after successful authentication
|
|
34
|
+
const [homeUrl] = await context.module(HOME).call({ full: true }) ?? [];
|
|
35
|
+
window.location.href = homeUrl ?? window.location.origin;
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Initial request — ask server for Google auth URL
|
|
40
|
+
const [source] = await context.module(CAUTHEN_AUTHEN_TYPED).call({
|
|
41
|
+
full: true, params: { type }
|
|
42
|
+
}) ?? [];
|
|
43
|
+
await control.requestAllowence({ type, source: source ?? '' });
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
case AuthenticationStage.Authenticate: {
|
|
47
|
+
if (cancel?.current)
|
|
48
|
+
return;
|
|
49
|
+
if (control.allowance?.challenge != null) {
|
|
50
|
+
// The server wraps challenge as "source:googleUrl" — extract the URL part
|
|
51
|
+
const [source] = await context.module(CAUTHEN_AUTHEN_TYPED).call({
|
|
52
|
+
full: true, params: { type }
|
|
53
|
+
}) ?? [];
|
|
54
|
+
const url = extractGoogleUrl(control.allowance.challenge, source ?? '');
|
|
55
|
+
// Persist control state before redirect
|
|
56
|
+
await control.persist();
|
|
57
|
+
// Redirect to Google
|
|
58
|
+
document.location.href = url;
|
|
59
|
+
}
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}, [type, stage]);
|
|
64
|
+
if (Renderer == null) {
|
|
65
|
+
throw new SyntaxError('Renderer is not defined for Google plugin');
|
|
66
|
+
}
|
|
67
|
+
return _jsx(Renderer, { type: type, stage: stage, control: control, params: {} });
|
|
68
|
+
},
|
|
69
|
+
Renderer: () => _jsx(Progress, {})
|
|
70
|
+
};
|
|
71
|
+
//# sourceMappingURL=google-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"google-client.js","sourceRoot":"","sources":["../../../src/auth/plugins/google-client.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers extracted from the Google client plugin for unit-testability.
|
|
3
|
+
* These perform the URL/challenge processing logic that doesn't depend on React.
|
|
4
|
+
*/
|
|
5
|
+
import type { AuthCredentials } from '@owlmeans/auth';
|
|
6
|
+
/**
|
|
7
|
+
* Extract the Google auth URL from a signed challenge envelope message.
|
|
8
|
+
* The server wraps the challenge as "source:googleUrl" — this strips the source prefix.
|
|
9
|
+
* Also handles raw Google URLs (rolling deployment compatibility).
|
|
10
|
+
*/
|
|
11
|
+
export declare const extractGoogleUrl: (envelopeChallenge: string, sourcePrefix: string) => string;
|
|
12
|
+
/**
|
|
13
|
+
* Build AuthCredentials from the Google callback URL query params.
|
|
14
|
+
*/
|
|
15
|
+
export declare const buildCallbackCredentials: (queryString: string, type: string, challenge: string) => AuthCredentials;
|
|
16
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/auth/plugins/helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,mBAAmB,MAAM,EAAE,cAAc,MAAM,KAAG,MAQlF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,GACnC,aAAa,MAAM,EACnB,MAAM,MAAM,EACZ,WAAW,MAAM,KAChB,eAOD,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers extracted from the Google client plugin for unit-testability.
|
|
3
|
+
* These perform the URL/challenge processing logic that doesn't depend on React.
|
|
4
|
+
*/
|
|
5
|
+
import { EnvelopeKind, makeEnvelopeModel } from '@owlmeans/basic-envelope';
|
|
6
|
+
import { AUTH_SCOPE, AuthRole } from '@owlmeans/auth';
|
|
7
|
+
/**
|
|
8
|
+
* Extract the Google auth URL from a signed challenge envelope message.
|
|
9
|
+
* The server wraps the challenge as "source:googleUrl" — this strips the source prefix.
|
|
10
|
+
* Also handles raw Google URLs (rolling deployment compatibility).
|
|
11
|
+
*/
|
|
12
|
+
export const extractGoogleUrl = (envelopeChallenge, sourcePrefix) => {
|
|
13
|
+
const envelope = makeEnvelopeModel(envelopeChallenge, EnvelopeKind.Wrap);
|
|
14
|
+
const msg = envelope.message(true);
|
|
15
|
+
if (msg.startsWith(sourcePrefix + ':')) {
|
|
16
|
+
return msg.slice(sourcePrefix.length + 1);
|
|
17
|
+
}
|
|
18
|
+
return msg;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Build AuthCredentials from the Google callback URL query params.
|
|
22
|
+
*/
|
|
23
|
+
export const buildCallbackCredentials = (queryString, type, challenge) => ({
|
|
24
|
+
type,
|
|
25
|
+
challenge,
|
|
26
|
+
credential: queryString,
|
|
27
|
+
role: AuthRole.User,
|
|
28
|
+
userId: 'code',
|
|
29
|
+
scopes: [AUTH_SCOPE],
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/auth/plugins/helpers.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC1E,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAGrD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,iBAAyB,EAAE,YAAoB,EAAU,EAAE;IAC1F,MAAM,QAAQ,GAAG,iBAAiB,CAAC,iBAAiB,EAAE,YAAY,CAAC,IAAI,CAAC,CAAA;IACxE,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAS,IAAI,CAAC,CAAA;IAE1C,IAAI,GAAG,CAAC,UAAU,CAAC,YAAY,GAAG,GAAG,CAAC,EAAE,CAAC;QACvC,OAAO,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC3C,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,WAAmB,EACnB,IAAY,EACZ,SAAiB,EACA,EAAE,CAAC,CAAC;IACrB,IAAI;IACJ,SAAS;IACT,UAAU,EAAE,WAAW;IACvB,IAAI,EAAE,QAAQ,CAAC,IAAI;IACnB,MAAM,EAAE,MAAM;IACd,MAAM,EAAE,CAAC,UAAU,CAAC;CACrB,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/plugins/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/plugins/index.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,OAAO;;CAAc,CAAA"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { plugins as authPlugins } from '@owlmeans/client-auth/manager';
|
|
2
|
-
import { OIDC_CLIENT_AUTH } from '@owlmeans/oidc';
|
|
2
|
+
import { OIDC_CLIENT_AUTH, GOOGLE_CLIENT_AUTH } from '@owlmeans/oidc';
|
|
3
3
|
import { oidcClientPlugin } from './oidc-client.js';
|
|
4
|
+
import { googleClientPlugin } from './google-client.js';
|
|
4
5
|
authPlugins[OIDC_CLIENT_AUTH] = oidcClientPlugin;
|
|
6
|
+
authPlugins[GOOGLE_CLIENT_AUTH] = googleClientPlugin;
|
|
5
7
|
export const plugins = authPlugins;
|
|
6
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/plugins/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/plugins/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,+BAA+B,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEvD,WAAW,CAAC,gBAAgB,CAAC,GAAG,gBAAgB,CAAA;AAChD,WAAW,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,CAAA;AAEpD,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oidc-client.d.ts","sourceRoot":"","sources":["../../../src/auth/plugins/oidc-client.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAajF,eAAO,MAAM,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"oidc-client.d.ts","sourceRoot":"","sources":["../../../src/auth/plugins/oidc-client.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAA;AAajF,eAAO,MAAM,gBAAgB,EAAE,oBAuG9B,CAAA"}
|
|
@@ -2,7 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { AUTH_SCOPE, AuthenticationStage, AuthManagerError, AuthRole } from '@owlmeans/auth';
|
|
3
3
|
import { OIDC_CLIENT_AUTH } from '@owlmeans/oidc';
|
|
4
4
|
import { useEffect } from 'react';
|
|
5
|
-
import
|
|
5
|
+
import { Progress } from '@/components/ui/progress';
|
|
6
6
|
import { EnvelopeKind, makeEnvelopeModel } from '@owlmeans/basic-envelope';
|
|
7
7
|
import { useContext } from '@owlmeans/web-client';
|
|
8
8
|
import { DEFAULT_ALIAS, OidcAuthPurposes } from '../../consts.js';
|
|
@@ -56,8 +56,11 @@ export const oidcClientPlugin = {
|
|
|
56
56
|
// 1. Initialize OIDC server side authentication
|
|
57
57
|
const oidc = context.service(DEFAULT_ALIAS);
|
|
58
58
|
// @TODO we need to provide an identity provider client as entityId here for flexibel usage
|
|
59
|
+
const flow = await control.flow();
|
|
60
|
+
const state = await flow?.state();
|
|
59
61
|
const _source = await oidc.proceedToRedirectUrl({
|
|
60
62
|
purpose: control.source ?? OidcAuthPurposes.Unknown,
|
|
63
|
+
simplified: state?.payload().simplified,
|
|
61
64
|
uid: 'uid' in module.params ? `${module.params.uid}` : undefined,
|
|
62
65
|
alias: module.alias
|
|
63
66
|
});
|
|
@@ -78,6 +81,7 @@ export const oidcClientPlugin = {
|
|
|
78
81
|
const envelope = makeEnvelopeModel(control.allowance?.challenge, EnvelopeKind.Wrap);
|
|
79
82
|
const challenge = envelope.message(true);
|
|
80
83
|
const parts = challenge.split(':http');
|
|
84
|
+
// This thing includes url with flow state so the OIDC redirect it back a correct way
|
|
81
85
|
const url = 'http' + parts[1];
|
|
82
86
|
// 2. Include additional parameters (control state with allowance to flow state)
|
|
83
87
|
await control.persist();
|
|
@@ -92,6 +96,6 @@ export const oidcClientPlugin = {
|
|
|
92
96
|
}
|
|
93
97
|
return _jsx(Renderer, { type: type, stage: stage, control: control, params: module.params });
|
|
94
98
|
},
|
|
95
|
-
Renderer: () => _jsx(
|
|
99
|
+
Renderer: () => _jsx(Progress, {})
|
|
96
100
|
};
|
|
97
101
|
//# sourceMappingURL=oidc-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oidc-client.js","sourceRoot":"","sources":["../../../src/auth/plugins/oidc-client.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"oidc-client.js","sourceRoot":"","sources":["../../../src/auth/plugins/oidc-client.tsx"],"names":[],"mappings":"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"}
|
package/build/guard.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import type { CommonEntrypoint } from '@owlmeans/entrypoint';
|
|
1
2
|
import type { OidcGuardOptions } from '@owlmeans/oidc';
|
|
3
|
+
import type { ParametrisedProps } from '@owlmeans/web-client';
|
|
2
4
|
import type { Config, Context } from './types.js';
|
|
3
|
-
import type { CommonModule } from '@owlmeans/module';
|
|
4
5
|
export declare const appendOidcGuard: <C extends Config, T extends Context<C>>(context: T, opts?: OidcGuardOptions) => T;
|
|
5
|
-
export declare const setupOidcGuard: (modules:
|
|
6
|
+
export declare const setupOidcGuard: (modules: CommonEntrypoint[], coguards?: string | string[], extras?: Partial<ParametrisedProps>) => void;
|
|
6
7
|
//# sourceMappingURL=guard.d.ts.map
|
package/build/guard.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAMtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAI7D,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEjD,eAAO,MAAM,eAAe,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,EACpE,SAAS,CAAC,EAAE,OAAO,gBAAgB,MAOpC,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,SAAS,gBAAgB,EAAE,EAAE,WAAW,MAAM,GAAG,MAAM,EAAE,EAAE,SAAS,OAAO,CAAC,iBAAiB,CAAC,SAQ5H,CAAA"}
|
package/build/guard.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { appendOidcGuard as appendBasicOidcGuard, setupOidcGuard as setupBasicOidcGuard, DISPATCHER_OIDC, DISPATCHER_OIDC_INIT } from '@owlmeans/oidc';
|
|
2
|
-
import { elevate } from '@owlmeans/web-client';
|
|
3
1
|
import { DISPATCHER } from '@owlmeans/auth';
|
|
4
2
|
import { handler } from '@owlmeans/client';
|
|
3
|
+
import { appendOidcGuard as appendBasicOidcGuard, DISPATCHER_OIDC, DISPATCHER_OIDC_INIT, setupOidcGuard as setupBasicOidcGuard } from '@owlmeans/oidc';
|
|
4
|
+
import { elevate, parametriseDispatcher } from '@owlmeans/web-client';
|
|
5
5
|
import { Dispatcher } from './components/dispatcher.js';
|
|
6
6
|
import { makeOidcAuthService } from './service.js';
|
|
7
7
|
export const appendOidcGuard = (context, opts) => {
|
|
@@ -9,10 +9,11 @@ export const appendOidcGuard = (context, opts) => {
|
|
|
9
9
|
const ctx = appendBasicOidcGuard(context, opts);
|
|
10
10
|
return ctx;
|
|
11
11
|
};
|
|
12
|
-
export const setupOidcGuard = (modules, coguards) => {
|
|
12
|
+
export const setupOidcGuard = (modules, coguards, extras) => {
|
|
13
|
+
const DispatcherCom = extras ? parametriseDispatcher(extras, Dispatcher) : Dispatcher;
|
|
13
14
|
setupBasicOidcGuard(modules, coguards);
|
|
14
15
|
elevate(modules, DISPATCHER_OIDC_INIT);
|
|
15
16
|
elevate(modules, DISPATCHER_OIDC);
|
|
16
|
-
elevate(modules, DISPATCHER, handler(
|
|
17
|
+
elevate(modules, DISPATCHER, handler(DispatcherCom), { force: true });
|
|
17
18
|
};
|
|
18
19
|
//# sourceMappingURL=guard.js.map
|
package/build/guard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAG1C,OAAO,EACL,eAAe,IAAI,oBAAoB,EACvC,eAAe,EAAE,oBAAoB,EACrC,cAAc,IAAI,mBAAmB,EACtC,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAGlD,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,OAAU,EAAE,IAAuB,EACnC,EAAE;IACF,OAAO,CAAC,eAAe,CAAC,mBAAmB,EAAE,CAAC,CAAA;IAE9C,MAAM,GAAG,GAAG,oBAAoB,CAAO,OAAO,EAAE,IAAI,CAAC,CAAA;IAErD,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAA2B,EAAE,QAA4B,EAAE,MAAmC,EAAE,EAAE;IAC/H,MAAM,aAAa,GAAG,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;IAErF,mBAAmB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;IAEtC,OAAO,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAA;IACtC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,CAAA;IACjC,OAAO,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AACvE,CAAC,CAAA"}
|
package/build/service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,eAAe,EAAmB,MAAM,YAAY,CAAA;AAenF,eAAO,MAAM,mBAAmB,GAAI,QAAO,MAAsB,KAAG,
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,eAAe,EAAmB,MAAM,YAAY,CAAA;AAenF,eAAO,MAAM,mBAAmB,GAAI,QAAO,MAAsB,KAAG,eA+InE,CAAA"}
|
package/build/service.js
CHANGED
|
@@ -53,8 +53,11 @@ export const makeOidcAuthService = (alias = DEFAULT_ALIAS) => {
|
|
|
53
53
|
}
|
|
54
54
|
params.entity ??= state.entityId;
|
|
55
55
|
const ctx = service.assertCtx();
|
|
56
|
-
|
|
56
|
+
let [redirectTo] = await ctx.module(DISPATCHER_OIDC_INIT)
|
|
57
57
|
.call({ body: params });
|
|
58
|
+
if (flow.payload().simplified === 'true') {
|
|
59
|
+
redirectTo += '&simplified=true';
|
|
60
|
+
}
|
|
58
61
|
const context = service.assertCtx();
|
|
59
62
|
await store(context).save({ id: storeKey, authUrl: redirectTo });
|
|
60
63
|
return redirectTo;
|
|
@@ -67,11 +70,17 @@ export const makeOidcAuthService = (alias = DEFAULT_ALIAS) => {
|
|
|
67
70
|
throw new UnknownFlow('oidc.dispatch');
|
|
68
71
|
}
|
|
69
72
|
const authorityTransition = flowModel.next();
|
|
70
|
-
flowModel.transit(authorityTransition.transition, true, {
|
|
73
|
+
flowModel.transit(authorityTransition.transition, true, {
|
|
74
|
+
purpose: extras.purpose,
|
|
75
|
+
simplified: extras.simplified,
|
|
76
|
+
});
|
|
71
77
|
// @TODO I'm not sure that this dirty hack is a correct approach
|
|
72
78
|
if (extras.alias === HOME) {
|
|
73
79
|
const redirectTransition = flowModel.next();
|
|
74
|
-
flowModel.transit(redirectTransition.transition, true, {
|
|
80
|
+
flowModel.transit(redirectTransition.transition, true, {
|
|
81
|
+
purpose: extras.purpose,
|
|
82
|
+
simplified: extras.simplified
|
|
83
|
+
});
|
|
75
84
|
}
|
|
76
85
|
const redirectUrl = await flow.proceed({ params: { uid: extras.uid } }, true);
|
|
77
86
|
return redirectUrl;
|
package/build/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
|
package/build/types.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import type { OIDCAuthInitParams, WithSharedConfig } from '@owlmeans/oidc';
|
|
|
4
4
|
import type { OidcAuthPurposes } from './consts.js';
|
|
5
5
|
import type { FlowModel, FlowPayload } from '@owlmeans/flow';
|
|
6
6
|
import type { ResourceRecord } from '@owlmeans/resource';
|
|
7
|
+
import type { AuthToken } from '@owlmeans/auth';
|
|
7
8
|
export interface OidcAuthService extends InitializedService {
|
|
8
9
|
dispatch: (params: Record<string, string>) => Promise<boolean>;
|
|
9
10
|
authenticate: (flow: FlowModel, params: OIDCAuthInitParams) => Promise<string | null>;
|
|
@@ -12,9 +13,14 @@ export interface OidcAuthService extends InitializedService {
|
|
|
12
13
|
}
|
|
13
14
|
export interface OidcAuthRedirectExtras extends FlowPayload {
|
|
14
15
|
purpose: OidcAuthPurposes;
|
|
16
|
+
simplified?: string;
|
|
15
17
|
uid?: string;
|
|
16
18
|
alias?: string;
|
|
17
19
|
}
|
|
20
|
+
export interface OidcPostAuthPayload extends FlowPayload, AuthToken {
|
|
21
|
+
purpose: OidcAuthPurposes;
|
|
22
|
+
simplified?: string;
|
|
23
|
+
}
|
|
18
24
|
export interface Config extends AppConfig, WithSharedConfig {
|
|
19
25
|
}
|
|
20
26
|
export interface Context<C extends Config = Config> extends AppContext<C> {
|
package/build/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACzD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IAE9D,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAGrF,oBAAoB,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;IAGzE,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CACxC;AAED,MAAM,WAAW,sBAAuB,SAAQ,WAAW;IACzD,OAAO,EAAE,gBAAgB,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,mBAAoB,SAAQ,WAAW,EAAG,SAAS;IAClE,OAAO,EAAE,gBAAgB,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,MAAO,SAAQ,SAAS,EAAE,gBAAgB;CAAI;AAE/D,MAAM,WAAW,OAAO,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;CAAI;AAE7E,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,OAAO,EAAE,MAAM,CAAA;CAChB"}
|
package/components.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://ui.shadcn.com/schema.json",
|
|
3
|
+
"style": "new-york",
|
|
4
|
+
"rsc": false,
|
|
5
|
+
"tsx": true,
|
|
6
|
+
"tailwind": {
|
|
7
|
+
"config": "",
|
|
8
|
+
"css": "src/@/globals.css",
|
|
9
|
+
"baseColor": "neutral",
|
|
10
|
+
"cssVariables": true,
|
|
11
|
+
"prefix": ""
|
|
12
|
+
},
|
|
13
|
+
"aliases": {
|
|
14
|
+
"components": "@/components",
|
|
15
|
+
"utils": "@/lib/utils",
|
|
16
|
+
"ui": "@/components/ui",
|
|
17
|
+
"lib": "@/lib",
|
|
18
|
+
"hooks": "@/hooks"
|
|
19
|
+
},
|
|
20
|
+
"iconLibrary": "lucide"
|
|
21
|
+
}
|
package/package.json
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@owlmeans/web-oidc-rp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"license": "MIT",
|
|
4
5
|
"type": "module",
|
|
5
6
|
"scripts": {
|
|
6
7
|
"build": "tsc -b",
|
|
7
8
|
"dev": "sleep 378 && nodemon -e ts,tsx,json --watch src --exec \"tsc -p ./tsconfig.json\"",
|
|
8
|
-
"watch": "tsc -b -w --preserveWatchOutput --pretty"
|
|
9
|
+
"watch": "tsc -b -w --preserveWatchOutput --pretty",
|
|
10
|
+
"test": "bun test ./tests"
|
|
9
11
|
},
|
|
10
12
|
"main": "build/index.js",
|
|
11
13
|
"module": "build/index.js",
|
|
@@ -27,31 +29,50 @@
|
|
|
27
29
|
}
|
|
28
30
|
},
|
|
29
31
|
"dependencies": {
|
|
30
|
-
"@owlmeans/auth": "^0.1.
|
|
31
|
-
"@owlmeans/basic-envelope": "^0.1.
|
|
32
|
-
"@owlmeans/client": "^0.1.
|
|
33
|
-
"@owlmeans/client-auth": "^0.1.
|
|
34
|
-
"@owlmeans/client-flow": "^0.1.
|
|
35
|
-
"@owlmeans/client-i18n": "^0.1.
|
|
36
|
-
"@owlmeans/context": "^0.1.
|
|
37
|
-
"@owlmeans/flow": "^0.1.
|
|
38
|
-
"@owlmeans/
|
|
39
|
-
"@owlmeans/oidc": "^0.1.
|
|
40
|
-
"@owlmeans/resource": "^0.1.
|
|
41
|
-
"@owlmeans/web-client": "^0.1.
|
|
42
|
-
"@owlmeans/web-flow": "^0.1.
|
|
43
|
-
"oidc-client-ts": "
|
|
32
|
+
"@owlmeans/auth": "^0.1.3",
|
|
33
|
+
"@owlmeans/basic-envelope": "^0.1.3",
|
|
34
|
+
"@owlmeans/client": "^0.1.3",
|
|
35
|
+
"@owlmeans/client-auth": "^0.1.3",
|
|
36
|
+
"@owlmeans/client-flow": "^0.1.3",
|
|
37
|
+
"@owlmeans/client-i18n": "^0.1.3",
|
|
38
|
+
"@owlmeans/context": "^0.1.3",
|
|
39
|
+
"@owlmeans/flow": "^0.1.3",
|
|
40
|
+
"@owlmeans/entrypoint": "^0.1.3",
|
|
41
|
+
"@owlmeans/oidc": "^0.1.3",
|
|
42
|
+
"@owlmeans/resource": "^0.1.3",
|
|
43
|
+
"@owlmeans/web-client": "^0.1.3",
|
|
44
|
+
"@owlmeans/web-flow": "^0.1.3",
|
|
45
|
+
"oidc-client-ts": "3.5.0"
|
|
44
46
|
},
|
|
45
47
|
"peerDependencies": {
|
|
46
|
-
"@
|
|
48
|
+
"@radix-ui/react-progress": "^1.*",
|
|
49
|
+
"class-variance-authority": "^0.7.*",
|
|
50
|
+
"clsx": "^2.*",
|
|
51
|
+
"lucide-react": ">=0.500.0",
|
|
47
52
|
"react": "*",
|
|
48
|
-
"react-router": "^7.*"
|
|
53
|
+
"react-router": "^7.*",
|
|
54
|
+
"tailwind-merge": "^3.*",
|
|
55
|
+
"tailwindcss": "^4.*"
|
|
49
56
|
},
|
|
50
57
|
"devDependencies": {
|
|
58
|
+
"@owlmeans/dep-config": "workspace:*",
|
|
59
|
+
"@owlmeans/test-auth": "^0.1.2",
|
|
60
|
+
"@owlmeans/test-ui": "^0.1.2",
|
|
61
|
+
"@radix-ui/react-progress": "^1.1.7",
|
|
62
|
+
"@tailwindcss/vite": "^4.1.16",
|
|
63
|
+
"@types/bun": "^1.3.0",
|
|
51
64
|
"@types/react": "^19.2.7",
|
|
65
|
+
"@vitejs/plugin-react": "^5.0.5",
|
|
66
|
+
"class-variance-authority": "^0.7.1",
|
|
67
|
+
"clsx": "^2.1.1",
|
|
68
|
+
"lucide-react": "^0.546.0",
|
|
52
69
|
"nodemon": "^3.1.11",
|
|
53
70
|
"npm-check": "^6.0.1",
|
|
54
|
-
"
|
|
71
|
+
"playwright": "^1.50.0",
|
|
72
|
+
"tailwind-merge": "^3.3.1",
|
|
73
|
+
"tailwindcss": "^4.1.16",
|
|
74
|
+
"typescript": "^6.0.2",
|
|
75
|
+
"vite": "^7.2.0"
|
|
55
76
|
},
|
|
56
77
|
"publishConfig": {
|
|
57
78
|
"access": "public"
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// shadcn progress — sourced from shadcn (new-york) 2026-05-23
|
|
2
|
+
// Extended with `indeterminate` mode: when `value == null`, the indicator
|
|
3
|
+
// animates left-to-right continuously via the `progress-indeterminate`
|
|
4
|
+
// keyframe defined in globals.css.
|
|
5
|
+
import * as React from 'react'
|
|
6
|
+
import * as ProgressPrimitive from '@radix-ui/react-progress'
|
|
7
|
+
|
|
8
|
+
import { cn } from '@/lib/utils'
|
|
9
|
+
|
|
10
|
+
function Progress({
|
|
11
|
+
className,
|
|
12
|
+
value,
|
|
13
|
+
...props
|
|
14
|
+
}: React.ComponentProps<typeof ProgressPrimitive.Root>) {
|
|
15
|
+
const indeterminate = value == null
|
|
16
|
+
|
|
17
|
+
return (
|
|
18
|
+
<ProgressPrimitive.Root
|
|
19
|
+
data-slot="progress"
|
|
20
|
+
className={cn(
|
|
21
|
+
"bg-primary/20 relative h-2 w-full overflow-hidden rounded-full",
|
|
22
|
+
className
|
|
23
|
+
)}
|
|
24
|
+
value={indeterminate ? undefined : value}
|
|
25
|
+
{...props}
|
|
26
|
+
>
|
|
27
|
+
<ProgressPrimitive.Indicator
|
|
28
|
+
data-slot="progress-indicator"
|
|
29
|
+
data-state={indeterminate ? 'indeterminate' : 'determinate'}
|
|
30
|
+
className={cn(
|
|
31
|
+
"bg-primary h-full w-full flex-1 transition-all",
|
|
32
|
+
indeterminate && "absolute inset-y-0 left-0 w-1/3 animate-[progress-indeterminate_1.5s_linear_infinite]"
|
|
33
|
+
)}
|
|
34
|
+
style={
|
|
35
|
+
indeterminate
|
|
36
|
+
? undefined
|
|
37
|
+
: { transform: `translateX(-${100 - (value || 0)}%)` }
|
|
38
|
+
}
|
|
39
|
+
/>
|
|
40
|
+
</ProgressPrimitive.Root>
|
|
41
|
+
)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export { Progress }
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
@import "tailwindcss";
|
|
2
|
+
|
|
3
|
+
@source "../..";
|
|
4
|
+
|
|
5
|
+
@theme {
|
|
6
|
+
--color-background: oklch(1 0 0);
|
|
7
|
+
--color-foreground: oklch(0.145 0 0);
|
|
8
|
+
--color-primary: oklch(0.205 0 0);
|
|
9
|
+
--color-primary-foreground: oklch(0.985 0 0);
|
|
10
|
+
--color-border: oklch(0.922 0 0);
|
|
11
|
+
--radius: 0.625rem;
|
|
12
|
+
|
|
13
|
+
@keyframes progress-indeterminate {
|
|
14
|
+
0% { transform: translateX(-100%); }
|
|
15
|
+
100% { transform: translateX(100%); }
|
|
16
|
+
}
|
|
17
|
+
}
|