@helium/helium-react-hooks 0.1.3 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/lib/cjs/hooks/useIdlAccount.js +2 -2
  2. package/lib/cjs/hooks/useIdlAccount.js.map +1 -1
  3. package/lib/cjs/hooks/useMint.js +2 -2
  4. package/lib/cjs/hooks/useMint.js.map +1 -1
  5. package/lib/cjs/hooks/useSolOwnedAmount.js +2 -2
  6. package/lib/cjs/hooks/useSolOwnedAmount.js.map +1 -1
  7. package/lib/cjs/hooks/useTokenAccount.js +2 -2
  8. package/lib/cjs/hooks/useTokenAccount.js.map +1 -1
  9. package/lib/cjs/index.js +1 -8
  10. package/lib/cjs/index.js.map +1 -1
  11. package/lib/esm/src/hooks/useIdlAccount.js +1 -1
  12. package/lib/esm/src/hooks/useIdlAccount.js.map +1 -1
  13. package/lib/esm/src/hooks/useMint.js +1 -1
  14. package/lib/esm/src/hooks/useMint.js.map +1 -1
  15. package/lib/esm/src/hooks/useSolOwnedAmount.js +1 -1
  16. package/lib/esm/src/hooks/useSolOwnedAmount.js.map +1 -1
  17. package/lib/esm/src/hooks/useTokenAccount.js +1 -1
  18. package/lib/esm/src/hooks/useTokenAccount.js.map +1 -1
  19. package/lib/esm/src/index.js +0 -3
  20. package/lib/esm/src/index.js.map +1 -1
  21. package/lib/esm/tsconfig.esm.tsbuildinfo +1 -1
  22. package/lib/types/src/hooks/useIdlAccount.d.ts +1 -1
  23. package/lib/types/src/hooks/useIdlAccount.d.ts.map +1 -1
  24. package/lib/types/src/hooks/useMint.d.ts +2 -2
  25. package/lib/types/src/hooks/useMint.d.ts.map +1 -1
  26. package/lib/types/src/hooks/useTokenAccount.d.ts +1 -1
  27. package/lib/types/src/hooks/useTokenAccount.d.ts.map +1 -1
  28. package/lib/types/src/index.d.ts +0 -5
  29. package/lib/types/src/index.d.ts.map +1 -1
  30. package/package.json +4 -3
  31. package/lib/cjs/contexts/accountContext.js +0 -47
  32. package/lib/cjs/contexts/accountContext.js.map +0 -1
  33. package/lib/cjs/hooks/useAccount.js +0 -172
  34. package/lib/cjs/hooks/useAccount.js.map +0 -1
  35. package/lib/cjs/hooks/useAccountFetchCache.js +0 -14
  36. package/lib/cjs/hooks/useAccountFetchCache.js.map +0 -1
  37. package/lib/esm/src/contexts/accountContext.js +0 -20
  38. package/lib/esm/src/contexts/accountContext.js.map +0 -1
  39. package/lib/esm/src/hooks/useAccount.js +0 -159
  40. package/lib/esm/src/hooks/useAccount.js.map +0 -1
  41. package/lib/esm/src/hooks/useAccountFetchCache.js +0 -10
  42. package/lib/esm/src/hooks/useAccountFetchCache.js.map +0 -1
  43. package/lib/types/src/contexts/accountContext.d.ts +0 -12
  44. package/lib/types/src/contexts/accountContext.d.ts.map +0 -1
  45. package/lib/types/src/hooks/useAccount.d.ts +0 -24
  46. package/lib/types/src/hooks/useAccount.d.ts.map +0 -1
  47. package/lib/types/src/hooks/useAccountFetchCache.d.ts +0 -6
  48. package/lib/types/src/hooks/useAccountFetchCache.d.ts.map +0 -1
@@ -1,172 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.useAccount = void 0;
13
- const react_1 = require("react");
14
- const useAccountFetchCache_1 = require("./useAccountFetchCache");
15
- const react_async_hook_1 = require("react-async-hook");
16
- /**
17
- * Generic hook to get a cached, auto updating, deserialized form of any Solana account. Massively saves on RPC usage by using
18
- * the spl-utils accountFetchCache.
19
- *
20
- * @param key
21
- * @param parser
22
- * @param isStatic
23
- * @returns
24
- */
25
- function useAccount(key, parser, isStatic = false) {
26
- const cache = (0, useAccountFetchCache_1.useAccountFetchCache)();
27
- const [state, setState] = (0, react_1.useState)({
28
- loading: true,
29
- });
30
- const parsedAccountBaseParser = (pubkey, data) => {
31
- try {
32
- if (parser) {
33
- const info = parser(pubkey, data);
34
- return {
35
- pubkey,
36
- account: data,
37
- info,
38
- };
39
- }
40
- return {
41
- pubkey,
42
- account: data,
43
- info: undefined,
44
- };
45
- }
46
- catch (e) {
47
- console.error(`Error while parsing: ${e.message}`);
48
- return {
49
- pubkey,
50
- account: data,
51
- info: undefined,
52
- };
53
- }
54
- };
55
- const id = typeof key === 'string' ? key : key === null || key === void 0 ? void 0 : key.toBase58();
56
- (0, react_async_hook_1.useAsync)(() => __awaiter(this, void 0, void 0, function* () {
57
- // Occassionally, dispose can get called while the cache promise is still going.
58
- // In that case, we want to dispose immediately.
59
- let shouldDisposeImmediately = false;
60
- let disposeWatch = () => {
61
- shouldDisposeImmediately = true;
62
- };
63
- if (!id || !cache) {
64
- setState((s) => (!s.loading ? s : { loading: false }));
65
- return;
66
- }
67
- setState((s) => (s.loading ? s : { loading: true }));
68
- let prevInfo = state.info;
69
- cache
70
- .searchAndWatch(id, parser ? parsedAccountBaseParser : undefined, isStatic)
71
- .then(([acc, dispose]) => {
72
- if (shouldDisposeImmediately) {
73
- dispose();
74
- shouldDisposeImmediately = false;
75
- }
76
- disposeWatch = dispose;
77
- if (acc) {
78
- try {
79
- const nextInfo = mergePublicKeys(prevInfo, parser && parser(acc.pubkey, acc === null || acc === void 0 ? void 0 : acc.account));
80
- prevInfo = nextInfo;
81
- setState({
82
- loading: false,
83
- info: nextInfo,
84
- account: acc.account,
85
- });
86
- }
87
- catch (e) {
88
- console.error(`Error while parsing: ${e.message}`);
89
- setState({
90
- loading: false,
91
- info: undefined,
92
- account: acc.account,
93
- });
94
- }
95
- }
96
- else {
97
- setState((s) => (!s.loading ? s : { loading: false }));
98
- }
99
- })
100
- .catch((e) => {
101
- console.error(e);
102
- setState((s) => (!s.loading ? s : { loading: false }));
103
- });
104
- const disposeEmitter = cache.emitter.onCache((e) => {
105
- const event = e;
106
- if (event.id === id) {
107
- cache
108
- .search(id, parser ? parsedAccountBaseParser : undefined)
109
- .then((acc) => {
110
- if (acc && acc.account !== state.account) {
111
- try {
112
- setState({
113
- loading: false,
114
- info: mergePublicKeys(state.info, parser && parser(acc.pubkey, acc.account)),
115
- account: acc.account,
116
- });
117
- }
118
- catch (err) {
119
- console.error(`Error while parsing: ${err.message}`);
120
- setState({
121
- loading: false,
122
- info: undefined,
123
- account: acc.account,
124
- });
125
- }
126
- }
127
- });
128
- }
129
- });
130
- return () => {
131
- disposeEmitter();
132
- setTimeout(disposeWatch, 30 * 1000); // Keep cached accounts around for 30s in case a rerender is causing reuse
133
- };
134
- }), [cache, id, !parser]); // only trigger on change to parser if it wasn't defined before.
135
- return state;
136
- }
137
- exports.useAccount = useAccount;
138
- /**
139
- *
140
- * @param input
141
- * @returns
142
- */
143
- function isPureObject(input) {
144
- return (input !== null &&
145
- typeof input === 'object' &&
146
- Object.getPrototypeOf(input).isPrototypeOf(Object));
147
- }
148
- /**
149
- * Updates to a solana account will contain new PublicKeys that are
150
- * actually the same, just a new JS object. This will cause a lot of useMemo
151
- * to fail.
152
- */
153
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
154
- function mergePublicKeys(arg0, arg1) {
155
- if (!isPureObject(arg1) || !arg1 || !arg0) {
156
- return arg1;
157
- }
158
- return Object.entries(arg1).reduce((acc, [key, value]) => {
159
- if (arg1[key] &&
160
- arg1[key].equals &&
161
- arg0[key] &&
162
- arg1[key].equals(arg0[key])) {
163
- acc[key] = arg0[key];
164
- }
165
- else {
166
- acc[key] = value;
167
- }
168
- return acc;
169
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
170
- }, {});
171
- }
172
- //# sourceMappingURL=useAccount.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAccount.js","sourceRoot":"","sources":["../../../src/hooks/useAccount.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useAccountFetchCache = void 0;
4
- const react_1 = require("react");
5
- const accountContext_1 = require("../contexts/accountContext");
6
- /**
7
- * Get the account fetch cache to save on rcp calls. Generally, you want to use {@link useAccount}
8
- * @returns
9
- */
10
- const useAccountFetchCache = () => {
11
- return (0, react_1.useContext)(accountContext_1.AccountContext);
12
- };
13
- exports.useAccountFetchCache = useAccountFetchCache;
14
- //# sourceMappingURL=useAccountFetchCache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAccountFetchCache.js","sourceRoot":"","sources":["../../../src/hooks/useAccountFetchCache.ts"],"names":[],"mappings":";;;AAAA,iCAAmC;AACnC,+DAA4D;AAE5D;;;GAGG;AACI,MAAM,oBAAoB,GAAG,GAAG,EAAE;IACvC,OAAO,IAAA,kBAAU,EAAC,+BAAc,CAAC,CAAC;AACpC,CAAC,CAAC;AAFW,QAAA,oBAAoB,wBAE/B"}
@@ -1,20 +0,0 @@
1
- import { AccountFetchCache } from "@helium/spl-utils";
2
- import React, { createContext, useEffect, useState, } from "react";
3
- export const AccountContext = createContext(undefined);
4
- export const AccountProvider = ({ children, commitment = "confirmed", extendConnection = true, connection }) => {
5
- const [cache, setCache] = useState();
6
- useEffect(() => {
7
- if (connection) {
8
- cache?.close();
9
- setCache(new AccountFetchCache({
10
- connection,
11
- delay: 50,
12
- commitment,
13
- extendConnection,
14
- }));
15
- }
16
- }, [connection]);
17
- return (React.createElement(AccountContext.Provider, { value: cache }, children));
18
- return null;
19
- };
20
- //# sourceMappingURL=accountContext.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"accountContext.js","sourceRoot":"","sources":["../../../../src/contexts/accountContext.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,EACZ,aAAa,EAGb,SAAS,EACT,QAAQ,GACT,MAAM,OAAO,CAAC;AASf,MAAM,CAAC,MAAM,cAAc,GAAG,aAAa,CACzC,SAAS,CACV,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAA8B,CAAC,EACzD,QAAQ,EACR,UAAU,GAAG,WAAW,EACxB,gBAAgB,GAAG,IAAI,EACvB,UAAU,EACX,EAAE,EAAE;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,EAAqB,CAAC;IACxD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,UAAU,EAAE;YACd,KAAK,EAAE,KAAK,EAAE,CAAC;YAEf,QAAQ,CACN,IAAI,iBAAiB,CAAC;gBACpB,UAAU;gBACV,KAAK,EAAE,EAAE;gBACT,UAAU;gBACV,gBAAgB;aACjB,CAAC,CACH,CAAC;SACH;IACH,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,OAAO,CACL,oBAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,IAAG,QAAQ,CAA2B,CAC5E,CAAC;IAEF,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
@@ -1,159 +0,0 @@
1
- import { useState } from "react";
2
- import { useAccountFetchCache } from "./useAccountFetchCache";
3
- import { useAsync } from 'react-async-hook';
4
- /**
5
- * Generic hook to get a cached, auto updating, deserialized form of any Solana account. Massively saves on RPC usage by using
6
- * the spl-utils accountFetchCache.
7
- *
8
- * @param key
9
- * @param parser
10
- * @param isStatic
11
- * @returns
12
- */
13
- export function useAccount(key, parser, isStatic = false) {
14
- const cache = useAccountFetchCache();
15
- const [state, setState] = useState({
16
- loading: true,
17
- });
18
- const parsedAccountBaseParser = (pubkey, data) => {
19
- try {
20
- if (parser) {
21
- const info = parser(pubkey, data);
22
- return {
23
- pubkey,
24
- account: data,
25
- info,
26
- };
27
- }
28
- return {
29
- pubkey,
30
- account: data,
31
- info: undefined,
32
- };
33
- }
34
- catch (e) {
35
- console.error(`Error while parsing: ${e.message}`);
36
- return {
37
- pubkey,
38
- account: data,
39
- info: undefined,
40
- };
41
- }
42
- };
43
- const id = typeof key === 'string' ? key : key?.toBase58();
44
- useAsync(async () => {
45
- // Occassionally, dispose can get called while the cache promise is still going.
46
- // In that case, we want to dispose immediately.
47
- let shouldDisposeImmediately = false;
48
- let disposeWatch = () => {
49
- shouldDisposeImmediately = true;
50
- };
51
- if (!id || !cache) {
52
- setState((s) => (!s.loading ? s : { loading: false }));
53
- return;
54
- }
55
- setState((s) => (s.loading ? s : { loading: true }));
56
- let prevInfo = state.info;
57
- cache
58
- .searchAndWatch(id, parser ? parsedAccountBaseParser : undefined, isStatic)
59
- .then(([acc, dispose]) => {
60
- if (shouldDisposeImmediately) {
61
- dispose();
62
- shouldDisposeImmediately = false;
63
- }
64
- disposeWatch = dispose;
65
- if (acc) {
66
- try {
67
- const nextInfo = mergePublicKeys(prevInfo, parser && parser(acc.pubkey, acc?.account));
68
- prevInfo = nextInfo;
69
- setState({
70
- loading: false,
71
- info: nextInfo,
72
- account: acc.account,
73
- });
74
- }
75
- catch (e) {
76
- console.error(`Error while parsing: ${e.message}`);
77
- setState({
78
- loading: false,
79
- info: undefined,
80
- account: acc.account,
81
- });
82
- }
83
- }
84
- else {
85
- setState((s) => (!s.loading ? s : { loading: false }));
86
- }
87
- })
88
- .catch((e) => {
89
- console.error(e);
90
- setState((s) => (!s.loading ? s : { loading: false }));
91
- });
92
- const disposeEmitter = cache.emitter.onCache((e) => {
93
- const event = e;
94
- if (event.id === id) {
95
- cache
96
- .search(id, parser ? parsedAccountBaseParser : undefined)
97
- .then((acc) => {
98
- if (acc && acc.account !== state.account) {
99
- try {
100
- setState({
101
- loading: false,
102
- info: mergePublicKeys(state.info, parser && parser(acc.pubkey, acc.account)),
103
- account: acc.account,
104
- });
105
- }
106
- catch (err) {
107
- console.error(`Error while parsing: ${err.message}`);
108
- setState({
109
- loading: false,
110
- info: undefined,
111
- account: acc.account,
112
- });
113
- }
114
- }
115
- });
116
- }
117
- });
118
- return () => {
119
- disposeEmitter();
120
- setTimeout(disposeWatch, 30 * 1000); // Keep cached accounts around for 30s in case a rerender is causing reuse
121
- };
122
- }, [cache, id, !parser]); // only trigger on change to parser if it wasn't defined before.
123
- return state;
124
- }
125
- /**
126
- *
127
- * @param input
128
- * @returns
129
- */
130
- function isPureObject(input) {
131
- return (input !== null &&
132
- typeof input === 'object' &&
133
- Object.getPrototypeOf(input).isPrototypeOf(Object));
134
- }
135
- /**
136
- * Updates to a solana account will contain new PublicKeys that are
137
- * actually the same, just a new JS object. This will cause a lot of useMemo
138
- * to fail.
139
- */
140
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
141
- function mergePublicKeys(arg0, arg1) {
142
- if (!isPureObject(arg1) || !arg1 || !arg0) {
143
- return arg1;
144
- }
145
- return Object.entries(arg1).reduce((acc, [key, value]) => {
146
- if (arg1[key] &&
147
- arg1[key].equals &&
148
- arg0[key] &&
149
- arg1[key].equals(arg0[key])) {
150
- acc[key] = arg0[key];
151
- }
152
- else {
153
- acc[key] = value;
154
- }
155
- return acc;
156
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
157
- }, {});
158
- }
159
- //# sourceMappingURL=useAccount.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAccount.js","sourceRoot":"","sources":["../../../../src/hooks/useAccount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAc3C;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU,CACxB,GAAiC,EACjC,MAA8B,EAC9B,QAAQ,GAAG,KAAK;IAEhB,MAAM,KAAK,GAAG,oBAAoB,EAAE,CAAC;IACrC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAqB;QACrD,OAAO,EAAE,IAAI;KACd,CAAC,CAAA;IAEF,MAAM,uBAAuB,GAAG,CAC9B,MAAiB,EACjB,IAAyB,EACN,EAAE;QACrB,IAAI;YACF,IAAI,MAAM,EAAE;gBACV,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;gBACjC,OAAO;oBACL,MAAM;oBACN,OAAO,EAAE,IAAI;oBACb,IAAI;iBACL,CAAA;aACF;YAED,OAAO;gBACL,MAAM;gBACN,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,SAAS;aAChB,CAAA;SACF;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,wBAAyB,CAAW,CAAC,OAAO,EAAE,CAAC,CAAA;YAC7D,OAAO;gBACL,MAAM;gBACN,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,SAAS;aAChB,CAAA;SACF;IACH,CAAC,CAAA;IAED,MAAM,EAAE,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAA;IAE1D,QAAQ,CAAC,KAAK,IAAI,EAAE;QAClB,gFAAgF;QAChF,gDAAgD;QAChD,IAAI,wBAAwB,GAAG,KAAK,CAAA;QACpC,IAAI,YAAY,GAAG,GAAG,EAAE;YACtB,wBAAwB,GAAG,IAAI,CAAA;QACjC,CAAC,CAAA;QACD,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,EAAE;YACjB,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;YACtD,OAAM;SACP;QACD,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACpD,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAA;QACzB,KAAK;aACF,cAAc,CACb,EAAE,EACF,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,EAC5C,QAAQ,CACT;aACA,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE;YACvB,IAAI,wBAAwB,EAAE;gBAC5B,OAAO,EAAE,CAAA;gBACT,wBAAwB,GAAG,KAAK,CAAA;aACjC;YACD,YAAY,GAAG,OAAO,CAAA;YACtB,IAAI,GAAG,EAAE;gBACP,IAAI;oBACF,MAAM,QAAQ,GAAG,eAAe,CAC9B,QAAQ,EACR,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,CAC3C,CAAA;oBACD,QAAQ,GAAG,QAAQ,CAAA;oBACnB,QAAQ,CAAC;wBACP,OAAO,EAAE,KAAK;wBACd,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,GAAG,CAAC,OAAO;qBACrB,CAAC,CAAA;iBACH;gBAAC,OAAO,CAAC,EAAE;oBACV,OAAO,CAAC,KAAK,CAAC,wBAAyB,CAAW,CAAC,OAAO,EAAE,CAAC,CAAA;oBAC7D,QAAQ,CAAC;wBACP,OAAO,EAAE,KAAK;wBACd,IAAI,EAAE,SAAS;wBACf,OAAO,EAAE,GAAG,CAAC,OAAO;qBACrB,CAAC,CAAA;iBACH;aACF;iBAAM;gBACL,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;aACvD;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;YAChB,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QACxD,CAAC,CAAC,CAAA;QACJ,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACjD,MAAM,KAAK,GAAG,CAAC,CAAA;YACf,IAAI,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE;gBACnB,KAAK;qBACF,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC;qBACxD,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;oBACZ,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE;wBACxC,IAAI;4BACF,QAAQ,CAAC;gCACP,OAAO,EAAE,KAAK;gCACd,IAAI,EAAE,eAAe,CACnB,KAAK,CAAC,IAAI,EACV,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAC1C;gCACD,OAAO,EAAE,GAAG,CAAC,OAAO;6BACrB,CAAC,CAAA;yBACH;wBAAC,OAAO,GAAG,EAAE;4BACZ,OAAO,CAAC,KAAK,CAAC,wBAAyB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAA;4BAC/D,QAAQ,CAAC;gCACP,OAAO,EAAE,KAAK;gCACd,IAAI,EAAE,SAAS;gCACf,OAAO,EAAE,GAAG,CAAC,OAAO;6BACrB,CAAC,CAAA;yBACH;qBACF;gBACH,CAAC,CAAC,CAAA;aACL;QACH,CAAC,CAAC,CAAA;QACF,OAAO,GAAG,EAAE;YACV,cAAc,EAAE,CAAA;YAChB,UAAU,CAAC,YAAY,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA,CAAC,0EAA0E;QAChH,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,gEAAgE;IAE1F,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;GAIG;AACH,SAAS,YAAY,CAAC,KAA2B;IAC/C,OAAO,CACL,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CACnD,CAAA;AACH,CAAC;AAED;;;;GAIG;AACH,8DAA8D;AAC9D,SAAS,eAAe,CAAC,IAAS,EAAE,IAAS;IAC3C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;QACzC,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACvD,IACE,IAAI,CAAC,GAAG,CAAC;YACT,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM;YAChB,IAAI,CAAC,GAAG,CAAC;YACT,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC3B;YACA,GAAG,CAAC,GAAuB,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;SACzC;aAAM;YACL,GAAG,CAAC,GAAuB,CAAC,GAAG,KAAK,CAAA;SACrC;QAED,OAAO,GAAG,CAAA;QACV,8DAA8D;IAChE,CAAC,EAAE,EAAyB,CAAC,CAAA;AAC/B,CAAC"}
@@ -1,10 +0,0 @@
1
- import { useContext } from "react";
2
- import { AccountContext } from "../contexts/accountContext";
3
- /**
4
- * Get the account fetch cache to save on rcp calls. Generally, you want to use {@link useAccount}
5
- * @returns
6
- */
7
- export const useAccountFetchCache = () => {
8
- return useContext(AccountContext);
9
- };
10
- //# sourceMappingURL=useAccountFetchCache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAccountFetchCache.js","sourceRoot":"","sources":["../../../../src/hooks/useAccountFetchCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,EAAE;IACvC,OAAO,UAAU,CAAC,cAAc,CAAC,CAAC;AACpC,CAAC,CAAC"}
@@ -1,12 +0,0 @@
1
- import { Commitment, Connection } from "@solana/web3.js";
2
- import { AccountFetchCache } from "@helium/spl-utils";
3
- import React, { FC, ReactNode } from "react";
4
- export interface IAccountProviderProps {
5
- children: ReactNode;
6
- connection: Connection;
7
- commitment: Commitment;
8
- extendConnection?: boolean;
9
- }
10
- export declare const AccountContext: React.Context<AccountFetchCache>;
11
- export declare const AccountProvider: FC<IAccountProviderProps>;
12
- //# sourceMappingURL=accountContext.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"accountContext.d.ts","sourceRoot":"","sources":["../../../../src/contexts/accountContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,EAEZ,EAAE,EACF,SAAS,EAGV,MAAM,OAAO,CAAC;AAEf,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,EAAE,UAAU,CAAC;IACvB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,cAAc,kCAE1B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,EAAE,CAAC,qBAAqB,CA2BrD,CAAC"}
@@ -1,24 +0,0 @@
1
- /// <reference types="node" />
2
- import { PublicKey, AccountInfo } from "@solana/web3.js";
3
- import { TypedAccountParser } from "@helium/spl-utils";
4
- export interface ParsedAccountBase {
5
- pubkey: PublicKey;
6
- account: AccountInfo<Buffer>;
7
- info: any;
8
- }
9
- export interface UseAccountState<T> {
10
- loading: boolean;
11
- account?: AccountInfo<Buffer>;
12
- info?: T;
13
- }
14
- /**
15
- * Generic hook to get a cached, auto updating, deserialized form of any Solana account. Massively saves on RPC usage by using
16
- * the spl-utils accountFetchCache.
17
- *
18
- * @param key
19
- * @param parser
20
- * @param isStatic
21
- * @returns
22
- */
23
- export declare function useAccount<T>(key: null | undefined | PublicKey, parser?: TypedAccountParser<T>, isStatic?: boolean): UseAccountState<T>;
24
- //# sourceMappingURL=useAccount.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAccount.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useAccount.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,SAAS,CAAA;IACjB,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC5B,IAAI,EAAE,GAAG,CAAC;CACX;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC7B,IAAI,CAAC,EAAE,CAAC,CAAA;CACT;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAC1B,GAAG,EAAE,IAAI,GAAG,SAAS,GAAG,SAAS,EACjC,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAC9B,QAAQ,UAAQ,GACf,eAAe,CAAC,CAAC,CAAC,CA6HpB"}
@@ -1,6 +0,0 @@
1
- /**
2
- * Get the account fetch cache to save on rcp calls. Generally, you want to use {@link useAccount}
3
- * @returns
4
- */
5
- export declare const useAccountFetchCache: () => import("@helium/spl-utils").AccountFetchCache;
6
- //# sourceMappingURL=useAccountFetchCache.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAccountFetchCache.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useAccountFetchCache.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,eAAO,MAAM,oBAAoB,qDAEhC,CAAC"}