aws-iam-policy-tool
Version:
AWS IAM role/policy management cli tool
64 lines (63 loc) • 1.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const stream_1 = require("stream");
const iam_1 = require("./iam");
/**
* ListStream
*
* incremental fetching target as readable stream
*/
class ListStream extends stream_1.Readable {
/**
* Contructor
*
* @param {String} target - Policies | Roles
* @param {Object} params - params of listPolicies
*/
constructor(params = {}) {
super({ objectMode: true, highWaterMark: 100 });
this.params = params;
this.marker = undefined;
}
_read(m) {
const params = Object.assign({}, this.params);
if (this.marker)
params.Marker = this.marker;
this.pause();
this._fetch(params)
.then(() => {
this.resume();
})
.catch((err) => {
this.emit('error', err);
});
}
}
class ListRoleStream extends ListStream {
async _fetch(params) {
const data = await iam_1.iam.listRoles(params).promise();
data.Roles.forEach((item) => this.push(item));
if (data.IsTruncated) {
this.marker = data.Marker;
}
else {
this.marker = undefined;
this.push(null); // EOS
}
}
}
exports.ListRoleStream = ListRoleStream;
class ListPolicyStream extends ListStream {
async _fetch(params) {
const data = await iam_1.iam.listPolicies(params).promise();
data.Policies.forEach((item) => this.push(item));
if (data.IsTruncated) {
this.marker = data.Marker;
}
else {
this.marker = undefined;
this.push(null); // EOS
}
}
}
exports.ListPolicyStream = ListPolicyStream;