@softwarepatterns/am 0.0.1 → 0.1.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 +87 -79
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +367 -82
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/types/auth.d.ts +218 -75
- package/dist/types/index.d.ts +2 -2
- package/dist/types/types.d.ts +141 -7
- package/package.json +2 -3
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.
|
|
107
|
+
|
|
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
|
+
```
|
|
103
112
|
|
|
104
|
-
|
|
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);
|
|
138
|
+
|
|
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
|
+
}
|
|
111
146
|
|
|
112
|
-
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
By default, tokens are saved in memory only.
|
|
150
|
+
|
|
151
|
+
```ts
|
|
152
|
+
const am = new Am({
|
|
153
|
+
storage: null // disable storage, default is in-memory
|
|
154
|
+
});
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Set to "localStorage" to persist sessions across reloads.
|
|
113
158
|
|
|
114
159
|
```ts
|
|
115
|
-
|
|
160
|
+
const am = new Am({
|
|
161
|
+
storage: "localStorage"
|
|
162
|
+
});
|
|
163
|
+
const session = am.restoreSession();
|
|
116
164
|
```
|
|
117
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,54 +185,22 @@ 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
|
-
---
|
|
162
|
-
|
|
163
|
-
## TypeScript support
|
|
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
|
|
176
|
-
|
|
177
|
-
This SDK does **not currently claim browser runtime support**.
|
|
178
|
-
|
|
179
|
-
However:
|
|
180
|
-
|
|
181
|
-
* The package is free of Node-only runtime APIs
|
|
182
|
-
* It can be bundled by modern tools (Vite, Rollup, Webpack)
|
|
183
|
-
|
|
184
|
-
Browser runtime support may be added in a future release, along with explicit guarantees and tests.
|
|
185
|
-
|
|
186
204
|
---
|
|
187
205
|
|
|
188
206
|
## Stability guarantees
|
|
@@ -192,16 +210,6 @@ The following are guaranteed:
|
|
|
192
210
|
* Stable ESM and CommonJS entry points
|
|
193
211
|
* Stable TypeScript types for exported symbols
|
|
194
212
|
* Compatibility with Node 18, 20, and 22
|
|
195
|
-
* Deterministic build and publish artifacts
|
|
196
|
-
|
|
197
|
-
The following are **not** guaranteed yet:
|
|
198
|
-
|
|
199
|
-
* Browser runtime behavior
|
|
200
|
-
* Backward compatibility prior to `1.0.0`
|
|
201
|
-
|
|
202
|
-
---
|
|
203
|
-
|
|
204
|
-
## Versioning
|
|
205
213
|
|
|
206
214
|
This package follows semantic versioning.
|
|
207
215
|
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";function t(t){return t.replace(/_([a-z])/g,(t,e)=>e.toUpperCase())}function
|
|
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.accountId&&"string"==typeof t.status&&"number"==typeof t.lastUpdatedAt&&("object"==typeof t.identity||null===t.identity)}function h(e){return e[t]}function p(t){return t[n]}function y(t,n){t[e]=n;const s=h(n);!function(t,e){t[r]=(t,n)=>{const r=p(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);if(401!==r.status)return r;if(t.cleared)return r;try{return await U(t),r=await A(t,e,n),r}catch(e){throw!t.cleared&&K(e)&&g(t,"unauthenticated",e),e}},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}))}),o=v(await j(r));t.tokens=o;const i=s(t.config.storage);c(i,t.config.tokensStorageKey,o),g(t,"refresh",o)}(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=h(this);!function(t){const e=s(t.storage);a(e,t.profileStorageKey),a(e,t.tokensStorageKey)}(t.config),t.cleared=!0}get tokens(){return h(this).tokens}get profile(){return h(this).profile}toJSON(){const t=h(this);return{tokens:t.tokens,profile:t.profile}}static fromJSON(t,e){return new J(t,e)}isExpired(){return x(h(this))}async fetch(t,e={}){return P(h(this),t,e)}async refresh(){return U(h(this))}async refetchProfile(){const t=h(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))})})(h(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,p(this).config);return y(this,e),e}restoreSession(){const t=p(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=p(this).listeners,r=n[t]??(n[t]=new Set);return r.add(e),()=>r.delete(e)}async acceptInvite(t){const e=p(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 $(p(this).config,"/auth/check-email",t)}async csrfSession(){return O(p(this).config,"/auth/csrf-session")}async csrfToken(){return O(p(this).config,"/auth/csrf-token")}async signIn(t){const e=p(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=p(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=p(this).config,n=C(await $(e,"/auth/sign-up",t)),r=new J(n,e);return y(this,r),r}async resetPassword(t){return $(p(this).config,"/auth/reset-password",t)}async sendMagicLink(t){return $(p(this).config,"/auth/send-magic-link",t)}async sendPasswordReset(t){return $(p(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":["camelCaseStr","str","replace","_","letter","toUpperCase","camelCaseObj","input","Array","isArray","map","item","obj","result","key","Object","keys","prototype","hasOwnProperty","call","snakeCaseStr","toLowerCase","snakeCaseObj","AuthError","Error","constructor","problem","super","title","this","name","freeze","type","status","code","detail","invalidParams","defaultConfig","fetchFn","f","globalThis","fetch","async","defaultFetchFn","baseUrl","handleResponse","res","raw","contentType","headers","get","includes","json","readJsonSafe","ok","isProblemJson","statusText","toGenericProblem","undefined","unauthGet","path","query","qs","URLSearchParams","toString","url","method","Accept","unauthPost","body","JSON","stringify","authGet","accessToken","Authorization","AuthSession","tokens","config","lastUpdated","Date","refreshToken","idToken","tokenType","expiresIn","lastUpdatedAt","expiresAt","getTime","isExpired","now","init","refresh","sendVerificationEmail","authPost","me","user","id","Am","options","createAuthSession","acceptInvite","checkEmail","csrfSession","csrfToken","login","tokenLogin","token","register","resetPassword","sendMagicLink","sendPasswordReset"],"mappings":"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"}
|
|
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","accountId","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","e","isUnauthenticatedAuthError","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","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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"}
|