diff --git a/AGENTS.md b/AGENTS.md index 7eeeba1..7bfe8db 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -44,7 +44,7 @@ Yarn workspace monorepo: - ESLint config: root `.eslintrc.json` (`@typescript-eslint`, warns on unused vars, `prefer-const`). - Prettier: root `.prettierrc` (single quotes, semi, trailing commas, 80 print - width). Run `npx prettier --check ` / `--write` before committing. + width). Run `npm run prettier -- -w /path/to/file ` / `--write` before committing. ## Code Conventions diff --git a/packages/sdk-angular/README.md b/packages/sdk-angular/README.md index 693ea5d..3fc87df 100644 --- a/packages/sdk-angular/README.md +++ b/packages/sdk-angular/README.md @@ -12,6 +12,7 @@ An SDK for using FusionAuth in Angular applications. - [State Parameter](#state-parameter) - [SSR](#ssr) - [DPoP Mode](#dpop-mode) + - [Resource Server Guidance](#resource-server-guidance) - [Known issues](#known-issues) - [Documentation](#documentation) - [Releases](#releases) @@ -221,6 +222,16 @@ class AppComponent { } ``` +#### Resource Server Guidance + +If you're building a resource server that validates FusionAuth-issued DPoP tokens (this guidance applies regardless of which SDK, if any, the resource server itself uses): + +- This SDK does not implement `jti` replay prevention — tracking which proof JTIs have already been seen, and rejecting duplicates, is the resource server's responsibility. + - Single-instance deployments: an in-memory `Map` with TTL-based eviction is sufficient. + - Horizontally scaled deployments: a distributed store (e.g. Redis) is required, since replay state must be shared across instances. +- Validate the proof's `htu` claim against the request's actual URL. If the resource server sits behind a reverse proxy, ensure it's configured to trust the proxy and expose the public-facing URL (not an internal one) for this comparison. +- The `Authorization` header uses the `DPoP` scheme, not `Bearer` — resource servers must accept `Authorization: DPoP `. + ### Known Issues None. diff --git a/packages/sdk-angular/docs/.nojekyll b/packages/sdk-angular/docs/.nojekyll deleted file mode 100644 index e2ac661..0000000 --- a/packages/sdk-angular/docs/.nojekyll +++ /dev/null @@ -1 +0,0 @@ -TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/packages/sdk-angular/docs/README.md b/packages/sdk-angular/docs/README.md index 179c520..b69928d 100644 --- a/packages/sdk-angular/docs/README.md +++ b/packages/sdk-angular/docs/README.md @@ -1,4 +1,6 @@ -@fusionauth/angular-sdk / [Exports](modules.md) +**@fusionauth/angular-sdk** + +--- # FusionauthAngularSdk diff --git a/packages/sdk-angular/docs/classes/FusionAuthAccountButtonComponent.md b/packages/sdk-angular/docs/classes/FusionAuthAccountButtonComponent.md index 476907d..ac3c660 100644 --- a/packages/sdk-angular/docs/classes/FusionAuthAccountButtonComponent.md +++ b/packages/sdk-angular/docs/classes/FusionAuthAccountButtonComponent.md @@ -1,61 +1,43 @@ -[@fusionauth/angular-sdk](../README.md) / [Exports](../modules.md) / FusionAuthAccountButtonComponent +[**@fusionauth/angular-sdk**](../README.md) -# Class: FusionAuthAccountButtonComponent - -## Table of contents - -### Constructors - -- [constructor](FusionAuthAccountButtonComponent.md#constructor) - -### Properties +--- -- [fusionAuth](FusionAuthAccountButtonComponent.md#fusionauth) +[@fusionauth/angular-sdk](../globals.md) / FusionAuthAccountButtonComponent -### Methods +# Class: FusionAuthAccountButtonComponent -- [manageAccount](FusionAuthAccountButtonComponent.md#manageaccount) +Defined in: [components/fusionauth-account.button/fusion-auth-account-button.component.ts:10](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-account.button/fusion-auth-account-button.component.ts#L10) ## Constructors -### constructor - -• **new FusionAuthAccountButtonComponent**(`fusionAuth`): [`FusionAuthAccountButtonComponent`](FusionAuthAccountButtonComponent.md) - -#### Parameters - -| Name | Type | -| :----------- | :------------------------------------------------------------------------------------- | -| `fusionAuth` | [`FusionAuthService`](FusionAuthService.md)\<[`UserInfo`](../interfaces/UserInfo.md)\> | - -#### Returns +### Constructor -[`FusionAuthAccountButtonComponent`](FusionAuthAccountButtonComponent.md) +```ts +new FusionAuthAccountButtonComponent(fusionAuth): FusionAuthAccountButtonComponent; +``` -#### Defined in +Defined in: [components/fusionauth-account.button/fusion-auth-account-button.component.ts:11](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-account.button/fusion-auth-account-button.component.ts#L11) -[lib/components/fusionauth-account.button/fusion-auth-account-button.component.ts:10](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-account.button/fusion-auth-account-button.component.ts#L10) - -## Properties +#### Parameters -### fusionAuth +##### fusionAuth -• `Private` **fusionAuth**: [`FusionAuthService`](FusionAuthService.md)\<[`UserInfo`](../interfaces/UserInfo.md)\> +[`FusionAuthService`](FusionAuthService.md) -#### Defined in +#### Returns -[lib/components/fusionauth-account.button/fusion-auth-account-button.component.ts:10](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-account.button/fusion-auth-account-button.component.ts#L10) +`FusionAuthAccountButtonComponent` ## Methods -### manageAccount +### manageAccount() + +```ts +manageAccount(): void; +``` -▸ **manageAccount**(): `void` +Defined in: [components/fusionauth-account.button/fusion-auth-account-button.component.ts:13](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-account.button/fusion-auth-account-button.component.ts#L13) #### Returns `void` - -#### Defined in - -[lib/components/fusionauth-account.button/fusion-auth-account-button.component.ts:12](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-account.button/fusion-auth-account-button.component.ts#L12) diff --git a/packages/sdk-angular/docs/classes/FusionAuthLoginButtonComponent.md b/packages/sdk-angular/docs/classes/FusionAuthLoginButtonComponent.md index 0722cf8..d9d2cc1 100644 --- a/packages/sdk-angular/docs/classes/FusionAuthLoginButtonComponent.md +++ b/packages/sdk-angular/docs/classes/FusionAuthLoginButtonComponent.md @@ -1,72 +1,53 @@ -[@fusionauth/angular-sdk](../README.md) / [Exports](../modules.md) / FusionAuthLoginButtonComponent +[**@fusionauth/angular-sdk**](../README.md) -# Class: FusionAuthLoginButtonComponent - -## Table of contents - -### Constructors - -- [constructor](FusionAuthLoginButtonComponent.md#constructor) - -### Properties +--- -- [fusionAuth](FusionAuthLoginButtonComponent.md#fusionauth) -- [state](FusionAuthLoginButtonComponent.md#state) +[@fusionauth/angular-sdk](../globals.md) / FusionAuthLoginButtonComponent -### Methods +# Class: FusionAuthLoginButtonComponent -- [login](FusionAuthLoginButtonComponent.md#login) +Defined in: [components/fusionauth-login.button/fusion-auth-login-button.component.ts:10](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.ts#L10) ## Constructors -### constructor +### Constructor + +```ts +new FusionAuthLoginButtonComponent(fusionAuth): FusionAuthLoginButtonComponent; +``` -• **new FusionAuthLoginButtonComponent**(`fusionAuth`): [`FusionAuthLoginButtonComponent`](FusionAuthLoginButtonComponent.md) +Defined in: [components/fusionauth-login.button/fusion-auth-login-button.component.ts:13](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.ts#L13) #### Parameters -| Name | Type | -| :----------- | :------------------------------------------------------------------------------------- | -| `fusionAuth` | [`FusionAuthService`](FusionAuthService.md)\<[`UserInfo`](../interfaces/UserInfo.md)\> | +##### fusionAuth -#### Returns +[`FusionAuthService`](FusionAuthService.md) -[`FusionAuthLoginButtonComponent`](FusionAuthLoginButtonComponent.md) - -#### Defined in +#### Returns -[lib/components/fusionauth-login.button/fusion-auth-login-button.component.ts:12](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.ts#L12) +`FusionAuthLoginButtonComponent` ## Properties -### fusionAuth - -• `Private` **fusionAuth**: [`FusionAuthService`](FusionAuthService.md)\<[`UserInfo`](../interfaces/UserInfo.md)\> - -#### Defined in - -[lib/components/fusionauth-login.button/fusion-auth-login-button.component.ts:12](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.ts#L12) - ---- - ### state -• **state**: `undefined` \| `string` - -#### Defined in +```ts +state: string | undefined; +``` -[lib/components/fusionauth-login.button/fusion-auth-login-button.component.ts:10](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.ts#L10) +Defined in: [components/fusionauth-login.button/fusion-auth-login-button.component.ts:11](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.ts#L11) ## Methods -### login +### login() + +```ts +login(): void; +``` -▸ **login**(): `void` +Defined in: [components/fusionauth-login.button/fusion-auth-login-button.component.ts:15](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.ts#L15) #### Returns `void` - -#### Defined in - -[lib/components/fusionauth-login.button/fusion-auth-login-button.component.ts:14](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-login.button/fusion-auth-login-button.component.ts#L14) diff --git a/packages/sdk-angular/docs/classes/FusionAuthLogoutButtonComponent.md b/packages/sdk-angular/docs/classes/FusionAuthLogoutButtonComponent.md index fec4fe4..f90ac10 100644 --- a/packages/sdk-angular/docs/classes/FusionAuthLogoutButtonComponent.md +++ b/packages/sdk-angular/docs/classes/FusionAuthLogoutButtonComponent.md @@ -1,61 +1,43 @@ -[@fusionauth/angular-sdk](../README.md) / [Exports](../modules.md) / FusionAuthLogoutButtonComponent +[**@fusionauth/angular-sdk**](../README.md) -# Class: FusionAuthLogoutButtonComponent - -## Table of contents - -### Constructors - -- [constructor](FusionAuthLogoutButtonComponent.md#constructor) - -### Properties +--- -- [fusionAuth](FusionAuthLogoutButtonComponent.md#fusionauth) +[@fusionauth/angular-sdk](../globals.md) / FusionAuthLogoutButtonComponent -### Methods +# Class: FusionAuthLogoutButtonComponent -- [logout](FusionAuthLogoutButtonComponent.md#logout) +Defined in: [components/fusionauth-logout.button/fusion-auth-logout-button.component.ts:13](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.ts#L13) ## Constructors -### constructor - -• **new FusionAuthLogoutButtonComponent**(`fusionAuth`): [`FusionAuthLogoutButtonComponent`](FusionAuthLogoutButtonComponent.md) - -#### Parameters - -| Name | Type | -| :----------- | :------------------------------------------------------------------------------------- | -| `fusionAuth` | [`FusionAuthService`](FusionAuthService.md)\<[`UserInfo`](../interfaces/UserInfo.md)\> | - -#### Returns +### Constructor -[`FusionAuthLogoutButtonComponent`](FusionAuthLogoutButtonComponent.md) +```ts +new FusionAuthLogoutButtonComponent(fusionAuth): FusionAuthLogoutButtonComponent; +``` -#### Defined in +Defined in: [components/fusionauth-logout.button/fusion-auth-logout-button.component.ts:14](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.ts#L14) -[lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.ts:10](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.ts#L10) - -## Properties +#### Parameters -### fusionAuth +##### fusionAuth -• `Private` **fusionAuth**: [`FusionAuthService`](FusionAuthService.md)\<[`UserInfo`](../interfaces/UserInfo.md)\> +[`FusionAuthService`](FusionAuthService.md) -#### Defined in +#### Returns -[lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.ts:10](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.ts#L10) +`FusionAuthLogoutButtonComponent` ## Methods -### logout +### logout() + +```ts +logout(): void; +``` -▸ **logout**(): `void` +Defined in: [components/fusionauth-logout.button/fusion-auth-logout-button.component.ts:16](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.ts#L16) #### Returns `void` - -#### Defined in - -[lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.ts:12](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-logout.button/fusion-auth-logout-button.component.ts#L12) diff --git a/packages/sdk-angular/docs/classes/FusionAuthModule.md b/packages/sdk-angular/docs/classes/FusionAuthModule.md index 7465f17..95ef366 100644 --- a/packages/sdk-angular/docs/classes/FusionAuthModule.md +++ b/packages/sdk-angular/docs/classes/FusionAuthModule.md @@ -1,43 +1,41 @@ -[@fusionauth/angular-sdk](../README.md) / [Exports](../modules.md) / FusionAuthModule +[**@fusionauth/angular-sdk**](../README.md) -# Class: FusionAuthModule - -## Table of contents +--- -### Constructors +[@fusionauth/angular-sdk](../globals.md) / FusionAuthModule -- [constructor](FusionAuthModule.md#constructor) - -### Methods +# Class: FusionAuthModule -- [forRoot](FusionAuthModule.md#forroot) +Defined in: [fusion-auth.module.ts:25](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.module.ts#L25) ## Constructors -### constructor +### Constructor -• **new FusionAuthModule**(): [`FusionAuthModule`](FusionAuthModule.md) +```ts +new FusionAuthModule(): FusionAuthModule; +``` #### Returns -[`FusionAuthModule`](FusionAuthModule.md) +`FusionAuthModule` ## Methods -### forRoot +### forRoot() -▸ **forRoot**(`fusionAuthConfig`): `ModuleWithProviders`\<[`FusionAuthModule`](FusionAuthModule.md)\> +```ts +static forRoot(fusionAuthConfig): ModuleWithProviders; +``` -#### Parameters +Defined in: [fusion-auth.module.ts:26](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.module.ts#L26) -| Name | Type | -| :----------------- | :------------------------------------------------------ | -| `fusionAuthConfig` | [`FusionAuthConfig`](../interfaces/FusionAuthConfig.md) | +#### Parameters -#### Returns +##### fusionAuthConfig -`ModuleWithProviders`\<[`FusionAuthModule`](FusionAuthModule.md)\> +[`FusionAuthConfig`](../interfaces/FusionAuthConfig.md) -#### Defined in +#### Returns -[lib/fusion-auth.module.ts:26](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.module.ts#L26) +`ModuleWithProviders`\<`FusionAuthModule`\> diff --git a/packages/sdk-angular/docs/classes/FusionAuthRegisterButtonComponent.md b/packages/sdk-angular/docs/classes/FusionAuthRegisterButtonComponent.md index 8b75c77..fcbe5f7 100644 --- a/packages/sdk-angular/docs/classes/FusionAuthRegisterButtonComponent.md +++ b/packages/sdk-angular/docs/classes/FusionAuthRegisterButtonComponent.md @@ -1,72 +1,53 @@ -[@fusionauth/angular-sdk](../README.md) / [Exports](../modules.md) / FusionAuthRegisterButtonComponent +[**@fusionauth/angular-sdk**](../README.md) -# Class: FusionAuthRegisterButtonComponent - -## Table of contents - -### Constructors - -- [constructor](FusionAuthRegisterButtonComponent.md#constructor) - -### Properties +--- -- [fusionAuth](FusionAuthRegisterButtonComponent.md#fusionauth) -- [state](FusionAuthRegisterButtonComponent.md#state) +[@fusionauth/angular-sdk](../globals.md) / FusionAuthRegisterButtonComponent -### Methods +# Class: FusionAuthRegisterButtonComponent -- [register](FusionAuthRegisterButtonComponent.md#register) +Defined in: [components/fusionauth-register.button/fusion-auth-register-button.component.ts:13](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.ts#L13) ## Constructors -### constructor +### Constructor + +```ts +new FusionAuthRegisterButtonComponent(fusionAuth): FusionAuthRegisterButtonComponent; +``` -• **new FusionAuthRegisterButtonComponent**(`fusionAuth`): [`FusionAuthRegisterButtonComponent`](FusionAuthRegisterButtonComponent.md) +Defined in: [components/fusionauth-register.button/fusion-auth-register-button.component.ts:16](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.ts#L16) #### Parameters -| Name | Type | -| :----------- | :------------------------------------------------------------------------------------- | -| `fusionAuth` | [`FusionAuthService`](FusionAuthService.md)\<[`UserInfo`](../interfaces/UserInfo.md)\> | +##### fusionAuth -#### Returns +[`FusionAuthService`](FusionAuthService.md) -[`FusionAuthRegisterButtonComponent`](FusionAuthRegisterButtonComponent.md) - -#### Defined in +#### Returns -[lib/components/fusionauth-register.button/fusion-auth-register-button.component.ts:12](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.ts#L12) +`FusionAuthRegisterButtonComponent` ## Properties -### fusionAuth - -• `Private` **fusionAuth**: [`FusionAuthService`](FusionAuthService.md)\<[`UserInfo`](../interfaces/UserInfo.md)\> - -#### Defined in - -[lib/components/fusionauth-register.button/fusion-auth-register-button.component.ts:12](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.ts#L12) - ---- - ### state -• **state**: `undefined` \| `string` - -#### Defined in +```ts +state: string | undefined; +``` -[lib/components/fusionauth-register.button/fusion-auth-register-button.component.ts:10](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.ts#L10) +Defined in: [components/fusionauth-register.button/fusion-auth-register-button.component.ts:14](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.ts#L14) ## Methods -### register +### register() + +```ts +register(): void; +``` -▸ **register**(): `void` +Defined in: [components/fusionauth-register.button/fusion-auth-register-button.component.ts:18](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.ts#L18) #### Returns `void` - -#### Defined in - -[lib/components/fusionauth-register.button/fusion-auth-register-button.component.ts:14](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/components/fusionauth-register.button/fusion-auth-register-button.component.ts#L14) diff --git a/packages/sdk-angular/docs/classes/FusionAuthService.md b/packages/sdk-angular/docs/classes/FusionAuthService.md index 3ca445c..a928b44 100644 --- a/packages/sdk-angular/docs/classes/FusionAuthService.md +++ b/packages/sdk-angular/docs/classes/FusionAuthService.md @@ -1,164 +1,238 @@ -[@fusionauth/angular-sdk](../README.md) / [Exports](../modules.md) / FusionAuthService +[**@fusionauth/angular-sdk**](../README.md) + +--- + +[@fusionauth/angular-sdk](../globals.md) / FusionAuthService # Class: FusionAuthService\ +Defined in: [fusion-auth.service.ts:24](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L24) + Service class to use with FusionAuth backend endpoints. -## Type parameters +## Type Parameters -| Name | Type | -| :--- | :-------------------------------------- | -| `T` | [`UserInfo`](../interfaces/UserInfo.md) | +### T -## Table of contents +`T` = [`UserInfo`](../interfaces/UserInfo.md) -### Constructors +## Constructors -- [constructor](FusionAuthService.md#constructor) +### Constructor -### Properties +```ts +new FusionAuthService( + config, + platformId, + ngZone, +appRef): FusionAuthService; +``` -- [autoRefreshTimer](FusionAuthService.md#autorefreshtimer) -- [core](FusionAuthService.md#core) -- [isLoggedIn$](FusionAuthService.md#isloggedin$) -- [isLoggedInSubject](FusionAuthService.md#isloggedinsubject) +Defined in: [fusion-auth.service.ts:29](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L29) -### Methods +#### Parameters -- [getUserInfo](FusionAuthService.md#getuserinfo) -- [getUserInfoObservable](FusionAuthService.md#getuserinfoobservable) -- [initAutoRefresh](FusionAuthService.md#initautorefresh) -- [isLoggedIn](FusionAuthService.md#isloggedin) -- [logout](FusionAuthService.md#logout) -- [manageAccount](FusionAuthService.md#manageaccount) -- [refreshToken](FusionAuthService.md#refreshtoken) -- [startLogin](FusionAuthService.md#startlogin) -- [startRegistration](FusionAuthService.md#startregistration) +##### config -## Constructors +[`FusionAuthConfig`](../interfaces/FusionAuthConfig.md) -### constructor +##### platformId -• **new FusionAuthService**\<`T`\>(`config`, `platformId`): [`FusionAuthService`](FusionAuthService.md)\<`T`\> +`Object` -#### Type parameters +##### ngZone -| Name | Type | -| :--- | :-------------------------------------- | -| `T` | [`UserInfo`](../interfaces/UserInfo.md) | +`NgZone` -#### Parameters +##### appRef -| Name | Type | -| :----------- | :------------------------------------------------------ | -| `config` | [`FusionAuthConfig`](../interfaces/FusionAuthConfig.md) | -| `platformId` | `Object` | +`ApplicationRef` #### Returns -[`FusionAuthService`](FusionAuthService.md)\<`T`\> - -#### Defined in - -[lib/fusion-auth.service.ts:21](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L21) +`FusionAuthService`\<`T`\> ## Properties -### autoRefreshTimer +### isLoggedIn$ -• `Private` `Optional` **autoRefreshTimer**: `Timeout` +```ts +isLoggedIn$: Observable; +``` -#### Defined in +Defined in: [fusion-auth.service.ts:68](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L68) -[lib/fusion-auth.service.ts:18](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L18) +An observable representing whether the user is logged in. --- -### core +### isLoggedInSignal + +```ts +isLoggedInSignal: Signal; +``` + +Defined in: [fusion-auth.service.ts:73](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L73) + +A Signal representing whether the user is logged in. + +## Methods + +### dpopFetch() + +```ts +dpopFetch(input, init?): Promise; +``` + +Defined in: [fusion-auth.service.ts:177](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L177) + +DPoP mode `fetch()` wrapper that automatically attaches DPoP proof +headers. + +#### Parameters -• `Private` **core**: `SDKCore` +##### input -#### Defined in +`URL` \| `RequestInfo` -[lib/fusion-auth.service.ts:17](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L17) +##### init? + +`RequestInit` + +#### Returns + +`Promise`\<`Response`\> + +#### Throws + +if called when `useDpop` is not enabled. --- -### isLoggedIn$ +### generateProof() -• **isLoggedIn$**: `Observable`\<`boolean`\> +```ts +generateProof( + htu, + htm, + accessToken?, +nonce?): Promise; +``` -An observable representing whether the user is logged in. +Defined in: [fusion-auth.service.ts:189](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L189) + +Returns a signed DPoP proof JWT for use with axios or other +HTTP libraries that can't use [dpopFetch](#dpopfetch). + +#### Parameters + +##### htu + +`string` + +##### htm + +`string` + +##### accessToken? + +`string` + +##### nonce? + +`string` + +#### Returns -#### Defined in +`Promise`\<`string`\> -[lib/fusion-auth.service.ts:44](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L44) +#### Throws + +if called when `useDpop` is not enabled. --- -### isLoggedInSubject +### getAccessToken() -• `Private` **isLoggedInSubject**: `BehaviorSubject`\<`boolean`\> +```ts +getAccessToken(): string | null; +``` -#### Defined in +Defined in: [fusion-auth.service.ts:202](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L202) -[lib/fusion-auth.service.ts:19](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L19) +Returns the stored DPoP access token, or `null` if not logged in. -## Methods +#### Returns -### getUserInfo +`string` \| `null` -▸ **getUserInfo**\<`T`\>(): `Promise`\<`T`\> +#### Throws + +if called when `useDpop` is not enabled. + +--- + +### getUserInfo() + +```ts +getUserInfo(): Promise; +``` + +Defined in: [fusion-auth.service.ts:131](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L131) Fetches userInfo from the 'me' endpoint. -#### Type parameters +#### Type Parameters -| Name | -| :--- | -| `T` | +##### T + +`T` #### Returns `Promise`\<`T`\> -**`Throws`** +#### Throws - if an error occurred while fetching. -#### Defined in - -[lib/fusion-auth.service.ts:102](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L102) - --- -### getUserInfoObservable +### getUserInfoObservable() + +```ts +getUserInfoObservable(callbacks?): Observable; +``` -▸ **getUserInfoObservable**(`callbacks?`): `Observable`\<`T`\> +Defined in: [fusion-auth.service.ts:103](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L103) Returns an observable request that fetches userInfo, and catches error. #### Parameters -| Name | Type | -| :------------------- | :----------- | -| `callbacks?` | `Object` | -| `callbacks.onBegin?` | () => `void` | -| `callbacks.onDone?` | () => `void` | +##### callbacks? -#### Returns +###### onBegin? -`Observable`\<`T`\> +() => `void` + +###### onDone? -#### Defined in +() => `void` -[lib/fusion-auth.service.ts:74](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L74) +#### Returns + +`Observable`\<`T`\> --- -### initAutoRefresh +### initAutoRefresh() + +```ts +initAutoRefresh(): void; +``` -▸ **initAutoRefresh**(): `void` +Defined in: [fusion-auth.service.ts:92](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L92) Initializes automatic access token refreshing. This is handled automatically if the SDK is configured with `shouldAutoRefresh`. @@ -167,15 +241,15 @@ This is handled automatically if the SDK is configured with `shouldAutoRefresh`. `void` -#### Defined in - -[lib/fusion-auth.service.ts:63](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L63) - --- -### isLoggedIn +### isLoggedIn() -▸ **isLoggedIn**(): `boolean` +```ts +isLoggedIn(): boolean; +``` + +Defined in: [fusion-auth.service.ts:76](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L76) A function that returns whether the user is logged in. This returned value is non-observable. @@ -183,15 +257,15 @@ A function that returns whether the user is logged in. This returned value is no `boolean` -#### Defined in - -[lib/fusion-auth.service.ts:47](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L47) - --- -### logout +### logout() -▸ **logout**(): `void` +```ts +logout(): void; +``` + +Defined in: [fusion-auth.service.ts:160](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L160) Initiates logout flow. @@ -199,15 +273,15 @@ Initiates logout flow. `void` -#### Defined in - -[lib/fusion-auth.service.ts:125](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L125) - --- -### manageAccount +### manageAccount() -▸ **manageAccount**(): `void` +```ts +manageAccount(): void; +``` + +Defined in: [fusion-auth.service.ts:168](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L168) Redirects to [self service account management](https://fusionauth.io/docs/lifecycle/manage-users/account-management/) Self service account management is only available in FusionAuth paid plans. @@ -216,15 +290,15 @@ Self service account management is only available in FusionAuth paid plans. `void` -#### Defined in - -[lib/fusion-auth.service.ts:133](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L133) - --- -### refreshToken +### refreshToken() -▸ **refreshToken**(): `Promise`\<`Response`\> +```ts +refreshToken(): Promise; +``` + +Defined in: [fusion-auth.service.ts:84](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L84) Refreshes the access token a single time. Automatic token refreshing can be enabled if the SDK is configured with `shouldAutoRefresh`. @@ -233,50 +307,50 @@ Automatic token refreshing can be enabled if the SDK is configured with `shouldA `Promise`\<`Response`\> -#### Defined in - -[lib/fusion-auth.service.ts:55](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L55) - --- -### startLogin +### startLogin() + +```ts +startLogin(state?): void; +``` -▸ **startLogin**(`state?`): `void` +Defined in: [fusion-auth.service.ts:145](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L145) Initiates login flow. #### Parameters -| Name | Type | Description | -| :------- | :------- | :--------------------------------------------------------- | -| `state?` | `string` | Optional value to be echoed back to the SDK upon redirect. | +##### state? -#### Returns +`string` -`void` +Optional value to be echoed back to the SDK upon redirect. -#### Defined in +#### Returns -[lib/fusion-auth.service.ts:110](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L110) +`void` --- -### startRegistration +### startRegistration() -▸ **startRegistration**(`state?`): `void` +```ts +startRegistration(state?): void; +``` + +Defined in: [fusion-auth.service.ts:153](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L153) Initiates register flow. #### Parameters -| Name | Type | Description | -| :------- | :------- | :--------------------------------------------------------- | -| `state?` | `string` | Optional value to be echoed back to the SDK upon redirect. | +##### state? -#### Returns +`string` -`void` +Optional value to be echoed back to the SDK upon redirect. -#### Defined in +#### Returns -[lib/fusion-auth.service.ts:118](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/fusion-auth.service.ts#L118) +`void` diff --git a/packages/sdk-angular/docs/modules.md b/packages/sdk-angular/docs/globals.md similarity index 85% rename from packages/sdk-angular/docs/modules.md rename to packages/sdk-angular/docs/globals.md index 78fee8c..d75fa4b 100644 --- a/packages/sdk-angular/docs/modules.md +++ b/packages/sdk-angular/docs/globals.md @@ -1,10 +1,10 @@ -[@fusionauth/angular-sdk](README.md) / Exports +[**@fusionauth/angular-sdk**](README.md) -# @fusionauth/angular-sdk +--- -## Table of contents +# @fusionauth/angular-sdk -### Classes +## Classes - [FusionAuthAccountButtonComponent](classes/FusionAuthAccountButtonComponent.md) - [FusionAuthLoginButtonComponent](classes/FusionAuthLoginButtonComponent.md) @@ -13,7 +13,7 @@ - [FusionAuthRegisterButtonComponent](classes/FusionAuthRegisterButtonComponent.md) - [FusionAuthService](classes/FusionAuthService.md) -### Interfaces +## Interfaces - [FusionAuthConfig](interfaces/FusionAuthConfig.md) - [UserInfo](interfaces/UserInfo.md) diff --git a/packages/sdk-angular/docs/interfaces/FusionAuthConfig.md b/packages/sdk-angular/docs/interfaces/FusionAuthConfig.md index 15f59eb..bc1ca22 100644 --- a/packages/sdk-angular/docs/interfaces/FusionAuthConfig.md +++ b/packages/sdk-angular/docs/interfaces/FusionAuthConfig.md @@ -1,220 +1,226 @@ -[@fusionauth/angular-sdk](../README.md) / [Exports](../modules.md) / FusionAuthConfig +[**@fusionauth/angular-sdk**](../README.md) + +--- + +[@fusionauth/angular-sdk](../globals.md) / FusionAuthConfig # Interface: FusionAuthConfig -Config for FusionAuth Angular SDK +Defined in: [types.ts:4](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L4) -## Table of contents - -### Properties - -- [autoRefreshSecondsBeforeExpiry](FusionAuthConfig.md#autorefreshsecondsbeforeexpiry) -- [clientId](FusionAuthConfig.md#clientid) -- [loginPath](FusionAuthConfig.md#loginpath) -- [logoutPath](FusionAuthConfig.md#logoutpath) -- [mePath](FusionAuthConfig.md#mepath) -- [onAutoRefreshFailure](FusionAuthConfig.md#onautorefreshfailure) -- [onRedirect](FusionAuthConfig.md#onredirect) -- [postLogoutRedirectUri](FusionAuthConfig.md#postlogoutredirecturi) -- [redirectUri](FusionAuthConfig.md#redirecturi) -- [registerPath](FusionAuthConfig.md#registerpath) -- [scope](FusionAuthConfig.md#scope) -- [serverUrl](FusionAuthConfig.md#serverurl) -- [shouldAutoRefresh](FusionAuthConfig.md#shouldautorefresh) -- [tokenRefreshPath](FusionAuthConfig.md#tokenrefreshpath) +Config for FusionAuth Angular SDK ## Properties -### autoRefreshSecondsBeforeExpiry - -• `Optional` **autoRefreshSecondsBeforeExpiry**: `number` +### autoRefreshSecondsBeforeExpiry? -The number of seconds before the access token expiry when the auto refresh functionality kicks in if enabled. Default is 10. +```ts +optional autoRefreshSecondsBeforeExpiry?: number; +``` -#### Defined in +Defined in: [types.ts:38](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L38) -[lib/types.ts:38](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L38) +The number of seconds before the access token expiry when the auto refresh functionality kicks in if enabled. Default is 10. --- ### clientId -• **clientId**: `string` +```ts +clientId: string; +``` + +Defined in: [types.ts:13](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L13) The client id of the application. -#### Defined in +--- -[lib/types.ts:13](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L13) +### dpopTokenStorage? ---- +```ts +optional dpopTokenStorage?: "localStorage" | "memory"; +``` -### loginPath +Defined in: [types.ts:86](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L86) -• `Optional` **loginPath**: `string` +Token storage location in DPoP mode. Only meaningful when `useDpop: true`. +Defaults to `'localStorage'`. -The path to the login endpoint. +--- -#### Defined in +### loginPath? -[lib/types.ts:53](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L53) +```ts +optional loginPath?: string; +``` ---- +Defined in: [types.ts:53](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L53) -### logoutPath +The path to the login endpoint. -• `Optional` **logoutPath**: `string` +--- -The path to the logout endpoint. +### logoutPath? -#### Defined in +```ts +optional logoutPath?: string; +``` -[lib/types.ts:63](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L63) +Defined in: [types.ts:63](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L63) ---- +The path to the logout endpoint. -### mePath +--- -• `Optional` **mePath**: `string` +### mePath? -The path to the me endpoint. +```ts +optional mePath?: string; +``` -#### Defined in +Defined in: [types.ts:73](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L73) -[lib/types.ts:73](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L73) +The path to the me endpoint. --- -### onAutoRefreshFailure +### onAutoRefreshFailure? -• `Optional` **onAutoRefreshFailure**: (`error`: `Error`) => `void` +```ts +optional onAutoRefreshFailure?: (error) => void; +``` -Callback to be invoked if a request to refresh the access token fails during autorefresh. +Defined in: [types.ts:48](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L48) -#### Type declaration +Callback to be invoked if a request to refresh the access token fails during autorefresh. -▸ (`error`): `void` +#### Parameters -##### Parameters +##### error -| Name | Type | -| :------ | :------ | -| `error` | `Error` | +`Error` -##### Returns +#### Returns `void` -#### Defined in - -[lib/types.ts:48](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L48) - --- -### onRedirect +### onRedirect? -• `Optional` **onRedirect**: (`state?`: `string`) => `void` +```ts +optional onRedirect?: (state?) => void; +``` -Callback function to be invoked with the `state` value upon redirect from login or register. +Defined in: [types.ts:43](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L43) -#### Type declaration +Callback function to be invoked with the `state` value upon redirect from login or register. -▸ (`state?`): `void` +#### Parameters -##### Parameters +##### state? -| Name | Type | -| :------- | :------- | -| `state?` | `string` | +`string` -##### Returns +#### Returns `void` -#### Defined in - -[lib/types.ts:43](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L43) - --- -### postLogoutRedirectUri +### postLogoutRedirectUri? -• `Optional` **postLogoutRedirectUri**: `string` +```ts +optional postLogoutRedirectUri?: string; +``` -The redirect URI for post-logout. Defaults the provided `redirectUri`. +Defined in: [types.ts:23](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L23) -#### Defined in - -[lib/types.ts:23](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L23) +The redirect URI for post-logout. Defaults the provided `redirectUri`. --- ### redirectUri -• **redirectUri**: `string` +```ts +redirectUri: string; +``` -The redirect URI of the application. +Defined in: [types.ts:18](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L18) -#### Defined in - -[lib/types.ts:18](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L18) +The redirect URI of the application. --- -### registerPath - -• `Optional` **registerPath**: `string` +### registerPath? -The path to the register endpoint. +```ts +optional registerPath?: string; +``` -#### Defined in +Defined in: [types.ts:58](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L58) -[lib/types.ts:58](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L58) +The path to the register endpoint. --- -### scope - -• `Optional` **scope**: `string` +### scope? -The OAuth2 scope parameter passed to the `/oauth2/authorize` endpoint. If not specified fusionauth will default this to `openid offline_access`. +```ts +optional scope?: string; +``` -#### Defined in +Defined in: [types.ts:28](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L28) -[lib/types.ts:28](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L28) +The OAuth2 scope parameter passed to the `/oauth2/authorize` endpoint. If not specified fusionauth will default this to `openid offline_access`. --- ### serverUrl -• **serverUrl**: `string` - -The URL of the server that performs the token exchange. +```ts +serverUrl: string; +``` -#### Defined in +Defined in: [types.ts:8](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L8) -[lib/types.ts:8](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L8) +The URL of the server that performs the token exchange. --- -### shouldAutoRefresh - -• `Optional` **shouldAutoRefresh**: `boolean` +### shouldAutoRefresh? -Enables automatic token refreshing. Defaults to false. +```ts +optional shouldAutoRefresh?: boolean; +``` -#### Defined in +Defined in: [types.ts:33](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L33) -[lib/types.ts:33](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L33) +Enables automatic token refreshing. Defaults to false. --- -### tokenRefreshPath +### tokenRefreshPath? + +```ts +optional tokenRefreshPath?: string; +``` -• `Optional` **tokenRefreshPath**: `string` +Defined in: [types.ts:68](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L68) The path to the token refresh endpoint. -#### Defined in +--- + +### useDpop? + +```ts +optional useDpop?: boolean; +``` + +Defined in: [types.ts:80](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L80) -[lib/types.ts:68](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L68) +Opt-in to DPoP mode. When `true`, the SDK calls FusionAuth endpoints +directly and stores tokens in JavaScript-accessible storage instead of +relying on the Hosted Backend's HttpOnly cookies. Defaults to `false`. diff --git a/packages/sdk-angular/docs/interfaces/UserInfo.md b/packages/sdk-angular/docs/interfaces/UserInfo.md index 3eaac8f..e56dd78 100644 --- a/packages/sdk-angular/docs/interfaces/UserInfo.md +++ b/packages/sdk-angular/docs/interfaces/UserInfo.md @@ -1,173 +1,159 @@ -[@fusionauth/angular-sdk](../README.md) / [Exports](../modules.md) / UserInfo +[**@fusionauth/angular-sdk**](../README.md) + +--- + +[@fusionauth/angular-sdk](../globals.md) / UserInfo # Interface: UserInfo -## Table of contents - -### Properties - -- [applicationId](UserInfo.md#applicationid) -- [birthdate](UserInfo.md#birthdate) -- [email](UserInfo.md#email) -- [email_verified](UserInfo.md#email_verified) -- [family_name](UserInfo.md#family_name) -- [given_name](UserInfo.md#given_name) -- [middle_name](UserInfo.md#middle_name) -- [name](UserInfo.md#name) -- [phone_number](UserInfo.md#phone_number) -- [picture](UserInfo.md#picture) -- [preferred_username](UserInfo.md#preferred_username) -- [roles](UserInfo.md#roles) -- [sid](UserInfo.md#sid) -- [sub](UserInfo.md#sub) -- [tid](UserInfo.md#tid) +Defined in: [types.ts:89](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L89) ## Properties -### applicationId +### applicationId? -• `Optional` **applicationId**: `string` +```ts +optional applicationId?: string; +``` -#### Defined in - -[lib/types.ts:77](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L77) +Defined in: [types.ts:90](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L90) --- -### birthdate - -• `Optional` **birthdate**: `string` +### birthdate? -#### Defined in +```ts +optional birthdate?: string; +``` -[lib/types.ts:78](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L78) +Defined in: [types.ts:91](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L91) --- -### email +### email? -• `Optional` **email**: `string` +```ts +optional email?: string; +``` -#### Defined in - -[lib/types.ts:79](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L79) +Defined in: [types.ts:92](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L92) --- -### email_verified - -• `Optional` **email_verified**: `boolean` +### email\_verified? -#### Defined in +```ts +optional email_verified?: boolean; +``` -[lib/types.ts:80](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L80) +Defined in: [types.ts:93](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L93) --- -### family_name +### family\_name? -• `Optional` **family_name**: `string` +```ts +optional family_name?: string; +``` -#### Defined in - -[lib/types.ts:81](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L81) +Defined in: [types.ts:94](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L94) --- -### given_name - -• `Optional` **given_name**: `string` +### given\_name? -#### Defined in +```ts +optional given_name?: string; +``` -[lib/types.ts:82](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L82) +Defined in: [types.ts:95](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L95) --- -### middle_name +### middle\_name? -• `Optional` **middle_name**: `string` +```ts +optional middle_name?: string; +``` -#### Defined in - -[lib/types.ts:83](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L83) +Defined in: [types.ts:96](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L96) --- -### name - -• `Optional` **name**: `string` +### name? -#### Defined in +```ts +optional name?: string; +``` -[lib/types.ts:84](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L84) +Defined in: [types.ts:97](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L97) --- -### phone_number - -• `Optional` **phone_number**: `string` +### phone\_number? -#### Defined in +```ts +optional phone_number?: string; +``` -[lib/types.ts:85](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L85) +Defined in: [types.ts:98](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L98) --- -### picture +### picture? -• `Optional` **picture**: `string` +```ts +optional picture?: string; +``` -#### Defined in - -[lib/types.ts:86](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L86) +Defined in: [types.ts:99](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L99) --- -### preferred_username - -• `Optional` **preferred_username**: `string` +### preferred\_username? -#### Defined in +```ts +optional preferred_username?: string; +``` -[lib/types.ts:87](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L87) +Defined in: [types.ts:100](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L100) --- -### roles +### roles? -• `Optional` **roles**: `any`[] +```ts +optional roles?: any[]; +``` -#### Defined in - -[lib/types.ts:88](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L88) +Defined in: [types.ts:101](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L101) --- -### sid - -• `Optional` **sid**: `string` +### sid? -#### Defined in +```ts +optional sid?: string; +``` -[lib/types.ts:89](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L89) +Defined in: [types.ts:102](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L102) --- -### sub +### sub? -• `Optional` **sub**: `string` +```ts +optional sub?: string; +``` -#### Defined in - -[lib/types.ts:90](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L90) +Defined in: [types.ts:103](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L103) --- -### tid - -• `Optional` **tid**: `string` +### tid? -#### Defined in +```ts +optional tid?: string; +``` -[lib/types.ts:91](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/80c01c9ccb450a2187bc0d2cc65fa8c9c38cfabe/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L91) +Defined in: [types.ts:104](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-angular/projects/fusionauth-angular-sdk/src/lib/types.ts#L104) diff --git a/packages/sdk-angular/package.json b/packages/sdk-angular/package.json index fcdb974..8409baf 100644 --- a/packages/sdk-angular/package.json +++ b/packages/sdk-angular/package.json @@ -27,8 +27,8 @@ "@angular/build": "^22.0.0", "@angular/cli": "^22.0.0", "@angular/compiler-cli": "^22.0.0", - "typedoc": "^0.25.13", - "typedoc-plugin-markdown": "^3.17.1", + "typedoc": "^0.28.20", + "typedoc-plugin-markdown": "^4.12.0", "jsdom": "^25.0.0", "ng-packagr": "^22.0.0", "typescript": "~6.0.0", diff --git a/packages/sdk-angular/tsconfig.json b/packages/sdk-angular/tsconfig.json index 6887e8e..a65dc4c 100644 --- a/packages/sdk-angular/tsconfig.json +++ b/packages/sdk-angular/tsconfig.json @@ -27,7 +27,7 @@ "composite": false, "allowImportingTsExtensions": false, "noEmit": false, - "types": ["jasmine"] + "types": ["vitest/globals", "node"] }, "include": ["./**/*.ts"], "angularCompilerOptions": { @@ -39,6 +39,7 @@ "typedocOptions": { "plugin": ["typedoc-plugin-markdown"], "entryPoints": ["projects/fusionauth-angular-sdk/src/public-api.ts"], - "out": "docs" + "out": "docs", + "useCodeBlocks": true } } diff --git a/packages/sdk-react/README.md b/packages/sdk-react/README.md index 4e4e2b3..44e7ba0 100644 --- a/packages/sdk-react/README.md +++ b/packages/sdk-react/README.md @@ -14,6 +14,7 @@ An SDK for using FusionAuth in React applications. - [Protecting content](#protecting-content) - [UI Components](#ui-components) - [DPoP Mode](#dpop-mode) + - [Resource Server Guidance](#resource-server-guidance) - [Known issues](#known-issues) - [Documentation](#documentation) - [Formatting](#formatting) @@ -260,6 +261,16 @@ const proof = await generateProof('https://api.example.com/data', 'GET', accessT // }); ``` +#### Resource Server Guidance + +If you're building a resource server that validates FusionAuth-issued DPoP tokens (this guidance applies regardless of which SDK, if any, the resource server itself uses): + +- This SDK does not implement `jti` replay prevention — tracking which proof JTIs have already been seen, and rejecting duplicates, is the resource server's responsibility. + - Single-instance deployments: an in-memory `Map` with TTL-based eviction is sufficient. + - Horizontally scaled deployments: a distributed store (e.g. Redis) is required, since replay state must be shared across instances. +- Validate the proof's `htu` claim against the request's actual URL. If the resource server sits behind a reverse proxy, ensure it's configured to trust the proxy and expose the public-facing URL (not an internal one) for this comparison. +- The `Authorization` header uses the `DPoP` scheme, not `Bearer` — resource servers must accept `Authorization: DPoP `. + ### Known Issues None. diff --git a/packages/sdk-react/docs/README.md b/packages/sdk-react/docs/README.md index 0d68dd0..58dada2 100644 --- a/packages/sdk-react/docs/README.md +++ b/packages/sdk-react/docs/README.md @@ -11,10 +11,12 @@ An SDK for using FusionAuth in React applications. - [Configuration](#configuration) - [Configuration with NextJS](#configuration-with-nextjs) - [Usage](#usage) - - [useFusionAuth](#usefusionauth) - - [State Parameter](#state-parameter) - - [Protecting content](#protecting-content) - - [UI Components](#ui-components) + - [useFusionAuth](#usefusionauth) + - [State Parameter](#state-parameter) + - [Protecting content](#protecting-content) + - [UI Components](#ui-components) + - [DPoP Mode](#dpop-mode) + - [Resource Server Guidance](#resource-server-guidance) - [Known issues](#known-issues) - [Documentation](#documentation) - [Formatting](#formatting) @@ -41,18 +43,19 @@ then log in. After that, they are sent back to your React application. Once authentication succeeds, the following secure, HTTP-only cookies will be set: -- `app.at` - an OAuth [Access - Token](https://fusionauth.io/docs/v1/tech/oauth/tokens#access-token) +- `app.at` - an OAuth [Access + Token](https://fusionauth.io/docs/v1/tech/oauth/tokens#access-token) -- `app.rt` - a [Refresh - Token](https://fusionauth.io/docs/v1/tech/oauth/tokens#refresh-token) - used to obtain a new `app.at`. This cookie will only be set if - refresh tokens are enabled on your FusionAuth instance. +- `app.rt` - a [Refresh + Token](https://fusionauth.io/docs/v1/tech/oauth/tokens#refresh-token) + used to obtain a new `app.at`. This cookie will only be set if + refresh tokens are enabled on your FusionAuth instance. The access token can be presented to APIs to authorize the request and the refresh token can be used to get a new access token. There are 2 ways to interact with this SDK: + 1. By hosting your own server that performs the OAuth token exchange and meets the [server code requirements for FusionAuth Web SDKs](https://github.com/FusionAuth/fusionauth-javascript-sdk-express#server-code-requirements). 2. By using the server hosted on your FusionAuth instance, i.e., not writing your own server code. @@ -98,6 +101,7 @@ const config: FusionAuthProviderConfig = { shouldAutoFetchUserInfo: true, // Automatically fetch userInfo when logged in. Defaults to false. shouldAutoRefresh: true, // Enables automatic token refresh. Defaults to false. onRedirect: (state?: string) => { }, // Optional callback invoked upon redirect back from login or register. + // useDpop: true, // Opt-in to DPoP mode. See "DPoP Mode" below. Defaults to false. }; ReactDOM.createRoot(document.getElementById("my-app")).render( @@ -112,7 +116,7 @@ ReactDOM.createRoot(document.getElementById("my-app")).render( To configure the SDK with Next, install [`next-client-cookies`](https://github.com/moshest/next-client-cookies?tab=readme-ov-file#install) and pass `useCookies` into the config object as `nextCookieAdapter`. ```jsx -'use client' +'use client'; import { useCookies } from 'next-client-cookies'; @@ -144,11 +148,11 @@ function MyComponent() { isFetchingUserInfo, startLogin, startRegister, - userInfo - } = useFusionAuth() + userInfo, + } = useFusionAuth(); if (isFetchingUserInfo) { - return

Loading...

+ return

Loading...

; } if (!isLoggedIn) { @@ -162,7 +166,7 @@ function MyComponent() { } if (userInfo?.given_name) { - return

Welcome {userInfo.given_name}!

+ return

Welcome {userInfo.given_name}!

; } } ``` @@ -186,9 +190,10 @@ const UserNameDisplay = () => { return ( <> -

User: {userInfo.given_name}

// Only displays if user is authenticated +

User: {userInfo.given_name}

// Only displays if user is + authenticated
- +

Please log in to view this page

@@ -198,7 +203,8 @@ const UserNameDisplay = () => { const AdminPanel = () => ( - // Only displays if user is authenticated and has 'admin' role + // Only displays if user is authenticated and + has 'admin' role ); ``` @@ -211,7 +217,7 @@ This SDK offers 3 pre-built UI components. import { FusionAuthLoginButton, FusionAuthLogoutButton, - FusionAuthRegisterButton + FusionAuthRegisterButton, } from '@fusionauth/react-sdk'; export const LoginPage = () => ( @@ -230,6 +236,52 @@ export const AccountPage = () => ( ); ``` +### DPoP Mode + +By default, the SDK calls a Hosted Backend that stores tokens in HttpOnly cookies (`useDpop: false`, the default). In DPoP mode, the SDK instead calls FusionAuth endpoints directly and binds tokens to a private key generated in the browser, per [RFC 9449](https://datatracker.ietf.org/doc/html/rfc9449). Enable it by setting `useDpop: true` on `FusionAuthProviderConfig`: + +```jsx +const config: FusionAuthProviderConfig = { + clientId: "", + redirectUri: "", + serverUrl: "", + useDpop: true, // Opt-in to DPoP mode. + dpopTokenStorage: 'localStorage', // 'localStorage' (default, persists across reloads) or 'memory'. +}; +``` + +When `useDpop: true`, `useFusionAuth()` additionally returns `dpopFetch`, `generateProof`, and `getAccessToken`. These are `undefined` when `useDpop` is `false` or not set. + +```jsx +const { dpopFetch, generateProof, getAccessToken } = useFusionAuth(); + +// Recommended — handles attaching DPoP headers (and nonce retries) automatically. +const response = await dpopFetch('https://api.example.com/data', { + method: 'GET', +}); + +// Advanced — for axios or other HTTP libraries that can't use dpopFetch. +const accessToken = getAccessToken(); +const proof = await generateProof( + 'https://api.example.com/data', + 'GET', + accessToken, +); +// axios.get('https://api.example.com/data', { +// headers: { Authorization: `DPoP ${accessToken}`, DPoP: proof } +// }); +``` + +#### Resource Server Guidance + +If you're building a resource server that validates FusionAuth-issued DPoP tokens (this guidance applies regardless of which SDK, if any, the resource server itself uses): + +- This SDK does not implement `jti` replay prevention — tracking which proof JTIs have already been seen, and rejecting duplicates, is the resource server's responsibility. + - Single-instance deployments: an in-memory `Map` with TTL-based eviction is sufficient. + - Horizontally scaled deployments: a distributed store (e.g. Redis) is required, since replay state must be shared across instances. +- Validate the proof's `htu` claim against the request's actual URL. If the resource server sits behind a reverse proxy, ensure it's configured to trust the proxy and expose the public-facing URL (not an internal one) for this comparison. +- The `Authorization` header uses the `DPoP` scheme, not `Bearer` — resource servers must accept `Authorization: DPoP `. + ### Known Issues None. @@ -248,8 +300,8 @@ end::forDocSite[] There are several linting packages run when you push to a branch. One is `prettier`. If this fails, you can fix the files from the command line: -* npm run install -* npm run prettier -- -w /path/to/file +- npm run install +- npm run prettier -- -w /path/to/file Doing this will overwrite your file, but fix prettier's objections. diff --git a/packages/sdk-react/docs/interfaces/providers_FusionAuthProviderConfig.FusionAuthProviderConfig.md b/packages/sdk-react/docs/interfaces/providers_FusionAuthProviderConfig.FusionAuthProviderConfig.md index 9cbbf2e..7173226 100644 --- a/packages/sdk-react/docs/interfaces/providers_FusionAuthProviderConfig.FusionAuthProviderConfig.md +++ b/packages/sdk-react/docs/interfaces/providers_FusionAuthProviderConfig.FusionAuthProviderConfig.md @@ -14,6 +14,7 @@ Config for FusionAuthProvider - [authParams](providers_FusionAuthProviderConfig.FusionAuthProviderConfig.md#authparams) - [autoRefreshSecondsBeforeExpiry](providers_FusionAuthProviderConfig.FusionAuthProviderConfig.md#autorefreshsecondsbeforeexpiry) - [clientId](providers_FusionAuthProviderConfig.FusionAuthProviderConfig.md#clientid) +- [dpopTokenStorage](providers_FusionAuthProviderConfig.FusionAuthProviderConfig.md#dpoptokenstorage) - [loginPath](providers_FusionAuthProviderConfig.FusionAuthProviderConfig.md#loginpath) - [logoutPath](providers_FusionAuthProviderConfig.FusionAuthProviderConfig.md#logoutpath) - [mePath](providers_FusionAuthProviderConfig.FusionAuthProviderConfig.md#mepath) @@ -28,6 +29,7 @@ Config for FusionAuthProvider - [shouldAutoFetchUserInfo](providers_FusionAuthProviderConfig.FusionAuthProviderConfig.md#shouldautofetchuserinfo) - [shouldAutoRefresh](providers_FusionAuthProviderConfig.FusionAuthProviderConfig.md#shouldautorefresh) - [tokenRefreshPath](providers_FusionAuthProviderConfig.FusionAuthProviderConfig.md#tokenrefreshpath) +- [useDpop](providers_FusionAuthProviderConfig.FusionAuthProviderConfig.md#usedpop) ## Properties @@ -40,7 +42,7 @@ Only set this if you are hosting server that uses a custom name for the 'app.at_ #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:98](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L98) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:98](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L98) --- @@ -52,7 +54,7 @@ Additional params passed to loginPath typically `/app/login/`, which redirects t #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:30](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L30) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:30](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L30) --- @@ -64,7 +66,7 @@ The number of seconds before the access token expiry when the auto refresh funct #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:50](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L50) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:50](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L50) --- @@ -76,7 +78,20 @@ The client id of the application. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:15](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L15) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:15](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L15) + +--- + +### dpopTokenStorage + +• `Optional` **dpopTokenStorage**: `"localStorage"` \| `"memory"` + +Token storage location in DPoP mode. Only meaningful when `useDpop: true`. +Defaults to `'localStorage'`. + +#### Defined in + +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:111](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L111) --- @@ -88,7 +103,7 @@ The path to the login endpoint. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:65](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L65) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:65](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L65) --- @@ -100,7 +115,7 @@ The path to the logout endpoint. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:75](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L75) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:75](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L75) --- @@ -112,7 +127,7 @@ The path to the me endpoint. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:92](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L92) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:92](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L92) --- @@ -134,7 +149,7 @@ See docs for [configuration with nextjs](https://github.com/FusionAuth/fusionaut #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:87](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L87) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:87](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L87) --- @@ -160,7 +175,7 @@ Callback to be invoked if a request to refresh the access token fails during aut #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:60](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L60) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:60](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L60) --- @@ -186,7 +201,7 @@ Callback function to be invoked with the `state` value upon redirect from login #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:55](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L55) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:55](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L55) --- @@ -198,7 +213,7 @@ The redirect URI for post-logout. Defaults the provided `redirectUri`. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:35](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L35) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:35](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L35) --- @@ -210,7 +225,7 @@ The redirect URI of the application. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:20](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L20) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:20](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L20) --- @@ -222,7 +237,7 @@ The path to the register endpoint. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:70](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L70) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:70](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L70) --- @@ -234,7 +249,7 @@ The OAuth2 scope parameter passed to the `/oauth2/authorize` endpoint. If not sp #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:25](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L25) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:25](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L25) --- @@ -246,7 +261,7 @@ The URL of the server that performs the token exchange. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:10](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L10) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:10](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L10) --- @@ -258,7 +273,7 @@ Enables the SDK to automatically handle fetching user info when logged in. Defau #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:45](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L45) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:45](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L45) --- @@ -270,7 +285,7 @@ Enables automatic token refreshing. Defaults to false. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:40](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L40) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:40](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L40) --- @@ -282,4 +297,18 @@ The path to the token refresh endpoint. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:80](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L80) +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:80](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L80) + +--- + +### useDpop + +• `Optional` **useDpop**: `boolean` + +Opt-in to DPoP mode. When `true`, the SDK calls FusionAuth endpoints +directly and stores tokens in JavaScript-accessible storage instead of +relying on the Hosted Backend's HttpOnly cookies. Defaults to `false`. + +#### Defined in + +[packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts:105](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderConfig.ts#L105) diff --git a/packages/sdk-react/docs/interfaces/providers_FusionAuthProviderContext.FusionAuthProviderContext.md b/packages/sdk-react/docs/interfaces/providers_FusionAuthProviderContext.FusionAuthProviderContext.md index 8ed7bb9..845ddec 100644 --- a/packages/sdk-react/docs/interfaces/providers_FusionAuthProviderContext.FusionAuthProviderContext.md +++ b/packages/sdk-react/docs/interfaces/providers_FusionAuthProviderContext.FusionAuthProviderContext.md @@ -16,8 +16,11 @@ The context provided by FusionAuth React SDK ### Properties +- [dpopFetch](providers_FusionAuthProviderContext.FusionAuthProviderContext.md#dpopfetch) - [error](providers_FusionAuthProviderContext.FusionAuthProviderContext.md#error) - [fetchUserInfo](providers_FusionAuthProviderContext.FusionAuthProviderContext.md#fetchuserinfo) +- [generateProof](providers_FusionAuthProviderContext.FusionAuthProviderContext.md#generateproof) +- [getAccessToken](providers_FusionAuthProviderContext.FusionAuthProviderContext.md#getaccesstoken) - [initAutoRefresh](providers_FusionAuthProviderContext.FusionAuthProviderContext.md#initautorefresh) - [isFetchingUserInfo](providers_FusionAuthProviderContext.FusionAuthProviderContext.md#isfetchinguserinfo) - [isLoggedIn](providers_FusionAuthProviderContext.FusionAuthProviderContext.md#isloggedin) @@ -30,6 +33,34 @@ The context provided by FusionAuth React SDK ## Properties +### dpopFetch + +• `Optional` **dpopFetch**: (`input`: `RequestInfo` \| `URL`, `init?`: `RequestInit`) => `Promise`\<`Response`\> + +Fetch wrapper that automatically attaches DPoP proof headers. +Present only when `useDpop: true`. + +#### Type declaration + +▸ (`input`, `init?`): `Promise`\<`Response`\> + +##### Parameters + +| Name | Type | +| :------ | :--------------------- | +| `input` | `RequestInfo` \| `URL` | +| `init?` | `RequestInit` | + +##### Returns + +`Promise`\<`Response`\> + +#### Defined in + +[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:70](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L70) + +--- + ### error • **error**: `null` \| `Error` @@ -38,7 +69,7 @@ Error occurred while fetching userInfo. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:29](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L29) +[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:29](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L29) --- @@ -59,7 +90,59 @@ This is handled automatically if the SDK is configured with `shouldAutoFetchUser #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:19](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L19) +[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:19](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L19) + +--- + +### generateProof + +• `Optional` **generateProof**: (`htu`: `string`, `htm`: `string`, `accessToken?`: `string`, `nonce?`: `string`) => `Promise`\<`string`\> + +Returns a signed DPoP proof JWT for use with axios or other +HTTP libraries. Present only when `useDpop: true`. + +#### Type declaration + +▸ (`htu`, `htm`, `accessToken?`, `nonce?`): `Promise`\<`string`\> + +##### Parameters + +| Name | Type | +| :------------- | :------- | +| `htu` | `string` | +| `htm` | `string` | +| `accessToken?` | `string` | +| `nonce?` | `string` | + +##### Returns + +`Promise`\<`string`\> + +#### Defined in + +[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:79](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L79) + +--- + +### getAccessToken + +• `Optional` **getAccessToken**: () => `null` \| `string` + +Returns the stored DPoP access token, or `null` if not logged in. +Throws a descriptive error when `useDpop: false`. +Present only when `useDpop: true`. + +#### Type declaration + +▸ (): `null` \| `string` + +##### Returns + +`null` \| `string` + +#### Defined in + +[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:91](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L91) --- @@ -80,7 +163,7 @@ This is handled automatically if the SDK is configured with `shouldAutoRefresh`. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:64](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L64) +[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:64](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L64) --- @@ -92,7 +175,7 @@ Indicates that the fetchUserInfo call is unresolved. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:24](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L24) +[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:24](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L24) --- @@ -104,7 +187,7 @@ Whether the user is logged in. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:8](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L8) +[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:8](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L8) --- @@ -125,7 +208,7 @@ Self service account management is only available in FusionAuth paid plans. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:52](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L52) +[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:52](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L52) --- @@ -146,7 +229,7 @@ This is handled automatically if the SDK is configured with `shouldAutoRefresh`. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:58](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L58) +[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:58](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L58) --- @@ -172,7 +255,7 @@ Initiates login flow. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:35](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L35) +[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:35](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L35) --- @@ -192,7 +275,7 @@ Initiates logout flow. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:46](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L46) +[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:46](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L46) --- @@ -218,7 +301,7 @@ Initiates register flow. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:41](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L41) +[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:41](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L41) --- @@ -230,4 +313,4 @@ Data fetched from the configured 'me' endpoint. #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:13](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L13) +[packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts:13](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProviderContext.ts#L13) diff --git a/packages/sdk-react/docs/modules/providers_FusionAuthProvider.md b/packages/sdk-react/docs/modules/providers_FusionAuthProvider.md index f84520b..d9b14cc 100644 --- a/packages/sdk-react/docs/modules/providers_FusionAuthProvider.md +++ b/packages/sdk-react/docs/modules/providers_FusionAuthProvider.md @@ -33,7 +33,7 @@ #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProvider.tsx:21](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProvider.tsx#L21) +[packages/sdk-react/src/components/providers/FusionAuthProvider.tsx:23](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProvider.tsx#L23) --- @@ -55,4 +55,4 @@ A hook that returns `FusionAuthProviderContext` #### Defined in -[packages/sdk-react/src/components/providers/FusionAuthProvider.tsx:122](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/providers/FusionAuthProvider.tsx#L122) +[packages/sdk-react/src/components/providers/FusionAuthProvider.tsx:155](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/providers/FusionAuthProvider.tsx#L155) diff --git a/packages/sdk-react/docs/modules/ui_FusionAuthLoginButton.md b/packages/sdk-react/docs/modules/ui_FusionAuthLoginButton.md index 4ba81bf..8596437 100644 --- a/packages/sdk-react/docs/modules/ui_FusionAuthLoginButton.md +++ b/packages/sdk-react/docs/modules/ui_FusionAuthLoginButton.md @@ -28,4 +28,4 @@ Calls the `startLogin` method from `FusionAuthProviderContext`. #### Defined in -[packages/sdk-react/src/components/ui/FusionAuthLoginButton/index.tsx:16](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/ui/FusionAuthLoginButton/index.tsx#L16) +[packages/sdk-react/src/components/ui/FusionAuthLoginButton/index.tsx:16](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/ui/FusionAuthLoginButton/index.tsx#L16) diff --git a/packages/sdk-react/docs/modules/ui_FusionAuthLogoutButton.md b/packages/sdk-react/docs/modules/ui_FusionAuthLogoutButton.md index 67e103c..9d3e703 100644 --- a/packages/sdk-react/docs/modules/ui_FusionAuthLogoutButton.md +++ b/packages/sdk-react/docs/modules/ui_FusionAuthLogoutButton.md @@ -28,4 +28,4 @@ Calls the `startLogout` method from `FusionAuthProviderContext`. #### Defined in -[packages/sdk-react/src/components/ui/FusionAuthLogoutButton/index.tsx:13](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/ui/FusionAuthLogoutButton/index.tsx#L13) +[packages/sdk-react/src/components/ui/FusionAuthLogoutButton/index.tsx:13](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/ui/FusionAuthLogoutButton/index.tsx#L13) diff --git a/packages/sdk-react/docs/modules/ui_FusionAuthRegisterButton.md b/packages/sdk-react/docs/modules/ui_FusionAuthRegisterButton.md index 30a2074..f59d32e 100644 --- a/packages/sdk-react/docs/modules/ui_FusionAuthRegisterButton.md +++ b/packages/sdk-react/docs/modules/ui_FusionAuthRegisterButton.md @@ -28,4 +28,4 @@ Calls the `startRegister` method from `FusionAuthProviderContext`. #### Defined in -[packages/sdk-react/src/components/ui/FusionAuthRegisterButton/index.tsx:15](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/ui/FusionAuthRegisterButton/index.tsx#L15) +[packages/sdk-react/src/components/ui/FusionAuthRegisterButton/index.tsx:15](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/ui/FusionAuthRegisterButton/index.tsx#L15) diff --git a/packages/sdk-react/docs/modules/ui_RequireAuth.md b/packages/sdk-react/docs/modules/ui_RequireAuth.md index 50286a5..5195858 100644 --- a/packages/sdk-react/docs/modules/ui_RequireAuth.md +++ b/packages/sdk-react/docs/modules/ui_RequireAuth.md @@ -28,4 +28,4 @@ Only renders children when user is authenticated. #### Defined in -[packages/sdk-react/src/components/ui/RequireAuth/index.tsx:10](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/ui/RequireAuth/index.tsx#L10) +[packages/sdk-react/src/components/ui/RequireAuth/index.tsx:10](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/ui/RequireAuth/index.tsx#L10) diff --git a/packages/sdk-react/docs/modules/ui_Unauthenticated.md b/packages/sdk-react/docs/modules/ui_Unauthenticated.md index 577dbf5..3980d42 100644 --- a/packages/sdk-react/docs/modules/ui_Unauthenticated.md +++ b/packages/sdk-react/docs/modules/ui_Unauthenticated.md @@ -29,4 +29,4 @@ Only renders children when user is unauthenticated. #### Defined in -[packages/sdk-react/src/components/ui/Unauthenticated/index.tsx:5](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/63efa2d5360c2b7e1392ffa730dac8f5a0bc8e19/packages/sdk-react/src/components/ui/Unauthenticated/index.tsx#L5) +[packages/sdk-react/src/components/ui/Unauthenticated/index.tsx:5](https://github.com/FusionAuth/fusionauth-javascript-sdk/blob/ee8adbc65b4bc7586f80efa86002158c90d78a7e/packages/sdk-react/src/components/ui/Unauthenticated/index.tsx#L5) diff --git a/packages/sdk-vue/README.md b/packages/sdk-vue/README.md index ae8333d..1e69a09 100644 --- a/packages/sdk-vue/README.md +++ b/packages/sdk-vue/README.md @@ -12,6 +12,7 @@ An SDK for using FusionAuth in Vue applications. - [useFusionAuth Composable](#usefusionauth-composable) - [State parameter](#state-parameter) - [DPoP Mode](#dpop-mode) + - [Resource Server Guidance](#resource-server-guidance) - [UI Components](#ui-components) - [Protecting Content](#protecting-content) - [Pre-built buttons](#pre-built-buttons) @@ -236,6 +237,16 @@ const config: FusionAuthConfig = { } ``` +##### Resource Server Guidance + +If you're building a resource server that validates FusionAuth-issued DPoP tokens (this guidance applies regardless of which SDK, if any, the resource server itself uses): + +- This SDK does not implement `jti` replay prevention — tracking which proof JTIs have already been seen, and rejecting duplicates, is the resource server's responsibility. + - Single-instance deployments: an in-memory `Map` with TTL-based eviction is sufficient. + - Horizontally scaled deployments: a distributed store (e.g. Redis) is required, since replay state must be shared across instances. +- Validate the proof's `htu` claim against the request's actual URL. If the resource server sits behind a reverse proxy, ensure it's configured to trust the proxy and expose the public-facing URL (not an internal one) for this comparison. +- The `Authorization` header uses the `DPoP` scheme, not `Bearer` — resource servers must accept `Authorization: DPoP `. + ### UI Components #### Protecting Content diff --git a/packages/sdk-vue/docs/README.md b/packages/sdk-vue/docs/README.md index b9f215c..0ac32e0 100644 --- a/packages/sdk-vue/docs/README.md +++ b/packages/sdk-vue/docs/README.md @@ -6,16 +6,18 @@ An SDK for using FusionAuth in Vue applications. - [Overview](#overview) - [Getting Started](#getting-started) -- [Installation](#installation) + - [Quickstart](#quickstart) + - [Installation](#installation) - [Usage](#usage) - [Configuring the SDK](#configuring-the-sdk) - [Configuring with Nuxt](#configuring-with-nuxt) - [useFusionAuth Composable](#usefusionauth-composable) - [State parameter](#state-parameter) + - [DPoP Mode](#dpop-mode) + - [Resource Server Guidance](#resource-server-guidance) - [UI Components](#ui-components) - [Protecting Content](#protecting-content) - [Pre-built buttons](#pre-built-buttons) -- [Quickstart](#quickstart) - [Documentation](#documentation) - [Known Issues](#known-issues) - [Releases](#releases) @@ -41,18 +43,19 @@ then log in. After that, they are sent back to your Vue application. Once authentication succeeds, the following secure, HTTP-only cookies will be set: -- `app.at` - an OAuth [Access - Token](https://fusionauth.io/docs/v1/tech/oauth/tokens#access-token) +- `app.at` - an OAuth [Access + Token](https://fusionauth.io/docs/v1/tech/oauth/tokens#access-token) -- `app.rt` - a [Refresh - Token](https://fusionauth.io/docs/v1/tech/oauth/tokens#refresh-token) - used to obtain a new `app.at`. This cookie will only be set if - refresh tokens are enabled on your FusionAuth instance. +- `app.rt` - a [Refresh + Token](https://fusionauth.io/docs/v1/tech/oauth/tokens#refresh-token) + used to obtain a new `app.at`. This cookie will only be set if + refresh tokens are enabled on your FusionAuth instance. The access token can be presented to APIs to authorize the request and the refresh token can be used to get a new access token. There are 2 ways to interact with this SDK: + 1. By hosting your own server that performs the OAuth token exchange and meets the [server code requirements for FusionAuth Web SDKs](https://github.com/FusionAuth/fusionauth-javascript-sdk-express#server-code-requirements). 2. By using the server hosted on your FusionAuth instance, i.e., not writing your own server code. @@ -63,6 +66,12 @@ compliant identity server. ## Getting Started +If you are new to Vue development, you may want to start with the Quickstart guide. If you are already familiar with Vue development, skip to the Installation section. + +### Quickstart + +See the [FusionAuth Vue Quickstart](https://fusionauth.io/docs/quickstarts/quickstart-javascript-vue-web) for a full tutorial on using FusionAuth and Vue. + ### Installation NPM: @@ -85,21 +94,24 @@ Configure and initialize the `FusionAuthVuePlugin` when you create your Vue app: ```typescript import { createApp } from 'vue'; -import FusionAuthVuePlugin, { type FusionAuthConfig } from '@fusionauth/vue-sdk'; +import FusionAuthVuePlugin, { + type FusionAuthConfig, +} from '@fusionauth/vue-sdk'; const config: FusionAuthConfig = { - clientId: "", // Your app's FusionAuth client id - serverUrl: "", // The url of the server that performs the token exchange - redirectUri: "", // The URI that the user is directed to after the login/register/logout action + clientId: '', // Your app's FusionAuth client id + serverUrl: '', // The url of the server that performs the token exchange + redirectUri: '', // The URI that the user is directed to after the login/register/logout action shouldAutoFetchUserInfo: true, // Automatically fetch userInfo when logged in. Defaults to false. shouldAutoRefresh: true, // Enables automatic token refresh. Defaults to false. - onRedirect: (state?: string) => { }, // Optional callback invoked upon redirect back from login or register. -} + onRedirect: (state?: string) => {}, // Optional callback invoked upon redirect back from login or register. + // useDpop: true, // Opt-in to DPoP mode. See "DPoP Mode" below. Defaults to false. +}; const app = createApp(App); app.use(FusionAuthVuePlugin, config); -app.mount('#app') +app.mount('#app'); ``` If you want to use the pre-styled buttons, don't forget to import the css file: @@ -130,13 +142,13 @@ Using `createFusionAuth`, the SDK can be configured more flexibly. ```typescript export default defineNuxtPlugin({ setup(nuxtApp) { - const fusionauth = createFusionAuth(config); - nuxtApp.vueApp.use(FusionAuthVuePlugin, { instance: fusionauth }) + const fusionauth = createFusionAuth(config); + nuxtApp.vueApp.use(FusionAuthVuePlugin, { instance: fusionauth }); return { - provide: { fusionauth } + provide: { fusionauth }, }; }, -}) +}); ``` ### `useFusionAuth` composable @@ -146,33 +158,23 @@ View the [full API documentation](https://github.com/FusionAuth/fusionauth-javas ```html