@authticon/client 0.0.0-beta8 → 0.0.3
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 +390 -0
- package/dist/authticon.d.ts +122 -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 +128 -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 +34 -0
- package/dist/clients/auth.d.ts.map +1 -0
- package/dist/clients/auth.js +67 -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 +178 -0
- package/dist/clients/generated/sdk.gen.d.ts.map +1 -0
- package/dist/clients/generated/sdk.gen.js +445 -0
- package/dist/clients/generated/sdk.gen.js.map +1 -0
- package/dist/clients/generated/types.gen.d.ts +1355 -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 +70 -0
- package/dist/clients/user.d.ts.map +1 -0
- package/dist/clients/user.js +72 -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 +163 -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 +99 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +223 -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 -85
- package/dist/Authticon.d.ts.map +0 -1
- package/dist/Authticon.js +0 -62
- 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 -22
- package/dist/TokenManager.d.ts.map +0 -1
- package/dist/TokenManager.js +0 -45
- 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 -17
- package/dist/TokenStorage.d.ts.map +0 -1
- package/dist/TokenStorage.js +0 -68
- 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 -9
- 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 -49
- 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,390 @@
|
|
|
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 access token. |
|
|
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
|
+
#### Zaproszenia
|
|
175
|
+
|
|
176
|
+
| Metoda | Opis |
|
|
177
|
+
| -------------------------- | ------------------- |
|
|
178
|
+
| `createInvitation(params)` | Tworzy zaproszenie. |
|
|
179
|
+
| `deleteInvitation(params)` | Usuwa zaproszenie. |
|
|
180
|
+
|
|
181
|
+
#### Tokeny
|
|
182
|
+
|
|
183
|
+
Obiekt `session.tokens` daje bezpośredni dostęp do tokenów:
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
session.tokens.getAccessToken(); // string | null
|
|
187
|
+
session.tokens.getRefreshToken(); // string | null
|
|
188
|
+
session.tokens.verify(); // weryfikuje aktualny access token
|
|
189
|
+
session.tokens.verify(customToken); // weryfikuje dowolny token
|
|
190
|
+
session.tokens.clear(); // czyści tokeny z cookies i resetuje stan sesji
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### SessionUser
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
type SessionUser<Payload> = {
|
|
197
|
+
id: string; // ID użytkownika
|
|
198
|
+
sessionId: string; // ID sesji
|
|
199
|
+
projectId: string; // ID projektu
|
|
200
|
+
role: "guest" | "user";
|
|
201
|
+
isGuest: boolean;
|
|
202
|
+
challenges: Challenge[]; // np. ["verifyTwoFa", "setPassword"]
|
|
203
|
+
payload: Payload; // custom claims z tokena
|
|
204
|
+
raw: AccessTokenPayload; // surowy payload JWT
|
|
205
|
+
};
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Low-level API
|
|
209
|
+
|
|
210
|
+
Oprócz stanowej sesji, `createAuthticon()` udostępnia niskopoziomowe klienty API, które nie zarządzają stanem ani cookies.
|
|
211
|
+
|
|
212
|
+
### `authticon.auth()` — klient publiczny (bez autoryzacji)
|
|
213
|
+
|
|
214
|
+
Bezstanowy klient do endpointów niewymagających tokenu:
|
|
215
|
+
|
|
216
|
+
```typescript
|
|
217
|
+
const auth = authticon.auth();
|
|
218
|
+
|
|
219
|
+
await auth.login({ email: "user@example.com", password: "secret" });
|
|
220
|
+
await auth.register({ email: "user@example.com", password: "secret" });
|
|
221
|
+
await auth.forgotPassword({ email: "user@example.com" });
|
|
222
|
+
await auth.loginByMagicLink({ token: "..." });
|
|
223
|
+
await auth.verifyEmail({ token: "..." });
|
|
224
|
+
await auth.createGuestUser({ ... });
|
|
225
|
+
await auth.acceptInvitation({ token: "...", password: "..." });
|
|
226
|
+
await auth.resendConfirmation({ email: "..." });
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
> **Uwaga:** Te metody zwracają surowe dane z API (np. tokeny). Zarządzanie cookies/stanem leży po stronie wywołującego.
|
|
230
|
+
|
|
231
|
+
### `authticon.admin(options)` — klient administracyjny (tylko Node.js)
|
|
232
|
+
|
|
233
|
+
Wymaga klucza API. Służy do operacji administracyjnych:
|
|
234
|
+
|
|
235
|
+
```typescript
|
|
236
|
+
const admin = authticon.admin({ apiKey: "your-api-key" });
|
|
237
|
+
|
|
238
|
+
await admin.listUsers({ page: 1 });
|
|
239
|
+
await admin.createUser({ email: "new@example.com", password: "..." });
|
|
240
|
+
await admin.getUser("user-id");
|
|
241
|
+
await admin.updateUser("user-id", { ... });
|
|
242
|
+
await admin.deleteUser("user-id");
|
|
243
|
+
await admin.loginAs({ userId: "user-id" });
|
|
244
|
+
await admin.sendMagicLink({ email: "user@example.com", url: "https://example.com/login" });
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
// Role
|
|
248
|
+
await admin.createUserRole("user-id", { ... });
|
|
249
|
+
await admin.listUserRoles("user-id");
|
|
250
|
+
await admin.updateUserRole("user-id", "role-id", { ... });
|
|
251
|
+
await admin.deleteUserRole("user-id", "role-id");
|
|
252
|
+
|
|
253
|
+
// Magic link
|
|
254
|
+
await admin.sendMagicLink({ email: "user@example.com" });
|
|
255
|
+
|
|
256
|
+
// SMS
|
|
257
|
+
await admin.sendSmsCode("user-id");
|
|
258
|
+
await admin.verifySms("user-id", { code: "123456" });
|
|
259
|
+
|
|
260
|
+
// Dostępność
|
|
261
|
+
await admin.isEmailAvailable("user@example.com"); // boolean
|
|
262
|
+
await admin.isPhoneAvailable("+48123456789"); // boolean
|
|
263
|
+
|
|
264
|
+
// Test email
|
|
265
|
+
await admin.testEmail({ ... });
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### `authticon.tokens` (tylko Node.js)
|
|
269
|
+
|
|
270
|
+
Bezpośredni dostęp do weryfikatora tokenów na poziomie instancji:
|
|
271
|
+
|
|
272
|
+
```typescript
|
|
273
|
+
const payload = await authticon.tokens.verify(accessToken);
|
|
274
|
+
authticon.tokens.clearKeyCache(); // czyści cache kluczy JWKS
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
## Cookie adaptery
|
|
278
|
+
|
|
279
|
+
### Node.js — `createNodeCookieStorageAdapter`
|
|
280
|
+
|
|
281
|
+
Parsuje cookies z `Request`, buforuje zmiany i pozwala je aplikować do `Response`:
|
|
282
|
+
|
|
283
|
+
```typescript
|
|
284
|
+
import { createNodeCookieStorageAdapter } from "@authticon/client/node";
|
|
285
|
+
|
|
286
|
+
const cookies = createNodeCookieStorageAdapter(request);
|
|
287
|
+
|
|
288
|
+
// Po operacjach sesji:
|
|
289
|
+
cookies.applyToResponse(response);
|
|
290
|
+
// lub:
|
|
291
|
+
const setCookieHeaders = cookies.stringifySetCookies(); // string[]
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
### Przeglądarka — `createBrowserCookieAdapter`
|
|
295
|
+
|
|
296
|
+
Operuje bezpośrednio na `document.cookie`:
|
|
297
|
+
|
|
298
|
+
```typescript
|
|
299
|
+
import { createBrowserCookieAdapter } from "@authticon/client/browser";
|
|
300
|
+
|
|
301
|
+
const cookies = createBrowserCookieAdapter();
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
### Własny adapter
|
|
305
|
+
|
|
306
|
+
Możesz zaimplementować interfejs `CookieAdapter`:
|
|
307
|
+
|
|
308
|
+
```typescript
|
|
309
|
+
interface CookieAdapter {
|
|
310
|
+
get(name: string): string | null;
|
|
311
|
+
set(name: string, value: string, options: CookieSetOptions): void;
|
|
312
|
+
remove(name: string, options: CookieRemoveOptions): void;
|
|
313
|
+
}
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
## Token storage — konfiguracja cookies
|
|
317
|
+
|
|
318
|
+
```typescript
|
|
319
|
+
type TokenStorageOptions = {
|
|
320
|
+
accessTokenName?: string; // domyślnie: "access_token"
|
|
321
|
+
refreshTokenName?: string; // domyślnie: "refresh_token"
|
|
322
|
+
deviceIdName?: string; // domyślnie: "device_id"
|
|
323
|
+
adminRefreshTokenName?: string; // domyślnie: "admin_refresh_token"
|
|
324
|
+
path?: string; // domyślnie: "/"
|
|
325
|
+
domain?: string;
|
|
326
|
+
secure?: boolean; // domyślnie: true
|
|
327
|
+
sameSite?: "Strict" | "Lax" | "None"; // domyślnie: "Lax"
|
|
328
|
+
accessTokenMaxAge?: number; // domyślnie: 900 (15 min)
|
|
329
|
+
refreshTokenMaxAge?: number; // domyślnie: 2592000 (30 dni)
|
|
330
|
+
};
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
## Obsługa błędów
|
|
334
|
+
|
|
335
|
+
Biblioteka definiuje dedykowaną hierarchię błędów:
|
|
336
|
+
|
|
337
|
+
```typescript
|
|
338
|
+
import {
|
|
339
|
+
AuthticonError,
|
|
340
|
+
AuthticonApiError,
|
|
341
|
+
AuthticonTokenError,
|
|
342
|
+
isAuthticonError,
|
|
343
|
+
isAuthticonApiError,
|
|
344
|
+
isAuthticonTokenError,
|
|
345
|
+
} from "@authticon/client";
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
| Klasa | Opis |
|
|
349
|
+
| --------------------- | -------------------------------------------------------------- |
|
|
350
|
+
| `AuthticonError` | Bazowy błąd (np. brak tokenu, użytkownik niezalogowany) |
|
|
351
|
+
| `AuthticonApiError` | Błąd odpowiedzi API (zawiera `statusCode` i `response`) |
|
|
352
|
+
| `AuthticonTokenError` | Błąd weryfikacji JWT (zawiera `code` i oryginalny `joseError`) |
|
|
353
|
+
|
|
354
|
+
```typescript
|
|
355
|
+
try {
|
|
356
|
+
const user = session.requireUser();
|
|
357
|
+
} catch (error) {
|
|
358
|
+
if (isAuthticonApiError(error)) {
|
|
359
|
+
console.log(error.statusCode); // np. 401
|
|
360
|
+
}
|
|
361
|
+
if (isAuthticonTokenError(error, "ERR_JWT_EXPIRED")) {
|
|
362
|
+
// Token wygasł
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
## Typowanie custom payloadu
|
|
368
|
+
|
|
369
|
+
Biblioteka wspiera generyczne typowanie payloadu JWT:
|
|
370
|
+
|
|
371
|
+
```typescript
|
|
372
|
+
type MyPayload = {
|
|
373
|
+
organizationId: string;
|
|
374
|
+
permissions: string[];
|
|
375
|
+
};
|
|
376
|
+
|
|
377
|
+
const authticon = createAuthticon<MyPayload>({
|
|
378
|
+
projectId: "...",
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
const session = await authticon.session({ request });
|
|
382
|
+
const user = session.getUser();
|
|
383
|
+
|
|
384
|
+
user?.payload.organizationId; // string
|
|
385
|
+
user?.payload.permissions; // string[]
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
## Licencja
|
|
389
|
+
|
|
390
|
+
MIT
|
|
@@ -0,0 +1,122 @@
|
|
|
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
|
+
tokens: {
|
|
87
|
+
getAccessToken: () => string | null;
|
|
88
|
+
getRefreshToken: () => string | null;
|
|
89
|
+
verify: (token?: string) => Promise<import("./types.js").AccessTokenPayload<Payload>>;
|
|
90
|
+
clear: () => void;
|
|
91
|
+
};
|
|
92
|
+
cookies: CookieAdapter;
|
|
93
|
+
}>;
|
|
94
|
+
auth: () => {
|
|
95
|
+
login: (params: import("./clients/generated/types.gen.js").LoginData["body"]) => Promise<{
|
|
96
|
+
accessToken: string;
|
|
97
|
+
refreshToken: string;
|
|
98
|
+
deviceId: string;
|
|
99
|
+
sessionId: string;
|
|
100
|
+
}>;
|
|
101
|
+
loginByMagicLink: (params: import("./clients/generated/types.gen.js").LoginByMagicLinkData["body"]) => Promise<{
|
|
102
|
+
accessToken: string;
|
|
103
|
+
refreshToken: string;
|
|
104
|
+
deviceId: string;
|
|
105
|
+
sessionId: string;
|
|
106
|
+
}>;
|
|
107
|
+
register: (params: import("./clients/generated/types.gen.js").RegisterData["body"]) => Promise<{
|
|
108
|
+
userId: string;
|
|
109
|
+
}>;
|
|
110
|
+
forgotPassword: (params: import("./clients/generated/types.gen.js").ForgotPasswordData["body"]) => Promise<null>;
|
|
111
|
+
createGuestUser: (params: import("./clients/generated/types.gen.js").CreateGuestUserData["body"]) => Promise<{
|
|
112
|
+
token: string;
|
|
113
|
+
}>;
|
|
114
|
+
acceptInvitation: (params: import("./clients/generated/types.gen.js").AcceptInvitationData["body"]) => Promise<{
|
|
115
|
+
accessToken: string;
|
|
116
|
+
refreshToken: string;
|
|
117
|
+
}>;
|
|
118
|
+
verifyEmail: (params: import("./clients/generated/types.gen.js").VerifyEmailData["body"]) => Promise<void>;
|
|
119
|
+
resendConfirmation: (params: import("./clients/generated/types.gen.js").ResendEmailConfirmationData["body"]) => Promise<null>;
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
//# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAcxC,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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import type { AuthticonOptions, CookieAdapter, DefaultAccessTokenPayload, TokenStorageOptions } from "./types.js";
|
|
2
|
+
export type BrowserSessionOptions = {
|
|
3
|
+
readonly cookies?: CookieAdapter;
|
|
4
|
+
readonly tokenStorage?: TokenStorageOptions;
|
|
5
|
+
};
|
|
6
|
+
export declare const createAuthticon: <Payload extends Record<string, any> = DefaultAccessTokenPayload>(options: AuthticonOptions) => {
|
|
7
|
+
password: {
|
|
8
|
+
encrypt: (password: string) => Promise<string>;
|
|
9
|
+
};
|
|
10
|
+
session: (sessionOptions: BrowserSessionOptions) => Promise<{
|
|
11
|
+
login: (params: import("./clients/generated/types.gen.js").LoginData["body"]) => Promise<import("./types.js").SessionUser<Payload>>;
|
|
12
|
+
loginByMagicLink: (params: import("./clients/generated/types.gen.js").LoginByMagicLinkData["body"]) => Promise<import("./types.js").SessionUser<Payload>>;
|
|
13
|
+
loginAs: (admin: import("./clients/admin.js").AdminClient, targetUserId: string) => Promise<import("./types.js").SessionUser<Payload> | null>;
|
|
14
|
+
backToAdmin: () => Promise<import("./types.js").SessionUser<Payload> | null>;
|
|
15
|
+
register: (params: import("./clients/generated/types.gen.js").RegisterData["body"]) => Promise<{
|
|
16
|
+
userId: string;
|
|
17
|
+
}>;
|
|
18
|
+
forgotPassword: (params: import("./clients/generated/types.gen.js").ForgotPasswordData["body"]) => Promise<null>;
|
|
19
|
+
verifyEmail: (token: string) => Promise<void>;
|
|
20
|
+
createGuest: (params: import("./clients/generated/types.gen.js").CreateGuestUserData["body"]) => Promise<import("./types.js").SessionUser<Payload>>;
|
|
21
|
+
acceptInvitation: (params: import("./clients/generated/types.gen.js").AcceptInvitationData["body"]) => Promise<import("./types.js").SessionUser<Payload>>;
|
|
22
|
+
resendConfirmation: (params: import("./clients/generated/types.gen.js").ResendEmailConfirmationData["body"]) => Promise<null>;
|
|
23
|
+
getMe: () => Promise<{
|
|
24
|
+
id: string;
|
|
25
|
+
email: string;
|
|
26
|
+
firstName: string | null;
|
|
27
|
+
lastName: string | null;
|
|
28
|
+
isGuest: boolean;
|
|
29
|
+
claims: unknown;
|
|
30
|
+
phone: string | null;
|
|
31
|
+
locale: string;
|
|
32
|
+
passwordUpdatedAt: string | null;
|
|
33
|
+
hasPassword: boolean;
|
|
34
|
+
twoFaEnabled: boolean;
|
|
35
|
+
twoFaType: "APP" | "EMAIL" | "PHONE";
|
|
36
|
+
isBlocked: boolean;
|
|
37
|
+
isBlockedUntil: string | null;
|
|
38
|
+
phoneVerified: boolean;
|
|
39
|
+
emailVerified: boolean;
|
|
40
|
+
roles: Array<{
|
|
41
|
+
id: string;
|
|
42
|
+
role: string;
|
|
43
|
+
group: string;
|
|
44
|
+
}>;
|
|
45
|
+
metadata: {
|
|
46
|
+
[key: string]: unknown;
|
|
47
|
+
};
|
|
48
|
+
}>;
|
|
49
|
+
updateUser: (params: import("./clients/generated/types.gen.js").UpdateMeData["body"]) => Promise<{
|
|
50
|
+
id: string;
|
|
51
|
+
}>;
|
|
52
|
+
updateMe: (params: import("./clients/generated/types.gen.js").UpdateMeData["body"]) => Promise<{
|
|
53
|
+
id: string;
|
|
54
|
+
}>;
|
|
55
|
+
getUser: () => import("./types.js").SessionUser<Payload> | null;
|
|
56
|
+
requireUser: () => import("./types.js").SessionUser<Payload>;
|
|
57
|
+
getFirstChallenge: () => import("./types.js").Challenge | undefined;
|
|
58
|
+
isLoggedIn: () => boolean;
|
|
59
|
+
isLoggedInByAdmin: () => boolean;
|
|
60
|
+
logout: () => Promise<void>;
|
|
61
|
+
refresh: () => Promise<void>;
|
|
62
|
+
getDeviceId: () => string | null;
|
|
63
|
+
changeEmail: (params: import("./clients/generated/types.gen.js").ChangeEmailData["body"]) => Promise<null>;
|
|
64
|
+
changePassword: (params: import("./clients/generated/types.gen.js").ChangePasswordData["body"]) => Promise<null>;
|
|
65
|
+
setPassword: (params: import("./clients/generated/types.gen.js").SetPasswordData["body"]) => Promise<null>;
|
|
66
|
+
changePhone: (params: import("./clients/generated/types.gen.js").ChangePhoneData["body"]) => Promise<null>;
|
|
67
|
+
verifyPhone: (params: import("./clients/generated/types.gen.js").VerifyPhoneData["body"]) => Promise<null>;
|
|
68
|
+
getTwoFaSecret: () => Promise<{
|
|
69
|
+
secret: string;
|
|
70
|
+
uri: string;
|
|
71
|
+
}>;
|
|
72
|
+
enableTwoFa: (params: import("./clients/generated/types.gen.js").EnableTwoFaData["body"]) => Promise<void>;
|
|
73
|
+
disableTwoFa: (params: import("./clients/generated/types.gen.js").DisableTwoFaData["body"]) => Promise<void>;
|
|
74
|
+
sendTwoFaCode: (params: import("./clients/generated/types.gen.js").SendTwoFaCodeData["body"]) => Promise<void>;
|
|
75
|
+
verifyTwoFaCode: (code: string, remember?: boolean) => Promise<import("./types.js").SessionUser<Payload>>;
|
|
76
|
+
createInvitation: (params: import("./clients/generated/types.gen.js").CreateInvitationData["body"]) => Promise<{
|
|
77
|
+
id: string;
|
|
78
|
+
email: string;
|
|
79
|
+
token: string;
|
|
80
|
+
validTo: string;
|
|
81
|
+
role: string | null;
|
|
82
|
+
group: string | null;
|
|
83
|
+
returnUrl: string | null;
|
|
84
|
+
}>;
|
|
85
|
+
deleteInvitation: (params: import("./clients/generated/types.gen.js").DeleteInvitationData["path"]) => Promise<{
|
|
86
|
+
id: string;
|
|
87
|
+
}>;
|
|
88
|
+
tokens: {
|
|
89
|
+
getAccessToken: () => string | null;
|
|
90
|
+
getRefreshToken: () => string | null;
|
|
91
|
+
verify: (token?: string) => Promise<import("./types.js").AccessTokenPayload<Payload>>;
|
|
92
|
+
clear: () => void;
|
|
93
|
+
};
|
|
94
|
+
cookies: CookieAdapter;
|
|
95
|
+
}>;
|
|
96
|
+
auth: () => {
|
|
97
|
+
login: (params: import("./clients/generated/types.gen.js").LoginData["body"]) => Promise<{
|
|
98
|
+
accessToken: string;
|
|
99
|
+
refreshToken: string;
|
|
100
|
+
deviceId: string;
|
|
101
|
+
sessionId: string;
|
|
102
|
+
}>;
|
|
103
|
+
loginByMagicLink: (params: import("./clients/generated/types.gen.js").LoginByMagicLinkData["body"]) => Promise<{
|
|
104
|
+
accessToken: string;
|
|
105
|
+
refreshToken: string;
|
|
106
|
+
deviceId: string;
|
|
107
|
+
sessionId: string;
|
|
108
|
+
}>;
|
|
109
|
+
register: (params: import("./clients/generated/types.gen.js").RegisterData["body"]) => Promise<{
|
|
110
|
+
userId: string;
|
|
111
|
+
}>;
|
|
112
|
+
forgotPassword: (params: import("./clients/generated/types.gen.js").ForgotPasswordData["body"]) => Promise<null>;
|
|
113
|
+
createGuestUser: (params: import("./clients/generated/types.gen.js").CreateGuestUserData["body"]) => Promise<{
|
|
114
|
+
token: string;
|
|
115
|
+
}>;
|
|
116
|
+
acceptInvitation: (params: import("./clients/generated/types.gen.js").AcceptInvitationData["body"]) => Promise<{
|
|
117
|
+
accessToken: string;
|
|
118
|
+
refreshToken: string;
|
|
119
|
+
}>;
|
|
120
|
+
verifyEmail: (params: import("./clients/generated/types.gen.js").VerifyEmailData["body"]) => Promise<void>;
|
|
121
|
+
resendConfirmation: (params: import("./clients/generated/types.gen.js").ResendEmailConfirmationData["body"]) => Promise<null>;
|
|
122
|
+
};
|
|
123
|
+
};
|
|
124
|
+
export { createBrowserCookieAdapter } from "./cookies/browser.js";
|
|
125
|
+
export * from "./errors.js";
|
|
126
|
+
export { createInMemoryCacheAdapter, createTokenStorage, createTokenVerifier, } from "./tokens.js";
|
|
127
|
+
export type * from "./types.js";
|
|
128
|
+
//# sourceMappingURL=browser.d.ts.map
|