@absolutejs/auth 0.65.1 → 0.65.2

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 (260) hide show
  1. package/dist/abuse/captcha.d.ts +11 -0
  2. package/dist/abuse/config.d.ts +29 -0
  3. package/dist/actions.d.ts +27 -0
  4. package/dist/adaptive/config.d.ts +34 -0
  5. package/dist/adaptive/fingerprint.d.ts +2 -0
  6. package/dist/adaptive/inMemoryStores.d.ts +3 -0
  7. package/dist/adaptive/postgresStores.d.ts +245 -0
  8. package/dist/adaptive/types.d.ts +62 -0
  9. package/dist/agents/config.d.ts +49 -0
  10. package/dist/agents/context.d.ts +46 -0
  11. package/dist/agents/idJag.d.ts +49 -0
  12. package/dist/agents/inMemoryStores.d.ts +4 -0
  13. package/dist/agents/index.d.ts +13 -0
  14. package/dist/agents/oauthGuide.d.ts +18 -0
  15. package/dist/agents/oidcAdapter.d.ts +20 -0
  16. package/dist/agents/postgresStores.d.ts +1176 -0
  17. package/dist/agents/principal.d.ts +4 -0
  18. package/dist/agents/registration.d.ts +162 -0
  19. package/dist/agents/registrationClient.d.ts +50 -0
  20. package/dist/agents/routes.d.ts +256 -0
  21. package/dist/agents/types.d.ts +129 -0
  22. package/dist/apikeys/config.d.ts +64 -0
  23. package/dist/apikeys/inMemoryStores.d.ts +4 -0
  24. package/dist/apikeys/postgresStores.d.ts +359 -0
  25. package/dist/apikeys/routes.d.ts +83 -0
  26. package/dist/apikeys/types.d.ts +53 -0
  27. package/dist/audit/config.d.ts +9 -0
  28. package/dist/audit/export.d.ts +2 -0
  29. package/dist/audit/inMemoryAuditStore.d.ts +2 -0
  30. package/dist/audit/integrity.d.ts +19 -0
  31. package/dist/audit/postgresAuditStore.d.ts +116 -0
  32. package/dist/audit/siem.d.ts +11 -0
  33. package/dist/audit/types.d.ts +21 -0
  34. package/dist/audit/wrap.d.ts +11 -0
  35. package/dist/authContext.d.ts +193 -0
  36. package/dist/authorization/config.d.ts +19 -0
  37. package/dist/authorization/protectPermission.d.ts +52 -0
  38. package/dist/cli/import/auth0.d.ts +2 -0
  39. package/dist/cli/import/clerk.d.ts +2 -0
  40. package/dist/cli/import/index.d.ts +10 -0
  41. package/dist/cli/import/lucia.d.ts +2 -0
  42. package/dist/cli/import/nextauth.d.ts +2 -0
  43. package/dist/cli/import/supabase.d.ts +2 -0
  44. package/dist/cli/import/types.d.ts +27 -0
  45. package/dist/cli/migrate.d.ts +2 -0
  46. package/dist/client/components/react/SignIn.d.ts +32 -0
  47. package/dist/client/components/react/SignUp.d.ts +29 -0
  48. package/dist/client/components/react/UserButton.d.ts +36 -0
  49. package/dist/client/createAuthClient.d.ts +285 -0
  50. package/dist/client/index.d.ts +4 -0
  51. package/dist/client/passkeyHelpers.d.ts +19 -0
  52. package/dist/client/react.d.ts +87 -0
  53. package/dist/client/sessionExpiry.d.ts +37 -0
  54. package/dist/client/solid.d.ts +86 -0
  55. package/dist/client/svelte.d.ts +86 -0
  56. package/dist/client/vue.d.ts +88 -0
  57. package/dist/compliance/cipher.d.ts +11 -0
  58. package/dist/compliance/config.d.ts +18 -0
  59. package/dist/compliance/redaction.d.ts +8 -0
  60. package/dist/compliance/routes.d.ts +89 -0
  61. package/dist/constants.d.ts +10 -0
  62. package/dist/credentials/backgroundOps.d.ts +45 -0
  63. package/dist/credentials/config.d.ts +94 -0
  64. package/dist/credentials/emailValidation.d.ts +9 -0
  65. package/dist/credentials/emailVerification.d.ts +83 -0
  66. package/dist/credentials/import.d.ts +49 -0
  67. package/dist/credentials/inMemoryCredentialStore.d.ts +2 -0
  68. package/dist/credentials/legacyHashers.d.ts +3 -0
  69. package/dist/credentials/login.d.ts +76 -0
  70. package/dist/credentials/passwordPolicy.d.ts +15 -0
  71. package/dist/credentials/passwordReset.d.ts +87 -0
  72. package/dist/credentials/postgresCredentialStore.d.ts +235 -0
  73. package/dist/credentials/register.d.ts +54 -0
  74. package/dist/credentials/routes.d.ts +201 -0
  75. package/dist/credentials/types.d.ts +26 -0
  76. package/dist/crypto.d.ts +32 -0
  77. package/dist/csrf.d.ts +10 -0
  78. package/dist/errors.d.ts +12 -0
  79. package/dist/federation/tokenStore.d.ts +29 -0
  80. package/dist/fga/config.d.ts +53 -0
  81. package/dist/fga/inMemoryStores.d.ts +3 -0
  82. package/dist/fga/postgresStores.d.ts +116 -0
  83. package/dist/fga/redisCheckCache.d.ts +11 -0
  84. package/dist/fga/schema.d.ts +2 -0
  85. package/dist/fga/types.d.ts +28 -0
  86. package/dist/fingerprint-client/index.d.ts +26 -0
  87. package/dist/htmx/configuredRoutes.d.ts +542 -0
  88. package/dist/htmx/index.d.ts +2 -0
  89. package/dist/htmx/renderers.d.ts +8 -0
  90. package/dist/htmx/routes.d.ts +514 -0
  91. package/dist/htmx/types.d.ts +129 -0
  92. package/dist/index.d.ts +3647 -0
  93. package/dist/linkedProviders/inMemoryStores.d.ts +9 -0
  94. package/dist/linkedProviders/index.d.ts +3 -0
  95. package/dist/linkedProviders/neonStores.d.ts +484 -0
  96. package/dist/linkedProviders/oauthAccountResolver.d.ts +28 -0
  97. package/dist/linkedProviders/oauthResolver.d.ts +9 -0
  98. package/dist/linkedProviders/resolver.d.ts +22 -0
  99. package/dist/lockout/config.d.ts +17 -0
  100. package/dist/lockout/inMemoryLockoutStore.d.ts +2 -0
  101. package/dist/lockout/postgresLockoutStore.d.ts +71 -0
  102. package/dist/lockout/redisLockoutStore.d.ts +3 -0
  103. package/dist/lockout/types.d.ts +12 -0
  104. package/dist/manifest.d.ts +18 -0
  105. package/dist/manifest.json +373 -0
  106. package/dist/mfa/backupCodes.d.ts +5 -0
  107. package/dist/mfa/challenge.d.ts +72 -0
  108. package/dist/mfa/config.d.ts +59 -0
  109. package/dist/mfa/gate.d.ts +2 -0
  110. package/dist/mfa/inMemoryMfaStore.d.ts +2 -0
  111. package/dist/mfa/management.d.ts +106 -0
  112. package/dist/mfa/postgresMfaStore.d.ts +266 -0
  113. package/dist/mfa/recentAuth.d.ts +2 -0
  114. package/dist/mfa/rotation.d.ts +17 -0
  115. package/dist/mfa/routes.d.ts +239 -0
  116. package/dist/mfa/secret.d.ts +2 -0
  117. package/dist/mfa/sms.d.ts +143 -0
  118. package/dist/mfa/totp.d.ts +91 -0
  119. package/dist/mfa/types.d.ts +58 -0
  120. package/dist/migrations/generate.d.ts +2 -0
  121. package/dist/migrations/index.d.ts +6 -0
  122. package/dist/migrations/runner.d.ts +22 -0
  123. package/dist/migrations/types.d.ts +14 -0
  124. package/dist/oidc/clientAuth.d.ts +19 -0
  125. package/dist/oidc/clientIdMetadata.d.ts +28 -0
  126. package/dist/oidc/config.d.ts +307 -0
  127. package/dist/oidc/dpop.d.ts +23 -0
  128. package/dist/oidc/inMemoryStores.d.ts +11 -0
  129. package/dist/oidc/inMemoryVciStores.d.ts +3 -0
  130. package/dist/oidc/index.d.ts +12 -0
  131. package/dist/oidc/jar.d.ts +14 -0
  132. package/dist/oidc/keys.d.ts +50 -0
  133. package/dist/oidc/logout.d.ts +38 -0
  134. package/dist/oidc/mtls.d.ts +11 -0
  135. package/dist/oidc/operator.d.ts +14 -0
  136. package/dist/oidc/par.d.ts +28 -0
  137. package/dist/oidc/postgresStores.d.ts +1217 -0
  138. package/dist/oidc/registration.d.ts +138 -0
  139. package/dist/oidc/routes.d.ts +569 -0
  140. package/dist/oidc/types.d.ts +157 -0
  141. package/dist/oidc/userinfo.d.ts +21 -0
  142. package/dist/oidc/vci.d.ts +159 -0
  143. package/dist/oidc/vciRoutes.d.ts +92 -0
  144. package/dist/organizations/config.d.ts +46 -0
  145. package/dist/organizations/inMemoryOrganizationStore.d.ts +2 -0
  146. package/dist/organizations/operations.d.ts +39 -0
  147. package/dist/organizations/postgresOrganizationStore.d.ts +340 -0
  148. package/dist/organizations/routes.d.ts +299 -0
  149. package/dist/organizations/types.d.ts +45 -0
  150. package/dist/passwordless/config.d.ts +43 -0
  151. package/dist/passwordless/inMemoryPasswordlessTokenStore.d.ts +2 -0
  152. package/dist/passwordless/postgresPasswordlessTokenStore.d.ts +56 -0
  153. package/dist/passwordless/routes.d.ts +163 -0
  154. package/dist/passwordless/types.d.ts +9 -0
  155. package/dist/pluginIdentity.d.ts +2 -0
  156. package/dist/plugins/denyDisposableEmail.d.ts +7 -0
  157. package/dist/plugins/discordAlert.d.ts +7 -0
  158. package/dist/plugins/geoBlock.d.ts +8 -0
  159. package/dist/plugins/index.d.ts +12 -0
  160. package/dist/plugins/pagerdutyAlert.d.ts +9 -0
  161. package/dist/plugins/posthogIdentify.d.ts +7 -0
  162. package/dist/plugins/slackAlert.d.ts +7 -0
  163. package/dist/portal/config.d.ts +34 -0
  164. package/dist/portal/inMemorySetupSessionStore.d.ts +2 -0
  165. package/dist/portal/operations.d.ts +10 -0
  166. package/dist/portal/postgresSetupSessionStore.d.ts +116 -0
  167. package/dist/portal/routes.d.ts +160 -0
  168. package/dist/portal/types.d.ts +16 -0
  169. package/dist/providers/clients.d.ts +1831 -0
  170. package/dist/providers/index.d.ts +2 -0
  171. package/dist/providersFromEnv.d.ts +19 -0
  172. package/dist/redirect.d.ts +2 -0
  173. package/dist/roles/config.d.ts +27 -0
  174. package/dist/roles/inMemoryRoleStore.d.ts +2 -0
  175. package/dist/roles/operations.d.ts +8 -0
  176. package/dist/roles/postgresRoleStore.d.ts +86 -0
  177. package/dist/roles/resolver.d.ts +17 -0
  178. package/dist/roles/routes.d.ts +106 -0
  179. package/dist/roles/types.d.ts +14 -0
  180. package/dist/routes/authorize.d.ts +102 -0
  181. package/dist/routes/callback.d.ts +64 -0
  182. package/dist/routes/profile.d.ts +73 -0
  183. package/dist/routes/protectRoute.d.ts +51 -0
  184. package/dist/routes/refresh.d.ts +74 -0
  185. package/dist/routes/requireAuth.d.ts +43 -0
  186. package/dist/routes/revoke.d.ts +73 -0
  187. package/dist/routes/sessions.d.ts +103 -0
  188. package/dist/routes/signout.d.ts +70 -0
  189. package/dist/routes/stepUp.d.ts +48 -0
  190. package/dist/routes/userStatus.d.ts +72 -0
  191. package/dist/saml.d.ts +1 -0
  192. package/dist/scim/config.d.ts +57 -0
  193. package/dist/scim/extensions.d.ts +30 -0
  194. package/dist/scim/inMemoryScimTokenStore.d.ts +2 -0
  195. package/dist/scim/postgresScimTokenStore.d.ts +86 -0
  196. package/dist/scim/routes.d.ts +366 -0
  197. package/dist/scim/serialize.d.ts +83 -0
  198. package/dist/scim/types.d.ts +54 -0
  199. package/dist/server.d.ts +34 -0
  200. package/dist/session/access.d.ts +33 -0
  201. package/dist/session/anonymous.d.ts +12 -0
  202. package/dist/session/cleanup.d.ts +45 -0
  203. package/dist/session/cookieReader.d.ts +10 -0
  204. package/dist/session/impersonation.d.ts +34 -0
  205. package/dist/session/inMemoryStore.d.ts +7 -0
  206. package/dist/session/multiSession.d.ts +27 -0
  207. package/dist/session/neonStore.d.ts +573 -0
  208. package/dist/session/promote.d.ts +23 -0
  209. package/dist/session/redisStore.d.ts +6 -0
  210. package/dist/session/sessionsConfig.d.ts +9 -0
  211. package/dist/session/state.d.ts +33 -0
  212. package/dist/session/types.d.ts +23 -0
  213. package/dist/session/userSessions.d.ts +19 -0
  214. package/dist/sso/config.d.ts +149 -0
  215. package/dist/sso/discoveryRoute.d.ts +63 -0
  216. package/dist/sso/inMemorySamlServiceProviderStore.d.ts +2 -0
  217. package/dist/sso/inMemorySsoConnectionStore.d.ts +2 -0
  218. package/dist/sso/nodeSamlAdapter.d.ts +8 -0
  219. package/dist/sso/oidcRoutes.d.ts +98 -0
  220. package/dist/sso/postgresSamlServiceProviderStore.d.ts +101 -0
  221. package/dist/sso/postgresSsoConnectionStore.d.ts +117 -0
  222. package/dist/sso/samlIdpRoutes.d.ts +139 -0
  223. package/dist/sso/samlRoutes.d.ts +179 -0
  224. package/dist/sso/types.d.ts +53 -0
  225. package/dist/stores/postgres.d.ts +5 -0
  226. package/dist/stores/redis.d.ts +5 -0
  227. package/dist/telemetry/tracing.d.ts +15 -0
  228. package/dist/tenancy.d.ts +9 -0
  229. package/dist/typeGuards.d.ts +6 -0
  230. package/dist/typebox.d.ts +4 -0
  231. package/dist/types.d.ts +431 -0
  232. package/dist/utils.d.ts +45 -0
  233. package/dist/vault/config.d.ts +20 -0
  234. package/dist/vault/inMemoryVaultStore.d.ts +2 -0
  235. package/dist/vault/index.d.ts +5 -0
  236. package/dist/vault/postgresVaultStore.d.ts +86 -0
  237. package/dist/vault/types.d.ts +14 -0
  238. package/dist/vc/inMemoryVpStores.d.ts +2 -0
  239. package/dist/vc/openid4vp.d.ts +82 -0
  240. package/dist/vc/postgresVcStores.d.ts +300 -0
  241. package/dist/vc/sdJwt.d.ts +37 -0
  242. package/dist/vc/statusList.d.ts +29 -0
  243. package/dist/vc/statusListRoutes.d.ts +63 -0
  244. package/dist/vc/vpRoutes.d.ts +120 -0
  245. package/dist/verification/types.d.ts +58 -0
  246. package/dist/webauthn/adapter.d.ts +59 -0
  247. package/dist/webauthn/config.d.ts +36 -0
  248. package/dist/webauthn/inMemoryWebAuthnCredentialStore.d.ts +2 -0
  249. package/dist/webauthn/postgresWebAuthnCredentialStore.d.ts +146 -0
  250. package/dist/webauthn/routes.d.ts +155 -0
  251. package/dist/webauthn/simpleWebAuthnAdapter.d.ts +3 -0
  252. package/dist/webauthn/types.d.ts +17 -0
  253. package/dist/webauthn.d.ts +1 -0
  254. package/dist/webhooks/config.d.ts +34 -0
  255. package/dist/webhooks/dispatcher.d.ts +3 -0
  256. package/dist/webhooks/inMemoryStore.d.ts +2 -0
  257. package/dist/webhooks/postgresStore.d.ts +116 -0
  258. package/dist/webhooks/sign.d.ts +11 -0
  259. package/dist/webhooks/types.d.ts +25 -0
  260. package/package.json +1 -1
@@ -0,0 +1,4 @@
1
+ import type { AgentAuthConfig } from './config';
2
+ import type { AgentPrincipal } from './types';
3
+ export declare const agentHasScopes: (principal: AgentPrincipal | undefined, requiredScopes: string[]) => boolean;
4
+ export declare const resolveAgentPrincipal: (request: Request, config: AgentAuthConfig) => Promise<AgentPrincipal | undefined>;
@@ -0,0 +1,162 @@
1
+ import type { AccessTokenStore } from '../apikeys/types';
2
+ import { type SigningKey } from '../oidc/keys';
3
+ import type { RouteString } from '../types';
4
+ import type { AgentAuthConfig, AgentRegistrationDiscoveryMetadata } from './config';
5
+ import type { AgentIdentityRegistration, AgentIdentityRegistrationKind, AgentIdentityRegistrationStore, VerifiedAgentIdentityAssertion } from './types';
6
+ export declare const AGENT_CLAIM_GRANT_TYPE: "urn:workos:agent-auth:grant-type:claim";
7
+ export declare const AGENT_IDENTITY_ASSERTION_GRANT_TYPE: "urn:ietf:params:oauth:grant-type:jwt-bearer";
8
+ export declare const AGENT_IDENTITY_ASSERTION_TYPE: "urn:ietf:params:oauth:token-type:id-jag";
9
+ export type AgentRegistrationAuthenticatedUser = {
10
+ email?: string;
11
+ userId: string;
12
+ };
13
+ export type AgentRegistrationProtocolConfig = {
14
+ accessTokenStore: AccessTokenStore;
15
+ allowAnonymous?: boolean;
16
+ allowServiceAuth?: boolean;
17
+ assertionTtlMs?: number;
18
+ attemptTtlMs?: number;
19
+ claimRoute?: RouteString;
20
+ claimTtlMs?: number;
21
+ completeRoute?: RouteString;
22
+ guideRoute?: RouteString;
23
+ identityRoute?: RouteString;
24
+ identityStore: AgentIdentityRegistrationStore;
25
+ maxAuthenticationAgeMs?: number;
26
+ maxCodeAttempts?: number;
27
+ pollIntervalSeconds?: number;
28
+ postClaimScopes: string[];
29
+ preClaimScopes?: string[];
30
+ resolveAuthenticatedUser: (request: Request) => Promise<AgentRegistrationAuthenticatedUser | undefined>;
31
+ /** Match a cryptographically verified upstream identity to local state. A
32
+ * userId permits immediate registration; omitting it requires a user claim. */
33
+ resolveVerifiedIdentity?: (identity: VerifiedAgentIdentityAssertion) => Promise<{
34
+ userId?: string;
35
+ } | undefined>;
36
+ /** Bulk-revokes access tokens for an agent. Required for anonymous
37
+ * registration and recommended for immediate cleanup on any revocation. It
38
+ * must be idempotent because atomic state updates may be retried. */
39
+ revokeAccessTokens?: (agentId: string) => Promise<void>;
40
+ signingKey: SigningKey;
41
+ tokenTtlMs?: number;
42
+ verifyIdentityAssertion?: (assertion: string) => Promise<VerifiedAgentIdentityAssertion | undefined>;
43
+ };
44
+ export type AgentRegistrationEndpoints = {
45
+ claimEndpoint: string;
46
+ completeEndpoint: string;
47
+ guide: string;
48
+ identityEndpoint: string;
49
+ tokenEndpoint: string;
50
+ };
51
+ export declare const agentRegistrationDiscoveryMetadata: (config: AgentAuthConfig) => AgentRegistrationDiscoveryMetadata;
52
+ export declare const agentRegistrationEndpoints: (config: AgentAuthConfig) => AgentRegistrationEndpoints;
53
+ /** Generates the agent-readable companion document. Endpoint URLs and support
54
+ * flags come from the same structured configuration used for discovery, so the
55
+ * prose cannot silently drift from the authorization server metadata. */
56
+ export declare const generateAgentRegistrationGuide: (config: AgentAuthConfig) => string;
57
+ declare const createFlow: ({ agentId, kind, loginHint, now, registration, status, upstream, userId, withAttempt }: {
58
+ agentId: string;
59
+ kind: AgentIdentityRegistrationKind;
60
+ loginHint?: string;
61
+ now: number;
62
+ registration: AgentRegistrationProtocolConfig;
63
+ status: AgentIdentityRegistration["status"];
64
+ upstream?: AgentIdentityRegistration["upstream"];
65
+ userId?: string;
66
+ withAttempt?: string;
67
+ }) => Promise<{
68
+ attempt: {
69
+ attempt: {
70
+ attempts: number;
71
+ email: string;
72
+ expiresAt: number;
73
+ tokenHash: string;
74
+ userCodeHash: string;
75
+ };
76
+ attemptToken: string;
77
+ expiresAt: number;
78
+ userCode: string;
79
+ } | undefined;
80
+ claimToken: string;
81
+ flow: AgentIdentityRegistration;
82
+ }>;
83
+ export declare const issueAgentServiceAssertion: (config: AgentAuthConfig, flow: AgentIdentityRegistration, now?: number) => Promise<{
84
+ assertion: string;
85
+ expiresAt: number;
86
+ }>;
87
+ declare const ceremony: (config: AgentAuthConfig, flow: AgentIdentityRegistration, attempt: NonNullable<Awaited<ReturnType<typeof createFlow>>["attempt"]>) => {
88
+ expires_in: number;
89
+ interval: number;
90
+ user_code: string;
91
+ verification_uri: string;
92
+ };
93
+ export type StartAgentRegistrationInput = {
94
+ type: 'anonymous';
95
+ } | {
96
+ loginHint: string;
97
+ type: 'service_auth';
98
+ } | {
99
+ assertion: string;
100
+ assertionType: typeof AGENT_IDENTITY_ASSERTION_TYPE;
101
+ type: 'identity_assertion';
102
+ };
103
+ export type StartAgentRegistrationResult = {
104
+ error: string;
105
+ message?: string;
106
+ status: 400 | 401 | 403;
107
+ } | {
108
+ assertionExpires: number;
109
+ claim?: ReturnType<typeof ceremony>;
110
+ claimToken?: string;
111
+ claimTokenExpires?: number;
112
+ identityAssertion?: string;
113
+ preClaimScopes?: string[];
114
+ postClaimScopes: string[];
115
+ registrationId: string;
116
+ registrationType: AgentIdentityRegistrationKind;
117
+ status: 200;
118
+ };
119
+ export declare const startAgentRegistration: (config: AgentAuthConfig, input: StartAgentRegistrationInput, now?: number) => Promise<StartAgentRegistrationResult>;
120
+ export type BeginAgentClaimResult = {
121
+ error: 'claim_expired' | 'invalid_claim_token';
122
+ status: 400;
123
+ } | {
124
+ error: 'concurrent_update';
125
+ status: 409;
126
+ } | {
127
+ claimAttempt: ReturnType<typeof ceremony>;
128
+ status: 200;
129
+ };
130
+ export declare const beginAgentClaim: (config: AgentAuthConfig, input: {
131
+ claimToken: string;
132
+ email: string;
133
+ }, now?: number) => Promise<BeginAgentClaimResult>;
134
+ export type CompleteAgentClaimResult = {
135
+ error: 'claim_expired' | 'concurrent_update' | 'invalid_claim_attempt' | 'user_code_invalid' | 'wrong_user';
136
+ status: 400 | 403 | 409 | 429;
137
+ } | {
138
+ status: 204;
139
+ };
140
+ export declare const completeAgentClaim: (config: AgentAuthConfig, input: {
141
+ attemptToken: string;
142
+ request: Request;
143
+ userCode: string;
144
+ }, now?: number) => Promise<CompleteAgentClaimResult>;
145
+ export type AgentTokenGrantResult = {
146
+ body: Record<string, unknown>;
147
+ status: 200;
148
+ } | {
149
+ body: {
150
+ error: string;
151
+ };
152
+ status: 400;
153
+ };
154
+ export declare const createAgentRegistrationCredentialVerifier: (accessTokenStore: AccessTokenStore, identityStore?: AgentIdentityRegistrationStore) => (request: Request) => Promise<{
155
+ agentId: string;
156
+ expiresAt: number;
157
+ scopes: string[];
158
+ userId: string | undefined;
159
+ } | undefined>;
160
+ export declare const handleAgentTokenGrant: (config: AgentAuthConfig, body: Record<string, string | undefined>, now?: number) => Promise<AgentTokenGrantResult | undefined>;
161
+ export declare const revokeAgentIdentityRegistration: (config: AgentAuthConfig, registrationId: string, now?: number) => Promise<boolean>;
162
+ export {};
@@ -0,0 +1,50 @@
1
+ type JsonObject = Record<string, unknown>;
2
+ export type DiscoveredAgentRegistration = {
3
+ agentAuth: {
4
+ claimEndpoint: string;
5
+ identityAssertionTypes: string[];
6
+ identityEndpoint: string;
7
+ identityTypes: string[];
8
+ skill: string;
9
+ };
10
+ authorizationServer: string;
11
+ resource: string;
12
+ resourceMetadataUrl: string;
13
+ scopes: string[];
14
+ tokenEndpoint: string;
15
+ };
16
+ export type AgentRegistrationClientOptions = {
17
+ allowInsecureLocalhost?: boolean;
18
+ maxResponseBytes?: number;
19
+ request?: typeof fetch;
20
+ };
21
+ /** Discovers agent registration using RFC 9728 followed by RFC 8414. Network
22
+ * policy is injected through `request`; redirects are rejected by default. */
23
+ export declare const createAgentRegistrationClient: (discovery: DiscoveredAgentRegistration, options?: AgentRegistrationClientOptions) => {
24
+ beginAnonymous: () => Promise<{
25
+ body: JsonObject;
26
+ response: Response;
27
+ }>;
28
+ beginServiceAuth: (loginHint: string) => Promise<{
29
+ body: JsonObject;
30
+ response: Response;
31
+ }>;
32
+ beginVerified: (assertion: string) => Promise<{
33
+ body: JsonObject;
34
+ response: Response;
35
+ }>;
36
+ claim: (claimToken: string, email: string) => Promise<{
37
+ body: JsonObject;
38
+ response: Response;
39
+ }>;
40
+ exchangeAssertion: (assertion: string) => Promise<{
41
+ body: JsonObject;
42
+ response: Response;
43
+ }>;
44
+ pollClaim: (claimToken: string) => Promise<{
45
+ body: JsonObject;
46
+ response: Response;
47
+ }>;
48
+ };
49
+ export declare const discoverAgentRegistration: (resource: string, options?: AgentRegistrationClientOptions) => Promise<DiscoveredAgentRegistration>;
50
+ export {};
@@ -0,0 +1,256 @@
1
+ import { Elysia } from 'elysia';
2
+ import { type AgentAuthConfig } from './config';
3
+ import { agentAuthChallenge } from './context';
4
+ import { agentRegistrationDiscoveryMetadata } from './registration';
5
+ export { agentAuthChallenge, agentRegistrationDiscoveryMetadata };
6
+ export declare const agentAuthPlugin: (config?: AgentAuthConfig) => Elysia<"", {
7
+ decorator: {};
8
+ store: {};
9
+ derive: {
10
+ readonly protectAgent: <AuthReturn, AuthFailReturn>(requiredScopes: string[], handleAuth: (principal: import("./types").AgentPrincipal) => AuthReturn | Promise<AuthReturn>, handleAuthFail?: (error: {
11
+ code: "Forbidden" | "Unauthorized";
12
+ message: "Agent is not authenticated" | "Insufficient agent scopes";
13
+ }) => AuthFailReturn | Promise<AuthFailReturn>) => Promise<Response | AuthReturn | NonNullable<Awaited<AuthFailReturn>>>;
14
+ };
15
+ resolve: {};
16
+ }, {
17
+ typebox: {};
18
+ error: {};
19
+ }, {
20
+ schema: {};
21
+ standaloneSchema: {};
22
+ macro: {};
23
+ macroFn: {};
24
+ parser: {};
25
+ response: import("elysia").ExtractErrorFromHandle<{
26
+ readonly protectAgent: <AuthReturn, AuthFailReturn>(requiredScopes: string[], handleAuth: (principal: import("./types").AgentPrincipal) => AuthReturn | Promise<AuthReturn>, handleAuthFail?: (error: {
27
+ code: "Forbidden" | "Unauthorized";
28
+ message: "Agent is not authenticated" | "Insufficient agent scopes";
29
+ }) => AuthFailReturn | Promise<AuthFailReturn>) => Promise<Response | AuthReturn | NonNullable<Awaited<AuthFailReturn>>>;
30
+ }>;
31
+ }, {} | ({
32
+ [x: string]: {
33
+ get: {
34
+ body: unknown;
35
+ params: {};
36
+ query: unknown;
37
+ headers: unknown;
38
+ response: {
39
+ 200: {
40
+ resource: string;
41
+ scopes_supported: string[];
42
+ resource_name?: string | undefined;
43
+ resource_logo_uri?: string | undefined;
44
+ authorization_servers: string[];
45
+ bearer_methods_supported: string[];
46
+ };
47
+ };
48
+ };
49
+ };
50
+ } & {
51
+ [x: string]: {
52
+ get: {
53
+ body: unknown;
54
+ params: {};
55
+ query: unknown;
56
+ headers: unknown;
57
+ response: {
58
+ 200: Response;
59
+ };
60
+ };
61
+ };
62
+ } & {
63
+ [x: string]: {
64
+ get: {
65
+ body: unknown;
66
+ params: {};
67
+ query: unknown;
68
+ headers: unknown;
69
+ response: {
70
+ 200: Response;
71
+ };
72
+ };
73
+ };
74
+ } & {
75
+ [x: string]: {
76
+ post: {
77
+ body: unknown;
78
+ params: {};
79
+ query: unknown;
80
+ headers: unknown;
81
+ response: {
82
+ 200: Response;
83
+ };
84
+ };
85
+ };
86
+ } & {
87
+ [x: string]: {
88
+ post: {
89
+ body: unknown;
90
+ params: {};
91
+ query: unknown;
92
+ headers: unknown;
93
+ response: {
94
+ 200: Response;
95
+ };
96
+ };
97
+ };
98
+ } & {
99
+ [x: string]: {
100
+ post: {
101
+ body: unknown;
102
+ params: {};
103
+ query: unknown;
104
+ headers: unknown;
105
+ response: {
106
+ 200: Response;
107
+ };
108
+ };
109
+ };
110
+ }), {
111
+ derive: {};
112
+ resolve: {};
113
+ schema: {};
114
+ standaloneSchema: {};
115
+ response: {};
116
+ }, {
117
+ derive: {};
118
+ resolve: {};
119
+ schema: {};
120
+ standaloneSchema: {};
121
+ response: {};
122
+ }>;
123
+ export declare const agentAuthRoutes: (config?: AgentAuthConfig) => Elysia<"", {
124
+ decorator: {};
125
+ store: {};
126
+ derive: {};
127
+ resolve: {};
128
+ }, {
129
+ typebox: {};
130
+ error: {};
131
+ }, {
132
+ schema: {};
133
+ standaloneSchema: {};
134
+ macro: {};
135
+ macroFn: {};
136
+ parser: {};
137
+ response: {};
138
+ }, {}, {
139
+ derive: {};
140
+ resolve: {};
141
+ schema: {};
142
+ standaloneSchema: {};
143
+ response: {};
144
+ }, {
145
+ derive: {};
146
+ resolve: {};
147
+ schema: {};
148
+ standaloneSchema: {};
149
+ response: {};
150
+ }> | Elysia<"", {
151
+ decorator: {};
152
+ store: {};
153
+ derive: {};
154
+ resolve: {};
155
+ }, {
156
+ typebox: {};
157
+ error: {};
158
+ }, {
159
+ schema: {};
160
+ standaloneSchema: {};
161
+ macro: {};
162
+ macroFn: {};
163
+ parser: {};
164
+ response: {};
165
+ }, {
166
+ [x: string]: {
167
+ get: {
168
+ body: unknown;
169
+ params: {};
170
+ query: unknown;
171
+ headers: unknown;
172
+ response: {
173
+ 200: {
174
+ resource: string;
175
+ scopes_supported: string[];
176
+ resource_name?: string | undefined;
177
+ resource_logo_uri?: string | undefined;
178
+ authorization_servers: string[];
179
+ bearer_methods_supported: string[];
180
+ };
181
+ };
182
+ };
183
+ };
184
+ } & {
185
+ [x: string]: {
186
+ get: {
187
+ body: unknown;
188
+ params: {};
189
+ query: unknown;
190
+ headers: unknown;
191
+ response: {
192
+ 200: Response;
193
+ };
194
+ };
195
+ };
196
+ } & {
197
+ [x: string]: {
198
+ get: {
199
+ body: unknown;
200
+ params: {};
201
+ query: unknown;
202
+ headers: unknown;
203
+ response: {
204
+ 200: Response;
205
+ };
206
+ };
207
+ };
208
+ } & {
209
+ [x: string]: {
210
+ post: {
211
+ body: unknown;
212
+ params: {};
213
+ query: unknown;
214
+ headers: unknown;
215
+ response: {
216
+ 200: Response;
217
+ };
218
+ };
219
+ };
220
+ } & {
221
+ [x: string]: {
222
+ post: {
223
+ body: unknown;
224
+ params: {};
225
+ query: unknown;
226
+ headers: unknown;
227
+ response: {
228
+ 200: Response;
229
+ };
230
+ };
231
+ };
232
+ } & {
233
+ [x: string]: {
234
+ post: {
235
+ body: unknown;
236
+ params: {};
237
+ query: unknown;
238
+ headers: unknown;
239
+ response: {
240
+ 200: Response;
241
+ };
242
+ };
243
+ };
244
+ }, {
245
+ derive: {};
246
+ resolve: {};
247
+ schema: {};
248
+ standaloneSchema: {};
249
+ response: {};
250
+ }, {
251
+ derive: {};
252
+ resolve: {};
253
+ schema: {};
254
+ standaloneSchema: {};
255
+ response: {};
256
+ }>;
@@ -0,0 +1,129 @@
1
+ export type AgentRegistrationStatus = 'active' | 'revoked';
2
+ export type AgentDelegationStatus = 'active' | 'revoked';
3
+ /** A durable identity for an agent client. This is deliberately protocol-neutral:
4
+ * `clientId` can refer to an OAuth client, while adapters for other protocols can
5
+ * use `agentId` without manufacturing OAuth metadata. */
6
+ export type AgentRegistration = {
7
+ agentId: string;
8
+ allowedScopes: string[];
9
+ clientId?: string;
10
+ createdAt: number;
11
+ metadata?: Record<string, unknown>;
12
+ name: string;
13
+ status: AgentRegistrationStatus;
14
+ updatedAt: number;
15
+ };
16
+ export type AgentRegistrationStore = {
17
+ findByAgentId: (agentId: string) => Promise<AgentRegistration | undefined>;
18
+ findByClientId: (clientId: string) => Promise<AgentRegistration | undefined>;
19
+ listRegistrations: () => Promise<AgentRegistration[]>;
20
+ saveRegistration: (registration: AgentRegistration) => Promise<void>;
21
+ };
22
+ /** A user's explicit grant to an agent. Authorization details use RFC 9396's
23
+ * open object shape so applications can express transaction constraints without
24
+ * forcing them into coarse OAuth scope strings. */
25
+ export type AgentDelegation = {
26
+ agentId: string;
27
+ authorizationDetails?: Record<string, unknown>[];
28
+ createdAt: number;
29
+ delegationId: string;
30
+ expiresAt?: number;
31
+ organizationId?: string;
32
+ scopes: string[];
33
+ status: AgentDelegationStatus;
34
+ updatedAt: number;
35
+ userId: string;
36
+ };
37
+ export type AgentDelegationStore = {
38
+ findActiveDelegation: (query: {
39
+ agentId: string;
40
+ now?: number;
41
+ organizationId?: string;
42
+ userId: string;
43
+ }) => Promise<AgentDelegation | undefined>;
44
+ findByDelegationId: (delegationId: string) => Promise<AgentDelegation | undefined>;
45
+ listDelegations: (agentId?: string) => Promise<AgentDelegation[]>;
46
+ saveDelegation: (delegation: AgentDelegation) => Promise<void>;
47
+ };
48
+ /** The normalized result produced by a wire-protocol adapter. The core never
49
+ * handles raw provider assertions; it authorizes only this verified shape. */
50
+ export type VerifiedAgentCredential = {
51
+ agentId: string;
52
+ claims?: Record<string, unknown>;
53
+ expiresAt?: number;
54
+ organizationId?: string;
55
+ resource?: string;
56
+ scopes: string[];
57
+ userId?: string;
58
+ };
59
+ export type AgentCredentialVerifier = (request: Request) => Promise<VerifiedAgentCredential | undefined>;
60
+ export type AgentPrincipal = {
61
+ agentId: string;
62
+ authorizationDetails?: Record<string, unknown>[];
63
+ delegationId?: string;
64
+ kind: 'agent';
65
+ name: string;
66
+ organizationId?: string;
67
+ scopes: string[];
68
+ trust: 'delegated' | 'registered';
69
+ userId?: string;
70
+ };
71
+ export type AgentIdentityRegistrationKind = 'anonymous' | 'identity_assertion' | 'service_auth';
72
+ export type AgentIdentityRegistrationStatus = 'claimed' | 'pending' | 'revoked';
73
+ export type AgentClaimAttempt = {
74
+ attempts: number;
75
+ email: string;
76
+ expiresAt: number;
77
+ tokenHash: string;
78
+ userCodeHash: string;
79
+ };
80
+ /** Durable state for the open auth.md registration profile. Secrets are
81
+ * represented only by hashes; plaintext claim and attempt tokens are returned
82
+ * once to the agent and never persisted. `version` is used for compare-and-swap
83
+ * updates so claim completion is safe across multiple application instances. */
84
+ export type AgentIdentityRegistration = {
85
+ agentId: string;
86
+ claimAttempt?: AgentClaimAttempt;
87
+ claimExpiresAt: number;
88
+ claimTokenHash: string;
89
+ createdAt: number;
90
+ expiresAt: number;
91
+ kind: AgentIdentityRegistrationKind;
92
+ loginHint?: string;
93
+ lastPolledAt?: number;
94
+ registrationId: string;
95
+ status: AgentIdentityRegistrationStatus;
96
+ updatedAt: number;
97
+ upstream?: {
98
+ clientId: string;
99
+ issuer: string;
100
+ subject: string;
101
+ };
102
+ userId?: string;
103
+ version: number;
104
+ };
105
+ export type AgentIdentityRegistrationStore = {
106
+ create: (registration: AgentIdentityRegistration) => Promise<boolean>;
107
+ findByClaimTokenHash: (claimTokenHash: string) => Promise<AgentIdentityRegistration | undefined>;
108
+ findByAgentId: (agentId: string) => Promise<AgentIdentityRegistration | undefined>;
109
+ findByRegistrationId: (registrationId: string) => Promise<AgentIdentityRegistration | undefined>;
110
+ findByUpstreamIdentity: (query: {
111
+ clientId: string;
112
+ issuer: string;
113
+ subject: string;
114
+ }) => Promise<AgentIdentityRegistration | undefined>;
115
+ findByAttemptTokenHash: (attemptTokenHash: string) => Promise<AgentIdentityRegistration | undefined>;
116
+ /** Replaces a record only when its current version equals expectedVersion. */
117
+ replace: (registration: AgentIdentityRegistration, expectedVersion: number) => Promise<boolean>;
118
+ };
119
+ export type VerifiedAgentIdentityAssertion = {
120
+ authenticatedAt: number;
121
+ clientId: string;
122
+ email?: string;
123
+ emailVerified?: boolean;
124
+ issuer: string;
125
+ name?: string;
126
+ phoneNumber?: string;
127
+ phoneNumberVerified?: boolean;
128
+ subject: string;
129
+ };
@@ -0,0 +1,64 @@
1
+ import type { RouteString } from '../types';
2
+ import type { AccessTokenStore, ApiClient, ApiClientStore, ApiKey, ApiKeyStore, ApiPrincipal } from './types';
3
+ export declare const DEFAULT_TOKEN_ROUTE: RouteString;
4
+ export type ApiKeysConfig = {
5
+ /** Where minted access tokens live — required (with `apiClientStore`) for the
6
+ * client_credentials grant to be mounted. */
7
+ accessTokenStore?: AccessTokenStore;
8
+ /** Lifetime of a minted access token (defaults to one hour). */
9
+ accessTokenTtlMs?: number;
10
+ /** Registered M2M clients — required (with `accessTokenStore`) for the
11
+ * client_credentials grant. */
12
+ apiClientStore?: ApiClientStore;
13
+ /** Static API keys. Used by the exported `verifyApiKey` / `resolveApiPrincipal`
14
+ * helpers; the consumer wires its own management + guard routes. */
15
+ apiKeyStore?: ApiKeyStore;
16
+ /** Path of the client_credentials token endpoint (defaults to `/oauth2/token`). */
17
+ tokenRoute?: RouteString;
18
+ };
19
+ export type ClientCredentialsResult = {
20
+ error: 'invalid_client' | 'invalid_scope';
21
+ ok: false;
22
+ } | {
23
+ accessToken: string;
24
+ expiresIn: number;
25
+ ok: true;
26
+ scopes: string[];
27
+ };
28
+ export declare const createApiClient: (apiClientStore: ApiClientStore, options: {
29
+ name: string;
30
+ ownerId?: string;
31
+ scopes?: string[];
32
+ }) => Promise<{
33
+ clientId: string;
34
+ clientSecret: string;
35
+ record: ApiClient;
36
+ }>;
37
+ export declare const createApiKey: (apiKeyStore: ApiKeyStore, options: {
38
+ expiresAt?: number;
39
+ name: string;
40
+ ownerId?: string;
41
+ scopes?: string[];
42
+ }) => Promise<{
43
+ key: string;
44
+ record: ApiKey;
45
+ }>;
46
+ export declare const exchangeClientCredentials: ({ accessTokenStore, apiClientStore, clientId, clientSecret, now, requestedScopes, ttlMs }: {
47
+ accessTokenStore: AccessTokenStore;
48
+ apiClientStore: ApiClientStore;
49
+ clientId: string;
50
+ clientSecret: string;
51
+ now?: number;
52
+ requestedScopes?: string[];
53
+ ttlMs?: number;
54
+ }) => Promise<ClientCredentialsResult>;
55
+ export declare const hasScopes: (principal: ApiPrincipal | undefined, required: string[]) => boolean;
56
+ export declare const resolveApiPrincipal: ({ accessTokenStore, apiKey, apiKeyStore, authorization, now }: {
57
+ accessTokenStore?: AccessTokenStore;
58
+ apiKey?: string;
59
+ apiKeyStore?: ApiKeyStore;
60
+ authorization?: string;
61
+ now?: number;
62
+ }) => Promise<ApiPrincipal | undefined>;
63
+ export declare const verifyAccessToken: (accessTokenStore: AccessTokenStore, presented: string, now?: number) => Promise<import("./types").AccessToken | undefined>;
64
+ export declare const verifyApiKey: (apiKeyStore: ApiKeyStore, presented: string, now?: number) => Promise<ApiKey | undefined>;
@@ -0,0 +1,4 @@
1
+ import type { AccessTokenStore, ApiClientStore, ApiKeyStore } from './types';
2
+ export declare const createInMemoryAccessTokenStore: () => AccessTokenStore;
3
+ export declare const createInMemoryApiClientStore: () => ApiClientStore;
4
+ export declare const createInMemoryApiKeyStore: () => ApiKeyStore;