From 7742eeaf061f1fe870e4de69ae7e0e5b649e273b Mon Sep 17 00:00:00 2001 From: Don Bowman Date: Sat, 28 Dec 2019 13:19:30 -0500 Subject: [PATCH] fix(verdaccio-google-cloud): catch missing Secret on first run (#247) in getSecret, if /Secret does not exist, we had an async error uncaught. Catch it explicitly so that the Secret will get created. --- plugins/google-cloud/src/data-storage.ts | 30 ++++++++++++++++-------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/plugins/google-cloud/src/data-storage.ts b/plugins/google-cloud/src/data-storage.ts index 31e8ce54..ba89085e 100644 --- a/plugins/google-cloud/src/data-storage.ts +++ b/plugins/google-cloud/src/data-storage.ts @@ -89,16 +89,26 @@ class GoogleCloudDatabase implements IPluginStorage { - this.logger.trace({ data }, 'gcloud: [datastore getSecret] response @{data}'); - const entities = data[0]; - if (!entities) { - // @ts-ignore - return null; - } - // "{\"secret\":\"181bc38698078f880564be1e4d7ec107ac8a3b344a924c6d86cea4a84a885ae0\"}" - return entities.secret; - }); + return this.helper.datastore + .get(key) + .then((data: object): string => { + this.logger.trace({ data }, 'gcloud: [datastore getSecret] response @{data}'); + const entities = data[0]; + if (!entities) { + // @ts-ignore + return null; + } + // "{\"secret\":\"181bc38698078f880564be1e4d7ec107ac8a3b344a924c6d86cea4a84a885ae0\"}" + return entities.secret; + }) + .catch( + (err: Error): Promise => { + const error: VerdaccioError = getInternalError(err.message); + + this.logger.warn({ error }, 'gcloud: [datastore getSecret] init error @{error}'); + return Promise.reject(getServiceUnavailable('[getSecret] permissions error')); + } + ); } public setSecret(secret: string): Promise {