@payburner/keyburner-sidewinder-core
Version:
Core library for Keyburner Sidewinder
82 lines • 3.13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.AWSDynamoGlobalAddressService = void 0;
class AWSDynamoGlobalAddressService {
constructor(docClient) {
this.docClient = null;
this.docClient = docClient;
}
sequenceKey(address, environment) {
return environment + '/' + address;
}
setEnvironmentAddressState(address, environment, sequence, txn_id) {
const self = this;
return new Promise(function (resolve, reject) {
self.getEnvironmentAddressState(address, environment).then((existingSequence) => {
if (existingSequence.sequence === 0 && sequence === 0) {
resolve(true);
return;
}
else if (sequence != existingSequence.sequence + 1) {
resolve(false);
return;
}
const dataBody = {
address: address,
environment: environment,
sequence: sequence,
last_txn_id: txn_id
};
const params = {
TableName: 'sidewinder_sequence',
Item: dataBody
};
const t0 = new Date().getTime();
self.docClient.put(params, function (err, data) {
console.log('Update Time Set Sequence: ' + (new Date().getTime() - t0));
if (err) {
resolve(false);
}
else {
resolve(true);
}
});
});
});
}
getEnvironmentAddressState(address, environment) {
const self = this;
return new Promise((resolve, reject) => {
const params = {
TableName: "sidewinder_sequence",
IndexName: 'address-environment-index',
KeyConditionExpression: "address = :address and environment = :environment",
ExpressionAttributeValues: {
":address": address,
":environment": environment
}
};
self.docClient.query(params, function (err, data) {
if (err) {
console.error("getEnvironmentAddressState :: Unable to query. Error:", JSON.stringify(err, null, 2));
reject(err);
}
else {
if (data.Items.length === 0) {
resolve({
address: address,
environment: environment,
last_txn_id: 'NONE',
sequence: 0
});
}
else {
resolve(data.Items[0]);
}
}
});
});
}
}
exports.AWSDynamoGlobalAddressService = AWSDynamoGlobalAddressService;
//# sourceMappingURL=AWSDynamoGlobalAddressService.js.map