@authticon/client 0.0.0-beta9 → 0.0.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.
- package/README.md +418 -0
- package/dist/authticon.d.ts +147 -0
- package/dist/authticon.d.ts.map +1 -0
- package/dist/authticon.js +24 -0
- package/dist/authticon.js.map +1 -0
- package/dist/browser.d.ts +153 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +14 -0
- package/dist/browser.js.map +1 -0
- package/dist/clients/admin.d.ts +107 -0
- package/dist/clients/admin.d.ts.map +1 -0
- package/dist/clients/admin.js +133 -0
- package/dist/clients/admin.js.map +1 -0
- package/dist/clients/auth.d.ts +43 -0
- package/dist/clients/auth.d.ts.map +1 -0
- package/dist/clients/auth.js +83 -0
- package/dist/clients/auth.js.map +1 -0
- package/dist/clients/base.d.ts +8 -0
- package/dist/clients/base.d.ts.map +1 -0
- package/dist/clients/base.js +18 -0
- package/dist/clients/base.js.map +1 -0
- package/dist/clients/generated/client/client.gen.d.ts.map +1 -0
- package/dist/clients/generated/client/client.gen.js +236 -0
- package/dist/clients/generated/client/client.gen.js.map +1 -0
- package/dist/{generated → clients/generated}/client/index.d.ts +2 -2
- package/dist/clients/generated/client/index.d.ts.map +1 -0
- package/dist/{generated → clients/generated}/client/index.js +1 -1
- package/dist/clients/generated/client/index.js.map +1 -0
- package/dist/clients/generated/client/types.gen.d.ts +118 -0
- package/dist/clients/generated/client/types.gen.d.ts.map +1 -0
- package/dist/clients/generated/client/types.gen.js.map +1 -0
- package/dist/clients/generated/client/utils.gen.d.ts +34 -0
- package/dist/clients/generated/client/utils.gen.d.ts.map +1 -0
- package/dist/{generated → clients/generated}/client/utils.gen.js +117 -57
- package/dist/clients/generated/client/utils.gen.js.map +1 -0
- package/dist/clients/generated/client.gen.d.ts.map +1 -0
- package/dist/{generated → clients/generated}/client.gen.js +1 -1
- package/dist/clients/generated/client.gen.js.map +1 -0
- package/dist/clients/generated/core/auth.gen.d.ts.map +1 -0
- package/dist/clients/generated/core/auth.gen.js.map +1 -0
- package/dist/clients/generated/core/bodySerializer.gen.d.ts.map +1 -0
- package/dist/clients/generated/core/bodySerializer.gen.js.map +1 -0
- package/dist/clients/generated/core/params.gen.d.ts.map +1 -0
- package/dist/clients/generated/core/params.gen.js.map +1 -0
- package/dist/clients/generated/core/pathSerializer.gen.d.ts.map +1 -0
- package/dist/clients/generated/core/pathSerializer.gen.js.map +1 -0
- package/dist/clients/generated/core/queryKeySerializer.gen.d.ts.map +1 -0
- package/dist/clients/generated/core/queryKeySerializer.gen.js.map +1 -0
- package/dist/clients/generated/core/serverSentEvents.gen.d.ts.map +1 -0
- package/dist/clients/generated/core/serverSentEvents.gen.js.map +1 -0
- package/dist/clients/generated/core/types.gen.d.ts.map +1 -0
- package/dist/clients/generated/core/types.gen.js.map +1 -0
- package/dist/clients/generated/core/utils.gen.d.ts.map +1 -0
- package/dist/clients/generated/core/utils.gen.js.map +1 -0
- package/dist/clients/generated/index.d.ts +3 -0
- package/dist/clients/generated/index.d.ts.map +1 -0
- package/dist/clients/generated/index.js +3 -0
- package/dist/clients/generated/index.js.map +1 -0
- package/dist/clients/generated/sdk.gen.d.ts +202 -0
- package/dist/clients/generated/sdk.gen.d.ts.map +1 -0
- package/dist/clients/generated/sdk.gen.js +510 -0
- package/dist/clients/generated/sdk.gen.js.map +1 -0
- package/dist/clients/generated/types.gen.d.ts +1541 -0
- package/dist/clients/generated/types.gen.d.ts.map +1 -0
- package/dist/clients/generated/types.gen.js.map +1 -0
- package/dist/clients/user.d.ts +86 -0
- package/dist/clients/user.d.ts.map +1 -0
- package/dist/clients/user.js +96 -0
- package/dist/clients/user.js.map +1 -0
- package/dist/cookies/browser.d.ts +3 -0
- package/dist/cookies/browser.d.ts.map +1 -0
- package/dist/cookies/browser.js +31 -0
- package/dist/cookies/browser.js.map +1 -0
- package/dist/cookies/node.d.ts +8 -0
- package/dist/cookies/node.d.ts.map +1 -0
- package/dist/cookies/node.js +49 -0
- package/dist/cookies/node.js.map +1 -0
- package/dist/errors.d.ts +22 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +40 -0
- package/dist/errors.js.map +1 -0
- package/dist/node.d.ts +172 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +46 -0
- package/dist/node.js.map +1 -0
- package/dist/password.d.ts +8 -0
- package/dist/password.d.ts.map +1 -0
- package/dist/password.js +23 -0
- package/dist/password.js.map +1 -0
- package/dist/session.d.ts +115 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +240 -0
- package/dist/session.js.map +1 -0
- package/dist/tokens.d.ts +27 -0
- package/dist/tokens.d.ts.map +1 -0
- package/dist/tokens.js +212 -0
- package/dist/tokens.js.map +1 -0
- package/dist/types.d.ts +48 -6
- package/dist/types.d.ts.map +1 -1
- package/package.json +23 -8
- package/dist/Acccount.d.ts +0 -9
- package/dist/Acccount.d.ts.map +0 -1
- package/dist/Acccount.js +0 -22
- package/dist/Acccount.js.map +0 -1
- package/dist/Auth.d.ts +0 -25
- package/dist/Auth.d.ts.map +0 -1
- package/dist/Auth.js +0 -43
- package/dist/Auth.js.map +0 -1
- package/dist/Authticon.d.ts +0 -87
- package/dist/Authticon.d.ts.map +0 -1
- package/dist/Authticon.js +0 -74
- package/dist/Authticon.js.map +0 -1
- package/dist/BrowserCookieAdapter.d.ts +0 -13
- package/dist/BrowserCookieAdapter.d.ts.map +0 -1
- package/dist/BrowserCookieAdapter.js +0 -18
- package/dist/BrowserCookieAdapter.js.map +0 -1
- package/dist/BrowserCookieAdapter.test.d.ts +0 -2
- package/dist/BrowserCookieAdapter.test.d.ts.map +0 -1
- package/dist/BrowserCookieAdapter.test.js +0 -145
- package/dist/BrowserCookieAdapter.test.js.map +0 -1
- package/dist/Challange.d.ts +0 -8
- package/dist/Challange.d.ts.map +0 -1
- package/dist/Challange.js +0 -24
- package/dist/Challange.js.map +0 -1
- package/dist/CookieStorageAdapter.d.ts +0 -14
- package/dist/CookieStorageAdapter.d.ts.map +0 -1
- package/dist/CookieStorageAdapter.js +0 -42
- package/dist/CookieStorageAdapter.js.map +0 -1
- package/dist/CookieStorageAdapter.test.d.ts +0 -2
- package/dist/CookieStorageAdapter.test.d.ts.map +0 -1
- package/dist/CookieStorageAdapter.test.js +0 -130
- package/dist/CookieStorageAdapter.test.js.map +0 -1
- package/dist/RemixCookieAdapter.d.ts +0 -12
- package/dist/RemixCookieAdapter.d.ts.map +0 -1
- package/dist/RemixCookieAdapter.js +0 -25
- package/dist/RemixCookieAdapter.js.map +0 -1
- package/dist/RemixCookieAdapter.test.d.ts +0 -2
- package/dist/RemixCookieAdapter.test.d.ts.map +0 -1
- package/dist/RemixCookieAdapter.test.js +0 -136
- package/dist/RemixCookieAdapter.test.js.map +0 -1
- package/dist/TokenManager.d.ts +0 -24
- package/dist/TokenManager.d.ts.map +0 -1
- package/dist/TokenManager.js +0 -53
- package/dist/TokenManager.js.map +0 -1
- package/dist/TokenManager.test.d.ts +0 -2
- package/dist/TokenManager.test.d.ts.map +0 -1
- package/dist/TokenManager.test.js +0 -118
- package/dist/TokenManager.test.js.map +0 -1
- package/dist/TokenStorage.d.ts +0 -18
- package/dist/TokenStorage.d.ts.map +0 -1
- package/dist/TokenStorage.js +0 -69
- package/dist/TokenStorage.js.map +0 -1
- package/dist/TokenStorage.test.d.ts +0 -2
- package/dist/TokenStorage.test.d.ts.map +0 -1
- package/dist/TokenStorage.test.js +0 -179
- package/dist/TokenStorage.test.js.map +0 -1
- package/dist/TokenVerifier.d.ts +0 -13
- package/dist/TokenVerifier.d.ts.map +0 -1
- package/dist/TokenVerifier.js +0 -61
- package/dist/TokenVerifier.js.map +0 -1
- package/dist/TokenVerifier.test.d.ts +0 -2
- package/dist/TokenVerifier.test.d.ts.map +0 -1
- package/dist/TokenVerifier.test.js +0 -117
- package/dist/TokenVerifier.test.js.map +0 -1
- package/dist/TwoFa.d.ts +0 -26
- package/dist/TwoFa.d.ts.map +0 -1
- package/dist/TwoFa.js +0 -55
- package/dist/TwoFa.js.map +0 -1
- package/dist/User.d.ts +0 -25
- package/dist/User.d.ts.map +0 -1
- package/dist/User.js +0 -27
- package/dist/User.js.map +0 -1
- package/dist/Users.d.ts +0 -57
- package/dist/Users.d.ts.map +0 -1
- package/dist/Users.js +0 -55
- package/dist/Users.js.map +0 -1
- package/dist/cookie-utils.d.ts +0 -5
- package/dist/cookie-utils.d.ts.map +0 -1
- package/dist/cookie-utils.js +0 -33
- package/dist/cookie-utils.js.map +0 -1
- package/dist/generated/client/client.gen.d.ts.map +0 -1
- package/dist/generated/client/client.gen.js +0 -135
- package/dist/generated/client/client.gen.js.map +0 -1
- package/dist/generated/client/index.d.ts.map +0 -1
- package/dist/generated/client/index.js.map +0 -1
- package/dist/generated/client/types.gen.d.ts +0 -89
- package/dist/generated/client/types.gen.d.ts.map +0 -1
- package/dist/generated/client/types.gen.js.map +0 -1
- package/dist/generated/client/utils.gen.d.ts +0 -15
- package/dist/generated/client/utils.gen.d.ts.map +0 -1
- package/dist/generated/client/utils.gen.js.map +0 -1
- package/dist/generated/client.gen.d.ts.map +0 -1
- package/dist/generated/client.gen.js.map +0 -1
- package/dist/generated/core/auth.gen.d.ts.map +0 -1
- package/dist/generated/core/auth.gen.js.map +0 -1
- package/dist/generated/core/bodySerializer.gen.d.ts.map +0 -1
- package/dist/generated/core/bodySerializer.gen.js.map +0 -1
- package/dist/generated/core/params.gen.d.ts.map +0 -1
- package/dist/generated/core/params.gen.js.map +0 -1
- package/dist/generated/core/pathSerializer.gen.d.ts.map +0 -1
- package/dist/generated/core/pathSerializer.gen.js.map +0 -1
- package/dist/generated/core/queryKeySerializer.gen.d.ts.map +0 -1
- package/dist/generated/core/queryKeySerializer.gen.js.map +0 -1
- package/dist/generated/core/serverSentEvents.gen.d.ts.map +0 -1
- package/dist/generated/core/serverSentEvents.gen.js.map +0 -1
- package/dist/generated/core/types.gen.d.ts.map +0 -1
- package/dist/generated/core/types.gen.js.map +0 -1
- package/dist/generated/core/utils.gen.d.ts.map +0 -1
- package/dist/generated/core/utils.gen.js.map +0 -1
- package/dist/generated/index.d.ts +0 -3
- package/dist/generated/index.d.ts.map +0 -1
- package/dist/generated/index.js +0 -3
- package/dist/generated/index.js.map +0 -1
- package/dist/generated/sdk.gen.d.ts +0 -58
- package/dist/generated/sdk.gen.d.ts.map +0 -1
- package/dist/generated/sdk.gen.js +0 -337
- package/dist/generated/sdk.gen.js.map +0 -1
- package/dist/generated/types.gen.d.ts +0 -1344
- package/dist/generated/types.gen.d.ts.map +0 -1
- package/dist/generated/types.gen.js.map +0 -1
- package/dist/index.d.ts +0 -10
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -8
- package/dist/index.js.map +0 -1
- package/dist/user.d.ts +0 -50
- package/dist/user.d.ts.map +0 -1
- package/dist/user.js +0 -35
- package/dist/user.js.map +0 -1
- /package/dist/{generated → clients/generated}/client/client.gen.d.ts +0 -0
- /package/dist/{generated → clients/generated}/client/types.gen.js +0 -0
- /package/dist/{generated → clients/generated}/client.gen.d.ts +0 -0
- /package/dist/{generated → clients/generated}/core/auth.gen.d.ts +0 -0
- /package/dist/{generated → clients/generated}/core/auth.gen.js +0 -0
- /package/dist/{generated → clients/generated}/core/bodySerializer.gen.d.ts +0 -0
- /package/dist/{generated → clients/generated}/core/bodySerializer.gen.js +0 -0
- /package/dist/{generated → clients/generated}/core/params.gen.d.ts +0 -0
- /package/dist/{generated → clients/generated}/core/params.gen.js +0 -0
- /package/dist/{generated → clients/generated}/core/pathSerializer.gen.d.ts +0 -0
- /package/dist/{generated → clients/generated}/core/pathSerializer.gen.js +0 -0
- /package/dist/{generated → clients/generated}/core/queryKeySerializer.gen.d.ts +0 -0
- /package/dist/{generated → clients/generated}/core/queryKeySerializer.gen.js +0 -0
- /package/dist/{generated → clients/generated}/core/serverSentEvents.gen.d.ts +0 -0
- /package/dist/{generated → clients/generated}/core/serverSentEvents.gen.js +0 -0
- /package/dist/{generated → clients/generated}/core/types.gen.d.ts +0 -0
- /package/dist/{generated → clients/generated}/core/types.gen.js +0 -0
- /package/dist/{generated → clients/generated}/core/utils.gen.d.ts +0 -0
- /package/dist/{generated → clients/generated}/core/utils.gen.js +0 -0
- /package/dist/{generated → clients/generated}/types.gen.js +0 -0
package/README.md
ADDED
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
# @authticon/client
|
|
2
|
+
|
|
3
|
+
Oficjalny klient JavaScript/TypeScript dla [Authticon](https://authticon.com) — usługi uwierzytelniania. Biblioteka wspiera zarówno środowisko **Node.js** (SSR, API routes), jak i **przeglądarkę** (SPA, client-side).
|
|
4
|
+
|
|
5
|
+
## Instalacja
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @authticon/client
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
**Wymagania:** Node.js >= 18
|
|
12
|
+
|
|
13
|
+
## Dwa entry pointy
|
|
14
|
+
|
|
15
|
+
Biblioteka dostarcza dwa osobne moduły z odrębnymi implementacjami cookie i sesji:
|
|
16
|
+
|
|
17
|
+
| Import | Środowisko | Cookie adapter |
|
|
18
|
+
| ------------------------------------------------ | ------------------ | -------------------------------------------------------------------------------------------------------------------------- |
|
|
19
|
+
| `@authticon/client` lub `@authticon/client/node` | Node.js / SSR | Parsuje cookies z obiektu `Request`, zwraca `CookieStorageAdapter` z metodami `applyToResponse()`, `stringifySetCookies()` |
|
|
20
|
+
| `@authticon/client/browser` | Przeglądarka / SPA | Używa `document.cookie` |
|
|
21
|
+
|
|
22
|
+
## Szybki start
|
|
23
|
+
|
|
24
|
+
### Node.js (np. Next.js, Express, Hono)
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
import { createAuthticon } from "@authticon/client/node";
|
|
28
|
+
|
|
29
|
+
const authticon = createAuthticon({
|
|
30
|
+
projectId: "your-project-id",
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// W handlerze HTTP:
|
|
34
|
+
async function handler(request: Request) {
|
|
35
|
+
const { getUser, login, logout, cookies } = await authticon.session({
|
|
36
|
+
request,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
const user = getUser(); // SessionUser | null
|
|
40
|
+
|
|
41
|
+
// cookies.applyToResponse(response) — ustawia Set-Cookie na odpowiedzi
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Przeglądarka
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
import { createAuthticon } from "@authticon/client/browser";
|
|
49
|
+
|
|
50
|
+
const authticon = createAuthticon({
|
|
51
|
+
projectId: "your-project-id",
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
const session = await authticon.session({});
|
|
55
|
+
|
|
56
|
+
const user = session.getUser();
|
|
57
|
+
await session.login({ email: "user@example.com", password: "secret" });
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Konfiguracja
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
type AuthticonOptions = {
|
|
64
|
+
projectId: string; // ID projektu w Authticon (wymagane)
|
|
65
|
+
baseUrl?: string; // URL API (domyślnie: "https://authticon.com")
|
|
66
|
+
jwksUrl?: string; // URL do JWKS (domyślnie: {baseUrl}/.well-known/jwks.json)
|
|
67
|
+
jwksCacheTtlMs?: number; // TTL cache kluczy JWKS (domyślnie: 1h)
|
|
68
|
+
cache?: CacheAdapter; // Zewnętrzny adapter cache (domyślnie: in-memory)
|
|
69
|
+
logger?: Logger; // Instancja pino logger
|
|
70
|
+
};
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Session (API stanowe)
|
|
74
|
+
|
|
75
|
+
`session()` to główny sposób interakcji z biblioteką. Tworzy **stanowy obiekt sesji**, który:
|
|
76
|
+
|
|
77
|
+
1. Przy tworzeniu automatycznie odczytuje tokeny z cookies
|
|
78
|
+
2. Weryfikuje access token za pomocą JWKS
|
|
79
|
+
3. Jeśli token wygasł — automatycznie odświeża go za pomocą refresh tokena
|
|
80
|
+
4. Cache'uje obiekt `SessionUser` w pamięci na czas życia sesji
|
|
81
|
+
5. Operacje takie jak `login()`, `logout()`, `createGuest()` automatycznie aktualizują wewnętrzny stan sesji i zapisują nowe tokeny w cookies
|
|
82
|
+
|
|
83
|
+
### Tworzenie sesji
|
|
84
|
+
|
|
85
|
+
#### Node.js — z obiektu `Request`
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
const session = await authticon.session({ request });
|
|
89
|
+
// session.cookies — CookieStorageAdapter z metodami applyToResponse(), stringifySetCookies()
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
#### Node.js — z własnym `CookieAdapter`
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
const session = await authticon.session({ cookies: myCookieAdapter });
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
#### Przeglądarka
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
const session = await authticon.session({});
|
|
102
|
+
// Automatycznie używa document.cookie
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Opcjonalnie można przekazać `tokenStorage` do nadpisania nazw cookies i ich parametrów:
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
const session = await authticon.session({
|
|
109
|
+
request,
|
|
110
|
+
tokenStorage: {
|
|
111
|
+
accessTokenName: "my_access_token",
|
|
112
|
+
refreshTokenName: "my_refresh_token",
|
|
113
|
+
secure: true,
|
|
114
|
+
sameSite: "Strict",
|
|
115
|
+
domain: ".example.com",
|
|
116
|
+
},
|
|
117
|
+
});
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Metody sesji
|
|
121
|
+
|
|
122
|
+
#### Autentykacja
|
|
123
|
+
|
|
124
|
+
| Metoda | Opis |
|
|
125
|
+
| ---------------------------- | ------------------------------------------------------------------------- |
|
|
126
|
+
| `login(params)` | Logowanie (email/password). Zwraca `SessionUser`. |
|
|
127
|
+
| `register(params)` | Rejestracja. Zwraca dane rejestracji (tokeny nie są jeszcze zapisywane). |
|
|
128
|
+
| `loginByMagicLink(params)` | Loguje użytkownika przez magic link (z `deviceId`). Zwraca `SessionUser`. |
|
|
129
|
+
| `forgotPassword(params)` | Inicjuje reset hasła. |
|
|
130
|
+
| `verifyEmail(params)` | Weryfikuje email. |
|
|
131
|
+
| `createGuest(params)` | Tworzy użytkownika-gościa. Zwraca `SessionUser`. |
|
|
132
|
+
| `acceptInvitation(params)` | Akceptuje zaproszenie. Zwraca `SessionUser`. |
|
|
133
|
+
| `resendConfirmation(params)` | Ponownie wysyła email potwierdzający. |
|
|
134
|
+
| `logout()` | Wylogowuje (server-side + czyści cookies). |
|
|
135
|
+
| `refresh()` | Wymusza odświeżenie tokenów. |
|
|
136
|
+
|
|
137
|
+
#### Stan użytkownika
|
|
138
|
+
|
|
139
|
+
| Metoda | Opis |
|
|
140
|
+
| --------------------- | --------------------------------------------------------------------------------- |
|
|
141
|
+
| `getUser()` | Zwraca `SessionUser \| null`. |
|
|
142
|
+
| `requireUser()` | Zwraca `SessionUser` lub rzuca `AuthticonError`. |
|
|
143
|
+
| `isLoggedIn()` | Zwraca `boolean` — czy istnieje refresh token (sesja aktywna). |
|
|
144
|
+
| `isLoggedInByAdmin()` | Zwraca `boolean` — czy istnieje admin refresh token (logowanie jako użytkownik). |
|
|
145
|
+
| `getFirstChallenge()` | Zwraca pierwszy challenge (np. `"verifyTwoFa"`, `"setPassword"`) lub `undefined`. |
|
|
146
|
+
|
|
147
|
+
#### Profil użytkownika
|
|
148
|
+
|
|
149
|
+
| Metoda | Opis |
|
|
150
|
+
| ------------------ | -------------------------------------------- |
|
|
151
|
+
| `getMe()` | Pobiera dane zalogowanego użytkownika z API. |
|
|
152
|
+
| `updateMe(params)` | Aktualizuje dane zalogowanego użytkownika. |
|
|
153
|
+
|
|
154
|
+
#### Zarządzanie kontem
|
|
155
|
+
|
|
156
|
+
| Metoda | Opis |
|
|
157
|
+
| ------------------------ | ---------------------------------- |
|
|
158
|
+
| `changeEmail(params)` | Zmiana emaila. |
|
|
159
|
+
| `changePassword(params)` | Zmiana hasła. |
|
|
160
|
+
| `setPassword(params)` | Ustawienie hasła (np. po resecie). |
|
|
161
|
+
| `changePhone(params)` | Zmiana numeru telefonu. |
|
|
162
|
+
| `verifyPhone(params)` | Weryfikacja numeru telefonu. |
|
|
163
|
+
|
|
164
|
+
#### Dwuskładnikowe uwierzytelnianie (2FA)
|
|
165
|
+
|
|
166
|
+
| Metoda | Opis |
|
|
167
|
+
| ---------------------------------- | ------------------------------------------------------------- |
|
|
168
|
+
| `getTwoFaSecret()` | Pobiera sekret 2FA (do wyświetlenia QR code). |
|
|
169
|
+
| `enableTwoFa(params)` | Włącza 2FA. |
|
|
170
|
+
| `disableTwoFa(params)` | Wyłącza 2FA. |
|
|
171
|
+
| `sendTwoFaCode(params)` | Wysyła kod 2FA. |
|
|
172
|
+
| `verifyTwoFaCode(code, remember?)` | Weryfikuje kod 2FA i aktualizuje sesję. Zwraca `SessionUser`. |
|
|
173
|
+
|
|
174
|
+
#### Social OAuth (Google, Facebook, GitHub)
|
|
175
|
+
|
|
176
|
+
Logowanie i linkowanie kont przez zewnętrznych dostawców OAuth. Session automatycznie wybiera odpowiedni flow:
|
|
177
|
+
|
|
178
|
+
- **Niezalogowany** — `socialAuthorize` / `socialExchange` inicjuje logowanie/rejestrację
|
|
179
|
+
- **Zalogowany** — te same metody linkują konto social do istniejącego użytkownika
|
|
180
|
+
|
|
181
|
+
```typescript
|
|
182
|
+
// 1. Pobierz URL autoryzacji i przekieruj użytkownika
|
|
183
|
+
const { authorizationUrl } = await session.socialAuthorize("google", "https://app.example.com/callback");
|
|
184
|
+
// redirect(authorizationUrl)
|
|
185
|
+
|
|
186
|
+
// 2. Po powrocie z providera (w callback route) — wymień code na sesję
|
|
187
|
+
const user = await session.socialExchange("google", code, state);
|
|
188
|
+
// user jest zalogowany (lub konto zostało zlinkowane)
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
| Metoda | Opis |
|
|
192
|
+
| ------------------------------------------- | -------------------------------------------------------------------------- |
|
|
193
|
+
| `socialAuthorize(provider, redirectUri)` | Generuje URL autoryzacji OAuth. Zalogowany? Linkuje. Niezalogowany? Loguje.|
|
|
194
|
+
| `socialExchange(provider, code, state)` | Wymienia code+state na sesję. Zalogowany? Linkuje. Niezalogowany? Loguje. |
|
|
195
|
+
| `getSocialAccounts()` | Lista powiązanych kont social (wymaga zalogowania). |
|
|
196
|
+
| `socialUnlink(provider)` | Odłącza konto social (wymaga zalogowania). |
|
|
197
|
+
|
|
198
|
+
#### Zaproszenia
|
|
199
|
+
|
|
200
|
+
| Metoda | Opis |
|
|
201
|
+
| -------------------------- | ------------------- |
|
|
202
|
+
| `createInvitation(params)` | Tworzy zaproszenie. |
|
|
203
|
+
| `deleteInvitation(params)` | Usuwa zaproszenie. |
|
|
204
|
+
|
|
205
|
+
#### Tokeny
|
|
206
|
+
|
|
207
|
+
Obiekt `session.tokens` daje bezpośredni dostęp do tokenów:
|
|
208
|
+
|
|
209
|
+
```typescript
|
|
210
|
+
session.tokens.getAccessToken(); // string | null
|
|
211
|
+
session.tokens.getRefreshToken(); // string | null
|
|
212
|
+
session.tokens.verify(); // weryfikuje aktualny access token
|
|
213
|
+
session.tokens.verify(customToken); // weryfikuje dowolny token
|
|
214
|
+
session.tokens.clear(); // czyści tokeny z cookies i resetuje stan sesji
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### SessionUser
|
|
218
|
+
|
|
219
|
+
```typescript
|
|
220
|
+
type SessionUser<Payload> = {
|
|
221
|
+
id: string; // ID użytkownika
|
|
222
|
+
sessionId: string; // ID sesji
|
|
223
|
+
projectId: string; // ID projektu
|
|
224
|
+
role: "guest" | "user";
|
|
225
|
+
isGuest: boolean;
|
|
226
|
+
challenges: Challenge[]; // np. ["verifyTwoFa", "setPassword"]
|
|
227
|
+
payload: Payload; // custom claims z tokena
|
|
228
|
+
raw: AccessTokenPayload; // surowy payload JWT
|
|
229
|
+
};
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Low-level API
|
|
233
|
+
|
|
234
|
+
Oprócz stanowej sesji, `createAuthticon()` udostępnia niskopoziomowe klienty API, które nie zarządzają stanem ani cookies.
|
|
235
|
+
|
|
236
|
+
### `authticon.auth()` — klient publiczny (bez autoryzacji)
|
|
237
|
+
|
|
238
|
+
Bezstanowy klient do endpointów niewymagających tokenu:
|
|
239
|
+
|
|
240
|
+
```typescript
|
|
241
|
+
const auth = authticon.auth();
|
|
242
|
+
|
|
243
|
+
await auth.login({ email: "user@example.com", password: "secret" });
|
|
244
|
+
await auth.register({ email: "user@example.com", password: "secret" });
|
|
245
|
+
await auth.forgotPassword({ email: "user@example.com" });
|
|
246
|
+
await auth.loginByMagicLink({ token: "..." });
|
|
247
|
+
await auth.verifyEmail({ token: "..." });
|
|
248
|
+
await auth.createGuestUser({ ... });
|
|
249
|
+
await auth.acceptInvitation({ token: "...", password: "..." });
|
|
250
|
+
await auth.resendConfirmation({ email: "..." });
|
|
251
|
+
|
|
252
|
+
// Social OAuth
|
|
253
|
+
await auth.socialAuthorize("google", { redirectUri: "https://app.example.com/callback" });
|
|
254
|
+
await auth.socialExchange("google", { code: "...", state: "..." });
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
> **Uwaga:** Te metody zwracają surowe dane z API (np. tokeny). Zarządzanie cookies/stanem leży po stronie wywołującego.
|
|
258
|
+
|
|
259
|
+
### `authticon.admin(options)` — klient administracyjny (tylko Node.js)
|
|
260
|
+
|
|
261
|
+
Wymaga klucza API. Służy do operacji administracyjnych:
|
|
262
|
+
|
|
263
|
+
```typescript
|
|
264
|
+
const admin = authticon.admin({ apiKey: "your-api-key" });
|
|
265
|
+
|
|
266
|
+
await admin.listUsers({ page: 1 });
|
|
267
|
+
await admin.createUser({ email: "new@example.com", password: "..." });
|
|
268
|
+
await admin.getUser("user-id");
|
|
269
|
+
await admin.updateUser("user-id", { ... });
|
|
270
|
+
await admin.deleteUser("user-id");
|
|
271
|
+
await admin.loginAs({ userId: "user-id" });
|
|
272
|
+
await admin.sendMagicLink({ email: "user@example.com", url: "https://example.com/login" });
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
// Role
|
|
276
|
+
await admin.createUserRole("user-id", { ... });
|
|
277
|
+
await admin.listUserRoles("user-id");
|
|
278
|
+
await admin.updateUserRole("user-id", "role-id", { ... });
|
|
279
|
+
await admin.deleteUserRole("user-id", "role-id");
|
|
280
|
+
|
|
281
|
+
// Magic link
|
|
282
|
+
await admin.sendMagicLink({ email: "user@example.com" });
|
|
283
|
+
|
|
284
|
+
// SMS
|
|
285
|
+
await admin.sendSmsCode("user-id");
|
|
286
|
+
await admin.verifySms("user-id", { code: "123456" });
|
|
287
|
+
|
|
288
|
+
// Dostępność
|
|
289
|
+
await admin.isEmailAvailable("user@example.com"); // boolean
|
|
290
|
+
await admin.isPhoneAvailable("+48123456789"); // boolean
|
|
291
|
+
|
|
292
|
+
// Test email
|
|
293
|
+
await admin.testEmail({ ... });
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### `authticon.tokens` (tylko Node.js)
|
|
297
|
+
|
|
298
|
+
Bezpośredni dostęp do weryfikatora tokenów na poziomie instancji:
|
|
299
|
+
|
|
300
|
+
```typescript
|
|
301
|
+
const payload = await authticon.tokens.verify(accessToken);
|
|
302
|
+
authticon.tokens.clearKeyCache(); // czyści cache kluczy JWKS
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## Cookie adaptery
|
|
306
|
+
|
|
307
|
+
### Node.js — `createNodeCookieStorageAdapter`
|
|
308
|
+
|
|
309
|
+
Parsuje cookies z `Request`, buforuje zmiany i pozwala je aplikować do `Response`:
|
|
310
|
+
|
|
311
|
+
```typescript
|
|
312
|
+
import { createNodeCookieStorageAdapter } from "@authticon/client/node";
|
|
313
|
+
|
|
314
|
+
const cookies = createNodeCookieStorageAdapter(request);
|
|
315
|
+
|
|
316
|
+
// Po operacjach sesji:
|
|
317
|
+
cookies.applyToResponse(response);
|
|
318
|
+
// lub:
|
|
319
|
+
const setCookieHeaders = cookies.stringifySetCookies(); // string[]
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Przeglądarka — `createBrowserCookieAdapter`
|
|
323
|
+
|
|
324
|
+
Operuje bezpośrednio na `document.cookie`:
|
|
325
|
+
|
|
326
|
+
```typescript
|
|
327
|
+
import { createBrowserCookieAdapter } from "@authticon/client/browser";
|
|
328
|
+
|
|
329
|
+
const cookies = createBrowserCookieAdapter();
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### Własny adapter
|
|
333
|
+
|
|
334
|
+
Możesz zaimplementować interfejs `CookieAdapter`:
|
|
335
|
+
|
|
336
|
+
```typescript
|
|
337
|
+
interface CookieAdapter {
|
|
338
|
+
get(name: string): string | null;
|
|
339
|
+
set(name: string, value: string, options: CookieSetOptions): void;
|
|
340
|
+
remove(name: string, options: CookieRemoveOptions): void;
|
|
341
|
+
}
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
## Token storage — konfiguracja cookies
|
|
345
|
+
|
|
346
|
+
```typescript
|
|
347
|
+
type TokenStorageOptions = {
|
|
348
|
+
accessTokenName?: string; // domyślnie: "access_token"
|
|
349
|
+
refreshTokenName?: string; // domyślnie: "refresh_token"
|
|
350
|
+
deviceIdName?: string; // domyślnie: "device_id"
|
|
351
|
+
adminRefreshTokenName?: string; // domyślnie: "admin_refresh_token"
|
|
352
|
+
path?: string; // domyślnie: "/"
|
|
353
|
+
domain?: string;
|
|
354
|
+
secure?: boolean; // domyślnie: true
|
|
355
|
+
sameSite?: "Strict" | "Lax" | "None"; // domyślnie: "Lax"
|
|
356
|
+
accessTokenMaxAge?: number; // domyślnie: 900 (15 min)
|
|
357
|
+
refreshTokenMaxAge?: number; // domyślnie: 2592000 (30 dni)
|
|
358
|
+
};
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
## Obsługa błędów
|
|
362
|
+
|
|
363
|
+
Biblioteka definiuje dedykowaną hierarchię błędów:
|
|
364
|
+
|
|
365
|
+
```typescript
|
|
366
|
+
import {
|
|
367
|
+
AuthticonError,
|
|
368
|
+
AuthticonApiError,
|
|
369
|
+
AuthticonTokenError,
|
|
370
|
+
isAuthticonError,
|
|
371
|
+
isAuthticonApiError,
|
|
372
|
+
isAuthticonTokenError,
|
|
373
|
+
} from "@authticon/client";
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
| Klasa | Opis |
|
|
377
|
+
| --------------------- | -------------------------------------------------------------- |
|
|
378
|
+
| `AuthticonError` | Bazowy błąd (np. brak tokenu, użytkownik niezalogowany) |
|
|
379
|
+
| `AuthticonApiError` | Błąd odpowiedzi API (zawiera `statusCode` i `response`) |
|
|
380
|
+
| `AuthticonTokenError` | Błąd weryfikacji JWT (zawiera `code` i oryginalny `joseError`) |
|
|
381
|
+
|
|
382
|
+
```typescript
|
|
383
|
+
try {
|
|
384
|
+
const user = session.requireUser();
|
|
385
|
+
} catch (error) {
|
|
386
|
+
if (isAuthticonApiError(error)) {
|
|
387
|
+
console.log(error.statusCode); // np. 401
|
|
388
|
+
}
|
|
389
|
+
if (isAuthticonTokenError(error, "ERR_JWT_EXPIRED")) {
|
|
390
|
+
// Token wygasł
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
## Typowanie custom payloadu
|
|
396
|
+
|
|
397
|
+
Biblioteka wspiera generyczne typowanie payloadu JWT:
|
|
398
|
+
|
|
399
|
+
```typescript
|
|
400
|
+
type MyPayload = {
|
|
401
|
+
organizationId: string;
|
|
402
|
+
permissions: string[];
|
|
403
|
+
};
|
|
404
|
+
|
|
405
|
+
const authticon = createAuthticon<MyPayload>({
|
|
406
|
+
projectId: "...",
|
|
407
|
+
});
|
|
408
|
+
|
|
409
|
+
const session = await authticon.session({ request });
|
|
410
|
+
const user = session.getUser();
|
|
411
|
+
|
|
412
|
+
user?.payload.organizationId; // string
|
|
413
|
+
user?.payload.permissions; // string[]
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
## Licencja
|
|
417
|
+
|
|
418
|
+
MIT
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import type { AuthticonOptions, CookieAdapter, DefaultAccessTokenPayload, TokenStorageOptions } from "./types.js";
|
|
2
|
+
export type CookieAdapterFactory<SessionOpts> = (options: SessionOpts) => CookieAdapter;
|
|
3
|
+
export declare const createBaseAuthticon: <Payload extends Record<string, any> = DefaultAccessTokenPayload, SessionOpts extends {
|
|
4
|
+
tokenStorage?: TokenStorageOptions;
|
|
5
|
+
} = {
|
|
6
|
+
tokenStorage?: TokenStorageOptions;
|
|
7
|
+
}>(options: AuthticonOptions, buildCookieAdapter: CookieAdapterFactory<SessionOpts>) => {
|
|
8
|
+
session: (sessionOptions: SessionOpts) => Promise<{
|
|
9
|
+
login: (params: import("./clients/generated/types.gen.js").LoginData["body"]) => Promise<import("./types.js").SessionUser<Payload>>;
|
|
10
|
+
loginByMagicLink: (params: import("./clients/generated/types.gen.js").LoginByMagicLinkData["body"]) => Promise<import("./types.js").SessionUser<Payload>>;
|
|
11
|
+
loginAs: (admin: import("./clients/admin.js").AdminClient, targetUserId: string) => Promise<import("./types.js").SessionUser<Payload> | null>;
|
|
12
|
+
backToAdmin: () => Promise<import("./types.js").SessionUser<Payload> | null>;
|
|
13
|
+
register: (params: import("./clients/generated/types.gen.js").RegisterData["body"]) => Promise<{
|
|
14
|
+
userId: string;
|
|
15
|
+
}>;
|
|
16
|
+
forgotPassword: (params: import("./clients/generated/types.gen.js").ForgotPasswordData["body"]) => Promise<null>;
|
|
17
|
+
verifyEmail: (token: string) => Promise<void>;
|
|
18
|
+
createGuest: (params: import("./clients/generated/types.gen.js").CreateGuestUserData["body"]) => Promise<import("./types.js").SessionUser<Payload>>;
|
|
19
|
+
acceptInvitation: (params: import("./clients/generated/types.gen.js").AcceptInvitationData["body"]) => Promise<import("./types.js").SessionUser<Payload>>;
|
|
20
|
+
resendConfirmation: (params: import("./clients/generated/types.gen.js").ResendEmailConfirmationData["body"]) => Promise<null>;
|
|
21
|
+
getMe: () => Promise<{
|
|
22
|
+
id: string;
|
|
23
|
+
email: string;
|
|
24
|
+
firstName: string | null;
|
|
25
|
+
lastName: string | null;
|
|
26
|
+
isGuest: boolean;
|
|
27
|
+
claims: unknown;
|
|
28
|
+
phone: string | null;
|
|
29
|
+
locale: string;
|
|
30
|
+
passwordUpdatedAt: string | null;
|
|
31
|
+
hasPassword: boolean;
|
|
32
|
+
twoFaEnabled: boolean;
|
|
33
|
+
twoFaType: "APP" | "EMAIL" | "PHONE";
|
|
34
|
+
isBlocked: boolean;
|
|
35
|
+
isBlockedUntil: string | null;
|
|
36
|
+
phoneVerified: boolean;
|
|
37
|
+
emailVerified: boolean;
|
|
38
|
+
roles: Array<{
|
|
39
|
+
id: string;
|
|
40
|
+
role: string;
|
|
41
|
+
group: string;
|
|
42
|
+
}>;
|
|
43
|
+
metadata: {
|
|
44
|
+
[key: string]: unknown;
|
|
45
|
+
};
|
|
46
|
+
}>;
|
|
47
|
+
updateUser: (params: import("./clients/generated/types.gen.js").UpdateMeData["body"]) => Promise<{
|
|
48
|
+
id: string;
|
|
49
|
+
}>;
|
|
50
|
+
updateMe: (params: import("./clients/generated/types.gen.js").UpdateMeData["body"]) => Promise<{
|
|
51
|
+
id: string;
|
|
52
|
+
}>;
|
|
53
|
+
getUser: () => import("./types.js").SessionUser<Payload> | null;
|
|
54
|
+
requireUser: () => import("./types.js").SessionUser<Payload>;
|
|
55
|
+
getFirstChallenge: () => import("./types.js").Challenge | undefined;
|
|
56
|
+
isLoggedIn: () => boolean;
|
|
57
|
+
isLoggedInByAdmin: () => boolean;
|
|
58
|
+
logout: () => Promise<void>;
|
|
59
|
+
refresh: () => Promise<void>;
|
|
60
|
+
getDeviceId: () => string | null;
|
|
61
|
+
changeEmail: (params: import("./clients/generated/types.gen.js").ChangeEmailData["body"]) => Promise<null>;
|
|
62
|
+
changePassword: (params: import("./clients/generated/types.gen.js").ChangePasswordData["body"]) => Promise<null>;
|
|
63
|
+
setPassword: (params: import("./clients/generated/types.gen.js").SetPasswordData["body"]) => Promise<null>;
|
|
64
|
+
changePhone: (params: import("./clients/generated/types.gen.js").ChangePhoneData["body"]) => Promise<null>;
|
|
65
|
+
verifyPhone: (params: import("./clients/generated/types.gen.js").VerifyPhoneData["body"]) => Promise<null>;
|
|
66
|
+
getTwoFaSecret: () => Promise<{
|
|
67
|
+
secret: string;
|
|
68
|
+
uri: string;
|
|
69
|
+
}>;
|
|
70
|
+
enableTwoFa: (params: import("./clients/generated/types.gen.js").EnableTwoFaData["body"]) => Promise<void>;
|
|
71
|
+
disableTwoFa: (params: import("./clients/generated/types.gen.js").DisableTwoFaData["body"]) => Promise<void>;
|
|
72
|
+
sendTwoFaCode: (params: import("./clients/generated/types.gen.js").SendTwoFaCodeData["body"]) => Promise<void>;
|
|
73
|
+
verifyTwoFaCode: (code: string, remember?: boolean) => Promise<import("./types.js").SessionUser<Payload>>;
|
|
74
|
+
createInvitation: (params: import("./clients/generated/types.gen.js").CreateInvitationData["body"]) => Promise<{
|
|
75
|
+
id: string;
|
|
76
|
+
email: string;
|
|
77
|
+
token: string;
|
|
78
|
+
validTo: string;
|
|
79
|
+
role: string | null;
|
|
80
|
+
group: string | null;
|
|
81
|
+
returnUrl: string | null;
|
|
82
|
+
}>;
|
|
83
|
+
deleteInvitation: (params: import("./clients/generated/types.gen.js").DeleteInvitationData["path"]) => Promise<{
|
|
84
|
+
id: string;
|
|
85
|
+
}>;
|
|
86
|
+
socialAuthorize: (provider: "google" | "facebook" | "github", redirectUri: string) => Promise<{
|
|
87
|
+
authorizationUrl: string;
|
|
88
|
+
}>;
|
|
89
|
+
socialExchange: (provider: "google" | "facebook" | "github", code: string, state: string) => Promise<{
|
|
90
|
+
provider: string;
|
|
91
|
+
providerUserId: string;
|
|
92
|
+
} | import("./types.js").SessionUser<Payload>>;
|
|
93
|
+
getSocialAccounts: () => Promise<{
|
|
94
|
+
id: string;
|
|
95
|
+
provider: string;
|
|
96
|
+
providerUserId: string;
|
|
97
|
+
createdAt: string;
|
|
98
|
+
}[]>;
|
|
99
|
+
socialUnlink: (provider: "google" | "facebook" | "github") => Promise<{
|
|
100
|
+
success: boolean;
|
|
101
|
+
}>;
|
|
102
|
+
tokens: {
|
|
103
|
+
getAccessToken: () => string | null;
|
|
104
|
+
getRefreshToken: () => string | null;
|
|
105
|
+
verify: (token?: string) => Promise<import("./types.js").AccessTokenPayload<Payload>>;
|
|
106
|
+
clear: () => void;
|
|
107
|
+
};
|
|
108
|
+
cookies: CookieAdapter;
|
|
109
|
+
}>;
|
|
110
|
+
auth: () => {
|
|
111
|
+
login: (params: import("./clients/generated/types.gen.js").LoginData["body"]) => Promise<{
|
|
112
|
+
accessToken: string;
|
|
113
|
+
refreshToken: string;
|
|
114
|
+
deviceId: string;
|
|
115
|
+
sessionId: string;
|
|
116
|
+
}>;
|
|
117
|
+
loginByMagicLink: (params: import("./clients/generated/types.gen.js").LoginByMagicLinkData["body"]) => Promise<{
|
|
118
|
+
accessToken: string;
|
|
119
|
+
refreshToken: string;
|
|
120
|
+
deviceId: string;
|
|
121
|
+
sessionId: string;
|
|
122
|
+
}>;
|
|
123
|
+
register: (params: import("./clients/generated/types.gen.js").RegisterData["body"]) => Promise<{
|
|
124
|
+
userId: string;
|
|
125
|
+
}>;
|
|
126
|
+
forgotPassword: (params: import("./clients/generated/types.gen.js").ForgotPasswordData["body"]) => Promise<null>;
|
|
127
|
+
createGuestUser: (params: import("./clients/generated/types.gen.js").CreateGuestUserData["body"]) => Promise<{
|
|
128
|
+
token: string;
|
|
129
|
+
}>;
|
|
130
|
+
acceptInvitation: (params: import("./clients/generated/types.gen.js").AcceptInvitationData["body"]) => Promise<{
|
|
131
|
+
accessToken: string;
|
|
132
|
+
refreshToken: string;
|
|
133
|
+
}>;
|
|
134
|
+
verifyEmail: (params: import("./clients/generated/types.gen.js").VerifyEmailData["body"]) => Promise<void>;
|
|
135
|
+
resendConfirmation: (params: import("./clients/generated/types.gen.js").ResendEmailConfirmationData["body"]) => Promise<null>;
|
|
136
|
+
socialAuthorize: (provider: import("./clients/generated/types.gen.js").SocialAuthorizeData["path"]["provider"], params: import("./clients/generated/types.gen.js").SocialAuthorizeData["body"]) => Promise<{
|
|
137
|
+
authorizationUrl: string;
|
|
138
|
+
}>;
|
|
139
|
+
socialExchange: (provider: import("./clients/generated/types.gen.js").SocialExchangeData["path"]["provider"], params: import("./clients/generated/types.gen.js").SocialExchangeData["body"]) => Promise<{
|
|
140
|
+
accessToken: string;
|
|
141
|
+
refreshToken: string;
|
|
142
|
+
deviceId: string;
|
|
143
|
+
sessionId: string;
|
|
144
|
+
}>;
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
//# sourceMappingURL=authticon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authticon.d.ts","sourceRoot":"","sources":["../src/authticon.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,yBAAyB,EACzB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAIpB,MAAM,MAAM,oBAAoB,CAAC,WAAW,IAAI,CAC9C,OAAO,EAAE,WAAW,KACjB,aAAa,CAAC;AAEnB,eAAO,MAAM,mBAAmB,GAC9B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,yBAAyB,EAC/D,WAAW,SAAS;IAAE,YAAY,CAAC,EAAE,mBAAmB,CAAA;CAAE,GAAG;IAC3D,YAAY,CAAC,EAAE,mBAAmB,CAAC;CACpC,EAED,SAAS,gBAAgB,EACzB,oBAAoB,oBAAoB,CAAC,WAAW,CAAC;8BAoBzB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAeowB,sEAA4B;;;mCAAoQ,qEAA2B;;;;;;;CADvmC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createAuthClient } from "./clients/auth.js";
|
|
2
|
+
import { createSession } from "./session.js";
|
|
3
|
+
import { createTokenVerifier } from "./tokens.js";
|
|
4
|
+
const DEFAULT_BASE_URL = "https://authticon.com";
|
|
5
|
+
export const createBaseAuthticon = (options, buildCookieAdapter) => {
|
|
6
|
+
const baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;
|
|
7
|
+
const jwksUrl = options.jwksUrl ?? `${baseUrl}/.well-known/jwks.json`;
|
|
8
|
+
const verifier = createTokenVerifier(jwksUrl, options.jwksCacheTtlMs, options.logger?.child({ authticon: "token-verifier" }), options.cache);
|
|
9
|
+
const deps = {
|
|
10
|
+
projectId: options.projectId,
|
|
11
|
+
baseUrl,
|
|
12
|
+
verifier,
|
|
13
|
+
logger: options.logger,
|
|
14
|
+
};
|
|
15
|
+
return {
|
|
16
|
+
session: (sessionOptions) => createSession(deps, buildCookieAdapter(sessionOptions), sessionOptions.tokenStorage),
|
|
17
|
+
auth: () => createAuthClient({
|
|
18
|
+
projectId: options.projectId,
|
|
19
|
+
baseUrl,
|
|
20
|
+
logger: options.logger,
|
|
21
|
+
}),
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=authticon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authticon.js","sourceRoot":"","sources":["../src/authticon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,aAAa,EAA0B,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAQlD,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAMjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAMjC,OAAyB,EACzB,kBAAqD,EACrD,EAAE;IACF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,gBAAgB,CAAC;IACpD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,GAAG,OAAO,wBAAwB,CAAC;IAEtE,MAAM,QAAQ,GAAG,mBAAmB,CAClC,OAAO,EACP,OAAO,CAAC,cAAc,EACtB,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC,EACtD,OAAO,CAAC,KAAK,CACd,CAAC;IAEF,MAAM,IAAI,GAAsB;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO;QACP,QAAQ;QACR,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,CAAC,cAA2B,EAAE,EAAE,CACvC,aAAa,CACX,IAAI,EACJ,kBAAkB,CAAC,cAAc,CAAC,EAClC,cAAc,CAAC,YAAY,CAC5B;QAEH,IAAI,EAAE,GAAG,EAAE,CACT,gBAAgB,CAAC;YACf,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,OAAO;YACP,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC;KACL,CAAC;AACJ,CAAC,CAAC"}
|