@owlmeans/server-auth-token 0.1.18-rc.30 → 0.1.18-rc.31
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 +1 -1
- package/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/server-auth-token/SKILL.md +1 -1
- package/build/handlers/index.d.ts +4 -20
- package/build/handlers/index.d.ts.map +1 -1
- package/build/handlers/index.js.map +1 -1
- package/build/handlers/types.d.ts +19 -0
- package/build/handlers/types.d.ts.map +1 -0
- package/build/handlers/types.js +2 -0
- package/build/handlers/types.js.map +1 -0
- package/build/hash.d.ts +1 -5
- package/build/hash.d.ts.map +1 -1
- package/build/hash.js +2 -2
- package/build/hash.js.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/types.d.ts +5 -0
- package/build/types.d.ts.map +1 -1
- package/package.json +15 -15
- package/src/handlers/index.ts +4 -25
- package/src/handlers/types.ts +20 -0
- package/src/hash.ts +3 -8
- package/src/index.ts +1 -0
- package/src/types.ts +6 -0
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@ This package ships embedded agent skills under `agent-meta/`. After installing y
|
|
|
6
6
|
your project's skill store (`.agents/skills/`):
|
|
7
7
|
|
|
8
8
|
```sh
|
|
9
|
-
npx @owlmeans/agent-skills@^0.1.18-rc.
|
|
9
|
+
npx @owlmeans/agent-skills@^0.1.18-rc.48
|
|
10
10
|
```
|
|
11
11
|
|
|
12
12
|
The embedded files are version-matched to this package release. Do not edit them
|
package/agent-meta/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"package": "@owlmeans/server-auth-token",
|
|
4
|
-
"version": "0.1.18-rc.
|
|
5
|
-
"generatedAt": "2026-10-
|
|
4
|
+
"version": "0.1.18-rc.31",
|
|
5
|
+
"generatedAt": "2026-10-05T08:32:19.136Z",
|
|
6
6
|
"canonicalRepo": "https://github.com/owlmeans/common",
|
|
7
7
|
"entries": [
|
|
8
8
|
{
|
|
@@ -8,7 +8,7 @@ user-invocable: false
|
|
|
8
8
|
# @owlmeans/server-auth-token
|
|
9
9
|
|
|
10
10
|
**Layer:** Server
|
|
11
|
-
**Install:** `"@owlmeans/server-auth-token": "^0.1.18-rc.
|
|
11
|
+
**Install:** `"@owlmeans/server-auth-token": "^0.1.18-rc.31"` in `dependencies`
|
|
12
12
|
**Contracts:** `@owlmeans/auth-token` — the record, the routes, the format helpers
|
|
13
13
|
|
|
14
14
|
## Key Exports
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type { AccessTokenList, CreateAccessToken, IssuedAccessToken } from '@owlmeans/auth-token';
|
|
1
|
+
import { type AccessTokenList, type IssuedAccessToken, type AuthTokenEntrypoints } from '@owlmeans/auth-token';
|
|
3
2
|
import type { AuthTokenContext } from '../types.js';
|
|
4
|
-
import type {
|
|
3
|
+
import type { IssueAccessTokenRequest, IssueAccessTokenSubject } from './types.js';
|
|
5
4
|
/**
|
|
6
5
|
* A token may never mint another token.
|
|
7
6
|
*
|
|
@@ -20,22 +19,6 @@ export declare const refuseTokenAuth: (req: {
|
|
|
20
19
|
type?: string;
|
|
21
20
|
};
|
|
22
21
|
}, what: string) => void;
|
|
23
|
-
/** Whoever is minting the token — read once, by whichever caller resolved the session. */
|
|
24
|
-
export interface IssueAccessTokenSubject {
|
|
25
|
-
entityId: string;
|
|
26
|
-
userId: string;
|
|
27
|
-
profileId: string;
|
|
28
|
-
role: AuthRole;
|
|
29
|
-
/** The subject's OWN scopes — minting can only narrow, never widen, this set. */
|
|
30
|
-
scopes: string[];
|
|
31
|
-
}
|
|
32
|
-
export interface IssueAccessTokenRequest extends CreateAccessToken {
|
|
33
|
-
/**
|
|
34
|
-
* The resource(s) this token is FOR (RFC 8707), when it is minted through an OAuth grant.
|
|
35
|
-
* Absent for a token minted by hand — the ordinary, unrestricted kind.
|
|
36
|
-
*/
|
|
37
|
-
audience?: string[];
|
|
38
|
-
}
|
|
39
22
|
/**
|
|
40
23
|
* Mint one token for `subject`, exactly what `createAccessToken` does over an HTTP body — pulled
|
|
41
24
|
* out so a second caller (an OAuth token endpoint) can mint the SAME shape of record over a
|
|
@@ -45,11 +28,12 @@ export interface IssueAccessTokenRequest extends CreateAccessToken {
|
|
|
45
28
|
export declare const issueAccessToken: (ctx: AuthTokenContext, subject: IssueAccessTokenSubject, payload: IssueAccessTokenRequest) => Promise<IssuedAccessToken>;
|
|
46
29
|
export declare const listAccessTokens: (protocol: AuthTokenEntrypoints['list']) => import("@owlmeans/server-entrypoint").BoundEntrypointHandler<import("@owlmeans/entrypoint").EntrypointProtocol<import("@owlmeans/entrypoint").OpenRequest, AccessTokenList>>;
|
|
47
30
|
export declare const createAccessToken: (protocol: AuthTokenEntrypoints['create']) => import("@owlmeans/server-entrypoint").BoundEntrypointHandler<import("@owlmeans/entrypoint").EntrypointProtocol<{
|
|
48
|
-
body: CreateAccessToken;
|
|
31
|
+
body: import("@owlmeans/auth-token").CreateAccessToken;
|
|
49
32
|
}, IssuedAccessToken>>;
|
|
50
33
|
export declare const revokeAccessToken: (protocol: AuthTokenEntrypoints['revoke']) => import("@owlmeans/server-entrypoint").BoundEntrypointHandler<import("@owlmeans/entrypoint").EntrypointProtocol<{
|
|
51
34
|
params: import("@owlmeans/auth-token").AccessTokenParams;
|
|
52
35
|
}, {
|
|
53
36
|
id: string;
|
|
54
37
|
}>>;
|
|
38
|
+
export type { IssueAccessTokenRequest, IssueAccessTokenSubject } from './types.js';
|
|
55
39
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AACA,OAAO,EAA2C,KAAK,eAAe,EAAgD,KAAK,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAKrM,OAAO,KAAK,EAAuB,gBAAgB,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,KAAK,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AAWlF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,QAAS;IAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,QAAQ,MAAM,KAAG,IAIjF,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,QACtB,gBAAgB,WAAW,uBAAuB,WAAW,uBAAuB,KACxF,OAAO,CAAC,iBAAiB,CA+B3B,CAAA;AAED,eAAO,MAAM,gBAAgB,aAAc,oBAAoB,CAAC,MAAM,CAAC,iLAarE,CAAA;AAEF,eAAO,MAAM,iBAAiB,aAAc,oBAAoB,CAAC,QAAQ,CAAC;;sBAYxE,CAAA;AAEF,eAAO,MAAM,iBAAiB,aAAc,oBAAoB,CAAC,QAAQ,CAAC;;;;GAqBxE,CAAA;AAEF,YAAY,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACvF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AuthRole } from '@owlmeans/auth';
|
|
2
|
+
import type { CreateAccessToken } from '@owlmeans/auth-token';
|
|
3
|
+
/** Whoever is minting the token — read once, by whichever caller resolved the session. */
|
|
4
|
+
export interface IssueAccessTokenSubject {
|
|
5
|
+
entityId: string;
|
|
6
|
+
userId: string;
|
|
7
|
+
profileId: string;
|
|
8
|
+
role: AuthRole;
|
|
9
|
+
/** The subject's OWN scopes — minting can only narrow, never widen, this set. */
|
|
10
|
+
scopes: string[];
|
|
11
|
+
}
|
|
12
|
+
export interface IssueAccessTokenRequest extends CreateAccessToken {
|
|
13
|
+
/**
|
|
14
|
+
* The resource(s) this token is FOR (RFC 8707), when it is minted through an OAuth grant.
|
|
15
|
+
* Absent for a token minted by hand — the ordinary, unrestricted kind.
|
|
16
|
+
*/
|
|
17
|
+
audience?: string[];
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/handlers/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAE7D,0FAA0F;AAC1F,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,QAAQ,CAAA;IACd,iFAAiF;IACjF,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/handlers/types.ts"],"names":[],"mappings":""}
|
package/build/hash.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { MintedToken } from './types.js';
|
|
1
2
|
/**
|
|
2
3
|
* The stored form of a token.
|
|
3
4
|
*
|
|
@@ -7,11 +8,6 @@
|
|
|
7
8
|
* deployment's whole authenticated surface.
|
|
8
9
|
*/
|
|
9
10
|
export declare const hashAccessToken: (token: string) => string;
|
|
10
|
-
export interface MintedToken {
|
|
11
|
-
token: string;
|
|
12
|
-
hash: string;
|
|
13
|
-
display: string;
|
|
14
|
-
}
|
|
15
11
|
/** Mint one token: the plaintext (returned once), its hash (stored) and its display form. */
|
|
16
12
|
export declare const mintAccessToken: (prefix: string) => MintedToken;
|
|
17
13
|
//# sourceMappingURL=hash.d.ts.map
|
package/build/hash.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,UAAW,MAAM,KAAG,MAA6D,CAAA;AAE7G,6FAA6F;AAC7F,eAAO,MAAM,eAAe,WAAY,MAAM,KAAG,WAIhD,CAAA"}
|
package/build/hash.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AUTH_TOKEN_SECRET_BYTES, displayOf } from '@owlmeans/auth-token';
|
|
2
2
|
import { base58 } from '@scure/base';
|
|
3
|
-
import { sha256 } from '@noble/hashes/
|
|
4
|
-
import { bytesToHex, randomBytes } from '@noble/hashes/utils';
|
|
3
|
+
import { sha256 } from '@noble/hashes/sha2.js';
|
|
4
|
+
import { bytesToHex, randomBytes } from '@noble/hashes/utils.js';
|
|
5
5
|
/**
|
|
6
6
|
* The stored form of a token.
|
|
7
7
|
*
|
package/build/hash.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACzE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAGhE;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAE7G,6FAA6F;AAC7F,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAc,EAAe,EAAE;IAC7D,MAAM,KAAK,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAA;IAE/E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAA;AACnF,CAAC,CAAA"}
|
package/build/index.d.ts
CHANGED
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,mBAAmB,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,WAAW,CAAA;AACzB,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,qBAAqB,CAAA;AACnC,mBAAmB,qBAAqB,CAAA;AACxC,mBAAmB,YAAY,CAAA"}
|
package/build/types.d.ts
CHANGED
|
@@ -48,4 +48,9 @@ export interface AuthTokenConfig extends ServerConfig {
|
|
|
48
48
|
};
|
|
49
49
|
}
|
|
50
50
|
export type AuthTokenContext<C extends AuthTokenConfig = AuthTokenConfig> = ServerContext<C>;
|
|
51
|
+
export interface MintedToken {
|
|
52
|
+
token: string;
|
|
53
|
+
hash: string;
|
|
54
|
+
display: string;
|
|
55
|
+
}
|
|
51
56
|
//# sourceMappingURL=types.d.ts.map
|
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,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAE3E,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAAA;AAElE,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,gBAAgB,KAAK,MAAM,EAAE,CAAC,CAAA;CACjE;AAED,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;CACF;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,IAAI,aAAa,CAAC,CAAC,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAE3E,MAAM,MAAM,mBAAmB,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAAA;AAElE,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gDAAgD;IAChD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;;;;;;;;;;OAaG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,gBAAgB,KAAK,MAAM,EAAE,CAAC,CAAA;CACjE;AAED,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,SAAS,CAAC,EAAE;QACV,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;CACF;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,IAAI,aAAa,CAAC,CAAC,CAAC,CAAA;AAE5F,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@owlmeans/server-auth-token",
|
|
3
|
-
"version": "0.1.18-rc.
|
|
3
|
+
"version": "0.1.18-rc.31",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "The server half of OwlMeans access tokens — the store, the guard that verifies a presented token, the management handlers and the coguard that admits one on an existing route.",
|
|
6
6
|
"type": "module",
|
|
@@ -23,23 +23,23 @@
|
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@noble/hashes": "^
|
|
27
|
-
"@owlmeans/auth": "^0.1.18-rc.
|
|
28
|
-
"@owlmeans/auth-common": "^0.1.18-rc.
|
|
29
|
-
"@owlmeans/auth-token": "^0.1.18-rc.
|
|
30
|
-
"@owlmeans/context": "^0.1.18-rc.
|
|
31
|
-
"@owlmeans/entrypoint": "^0.1.18-rc.
|
|
32
|
-
"@owlmeans/log": "^0.1.18-rc.
|
|
33
|
-
"@owlmeans/mongo-resource": "^0.1.18-rc.
|
|
34
|
-
"@owlmeans/resource": "^0.1.18-rc.
|
|
35
|
-
"@owlmeans/server-api": "^0.1.18-rc.
|
|
36
|
-
"@owlmeans/server-auth-identity": "^0.1.18-rc.
|
|
37
|
-
"@owlmeans/server-context": "^0.1.18-rc.
|
|
38
|
-
"@scure/base": "^
|
|
26
|
+
"@noble/hashes": "^2.4.0",
|
|
27
|
+
"@owlmeans/auth": "^0.1.18-rc.39",
|
|
28
|
+
"@owlmeans/auth-common": "^0.1.18-rc.46",
|
|
29
|
+
"@owlmeans/auth-token": "^0.1.18-rc.31",
|
|
30
|
+
"@owlmeans/context": "^0.1.18-rc.33",
|
|
31
|
+
"@owlmeans/entrypoint": "^0.1.18-rc.40",
|
|
32
|
+
"@owlmeans/log": "^0.1.18-rc.1",
|
|
33
|
+
"@owlmeans/mongo-resource": "^0.1.18-rc.42",
|
|
34
|
+
"@owlmeans/resource": "^0.1.18-rc.39",
|
|
35
|
+
"@owlmeans/server-api": "^0.1.18-rc.50",
|
|
36
|
+
"@owlmeans/server-auth-identity": "^0.1.18-rc.46",
|
|
37
|
+
"@owlmeans/server-context": "^0.1.18-rc.42",
|
|
38
|
+
"@scure/base": "^2.4.0"
|
|
39
39
|
},
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@owlmeans/dep-config": "workspace:*",
|
|
42
|
-
"@types/bun": "^1.4.
|
|
42
|
+
"@types/bun": "^1.4.2",
|
|
43
43
|
"nodemon": "^3.1.14",
|
|
44
44
|
"typescript": "^7.0.2"
|
|
45
45
|
},
|
package/src/handlers/index.ts
CHANGED
|
@@ -1,16 +1,11 @@
|
|
|
1
1
|
import { AuthForbidden, AuthroizationType, ALL_SCOPES, AuthRole } from '@owlmeans/auth'
|
|
2
|
-
import {
|
|
3
|
-
AUTH_TOKEN_MAX_TTL, AUTH_TOKEN_RESOURCE
|
|
4
|
-
} from '@owlmeans/auth-token'
|
|
5
|
-
import type {
|
|
6
|
-
AccessTokenList, AccessTokenRecord, AccessTokenView, CreateAccessToken, IssuedAccessToken
|
|
7
|
-
} from '@owlmeans/auth-token'
|
|
2
|
+
import { AUTH_TOKEN_MAX_TTL, AUTH_TOKEN_RESOURCE, type AccessTokenList, type AccessTokenRecord, type AccessTokenView, type IssuedAccessToken, type AuthTokenEntrypoints } from '@owlmeans/auth-token'
|
|
8
3
|
import { requireEntityKey } from '@owlmeans/auth-common'
|
|
9
4
|
import { handlers } from '@owlmeans/server-api'
|
|
10
5
|
import { mintAccessToken } from '../hash.js'
|
|
11
6
|
import { prefixOf } from '../guard.js'
|
|
12
7
|
import type { AccessTokenResource, AuthTokenContext } from '../types.js'
|
|
13
|
-
import type {
|
|
8
|
+
import type { IssueAccessTokenRequest, IssueAccessTokenSubject } from './types.js'
|
|
14
9
|
|
|
15
10
|
const view = (record: AccessTokenRecord): AccessTokenView => {
|
|
16
11
|
const { hash, ...rest } = record
|
|
@@ -40,24 +35,6 @@ export const refuseTokenAuth = (req: { auth?: { type?: string } }, what: string)
|
|
|
40
35
|
}
|
|
41
36
|
}
|
|
42
37
|
|
|
43
|
-
/** Whoever is minting the token — read once, by whichever caller resolved the session. */
|
|
44
|
-
export interface IssueAccessTokenSubject {
|
|
45
|
-
entityId: string
|
|
46
|
-
userId: string
|
|
47
|
-
profileId: string
|
|
48
|
-
role: AuthRole
|
|
49
|
-
/** The subject's OWN scopes — minting can only narrow, never widen, this set. */
|
|
50
|
-
scopes: string[]
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
export interface IssueAccessTokenRequest extends CreateAccessToken {
|
|
54
|
-
/**
|
|
55
|
-
* The resource(s) this token is FOR (RFC 8707), when it is minted through an OAuth grant.
|
|
56
|
-
* Absent for a token minted by hand — the ordinary, unrestricted kind.
|
|
57
|
-
*/
|
|
58
|
-
audience?: string[]
|
|
59
|
-
}
|
|
60
|
-
|
|
61
38
|
/**
|
|
62
39
|
* Mint one token for `subject`, exactly what `createAccessToken` does over an HTTP body — pulled
|
|
63
40
|
* out so a second caller (an OAuth token endpoint) can mint the SAME shape of record over a
|
|
@@ -150,3 +127,5 @@ export const revokeAccessToken = (protocol: AuthTokenEntrypoints['revoke']) => h
|
|
|
150
127
|
|
|
151
128
|
return { id: payload.id }
|
|
152
129
|
})
|
|
130
|
+
|
|
131
|
+
export type { IssueAccessTokenRequest, IssueAccessTokenSubject } from './types.js'
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AuthRole } from '@owlmeans/auth'
|
|
2
|
+
import type { CreateAccessToken } from '@owlmeans/auth-token'
|
|
3
|
+
|
|
4
|
+
/** Whoever is minting the token — read once, by whichever caller resolved the session. */
|
|
5
|
+
export interface IssueAccessTokenSubject {
|
|
6
|
+
entityId: string
|
|
7
|
+
userId: string
|
|
8
|
+
profileId: string
|
|
9
|
+
role: AuthRole
|
|
10
|
+
/** The subject's OWN scopes — minting can only narrow, never widen, this set. */
|
|
11
|
+
scopes: string[]
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface IssueAccessTokenRequest extends CreateAccessToken {
|
|
15
|
+
/**
|
|
16
|
+
* The resource(s) this token is FOR (RFC 8707), when it is minted through an OAuth grant.
|
|
17
|
+
* Absent for a token minted by hand — the ordinary, unrestricted kind.
|
|
18
|
+
*/
|
|
19
|
+
audience?: string[]
|
|
20
|
+
}
|
package/src/hash.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { AUTH_TOKEN_SECRET_BYTES, displayOf } from '@owlmeans/auth-token'
|
|
2
2
|
import { base58 } from '@scure/base'
|
|
3
|
-
import { sha256 } from '@noble/hashes/
|
|
4
|
-
import { bytesToHex, randomBytes } from '@noble/hashes/utils'
|
|
3
|
+
import { sha256 } from '@noble/hashes/sha2.js'
|
|
4
|
+
import { bytesToHex, randomBytes } from '@noble/hashes/utils.js'
|
|
5
|
+
import type { MintedToken } from './types.js'
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* The stored form of a token.
|
|
@@ -13,12 +14,6 @@ import { bytesToHex, randomBytes } from '@noble/hashes/utils'
|
|
|
13
14
|
*/
|
|
14
15
|
export const hashAccessToken = (token: string): string => bytesToHex(sha256(new TextEncoder().encode(token)))
|
|
15
16
|
|
|
16
|
-
export interface MintedToken {
|
|
17
|
-
token: string
|
|
18
|
-
hash: string
|
|
19
|
-
display: string
|
|
20
|
-
}
|
|
21
|
-
|
|
22
17
|
/** Mint one token: the plaintext (returned once), its hash (stored) and its display form. */
|
|
23
18
|
export const mintAccessToken = (prefix: string): MintedToken => {
|
|
24
19
|
const token = `${prefix}${base58.encode(randomBytes(AUTH_TOKEN_SECRET_BYTES))}`
|
package/src/index.ts
CHANGED
package/src/types.ts
CHANGED