Skip to content

Commit 4807f7c

Browse files
Merge pull request #243 from ardriveapp/PE-6440-files-in-private-drive-appearing-as-public-when-uploaded-via-cli
fix(list-folders)
2 parents 346f25d + 1c197eb commit 4807f7c

File tree

3 files changed

+50
-16
lines changed

3 files changed

+50
-16
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "ardrive-core-js",
3-
"version": "2.0.5",
3+
"version": "2.0.6",
44
"description": "ArDrive Core contains the essential back end application features to support the ArDrive CLI and Desktop apps, such as file management, Permaweb upload/download, wallet management and other common functions.",
55
"main": "./lib/exports.js",
66
"types": "./lib/exports.d.ts",

src/arfs/arfsdao.ts

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1528,16 +1528,31 @@ export class ArFSDAO extends ArFSDAOAnonymous {
15281528
const { edges } = transactions;
15291529
hasNextPage = transactions.pageInfo.hasNextPage;
15301530

1531-
const folders: Promise<ArFSPrivateFolder>[] = edges.map(async (edge: GQLEdgeInterface) => {
1532-
cursor = edge.cursor;
1533-
const { node } = edge;
1534-
const folderBuilder = ArFSPrivateFolderBuilder.fromArweaveNode(node, this.gatewayApi, driveKey);
1535-
// Build the folder so that we don't add something invalid to the cache
1536-
const folder = await folderBuilder.build(node);
1537-
const cacheKey = { folderId: folder.entityId, owner, driveKey };
1538-
return this.caches.privateFolderCache.put(cacheKey, Promise.resolve(folder));
1531+
const folderPromises: Promise<ArFSPrivateFolder | null>[] = edges.map(async (edge: GQLEdgeInterface) => {
1532+
try {
1533+
cursor = edge.cursor;
1534+
const { node } = edge;
1535+
const folderBuilder = ArFSPrivateFolderBuilder.fromArweaveNode(node, this.gatewayApi, driveKey);
1536+
// Build the folder so that we don't add something invalid to the cache
1537+
const folder = await folderBuilder.build(node);
1538+
const cacheKey = { folderId: folder.entityId, owner, driveKey };
1539+
return this.caches.privateFolderCache.put(cacheKey, Promise.resolve(folder));
1540+
} catch (e) {
1541+
// If the folder is broken, skip it
1542+
if (e instanceof SyntaxError) {
1543+
console.error(`Error building folder. Skipping... Error: ${e}`);
1544+
return null;
1545+
}
1546+
1547+
throw e;
1548+
}
15391549
});
1540-
allFolders.push(...(await Promise.all(folders)));
1550+
1551+
const folders = await Promise.all(folderPromises);
1552+
1553+
// Filter out null values
1554+
const validFolders = folders.filter((f) => f !== null) as ArFSPrivateFolder[];
1555+
allFolders.push(...(await Promise.all(validFolders)));
15411556
}
15421557

15431558
return latestRevisionsOnly ? allFolders.filter(latestRevisionFilter) : allFolders;

src/arfs/arfsdao_anonymous.ts

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -304,15 +304,32 @@ export class ArFSDAOAnonymous extends ArFSDAOType {
304304
const { edges } = transactions;
305305

306306
hasNextPage = transactions.pageInfo.hasNextPage;
307-
const folders: Promise<ArFSPublicFolder>[] = edges.map(async (edge: GQLEdgeInterface) => {
307+
const folderPromises = edges.map(async (edge: GQLEdgeInterface) => {
308308
const { node } = edge;
309309
cursor = edge.cursor;
310-
const folderBuilder = ArFSPublicFolderBuilder.fromArweaveNode(node, this.gatewayApi);
311-
const folder = await folderBuilder.build(node);
312-
const cacheKey = { folderId: folder.entityId, owner };
313-
return this.caches.publicFolderCache.put(cacheKey, Promise.resolve(folder));
310+
try {
311+
const folderBuilder = ArFSPublicFolderBuilder.fromArweaveNode(node, this.gatewayApi);
312+
const folder = await folderBuilder.build(node);
313+
const cacheKey = { folderId: folder.entityId, owner };
314+
await this.caches.publicFolderCache.put(cacheKey, Promise.resolve(folder));
315+
return folder;
316+
} catch (e) {
317+
// If the folder is broken, skip it
318+
if (e instanceof SyntaxError) {
319+
console.error(`Error building folder. Skipping... Error: ${e}`);
320+
return null;
321+
}
322+
323+
throw e;
324+
}
314325
});
315-
allFolders.push(...(await Promise.all(folders)));
326+
327+
const folders = await Promise.all(folderPromises);
328+
329+
// Filter out null values
330+
const validFolders = folders.filter((folder) => folder !== null) as ArFSPublicFolder[];
331+
332+
allFolders.push(...validFolders);
316333
}
317334
return latestRevisionsOnly ? allFolders.filter(latestRevisionFilter) : allFolders;
318335
}
@@ -338,6 +355,7 @@ export class ArFSDAOAnonymous extends ArFSDAOType {
338355

339356
// Fetch all of the folder entities within the drive
340357
const driveIdOfFolder = folder.driveId;
358+
341359
const allFolderEntitiesOfDrive = await this.getAllFoldersOfPublicDrive({
342360
driveId: driveIdOfFolder,
343361
owner,
@@ -375,6 +393,7 @@ export class ArFSDAOAnonymous extends ArFSDAOType {
375393
}
376394

377395
const entitiesWithPath = children.map((entity) => publicEntityWithPathsFactory(entity, hierarchy));
396+
378397
return entitiesWithPath;
379398
}
380399

0 commit comments

Comments
 (0)