@sundaeswap/wallet-lite 0.1.1 → 0.1.3

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.
Files changed (102) hide show
  1. package/dist/cjs/classes/ReadOnlyProvider.Blockfrost.class.js +22 -12
  2. package/dist/cjs/classes/ReadOnlyProvider.Blockfrost.class.js.map +1 -1
  3. package/dist/cjs/classes/WalletObserver.class.js +105 -17
  4. package/dist/cjs/classes/WalletObserver.class.js.map +1 -1
  5. package/dist/cjs/react-components/RenderWallet.js +2 -1
  6. package/dist/cjs/react-components/RenderWallet.js.map +1 -1
  7. package/dist/cjs/react-components/RenderWalletHandles.js +2 -1
  8. package/dist/cjs/react-components/RenderWalletHandles.js.map +1 -1
  9. package/dist/cjs/react-components/RenderWalletPeerConnect.js +2 -1
  10. package/dist/cjs/react-components/RenderWalletPeerConnect.js.map +1 -1
  11. package/dist/cjs/react-components/RenderWalletState.js +2 -1
  12. package/dist/cjs/react-components/RenderWalletState.js.map +1 -1
  13. package/dist/cjs/react-components/WalletObserverProvider/WalletObserverProvider.js +60 -3
  14. package/dist/cjs/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
  15. package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js +3 -1
  16. package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js.map +1 -1
  17. package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useSyncWalletWithInterval.js +24 -4
  18. package/dist/cjs/react-components/WalletObserverProvider/hooks/effects/useSyncWalletWithInterval.js.map +1 -1
  19. package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +38 -36
  20. package/dist/cjs/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
  21. package/dist/cjs/react-components/contexts/observer/context.js +40 -1
  22. package/dist/cjs/react-components/contexts/observer/context.js.map +1 -1
  23. package/dist/cjs/react-components/contexts/observer/types.js.map +1 -1
  24. package/dist/cjs/react-components/hooks/useWalletData.js +6 -5
  25. package/dist/cjs/react-components/hooks/useWalletData.js.map +1 -1
  26. package/dist/cjs/react-components/hooks/useWalletHandles.js +11 -7
  27. package/dist/cjs/react-components/hooks/useWalletHandles.js.map +1 -1
  28. package/dist/cjs/react-components/hooks/useWalletLoadingState.js +6 -7
  29. package/dist/cjs/react-components/hooks/useWalletLoadingState.js.map +1 -1
  30. package/dist/cjs/react-components/hooks/useWalletPeerConnect.js +18 -12
  31. package/dist/cjs/react-components/hooks/useWalletPeerConnect.js.map +1 -1
  32. package/dist/esm/classes/ReadOnlyProvider.Blockfrost.class.js +11 -6
  33. package/dist/esm/classes/ReadOnlyProvider.Blockfrost.class.js.map +1 -1
  34. package/dist/esm/classes/WalletObserver.class.js +79 -1
  35. package/dist/esm/classes/WalletObserver.class.js.map +1 -1
  36. package/dist/esm/react-components/RenderWallet.js +3 -2
  37. package/dist/esm/react-components/RenderWallet.js.map +1 -1
  38. package/dist/esm/react-components/RenderWalletHandles.js +3 -2
  39. package/dist/esm/react-components/RenderWalletHandles.js.map +1 -1
  40. package/dist/esm/react-components/RenderWalletPeerConnect.js +3 -2
  41. package/dist/esm/react-components/RenderWalletPeerConnect.js.map +1 -1
  42. package/dist/esm/react-components/RenderWalletState.js +3 -2
  43. package/dist/esm/react-components/RenderWalletState.js.map +1 -1
  44. package/dist/esm/react-components/WalletObserverProvider/WalletObserverProvider.js +55 -4
  45. package/dist/esm/react-components/WalletObserverProvider/WalletObserverProvider.js.map +1 -1
  46. package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js +1 -1
  47. package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useDerivedState.js.map +1 -1
  48. package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useSyncWalletWithInterval.js +2 -2
  49. package/dist/esm/react-components/WalletObserverProvider/hooks/effects/useSyncWalletWithInterval.js.map +1 -1
  50. package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js +4 -4
  51. package/dist/esm/react-components/WalletObserverProvider/hooks/useWalletObserverState.js.map +1 -1
  52. package/dist/esm/react-components/contexts/observer/context.js +36 -0
  53. package/dist/esm/react-components/contexts/observer/context.js.map +1 -1
  54. package/dist/esm/react-components/contexts/observer/types.js.map +1 -1
  55. package/dist/esm/react-components/hooks/useWalletData.js +7 -5
  56. package/dist/esm/react-components/hooks/useWalletData.js.map +1 -1
  57. package/dist/esm/react-components/hooks/useWalletHandles.js +11 -5
  58. package/dist/esm/react-components/hooks/useWalletHandles.js.map +1 -1
  59. package/dist/esm/react-components/hooks/useWalletLoadingState.js +7 -9
  60. package/dist/esm/react-components/hooks/useWalletLoadingState.js.map +1 -1
  61. package/dist/esm/react-components/hooks/useWalletPeerConnect.js +14 -11
  62. package/dist/esm/react-components/hooks/useWalletPeerConnect.js.map +1 -1
  63. package/dist/types/classes/ReadOnlyProvider.Blockfrost.class.d.ts.map +1 -1
  64. package/dist/types/classes/WalletObserver.class.d.ts +11 -0
  65. package/dist/types/classes/WalletObserver.class.d.ts.map +1 -1
  66. package/dist/types/react-components/RenderWallet.d.ts +0 -6
  67. package/dist/types/react-components/RenderWallet.d.ts.map +1 -1
  68. package/dist/types/react-components/RenderWalletHandles.d.ts +0 -5
  69. package/dist/types/react-components/RenderWalletHandles.d.ts.map +1 -1
  70. package/dist/types/react-components/RenderWalletPeerConnect.d.ts +0 -5
  71. package/dist/types/react-components/RenderWalletPeerConnect.d.ts.map +1 -1
  72. package/dist/types/react-components/RenderWalletState.d.ts +1 -7
  73. package/dist/types/react-components/RenderWalletState.d.ts.map +1 -1
  74. package/dist/types/react-components/WalletObserverProvider/WalletObserverProvider.d.ts.map +1 -1
  75. package/dist/types/react-components/WalletObserverProvider/hooks/effects/useDerivedState.d.ts.map +1 -1
  76. package/dist/types/react-components/WalletObserverProvider/hooks/useWalletObserverState.d.ts.map +1 -1
  77. package/dist/types/react-components/contexts/observer/context.d.ts +16 -1
  78. package/dist/types/react-components/contexts/observer/context.d.ts.map +1 -1
  79. package/dist/types/react-components/contexts/observer/types.d.ts +48 -1
  80. package/dist/types/react-components/contexts/observer/types.d.ts.map +1 -1
  81. package/dist/types/react-components/hooks/useWalletHandles.d.ts.map +1 -1
  82. package/dist/types/react-components/hooks/useWalletLoadingState.d.ts +1 -2
  83. package/dist/types/react-components/hooks/useWalletLoadingState.d.ts.map +1 -1
  84. package/dist/types/react-components/hooks/useWalletPeerConnect.d.ts.map +1 -1
  85. package/dist/types/tsconfig.build.tsbuildinfo +1 -1
  86. package/package.json +3 -3
  87. package/src/classes/ReadOnlyProvider.Blockfrost.class.ts +22 -8
  88. package/src/classes/WalletObserver.class.ts +97 -1
  89. package/src/react-components/RenderWallet.tsx +4 -2
  90. package/src/react-components/RenderWalletHandles.tsx +6 -2
  91. package/src/react-components/RenderWalletPeerConnect.tsx +6 -2
  92. package/src/react-components/RenderWalletState.tsx +8 -4
  93. package/src/react-components/WalletObserverProvider/WalletObserverProvider.tsx +92 -4
  94. package/src/react-components/WalletObserverProvider/hooks/effects/useDerivedState.ts +5 -2
  95. package/src/react-components/WalletObserverProvider/hooks/effects/useSyncWalletWithInterval.ts +2 -2
  96. package/src/react-components/WalletObserverProvider/hooks/useWalletObserverState.ts +67 -37
  97. package/src/react-components/contexts/observer/context.ts +71 -1
  98. package/src/react-components/contexts/observer/types.ts +57 -1
  99. package/src/react-components/hooks/useWalletData.ts +5 -5
  100. package/src/react-components/hooks/useWalletHandles.ts +13 -8
  101. package/src/react-components/hooks/useWalletLoadingState.ts +13 -11
  102. package/src/react-components/hooks/useWalletPeerConnect.tsx +20 -11
@@ -1,4 +1,4 @@
1
- import { Suspense } from "react";
1
+ import { memo, Suspense } from "react";
2
2
  import { ErrorBoundary } from "react-error-boundary";
3
3
  import { useWalletLoadingState } from "./hooks/useWalletLoadingState.js";
4
4
  import { useWalletObserver } from "./hooks/useWalletObserver.js";
@@ -9,7 +9,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
9
9
  * a sync or connection operation. Useful for displaying
10
10
  * internal operation states of the wallet.
11
11
  */
12
- export const RenderWalletState = ({
12
+ const RenderWalletStateInner = ({
13
13
  render,
14
14
  loader,
15
15
  fallback
@@ -32,4 +32,5 @@ export const RenderWalletState = ({
32
32
  })
33
33
  });
34
34
  };
35
+ export const RenderWalletState = /*#__PURE__*/memo(RenderWalletStateInner);
35
36
  //# sourceMappingURL=RenderWalletState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RenderWalletState.js","names":["Suspense","ErrorBoundary","useWalletLoadingState","useWalletObserver","jsx","_jsx","RenderWalletState","render","loader","fallback","state","loadingState","onError","error","observer","getOptions","debug","console","log","message","stack","children"],"sources":["../../../src/react-components/RenderWalletState.tsx"],"sourcesContent":["import { IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport { ReactElement, ReactNode, Suspense } from \"react\";\n\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { useWalletLoadingState } from \"./hooks/useWalletLoadingState.js\";\nimport { useWalletObserver } from \"./hooks/useWalletObserver.js\";\n\nexport type TRenderWalletStateFunctionState<\n T extends IAssetAmountMetadata = IAssetAmountMetadata,\n> = ReturnType<typeof useWalletObserver<T>> &\n ReturnType<typeof useWalletLoadingState<T>>;\n\nexport type TRenderWalletStateFunction<\n T extends IAssetAmountMetadata = IAssetAmountMetadata,\n> = (state: TRenderWalletStateFunctionState<T>) => JSX.Element | ReactNode;\n\nexport interface IRenderWalletStateProps<\n T extends IAssetAmountMetadata = IAssetAmountMetadata,\n> {\n render: TRenderWalletStateFunction<T>;\n loader?: ReactNode;\n fallback?: ReactElement;\n}\n\n/**\n * This component is the same as RenderWallet, but will\n * trigger a re-render every time the WalletObserver performs\n * a sync or connection operation. Useful for displaying\n * internal operation states of the wallet.\n */\nexport const RenderWalletState = <\n T extends IAssetAmountMetadata = IAssetAmountMetadata,\n>({\n render,\n loader,\n fallback,\n}: IRenderWalletStateProps<T>) => {\n const state = useWalletObserver<T>();\n const loadingState = useWalletLoadingState<T>();\n\n return (\n <ErrorBoundary\n fallback={fallback || null}\n onError={(error) => {\n if (state.observer.getOptions().debug) {\n console.log(error.message, error.stack);\n }\n }}\n >\n <Suspense fallback={loader}>\n {render({\n ...state,\n ...loadingState,\n })}\n </Suspense>\n </ErrorBoundary>\n );\n};\n"],"mappings":"AACA,SAAkCA,QAAQ,QAAQ,OAAO;AAEzD,SAASC,aAAa,QAAQ,sBAAsB;AACpD,SAASC,qBAAqB,QAAQ,kCAAkC;AACxE,SAASC,iBAAiB,QAAQ,8BAA8B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAmBjE;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,iBAAiB,GAAGA,CAE/B;EACAC,MAAM;EACNC,MAAM;EACNC;AAC0B,CAAC,KAAK;EAChC,MAAMC,KAAK,GAAGP,iBAAiB,CAAI,CAAC;EACpC,MAAMQ,YAAY,GAAGT,qBAAqB,CAAI,CAAC;EAE/C,oBACEG,IAAA,CAACJ,aAAa;IACZQ,QAAQ,EAAEA,QAAQ,IAAI,IAAK;IAC3BG,OAAO,EAAGC,KAAK,IAAK;MAClB,IAAIH,KAAK,CAACI,QAAQ,CAACC,UAAU,CAAC,CAAC,CAACC,KAAK,EAAE;QACrCC,OAAO,CAACC,GAAG,CAACL,KAAK,CAACM,OAAO,EAAEN,KAAK,CAACO,KAAK,CAAC;MACzC;IACF,CAAE;IAAAC,QAAA,eAEFhB,IAAA,CAACL,QAAQ;MAACS,QAAQ,EAAED,MAAO;MAAAa,QAAA,EACxBd,MAAM,CAAC;QACN,GAAGG,KAAK;QACR,GAAGC;MACL,CAAC;IAAC,CACM;EAAC,CACE,CAAC;AAEpB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"RenderWalletState.js","names":["memo","Suspense","ErrorBoundary","useWalletLoadingState","useWalletObserver","jsx","_jsx","RenderWalletStateInner","render","loader","fallback","state","loadingState","onError","error","observer","getOptions","debug","console","log","message","stack","children","RenderWalletState"],"sources":["../../../src/react-components/RenderWalletState.tsx"],"sourcesContent":["import { IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport { memo, ReactElement, ReactNode, Suspense } from \"react\";\n\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { useWalletLoadingState } from \"./hooks/useWalletLoadingState.js\";\nimport { useWalletObserver } from \"./hooks/useWalletObserver.js\";\n\nexport type TRenderWalletStateFunctionState<\n T extends IAssetAmountMetadata = IAssetAmountMetadata,\n> = ReturnType<typeof useWalletObserver<T>> &\n ReturnType<typeof useWalletLoadingState>;\n\nexport type TRenderWalletStateFunction<\n T extends IAssetAmountMetadata = IAssetAmountMetadata,\n> = (state: TRenderWalletStateFunctionState<T>) => JSX.Element | ReactNode;\n\nexport interface IRenderWalletStateProps<\n T extends IAssetAmountMetadata = IAssetAmountMetadata,\n> {\n render: TRenderWalletStateFunction<T>;\n loader?: ReactNode;\n fallback?: ReactElement;\n}\n\n/**\n * This component is the same as RenderWallet, but will\n * trigger a re-render every time the WalletObserver performs\n * a sync or connection operation. Useful for displaying\n * internal operation states of the wallet.\n */\nconst RenderWalletStateInner = <\n T extends IAssetAmountMetadata = IAssetAmountMetadata,\n>({\n render,\n loader,\n fallback,\n}: IRenderWalletStateProps<T>) => {\n const state = useWalletObserver<T>();\n const loadingState = useWalletLoadingState();\n\n return (\n <ErrorBoundary\n fallback={fallback || null}\n onError={(error) => {\n if (state.observer.getOptions().debug) {\n console.log(error.message, error.stack);\n }\n }}\n >\n <Suspense fallback={loader}>\n {render({\n ...state,\n ...loadingState,\n })}\n </Suspense>\n </ErrorBoundary>\n );\n};\n\nexport const RenderWalletState = memo(\n RenderWalletStateInner,\n) as typeof RenderWalletStateInner;\n"],"mappings":"AACA,SAASA,IAAI,EAA2BC,QAAQ,QAAQ,OAAO;AAE/D,SAASC,aAAa,QAAQ,sBAAsB;AACpD,SAASC,qBAAqB,QAAQ,kCAAkC;AACxE,SAASC,iBAAiB,QAAQ,8BAA8B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAmBjE;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,sBAAsB,GAAGA,CAE7B;EACAC,MAAM;EACNC,MAAM;EACNC;AAC0B,CAAC,KAAK;EAChC,MAAMC,KAAK,GAAGP,iBAAiB,CAAI,CAAC;EACpC,MAAMQ,YAAY,GAAGT,qBAAqB,CAAC,CAAC;EAE5C,oBACEG,IAAA,CAACJ,aAAa;IACZQ,QAAQ,EAAEA,QAAQ,IAAI,IAAK;IAC3BG,OAAO,EAAGC,KAAK,IAAK;MAClB,IAAIH,KAAK,CAACI,QAAQ,CAACC,UAAU,CAAC,CAAC,CAACC,KAAK,EAAE;QACrCC,OAAO,CAACC,GAAG,CAACL,KAAK,CAACM,OAAO,EAAEN,KAAK,CAACO,KAAK,CAAC;MACzC;IACF,CAAE;IAAAC,QAAA,eAEFhB,IAAA,CAACL,QAAQ;MAACS,QAAQ,EAAED,MAAO;MAAAa,QAAA,EACxBd,MAAM,CAAC;QACN,GAAGG,KAAK;QACR,GAAGC;MACL,CAAC;IAAC,CACM;EAAC,CACE,CAAC;AAEpB,CAAC;AAED,OAAO,MAAMW,iBAAiB,gBAAGvB,IAAI,CACnCO,sBACF,CAAkC","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  import { useEffect, useMemo } from "react";
2
2
  import { WalletObserver } from "../../classes/WalletObserver.class.js";
3
- import { WalletObserverContext } from "../contexts/observer/index.js";
3
+ import { WalletActionsContext, WalletConnectionContext, WalletDataContext, WalletObserverContext } from "../contexts/observer/index.js";
4
4
  import { useDerivedState } from "./hooks/effects/useDerivedState.js";
5
5
  import { useSyncWalletWithInterval } from "./hooks/effects/useSyncWalletWithInterval.js";
6
6
  import { useProviderWalletObserverRef } from "./hooks/useProviderWalletObserverRef.js";
@@ -36,7 +36,49 @@ const WalletObserverProvider = ({
36
36
  changeAddress: state.changeAddress
37
37
  });
38
38
 
39
- // Memoize the context value
39
+ // Focused context: stable callbacks and observer ref.
40
+ // Only changes when observer instance is recreated.
41
+ const actionsValue = useMemo(() => ({
42
+ observer: observerRef.current,
43
+ observerRef: observerRef,
44
+ connectWallet: state.connectWallet,
45
+ disconnect: state.disconnect,
46
+ syncWallet: state.syncWallet,
47
+ resyncMetadata: state.resyncMetadata
48
+ }), [state.connectWallet, state.disconnect, state.syncWallet, state.resyncMetadata]);
49
+
50
+ // Focused context: connection and loading state.
51
+ // Changes on connect/disconnect and sync start/end.
52
+ const connectionValue = useMemo(() => ({
53
+ activeWallet: state.activeWallet,
54
+ ready,
55
+ connectingWallet,
56
+ syncingWallet,
57
+ network: state.network,
58
+ isCip45: state.isCip45,
59
+ switching: state.switching,
60
+ isReadOnlyMode: state.isReadOnlyMode,
61
+ willAutoConnect: state.willAutoConnect,
62
+ errorSyncing: state.errorSyncing,
63
+ mainAddress: derivedState.mainAddress,
64
+ stakeAddress: derivedState.stakeAddress
65
+ }), [state.activeWallet, ready, connectingWallet, syncingWallet, state.network, state.isCip45, state.switching, state.isReadOnlyMode, state.willAutoConnect, state.errorSyncing, derivedState.mainAddress, derivedState.stakeAddress]);
66
+
67
+ // Focused context: wallet data that changes every sync cycle.
68
+ const dataValue = useMemo(() => ({
69
+ balance: state.balance,
70
+ adaBalance: state.adaBalance,
71
+ usedAddresses: state.usedAddresses,
72
+ unusedAddresses: state.unusedAddresses,
73
+ changeAddress: state.changeAddress,
74
+ feeAddress: state.feeAddress,
75
+ utxos: state.utxos,
76
+ collateral: state.collateral,
77
+ isPending: state.isPending,
78
+ refreshInterval: options?.refreshInterval || 30000
79
+ }), [state.balance, state.adaBalance, state.usedAddresses, state.unusedAddresses, state.changeAddress, state.feeAddress, state.utxos, state.collateral, state.isPending, options?.refreshInterval]);
80
+
81
+ // Backward-compatible full context value
40
82
  const contextValue = useMemo(() => ({
41
83
  observerRef: observerRef,
42
84
  refreshInterval: options?.refreshInterval || 30000,
@@ -48,7 +90,7 @@ const WalletObserverProvider = ({
48
90
  syncingWallet,
49
91
  ready
50
92
  }
51
- }), [options, state, derivedState, connectingWallet, syncingWallet, ready, observerRef.current]);
93
+ }), [options?.refreshInterval, state, derivedState, connectingWallet, syncingWallet, ready]);
52
94
  useEffect(() => {
53
95
  if (!eventListenersAttached || loading) {
54
96
  return;
@@ -60,7 +102,16 @@ const WalletObserverProvider = ({
60
102
  }, [eventListenersAttached, loading]);
61
103
  return /*#__PURE__*/_jsx(WalletObserverContext.Provider, {
62
104
  value: contextValue,
63
- children: children
105
+ children: /*#__PURE__*/_jsx(WalletActionsContext.Provider, {
106
+ value: actionsValue,
107
+ children: /*#__PURE__*/_jsx(WalletConnectionContext.Provider, {
108
+ value: connectionValue,
109
+ children: /*#__PURE__*/_jsx(WalletDataContext.Provider, {
110
+ value: dataValue,
111
+ children: children
112
+ })
113
+ })
114
+ })
64
115
  });
65
116
  };
66
117
  export default WalletObserverProvider;
@@ -1 +1 @@
1
- {"version":3,"file":"WalletObserverProvider.js","names":["useEffect","useMemo","WalletObserver","WalletObserverContext","useDerivedState","useSyncWalletWithInterval","useProviderWalletObserverRef","useWalletObserverState","jsx","_jsx","WalletObserverProvider","children","options","loading","observerRef","connectingWallet","syncingWallet","ready","eventListenersAttached","observerOptions","hooks","state","current","syncWallet","undefined","refreshInterval","derivedState","usedAddresses","unusedAddresses","changeAddress","contextValue","observer","wallet","window","localStorage","getItem","PERSISTENCE_CACHE_KEY","getOptions","persistence","connectWallet","JSON","parse","activeWallet","Provider","value"],"sources":["../../../../src/react-components/WalletObserverProvider/WalletObserverProvider.tsx"],"sourcesContent":["import { FC, PropsWithChildren, useEffect, useMemo } from \"react\";\n\nimport { WalletObserver } from \"../../classes/WalletObserver.class.js\";\nimport {\n IWalletObserverProviderProps,\n IWalletObserverState,\n WalletObserverContext,\n} from \"../contexts/observer/index.js\";\nimport { useDerivedState } from \"./hooks/effects/useDerivedState.js\";\nimport { useSyncWalletWithInterval } from \"./hooks/effects/useSyncWalletWithInterval.js\";\nimport { useProviderWalletObserverRef } from \"./hooks/useProviderWalletObserverRef.js\";\nimport { useWalletObserverState } from \"./hooks/useWalletObserverState.js\";\n\n/**\n * The main context provider component. This handles setting up all the initial\n * state, handlers, and side effects with a new WalletObserver class.\n *\n * @param {IWalletObserverProviderProps} [options]\n * @returns {FC<PropsWithChildren<IWalletObserverProviderProps>>}\n */\nconst WalletObserverProvider: FC<\n PropsWithChildren<IWalletObserverProviderProps>\n> = ({ children, options, loading = false }) => {\n const {\n observerRef,\n connectingWallet,\n syncingWallet,\n ready,\n eventListenersAttached,\n } = useProviderWalletObserverRef(options?.observerOptions, options?.hooks);\n const state = useWalletObserverState(observerRef.current);\n\n // Enable syncing only when not loading.\n useSyncWalletWithInterval(\n state.syncWallet,\n loading ? undefined : options?.refreshInterval,\n );\n\n const derivedState = useDerivedState(observerRef.current, {\n usedAddresses: state.usedAddresses,\n unusedAddresses: state.unusedAddresses,\n changeAddress: state.changeAddress,\n });\n\n // Memoize the context value\n const contextValue: IWalletObserverState = useMemo(\n () => ({\n observerRef: observerRef,\n refreshInterval: options?.refreshInterval || 30000,\n state: {\n ...state,\n ...derivedState,\n observer: observerRef.current,\n connectingWallet,\n syncingWallet,\n ready,\n },\n }),\n [\n options,\n state,\n derivedState,\n connectingWallet,\n syncingWallet,\n ready,\n observerRef.current,\n ],\n );\n\n useEffect(() => {\n if (!eventListenersAttached || loading) {\n return;\n }\n\n const wallet = window.localStorage.getItem(\n WalletObserver.PERSISTENCE_CACHE_KEY,\n );\n\n if (wallet && observerRef.current?.getOptions()?.persistence) {\n state.connectWallet(JSON.parse(wallet).activeWallet);\n }\n }, [eventListenersAttached, loading]);\n\n return (\n <WalletObserverContext.Provider value={contextValue}>\n {children}\n </WalletObserverContext.Provider>\n );\n};\n\nexport default WalletObserverProvider;\n"],"mappings":"AAAA,SAAgCA,SAAS,EAAEC,OAAO,QAAQ,OAAO;AAEjE,SAASC,cAAc,QAAQ,uCAAuC;AACtE,SAGEC,qBAAqB,QAChB,+BAA+B;AACtC,SAASC,eAAe,QAAQ,oCAAoC;AACpE,SAASC,yBAAyB,QAAQ,8CAA8C;AACxF,SAASC,4BAA4B,QAAQ,yCAAyC;AACtF,SAASC,sBAAsB,QAAQ,mCAAmC;;AAE1E;AACA;AACA;AACA;AACA;AACA;AACA;AANA,SAAAC,GAAA,IAAAC,IAAA;AAOA,MAAMC,sBAEL,GAAGA,CAAC;EAAEC,QAAQ;EAAEC,OAAO;EAAEC,OAAO,GAAG;AAAM,CAAC,KAAK;EAC9C,MAAM;IACJC,WAAW;IACXC,gBAAgB;IAChBC,aAAa;IACbC,KAAK;IACLC;EACF,CAAC,GAAGZ,4BAA4B,CAACM,OAAO,EAAEO,eAAe,EAAEP,OAAO,EAAEQ,KAAK,CAAC;EAC1E,MAAMC,KAAK,GAAGd,sBAAsB,CAACO,WAAW,CAACQ,OAAO,CAAC;;EAEzD;EACAjB,yBAAyB,CACvBgB,KAAK,CAACE,UAAU,EAChBV,OAAO,GAAGW,SAAS,GAAGZ,OAAO,EAAEa,eACjC,CAAC;EAED,MAAMC,YAAY,GAAGtB,eAAe,CAACU,WAAW,CAACQ,OAAO,EAAE;IACxDK,aAAa,EAAEN,KAAK,CAACM,aAAa;IAClCC,eAAe,EAAEP,KAAK,CAACO,eAAe;IACtCC,aAAa,EAAER,KAAK,CAACQ;EACvB,CAAC,CAAC;;EAEF;EACA,MAAMC,YAAkC,GAAG7B,OAAO,CAChD,OAAO;IACLa,WAAW,EAAEA,WAAW;IACxBW,eAAe,EAAEb,OAAO,EAAEa,eAAe,IAAI,KAAK;IAClDJ,KAAK,EAAE;MACL,GAAGA,KAAK;MACR,GAAGK,YAAY;MACfK,QAAQ,EAAEjB,WAAW,CAACQ,OAAO;MAC7BP,gBAAgB;MAChBC,aAAa;MACbC;IACF;EACF,CAAC,CAAC,EACF,CACEL,OAAO,EACPS,KAAK,EACLK,YAAY,EACZX,gBAAgB,EAChBC,aAAa,EACbC,KAAK,EACLH,WAAW,CAACQ,OAAO,CAEvB,CAAC;EAEDtB,SAAS,CAAC,MAAM;IACd,IAAI,CAACkB,sBAAsB,IAAIL,OAAO,EAAE;MACtC;IACF;IAEA,MAAMmB,MAAM,GAAGC,MAAM,CAACC,YAAY,CAACC,OAAO,CACxCjC,cAAc,CAACkC,qBACjB,CAAC;IAED,IAAIJ,MAAM,IAAIlB,WAAW,CAACQ,OAAO,EAAEe,UAAU,CAAC,CAAC,EAAEC,WAAW,EAAE;MAC5DjB,KAAK,CAACkB,aAAa,CAACC,IAAI,CAACC,KAAK,CAACT,MAAM,CAAC,CAACU,YAAY,CAAC;IACtD;EACF,CAAC,EAAE,CAACxB,sBAAsB,EAAEL,OAAO,CAAC,CAAC;EAErC,oBACEJ,IAAA,CAACN,qBAAqB,CAACwC,QAAQ;IAACC,KAAK,EAAEd,YAAa;IAAAnB,QAAA,EACjDA;EAAQ,CACqB,CAAC;AAErC,CAAC;AAED,eAAeD,sBAAsB","ignoreList":[]}
1
+ {"version":3,"file":"WalletObserverProvider.js","names":["useEffect","useMemo","WalletObserver","WalletActionsContext","WalletConnectionContext","WalletDataContext","WalletObserverContext","useDerivedState","useSyncWalletWithInterval","useProviderWalletObserverRef","useWalletObserverState","jsx","_jsx","WalletObserverProvider","children","options","loading","observerRef","connectingWallet","syncingWallet","ready","eventListenersAttached","observerOptions","hooks","state","current","syncWallet","undefined","refreshInterval","derivedState","usedAddresses","unusedAddresses","changeAddress","actionsValue","observer","connectWallet","disconnect","resyncMetadata","connectionValue","activeWallet","network","isCip45","switching","isReadOnlyMode","willAutoConnect","errorSyncing","mainAddress","stakeAddress","dataValue","balance","adaBalance","feeAddress","utxos","collateral","isPending","contextValue","wallet","window","localStorage","getItem","PERSISTENCE_CACHE_KEY","getOptions","persistence","JSON","parse","Provider","value"],"sources":["../../../../src/react-components/WalletObserverProvider/WalletObserverProvider.tsx"],"sourcesContent":["import { FC, PropsWithChildren, useEffect, useMemo } from \"react\";\n\nimport { WalletObserver } from \"../../classes/WalletObserver.class.js\";\nimport {\n IWalletObserverProviderProps,\n IWalletObserverState,\n WalletActionsContext,\n WalletConnectionContext,\n WalletDataContext,\n WalletObserverContext,\n} from \"../contexts/observer/index.js\";\nimport { useDerivedState } from \"./hooks/effects/useDerivedState.js\";\nimport { useSyncWalletWithInterval } from \"./hooks/effects/useSyncWalletWithInterval.js\";\nimport { useProviderWalletObserverRef } from \"./hooks/useProviderWalletObserverRef.js\";\nimport { useWalletObserverState } from \"./hooks/useWalletObserverState.js\";\n\n/**\n * The main context provider component. This handles setting up all the initial\n * state, handlers, and side effects with a new WalletObserver class.\n *\n * @param {IWalletObserverProviderProps} [options]\n * @returns {FC<PropsWithChildren<IWalletObserverProviderProps>>}\n */\nconst WalletObserverProvider: FC<\n PropsWithChildren<IWalletObserverProviderProps>\n> = ({ children, options, loading = false }) => {\n const {\n observerRef,\n connectingWallet,\n syncingWallet,\n ready,\n eventListenersAttached,\n } = useProviderWalletObserverRef(options?.observerOptions, options?.hooks);\n const state = useWalletObserverState(observerRef.current);\n\n // Enable syncing only when not loading.\n useSyncWalletWithInterval(\n state.syncWallet,\n loading ? undefined : options?.refreshInterval,\n );\n\n const derivedState = useDerivedState(observerRef.current, {\n usedAddresses: state.usedAddresses,\n unusedAddresses: state.unusedAddresses,\n changeAddress: state.changeAddress,\n });\n\n // Focused context: stable callbacks and observer ref.\n // Only changes when observer instance is recreated.\n const actionsValue = useMemo(\n () => ({\n observer: observerRef.current,\n observerRef: observerRef,\n connectWallet: state.connectWallet,\n disconnect: state.disconnect,\n syncWallet: state.syncWallet,\n resyncMetadata: state.resyncMetadata,\n }),\n [\n state.connectWallet,\n state.disconnect,\n state.syncWallet,\n state.resyncMetadata,\n ],\n );\n\n // Focused context: connection and loading state.\n // Changes on connect/disconnect and sync start/end.\n const connectionValue = useMemo(\n () => ({\n activeWallet: state.activeWallet,\n ready,\n connectingWallet,\n syncingWallet,\n network: state.network,\n isCip45: state.isCip45,\n switching: state.switching,\n isReadOnlyMode: state.isReadOnlyMode,\n willAutoConnect: state.willAutoConnect,\n errorSyncing: state.errorSyncing,\n mainAddress: derivedState.mainAddress,\n stakeAddress: derivedState.stakeAddress,\n }),\n [\n state.activeWallet,\n ready,\n connectingWallet,\n syncingWallet,\n state.network,\n state.isCip45,\n state.switching,\n state.isReadOnlyMode,\n state.willAutoConnect,\n state.errorSyncing,\n derivedState.mainAddress,\n derivedState.stakeAddress,\n ],\n );\n\n // Focused context: wallet data that changes every sync cycle.\n const dataValue = useMemo(\n () => ({\n balance: state.balance,\n adaBalance: state.adaBalance,\n usedAddresses: state.usedAddresses,\n unusedAddresses: state.unusedAddresses,\n changeAddress: state.changeAddress,\n feeAddress: state.feeAddress,\n utxos: state.utxos,\n collateral: state.collateral,\n isPending: state.isPending,\n refreshInterval: options?.refreshInterval || 30000,\n }),\n [\n state.balance,\n state.adaBalance,\n state.usedAddresses,\n state.unusedAddresses,\n state.changeAddress,\n state.feeAddress,\n state.utxos,\n state.collateral,\n state.isPending,\n options?.refreshInterval,\n ],\n );\n\n // Backward-compatible full context value\n const contextValue: IWalletObserverState = useMemo(\n () => ({\n observerRef: observerRef,\n refreshInterval: options?.refreshInterval || 30000,\n state: {\n ...state,\n ...derivedState,\n observer: observerRef.current,\n connectingWallet,\n syncingWallet,\n ready,\n },\n }),\n [\n options?.refreshInterval,\n state,\n derivedState,\n connectingWallet,\n syncingWallet,\n ready,\n ],\n );\n\n useEffect(() => {\n if (!eventListenersAttached || loading) {\n return;\n }\n\n const wallet = window.localStorage.getItem(\n WalletObserver.PERSISTENCE_CACHE_KEY,\n );\n\n if (wallet && observerRef.current?.getOptions()?.persistence) {\n state.connectWallet(JSON.parse(wallet).activeWallet);\n }\n }, [eventListenersAttached, loading]);\n\n return (\n <WalletObserverContext.Provider value={contextValue}>\n <WalletActionsContext.Provider value={actionsValue}>\n <WalletConnectionContext.Provider value={connectionValue}>\n <WalletDataContext.Provider value={dataValue}>\n {children}\n </WalletDataContext.Provider>\n </WalletConnectionContext.Provider>\n </WalletActionsContext.Provider>\n </WalletObserverContext.Provider>\n );\n};\n\nexport default WalletObserverProvider;\n"],"mappings":"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","ignoreList":[]}
@@ -2,7 +2,7 @@ import { useEffect, useMemo, useState } from "react";
2
2
  import { WalletObserver } from "../../../../classes/WalletObserver.class.js";
3
3
  export const useDerivedState = (observer, state) => {
4
4
  const [stakeAddress, setStakeAddress] = useState();
5
- const address = state.changeAddress || state.usedAddresses[0] || state.unusedAddresses[0];
5
+ const address = useMemo(() => state.changeAddress || state.usedAddresses[0] || state.unusedAddresses[0], [state.changeAddress, state.usedAddresses, state.unusedAddresses]);
6
6
  useEffect(() => {
7
7
  if (!address) {
8
8
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"useDerivedState.js","names":["useEffect","useMemo","useState","WalletObserver","useDerivedState","observer","state","stakeAddress","setStakeAddress","address","changeAddress","usedAddresses","unusedAddresses","getUtils","then","utils","getBech32StakingAddress","memoizedDerivedState","persistentCache","window","localStorage","getItem","PERSISTENCE_CACHE_KEY","usePersistence","getOptions","persistence","mainAddress","cache","JSON","parse"],"sources":["../../../../../../src/react-components/WalletObserverProvider/hooks/effects/useDerivedState.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { IWalletObserverSeed } from \"../../../../@types/observer.js\";\nimport { WalletObserver } from \"../../../../classes/WalletObserver.class.js\";\nimport { useWalletObserverState } from \"../useWalletObserverState.js\";\n\nexport const useDerivedState = (\n observer: WalletObserver,\n state: Pick<\n ReturnType<typeof useWalletObserverState>,\n \"usedAddresses\" | \"unusedAddresses\" | \"changeAddress\"\n >,\n) => {\n const [stakeAddress, setStakeAddress] = useState<string>();\n const address =\n state.changeAddress || state.usedAddresses[0] || state.unusedAddresses[0];\n\n useEffect(() => {\n if (!address) {\n return;\n }\n\n observer.getUtils().then((utils) => {\n setStakeAddress(utils.getBech32StakingAddress(address));\n });\n }, [address]);\n\n const memoizedDerivedState = useMemo(() => {\n const persistentCache = window.localStorage.getItem(\n WalletObserver.PERSISTENCE_CACHE_KEY,\n );\n const usePersistence = observer.getOptions().persistence;\n\n let mainAddress = address;\n if (usePersistence && persistentCache && !mainAddress) {\n const cache = JSON.parse(persistentCache) as IWalletObserverSeed;\n mainAddress = cache.mainAddress;\n }\n\n return {\n stakeAddress,\n mainAddress,\n };\n }, [observer, address, stakeAddress]);\n\n return memoizedDerivedState;\n};\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AAEpD,SAASC,cAAc,QAAQ,6CAA6C;AAG5E,OAAO,MAAMC,eAAe,GAAGA,CAC7BC,QAAwB,EACxBC,KAGC,KACE;EACH,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGN,QAAQ,CAAS,CAAC;EAC1D,MAAMO,OAAO,GACXH,KAAK,CAACI,aAAa,IAAIJ,KAAK,CAACK,aAAa,CAAC,CAAC,CAAC,IAAIL,KAAK,CAACM,eAAe,CAAC,CAAC,CAAC;EAE3EZ,SAAS,CAAC,MAAM;IACd,IAAI,CAACS,OAAO,EAAE;MACZ;IACF;IAEAJ,QAAQ,CAACQ,QAAQ,CAAC,CAAC,CAACC,IAAI,CAAEC,KAAK,IAAK;MAClCP,eAAe,CAACO,KAAK,CAACC,uBAAuB,CAACP,OAAO,CAAC,CAAC;IACzD,CAAC,CAAC;EACJ,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAEb,MAAMQ,oBAAoB,GAAGhB,OAAO,CAAC,MAAM;IACzC,MAAMiB,eAAe,GAAGC,MAAM,CAACC,YAAY,CAACC,OAAO,CACjDlB,cAAc,CAACmB,qBACjB,CAAC;IACD,MAAMC,cAAc,GAAGlB,QAAQ,CAACmB,UAAU,CAAC,CAAC,CAACC,WAAW;IAExD,IAAIC,WAAW,GAAGjB,OAAO;IACzB,IAAIc,cAAc,IAAIL,eAAe,IAAI,CAACQ,WAAW,EAAE;MACrD,MAAMC,KAAK,GAAGC,IAAI,CAACC,KAAK,CAACX,eAAe,CAAwB;MAChEQ,WAAW,GAAGC,KAAK,CAACD,WAAW;IACjC;IAEA,OAAO;MACLnB,YAAY;MACZmB;IACF,CAAC;EACH,CAAC,EAAE,CAACrB,QAAQ,EAAEI,OAAO,EAAEF,YAAY,CAAC,CAAC;EAErC,OAAOU,oBAAoB;AAC7B,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"useDerivedState.js","names":["useEffect","useMemo","useState","WalletObserver","useDerivedState","observer","state","stakeAddress","setStakeAddress","address","changeAddress","usedAddresses","unusedAddresses","getUtils","then","utils","getBech32StakingAddress","memoizedDerivedState","persistentCache","window","localStorage","getItem","PERSISTENCE_CACHE_KEY","usePersistence","getOptions","persistence","mainAddress","cache","JSON","parse"],"sources":["../../../../../../src/react-components/WalletObserverProvider/hooks/effects/useDerivedState.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport { IWalletObserverSeed } from \"../../../../@types/observer.js\";\nimport { WalletObserver } from \"../../../../classes/WalletObserver.class.js\";\nimport { useWalletObserverState } from \"../useWalletObserverState.js\";\n\nexport const useDerivedState = (\n observer: WalletObserver,\n state: Pick<\n ReturnType<typeof useWalletObserverState>,\n \"usedAddresses\" | \"unusedAddresses\" | \"changeAddress\"\n >,\n) => {\n const [stakeAddress, setStakeAddress] = useState<string>();\n const address = useMemo(\n () =>\n state.changeAddress || state.usedAddresses[0] || state.unusedAddresses[0],\n [state.changeAddress, state.usedAddresses, state.unusedAddresses],\n );\n\n useEffect(() => {\n if (!address) {\n return;\n }\n\n observer.getUtils().then((utils) => {\n setStakeAddress(utils.getBech32StakingAddress(address));\n });\n }, [address]);\n\n const memoizedDerivedState = useMemo(() => {\n const persistentCache = window.localStorage.getItem(\n WalletObserver.PERSISTENCE_CACHE_KEY,\n );\n const usePersistence = observer.getOptions().persistence;\n\n let mainAddress = address;\n if (usePersistence && persistentCache && !mainAddress) {\n const cache = JSON.parse(persistentCache) as IWalletObserverSeed;\n mainAddress = cache.mainAddress;\n }\n\n return {\n stakeAddress,\n mainAddress,\n };\n }, [observer, address, stakeAddress]);\n\n return memoizedDerivedState;\n};\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,OAAO,EAAEC,QAAQ,QAAQ,OAAO;AAEpD,SAASC,cAAc,QAAQ,6CAA6C;AAG5E,OAAO,MAAMC,eAAe,GAAGA,CAC7BC,QAAwB,EACxBC,KAGC,KACE;EACH,MAAM,CAACC,YAAY,EAAEC,eAAe,CAAC,GAAGN,QAAQ,CAAS,CAAC;EAC1D,MAAMO,OAAO,GAAGR,OAAO,CACrB,MACEK,KAAK,CAACI,aAAa,IAAIJ,KAAK,CAACK,aAAa,CAAC,CAAC,CAAC,IAAIL,KAAK,CAACM,eAAe,CAAC,CAAC,CAAC,EAC3E,CAACN,KAAK,CAACI,aAAa,EAAEJ,KAAK,CAACK,aAAa,EAAEL,KAAK,CAACM,eAAe,CAClE,CAAC;EAEDZ,SAAS,CAAC,MAAM;IACd,IAAI,CAACS,OAAO,EAAE;MACZ;IACF;IAEAJ,QAAQ,CAACQ,QAAQ,CAAC,CAAC,CAACC,IAAI,CAAEC,KAAK,IAAK;MAClCP,eAAe,CAACO,KAAK,CAACC,uBAAuB,CAACP,OAAO,CAAC,CAAC;IACzD,CAAC,CAAC;EACJ,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAEb,MAAMQ,oBAAoB,GAAGhB,OAAO,CAAC,MAAM;IACzC,MAAMiB,eAAe,GAAGC,MAAM,CAACC,YAAY,CAACC,OAAO,CACjDlB,cAAc,CAACmB,qBACjB,CAAC;IACD,MAAMC,cAAc,GAAGlB,QAAQ,CAACmB,UAAU,CAAC,CAAC,CAACC,WAAW;IAExD,IAAIC,WAAW,GAAGjB,OAAO;IACzB,IAAIc,cAAc,IAAIL,eAAe,IAAI,CAACQ,WAAW,EAAE;MACrD,MAAMC,KAAK,GAAGC,IAAI,CAACC,KAAK,CAACX,eAAe,CAAwB;MAChEQ,WAAW,GAAGC,KAAK,CAACD,WAAW;IACjC;IAEA,OAAO;MACLnB,YAAY;MACZmB;IACF,CAAC;EACH,CAAC,EAAE,CAACrB,QAAQ,EAAEI,OAAO,EAAEF,YAAY,CAAC,CAAC;EAErC,OAAOU,oBAAoB;AAC7B,CAAC","ignoreList":[]}
@@ -11,8 +11,8 @@ import { useQuery } from "@tanstack/react-query";
11
11
  export const useSyncWalletWithInterval = (syncWalletFn, refreshInterval) => {
12
12
  useQuery({
13
13
  queryKey: ["useSyncWalletWithInterval"],
14
- queryFn: () => {
15
- syncWalletFn();
14
+ queryFn: async () => {
15
+ await syncWalletFn();
16
16
  return true;
17
17
  },
18
18
  refetchInterval: refreshInterval,
@@ -1 +1 @@
1
- {"version":3,"file":"useSyncWalletWithInterval.js","names":["useQuery","useSyncWalletWithInterval","syncWalletFn","refreshInterval","queryKey","queryFn","refetchInterval","enabled","refetchOnWindowFocus","refetchOnReconnect"],"sources":["../../../../../../src/react-components/WalletObserverProvider/hooks/effects/useSyncWalletWithInterval.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\n\n/**\n * This hook is responsible for attaching\n * calling the sync function on an interval.\n * If set to 0, then the refresh interval is not attached.\n *\n * @param syncWalletFn\n * @param refreshInterval\n */\nexport const useSyncWalletWithInterval = (\n syncWalletFn: () => Promise<void>,\n refreshInterval?: number,\n) => {\n useQuery({\n queryKey: [\"useSyncWalletWithInterval\"],\n queryFn: () => {\n syncWalletFn();\n return true;\n },\n refetchInterval: refreshInterval,\n enabled: refreshInterval ? refreshInterval > 0 : false,\n refetchOnWindowFocus: true,\n refetchOnReconnect: true,\n });\n};\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,uBAAuB;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,yBAAyB,GAAGA,CACvCC,YAAiC,EACjCC,eAAwB,KACrB;EACHH,QAAQ,CAAC;IACPI,QAAQ,EAAE,CAAC,2BAA2B,CAAC;IACvCC,OAAO,EAAEA,CAAA,KAAM;MACbH,YAAY,CAAC,CAAC;MACd,OAAO,IAAI;IACb,CAAC;IACDI,eAAe,EAAEH,eAAe;IAChCI,OAAO,EAAEJ,eAAe,GAAGA,eAAe,GAAG,CAAC,GAAG,KAAK;IACtDK,oBAAoB,EAAE,IAAI;IAC1BC,kBAAkB,EAAE;EACtB,CAAC,CAAC;AACJ,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"useSyncWalletWithInterval.js","names":["useQuery","useSyncWalletWithInterval","syncWalletFn","refreshInterval","queryKey","queryFn","refetchInterval","enabled","refetchOnWindowFocus","refetchOnReconnect"],"sources":["../../../../../../src/react-components/WalletObserverProvider/hooks/effects/useSyncWalletWithInterval.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\n\n/**\n * This hook is responsible for attaching\n * calling the sync function on an interval.\n * If set to 0, then the refresh interval is not attached.\n *\n * @param syncWalletFn\n * @param refreshInterval\n */\nexport const useSyncWalletWithInterval = (\n syncWalletFn: () => Promise<void>,\n refreshInterval?: number,\n) => {\n useQuery({\n queryKey: [\"useSyncWalletWithInterval\"],\n queryFn: async () => {\n await syncWalletFn();\n return true;\n },\n refetchInterval: refreshInterval,\n enabled: refreshInterval ? refreshInterval > 0 : false,\n refetchOnWindowFocus: true,\n refetchOnReconnect: true,\n });\n};\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,uBAAuB;;AAEhD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,yBAAyB,GAAGA,CACvCC,YAAiC,EACjCC,eAAwB,KACrB;EACHH,QAAQ,CAAC;IACPI,QAAQ,EAAE,CAAC,2BAA2B,CAAC;IACvCC,OAAO,EAAE,MAAAA,CAAA,KAAY;MACnB,MAAMH,YAAY,CAAC,CAAC;MACpB,OAAO,IAAI;IACb,CAAC;IACDI,eAAe,EAAEH,eAAe;IAChCI,OAAO,EAAEJ,eAAe,GAAGA,eAAe,GAAG,CAAC,GAAG,KAAK;IACtDK,oBAAoB,EAAE,IAAI;IAC1BC,kBAAkB,EAAE;EACtB,CAAC,CAAC;AACJ,CAAC","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import { AssetAmount } from "@sundaeswap/asset";
2
- import { useCallback, useEffect, useState, useTransition } from "react";
2
+ import { useCallback, useEffect, useMemo, useState, useTransition } from "react";
3
3
  import { ReadOnlyApi } from "../../../classes/ReadOnlyApi.class.js";
4
4
  import { WalletBalanceMap } from "../../../classes/WalletBalanceMap.class.js";
5
5
  import { WalletObserver } from "../../../classes/WalletObserver.class.js";
@@ -56,7 +56,7 @@ export const useWalletObserverState = observer => {
56
56
  await syncWallet(data instanceof Error ? undefined : data);
57
57
  setSwitching(() => false);
58
58
  return observer.api;
59
- }, [observer, setSwitching, setIsReadOnlyMode]);
59
+ }, [observer]);
60
60
  const resyncMetadata = useCallback(async () => {
61
61
  await observer.resyncMetadata();
62
62
  }, [observer]);
@@ -145,7 +145,7 @@ export const useWalletObserverState = observer => {
145
145
  window.removeEventListener("focus", func);
146
146
  };
147
147
  }, [syncWallet]);
148
- return {
148
+ return useMemo(() => ({
149
149
  activeWallet,
150
150
  adaBalance,
151
151
  balance,
@@ -179,6 +179,6 @@ export const useWalletObserverState = observer => {
179
179
  usedAddresses,
180
180
  utxos,
181
181
  willAutoConnect
182
- };
182
+ }), [activeWallet, adaBalance, balance, collateral, connectWallet, disconnect, errorSyncing, feeAddress, isCip45, isPending, isReadOnlyMode, network, changeAddress, resyncMetadata, switching, syncWallet, unusedAddresses, usedAddresses, utxos, willAutoConnect]);
183
183
  };
184
184
  //# sourceMappingURL=useWalletObserverState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useWalletObserverState.js","names":["AssetAmount","useCallback","useEffect","useState","useTransition","ReadOnlyApi","WalletBalanceMap","WalletObserver","ADA_ASSET_ID","areAssetMapsEqual","useWalletObserverState","observer","activeWallet","setActiveWallet","adaBalance","setAdaBalance","balance","setBalance","isReadOnlyMode","setIsReadOnlyMode","network","setNetwork","usedAddresses","setUsedAddresses","unusedAddresses","setUnusedAddresses","changeAddress","setChangeAddress","feeAddress","setFeeAddress","utxos","setUtxos","collateral","setCollateral","isCip45","setIsCip45","switching","setSwitching","errorSyncing","setErrorSyncing","isPending","startTransition","willAutoConnect","setWillAutoConnect","Boolean","window","localStorage","getItem","PERSISTENCE_CACHE_KEY","getOptions","persistence","disconnect","undefined","connectWallet","wallet","hasActiveConnection","data","api","syncWallet","Error","resyncMetadata","importedData","isSyncing","newWallet","includes","prevWallet","freshData","sync","newBalanceMap","balanceMap","newAdaBalance","get","prevBalance","amount","newUsedAddresses","Array","prevValue","JSON","stringify","newUnusedAddresses","newNetwork","newUtxos","prevValueRep","map","v","toCbor","newValueRep","newCollateral","newFeeAddress","newChangeAddress","e","cause","func","addEventListener","removeEventListener"],"sources":["../../../../../src/react-components/WalletObserverProvider/hooks/useWalletObserverState.ts"],"sourcesContent":["import type { TransactionUnspentOutput } from \"@cardano-sdk/core/dist/cjs/Serialization/TransactionUnspentOutput.js\";\nimport { AssetAmount, IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport { useCallback, useEffect, useState, useTransition } from \"react\";\n\nimport { IWalletObserverSync } from \"../../../@types/observer.js\";\nimport { ReadOnlyApi } from \"../../../classes/ReadOnlyApi.class.js\";\nimport { WalletBalanceMap } from \"../../../classes/WalletBalanceMap.class.js\";\nimport { WalletObserver } from \"../../../classes/WalletObserver.class.js\";\nimport { ADA_ASSET_ID } from \"../../../constants.js\";\nimport { areAssetMapsEqual } from \"../../../utils/comparisons.js\";\n\n/**\n * Internal use only. The main action that sync WalletObserver api responses with\n * the React context of the WalletObserverProvider.\n *\n * @param {WalletObserver} observer\n */\nexport const useWalletObserverState = <\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n>(\n observer: WalletObserver<AssetMetadata>,\n) => {\n const [activeWallet, setActiveWallet] = useState<string>();\n const [adaBalance, setAdaBalance] = useState<AssetAmount<AssetMetadata>>(\n new AssetAmount<AssetMetadata>(0n),\n );\n const [balance, setBalance] = useState<WalletBalanceMap<AssetMetadata>>(\n new WalletBalanceMap<AssetMetadata>(observer),\n );\n const [isReadOnlyMode, setIsReadOnlyMode] = useState<boolean>(false);\n const [network, setNetwork] = useState<number | undefined>();\n const [usedAddresses, setUsedAddresses] = useState<string[]>([]);\n const [unusedAddresses, setUnusedAddresses] = useState<string[]>([]);\n const [changeAddress, setChangeAddress] = useState<string | undefined>();\n const [feeAddress, setFeeAddress] = useState<string | undefined>();\n const [utxos, setUtxos] = useState<TransactionUnspentOutput[]>();\n const [collateral, setCollateral] = useState<TransactionUnspentOutput[]>();\n const [isCip45, setIsCip45] = useState(false);\n const [switching, setSwitching] = useState(false);\n const [errorSyncing, setErrorSyncing] = useState(false);\n const [isPending, startTransition] = useTransition();\n const [willAutoConnect, setWillAutoConnect] = useState(\n Boolean(\n window.localStorage.getItem(WalletObserver.PERSISTENCE_CACHE_KEY) &&\n observer.getOptions().persistence,\n ),\n );\n\n const disconnect = useCallback(() => {\n // Reset observer state.\n observer.disconnect();\n\n // Reset state.\n setAdaBalance(new AssetAmount(0n));\n setBalance(new WalletBalanceMap(observer));\n setUsedAddresses([]);\n setUnusedAddresses([]);\n setChangeAddress(undefined);\n setActiveWallet(undefined);\n setNetwork(undefined);\n setUtxos(undefined);\n setCollateral(undefined);\n setFeeAddress(undefined);\n setIsCip45(false);\n setWillAutoConnect(false);\n }, [observer]);\n\n const connectWallet = useCallback(\n async (wallet: string) => {\n if (observer.hasActiveConnection() && wallet !== observer.activeWallet) {\n setSwitching(() => true);\n }\n\n const data = await observer.connectWallet(wallet);\n setIsReadOnlyMode(observer.api instanceof ReadOnlyApi);\n await syncWallet(data instanceof Error ? undefined : data);\n setSwitching(() => false);\n return observer.api;\n },\n [observer, setSwitching, setIsReadOnlyMode],\n );\n\n const resyncMetadata = useCallback(async () => {\n await observer.resyncMetadata();\n }, [observer]);\n\n const syncWallet = useCallback(\n async (importedData?: IWalletObserverSync<AssetMetadata> | undefined) => {\n if (observer.isSyncing() || !observer.hasActiveConnection()) {\n return;\n }\n\n const newWallet = observer.activeWallet;\n if (!newWallet) {\n disconnect();\n return;\n }\n\n setIsCip45(newWallet.includes(\"p2p\"));\n setActiveWallet((prevWallet) =>\n newWallet === prevWallet ? prevWallet : newWallet,\n );\n setIsReadOnlyMode(observer.api instanceof ReadOnlyApi);\n\n try {\n const freshData = importedData || (await observer.sync());\n\n startTransition(() => {\n const newBalanceMap = freshData.balanceMap;\n if (newBalanceMap instanceof WalletBalanceMap) {\n const newAdaBalance = newBalanceMap.get(ADA_ASSET_ID);\n if (newAdaBalance) {\n setAdaBalance((prevBalance) =>\n prevBalance.amount === newAdaBalance.amount\n ? prevBalance\n : newAdaBalance,\n );\n\n setBalance((prevBalance) =>\n areAssetMapsEqual(prevBalance, newBalanceMap)\n ? prevBalance\n : newBalanceMap,\n );\n }\n }\n\n const newUsedAddresses = freshData.usedAddresses;\n if (newUsedAddresses instanceof Array) {\n setUsedAddresses((prevValue) => {\n return JSON.stringify(prevValue) ===\n JSON.stringify(newUsedAddresses)\n ? prevValue\n : newUsedAddresses;\n });\n }\n\n const newUnusedAddresses = freshData.unusedAddresses;\n if (newUnusedAddresses instanceof Array) {\n setUnusedAddresses((prevValue) =>\n JSON.stringify(prevValue) === JSON.stringify(newUnusedAddresses)\n ? prevValue\n : newUnusedAddresses,\n );\n }\n\n const newNetwork = freshData.network;\n if (typeof newNetwork === \"number\") {\n setNetwork((prevValue) =>\n prevValue === newNetwork ? prevValue : newNetwork,\n );\n }\n\n const newUtxos = freshData.utxos;\n if (newUtxos instanceof Array) {\n setUtxos((prevValue) => {\n const prevValueRep = prevValue?.map((v) => v.toCbor());\n const newValueRep = newUtxos?.map((v) => v.toCbor());\n if (prevValueRep !== newValueRep) {\n return newUtxos;\n }\n\n return prevValue;\n });\n }\n\n const newCollateral = freshData.collateral;\n if (newCollateral instanceof Array) {\n setCollateral((prevValue) => {\n const prevValueRep = prevValue?.map((v) => v.toCbor());\n const newValueRep = newCollateral?.map((v) => v.toCbor());\n if (prevValueRep !== newValueRep) {\n return newCollateral;\n }\n\n return prevValue;\n });\n }\n\n const newFeeAddress = freshData.feeAddress;\n if (typeof newFeeAddress === \"string\") {\n setFeeAddress((prevValue) =>\n prevValue === newFeeAddress ? prevValue : newFeeAddress,\n );\n }\n\n const newChangeAddress = freshData.changeAddress;\n if (!(newChangeAddress instanceof Error)) {\n setChangeAddress((prevValue) =>\n prevValue === newChangeAddress ? prevValue : newChangeAddress,\n );\n }\n });\n } catch (e) {\n setErrorSyncing(true);\n (e as Error).cause =\n \"The wallet threw an error while the app was trying to sync with it. Please try again or contact your wallet provider.\";\n throw e;\n }\n },\n [observer, disconnect],\n );\n\n /**\n * Ensure the wallet syncs on connect and disconnect.\n */\n useEffect(() => {\n const func = () => syncWallet();\n window.addEventListener(\"focus\", func);\n\n return () => {\n window.removeEventListener(\"focus\", func);\n };\n }, [syncWallet]);\n\n return {\n activeWallet,\n adaBalance,\n balance,\n collateral,\n connectWallet,\n disconnect,\n errorSyncing,\n feeAddress,\n isCip45,\n isPending,\n isReadOnlyMode,\n network,\n changeAddress,\n resyncMetadata,\n setActiveWallet,\n setAdaBalance,\n setBalance,\n setCollateral,\n setFeeAddress,\n setIsCip45,\n setIsReadOnlyMode,\n setNetwork,\n setSwitching,\n setUnusedAddresses,\n setUsedAddresses,\n setUtxos,\n setChangeAddress,\n switching,\n syncWallet,\n unusedAddresses,\n usedAddresses,\n utxos,\n willAutoConnect,\n };\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useWalletObserverState.js","names":["AssetAmount","useCallback","useEffect","useMemo","useState","useTransition","ReadOnlyApi","WalletBalanceMap","WalletObserver","ADA_ASSET_ID","areAssetMapsEqual","useWalletObserverState","observer","activeWallet","setActiveWallet","adaBalance","setAdaBalance","balance","setBalance","isReadOnlyMode","setIsReadOnlyMode","network","setNetwork","usedAddresses","setUsedAddresses","unusedAddresses","setUnusedAddresses","changeAddress","setChangeAddress","feeAddress","setFeeAddress","utxos","setUtxos","collateral","setCollateral","isCip45","setIsCip45","switching","setSwitching","errorSyncing","setErrorSyncing","isPending","startTransition","willAutoConnect","setWillAutoConnect","Boolean","window","localStorage","getItem","PERSISTENCE_CACHE_KEY","getOptions","persistence","disconnect","undefined","connectWallet","wallet","hasActiveConnection","data","api","syncWallet","Error","resyncMetadata","importedData","isSyncing","newWallet","includes","prevWallet","freshData","sync","newBalanceMap","balanceMap","newAdaBalance","get","prevBalance","amount","newUsedAddresses","Array","prevValue","JSON","stringify","newUnusedAddresses","newNetwork","newUtxos","prevValueRep","map","v","toCbor","newValueRep","newCollateral","newFeeAddress","newChangeAddress","e","cause","func","addEventListener","removeEventListener"],"sources":["../../../../../src/react-components/WalletObserverProvider/hooks/useWalletObserverState.ts"],"sourcesContent":["import type { TransactionUnspentOutput } from \"@cardano-sdk/core/dist/cjs/Serialization/TransactionUnspentOutput.js\";\nimport { AssetAmount, IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useState,\n useTransition,\n} from \"react\";\n\nimport { IWalletObserverSync } from \"../../../@types/observer.js\";\nimport { ReadOnlyApi } from \"../../../classes/ReadOnlyApi.class.js\";\nimport { WalletBalanceMap } from \"../../../classes/WalletBalanceMap.class.js\";\nimport { WalletObserver } from \"../../../classes/WalletObserver.class.js\";\nimport { ADA_ASSET_ID } from \"../../../constants.js\";\nimport { areAssetMapsEqual } from \"../../../utils/comparisons.js\";\n\n/**\n * Internal use only. The main action that sync WalletObserver api responses with\n * the React context of the WalletObserverProvider.\n *\n * @param {WalletObserver} observer\n */\nexport const useWalletObserverState = <\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n>(\n observer: WalletObserver<AssetMetadata>,\n) => {\n const [activeWallet, setActiveWallet] = useState<string>();\n const [adaBalance, setAdaBalance] = useState<AssetAmount<AssetMetadata>>(\n new AssetAmount<AssetMetadata>(0n),\n );\n const [balance, setBalance] = useState<WalletBalanceMap<AssetMetadata>>(\n new WalletBalanceMap<AssetMetadata>(observer),\n );\n const [isReadOnlyMode, setIsReadOnlyMode] = useState<boolean>(false);\n const [network, setNetwork] = useState<number | undefined>();\n const [usedAddresses, setUsedAddresses] = useState<string[]>([]);\n const [unusedAddresses, setUnusedAddresses] = useState<string[]>([]);\n const [changeAddress, setChangeAddress] = useState<string | undefined>();\n const [feeAddress, setFeeAddress] = useState<string | undefined>();\n const [utxos, setUtxos] = useState<TransactionUnspentOutput[]>();\n const [collateral, setCollateral] = useState<TransactionUnspentOutput[]>();\n const [isCip45, setIsCip45] = useState(false);\n const [switching, setSwitching] = useState(false);\n const [errorSyncing, setErrorSyncing] = useState(false);\n const [isPending, startTransition] = useTransition();\n const [willAutoConnect, setWillAutoConnect] = useState(\n Boolean(\n window.localStorage.getItem(WalletObserver.PERSISTENCE_CACHE_KEY) &&\n observer.getOptions().persistence,\n ),\n );\n\n const disconnect = useCallback(() => {\n // Reset observer state.\n observer.disconnect();\n\n // Reset state.\n setAdaBalance(new AssetAmount(0n));\n setBalance(new WalletBalanceMap(observer));\n setUsedAddresses([]);\n setUnusedAddresses([]);\n setChangeAddress(undefined);\n setActiveWallet(undefined);\n setNetwork(undefined);\n setUtxos(undefined);\n setCollateral(undefined);\n setFeeAddress(undefined);\n setIsCip45(false);\n setWillAutoConnect(false);\n }, [observer]);\n\n const connectWallet = useCallback(\n async (wallet: string) => {\n if (observer.hasActiveConnection() && wallet !== observer.activeWallet) {\n setSwitching(() => true);\n }\n\n const data = await observer.connectWallet(wallet);\n setIsReadOnlyMode(observer.api instanceof ReadOnlyApi);\n await syncWallet(data instanceof Error ? undefined : data);\n setSwitching(() => false);\n return observer.api;\n },\n [observer],\n );\n\n const resyncMetadata = useCallback(async () => {\n await observer.resyncMetadata();\n }, [observer]);\n\n const syncWallet = useCallback(\n async (importedData?: IWalletObserverSync<AssetMetadata> | undefined) => {\n if (observer.isSyncing() || !observer.hasActiveConnection()) {\n return;\n }\n\n const newWallet = observer.activeWallet;\n if (!newWallet) {\n disconnect();\n return;\n }\n\n setIsCip45(newWallet.includes(\"p2p\"));\n setActiveWallet((prevWallet) =>\n newWallet === prevWallet ? prevWallet : newWallet,\n );\n setIsReadOnlyMode(observer.api instanceof ReadOnlyApi);\n\n try {\n const freshData = importedData || (await observer.sync());\n\n startTransition(() => {\n const newBalanceMap = freshData.balanceMap;\n if (newBalanceMap instanceof WalletBalanceMap) {\n const newAdaBalance = newBalanceMap.get(ADA_ASSET_ID);\n if (newAdaBalance) {\n setAdaBalance((prevBalance) =>\n prevBalance.amount === newAdaBalance.amount\n ? prevBalance\n : newAdaBalance,\n );\n\n setBalance((prevBalance) =>\n areAssetMapsEqual(prevBalance, newBalanceMap)\n ? prevBalance\n : newBalanceMap,\n );\n }\n }\n\n const newUsedAddresses = freshData.usedAddresses;\n if (newUsedAddresses instanceof Array) {\n setUsedAddresses((prevValue) => {\n return JSON.stringify(prevValue) ===\n JSON.stringify(newUsedAddresses)\n ? prevValue\n : newUsedAddresses;\n });\n }\n\n const newUnusedAddresses = freshData.unusedAddresses;\n if (newUnusedAddresses instanceof Array) {\n setUnusedAddresses((prevValue) =>\n JSON.stringify(prevValue) === JSON.stringify(newUnusedAddresses)\n ? prevValue\n : newUnusedAddresses,\n );\n }\n\n const newNetwork = freshData.network;\n if (typeof newNetwork === \"number\") {\n setNetwork((prevValue) =>\n prevValue === newNetwork ? prevValue : newNetwork,\n );\n }\n\n const newUtxos = freshData.utxos;\n if (newUtxos instanceof Array) {\n setUtxos((prevValue) => {\n const prevValueRep = prevValue?.map((v) => v.toCbor());\n const newValueRep = newUtxos?.map((v) => v.toCbor());\n if (prevValueRep !== newValueRep) {\n return newUtxos;\n }\n\n return prevValue;\n });\n }\n\n const newCollateral = freshData.collateral;\n if (newCollateral instanceof Array) {\n setCollateral((prevValue) => {\n const prevValueRep = prevValue?.map((v) => v.toCbor());\n const newValueRep = newCollateral?.map((v) => v.toCbor());\n if (prevValueRep !== newValueRep) {\n return newCollateral;\n }\n\n return prevValue;\n });\n }\n\n const newFeeAddress = freshData.feeAddress;\n if (typeof newFeeAddress === \"string\") {\n setFeeAddress((prevValue) =>\n prevValue === newFeeAddress ? prevValue : newFeeAddress,\n );\n }\n\n const newChangeAddress = freshData.changeAddress;\n if (!(newChangeAddress instanceof Error)) {\n setChangeAddress((prevValue) =>\n prevValue === newChangeAddress ? prevValue : newChangeAddress,\n );\n }\n });\n } catch (e) {\n setErrorSyncing(true);\n (e as Error).cause =\n \"The wallet threw an error while the app was trying to sync with it. Please try again or contact your wallet provider.\";\n throw e;\n }\n },\n [observer, disconnect],\n );\n\n /**\n * Ensure the wallet syncs on connect and disconnect.\n */\n useEffect(() => {\n const func = () => syncWallet();\n window.addEventListener(\"focus\", func);\n\n return () => {\n window.removeEventListener(\"focus\", func);\n };\n }, [syncWallet]);\n\n return useMemo(\n () => ({\n activeWallet,\n adaBalance,\n balance,\n collateral,\n connectWallet,\n disconnect,\n errorSyncing,\n feeAddress,\n isCip45,\n isPending,\n isReadOnlyMode,\n network,\n changeAddress,\n resyncMetadata,\n setActiveWallet,\n setAdaBalance,\n setBalance,\n setCollateral,\n setFeeAddress,\n setIsCip45,\n setIsReadOnlyMode,\n setNetwork,\n setSwitching,\n setUnusedAddresses,\n setUsedAddresses,\n setUtxos,\n setChangeAddress,\n switching,\n syncWallet,\n unusedAddresses,\n usedAddresses,\n utxos,\n willAutoConnect,\n }),\n [\n activeWallet,\n adaBalance,\n balance,\n collateral,\n connectWallet,\n disconnect,\n errorSyncing,\n feeAddress,\n isCip45,\n isPending,\n isReadOnlyMode,\n network,\n changeAddress,\n resyncMetadata,\n switching,\n syncWallet,\n unusedAddresses,\n usedAddresses,\n utxos,\n willAutoConnect,\n ],\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -15,4 +15,40 @@ export function useWalletObserverContext() {
15
15
  }
16
16
  return context;
17
17
  }
18
+
19
+ /**
20
+ * Focused context for stable actions and observer ref.
21
+ */
22
+ export const WalletActionsContext = /*#__PURE__*/createContext(undefined);
23
+
24
+ /**
25
+ * Focused context for connection and loading state.
26
+ */
27
+ export const WalletConnectionContext = /*#__PURE__*/createContext(undefined);
28
+
29
+ /**
30
+ * Focused context for wallet data that changes every sync.
31
+ */
32
+ export const WalletDataContext = /*#__PURE__*/createContext(undefined);
33
+ export function useWalletActionsContext() {
34
+ const context = useContext(WalletActionsContext);
35
+ if (!context) {
36
+ throw new Error("useWalletActionsContext must be used within a WalletObserverProvider");
37
+ }
38
+ return context;
39
+ }
40
+ export function useWalletConnectionContext() {
41
+ const context = useContext(WalletConnectionContext);
42
+ if (!context) {
43
+ throw new Error("useWalletConnectionContext must be used within a WalletObserverProvider");
44
+ }
45
+ return context;
46
+ }
47
+ export function useWalletDataContext() {
48
+ const context = useContext(WalletDataContext);
49
+ if (!context) {
50
+ throw new Error("useWalletDataContext must be used within a WalletObserverProvider");
51
+ }
52
+ return context;
53
+ }
18
54
  //# sourceMappingURL=context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","names":["createContext","useContext","WalletObserverContext","undefined","useWalletObserverContext","context","Error"],"sources":["../../../../../src/react-components/contexts/observer/context.ts"],"sourcesContent":["import { IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport { createContext, useContext } from \"react\";\n\nimport { IWalletObserverState } from \"./types.js\";\n\n/**\n * Context instance.\n */\nexport const WalletObserverContext = createContext<\n IWalletObserverState | undefined\n>(undefined);\n\n/**\n * Usability function to avoid needing to do two imports.\n * @returns {IWalletObserverState<AssetMetadata>}\n */\nexport function useWalletObserverContext<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n>(): IWalletObserverState<AssetMetadata> {\n const context = useContext(\n WalletObserverContext,\n ) as unknown as IWalletObserverState<AssetMetadata>;\n\n if (!context) {\n throw new Error(\n \"useWalletObserverContext must be used within a WalletObserverProvider\",\n );\n }\n\n return context;\n}\n"],"mappings":"AACA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;AAIjD;AACA;AACA;AACA,OAAO,MAAMC,qBAAqB,gBAAGF,aAAa,CAEhDG,SAAS,CAAC;;AAEZ;AACA;AACA;AACA;AACA,OAAO,SAASC,wBAAwBA,CAAA,EAEC;EACvC,MAAMC,OAAO,GAAGJ,UAAU,CACxBC,qBACF,CAAmD;EAEnD,IAAI,CAACG,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CACb,uEACF,CAAC;EACH;EAEA,OAAOD,OAAO;AAChB","ignoreList":[]}
1
+ {"version":3,"file":"context.js","names":["createContext","useContext","WalletObserverContext","undefined","useWalletObserverContext","context","Error","WalletActionsContext","WalletConnectionContext","WalletDataContext","useWalletActionsContext","useWalletConnectionContext","useWalletDataContext"],"sources":["../../../../../src/react-components/contexts/observer/context.ts"],"sourcesContent":["import { IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport { createContext, useContext } from \"react\";\n\nimport {\n IWalletObserverActionsContext,\n IWalletObserverConnectionContext,\n IWalletObserverState,\n IWalletObserverWalletDataContext,\n} from \"./types.js\";\n\n/**\n * Context instance.\n */\nexport const WalletObserverContext = createContext<\n IWalletObserverState | undefined\n>(undefined);\n\n/**\n * Usability function to avoid needing to do two imports.\n * @returns {IWalletObserverState<AssetMetadata>}\n */\nexport function useWalletObserverContext<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n>(): IWalletObserverState<AssetMetadata> {\n const context = useContext(\n WalletObserverContext,\n ) as unknown as IWalletObserverState<AssetMetadata>;\n\n if (!context) {\n throw new Error(\n \"useWalletObserverContext must be used within a WalletObserverProvider\",\n );\n }\n\n return context;\n}\n\n/**\n * Focused context for stable actions and observer ref.\n */\nexport const WalletActionsContext = createContext<\n IWalletObserverActionsContext | undefined\n>(undefined);\n\n/**\n * Focused context for connection and loading state.\n */\nexport const WalletConnectionContext = createContext<\n IWalletObserverConnectionContext | undefined\n>(undefined);\n\n/**\n * Focused context for wallet data that changes every sync.\n */\nexport const WalletDataContext = createContext<\n IWalletObserverWalletDataContext | undefined\n>(undefined);\n\nexport function useWalletActionsContext<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n>(): IWalletObserverActionsContext<AssetMetadata> {\n const context = useContext(\n WalletActionsContext,\n ) as unknown as IWalletObserverActionsContext<AssetMetadata>;\n\n if (!context) {\n throw new Error(\n \"useWalletActionsContext must be used within a WalletObserverProvider\",\n );\n }\n\n return context;\n}\n\nexport function useWalletConnectionContext(): IWalletObserverConnectionContext {\n const context = useContext(WalletConnectionContext);\n\n if (!context) {\n throw new Error(\n \"useWalletConnectionContext must be used within a WalletObserverProvider\",\n );\n }\n\n return context;\n}\n\nexport function useWalletDataContext<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n>(): IWalletObserverWalletDataContext<AssetMetadata> {\n const context = useContext(\n WalletDataContext,\n ) as unknown as IWalletObserverWalletDataContext<AssetMetadata>;\n\n if (!context) {\n throw new Error(\n \"useWalletDataContext must be used within a WalletObserverProvider\",\n );\n }\n\n return context;\n}\n"],"mappings":"AACA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;AASjD;AACA;AACA;AACA,OAAO,MAAMC,qBAAqB,gBAAGF,aAAa,CAEhDG,SAAS,CAAC;;AAEZ;AACA;AACA;AACA;AACA,OAAO,SAASC,wBAAwBA,CAAA,EAEC;EACvC,MAAMC,OAAO,GAAGJ,UAAU,CACxBC,qBACF,CAAmD;EAEnD,IAAI,CAACG,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CACb,uEACF,CAAC;EACH;EAEA,OAAOD,OAAO;AAChB;;AAEA;AACA;AACA;AACA,OAAO,MAAME,oBAAoB,gBAAGP,aAAa,CAE/CG,SAAS,CAAC;;AAEZ;AACA;AACA;AACA,OAAO,MAAMK,uBAAuB,gBAAGR,aAAa,CAElDG,SAAS,CAAC;;AAEZ;AACA;AACA;AACA,OAAO,MAAMM,iBAAiB,gBAAGT,aAAa,CAE5CG,SAAS,CAAC;AAEZ,OAAO,SAASO,uBAAuBA,CAAA,EAEW;EAChD,MAAML,OAAO,GAAGJ,UAAU,CACxBM,oBACF,CAA4D;EAE5D,IAAI,CAACF,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CACb,sEACF,CAAC;EACH;EAEA,OAAOD,OAAO;AAChB;AAEA,OAAO,SAASM,0BAA0BA,CAAA,EAAqC;EAC7E,MAAMN,OAAO,GAAGJ,UAAU,CAACO,uBAAuB,CAAC;EAEnD,IAAI,CAACH,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CACb,yEACF,CAAC;EACH;EAEA,OAAOD,OAAO;AAChB;AAEA,OAAO,SAASO,oBAAoBA,CAAA,EAEiB;EACnD,MAAMP,OAAO,GAAGJ,UAAU,CACxBQ,iBACF,CAA+D;EAE/D,IAAI,CAACJ,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CACb,mEACF,CAAC;EACH;EAEA,OAAOD,OAAO;AAChB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../../src/react-components/contexts/observer/types.ts"],"sourcesContent":["import type { IHandle } from \"@koralabs/adahandle-sdk\";\nimport type { IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport type { MutableRefObject } from \"react\";\n\nimport type {\n IWalletObserverSync,\n TWalletObserverOptions,\n} from \"../../../@types/observer.js\";\nimport type { WalletObserver } from \"../../../classes/WalletObserver.class.js\";\nimport { useDerivedState } from \"../../WalletObserverProvider/hooks/effects/useDerivedState.js\";\nimport { useWalletObserverState } from \"../../WalletObserverProvider/hooks/useWalletObserverState.js\";\n\n/**\n * Available hooks to apply at various events.\n */\nexport type TWalletProviderHooks<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n> = {\n onSyncWalletStart?: () => Promise<void>;\n onSyncWalletEnd?: (\n data?: IWalletObserverSync<AssetMetadata> & { activeWallet: string },\n ) => Promise<void>;\n onConnectWalletStart?: () => Promise<void>;\n onConnectWalletEnd?: (\n data?: IWalletObserverSync<AssetMetadata> & { activeWallet: string },\n ) => Promise<void>;\n onDisconnectWallet?: () => Promise<void>;\n};\n\n/**\n * The resolved internal props of the WalletObserverProvider.\n */\nexport interface IWalletObserverProviderState<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n> {\n observerOptions: TWalletObserverOptions<AssetMetadata>;\n hooks: TWalletProviderHooks<AssetMetadata>;\n refreshInterval: number;\n}\n\n/**\n * The main WalletObserverProvider props.\n */\nexport interface IWalletObserverProviderProps<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n> {\n options?: Partial<IWalletObserverProviderState<AssetMetadata>>;\n /**\n * When provided, the provider will only sync the wallet when this value is `true`.\n * Useful for gating syncs until external dependencies (e.g. a metadata resolver) are ready.\n * Defaults to `true` if not provided.\n */\n loading?: boolean;\n}\n\n/**\n * The WalletObserverProvider's internal state.\n */\nexport interface IWalletObserverState<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n> {\n observerRef: MutableRefObject<WalletObserver<AssetMetadata>>;\n refreshInterval: number | false;\n state: ReturnType<typeof useWalletObserverState<AssetMetadata>> &\n ReturnType<typeof useDerivedState> & {\n isPending: boolean;\n observer: WalletObserver<AssetMetadata>;\n connectingWallet: boolean;\n syncingWallet: boolean;\n ready: boolean;\n };\n}\n\n/**\n * A generic to extend the default IHandle type that comes\n * back from the Kora Lab's API, and merged with the metadata\n * returned from the metadataResolver.\n */\nexport type THandleMetadata<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n> = AssetMetadata & IHandle;\n\n/**\n * The exposed state of the WalletObserverProvider.\n */\nexport type TUseWalletObserverState<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n> = Omit<\n IWalletObserverState<AssetMetadata>[\"state\"],\n | \"setActiveWallet\"\n | \"setAdaBalance\"\n | \"setHandles\"\n | \"setSwitching\"\n | \"setBalance\"\n | \"setNetwork\"\n | \"setUnusedAddresses\"\n | \"setUsedAddresses\"\n | \"setReady\"\n | \"setIsCip45\"\n | \"setUtxos\"\n | \"setCollateral\"\n | \"setFeeAddress\"\n | \"setIsReadOnlyMode\"\n | \"setChangeAddress\"\n>;\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../../src/react-components/contexts/observer/types.ts"],"sourcesContent":["import type { IHandle } from \"@koralabs/adahandle-sdk\";\nimport type { AssetAmount, IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport type { MutableRefObject } from \"react\";\n\nimport type {\n IWalletObserverSync,\n TWalletObserverOptions,\n} from \"../../../@types/observer.js\";\nimport type { WalletBalanceMap } from \"../../../classes/WalletBalanceMap.class.js\";\nimport type { WalletObserver } from \"../../../classes/WalletObserver.class.js\";\nimport type { TransactionUnspentOutput } from \"@cardano-sdk/core/dist/cjs/Serialization/TransactionUnspentOutput.js\";\nimport { useDerivedState } from \"../../WalletObserverProvider/hooks/effects/useDerivedState.js\";\nimport { useWalletObserverState } from \"../../WalletObserverProvider/hooks/useWalletObserverState.js\";\n\n/**\n * Available hooks to apply at various events.\n */\nexport type TWalletProviderHooks<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n> = {\n onSyncWalletStart?: () => Promise<void>;\n onSyncWalletEnd?: (\n data?: IWalletObserverSync<AssetMetadata> & { activeWallet: string },\n ) => Promise<void>;\n onConnectWalletStart?: () => Promise<void>;\n onConnectWalletEnd?: (\n data?: IWalletObserverSync<AssetMetadata> & { activeWallet: string },\n ) => Promise<void>;\n onDisconnectWallet?: () => Promise<void>;\n};\n\n/**\n * The resolved internal props of the WalletObserverProvider.\n */\nexport interface IWalletObserverProviderState<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n> {\n observerOptions: TWalletObserverOptions<AssetMetadata>;\n hooks: TWalletProviderHooks<AssetMetadata>;\n refreshInterval: number;\n}\n\n/**\n * The main WalletObserverProvider props.\n */\nexport interface IWalletObserverProviderProps<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n> {\n options?: Partial<IWalletObserverProviderState<AssetMetadata>>;\n /**\n * When provided, the provider will only sync the wallet when this value is `true`.\n * Useful for gating syncs until external dependencies (e.g. a metadata resolver) are ready.\n * Defaults to `true` if not provided.\n */\n loading?: boolean;\n}\n\n/**\n * The WalletObserverProvider's internal state.\n */\nexport interface IWalletObserverState<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n> {\n observerRef: MutableRefObject<WalletObserver<AssetMetadata>>;\n refreshInterval: number | false;\n state: ReturnType<typeof useWalletObserverState<AssetMetadata>> &\n ReturnType<typeof useDerivedState> & {\n isPending: boolean;\n observer: WalletObserver<AssetMetadata>;\n connectingWallet: boolean;\n syncingWallet: boolean;\n ready: boolean;\n };\n}\n\n/**\n * Focused context: stable callbacks and observer reference.\n * Rarely changes — only if the observer instance is recreated.\n */\nexport interface IWalletObserverActionsContext<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n> {\n observer: WalletObserver<AssetMetadata>;\n observerRef: MutableRefObject<WalletObserver<AssetMetadata>>;\n connectWallet: (wallet: string) => Promise<unknown>;\n disconnect: () => void;\n syncWallet: (\n importedData?: IWalletObserverSync<AssetMetadata>,\n ) => Promise<void>;\n resyncMetadata: () => Promise<void>;\n}\n\n/**\n * Focused context: connection and loading state.\n * Changes on connect/disconnect and sync start/end.\n */\nexport interface IWalletObserverConnectionContext {\n activeWallet: string | undefined;\n ready: boolean;\n connectingWallet: boolean;\n syncingWallet: boolean;\n network: number | undefined;\n isCip45: boolean;\n switching: boolean;\n isReadOnlyMode: boolean;\n willAutoConnect: boolean;\n errorSyncing: boolean;\n mainAddress: string | undefined;\n stakeAddress: string | undefined;\n}\n\n/**\n * Focused context: wallet data that changes every sync cycle.\n */\nexport interface IWalletObserverWalletDataContext<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n> {\n balance: WalletBalanceMap<AssetMetadata>;\n adaBalance: AssetAmount<AssetMetadata>;\n usedAddresses: string[];\n unusedAddresses: string[];\n changeAddress: string | undefined;\n feeAddress: string | undefined;\n utxos: TransactionUnspentOutput[] | undefined;\n collateral: TransactionUnspentOutput[] | undefined;\n isPending: boolean;\n refreshInterval: number | false;\n}\n\n/**\n * A generic to extend the default IHandle type that comes\n * back from the Kora Lab's API, and merged with the metadata\n * returned from the metadataResolver.\n */\nexport type THandleMetadata<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n> = AssetMetadata & IHandle;\n\n/**\n * The exposed state of the WalletObserverProvider.\n */\nexport type TUseWalletObserverState<\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n> = Omit<\n IWalletObserverState<AssetMetadata>[\"state\"],\n | \"setActiveWallet\"\n | \"setAdaBalance\"\n | \"setHandles\"\n | \"setSwitching\"\n | \"setBalance\"\n | \"setNetwork\"\n | \"setUnusedAddresses\"\n | \"setUsedAddresses\"\n | \"setReady\"\n | \"setIsCip45\"\n | \"setUtxos\"\n | \"setCollateral\"\n | \"setFeeAddress\"\n | \"setIsReadOnlyMode\"\n | \"setChangeAddress\"\n>;\n"],"mappings":"","ignoreList":[]}
@@ -1,12 +1,14 @@
1
1
  import { useCallback, useMemo, useState } from "react";
2
- import { useWalletObserver } from "./useWalletObserver";
2
+ import { useWalletActionsContext } from "../contexts/observer/context.js";
3
3
  export const useWalletData = () => {
4
- const state = useWalletObserver();
4
+ const {
5
+ observer
6
+ } = useWalletActionsContext();
5
7
  const [signedData, setSignedData] = useState();
6
8
  const [isSigningData, setIsSigningData] = useState(false);
7
9
  const [error, setError] = useState();
8
10
  const signData = useCallback(async params => {
9
- if (!state.observer.api) {
11
+ if (!observer.api) {
10
12
  return;
11
13
  }
12
14
  const [{
@@ -22,7 +24,7 @@ export const useWalletData = () => {
22
24
  }] = await Promise.all([import("@cardano-sdk/core"), import("@cardano-sdk/crypto"), import("@emurgo/cardano-message-signing-nodejs")]);
23
25
  setIsSigningData(true);
24
26
  try {
25
- const response = await state.observer.api.signData(Cardano.Address.fromBech32(params.signingAddress).toBytes(), Buffer.from(typeof params.payload === "string" ? params.payload : JSON.stringify(params.payload, null, 0), "utf-8").toString("hex"));
27
+ const response = await observer.api.signData(Cardano.Address.fromBech32(params.signingAddress).toBytes(), Buffer.from(typeof params.payload === "string" ? params.payload : JSON.stringify(params.payload, null, 0), "utf-8").toString("hex"));
26
28
  const coseSign1 = COSESign1.from_bytes(new Uint8Array(Buffer.from(response.signature, "hex")));
27
29
  const keySign = COSEKey.from_bytes(new Uint8Array(Buffer.from(response.key, "hex")));
28
30
  const labelInt = Int.new_negative(BigNum.from_str("2"));
@@ -42,7 +44,7 @@ export const useWalletData = () => {
42
44
  setIsSigningData(false);
43
45
  setError(e);
44
46
  }
45
- }, [state.observer.api]);
47
+ }, [observer.api]);
46
48
  return useMemo(() => ({
47
49
  signData,
48
50
  signedData,
@@ -1 +1 @@
1
- {"version":3,"file":"useWalletData.js","names":["useCallback","useMemo","useState","useWalletObserver","useWalletData","state","signedData","setSignedData","isSigningData","setIsSigningData","error","setError","signData","params","observer","api","Cardano","Ed25519Signature","COSESign1","COSEKey","Int","BigNum","Label","Promise","all","response","Address","fromBech32","signingAddress","toBytes","Buffer","from","payload","JSON","stringify","toString","coseSign1","from_bytes","Uint8Array","signature","keySign","key","labelInt","new_negative","from_str","data","signed_data","to_bytes","fromBytes","hex","header","new_int","as_bytes","rawData","cborKey","cborSignature","e"],"sources":["../../../../src/react-components/hooks/useWalletData.ts"],"sourcesContent":["import { IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport { useCallback, useMemo, useState } from \"react\";\n\nimport { DataSignError } from \"@cardano-sdk/dapp-connector\";\nimport { useWalletObserver } from \"./useWalletObserver\";\n\nexport interface ISignedData {\n payload: string;\n signature: string;\n key: string;\n rawData: {\n cborKey: string;\n cborSignature: string;\n };\n}\n\nexport interface ISignDataParams<T = object | string> {\n payload: T;\n signingAddress: string;\n}\n\nexport const useWalletData = <\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n>() => {\n const state = useWalletObserver<AssetMetadata>();\n const [signedData, setSignedData] = useState<ISignedData>();\n const [isSigningData, setIsSigningData] = useState(false);\n const [error, setError] = useState<DataSignError>();\n\n const signData = useCallback(\n async (params: ISignDataParams) => {\n if (!state.observer.api) {\n return;\n }\n\n const [\n { Cardano },\n { Ed25519Signature },\n { COSESign1, COSEKey, Int, BigNum, Label },\n ] = await Promise.all([\n import(\"@cardano-sdk/core\"),\n import(\"@cardano-sdk/crypto\"),\n import(\"@emurgo/cardano-message-signing-nodejs\"),\n ]);\n\n setIsSigningData(true);\n\n try {\n const response = await state.observer.api.signData(\n Cardano.Address.fromBech32(params.signingAddress).toBytes(),\n Buffer.from(\n typeof params.payload === \"string\"\n ? params.payload\n : JSON.stringify(params.payload, null, 0),\n \"utf-8\",\n ).toString(\"hex\"),\n );\n\n const coseSign1 = COSESign1.from_bytes(\n new Uint8Array(Buffer.from(response.signature, \"hex\")),\n );\n const keySign = COSEKey.from_bytes(\n new Uint8Array(Buffer.from(response.key, \"hex\")),\n );\n const labelInt = Int.new_negative(BigNum.from_str(\"2\"));\n\n const data: ISignedData = {\n payload: Buffer.from(coseSign1.signed_data().to_bytes()).toString(\n \"hex\",\n ),\n signature: Ed25519Signature.fromBytes(coseSign1.signature()).hex(),\n key: Buffer.from(\n keySign.header(Label.new_int(labelInt))?.as_bytes() || [],\n ).toString(\"hex\"),\n rawData: { cborKey: response.key, cborSignature: response.signature },\n };\n\n setSignedData(data);\n setIsSigningData(false);\n return data;\n } catch (e) {\n setIsSigningData(false);\n setError(e as DataSignError);\n }\n },\n [state.observer.api],\n );\n\n return useMemo(\n () => ({\n signData,\n signedData,\n isSigningData,\n error,\n }),\n [signData, signedData, isSigningData, error],\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useWalletData.js","names":["useCallback","useMemo","useState","useWalletActionsContext","useWalletData","observer","signedData","setSignedData","isSigningData","setIsSigningData","error","setError","signData","params","api","Cardano","Ed25519Signature","COSESign1","COSEKey","Int","BigNum","Label","Promise","all","response","Address","fromBech32","signingAddress","toBytes","Buffer","from","payload","JSON","stringify","toString","coseSign1","from_bytes","Uint8Array","signature","keySign","key","labelInt","new_negative","from_str","data","signed_data","to_bytes","fromBytes","hex","header","new_int","as_bytes","rawData","cborKey","cborSignature","e"],"sources":["../../../../src/react-components/hooks/useWalletData.ts"],"sourcesContent":["import { IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport { useCallback, useMemo, useState } from \"react\";\n\nimport { DataSignError } from \"@cardano-sdk/dapp-connector\";\nimport { useWalletActionsContext } from \"../contexts/observer/context.js\";\n\nexport interface ISignedData {\n payload: string;\n signature: string;\n key: string;\n rawData: {\n cborKey: string;\n cborSignature: string;\n };\n}\n\nexport interface ISignDataParams<T = object | string> {\n payload: T;\n signingAddress: string;\n}\n\nexport const useWalletData = <\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n>() => {\n const { observer } = useWalletActionsContext<AssetMetadata>();\n const [signedData, setSignedData] = useState<ISignedData>();\n const [isSigningData, setIsSigningData] = useState(false);\n const [error, setError] = useState<DataSignError>();\n\n const signData = useCallback(\n async (params: ISignDataParams) => {\n if (!observer.api) {\n return;\n }\n\n const [\n { Cardano },\n { Ed25519Signature },\n { COSESign1, COSEKey, Int, BigNum, Label },\n ] = await Promise.all([\n import(\"@cardano-sdk/core\"),\n import(\"@cardano-sdk/crypto\"),\n import(\"@emurgo/cardano-message-signing-nodejs\"),\n ]);\n\n setIsSigningData(true);\n\n try {\n const response = await observer.api.signData(\n Cardano.Address.fromBech32(params.signingAddress).toBytes(),\n Buffer.from(\n typeof params.payload === \"string\"\n ? params.payload\n : JSON.stringify(params.payload, null, 0),\n \"utf-8\",\n ).toString(\"hex\"),\n );\n\n const coseSign1 = COSESign1.from_bytes(\n new Uint8Array(Buffer.from(response.signature, \"hex\")),\n );\n const keySign = COSEKey.from_bytes(\n new Uint8Array(Buffer.from(response.key, \"hex\")),\n );\n const labelInt = Int.new_negative(BigNum.from_str(\"2\"));\n\n const data: ISignedData = {\n payload: Buffer.from(coseSign1.signed_data().to_bytes()).toString(\n \"hex\",\n ),\n signature: Ed25519Signature.fromBytes(coseSign1.signature()).hex(),\n key: Buffer.from(\n keySign.header(Label.new_int(labelInt))?.as_bytes() || [],\n ).toString(\"hex\"),\n rawData: { cborKey: response.key, cborSignature: response.signature },\n };\n\n setSignedData(data);\n setIsSigningData(false);\n return data;\n } catch (e) {\n setIsSigningData(false);\n setError(e as DataSignError);\n }\n },\n [observer.api],\n );\n\n return useMemo(\n () => ({\n signData,\n signedData,\n isSigningData,\n error,\n }),\n [signData, signedData, isSigningData, error],\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,18 +1,24 @@
1
1
  import { useQuery } from "@tanstack/react-query";
2
2
  import { useMemo } from "react";
3
3
  import { getHandleMetadata } from "../../utils/handles.js";
4
- import { useWalletObserver } from "./useWalletObserver.js";
4
+ import { useWalletConnectionContext, useWalletDataContext } from "../contexts/observer/context.js";
5
5
  export const useWalletHandles = () => {
6
- const state = useWalletObserver();
7
- const memoizedHandleDep = useMemo(() => [...state.balance.getHandles().keys()], [state.balance]);
8
- const queryKey = useMemo(() => [memoizedHandleDep, state.mainAddress, state.network], [memoizedHandleDep, state.mainAddress, state.network]);
6
+ const {
7
+ balance
8
+ } = useWalletDataContext();
9
+ const {
10
+ mainAddress,
11
+ network
12
+ } = useWalletConnectionContext();
13
+ const memoizedHandleDep = useMemo(() => [...balance.getHandles().keys()], [balance]);
14
+ const queryKey = useMemo(() => [memoizedHandleDep, mainAddress, network], [memoizedHandleDep, mainAddress, network]);
9
15
  const {
10
16
  data: handles,
11
17
  isLoading
12
18
  } = useQuery({
13
19
  queryKey,
14
20
  queryFn: async () => {
15
- const result = await getHandleMetadata(state.balance.getHandles(), state.network || 0);
21
+ const result = await getHandleMetadata(balance.getHandles(), network || 0);
16
22
  return result;
17
23
  },
18
24
  refetchInterval: false,
@@ -1 +1 @@
1
- {"version":3,"file":"useWalletHandles.js","names":["useQuery","useMemo","getHandleMetadata","useWalletObserver","useWalletHandles","state","memoizedHandleDep","balance","getHandles","keys","queryKey","mainAddress","network","data","handles","isLoading","queryFn","result","refetchInterval","notifyOnChangeProps","memoizedResult","loadingHandles","totalCount","length"],"sources":["../../../../src/react-components/hooks/useWalletHandles.ts"],"sourcesContent":["import { IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useMemo } from \"react\";\n\nimport { WalletAssetMap } from \"../../classes/WalletAssetMap.class.js\";\nimport { getHandleMetadata } from \"../../utils/handles.js\";\nimport { THandleMetadata } from \"../contexts/observer/types.js\";\nimport { useWalletObserver } from \"./useWalletObserver.js\";\n\nexport const useWalletHandles = <\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n>() => {\n const state = useWalletObserver<AssetMetadata>();\n const memoizedHandleDep = useMemo(\n () => [...state.balance.getHandles().keys()],\n [state.balance],\n );\n\n const queryKey = useMemo(\n () => [memoizedHandleDep, state.mainAddress, state.network],\n [memoizedHandleDep, state.mainAddress, state.network],\n );\n const { data: handles, isLoading } = useQuery<\n WalletAssetMap<THandleMetadata<AssetMetadata>> | undefined\n >({\n queryKey,\n queryFn: async () => {\n const result = await getHandleMetadata(\n state.balance.getHandles(),\n state.network || 0,\n );\n\n return result;\n },\n refetchInterval: false,\n notifyOnChangeProps: [\"data\", \"isLoading\"],\n });\n\n const memoizedResult = useMemo(\n () => ({\n handles,\n loadingHandles: isLoading,\n totalCount: memoizedHandleDep.length,\n }),\n [handles, isLoading, memoizedHandleDep],\n );\n\n return memoizedResult;\n};\n"],"mappings":"AACA,SAASA,QAAQ,QAAQ,uBAAuB;AAChD,SAASC,OAAO,QAAQ,OAAO;AAG/B,SAASC,iBAAiB,QAAQ,wBAAwB;AAE1D,SAASC,iBAAiB,QAAQ,wBAAwB;AAE1D,OAAO,MAAMC,gBAAgB,GAAGA,CAAA,KAEzB;EACL,MAAMC,KAAK,GAAGF,iBAAiB,CAAgB,CAAC;EAChD,MAAMG,iBAAiB,GAAGL,OAAO,CAC/B,MAAM,CAAC,GAAGI,KAAK,CAACE,OAAO,CAACC,UAAU,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC,EAC5C,CAACJ,KAAK,CAACE,OAAO,CAChB,CAAC;EAED,MAAMG,QAAQ,GAAGT,OAAO,CACtB,MAAM,CAACK,iBAAiB,EAAED,KAAK,CAACM,WAAW,EAAEN,KAAK,CAACO,OAAO,CAAC,EAC3D,CAACN,iBAAiB,EAAED,KAAK,CAACM,WAAW,EAAEN,KAAK,CAACO,OAAO,CACtD,CAAC;EACD,MAAM;IAAEC,IAAI,EAAEC,OAAO;IAAEC;EAAU,CAAC,GAAGf,QAAQ,CAE3C;IACAU,QAAQ;IACRM,OAAO,EAAE,MAAAA,CAAA,KAAY;MACnB,MAAMC,MAAM,GAAG,MAAMf,iBAAiB,CACpCG,KAAK,CAACE,OAAO,CAACC,UAAU,CAAC,CAAC,EAC1BH,KAAK,CAACO,OAAO,IAAI,CACnB,CAAC;MAED,OAAOK,MAAM;IACf,CAAC;IACDC,eAAe,EAAE,KAAK;IACtBC,mBAAmB,EAAE,CAAC,MAAM,EAAE,WAAW;EAC3C,CAAC,CAAC;EAEF,MAAMC,cAAc,GAAGnB,OAAO,CAC5B,OAAO;IACLa,OAAO;IACPO,cAAc,EAAEN,SAAS;IACzBO,UAAU,EAAEhB,iBAAiB,CAACiB;EAChC,CAAC,CAAC,EACF,CAACT,OAAO,EAAEC,SAAS,EAAET,iBAAiB,CACxC,CAAC;EAED,OAAOc,cAAc;AACvB,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"useWalletHandles.js","names":["useQuery","useMemo","getHandleMetadata","useWalletConnectionContext","useWalletDataContext","useWalletHandles","balance","mainAddress","network","memoizedHandleDep","getHandles","keys","queryKey","data","handles","isLoading","queryFn","result","refetchInterval","notifyOnChangeProps","memoizedResult","loadingHandles","totalCount","length"],"sources":["../../../../src/react-components/hooks/useWalletHandles.ts"],"sourcesContent":["import { IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport { useMemo } from \"react\";\n\nimport { WalletAssetMap } from \"../../classes/WalletAssetMap.class.js\";\nimport { getHandleMetadata } from \"../../utils/handles.js\";\nimport { THandleMetadata } from \"../contexts/observer/types.js\";\nimport {\n useWalletConnectionContext,\n useWalletDataContext,\n} from \"../contexts/observer/context.js\";\n\nexport const useWalletHandles = <\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n>() => {\n const { balance } = useWalletDataContext<AssetMetadata>();\n const { mainAddress, network } = useWalletConnectionContext();\n\n const memoizedHandleDep = useMemo(\n () => [...balance.getHandles().keys()],\n [balance],\n );\n\n const queryKey = useMemo(\n () => [memoizedHandleDep, mainAddress, network],\n [memoizedHandleDep, mainAddress, network],\n );\n const { data: handles, isLoading } = useQuery<\n WalletAssetMap<THandleMetadata<AssetMetadata>> | undefined\n >({\n queryKey,\n queryFn: async () => {\n const result = await getHandleMetadata(\n balance.getHandles(),\n network || 0,\n );\n\n return result;\n },\n refetchInterval: false,\n notifyOnChangeProps: [\"data\", \"isLoading\"],\n });\n\n const memoizedResult = useMemo(\n () => ({\n handles,\n loadingHandles: isLoading,\n totalCount: memoizedHandleDep.length,\n }),\n [handles, isLoading, memoizedHandleDep],\n );\n\n return memoizedResult;\n};\n"],"mappings":"AACA,SAASA,QAAQ,QAAQ,uBAAuB;AAChD,SAASC,OAAO,QAAQ,OAAO;AAG/B,SAASC,iBAAiB,QAAQ,wBAAwB;AAE1D,SACEC,0BAA0B,EAC1BC,oBAAoB,QACf,iCAAiC;AAExC,OAAO,MAAMC,gBAAgB,GAAGA,CAAA,KAEzB;EACL,MAAM;IAAEC;EAAQ,CAAC,GAAGF,oBAAoB,CAAgB,CAAC;EACzD,MAAM;IAAEG,WAAW;IAAEC;EAAQ,CAAC,GAAGL,0BAA0B,CAAC,CAAC;EAE7D,MAAMM,iBAAiB,GAAGR,OAAO,CAC/B,MAAM,CAAC,GAAGK,OAAO,CAACI,UAAU,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC,CAAC,EACtC,CAACL,OAAO,CACV,CAAC;EAED,MAAMM,QAAQ,GAAGX,OAAO,CACtB,MAAM,CAACQ,iBAAiB,EAAEF,WAAW,EAAEC,OAAO,CAAC,EAC/C,CAACC,iBAAiB,EAAEF,WAAW,EAAEC,OAAO,CAC1C,CAAC;EACD,MAAM;IAAEK,IAAI,EAAEC,OAAO;IAAEC;EAAU,CAAC,GAAGf,QAAQ,CAE3C;IACAY,QAAQ;IACRI,OAAO,EAAE,MAAAA,CAAA,KAAY;MACnB,MAAMC,MAAM,GAAG,MAAMf,iBAAiB,CACpCI,OAAO,CAACI,UAAU,CAAC,CAAC,EACpBF,OAAO,IAAI,CACb,CAAC;MAED,OAAOS,MAAM;IACf,CAAC;IACDC,eAAe,EAAE,KAAK;IACtBC,mBAAmB,EAAE,CAAC,MAAM,EAAE,WAAW;EAC3C,CAAC,CAAC;EAEF,MAAMC,cAAc,GAAGnB,OAAO,CAC5B,OAAO;IACLa,OAAO;IACPO,cAAc,EAAEN,SAAS;IACzBO,UAAU,EAAEb,iBAAiB,CAACc;EAChC,CAAC,CAAC,EACF,CAACT,OAAO,EAAEC,SAAS,EAAEN,iBAAiB,CACxC,CAAC;EAED,OAAOW,cAAc;AACvB,CAAC","ignoreList":[]}
@@ -1,15 +1,13 @@
1
1
  import { useMemo } from "react";
2
- import { useWalletObserverContext } from "../contexts/observer/context.js";
2
+ import { useWalletConnectionContext } from "../contexts/observer/context.js";
3
3
  export const useWalletLoadingState = () => {
4
- const {
5
- state
6
- } = useWalletObserverContext();
4
+ const connection = useWalletConnectionContext();
7
5
  const result = useMemo(() => ({
8
- connectingWallet: state.connectingWallet,
9
- syncingWallet: state.syncingWallet,
10
- switchingWallet: state.switching,
11
- ready: state.ready
12
- }), [state.ready, state.syncingWallet, state.connectingWallet, state.switching]);
6
+ connectingWallet: connection.connectingWallet,
7
+ syncingWallet: connection.syncingWallet,
8
+ switchingWallet: connection.switching,
9
+ ready: connection.ready
10
+ }), [connection.ready, connection.syncingWallet, connection.connectingWallet, connection.switching]);
13
11
  return result;
14
12
  };
15
13
  //# sourceMappingURL=useWalletLoadingState.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useWalletLoadingState.js","names":["useMemo","useWalletObserverContext","useWalletLoadingState","state","result","connectingWallet","syncingWallet","switchingWallet","switching","ready"],"sources":["../../../../src/react-components/hooks/useWalletLoadingState.ts"],"sourcesContent":["import { IAssetAmountMetadata } from \"@sundaeswap/asset\";\nimport { useMemo } from \"react\";\n\nimport { useWalletObserverContext } from \"../contexts/observer/context.js\";\n\nexport const useWalletLoadingState = <\n AssetMetadata extends IAssetAmountMetadata = IAssetAmountMetadata,\n>() => {\n const { state } = useWalletObserverContext<AssetMetadata>();\n\n const result = useMemo(\n () => ({\n connectingWallet: state.connectingWallet,\n syncingWallet: state.syncingWallet,\n switchingWallet: state.switching,\n ready: state.ready,\n }),\n [state.ready, state.syncingWallet, state.connectingWallet, state.switching],\n );\n\n return result;\n};\n"],"mappings":"AACA,SAASA,OAAO,QAAQ,OAAO;AAE/B,SAASC,wBAAwB,QAAQ,iCAAiC;AAE1E,OAAO,MAAMC,qBAAqB,GAAGA,CAAA,KAE9B;EACL,MAAM;IAAEC;EAAM,CAAC,GAAGF,wBAAwB,CAAgB,CAAC;EAE3D,MAAMG,MAAM,GAAGJ,OAAO,CACpB,OAAO;IACLK,gBAAgB,EAAEF,KAAK,CAACE,gBAAgB;IACxCC,aAAa,EAAEH,KAAK,CAACG,aAAa;IAClCC,eAAe,EAAEJ,KAAK,CAACK,SAAS;IAChCC,KAAK,EAAEN,KAAK,CAACM;EACf,CAAC,CAAC,EACF,CAACN,KAAK,CAACM,KAAK,EAAEN,KAAK,CAACG,aAAa,EAAEH,KAAK,CAACE,gBAAgB,EAAEF,KAAK,CAACK,SAAS,CAC5E,CAAC;EAED,OAAOJ,MAAM;AACf,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"useWalletLoadingState.js","names":["useMemo","useWalletConnectionContext","useWalletLoadingState","connection","result","connectingWallet","syncingWallet","switchingWallet","switching","ready"],"sources":["../../../../src/react-components/hooks/useWalletLoadingState.ts"],"sourcesContent":["import { useMemo } from \"react\";\n\nimport { useWalletConnectionContext } from \"../contexts/observer/context.js\";\n\nexport const useWalletLoadingState = () => {\n const connection = useWalletConnectionContext();\n\n const result = useMemo(\n () => ({\n connectingWallet: connection.connectingWallet,\n syncingWallet: connection.syncingWallet,\n switchingWallet: connection.switching,\n ready: connection.ready,\n }),\n [\n connection.ready,\n connection.syncingWallet,\n connection.connectingWallet,\n connection.switching,\n ],\n );\n\n return result;\n};\n"],"mappings":"AAAA,SAASA,OAAO,QAAQ,OAAO;AAE/B,SAASC,0BAA0B,QAAQ,iCAAiC;AAE5E,OAAO,MAAMC,qBAAqB,GAAGA,CAAA,KAAM;EACzC,MAAMC,UAAU,GAAGF,0BAA0B,CAAC,CAAC;EAE/C,MAAMG,MAAM,GAAGJ,OAAO,CACpB,OAAO;IACLK,gBAAgB,EAAEF,UAAU,CAACE,gBAAgB;IAC7CC,aAAa,EAAEH,UAAU,CAACG,aAAa;IACvCC,eAAe,EAAEJ,UAAU,CAACK,SAAS;IACrCC,KAAK,EAAEN,UAAU,CAACM;EACpB,CAAC,CAAC,EACF,CACEN,UAAU,CAACM,KAAK,EAChBN,UAAU,CAACG,aAAa,EACxBH,UAAU,CAACE,gBAAgB,EAC3BF,UAAU,CAACK,SAAS,CAExB,CAAC;EAED,OAAOJ,MAAM;AACf,CAAC","ignoreList":[]}