@owlmeans/server-oidc-rp 0.1.18-rc.26 → 0.1.18-rc.28

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 CHANGED
@@ -39,7 +39,7 @@ import { withOidcGuard } from '@owlmeans/oidc'
39
39
  import { oidcEntrypoints } from '@owlmeans/server-oidc-rp'
40
40
 
41
41
  const configuredProtocols = withOidcGuard(protocols)
42
- const appEntrypoints = [
42
+ const serverBindings = [
43
43
  // Bind application protocols against configuredProtocols here.
44
44
  ...oidcEntrypoints,
45
45
  ]
@@ -117,7 +117,7 @@ This package ships embedded agent skills under `agent-meta/`. After installing y
117
117
  your project's skill store (`.agents/skills/`):
118
118
 
119
119
  ```sh
120
- npx @owlmeans/agent-skills@^0.1.18-rc.19
120
+ npx @owlmeans/agent-skills@^0.1.18-rc.20
121
121
  ```
122
122
 
123
123
  The embedded files are version-matched to this package release. Do not edit them
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
3
  "package": "@owlmeans/server-oidc-rp",
4
- "version": "0.1.18-rc.26",
5
- "generatedAt": "2026-09-12T13:51:53.536Z",
4
+ "version": "0.1.18-rc.28",
5
+ "generatedAt": "2026-09-14T17:28:17.884Z",
6
6
  "canonicalRepo": "https://github.com/owlmeans/common",
7
7
  "entries": [
8
8
  {
@@ -8,7 +8,7 @@ user-invocable: false
8
8
  # @owlmeans/server-oidc-rp
9
9
 
10
10
  **Layer:** Server
11
- **Install:** `"@owlmeans/server-oidc-rp": "^0.1.18-rc.26"` in `dependencies`
11
+ **Install:** `"@owlmeans/server-oidc-rp": "^0.1.18-rc.28"` in `dependencies`
12
12
 
13
13
  ## Key Exports
14
14
 
@@ -57,7 +57,7 @@ import { oidcEntrypoints, makeAuthServiceEntrypoints } from '@owlmeans/server-oi
57
57
  import { bindAll } from '@owlmeans/server-entrypoint'
58
58
 
59
59
  export const configuredProtocols = withOidcGuard(protocols)
60
- export const appEntrypoints = [
60
+ export const serverBindings = [
61
61
  ...bindAll(configuredProtocols.api),
62
62
  ...oidcEntrypoints,
63
63
  ...bindAll(makeAuthServiceEntrypoints('my-auth-api')),
@@ -164,6 +164,29 @@ every field it is given; a stored `entityId` that was never validated against th
164
164
  — a caller-side default or placeholder, say — makes the exchange fail with a bare `AuthenFailed()`
165
165
  even though the same default provider is trivially available again at exchange time.
166
166
 
167
+ ## Building the redirect URI: the init handler has no `url()`
168
+
169
+ `init.ts` runs on the SERVER, but `DISPATCHER` (`@owlmeans/auth`) is a FRONTEND route
170
+ (`frontend({ service: DISPATCHER })` in `@owlmeans/auth-common`'s entrypoints) — the browser page
171
+ the identity provider redirects back to. `.url()` is attached to an entrypoint reference only by
172
+ `@owlmeans/client-entrypoint`, for a browser context that can resolve its own address; a server
173
+ context's `context.entrypoint(DISPATCHER)` is a `CommonEntrypoint` and has no such method. Typing
174
+ the call as `ClientEntrypoint<string>` (which does declare `.url()`) type-checks and builds clean
175
+ but throws at request time: `context.entrypoint(DISPATCHER).url is not a function`. This shipped
176
+ unnoticed for a long time because it is unreachable until a caller's own OIDC login FLOW actually
177
+ reaches the step that calls `authenticate()` — a consumer whose flow config never reaches that step
178
+ never exercises this line, so the fault surfaces only in a fully wired application, and only on the
179
+ very first sign-in attempt.
180
+
181
+ The fix — and the pattern for anywhere else in this package (or a consumer) that needs an absolute
182
+ URL for a route it does not own — is the one `@owlmeans/server-oidc-provider`'s interaction `url`
183
+ callback already uses: type the reference as `CommonEntrypoint`, then compose the address from
184
+ `.path()` and `.address()` through `makeSecurityHelper(ctx).makeUrl(entry.address(), entry.path())`
185
+ (`@owlmeans/config`). A route with path params (this one has none) needs its own substitution
186
+ first, the way the interaction URL substitutes `:uid` before qualifying it. Typing the reference as
187
+ `CommonEntrypoint` rather than `ClientEntrypoint` is itself the regression guard: calling `.url()`
188
+ on it is now a compile error, not a runtime one.
189
+
167
190
  ## Public type contract (isolation principle)
168
191
 
169
192
  `openid-client` types **never appear in this package's public exports**. All public types are
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/actions/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAkBzE,eAAO,MAAM,IAAI,EAAE,sBA0FjB,CAAA"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/actions/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAoBzE,eAAO,MAAM,IAAI,EAAE,sBAiGjB,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { handleBody } from '@owlmeans/server-api';
2
2
  import { AuthenPayloadError, AuthUnknown, DISPATCHER } from '@owlmeans/auth';
3
3
  import { assertContext } from '@owlmeans/context';
4
+ import { makeSecurityHelper } from '@owlmeans/config';
4
5
  import { authService, DEFAULT_ALIAS } from '../consts.js';
5
6
  // import { PROVIDER_CACHE_TTL } from '../consts.js'
6
7
  // import type { Client } from 'openid-client'
@@ -72,7 +73,14 @@ export const init = handleBody(async (body, ctx) => {
72
73
  client: client.getClientId(),
73
74
  ...(entityIdUsedForResolution ? { entityId } : {}),
74
75
  }, { ttl: AUTHEN_TIMEFRAME / 1000 });
75
- const dispatcherUrl = await context.entrypoint(DISPATCHER).url();
76
+ // The dispatcher is a FRONTEND route, and this is a server context — the entrypoint registered
77
+ // here has no `url()` (that helper is attached by `@owlmeans/client-entrypoint` only, for a
78
+ // browser context that can resolve its own address). Assembled the way `server-oidc-provider`'s
79
+ // interaction URL is: the entrypoint's path, qualified with the address it answers on — the
80
+ // frontend service's, not this backend's.
81
+ const dispatcherEntry = context.entrypoint(DISPATCHER);
82
+ const dispatcherUrl = makeSecurityHelper(context)
83
+ .makeUrl(dispatcherEntry.address(), dispatcherEntry.path());
76
84
  const cfg = client.getConfig();
77
85
  const url = client.makeAuthUrl({
78
86
  scope: requestedScope(cfg?.extraScopes),
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/actions/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/actions/init.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@owlmeans/server-oidc-rp",
3
- "version": "0.1.18-rc.26",
3
+ "version": "0.1.18-rc.28",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -37,7 +37,7 @@
37
37
  },
38
38
  "devDependencies": {
39
39
  "@owlmeans/dep-config": "workspace:*",
40
- "@owlmeans/test-auth": "^0.1.18-rc.20",
40
+ "@owlmeans/test-auth": "^0.1.18-rc.21",
41
41
  "@types/bun": "^1.4.0",
42
42
  "@types/node": "^26.1.0",
43
43
  "nodemon": "^3.1.14",
@@ -45,21 +45,21 @@
45
45
  },
46
46
  "dependencies": {
47
47
  "@noble/hashes": "^1.5.0",
48
- "@owlmeans/auth": "^0.1.18-rc.16",
49
- "@owlmeans/auth-common": "^0.1.18-rc.20",
50
- "@owlmeans/basic-envelope": "^0.1.18-rc.19",
51
- "@owlmeans/client-entrypoint": "^0.1.18-rc.20",
52
- "@owlmeans/config": "^0.1.18-rc.19",
53
- "@owlmeans/context": "^0.1.18-rc.15",
54
- "@owlmeans/did": "^0.1.18-rc.19",
55
- "@owlmeans/entrypoint": "^0.1.18-rc.18",
56
- "@owlmeans/oidc": "^0.1.18-rc.28",
57
- "@owlmeans/resource": "^0.1.18-rc.16",
58
- "@owlmeans/route": "^0.1.18-rc.16",
59
- "@owlmeans/server-api": "^0.1.18-rc.24",
60
- "@owlmeans/server-auth": "^0.1.18-rc.26",
61
- "@owlmeans/server-context": "^0.1.18-rc.19",
62
- "@owlmeans/server-entrypoint": "^0.1.18-rc.18",
48
+ "@owlmeans/auth": "^0.1.18-rc.17",
49
+ "@owlmeans/auth-common": "^0.1.18-rc.21",
50
+ "@owlmeans/basic-envelope": "^0.1.18-rc.20",
51
+ "@owlmeans/client-entrypoint": "^0.1.18-rc.21",
52
+ "@owlmeans/config": "^0.1.18-rc.20",
53
+ "@owlmeans/context": "^0.1.18-rc.16",
54
+ "@owlmeans/did": "^0.1.18-rc.20",
55
+ "@owlmeans/entrypoint": "^0.1.18-rc.19",
56
+ "@owlmeans/oidc": "^0.1.18-rc.29",
57
+ "@owlmeans/resource": "^0.1.18-rc.17",
58
+ "@owlmeans/route": "^0.1.18-rc.17",
59
+ "@owlmeans/server-api": "^0.1.18-rc.25",
60
+ "@owlmeans/server-auth": "^0.1.18-rc.27",
61
+ "@owlmeans/server-context": "^0.1.18-rc.20",
62
+ "@owlmeans/server-entrypoint": "^0.1.18-rc.19",
63
63
  "@scure/base": "^2.3.0",
64
64
  "dayjs": "^1.11.13",
65
65
  "jose": "6.2.5",
@@ -5,6 +5,8 @@ import { AuthenPayloadError, AuthUnknown, DISPATCHER } from '@owlmeans/auth'
5
5
  import { assertContext } from '@owlmeans/context'
6
6
  import type { Config, Context, OidcClientAdapter, OidcClientService } from '../types.js'
7
7
  import type { ClientEntrypoint } from '@owlmeans/client-entrypoint'
8
+ import type { CommonEntrypoint } from '@owlmeans/entrypoint'
9
+ import { makeSecurityHelper } from '@owlmeans/config'
8
10
  import { authService, DEFAULT_ALIAS } from '../consts.js'
9
11
  // import { PROVIDER_CACHE_TTL } from '../consts.js'
10
12
  // import type { Client } from 'openid-client'
@@ -93,7 +95,14 @@ export const init: RefedEntrypointHandler = handleBody(async (body: OIDCAuthInit
93
95
  ...(entityIdUsedForResolution ? { entityId } : {}),
94
96
  }, { ttl: AUTHEN_TIMEFRAME / 1000 })
95
97
 
96
- const dispatcherUrl = await context.entrypoint<ClientEntrypoint<string>>(DISPATCHER).url()
98
+ // The dispatcher is a FRONTEND route, and this is a server context — the entrypoint registered
99
+ // here has no `url()` (that helper is attached by `@owlmeans/client-entrypoint` only, for a
100
+ // browser context that can resolve its own address). Assembled the way `server-oidc-provider`'s
101
+ // interaction URL is: the entrypoint's path, qualified with the address it answers on — the
102
+ // frontend service's, not this backend's.
103
+ const dispatcherEntry = context.entrypoint<CommonEntrypoint>(DISPATCHER)
104
+ const dispatcherUrl = makeSecurityHelper<Config, Context>(context)
105
+ .makeUrl(dispatcherEntry.address(), dispatcherEntry.path())
97
106
 
98
107
  const cfg = client.getConfig()
99
108
  const url = client.makeAuthUrl({