particle-cli
Version:
Simple Node commandline application for working with your Particle devices and using the Particle Cloud
72 lines (66 loc) • 1.9 kB
JavaScript
async function list({ api, org } = {}) {
const response = await api.listSecrets({ orgSlug: org });
return response.secrets?.length ? formatSecretList(response.secrets) : [];
}
async function create({ api, org, name, value } = {}) {
// validate name
const regex =/^[A-Z_][A-Z0-9_]*$/;
if (!regex.test(name)) {
throw new Error('Keys may include only uppercase letters, digits, and underscores, and must not begin with a digit.');
}
if (!value) {
throw new Error('value is required');
}
const response = await api.createSecret({ orgSlug: org, name, value });
if (response.secret) {
return formatSecret(response);
} else {
throw new Error('Unable to create secret');
}
}
async function get({ api, org, name }) {
const response = await api.getSecret({ api, orgSlug: org, name });
return formatSecret(response);
}
async function update({ api, org, name, value } = {}) {
if (!value) {
throw new Error('value is required');
}
const response = await api.updateSecret({ orgSlug: org, name, value });
return formatSecret(response);
}
async function remove({ api, org, name } = {}) {
const response = await api.removeSecret({ orgSlug: org, name });
if (!response.error) {
return true;
}
}
async function formatSecret(secretResponse) {
const secret = secretResponse.secret;
return {
name: secret.name,
createdAt: secret.created_at,
updatedAt: secret.updated_at,
lastAccessedAt: secret.last_accessed_at,
logicFunctions: secret.logic_functions,
integrations: secret.integrations,
};
}
async function formatSecretList(secretList) {
return secretList.map((secret) => {
return {
name: secret.name,
createdAt: secret.created_at,
updatedAt: secret.updated_at,
lastAccessedAt: secret.last_accessed_at,
usageCount: secret.integrations.length + secret.logic_functions.length,
};
});
}
module.exports = {
list,
create,
update,
remove,
get
};