@softwarepatterns/am 0.0.1 → 0.0.2

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/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- function t(t){return t.replace(/_([a-z])/g,(t,e)=>e.toUpperCase())}function e(n){if(null===n||"object"!=typeof n)return n;if(Array.isArray(n))return n.map(t=>e(t));const s=n,r={};for(const n of Object.keys(s))Object.prototype.hasOwnProperty.call(s,n)&&(r[t(n)]=e(s[n]));return r}function n(t){return t.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function s(t){if(null===t||"object"!=typeof t)return t;if(Array.isArray(t))return t.map(t=>s(t));const e=t,r={};for(const t of Object.keys(e))Object.prototype.hasOwnProperty.call(e,t)&&(r[n(t)]=s(e[t]));return r}class r 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 a={fetchFn:function(){const t=globalThis.fetch;return"function"==typeof t?t:async()=>{throw new Error("Missing fetch implementation. Provide config.fetchFn or use a runtime with global fetch.")}}(),baseUrl:"https://api.accountmaker.com"};const i=async t=>{if(204===t.status)return;const n=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),s=e(n);if(!t.ok){if(function(t){return(t.headers.get("Content-Type")||"").includes("application/problem+json")}(t)&&s&&"object"==typeof s)throw new r(s);throw new r(function(t,e){return{type:"about:blank",title:t.statusText||"Request failed",status:t.status,detail:e}}(t,"string"==typeof n?n:void 0))}return s},o=async({fetchFn:t,baseUrl:e},n,r={})=>{const a=new URLSearchParams(s(r)).toString(),o=a?`${e}${n}?${a}`:`${e}${n}`,c=await t(o,{method:"GET",headers:{Accept:"application/json"}});return i(c)},c=async({fetchFn:t,baseUrl:e},n,r)=>{const a=await t(`${e}${n}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s(r))});return i(a)},h=async({accessToken:t},{fetchFn:e,baseUrl:n},r,a={})=>{const o=new URLSearchParams(s(a)).toString(),c=o?`${n}${r}?${o}`:`${n}${r}`,h=await e(c,{method:"GET",headers:{Accept:"application/json",Authorization:`Bearer ${t}`}});return i(h)};class u{constructor(t,e){this.tokens=t,this.config={...a,...e},this.lastUpdated=new Date}get accessToken(){return this.tokens.accessToken}get refreshToken(){return this.tokens.refreshToken}get idToken(){return this.tokens.idToken}get tokenType(){return this.tokens.tokenType}get expiresIn(){return this.tokens.expiresIn}get lastUpdatedAt(){return this.lastUpdated}get expiresAt(){return new Date(this.lastUpdated.getTime()+1e3*this.expiresIn)}isExpired(){return Date.now()>=this.expiresAt.getTime()-6e4}async fetch(t,e={}){const{fetchFn:n}=this.config;return this.isExpired()&&await this.refresh(),await n(t,{...e,headers:{...e.headers||{},Authorization:`Bearer ${this.tokens.accessToken}`}})}async refresh(){const{fetchFn:t,baseUrl:e}=this.config,n=await t(`${e}/auth/refresh`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s({refreshToken:this.tokens.refreshToken}))}),r=await i(n);this.tokens=r,this.lastUpdated=new Date}async sendVerificationEmail(){await(async({accessToken:t},{fetchFn:e,baseUrl:n},r,a)=>{const o=await e(`${n}${r}`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},body:JSON.stringify(s(a))});return i(o)})(this,this.config,"/auth/send-verification-email",{})}async me(){return await h(this,this.config,"/auth/me",{})}async user(t){return await h(this,this.config,`/auth/user/${t}`,{})}}class p{constructor(t){this.options={...a,...t}}static createAuthSession(t,e){return new p(e).createAuthSession(t)}createAuthSession(t){return new u(t,this.options)}static async acceptInvite(t,e){return new p(e).acceptInvite(t)}async acceptInvite(t){return await o(this.options,"/auth/accept-invite",t)}static async checkEmail(t,e){return new p(e).checkEmail(t)}async checkEmail(t){return c(this.options,"/auth/check-email",t)}static async csrfSession(t){return new p(t).csrfSession()}async csrfSession(){return o(this.options,"/auth/csrf-session")}static async csrfToken(t){return new p(t).csrfToken()}async csrfToken(){return o(this.options,"/auth/csrf-token")}static async login(t,e){return new p(e).login(t)}async login(t){return await c(this.options,"/auth/login",t)}static async tokenLogin(t,e){return new p(e).tokenLogin(t)}async tokenLogin(t){const e=this.options;return await o(e,"/auth/token-login",{token:t})}static async refresh(t,e){return new p(e).refresh(t)}async refresh(t){return await c(this.options,"/auth/refresh",{refreshToken:t})}static async register(t,e){return new p(e).register(t)}async register(t){return await c(this.options,"/auth/register",t)}static async resetPassword(t,e){return new p(e).resetPassword(t)}async resetPassword(t){return c(this.options,"/auth/reset-password",t)}static async sendMagicLink(t,e){return new p(e).sendMagicLink(t)}async sendMagicLink(t){return c(this.options,"/auth/send-magic-link",t)}static async sendPasswordReset(t,e){return new p(e).sendPasswordReset(t)}async sendPasswordReset(t){return c(this.options,"/auth/send-password-reset",t)}}export{p as Am,r as AuthError,u as AuthSession};
1
+ 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)},b=t=>{const e=Math.min(Math.max(t.config.earlyRefreshMs,0),3e5);return Date.now()>=t.tokens.expiresAt-e},S=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,P=async(t,e,n={})=>{b(t)&&await S(t);try{return await k(t,e,n)}catch(r){if(!T(r))throw r;if(t.cleared)throw r;try{return await S(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}}},A=async(t,e,n={})=>{const r=new URLSearchParams(h(n)).toString(),s=t.config.baseUrl,o=r?`${s}${e}?${r}`:`${s}${e}`;return await P(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}},I=t=>({...t,lastUpdatedAt:Date.now()});const U=t=>({tokens:j(t.tokens),profile:I(t.profile)});class ${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 $({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 $(t,e)}isExpired(){return b(u(this))}async fetch(t,e={}){return P(u(this),t,e)}async refresh(){return S(u(this))}async refetchProfile(){const t=u(this);if(!t.cleared){t.profilePromise||(t.profilePromise=async function(t){const n=I(await A(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 P(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 A(u(this),`/auth/user/${t}`,{})}}class x{constructor(t){this.options={...g,...t}}static createAuthSession(t,e){return new x(e).createAuthSession(t)}createAuthSession(t){return new $(t,this.options)}static async acceptInvite(t,e){return new x(e).acceptInvite(t)}async acceptInvite(t){const e=U(await w(this.options,"/auth/accept-invite",t));return new $(e,this.options)}static async checkEmail(t,e){return new x(e).checkEmail(t)}async checkEmail(t){return m(this.options,"/auth/check-email",t)}static async csrfSession(t){return new x(t).csrfSession()}async csrfSession(){return w(this.options,"/auth/csrf-session")}static async csrfToken(t){return new x(t).csrfToken()}async csrfToken(){return w(this.options,"/auth/csrf-token")}static async signIn(t,e){return new x(e).signIn(t)}async signIn(t){const e=U(await m(this.options,"/auth/sign-in",t));return new $(e,this.options)}static async signInWithToken(t,e){return new x(e).signInWithToken(t)}async signInWithToken(t){const e=this.options,n=U(await w(e,"/auth/sign-in-with-token",{token:t}));return new $(n,e)}static async refresh(t,e){return new x(e).refresh(t)}async refresh(t){return j(await m(this.options,"/auth/refresh",{refreshToken:t}))}static async signUp(t,e){return new x(e).signUp(t)}async signUp(t){const e=U(await m(this.options,"/auth/sign-up",t));return new $(e,this.options)}static async resetPassword(t,e){return new x(e).resetPassword(t)}async resetPassword(t){return m(this.options,"/auth/reset-password",t)}static async sendMagicLink(t,e){return new x(e).sendMagicLink(t)}async sendMagicLink(t){return m(this.options,"/auth/send-magic-link",t)}static async sendPasswordReset(t,e){return new x(e).sendPasswordReset(t)}async sendPasswordReset(t){return m(this.options,"/auth/send-password-reset",t)}}export{x as Am,y as AuthError,$ as AuthSession};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","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.mjs","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,5 +1,61 @@
1
- import type { AuthenticationResult, ClientId, EmailCheckStatus, LoginMethod, ProblemDetails, SessionProfile, SessionTokens, UserId, UserResource } from "./types";
1
+ import type { Authentication, ClientId, EmailCheckStatus, LoginMethod, ProblemDetails, SessionProfile, SessionTokens, UserId, UserResource, StorageLike } from "./types";
2
+ type StorageConfig = StorageLike | "localStorage" | null | undefined;
2
3
  type FetchFn = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
4
+ type Config = {
5
+ baseUrl: string;
6
+ earlyRefreshMs: number;
7
+ fetchFn: FetchFn;
8
+ onRefresh?: (tokens: SessionTokens) => void | Promise<void>;
9
+ onProfileRefetch?: (profile: SessionProfile) => void | Promise<void>;
10
+ onUnauthenticated?: (e: AuthError) => void | Promise<void>;
11
+ profileStorageKey: string;
12
+ storage: StorageConfig;
13
+ tokensStorageKey: string;
14
+ };
15
+ /**
16
+ * Error type for authentication-related failures.
17
+ *
18
+ * Always thrown on non-2xx responses from auth endpoints. Contains structured ProblemDetails
19
+ * from the server when available.
20
+ *
21
+ * Most 400 errors will also contain `invalidParams` for parameters that caused
22
+ * the error, which can be used to display field-level validation messages.
23
+ *
24
+ * Note that network errors, timeouts, etc. will throw other Error types (e.g. TypeError) unrelated
25
+ * to AuthError.
26
+ *
27
+ * Note that HTTP error codes are distinctly:
28
+ * - 400: Client error (bad request, invalid input, etc.)
29
+ * - 401: Unauthenticated (we don't know who you are)
30
+ * - 402: Payment required (e.g. billing issue)
31
+ * - 403: Unauthorized (we know who you are, but you don't have permission)
32
+ * - 404: Not found
33
+ * - 409: Conflict (email already registered, user already invited, etc.)
34
+ * - 429: Too many requests (rate limiting)
35
+ * - 500: Internal server error (server's fault)
36
+ *
37
+ * Also note that the `type` field often contains a URI that points to documentation about the
38
+ * specific error type, including how to resolve it, code samples, and links to the RFCs or other
39
+ * standards that define the error.
40
+ *
41
+ * @example
42
+ * ```ts
43
+ * try {
44
+ * const session = await am.signIn({ email: 'test@example.com', password: 'password123' });
45
+ * } catch (e) {
46
+ * if (e instanceof AuthError) {
47
+ * console.error("Authentication failed:", e.title);
48
+ * if (e.invalidParams) {
49
+ * for (const param of e.invalidParams) {
50
+ * console.error(` - Invalid parameter: ${param.path} (${param.type})`);
51
+ * }
52
+ * }
53
+ * } else {
54
+ * console.error("Unexpected error:", e);
55
+ * }
56
+ * }
57
+ * ```
58
+ */
3
59
  export declare class AuthError extends Error {
4
60
  readonly problem: ProblemDetails;
5
61
  constructor(problem: ProblemDetails);
@@ -10,48 +66,177 @@ export declare class AuthError extends Error {
10
66
  get detail(): string | undefined;
11
67
  get invalidParams(): ProblemDetails["invalidParams"] | undefined;
12
68
  }
13
- type Config = {
14
- fetchFn: FetchFn;
15
- baseUrl: string;
16
- };
69
+ /**
70
+ * You receive an AuthSession after successful sign-in/register/etc.
71
+ *
72
+ * It contains the current access token, user profile, and methods to perform authorized
73
+ * requests.
74
+ *
75
+ * Features:
76
+ * - session.fetch() will always use a valid access token (refreshing automatically)
77
+ * - All non-2xx responses throw AuthError
78
+ * - Tokens and profile are automatically persisted to storage (if configured)
79
+ */
17
80
  export declare class AuthSession {
18
- private tokens;
19
- private config;
20
- private lastUpdated;
21
- constructor(tokens: SessionTokens, config: Partial<Config>);
22
- get accessToken(): string;
23
- get refreshToken(): string;
24
- get idToken(): string | undefined;
25
- get tokenType(): "Bearer";
26
- get expiresIn(): number;
27
- get lastUpdatedAt(): Date;
28
- get expiresAt(): Date;
81
+ constructor(initial: Authentication, config: Partial<Config>);
82
+ /**
83
+ * Restores an AuthSession from persisted storage. Returns null if no valid session
84
+ * is found.
85
+ *
86
+ * @example
87
+ * ```ts
88
+ * const session = AuthSession.restoreSession();
89
+ * if (session) {
90
+ * console.log("Restored session for user:", session.profile);
91
+ * } else {
92
+ * console.log("No valid session found.");
93
+ * }
94
+ * ```
95
+ */
96
+ static restoreSession(config?: Partial<Config>): AuthSession | null;
97
+ /**
98
+ * Removes all persisted data (tokens, profile) from storage, and prevents future
99
+ * refreshs of token and profile data. Does NOT clear current token or profile data from the
100
+ * session memory, but effectively deactivates the session for future use.
101
+ */
102
+ clear(): void;
103
+ accessToken(): string;
104
+ refreshToken(): string;
105
+ idToken(): string | undefined;
106
+ expiresIn(): number;
107
+ expiresAt(): Date;
108
+ profile(): SessionProfile | null;
109
+ toJSON(): Authentication;
110
+ /**
111
+ * Creates an AuthSession from existing authentication data. Useful for restoring
112
+ * a session from custom storage or creating a session from custom server-provided data.
113
+ */
114
+ static fromJSON(initial: Authentication, config: Partial<Config>): AuthSession;
115
+ /**
116
+ * Returns true if the access token is expired or will expire soon. The
117
+ * "soon" threshold is configured via Config.earlyRefreshMs (default 1 minute).
118
+ */
29
119
  isExpired(): boolean;
30
120
  /**
31
- * Fetch with automatic token refresh.
121
+ * Perform an authenticated fetch. Used to call your own APIs with the current
122
+ * session's access token. Any service can validate the token against Am's public
123
+ * keys at https://api.accountmaker.com/.well-known/jwks.json?client_id={clientId}
124
+ *
125
+ * Automatically:
126
+ * - Adds Authorization header
127
+ * - Refreshes token if expired
128
+ * - Retries once on 401 if refresh succeeds
129
+ *
130
+ * Assumes the response is JSON and parses it. Throws AuthError on non-2xx responses.
131
+ *
132
+ * If the error is a RFC 7807 Problem Details response, the AuthError.problem
133
+ * will contain the full details.
134
+ *
135
+ * @example
136
+ * ```ts
137
+ * const res = await session.fetch('/api/projects');
138
+ * const projects = await res.json();
139
+ * ```
32
140
  *
33
- * If the access token is expired, it will be refreshed before making the request. The
34
- * Authorization header will be set with the current access token.
141
+ * Throws AuthError on network errors, etc.
142
+ * @throws AuthError
143
+ */
144
+ fetch(url: string | URL, init?: RequestInit): Promise<any>;
145
+ /**
146
+ * Refreshes the access token using the refresh token. Updates the stored tokens on
147
+ * success. This is called automatically by fetch() if the token is expired or close to
148
+ * expiring.
35
149
  */
36
- fetch(url: string | URL | Request, init?: RequestInit): Promise<Response>;
37
150
  refresh(): Promise<void>;
151
+ /**
152
+ * Refetches the user's profile from the server and updates the stored profile.
153
+ *
154
+ * @example
155
+ * ```ts
156
+ * await session.refetchProfile();
157
+ * console.log("Updated profile:", session.profile);
158
+ * ```
159
+ *
160
+ * Throws AuthError on network errors, etc.
161
+ * @throws AuthError
162
+ */
163
+ refetchProfile(): Promise<void>;
164
+ /**
165
+ * Sends a verification email to the user's primary email address. This only succeeds if
166
+ * called by the currently authenticated user or an account admin.
167
+ *
168
+ * Throws AuthError on network errors, etc.
169
+ * @throws AuthError
170
+ */
38
171
  sendVerificationEmail(): Promise<void>;
39
- me(): Promise<SessionProfile>;
172
+ /**
173
+ * Fetches a user by ID.
174
+ *
175
+ * Throws AuthError on invalid user ID, network errors, etc.
176
+ * @throws AuthError
177
+ */
40
178
  user(id: UserId): Promise<UserResource>;
41
179
  }
180
+ /**
181
+ * Use `Am` to perform initial sign-in, registration, password reset flows, magic links,
182
+ * invite acceptance, and other unauthenticated actions.
183
+ *
184
+ * Once authentication succeeds, these methods return an `AuthSession` that you use
185
+ * for all subsequent authenticated requests.
186
+ *
187
+ * Example:
188
+ * ```ts
189
+ * const am = new Am();
190
+ * const session = await am.signIn({ email: 'user@example.com', password: 'secret' });
191
+ * // Now use `session` for protected API calls
192
+ * ```
193
+ */
42
194
  export declare class Am {
43
195
  private options;
44
196
  constructor(config?: Partial<Config>);
45
- static createAuthSession(tokens: SessionTokens, config?: Partial<Config>): AuthSession;
46
- createAuthSession(tokens: SessionTokens): AuthSession;
197
+ /**
198
+ * Creates an AuthSession from existing authentication data. Useful for restoring
199
+ * a session from custom storage or creating a session from custom server-provided data.
200
+ */
201
+ static createAuthSession(initial: Authentication, config?: Partial<Config>): AuthSession;
202
+ /**
203
+ * Creates an AuthSession from existing authentication data. Useful for restoring
204
+ * a session from custom storage or creating a session from custom server-provided data.
205
+ */
206
+ createAuthSession(initial: Authentication): AuthSession;
207
+ /**
208
+ * Accepts an invitation to join an account. On success, returns an AuthSession
209
+ * containing fresh tokens and profile. Tokens are automatically persisted (if
210
+ * storage is enabled).
211
+ *
212
+ * Throws AuthError on invalid or expired token, etc.
213
+ * @throws AuthError
214
+ */
47
215
  static acceptInvite(query: {
48
216
  clientId: ClientId;
49
217
  token: string;
50
- }, config?: Partial<Config>): Promise<AuthenticationResult>;
218
+ }, config?: Partial<Config>): Promise<AuthSession>;
219
+ /**
220
+ * Accepts an invitation to join an account. On success, returns an AuthSession
221
+ * containing fresh tokens and profile. Tokens are automatically persisted (if
222
+ * storage is enabled).
223
+ *
224
+ * Throws AuthError on invalid or expired token, etc.
225
+ * @throws AuthError
226
+ */
51
227
  acceptInvite(query: {
52
228
  clientId: ClientId;
53
229
  token: string;
54
- }): Promise<AuthenticationResult>;
230
+ }): Promise<AuthSession>;
231
+ /**
232
+ * Checks the status of an email address for authentication purposes. Indicates whether the
233
+ * email is associated with an active account, and what login methods are preferred and
234
+ * available for that user. This can be used to enforce login expierences for enterprise SSO or
235
+ * to prefer passwordless login methods.
236
+ *
237
+ * Throws AuthError on invalid client ID, network errors, etc.
238
+ * @throws AuthError
239
+ */
55
240
  static checkEmail(body: {
56
241
  clientId: ClientId;
57
242
  email: string;
@@ -61,6 +246,15 @@ export declare class Am {
61
246
  preferred: LoginMethod[];
62
247
  available: LoginMethod[];
63
248
  }>;
249
+ /**
250
+ * Checks the status of an email address for authentication purposes. Indicates whether the
251
+ * email is associated with an active account, and what login methods are preferred and
252
+ * available for that user. This can be used to enforce login expierences for enterprise SSO or
253
+ * to prefer passwordless login methods.
254
+ *
255
+ * Throws AuthError on invalid client ID, network errors, etc.
256
+ * @throws AuthError
257
+ */
64
258
  checkEmail(body: {
65
259
  clientId: ClientId;
66
260
  email: string;
@@ -70,63 +264,203 @@ export declare class Am {
70
264
  preferred: LoginMethod[];
71
265
  available: LoginMethod[];
72
266
  }>;
267
+ /**
268
+ * When called, sets a httpOnly CSRF session cookie. Then when rendering a form, call csrfToken()
269
+ * to get the signed token to include in the form. When the form is submitted, the server
270
+ * will verify the signed token against the session cookie. This prevents a certain class
271
+ * of CSRF attacks that rely on being able to read values from the target site.
272
+ */
73
273
  static csrfSession(config?: Partial<Config>): Promise<{
74
274
  csrfToken: string;
75
275
  }>;
276
+ /**
277
+ * When called, sets a httpOnly CSRF session cookie. Then when rendering a form, call csrfToken()
278
+ * to get the signed token to include in the form. When the form is submitted, the server
279
+ * will verify the signed token against the session cookie. This prevents a certain class
280
+ * of CSRF attacks that rely on being able to read values from the target site.
281
+ */
76
282
  csrfSession(): Promise<{
77
283
  csrfToken: string;
78
284
  }>;
285
+ /**
286
+ * Fetches a signed CSRF token for use in forms. Call csrfSession() first to set a httpOnly CSRF
287
+ * session cookie, then call this method to get the signed token, then include the token in your
288
+ * form submissions. When the form is submitted, the server will verify the signed token against
289
+ * the httpOnly session cookie. This prevents a certain class of CSRF attacks that rely on being
290
+ * able to read values from the target site.
291
+ *
292
+ * @throws AuthError
293
+ */
79
294
  static csrfToken(config?: Partial<Config>): Promise<{
80
295
  csrfToken: string;
81
296
  }>;
297
+ /**
298
+ * Fetches a signed CSRF token for use in forms. Call csrfSession() first to set a httpOnly CSRF
299
+ * session cookie, then call this method to get the signed token, then include the token in your
300
+ * form submissions. When the form is submitted, the server will verify the signed token against
301
+ * the httpOnly session cookie. This prevents a certain class of CSRF attacks that rely on being
302
+ * able to read values from the target site.
303
+ *
304
+ * @throws AuthError
305
+ */
82
306
  csrfToken(): Promise<{
83
307
  csrfToken: string;
84
308
  }>;
85
- static login(body: {
309
+ /**
310
+ * On success, returns an AuthSession containing fresh tokens and profile.
311
+ * Tokens are automatically persisted (if storage is enabled).
312
+ *
313
+ * Throws AuthError on invalid credentials, unverified email, etc.
314
+ * @throws AuthError
315
+ */
316
+ static signIn(body: {
317
+ clientId: ClientId;
86
318
  email: string;
87
319
  password: string;
88
320
  csrfToken?: string;
89
- }, config?: Partial<Config>): Promise<AuthenticationResult>;
90
- login(body: {
321
+ }, config?: Partial<Config>): Promise<AuthSession>;
322
+ /**
323
+ * On success, returns an AuthSession containing fresh tokens and profile.
324
+ * Tokens are automatically persisted (if storage is enabled).
325
+ *
326
+ * Throws AuthError on invalid credentials, unverified email, etc.
327
+ * @throws AuthError
328
+ */
329
+ signIn(body: {
330
+ clientId: ClientId;
91
331
  email: string;
92
332
  password: string;
93
333
  csrfToken?: string;
94
- }): Promise<AuthenticationResult>;
95
- static tokenLogin(token: string, config?: Partial<Config>): Promise<AuthenticationResult>;
96
- tokenLogin(token: string): Promise<AuthenticationResult>;
334
+ }): Promise<AuthSession>;
335
+ /**
336
+ * Authenticates using a one-time token (e.g., magic link or invite token).
337
+ *
338
+ * On success, returns an AuthSession containing fresh tokens and profile.
339
+ * Tokens are automatically persisted (if storage is enabled).
340
+ *
341
+ * Throws AuthError on invalid or expired token, etc.
342
+ * @throws AuthError
343
+ */
344
+ static signInWithToken(token: string, config?: Partial<Config>): Promise<AuthSession>;
345
+ /**
346
+ * Authenticates using a one-time token (e.g., magic link or invite token).
347
+ *
348
+ * On success, returns an AuthSession containing fresh tokens and profile.
349
+ * Tokens are automatically persisted (if storage is enabled).
350
+ *
351
+ * Throws AuthError on invalid or expired token, etc.
352
+ * @throws AuthError
353
+ */
354
+ signInWithToken(token: string): Promise<AuthSession>;
355
+ /**
356
+ * Manually refreshes session tokens using the provided refresh token. Does NOT
357
+ * persist tokens. Use AuthSession.refresh() to refresh and persist tokens in an
358
+ * existing session.
359
+ *
360
+ * Throws AuthError on invalid or expired refresh token, etc.
361
+ * @throws AuthError
362
+ */
97
363
  static refresh(refreshToken: string, config?: Partial<Config>): Promise<SessionTokens>;
364
+ /**
365
+ * Manually refreshes session tokens using the provided refresh token. Does NOT
366
+ * persist tokens. Use AuthSession.refresh() to refresh and persist tokens in an
367
+ * existing session.
368
+ *
369
+ * Throws AuthError on invalid or expired refresh token, etc.
370
+ * @throws AuthError
371
+ */
98
372
  refresh(refreshToken: string): Promise<SessionTokens>;
99
- static register(body: {
373
+ /**
374
+ * Successful registration immediately authenticates the user and returns an
375
+ * AuthSession. Tokens are automatically persisted (if storage is enabled).
376
+ *
377
+ * Throws AuthError on invalid data, existing email, etc.
378
+ * @throws AuthError
379
+ */
380
+ static signUp(body: {
381
+ clientId: ClientId;
100
382
  email: string;
101
383
  password: string;
102
384
  csrfToken?: string;
103
- }, config?: Partial<Config>): Promise<AuthenticationResult>;
104
- register(body: {
385
+ }, config?: Partial<Config>): Promise<AuthSession>;
386
+ /**
387
+ * Successful registration immediately authenticates the user and returns an
388
+ * AuthSession. Tokens are automatically persisted (if storage is enabled).
389
+ *
390
+ * Throws AuthError on invalid data, existing email, etc.
391
+ * @throws AuthError
392
+ */
393
+ signUp(body: {
394
+ clientId: ClientId;
105
395
  email: string;
106
396
  password: string;
107
397
  csrfToken?: string;
108
- }): Promise<AuthenticationResult>;
398
+ }): Promise<AuthSession>;
399
+ /**
400
+ * Completes a password reset using the token received via email. On success,
401
+ * the user's password is updated.
402
+ *
403
+ * Throws AuthError on invalid or expired token, weak password, etc.
404
+ * @throws AuthError
405
+ */
109
406
  static resetPassword(body: {
110
407
  token: string;
111
408
  newPassword: string;
112
409
  }, config?: Partial<Config>): Promise<void>;
410
+ /**
411
+ * Completes a password reset using the token received via email. On success,
412
+ * the user's password is updated.
413
+ *
414
+ * Throws AuthError on invalid or expired token, weak password, etc.
415
+ * @throws AuthError
416
+ */
113
417
  resetPassword(body: {
114
418
  token: string;
115
419
  newPassword: string;
116
420
  }): Promise<void>;
421
+ /**
422
+ * Sends a magic link email to the specified address. A magic link allows
423
+ * passwordless authentication.
424
+ *
425
+ * Throws AuthError on invalid email format, etc.
426
+ * @throws AuthError
427
+ */
117
428
  static sendMagicLink(body: {
429
+ clientId: ClientId;
118
430
  email: string;
119
431
  csrfToken?: string;
120
432
  }, config?: Partial<Config>): Promise<void>;
433
+ /**
434
+ * Sends a magic link email to the specified address. A magic link allows
435
+ * passwordless authentication.
436
+ *
437
+ * Throws AuthError on invalid email format, etc.
438
+ * @throws AuthError
439
+ */
121
440
  sendMagicLink(body: {
441
+ clientId: ClientId;
122
442
  email: string;
123
443
  csrfToken?: string;
124
444
  }): Promise<void>;
445
+ /**
446
+ * Sends a password reset email to the specified address.
447
+ *
448
+ * Throws AuthError on invalid email format, etc.
449
+ * @throws AuthError
450
+ */
125
451
  static sendPasswordReset(body: {
452
+ clientId: ClientId;
126
453
  email: string;
127
454
  csrfToken?: string;
128
455
  }, config?: Partial<Config>): Promise<void>;
456
+ /**
457
+ * Sends a password reset email to the specified address.
458
+ *
459
+ * Throws AuthError on invalid email format, etc.
460
+ * @throws AuthError
461
+ */
129
462
  sendPasswordReset(body: {
463
+ clientId: ClientId;
130
464
  email: string;
131
465
  csrfToken?: string;
132
466
  }): Promise<void>;
@@ -1,2 +1,2 @@
1
- export { Am, AuthSession, AuthError } from "./auth";
2
- export type { AuthenticationResult, ClientId, EmailCheckStatus, LoginMethod, ProblemDetails, SessionProfile, SessionTokens, UserId, UserResource, } from "./types";
1
+ export * from "./auth";
2
+ export * from "./types";