UNPKG

@akumzy/cron-api-sdk

Version:

TypeScript SDK for Cron API and Reminder services

21 lines (15 loc) 6.13 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var v = require('axios'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var v__default = /*#__PURE__*/_interopDefault(v); var p=class{constructor(e){this.client=v__default.default.create({baseURL:e.baseURL,timeout:e.timeout||1e4,headers:{"Content-Type":"application/json",...e.headers}}),e.auth&&(this.client.defaults.auth={username:e.auth.username,password:e.auth.password}),this.client.interceptors.response.use(r=>r,r=>{if(r.response){let t=r.response.data?.error||r.response.statusText;throw new Error(`API Error (${r.response.status}): ${t}`)}else throw r.request?new Error("Network Error: No response received from server"):new Error(`Request Error: ${r.message}`)});}async _get(e){return (await this.client.get(e)).data}async _post(e,r){return (await this.client.post(e,r)).data}async _put(e,r){return (await this.client.put(e,r)).data}async _delete(e){return (await this.client.delete(e)).data}async ping(){return this._get("/api/ping")}};var d=class extends p{constructor(e){super(e);}async getAll(){return this._get("/api/jobs")}async getById(e){return this._get(`/api/jobs/${e}`)}async create(e){return this._post("/api/jobs",e)}async update(e){return this._put(`/api/jobs/${e.id}`,e)}async delete(e){return this._delete(`/api/jobs/${e}`)}async getLogs(e){return this._get(`/api/jobs/${e}/logs`)}async trigger(e){return this._post(`/api/jobs/${e}/trigger`)}async getAllLogs(){return this._get("/api/logs")}};var g=class extends p{constructor(e){super(e);}async getAll(){return this._get("/api/reminders")}async getById(e){return this._get(`/api/reminders/${e}`)}async create(e){return this._post("/api/reminders",e)}async update(e){return this._put(`/api/reminders/${e.id}`,e)}async delete(e){return this._delete(`/api/reminders/${e}`)}async getLogs(e){return this._get(`/api/reminders/${e}/logs`)}async trigger(e){return this._post(`/api/reminders/${e}/trigger`)}async getAllLogs(){return this._get("/api/reminder-logs")}};var l=class extends p{constructor(e){super(e);}async getAll(){return this._get("/api/services")}async getById(e){return this._get(`/api/services/${e}`)}async create(e){return this._post("/api/services",e)}async update(e){return this._put(`/api/services/${e.id}`,e)}async delete(e){return this._delete(`/api/services/${e}`)}};var y=class u{constructor(e){this.jobs=new d(e),this.reminders=new g(e),this.services=new l(e);}async ping(){return this.jobs.ping()}static create(e,r){return new u({baseURL:e,auth:r})}static createForDev(e){return new u({baseURL:"http://localhost:8080",auth:e})}};var h=class{static validateCronExpression(e){if(!e||typeof e!="string")return !1;let r=e.trim().split(/\s+/);if(r.length!==5)return !1;let[t,a,n,i,s]=r,o={minute:/^(\*|([0-5]?\d)(,([0-5]?\d))*|([0-5]?\d)-([0-5]?\d)|(\*\/([1-9]\d*)))$/,hour:/^(\*|(1?\d|2[0-3])(,(1?\d|2[0-3]))*|(1?\d|2[0-3])-(1?\d|2[0-3])|(\*\/([1-9]\d*)))$/,day:/^(\*|([1-9]|[12]\d|3[01])(,([1-9]|[12]\d|3[01]))*|([1-9]|[12]\d|3[01])-([1-9]|[12]\d|3[01])|(\*\/([1-9]\d*)))$/,month:/^(\*|([1-9]|1[0-2])(,([1-9]|1[0-2]))*|([1-9]|1[0-2])-([1-9]|1[0-2])|(\*\/([1-9]\d*)))$/,dayOfWeek:/^(\*|[0-6](,[0-6])*|[0-6]-[0-6]|(\*\/([1-7])))$/};return o.minute.test(t)&&o.hour.test(a)&&o.day.test(n)&&o.month.test(i)&&o.dayOfWeek.test(s)}static parseCronExpression(e){if(!this.validateCronExpression(e))return "Invalid cron expression";for(let[o,m]of Object.entries(this.commonExpressions))if(m===e)return this.humanizeCommonExpression(o);let[r,t,a,n,i]=e.split(/\s+/),s="At ";if(r==="*"&&t==="*"?s+="every minute":r==="0"&&t==="*"?s+="every hour":r==="0"&&t!=="*"?s+=`${t}:00`:r!=="*"&&t!=="*"?s+=`${t}:${r.padStart(2,"0")}`:s+=`minute ${r} of every hour`,a!=="*"||n!=="*"||i!=="*"){if(s+=" on ",i!=="*"){let o=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];if(i.includes(",")){let m=i.split(",").map(c=>parseInt(c));s+=m.map(c=>o[c]).join(", ");}else if(i.includes("-")){let[m,c]=i.split("-").map(b=>parseInt(b));s+=`${o[m]} through ${o[c]}`;}else s+=o[parseInt(i)];}a!=="*"&&(s+=` the ${a}${this.getOrdinalSuffix(parseInt(a))}`),n!=="*"&&(s+=` of ${["January","February","March","April","May","June","July","August","September","October","November","December"][parseInt(n)-1]}`);}return s}static humanizeCommonExpression(e){return {everyMinute:"Every minute",every5Minutes:"Every 5 minutes",every15Minutes:"Every 15 minutes",every30Minutes:"Every 30 minutes",everyHour:"Every hour",everyDay:"Every day at midnight",everyWeek:"Every week on Sunday at midnight",everyMonth:"Every month on the 1st at midnight",everyYear:"Every year on January 1st at midnight",weekdays:"Every weekday at 9:00 AM",weekends:"Every weekend at 10:00 AM"}[e]||e}static getOrdinalSuffix(e){let r=e%10,t=e%100;return r===1&&t!==11?"st":r===2&&t!==12?"nd":r===3&&t!==13?"rd":"th"}static getNextExecutions(e,r=5){if(!this.validateCronExpression(e))return [];let t=[],a=new Date,n=new Date(a.getTime()+6e4),[i,s,o,m,c]=e.split(/\s+/);for(let b=0;b<r&&t.length<r;b++)this.matchesCronExpression(n,i,s,o,m,c)&&t.push(new Date(n)),n=new Date(n.getTime()+6e4);return t}static matchesCronExpression(e,r,t,a,n,i){let s={minute:r==="*"||parseInt(r)===e.getMinutes(),hour:t==="*"||parseInt(t)===e.getHours(),day:a==="*"||parseInt(a)===e.getDate(),month:n==="*"||parseInt(n)===e.getMonth()+1,dayOfWeek:i==="*"||parseInt(i)===e.getDay()};return Object.values(s).every(Boolean)}static createCronExpression(e){let{minute:r="*",hour:t="*",day:a="*",month:n="*",dayOfWeek:i="*"}=e;return `${r} ${t} ${a} ${n} ${i}`}};h.commonExpressions={everyMinute:"* * * * *",every5Minutes:"*/5 * * * *",every15Minutes:"*/15 * * * *",every30Minutes:"*/30 * * * *",everyHour:"0 * * * *",everyDay:"0 0 * * *",everyWeek:"0 0 * * 0",everyMonth:"0 0 1 * *",everyYear:"0 0 1 1 *",weekdays:"0 9 * * 1-5",weekends:"0 10 * * 0,6"};var I=y; exports.BaseClient = p; exports.CronApiSDK = y; exports.CronUtils = h; exports.JobsClient = d; exports.RemindersClient = g; exports.ServicesClient = l; exports.default = I; //# sourceMappingURL=out.js.map //# sourceMappingURL=index.js.map