@sebbo2002/fitness-first-ical-proxy 5.0.4-develop.3 → 6.0.0
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.
- package/dist/bin/start.cjs +1 -1
- package/dist/bin/start.cjs.map +1 -1
- package/dist/bin/start.js +1 -1
- package/dist/bin/start.js.map +1 -1
- package/dist/{chunk-BPMYKCU7.js → chunk-GBH4JMAN.js} +1 -1
- package/dist/chunk-GBH4JMAN.js.map +1 -0
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.cjs.map +1 -1
- package/dist/lib/index.js +1 -1
- package/package.json +8 -8
- package/dist/chunk-BPMYKCU7.js.map +0 -1
package/dist/bin/start.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var g=Object.create;var m=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var
|
|
2
|
+
"use strict";var g=Object.create;var m=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var b=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var _=(s,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of y(e))!C.call(s,r)&&r!==t&&m(s,r,{get:()=>e[r],enumerable:!(a=w(e,r))||a.enumerable});return s};var l=(s,e,t)=>(t=s!=null?g(b(s)):{},_(e||!s||!s.__esModule?m(t,"default",{value:s,enumerable:!0}):t,s));var f=l(require("express"),1);var d=l(require("ical-generator"),1),c=class{static async request(e){let t=await this.getCourses(e);return this.createCalendar(t)}static async getCourses(e){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=await(await 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 n={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:[n]}:(i.before_noon=i.before_noon||[],i.before_noon.push(n))}if(o.split("_",2)[1]==="th"){let n={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:[n]}:(i.before_noon=i.before_noon||[],i.before_noon.push(n))}}),r.classes}static createCalendar(e){let t=(0,d.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(n=>{let u=new Date(o+"T"+n.time.from+"Z"),h=new Date(o+"T"+n.time.to+"Z");t.createEvent({id:n.id,start:u,end:h,floating:!0,summary:n.title,location:n.club,url:n.url})})})}),t}static paramToString(e){return typeof e=="string"?e:typeof e>"u"||e.length===0?"all":e.map(t=>t.toString()).join("-")}};var p=class s{static run(){new s}app;server;constructor(){this.app=(0,f.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)=>{c.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())})})}async stop(){await new Promise(e=>this.server.close(e)),process.exit()}};p.run();
|
|
3
3
|
//# sourceMappingURL=start.cjs.map
|
package/dist/bin/start.cjs.map
CHANGED
|
@@ -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
|
|
1
|
+
{"version":3,"sources":["../../src/bin/start.ts","../../src/lib/index.ts"],"sourcesContent":["#!/usr/bin/env node\n'use strict';\n\nimport express, {type 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 {\n type RequestParams,\n type ResponseClasses,\n type ResponseCourse,\n type ResponseData\n} 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","courses","url","response","key","classes","event","cal","ical","day","course","start","end","value","v","AppServer","_AppServer","express","req","res","FitnessFirstIcalProxy","calendar","cb"]}
|
package/dist/bin/start.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{a as r}from"../chunk-
|
|
2
|
+
import{a as r}from"../chunk-GBH4JMAN.js";import n from"express";var t=class i{static run(){new i}app;server;constructor(){this.app=n(),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)=>{r.request(e.query).then(p=>{s.writeHead(200,{"Content-Type":"text/calendar; charset=utf-8","Content-Disposition":'attachment; filename="calendar.ics"'}),s.end(p.toString())})})}async stop(){await new Promise(e=>this.server.close(e)),process.exit()}};t.run();
|
|
3
3
|
//# sourceMappingURL=start.js.map
|
package/dist/bin/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bin/start.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"],"mappings":";yCAGA,OAAOA,
|
|
1
|
+
{"version":3,"sources":["../../src/bin/start.ts"],"sourcesContent":["#!/usr/bin/env node\n'use strict';\n\nimport express, {type 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"],"mappings":";yCAGA,OAAOA,MAA6B,UAKpC,IAAMC,EAAN,MAAMC,CAAU,CACZ,OAAO,KAAM,CACT,IAAIA,CACR,CAEQ,IACA,OAER,aAAc,CACV,KAAK,IAAMC,EAAQ,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,CAEA,MAAM,MAAO,CACT,MAAM,IAAI,QAAQC,GAAM,KAAK,OAAO,MAAMA,CAAE,CAAC,EAE7C,QAAQ,KAAK,CACjB,CACJ,EAEAP,EAAU,IAAI","names":["express","AppServer","_AppServer","express","req","res","FitnessFirstIcalProxy","calendar","cb"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import f from"ical-generator";var o=class{static async request(e){let i=await this.getCourses(e);return this.createCalendar(i)}static async getCourses(e){let i="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),s=await(await fetch(i)).json();return e.club_id==="96"&&(e.category_id==="aqua"||!e.category_id)&&Object.entries(s.classes).forEach(([n,r])=>{if(n.split("_",2)[1]==="sa"){let t={id:`kinderschwimmen-${n}`,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(r)?s.classes[n]={before_noon:[t]}:(r.before_noon=r.before_noon||[],r.before_noon.push(t))}if(n.split("_",2)[1]==="th"){let t={id:`kinderschwimmen-${n}`,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(r)?s.classes[n]={before_noon:[t]}:(r.before_noon=r.before_noon||[],r.before_noon.push(t))}}),s.classes}static createCalendar(e){let i=f({name:"Fitness First",ttl:21600,prodId:{company:"sebbo.net",product:"fitness-first-ical-proxy"}});return Object.entries(e).forEach(([a,s])=>{let n=a.split("_")[0];(Array.isArray(s)?s:Object.values(s)).forEach(r=>{r.forEach(t=>{let c=new Date(n+"T"+t.time.from+"Z"),m=new Date(n+"T"+t.time.to+"Z");i.createEvent({id:t.id,start:c,end:m,floating:!0,summary:t.title,location:t.club,url:t.url})})})}),i}static paramToString(e){return typeof e=="string"?e:typeof e>"u"||e.length===0?"all":e.map(i=>i.toString()).join("-")}};export{o as a};
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
2
|
+
//# sourceMappingURL=chunk-GBH4JMAN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/index.ts"],"sourcesContent":["import {\n type RequestParams,\n type ResponseClasses,\n type ResponseCourse,\n type ResponseData\n} 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":"AAOA,OAAOA,MAAU,iBAEjB,IAAqBC,EAArB,KAA2C,CACvC,aAAa,QAAQC,EAA8C,CAC/D,IAAMC,EAAU,MAAM,KAAK,WAAWD,CAAM,EAC5C,OAAO,KAAK,eAAeC,CAAO,CACtC,CAEA,aAAa,WAAWD,EAAiD,CACrE,IAAME,EAAM,2DACR,KAAK,cAAcF,EAAO,OAAO,EAAI,IACrC,KAAK,cAAcA,EAAO,WAAW,EAAI,IACzC,KAAK,cAAcA,EAAO,QAAQ,EAAI,IACtC,KAAK,cAAcA,EAAO,UAAU,EAGlCG,EAAW,MADL,MAAM,MAAMD,CAAG,GACA,KAAK,EAGhC,OAAIF,EAAO,UAAY,OAASA,EAAO,cAAgB,QAAU,CAACA,EAAO,cACrE,OAAO,QAAQG,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,CAEA,OAAO,eAAeF,EAAwC,CAC1D,IAAMM,EAAMT,EAAK,CACb,KAAM,gBACN,IAAK,MACL,OAAQ,CACJ,QAAS,YACT,QAAS,0BACb,CACJ,CAAC,EAED,cAAO,QAAQG,CAAO,EAAE,QAAQ,CAAC,CAACG,EAAKC,CAAO,IAAM,CAChD,IAAMG,EAAMJ,EAAI,MAAM,GAAG,EAAE,CAAC,GAE3B,MAAM,QAAQC,CAAO,EAAIA,EAAU,OAAO,OAAOA,CAAO,GAAG,QAAQJ,GAAW,CAC3EA,EAAQ,QAASQ,GAA2B,CACxC,IAAMC,EAAQ,IAAI,KAAKF,EAAM,IAAMC,EAAO,KAAK,KAAO,GAAG,EACnDE,EAAM,IAAI,KAAKH,EAAM,IAAMC,EAAO,KAAK,GAAK,GAAG,EAErDF,EAAI,YAAY,CACZ,GAAIE,EAAO,GACX,MAAAC,EACA,IAAAC,EACA,SAAU,GACV,QAASF,EAAO,MAChB,SAAUA,EAAO,KACjB,IAAKA,EAAO,GAChB,CAAC,CACL,CAAC,CACL,CAAC,CACL,CAAC,EAEMF,CACX,CAEA,OAAO,cAAcK,EAA4D,CAC7E,OAAI,OAAOA,GAAU,SACVA,EAER,OAAOA,EAAU,KAAeA,EAAM,SAAW,EACzC,MAGJA,EACF,IAAIC,GAAKA,EAAE,SAAS,CAAC,EACrB,KAAK,GAAG,CACjB,CACJ","names":["ical","FitnessFirstIcalProxy","params","courses","url","response","key","classes","event","cal","day","course","start","end","value","v"]}
|
package/dist/lib/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var u=Object.create;var c=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var g=Object.getPrototypeOf,y=Object.prototype.hasOwnProperty;var b=(r,e)=>{for(var t in e)c(r,t,{get:e[t],enumerable:!0})},f=(r,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of w(e))!y.call(r,n)&&n!==t&&c(r,n,{get:()=>e[n],enumerable:!(a=h(e,n))||a.enumerable});return r};var _=(r,e,t)=>(t=r!=null?u(g(r)):{},f(e||!r||!r.__esModule?c(t,"default",{value:r,enumerable:!0}):t,r)),C=r=>f(c({},"__esModule",{value:!0}),r);var R={};b(R,{default:()=>m});module.exports=C(R);var d=_(require("ical-generator"),1),m=class{static async request(e){let t=await this.getCourses(e);return this.createCalendar(t)}static async getCourses(e){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=await(await 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,d.default)({name:"Fitness First",ttl:21600,prodId:{company:"sebbo.net",product:"fitness-first-ical-proxy"}});return Object.entries(e).forEach(([a,n])=>{let o=a.split("_")[0];(Array.isArray(n)?n:Object.values(n)).forEach(s=>{s.forEach(i=>{let l=new Date(o+"T"+i.time.from+"Z"),p=new Date(o+"T"+i.time.to+"Z");t.createEvent({id:i.id,start:l,end:p,floating:!0,summary:i.title,location:i.club,url:i.url})})})}),t}static paramToString(e){return typeof e=="string"?e:typeof e>"u"||e.length===0?"all":e.map(t=>t.toString()).join("-")}};
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/lib/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/index.ts"],"sourcesContent":["import { RequestParams
|
|
1
|
+
{"version":3,"sources":["../../src/lib/index.ts"],"sourcesContent":["import {\n type RequestParams,\n type ResponseClasses,\n type ResponseCourse,\n type ResponseData\n} 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":"0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAOA,IAAAI,EAAiB,+BAEIC,EAArB,KAA2C,CACvC,aAAa,QAAQC,EAA8C,CAC/D,IAAMC,EAAU,MAAM,KAAK,WAAWD,CAAM,EAC5C,OAAO,KAAK,eAAeC,CAAO,CACtC,CAEA,aAAa,WAAWD,EAAiD,CACrE,IAAME,EAAM,2DACR,KAAK,cAAcF,EAAO,OAAO,EAAI,IACrC,KAAK,cAAcA,EAAO,WAAW,EAAI,IACzC,KAAK,cAAcA,EAAO,QAAQ,EAAI,IACtC,KAAK,cAAcA,EAAO,UAAU,EAGlCG,EAAW,MADL,MAAM,MAAMD,CAAG,GACA,KAAK,EAGhC,OAAIF,EAAO,UAAY,OAASA,EAAO,cAAgB,QAAU,CAACA,EAAO,cACrE,OAAO,QAAQG,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,CAEA,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,EAAU,KAAeA,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","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{a}from"../chunk-
|
|
1
|
+
import{a}from"../chunk-GBH4JMAN.js";export{a as default};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
"@types/eslint__js": "^8.42.3",
|
|
23
23
|
"@types/express": "^4.17.21",
|
|
24
24
|
"@types/mocha": "^10.0.7",
|
|
25
|
-
"@types/node": "^22.
|
|
25
|
+
"@types/node": "^22.5.0",
|
|
26
26
|
"c8": "^10.1.2",
|
|
27
|
-
"eslint": "^9.
|
|
27
|
+
"eslint": "^9.9.0",
|
|
28
28
|
"eslint-plugin-jsonc": "^2.16.0",
|
|
29
29
|
"esm": "^3.2.25",
|
|
30
30
|
"license-checker": "^25.0.1",
|
|
@@ -33,14 +33,14 @@
|
|
|
33
33
|
"nyc": "^17.0.0",
|
|
34
34
|
"semantic-release-license": "^1.0.3",
|
|
35
35
|
"source-map-support": "^0.5.21",
|
|
36
|
-
"ts-node": "^10.9.2",
|
|
37
36
|
"tsup": "^8.1.0",
|
|
38
|
-
"
|
|
37
|
+
"tsx": "^4.16.2",
|
|
38
|
+
"typedoc": "^0.26.6",
|
|
39
39
|
"typescript": "^5.5.4",
|
|
40
|
-
"typescript-eslint": "^8.
|
|
40
|
+
"typescript-eslint": "^8.2.0"
|
|
41
41
|
},
|
|
42
42
|
"engines": {
|
|
43
|
-
"node": ">=
|
|
43
|
+
"node": "18 || 20 || >=22.0.0"
|
|
44
44
|
},
|
|
45
45
|
"exports": {
|
|
46
46
|
"import": "./dist/lib/index.js",
|
|
@@ -62,12 +62,12 @@
|
|
|
62
62
|
"build": "tsup && cp ./dist/lib/index.d.ts ./dist/lib/index.d.cts",
|
|
63
63
|
"build-all": "./.github/workflows/build.sh",
|
|
64
64
|
"coverage": "c8 mocha",
|
|
65
|
-
"develop": "
|
|
65
|
+
"develop": "tsx src/bin/start.ts",
|
|
66
66
|
"license-check": "license-checker --production --summary",
|
|
67
67
|
"lint": "eslint .",
|
|
68
68
|
"start": "node ./dist/bin/start.js",
|
|
69
69
|
"test": "mocha"
|
|
70
70
|
},
|
|
71
71
|
"type": "module",
|
|
72
|
-
"version": "
|
|
72
|
+
"version": "6.0.0"
|
|
73
73
|
}
|
|
@@ -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\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":"AAEA,OAAOA,MAAU,iBAEjB,IAAqBC,EAArB,KAA2C,CACvC,aAAa,QAAQC,EAA8C,CAC/D,IAAMC,EAAU,MAAM,KAAK,WAAWD,CAAM,EAC5C,OAAO,KAAK,eAAeC,CAAO,CACtC,CAEA,aAAa,WAAWD,EAAiD,CACrE,IAAME,EAAM,2DACR,KAAK,cAAcF,EAAO,OAAO,EAAI,IACrC,KAAK,cAAcA,EAAO,WAAW,EAAI,IACzC,KAAK,cAAcA,EAAO,QAAQ,EAAI,IACtC,KAAK,cAAcA,EAAO,UAAU,EAGlCG,EAAW,MADL,MAAM,MAAMD,CAAG,GACA,KAAK,EAGhC,OAAIF,EAAO,UAAY,OAASA,EAAO,cAAgB,QAAU,CAACA,EAAO,cACrE,OAAO,QAAQG,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,CAEA,OAAO,eAAeF,EAAwC,CAC1D,IAAMM,EAAMT,EAAK,CACb,KAAM,gBACN,IAAK,MACL,OAAQ,CACJ,QAAS,YACT,QAAS,0BACb,CACJ,CAAC,EAED,cAAO,QAAQG,CAAO,EAAE,QAAQ,CAAC,CAACG,EAAKC,CAAO,IAAM,CAChD,IAAMG,EAAMJ,EAAI,MAAM,GAAG,EAAE,CAAC,GAE3B,MAAM,QAAQC,CAAO,EAAIA,EAAU,OAAO,OAAOA,CAAO,GAAG,QAAQJ,GAAW,CAC3EA,EAAQ,QAASQ,GAA2B,CACxC,IAAMC,EAAQ,IAAI,KAAKF,EAAM,IAAMC,EAAO,KAAK,KAAO,GAAG,EACnDE,EAAM,IAAI,KAAKH,EAAM,IAAMC,EAAO,KAAK,GAAK,GAAG,EAErDF,EAAI,YAAY,CACZ,GAAIE,EAAO,GACX,MAAAC,EACA,IAAAC,EACA,SAAU,GACV,QAASF,EAAO,MAChB,SAAUA,EAAO,KACjB,IAAKA,EAAO,GAChB,CAAC,CACL,CAAC,CACL,CAAC,CACL,CAAC,EAEMF,CACX,CAEA,OAAO,cAAcK,EAA4D,CAC7E,OAAI,OAAOA,GAAU,SACVA,EAER,OAAOA,EAAU,KAAeA,EAAM,SAAW,EACzC,MAGJA,EACF,IAAIC,GAAKA,EAAE,SAAS,CAAC,EACrB,KAAK,GAAG,CACjB,CACJ","names":["ical","FitnessFirstIcalProxy","params","courses","url","response","key","classes","event","cal","day","course","start","end","value","v"]}
|