@openape/nuxt-auth-sp 0.5.1 → 0.6.0
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/dist/module.json +1 -1
- package/dist/module.mjs +3 -2
- package/dist/runtime/server/handlers.d.ts +21 -0
- package/dist/runtime/server/handlers.js +6 -5
- package/dist/runtime/server/plugins/problem-details.d.ts +3 -0
- package/dist/runtime/server/plugins/problem-details.js +24 -0
- package/dist/runtime/server/routes/well-known/auth.md.get.js +1 -1
- package/dist/runtime/server/routes/well-known/oauth-client-metadata.get.d.ts +2 -0
- package/dist/runtime/server/routes/well-known/{sp-manifest.json.get.js → oauth-client-metadata.get.js} +5 -4
- package/package.json +4 -3
- package/dist/runtime/server/routes/well-known/sp-manifest.json.get.d.ts +0 -0
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import crypto from 'node:crypto';
|
|
2
|
-
import { useLogger, defineNuxtModule, createResolver, addServerImportsDir, addImportsDir, addComponentsDir, addServerHandler } from '@nuxt/kit';
|
|
2
|
+
import { useLogger, defineNuxtModule, createResolver, addServerPlugin, addServerImportsDir, addImportsDir, addComponentsDir, addServerHandler } from '@nuxt/kit';
|
|
3
3
|
import { defu } from 'defu';
|
|
4
4
|
|
|
5
5
|
const logger = useLogger("@openape/nuxt-auth-sp");
|
|
@@ -44,6 +44,7 @@ const module$1 = defineNuxtModule({
|
|
|
44
44
|
logger.warn("clientId is empty in production! Set openapeSp.clientId or NUXT_OPENAPE_SP_CLIENT_ID.");
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
+
addServerPlugin(resolve("./runtime/server/plugins/problem-details"));
|
|
47
48
|
addServerImportsDir(resolve("./runtime/server/utils"));
|
|
48
49
|
addImportsDir(resolve("./runtime/composables"));
|
|
49
50
|
addComponentsDir({ path: resolve(runtimeDir, "components") });
|
|
@@ -52,7 +53,7 @@ const module$1 = defineNuxtModule({
|
|
|
52
53
|
addServerHandler({ route: "/api/callback", handler: resolve("./runtime/server/api/callback.get") });
|
|
53
54
|
addServerHandler({ route: "/api/logout", method: "post", handler: resolve("./runtime/server/api/logout.post") });
|
|
54
55
|
addServerHandler({ route: "/api/me", handler: resolve("./runtime/server/api/me.get") });
|
|
55
|
-
addServerHandler({ route: "/.well-known/
|
|
56
|
+
addServerHandler({ route: "/.well-known/oauth-client-metadata", handler: resolve("./runtime/server/routes/well-known/oauth-client-metadata.get") });
|
|
56
57
|
addServerHandler({ route: "/.well-known/auth.md", handler: resolve("./runtime/server/routes/well-known/auth.md.get") });
|
|
57
58
|
addServerHandler({ route: "/.well-known/openape.json", handler: resolve("./runtime/server/routes/well-known/openape.json.get") });
|
|
58
59
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { H3Event } from 'h3';
|
|
2
|
+
import type { DDISAAssertionClaims } from '@openape/core';
|
|
3
|
+
export interface LoginHandlerOptions {
|
|
4
|
+
callbackPath: string;
|
|
5
|
+
}
|
|
6
|
+
export interface CallbackHandlerOptions {
|
|
7
|
+
onSuccess: (event: H3Event, result: {
|
|
8
|
+
claims: DDISAAssertionClaims;
|
|
9
|
+
rawAssertion: string;
|
|
10
|
+
}) => Promise<void>;
|
|
11
|
+
onError?: (event: H3Event, error: Error) => Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export interface ClientMetadataHandlerOptions {
|
|
14
|
+
callbackPath: string;
|
|
15
|
+
clientUri?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function defineOpenApeLoginHandler(options: LoginHandlerOptions): import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<{
|
|
18
|
+
redirectUrl: string;
|
|
19
|
+
}>>;
|
|
20
|
+
export declare function defineOpenApeCallbackHandler(options: CallbackHandlerOptions): import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<void>>;
|
|
21
|
+
export declare function defineOpenApeClientMetadataHandler(options: ClientMetadataHandlerOptions): import("h3").EventHandler<import("h3").EventHandlerRequest, import("@openape/core").SPClientMetadata>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createError, defineEventHandler, getQuery, getRequestURL, readBody, sendRedirect } from "h3";
|
|
2
|
-
import { createAuthorizationURL,
|
|
2
|
+
import { createAuthorizationURL, createClientMetadata, discoverIdP, handleCallback } from "@openape/auth";
|
|
3
3
|
import { getSpConfig, saveFlowState, getFlowState, clearFlowState } from "./utils/sp-config.js";
|
|
4
4
|
export function defineOpenApeLoginHandler(options) {
|
|
5
5
|
return defineEventHandler(async (event) => {
|
|
@@ -86,15 +86,16 @@ export function defineOpenApeCallbackHandler(options) {
|
|
|
86
86
|
}
|
|
87
87
|
});
|
|
88
88
|
}
|
|
89
|
-
export function
|
|
89
|
+
export function defineOpenApeClientMetadataHandler(options) {
|
|
90
90
|
return defineEventHandler((event) => {
|
|
91
91
|
const { clientId, spName } = getSpConfig();
|
|
92
92
|
const origin = getRequestURL(event).origin;
|
|
93
|
-
return
|
|
93
|
+
return createClientMetadata({
|
|
94
94
|
client_id: clientId,
|
|
95
|
-
|
|
95
|
+
client_name: spName,
|
|
96
96
|
redirect_uris: [`${origin}${options.callbackPath}`],
|
|
97
|
-
|
|
97
|
+
client_uri: options.clientUri || origin,
|
|
98
|
+
contacts: []
|
|
98
99
|
});
|
|
99
100
|
});
|
|
100
101
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { setResponseHeader } from "h3";
|
|
2
|
+
export default (nitroApp) => {
|
|
3
|
+
nitroApp.hooks.hook("error", (error, { event }) => {
|
|
4
|
+
if (!event)
|
|
5
|
+
return;
|
|
6
|
+
if (error.data?.type && error.data?.status) {
|
|
7
|
+
setResponseHeader(event, "Content-Type", "application/problem+json");
|
|
8
|
+
event.node.res.statusCode = error.data.status;
|
|
9
|
+
event.node.res.end(JSON.stringify(error.data));
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
const status = error.statusCode || 500;
|
|
13
|
+
const title = error.statusMessage || "Internal Server Error";
|
|
14
|
+
const body = {
|
|
15
|
+
type: "about:blank",
|
|
16
|
+
title,
|
|
17
|
+
status,
|
|
18
|
+
...error.message && error.message !== title ? { detail: error.message } : {}
|
|
19
|
+
};
|
|
20
|
+
setResponseHeader(event, "Content-Type", "application/problem+json");
|
|
21
|
+
event.node.res.statusCode = status;
|
|
22
|
+
event.node.res.end(JSON.stringify(body));
|
|
23
|
+
});
|
|
24
|
+
};
|
|
@@ -21,7 +21,7 @@ DDISA v1 (DNS-Discoverable Identity & Service Authorization)
|
|
|
21
21
|
| GET | /api/callback | OAuth callback (automatic) |
|
|
22
22
|
| GET | /api/me | Get current session (returns 401 if not authenticated) |
|
|
23
23
|
| POST | /api/logout | End session |
|
|
24
|
-
| GET | /.well-known/
|
|
24
|
+
| GET | /.well-known/oauth-client-metadata | SP client metadata (RFC 7591) |
|
|
25
25
|
|
|
26
26
|
## How to Authenticate
|
|
27
27
|
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { defineEventHandler, getRequestURL } from "h3";
|
|
2
|
-
import {
|
|
2
|
+
import { createClientMetadata } from "@openape/auth";
|
|
3
3
|
import { getSpConfig } from "../../utils/sp-config.js";
|
|
4
4
|
export default defineEventHandler((event) => {
|
|
5
5
|
const { clientId, spName } = getSpConfig();
|
|
6
6
|
const origin = getRequestURL(event).origin;
|
|
7
|
-
return
|
|
7
|
+
return createClientMetadata({
|
|
8
8
|
client_id: clientId,
|
|
9
|
-
|
|
9
|
+
client_name: spName,
|
|
10
10
|
redirect_uris: [`${origin}/api/callback`],
|
|
11
|
-
|
|
11
|
+
client_uri: origin,
|
|
12
|
+
contacts: []
|
|
12
13
|
});
|
|
13
14
|
});
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openape/nuxt-auth-sp",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.6.0",
|
|
5
5
|
"description": "OpenAPE Service Provider Nuxt module — adds OIDC login via DNS-based IdP discovery",
|
|
6
6
|
"author": "Delta Mind GmbH",
|
|
7
7
|
"license": "AGPL-3.0-or-later",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"test": "vitest run --passWithNoTests",
|
|
30
30
|
"changeset": "changeset",
|
|
31
31
|
"version-packages": "changeset version",
|
|
32
|
-
"release": "
|
|
32
|
+
"release": "changeset publish"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@nuxt/kit": "^3.21.1",
|
|
@@ -56,5 +56,6 @@
|
|
|
56
56
|
},
|
|
57
57
|
"engines": {
|
|
58
58
|
"node": ">=22"
|
|
59
|
-
}
|
|
59
|
+
},
|
|
60
|
+
"packageManager": "pnpm@10.29.3"
|
|
60
61
|
}
|
|
File without changes
|