@farmsdotmarket/openauth 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of @farmsdotmarket/openauth might be problematic. Click here for more details.
- package/.changeset/README.md +8 -0
- package/.changeset/commit.cjs +4 -0
- package/.changeset/config.json +11 -0
- package/.changeset/farms-openauth-release-0-4-3-farms-2.md +10 -0
- package/.changeset/popular-geese-reply.md +5 -0
- package/.changeset/stupid-boats-play.md +5 -0
- package/.changeset/ten-pans-invent.md +5 -0
- package/.github/CODE_OF_CONDUCT +15 -0
- package/.github/workflows/docs.yml +39 -0
- package/.github/workflows/format.yml +26 -0
- package/.github/workflows/release.yml +28 -0
- package/.github/workflows/test.yml +20 -0
- package/.prettierrc +3 -0
- package/CNAME +1 -0
- package/FARMS_RELEASE.md +82 -0
- package/LICENSE +22 -0
- package/PATCHES.md +32 -0
- package/README.md +311 -0
- package/bun.lockb +0 -0
- package/bunfig.toml +2 -0
- package/examples/README.md +28 -0
- package/examples/client/astro/.vscode/extensions.json +4 -0
- package/examples/client/astro/.vscode/launch.json +11 -0
- package/examples/client/astro/README.md +7 -0
- package/examples/client/astro/astro.config.mjs +10 -0
- package/examples/client/astro/package.json +15 -0
- package/examples/client/astro/public/favicon.svg +9 -0
- package/examples/client/astro/src/assets/astro.svg +1 -0
- package/examples/client/astro/src/assets/background.svg +1 -0
- package/examples/client/astro/src/auth.ts +23 -0
- package/examples/client/astro/src/components/Welcome.astro +209 -0
- package/examples/client/astro/src/env.d.ts +10 -0
- package/examples/client/astro/src/layouts/Layout.astro +22 -0
- package/examples/client/astro/src/middleware.ts +31 -0
- package/examples/client/astro/src/pages/callback.ts +19 -0
- package/examples/client/astro/src/pages/index.astro +11 -0
- package/examples/client/astro/tsconfig.json +5 -0
- package/examples/client/cloudflare-api/api.ts +80 -0
- package/examples/client/cloudflare-api/package.json +5 -0
- package/examples/client/jwt-api/CHANGELOG.md +8 -0
- package/examples/client/jwt-api/README.md +13 -0
- package/examples/client/jwt-api/index.ts +45 -0
- package/examples/client/jwt-api/package.json +15 -0
- package/examples/client/lambda-api/api.ts +69 -0
- package/examples/client/lambda-api/package.json +5 -0
- package/examples/client/nextjs/CHANGELOG.md +46 -0
- package/examples/client/nextjs/README.md +26 -0
- package/examples/client/nextjs/app/actions.ts +61 -0
- package/examples/client/nextjs/app/api/callback/route.ts +11 -0
- package/examples/client/nextjs/app/auth.ts +29 -0
- package/examples/client/nextjs/app/favicon.ico +0 -0
- package/examples/client/nextjs/app/globals.css +42 -0
- package/examples/client/nextjs/app/layout.tsx +32 -0
- package/examples/client/nextjs/app/page.module.css +169 -0
- package/examples/client/nextjs/app/page.tsx +97 -0
- package/examples/client/nextjs/next.config.ts +7 -0
- package/examples/client/nextjs/package.json +23 -0
- package/examples/client/nextjs/public/file.svg +1 -0
- package/examples/client/nextjs/public/globe.svg +1 -0
- package/examples/client/nextjs/public/next.svg +1 -0
- package/examples/client/nextjs/public/vercel.svg +1 -0
- package/examples/client/nextjs/public/window.svg +1 -0
- package/examples/client/nextjs/tsconfig.json +27 -0
- package/examples/client/react/README.md +29 -0
- package/examples/client/react/index.html +13 -0
- package/examples/client/react/package.json +30 -0
- package/examples/client/react/public/vite.svg +1 -0
- package/examples/client/react/src/App.tsx +39 -0
- package/examples/client/react/src/AuthContext.tsx +153 -0
- package/examples/client/react/src/assets/react.svg +1 -0
- package/examples/client/react/src/main.tsx +12 -0
- package/examples/client/react/src/vite-env.d.ts +1 -0
- package/examples/client/react/tsconfig.app.json +26 -0
- package/examples/client/react/tsconfig.json +11 -0
- package/examples/client/react/tsconfig.node.json +24 -0
- package/examples/client/react/vite.config.ts +7 -0
- package/examples/client/sveltekit/package.json +24 -0
- package/examples/client/sveltekit/src/app.d.ts +15 -0
- package/examples/client/sveltekit/src/app.html +12 -0
- package/examples/client/sveltekit/src/hooks.server.ts +29 -0
- package/examples/client/sveltekit/src/lib/auth.server.ts +29 -0
- package/examples/client/sveltekit/src/routes/+page.server.ts +5 -0
- package/examples/client/sveltekit/src/routes/+page.svelte +5 -0
- package/examples/client/sveltekit/src/routes/callback/+server.ts +17 -0
- package/examples/client/sveltekit/static/favicon.png +0 -0
- package/examples/client/sveltekit/svelte.config.js +18 -0
- package/examples/client/sveltekit/tsconfig.json +19 -0
- package/examples/client/sveltekit/vite.config.ts +6 -0
- package/examples/issuer/bun/issuer.ts +43 -0
- package/examples/issuer/bun/package.json +7 -0
- package/examples/issuer/cloudflare/issuer.ts +47 -0
- package/examples/issuer/cloudflare/package.json +8 -0
- package/examples/issuer/cloudflare/sst-env.d.ts +17 -0
- package/examples/issuer/cloudflare/sst.config.ts +23 -0
- package/examples/issuer/custom-frontend/auth/issuer.ts +43 -0
- package/examples/issuer/custom-frontend/auth/package.json +7 -0
- package/examples/issuer/custom-frontend/frontend/frontend.tsx +57 -0
- package/examples/issuer/custom-frontend/frontend/package.json +6 -0
- package/examples/issuer/custom-frontend/package.json +5 -0
- package/examples/issuer/lambda/issuer.ts +35 -0
- package/examples/issuer/lambda/package.json +8 -0
- package/examples/issuer/lambda/sst-env.d.ts +9 -0
- package/examples/issuer/lambda/sst.config.ts +15 -0
- package/examples/issuer/node/authorizer.ts +38 -0
- package/examples/issuer/node/package.json +5 -0
- package/examples/quickstart/sst/README.md +36 -0
- package/examples/quickstart/sst/app/actions.ts +62 -0
- package/examples/quickstart/sst/app/api/callback/route.ts +15 -0
- package/examples/quickstart/sst/app/auth.ts +29 -0
- package/examples/quickstart/sst/app/favicon.ico +0 -0
- package/examples/quickstart/sst/app/globals.css +42 -0
- package/examples/quickstart/sst/app/layout.tsx +32 -0
- package/examples/quickstart/sst/app/page.module.css +200 -0
- package/examples/quickstart/sst/app/page.tsx +53 -0
- package/examples/quickstart/sst/auth/index.ts +37 -0
- package/examples/quickstart/sst/auth/subjects.ts +8 -0
- package/examples/quickstart/sst/next.config.ts +7 -0
- package/examples/quickstart/sst/package-lock.json +1165 -0
- package/examples/quickstart/sst/package.json +26 -0
- package/examples/quickstart/sst/public/file.svg +1 -0
- package/examples/quickstart/sst/public/globe.svg +1 -0
- package/examples/quickstart/sst/public/next.svg +1 -0
- package/examples/quickstart/sst/public/vercel.svg +1 -0
- package/examples/quickstart/sst/public/window.svg +1 -0
- package/examples/quickstart/sst/sst-env.d.ts +18 -0
- package/examples/quickstart/sst/sst.config.ts +21 -0
- package/examples/quickstart/sst/tsconfig.json +27 -0
- package/examples/quickstart/standalone/README.md +36 -0
- package/examples/quickstart/standalone/app/actions.ts +62 -0
- package/examples/quickstart/standalone/app/api/callback/route.ts +15 -0
- package/examples/quickstart/standalone/app/auth.ts +28 -0
- package/examples/quickstart/standalone/app/favicon.ico +0 -0
- package/examples/quickstart/standalone/app/globals.css +42 -0
- package/examples/quickstart/standalone/app/layout.tsx +32 -0
- package/examples/quickstart/standalone/app/page.module.css +200 -0
- package/examples/quickstart/standalone/app/page.tsx +53 -0
- package/examples/quickstart/standalone/auth/index.ts +32 -0
- package/examples/quickstart/standalone/auth/subjects.ts +8 -0
- package/examples/quickstart/standalone/bun.lockb +0 -0
- package/examples/quickstart/standalone/next.config.ts +7 -0
- package/examples/quickstart/standalone/package.json +25 -0
- package/examples/quickstart/standalone/public/file.svg +1 -0
- package/examples/quickstart/standalone/public/globe.svg +1 -0
- package/examples/quickstart/standalone/public/next.svg +1 -0
- package/examples/quickstart/standalone/public/vercel.svg +1 -0
- package/examples/quickstart/standalone/public/window.svg +1 -0
- package/examples/quickstart/standalone/tsconfig.json +27 -0
- package/examples/subjects.ts +8 -0
- package/examples/tsconfig.json +10 -0
- package/package.json +23 -0
- package/packages/openauth/CHANGELOG.md +310 -0
- package/packages/openauth/bunfig.toml +2 -0
- package/packages/openauth/package.json +51 -0
- package/packages/openauth/script/build.ts +25 -0
- package/packages/openauth/src/client-native.ts +204 -0
- package/packages/openauth/src/client.ts +776 -0
- package/packages/openauth/src/css.d.ts +4 -0
- package/packages/openauth/src/error.ts +120 -0
- package/packages/openauth/src/index.ts +26 -0
- package/packages/openauth/src/issuer.ts +1156 -0
- package/packages/openauth/src/jwt.ts +17 -0
- package/packages/openauth/src/keys.ts +139 -0
- package/packages/openauth/src/pkce.ts +40 -0
- package/packages/openauth/src/provider/apple.ts +127 -0
- package/packages/openauth/src/provider/arctic.ts +66 -0
- package/packages/openauth/src/provider/code.ts +227 -0
- package/packages/openauth/src/provider/cognito.ts +74 -0
- package/packages/openauth/src/provider/discord.ts +45 -0
- package/packages/openauth/src/provider/facebook.ts +84 -0
- package/packages/openauth/src/provider/github.ts +45 -0
- package/packages/openauth/src/provider/google.ts +85 -0
- package/packages/openauth/src/provider/index.ts +3 -0
- package/packages/openauth/src/provider/jumpcloud.ts +45 -0
- package/packages/openauth/src/provider/keycloak.ts +75 -0
- package/packages/openauth/src/provider/linkedin.ts +12 -0
- package/packages/openauth/src/provider/microsoft.ts +100 -0
- package/packages/openauth/src/provider/oauth2.ts +297 -0
- package/packages/openauth/src/provider/oidc.ts +179 -0
- package/packages/openauth/src/provider/password.ts +672 -0
- package/packages/openauth/src/provider/provider.ts +33 -0
- package/packages/openauth/src/provider/slack.ts +67 -0
- package/packages/openauth/src/provider/spotify.ts +45 -0
- package/packages/openauth/src/provider/twitch.ts +45 -0
- package/packages/openauth/src/provider/x.ts +46 -0
- package/packages/openauth/src/provider/yahoo.ts +45 -0
- package/packages/openauth/src/random.ts +28 -0
- package/packages/openauth/src/storage/aws.ts +59 -0
- package/packages/openauth/src/storage/cloudflare.ts +77 -0
- package/packages/openauth/src/storage/dynamo.ts +193 -0
- package/packages/openauth/src/storage/memory.ts +135 -0
- package/packages/openauth/src/storage/storage.ts +46 -0
- package/packages/openauth/src/subject.ts +130 -0
- package/packages/openauth/src/ui/base.tsx +118 -0
- package/packages/openauth/src/ui/code.tsx +212 -0
- package/packages/openauth/src/ui/form.tsx +40 -0
- package/packages/openauth/src/ui/icon.tsx +95 -0
- package/packages/openauth/src/ui/password.tsx +403 -0
- package/packages/openauth/src/ui/select.tsx +221 -0
- package/packages/openauth/src/ui/theme.ts +319 -0
- package/packages/openauth/src/ui/ui.css +252 -0
- package/packages/openauth/src/util.ts +58 -0
- package/packages/openauth/test/client-native.test.ts +30 -0
- package/packages/openauth/test/client.test.ts +177 -0
- package/packages/openauth/test/issuer.test.ts +393 -0
- package/packages/openauth/test/scrap.test.ts +85 -0
- package/packages/openauth/test/storage.test.ts +94 -0
- package/packages/openauth/test/util.test.ts +103 -0
- package/packages/openauth/tsconfig.json +13 -0
- package/scripts/format +15 -0
- package/www/.vscode/extensions.json +4 -0
- package/www/.vscode/launch.json +11 -0
- package/www/README.md +55 -0
- package/www/astro.config.mjs +136 -0
- package/www/bun.lockb +0 -0
- package/www/config.ts +4 -0
- package/www/generate.ts +911 -0
- package/www/package.json +24 -0
- package/www/public/favicon-dark.svg +3 -0
- package/www/public/favicon.ico +0 -0
- package/www/public/favicon.svg +3 -0
- package/www/public/social-share.png +0 -0
- package/www/src/assets/logo-dark.svg +11 -0
- package/www/src/assets/logo-light.svg +11 -0
- package/www/src/components/Hero.astro +11 -0
- package/www/src/components/Lander.astro +176 -0
- package/www/src/content/config.ts +6 -0
- package/www/src/content/docs/docs/client.mdx +650 -0
- package/www/src/content/docs/docs/index.mdx +325 -0
- package/www/src/content/docs/docs/issuer.mdx +512 -0
- package/www/src/content/docs/docs/provider/apple.mdx +233 -0
- package/www/src/content/docs/docs/provider/code.mdx +163 -0
- package/www/src/content/docs/docs/provider/cognito.mdx +173 -0
- package/www/src/content/docs/docs/provider/discord.mdx +139 -0
- package/www/src/content/docs/docs/provider/facebook.mdx +233 -0
- package/www/src/content/docs/docs/provider/github.mdx +139 -0
- package/www/src/content/docs/docs/provider/google.mdx +233 -0
- package/www/src/content/docs/docs/provider/jumpcloud.mdx +139 -0
- package/www/src/content/docs/docs/provider/keycloak.mdx +176 -0
- package/www/src/content/docs/docs/provider/microsoft.mdx +252 -0
- package/www/src/content/docs/docs/provider/oauth2.mdx +173 -0
- package/www/src/content/docs/docs/provider/oidc.mdx +113 -0
- package/www/src/content/docs/docs/provider/password.mdx +237 -0
- package/www/src/content/docs/docs/provider/slack.mdx +157 -0
- package/www/src/content/docs/docs/provider/spotify.mdx +139 -0
- package/www/src/content/docs/docs/provider/twitch.mdx +139 -0
- package/www/src/content/docs/docs/provider/x.mdx +139 -0
- package/www/src/content/docs/docs/provider/yahoo.mdx +139 -0
- package/www/src/content/docs/docs/start/nextjs-dark.png +0 -0
- package/www/src/content/docs/docs/start/nextjs-light.png +0 -0
- package/www/src/content/docs/docs/start/sst.mdx +423 -0
- package/www/src/content/docs/docs/start/standalone.mdx +376 -0
- package/www/src/content/docs/docs/storage/cloudflare.mdx +63 -0
- package/www/src/content/docs/docs/storage/dynamo.mdx +127 -0
- package/www/src/content/docs/docs/storage/memory.mdx +77 -0
- package/www/src/content/docs/docs/subject.mdx +139 -0
- package/www/src/content/docs/docs/themes-dark.png +0 -0
- package/www/src/content/docs/docs/themes-light.png +0 -0
- package/www/src/content/docs/docs/ui/code.mdx +248 -0
- package/www/src/content/docs/docs/ui/password.mdx +410 -0
- package/www/src/content/docs/docs/ui/select.mdx +99 -0
- package/www/src/content/docs/docs/ui/theme.mdx +284 -0
- package/www/src/content/docs/index.mdx +12 -0
- package/www/src/custom.css +0 -0
- package/www/src/env.d.ts +2 -0
- package/www/src/styles/lander.css +15 -0
- package/www/tsconfig.json +3 -0
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: PasswordProvider
|
|
3
|
+
editUrl: https://github.com/toolbeam/openauth/blob/master/packages/openauth/src/provider/password.ts
|
|
4
|
+
description: Reference doc for the `PasswordProvider`.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
import { Segment, Section, NestedTitle, InlineSection } from 'toolbeam-docs-theme/components'
|
|
8
|
+
import { Tabs, TabItem } from '@astrojs/starlight/components'
|
|
9
|
+
|
|
10
|
+
<div class="tsdoc">
|
|
11
|
+
<Section type="about">
|
|
12
|
+
Configures a provider that supports username and password authentication. This is usually
|
|
13
|
+
paired with the `PasswordUI`.
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
import { PasswordUI } from "@openauthjs/openauth/ui/password"
|
|
17
|
+
import { PasswordProvider } from "@openauthjs/openauth/provider/password"
|
|
18
|
+
|
|
19
|
+
export default issuer({
|
|
20
|
+
providers: {
|
|
21
|
+
password: PasswordProvider(
|
|
22
|
+
PasswordUI({
|
|
23
|
+
copy: {
|
|
24
|
+
error_email_taken: "This email is already taken."
|
|
25
|
+
},
|
|
26
|
+
sendCode: (email, code) => console.log(email, code)
|
|
27
|
+
})
|
|
28
|
+
)
|
|
29
|
+
},
|
|
30
|
+
// ...
|
|
31
|
+
})
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Behind the scenes, the `PasswordProvider` expects callbacks that implements request handlers
|
|
35
|
+
that generate the UI for the following.
|
|
36
|
+
|
|
37
|
+
```ts
|
|
38
|
+
PasswordProvider({
|
|
39
|
+
// ...
|
|
40
|
+
login: (req, form, error) => Promise<Response>
|
|
41
|
+
register: (req, state, form, error) => Promise<Response>
|
|
42
|
+
change: (req, state, form, error) => Promise<Response>
|
|
43
|
+
})
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
This allows you to create your own UI for each of these screens.
|
|
47
|
+
</Section>
|
|
48
|
+
---
|
|
49
|
+
## Methods
|
|
50
|
+
### PasswordProvider
|
|
51
|
+
<Segment>
|
|
52
|
+
<Section type="signature">
|
|
53
|
+
```ts
|
|
54
|
+
PasswordProvider(config)
|
|
55
|
+
```
|
|
56
|
+
</Section>
|
|
57
|
+
<Section type="parameters">
|
|
58
|
+
#### Parameters
|
|
59
|
+
- <p><code class="key">config</code> [<code class="type">PasswordConfig</code>](/docs/provider/password#passwordconfig)</p>
|
|
60
|
+
</Section>
|
|
61
|
+
<InlineSection>
|
|
62
|
+
**Returns** <code class="type">Provider</code>
|
|
63
|
+
</InlineSection>
|
|
64
|
+
</Segment>
|
|
65
|
+
## PasswordChangeError
|
|
66
|
+
<Segment>
|
|
67
|
+
<Section type="parameters">
|
|
68
|
+
<InlineSection>
|
|
69
|
+
**Type** <code class="symbol">{ </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">invalid_email</code><code class="symbol">”</code><code class="symbol"> }</code><code class="symbol"> | </code><code class="symbol">{ </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">invalid_code</code><code class="symbol">”</code><code class="symbol"> }</code><code class="symbol"> | </code><code class="symbol">{ </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">invalid_password</code><code class="symbol">”</code><code class="symbol"> }</code><code class="symbol"> | </code><code class="symbol">{ </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">password_mismatch</code><code class="symbol">”</code><code class="symbol"> }</code><code class="symbol"> | </code><code class="symbol">{ </code><code class="key">message</code><code class="symbol">: </code><code class="primitive">string</code><code class="symbol">, </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">validation_error</code><code class="symbol">”</code><code class="symbol"> }</code>
|
|
70
|
+
</InlineSection>
|
|
71
|
+
</Section>
|
|
72
|
+
The errors that can happen on the change password screen.
|
|
73
|
+
|
|
74
|
+
| Error | Description |
|
|
75
|
+
| ----- | ----------- |
|
|
76
|
+
| `invalid_email` | The email is invalid. |
|
|
77
|
+
| `invalid_code` | The code is invalid. |
|
|
78
|
+
| `invalid_password` | The password is invalid. |
|
|
79
|
+
| `password_mismatch` | The passwords do not match. |
|
|
80
|
+
</Segment>
|
|
81
|
+
## PasswordChangeState
|
|
82
|
+
<Segment>
|
|
83
|
+
<Section type="parameters">
|
|
84
|
+
<InlineSection>
|
|
85
|
+
**Type** <code class="symbol">{ </code><code class="key">redirect</code><code class="symbol">: </code><code class="primitive">string</code><code class="symbol">, </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">start</code><code class="symbol">”</code><code class="symbol"> }</code><code class="symbol"> | </code><code class="symbol">{ </code><code class="key">code</code><code class="symbol">: </code><code class="primitive">string</code><code class="symbol">, </code><code class="key">email</code><code class="symbol">: </code><code class="primitive">string</code><code class="symbol">, </code><code class="key">redirect</code><code class="symbol">: </code><code class="primitive">string</code><code class="symbol">, </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">code</code><code class="symbol">”</code><code class="symbol"> }</code><code class="symbol"> | </code><code class="symbol">{ </code><code class="key">email</code><code class="symbol">: </code><code class="primitive">string</code><code class="symbol">, </code><code class="key">redirect</code><code class="symbol">: </code><code class="primitive">string</code><code class="symbol">, </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">update</code><code class="symbol">”</code><code class="symbol"> }</code>
|
|
86
|
+
</InlineSection>
|
|
87
|
+
</Section>
|
|
88
|
+
The state of the password change flow.
|
|
89
|
+
|
|
90
|
+
| State | Description |
|
|
91
|
+
| ----- | ----------- |
|
|
92
|
+
| `start` | The user is asked to enter their email address to start the flow. |
|
|
93
|
+
| `code` | The user needs to enter the pin code to verify their email. |
|
|
94
|
+
| `update` | The user is asked to enter their new password and confirm it. |
|
|
95
|
+
</Segment>
|
|
96
|
+
## PasswordConfig
|
|
97
|
+
<Segment>
|
|
98
|
+
<Section type="parameters">
|
|
99
|
+
- <p>[<code class="key">change</code>](#passwordconfig.change) <code class="primitive">(req: <code class="type">Request</code>, state: [<code class="type">PasswordChangeState</code>](/docs/provider/password#passwordchangestate), form?: <code class="type">FormData</code>, error?: [<code class="type">PasswordChangeError</code>](/docs/provider/password#passwordchangeerror)) => <code class="primitive">Promise</code><code class="symbol"><</code><code class="type">Response</code><code class="symbol">></code></code></p>
|
|
100
|
+
- <p>[<code class="key">login</code>](#passwordconfig.login) <code class="primitive">(req: <code class="type">Request</code>, form?: <code class="type">FormData</code>, error?: [<code class="type">PasswordLoginError</code>](/docs/provider/password#passwordloginerror)) => <code class="primitive">Promise</code><code class="symbol"><</code><code class="type">Response</code><code class="symbol">></code></code></p>
|
|
101
|
+
- <p>[<code class="key">register</code>](#passwordconfig.register) <code class="primitive">(req: <code class="type">Request</code>, state: [<code class="type">PasswordRegisterState</code>](/docs/provider/password#passwordregisterstate), form?: <code class="type">FormData</code>, error?: [<code class="type">PasswordRegisterError</code>](/docs/provider/password#passwordregistererror)) => <code class="primitive">Promise</code><code class="symbol"><</code><code class="type">Response</code><code class="symbol">></code></code></p>
|
|
102
|
+
- <p>[<code class="key">sendCode</code>](#passwordconfig.sendcode) <code class="primitive">(email: <code class="primitive">string</code>, code: <code class="primitive">string</code>) => <code class="primitive">Promise</code><code class="symbol"><</code><code class="primitive">void</code><code class="symbol">></code></code></p>
|
|
103
|
+
- <p>[<code class="key">validatePassword?</code>](#passwordconfig.validatepassword) [<code class="type">StandardSchema</code>](https://github.com/standard-schema/standard-schema)<code class="symbol"> | </code><code class="primitive">(password: <code class="primitive">string</code>) => <code class="primitive">undefined</code><code class="symbol"> | </code><code class="primitive">string</code><code class="symbol"> | </code><code class="primitive">Promise</code><code class="symbol"><</code><code class="primitive">undefined</code><code class="symbol"> | </code><code class="primitive">string</code><code class="symbol">></code></code></p>
|
|
104
|
+
</Section>
|
|
105
|
+
</Segment>
|
|
106
|
+
<NestedTitle id="passwordconfig.change" Tag="h4" parent="PasswordConfig.">change</NestedTitle>
|
|
107
|
+
<Segment>
|
|
108
|
+
<Section type="parameters">
|
|
109
|
+
<InlineSection>
|
|
110
|
+
**Type** <code class="primitive">(req: <code class="type">Request</code>, state: [<code class="type">PasswordChangeState</code>](/docs/provider/password#passwordchangestate), form?: <code class="type">FormData</code>, error?: [<code class="type">PasswordChangeError</code>](/docs/provider/password#passwordchangeerror)) => <code class="primitive">Promise</code><code class="symbol"><</code><code class="type">Response</code><code class="symbol">></code></code>
|
|
111
|
+
</InlineSection>
|
|
112
|
+
</Section>
|
|
113
|
+
The request handler to generate the UI for the change password screen.
|
|
114
|
+
|
|
115
|
+
Takes the standard [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request)
|
|
116
|
+
and optionally [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData)
|
|
117
|
+
ojects.
|
|
118
|
+
|
|
119
|
+
Also passes in the current `state` of the flow and any `error` that occurred.
|
|
120
|
+
|
|
121
|
+
Expects the [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) object
|
|
122
|
+
in return.
|
|
123
|
+
</Segment>
|
|
124
|
+
<NestedTitle id="passwordconfig.login" Tag="h4" parent="PasswordConfig.">login</NestedTitle>
|
|
125
|
+
<Segment>
|
|
126
|
+
<Section type="parameters">
|
|
127
|
+
<InlineSection>
|
|
128
|
+
**Type** <code class="primitive">(req: <code class="type">Request</code>, form?: <code class="type">FormData</code>, error?: [<code class="type">PasswordLoginError</code>](/docs/provider/password#passwordloginerror)) => <code class="primitive">Promise</code><code class="symbol"><</code><code class="type">Response</code><code class="symbol">></code></code>
|
|
129
|
+
</InlineSection>
|
|
130
|
+
</Section>
|
|
131
|
+
The request handler to generate the UI for the login screen.
|
|
132
|
+
|
|
133
|
+
Takes the standard [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request)
|
|
134
|
+
and optionally [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData)
|
|
135
|
+
ojects.
|
|
136
|
+
|
|
137
|
+
In case of an error, this is called again with the `error`.
|
|
138
|
+
|
|
139
|
+
Expects the [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) object
|
|
140
|
+
in return.
|
|
141
|
+
</Segment>
|
|
142
|
+
<NestedTitle id="passwordconfig.register" Tag="h4" parent="PasswordConfig.">register</NestedTitle>
|
|
143
|
+
<Segment>
|
|
144
|
+
<Section type="parameters">
|
|
145
|
+
<InlineSection>
|
|
146
|
+
**Type** <code class="primitive">(req: <code class="type">Request</code>, state: [<code class="type">PasswordRegisterState</code>](/docs/provider/password#passwordregisterstate), form?: <code class="type">FormData</code>, error?: [<code class="type">PasswordRegisterError</code>](/docs/provider/password#passwordregistererror)) => <code class="primitive">Promise</code><code class="symbol"><</code><code class="type">Response</code><code class="symbol">></code></code>
|
|
147
|
+
</InlineSection>
|
|
148
|
+
</Section>
|
|
149
|
+
The request handler to generate the UI for the register screen.
|
|
150
|
+
|
|
151
|
+
Takes the standard [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request)
|
|
152
|
+
and optionally [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData)
|
|
153
|
+
ojects.
|
|
154
|
+
|
|
155
|
+
Also passes in the current `state` of the flow and any `error` that occurred.
|
|
156
|
+
|
|
157
|
+
Expects the [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) object
|
|
158
|
+
in return.
|
|
159
|
+
</Segment>
|
|
160
|
+
<NestedTitle id="passwordconfig.sendcode" Tag="h4" parent="PasswordConfig.">sendCode</NestedTitle>
|
|
161
|
+
<Segment>
|
|
162
|
+
<Section type="parameters">
|
|
163
|
+
<InlineSection>
|
|
164
|
+
**Type** <code class="primitive">(email: <code class="primitive">string</code>, code: <code class="primitive">string</code>) => <code class="primitive">Promise</code><code class="symbol"><</code><code class="primitive">void</code><code class="symbol">></code></code>
|
|
165
|
+
</InlineSection>
|
|
166
|
+
</Section>
|
|
167
|
+
Callback to send the confirmation pin code to the user.
|
|
168
|
+
```ts
|
|
169
|
+
{
|
|
170
|
+
sendCode: async (email, code) => {
|
|
171
|
+
// Send an email with the code
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
</Segment>
|
|
176
|
+
<NestedTitle id="passwordconfig.validatepassword" Tag="h4" parent="PasswordConfig.">validatePassword?</NestedTitle>
|
|
177
|
+
<Segment>
|
|
178
|
+
<Section type="parameters">
|
|
179
|
+
<InlineSection>
|
|
180
|
+
**Type** [<code class="type">StandardSchema</code>](https://github.com/standard-schema/standard-schema)<code class="symbol"> | </code><code class="primitive">(password: <code class="primitive">string</code>) => <code class="primitive">undefined</code><code class="symbol"> | </code><code class="primitive">string</code><code class="symbol"> | </code><code class="primitive">Promise</code><code class="symbol"><</code><code class="primitive">undefined</code><code class="symbol"> | </code><code class="primitive">string</code><code class="symbol">></code></code>
|
|
181
|
+
</InlineSection>
|
|
182
|
+
</Section>
|
|
183
|
+
Callback to validate the password on sign up and password reset.
|
|
184
|
+
```ts
|
|
185
|
+
{
|
|
186
|
+
validatePassword: (password) => {
|
|
187
|
+
return password.length < 8 ? "Password must be at least 8 characters" : undefined
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
```
|
|
191
|
+
</Segment>
|
|
192
|
+
## PasswordLoginError
|
|
193
|
+
<Segment>
|
|
194
|
+
<Section type="parameters">
|
|
195
|
+
<InlineSection>
|
|
196
|
+
**Type** <code class="symbol">{ </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">invalid_password</code><code class="symbol">”</code><code class="symbol"> }</code><code class="symbol"> | </code><code class="symbol">{ </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">invalid_email</code><code class="symbol">”</code><code class="symbol"> }</code>
|
|
197
|
+
</InlineSection>
|
|
198
|
+
</Section>
|
|
199
|
+
The errors that can happen on the login screen.
|
|
200
|
+
|
|
201
|
+
| Error | Description |
|
|
202
|
+
| ----- | ----------- |
|
|
203
|
+
| `invalid_email` | The email is invalid. |
|
|
204
|
+
| `invalid_password` | The password is invalid. |
|
|
205
|
+
</Segment>
|
|
206
|
+
## PasswordRegisterError
|
|
207
|
+
<Segment>
|
|
208
|
+
<Section type="parameters">
|
|
209
|
+
<InlineSection>
|
|
210
|
+
**Type** <code class="symbol">{ </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">invalid_code</code><code class="symbol">”</code><code class="symbol"> }</code><code class="symbol"> | </code><code class="symbol">{ </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">email_taken</code><code class="symbol">”</code><code class="symbol"> }</code><code class="symbol"> | </code><code class="symbol">{ </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">invalid_email</code><code class="symbol">”</code><code class="symbol"> }</code><code class="symbol"> | </code><code class="symbol">{ </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">invalid_password</code><code class="symbol">”</code><code class="symbol"> }</code><code class="symbol"> | </code><code class="symbol">{ </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">password_mismatch</code><code class="symbol">”</code><code class="symbol"> }</code><code class="symbol"> | </code><code class="symbol">{ </code><code class="key">message</code><code class="symbol">: </code><code class="primitive">string</code><code class="symbol">, </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">validation_error</code><code class="symbol">”</code><code class="symbol"> }</code>
|
|
211
|
+
</InlineSection>
|
|
212
|
+
</Section>
|
|
213
|
+
The errors that can happen on the register screen.
|
|
214
|
+
|
|
215
|
+
| Error | Description |
|
|
216
|
+
| ----- | ----------- |
|
|
217
|
+
| `email_taken` | The email is already taken. |
|
|
218
|
+
| `invalid_email` | The email is invalid. |
|
|
219
|
+
| `invalid_code` | The code is invalid. |
|
|
220
|
+
| `invalid_password` | The password is invalid. |
|
|
221
|
+
| `password_mismatch` | The passwords do not match. |
|
|
222
|
+
</Segment>
|
|
223
|
+
## PasswordRegisterState
|
|
224
|
+
<Segment>
|
|
225
|
+
<Section type="parameters">
|
|
226
|
+
<InlineSection>
|
|
227
|
+
**Type** <code class="symbol">{ </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">start</code><code class="symbol">”</code><code class="symbol"> }</code><code class="symbol"> | </code><code class="symbol">{ </code><code class="key">code</code><code class="symbol">: </code><code class="primitive">string</code><code class="symbol">, </code><code class="key">email</code><code class="symbol">: </code><code class="primitive">string</code><code class="symbol">, </code><code class="key">password</code><code class="symbol">: </code><code class="primitive">string</code><code class="symbol">, </code><code class="key">type</code><code class="symbol">: </code><code class="symbol">“</code><code class="primitive">code</code><code class="symbol">”</code><code class="symbol"> }</code>
|
|
228
|
+
</InlineSection>
|
|
229
|
+
</Section>
|
|
230
|
+
The states that can happen on the register screen.
|
|
231
|
+
|
|
232
|
+
| State | Description |
|
|
233
|
+
| ----- | ----------- |
|
|
234
|
+
| `start` | The user is asked to enter their email address and password to start the flow. |
|
|
235
|
+
| `code` | The user needs to enter the pin code to verify their email. |
|
|
236
|
+
</Segment>
|
|
237
|
+
</div>
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: SlackProvider
|
|
3
|
+
editUrl: https://github.com/toolbeam/openauth/blob/master/packages/openauth/src/provider/slack.ts
|
|
4
|
+
description: Reference doc for the `SlackProvider`.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
import { Segment, Section, NestedTitle, InlineSection } from 'toolbeam-docs-theme/components'
|
|
8
|
+
import { Tabs, TabItem } from '@astrojs/starlight/components'
|
|
9
|
+
|
|
10
|
+
<div class="tsdoc">
|
|
11
|
+
<Section type="about">
|
|
12
|
+
Use this provider to authenticate with Slack.
|
|
13
|
+
|
|
14
|
+
```ts {5-10}
|
|
15
|
+
import { SlackProvider } from "@openauthjs/openauth/provider/slack"
|
|
16
|
+
|
|
17
|
+
export default issuer({
|
|
18
|
+
providers: {
|
|
19
|
+
slack: SlackProvider({
|
|
20
|
+
team: "T1234567890",
|
|
21
|
+
clientID: "1234567890",
|
|
22
|
+
clientSecret: "0987654321",
|
|
23
|
+
scopes: ["openid", "email", "profile"]
|
|
24
|
+
})
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
```
|
|
28
|
+
</Section>
|
|
29
|
+
---
|
|
30
|
+
## Methods
|
|
31
|
+
### SlackProvider
|
|
32
|
+
<Segment>
|
|
33
|
+
<Section type="signature">
|
|
34
|
+
```ts
|
|
35
|
+
SlackProvider(config)
|
|
36
|
+
```
|
|
37
|
+
</Section>
|
|
38
|
+
<Section type="parameters">
|
|
39
|
+
#### Parameters
|
|
40
|
+
- <p><code class="key">config</code> [<code class="type">SlackConfig</code>](/docs/provider/slack#slackconfig)</p>
|
|
41
|
+
The config for the provider.
|
|
42
|
+
</Section>
|
|
43
|
+
<InlineSection>
|
|
44
|
+
**Returns** <code class="type">Provider</code>
|
|
45
|
+
</InlineSection>
|
|
46
|
+
Creates a [Slack OAuth2 provider](https://api.slack.com/authentication/sign-in-with-slack).
|
|
47
|
+
```ts
|
|
48
|
+
SlackProvider({
|
|
49
|
+
team: "T1234567890",
|
|
50
|
+
clientID: "1234567890",
|
|
51
|
+
clientSecret: "0987654321",
|
|
52
|
+
scopes: ["openid", "email", "profile"]
|
|
53
|
+
})
|
|
54
|
+
```
|
|
55
|
+
</Segment>
|
|
56
|
+
## SlackConfig
|
|
57
|
+
<Segment>
|
|
58
|
+
<Section type="parameters">
|
|
59
|
+
- <p>[<code class="key">clientID</code>](#slackconfig.clientid) <code class="primitive">string</code></p>
|
|
60
|
+
- <p>[<code class="key">clientSecret</code>](#slackconfig.clientsecret) <code class="primitive">string</code></p>
|
|
61
|
+
- <p>[<code class="key">pkce?</code>](#slackconfig.pkce) <code class="primitive">boolean</code></p>
|
|
62
|
+
- <p>[<code class="key">query?</code>](#slackconfig.query) <code class="primitive">Record</code><code class="symbol"><</code><code class="primitive">string</code>, <code class="primitive">string</code><code class="symbol">></code></p>
|
|
63
|
+
- <p>[<code class="key">scopes</code>](#slackconfig.scopes) <code class="symbol">(</code><code class="symbol">“</code><code class="primitive">email</code><code class="symbol">”</code><code class="symbol"> | </code><code class="symbol">“</code><code class="primitive">profile</code><code class="symbol">”</code><code class="symbol"> | </code><code class="symbol">“</code><code class="primitive">openid</code><code class="symbol">”</code><code class="symbol">)[]</code></p>
|
|
64
|
+
- <p>[<code class="key">team</code>](#slackconfig.team) <code class="primitive">string</code></p>
|
|
65
|
+
</Section>
|
|
66
|
+
</Segment>
|
|
67
|
+
<NestedTitle id="slackconfig.clientid" Tag="h4" parent="SlackConfig.">clientID</NestedTitle>
|
|
68
|
+
<Segment>
|
|
69
|
+
<Section type="parameters">
|
|
70
|
+
<InlineSection>
|
|
71
|
+
**Type** <code class="primitive">string</code>
|
|
72
|
+
</InlineSection>
|
|
73
|
+
</Section>
|
|
74
|
+
The client ID.
|
|
75
|
+
|
|
76
|
+
This is just a string to identify your app.
|
|
77
|
+
```ts
|
|
78
|
+
{
|
|
79
|
+
clientID: "my-client"
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
</Segment>
|
|
83
|
+
<NestedTitle id="slackconfig.clientsecret" Tag="h4" parent="SlackConfig.">clientSecret</NestedTitle>
|
|
84
|
+
<Segment>
|
|
85
|
+
<Section type="parameters">
|
|
86
|
+
<InlineSection>
|
|
87
|
+
**Type** <code class="primitive">string</code>
|
|
88
|
+
</InlineSection>
|
|
89
|
+
</Section>
|
|
90
|
+
The client secret.
|
|
91
|
+
|
|
92
|
+
This is a private key that's used to authenticate your app. It should be kept secret.
|
|
93
|
+
```ts
|
|
94
|
+
{
|
|
95
|
+
clientSecret: "0987654321"
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
</Segment>
|
|
99
|
+
<NestedTitle id="slackconfig.pkce" Tag="h4" parent="SlackConfig.">pkce?</NestedTitle>
|
|
100
|
+
<Segment>
|
|
101
|
+
<Section type="parameters">
|
|
102
|
+
<InlineSection>
|
|
103
|
+
**Type** <code class="primitive">boolean</code>
|
|
104
|
+
</InlineSection>
|
|
105
|
+
</Section>
|
|
106
|
+
|
|
107
|
+
<InlineSection>
|
|
108
|
+
**Default** false
|
|
109
|
+
</InlineSection>
|
|
110
|
+
Whether to use PKCE (Proof Key for Code Exchange) for the authorization code flow.
|
|
111
|
+
Some providers like x.com require this.
|
|
112
|
+
</Segment>
|
|
113
|
+
<NestedTitle id="slackconfig.query" Tag="h4" parent="SlackConfig.">query?</NestedTitle>
|
|
114
|
+
<Segment>
|
|
115
|
+
<Section type="parameters">
|
|
116
|
+
<InlineSection>
|
|
117
|
+
**Type** <code class="primitive">Record</code><code class="symbol"><</code><code class="primitive">string</code>, <code class="primitive">string</code><code class="symbol">></code>
|
|
118
|
+
</InlineSection>
|
|
119
|
+
</Section>
|
|
120
|
+
Any additional parameters that you want to pass to the authorization endpoint.
|
|
121
|
+
```ts
|
|
122
|
+
{
|
|
123
|
+
query: {
|
|
124
|
+
access_type: "offline",
|
|
125
|
+
prompt: "consent"
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
</Segment>
|
|
130
|
+
<NestedTitle id="slackconfig.scopes" Tag="h4" parent="SlackConfig.">scopes</NestedTitle>
|
|
131
|
+
<Segment>
|
|
132
|
+
<Section type="parameters">
|
|
133
|
+
<InlineSection>
|
|
134
|
+
**Type** <code class="symbol">(</code><code class="symbol">“</code><code class="primitive">email</code><code class="symbol">”</code><code class="symbol"> | </code><code class="symbol">“</code><code class="primitive">profile</code><code class="symbol">”</code><code class="symbol"> | </code><code class="symbol">“</code><code class="primitive">openid</code><code class="symbol">”</code><code class="symbol">)[]</code>
|
|
135
|
+
</InlineSection>
|
|
136
|
+
</Section>
|
|
137
|
+
The scopes to request from the user.
|
|
138
|
+
|
|
139
|
+
| Scope | Description |
|
|
140
|
+
|-|-|
|
|
141
|
+
| `email` | Grants permission to access the user's email address. |
|
|
142
|
+
| `profile` | Grants permission to access the user's profile information. |
|
|
143
|
+
| `openid` | Grants permission to use OpenID Connect to verify the user's identity. |
|
|
144
|
+
</Segment>
|
|
145
|
+
<NestedTitle id="slackconfig.team" Tag="h4" parent="SlackConfig.">team</NestedTitle>
|
|
146
|
+
<Segment>
|
|
147
|
+
<Section type="parameters">
|
|
148
|
+
<InlineSection>
|
|
149
|
+
**Type** <code class="primitive">string</code>
|
|
150
|
+
</InlineSection>
|
|
151
|
+
</Section>
|
|
152
|
+
The workspace the user is intending to authenticate.
|
|
153
|
+
|
|
154
|
+
If that workspace has been previously authenticated, the user will be signed in directly,
|
|
155
|
+
bypassing the consent screen.
|
|
156
|
+
</Segment>
|
|
157
|
+
</div>
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: SpotifyProvider
|
|
3
|
+
editUrl: https://github.com/toolbeam/openauth/blob/master/packages/openauth/src/provider/spotify.ts
|
|
4
|
+
description: Reference doc for the `SpotifyProvider`.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
import { Segment, Section, NestedTitle, InlineSection } from 'toolbeam-docs-theme/components'
|
|
8
|
+
import { Tabs, TabItem } from '@astrojs/starlight/components'
|
|
9
|
+
|
|
10
|
+
<div class="tsdoc">
|
|
11
|
+
<Section type="about">
|
|
12
|
+
Use this provider to authenticate with Spotify.
|
|
13
|
+
|
|
14
|
+
```ts {5-8}
|
|
15
|
+
import { SpotifyProvider } from "@openauthjs/openauth/provider/spotify"
|
|
16
|
+
|
|
17
|
+
export default issuer({
|
|
18
|
+
providers: {
|
|
19
|
+
spotify: SpotifyProvider({
|
|
20
|
+
clientID: "1234567890",
|
|
21
|
+
clientSecret: "0987654321"
|
|
22
|
+
})
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
```
|
|
26
|
+
</Section>
|
|
27
|
+
---
|
|
28
|
+
## Methods
|
|
29
|
+
### SpotifyProvider
|
|
30
|
+
<Segment>
|
|
31
|
+
<Section type="signature">
|
|
32
|
+
```ts
|
|
33
|
+
SpotifyProvider(config)
|
|
34
|
+
```
|
|
35
|
+
</Section>
|
|
36
|
+
<Section type="parameters">
|
|
37
|
+
#### Parameters
|
|
38
|
+
- <p><code class="key">config</code> [<code class="type">SpotifyConfig</code>](/docs/provider/spotify#spotifyconfig)</p>
|
|
39
|
+
The config for the provider.
|
|
40
|
+
</Section>
|
|
41
|
+
<InlineSection>
|
|
42
|
+
**Returns** <code class="type">Provider</code>
|
|
43
|
+
</InlineSection>
|
|
44
|
+
Create a Spotify OAuth2 provider.
|
|
45
|
+
```ts
|
|
46
|
+
SpotifyProvider({
|
|
47
|
+
clientID: "1234567890",
|
|
48
|
+
clientSecret: "0987654321"
|
|
49
|
+
})
|
|
50
|
+
```
|
|
51
|
+
</Segment>
|
|
52
|
+
## SpotifyConfig
|
|
53
|
+
<Segment>
|
|
54
|
+
<Section type="parameters">
|
|
55
|
+
- <p>[<code class="key">clientID</code>](#spotifyconfig.clientid) <code class="primitive">string</code></p>
|
|
56
|
+
- <p>[<code class="key">clientSecret</code>](#spotifyconfig.clientsecret) <code class="primitive">string</code></p>
|
|
57
|
+
- <p>[<code class="key">pkce?</code>](#spotifyconfig.pkce) <code class="primitive">boolean</code></p>
|
|
58
|
+
- <p>[<code class="key">query?</code>](#spotifyconfig.query) <code class="primitive">Record</code><code class="symbol"><</code><code class="primitive">string</code>, <code class="primitive">string</code><code class="symbol">></code></p>
|
|
59
|
+
- <p>[<code class="key">scopes</code>](#spotifyconfig.scopes) <code class="primitive">string</code><code class="symbol">[]</code></p>
|
|
60
|
+
</Section>
|
|
61
|
+
</Segment>
|
|
62
|
+
<NestedTitle id="spotifyconfig.clientid" Tag="h4" parent="SpotifyConfig.">clientID</NestedTitle>
|
|
63
|
+
<Segment>
|
|
64
|
+
<Section type="parameters">
|
|
65
|
+
<InlineSection>
|
|
66
|
+
**Type** <code class="primitive">string</code>
|
|
67
|
+
</InlineSection>
|
|
68
|
+
</Section>
|
|
69
|
+
The client ID.
|
|
70
|
+
|
|
71
|
+
This is just a string to identify your app.
|
|
72
|
+
```ts
|
|
73
|
+
{
|
|
74
|
+
clientID: "my-client"
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
</Segment>
|
|
78
|
+
<NestedTitle id="spotifyconfig.clientsecret" Tag="h4" parent="SpotifyConfig.">clientSecret</NestedTitle>
|
|
79
|
+
<Segment>
|
|
80
|
+
<Section type="parameters">
|
|
81
|
+
<InlineSection>
|
|
82
|
+
**Type** <code class="primitive">string</code>
|
|
83
|
+
</InlineSection>
|
|
84
|
+
</Section>
|
|
85
|
+
The client secret.
|
|
86
|
+
|
|
87
|
+
This is a private key that's used to authenticate your app. It should be kept secret.
|
|
88
|
+
```ts
|
|
89
|
+
{
|
|
90
|
+
clientSecret: "0987654321"
|
|
91
|
+
}
|
|
92
|
+
```
|
|
93
|
+
</Segment>
|
|
94
|
+
<NestedTitle id="spotifyconfig.pkce" Tag="h4" parent="SpotifyConfig.">pkce?</NestedTitle>
|
|
95
|
+
<Segment>
|
|
96
|
+
<Section type="parameters">
|
|
97
|
+
<InlineSection>
|
|
98
|
+
**Type** <code class="primitive">boolean</code>
|
|
99
|
+
</InlineSection>
|
|
100
|
+
</Section>
|
|
101
|
+
|
|
102
|
+
<InlineSection>
|
|
103
|
+
**Default** false
|
|
104
|
+
</InlineSection>
|
|
105
|
+
Whether to use PKCE (Proof Key for Code Exchange) for the authorization code flow.
|
|
106
|
+
Some providers like x.com require this.
|
|
107
|
+
</Segment>
|
|
108
|
+
<NestedTitle id="spotifyconfig.query" Tag="h4" parent="SpotifyConfig.">query?</NestedTitle>
|
|
109
|
+
<Segment>
|
|
110
|
+
<Section type="parameters">
|
|
111
|
+
<InlineSection>
|
|
112
|
+
**Type** <code class="primitive">Record</code><code class="symbol"><</code><code class="primitive">string</code>, <code class="primitive">string</code><code class="symbol">></code>
|
|
113
|
+
</InlineSection>
|
|
114
|
+
</Section>
|
|
115
|
+
Any additional parameters that you want to pass to the authorization endpoint.
|
|
116
|
+
```ts
|
|
117
|
+
{
|
|
118
|
+
query: {
|
|
119
|
+
access_type: "offline",
|
|
120
|
+
prompt: "consent"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
</Segment>
|
|
125
|
+
<NestedTitle id="spotifyconfig.scopes" Tag="h4" parent="SpotifyConfig.">scopes</NestedTitle>
|
|
126
|
+
<Segment>
|
|
127
|
+
<Section type="parameters">
|
|
128
|
+
<InlineSection>
|
|
129
|
+
**Type** <code class="primitive">string</code><code class="symbol">[]</code>
|
|
130
|
+
</InlineSection>
|
|
131
|
+
</Section>
|
|
132
|
+
A list of OAuth scopes that you want to request.
|
|
133
|
+
```ts
|
|
134
|
+
{
|
|
135
|
+
scopes: ["email", "profile"]
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
</Segment>
|
|
139
|
+
</div>
|