UNPKG

@puls-atlas/cli

Version:

The Puls Atlas CLI tool for managing Atlas projects

91 lines 2.48 kB
import { SecretManagerServiceClient } from '@google-cloud/secret-manager'; const createSecretManagerClient = () => new SecretManagerServiceClient(); const createSecretVersion = async (client, parent, value) => { await client.addSecretVersion({ parent, payload: { data: Buffer.from(value, 'utf8') } }); }; export const getSecret = (name, version = 'latest', project = 'puls-atlas-core', dependencies = {}) => { const { createClient = createSecretManagerClient } = dependencies; const client = createClient(); return client.accessSecretVersion({ name: `projects/${project}/secrets/${name}/versions/${version}` }).then(([secret]) => secret.payload.data.toString()); }; export const createSecret = async (name, value, project = 'puls-atlas-core', dependencies = {}) => { const { createClient = createSecretManagerClient } = dependencies; const client = createClient(); const secretName = `projects/${project}/secrets/${name}`; try { await client.getSecret({ name: secretName }); throw new Error(`Secret ${name} already exists`); } catch (error) { if (error.message === `Secret ${name} already exists`) { throw error; } if (error.code !== 5) { throw error; } const [secret] = await client.createSecret({ parent: `projects/${project}`, secretId: name, secret: { replication: { automatic: {} } } }); await createSecretVersion(client, secret.name, value); return { name, project, status: 'created' }; } }; export const upsertSecret = async (name, value, project = 'puls-atlas-core', dependencies = {}) => { const { createClient = createSecretManagerClient } = dependencies; const client = createClient(); const secretName = `projects/${project}/secrets/${name}`; try { const [secret] = await client.getSecret({ name: secretName }); await createSecretVersion(client, secret.name, value); return { name, project, status: 'updated' }; } catch (error) { if (error.code !== 5) { throw error; } const [secret] = await client.createSecret({ parent: `projects/${project}`, secret: { replication: { automatic: {} } }, secretId: name }); await createSecretVersion(client, secret.name, value); return { name, project, status: 'created' }; } };