@sebbo2002/fitness-first-ical-proxy 5.0.3-develop.4 → 5.0.3-develop.6
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 +2 -0
- package/dist/{chunk-XBRWTV5R.js.map → chunk-BPMYKCU7.js.map} +1 -1
- 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 +15 -14
- package/dist/chunk-XBRWTV5R.js +0 -2
package/dist/bin/start.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var
|
|
2
|
+
"use strict";var g=Object.create;var m=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var _=(s,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of b(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(y(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, 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":";
|
|
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","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
|
|
2
|
+
import{a as r}from"../chunk-BPMYKCU7.js";import o from"express";var t=class i{static run(){new i}app;server;constructor(){this.app=o(),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(n=>{s.writeHead(200,{"Content-Type":"text/calendar; charset=utf-8","Content-Disposition":'attachment; filename="calendar.ics"'}),s.end(n.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":";
|
|
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,MAAwB,UAK/B,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"]}
|
|
@@ -0,0 +1,2 @@
|
|
|
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-BPMYKCU7.js.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\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":"
|
|
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"]}
|
package/dist/lib/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
"use strict";var p=Object.create;var c=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var g=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var _=(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))!b.call(r,n)&&n!==t&&c(r,n,{get:()=>e[n],enumerable:!(a=h(e,n))||a.enumerable});return r};var y=(r,e,t)=>(t=r!=null?p(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={};_(R,{default:()=>m});module.exports=C(R);var d=y(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"),u=new Date(o+"T"+i.time.to+"Z");t.createEvent({id:i.id,start:l,end:u,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, 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":"
|
|
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":"0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAEA,IAAAI,EAAiB,+BAEIF,EAArB,KAA2C,CACvC,aAAa,QAAQG,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","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{
|
|
1
|
+
import{a}from"../chunk-BPMYKCU7.js";export{a as default};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -12,31 +12,32 @@
|
|
|
12
12
|
},
|
|
13
13
|
"description": "Small proxy that provides the course schedule from fitnessfirst.de/kurse as an iCal calendar.",
|
|
14
14
|
"devDependencies": {
|
|
15
|
+
"@eslint/js": "^9.8.0",
|
|
15
16
|
"@qiwi/semantic-release-gh-pages-plugin": "^5.2.12",
|
|
16
17
|
"@sebbo2002/semantic-release-docker": "^4.0.2",
|
|
17
18
|
"@semantic-release/changelog": "^6.0.3",
|
|
18
19
|
"@semantic-release/exec": "^6.0.3",
|
|
19
20
|
"@semantic-release/git": "^10.0.1",
|
|
20
|
-
"@semantic-release/npm": "^12.0.
|
|
21
|
+
"@semantic-release/npm": "^12.0.1",
|
|
22
|
+
"@types/eslint__js": "^8.42.3",
|
|
21
23
|
"@types/express": "^4.17.21",
|
|
22
24
|
"@types/mocha": "^10.0.7",
|
|
23
|
-
"@types/node": "^
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"eslint": "^8.57.0",
|
|
28
|
-
"eslint-plugin-jsonc": "^2.14.0",
|
|
25
|
+
"@types/node": "^22.1.0",
|
|
26
|
+
"c8": "^10.1.2",
|
|
27
|
+
"eslint": "^9.8.0",
|
|
28
|
+
"eslint-plugin-jsonc": "^2.16.0",
|
|
29
29
|
"esm": "^3.2.25",
|
|
30
30
|
"license-checker": "^25.0.1",
|
|
31
|
-
"mocha": "^10.
|
|
31
|
+
"mocha": "^10.6.0",
|
|
32
32
|
"mochawesome": "^7.1.3",
|
|
33
|
-
"nyc": "^
|
|
33
|
+
"nyc": "^17.0.0",
|
|
34
34
|
"semantic-release-license": "^1.0.3",
|
|
35
35
|
"source-map-support": "^0.5.21",
|
|
36
36
|
"ts-node": "^10.9.2",
|
|
37
|
-
"tsup": "^8.0
|
|
38
|
-
"typedoc": "^0.
|
|
39
|
-
"typescript": "^5.4
|
|
37
|
+
"tsup": "^8.1.0",
|
|
38
|
+
"typedoc": "^0.26.3",
|
|
39
|
+
"typescript": "^5.5.4",
|
|
40
|
+
"typescript-eslint": "^8.0.0-alpha.62"
|
|
40
41
|
},
|
|
41
42
|
"engines": {
|
|
42
43
|
"node": ">=18.0.0"
|
|
@@ -63,10 +64,10 @@
|
|
|
63
64
|
"coverage": "c8 mocha",
|
|
64
65
|
"develop": "TS_NODE_TRANSPILE_ONLY=true node --no-warnings --enable-source-maps --loader ts-node/esm src/bin/start.ts",
|
|
65
66
|
"license-check": "license-checker --production --summary",
|
|
66
|
-
"lint": "eslint .
|
|
67
|
+
"lint": "eslint .",
|
|
67
68
|
"start": "node ./dist/bin/start.js",
|
|
68
69
|
"test": "mocha"
|
|
69
70
|
},
|
|
70
71
|
"type": "module",
|
|
71
|
-
"version": "5.0.3-develop.
|
|
72
|
+
"version": "5.0.3-develop.6"
|
|
72
73
|
}
|
package/dist/chunk-XBRWTV5R.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
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-XBRWTV5R.js.map
|