UNPKG

@flystorage/google-cloud-storage

Version:

<img src="https://raw.githubusercontent.com/duna-oss/flystorage/main/flystorage.svg" width="50px" height="50px" />

80 lines (79 loc) 3.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LegacyVisibilityHandling = exports.UniformBucketLevelAccessVisibilityHandling = void 0; const file_storage_1 = require("@flystorage/file-storage"); const storage_1 = require("@google-cloud/storage"); class UniformBucketLevelAccessVisibilityHandling { errorOnChange; errorOnDetermine; fakeVisibility; constructor(errorOnChange = false, errorOnDetermine = false, fakeVisibility = 'unknown') { this.errorOnChange = errorOnChange; this.errorOnDetermine = errorOnDetermine; this.fakeVisibility = fakeVisibility; } async changeVisibility(file, visibility) { if (this.errorOnChange) { throw new Error('Unable to set visibility when using uniform bucket level access control.'); } // ignored, no-op } async determineVisibility(file) { if (this.errorOnDetermine) { throw new Error('Unable to determine visibility when using uniform bucket level access control.'); } return 'unknown'; } visibilityToPredefinedAcl(visibility) { if (this.errorOnChange) { throw new Error('Unable to set visibility when using uniform bucket level access control.'); } return undefined; } } exports.UniformBucketLevelAccessVisibilityHandling = UniformBucketLevelAccessVisibilityHandling; class LegacyVisibilityHandling { entity; publicAcl; privateAcl; constructor(entity = 'allUsers', publicAcl = 'publicRead', privateAcl = 'projectPrivate') { this.entity = entity; this.publicAcl = publicAcl; this.privateAcl = privateAcl; } async changeVisibility(file, visibility) { if (visibility === file_storage_1.Visibility.PRIVATE) { await file.acl.delete({ entity: this.entity, }); } else if (visibility === file_storage_1.Visibility.PUBLIC) { await file.acl.update({ entity: this.entity, role: 'READER', }); } } async determineVisibility(file) { try { const [, metadata] = await file.acl.get({ entity: 'allUsers' }); return metadata.role === 'READER' ? file_storage_1.Visibility.PUBLIC : file_storage_1.Visibility.PRIVATE; } catch (error) { if (!(error instanceof storage_1.ApiError) || error.response?.statusCode !== 404) { throw error; } return file_storage_1.Visibility.PRIVATE; } } visibilityToPredefinedAcl(visibility) { if (visibility === file_storage_1.Visibility.PUBLIC) { return this.publicAcl; } else if (visibility === file_storage_1.Visibility.PRIVATE) { return this.privateAcl; } throw new Error(`Not able to set visibility ${visibility}, no mapping known.`); } } exports.LegacyVisibilityHandling = LegacyVisibilityHandling;