@atlasauth/nextjs 0.3.0 → 0.4.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/CHANGELOG.md +6 -0
- package/dist/access-token.d.ts +16 -0
- package/dist/access-token.js +29 -0
- package/dist/access-token.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# @atlasauth/nextjs changelog
|
|
2
2
|
|
|
3
|
+
## 0.4.0 — 2026-10-23
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- `withAccessToken(options, handler)`: wrap an App Router route handler so it runs only for a request with an Atlas-issued OAuth access token for your API (audience, scopes, DPoP); anything else gets 401/403 with the `WWW-Authenticate` challenge. Re-exports `createAccessTokenVerifier`, `protectedResourceMetadata`, `protectedResourceMetadataPath`.
|
|
8
|
+
|
|
3
9
|
## 0.3.0
|
|
4
10
|
### Added
|
|
5
11
|
- **`getAtlasInitialState(options?)`** in `@atlasauth/nextjs/server` → `Promise<AtlasInitialState>`: the instance's
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type AccessTokenClaims, type AccessTokenVerifierOptions } from '@atlasauth/backend';
|
|
2
|
+
export { createAccessTokenVerifier, protectedResourceMetadata, protectedResourceMetadataPath, type AccessTokenClaims, type AccessTokenResult, type AccessTokenVerifierOptions, } from '@atlasauth/backend';
|
|
3
|
+
/** The verified token handed to a {@link withAccessToken} route handler. */
|
|
4
|
+
export interface VerifiedAccessToken {
|
|
5
|
+
claims: AccessTokenClaims;
|
|
6
|
+
subject: string;
|
|
7
|
+
clientId: string | null;
|
|
8
|
+
scopes: string[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Wrap a Next.js route handler (App Router, any runtime) so it only runs for a
|
|
12
|
+
* request carrying an Atlas-issued OAuth access token for YOUR API (audience,
|
|
13
|
+
* scopes, DPoP when bound). Anything else gets 401/403 with the RFC 6750 /
|
|
14
|
+
* RFC 9728 `WWW-Authenticate` challenge — what an MCP client needs to sign in.
|
|
15
|
+
*/
|
|
16
|
+
export declare function withAccessToken<Ctx = unknown>(options: AccessTokenVerifierOptions, handler: (request: Request, token: VerifiedAccessToken, ctx: Ctx) => Response | Promise<Response>): (request: Request, ctx: Ctx) => Promise<Response>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.protectedResourceMetadataPath = exports.protectedResourceMetadata = exports.createAccessTokenVerifier = void 0;
|
|
4
|
+
exports.withAccessToken = withAccessToken;
|
|
5
|
+
const backend_1 = require("@atlasauth/backend");
|
|
6
|
+
var backend_2 = require("@atlasauth/backend");
|
|
7
|
+
Object.defineProperty(exports, "createAccessTokenVerifier", { enumerable: true, get: function () { return backend_2.createAccessTokenVerifier; } });
|
|
8
|
+
Object.defineProperty(exports, "protectedResourceMetadata", { enumerable: true, get: function () { return backend_2.protectedResourceMetadata; } });
|
|
9
|
+
Object.defineProperty(exports, "protectedResourceMetadataPath", { enumerable: true, get: function () { return backend_2.protectedResourceMetadataPath; } });
|
|
10
|
+
/**
|
|
11
|
+
* Wrap a Next.js route handler (App Router, any runtime) so it only runs for a
|
|
12
|
+
* request carrying an Atlas-issued OAuth access token for YOUR API (audience,
|
|
13
|
+
* scopes, DPoP when bound). Anything else gets 401/403 with the RFC 6750 /
|
|
14
|
+
* RFC 9728 `WWW-Authenticate` challenge — what an MCP client needs to sign in.
|
|
15
|
+
*/
|
|
16
|
+
function withAccessToken(options, handler) {
|
|
17
|
+
const verify = (0, backend_1.createAccessTokenVerifier)(options);
|
|
18
|
+
return async (request, ctx) => {
|
|
19
|
+
const result = await verify({ method: request.method, url: request.url, headers: request.headers });
|
|
20
|
+
if (!result.ok) {
|
|
21
|
+
return new Response(JSON.stringify(result.error ? { error: result.error, error_description: result.description } : { error: 'unauthorized' }), {
|
|
22
|
+
status: result.status,
|
|
23
|
+
headers: { 'content-type': 'application/json', 'www-authenticate': result.wwwAuthenticate },
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
return handler(request, { claims: result.claims, subject: result.subject, clientId: result.clientId, scopes: result.scopes }, ctx);
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=access-token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access-token.js","sourceRoot":"","sources":["../src/access-token.ts"],"names":[],"mappings":";;;AA6BA,0CAwBC;AArDD,gDAI4B;AAE5B,8CAO4B;AAN1B,oHAAA,yBAAyB,OAAA;AACzB,oHAAA,yBAAyB,OAAA;AACzB,wHAAA,6BAA6B,OAAA;AAc/B;;;;;GAKG;AACH,SAAgB,eAAe,CAC7B,OAAmC,EACnC,OAAiG;IAEjG,MAAM,MAAM,GAAG,IAAA,mCAAyB,EAAC,OAAO,CAAC,CAAC;IAClD,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;QAC5B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACpG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,IAAI,QAAQ,CACjB,IAAI,CAAC,SAAS,CACZ,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAC1G,EACD;gBACE,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,CAAC,eAAe,EAAE;aAC5F,CACF,CAAC;QACJ,CAAC;QACD,OAAO,OAAO,CACZ,OAAO,EACP,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,EACpG,GAAG,CACJ,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -17,4 +17,5 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./matcher"), exports);
|
|
18
18
|
__exportStar(require("./middleware"), exports);
|
|
19
19
|
__exportStar(require("./proxy"), exports);
|
|
20
|
+
__exportStar(require("./access-token"), exports);
|
|
20
21
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,+CAA6B;AAC7B,0CAAwB"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,+CAA6B;AAC7B,0CAAwB;AACxB,iDAA+B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlasauth/nextjs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"exports": {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"./package.json": "./package.json"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@atlasauth/backend": "0.
|
|
18
|
+
"@atlasauth/backend": "0.15.0"
|
|
19
19
|
},
|
|
20
20
|
"peerDependencies": {
|
|
21
21
|
"next": ">=13.4"
|