Skip to content

Commit

Permalink
update to proposed API
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanpbrewster committed Nov 20, 2019
1 parent 0219508 commit 9b295fa
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 30 deletions.
Expand Up @@ -4,17 +4,17 @@ import * as requireInstance from "../requireInstance";
import * as requirePermissions from "../requirePermissions";
import * as metadata from "../database/metadata";

export default new Command("database:rules:getlabels")
.description("fetch current realtime database ruleset labels")
export default new Command("database:rules:canary <ruleset_id>")
.description("mark a staged ruleset as the canary ruleset")
.option(
"--instance <instance>",
"use the database <instance>.firebaseio.com (if omitted, uses default database instance)"
)
.before(requirePermissions, ["firebasedatabase.instances.get"])
.before(requireInstance)
.action(async (options: any) => {
const labels = await metadata.getRulesetLabels(options.instance);
logger.info(`stable = ${labels.stable}`);
logger.info(`canary = ${labels.canary}`);
return labels;
.action(async (rulesetId: string, options: any) => {
await metadata.setRulesetLabels(options.instance, {
canary: rulesetId,
});
return null;
});
3 changes: 2 additions & 1 deletion src/commands/database-rules-get.ts
Expand Up @@ -14,6 +14,7 @@ export default new Command("database:rules:get <id>")
.before(requireInstance)
.action(async (id: metadata.RulesetId, options: any) => {
const ruleset = await metadata.getRuleset(options.instance, id);
logger.info(ruleset);
logger.info(`Ruleset ${ruleset.id} was created at ${ruleset.createdAt}`);
logger.info(ruleset.source);
return ruleset;
});
Expand Up @@ -4,23 +4,17 @@ import * as requireInstance from "../requireInstance";
import * as requirePermissions from "../requirePermissions";
import * as metadata from "../database/metadata";

export default new Command("database:rules:setlabels")
.description("list realtime database rulesets")
export default new Command("database:rules:release <ruleset_id>")
.description("mark a staged ruleset as the stable ruleset")
.option(
"--instance <instance>",
"use the database <instance>.firebaseio.com (if omitted, uses default database instance)"
)
.option("--stable <ruleset_id>", "[required] mark the given ruleset id as 'stable'")
.option(
"--canary <ruleset_id>",
"mark the given ruleset id as 'canary'. an empty string will remove the canary label."
)
.before(requirePermissions, ["firebasedatabase.instances.get"])
.before(requireInstance)
.action(async (options: any) => {
.action(async (rulesetId: string, options: any) => {
await metadata.setRulesetLabels(options.instance, {
stable: options.stable,
canary: options.canary,
stable: rulesetId,
});
return null;
});
Expand Up @@ -6,18 +6,19 @@ import * as metadata from "../database/metadata";
import * as fs from "fs-extra";
import * as path from "path";

export default new Command("database:rules:create <filepath>")
export default new Command("database:rules:stage")
.description("create a new realtime database ruleset")
.option(
"--instance <instance>",
"use the database <instance>.firebaseio.com (if omitted, uses default database instance)"
)
.before(requirePermissions, ["firebasedatabase.instances.get"])
.before(requireInstance)
.action(async (filepath: string, options: any) => {
.action(async (options: any) => {
const filepath = options.config.data.database.rules;
logger.info(`creating ruleset from ${filepath}`);
const source = fs.readFileSync(path.resolve(filepath), "utf8");
const ruleset = await metadata.createRuleset(options.instance, source);
logger.info(`created ruleset ${ruleset}`);
return ruleset;
const rulesetId = await metadata.createRuleset(options.instance, source);
logger.info(`staged ruleset ${rulesetId}`);
return rulesetId;
});
6 changes: 3 additions & 3 deletions src/commands/index.js
Expand Up @@ -32,11 +32,11 @@ module.exports = function(client) {
client.database.remove = loadCommand("database-remove");
if (previews.rtdbrules) {
client.database.rules = {};
client.database.rules.create = loadCommand("database-rules-create");
client.database.rules.get = loadCommand("database-rules-get");
client.database.rules.list = loadCommand("database-rules-list");
client.database.rules.getlabels = loadCommand("database-rules-getlabels");
client.database.rules.setlabels = loadCommand("database-rules-setlabels");
client.database.rules.stage = loadCommand("database-rules-stage");
client.database.rules.canary = loadCommand("database-rules-canary");
client.database.rules.release = loadCommand("database-rules-release");
}
client.database.set = loadCommand("database-set");
client.database.settings = {};
Expand Down
15 changes: 11 additions & 4 deletions src/database/metadata.ts
Expand Up @@ -20,25 +20,32 @@ function handleErrorResponse(response: any): Promise<any> {
export type RulesetSource = string;
export type RulesetId = string;
export interface LabelIds {
stable: RulesetId;
stable?: RulesetId;
canary?: RulesetId;
}

export interface Ruleset {
id: RulesetId;
createdAt: string;
source: RulesetSource;
}

export async function listAllRulesets(databaseName: string): Promise<RulesetId[]> {
const response = await api.request("GET", `/namespaces/${databaseName}/rulesets`, {
auth: true,
origin: api.rtdbMetadataOrigin,
});
if (response.status === 200) {
return response.body;
return response.body.rulesetIds;
}
return handleErrorResponse(response);
}

export async function getRuleset(databaseName: string, rulesetId: string): Promise<RulesetSource> {
export async function getRuleset(databaseName: string, rulesetId: string): Promise<Ruleset> {
const response = await api.request("GET", `/namespaces/${databaseName}/rulesets/${rulesetId}`, {
auth: true,
origin: api.rtdbMetadataOrigin,
json: true,
});
if (response.status === 200) {
return response.body;
Expand Down Expand Up @@ -68,7 +75,7 @@ export async function createRuleset(
data: source,
});
if (response.status === 200) {
return response.body;
return response.body.id;
}
return handleErrorResponse(response);
}
Expand Down
1 change: 1 addition & 0 deletions src/requireInstance.js
Expand Up @@ -6,6 +6,7 @@ module.exports = function(options) {
}

return getInstanceId(options).then((instance) => {
console.log("[RPB] fetched instance: " + instance);
options.instance = instance;
});
};

0 comments on commit 9b295fa

Please sign in to comment.