@sebbo2002/fitness-first-ical-proxy 5.0.0-develop.7 → 5.0.0-develop.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var y=Object.create;var d=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var w=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty;var S=(s,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of R(t))!T.call(s,r)&&r!==e&&d(s,r,{get:()=>t[r],enumerable:!(n=C(t,r))||n.enumerable});return s};var f=(s,t,e)=>(e=s!=null?y(w(s)):{},S(t||!s||!s.__esModule?d(e,"default",{value:s,enumerable:!0}):e,s));var p=(s,t,e)=>new Promise((n,r)=>{var l=i=>{try{a(e.next(i))}catch(o){r(o)}},m=i=>{try{a(e.throw(i))}catch(o){r(o)}},a=i=>i.done?n(i.value):Promise.resolve(i.value).then(l,m);a((e=e.apply(s,t)).next())});var g=f(require("express"),1);var h=f(require("ical-generator"),1);var c=class{static request(t){return p(this,null,function*(){let e=yield this.getCourses(t);return this.createCalendar(e)})}static getCourses(t){return p(this,null,function*(){let e="https://www.fitnessfirst.de/magicline/api/class-shedule/"+this.paramToString(t.club_id)+"/"+this.paramToString(t.category_id)+"/"+this.paramToString(t.class_id)+"/"+this.paramToString(t.daytime_id);return(yield(yield fetch(e)).json()).classes})}static createCalendar(t){let e=(0,h.default)({name:"Fitness First",ttl:21600,prodId:{company:"sebbo.net",product:"fitness-first-ical-proxy"}});return Object.entries(t).forEach(([n,r])=>{let l=n.split("_")[0];(Array.isArray(r)?r:Object.values(r)).forEach(m=>{m.forEach(a=>{let i=new Date(l+"T"+a.time.from+"Z"),o=new Date(l+"T"+a.time.to+"Z");e.createEvent({id:a.id,start:i,end:o,floating:!0,summary:a.title,location:a.club,url:a.url})})})}),e}static paramToString(t){return typeof t=="string"?t:typeof t=="undefined"||t.length===0?"all":t.map(e=>e.toString()).join("-")}};var u=class s{static run(){new s}constructor(){this.app=(0,g.default)(),this.setupRoutes(),this.server=this.app.listen(process.env.PORT||8080),process.on("SIGINT",()=>this.stop()),process.on("SIGTERM",()=>this.stop())}setupRoutes(){this.app.get("/ping",(t,e)=>{e.send("pong")}),this.app.get("/ical",(t,e)=>{c.request(t.query).then(n=>{e.writeHead(200,{"Content-Type":"text/calendar; charset=utf-8","Content-Disposition":'attachment; filename="calendar.ics"'}),e.end(n.toString())})})}stop(){return p(this,null,function*(){yield new Promise(t=>this.server.close(t)),process.exit()})}};u.run();
2
+ "use strict";var w=Object.create;var f=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var C=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty;var R=(n,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of y(e))!_.call(n,r)&&r!==t&&f(n,r,{get:()=>e[r],enumerable:!(a=b(e,r))||a.enumerable});return n};var u=(n,e,t)=>(t=n!=null?w(C(n)):{},R(e||!n||!n.__esModule?f(t,"default",{value:n,enumerable:!0}):t,n));var m=(n,e,t)=>new Promise((a,r)=>{var o=c=>{try{s(t.next(c))}catch(p){r(p)}},i=c=>{try{s(t.throw(c))}catch(p){r(p)}},s=c=>c.done?a(c.value):Promise.resolve(c.value).then(o,i);s((t=t.apply(n,e)).next())});var g=u(require("express"),1);var h=u(require("ical-generator"),1);var l=class{static request(e){return m(this,null,function*(){let t=yield this.getCourses(e);return this.createCalendar(t)})}static getCourses(e){return m(this,null,function*(){let t="https://www.fitnessfirst.de/magicline/api/class-shedule/"+this.paramToString(e.club_id)+"/"+this.paramToString(e.category_id)+"/"+this.paramToString(e.class_id)+"/"+this.paramToString(e.daytime_id),r=yield(yield fetch(t)).json();return e.club_id==="96"&&(e.category_id==="aqua"||!e.category_id)&&Object.entries(r.classes).forEach(([o,i])=>{if(o.split("_",2)[1]==="sa"){let s={id:`kinderschwimmen-${o}`,title:"Kinderschwimmen",time:{from:"09:00:00",to:"12:15:00"},category:"Aqua",club:"Berlin - Gendarmenmarkt",url:"https://www.fitnessfirst.de/news/kinderschwimmen-1635593849"};Array.isArray(i)?r.classes[o]={before_noon:[s]}:(i.before_noon=i.before_noon||[],i.before_noon.push(s))}if(o.split("_",2)[1]==="th"){let s={id:`kinderschwimmen-${o}`,title:"Kinderschwimmen",time:{from:"15:00:00",to:"17:15:00"},category:"Aqua",club:"Berlin - Gendarmenmarkt",url:"https://www.fitnessfirst.de/news/kinderschwimmen-1635593849"};Array.isArray(i)?r.classes[o]={before_noon:[s]}:(i.before_noon=i.before_noon||[],i.before_noon.push(s))}}),r.classes})}static createCalendar(e){let t=(0,h.default)({name:"Fitness First",ttl:21600,prodId:{company:"sebbo.net",product:"fitness-first-ical-proxy"}});return Object.entries(e).forEach(([a,r])=>{let o=a.split("_")[0];(Array.isArray(r)?r:Object.values(r)).forEach(i=>{i.forEach(s=>{let c=new Date(o+"T"+s.time.from+"Z"),p=new Date(o+"T"+s.time.to+"Z");t.createEvent({id:s.id,start:c,end:p,floating:!0,summary:s.title,location:s.club,url:s.url})})})}),t}static paramToString(e){return typeof e=="string"?e:typeof e=="undefined"||e.length===0?"all":e.map(t=>t.toString()).join("-")}};var d=class n{static run(){new n}constructor(){this.app=(0,g.default)(),this.setupRoutes(),this.server=this.app.listen(process.env.PORT||8080),process.on("SIGINT",()=>this.stop()),process.on("SIGTERM",()=>this.stop())}setupRoutes(){this.app.get("/ping",(e,t)=>{t.send("pong")}),this.app.get("/ical",(e,t)=>{l.request(e.query).then(a=>{t.writeHead(200,{"Content-Type":"text/calendar; charset=utf-8","Content-Disposition":'attachment; filename="calendar.ics"'}),t.end(a.toString())})})}stop(){return m(this,null,function*(){yield new Promise(e=>this.server.close(e)),process.exit()})}};d.run();
3
3
  //# sourceMappingURL=start.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/bin/start.ts","../../src/lib/index.ts"],"sourcesContent":["#!/usr/bin/env node\n'use strict';\n\nimport express, {Express} from 'express';\nimport {Server} from 'http';\nimport FitnessFirstIcalProxy from '../lib/index.js';\n\n\nclass AppServer {\n static run() {\n new AppServer();\n }\n\n private app: Express;\n private server: Server;\n\n constructor() {\n this.app = express();\n\n this.setupRoutes();\n this.server = this.app.listen(process.env.PORT || 8080);\n\n process.on('SIGINT', () => this.stop());\n process.on('SIGTERM', () => this.stop());\n }\n\n setupRoutes() {\n this.app.get('/ping', (req, res) => {\n res.send('pong');\n });\n\n this.app.get('/ical', (req, res) => {\n FitnessFirstIcalProxy.request(req.query)\n .then(calendar => {\n res.writeHead(200, {\n 'Content-Type': 'text/calendar; charset=utf-8',\n 'Content-Disposition': 'attachment; filename=\"calendar.ics\"'\n });\n\n res.end(calendar.toString());\n });\n });\n }\n\n async stop() {\n await new Promise(cb => this.server.close(cb));\n\n process.exit();\n }\n}\n\nAppServer.run();\n","import { RequestParams, ResponseClasses, ResponseCourse, ResponseData } from './types.js';\nimport type { ICalCalendar } from 'ical-generator';\nimport ical from 'ical-generator';\n\nexport default class FitnessFirstIcalProxy {\n static async request(params: RequestParams): Promise<ICalCalendar> {\n const courses = await this.getCourses(params);\n return this.createCalendar(courses);\n }\n\n static async getCourses(params: RequestParams): Promise<ResponseClasses> {\n const url = 'https://www.fitnessfirst.de/magicline/api/class-shedule/' +\n this.paramToString(params.club_id) + '/' +\n this.paramToString(params.category_id) + '/' +\n this.paramToString(params.class_id) + '/' +\n this.paramToString(params.daytime_id);\n\n const res = await fetch(url);\n const response = await res.json() as ResponseData;\n return response.classes;\n }\n\n static createCalendar(courses: ResponseClasses): ICalCalendar {\n const cal = ical({\n name: 'Fitness First',\n ttl: 60 * 60 * 6,\n prodId: {\n company: 'sebbo.net',\n product: 'fitness-first-ical-proxy'\n }\n });\n\n Object.entries(courses).forEach(([key, classes]) => {\n const day = key.split('_')[0];\n\n (Array.isArray(classes) ? classes : Object.values(classes)).forEach(courses => {\n courses.forEach((course: ResponseCourse) => {\n const start = new Date(day + 'T' + course.time.from + 'Z');\n const end = new Date(day + 'T' + course.time.to + 'Z');\n\n cal.createEvent({\n id: course.id,\n start,\n end,\n floating: true,\n summary: course.title,\n location: course.club,\n url: course.url\n });\n });\n });\n });\n\n return cal;\n }\n\n static paramToString(value: string | Array<string | number> | undefined): string {\n if (typeof value === 'string') {\n return value;\n }\n if(typeof value === 'undefined' || value.length === 0) {\n return 'all';\n }\n\n return value\n .map(v => v.toString())\n .join('-');\n }\n}\n"],"mappings":";qqBAGA,IAAAA,EAA+B,wBCD/B,IAAAC,EAAiB,+BAEjB,IAAqBC,EAArB,KAA2C,CACvC,OAAa,QAAQC,EAA8C,QAAAC,EAAA,sBAC/D,IAAMC,EAAU,MAAM,KAAK,WAAWF,CAAM,EAC5C,OAAO,KAAK,eAAeE,CAAO,CACtC,GAEA,OAAa,WAAWF,EAAiD,QAAAC,EAAA,sBACrE,IAAME,EAAM,2DACR,KAAK,cAAcH,EAAO,OAAO,EAAI,IACrC,KAAK,cAAcA,EAAO,WAAW,EAAI,IACzC,KAAK,cAAcA,EAAO,QAAQ,EAAI,IACtC,KAAK,cAAcA,EAAO,UAAU,EAIxC,OADiB,MADL,MAAM,MAAMG,CAAG,GACA,KAAK,GAChB,OACpB,GAEA,OAAO,eAAeD,EAAwC,CAC1D,IAAME,KAAM,EAAAC,SAAK,CACb,KAAM,gBACN,IAAK,MACL,OAAQ,CACJ,QAAS,YACT,QAAS,0BACb,CACJ,CAAC,EAED,cAAO,QAAQH,CAAO,EAAE,QAAQ,CAAC,CAACI,EAAKC,CAAO,IAAM,CAChD,IAAMC,EAAMF,EAAI,MAAM,GAAG,EAAE,CAAC,GAE3B,MAAM,QAAQC,CAAO,EAAIA,EAAU,OAAO,OAAOA,CAAO,GAAG,QAAQL,GAAW,CAC3EA,EAAQ,QAASO,GAA2B,CACxC,IAAMC,EAAQ,IAAI,KAAKF,EAAM,IAAMC,EAAO,KAAK,KAAO,GAAG,EACnDE,EAAM,IAAI,KAAKH,EAAM,IAAMC,EAAO,KAAK,GAAK,GAAG,EAErDL,EAAI,YAAY,CACZ,GAAIK,EAAO,GACX,MAAAC,EACA,IAAAC,EACA,SAAU,GACV,QAASF,EAAO,MAChB,SAAUA,EAAO,KACjB,IAAKA,EAAO,GAChB,CAAC,CACL,CAAC,CACL,CAAC,CACL,CAAC,EAEML,CACX,CAEA,OAAO,cAAcQ,EAA4D,CAC7E,OAAI,OAAOA,GAAU,SACVA,EAER,OAAOA,GAAU,aAAeA,EAAM,SAAW,EACzC,MAGJA,EACF,IAAIC,GAAKA,EAAE,SAAS,CAAC,EACrB,KAAK,GAAG,CACjB,CACJ,ED5DA,IAAMC,EAAN,MAAMC,CAAU,CACZ,OAAO,KAAM,CACT,IAAIA,CACR,CAKA,aAAc,CACV,KAAK,OAAM,EAAAC,SAAQ,EAEnB,KAAK,YAAY,EACjB,KAAK,OAAS,KAAK,IAAI,OAAO,QAAQ,IAAI,MAAQ,IAAI,EAEtD,QAAQ,GAAG,SAAU,IAAM,KAAK,KAAK,CAAC,EACtC,QAAQ,GAAG,UAAW,IAAM,KAAK,KAAK,CAAC,CAC3C,CAEA,aAAc,CACV,KAAK,IAAI,IAAI,QAAS,CAACC,EAAKC,IAAQ,CAChCA,EAAI,KAAK,MAAM,CACnB,CAAC,EAED,KAAK,IAAI,IAAI,QAAS,CAACD,EAAKC,IAAQ,CAChCC,EAAsB,QAAQF,EAAI,KAAK,EAClC,KAAKG,GAAY,CACdF,EAAI,UAAU,IAAK,CACf,eAAgB,+BAChB,sBAAuB,qCAC3B,CAAC,EAEDA,EAAI,IAAIE,EAAS,SAAS,CAAC,CAC/B,CAAC,CACT,CAAC,CACL,CAEM,MAAO,QAAAC,EAAA,sBACT,MAAM,IAAI,QAAQC,GAAM,KAAK,OAAO,MAAMA,CAAE,CAAC,EAE7C,QAAQ,KAAK,CACjB,GACJ,EAEAR,EAAU,IAAI","names":["import_express","import_ical_generator","FitnessFirstIcalProxy","params","__async","courses","url","cal","ical","key","classes","day","course","start","end","value","v","AppServer","_AppServer","express","req","res","FitnessFirstIcalProxy","calendar","__async","cb"]}
1
+ {"version":3,"sources":["../../src/bin/start.ts","../../src/lib/index.ts"],"sourcesContent":["#!/usr/bin/env node\n'use strict';\n\nimport express, {Express} from 'express';\nimport {Server} from 'http';\nimport FitnessFirstIcalProxy from '../lib/index.js';\n\n\nclass AppServer {\n static run() {\n new AppServer();\n }\n\n private app: Express;\n private server: Server;\n\n constructor() {\n this.app = express();\n\n this.setupRoutes();\n this.server = this.app.listen(process.env.PORT || 8080);\n\n process.on('SIGINT', () => this.stop());\n process.on('SIGTERM', () => this.stop());\n }\n\n setupRoutes() {\n this.app.get('/ping', (req, res) => {\n res.send('pong');\n });\n\n this.app.get('/ical', (req, res) => {\n FitnessFirstIcalProxy.request(req.query)\n .then(calendar => {\n res.writeHead(200, {\n 'Content-Type': 'text/calendar; charset=utf-8',\n 'Content-Disposition': 'attachment; filename=\"calendar.ics\"'\n });\n\n res.end(calendar.toString());\n });\n });\n }\n\n async stop() {\n await new Promise(cb => this.server.close(cb));\n\n process.exit();\n }\n}\n\nAppServer.run();\n","import { RequestParams, ResponseClasses, ResponseCourse, ResponseData } from './types.js';\nimport type { ICalCalendar } from 'ical-generator';\nimport ical from 'ical-generator';\n\nexport default class FitnessFirstIcalProxy {\n static async request(params: RequestParams): Promise<ICalCalendar> {\n const courses = await this.getCourses(params);\n return this.createCalendar(courses);\n }\n\n static async getCourses(params: RequestParams): Promise<ResponseClasses> {\n const url = 'https://www.fitnessfirst.de/magicline/api/class-shedule/' +\n this.paramToString(params.club_id) + '/' +\n this.paramToString(params.category_id) + '/' +\n this.paramToString(params.class_id) + '/' +\n this.paramToString(params.daytime_id);\n\n const res = await fetch(url);\n const response = await res.json() as ResponseData;\n\n // Kinderschwimmen @ Gendarmenmarkt\n if (params.club_id === '96' && (params.category_id === 'aqua' || !params.category_id)) {\n Object.entries(response.classes).forEach(([key, classes]) => {\n if (key.split('_', 2)[1] === 'sa') {\n const event = {\n id: `kinderschwimmen-${key}`,\n title: 'Kinderschwimmen',\n time: {\n from: '09:00:00',\n to: '12:15:00'\n },\n category: 'Aqua',\n club: 'Berlin - Gendarmenmarkt',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849'\n };\n\n if (Array.isArray(classes)) {\n response.classes[key] = {\n before_noon: [\n event\n ]\n };\n } else {\n classes.before_noon = classes.before_noon || [];\n classes.before_noon.push(event);\n }\n }\n if (key.split('_', 2)[1] === 'th') {\n const event = {\n id: `kinderschwimmen-${key}`,\n title: 'Kinderschwimmen',\n time: {\n from: '15:00:00',\n to: '17:15:00'\n },\n category: 'Aqua',\n club: 'Berlin - Gendarmenmarkt',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849'\n };\n\n if (Array.isArray(classes)) {\n response.classes[key] = {\n before_noon: [\n event\n ]\n };\n } else {\n classes.before_noon = classes.before_noon || [];\n classes.before_noon.push(event);\n }\n }\n });\n }\n\n return response.classes;\n }\n\n static createCalendar(courses: ResponseClasses): ICalCalendar {\n const cal = ical({\n name: 'Fitness First',\n ttl: 60 * 60 * 6,\n prodId: {\n company: 'sebbo.net',\n product: 'fitness-first-ical-proxy'\n }\n });\n\n Object.entries(courses).forEach(([key, classes]) => {\n const day = key.split('_')[0];\n\n (Array.isArray(classes) ? classes : Object.values(classes)).forEach(courses => {\n courses.forEach((course: ResponseCourse) => {\n const start = new Date(day + 'T' + course.time.from + 'Z');\n const end = new Date(day + 'T' + course.time.to + 'Z');\n\n cal.createEvent({\n id: course.id,\n start,\n end,\n floating: true,\n summary: course.title,\n location: course.club,\n url: course.url\n });\n });\n });\n });\n\n return cal;\n }\n\n static paramToString(value: string | Array<string | number> | undefined): string {\n if (typeof value === 'string') {\n return value;\n }\n if(typeof value === 'undefined' || value.length === 0) {\n return 'all';\n }\n\n return value\n .map(v => v.toString())\n .join('-');\n }\n}\n"],"mappings":"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","names":["import_express","import_ical_generator","FitnessFirstIcalProxy","params","__async","courses","url","response","key","classes","event","cal","ical","day","course","start","end","value","v","AppServer","_AppServer","express","req","res","FitnessFirstIcalProxy","calendar","__async","cb"]}
package/dist/bin/start.js CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import{a as r,b as i}from"../chunk-R3IXB24A.js";import p from"express";var t=class n{static run(){new n}constructor(){this.app=p(),this.setupRoutes(),this.server=this.app.listen(process.env.PORT||8080),process.on("SIGINT",()=>this.stop()),process.on("SIGTERM",()=>this.stop())}setupRoutes(){this.app.get("/ping",(e,s)=>{s.send("pong")}),this.app.get("/ical",(e,s)=>{i.request(e.query).then(o=>{s.writeHead(200,{"Content-Type":"text/calendar; charset=utf-8","Content-Disposition":'attachment; filename="calendar.ics"'}),s.end(o.toString())})})}stop(){return r(this,null,function*(){yield new Promise(e=>this.server.close(e)),process.exit()})}};t.run();
2
+ import{a as r,b as i}from"../chunk-O4KFVSQ5.js";import p from"express";var t=class n{static run(){new n}constructor(){this.app=p(),this.setupRoutes(),this.server=this.app.listen(process.env.PORT||8080),process.on("SIGINT",()=>this.stop()),process.on("SIGTERM",()=>this.stop())}setupRoutes(){this.app.get("/ping",(e,s)=>{s.send("pong")}),this.app.get("/ical",(e,s)=>{i.request(e.query).then(o=>{s.writeHead(200,{"Content-Type":"text/calendar; charset=utf-8","Content-Disposition":'attachment; filename="calendar.ics"'}),s.end(o.toString())})})}stop(){return r(this,null,function*(){yield new Promise(e=>this.server.close(e)),process.exit()})}};t.run();
3
3
  //# sourceMappingURL=start.js.map
@@ -0,0 +1,2 @@
1
+ var m=(d,e,r)=>new Promise((c,i)=>{var s=o=>{try{t(r.next(o))}catch(a){i(a)}},n=o=>{try{t(r.throw(o))}catch(a){i(a)}},t=o=>o.done?c(o.value):Promise.resolve(o.value).then(s,n);t((r=r.apply(d,e)).next())});import l from"ical-generator";var f=class{static request(e){return m(this,null,function*(){let r=yield this.getCourses(e);return this.createCalendar(r)})}static getCourses(e){return m(this,null,function*(){let r="https://www.fitnessfirst.de/magicline/api/class-shedule/"+this.paramToString(e.club_id)+"/"+this.paramToString(e.category_id)+"/"+this.paramToString(e.class_id)+"/"+this.paramToString(e.daytime_id),i=yield(yield fetch(r)).json();return e.club_id==="96"&&(e.category_id==="aqua"||!e.category_id)&&Object.entries(i.classes).forEach(([s,n])=>{if(s.split("_",2)[1]==="sa"){let t={id:`kinderschwimmen-${s}`,title:"Kinderschwimmen",time:{from:"09:00:00",to:"12:15:00"},category:"Aqua",club:"Berlin - Gendarmenmarkt",url:"https://www.fitnessfirst.de/news/kinderschwimmen-1635593849"};Array.isArray(n)?i.classes[s]={before_noon:[t]}:(n.before_noon=n.before_noon||[],n.before_noon.push(t))}if(s.split("_",2)[1]==="th"){let t={id:`kinderschwimmen-${s}`,title:"Kinderschwimmen",time:{from:"15:00:00",to:"17:15:00"},category:"Aqua",club:"Berlin - Gendarmenmarkt",url:"https://www.fitnessfirst.de/news/kinderschwimmen-1635593849"};Array.isArray(n)?i.classes[s]={before_noon:[t]}:(n.before_noon=n.before_noon||[],n.before_noon.push(t))}}),i.classes})}static createCalendar(e){let r=l({name:"Fitness First",ttl:21600,prodId:{company:"sebbo.net",product:"fitness-first-ical-proxy"}});return Object.entries(e).forEach(([c,i])=>{let s=c.split("_")[0];(Array.isArray(i)?i:Object.values(i)).forEach(n=>{n.forEach(t=>{let o=new Date(s+"T"+t.time.from+"Z"),a=new Date(s+"T"+t.time.to+"Z");r.createEvent({id:t.id,start:o,end:a,floating:!0,summary:t.title,location:t.club,url:t.url})})})}),r}static paramToString(e){return typeof e=="string"?e:typeof e=="undefined"||e.length===0?"all":e.map(r=>r.toString()).join("-")}};export{m as a,f as b};
2
+ //# sourceMappingURL=chunk-O4KFVSQ5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/index.ts"],"sourcesContent":["import { RequestParams, ResponseClasses, ResponseCourse, ResponseData } from './types.js';\nimport type { ICalCalendar } from 'ical-generator';\nimport ical from 'ical-generator';\n\nexport default class FitnessFirstIcalProxy {\n static async request(params: RequestParams): Promise<ICalCalendar> {\n const courses = await this.getCourses(params);\n return this.createCalendar(courses);\n }\n\n static async getCourses(params: RequestParams): Promise<ResponseClasses> {\n const url = 'https://www.fitnessfirst.de/magicline/api/class-shedule/' +\n this.paramToString(params.club_id) + '/' +\n this.paramToString(params.category_id) + '/' +\n this.paramToString(params.class_id) + '/' +\n this.paramToString(params.daytime_id);\n\n const res = await fetch(url);\n const response = await res.json() as ResponseData;\n\n // Kinderschwimmen @ Gendarmenmarkt\n if (params.club_id === '96' && (params.category_id === 'aqua' || !params.category_id)) {\n Object.entries(response.classes).forEach(([key, classes]) => {\n if (key.split('_', 2)[1] === 'sa') {\n const event = {\n id: `kinderschwimmen-${key}`,\n title: 'Kinderschwimmen',\n time: {\n from: '09:00:00',\n to: '12:15:00'\n },\n category: 'Aqua',\n club: 'Berlin - Gendarmenmarkt',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849'\n };\n\n if (Array.isArray(classes)) {\n response.classes[key] = {\n before_noon: [\n event\n ]\n };\n } else {\n classes.before_noon = classes.before_noon || [];\n classes.before_noon.push(event);\n }\n }\n if (key.split('_', 2)[1] === 'th') {\n const event = {\n id: `kinderschwimmen-${key}`,\n title: 'Kinderschwimmen',\n time: {\n from: '15:00:00',\n to: '17:15:00'\n },\n category: 'Aqua',\n club: 'Berlin - Gendarmenmarkt',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849'\n };\n\n if (Array.isArray(classes)) {\n response.classes[key] = {\n before_noon: [\n event\n ]\n };\n } else {\n classes.before_noon = classes.before_noon || [];\n classes.before_noon.push(event);\n }\n }\n });\n }\n\n return response.classes;\n }\n\n static createCalendar(courses: ResponseClasses): ICalCalendar {\n const cal = ical({\n name: 'Fitness First',\n ttl: 60 * 60 * 6,\n prodId: {\n company: 'sebbo.net',\n product: 'fitness-first-ical-proxy'\n }\n });\n\n Object.entries(courses).forEach(([key, classes]) => {\n const day = key.split('_')[0];\n\n (Array.isArray(classes) ? classes : Object.values(classes)).forEach(courses => {\n courses.forEach((course: ResponseCourse) => {\n const start = new Date(day + 'T' + course.time.from + 'Z');\n const end = new Date(day + 'T' + course.time.to + 'Z');\n\n cal.createEvent({\n id: course.id,\n start,\n end,\n floating: true,\n summary: course.title,\n location: course.club,\n url: course.url\n });\n });\n });\n });\n\n return cal;\n }\n\n static paramToString(value: string | Array<string | number> | undefined): string {\n if (typeof value === 'string') {\n return value;\n }\n if(typeof value === 'undefined' || value.length === 0) {\n return 'all';\n }\n\n return value\n .map(v => v.toString())\n .join('-');\n }\n}\n"],"mappings":"6MAEA,OAAOA,MAAU,iBAEjB,IAAqBC,EAArB,KAA2C,CACvC,OAAa,QAAQC,EAA8C,QAAAC,EAAA,sBAC/D,IAAMC,EAAU,MAAM,KAAK,WAAWF,CAAM,EAC5C,OAAO,KAAK,eAAeE,CAAO,CACtC,GAEA,OAAa,WAAWF,EAAiD,QAAAC,EAAA,sBACrE,IAAME,EAAM,2DACR,KAAK,cAAcH,EAAO,OAAO,EAAI,IACrC,KAAK,cAAcA,EAAO,WAAW,EAAI,IACzC,KAAK,cAAcA,EAAO,QAAQ,EAAI,IACtC,KAAK,cAAcA,EAAO,UAAU,EAGlCI,EAAW,MADL,MAAM,MAAMD,CAAG,GACA,KAAK,EAGhC,OAAIH,EAAO,UAAY,OAASA,EAAO,cAAgB,QAAU,CAACA,EAAO,cACrE,OAAO,QAAQI,EAAS,OAAO,EAAE,QAAQ,CAAC,CAACC,EAAKC,CAAO,IAAM,CACzD,GAAID,EAAI,MAAM,IAAK,CAAC,EAAE,CAAC,IAAM,KAAM,CAC/B,IAAME,EAAQ,CACV,GAAI,mBAAmBF,CAAG,GAC1B,MAAO,kBACP,KAAM,CACF,KAAM,WACN,GAAI,UACR,EACA,SAAU,OACV,KAAM,0BACN,IAAK,6DACT,EAEI,MAAM,QAAQC,CAAO,EACrBF,EAAS,QAAQC,CAAG,EAAI,CACpB,YAAa,CACTE,CACJ,CACJ,GAEAD,EAAQ,YAAcA,EAAQ,aAAe,CAAC,EAC9CA,EAAQ,YAAY,KAAKC,CAAK,EAEtC,CACA,GAAIF,EAAI,MAAM,IAAK,CAAC,EAAE,CAAC,IAAM,KAAM,CAC/B,IAAME,EAAQ,CACV,GAAI,mBAAmBF,CAAG,GAC1B,MAAO,kBACP,KAAM,CACF,KAAM,WACN,GAAI,UACR,EACA,SAAU,OACV,KAAM,0BACN,IAAK,6DACT,EAEI,MAAM,QAAQC,CAAO,EACrBF,EAAS,QAAQC,CAAG,EAAI,CACpB,YAAa,CACTE,CACJ,CACJ,GAEAD,EAAQ,YAAcA,EAAQ,aAAe,CAAC,EAC9CA,EAAQ,YAAY,KAAKC,CAAK,EAEtC,CACJ,CAAC,EAGEH,EAAS,OACpB,GAEA,OAAO,eAAeF,EAAwC,CAC1D,IAAMM,EAAMC,EAAK,CACb,KAAM,gBACN,IAAK,MACL,OAAQ,CACJ,QAAS,YACT,QAAS,0BACb,CACJ,CAAC,EAED,cAAO,QAAQP,CAAO,EAAE,QAAQ,CAAC,CAACG,EAAKC,CAAO,IAAM,CAChD,IAAMI,EAAML,EAAI,MAAM,GAAG,EAAE,CAAC,GAE3B,MAAM,QAAQC,CAAO,EAAIA,EAAU,OAAO,OAAOA,CAAO,GAAG,QAAQJ,GAAW,CAC3EA,EAAQ,QAASS,GAA2B,CACxC,IAAMC,EAAQ,IAAI,KAAKF,EAAM,IAAMC,EAAO,KAAK,KAAO,GAAG,EACnDE,EAAM,IAAI,KAAKH,EAAM,IAAMC,EAAO,KAAK,GAAK,GAAG,EAErDH,EAAI,YAAY,CACZ,GAAIG,EAAO,GACX,MAAAC,EACA,IAAAC,EACA,SAAU,GACV,QAASF,EAAO,MAChB,SAAUA,EAAO,KACjB,IAAKA,EAAO,GAChB,CAAC,CACL,CAAC,CACL,CAAC,CACL,CAAC,EAEMH,CACX,CAEA,OAAO,cAAcM,EAA4D,CAC7E,OAAI,OAAOA,GAAU,SACVA,EAER,OAAOA,GAAU,aAAeA,EAAM,SAAW,EACzC,MAGJA,EACF,IAAIC,GAAKA,EAAE,SAAS,CAAC,EACrB,KAAK,GAAG,CACjB,CACJ","names":["ical","FitnessFirstIcalProxy","params","__async","courses","url","response","key","classes","event","cal","ical","day","course","start","end","value","v"]}
@@ -1,2 +1,2 @@
1
- var g=Object.create;var l=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,R=Object.prototype.hasOwnProperty;var w=(s,t)=>{for(var e in t)l(s,e,{get:t[e],enumerable:!0})},f=(s,t,e,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of h(t))!R.call(s,r)&&r!==e&&l(s,r,{get:()=>t[r],enumerable:!(i=C(t,r))||i.enumerable});return s};var b=(s,t,e)=>(e=s!=null?g(y(s)):{},f(t||!s||!s.__esModule?l(e,"default",{value:s,enumerable:!0}):e,s)),T=s=>f(l({},"__esModule",{value:!0}),s);var m=(s,t,e)=>new Promise((i,r)=>{var c=n=>{try{a(e.next(n))}catch(o){r(o)}},d=n=>{try{a(e.throw(n))}catch(o){r(o)}},a=n=>n.done?i(n.value):Promise.resolve(n.value).then(c,d);a((e=e.apply(s,t)).next())});var S={};w(S,{default:()=>p});module.exports=T(S);var u=b(require("ical-generator"),1);var p=class{static request(t){return m(this,null,function*(){let e=yield this.getCourses(t);return this.createCalendar(e)})}static getCourses(t){return m(this,null,function*(){let e="https://www.fitnessfirst.de/magicline/api/class-shedule/"+this.paramToString(t.club_id)+"/"+this.paramToString(t.category_id)+"/"+this.paramToString(t.class_id)+"/"+this.paramToString(t.daytime_id);return(yield(yield fetch(e)).json()).classes})}static createCalendar(t){let e=(0,u.default)({name:"Fitness First",ttl:21600,prodId:{company:"sebbo.net",product:"fitness-first-ical-proxy"}});return Object.entries(t).forEach(([i,r])=>{let c=i.split("_")[0];(Array.isArray(r)?r:Object.values(r)).forEach(d=>{d.forEach(a=>{let n=new Date(c+"T"+a.time.from+"Z"),o=new Date(c+"T"+a.time.to+"Z");e.createEvent({id:a.id,start:n,end:o,floating:!0,summary:a.title,location:a.club,url:a.url})})})}),e}static paramToString(t){return typeof t=="string"?t:typeof t=="undefined"||t.length===0?"all":t.map(e=>e.toString()).join("-")}};
1
+ var h=Object.create;var f=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var b=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty;var y=(r,e)=>{for(var t in e)f(r,t,{get:e[t],enumerable:!0})},u=(r,e,t,c)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of g(e))!_.call(r,n)&&n!==t&&f(r,n,{get:()=>e[n],enumerable:!(c=w(e,n))||c.enumerable});return r};var C=(r,e,t)=>(t=r!=null?h(b(r)):{},u(e||!r||!r.__esModule?f(t,"default",{value:r,enumerable:!0}):t,r)),R=r=>u(f({},"__esModule",{value:!0}),r);var l=(r,e,t)=>new Promise((c,n)=>{var o=a=>{try{i(t.next(a))}catch(m){n(m)}},s=a=>{try{i(t.throw(a))}catch(m){n(m)}},i=a=>a.done?c(a.value):Promise.resolve(a.value).then(o,s);i((t=t.apply(r,e)).next())});var A={};y(A,{default:()=>d});module.exports=R(A);var p=C(require("ical-generator"),1);var d=class{static request(e){return l(this,null,function*(){let t=yield this.getCourses(e);return this.createCalendar(t)})}static getCourses(e){return l(this,null,function*(){let t="https://www.fitnessfirst.de/magicline/api/class-shedule/"+this.paramToString(e.club_id)+"/"+this.paramToString(e.category_id)+"/"+this.paramToString(e.class_id)+"/"+this.paramToString(e.daytime_id),n=yield(yield fetch(t)).json();return e.club_id==="96"&&(e.category_id==="aqua"||!e.category_id)&&Object.entries(n.classes).forEach(([o,s])=>{if(o.split("_",2)[1]==="sa"){let i={id:`kinderschwimmen-${o}`,title:"Kinderschwimmen",time:{from:"09:00:00",to:"12:15:00"},category:"Aqua",club:"Berlin - Gendarmenmarkt",url:"https://www.fitnessfirst.de/news/kinderschwimmen-1635593849"};Array.isArray(s)?n.classes[o]={before_noon:[i]}:(s.before_noon=s.before_noon||[],s.before_noon.push(i))}if(o.split("_",2)[1]==="th"){let i={id:`kinderschwimmen-${o}`,title:"Kinderschwimmen",time:{from:"15:00:00",to:"17:15:00"},category:"Aqua",club:"Berlin - Gendarmenmarkt",url:"https://www.fitnessfirst.de/news/kinderschwimmen-1635593849"};Array.isArray(s)?n.classes[o]={before_noon:[i]}:(s.before_noon=s.before_noon||[],s.before_noon.push(i))}}),n.classes})}static createCalendar(e){let t=(0,p.default)({name:"Fitness First",ttl:21600,prodId:{company:"sebbo.net",product:"fitness-first-ical-proxy"}});return Object.entries(e).forEach(([c,n])=>{let o=c.split("_")[0];(Array.isArray(n)?n:Object.values(n)).forEach(s=>{s.forEach(i=>{let a=new Date(o+"T"+i.time.from+"Z"),m=new Date(o+"T"+i.time.to+"Z");t.createEvent({id:i.id,start:a,end:m,floating:!0,summary:i.title,location:i.club,url:i.url})})})}),t}static paramToString(e){return typeof e=="string"?e:typeof e=="undefined"||e.length===0?"all":e.map(t=>t.toString()).join("-")}};
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/index.ts"],"sourcesContent":["import { RequestParams, ResponseClasses, ResponseCourse, ResponseData } from './types.js';\nimport type { ICalCalendar } from 'ical-generator';\nimport ical from 'ical-generator';\n\nexport default class FitnessFirstIcalProxy {\n static async request(params: RequestParams): Promise<ICalCalendar> {\n const courses = await this.getCourses(params);\n return this.createCalendar(courses);\n }\n\n static async getCourses(params: RequestParams): Promise<ResponseClasses> {\n const url = 'https://www.fitnessfirst.de/magicline/api/class-shedule/' +\n this.paramToString(params.club_id) + '/' +\n this.paramToString(params.category_id) + '/' +\n this.paramToString(params.class_id) + '/' +\n this.paramToString(params.daytime_id);\n\n const res = await fetch(url);\n const response = await res.json() as ResponseData;\n return response.classes;\n }\n\n static createCalendar(courses: ResponseClasses): ICalCalendar {\n const cal = ical({\n name: 'Fitness First',\n ttl: 60 * 60 * 6,\n prodId: {\n company: 'sebbo.net',\n product: 'fitness-first-ical-proxy'\n }\n });\n\n Object.entries(courses).forEach(([key, classes]) => {\n const day = key.split('_')[0];\n\n (Array.isArray(classes) ? classes : Object.values(classes)).forEach(courses => {\n courses.forEach((course: ResponseCourse) => {\n const start = new Date(day + 'T' + course.time.from + 'Z');\n const end = new Date(day + 'T' + course.time.to + 'Z');\n\n cal.createEvent({\n id: course.id,\n start,\n end,\n floating: true,\n summary: course.title,\n location: course.club,\n url: course.url\n });\n });\n });\n });\n\n return cal;\n }\n\n static paramToString(value: string | Array<string | number> | undefined): string {\n if (typeof value === 'string') {\n return value;\n }\n if(typeof value === 'undefined' || value.length === 0) {\n return 'all';\n }\n\n return value\n .map(v => v.toString())\n .join('-');\n }\n}\n"],"mappings":"0vBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAEA,IAAAI,EAAiB,+BAEjB,IAAqBC,EAArB,KAA2C,CACvC,OAAa,QAAQC,EAA8C,QAAAC,EAAA,sBAC/D,IAAMC,EAAU,MAAM,KAAK,WAAWF,CAAM,EAC5C,OAAO,KAAK,eAAeE,CAAO,CACtC,GAEA,OAAa,WAAWF,EAAiD,QAAAC,EAAA,sBACrE,IAAME,EAAM,2DACR,KAAK,cAAcH,EAAO,OAAO,EAAI,IACrC,KAAK,cAAcA,EAAO,WAAW,EAAI,IACzC,KAAK,cAAcA,EAAO,QAAQ,EAAI,IACtC,KAAK,cAAcA,EAAO,UAAU,EAIxC,OADiB,MADL,MAAM,MAAMG,CAAG,GACA,KAAK,GAChB,OACpB,GAEA,OAAO,eAAeD,EAAwC,CAC1D,IAAME,KAAM,EAAAC,SAAK,CACb,KAAM,gBACN,IAAK,MACL,OAAQ,CACJ,QAAS,YACT,QAAS,0BACb,CACJ,CAAC,EAED,cAAO,QAAQH,CAAO,EAAE,QAAQ,CAAC,CAACI,EAAKC,CAAO,IAAM,CAChD,IAAMC,EAAMF,EAAI,MAAM,GAAG,EAAE,CAAC,GAE3B,MAAM,QAAQC,CAAO,EAAIA,EAAU,OAAO,OAAOA,CAAO,GAAG,QAAQL,GAAW,CAC3EA,EAAQ,QAASO,GAA2B,CACxC,IAAMC,EAAQ,IAAI,KAAKF,EAAM,IAAMC,EAAO,KAAK,KAAO,GAAG,EACnDE,EAAM,IAAI,KAAKH,EAAM,IAAMC,EAAO,KAAK,GAAK,GAAG,EAErDL,EAAI,YAAY,CACZ,GAAIK,EAAO,GACX,MAAAC,EACA,IAAAC,EACA,SAAU,GACV,QAASF,EAAO,MAChB,SAAUA,EAAO,KACjB,IAAKA,EAAO,GAChB,CAAC,CACL,CAAC,CACL,CAAC,CACL,CAAC,EAEML,CACX,CAEA,OAAO,cAAcQ,EAA4D,CAC7E,OAAI,OAAOA,GAAU,SACVA,EAER,OAAOA,GAAU,aAAeA,EAAM,SAAW,EACzC,MAGJA,EACF,IAAIC,GAAKA,EAAE,SAAS,CAAC,EACrB,KAAK,GAAG,CACjB,CACJ","names":["lib_exports","__export","FitnessFirstIcalProxy","__toCommonJS","import_ical_generator","FitnessFirstIcalProxy","params","__async","courses","url","cal","ical","key","classes","day","course","start","end","value","v"]}
1
+ {"version":3,"sources":["../../src/lib/index.ts"],"sourcesContent":["import { RequestParams, ResponseClasses, ResponseCourse, ResponseData } from './types.js';\nimport type { ICalCalendar } from 'ical-generator';\nimport ical from 'ical-generator';\n\nexport default class FitnessFirstIcalProxy {\n static async request(params: RequestParams): Promise<ICalCalendar> {\n const courses = await this.getCourses(params);\n return this.createCalendar(courses);\n }\n\n static async getCourses(params: RequestParams): Promise<ResponseClasses> {\n const url = 'https://www.fitnessfirst.de/magicline/api/class-shedule/' +\n this.paramToString(params.club_id) + '/' +\n this.paramToString(params.category_id) + '/' +\n this.paramToString(params.class_id) + '/' +\n this.paramToString(params.daytime_id);\n\n const res = await fetch(url);\n const response = await res.json() as ResponseData;\n\n // Kinderschwimmen @ Gendarmenmarkt\n if (params.club_id === '96' && (params.category_id === 'aqua' || !params.category_id)) {\n Object.entries(response.classes).forEach(([key, classes]) => {\n if (key.split('_', 2)[1] === 'sa') {\n const event = {\n id: `kinderschwimmen-${key}`,\n title: 'Kinderschwimmen',\n time: {\n from: '09:00:00',\n to: '12:15:00'\n },\n category: 'Aqua',\n club: 'Berlin - Gendarmenmarkt',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849'\n };\n\n if (Array.isArray(classes)) {\n response.classes[key] = {\n before_noon: [\n event\n ]\n };\n } else {\n classes.before_noon = classes.before_noon || [];\n classes.before_noon.push(event);\n }\n }\n if (key.split('_', 2)[1] === 'th') {\n const event = {\n id: `kinderschwimmen-${key}`,\n title: 'Kinderschwimmen',\n time: {\n from: '15:00:00',\n to: '17:15:00'\n },\n category: 'Aqua',\n club: 'Berlin - Gendarmenmarkt',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849'\n };\n\n if (Array.isArray(classes)) {\n response.classes[key] = {\n before_noon: [\n event\n ]\n };\n } else {\n classes.before_noon = classes.before_noon || [];\n classes.before_noon.push(event);\n }\n }\n });\n }\n\n return response.classes;\n }\n\n static createCalendar(courses: ResponseClasses): ICalCalendar {\n const cal = ical({\n name: 'Fitness First',\n ttl: 60 * 60 * 6,\n prodId: {\n company: 'sebbo.net',\n product: 'fitness-first-ical-proxy'\n }\n });\n\n Object.entries(courses).forEach(([key, classes]) => {\n const day = key.split('_')[0];\n\n (Array.isArray(classes) ? classes : Object.values(classes)).forEach(courses => {\n courses.forEach((course: ResponseCourse) => {\n const start = new Date(day + 'T' + course.time.from + 'Z');\n const end = new Date(day + 'T' + course.time.to + 'Z');\n\n cal.createEvent({\n id: course.id,\n start,\n end,\n floating: true,\n summary: course.title,\n location: course.club,\n url: course.url\n });\n });\n });\n });\n\n return cal;\n }\n\n static paramToString(value: string | Array<string | number> | undefined): string {\n if (typeof value === 'string') {\n return value;\n }\n if(typeof value === 'undefined' || value.length === 0) {\n return 'all';\n }\n\n return value\n .map(v => v.toString())\n .join('-');\n }\n}\n"],"mappings":"0vBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAEA,IAAAI,EAAiB,+BAEjB,IAAqBC,EAArB,KAA2C,CACvC,OAAa,QAAQC,EAA8C,QAAAC,EAAA,sBAC/D,IAAMC,EAAU,MAAM,KAAK,WAAWF,CAAM,EAC5C,OAAO,KAAK,eAAeE,CAAO,CACtC,GAEA,OAAa,WAAWF,EAAiD,QAAAC,EAAA,sBACrE,IAAME,EAAM,2DACR,KAAK,cAAcH,EAAO,OAAO,EAAI,IACrC,KAAK,cAAcA,EAAO,WAAW,EAAI,IACzC,KAAK,cAAcA,EAAO,QAAQ,EAAI,IACtC,KAAK,cAAcA,EAAO,UAAU,EAGlCI,EAAW,MADL,MAAM,MAAMD,CAAG,GACA,KAAK,EAGhC,OAAIH,EAAO,UAAY,OAASA,EAAO,cAAgB,QAAU,CAACA,EAAO,cACrE,OAAO,QAAQI,EAAS,OAAO,EAAE,QAAQ,CAAC,CAACC,EAAKC,CAAO,IAAM,CACzD,GAAID,EAAI,MAAM,IAAK,CAAC,EAAE,CAAC,IAAM,KAAM,CAC/B,IAAME,EAAQ,CACV,GAAI,mBAAmBF,CAAG,GAC1B,MAAO,kBACP,KAAM,CACF,KAAM,WACN,GAAI,UACR,EACA,SAAU,OACV,KAAM,0BACN,IAAK,6DACT,EAEI,MAAM,QAAQC,CAAO,EACrBF,EAAS,QAAQC,CAAG,EAAI,CACpB,YAAa,CACTE,CACJ,CACJ,GAEAD,EAAQ,YAAcA,EAAQ,aAAe,CAAC,EAC9CA,EAAQ,YAAY,KAAKC,CAAK,EAEtC,CACA,GAAIF,EAAI,MAAM,IAAK,CAAC,EAAE,CAAC,IAAM,KAAM,CAC/B,IAAME,EAAQ,CACV,GAAI,mBAAmBF,CAAG,GAC1B,MAAO,kBACP,KAAM,CACF,KAAM,WACN,GAAI,UACR,EACA,SAAU,OACV,KAAM,0BACN,IAAK,6DACT,EAEI,MAAM,QAAQC,CAAO,EACrBF,EAAS,QAAQC,CAAG,EAAI,CACpB,YAAa,CACTE,CACJ,CACJ,GAEAD,EAAQ,YAAcA,EAAQ,aAAe,CAAC,EAC9CA,EAAQ,YAAY,KAAKC,CAAK,EAEtC,CACJ,CAAC,EAGEH,EAAS,OACpB,GAEA,OAAO,eAAeF,EAAwC,CAC1D,IAAMM,KAAM,EAAAC,SAAK,CACb,KAAM,gBACN,IAAK,MACL,OAAQ,CACJ,QAAS,YACT,QAAS,0BACb,CACJ,CAAC,EAED,cAAO,QAAQP,CAAO,EAAE,QAAQ,CAAC,CAACG,EAAKC,CAAO,IAAM,CAChD,IAAMI,EAAML,EAAI,MAAM,GAAG,EAAE,CAAC,GAE3B,MAAM,QAAQC,CAAO,EAAIA,EAAU,OAAO,OAAOA,CAAO,GAAG,QAAQJ,GAAW,CAC3EA,EAAQ,QAASS,GAA2B,CACxC,IAAMC,EAAQ,IAAI,KAAKF,EAAM,IAAMC,EAAO,KAAK,KAAO,GAAG,EACnDE,EAAM,IAAI,KAAKH,EAAM,IAAMC,EAAO,KAAK,GAAK,GAAG,EAErDH,EAAI,YAAY,CACZ,GAAIG,EAAO,GACX,MAAAC,EACA,IAAAC,EACA,SAAU,GACV,QAASF,EAAO,MAChB,SAAUA,EAAO,KACjB,IAAKA,EAAO,GAChB,CAAC,CACL,CAAC,CACL,CAAC,CACL,CAAC,EAEMH,CACX,CAEA,OAAO,cAAcM,EAA4D,CAC7E,OAAI,OAAOA,GAAU,SACVA,EAER,OAAOA,GAAU,aAAeA,EAAM,SAAW,EACzC,MAGJA,EACF,IAAIC,GAAKA,EAAE,SAAS,CAAC,EACrB,KAAK,GAAG,CACjB,CACJ","names":["lib_exports","__export","FitnessFirstIcalProxy","__toCommonJS","import_ical_generator","FitnessFirstIcalProxy","params","__async","courses","url","response","key","classes","event","cal","ical","day","course","start","end","value","v"]}
package/dist/lib/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{b as a}from"../chunk-R3IXB24A.js";export{a as default};
1
+ import{b as a}from"../chunk-O4KFVSQ5.js";export{a as default};
2
2
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -68,5 +68,5 @@
68
68
  "test": "mocha"
69
69
  },
70
70
  "type": "module",
71
- "version": "5.0.0-develop.7"
71
+ "version": "5.0.0-develop.8"
72
72
  }
@@ -1,2 +0,0 @@
1
- var l=(d,t,e)=>new Promise((i,a)=>{var o=r=>{try{s(e.next(r))}catch(n){a(n)}},c=r=>{try{s(e.throw(r))}catch(n){a(n)}},s=r=>r.done?i(r.value):Promise.resolve(r.value).then(o,c);s((e=e.apply(d,t)).next())});import m from"ical-generator";var p=class{static request(t){return l(this,null,function*(){let e=yield this.getCourses(t);return this.createCalendar(e)})}static getCourses(t){return l(this,null,function*(){let e="https://www.fitnessfirst.de/magicline/api/class-shedule/"+this.paramToString(t.club_id)+"/"+this.paramToString(t.category_id)+"/"+this.paramToString(t.class_id)+"/"+this.paramToString(t.daytime_id);return(yield(yield fetch(e)).json()).classes})}static createCalendar(t){let e=m({name:"Fitness First",ttl:21600,prodId:{company:"sebbo.net",product:"fitness-first-ical-proxy"}});return Object.entries(t).forEach(([i,a])=>{let o=i.split("_")[0];(Array.isArray(a)?a:Object.values(a)).forEach(c=>{c.forEach(s=>{let r=new Date(o+"T"+s.time.from+"Z"),n=new Date(o+"T"+s.time.to+"Z");e.createEvent({id:s.id,start:r,end:n,floating:!0,summary:s.title,location:s.club,url:s.url})})})}),e}static paramToString(t){return typeof t=="string"?t:typeof t=="undefined"||t.length===0?"all":t.map(e=>e.toString()).join("-")}};export{l as a,p as b};
2
- //# sourceMappingURL=chunk-R3IXB24A.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/index.ts"],"sourcesContent":["import { RequestParams, ResponseClasses, ResponseCourse, ResponseData } from './types.js';\nimport type { ICalCalendar } from 'ical-generator';\nimport ical from 'ical-generator';\n\nexport default class FitnessFirstIcalProxy {\n static async request(params: RequestParams): Promise<ICalCalendar> {\n const courses = await this.getCourses(params);\n return this.createCalendar(courses);\n }\n\n static async getCourses(params: RequestParams): Promise<ResponseClasses> {\n const url = 'https://www.fitnessfirst.de/magicline/api/class-shedule/' +\n this.paramToString(params.club_id) + '/' +\n this.paramToString(params.category_id) + '/' +\n this.paramToString(params.class_id) + '/' +\n this.paramToString(params.daytime_id);\n\n const res = await fetch(url);\n const response = await res.json() as ResponseData;\n return response.classes;\n }\n\n static createCalendar(courses: ResponseClasses): ICalCalendar {\n const cal = ical({\n name: 'Fitness First',\n ttl: 60 * 60 * 6,\n prodId: {\n company: 'sebbo.net',\n product: 'fitness-first-ical-proxy'\n }\n });\n\n Object.entries(courses).forEach(([key, classes]) => {\n const day = key.split('_')[0];\n\n (Array.isArray(classes) ? classes : Object.values(classes)).forEach(courses => {\n courses.forEach((course: ResponseCourse) => {\n const start = new Date(day + 'T' + course.time.from + 'Z');\n const end = new Date(day + 'T' + course.time.to + 'Z');\n\n cal.createEvent({\n id: course.id,\n start,\n end,\n floating: true,\n summary: course.title,\n location: course.club,\n url: course.url\n });\n });\n });\n });\n\n return cal;\n }\n\n static paramToString(value: string | Array<string | number> | undefined): string {\n if (typeof value === 'string') {\n return value;\n }\n if(typeof value === 'undefined' || value.length === 0) {\n return 'all';\n }\n\n return value\n .map(v => v.toString())\n .join('-');\n }\n}\n"],"mappings":"6MAEA,OAAOA,MAAU,iBAEjB,IAAqBC,EAArB,KAA2C,CACvC,OAAa,QAAQC,EAA8C,QAAAC,EAAA,sBAC/D,IAAMC,EAAU,MAAM,KAAK,WAAWF,CAAM,EAC5C,OAAO,KAAK,eAAeE,CAAO,CACtC,GAEA,OAAa,WAAWF,EAAiD,QAAAC,EAAA,sBACrE,IAAME,EAAM,2DACR,KAAK,cAAcH,EAAO,OAAO,EAAI,IACrC,KAAK,cAAcA,EAAO,WAAW,EAAI,IACzC,KAAK,cAAcA,EAAO,QAAQ,EAAI,IACtC,KAAK,cAAcA,EAAO,UAAU,EAIxC,OADiB,MADL,MAAM,MAAMG,CAAG,GACA,KAAK,GAChB,OACpB,GAEA,OAAO,eAAeD,EAAwC,CAC1D,IAAME,EAAMC,EAAK,CACb,KAAM,gBACN,IAAK,MACL,OAAQ,CACJ,QAAS,YACT,QAAS,0BACb,CACJ,CAAC,EAED,cAAO,QAAQH,CAAO,EAAE,QAAQ,CAAC,CAACI,EAAKC,CAAO,IAAM,CAChD,IAAMC,EAAMF,EAAI,MAAM,GAAG,EAAE,CAAC,GAE3B,MAAM,QAAQC,CAAO,EAAIA,EAAU,OAAO,OAAOA,CAAO,GAAG,QAAQL,GAAW,CAC3EA,EAAQ,QAASO,GAA2B,CACxC,IAAMC,EAAQ,IAAI,KAAKF,EAAM,IAAMC,EAAO,KAAK,KAAO,GAAG,EACnDE,EAAM,IAAI,KAAKH,EAAM,IAAMC,EAAO,KAAK,GAAK,GAAG,EAErDL,EAAI,YAAY,CACZ,GAAIK,EAAO,GACX,MAAAC,EACA,IAAAC,EACA,SAAU,GACV,QAASF,EAAO,MAChB,SAAUA,EAAO,KACjB,IAAKA,EAAO,GAChB,CAAC,CACL,CAAC,CACL,CAAC,CACL,CAAC,EAEML,CACX,CAEA,OAAO,cAAcQ,EAA4D,CAC7E,OAAI,OAAOA,GAAU,SACVA,EAER,OAAOA,GAAU,aAAeA,EAAM,SAAW,EACzC,MAGJA,EACF,IAAIC,GAAKA,EAAE,SAAS,CAAC,EACrB,KAAK,GAAG,CACjB,CACJ","names":["ical","FitnessFirstIcalProxy","params","__async","courses","url","cal","ical","key","classes","day","course","start","end","value","v"]}