@portel/photon 1.22.0 → 1.23.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/README.md +19 -8
- package/dist/a2ui/mapper.d.ts +40 -0
- package/dist/a2ui/mapper.d.ts.map +1 -0
- package/dist/a2ui/mapper.js +286 -0
- package/dist/a2ui/mapper.js.map +1 -0
- package/dist/a2ui/types.d.ts +129 -0
- package/dist/a2ui/types.d.ts.map +1 -0
- package/dist/a2ui/types.js +20 -0
- package/dist/a2ui/types.js.map +1 -0
- package/dist/ag-ui/adapter.d.ts +9 -1
- package/dist/ag-ui/adapter.d.ts.map +1 -1
- package/dist/ag-ui/adapter.js +33 -16
- package/dist/ag-ui/adapter.js.map +1 -1
- package/dist/auto-ui/beam/routes/api-daemon.d.ts +18 -0
- package/dist/auto-ui/beam/routes/api-daemon.d.ts.map +1 -0
- package/dist/auto-ui/beam/routes/api-daemon.js +118 -0
- package/dist/auto-ui/beam/routes/api-daemon.js.map +1 -0
- package/dist/auto-ui/beam.d.ts.map +1 -1
- package/dist/auto-ui/beam.js +34 -34
- package/dist/auto-ui/beam.js.map +1 -1
- package/dist/auto-ui/bridge/renderers.d.ts.map +1 -1
- package/dist/auto-ui/bridge/renderers.js +371 -0
- package/dist/auto-ui/bridge/renderers.js.map +1 -1
- package/dist/auto-ui/streamable-http-transport.d.ts.map +1 -1
- package/dist/auto-ui/streamable-http-transport.js +38 -1
- package/dist/auto-ui/streamable-http-transport.js.map +1 -1
- package/dist/auto-ui/types.d.ts +19 -0
- package/dist/auto-ui/types.d.ts.map +1 -1
- package/dist/auto-ui/types.js.map +1 -1
- package/dist/beam.bundle.js +757 -107
- package/dist/beam.bundle.js.map +4 -4
- package/dist/cli/commands/beam.d.ts.map +1 -1
- package/dist/cli/commands/beam.js +2 -0
- package/dist/cli/commands/beam.js.map +1 -1
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +2 -0
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +92 -3
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/host.d.ts.map +1 -1
- package/dist/cli/commands/host.js +9 -1
- package/dist/cli/commands/host.js.map +1 -1
- package/dist/cli/commands/info.d.ts.map +1 -1
- package/dist/cli/commands/info.js +7 -3
- package/dist/cli/commands/info.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +4 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/maker.d.ts +8 -0
- package/dist/cli/commands/maker.d.ts.map +1 -1
- package/dist/cli/commands/maker.js +113 -46
- package/dist/cli/commands/maker.js.map +1 -1
- package/dist/cli/commands/marketplace.d.ts.map +1 -1
- package/dist/cli/commands/marketplace.js +7 -1
- package/dist/cli/commands/marketplace.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts +10 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +215 -4
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/package.d.ts.map +1 -1
- package/dist/cli/commands/package.js +33 -15
- package/dist/cli/commands/package.js.map +1 -1
- package/dist/cli/commands/ps.d.ts +16 -0
- package/dist/cli/commands/ps.d.ts.map +1 -0
- package/dist/cli/commands/ps.js +267 -0
- package/dist/cli/commands/ps.js.map +1 -0
- package/dist/cli/commands/run.d.ts.map +1 -1
- package/dist/cli/commands/run.js +7 -0
- package/dist/cli/commands/run.js.map +1 -1
- package/dist/cli/commands/update.d.ts.map +1 -1
- package/dist/cli/commands/update.js +14 -4
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +9 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/context-store.d.ts +4 -4
- package/dist/context-store.d.ts.map +1 -1
- package/dist/context-store.js +20 -17
- package/dist/context-store.js.map +1 -1
- package/dist/context.d.ts +5 -4
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +68 -14
- package/dist/context.js.map +1 -1
- package/dist/daemon/client.d.ts +60 -0
- package/dist/daemon/client.d.ts.map +1 -1
- package/dist/daemon/client.js +76 -0
- package/dist/daemon/client.js.map +1 -1
- package/dist/daemon/execution-history-sqlite.d.ts +50 -0
- package/dist/daemon/execution-history-sqlite.d.ts.map +1 -0
- package/dist/daemon/execution-history-sqlite.js +165 -0
- package/dist/daemon/execution-history-sqlite.js.map +1 -0
- package/dist/daemon/execution-history.d.ts +78 -0
- package/dist/daemon/execution-history.d.ts.map +1 -0
- package/dist/daemon/execution-history.js +246 -0
- package/dist/daemon/execution-history.js.map +1 -0
- package/dist/daemon/hot-reload-state.d.ts +27 -0
- package/dist/daemon/hot-reload-state.d.ts.map +1 -0
- package/dist/daemon/hot-reload-state.js +48 -0
- package/dist/daemon/hot-reload-state.js.map +1 -0
- package/dist/daemon/protocol.d.ts +5 -1
- package/dist/daemon/protocol.d.ts.map +1 -1
- package/dist/daemon/protocol.js +13 -0
- package/dist/daemon/protocol.js.map +1 -1
- package/dist/daemon/registry-keys.d.ts +88 -0
- package/dist/daemon/registry-keys.d.ts.map +1 -0
- package/dist/daemon/registry-keys.js +91 -0
- package/dist/daemon/registry-keys.js.map +1 -0
- package/dist/daemon/server.js +1521 -186
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/session-resolver.d.ts +28 -0
- package/dist/daemon/session-resolver.d.ts.map +1 -0
- package/dist/daemon/session-resolver.js +41 -0
- package/dist/daemon/session-resolver.js.map +1 -0
- package/dist/data-migration.js +20 -9
- package/dist/data-migration.js.map +1 -1
- package/dist/loader.d.ts +22 -8
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +214 -94
- package/dist/loader.js.map +1 -1
- package/dist/marketplace-manager.d.ts.map +1 -1
- package/dist/marketplace-manager.js +9 -5
- package/dist/marketplace-manager.js.map +1 -1
- package/dist/namespace-migration.d.ts.map +1 -1
- package/dist/namespace-migration.js +28 -23
- package/dist/namespace-migration.js.map +1 -1
- package/dist/photon-cli-runner.d.ts.map +1 -1
- package/dist/photon-cli-runner.js +57 -8
- package/dist/photon-cli-runner.js.map +1 -1
- package/dist/serv/auth/auth-store.d.ts +155 -0
- package/dist/serv/auth/auth-store.d.ts.map +1 -0
- package/dist/serv/auth/auth-store.js +240 -0
- package/dist/serv/auth/auth-store.js.map +1 -0
- package/dist/serv/auth/endpoints.d.ts +113 -0
- package/dist/serv/auth/endpoints.d.ts.map +1 -0
- package/dist/serv/auth/endpoints.js +1005 -0
- package/dist/serv/auth/endpoints.js.map +1 -0
- package/dist/serv/auth/http-adapter.d.ts +60 -0
- package/dist/serv/auth/http-adapter.d.ts.map +1 -0
- package/dist/serv/auth/http-adapter.js +235 -0
- package/dist/serv/auth/http-adapter.js.map +1 -0
- package/dist/serv/auth/jwt.d.ts +92 -6
- package/dist/serv/auth/jwt.d.ts.map +1 -1
- package/dist/serv/auth/jwt.js +226 -24
- package/dist/serv/auth/jwt.js.map +1 -1
- package/dist/serv/auth/oauth-sqlite-stores.d.ts +48 -0
- package/dist/serv/auth/oauth-sqlite-stores.d.ts.map +1 -0
- package/dist/serv/auth/oauth-sqlite-stores.js +212 -0
- package/dist/serv/auth/oauth-sqlite-stores.js.map +1 -0
- package/dist/serv/auth/sqlite-stores.d.ts +85 -0
- package/dist/serv/auth/sqlite-stores.d.ts.map +1 -0
- package/dist/serv/auth/sqlite-stores.js +446 -0
- package/dist/serv/auth/sqlite-stores.js.map +1 -0
- package/dist/serv/auth/well-known.d.ts +54 -1
- package/dist/serv/auth/well-known.d.ts.map +1 -1
- package/dist/serv/auth/well-known.js +166 -17
- package/dist/serv/auth/well-known.js.map +1 -1
- package/dist/serv/index.d.ts +45 -2
- package/dist/serv/index.d.ts.map +1 -1
- package/dist/serv/index.js +65 -1
- package/dist/serv/index.js.map +1 -1
- package/dist/serv/types/index.d.ts +80 -0
- package/dist/serv/types/index.d.ts.map +1 -1
- package/dist/serv/types/index.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +61 -6
- package/dist/server.js.map +1 -1
- package/dist/shared/announce-context.d.ts +51 -0
- package/dist/shared/announce-context.d.ts.map +1 -0
- package/dist/shared/announce-context.js +73 -0
- package/dist/shared/announce-context.js.map +1 -0
- package/dist/shared/audit-sqlite.d.ts +63 -0
- package/dist/shared/audit-sqlite.d.ts.map +1 -0
- package/dist/shared/audit-sqlite.js +187 -0
- package/dist/shared/audit-sqlite.js.map +1 -0
- package/dist/shared/audit.d.ts +25 -3
- package/dist/shared/audit.d.ts.map +1 -1
- package/dist/shared/audit.js +97 -3
- package/dist/shared/audit.js.map +1 -1
- package/dist/shared/error-handler.d.ts +10 -1
- package/dist/shared/error-handler.d.ts.map +1 -1
- package/dist/shared/error-handler.js +17 -2
- package/dist/shared/error-handler.js.map +1 -1
- package/dist/shared/security.d.ts +12 -0
- package/dist/shared/security.d.ts.map +1 -1
- package/dist/shared/security.js +80 -0
- package/dist/shared/security.js.map +1 -1
- package/dist/shared/sqlite-runtime.d.ts +46 -0
- package/dist/shared/sqlite-runtime.d.ts.map +1 -0
- package/dist/shared/sqlite-runtime.js +110 -0
- package/dist/shared/sqlite-runtime.js.map +1 -0
- package/dist/tasks/store.d.ts +1 -1
- package/dist/tasks/store.d.ts.map +1 -1
- package/dist/tasks/store.js +29 -15
- package/dist/tasks/store.js.map +1 -1
- package/dist/telemetry/metrics.d.ts +26 -0
- package/dist/telemetry/metrics.d.ts.map +1 -1
- package/dist/telemetry/metrics.js +31 -0
- package/dist/telemetry/metrics.js.map +1 -1
- package/dist/test-runner.d.ts.map +1 -1
- package/dist/test-runner.js +3 -3
- package/dist/test-runner.js.map +1 -1
- package/dist/version-checker.d.ts.map +1 -1
- package/dist/version-checker.js +7 -14
- package/dist/version-checker.js.map +1 -1
- package/dist/version.d.ts +12 -0
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +103 -1
- package/dist/version.js.map +1 -1
- package/package.json +6 -2
- package/templates/photon.template.ts +7 -13
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Authorization Server state stores.
|
|
3
|
+
*
|
|
4
|
+
* Holds the short-lived + persistent state the OAuth 2.1 authorization server
|
|
5
|
+
* needs: authorization codes, refresh tokens, registered clients (DCR),
|
|
6
|
+
* remembered user consents, and in-flight authorization requests that are
|
|
7
|
+
* paused awaiting user consent.
|
|
8
|
+
*
|
|
9
|
+
* In-memory implementations are suitable for single-instance self-host.
|
|
10
|
+
* For multi-instance deployments swap with a shared-store implementation
|
|
11
|
+
* (Redis/D1) that implements the same interfaces.
|
|
12
|
+
*/
|
|
13
|
+
import { randomBytes, createHash, timingSafeEqual } from 'crypto';
|
|
14
|
+
export class MemoryAuthCodeStore {
|
|
15
|
+
codes = new Map();
|
|
16
|
+
async save(code) {
|
|
17
|
+
if (this.codes.has(code.code)) {
|
|
18
|
+
throw new Error('authorization code collision');
|
|
19
|
+
}
|
|
20
|
+
this.codes.set(code.code, code);
|
|
21
|
+
}
|
|
22
|
+
async peek(code) {
|
|
23
|
+
const entry = this.codes.get(code);
|
|
24
|
+
if (!entry)
|
|
25
|
+
return null;
|
|
26
|
+
if (entry.expiresAt.getTime() < Date.now())
|
|
27
|
+
return null;
|
|
28
|
+
return entry;
|
|
29
|
+
}
|
|
30
|
+
async consume(code) {
|
|
31
|
+
const entry = this.codes.get(code);
|
|
32
|
+
if (!entry)
|
|
33
|
+
return null;
|
|
34
|
+
this.codes.delete(code); // single-use: delete even if expired
|
|
35
|
+
if (entry.expiresAt.getTime() < Date.now())
|
|
36
|
+
return null;
|
|
37
|
+
return entry;
|
|
38
|
+
}
|
|
39
|
+
async sweep(now = new Date()) {
|
|
40
|
+
let removed = 0;
|
|
41
|
+
for (const [k, v] of this.codes) {
|
|
42
|
+
if (v.expiresAt.getTime() < now.getTime()) {
|
|
43
|
+
this.codes.delete(k);
|
|
44
|
+
removed++;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return removed;
|
|
48
|
+
}
|
|
49
|
+
size() {
|
|
50
|
+
return this.codes.size;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export class MemoryRefreshTokenStore {
|
|
54
|
+
tokens = new Map();
|
|
55
|
+
async save(token) {
|
|
56
|
+
this.tokens.set(token.token, token);
|
|
57
|
+
}
|
|
58
|
+
async find(token) {
|
|
59
|
+
const entry = this.tokens.get(token);
|
|
60
|
+
if (!entry)
|
|
61
|
+
return null;
|
|
62
|
+
if (entry.expiresAt.getTime() < Date.now())
|
|
63
|
+
return null;
|
|
64
|
+
return entry;
|
|
65
|
+
}
|
|
66
|
+
async rotate(oldToken, newToken) {
|
|
67
|
+
const existing = this.tokens.get(oldToken);
|
|
68
|
+
if (!existing)
|
|
69
|
+
return null;
|
|
70
|
+
if (existing.expiresAt.getTime() < Date.now()) {
|
|
71
|
+
this.tokens.delete(oldToken);
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
this.tokens.delete(oldToken);
|
|
75
|
+
this.tokens.set(newToken.token, newToken);
|
|
76
|
+
return newToken;
|
|
77
|
+
}
|
|
78
|
+
async revoke(token) {
|
|
79
|
+
return this.tokens.delete(token);
|
|
80
|
+
}
|
|
81
|
+
async sweep(now = new Date()) {
|
|
82
|
+
let removed = 0;
|
|
83
|
+
for (const [k, v] of this.tokens) {
|
|
84
|
+
if (v.expiresAt.getTime() < now.getTime()) {
|
|
85
|
+
this.tokens.delete(k);
|
|
86
|
+
removed++;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return removed;
|
|
90
|
+
}
|
|
91
|
+
size() {
|
|
92
|
+
return this.tokens.size;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export class MemoryClientRegistry {
|
|
96
|
+
clients = new Map();
|
|
97
|
+
async save(client) {
|
|
98
|
+
this.clients.set(client.clientId, client);
|
|
99
|
+
}
|
|
100
|
+
async find(clientId) {
|
|
101
|
+
return this.clients.get(clientId) ?? null;
|
|
102
|
+
}
|
|
103
|
+
async touch(clientId, now = new Date()) {
|
|
104
|
+
const entry = this.clients.get(clientId);
|
|
105
|
+
if (entry)
|
|
106
|
+
entry.lastUsedAt = now;
|
|
107
|
+
}
|
|
108
|
+
async delete(clientId) {
|
|
109
|
+
return this.clients.delete(clientId);
|
|
110
|
+
}
|
|
111
|
+
async sweep(maxIdleMs, now = new Date()) {
|
|
112
|
+
let removed = 0;
|
|
113
|
+
const threshold = now.getTime() - maxIdleMs;
|
|
114
|
+
for (const [k, v] of this.clients) {
|
|
115
|
+
if (v.lastUsedAt.getTime() < threshold) {
|
|
116
|
+
this.clients.delete(k);
|
|
117
|
+
removed++;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return removed;
|
|
121
|
+
}
|
|
122
|
+
size() {
|
|
123
|
+
return this.clients.size;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
export class MemoryConsentStore {
|
|
127
|
+
records = new Map();
|
|
128
|
+
key(userId, tenantId, clientId) {
|
|
129
|
+
return `${tenantId}::${userId}::${clientId}`;
|
|
130
|
+
}
|
|
131
|
+
async save(record) {
|
|
132
|
+
const k = this.key(record.userId, record.tenantId, record.clientId);
|
|
133
|
+
this.records.set(k, record);
|
|
134
|
+
}
|
|
135
|
+
async covers(userId, tenantId, clientId, scopes) {
|
|
136
|
+
const k = this.key(userId, tenantId, clientId);
|
|
137
|
+
const entry = this.records.get(k);
|
|
138
|
+
if (!entry)
|
|
139
|
+
return false;
|
|
140
|
+
if (entry.expiresAt.getTime() < Date.now()) {
|
|
141
|
+
this.records.delete(k);
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
const stored = new Set(entry.scopes.split(' ').filter(Boolean));
|
|
145
|
+
return scopes.every((s) => stored.has(s));
|
|
146
|
+
}
|
|
147
|
+
async revoke(userId, tenantId, clientId) {
|
|
148
|
+
return this.records.delete(this.key(userId, tenantId, clientId));
|
|
149
|
+
}
|
|
150
|
+
async sweep(now = new Date()) {
|
|
151
|
+
let removed = 0;
|
|
152
|
+
for (const [k, v] of this.records) {
|
|
153
|
+
if (v.expiresAt.getTime() < now.getTime()) {
|
|
154
|
+
this.records.delete(k);
|
|
155
|
+
removed++;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return removed;
|
|
159
|
+
}
|
|
160
|
+
size() {
|
|
161
|
+
return this.records.size;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
export class MemoryPendingAuthorizationStore {
|
|
165
|
+
pending = new Map();
|
|
166
|
+
async save(req) {
|
|
167
|
+
this.pending.set(req.id, req);
|
|
168
|
+
}
|
|
169
|
+
async peek(id) {
|
|
170
|
+
const entry = this.pending.get(id);
|
|
171
|
+
if (!entry)
|
|
172
|
+
return null;
|
|
173
|
+
if (entry.expiresAt.getTime() < Date.now())
|
|
174
|
+
return null;
|
|
175
|
+
return entry;
|
|
176
|
+
}
|
|
177
|
+
async consume(id) {
|
|
178
|
+
const entry = this.pending.get(id);
|
|
179
|
+
if (!entry)
|
|
180
|
+
return null;
|
|
181
|
+
this.pending.delete(id);
|
|
182
|
+
if (entry.expiresAt.getTime() < Date.now())
|
|
183
|
+
return null;
|
|
184
|
+
return entry;
|
|
185
|
+
}
|
|
186
|
+
async sweep(now = new Date()) {
|
|
187
|
+
let removed = 0;
|
|
188
|
+
for (const [k, v] of this.pending) {
|
|
189
|
+
if (v.expiresAt.getTime() < now.getTime()) {
|
|
190
|
+
this.pending.delete(k);
|
|
191
|
+
removed++;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return removed;
|
|
195
|
+
}
|
|
196
|
+
size() {
|
|
197
|
+
return this.pending.size;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
// ============================================================================
|
|
201
|
+
// Helpers
|
|
202
|
+
// ============================================================================
|
|
203
|
+
/**
|
|
204
|
+
* Generate a URL-safe random string of the given byte-length.
|
|
205
|
+
*/
|
|
206
|
+
export function generateSecureToken(bytes = 32) {
|
|
207
|
+
return randomBytes(bytes).toString('base64url');
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Hash a secret with SHA-256 for storage. Not a password; client_secret
|
|
211
|
+
* is high-entropy and rotated, so sha256 is acceptable and avoids bcrypt's
|
|
212
|
+
* 72-byte limit and pbkdf2's latency on every token request.
|
|
213
|
+
*/
|
|
214
|
+
export function hashClientSecret(secret) {
|
|
215
|
+
return createHash('sha256').update(secret).digest('base64url');
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Timing-safe comparison of a presented secret against a stored hash.
|
|
219
|
+
*/
|
|
220
|
+
export function verifyClientSecret(presented, storedHash) {
|
|
221
|
+
const presentedHash = hashClientSecret(presented);
|
|
222
|
+
const a = Buffer.from(presentedHash);
|
|
223
|
+
const b = Buffer.from(storedHash);
|
|
224
|
+
if (a.length !== b.length)
|
|
225
|
+
return false;
|
|
226
|
+
return timingSafeEqual(a, b);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Normalise a scope string into a sorted, deduped, space-joined key. Used
|
|
230
|
+
* for consent-record keys so `"read write"` and `"write read"` match.
|
|
231
|
+
*/
|
|
232
|
+
export function normalizeScopes(scope) {
|
|
233
|
+
if (!scope)
|
|
234
|
+
return '';
|
|
235
|
+
const parts = scope.split(/\s+/).filter(Boolean);
|
|
236
|
+
const unique = Array.from(new Set(parts));
|
|
237
|
+
unique.sort();
|
|
238
|
+
return unique.join(' ');
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=auth-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-store.js","sourceRoot":"","sources":["../../../src/serv/auth/auth-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AA2BlE,MAAM,OAAO,mBAAmB;IACtB,KAAK,GAAG,IAAI,GAAG,EAA6B,CAAC;IAErD,KAAK,CAAC,IAAI,CAAC,IAAuB;QAChC,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAY;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,qCAAqC;QAC9D,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAY,IAAI,IAAI,EAAE;QAChC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAChC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC1C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACrB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;CACF;AAeD,MAAM,OAAO,uBAAuB;IAC1B,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEjD,KAAK,CAAC,IAAI,CAAC,KAAmB;QAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAa;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,QAAsB;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC1C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAY,IAAI,IAAI,EAAE;QAChC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACjC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC1C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACtB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;CACF;AAgBD,MAAM,OAAO,oBAAoB;IACvB,OAAO,GAAG,IAAI,GAAG,EAA4B,CAAC;IAEtD,KAAK,CAAC,IAAI,CAAC,MAAwB;QACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,QAAgB,EAAE,MAAY,IAAI,IAAI,EAAE;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,KAAK;YAAE,KAAK,CAAC,UAAU,GAAG,GAAG,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,QAAgB;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,SAAiB,EAAE,MAAY,IAAI,IAAI,EAAE;QACnD,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC;QAC5C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,SAAS,EAAE,CAAC;gBACvC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;CACF;AAmBD,MAAM,OAAO,kBAAkB;IACrB,OAAO,GAAG,IAAI,GAAG,EAAyB,CAAC;IAE3C,GAAG,CAAC,MAAc,EAAE,QAAgB,EAAE,QAAgB;QAC5D,OAAO,GAAG,QAAQ,KAAK,MAAM,KAAK,QAAQ,EAAE,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,MAAqB;QAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,MAAM,CACV,MAAc,EACd,QAAgB,EAChB,QAAgB,EAChB,MAAgB;QAEhB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc,EAAE,QAAgB,EAAE,QAAgB;QAC7D,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAY,IAAI,IAAI,EAAE;QAChC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;CACF;AA4CD,MAAM,OAAO,+BAA+B;IAClC,OAAO,GAAG,IAAI,GAAG,EAAgC,CAAC;IAE1D,KAAK,CAAC,IAAI,CAAC,GAAyB;QAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAU;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACxB,IAAI,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAY,IAAI,IAAI,EAAE;QAChC,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC1C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACvB,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;CACF;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAK,GAAG,EAAE;IAC5C,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAClD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB,EAAE,UAAkB;IACtE,MAAM,aAAa,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,OAAO,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,KAAgC;IAC9D,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1C,MAAM,CAAC,IAAI,EAAE,CAAC;IACd,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OAuth 2.1 Authorization Server HTTP handlers.
|
|
3
|
+
*
|
|
4
|
+
* Pure functions (no HTTP framework coupling): each handler takes an
|
|
5
|
+
* `AuthRequest` describing the inbound HTTP request, plus a `Deps` object
|
|
6
|
+
* with the stores it needs, and returns an `AuthResponse` `{status, headers, body}`.
|
|
7
|
+
*
|
|
8
|
+
* The HTTP-framework adapter (Express/Fetch/Cloudflare Worker) is responsible
|
|
9
|
+
* for parsing the request, authenticating the user session (if any), and
|
|
10
|
+
* translating the response back to its native HTTP primitive.
|
|
11
|
+
*
|
|
12
|
+
* Implements:
|
|
13
|
+
* - `/authorize` — RFC 6749 §4.1 authorization code grant (PKCE required)
|
|
14
|
+
* - `/token` — RFC 6749 §4.1.3 / §6 / §4.4 (code, refresh, client_credentials)
|
|
15
|
+
* - `/register` — RFC 7591 dynamic client registration
|
|
16
|
+
* - `/consent` — HTML consent screen + POST approve/deny
|
|
17
|
+
*
|
|
18
|
+
* CIMD (HTTPS client_id) is resolved via `resolveClientMetadata` from
|
|
19
|
+
* `./well-known.js`. Both CIMD and DCR clients are accepted at `/authorize`
|
|
20
|
+
* and `/token`; `/register` writes DCR-only.
|
|
21
|
+
*/
|
|
22
|
+
import type { Tenant } from '../types/index.js';
|
|
23
|
+
import type { AuthCodeStore, RefreshTokenStore, ClientRegistry, ConsentStore, PendingAuthorizationStore } from './auth-store.js';
|
|
24
|
+
import { JwtService } from './jwt.js';
|
|
25
|
+
import { CimdCache } from './well-known.js';
|
|
26
|
+
export interface AuthRequest {
|
|
27
|
+
method: string;
|
|
28
|
+
url: string;
|
|
29
|
+
headers: Record<string, string | string[] | undefined>;
|
|
30
|
+
/** Raw body for POST — form-urlencoded or JSON depending on endpoint. */
|
|
31
|
+
body?: string;
|
|
32
|
+
/**
|
|
33
|
+
* Resolved authenticated user id. The HTTP adapter fills this in from
|
|
34
|
+
* its session middleware before invoking the handler. `undefined` means
|
|
35
|
+
* no valid session; `/authorize` will redirect to login.
|
|
36
|
+
*/
|
|
37
|
+
userId?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface AuthResponse {
|
|
40
|
+
status: number;
|
|
41
|
+
headers: Record<string, string>;
|
|
42
|
+
body: string;
|
|
43
|
+
}
|
|
44
|
+
export interface EndpointConfig {
|
|
45
|
+
/** Absolute base URL of this AS; used for `iss` claim + building login redirect. */
|
|
46
|
+
issuer: string;
|
|
47
|
+
/** Absolute URL of this AS's `/authorize` endpoint; used for login return_to. */
|
|
48
|
+
authorizeUrl: string;
|
|
49
|
+
/** Absolute URL of this AS's `/consent` endpoint. */
|
|
50
|
+
consentUrl: string;
|
|
51
|
+
/** Absolute URL of the login/federated-auth entry point. */
|
|
52
|
+
loginUrl: string;
|
|
53
|
+
/** First-party clients that bypass the consent screen. */
|
|
54
|
+
firstPartyClientIds: Set<string>;
|
|
55
|
+
/** Default scopes granted if client omits scope parameter. */
|
|
56
|
+
defaultScopes: string[];
|
|
57
|
+
/** Consent-record TTL. Default 30 days. */
|
|
58
|
+
consentTtlDays: number;
|
|
59
|
+
/** Authorization code TTL in seconds. Default 60 per RFC 6749. */
|
|
60
|
+
codeTtlSeconds: number;
|
|
61
|
+
/** Access-token TTL in seconds. Default 15 min. */
|
|
62
|
+
accessTokenTtlSeconds: number;
|
|
63
|
+
/** Refresh-token TTL in seconds. Default 30 days. */
|
|
64
|
+
refreshTokenTtlSeconds: number;
|
|
65
|
+
/** Pending-authorization TTL in seconds. Default 10 min. */
|
|
66
|
+
pendingTtlSeconds: number;
|
|
67
|
+
/** DCR client idle-TTL in milliseconds. Default 30 days. */
|
|
68
|
+
clientIdleTtlMs: number;
|
|
69
|
+
/** PHOTON_SINGLE_USER self-host mode: always treat caller as this user id. */
|
|
70
|
+
singleUserId?: string;
|
|
71
|
+
}
|
|
72
|
+
export declare const DEFAULT_ENDPOINT_CONFIG: Omit<EndpointConfig, 'issuer' | 'authorizeUrl' | 'consentUrl' | 'loginUrl'>;
|
|
73
|
+
export interface EndpointDeps {
|
|
74
|
+
tenant: Tenant;
|
|
75
|
+
config: EndpointConfig;
|
|
76
|
+
codeStore: AuthCodeStore;
|
|
77
|
+
refreshTokenStore: RefreshTokenStore;
|
|
78
|
+
clientRegistry: ClientRegistry;
|
|
79
|
+
consentStore: ConsentStore;
|
|
80
|
+
pendingStore: PendingAuthorizationStore;
|
|
81
|
+
jwtService: JwtService;
|
|
82
|
+
cimdCache: CimdCache;
|
|
83
|
+
/** Optional override for testing. */
|
|
84
|
+
now?: () => Date;
|
|
85
|
+
/** Optional logger hook. */
|
|
86
|
+
log?: (level: 'info' | 'warn' | 'error', msg: string, meta?: Record<string, unknown>) => void;
|
|
87
|
+
}
|
|
88
|
+
export declare function handleAuthorize(req: AuthRequest, deps: EndpointDeps): Promise<AuthResponse>;
|
|
89
|
+
export declare function handleConsent(req: AuthRequest, deps: EndpointDeps): Promise<AuthResponse>;
|
|
90
|
+
export declare function handleToken(req: AuthRequest, deps: EndpointDeps): Promise<AuthResponse>;
|
|
91
|
+
export declare function handleRegister(req: AuthRequest, deps: EndpointDeps): Promise<AuthResponse>;
|
|
92
|
+
/**
|
|
93
|
+
* Token revocation endpoint per RFC 7009.
|
|
94
|
+
*
|
|
95
|
+
* Accepts `token` + `token_type_hint` (access_token|refresh_token).
|
|
96
|
+
* Always returns 200 even if the token didn't exist (spec §2.2 — prevents
|
|
97
|
+
* token scanning). Access tokens are JWTs so we can't actively revoke them
|
|
98
|
+
* without a denylist; we revoke the refresh token and rely on the 15-min
|
|
99
|
+
* access-token TTL for cleanup.
|
|
100
|
+
*/
|
|
101
|
+
export declare function handleRevoke(req: AuthRequest, deps: EndpointDeps): Promise<AuthResponse>;
|
|
102
|
+
/**
|
|
103
|
+
* Token introspection endpoint per RFC 7662.
|
|
104
|
+
*
|
|
105
|
+
* Accepts `token` and returns metadata: active (boolean), scope, client_id,
|
|
106
|
+
* sub, exp, iat. Returns `{active: false}` for unknown/expired/revoked
|
|
107
|
+
* tokens without leaking why.
|
|
108
|
+
*
|
|
109
|
+
* Caller must be an authenticated confidential client (§2.1 — "protected
|
|
110
|
+
* resource"); this prevents arbitrary callers from probing token validity.
|
|
111
|
+
*/
|
|
112
|
+
export declare function handleIntrospect(req: AuthRequest, deps: EndpointDeps): Promise<AuthResponse>;
|
|
113
|
+
//# sourceMappingURL=endpoints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoints.d.ts","sourceRoot":"","sources":["../../../src/serv/auth/endpoints.ts"],"names":[],"mappings":"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"}
|