@puls-atlas/cli
Version:
The Puls Atlas CLI tool for managing Atlas projects
91 lines • 2.48 kB
JavaScript
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'
};
}
};