@frontmcp/auth 0.0.1 → 0.8.1

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.
Files changed (81) hide show
  1. package/README.md +11 -0
  2. package/authorization/authorization.types.d.ts +236 -0
  3. package/authorization/authorization.types.d.ts.map +1 -0
  4. package/authorization/index.d.ts +9 -0
  5. package/authorization/index.d.ts.map +1 -0
  6. package/cimd/cimd-redis.cache.d.ts +111 -0
  7. package/cimd/cimd-redis.cache.d.ts.map +1 -0
  8. package/cimd/cimd.cache.d.ts +200 -0
  9. package/cimd/cimd.cache.d.ts.map +1 -0
  10. package/cimd/cimd.errors.d.ts +124 -0
  11. package/cimd/cimd.errors.d.ts.map +1 -0
  12. package/cimd/cimd.logger.d.ts +39 -0
  13. package/cimd/cimd.logger.d.ts.map +1 -0
  14. package/cimd/cimd.service.d.ts +88 -0
  15. package/cimd/cimd.service.d.ts.map +1 -0
  16. package/cimd/cimd.types.d.ts +178 -0
  17. package/cimd/cimd.types.d.ts.map +1 -0
  18. package/cimd/cimd.validator.d.ts +49 -0
  19. package/cimd/cimd.validator.d.ts.map +1 -0
  20. package/cimd/index.d.ts +17 -0
  21. package/cimd/index.d.ts.map +1 -0
  22. package/esm/index.mjs +4001 -0
  23. package/esm/package.json +59 -0
  24. package/index.d.ts +44 -0
  25. package/index.d.ts.map +1 -0
  26. package/index.js +4131 -0
  27. package/jwks/dev-key-persistence.d.ts +70 -0
  28. package/jwks/dev-key-persistence.d.ts.map +1 -0
  29. package/jwks/index.d.ts +20 -0
  30. package/jwks/index.d.ts.map +1 -0
  31. package/jwks/jwks.service.d.ts +69 -0
  32. package/jwks/jwks.service.d.ts.map +1 -0
  33. package/jwks/jwks.types.d.ts +33 -0
  34. package/jwks/jwks.types.d.ts.map +1 -0
  35. package/jwks/jwks.utils.d.ts +5 -0
  36. package/jwks/jwks.utils.d.ts.map +1 -0
  37. package/package.json +2 -2
  38. package/session/authorization-vault.d.ts +667 -0
  39. package/session/authorization-vault.d.ts.map +1 -0
  40. package/session/authorization.store.d.ts +311 -0
  41. package/session/authorization.store.d.ts.map +1 -0
  42. package/session/index.d.ts +19 -0
  43. package/session/index.d.ts.map +1 -0
  44. package/session/storage/in-memory-authorization-vault.d.ts +53 -0
  45. package/session/storage/in-memory-authorization-vault.d.ts.map +1 -0
  46. package/session/storage/index.d.ts +17 -0
  47. package/session/storage/index.d.ts.map +1 -0
  48. package/session/storage/storage-authorization-vault.d.ts +107 -0
  49. package/session/storage/storage-authorization-vault.d.ts.map +1 -0
  50. package/session/storage/storage-token-store.d.ts +92 -0
  51. package/session/storage/storage-token-store.d.ts.map +1 -0
  52. package/session/token.store.d.ts +39 -0
  53. package/session/token.store.d.ts.map +1 -0
  54. package/session/token.vault.d.ts +33 -0
  55. package/session/token.vault.d.ts.map +1 -0
  56. package/session/utils/index.d.ts +5 -0
  57. package/session/utils/index.d.ts.map +1 -0
  58. package/session/utils/tiny-ttl-cache.d.ts +20 -0
  59. package/session/utils/tiny-ttl-cache.d.ts.map +1 -0
  60. package/session/vault-encryption.d.ts +190 -0
  61. package/session/vault-encryption.d.ts.map +1 -0
  62. package/ui/base-layout.d.ts +170 -0
  63. package/ui/base-layout.d.ts.map +1 -0
  64. package/ui/index.d.ts +10 -0
  65. package/ui/index.d.ts.map +1 -0
  66. package/ui/templates.d.ts +134 -0
  67. package/ui/templates.d.ts.map +1 -0
  68. package/utils/audience.validator.d.ts +130 -0
  69. package/utils/audience.validator.d.ts.map +1 -0
  70. package/utils/index.d.ts +8 -0
  71. package/utils/index.d.ts.map +1 -0
  72. package/utils/www-authenticate.utils.d.ts +98 -0
  73. package/utils/www-authenticate.utils.d.ts.map +1 -0
  74. package/vault/auth-providers.types.d.ts +262 -0
  75. package/vault/auth-providers.types.d.ts.map +1 -0
  76. package/vault/credential-cache.d.ts +98 -0
  77. package/vault/credential-cache.d.ts.map +1 -0
  78. package/vault/credential-helpers.d.ts +14 -0
  79. package/vault/credential-helpers.d.ts.map +1 -0
  80. package/vault/index.d.ts +10 -0
  81. package/vault/index.d.ts.map +1 -0
@@ -0,0 +1,311 @@
1
+ /**
2
+ * Authorization Store for OAuth flows
3
+ *
4
+ * Stores authorization codes, PKCE challenges, and pending authorizations.
5
+ * Supports both in-memory (dev/test) and Redis (production) backends.
6
+ */
7
+ import { z } from 'zod';
8
+ /**
9
+ * PKCE challenge data
10
+ */
11
+ export interface PkceChallenge {
12
+ /** S256 hashed code_challenge */
13
+ challenge: string;
14
+ /** Always 'S256' per OAuth 2.1 */
15
+ method: 'S256';
16
+ }
17
+ /**
18
+ * Authorization code record stored during the OAuth flow
19
+ */
20
+ export interface AuthorizationCodeRecord {
21
+ /** The authorization code (opaque string) */
22
+ code: string;
23
+ /** Client ID that requested authorization */
24
+ clientId: string;
25
+ /** Redirect URI used in the authorization request */
26
+ redirectUri: string;
27
+ /** Requested scopes */
28
+ scopes: string[];
29
+ /** PKCE challenge for verification */
30
+ pkce: PkceChallenge;
31
+ /** User identifier (sub claim) */
32
+ userSub: string;
33
+ /** User email if available */
34
+ userEmail?: string;
35
+ /** User name if available */
36
+ userName?: string;
37
+ /** Original state parameter */
38
+ state?: string;
39
+ /** Creation timestamp (epoch ms) */
40
+ createdAt: number;
41
+ /** Expiration timestamp (epoch ms) - codes are short-lived (60s default) */
42
+ expiresAt: number;
43
+ /** Whether this code has been used (single-use) */
44
+ used: boolean;
45
+ /** Resource/audience the token will be issued for */
46
+ resource?: string;
47
+ /** Selected tool IDs from consent flow */
48
+ selectedToolIds?: string[];
49
+ /** Selected provider IDs from federated login */
50
+ selectedProviderIds?: string[];
51
+ /** Skipped provider IDs from federated login (for progressive auth) */
52
+ skippedProviderIds?: string[];
53
+ /** Whether consent was enabled for this authorization */
54
+ consentEnabled?: boolean;
55
+ /** Whether federated login was used */
56
+ federatedLoginUsed?: boolean;
57
+ /** Pending auth ID for token migration (federated login) */
58
+ pendingAuthId?: string;
59
+ }
60
+ /**
61
+ * Consent state for tool selection
62
+ */
63
+ export interface ConsentStateRecord {
64
+ /** Whether consent flow is enabled */
65
+ enabled: boolean;
66
+ /** Available tool IDs for consent */
67
+ availableToolIds: string[];
68
+ /** Selected tool IDs (after user selection) */
69
+ selectedToolIds?: string[];
70
+ /** Whether consent has been completed */
71
+ consentCompleted: boolean;
72
+ /** Timestamp when consent was completed */
73
+ consentCompletedAt?: number;
74
+ }
75
+ /**
76
+ * Federated login state for multi-provider auth
77
+ */
78
+ export interface FederatedLoginStateRecord {
79
+ /** Available provider IDs */
80
+ providerIds: string[];
81
+ /** Selected provider IDs */
82
+ selectedProviderIds?: string[];
83
+ /** Skipped provider IDs */
84
+ skippedProviderIds?: string[];
85
+ /** Provider-specific user data (after auth) */
86
+ providerUserData?: Record<string, {
87
+ email?: string;
88
+ name?: string;
89
+ sub?: string;
90
+ }>;
91
+ }
92
+ /**
93
+ * Pending authorization request (before user authenticates)
94
+ */
95
+ export interface PendingAuthorizationRecord {
96
+ /** Unique ID for this pending authorization */
97
+ id: string;
98
+ /** Client ID requesting authorization */
99
+ clientId: string;
100
+ /** Redirect URI for callback */
101
+ redirectUri: string;
102
+ /** Requested scopes */
103
+ scopes: string[];
104
+ /** PKCE challenge */
105
+ pkce: PkceChallenge;
106
+ /** Original state parameter from client */
107
+ state?: string;
108
+ /** Resource/audience */
109
+ resource?: string;
110
+ /** Creation timestamp */
111
+ createdAt: number;
112
+ /** Expiration timestamp (pending requests expire after 10 minutes) */
113
+ expiresAt: number;
114
+ /** Whether this is an incremental authorization request */
115
+ isIncremental?: boolean;
116
+ /** Target app ID for incremental authorization */
117
+ targetAppId?: string;
118
+ /** Target tool ID that triggered the incremental auth */
119
+ targetToolId?: string;
120
+ /** Existing session ID for incremental auth (to expand the token vault) */
121
+ existingSessionId?: string;
122
+ /** Existing authorization ID to expand */
123
+ existingAuthorizationId?: string;
124
+ /** Federated login state for multi-provider auth */
125
+ federatedLogin?: FederatedLoginStateRecord;
126
+ /** Consent state for tool selection */
127
+ consent?: ConsentStateRecord;
128
+ }
129
+ /**
130
+ * Refresh token record
131
+ */
132
+ export interface RefreshTokenRecord {
133
+ /** The refresh token (opaque string) */
134
+ token: string;
135
+ /** Client ID */
136
+ clientId: string;
137
+ /** User identifier */
138
+ userSub: string;
139
+ /** Granted scopes */
140
+ scopes: string[];
141
+ /** Resource/audience */
142
+ resource?: string;
143
+ /** Creation timestamp */
144
+ createdAt: number;
145
+ /** Expiration timestamp */
146
+ expiresAt: number;
147
+ /** Whether this token has been revoked */
148
+ revoked: boolean;
149
+ /** Previous token if rotated */
150
+ previousToken?: string;
151
+ }
152
+ /**
153
+ * Zod schemas for validation
154
+ */
155
+ export declare const pkceChallengeSchema: z.ZodObject<{
156
+ challenge: z.ZodString;
157
+ method: z.ZodLiteral<"S256">;
158
+ }, z.core.$strip>;
159
+ export declare const authorizationCodeRecordSchema: z.ZodObject<{
160
+ code: z.ZodString;
161
+ clientId: z.ZodString;
162
+ redirectUri: z.ZodString;
163
+ scopes: z.ZodArray<z.ZodString>;
164
+ pkce: z.ZodObject<{
165
+ challenge: z.ZodString;
166
+ method: z.ZodLiteral<"S256">;
167
+ }, z.core.$strip>;
168
+ userSub: z.ZodString;
169
+ userEmail: z.ZodOptional<z.ZodString>;
170
+ userName: z.ZodOptional<z.ZodString>;
171
+ state: z.ZodOptional<z.ZodString>;
172
+ createdAt: z.ZodNumber;
173
+ expiresAt: z.ZodNumber;
174
+ used: z.ZodBoolean;
175
+ resource: z.ZodOptional<z.ZodString>;
176
+ selectedToolIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
177
+ selectedProviderIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
178
+ skippedProviderIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
179
+ consentEnabled: z.ZodOptional<z.ZodBoolean>;
180
+ federatedLoginUsed: z.ZodOptional<z.ZodBoolean>;
181
+ pendingAuthId: z.ZodOptional<z.ZodString>;
182
+ }, z.core.$strip>;
183
+ /**
184
+ * Authorization Store Interface
185
+ */
186
+ export interface AuthorizationStore {
187
+ storeAuthorizationCode(record: AuthorizationCodeRecord): Promise<void>;
188
+ getAuthorizationCode(code: string): Promise<AuthorizationCodeRecord | null>;
189
+ markCodeUsed(code: string): Promise<void>;
190
+ deleteAuthorizationCode(code: string): Promise<void>;
191
+ storePendingAuthorization(record: PendingAuthorizationRecord): Promise<void>;
192
+ getPendingAuthorization(id: string): Promise<PendingAuthorizationRecord | null>;
193
+ deletePendingAuthorization(id: string): Promise<void>;
194
+ storeRefreshToken(record: RefreshTokenRecord): Promise<void>;
195
+ getRefreshToken(token: string): Promise<RefreshTokenRecord | null>;
196
+ revokeRefreshToken(token: string): Promise<void>;
197
+ rotateRefreshToken(oldToken: string, newRecord: RefreshTokenRecord): Promise<void>;
198
+ generateCode(): string;
199
+ generateRefreshToken(): string;
200
+ cleanup(): Promise<void>;
201
+ }
202
+ /**
203
+ * PKCE utilities
204
+ */
205
+ export declare function verifyPkce(codeVerifier: string, challenge: PkceChallenge): boolean;
206
+ export declare function generatePkceChallenge(codeVerifier: string): PkceChallenge;
207
+ /**
208
+ * In-Memory Authorization Store
209
+ *
210
+ * Development/testing implementation. Data is lost on restart.
211
+ * For production, use RedisAuthorizationStore.
212
+ */
213
+ export declare class InMemoryAuthorizationStore implements AuthorizationStore {
214
+ private codes;
215
+ private pending;
216
+ private refreshTokens;
217
+ /** Default TTL for authorization codes (60 seconds) */
218
+ private readonly codeTtlMs;
219
+ /** Default TTL for pending authorizations (10 minutes) */
220
+ private readonly pendingTtlMs;
221
+ /** Default TTL for refresh tokens (30 days) */
222
+ private readonly refreshTtlMs;
223
+ generateCode(): string;
224
+ generateRefreshToken(): string;
225
+ storeAuthorizationCode(record: AuthorizationCodeRecord): Promise<void>;
226
+ getAuthorizationCode(code: string): Promise<AuthorizationCodeRecord | null>;
227
+ markCodeUsed(code: string): Promise<void>;
228
+ deleteAuthorizationCode(code: string): Promise<void>;
229
+ storePendingAuthorization(record: PendingAuthorizationRecord): Promise<void>;
230
+ getPendingAuthorization(id: string): Promise<PendingAuthorizationRecord | null>;
231
+ deletePendingAuthorization(id: string): Promise<void>;
232
+ storeRefreshToken(record: RefreshTokenRecord): Promise<void>;
233
+ getRefreshToken(token: string): Promise<RefreshTokenRecord | null>;
234
+ revokeRefreshToken(token: string): Promise<void>;
235
+ rotateRefreshToken(oldToken: string, newRecord: RefreshTokenRecord): Promise<void>;
236
+ cleanup(): Promise<void>;
237
+ /**
238
+ * Create an authorization code record with defaults
239
+ */
240
+ createCodeRecord(params: {
241
+ clientId: string;
242
+ redirectUri: string;
243
+ scopes: string[];
244
+ pkce: PkceChallenge;
245
+ userSub: string;
246
+ userEmail?: string;
247
+ userName?: string;
248
+ state?: string;
249
+ resource?: string;
250
+ selectedToolIds?: string[];
251
+ selectedProviderIds?: string[];
252
+ skippedProviderIds?: string[];
253
+ consentEnabled?: boolean;
254
+ federatedLoginUsed?: boolean;
255
+ pendingAuthId?: string;
256
+ }): AuthorizationCodeRecord;
257
+ /**
258
+ * Create a pending authorization record with defaults
259
+ */
260
+ createPendingRecord(params: {
261
+ clientId: string;
262
+ redirectUri: string;
263
+ scopes: string[];
264
+ pkce: PkceChallenge;
265
+ state?: string;
266
+ resource?: string;
267
+ isIncremental?: boolean;
268
+ targetAppId?: string;
269
+ targetToolId?: string;
270
+ existingSessionId?: string;
271
+ existingAuthorizationId?: string;
272
+ federatedLogin?: FederatedLoginStateRecord;
273
+ consent?: ConsentStateRecord;
274
+ }): PendingAuthorizationRecord;
275
+ /**
276
+ * Create a refresh token record with defaults
277
+ */
278
+ createRefreshTokenRecord(params: {
279
+ clientId: string;
280
+ userSub: string;
281
+ scopes: string[];
282
+ resource?: string;
283
+ }): RefreshTokenRecord;
284
+ }
285
+ /**
286
+ * Redis Authorization Store (placeholder)
287
+ *
288
+ * Production implementation using Redis for distributed storage.
289
+ * TODO: Implement after in-memory store is validated.
290
+ */
291
+ export declare class RedisAuthorizationStore implements AuthorizationStore {
292
+ private readonly redis;
293
+ private readonly namespace;
294
+ constructor(redis: any, namespace?: string);
295
+ private key;
296
+ generateCode(): string;
297
+ generateRefreshToken(): string;
298
+ storeAuthorizationCode(record: AuthorizationCodeRecord): Promise<void>;
299
+ getAuthorizationCode(code: string): Promise<AuthorizationCodeRecord | null>;
300
+ markCodeUsed(code: string): Promise<void>;
301
+ deleteAuthorizationCode(code: string): Promise<void>;
302
+ storePendingAuthorization(record: PendingAuthorizationRecord): Promise<void>;
303
+ getPendingAuthorization(id: string): Promise<PendingAuthorizationRecord | null>;
304
+ deletePendingAuthorization(id: string): Promise<void>;
305
+ storeRefreshToken(record: RefreshTokenRecord): Promise<void>;
306
+ getRefreshToken(token: string): Promise<RefreshTokenRecord | null>;
307
+ revokeRefreshToken(token: string): Promise<void>;
308
+ rotateRefreshToken(oldToken: string, newRecord: RefreshTokenRecord): Promise<void>;
309
+ cleanup(): Promise<void>;
310
+ }
311
+ //# sourceMappingURL=authorization.store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization.store.d.ts","sourceRoot":"","sources":["../../src/session/authorization.store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Session Module
3
+ *
4
+ * Provides session management, credential storage, and encryption.
5
+ */
6
+ export { InMemoryAuthorizationStore, RedisAuthorizationStore, verifyPkce, generatePkceChallenge, pkceChallengeSchema, authorizationCodeRecordSchema, } from './authorization.store';
7
+ export type { AuthorizationStore, PkceChallenge, AuthorizationCodeRecord, PendingAuthorizationRecord, RefreshTokenRecord, ConsentStateRecord, FederatedLoginStateRecord, } from './authorization.store';
8
+ export { credentialTypeSchema, oauthCredentialSchema, apiKeyCredentialSchema, basicAuthCredentialSchema, bearerCredentialSchema, privateKeyCredentialSchema, mtlsCredentialSchema, customCredentialSchema, sshKeyCredentialSchema, serviceAccountCredentialSchema, pkceOAuthCredentialSchema, credentialSchema, appCredentialSchema, vaultConsentRecordSchema, vaultFederatedRecordSchema, pendingIncrementalAuthSchema, authorizationVaultEntrySchema, } from './authorization-vault';
9
+ export type { CredentialType, OAuthCredential, ApiKeyCredential, BasicAuthCredential, BearerCredential, PrivateKeyCredential, MtlsCredential, CustomCredential, SshKeyCredential, ServiceAccountCredential, PkceOAuthCredential, Credential, AppCredential, VaultConsentRecord, VaultFederatedRecord, PendingIncrementalAuth, AuthorizationVaultEntry, AuthorizationVault, } from './authorization-vault';
10
+ export { encryptedDataSchema, encryptedVaultEntrySchema, VaultEncryption } from './vault-encryption';
11
+ export type { EncryptedData, VaultKeyDerivationClaims, VaultEncryptionConfig, EncryptedVaultEntry, VaultSensitiveData, } from './vault-encryption';
12
+ export { TokenVault } from './token.vault';
13
+ export type { EncBlob, VaultKey } from './token.vault';
14
+ export type { SecretRecord, TokenStore } from './token.store';
15
+ export { hkdfSha256, encryptValue, decryptValue, encryptAesGcm, decryptAesGcm, type EncryptedBlob, } from '@frontmcp/utils';
16
+ export { TinyTtlCache } from './utils';
17
+ export { TypedStorage, EncryptedTypedStorage, EncryptedStorageError, StorageTokenStore, StorageAuthorizationVault, InMemoryAuthorizationVault, } from './storage';
18
+ export type { TypedStorageOptions, TypedSetOptions, TypedSetEntry, EncryptedTypedStorageOptions, EncryptedSetOptions, EncryptedSetEntry, EncryptionKey, StoredEncryptedBlob, ClientKeyBinding, StorageTokenStoreOptions, StorageAuthorizationVaultOptions, InMemoryAuthorizationVaultOptions, } from './storage';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAEL,0BAA0B,EAC1B,uBAAuB,EAEvB,UAAU,EACV,qBAAqB,EAErB,mBAAmB,EACnB,6BAA6B,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAEV,kBAAkB,EAClB,aAAa,EACb,uBAAuB,EACvB,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAEL,oBAAoB,EACpB,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,EAC9B,yBAAyB,EACzB,gBAAgB,EAEhB,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrG,YAAY,EACV,aAAa,EACb,wBAAwB,EACxB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGvD,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,EACL,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,KAAK,aAAa,GACnB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAGvC,OAAO,EACL,YAAY,EACZ,qBAAqB,EACrB,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,4BAA4B,EAC5B,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,gCAAgC,EAChC,iCAAiC,GAClC,MAAM,WAAW,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * In-Memory Authorization Vault
3
+ *
4
+ * Development/testing implementation using MemoryStorageAdapter.
5
+ * Data is lost on restart.
6
+ *
7
+ * For production, use StorageAuthorizationVault with a persistent
8
+ * storage adapter (Redis, Vercel KV, Upstash, etc.).
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * const vault = new InMemoryAuthorizationVault();
13
+ * const entry = await vault.create({
14
+ * userSub: 'user123',
15
+ * clientId: 'client456',
16
+ * });
17
+ * ```
18
+ */
19
+ import { StorageAuthorizationVault } from './storage-authorization-vault';
20
+ /**
21
+ * Options for InMemoryAuthorizationVault
22
+ */
23
+ export interface InMemoryAuthorizationVaultOptions {
24
+ /**
25
+ * Namespace prefix for all keys.
26
+ * @default 'vault'
27
+ */
28
+ namespace?: string;
29
+ /**
30
+ * Default TTL for pending auth requests in milliseconds.
31
+ * @default 600000 (10 minutes)
32
+ */
33
+ pendingAuthTtlMs?: number;
34
+ }
35
+ /**
36
+ * In-Memory Authorization Vault
37
+ *
38
+ * Development/testing implementation using MemoryStorageAdapter.
39
+ * Data is lost on restart.
40
+ *
41
+ * For production, use StorageAuthorizationVault with a persistent
42
+ * storage adapter (Redis, Vercel KV, Upstash, etc.).
43
+ */
44
+ export declare class InMemoryAuthorizationVault extends StorageAuthorizationVault {
45
+ private readonly memoryAdapter;
46
+ constructor(options?: InMemoryAuthorizationVaultOptions);
47
+ /**
48
+ * Clear all stored data.
49
+ * Useful for testing.
50
+ */
51
+ clear(): Promise<void>;
52
+ }
53
+ //# sourceMappingURL=in-memory-authorization-vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory-authorization-vault.d.ts","sourceRoot":"","sources":["../../../src/session/storage/in-memory-authorization-vault.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,iCAAiC;IAChD;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,qBAAa,0BAA2B,SAAQ,yBAAyB;IACvE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAuB;gBAEzC,OAAO,GAAE,iCAAsC;IAY3D;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAM7B"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Storage Module
3
+ *
4
+ * Storage-adapter-backed implementations of TokenStore and AuthorizationVault.
5
+ * Uses @frontmcp/utils/storage for unified backend support (Memory, Redis, Vercel KV, Upstash).
6
+ */
7
+ export { TypedStorage } from '@frontmcp/utils';
8
+ export type { TypedStorageOptions, TypedSetOptions, TypedSetEntry } from '@frontmcp/utils';
9
+ export { EncryptedTypedStorage, EncryptedStorageError } from '@frontmcp/utils';
10
+ export type { EncryptedTypedStorageOptions, EncryptedSetOptions, EncryptedSetEntry, EncryptionKey, StoredEncryptedBlob, ClientKeyBinding, } from '@frontmcp/utils';
11
+ export { StorageTokenStore } from './storage-token-store';
12
+ export type { StorageTokenStoreOptions } from './storage-token-store';
13
+ export { StorageAuthorizationVault } from './storage-authorization-vault';
14
+ export type { StorageAuthorizationVaultOptions } from './storage-authorization-vault';
15
+ export { InMemoryAuthorizationVault } from './in-memory-authorization-vault';
16
+ export type { InMemoryAuthorizationVaultOptions } from './in-memory-authorization-vault';
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/session/storage/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,YAAY,EAAE,mBAAmB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAG3F,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,YAAY,EACV,4BAA4B,EAC5B,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAGtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,YAAY,EAAE,gCAAgC,EAAE,MAAM,+BAA+B,CAAC;AAGtF,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAC7E,YAAY,EAAE,iCAAiC,EAAE,MAAM,iCAAiC,CAAC"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * StorageAuthorizationVault
3
+ *
4
+ * AuthorizationVault implementation backed by @frontmcp/utils/storage adapters.
5
+ * Supports Memory, Redis, Vercel KV, and Upstash backends.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { createStorage } from '@frontmcp/utils/storage';
10
+ * import { StorageAuthorizationVault } from '@frontmcp/auth';
11
+ *
12
+ * const storage = await createStorage({ type: 'auto' });
13
+ * const vault = new StorageAuthorizationVault(storage);
14
+ *
15
+ * const entry = await vault.create({
16
+ * userSub: 'user123',
17
+ * clientId: 'client456',
18
+ * });
19
+ * ```
20
+ */
21
+ import type { StorageAdapter, NamespacedStorage } from '@frontmcp/utils';
22
+ import type { AuthorizationVault, AuthorizationVaultEntry, AppCredential, VaultConsentRecord, VaultFederatedRecord, PendingIncrementalAuth } from '../authorization-vault';
23
+ /**
24
+ * Options for StorageAuthorizationVault
25
+ */
26
+ export interface StorageAuthorizationVaultOptions {
27
+ /**
28
+ * Namespace prefix for all keys.
29
+ * @default 'vault'
30
+ */
31
+ namespace?: string;
32
+ /**
33
+ * Default TTL for pending auth requests in milliseconds.
34
+ * @default 600000 (10 minutes)
35
+ */
36
+ pendingAuthTtlMs?: number;
37
+ /**
38
+ * Whether to validate entries with Zod schema on read.
39
+ * @default false
40
+ */
41
+ validateOnRead?: boolean;
42
+ }
43
+ /**
44
+ * AuthorizationVault implementation using StorageAdapter.
45
+ *
46
+ * Stores complete AuthorizationVaultEntry documents as JSON blobs.
47
+ * Supports all AuthorizationVault interface methods.
48
+ */
49
+ export declare class StorageAuthorizationVault implements AuthorizationVault {
50
+ private readonly storage;
51
+ private readonly namespace;
52
+ private readonly pendingAuthTtlMs;
53
+ constructor(storage: StorageAdapter | NamespacedStorage, options?: StorageAuthorizationVaultOptions);
54
+ create(params: {
55
+ userSub: string;
56
+ userEmail?: string;
57
+ userName?: string;
58
+ clientId: string;
59
+ consent?: VaultConsentRecord;
60
+ federated?: VaultFederatedRecord;
61
+ authorizedAppIds?: string[];
62
+ skippedAppIds?: string[];
63
+ }): Promise<AuthorizationVaultEntry>;
64
+ get(id: string): Promise<AuthorizationVaultEntry | null>;
65
+ update(id: string, updates: Partial<AuthorizationVaultEntry>): Promise<void>;
66
+ delete(id: string): Promise<void>;
67
+ updateConsent(vaultId: string, consent: VaultConsentRecord): Promise<void>;
68
+ authorizeApp(vaultId: string, appId: string): Promise<void>;
69
+ isAppAuthorized(vaultId: string, appId: string): Promise<boolean>;
70
+ createPendingAuth(vaultId: string, params: {
71
+ appId: string;
72
+ toolId?: string;
73
+ authUrl: string;
74
+ requiredScopes?: string[];
75
+ elicitId?: string;
76
+ ttlMs?: number;
77
+ }): Promise<PendingIncrementalAuth>;
78
+ getPendingAuth(vaultId: string, pendingAuthId: string): Promise<PendingIncrementalAuth | null>;
79
+ completePendingAuth(vaultId: string, pendingAuthId: string): Promise<void>;
80
+ cancelPendingAuth(vaultId: string, pendingAuthId: string): Promise<void>;
81
+ getPendingAuths(vaultId: string): Promise<PendingIncrementalAuth[]>;
82
+ private credentialKey;
83
+ addAppCredential(vaultId: string, credential: AppCredential): Promise<void>;
84
+ removeAppCredential(vaultId: string, appId: string, providerId: string): Promise<void>;
85
+ getAppCredentials(vaultId: string, appId: string): Promise<AppCredential[]>;
86
+ getCredential(vaultId: string, appId: string, providerId: string): Promise<AppCredential | null>;
87
+ getAllCredentials(vaultId: string, filterByConsent?: boolean): Promise<AppCredential[]>;
88
+ updateCredential(vaultId: string, appId: string, providerId: string, updates: Partial<Pick<AppCredential, 'lastUsedAt' | 'isValid' | 'invalidReason' | 'expiresAt' | 'metadata'>>): Promise<void>;
89
+ shouldStoreCredential(vaultId: string, appId: string, toolIds?: string[]): Promise<boolean>;
90
+ invalidateCredential(vaultId: string, appId: string, providerId: string, reason: string): Promise<void>;
91
+ refreshOAuthCredential(vaultId: string, appId: string, providerId: string, tokens: {
92
+ accessToken: string;
93
+ refreshToken?: string;
94
+ expiresAt?: number;
95
+ }): Promise<void>;
96
+ cleanup(): Promise<void>;
97
+ /**
98
+ * Build the storage key for a vault ID.
99
+ * For non-namespaced storage, includes the namespace prefix.
100
+ */
101
+ private key;
102
+ /**
103
+ * Type guard to check if storage is a NamespacedStorage.
104
+ */
105
+ private isNamespacedStorage;
106
+ }
107
+ //# sourceMappingURL=storage-authorization-vault.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-authorization-vault.d.ts","sourceRoot":"","sources":["../../../src/session/storage/storage-authorization-vault.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * StorageTokenStore
3
+ *
4
+ * TokenStore implementation backed by @frontmcp/utils/storage adapters.
5
+ * Supports Memory, Redis, Vercel KV, and Upstash backends.
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * import { createStorage } from '@frontmcp/utils/storage';
10
+ * import { StorageTokenStore } from '@frontmcp/auth';
11
+ *
12
+ * const storage = await createStorage({ type: 'auto' });
13
+ * const tokenStore = new StorageTokenStore(storage);
14
+ *
15
+ * const id = tokenStore.allocId();
16
+ * await tokenStore.put(id, encryptedBlob);
17
+ * const record = await tokenStore.get(id);
18
+ * ```
19
+ */
20
+ import type { StorageAdapter, NamespacedStorage } from '@frontmcp/utils';
21
+ import type { TokenStore, SecretRecord } from '../token.store';
22
+ import type { EncBlob } from '../token.vault';
23
+ /**
24
+ * Options for StorageTokenStore
25
+ */
26
+ export interface StorageTokenStoreOptions {
27
+ /**
28
+ * Namespace prefix for all keys.
29
+ * @default 'tok'
30
+ */
31
+ namespace?: string;
32
+ /**
33
+ * Default TTL in seconds when not derived from blob.exp.
34
+ * If not set and blob.exp is not present, no TTL is applied.
35
+ */
36
+ defaultTtlSeconds?: number;
37
+ }
38
+ /**
39
+ * TokenStore implementation using StorageAdapter.
40
+ *
41
+ * Uses the blob's `exp` field (epoch seconds) to calculate TTL for automatic
42
+ * expiration in the underlying storage backend.
43
+ */
44
+ export declare class StorageTokenStore implements TokenStore {
45
+ private readonly storage;
46
+ private readonly namespace;
47
+ private readonly defaultTtlSeconds?;
48
+ /** Track if original storage was namespaced to avoid double-prefixing */
49
+ private readonly storageIsNamespaced;
50
+ constructor(storage: StorageAdapter | NamespacedStorage, options?: StorageTokenStoreOptions);
51
+ /**
52
+ * Allocate a new unique ID for a token record.
53
+ */
54
+ allocId(): string;
55
+ /**
56
+ * Store an encrypted token blob.
57
+ *
58
+ * TTL is calculated from blob.exp (epoch seconds) if present.
59
+ * Falls back to defaultTtlSeconds if configured.
60
+ *
61
+ * @param id - Token record ID
62
+ * @param blob - Encrypted token blob
63
+ */
64
+ put(id: string, blob: EncBlob): Promise<void>;
65
+ /**
66
+ * Retrieve a token record by ID.
67
+ *
68
+ * @param id - Token record ID
69
+ * @returns The secret record, or undefined if not found
70
+ */
71
+ get(id: string): Promise<SecretRecord | undefined>;
72
+ /**
73
+ * Delete a token record.
74
+ *
75
+ * @param id - Token record ID
76
+ */
77
+ del(id: string): Promise<void>;
78
+ /**
79
+ * Calculate TTL in seconds from expiration timestamp.
80
+ *
81
+ * @param exp - Expiration timestamp in epoch seconds
82
+ * @returns TTL in seconds, or undefined if no TTL should be applied
83
+ */
84
+ private calculateTtl;
85
+ /**
86
+ * Build the storage key for a token ID.
87
+ * For namespaced storage, the namespace is handled by the storage layer.
88
+ * For non-namespaced storage, includes the namespace prefix in the key.
89
+ */
90
+ private key;
91
+ }
92
+ //# sourceMappingURL=storage-token-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-token-store.d.ts","sourceRoot":"","sources":["../../../src/session/storage/storage-token-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AACH,qBAAa,iBAAkB,YAAW,UAAU;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAS;IAC5C,yEAAyE;IACzE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAU;gBAElC,OAAO,EAAE,cAAc,GAAG,iBAAiB,EAAE,OAAO,GAAE,wBAA6B;IAe/F;;OAEG;IACH,OAAO,IAAI,MAAM;IAIjB;;;;;;;;OAQG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAWnD;;;;;OAKG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAKxD;;;;OAIG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpC;;;;;OAKG;IACH,OAAO,CAAC,YAAY;IAUpB;;;;OAIG;IACH,OAAO,CAAC,GAAG;CAGZ"}