@functionland/react-native-fula 1.0.0 → 1.1.5

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 (84) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +190 -133
  3. package/android/.gradle/7.5.1/checksums/checksums.lock +0 -0
  4. package/android/.gradle/7.5.1/checksums/md5-checksums.bin +0 -0
  5. package/android/.gradle/7.5.1/checksums/sha1-checksums.bin +0 -0
  6. package/android/.gradle/7.5.1/dependencies-accessors/dependencies-accessors.lock +0 -0
  7. package/android/.gradle/7.5.1/dependencies-accessors/gc.properties +0 -0
  8. package/android/.gradle/7.5.1/executionHistory/executionHistory.bin +0 -0
  9. package/android/.gradle/7.5.1/executionHistory/executionHistory.lock +0 -0
  10. package/android/.gradle/7.5.1/fileChanges/last-build.bin +0 -0
  11. package/android/.gradle/7.5.1/fileHashes/fileHashes.bin +0 -0
  12. package/android/.gradle/7.5.1/fileHashes/fileHashes.lock +0 -0
  13. package/android/.gradle/7.5.1/fileHashes/resourceHashesCache.bin +0 -0
  14. package/android/.gradle/7.5.1/gc.properties +0 -0
  15. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  16. package/android/.gradle/buildOutputCleanup/cache.properties +2 -2
  17. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  18. package/android/.gradle/file-system.probe +0 -0
  19. package/android/.gradle/vcs-1/gc.properties +0 -0
  20. package/android/.idea/compiler.xml +5 -5
  21. package/android/.idea/gradle.xml +18 -17
  22. package/android/.idea/jarRepositories.xml +49 -44
  23. package/android/.idea/misc.xml +9 -9
  24. package/android/.idea/sonarlint/issuestore/index.pb +0 -0
  25. package/android/.idea/vcs.xml +5 -5
  26. package/android/build.gradle +69 -69
  27. package/android/gradle/wrapper/gradle-wrapper.properties +7 -7
  28. package/android/gradle.properties +1 -1
  29. package/android/gradlew +291 -375
  30. package/android/local.properties +8 -8
  31. package/android/src/main/AndroidManifest.xml +4 -4
  32. package/android/src/main/java/land/fx/fula/ConfigRef.java +7 -7
  33. package/android/src/main/java/land/fx/fula/Cryptography.java +47 -47
  34. package/android/src/main/java/land/fx/fula/FulaModule.java +1248 -701
  35. package/android/src/main/java/land/fx/fula/FulaPackage.java +2 -2
  36. package/android/src/main/java/land/fx/fula/SharedPreferenceHelper.java +65 -65
  37. package/android/src/main/java/land/fx/fula/StaticHelper.java +13 -13
  38. package/android/src/main/java/land/fx/fula/ThreadUtils.java +42 -42
  39. package/ios/FulaModule.h +10 -10
  40. package/ios/FulaModule.m +149 -149
  41. package/lib/commonjs/index.js +5 -1
  42. package/lib/commonjs/index.js.map +1 -1
  43. package/lib/commonjs/interfaces/api-lookup.js +1653 -0
  44. package/lib/commonjs/interfaces/api-lookup.js.map +1 -0
  45. package/lib/commonjs/interfaces/fulaNativeModule.js +1 -1
  46. package/lib/commonjs/interfaces/fulaNativeModule.js.map +1 -1
  47. package/lib/commonjs/protocols/blockchain.js +404 -0
  48. package/lib/commonjs/protocols/blockchain.js.map +1 -0
  49. package/lib/commonjs/protocols/chain-api.js +87 -0
  50. package/lib/commonjs/protocols/chain-api.js.map +1 -0
  51. package/lib/commonjs/protocols/fula.js +139 -82
  52. package/lib/commonjs/protocols/fula.js.map +1 -1
  53. package/lib/commonjs/types/blockchain.js +2 -0
  54. package/lib/commonjs/types/blockchain.js.map +1 -0
  55. package/lib/module/index.js +4 -0
  56. package/lib/module/index.js.map +1 -1
  57. package/lib/module/interfaces/api-lookup.js +1648 -0
  58. package/lib/module/interfaces/api-lookup.js.map +1 -0
  59. package/lib/module/interfaces/fulaNativeModule.js +1 -1
  60. package/lib/module/interfaces/fulaNativeModule.js.map +1 -1
  61. package/lib/module/protocols/blockchain.js +383 -0
  62. package/lib/module/protocols/blockchain.js.map +1 -0
  63. package/lib/module/protocols/chain-api.js +76 -0
  64. package/lib/module/protocols/chain-api.js.map +1 -0
  65. package/lib/module/protocols/fula.js +134 -81
  66. package/lib/module/protocols/fula.js.map +1 -1
  67. package/lib/module/types/blockchain.js +2 -0
  68. package/lib/module/types/blockchain.js.map +1 -0
  69. package/lib/typescript/index.d.ts +3 -1
  70. package/lib/typescript/interfaces/api-lookup.d.ts +1643 -0
  71. package/lib/typescript/interfaces/fulaNativeModule.d.ts +58 -28
  72. package/lib/typescript/protocols/blockchain.d.ts +17 -0
  73. package/lib/typescript/protocols/chain-api.d.ts +6 -0
  74. package/lib/typescript/protocols/fula.d.ts +127 -99
  75. package/lib/typescript/types/blockchain.d.ts +68 -0
  76. package/package.json +157 -149
  77. package/react-native-fula.podspec +19 -19
  78. package/src/index.tsx +3 -1
  79. package/src/interfaces/api-lookup.ts +1647 -0
  80. package/src/interfaces/fulaNativeModule.ts +86 -52
  81. package/src/protocols/blockchain.ts +460 -0
  82. package/src/protocols/chain-api.ts +80 -0
  83. package/src/protocols/fula.ts +285 -212
  84. package/src/types/blockchain.ts +81 -0
@@ -1,28 +1,58 @@
1
- interface FulaNativeModule {
2
- init: (identity: string, //Private key of did identity
3
- storePath: string, //You can leave empty
4
- bloxAddr: string, //Blox multiadddr needs to be manually entered now
5
- exchange: string, //set to 'noope' for testing
6
- rootCid: string | null) => Promise<{
7
- peerId: string;
8
- rootCid: string;
9
- private_ref: string;
10
- }>;
11
- logout: (identity: string, storePath: string) => Promise<boolean>;
12
- get: (key: string) => Promise<string>;
13
- has: (key: Uint8Array) => Promise<boolean>;
14
- push: () => Promise<string>;
15
- put: (content: string, codec: string) => Promise<string>;
16
- mkdir: (path: string) => Promise<string>;
17
- writeFileContent: (path: string, content: string) => Promise<string>;
18
- writeFile: (fulaTargetFilename: string, localFilename: string) => Promise<string>;
19
- ls: (path: string) => Promise<string>;
20
- rm: (path: string) => Promise<string>;
21
- cp: (sourcePath: string, targetPath: string) => Promise<string>;
22
- mv: (sourcePath: string, targetPath: string) => Promise<string>;
23
- readFile: (fulaTargetFilename: string, localFilename: string) => Promise<string>;
24
- readFileContent: (path: string) => Promise<string>;
25
- shutdown: () => Promise<void>;
26
- }
27
- declare const _default: FulaNativeModule;
28
- export default _default;
1
+ interface FulaNativeModule {
2
+ init: (identity: string, //Private key of did identity
3
+ storePath: string, //You can leave empty
4
+ bloxAddr: string, //Blox multiadddr needs to be manually entered now
5
+ exchange: string, //set to 'noope' for testing
6
+ autoFlush: boolean, //set to false always unless you know what you are doing. This is to write actions to disk explicitly after each write
7
+ rootCid: string | null, //if you have the latest rootCid you can send it and it generates the private_ref for filesystem
8
+ useRelay: boolean | null, // if true it forces the use of relay
9
+ refresh: boolean) => Promise<{
10
+ peerId: string;
11
+ rootCid: string;
12
+ private_ref: string;
13
+ }>;
14
+ newClient: (identity: string, //Private key of did identity
15
+ storePath: string, //You can leave empty
16
+ bloxAddr: string, //Blox multiadddr needs to be manually entered now
17
+ exchange: string, //set to 'noope' for testing
18
+ autoFlush: boolean, //set to false always unless you know what you are doing. This is to write actions to disk explicitly after each write
19
+ useRelay: boolean | null, // if true it forces the use of relay
20
+ refresh: boolean) => Promise<string>;
21
+ isReady: (filesystemCheck: boolean) => Promise<boolean>;
22
+ logout: (identity: string, storePath: string) => Promise<boolean>;
23
+ checkFailedActions: (retry: boolean) => Promise<boolean>;
24
+ checkConnection: () => Promise<boolean>;
25
+ get: (key: string) => Promise<string>;
26
+ has: (key: Uint8Array) => Promise<boolean>;
27
+ push: () => Promise<string>;
28
+ put: (content: string, codec: string) => Promise<string>;
29
+ mkdir: (path: string) => Promise<string>;
30
+ writeFileContent: (path: string, content: string) => Promise<string>;
31
+ writeFile: (fulaTargetFilename: string, localFilename: string) => Promise<string>;
32
+ ls: (path: string) => Promise<string>;
33
+ rm: (path: string) => Promise<string>;
34
+ cp: (sourcePath: string, targetPath: string) => Promise<string>;
35
+ mv: (sourcePath: string, targetPath: string) => Promise<string>;
36
+ readFile: (fulaTargetFilename: string, localFilename: string) => Promise<string>;
37
+ readFileContent: (path: string) => Promise<string>;
38
+ setAuth: (peerId: string, allow: boolean) => Promise<boolean>;
39
+ shutdown: () => Promise<void>;
40
+ createAccount: (seed: string) => Promise<string>;
41
+ checkAccountExists: (account: string) => Promise<string>;
42
+ createPool: (seed: string, poolName: string) => Promise<string>;
43
+ listPools: () => Promise<string>;
44
+ joinPool: (seed: string, poolID: number) => Promise<string>;
45
+ leavePool: (seed: string, poolID: number) => Promise<string>;
46
+ cancelPoolJoin: (seed: string, poolID: number) => Promise<string>;
47
+ listPoolJoinRequests: (poolID: number) => Promise<string>;
48
+ votePoolJoinRequest: (seed: string, poolID: number, account: string, accept: boolean) => Promise<string>;
49
+ newReplicationRequest: (seed: string, poolID: number, replicationFactor: number, cid: string) => Promise<string>;
50
+ newStoreRequest: (seed: string, poolID: number, uploader: string, cid: string) => Promise<string>;
51
+ listAvailableReplicationRequests: (poolID: number) => Promise<string>;
52
+ removeReplicationRequest: (seed: string, poolID: number, cid: string) => Promise<string>;
53
+ removeStorer: (seed: string, storer: string, poolID: number, cid: string) => Promise<string>;
54
+ removeStoredReplication: (seed: string, uploader: string, poolID: number, cid: string) => Promise<string>;
55
+ bloxFreeSpace: () => Promise<string>;
56
+ }
57
+ declare const _default: FulaNativeModule;
58
+ export default _default;
@@ -0,0 +1,17 @@
1
+ import type * as BType from '../types/blockchain';
2
+ export declare const createAccount: (seed: string) => Promise<BType.SeededResponse>;
3
+ export declare const checkAccountExists: (account: string) => Promise<BType.AccountExistsResponse>;
4
+ export declare const createPool: (seed: string, poolName: string) => Promise<BType.PoolCreateResponse>;
5
+ export declare const listPools: () => Promise<BType.PoolListResponse>;
6
+ export declare const joinPool: (seed: string, poolID: number) => Promise<BType.PoolJoinResponse>;
7
+ export declare const leavePool: (seed: string, poolID: number) => Promise<BType.PoolLeaveResponse>;
8
+ export declare const cancelPoolJoin: (seed: string, poolID: number) => Promise<BType.PoolCancelJoinResponse>;
9
+ export declare const listPoolJoinRequests: (poolID: number) => Promise<BType.PoolRequestsResponse>;
10
+ export declare const votePoolJoinRequest: (seed: string, poolID: number, account: string, accept: boolean) => Promise<BType.PoolVoteResponse>;
11
+ export declare const newReplicationRequest: (seed: string, poolID: number, replicationFactor: number, cid: string) => Promise<BType.ManifestUploadResponse>;
12
+ export declare const newStoreRequest: (seed: string, poolID: number, uploader: string, cid: string) => Promise<BType.ManifestUploadResponse>;
13
+ export declare const listAvailableReplicationRequests: (poolID: number) => Promise<BType.ManifestUploadResponse[]>;
14
+ export declare const removeReplicationRequest: (seed: string, poolID: number, cid: string) => Promise<BType.ManifestUploadResponse>;
15
+ export declare const removeStorer: (seed: string, storer: string, poolID: number, cid: string) => Promise<BType.ManifestUploadResponse>;
16
+ export declare const removeStoredReplication: (seed: string, uploader: string, poolID: number, cid: string) => Promise<BType.ManifestUploadResponse>;
17
+ export declare const bloxFreeSpace: () => Promise<BType.BloxFreeSpaceResponse>;
@@ -0,0 +1,6 @@
1
+ import { ApiPromise } from '@polkadot/api';
2
+ import type * as BType from '../types/blockchain';
3
+ export declare const init: (wsAddress?: string) => Promise<ApiPromise>;
4
+ export declare const disconnectApi: (api: ApiPromise) => Promise<void>;
5
+ export declare const listPools: (api: ApiPromise | undefined, start?: number, length?: number) => Promise<BType.PoolListResponse>;
6
+ export declare const checkJoinRequest: (api: ApiPromise | undefined, poolId: number, accountId: string) => Promise<BType.PoolRequest | null>;
@@ -1,99 +1,127 @@
1
- /**
2
- * Get gets the value corresponding to the given key from the local datastore.
3
- // The key must be a valid ipld.Link.
4
- * @param config
5
- * @returns boolean
6
- */
7
- export declare const init: (identity: string, storePath: string, bloxAddr: string, exchange: string, rootCid?: string | null) => Promise<{
8
- peerId: string;
9
- rootCid: string;
10
- private_ref: string;
11
- }>;
12
- /**
13
- * rm removes all data
14
- * @param path
15
- * @returns string: new cid of the root
16
- */
17
- export declare const logout: (identity: string, storePath: string) => Promise<boolean>;
18
- /**
19
- * Get gets the value corresponding to the given key from the local datastore.
20
- // The key must be a valid ipld.Link.
21
- * @param key
22
- * @returns value
23
- */
24
- export declare const get: (key: string) => Promise<string>;
25
- /**
26
- * Has checks whether the value corresponding to the given key is present in the local datastore.
27
- // The key must be a valid ipld.Link.
28
- * @param key
29
- * @returns boolean
30
- */
31
- export declare const has: (key: Uint8Array) => Promise<boolean>;
32
- /**
33
- * Push requests the given addr to download the root cid from this node.
34
- // The addr must be a valid multiaddr that includes peer ID.
35
- // this function.
36
- * @param addr
37
- * @returns null or error
38
- */
39
- export declare const push: () => Promise<string>;
40
- /**
41
- * Put stores the given key value onto the local datastore.
42
- // The key must be a valid ipld.Link and the value must be the valid encoded ipld.Node corresponding
43
- // to the given key.
44
- * @param key, value
45
- * @returns null or string
46
- */
47
- export declare const put: (value: string, codec: string) => Promise<string>;
48
- /**
49
- * mkdir creates a directory at the given path.
50
- * @param path
51
- * @returns string: new cid of the root
52
- */
53
- export declare const mkdir: (path: string) => Promise<string>;
54
- /**
55
- * writeFileContent writes content at a given path
56
- * @param path
57
- * @returns string: new cid of the root
58
- */
59
- export declare const writeFileContent: (path: string, content: string) => Promise<string>;
60
- export declare const writeFile: (fulaTargetFilename: string, localFilename: string) => Promise<string>;
61
- /**
62
- * ls lists the name of files and folders at a given path
63
- * @param path
64
- * @returns string: list of items
65
- * TODO: Findout how is the string and convert to array
66
- */
67
- export declare const ls: (path: string) => Promise<void | JSON>;
68
- /**
69
- * rm removes all files and folders at a given path
70
- * @param path
71
- * @returns string: new cid of the root
72
- */
73
- export declare const rm: (path: string) => Promise<string>;
74
- /**
75
- * cp copies the file or folder at the sourcePath to targetPath. targetPath is a folder that must exist already
76
- * @param sourcePath, targetPath
77
- * @returns string: new cid of the root
78
- */
79
- export declare const cp: (sourcePath: string, targetPath: string) => Promise<string>;
80
- /**
81
- * mv moves the file or folder at the sourcePath to targetPath. targetPath is a folder that must exist already
82
- * @param sourcePath, targetPath
83
- * @returns string: new cid of the root
84
- */
85
- export declare const mv: (sourcePath: string, targetPath: string) => Promise<string>;
86
- export declare const readFile: (fulaTargetFilename: string, localFilename: string) => Promise<string>;
87
- /**
88
- * readFile reads content of a given path
89
- * @param path
90
- * @returns string: cotent
91
- */
92
- export declare const readFileContent: (path: string) => Promise<string>;
93
- /**
94
- * Shutdown closes all resources used by Client.
95
- // After calling this function Client must be discarded.
96
- * @param
97
- * @returns
98
- */
99
- export declare const shutdown: () => Promise<void>;
1
+ /**
2
+ * Get gets the value corresponding to the given key from the local datastore.
3
+ // The key must be a valid ipld.Link.
4
+ * @param config
5
+ * @returns boolean
6
+ */
7
+ export declare const init: (identity: string, storePath: string, bloxAddr: string, exchange: string, autoFlush?: boolean, rootCid?: string | null, useRelay?: boolean, refresh?: boolean) => Promise<{
8
+ peerId: string;
9
+ rootCid: string;
10
+ private_ref: string;
11
+ }>;
12
+ /**
13
+ * Get gets the value corresponding to the given key from the local datastore.
14
+ // The key must be a valid ipld.Link.
15
+ * @param config
16
+ * @returns boolean
17
+ */
18
+ export declare const newClient: (identity: string, storePath: string, bloxAddr: string, exchange: string, autoFlush?: boolean, useRelay?: boolean, refresh?: boolean) => Promise<string>;
19
+ /**
20
+ * rm removes all data
21
+ * @param path
22
+ * @returns string: new cid of the root
23
+ */
24
+ export declare const logout: (identity: string, storePath: string) => Promise<boolean>;
25
+ /**
26
+ * Checks if there are any un-synced changes on the device
27
+ */
28
+ export declare const checkFailedActions: (retry?: boolean) => Promise<boolean>;
29
+ /**
30
+ * Checks if there are any un-synced changes on the device
31
+ */
32
+ export declare const checkConnection: () => Promise<boolean>;
33
+ /**
34
+ * Get gets the value corresponding to the given key from the local datastore.
35
+ // The key must be a valid ipld.Link.
36
+ * @param key
37
+ * @returns value
38
+ */
39
+ export declare const get: (key: string) => Promise<string>;
40
+ /**
41
+ * Has checks whether the value corresponding to the given key is present in the local datastore.
42
+ // The key must be a valid ipld.Link.
43
+ * @param key
44
+ * @returns boolean
45
+ */
46
+ export declare const has: (key: Uint8Array) => Promise<boolean>;
47
+ /**
48
+ * Push requests the given addr to download the root cid from this node.
49
+ // The addr must be a valid multiaddr that includes peer ID.
50
+ // this function.
51
+ * @param addr
52
+ * @returns null or error
53
+ */
54
+ export declare const push: () => Promise<string>;
55
+ /**
56
+ * Put stores the given key value onto the local datastore.
57
+ // The key must be a valid ipld.Link and the value must be the valid encoded ipld.Node corresponding
58
+ // to the given key.
59
+ * @param key, value
60
+ * @returns null or string
61
+ */
62
+ export declare const put: (value: string, codec: string) => Promise<string>;
63
+ /**
64
+ * mkdir creates a directory at the given path.
65
+ * @param path
66
+ * @returns string: new cid of the root
67
+ */
68
+ export declare const mkdir: (path: string) => Promise<string>;
69
+ /**
70
+ * writeFileContent writes content at a given path
71
+ * @param path
72
+ * @returns string: new cid of the root
73
+ */
74
+ export declare const writeFileContent: (path: string, content: string) => Promise<string>;
75
+ export declare const writeFile: (fulaTargetFilename: string, localFilename: string) => Promise<string>;
76
+ /**
77
+ * ls lists the name of files and folders at a given path
78
+ * @param path
79
+ * @returns string: list of items
80
+ * TODO: Findout how is the string and convert to array
81
+ */
82
+ export declare const ls: (path: string) => Promise<void | JSON>;
83
+ /**
84
+ * rm removes all files and folders at a given path
85
+ * @param path
86
+ * @returns string: new cid of the root
87
+ */
88
+ export declare const rm: (path: string) => Promise<string>;
89
+ /**
90
+ * cp copies the file or folder at the sourcePath to targetPath. targetPath is a folder that must exist already
91
+ * @param sourcePath, targetPath
92
+ * @returns string: new cid of the root
93
+ */
94
+ export declare const cp: (sourcePath: string, targetPath: string) => Promise<string>;
95
+ /**
96
+ * mv moves the file or folder at the sourcePath to targetPath. targetPath is a folder that must exist already
97
+ * @param sourcePath, targetPath
98
+ * @returns string: new cid of the root
99
+ */
100
+ export declare const mv: (sourcePath: string, targetPath: string) => Promise<string>;
101
+ export declare const readFile: (fulaTargetFilename: string, localFilename: string) => Promise<string>;
102
+ /**
103
+ * readFile reads content of a given path
104
+ * @param path
105
+ * @returns string: cotent
106
+ */
107
+ export declare const readFileContent: (path: string) => Promise<string>;
108
+ /**
109
+ * Shutdown closes all resources used by Client.
110
+ // After calling this function Client must be discarded.
111
+ * @param
112
+ * @returns
113
+ */
114
+ export declare const shutdown: () => Promise<void>;
115
+ /**
116
+ * setAuth adds or removes a peer from the list of peers that are allowed to push to this node.
117
+ * This can only be called on a peer that is added as an owner of blox by --authorizer parameter
118
+ * @param peerId, allow
119
+ * @returns boolean: true if successful or false if not
120
+ */
121
+ export declare const setAuth: (peerId: string, allow: boolean) => Promise<boolean>;
122
+ /**
123
+ * isReady checks if the connection is ready to be used.
124
+ * @param filesystemCheck: also check if the wnfs is ready
125
+ * @returns boolean: true if ready or false if not
126
+ */
127
+ export declare const isReady: (filesystemCheck?: boolean) => Promise<boolean>;
@@ -0,0 +1,68 @@
1
+ export interface SeededResponse {
2
+ seed: string;
3
+ account: string;
4
+ }
5
+ export interface AccountExistsResponse {
6
+ account: string;
7
+ exists: boolean;
8
+ }
9
+ export interface PoolCreateResponse {
10
+ owner: string;
11
+ poolID: number;
12
+ }
13
+ export interface PoolJoinResponse {
14
+ account: string;
15
+ poolID: number;
16
+ }
17
+ export interface PoolCancelJoinResponse {
18
+ account: string;
19
+ poolID: number;
20
+ }
21
+ export interface PoolRequestsResponse {
22
+ poolRequests: PoolRequest[];
23
+ }
24
+ export interface PoolListResponse {
25
+ pools: Pool[];
26
+ }
27
+ export interface PoolVoteResponse {
28
+ account: string;
29
+ poolID: number;
30
+ }
31
+ export interface PoolLeaveResponse {
32
+ account: string;
33
+ poolID: number;
34
+ }
35
+ export interface ManifestUploadResponse {
36
+ uploader: string;
37
+ storage: string[];
38
+ manifestMetadata: ManifestMetadata;
39
+ poolID: number;
40
+ }
41
+ export interface PoolRequest {
42
+ poolID: number;
43
+ account: string;
44
+ voted: string[];
45
+ positiveVotes: number;
46
+ peerID: string;
47
+ }
48
+ export interface Pool {
49
+ poolID: number;
50
+ owner: string;
51
+ poolName: string;
52
+ parent: string;
53
+ participants: string[];
54
+ }
55
+ export interface ManifestMetadata {
56
+ job: ManifestJob;
57
+ }
58
+ export interface ManifestJob {
59
+ work: string;
60
+ engine: string;
61
+ uri: string;
62
+ }
63
+ export interface BloxFreeSpaceResponse {
64
+ size: number;
65
+ avail: number;
66
+ used: number;
67
+ used_percentage: number;
68
+ }