in api/v1/src/admin/dataManager.js [358:421]
async function listenForMessages() {
try {
console.log(`Creating message handler for subscription: ${subscriptionName}`);
const messageHandler = async message => {
console.log(`Received message ${message.id}:`);
console.log(`\tData: ${message.data}`);
console.log(`\tAttributes: ${JSON.stringify(message.attributes)}`);
if (message.data) {
const data = JSON.parse(message.data);
console.log(`Event type is: ${data.eventType}`);
const eventType = data.eventType;
if (eventType === 'ENTITLEMENT_CREATION_REQUESTED' || eventType === 'ENTITLEMENT_PLAN_CHANGE_REQUESTED') {
// Perform auto-approve here for policies that have auto-approve enabled
console.log(`Running auto approve for eventType: ${eventType}`);
await procurementManager.autoApproveEntitlement(projectId, data.entitlement.id)
} else if (eventType === 'ENTITLEMENT_ACTIVE') {
// Grant permissions for newly active entitlement
await procurementManager.activateNewEntitlement(projectId, data.entitlement.id)
} else if (eventType === 'ENTITLEMENT_CANCELLED' || eventType === 'ENTITLEMENT_DELETED' || eventType === 'ENTITLEMENT_SUSPENDED') {
// Remove user from the policy
console.log(`Running cancellation for eventType: ${eventType}`);
await procurementManager.cancelEntitlement(projectId, data.entitlement.id)
} else if (eventType === 'ENTITLEMENT_PLAN_CHANGED') {
// Grant permissions for the plan change
console.log(`Running auto approve for eventType: ${eventType}`);
await procurementManager.activateNewPlanChange(projectId, data.entitlement.id);
} else if (eventType === 'ACCOUNT_DELETED') {
// Delete the user account
console.log(`Running delete account for eventType: ${eventType}`);
await procurementManager.deleteAccount(projectId, data.account.id);
} else {
console.debug(`Event type not implemented: ${eventType}`);
}
}
// "Ack" (acknowledge receipt of) the message
message.ack();
};
// Create an event handler to handle errors
const errorHandler = function (error) {
console.error(`ERROR: ${error}`);
};
const subscriberOptions = {
flowControl: {
maxMessages: 1,
}
};
let subscription = pubSubUtil.getSubscription(subscriptionName, subscriberOptions);
subscription.on('message', messageHandler);
subscription.on('error', errorHandler);
subscription.on('close', () => { console.error('Subscription closed') });
subscription.detached((err, exists) => {
console.log(`Is subscription detached: ${exists}`);
if (err) {
console.error(err);
}
});
} catch (err) {
console.error(err);
}
}