@softwarepatterns/am 0.0.2 → 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 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 for **Node.js applications** and **modern bundlers**, with explicit support for both **ESM** and **CommonJS** consumers.
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
- * ESM and CommonJS support
11
+ * Automatic access-token refresh
14
12
  * TypeScript-first API with bundled `.d.ts`
15
- * Explicit error modeling using Problem Details
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
- * No side effects on import
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
- ### Login with email and password
66
+ ### Sign in with email and password
77
67
 
78
68
  ```ts
79
- const result = await am.login({
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
- The result contains both session tokens and the authenticated profile.
76
+ ### Sign up (register) a new user with email and password
86
77
 
87
78
  ```ts
88
- result.session;
89
- result.profile;
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
- ### Create an authenticated session
95
+ ### Sign in with a token from an email link
95
96
 
96
97
  ```ts
97
- const session = am.createAuthSession(result.session);
98
+ const session = await am.signInWithToken({
99
+ clientId: "your-client-id",
100
+ token: "token-from-email",
101
+ });
98
102
  ```
99
103
 
100
- An `AuthSession` represents an authenticated user and handles token refresh automatically.
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
- ### Fetch the current user
113
+ You can also use the access token yourself.
105
114
 
106
115
  ```ts
107
- const me = await session.me();
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
- ### Refresh tokens explicitly
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
- await session.refresh();
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 are surfaced as `AuthError`.
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.login({ email, password });
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 the **Problem Details** format (`application/problem+json`).
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 implementation
194
+ ## Custom fetch
145
195
 
146
- If the runtime does not provide a global `fetch`, supply one explicitly.
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";const t=Symbol("state");function e(t){return t?"localStorage"===t?function(){try{return"undefined"==typeof window?null:window.localStorage?window.localStorage:null}catch{return null}}():t:null}function n(t,e){return t?function(t){if(!t)return null;try{return JSON.parse(t)}catch{return null}}(t.getItem(e)):null}function r(t,e,n){if(t)try{t.setItem(e,JSON.stringify(n))}catch{}}function s(t,e){if(t)try{t.removeItem(e)}catch{}}function o(t,e,o){if(!t)return;const i=n(t,e),c=a(i)?i:null;null===i||c||s(t,e),c&&c.expiresAt>=o.expiresAt||r(t,e,o)}function i(t,e,o){if(!t)return;const i=n(t,e),a=c(i)?i:null;null===i||a||s(t,e),a&&a.lastUpdatedAt>=o.lastUpdatedAt||r(t,e,o)}function a(t){return!!t&&"string"==typeof t.accessToken&&"string"==typeof t.refreshToken&&"number"==typeof t.expiresAt&&"number"==typeof t.expiresIn&&"Bearer"===t.tokenType}function c(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 u(e){return e[t]}function l(t){return t.replace(/_([a-z])/g,(t,e)=>e.toUpperCase())}function f(t){if(null===t||"object"!=typeof t)return t;if(Array.isArray(t))return t.map(t=>f(t));const e=t,n={};for(const t of Object.keys(e))Object.prototype.hasOwnProperty.call(e,t)&&(n[l(t)]=f(e[t]));return n}function p(t){return t.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function h(t){if(null===t||"object"!=typeof t)return t;if(Array.isArray(t))return t.map(t=>h(t));const e=t,n={};for(const t of Object.keys(e))Object.prototype.hasOwnProperty.call(e,t)&&(n[p(t)]=h(e[t]));return n}class y 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 g={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 d=async t=>{if(204===t.status)return;const e=f(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 y(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},w=async({fetchFn:t,baseUrl:e},n,r={})=>{const s=new URLSearchParams(h(r)).toString(),o=s?`${e}${n}?${s}`:`${e}${n}`,i=await t(o,{method:"GET",headers:{Accept:"application/json"}});return d(i)},m=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(h(r))});return d(s)},k=async(t,e,n={})=>{const r=await t.config.fetchFn(e,{...n,headers:{...n.headers||{},Authorization:`Bearer ${t.tokens.accessToken}`}});return d(r)},S=t=>{const e=Math.min(Math.max(t.config.earlyRefreshMs,0),3e5);return Date.now()>=t.tokens.expiresAt-e},b=async t=>{if(!t.cleared){t.refreshPromise||(t.refreshPromise=async function(t){const{fetchFn:n,baseUrl:r}=t.config,s=await n(`${r}/auth/refresh`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(h({refreshToken:t.tokens.refreshToken}))}),i=j(await d(s));t.tokens=i;const a=e(t.config.storage);o(a,t.config.tokensStorageKey,i),await(t.config.onRefresh?.(i))}(t));try{await t.refreshPromise}finally{t.refreshPromise=null}}},T=t=>t instanceof y&&401===t.status,A=async(t,e,n={})=>{S(t)&&await b(t);try{return await k(t,e,n)}catch(r){if(!T(r))throw r;if(t.cleared)throw r;try{return await b(t),await k(t,e,n)}catch(e){if(t.config.onUnauthenticated&&!t.cleared&&T(e))try{await t.config.onUnauthenticated(e)}catch{}throw e}}},P=async(t,e,n={})=>{const r=new URLSearchParams(h(n)).toString(),s=t.config.baseUrl,o=r?`${s}${e}?${r}`:`${s}${e}`;return await A(t,o,{method:"GET",headers:{Accept:"application/json"}})},j=t=>{const e="number"==typeof t.expiresIn?t.expiresIn:0;return{...t,expiresAt:Date.now()+1e3*e}},x=t=>({...t,lastUpdatedAt:Date.now()});const I=t=>({tokens:j(t.tokens),profile:x(t.profile)});class U{constructor(n,r){const s={...g,...r},a={...n,config:s,refreshPromise:null,profilePromise:null,cleared:!1};!function(e,n){e[t]=n}(this,a);const c=e(s.storage);o(c,s.tokensStorageKey,a.tokens),a.profile&&i(c,s.profileStorageKey,a.profile)}static restoreSession(t={}){const r={...g,...t},o=e(r.storage);if(!o)return null;const i=n(o,r.tokensStorageKey),u=a(i)?i:null;if(!u)return null!==i&&s(o,r.tokensStorageKey),s(o,r.profileStorageKey),null;const l=n(o,r.profileStorageKey),f=c(l)?l:null;return null===l||f||s(o,r.profileStorageKey),new U({tokens:u,profile:f},r)}clear(){const t=u(this);!function(t){const n=e(t.storage);s(n,t.profileStorageKey),s(n,t.tokensStorageKey)}(t.config),t.cleared=!0}accessToken(){return u(this).tokens.accessToken}refreshToken(){return u(this).tokens.refreshToken}idToken(){return u(this).tokens.idToken}expiresIn(){return u(this).tokens.expiresIn}expiresAt(){return new Date(u(this).tokens.expiresAt)}profile(){return u(this).profile}toJSON(){const t=u(this);return{tokens:t.tokens,profile:t.profile}}static fromJSON(t,e){return new U(t,e)}isExpired(){return S(u(this))}async fetch(t,e={}){return A(u(this),t,e)}async refresh(){return b(u(this))}async refetchProfile(){const t=u(this);if(!t.cleared){t.profilePromise||(t.profilePromise=async function(t){const n=x(await P(t,"/auth/me",{}));t.profile=n,i(e(t.config.storage),t.config.profileStorageKey,n),await(t.config.onProfileRefetch?.(n))}(t));try{await t.profilePromise}finally{t.profilePromise=null}}}async sendVerificationEmail(){await(async(t,e,n)=>{const r=t.config.baseUrl;return await A(t,`${r}${e}`,{method:"POST",headers:{Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(h(n))})})(u(this),"/auth/send-verification-email",{})}async user(t){return P(u(this),`/auth/user/${t}`,{})}}class ${constructor(t){this.options={...g,...t}}static createAuthSession(t,e){return new $(e).createAuthSession(t)}createAuthSession(t){return new U(t,this.options)}static async acceptInvite(t,e){return new $(e).acceptInvite(t)}async acceptInvite(t){const e=I(await w(this.options,"/auth/accept-invite",t));return new U(e,this.options)}static async checkEmail(t,e){return new $(e).checkEmail(t)}async checkEmail(t){return m(this.options,"/auth/check-email",t)}static async csrfSession(t){return new $(t).csrfSession()}async csrfSession(){return w(this.options,"/auth/csrf-session")}static async csrfToken(t){return new $(t).csrfToken()}async csrfToken(){return w(this.options,"/auth/csrf-token")}static async signIn(t,e){return new $(e).signIn(t)}async signIn(t){const e=I(await m(this.options,"/auth/sign-in",t));return new U(e,this.options)}static async signInWithToken(t,e){return new $(e).signInWithToken(t)}async signInWithToken(t){const e=this.options,n=I(await w(e,"/auth/sign-in-with-token",{token:t}));return new U(n,e)}static async refresh(t,e){return new $(e).refresh(t)}async refresh(t){return j(await m(this.options,"/auth/refresh",{refreshToken:t}))}static async signUp(t,e){return new $(e).signUp(t)}async signUp(t){const e=I(await m(this.options,"/auth/sign-up",t));return new U(e,this.options)}static async resetPassword(t,e){return new $(e).resetPassword(t)}async resetPassword(t){return m(this.options,"/auth/reset-password",t)}static async sendMagicLink(t,e){return new $(e).sendMagicLink(t)}async sendMagicLink(t){return m(this.options,"/auth/send-magic-link",t)}static async sendPasswordReset(t,e){return new $(e).sendPasswordReset(t)}async sendPasswordReset(t){return m(this.options,"/auth/send-password-reset",t)}}exports.Am=$,exports.AuthError=y,exports.AuthSession=U;
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
@@ -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":"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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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"}