@uninspired/auth-client 1.0.0 → 1.0.1

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.
@@ -13,6 +13,8 @@ type AuthContextType = {
13
13
  refetchPurchases: () => Promise<void>;
14
14
  getLoginUrl: AuthClient["getLoginUrl"];
15
15
  getCheckoutUrl: AuthClient["getCheckoutUrl"];
16
+ isPurchased: (priceIds: string[]) => boolean;
17
+ isSubscribed: (priceIds: string[]) => boolean;
16
18
  } | null;
17
19
  declare const AuthContext: react.Context<AuthContextType>;
18
20
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"AuthContext.js","names":[],"sources":["../../src/react/AuthContext.ts"],"sourcesContent":["import { createContext } from \"react\";\nimport type { UserPurchases, Session } from \"@us-auth/types\";\nimport type { AuthClient } from \"../AuthClient\";\n\nexport type AuthContextType = {\n session: Session | null;\n isSessionFetching: boolean;\n refetchSession: () => Promise<void>;\n purchases: UserPurchases | null;\n isPurchasesFetching: boolean;\n refetchPurchases: () => Promise<void>;\n getLoginUrl: AuthClient[\"getLoginUrl\"];\n getCheckoutUrl: AuthClient[\"getCheckoutUrl\"];\n} | null;\n\nexport const AuthContext = createContext<AuthContextType>(null);\n"],"mappings":"sCAeA,MAAa,EAAc,EAA+B,KAAK"}
1
+ {"version":3,"file":"AuthContext.js","names":[],"sources":["../../src/react/AuthContext.ts"],"sourcesContent":["import { createContext } from \"react\";\nimport type { UserPurchases, Session } from \"@us-auth/types\";\nimport type { AuthClient } from \"../AuthClient\";\n\nexport type AuthContextType = {\n session: Session | null;\n isSessionFetching: boolean;\n refetchSession: () => Promise<void>;\n purchases: UserPurchases | null;\n isPurchasesFetching: boolean;\n refetchPurchases: () => Promise<void>;\n getLoginUrl: AuthClient[\"getLoginUrl\"];\n getCheckoutUrl: AuthClient[\"getCheckoutUrl\"];\n isPurchased: (priceIds: string[]) => boolean;\n isSubscribed: (priceIds: string[]) => boolean;\n} | null;\n\nexport const AuthContext = createContext<AuthContextType>(null);\n"],"mappings":"sCAiBA,MAAa,EAAc,EAA+B,KAAK"}
@@ -1,2 +1,2 @@
1
- import{AuthClient as e}from"../AuthClient.js";import{AuthContext as t}from"./AuthContext.js";import{useEffect as n,useMemo as r}from"react";import{QueryClient as i,useQuery as a}from"@tanstack/react-query";import{usePostHog as o}from"@posthog/react";import{jsx as s}from"react/jsx-runtime";const c=({children:c,baseUrl:l,frontendUrl:u,initialSession:d,initialPurchases:f,authClient:p,queryClient:m})=>{let h=o(),g=r(()=>p??new e(l,u),[l,p]),_=r(()=>m??new i,[m]),{data:v,isFetching:y,refetch:b}=a({queryKey:[`us-auth-session`],staleTime:10,initialData:d,queryFn:g.getSession},_);n(()=>{v?.user&&h&&h.get_distinct_id()!==v.user.id&&h.identify(v.user.id,{email:v.user.email})},[v,h]);let{data:x,isFetching:S,refetch:C}=a({queryKey:[`us-auth-purchases`],staleTime:10,initialData:f,queryFn:g.getPurchases},_),w=r(()=>g.getLoginUrl,[g]),T=r(()=>g.getCheckoutUrl,[g]);return s(t.Provider,{value:{session:v??null,isSessionFetching:y,refetchSession:async()=>{await b()},purchases:x??null,isPurchasesFetching:S,refetchPurchases:async()=>{await C()},getLoginUrl:w,getCheckoutUrl:T},children:c})};export{c as AuthProvider};
1
+ import{AuthClient as e}from"../AuthClient.js";import{AuthContext as t}from"./AuthContext.js";import{useCallback as n,useEffect as r,useMemo as i}from"react";import{QueryClient as a,useQuery as o}from"@tanstack/react-query";import{usePostHog as s}from"@posthog/react";import{jsx as c}from"react/jsx-runtime";const l=({children:l,baseUrl:u,frontendUrl:d,initialSession:f,initialPurchases:p,authClient:m,queryClient:h})=>{let g=s(),_=i(()=>m??new e(u,d),[u,m]),v=i(()=>h??new a,[h]),{data:y,isFetching:b,refetch:x}=o({queryKey:[`us-auth-session`],staleTime:10,initialData:f,queryFn:_.getSession},v);r(()=>{y?.user&&g&&g.get_distinct_id()!==y.user.id&&g.identify(y.user.id,{email:y.user.email})},[y,g]);let{data:S,isFetching:C,refetch:w}=o({queryKey:[`us-auth-purchases`],staleTime:10,initialData:p,queryFn:_.getPurchases},v),T=i(()=>_.getLoginUrl,[_]),E=i(()=>_.getCheckoutUrl,[_]),D=n(e=>S?S.paddle.transactions.some(t=>t.items.some(t=>e.includes(t))&&!t.adjustments.some(e=>e.status===`approved`&&e.action===`refund`&&e.type===`full`)):!1,[S]),O=n(e=>{if(!S)return!1;let t=S.paddle.subscriptions.some(t=>t.items.some(t=>e.includes(t))&&t.status===`active`),n=S.stripe.some(t=>t.status===`active`&&t.items.some(t=>e.includes(t)));return t||n},[S]);return c(t.Provider,{value:{session:y??null,isSessionFetching:b,refetchSession:async()=>{await x()},purchases:S??null,isPurchasesFetching:C,refetchPurchases:async()=>{await w()},getLoginUrl:T,getCheckoutUrl:E,isSubscribed:O,isPurchased:D},children:l})};export{l as AuthProvider};
2
2
  //# sourceMappingURL=AuthProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthProvider.js","names":[],"sources":["../../src/react/AuthProvider.tsx"],"sourcesContent":["import { useEffect, useMemo, type PropsWithChildren } from \"react\";\nimport { AuthContext } from \"./AuthContext\";\nimport { AuthClient } from \"../AuthClient\";\nimport type { Session, UserPurchases } from \"@us-auth/types\";\nimport { QueryClient, useQuery } from \"@tanstack/react-query\";\nimport { usePostHog } from \"@posthog/react\";\n\nexport interface AuthProviderProps extends PropsWithChildren {\n authClient?: AuthClient;\n queryClient?: QueryClient;\n baseUrl: string;\n frontendUrl: string;\n initialSession?: Session | null;\n initialPurchases?: UserPurchases | null;\n}\n\nexport const AuthProvider = ({\n children,\n baseUrl,\n frontendUrl,\n initialSession,\n initialPurchases,\n authClient: providedAuthClient,\n queryClient: providedQueryClient,\n}: AuthProviderProps) => {\n const ph = usePostHog();\n\n const authClient = useMemo(\n () => providedAuthClient ?? new AuthClient(baseUrl, frontendUrl),\n [baseUrl, providedAuthClient],\n );\n const queryClient = useMemo(\n () => providedQueryClient ?? new QueryClient(),\n [providedQueryClient],\n );\n\n const {\n data: session,\n isFetching: isSessionFetching,\n refetch: refetchSession,\n } = useQuery(\n {\n queryKey: [\"us-auth-session\"],\n staleTime: 10,\n initialData: initialSession,\n queryFn: authClient.getSession,\n },\n queryClient,\n );\n\n useEffect(() => {\n if (session?.user && ph) {\n const distinctId = ph.get_distinct_id();\n if (distinctId !== session.user.id) {\n ph.identify(session.user.id, {\n email: session.user.email,\n });\n }\n }\n }, [session, ph]);\n\n const {\n data: purchases,\n isFetching: isPurchasesFetching,\n refetch: refetchPurchases,\n } = useQuery(\n {\n queryKey: [\"us-auth-purchases\"],\n staleTime: 10,\n initialData: initialPurchases,\n queryFn: authClient.getPurchases,\n },\n queryClient,\n );\n\n const getLoginUrl = useMemo(() => authClient.getLoginUrl, [authClient]);\n const getCheckoutUrl = useMemo(() => authClient.getCheckoutUrl, [authClient]);\n\n return (\n <AuthContext.Provider\n value={{\n session: session ?? null,\n isSessionFetching,\n refetchSession: async () => {\n await refetchSession();\n },\n purchases: purchases ?? null,\n isPurchasesFetching,\n refetchPurchases: async () => {\n await refetchPurchases();\n },\n getLoginUrl,\n getCheckoutUrl,\n }}\n >\n {children}\n </AuthContext.Provider>\n );\n};\n"],"mappings":"kSAgBA,MAAa,GAAgB,CAC3B,WACA,UACA,cACA,iBACA,mBACA,WAAY,EACZ,YAAa,KACU,CACvB,IAAM,EAAK,GAAY,CAEjB,EAAa,MACX,GAAsB,IAAI,EAAW,EAAS,EAAY,CAChE,CAAC,EAAS,EAAmB,CAC9B,CACK,EAAc,MACZ,GAAuB,IAAI,EACjC,CAAC,EAAoB,CACtB,CAEK,CACJ,KAAM,EACN,WAAY,EACZ,QAAS,GACP,EACF,CACE,SAAU,CAAC,kBAAkB,CAC7B,UAAW,GACX,YAAa,EACb,QAAS,EAAW,WACrB,CACD,EACD,CAED,MAAgB,CACV,GAAS,MAAQ,GACA,EAAG,iBAAiB,GACpB,EAAQ,KAAK,IAC9B,EAAG,SAAS,EAAQ,KAAK,GAAI,CAC3B,MAAO,EAAQ,KAAK,MACrB,CAAC,EAGL,CAAC,EAAS,EAAG,CAAC,CAEjB,GAAM,CACJ,KAAM,EACN,WAAY,EACZ,QAAS,GACP,EACF,CACE,SAAU,CAAC,oBAAoB,CAC/B,UAAW,GACX,YAAa,EACb,QAAS,EAAW,aACrB,CACD,EACD,CAEK,EAAc,MAAc,EAAW,YAAa,CAAC,EAAW,CAAC,CACjE,EAAiB,MAAc,EAAW,eAAgB,CAAC,EAAW,CAAC,CAE7E,OACE,EAAC,EAAY,SAAb,CACE,MAAO,CACL,QAAS,GAAW,KACpB,oBACA,eAAgB,SAAY,CAC1B,MAAM,GAAgB,EAExB,UAAW,GAAa,KACxB,sBACA,iBAAkB,SAAY,CAC5B,MAAM,GAAkB,EAE1B,cACA,iBACD,CAEA,WACoB,CAAA"}
1
+ {"version":3,"file":"AuthProvider.js","names":[],"sources":["../../src/react/AuthProvider.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, type PropsWithChildren } from \"react\";\nimport { AuthContext } from \"./AuthContext\";\nimport { AuthClient } from \"../AuthClient\";\nimport type { Session, UserPurchases } from \"@us-auth/types\";\nimport { QueryClient, useQuery } from \"@tanstack/react-query\";\nimport { usePostHog } from \"@posthog/react\";\n\nexport interface AuthProviderProps extends PropsWithChildren {\n authClient?: AuthClient;\n queryClient?: QueryClient;\n baseUrl: string;\n frontendUrl: string;\n initialSession?: Session | null;\n initialPurchases?: UserPurchases | null;\n}\n\nexport const AuthProvider = ({\n children,\n baseUrl,\n frontendUrl,\n initialSession,\n initialPurchases,\n authClient: providedAuthClient,\n queryClient: providedQueryClient,\n}: AuthProviderProps) => {\n const ph = usePostHog();\n\n const authClient = useMemo(\n () => providedAuthClient ?? new AuthClient(baseUrl, frontendUrl),\n [baseUrl, providedAuthClient],\n );\n const queryClient = useMemo(\n () => providedQueryClient ?? new QueryClient(),\n [providedQueryClient],\n );\n\n const {\n data: session,\n isFetching: isSessionFetching,\n refetch: refetchSession,\n } = useQuery(\n {\n queryKey: [\"us-auth-session\"],\n staleTime: 10,\n initialData: initialSession,\n queryFn: authClient.getSession,\n },\n queryClient,\n );\n\n useEffect(() => {\n if (session?.user && ph) {\n const distinctId = ph.get_distinct_id();\n if (distinctId !== session.user.id) {\n ph.identify(session.user.id, {\n email: session.user.email,\n });\n }\n }\n }, [session, ph]);\n\n const {\n data: purchases,\n isFetching: isPurchasesFetching,\n refetch: refetchPurchases,\n } = useQuery(\n {\n queryKey: [\"us-auth-purchases\"],\n staleTime: 10,\n initialData: initialPurchases,\n queryFn: authClient.getPurchases,\n },\n queryClient,\n );\n\n const getLoginUrl = useMemo(() => authClient.getLoginUrl, [authClient]);\n const getCheckoutUrl = useMemo(() => authClient.getCheckoutUrl, [authClient]);\n\n const isPurchased = useCallback(\n (priceIds: string[]): boolean => {\n if (!purchases) return false;\n return purchases.paddle.transactions.some(\n (tra) =>\n tra.items.some((item) => priceIds.includes(item)) &&\n !tra.adjustments.some(\n (adj) =>\n adj.status === \"approved\" &&\n adj.action === \"refund\" &&\n adj.type === \"full\",\n ),\n );\n },\n [purchases],\n );\n\n const isSubscribed = useCallback(\n (priceIds: string[]): boolean => {\n if (!purchases) return false;\n\n const paddleSubscriptions = purchases.paddle.subscriptions.some(\n (sub) =>\n sub.items.some((item) => priceIds.includes(item)) &&\n sub.status === \"active\",\n );\n\n const stripeSubscriptions = purchases.stripe.some(\n (sub) =>\n sub.status === \"active\" &&\n sub.items.some((item) => priceIds.includes(item)),\n );\n\n return paddleSubscriptions || stripeSubscriptions;\n },\n [purchases],\n );\n\n return (\n <AuthContext.Provider\n value={{\n session: session ?? null,\n isSessionFetching,\n refetchSession: async () => {\n await refetchSession();\n },\n purchases: purchases ?? null,\n isPurchasesFetching,\n refetchPurchases: async () => {\n await refetchPurchases();\n },\n getLoginUrl,\n getCheckoutUrl,\n isSubscribed,\n isPurchased,\n }}\n >\n {children}\n </AuthContext.Provider>\n );\n};\n"],"mappings":"mTAgBA,MAAa,GAAgB,CAC3B,WACA,UACA,cACA,iBACA,mBACA,WAAY,EACZ,YAAa,KACU,CACvB,IAAM,EAAK,GAAY,CAEjB,EAAa,MACX,GAAsB,IAAI,EAAW,EAAS,EAAY,CAChE,CAAC,EAAS,EAAmB,CAC9B,CACK,EAAc,MACZ,GAAuB,IAAI,EACjC,CAAC,EAAoB,CACtB,CAEK,CACJ,KAAM,EACN,WAAY,EACZ,QAAS,GACP,EACF,CACE,SAAU,CAAC,kBAAkB,CAC7B,UAAW,GACX,YAAa,EACb,QAAS,EAAW,WACrB,CACD,EACD,CAED,MAAgB,CACV,GAAS,MAAQ,GACA,EAAG,iBAAiB,GACpB,EAAQ,KAAK,IAC9B,EAAG,SAAS,EAAQ,KAAK,GAAI,CAC3B,MAAO,EAAQ,KAAK,MACrB,CAAC,EAGL,CAAC,EAAS,EAAG,CAAC,CAEjB,GAAM,CACJ,KAAM,EACN,WAAY,EACZ,QAAS,GACP,EACF,CACE,SAAU,CAAC,oBAAoB,CAC/B,UAAW,GACX,YAAa,EACb,QAAS,EAAW,aACrB,CACD,EACD,CAEK,EAAc,MAAc,EAAW,YAAa,CAAC,EAAW,CAAC,CACjE,EAAiB,MAAc,EAAW,eAAgB,CAAC,EAAW,CAAC,CAEvE,EAAc,EACjB,GACM,EACE,EAAU,OAAO,aAAa,KAClC,GACC,EAAI,MAAM,KAAM,GAAS,EAAS,SAAS,EAAK,CAAC,EACjD,CAAC,EAAI,YAAY,KACd,GACC,EAAI,SAAW,YACf,EAAI,SAAW,UACf,EAAI,OAAS,OAChB,CACJ,CAVsB,GAYzB,CAAC,EAAU,CACZ,CAEK,EAAe,EAClB,GAAgC,CAC/B,GAAI,CAAC,EAAW,MAAO,GAEvB,IAAM,EAAsB,EAAU,OAAO,cAAc,KACxD,GACC,EAAI,MAAM,KAAM,GAAS,EAAS,SAAS,EAAK,CAAC,EACjD,EAAI,SAAW,SAClB,CAEK,EAAsB,EAAU,OAAO,KAC1C,GACC,EAAI,SAAW,UACf,EAAI,MAAM,KAAM,GAAS,EAAS,SAAS,EAAK,CAAC,CACpD,CAED,OAAO,GAAuB,GAEhC,CAAC,EAAU,CACZ,CAED,OACE,EAAC,EAAY,SAAb,CACE,MAAO,CACL,QAAS,GAAW,KACpB,oBACA,eAAgB,SAAY,CAC1B,MAAM,GAAgB,EAExB,UAAW,GAAa,KACxB,sBACA,iBAAkB,SAAY,CAC5B,MAAM,GAAkB,EAE1B,cACA,iBACA,eACA,cACD,CAEA,WACoB,CAAA"}
@@ -11,6 +11,8 @@ declare function useAuth(): {
11
11
  refetchPurchases: () => Promise<void>;
12
12
  getLoginUrl: AuthClient["getLoginUrl"];
13
13
  getCheckoutUrl: AuthClient["getCheckoutUrl"];
14
+ isPurchased: (priceIds: string[]) => boolean;
15
+ isSubscribed: (priceIds: string[]) => boolean;
14
16
  };
15
17
  //#endregion
16
18
  export { useAuth };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uninspired/auth-client",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Auth client for Uninspired Studio Products",
5
5
  "author": "Chris Kolb <chris@uninspired.studio>",
6
6
  "license": "MIT",