@dxos/react-client 2.28.23-dev.09d48bf0 → 2.28.23-dev.82df2091
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.
- package/.rush/temp/package-deps_build.json +6 -3
- package/.rush/temp/package-deps_build:test.json +6 -3
- package/.rush/temp/package-deps_prerelease.json +6 -3
- package/.rush/temp/shrinkwrap-deps.json +73 -1
- package/dist/src/hooks/index.d.ts +1 -0
- package/dist/src/hooks/index.d.ts.map +1 -1
- package/dist/src/hooks/index.js +1 -0
- package/dist/src/hooks/index.js.map +1 -1
- package/dist/src/hooks/ipfs/index.d.ts +3 -0
- package/dist/src/hooks/ipfs/index.d.ts.map +1 -0
- package/dist/src/hooks/ipfs/index.js +18 -0
- package/dist/src/hooks/ipfs/index.js.map +1 -0
- package/dist/src/hooks/ipfs/useIpfsClient.d.ts +17 -0
- package/dist/src/hooks/ipfs/useIpfsClient.d.ts.map +1 -0
- package/dist/src/hooks/ipfs/useIpfsClient.js +42 -0
- package/dist/src/hooks/ipfs/useIpfsClient.js.map +1 -0
- package/dist/src/hooks/ipfs/useIpfsFiles.d.ts +19 -0
- package/dist/src/hooks/ipfs/useIpfsFiles.d.ts.map +1 -0
- package/dist/src/hooks/ipfs/useIpfsFiles.js +48 -0
- package/dist/src/hooks/ipfs/useIpfsFiles.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -11
- package/src/hooks/index.ts +1 -0
- package/src/hooks/ipfs/index.ts +6 -0
- package/src/hooks/ipfs/useIpfsClient.ts +37 -0
- package/src/hooks/ipfs/useIpfsFiles.ts +59 -0
package/package.json
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/react-client",
|
|
3
|
-
"version": "2.28.23-dev.
|
|
3
|
+
"version": "2.28.23-dev.82df2091",
|
|
4
4
|
"description": "React client API",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "DXOS.org",
|
|
7
7
|
"main": "dist/src/index.js",
|
|
8
8
|
"types": "dist/src/index.d.ts",
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@dxos/async": "2.28.23-dev.
|
|
11
|
-
"@dxos/bot-factory-client": "2.28.23-dev.
|
|
12
|
-
"@dxos/client": "2.28.23-dev.
|
|
13
|
-
"@dxos/config": "2.28.23-dev.
|
|
14
|
-
"@dxos/credentials": "2.28.23-dev.
|
|
15
|
-
"@dxos/crypto": "2.28.23-dev.
|
|
16
|
-
"@dxos/debug": "2.28.23-dev.
|
|
17
|
-
"@dxos/echo-db": "2.28.23-dev.
|
|
18
|
-
"@dxos/network-manager": "2.28.23-dev.
|
|
19
|
-
"@dxos/util": "2.28.23-dev.
|
|
10
|
+
"@dxos/async": "2.28.23-dev.82df2091",
|
|
11
|
+
"@dxos/bot-factory-client": "2.28.23-dev.82df2091",
|
|
12
|
+
"@dxos/client": "2.28.23-dev.82df2091",
|
|
13
|
+
"@dxos/config": "2.28.23-dev.82df2091",
|
|
14
|
+
"@dxos/credentials": "2.28.23-dev.82df2091",
|
|
15
|
+
"@dxos/crypto": "2.28.23-dev.82df2091",
|
|
16
|
+
"@dxos/debug": "2.28.23-dev.82df2091",
|
|
17
|
+
"@dxos/echo-db": "2.28.23-dev.82df2091",
|
|
18
|
+
"@dxos/network-manager": "2.28.23-dev.82df2091",
|
|
19
|
+
"@dxos/util": "2.28.23-dev.82df2091",
|
|
20
20
|
"assert": "^2.0.0",
|
|
21
21
|
"debug": "^4.3.3",
|
|
22
|
+
"ipfs-http-client": "~56.0.1",
|
|
22
23
|
"use-subscription": "^1.4.1"
|
|
23
24
|
},
|
|
24
25
|
"devDependencies": {
|
|
@@ -39,6 +40,7 @@
|
|
|
39
40
|
"expect": "~27.0.2",
|
|
40
41
|
"fork-ts-checker-webpack-plugin": "~6.2.5",
|
|
41
42
|
"level-js": "^5.0.2",
|
|
43
|
+
"node-fetch": "^2.6.0",
|
|
42
44
|
"react": "^17.0.2",
|
|
43
45
|
"react-dom": "^17.0.2",
|
|
44
46
|
"react-test-renderer": "^17.0.2",
|
package/src/hooks/index.ts
CHANGED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2022 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { CID, create } from 'ipfs-http-client';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import { useMemo } from 'react';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Return URL to IPFS resource on local gateway.
|
|
11
|
+
* @param gateway
|
|
12
|
+
* @param cid
|
|
13
|
+
* @param filename
|
|
14
|
+
*/
|
|
15
|
+
export const getIpfsUrl = (gateway: string, cid: CID, filename?: string) => {
|
|
16
|
+
const args = filename ? [`filename=${encodeURI(filename)}`] : [];
|
|
17
|
+
return path.join(gateway, String(cid), '?', args.join('&'));
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
// TODO(kaplanski): Factor out IPFS related functionality to its own package.
|
|
21
|
+
/**
|
|
22
|
+
* https://www.npmjs.com/package/ipfs-http-client#example
|
|
23
|
+
* NOTE: We need to run our own servers to enable CORS.
|
|
24
|
+
* Ports
|
|
25
|
+
* - 8001 Gateway
|
|
26
|
+
* - 5001 API
|
|
27
|
+
*/
|
|
28
|
+
export const useIpfsClient = (url?: string) => {
|
|
29
|
+
return useMemo(() => {
|
|
30
|
+
if (!url) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const client = create({ url });
|
|
35
|
+
return client;
|
|
36
|
+
}, [url]);
|
|
37
|
+
};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2022 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { CID, IPFSHTTPClient } from 'ipfs-http-client';
|
|
6
|
+
import { useMemo } from 'react';
|
|
7
|
+
|
|
8
|
+
import { Party } from '@dxos/client';
|
|
9
|
+
|
|
10
|
+
import { useSelection } from '../echo-selections';
|
|
11
|
+
|
|
12
|
+
export type IPFSFile = {
|
|
13
|
+
filename?: string
|
|
14
|
+
cid: CID
|
|
15
|
+
size?: number
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Returns a list of mapped IPFS files.
|
|
20
|
+
* @param party
|
|
21
|
+
* @param type
|
|
22
|
+
*/
|
|
23
|
+
export const useIpfsFiles = (party: Party | undefined, type: string) => {
|
|
24
|
+
// TODO(burdon): Schema definitions for types?
|
|
25
|
+
// TODO(burdon): Use reducer to do mapping?
|
|
26
|
+
const items = useSelection(party?.select().filter({ type }));
|
|
27
|
+
|
|
28
|
+
const files: IPFSFile[] = useMemo(() => items?.map(item => ({
|
|
29
|
+
filename: item.model.getProperty('filename'),
|
|
30
|
+
cid: item.model.getProperty('cid'),
|
|
31
|
+
size: item.model.getProperty('size')
|
|
32
|
+
})), [items]) ?? [];
|
|
33
|
+
|
|
34
|
+
return files;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
// TODO(wittjosiah): This is not returning IPFSFiles.
|
|
38
|
+
export const uploadFilesToIpfs = async (
|
|
39
|
+
ipfsClient: IPFSHTTPClient,
|
|
40
|
+
files: File[],
|
|
41
|
+
onError?: (error: Error) => void
|
|
42
|
+
) => {
|
|
43
|
+
return await Promise.all(files.map(async (file) => {
|
|
44
|
+
// https://docs.ipfs.io/reference/js/api
|
|
45
|
+
// https://github.com/ipfs/js-ipfs/tree/master/packages/ipfs-http-client
|
|
46
|
+
try {
|
|
47
|
+
const { cid, path, size } = await ipfsClient.add(file);
|
|
48
|
+
await ipfsClient.pin.add(cid);
|
|
49
|
+
// TODO(kaplanski): path is CID v0. cid is CID v1. Current default is v0, but will be updated to v1 in the future. We'll need to update to support v1.
|
|
50
|
+
return {
|
|
51
|
+
cid: path,
|
|
52
|
+
size,
|
|
53
|
+
filename: file.name
|
|
54
|
+
};
|
|
55
|
+
} catch (err) {
|
|
56
|
+
onError?.(err instanceof Error ? err : new Error(err as string)); // TODO(burdon): Generalize.
|
|
57
|
+
}
|
|
58
|
+
}));
|
|
59
|
+
};
|