paradigm-core
Version:
Paradigm Core Modules
116 lines (87 loc) • 2.2 kB
JavaScript
const Highwinds = require('highwinds')
const {r} = require('structure-core')
class ParadigmHighwinds {
/**
* ParadigmHighwinds constructor
*
* @public
* @constructor
* @param {String} applicationId - ID of application to purge documents for
* @param {String} url - base url to use
*/
constructor(applicationId, url) {
this.applicationId = applicationId
this.highwinds = new Highwinds({
accountHash: process.env.HIGHWINDS_ACCOUNT_HASH,
apiToken: process.env.HIGHWINDS_API_TOKEN,
applicationId: process.env.HIGHWINDS_ACCOUNT_ID,
url
})
}
/**
* Recursively invalidate an entire host
*
* @public
*/
async purgeAll() {
return this.purgeUrl('', true)
}
/**
* Invalidate a specific url, optionally recursively
*
* @public
* @param {String} url - url to purge
* @param {Boolean} recursive - whether to purge recursively, default=false
*/
async purgeUrl(url, recursive=false, invalidateOnly=false) {
const res = await this.highwinds.purgeByUrl(
url,
{
recursive,
invalidateOnly
}
)
return res
}
/**
* Update lastPurgedAt for all, or specific docIds if provided, published
* documents for an application
*
* @public
* @param {Array.String} docIds - optional docIds to limit update to
*/
async updateLastPurgedAt(docIds=[]) {
let query = r.table('documents')
if (docIds.length) {
query = query.getAll(...docIds)
}
const res = await query
.filter({
"applicationId": this.applicationId,
"status": "published"
})
.update({lastPurgedAt: r.now()})
if(res.errors && res.errors > 0) {
throw res.first_error
}
}
/**
* Wrapped call for Highwinds purgeByTag
*
* @public
*/
async purgeByTag(tag, options) {
const res = await this.highwinds.purgeByTag(tag, options)
return res
}
/**
* Wrapped call for Highwinds purgeByManyTags
*
* @public
*/
async purgeByManyTags(tags, options) {
const res = await this.highwinds.purgeByManyTags(tags, options)
return res
}
}
module.exports = ParadigmHighwinds