@lasterp/shared 1.0.0-beta.1 → 1.0.0-beta.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.
@@ -644,4 +644,12 @@ interface ProductContext {
644
644
  }
645
645
  import { camelize, decamelize, camelizeKeys, decamelizeKeys } from "humps";
646
646
  declare function equalsIgnoreCase(str1: string, str2: string): boolean;
647
- export { useVariantSelector, useSearch, useFrappeUpdateDoc, useFrappePutCall, useFrappePrefetchDoc, useFrappePostCall, useFrappeGetDocList, useFrappeGetDocCount, useFrappeGetDoc, useFrappeGetCall, useFrappeFileUpload, useFrappeEventListener, useFrappeDocumentEventListener, useFrappeDocTypeEventListener, useFrappeDeleteDoc, useFrappeDeleteCall, useFrappeCreateDoc, useFrappeAuth, equalsIgnoreCase, decamelizeKeys, decamelize, camelizeKeys, camelize, ViewerEventData, VariantSelectorResult, VariantSelectorProps, VariantSelectorOption, UseFrappeFileUploadReturnType, TopbarItem, Topbar, TokenParams, ShopContext, SearchResult, ProductVariant, ProductContext, Product, Page, NavbarSubItemGroup, NavbarSubItem, NavbarItem, Model, ItemVariant, Item, Hero, Header, Globals, FrappeProviderProps, FrappeProvider, FrappeMutationResult, FrappeFileUploadResponse, FrappeError, FrappeContext, FrappeConfig, FooterItemGroup, FooterItem, Footer, DocumentUpdateEventData, DocTypeListUpdateEventData, Colour, Category, Brand, Block };
647
+ import { JSX, ReactNode } from "react";
648
+ interface ServerProviderProps {
649
+ frappeUrl: string;
650
+ siteName?: string;
651
+ resource: string;
652
+ children: ReactNode;
653
+ }
654
+ declare function ServerProvider({ frappeUrl, siteName, resource, children }: ServerProviderProps): JSX.Element;
655
+ export { useVariantSelector, useSearch, useFrappeUpdateDoc, useFrappePutCall, useFrappePrefetchDoc, useFrappePostCall, useFrappeGetDocList, useFrappeGetDocCount, useFrappeGetDoc, useFrappeGetCall, useFrappeFileUpload, useFrappeEventListener, useFrappeDocumentEventListener, useFrappeDocTypeEventListener, useFrappeDeleteDoc, useFrappeDeleteCall, useFrappeCreateDoc, useFrappeAuth, equalsIgnoreCase, decamelizeKeys, decamelize, camelizeKeys, camelize, ViewerEventData, VariantSelectorResult, VariantSelectorProps, VariantSelectorOption, UseFrappeFileUploadReturnType, TopbarItem, Topbar, TokenParams, ShopContext, ServerProvider, SearchResult, ProductVariant, ProductContext, Product, Page, NavbarSubItemGroup, NavbarSubItem, NavbarItem, Model, ItemVariant, Item, Hero, Header, Globals, FrappeProviderProps, FrappeProvider, FrappeMutationResult, FrappeFileUploadResponse, FrappeError, FrappeContext, FrappeConfig, FooterItemGroup, FooterItem, Footer, DocumentUpdateEventData, DocTypeListUpdateEventData, Colour, Category, Brand, Block };
@@ -575,6 +575,54 @@ import { camelize, decamelize, camelizeKeys, decamelizeKeys } from "humps";
575
575
  function equalsIgnoreCase(str1, str2) {
576
576
  return str1.localeCompare(str2, undefined, { sensitivity: "accent" }) === 0;
577
577
  }
578
+ // src/context/server-provider.node.tsx
579
+ import {
580
+ useCallback as useCallback5,
581
+ useEffect as useEffect4,
582
+ useRef
583
+ } from "react";
584
+ import { useLogto } from "@logto/react";
585
+ import { jsx as jsx2 } from "react/jsx-runtime";
586
+ var TOKEN_STALE_MS = 50 * 60 * 1000;
587
+ function ServerProvider({
588
+ frappeUrl,
589
+ siteName,
590
+ resource,
591
+ children
592
+ }) {
593
+ const { getAccessToken, isAuthenticated } = useLogto();
594
+ const tokenRef = useRef("");
595
+ const fetchedAtRef = useRef(0);
596
+ const isRefreshingRef = useRef(false);
597
+ const refresh = useCallback5(async () => {
598
+ const token = await getAccessToken(resource);
599
+ if (token) {
600
+ tokenRef.current = token;
601
+ fetchedAtRef.current = Date.now();
602
+ }
603
+ }, [getAccessToken, resource]);
604
+ useEffect4(() => {
605
+ if (isAuthenticated)
606
+ refresh();
607
+ }, [isAuthenticated, refresh]);
608
+ const getToken = useCallback5(() => {
609
+ if (!isRefreshingRef.current && fetchedAtRef.current > 0 && Date.now() - fetchedAtRef.current > TOKEN_STALE_MS) {
610
+ isRefreshingRef.current = true;
611
+ refresh().finally(() => {
612
+ isRefreshingRef.current = false;
613
+ });
614
+ }
615
+ return tokenRef.current;
616
+ }, [refresh]);
617
+ return /* @__PURE__ */ jsx2(FrappeProvider, {
618
+ url: frappeUrl,
619
+ siteName,
620
+ customHeaders: siteName ? { "X-Frappe-Site-Name": siteName } : undefined,
621
+ enableSocket: false,
622
+ tokenParams: { useToken: true, token: getToken, type: "Bearer" },
623
+ children
624
+ });
625
+ }
578
626
  export {
579
627
  useVariantSelector,
580
628
  useSearch,
@@ -599,6 +647,7 @@ export {
599
647
  decamelize,
600
648
  camelizeKeys,
601
649
  camelize,
650
+ ServerProvider,
602
651
  FrappeProvider,
603
652
  FrappeContext
604
653
  };
@@ -644,4 +644,12 @@ interface ProductContext {
644
644
  }
645
645
  import { camelize, decamelize, camelizeKeys, decamelizeKeys } from "humps";
646
646
  declare function equalsIgnoreCase(str1: string, str2: string): boolean;
647
- export { useVariantSelector, useSearch, useFrappeUpdateDoc, useFrappePutCall, useFrappePrefetchDoc, useFrappePostCall, useFrappeGetDocList, useFrappeGetDocCount, useFrappeGetDoc, useFrappeGetCall, useFrappeFileUpload, useFrappeEventListener, useFrappeDocumentEventListener, useFrappeDocTypeEventListener, useFrappeDeleteDoc, useFrappeDeleteCall, useFrappeCreateDoc, useFrappeAuth, equalsIgnoreCase, decamelizeKeys, decamelize, camelizeKeys, camelize, ViewerEventData, VariantSelectorResult, VariantSelectorProps, VariantSelectorOption, UseFrappeFileUploadReturnType, TopbarItem, Topbar, TokenParams, ShopContext, SearchResult, ProductVariant, ProductContext, Product, Page, NavbarSubItemGroup, NavbarSubItem, NavbarItem, Model, ItemVariant, Item, Hero, Header, Globals, FrappeProviderProps, FrappeProvider, FrappeMutationResult, FrappeFileUploadResponse, FrappeError, FrappeContext, FrappeConfig, FooterItemGroup, FooterItem, Footer, DocumentUpdateEventData, DocTypeListUpdateEventData, Colour, Category, Brand, Block };
647
+ import { JSX, ReactNode } from "react";
648
+ interface ServerProviderProps {
649
+ frappeUrl: string;
650
+ siteName?: string;
651
+ resource: string;
652
+ children: ReactNode;
653
+ }
654
+ declare function ServerProvider({ frappeUrl, siteName, resource, children }: ServerProviderProps): JSX.Element;
655
+ export { useVariantSelector, useSearch, useFrappeUpdateDoc, useFrappePutCall, useFrappePrefetchDoc, useFrappePostCall, useFrappeGetDocList, useFrappeGetDocCount, useFrappeGetDoc, useFrappeGetCall, useFrappeFileUpload, useFrappeEventListener, useFrappeDocumentEventListener, useFrappeDocTypeEventListener, useFrappeDeleteDoc, useFrappeDeleteCall, useFrappeCreateDoc, useFrappeAuth, equalsIgnoreCase, decamelizeKeys, decamelize, camelizeKeys, camelize, ViewerEventData, VariantSelectorResult, VariantSelectorProps, VariantSelectorOption, UseFrappeFileUploadReturnType, TopbarItem, Topbar, TokenParams, ShopContext, ServerProvider, SearchResult, ProductVariant, ProductContext, Product, Page, NavbarSubItemGroup, NavbarSubItem, NavbarItem, Model, ItemVariant, Item, Hero, Header, Globals, FrappeProviderProps, FrappeProvider, FrappeMutationResult, FrappeFileUploadResponse, FrappeError, FrappeContext, FrappeConfig, FooterItemGroup, FooterItem, Footer, DocumentUpdateEventData, DocTypeListUpdateEventData, Colour, Category, Brand, Block };
@@ -575,6 +575,54 @@ import { camelize, decamelize, camelizeKeys, decamelizeKeys } from "humps";
575
575
  function equalsIgnoreCase(str1, str2) {
576
576
  return str1.localeCompare(str2, undefined, { sensitivity: "accent" }) === 0;
577
577
  }
578
+ // src/context/server-provider.rn.tsx
579
+ import {
580
+ useCallback as useCallback5,
581
+ useEffect as useEffect4,
582
+ useRef
583
+ } from "react";
584
+ import { useLogto } from "@logto/rn";
585
+ import { jsx as jsx2 } from "react/jsx-runtime";
586
+ var TOKEN_STALE_MS = 50 * 60 * 1000;
587
+ function ServerProvider({
588
+ frappeUrl,
589
+ siteName,
590
+ resource,
591
+ children
592
+ }) {
593
+ const { getAccessToken, isAuthenticated } = useLogto();
594
+ const tokenRef = useRef("");
595
+ const fetchedAtRef = useRef(0);
596
+ const isRefreshingRef = useRef(false);
597
+ const refresh = useCallback5(async () => {
598
+ const token = await getAccessToken(resource);
599
+ if (token) {
600
+ tokenRef.current = token;
601
+ fetchedAtRef.current = Date.now();
602
+ }
603
+ }, [getAccessToken, resource]);
604
+ useEffect4(() => {
605
+ if (isAuthenticated)
606
+ refresh();
607
+ }, [isAuthenticated, refresh]);
608
+ const getToken = useCallback5(() => {
609
+ if (!isRefreshingRef.current && fetchedAtRef.current > 0 && Date.now() - fetchedAtRef.current > TOKEN_STALE_MS) {
610
+ isRefreshingRef.current = true;
611
+ refresh().finally(() => {
612
+ isRefreshingRef.current = false;
613
+ });
614
+ }
615
+ return tokenRef.current;
616
+ }, [refresh]);
617
+ return /* @__PURE__ */ jsx2(FrappeProvider, {
618
+ url: frappeUrl,
619
+ siteName,
620
+ customHeaders: siteName ? { "X-Frappe-Site-Name": siteName } : undefined,
621
+ enableSocket: false,
622
+ tokenParams: { useToken: true, token: getToken, type: "Bearer" },
623
+ children
624
+ });
625
+ }
578
626
  export {
579
627
  useVariantSelector,
580
628
  useSearch,
@@ -599,6 +647,7 @@ export {
599
647
  decamelize,
600
648
  camelizeKeys,
601
649
  camelize,
650
+ ServerProvider,
602
651
  FrappeProvider,
603
652
  FrappeContext
604
653
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lasterp/shared",
3
- "version": "1.0.0-beta.1",
3
+ "version": "1.0.0-beta.2",
4
4
  "description": "Shared repo for webapp and native app",
5
5
  "license": "MIT",
6
6
  "files": [