@softwarepatterns/am 0.0.2 → 0.2.0
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 +114 -76
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +104 -284
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/types/auth.d.ts +88 -279
- package/dist/types/types.d.ts +16 -5
- package/package.json +19 -4
package/README.md
CHANGED
|
@@ -2,21 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
Authentication client SDK for **AccountMaker (Am)**.
|
|
4
4
|
|
|
5
|
-
This package provides a small, stable client for interacting with the AccountMaker authentication API. It is designed
|
|
6
|
-
|
|
7
|
-
The SDK focuses on correctness, predictable behavior, and minimal surface area.
|
|
5
|
+
This package provides a small, stable client for interacting with the AccountMaker authentication API. It is designed with explicit support for both ESM and CommonJS consumers.
|
|
8
6
|
|
|
9
7
|
---
|
|
10
8
|
|
|
11
9
|
## Features
|
|
12
10
|
|
|
13
|
-
*
|
|
11
|
+
* Automatic access-token refresh
|
|
14
12
|
* TypeScript-first API with bundled `.d.ts`
|
|
15
|
-
* Explicit error modeling
|
|
16
|
-
* Token-based authenticated sessions
|
|
13
|
+
* Explicit error modeling via RFC 9457 Problem Details
|
|
17
14
|
* Automatic access-token refresh
|
|
18
|
-
* No runtime dependencies
|
|
19
|
-
*
|
|
15
|
+
* No runtime dependencies or side effects on import
|
|
16
|
+
* ESM and CommonJS support
|
|
20
17
|
|
|
21
18
|
---
|
|
22
19
|
|
|
@@ -59,73 +56,126 @@ const { Am } = require("@softwarepatterns/am");
|
|
|
59
56
|
```ts
|
|
60
57
|
import { Am } from "@softwarepatterns/am";
|
|
61
58
|
|
|
62
|
-
const am = new Am(
|
|
63
|
-
baseUrl: "https://api.accountmaker.com"
|
|
64
|
-
});
|
|
59
|
+
const am = new Am();
|
|
65
60
|
```
|
|
66
61
|
|
|
67
|
-
If no configuration is provided, the client defaults to:
|
|
68
|
-
|
|
69
|
-
* `baseUrl: https://api.accountmaker.com`
|
|
70
|
-
* `fetchFn: globalThis.fetch`
|
|
71
|
-
|
|
72
62
|
---
|
|
73
63
|
|
|
74
64
|
## Authentication flows
|
|
75
65
|
|
|
76
|
-
###
|
|
66
|
+
### Sign in with email and password
|
|
77
67
|
|
|
78
68
|
```ts
|
|
79
|
-
const
|
|
69
|
+
const session = await am.signIn({
|
|
70
|
+
clientId: "your-client-id",
|
|
80
71
|
email: "user@example.com",
|
|
81
72
|
password: "password"
|
|
82
73
|
});
|
|
83
74
|
```
|
|
84
75
|
|
|
85
|
-
|
|
76
|
+
### Sign up (register) a new user with email and password
|
|
86
77
|
|
|
87
78
|
```ts
|
|
88
|
-
|
|
89
|
-
|
|
79
|
+
const session = await am.signUp({
|
|
80
|
+
clientId: "your-client-id",
|
|
81
|
+
email: "user@example.com",
|
|
82
|
+
password: "password"
|
|
83
|
+
});
|
|
90
84
|
```
|
|
91
85
|
|
|
92
|
-
|
|
86
|
+
### Accept an invite from an email link
|
|
87
|
+
|
|
88
|
+
```ts
|
|
89
|
+
const session = await am.acceptInvite({
|
|
90
|
+
clientId: "your-client-id",
|
|
91
|
+
token: "token-from-email",
|
|
92
|
+
});
|
|
93
|
+
```
|
|
93
94
|
|
|
94
|
-
###
|
|
95
|
+
### Sign in with a token from an email link
|
|
95
96
|
|
|
96
97
|
```ts
|
|
97
|
-
const session = am.
|
|
98
|
+
const session = await am.signInWithToken({
|
|
99
|
+
clientId: "your-client-id",
|
|
100
|
+
token: "token-from-email",
|
|
101
|
+
});
|
|
98
102
|
```
|
|
99
103
|
|
|
100
|
-
|
|
104
|
+
## Usage
|
|
101
105
|
|
|
102
|
-
|
|
106
|
+
A session represents an authenticated user and handles token refresh automatically.
|
|
103
107
|
|
|
104
|
-
|
|
108
|
+
```ts
|
|
109
|
+
// Automatically adds Authorization header, will refresh tokens as needed,
|
|
110
|
+
const res = await session.fetch("https://yourdomain.com/some/protected/resource");
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
You can also use the access token yourself.
|
|
105
114
|
|
|
106
115
|
```ts
|
|
107
|
-
|
|
116
|
+
if (session.isExpired()) {
|
|
117
|
+
await session.refresh();
|
|
118
|
+
}
|
|
119
|
+
await fetch("https://yourdomain.com/your/own/protected/api", {
|
|
120
|
+
headers: {
|
|
121
|
+
Authorization: `Bearer ${session.accessToken()}`
|
|
122
|
+
}
|
|
123
|
+
});
|
|
108
124
|
```
|
|
109
125
|
|
|
110
|
-
|
|
126
|
+
Your own services can validate the access token using AM's public keys.
|
|
127
|
+
|
|
128
|
+
```ts
|
|
129
|
+
import * as jose from 'jose';
|
|
130
|
+
|
|
131
|
+
// Will auto fetch, cache, and rotate keys as needed
|
|
132
|
+
const jwksUrl = new URL('https://auth.yourdomain.com/.well-known/jwks.json');
|
|
133
|
+
|
|
134
|
+
// if not using a custom auth domain:
|
|
135
|
+
// const jwksUrl = new URL('https://api.accountmaker.com/.well-known/jwks.json?client_id=your-client-id');
|
|
136
|
+
|
|
137
|
+
const JWKS = jose.createRemoteJWKSet(jwksUrl);
|
|
111
138
|
|
|
112
|
-
|
|
139
|
+
export const validateAccessToken = async (token: string) => {
|
|
140
|
+
const { payload } = await jose.jwtVerify(token, JWKS);
|
|
141
|
+
|
|
142
|
+
console.log('Account Id:', payload.acc);
|
|
143
|
+
console.log('User Id:', payload.uid);
|
|
144
|
+
console.log('User Account Role:', payload.role);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
By default, tokens are saved in memory only.
|
|
113
150
|
|
|
114
151
|
```ts
|
|
115
|
-
|
|
152
|
+
const am = new Am({
|
|
153
|
+
storage: null // disable storage, default is in-memory
|
|
154
|
+
});
|
|
116
155
|
```
|
|
117
156
|
|
|
157
|
+
Set to "localStorage" to persist sessions across reloads.
|
|
158
|
+
|
|
159
|
+
```ts
|
|
160
|
+
const am = new Am({
|
|
161
|
+
storage: "localStorage"
|
|
162
|
+
});
|
|
163
|
+
const session = am.restoreSession();
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Or implement your own storage mechanism by implementing the Storage interface.
|
|
167
|
+
|
|
118
168
|
---
|
|
119
169
|
|
|
120
170
|
## Error handling
|
|
121
171
|
|
|
122
|
-
All API errors
|
|
172
|
+
All API errors throw as `AuthError`.
|
|
123
173
|
|
|
124
174
|
```ts
|
|
125
175
|
import { AuthError } from "@softwarepatterns/am";
|
|
126
176
|
|
|
127
177
|
try {
|
|
128
|
-
await am.
|
|
178
|
+
await am.signIn({ email, password });
|
|
129
179
|
} catch (err) {
|
|
130
180
|
if (err instanceof AuthError) {
|
|
131
181
|
console.log(err.status);
|
|
@@ -135,78 +185,66 @@ try {
|
|
|
135
185
|
}
|
|
136
186
|
```
|
|
137
187
|
|
|
138
|
-
Errors follow
|
|
188
|
+
Errors follow **RFC 9457 Problem Details** format (`application/problem+json`).
|
|
139
189
|
|
|
140
|
-
Unknown or unsupported error responses are converted into a generic problem shape without exposing raw response bodies.
|
|
190
|
+
Unknown or unsupported error responses are converted into a generic problem shape without exposing raw response bodies. All non-HTTP errors (such as network or parsing errors) are left alone to bubble up.
|
|
141
191
|
|
|
142
192
|
---
|
|
143
193
|
|
|
144
|
-
## Custom fetch
|
|
194
|
+
## Custom fetch
|
|
145
195
|
|
|
146
|
-
|
|
196
|
+
For mocking or for custom fetch implementations, you can provide your own.
|
|
147
197
|
|
|
148
198
|
```ts
|
|
149
199
|
const am = new Am({
|
|
150
200
|
fetchFn: fetch,
|
|
151
|
-
baseUrl: "https://api.accountmaker.com"
|
|
152
201
|
});
|
|
153
202
|
```
|
|
154
203
|
|
|
155
|
-
This is useful for:
|
|
156
|
-
|
|
157
|
-
* Older Node versions
|
|
158
|
-
* Instrumented HTTP clients
|
|
159
|
-
* Testing
|
|
160
|
-
|
|
161
204
|
---
|
|
162
205
|
|
|
163
|
-
##
|
|
164
|
-
|
|
165
|
-
This package ships with bundled type definitions.
|
|
166
|
-
|
|
167
|
-
```ts
|
|
168
|
-
import type { AuthenticationResult } from "@softwarepatterns/am";
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
The public API is fully typed. Internal implementation details are not exposed.
|
|
172
|
-
|
|
173
|
-
---
|
|
174
|
-
|
|
175
|
-
## Browser support
|
|
206
|
+
## Stability guarantees
|
|
176
207
|
|
|
177
|
-
|
|
208
|
+
The following are guaranteed:
|
|
178
209
|
|
|
179
|
-
|
|
210
|
+
* Stable ESM and CommonJS entry points
|
|
211
|
+
* Stable TypeScript types for exported symbols
|
|
212
|
+
* Compatibility with Node 18, 20, and 22
|
|
180
213
|
|
|
181
|
-
|
|
182
|
-
* It can be bundled by modern tools (Vite, Rollup, Webpack)
|
|
214
|
+
This package follows semantic versioning.
|
|
183
215
|
|
|
184
|
-
|
|
216
|
+
* `0.x` releases may introduce breaking changes
|
|
217
|
+
* `1.0.0` will mark a frozen public API
|
|
185
218
|
|
|
186
219
|
---
|
|
187
220
|
|
|
188
|
-
##
|
|
221
|
+
## Development and Testing
|
|
189
222
|
|
|
190
|
-
|
|
223
|
+
### Prerequisites
|
|
191
224
|
|
|
192
|
-
|
|
193
|
-
* Stable TypeScript types for exported symbols
|
|
194
|
-
* Compatibility with Node 18, 20, and 22
|
|
195
|
-
* Deterministic build and publish artifacts
|
|
225
|
+
Integration tests require credentials stored in `.env`. The encrypted version `.env.enc` is committed to the repository.
|
|
196
226
|
|
|
197
|
-
|
|
227
|
+
### Decrypting credentials
|
|
198
228
|
|
|
199
|
-
|
|
200
|
-
|
|
229
|
+
```bash
|
|
230
|
+
sops -d .env.enc > .env
|
|
231
|
+
```
|
|
201
232
|
|
|
202
|
-
|
|
233
|
+
### Running tests
|
|
203
234
|
|
|
204
|
-
|
|
235
|
+
```bash
|
|
236
|
+
# Unit tests
|
|
237
|
+
npm run test:unit
|
|
205
238
|
|
|
206
|
-
|
|
239
|
+
# Integration tests (requires .env)
|
|
240
|
+
npm run test:integration
|
|
241
|
+
```
|
|
207
242
|
|
|
208
|
-
|
|
209
|
-
|
|
243
|
+
### Re-encrypting after changes
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
sops -e .env > .env.enc
|
|
247
|
+
```
|
|
210
248
|
|
|
211
249
|
---
|
|
212
250
|
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const t=Symbol("
|
|
1
|
+
"use strict";const t=Symbol("session_state"),e=Symbol("auth_session"),n=Symbol("auth_state"),r=Symbol("emitter");function s(t){return t?"localStorage"===t?function(){try{return"undefined"==typeof window?null:window.localStorage?window.localStorage:null}catch{return null}}():t:null}function o(t,e){return t?function(t){if(!t)return null;try{return JSON.parse(t)}catch{return null}}(t.getItem(e)):null}function i(t,e,n){if(t)try{t.setItem(e,JSON.stringify(n))}catch{}}function a(t,e){if(t)try{t.removeItem(e)}catch{}}function c(t,e,n){if(!t)return;const r=o(t,e),s=l(r)?r:null;null===r||s||a(t,e),s&&s.expiresAt>=n.expiresAt||i(t,e,n)}function u(t,e,n){if(!t)return;const r=o(t,e),s=f(r)?r:null;null===r||s||a(t,e),s&&s.lastUpdatedAt>=n.lastUpdatedAt||i(t,e,n)}function l(t){return!!t&&"string"==typeof t.accessToken&&"string"==typeof t.refreshToken&&"number"==typeof t.expiresAt&&"number"==typeof t.expiresIn&&"Bearer"===t.tokenType}function f(t){return!!t&&"string"==typeof t.id&&"string"==typeof t.applicationId&&"string"==typeof t.status&&"number"==typeof t.lastUpdatedAt&&("object"==typeof t.identity||null===t.identity)}function p(e){return e[t]}function h(t){return t[n]}function y(t,n){t[e]=n;const s=p(n);!function(t,e){t[r]=(t,n)=>{const r=h(e).listeners[t];if(r)for(const e of r)try{e(n)}catch{console.warn("Unhandled error in AuthEvent listener for event",t)}}}(s,t),g(s,"sessionChange",n)}function g(t,e,n){(0,t[r])(e,n)}function d(t){return t.replace(/_([a-z])/g,(t,e)=>e.toUpperCase())}function m(t){if(null===t||"object"!=typeof t)return t;if(Array.isArray(t))return t.map(t=>m(t));const e=t,n={};for(const t of Object.keys(e))Object.prototype.hasOwnProperty.call(e,t)&&(n[d(t)]=m(e[t]));return n}function w(t){return t.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function b(t){if(null===t||"object"!=typeof t)return t;if(Array.isArray(t))return t.map(t=>b(t));const e=t,n={};for(const t of Object.keys(e))Object.prototype.hasOwnProperty.call(e,t)&&(n[w(t)]=b(e[t]));return n}class k extends Error{constructor(t){super(t.title),this.name="AuthError",this.problem=Object.freeze(t)}get type(){return this.problem.type}get title(){return this.problem.title}get status(){return this.problem.status}get code(){return this.problem.code}get detail(){return this.problem.detail}get invalidParams(){return this.problem.invalidParams}}const S={fetchFn:function(){const t=globalThis.fetch;return"function"==typeof t?t.bind(globalThis):async()=>{throw new Error("Missing fetch implementation. Provide config.fetchFn or use a runtime with global fetch.")}}(),baseUrl:"https://api.accountmaker.com",earlyRefreshMs:6e4,storage:null,tokensStorageKey:"am_tokens",profileStorageKey:"am_profile"};const A=async(t,e,n={})=>t.config.fetchFn(e,function(t,e){const n=new Headers(t.headers);return n.set("Authorization",`Bearer ${e}`),{...t,headers:n}}(n,t.tokens.accessToken)),P=async(t,e,n={})=>{x(t)&&await U(t);let r=await A(t,e,n);return 401!==r.status||t.cleared||(await U(t),r=await A(t,e,n)),r},j=async t=>{if(204===t.status)return;const e=m(await async function(t){const e=t.headers.get("Content-Type")||"";if(!e.includes("application/json")&&!e.includes("+json"))return null;try{return await t.json()}catch{return null}}(t));if(!t.ok)throw new k(function(t,e){return function(t){return(t.headers.get("Content-Type")||"").includes("application/problem+json")}(t)&&e&&"object"==typeof e&&"string"==typeof e.type&&"string"==typeof e.title&&"number"==typeof e.status?e:function(t,e){return{type:"about:blank",title:t.statusText||"Request failed",status:t.status,detail:"string"==typeof e?e:void 0}}(t,e)}(t,e));return e},T=async(t,e,n={})=>{const r=await P(t,e,n);return j(r)},O=async({fetchFn:t,baseUrl:e},n,r={})=>{const s=new URLSearchParams(b(r)).toString(),o=s?`${e}${n}?${s}`:`${e}${n}`,i=await t(o,{method:"GET",headers:{Accept:"application/json"}});return j(i)},$=async({fetchFn:t,baseUrl:e},n,r)=>{const s=await t(`${e}${n}`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(b(r))});return j(s)},x=t=>{const e=Math.min(Math.max(t.config.earlyRefreshMs,0),3e5);return Date.now()>=t.tokens.expiresAt-e},U=async t=>{if(!t.cleared){t.refreshPromise||(t.refreshPromise=async function(t){const{fetchFn:e,baseUrl:n}=t.config,r=await e(`${n}/auth/refresh`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(b({refreshToken:t.tokens.refreshToken}))});let o;try{o=await j(r)}catch(e){throw!t.cleared&&K(e)&&g(t,"unauthenticated",e),e}const i=v(o);t.tokens=i;const a=s(t.config.storage);c(a,t.config.tokensStorageKey,i),g(t,"refresh",i)}(t));try{await t.refreshPromise}finally{t.refreshPromise=null}}},K=t=>t instanceof k&&401===t.status,v=t=>{const e="number"==typeof t.expiresIn?t.expiresIn:0;return{...t,expiresAt:Date.now()+1e3*e}},E=t=>({...t,lastUpdatedAt:Date.now()});async function I(t){const e=E(await(async(t,e,n={})=>{const r=new URLSearchParams(b(n)).toString(),s=t.config.baseUrl,o=r?`${s}${e}?${r}`:`${s}${e}`;return await T(t,o,{method:"GET",headers:{Accept:"application/json"}})})(t,"/auth/me",{}));t.profile=e;u(s(t.config.storage),t.config.profileStorageKey,e),g(t,"profileChange",e)}const C=t=>({tokens:v(t.tokens),profile:E(t.profile)});class J{constructor(e,n){const r={...S,...n},o={...e,config:r,refreshPromise:null,profilePromise:null,cleared:!1};!function(e,n){e[t]=n}(this,o);const i=s(r.storage);c(i,r.tokensStorageKey,o.tokens),o.profile&&u(i,r.profileStorageKey,o.profile)}clear(){const t=p(this);!function(t){const e=s(t.storage);a(e,t.profileStorageKey),a(e,t.tokensStorageKey)}(t.config),t.cleared=!0}get tokens(){return p(this).tokens}get profile(){return p(this).profile}toJSON(){const t=p(this);return{tokens:t.tokens,profile:t.profile}}static fromJSON(t,e){return new J(t,e)}isExpired(){return x(p(this))}async fetch(t,e={}){return P(p(this),t,e)}async refresh(){return U(p(this))}async refetchProfile(){const t=p(this);if(!t.cleared){t.profilePromise||(t.profilePromise=I(t));try{await t.profilePromise}finally{t.profilePromise=null}}}async sendVerificationEmail(){await(async(t,e,n)=>{const r=t.config.baseUrl;return await T(t,`${r}${e}`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(b(n))})})(p(this),"/auth/send-verification-email",{})}}exports.Am=class{constructor(t){var e,r;e=this,r={config:{...S,...t},listeners:{}},e[n]=r}get session(){return this[e]||null}createSession(t){const e=new J(t,h(this).config);return y(this,e),e}restoreSession(){const t=h(this).config,e=s(t.storage);if(!e)return null;const n=o(e,t.tokensStorageKey),r=l(n)?n:null,i=o(e,t.profileStorageKey),c=f(i)?i:null;if(!r||!c)return a(e,t.tokensStorageKey),a(e,t.profileStorageKey),null;const u=new J({tokens:r,profile:c},t);return y(this,u),u}on(t,e){const n=h(this).listeners,r=n[t]??(n[t]=new Set);return r.add(e),()=>r.delete(e)}async acceptInvite(t){const e=h(this).config,n=C(await O(e,"/auth/accept-invite",t)),r=new J(n,e);return y(this,r),r}async checkEmail(t){return $(h(this).config,"/auth/check-email",t)}async csrfSession(){return O(h(this).config,"/auth/csrf-session")}async csrfToken(){return O(h(this).config,"/auth/csrf-token")}async signIn(t){const e=h(this).config,n=C(await $(e,"/auth/sign-in",t)),r=new J(n,e);return y(this,r),r}async signInWithToken(t){const e=h(this).config,n=C(await O(e,"/auth/sign-in-with-token",{token:t})),r=new J(n,e);return y(this,r),r}async signUp(t){const e=h(this).config,n=C(await $(e,"/auth/sign-up",t)),r=new J(n,e);return y(this,r),r}async resetPassword(t){return $(h(this).config,"/auth/reset-password",t)}async sendMagicLink(t){return $(h(this).config,"/auth/send-magic-link",t)}async sendPasswordReset(t){return $(h(this).config,"/auth/send-password-reset",t)}},exports.AuthError=k,exports.AuthSession=J;
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/auth.ts"],"sourcesContent":[null],"names":["STATE","Symbol","resolveStorage","storageConfig","window","localStorage","getBrowserLocalStorage","readJson","storage","key","raw","JSON","parse","safeParse","getItem","writeJson","value","setItem","stringify","removeKey","removeItem","writeTokensIfNewer","next","curRaw","cur","isSessionTokens","expiresAt","writeProfileIfNewer","isSessionProfile","lastUpdatedAt","x","accessToken","refreshToken","expiresIn","tokenType","id","accountId","status","identity","getState","session","camelCaseStr","str","replace","_","letter","toUpperCase","camelCaseObj","input","Array","isArray","map","item","obj","result","Object","keys","prototype","hasOwnProperty","call","snakeCaseStr","toLowerCase","snakeCaseObj","AuthError","Error","constructor","problem","super","title","this","name","freeze","type","code","detail","invalidParams","defaultConfig","fetchFn","f","globalThis","fetch","bind","async","defaultFetchFn","baseUrl","earlyRefreshMs","tokensStorageKey","profileStorageKey","handleResponse","res","json","contentType","headers","get","includes","readJsonSafe","ok","isProblemJson","statusText","undefined","toGenericProblem","getProblemJson","unauthGet","path","query","qs","URLSearchParams","toString","url","method","Accept","unauthPost","body","authFetch","state","init","config","Authorization","tokens","isExpired","early","Math","min","max","Date","now","refresh","cleared","refreshPromise","toSessionTokens","onRefresh","doRefresh","isUnauthenticatedAuthError","e","authFetchWithRefresh","e2","onUnauthenticated","authGet","toSessionProfile","profile","handleAuthenticationResponse","AuthSession","initial","merged","profilePromise","setState","restoreSession","tokensRaw","profileRaw","clear","clearAuth","idToken","toJSON","fromJSON","refetchProfile","onProfileRefetch","doRefetchProfile","sendVerificationEmail","authPost","user","Am","options","createAuthSession","acceptInvite","checkEmail","csrfSession","csrfToken","signIn","signInWithToken","token","signUp","resetPassword","sendMagicLink","sendPasswordReset"],"mappings":"aAaA,MACMA,EAAQC,OAAO,SAwCrB,SAASC,EAAeC,GACtB,OAAKA,EACiB,iBAAlBA,EAZN,WACE,IACE,MAAsB,oBAAXC,OAA+B,KACrCA,OAAOC,aACLD,OAAOC,aADmB,IAEnC,CAAE,MACA,OAAO,IACT,CACF,CAI+CC,GACtCH,EAFoB,IAG7B,CAWA,SAASI,EAAYC,EAA6BC,GAChD,OAAKD,EAVP,SAAsBE,GACpB,IAAKA,EAAK,OAAO,KACjB,IACE,OAAOC,KAAKC,MAAMF,EACpB,CAAE,MACA,OAAO,IACT,CACF,CAISG,CAAaL,EAAQM,QAAQL,IADf,IAEvB,CAEA,SAASM,EACPP,EACAC,EACAO,GAEA,GAAKR,EACL,IACEA,EAAQS,QAAQR,EAAKE,KAAKO,UAAUF,GACtC,CAAE,MAAO,CACX,CAEA,SAASG,EAAUX,EAA6BC,GAC9C,GAAKD,EACL,IACEA,EAAQY,WAAWX,EACrB,CAAE,MAAO,CACX,CAQA,SAASY,EACPb,EACAC,EACAa,GAEA,IAAKd,EAAS,OAEd,MAAMe,EAAShB,EAAkBC,EAASC,GACpCe,EAAMC,EAAgBF,GAAUA,EAAS,KAEhC,OAAXA,GAAoBC,GAAKL,EAAUX,EAASC,GAC5Ce,GAAOA,EAAIE,WAAaJ,EAAKI,WAEjCX,EAAUP,EAASC,EAAKa,EAC1B,CAEA,SAASK,EACPnB,EACAC,EACAa,GAEA,IAAKd,EAAS,OAEd,MAAMe,EAAShB,EAAkBC,EAASC,GACpCe,EAAMI,EAAiBL,GAAUA,EAAS,KAEjC,OAAXA,GAAoBC,GAAKL,EAAUX,EAASC,GAC5Ce,GAAOA,EAAIK,eAAiBP,EAAKO,eAErCd,EAAUP,EAASC,EAAKa,EAC1B,CAEA,SAASG,EAAgBK,GACvB,QACIA,GACuB,iBAAlBA,EAAEC,aACiB,iBAAnBD,EAAEE,cACc,iBAAhBF,EAAEJ,WACc,iBAAhBI,EAAEG,WACO,WAAhBH,EAAEI,SAEN,CAEA,SAASN,EAAiBE,GACxB,QACIA,GACc,iBAATA,EAAEK,IACc,iBAAhBL,EAAEM,WACW,iBAAbN,EAAEO,QACkB,iBAApBP,EAAED,gBACc,iBAAfC,EAAEQ,UAAwC,OAAfR,EAAEQ,SAEzC,CAEA,SAASC,EAASC,GAChB,OAAQA,EAAgBxC,EAC1B,CAMA,SAASyC,EAAaC,GACpB,OAAOA,EAAIC,QAAQ,YAAa,CAACC,EAAGC,IAAWA,EAAOC,cACxD,CAEA,SAASC,EAAaC,GACpB,GAAc,OAAVA,GAAmC,iBAAVA,EAC3B,OAAOA,EAGT,GAAIC,MAAMC,QAAQF,GAChB,OAAOA,EAAMG,IAAKC,GAASL,EAAaK,IAG1C,MAAMC,EAAML,EACNM,EAAkC,CAAA,EAExC,IAAK,MAAM7C,KAAO8C,OAAOC,KAAKH,GACxBE,OAAOE,UAAUC,eAAeC,KAAKN,EAAK5C,KAC5C6C,EAAOb,EAAahC,IAAQsC,EAAaM,EAAI5C,KAIjD,OAAO6C,CACT,CAEA,SAASM,EAAalB,GACpB,OAAOA,EAAIC,QAAQ,SAAWE,GAAW,IAAIA,EAAOgB,gBACtD,CAEA,SAASC,EAAad,GACpB,GAAc,OAAVA,GAAmC,iBAAVA,EAC3B,OAAOA,EAGT,GAAIC,MAAMC,QAAQF,GAChB,OAAOA,EAAMG,IAAKC,GAASU,EAAaV,IAG1C,MAAMC,EAAML,EACNM,EAAkC,CAAA,EAExC,IAAK,MAAM7C,KAAO8C,OAAOC,KAAKH,GACxBE,OAAOE,UAAUC,eAAeC,KAAKN,EAAK5C,KAC5C6C,EAAOM,EAAanD,IAAQqD,EAAaT,EAAI5C,KAIjD,OAAO6C,CACT,CA8CM,MAAOS,UAAkBC,MAG7B,WAAAC,CAAYC,GACVC,MAAMD,EAAQE,OACdC,KAAKC,KAAO,YACZD,KAAKH,QAAUX,OAAOgB,OAAOL,EAC/B,CACA,QAAIM,GACF,OAAOH,KAAKH,QAAQM,IACtB,CACA,SAAIJ,GACF,OAAOC,KAAKH,QAAQE,KACtB,CACA,UAAI/B,GACF,OAAOgC,KAAKH,QAAQ7B,MACtB,CACA,QAAIoC,GACF,OAAOJ,KAAKH,QAAQO,IACtB,CACA,UAAIC,GACF,OAAOL,KAAKH,QAAQQ,MACtB,CACA,iBAAIC,GACF,OAAON,KAAKH,QAAQS,aACtB,EAgBF,MAAMC,EAAwB,CAC5BC,QAdF,WACE,MAAMC,EAAKC,WAAmBC,MAC9B,MAAiB,mBAANF,EACFA,EAAEG,KAAKF,YAGTG,UACL,MAAM,IAAIlB,MACR,4FAGN,CAGWmB,GACTC,QAAS,+BACTC,eA7RgB,IA8RhB7E,QAAS,KACT8E,iBAAkB,YAClBC,kBAAmB,cA6CrB,MAAMC,EAAiBN,MAAOO,IAC5B,GAAmB,MAAfA,EAAIpD,OACN,OAGF,MAAMqD,EAAO3C,QA1CfmC,eAA4BO,GAC1B,MAAME,EAAcF,EAAIG,QAAQC,IAAI,iBAAmB,GACvD,IACGF,EAAYG,SAAS,sBACrBH,EAAYG,SAAS,SAEtB,OAAO,KACT,IACE,aAAaL,EAAIC,MACnB,CAAE,MACA,OAAO,IACT,CACF,CA8BkCK,CAAaN,IAE7C,IAAKA,EAAIO,GACP,MAAM,IAAIjC,EAtBd,SAAwB0B,EAAeC,GACrC,OA7BF,SAAuBD,GAErB,OADoBA,EAAIG,QAAQC,IAAI,iBAAmB,IACpCC,SAAS,2BAC9B,CA2BIG,CAAcR,IACdC,GACgB,iBAATA,GACc,iBAAdA,EAAKlB,MACU,iBAAfkB,EAAKtB,OACW,iBAAhBsB,EAAKrD,OAELqD,EAlBX,SAA0BD,EAAef,GACvC,MAAO,CACLF,KAAM,cACNJ,MAAOqB,EAAIS,YAAc,iBACzB7D,OAAQoD,EAAIpD,OACZqC,OAA0B,iBAAXA,EAAsBA,OAASyB,EAElD,CAaSC,CAAiBX,EAAKC,EAC/B,CAUwBW,CAAeZ,EAAKC,IAG1C,OAAOA,GAGHY,EAAYpB,OACdL,UAASO,WACXmB,EACAC,EAAgC,MAEhC,MAAMC,EAAK,IAAIC,gBACb5C,EAAa0C,IACbG,WACIC,EAAMH,EAAK,GAAGrB,IAAUmB,KAAQE,IAAO,GAAGrB,IAAUmB,IACpDd,QAAYZ,EAAQ+B,EAAK,CAC7BC,OAAQ,MACRjB,QAAS,CACPkB,OAAQ,sBAGZ,OAAOtB,EAAeC,IAGlBsB,EAAa7B,OACfL,UAASO,WACXmB,EACAS,KAEA,MAAMvB,QAAYZ,EAAQ,GAAGO,IAAUmB,IAAQ,CAC7CM,OAAQ,OACRjB,QAAS,CACPkB,OAAQ,mBACR,eAAgB,oBAElBE,KAAMrG,KAAKO,UAAU4C,EAAakD,MAEpC,OAAOxB,EAAeC,IASlBwB,EAAY/B,MAChBgC,EACAN,EACAO,EAAoB,CAAA,KAEpB,MAAM1B,QAAYyB,EAAME,OAAOvC,QAAQ+B,EAAK,IACvCO,EACHvB,QAAS,IACHuB,EAAKvB,SAAW,GACpByB,cAAe,UAAUH,EAAMI,OAAOvF,iBAI1C,OAAOyD,EAAeC,IAGlB8B,EAAaL,IACjB,MAAMM,EAAQC,KAAKC,IACjBD,KAAKE,IAAIT,EAAME,OAAO/B,eAAgB,GACtC,KAEF,OAAOuC,KAAKC,OAASX,EAAMI,OAAO5F,UAAY8F,GAG1CM,EAAU5C,MAAOgC,IACrB,IAAIA,EAAMa,QAAV,CAEKb,EAAMc,iBACTd,EAAMc,eAkIV9C,eAAyBgC,GACvB,MAAMrC,QAAEA,EAAOO,QAAEA,GAAY8B,EAAME,OAE7B3B,QAAYZ,EAAQ,GAAGO,iBAAwB,CACnDyB,OAAQ,OACRjB,QAAS,CACPkB,OAAQ,mBACR,eAAgB,oBAElBE,KAAMrG,KAAKO,UACT4C,EAAa,CAAE9B,aAAckF,EAAMI,OAAOtF,kBAIxCsF,EAASW,QAAsBzC,EAAeC,IACpDyB,EAAMI,OAASA,EAEf,MAAM9G,EAAUN,EAAegH,EAAME,OAAO5G,SAC5Ca,EAAmBb,EAAS0G,EAAME,OAAO9B,iBAAkBgC,SAErDJ,EAAME,OAAOc,YAAYZ,GACjC,CAvJ2Ba,CAAUjB,IAGnC,UACQA,EAAMc,cACd,SACEd,EAAMc,eAAiB,IACzB,CAVmB,GAafI,EAA8BC,GAC3BA,aAAatE,GAA0B,MAAbsE,EAAEhG,OAa/BiG,EAAuBpD,MAC3BgC,EACAN,EACAO,EAAoB,CAAA,KAEhBI,EAAUL,UACNY,EAAQZ,GAGhB,IACE,aAAaD,EAAUC,EAAON,EAAKO,EACrC,CAAE,MAAOkB,GAEP,IAAKD,EAA2BC,GAC9B,MAAMA,EAGR,GAAInB,EAAMa,QACR,MAAMM,EAGR,IAQE,aAHMP,EAAQZ,SAGDD,EAAUC,EAAON,EAAKO,EACrC,CAAE,MAAOoB,GAEP,GACErB,EAAME,OAAOoB,oBACZtB,EAAMa,SACPK,EAA2BG,GAE3B,UACQrB,EAAME,OAAOoB,kBAAkBD,EACvC,CAAE,MAAO,CAEX,MAAMA,CACR,CACF,GAQIE,EAAUvD,MACdgC,EACAX,EACAC,EAAgC,CAAA,KAEhC,MAAMC,EAAK,IAAIC,gBACb5C,EAAa0C,IACbG,WACIvB,EAAU8B,EAAME,OAAOhC,QACvBwB,EAAMH,EAAK,GAAGrB,IAAUmB,KAAQE,IAAO,GAAGrB,IAAUmB,IAC1D,aAAa+B,EAAqBpB,EAAON,EAAK,CAC5CC,OAAQ,MACRjB,QAAS,CACPkB,OAAQ,uBA2BRmB,EAAmBX,IACvB,MAAMrF,EAAwC,iBAArBqF,EAAOrF,UAAyBqF,EAAOrF,UAAY,EAC5E,MAAO,IACFqF,EACH5F,UAAWkG,KAAKC,MAAoB,IAAZ5F,IAItByG,EAAoBC,IACjB,IACFA,EACH9G,cAAe+F,KAAKC,QAqCxB,MAAMe,EAAgClD,IAC7B,CACL4B,OAAQW,EAAgBvC,EAAK4B,QAC7BqB,QAASD,EAAiBhD,EAAKiD,iBAetBE,EACX,WAAA5E,CAAY6E,EAAyB1B,GACnC,MAAM2B,EAAS,IAAKnE,KAAkBwC,GAEhCF,EAAe,IAChB4B,EACH1B,OAAQ2B,EACRf,eAAgB,KAChBgB,eAAgB,KAChBjB,SAAS,IA9cf,SAAkBvF,EAAsB0E,GACrC1E,EAAgBxC,GAASkH,CAC5B,CA+cI+B,CAAS5E,KAAM6C,GAEf,MAAM1G,EAAUN,EAAe6I,EAAOvI,SACtCa,EAAmBb,EAASuI,EAAOzD,iBAAkB4B,EAAMI,QAEvDJ,EAAMyB,SAERhH,EAAoBnB,EAASuI,EAAOxD,kBAAmB2B,EAAMyB,QAEjE,CAgBA,qBAAOO,CAAe9B,EAA0B,IAC9C,MAAM2B,EAAS,IAAKnE,KAAkBwC,GAChC5G,EAAUN,EAAe6I,EAAOvI,SACtC,IAAKA,EAAS,OAAO,KAErB,MAAM2I,EAAY5I,EAAkBC,EAASuI,EAAOzD,kBAC9CgC,EAAS7F,EAAgB0H,GAAaA,EAAY,KAExD,IAAK7B,EAIH,OAHkB,OAAd6B,GAAoBhI,EAAUX,EAASuI,EAAOzD,kBAElDnE,EAAUX,EAASuI,EAAOxD,mBACnB,KAGT,MAAM6D,EAAa7I,EAAkBC,EAASuI,EAAOxD,mBAC/CoD,EAAU/G,EAAiBwH,GAAcA,EAAa,KAO5D,OALmB,OAAfA,GAAwBT,GAE1BxH,EAAUX,EAASuI,EAAOxD,mBAGrB,IAAIsD,EAAY,CAAEvB,SAAQqB,WAAWI,EAC9C,CAOA,KAAAM,GACE,MAAMnC,EAAQ3E,EAAS8B,OA1kB3B,SAAmB+C,GACjB,MAAM5G,EAAUN,EAAekH,EAAO5G,SACtCW,EAAUX,EAAS4G,EAAO7B,mBAC1BpE,EAAUX,EAAS4G,EAAO9B,iBAC5B,CAukBIgE,CAAUpC,EAAME,QAChBF,EAAMa,SAAU,CAClB,CAEA,WAAAhG,GACE,OAAOQ,EAAS8B,MAAMiD,OAAOvF,WAC/B,CACA,YAAAC,GACE,OAAOO,EAAS8B,MAAMiD,OAAOtF,YAC/B,CACA,OAAAuH,GACE,OAAOhH,EAAS8B,MAAMiD,OAAOiC,OAC/B,CACA,SAAAtH,GACE,OAAOM,EAAS8B,MAAMiD,OAAOrF,SAC/B,CACA,SAAAP,GACE,OAAO,IAAIkG,KAAKrF,EAAS8B,MAAMiD,OAAO5F,UACxC,CACA,OAAAiH,GACE,OAAOpG,EAAS8B,MAAMsE,OACxB,CAEA,MAAAa,GACE,MAAMtC,EAAQ3E,EAAS8B,MACvB,MAAO,CAAEiD,OAAQJ,EAAMI,OAAQqB,QAASzB,EAAMyB,QAChD,CAMA,eAAOc,CACLX,EACA1B,GAEA,OAAO,IAAIyB,EAAYC,EAAS1B,EAClC,CAMA,SAAAG,GACE,OAAOA,EAAUhF,EAAS8B,MAC5B,CA0BA,WAAMW,CAAM4B,EAAmBO,EAAoB,IACjD,OAAOmB,EAAqB/F,EAAS8B,MAAOuC,EAAKO,EACnD,CAOA,aAAMW,GACJ,OAAOA,EAAQvF,EAAS8B,MAC1B,CAcA,oBAAMqF,GACJ,MAAMxC,EAAQ3E,EAAS8B,MACvB,IAAI6C,EAAMa,QAAV,CAKKb,EAAM8B,iBACT9B,EAAM8B,eA1MZ9D,eAAgCgC,GAC9B,MAAMyB,EAAUD,QAAuBD,EAAQvB,EAAO,WAAY,CAAA,IAClEA,EAAMyB,QAAUA,EAGhBhH,EADgBzB,EAAegH,EAAME,OAAO5G,SACf0G,EAAME,OAAO7B,kBAAmBoD,SAEvDzB,EAAME,OAAOuC,mBAAmBhB,GACxC,CAkM6BiB,CAAiB1C,IAG1C,UACQA,EAAM8B,cACd,SACE9B,EAAM8B,eAAiB,IACzB,CAVA,CAWF,CASA,2BAAMa,QAjRS3E,OACfgC,EACAX,EACAS,KAEA,MAAM5B,EAAU8B,EAAME,OAAOhC,QAC7B,aAAakD,EAAqBpB,EAAO,GAAG9B,IAAUmB,IAAQ,CAC5DM,OAAQ,OACRjB,QAAS,CACPkB,OAAQ,mBACR,eAAgB,oBAElBE,KAAMrG,KAAKO,UAAU4C,EAAakD,OAsQ5B8C,CAASvH,EAAS8B,MAAO,gCAAiC,CAAA,EAClE,CAQA,UAAM0F,CAAK5H,GACT,OAAOsG,EAAQlG,EAAS8B,MAAO,cAAclC,IAAM,GACrD,QAiBW6H,EAGX,WAAA/F,CAAYmD,GACV/C,KAAK4F,QAAU,IAAKrF,KAAkBwC,EACxC,CAMA,wBAAO8C,CACLpB,EACA1B,GAEA,OAAO,IAAI4C,EAAG5C,GAAQ8C,kBAAkBpB,EAC1C,CAMA,iBAAAoB,CAAkBpB,GAChB,OAAO,IAAID,EAAYC,EAASzE,KAAK4F,QACvC,CAUA,yBAAaE,CACX3D,EAIAY,GAEA,OAAO,IAAI4C,EAAG5C,GAAQ+C,aAAa3D,EACrC,CAUA,kBAAM2D,CAAa3D,GAIjB,MAAMsC,EAAUF,QACRtC,EAAUjC,KAAK4F,QAAS,sBAAuBzD,IAEvD,OAAO,IAAIqC,EAAYC,EAASzE,KAAK4F,QACvC,CAWA,uBAAaG,CACXpD,EACAI,GAMA,OAAO,IAAI4C,EAAG5C,GAAQgD,WAAWpD,EACnC,CAWA,gBAAMoD,CAAWpD,GASf,OAAOD,EAAW1C,KAAK4F,QAAS,oBAAqBjD,EACvD,CAQA,wBAAaqD,CACXjD,GAEA,OAAO,IAAI4C,EAAG5C,GAAQiD,aACxB,CAQA,iBAAMA,GACJ,OAAO/D,EAAUjC,KAAK4F,QAAS,qBACjC,CAWA,sBAAaK,CACXlD,GAEA,OAAO,IAAI4C,EAAG5C,GAAQkD,WACxB,CAWA,eAAMA,GACJ,OAAOhE,EAAUjC,KAAK4F,QAAS,mBACjC,CASA,mBAAaM,CACXvD,EAMAI,GAEA,OAAO,IAAI4C,EAAG5C,GAAQmD,OAAOvD,EAC/B,CASA,YAAMuD,CAAOvD,GAMX,MAAM8B,EAAUF,QACR7B,EAAW1C,KAAK4F,QAAS,gBAAiBjD,IAGlD,OAAO,IAAI6B,EAAYC,EAASzE,KAAK4F,QACvC,CAWA,4BAAaO,CACXC,EACArD,GAEA,OAAO,IAAI4C,EAAG5C,GAAQoD,gBAAgBC,EACxC,CAWA,qBAAMD,CAAgBC,GACpB,MAAMR,EAAU5F,KAAK4F,QACfnB,EAAUF,QACRtC,EAAU2D,EAAS,2BAA4B,CACnDQ,WAIJ,OAAO,IAAI5B,EAAYC,EAASmB,EAClC,CAUA,oBAAanC,CACX9F,EACAoF,GAEA,OAAO,IAAI4C,EAAG5C,GAAQU,QAAQ9F,EAChC,CAUA,aAAM8F,CAAQ9F,GACZ,OAAOiG,QACClB,EAAW1C,KAAK4F,QAAS,gBAAiB,CAC9CjI,iBAGN,CASA,mBAAa0I,CACX1D,EAMAI,GAEA,OAAO,IAAI4C,EAAG5C,GAAQsD,OAAO1D,EAC/B,CASA,YAAM0D,CAAO1D,GAMX,MAAM8B,EAAUF,QACR7B,EAAW1C,KAAK4F,QAAS,gBAAiBjD,IAGlD,OAAO,IAAI6B,EAAYC,EAASzE,KAAK4F,QACvC,CASA,0BAAaU,CACX3D,EAIAI,GAEA,OAAO,IAAI4C,EAAG5C,GAAQuD,cAAc3D,EACtC,CASA,mBAAM2D,CAAc3D,GAIlB,OAAOD,EAAW1C,KAAK4F,QAAS,uBAAwBjD,EAC1D,CASA,0BAAa4D,CACX5D,EAKAI,GAEA,OAAO,IAAI4C,EAAG5C,GAAQwD,cAAc5D,EACtC,CASA,mBAAM4D,CAAc5D,GAKlB,OAAOD,EAAW1C,KAAK4F,QAAS,wBAAyBjD,EAC3D,CAQA,8BAAa6D,CACX7D,EAKAI,GAEA,OAAO,IAAI4C,EAAG5C,GAAQyD,kBAAkB7D,EAC1C,CAQA,uBAAM6D,CAAkB7D,GAKtB,OAAOD,EAAW1C,KAAK4F,QAAS,4BAA6BjD,EAC/D"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/auth.ts"],"sourcesContent":[null],"names":["SESSION_STATE","Symbol","AUTH_SESSION","AUTH_STATE","EMITTER","resolveStorage","storageConfig","window","localStorage","getBrowserLocalStorage","readJson","storage","key","raw","JSON","parse","safeParse","getItem","writeJson","value","setItem","stringify","removeKey","removeItem","writeTokensIfNewer","next","curRaw","cur","isSessionTokens","expiresAt","writeProfileIfNewer","isSessionProfile","lastUpdatedAt","x","accessToken","refreshToken","expiresIn","tokenType","id","applicationId","status","identity","getSessionState","session","getAuthState","am","setAuthSession","sessionState","event","set","listeners","fn","console","warn","setSessionStateEmitter","emitSessionStateEvent","emit","camelCaseStr","str","replace","_","letter","toUpperCase","camelCaseObj","input","Array","isArray","map","item","obj","result","Object","keys","prototype","hasOwnProperty","call","snakeCaseStr","toLowerCase","snakeCaseObj","AuthError","Error","constructor","problem","super","title","this","name","freeze","type","code","detail","invalidParams","defaultConfig","fetchFn","f","globalThis","fetch","bind","async","defaultFetchFn","baseUrl","earlyRefreshMs","tokensStorageKey","profileStorageKey","fetchSessionResponse","state","init","config","token","headers","Headers","withBearer","tokens","fetchSessionResponseEnsureFresh","isExpired","refresh","res","cleared","handleJsonOrThrow","json","contentType","get","includes","readJsonSafe","ok","isProblemJson","statusText","undefined","toGenericProblem","getProblemJson","getSessionJsonEnsureFresh","unauthGet","path","query","qs","URLSearchParams","toString","url","method","Accept","unauthPost","body","early","Math","min","max","Date","now","refreshPromise","e","isUnauthenticatedAuthError","toSessionTokens","doRefresh","toSessionProfile","profile","doRefetchProfile","authGet","handleAuthenticationResponse","AuthSession","initial","merged","profilePromise","setSessionState","clear","clearAuth","toJSON","fromJSON","refetchProfile","sendVerificationEmail","authPost","createSession","restoreSession","tokensRaw","profileRaw","on","Set","add","delete","acceptInvite","checkEmail","csrfSession","csrfToken","signIn","signInWithToken","signUp","resetPassword","sendMagicLink","sendPasswordReset"],"mappings":"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"}
|