@xyo-network/react-api 2.32.0-rc.7 → 2.32.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 (85) hide show
  1. package/dist/cjs/hooks/ResolvePayloadArgs.d.ts +5 -0
  2. package/dist/cjs/hooks/ResolvePayloadArgs.d.ts.map +1 -0
  3. package/dist/cjs/hooks/ResolvePayloadArgs.js +3 -0
  4. package/dist/cjs/hooks/ResolvePayloadArgs.js.map +1 -0
  5. package/dist/cjs/hooks/index.d.ts +6 -0
  6. package/dist/cjs/hooks/index.d.ts.map +1 -0
  7. package/dist/cjs/hooks/index.js +9 -0
  8. package/dist/cjs/hooks/index.js.map +1 -0
  9. package/dist/cjs/hooks/lib/FetchHuriHashOptions.d.ts +4 -0
  10. package/dist/cjs/hooks/lib/FetchHuriHashOptions.d.ts.map +1 -0
  11. package/dist/cjs/hooks/lib/FetchHuriHashOptions.js +3 -0
  12. package/dist/cjs/hooks/lib/FetchHuriHashOptions.js.map +1 -0
  13. package/dist/cjs/hooks/lib/findHuriNetwork.d.ts +4 -0
  14. package/dist/cjs/hooks/lib/findHuriNetwork.d.ts.map +1 -0
  15. package/dist/cjs/hooks/lib/findHuriNetwork.js +14 -0
  16. package/dist/cjs/hooks/lib/findHuriNetwork.js.map +1 -0
  17. package/dist/cjs/hooks/lib/index.d.ts +3 -0
  18. package/dist/cjs/hooks/lib/index.d.ts.map +1 -0
  19. package/dist/cjs/hooks/lib/index.js +6 -0
  20. package/dist/cjs/hooks/lib/index.js.map +1 -0
  21. package/dist/cjs/hooks/useHuriHash.d.ts +13 -0
  22. package/dist/cjs/hooks/useHuriHash.d.ts.map +1 -0
  23. package/dist/cjs/hooks/useHuriHash.js +33 -0
  24. package/dist/cjs/hooks/useHuriHash.js.map +1 -0
  25. package/dist/cjs/hooks/useLoadPayload.d.ts +3 -0
  26. package/dist/cjs/hooks/useLoadPayload.d.ts.map +1 -0
  27. package/dist/cjs/hooks/useLoadPayload.js +57 -0
  28. package/dist/cjs/hooks/useLoadPayload.js.map +1 -0
  29. package/dist/cjs/hooks/useResolveHuri.d.ts +10 -0
  30. package/dist/cjs/hooks/useResolveHuri.d.ts.map +1 -0
  31. package/dist/cjs/hooks/useResolveHuri.js +68 -0
  32. package/dist/cjs/hooks/useResolveHuri.js.map +1 -0
  33. package/dist/cjs/index.d.ts +1 -0
  34. package/dist/cjs/index.d.ts.map +1 -1
  35. package/dist/cjs/index.js +1 -0
  36. package/dist/cjs/index.js.map +1 -1
  37. package/dist/docs.json +577 -18
  38. package/dist/esm/hooks/ResolvePayloadArgs.d.ts +5 -0
  39. package/dist/esm/hooks/ResolvePayloadArgs.d.ts.map +1 -0
  40. package/dist/esm/hooks/ResolvePayloadArgs.js +2 -0
  41. package/dist/esm/hooks/ResolvePayloadArgs.js.map +1 -0
  42. package/dist/esm/hooks/index.d.ts +6 -0
  43. package/dist/esm/hooks/index.d.ts.map +1 -0
  44. package/dist/esm/hooks/index.js +6 -0
  45. package/dist/esm/hooks/index.js.map +1 -0
  46. package/dist/esm/hooks/lib/FetchHuriHashOptions.d.ts +4 -0
  47. package/dist/esm/hooks/lib/FetchHuriHashOptions.d.ts.map +1 -0
  48. package/dist/esm/hooks/lib/FetchHuriHashOptions.js +2 -0
  49. package/dist/esm/hooks/lib/FetchHuriHashOptions.js.map +1 -0
  50. package/dist/esm/hooks/lib/findHuriNetwork.d.ts +4 -0
  51. package/dist/esm/hooks/lib/findHuriNetwork.d.ts.map +1 -0
  52. package/dist/esm/hooks/lib/findHuriNetwork.js +9 -0
  53. package/dist/esm/hooks/lib/findHuriNetwork.js.map +1 -0
  54. package/dist/esm/hooks/lib/index.d.ts +3 -0
  55. package/dist/esm/hooks/lib/index.d.ts.map +1 -0
  56. package/dist/esm/hooks/lib/index.js +3 -0
  57. package/dist/esm/hooks/lib/index.js.map +1 -0
  58. package/dist/esm/hooks/useHuriHash.d.ts +13 -0
  59. package/dist/esm/hooks/useHuriHash.d.ts.map +1 -0
  60. package/dist/esm/hooks/useHuriHash.js +30 -0
  61. package/dist/esm/hooks/useHuriHash.js.map +1 -0
  62. package/dist/esm/hooks/useLoadPayload.d.ts +3 -0
  63. package/dist/esm/hooks/useLoadPayload.d.ts.map +1 -0
  64. package/dist/esm/hooks/useLoadPayload.js +52 -0
  65. package/dist/esm/hooks/useLoadPayload.js.map +1 -0
  66. package/dist/esm/hooks/useResolveHuri.d.ts +10 -0
  67. package/dist/esm/hooks/useResolveHuri.d.ts.map +1 -0
  68. package/dist/esm/hooks/useResolveHuri.js +64 -0
  69. package/dist/esm/hooks/useResolveHuri.js.map +1 -0
  70. package/dist/esm/index.d.ts +1 -0
  71. package/dist/esm/index.d.ts.map +1 -1
  72. package/dist/esm/index.js +1 -0
  73. package/dist/esm/index.js.map +1 -1
  74. package/package.json +19 -15
  75. package/src/hooks/ResolvePayloadArgs.ts +6 -0
  76. package/src/hooks/index.ts +5 -0
  77. package/src/hooks/lib/FetchHuriHashOptions.ts +3 -0
  78. package/src/hooks/lib/findHuriNetwork.ts +13 -0
  79. package/src/hooks/lib/index.ts +2 -0
  80. package/src/hooks/useHuriHash.stories.tsx +108 -0
  81. package/src/hooks/useHuriHash.tsx +40 -0
  82. package/src/hooks/useLoadPayload.stories.tsx +69 -0
  83. package/src/hooks/useLoadPayload.tsx +59 -0
  84. package/src/hooks/useResolveHuri.tsx +75 -0
  85. package/src/index.ts +1 -0
@@ -0,0 +1,5 @@
1
+ import { XyoApiError } from '@xyo-network/api';
2
+ import { XyoPayload } from '@xyo-network/payload';
3
+ export declare type UsePayload = [XyoPayload?, boolean?, XyoApiError?];
4
+ export declare type UseHuriOrHash = [...UsePayload, boolean?];
5
+ //# sourceMappingURL=ResolvePayloadArgs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResolvePayloadArgs.d.ts","sourceRoot":"","sources":["../../../src/hooks/ResolvePayloadArgs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,oBAAY,UAAU,GAAG,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAA;AAE9D,oBAAY,aAAa,GAAG,CAAC,GAAG,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ResolvePayloadArgs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResolvePayloadArgs.js","sourceRoot":"","sources":["../../../src/hooks/ResolvePayloadArgs.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export * from './lib';
2
+ export * from './ResolvePayloadArgs';
3
+ export * from './useHuriHash';
4
+ export * from './useLoadPayload';
5
+ export * from './useResolveHuri';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,6 @@
1
+ export * from './lib';
2
+ export * from './ResolvePayloadArgs';
3
+ export * from './useHuriHash';
4
+ export * from './useLoadPayload';
5
+ export * from './useResolveHuri';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAA;AACrB,cAAc,sBAAsB,CAAA;AACpC,cAAc,eAAe,CAAA;AAC7B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,4 @@
1
+ export interface FetchHuriHashOptions {
2
+ changeActiveNetwork?: boolean;
3
+ }
4
+ //# sourceMappingURL=FetchHuriHashOptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FetchHuriHashOptions.d.ts","sourceRoot":"","sources":["../../../../src/hooks/lib/FetchHuriHashOptions.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=FetchHuriHashOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FetchHuriHashOptions.js","sourceRoot":"","sources":["../../../../src/hooks/lib/FetchHuriHashOptions.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import { XyoNetworkPayload } from '@xyo-network/network';
2
+ import { Huri } from '@xyo-network/payload';
3
+ export declare const findHuriNetwork: (huriInstance: Huri, networks?: XyoNetworkPayload[]) => XyoNetworkPayload | undefined;
4
+ //# sourceMappingURL=findHuriNetwork.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findHuriNetwork.d.ts","sourceRoot":"","sources":["../../../../src/hooks/lib/findHuriNetwork.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAE3C,eAAO,MAAM,eAAe,iBAAkB,IAAI,aAAa,iBAAiB,EAAE,kCASjF,CAAA"}
@@ -0,0 +1,9 @@
1
+ export const findHuriNetwork = (huriInstance, networks) => {
2
+ // see if huri archivist matches any archivist in the network configs
3
+ return networks
4
+ ?.filter((network) => network.nodes?.find((node) => {
5
+ return node.type === 'archivist' && new URL(node.uri).hostname === huriInstance.archivist;
6
+ }))
7
+ .shift();
8
+ };
9
+ //# sourceMappingURL=findHuriNetwork.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findHuriNetwork.js","sourceRoot":"","sources":["../../../../src/hooks/lib/findHuriNetwork.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,YAAkB,EAAE,QAA8B,EAAE,EAAE;IACpF,qEAAqE;IACrE,OAAO,QAAQ;QACb,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CACnB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QAC3B,OAAO,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,SAAS,CAAA;IAC3F,CAAC,CAAC,CACH;SACA,KAAK,EAAE,CAAA;AACZ,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './FetchHuriHashOptions';
2
+ export * from './findHuriNetwork';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './FetchHuriHashOptions';
2
+ export * from './findHuriNetwork';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/hooks/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { Huri } from '@xyo-network/payload';
2
+ import { FetchHuriHashOptions } from './lib';
3
+ /**
4
+ * Resolve a hash or a huri regardless of network
5
+ */
6
+ declare const useHuriHash: (huriOrHash?: string | Huri, huriUri?: string, options?: FetchHuriHashOptions) => [({
7
+ schema: string;
8
+ previousHash?: string | undefined;
9
+ sources?: string[] | undefined;
10
+ timestamp?: number | undefined;
11
+ } | undefined)?, (boolean | undefined)?, (import("@xyo-network/api").XyoApiError<any, any> | undefined)?, (boolean | undefined)?];
12
+ export { useHuriHash };
13
+ //# sourceMappingURL=useHuriHash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHuriHash.d.ts","sourceRoot":"","sources":["../../../src/hooks/useHuriHash.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAG3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;AAK5C;;GAEG;AACH,QAAA,MAAM,WAAW,gBAAiB,MAAM,GAAG,IAAI,YAAY,MAAM,YAAY,oBAAoB;;;;;iIA0BhG,CAAA;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
@@ -0,0 +1,30 @@
1
+ import { Huri } from '@xyo-network/payload';
2
+ import { useCallback } from 'react';
3
+ import { useLoadPayload } from './useLoadPayload';
4
+ import { useResolveHuri } from './useResolveHuri';
5
+ /**
6
+ * Resolve a hash or a huri regardless of network
7
+ */
8
+ const useHuriHash = (huriOrHash, huriUri, options) => {
9
+ const hash = useCallback((huriOrHash) => {
10
+ if (huriOrHash) {
11
+ if (typeof huriOrHash === 'string') {
12
+ return huriOrHash;
13
+ }
14
+ if (huriOrHash instanceof Huri) {
15
+ return huriOrHash.hash;
16
+ }
17
+ }
18
+ }, []);
19
+ const providedHash = hash(huriOrHash);
20
+ //AT: TODO -> Talk about this pattern
21
+ // Optimistically try to grab the has from the current network and archive
22
+ const [payload, notFound, apiError] = useLoadPayload(providedHash);
23
+ // if a huriUri was passed, we can safely override the notFound from the hash only query
24
+ const notFoundOverride = huriUri ? true : notFound;
25
+ // If payload isn't found, fallback to the huriUri
26
+ const [huriPayload, huriPayloadNotFound, huriApiError, networkNotFound] = useResolveHuri(huriUri, notFoundOverride, options);
27
+ return [payload ?? huriPayload, huriPayloadNotFound, apiError ?? huriApiError, networkNotFound];
28
+ };
29
+ export { useHuriHash };
30
+ //# sourceMappingURL=useHuriHash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHuriHash.js","sourceRoot":"","sources":["../../../src/hooks/useHuriHash.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAInC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,GAAG,CAAC,UAA0B,EAAE,OAAgB,EAAE,OAA8B,EAAiB,EAAE;IAClH,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,UAA0B,EAAE,EAAE;QACtD,IAAI,UAAU,EAAE;YACd,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;gBAClC,OAAO,UAAU,CAAA;aAClB;YACD,IAAI,UAAU,YAAY,IAAI,EAAE;gBAC9B,OAAO,UAAU,CAAC,IAAI,CAAA;aACvB;SACF;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,CAAA;IAErC,qCAAqC;IAErC,0EAA0E;IAC1E,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,cAAc,CAAC,YAAY,CAAC,CAAA;IAElE,wFAAwF;IACxF,MAAM,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAA;IAElD,kDAAkD;IAClD,MAAM,CAAC,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,eAAe,CAAC,GAAG,cAAc,CAAC,OAAO,EAAE,gBAAgB,EAAE,OAAO,CAAC,CAAA;IAE5H,OAAO,CAAC,OAAO,IAAI,WAAW,EAAE,mBAAmB,EAAE,QAAQ,IAAI,YAAY,EAAE,eAAe,CAAC,CAAA;AACjG,CAAC,CAAA;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { UsePayload } from './ResolvePayloadArgs';
2
+ export declare const useLoadPayload: (hash?: string) => UsePayload;
3
+ //# sourceMappingURL=useLoadPayload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLoadPayload.d.ts","sourceRoot":"","sources":["../../../src/hooks/useLoadPayload.tsx"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,eAAO,MAAM,cAAc,UAAW,MAAM,eAiD3C,CAAA"}
@@ -0,0 +1,52 @@
1
+ import { useAsyncEffect } from '@xylabs/react-shared';
2
+ import { useArchive } from '@xyo-network/react-archive';
3
+ import { useArchivistApi } from '@xyo-network/react-archivist-api';
4
+ import { useEffect, useState } from 'react';
5
+ export const useLoadPayload = (hash) => {
6
+ const { api } = useArchivistApi();
7
+ const { archive } = useArchive();
8
+ const [localHash, setLocalHash] = useState();
9
+ const [notFound, setNotFound] = useState();
10
+ const [apiError, setApiError] = useState();
11
+ const [payload, setPayload] = useState();
12
+ const reset = () => {
13
+ setPayload(undefined);
14
+ setApiError(undefined);
15
+ setNotFound(undefined);
16
+ };
17
+ // allow for hash changes to retrigger the api call
18
+ useEffect(() => {
19
+ if (hash !== localHash) {
20
+ setLocalHash(hash);
21
+ reset();
22
+ }
23
+ }, [hash, localHash]);
24
+ useAsyncEffect(
25
+ // eslint-disable-next-line react-hooks/exhaustive-deps
26
+ async (mounted) => {
27
+ if (api && localHash && localHash.length > 0 && notFound === undefined) {
28
+ reset();
29
+ try {
30
+ const result = await api?.archive(archive).payload.hash(localHash).get();
31
+ if (mounted()) {
32
+ if (result?.length) {
33
+ setPayload(result[0]);
34
+ setNotFound(false);
35
+ }
36
+ else if (result?.length === 0) {
37
+ setNotFound(true);
38
+ setPayload(undefined);
39
+ }
40
+ }
41
+ }
42
+ catch (e) {
43
+ reset();
44
+ setNotFound(false);
45
+ setApiError(e);
46
+ console.error(e);
47
+ }
48
+ }
49
+ }, [hash, api, archive, payload, notFound, localHash]);
50
+ return [payload, notFound, apiError];
51
+ };
52
+ //# sourceMappingURL=useLoadPayload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLoadPayload.js","sourceRoot":"","sources":["../../../src/hooks/useLoadPayload.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAGrD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAClE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAI3C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAa,EAAc,EAAE;IAC1D,MAAM,EAAE,GAAG,EAAE,GAAG,eAAe,EAAE,CAAA;IACjC,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,CAAA;IAChC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,EAAU,CAAA;IACpD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,EAAW,CAAA;IACnD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,EAAe,CAAA;IACvD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,EAAc,CAAA;IAEpD,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,UAAU,CAAC,SAAS,CAAC,CAAA;QACrB,WAAW,CAAC,SAAS,CAAC,CAAA;QACtB,WAAW,CAAC,SAAS,CAAC,CAAA;IACxB,CAAC,CAAA;IAED,mDAAmD;IACnD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,YAAY,CAAC,IAAI,CAAC,CAAA;YAClB,KAAK,EAAE,CAAA;SACR;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAA;IAErB,cAAc;IACZ,uDAAuD;IACvD,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,IAAI,GAAG,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,KAAK,SAAS,EAAE;YACtE,KAAK,EAAE,CAAA;YACP,IAAI;gBACF,MAAM,MAAM,GAAG,MAAM,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAA;gBACxE,IAAI,OAAO,EAAE,EAAE;oBACb,IAAI,MAAM,EAAE,MAAM,EAAE;wBAClB,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;wBACrB,WAAW,CAAC,KAAK,CAAC,CAAA;qBACnB;yBAAM,IAAI,MAAM,EAAE,MAAM,KAAK,CAAC,EAAE;wBAC/B,WAAW,CAAC,IAAI,CAAC,CAAA;wBACjB,UAAU,CAAC,SAAS,CAAC,CAAA;qBACtB;iBACF;aACF;YAAC,OAAO,CAAC,EAAE;gBACV,KAAK,EAAE,CAAA;gBACP,WAAW,CAAC,KAAK,CAAC,CAAA;gBAClB,WAAW,CAAC,CAAgB,CAAC,CAAA;gBAC7B,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;aACjB;SACF;IACH,CAAC,EACD,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,CAAC,CACnD,CAAA;IACD,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAA;AACtC,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { XyoApiError } from '@xyo-network/api';
2
+ import { FetchHuriHashOptions } from './lib';
3
+ declare const useResolveHuri: (huriUri?: string, dependentNotFound?: boolean, options?: FetchHuriHashOptions) => [({
4
+ schema: string;
5
+ previousHash?: string | undefined;
6
+ sources?: string[] | undefined;
7
+ timestamp?: number | undefined;
8
+ } | undefined)?, (boolean | undefined)?, (XyoApiError<any, any> | undefined)?, (boolean | undefined)?];
9
+ export { useResolveHuri };
10
+ //# sourceMappingURL=useResolveHuri.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResolveHuri.d.ts","sourceRoot":"","sources":["../../../src/hooks/useResolveHuri.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAK9C,OAAO,EAAE,oBAAoB,EAAmB,MAAM,OAAO,CAAA;AAG7D,QAAA,MAAM,cAAc,aAAc,MAAM,sBAAsB,OAAO,YAAY,oBAAoB;;;;;sGA+DpG,CAAA;AAED,OAAO,EAAE,cAAc,EAAE,CAAA"}
@@ -0,0 +1,64 @@
1
+ import { useAsyncEffect } from '@xylabs/react-shared';
2
+ import { Huri } from '@xyo-network/payload';
3
+ import { useNetwork } from '@xyo-network/react-network';
4
+ import { useEffect, useState } from 'react';
5
+ import { findHuriNetwork } from './lib';
6
+ const useResolveHuri = (huriUri, dependentNotFound, options) => {
7
+ const { network, networks, setNetwork } = useNetwork();
8
+ const [huriPayload, setHuriPayload] = useState();
9
+ const [huriPayloadNotFound, setHuriPayloadNotFound] = useState();
10
+ const [huriNetworkNotFound, setHuriNetworkNotFound] = useState();
11
+ const [huriApiError, setHuriApiError] = useState();
12
+ const { changeActiveNetwork } = options ?? {};
13
+ //AT: TODO -> Talk about this pattern
14
+ const reset = () => {
15
+ setHuriPayload(undefined);
16
+ setHuriPayloadNotFound(undefined);
17
+ setHuriApiError(undefined);
18
+ };
19
+ useEffect(() => {
20
+ // Initially, sync local not found with dependent's status
21
+ setHuriPayloadNotFound(dependentNotFound);
22
+ }, [dependentNotFound]);
23
+ useAsyncEffect(
24
+ // eslint-disable-next-line react-hooks/exhaustive-deps
25
+ async (mounted) => {
26
+ // if dependent value is resolved, don't do anything, if not resolved, try to resolve huriUri
27
+ if (dependentNotFound && huriUri) {
28
+ reset();
29
+ const huriInstance = new Huri(huriUri);
30
+ const foundHuriNetwork = findHuriNetwork(huriInstance, networks);
31
+ if (foundHuriNetwork && mounted()) {
32
+ if (network !== foundHuriNetwork && changeActiveNetwork) {
33
+ setNetwork?.(foundHuriNetwork);
34
+ return;
35
+ }
36
+ try {
37
+ const huriPayload = await huriInstance.fetch();
38
+ if (mounted()) {
39
+ if (huriPayload) {
40
+ setHuriPayload(huriPayload);
41
+ setHuriPayloadNotFound(false);
42
+ }
43
+ else {
44
+ setHuriPayloadNotFound(true);
45
+ }
46
+ }
47
+ }
48
+ catch (e) {
49
+ if (mounted()) {
50
+ setHuriPayloadNotFound(false);
51
+ setHuriPayload(undefined);
52
+ setHuriApiError(e);
53
+ }
54
+ }
55
+ }
56
+ else {
57
+ setHuriNetworkNotFound(true);
58
+ }
59
+ }
60
+ }, [huriUri, network, networks, dependentNotFound, setNetwork, changeActiveNetwork]);
61
+ return [huriPayload, huriPayloadNotFound, huriApiError, huriNetworkNotFound];
62
+ };
63
+ export { useResolveHuri };
64
+ //# sourceMappingURL=useResolveHuri.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResolveHuri.js","sourceRoot":"","sources":["../../../src/hooks/useResolveHuri.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAErD,OAAO,EAAE,IAAI,EAAc,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAE3C,OAAO,EAAwB,eAAe,EAAE,MAAM,OAAO,CAAA;AAG7D,MAAM,cAAc,GAAG,CAAC,OAAgB,EAAE,iBAA2B,EAAE,OAA8B,EAAiB,EAAE;IACtH,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAAA;IACtD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,EAAc,CAAA;IAC5D,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,EAAW,CAAA;IACzE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,EAAW,CAAA;IACzE,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,EAAe,CAAA;IAE/D,MAAM,EAAE,mBAAmB,EAAE,GAAG,OAAO,IAAI,EAAE,CAAA;IAE7C,qCAAqC;IACrC,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,cAAc,CAAC,SAAS,CAAC,CAAA;QACzB,sBAAsB,CAAC,SAAS,CAAC,CAAA;QACjC,eAAe,CAAC,SAAS,CAAC,CAAA;IAC5B,CAAC,CAAA;IAED,SAAS,CAAC,GAAG,EAAE;QACb,0DAA0D;QAC1D,sBAAsB,CAAC,iBAAiB,CAAC,CAAA;IAC3C,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAEvB,cAAc;IACZ,uDAAuD;IACvD,KAAK,EAAE,OAAO,EAAE,EAAE;QAChB,6FAA6F;QAC7F,IAAI,iBAAiB,IAAI,OAAO,EAAE;YAChC,KAAK,EAAE,CAAA;YACP,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAA;YAEtC,MAAM,gBAAgB,GAAG,eAAe,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;YAEhE,IAAI,gBAAgB,IAAI,OAAO,EAAE,EAAE;gBACjC,IAAI,OAAO,KAAK,gBAAgB,IAAI,mBAAmB,EAAE;oBACvD,UAAU,EAAE,CAAC,gBAAgB,CAAC,CAAA;oBAC9B,OAAM;iBACP;gBAED,IAAI;oBACF,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,CAAA;oBAC9C,IAAI,OAAO,EAAE,EAAE;wBACb,IAAI,WAAW,EAAE;4BACf,cAAc,CAAC,WAAW,CAAC,CAAA;4BAC3B,sBAAsB,CAAC,KAAK,CAAC,CAAA;yBAC9B;6BAAM;4BACL,sBAAsB,CAAC,IAAI,CAAC,CAAA;yBAC7B;qBACF;iBACF;gBAAC,OAAO,CAAC,EAAE;oBACV,IAAI,OAAO,EAAE,EAAE;wBACb,sBAAsB,CAAC,KAAK,CAAC,CAAA;wBAC7B,cAAc,CAAC,SAAS,CAAC,CAAA;wBACzB,eAAe,CAAC,CAAgB,CAAC,CAAA;qBAClC;iBACF;aACF;iBAAM;gBACL,sBAAsB,CAAC,IAAI,CAAC,CAAA;aAC7B;SACF;IACH,CAAC,EACD,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,mBAAmB,CAAC,CACjF,CAAA;IAED,OAAO,CAAC,WAAW,EAAE,mBAAmB,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAA;AAC9E,CAAC,CAAA;AAED,OAAO,EAAE,cAAc,EAAE,CAAA"}
@@ -1,2 +1,3 @@
1
1
  export * from './components';
2
+ export * from './hooks';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA"}
package/dist/esm/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export * from './components';
2
+ export * from './hooks';
2
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA"}
package/package.json CHANGED
@@ -10,24 +10,29 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-react-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@emotion/react": "^11.10.4",
14
- "@emotion/styled": "^11.10.4",
13
+ "@xylabs/react-button": "^2.14.16",
14
+ "@xylabs/react-dialogs": "^2.14.16",
15
+ "@xylabs/react-flexbox": "^2.14.16",
16
+ "@xylabs/react-shared": "^2.14.16",
17
+ "@xyo-network/react-archive": "^2.32.0",
18
+ "@xyo-network/react-archivist-api": "^2.32.0",
19
+ "@xyo-network/react-network": "^2.32.0",
20
+ "@xyo-network/react-shared": "^2.32.0",
21
+ "react-json-view": "^1.21.3",
22
+ "tslib": "^2.4.0"
23
+ },
24
+ "peerDependencies": {
25
+ "@mui/icons-material": "^5.10.3",
15
26
  "@mui/material": "^5.10.3",
16
- "@xylabs/react-button": "^2.14.14",
17
- "@xylabs/react-dialogs": "^2.14.14",
18
- "@xylabs/react-flexbox": "^2.14.14",
19
- "@xylabs/react-shared": "^2.14.14",
20
- "@xyo-network/react-shared": "^2.32.0-rc.7",
27
+ "@mui/styles": "^5.10.3",
28
+ "@xyo-network/api": "^2.30.0-rc.3",
29
+ "@xyo-network/network": "^2.30.0-rc.3",
30
+ "@xyo-network/payload": "^2.30.0-rc.3",
21
31
  "react": "^18.2.0",
22
32
  "react-dom": "^18.2.0",
23
- "react-json-view": "^1.21.3",
24
- "react-router-dom": "^6.3.0",
25
- "tslib": "^2.4.0"
33
+ "react-router-dom": "^6.3.0"
26
34
  },
27
35
  "description": "Common React library for all XYO projects that use React",
28
- "devDependencies": {
29
- "@xyo-network/api": "^2.30.0-rc.3"
30
- },
31
36
  "browser": "dist/esm/index.js",
32
37
  "docs": "dist/docs.json",
33
38
  "exports": {
@@ -70,6 +75,5 @@
70
75
  },
71
76
  "sideEffects": false,
72
77
  "types": "dist/esm/index.d.ts",
73
- "version": "2.32.0-rc.7",
74
- "stableVersion": "2.31.3"
78
+ "version": "2.32.0"
75
79
  }
@@ -0,0 +1,6 @@
1
+ import { XyoApiError } from '@xyo-network/api'
2
+ import { XyoPayload } from '@xyo-network/payload'
3
+
4
+ export type UsePayload = [XyoPayload?, boolean?, XyoApiError?]
5
+
6
+ export type UseHuriOrHash = [...UsePayload, boolean?]
@@ -0,0 +1,5 @@
1
+ export * from './lib'
2
+ export * from './ResolvePayloadArgs'
3
+ export * from './useHuriHash'
4
+ export * from './useLoadPayload'
5
+ export * from './useResolveHuri'
@@ -0,0 +1,3 @@
1
+ export interface FetchHuriHashOptions {
2
+ changeActiveNetwork?: boolean
3
+ }
@@ -0,0 +1,13 @@
1
+ import { XyoNetworkPayload } from '@xyo-network/network'
2
+ import { Huri } from '@xyo-network/payload'
3
+
4
+ export const findHuriNetwork = (huriInstance: Huri, networks?: XyoNetworkPayload[]) => {
5
+ // see if huri archivist matches any archivist in the network configs
6
+ return networks
7
+ ?.filter((network) =>
8
+ network.nodes?.find((node) => {
9
+ return node.type === 'archivist' && new URL(node.uri).hostname === huriInstance.archivist
10
+ }),
11
+ )
12
+ .shift()
13
+ }
@@ -0,0 +1,2 @@
1
+ export * from './FetchHuriHashOptions'
2
+ export * from './findHuriNetwork'
@@ -0,0 +1,108 @@
1
+ /* eslint-disable import/no-internal-modules */
2
+ import { Alert, Typography } from '@mui/material'
3
+ import { ComponentStory, Meta } from '@storybook/react'
4
+ import { ButtonEx } from '@xylabs/react-button'
5
+ import { FlexCol, FlexRow } from '@xylabs/react-flexbox'
6
+ import { Huri } from '@xyo-network/payload'
7
+ import { ArchivistApiProvider } from '@xyo-network/react-archivist-api'
8
+ import { NetworkMemoryProvider } from '@xyo-network/react-network'
9
+ import { XyoSchemaCache } from '@xyo-network/utils'
10
+ import { lazy, Suspense, useState } from 'react'
11
+
12
+ import { FetchHuriHashOptions } from './lib'
13
+ import { useHuriHash } from './useHuriHash'
14
+
15
+ const JsonView = lazy(() => import(/* webpackChunkName: "jsonView" */ 'react-json-view'))
16
+
17
+ interface UseHuriHashComponentProps {
18
+ huriOrHash: string | Huri
19
+ huriUri?: string
20
+ options?: FetchHuriHashOptions
21
+ reTestable?: boolean
22
+ }
23
+
24
+ const apiDomain = 'https://beta.api.archivist.xyo.network'
25
+ const hash = '5605fabad11b10bb5fb86b309ca0970894eda8f22362dda1a489817723bca992'
26
+ XyoSchemaCache.instance.proxy = `${apiDomain}/domain`
27
+
28
+ const mainApiDomain = 'https://api.archivist.xyo.network'
29
+ const mainHash = 'd3a3936e31ba1d835c528784ab77c1eaaeedd6e16b7aad68a88241ce539853cb'
30
+
31
+ const Wrapper: React.FC<UseHuriHashComponentProps> = (props) => (
32
+ <NetworkMemoryProvider>
33
+ <ArchivistApiProvider apiDomain={apiDomain}>
34
+ <UseHuriHashComponent {...props} />
35
+ </ArchivistApiProvider>
36
+ </NetworkMemoryProvider>
37
+ )
38
+
39
+ const UseHuriHashComponent: React.FC<UseHuriHashComponentProps> = ({ huriOrHash, huriUri, options, reTestable }) => {
40
+ const [trigger, setTrigger] = useState<string | Huri>(huriOrHash)
41
+ const [payload, notFound, , networkNotFound] = useHuriHash(trigger, huriUri, options)
42
+
43
+ return (
44
+ <>
45
+ <Typography variant="body1" fontWeight="bold">
46
+ Fetches the payload for a huriOrHash.
47
+ </Typography>
48
+ {reTestable ? (
49
+ <FlexRow columnGap={2}>
50
+ <ButtonEx variant="contained" onClick={() => setTrigger(hash)}>
51
+ Fetch Valid Hash
52
+ </ButtonEx>
53
+ <ButtonEx variant="contained" onClick={() => setTrigger('foo')}>
54
+ Hash Not Found
55
+ </ButtonEx>
56
+ </FlexRow>
57
+ ) : null}
58
+ <FlexCol my={3}>
59
+ {notFound === undefined && networkNotFound === undefined ? 'Loading...' : null}
60
+ {notFound ? <Alert severity="warning">Not Found</Alert> : null}
61
+ {networkNotFound ? <Alert severity="warning">Network Not Found</Alert> : null}
62
+ <Suspense fallback={<FlexCol busy />}>
63
+ <JsonView src={payload || {}} />
64
+ </Suspense>
65
+ </FlexCol>
66
+ </>
67
+ )
68
+ }
69
+
70
+ const StorybookEntry: Meta = {
71
+ argTypes: {},
72
+ component: UseHuriHashComponent,
73
+ parameters: {
74
+ docs: {
75
+ page: null,
76
+ },
77
+ },
78
+ title: 'payload/useHuriHash',
79
+ }
80
+
81
+ const Template: ComponentStory<typeof UseHuriHashComponent> = (props) => {
82
+ return <Wrapper {...props} />
83
+ }
84
+
85
+ const Default = Template.bind({})
86
+ Default.args = { huriOrHash: hash }
87
+
88
+ const NotFound = Template.bind({})
89
+ NotFound.args = { huriOrHash: 'foo', reTestable: true }
90
+
91
+ const WithHuri = Template.bind({})
92
+ WithHuri.args = { huriOrHash: new Huri(`${apiDomain}/${hash}`) }
93
+
94
+ const WithHuriUri = Template.bind({})
95
+ WithHuriUri.args = { huriUri: `${mainApiDomain}/${mainHash}` }
96
+
97
+ const WithHuriUriNetworkNotFound = Template.bind({})
98
+ WithHuriUriNetworkNotFound.args = { huriUri: `http://badarchivisturl.com/${mainHash}` }
99
+
100
+ // Note - story will work correctly once main net return 200 instead of 404 when payloads aren't found
101
+ // Resolve huriUri when network is different from the current network
102
+ const WithHuriUriNotFound = Template.bind({})
103
+ WithHuriUriNotFound.args = { huriUri: `${mainApiDomain}/foo` }
104
+
105
+ export { Default, NotFound, WithHuri, WithHuriUri, WithHuriUriNetworkNotFound, WithHuriUriNotFound }
106
+
107
+ // eslint-disable-next-line import/no-default-export
108
+ export default StorybookEntry
@@ -0,0 +1,40 @@
1
+ import { Huri } from '@xyo-network/payload'
2
+ import { useCallback } from 'react'
3
+
4
+ import { FetchHuriHashOptions } from './lib'
5
+ import { UseHuriOrHash } from './ResolvePayloadArgs'
6
+ import { useLoadPayload } from './useLoadPayload'
7
+ import { useResolveHuri } from './useResolveHuri'
8
+
9
+ /**
10
+ * Resolve a hash or a huri regardless of network
11
+ */
12
+ const useHuriHash = (huriOrHash?: string | Huri, huriUri?: string, options?: FetchHuriHashOptions): UseHuriOrHash => {
13
+ const hash = useCallback((huriOrHash?: string | Huri) => {
14
+ if (huriOrHash) {
15
+ if (typeof huriOrHash === 'string') {
16
+ return huriOrHash
17
+ }
18
+ if (huriOrHash instanceof Huri) {
19
+ return huriOrHash.hash
20
+ }
21
+ }
22
+ }, [])
23
+
24
+ const providedHash = hash(huriOrHash)
25
+
26
+ //AT: TODO -> Talk about this pattern
27
+
28
+ // Optimistically try to grab the has from the current network and archive
29
+ const [payload, notFound, apiError] = useLoadPayload(providedHash)
30
+
31
+ // if a huriUri was passed, we can safely override the notFound from the hash only query
32
+ const notFoundOverride = huriUri ? true : notFound
33
+
34
+ // If payload isn't found, fallback to the huriUri
35
+ const [huriPayload, huriPayloadNotFound, huriApiError, networkNotFound] = useResolveHuri(huriUri, notFoundOverride, options)
36
+
37
+ return [payload ?? huriPayload, huriPayloadNotFound, apiError ?? huriApiError, networkNotFound]
38
+ }
39
+
40
+ export { useHuriHash }