@sebbo2002/fitness-first-ical-proxy 7.0.4 → 8.0.0-develop.2

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 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);var c=class{static createCalendar(e){let t=(0,d.default)({name:"Fitness First",prodId:{company:"sebbo.net",product:"fitness-first-ical-proxy"},ttl:21600});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({end:h,floating:!0,id:n.id,location:n.club,start:u,summary:n.title,url:n.url})})})}),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={category:"Aqua",club:"Berlin - Gendarmenmarkt",id:`kinderschwimmen-${o}`,time:{from:"09:00:00",to:"12:15:00"},title:"Kinderschwimmen",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={category:"Aqua",club:"Berlin - Gendarmenmarkt",id:`kinderschwimmen-${o}`,time:{from:"15:00:00",to:"17:15:00"},title:"Kinderschwimmen",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 paramToString(e){return typeof e=="string"?e:typeof e>"u"||e.length===0?"all":e.map(t=>t.toString()).join("-")}static async request(e){let t=await this.getCourses(e);return this.createCalendar(t)}};var p=class 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())}static run(){new s}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-Disposition":'attachment; filename="calendar.ics"',"Content-Type":"text/calendar; charset=utf-8"}),t.end(a.toString())})})}async stop(){await new Promise(e=>this.server.close(e)),process.exit()}};p.run();
2
+ "use strict";const e=require(`../lib-abJH8to_.cjs`);let t=require(`express`);t=e.n(t,1),class n{app;server;constructor(){this.app=(0,t.default)(),this.setupRoutes(),this.server=this.app.listen(process.env.PORT||8080),process.on(`SIGINT`,()=>this.stop()),process.on(`SIGTERM`,()=>this.stop())}static run(){new n}setupRoutes(){this.app.get(`/ping`,(e,t)=>{t.send(`pong`)}),this.app.get(`/ical`,(t,n)=>{e.t.request(t.query).then(e=>{n.writeHead(200,{"Content-Disposition":`attachment; filename="calendar.ics"`,"Content-Type":`text/calendar; charset=utf-8`}),n.end(e.toString())})})}async stop(){await new Promise(e=>this.server.close(e)),process.exit()}}.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, { type Express } from 'express';\nimport { Server } from 'http';\n\nimport FitnessFirstIcalProxy from '../lib/index.js';\n\nclass AppServer {\n private app: Express;\n\n private server: Server;\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 static run() {\n new AppServer();\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).then((calendar) => {\n res.writeHead(200, {\n 'Content-Disposition':\n 'attachment; filename=\"calendar.ics\"',\n 'Content-Type': 'text/calendar; charset=utf-8',\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 type { ICalCalendar } from 'ical-generator';\n\nimport ical from 'ical-generator';\n\nimport {\n type RequestParams,\n type ResponseClasses,\n type ResponseCourse,\n type ResponseData,\n} from './types.js';\n\nexport default class FitnessFirstIcalProxy {\n static createCalendar(courses: ResponseClasses): ICalCalendar {\n const cal = ical({\n name: 'Fitness First',\n prodId: {\n company: 'sebbo.net',\n product: 'fitness-first-ical-proxy',\n },\n ttl: 60 * 60 * 6,\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(\n (courses) => {\n courses.forEach((course: ResponseCourse) => {\n const start = new Date(\n day + 'T' + course.time.from + 'Z',\n );\n const end = new Date(day + 'T' + course.time.to + 'Z');\n\n cal.createEvent({\n end,\n floating: true,\n id: course.id,\n location: course.club,\n start,\n summary: course.title,\n url: course.url,\n });\n });\n },\n );\n });\n\n return cal;\n }\n\n static async getCourses(params: RequestParams): Promise<ResponseClasses> {\n const url =\n 'https://www.fitnessfirst.de/magicline/api/class-shedule/' +\n this.paramToString(params.club_id) +\n '/' +\n this.paramToString(params.category_id) +\n '/' +\n this.paramToString(params.class_id) +\n '/' +\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 (\n params.club_id === '96' &&\n (params.category_id === 'aqua' || !params.category_id)\n ) {\n Object.entries(response.classes).forEach(([key, classes]) => {\n if (key.split('_', 2)[1] === 'sa') {\n const event = {\n category: 'Aqua',\n club: 'Berlin - Gendarmenmarkt',\n id: `kinderschwimmen-${key}`,\n time: {\n from: '09:00:00',\n to: '12:15:00',\n },\n title: 'Kinderschwimmen',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',\n };\n\n if (Array.isArray(classes)) {\n response.classes[key] = {\n before_noon: [event],\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 category: 'Aqua',\n club: 'Berlin - Gendarmenmarkt',\n id: `kinderschwimmen-${key}`,\n time: {\n from: '15:00:00',\n to: '17:15:00',\n },\n title: 'Kinderschwimmen',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',\n };\n\n if (Array.isArray(classes)) {\n response.classes[key] = {\n before_noon: [event],\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 paramToString(\n value: Array<number | string> | string | undefined,\n ): 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.map((v) => v.toString()).join('-');\n }\n\n static async request(params: RequestParams): Promise<ICalCalendar> {\n const courses = await this.getCourses(params);\n return this.createCalendar(courses);\n }\n}\n"],"mappings":"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","names":["import_express","import_ical_generator","FitnessFirstIcalProxy","courses","cal","ical","key","classes","day","course","start","end","params","url","response","event","value","v","AppServer","_AppServer","express","req","res","FitnessFirstIcalProxy","calendar","cb"]}
1
+ {"version":3,"file":"start.cjs","names":[],"sources":["../../src/bin/start.ts"],"sourcesContent":["#!/usr/bin/env node\n'use strict';\n\nimport express, { type Express } from 'express';\nimport { Server } from 'http';\n\nimport FitnessFirstIcalProxy from '../lib/index.js';\n\nclass AppServer {\n private app: Express;\n\n private server: Server;\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 static run() {\n new AppServer();\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).then((calendar) => {\n res.writeHead(200, {\n 'Content-Disposition':\n 'attachment; filename=\"calendar.ics\"',\n 'Content-Type': 'text/calendar; charset=utf-8',\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":";wFAQA,MAAM,CAAU,CACZ,IAEA,OACA,aAAc,CACV,KAAK,KAAA,EAAA,EAAA,UAAe,CAEpB,KAAK,aAAa,CAClB,KAAK,OAAS,KAAK,IAAI,OAAO,QAAQ,IAAI,MAAQ,KAAK,CAEvD,QAAQ,GAAG,aAAgB,KAAK,MAAM,CAAC,CACvC,QAAQ,GAAG,cAAiB,KAAK,MAAM,CAAC,CAG5C,OAAO,KAAM,CACT,IAAI,EAGR,aAAc,CACV,KAAK,IAAI,IAAI,SAAU,EAAK,IAAQ,CAChC,EAAI,KAAK,OAAO,EAClB,CAEF,KAAK,IAAI,IAAI,SAAU,EAAK,IAAQ,CAChC,EAAA,EAAsB,QAAQ,EAAI,MAAM,CAAC,KAAM,GAAa,CACxD,EAAI,UAAU,IAAK,CACf,sBACI,sCACJ,eAAgB,+BACnB,CAAC,CAEF,EAAI,IAAI,EAAS,UAAU,CAAC,EAC9B,EACJ,CAGN,MAAM,MAAO,CACT,MAAM,IAAI,QAAS,GAAO,KAAK,OAAO,MAAM,EAAG,CAAC,CAEhD,QAAQ,MAAM,GAIZ,KAAK"}
@@ -1 +1 @@
1
- #!/usr/bin/env node
1
+ export { };
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ import e from"../lib/index.mjs";import t from"express";(class n{app;server;constructor(){this.app=t(),this.setupRoutes(),this.server=this.app.listen(process.env.PORT||8080),process.on(`SIGINT`,()=>this.stop()),process.on(`SIGTERM`,()=>this.stop())}static run(){new n}setupRoutes(){this.app.get(`/ping`,(e,t)=>{t.send(`pong`)}),this.app.get(`/ical`,(t,n)=>{e.request(t.query).then(e=>{n.writeHead(200,{"Content-Disposition":`attachment; filename="calendar.ics"`,"Content-Type":`text/calendar; charset=utf-8`}),n.end(e.toString())})})}async stop(){await new Promise(e=>this.server.close(e)),process.exit()}}).run();export{};
3
+ //# sourceMappingURL=start.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.mjs","names":[],"sources":["../../src/bin/start.ts"],"sourcesContent":["#!/usr/bin/env node\n'use strict';\n\nimport express, { type Express } from 'express';\nimport { Server } from 'http';\n\nimport FitnessFirstIcalProxy from '../lib/index.js';\n\nclass AppServer {\n private app: Express;\n\n private server: Server;\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 static run() {\n new AppServer();\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).then((calendar) => {\n res.writeHead(200, {\n 'Content-Disposition':\n 'attachment; filename=\"calendar.ics\"',\n 'Content-Type': 'text/calendar; charset=utf-8',\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":";wDAQA,MAAM,CAAU,CACZ,IAEA,OACA,aAAc,CACV,KAAK,IAAM,GAAS,CAEpB,KAAK,aAAa,CAClB,KAAK,OAAS,KAAK,IAAI,OAAO,QAAQ,IAAI,MAAQ,KAAK,CAEvD,QAAQ,GAAG,aAAgB,KAAK,MAAM,CAAC,CACvC,QAAQ,GAAG,cAAiB,KAAK,MAAM,CAAC,CAG5C,OAAO,KAAM,CACT,IAAI,EAGR,aAAc,CACV,KAAK,IAAI,IAAI,SAAU,EAAK,IAAQ,CAChC,EAAI,KAAK,OAAO,EAClB,CAEF,KAAK,IAAI,IAAI,SAAU,EAAK,IAAQ,CAChC,EAAsB,QAAQ,EAAI,MAAM,CAAC,KAAM,GAAa,CACxD,EAAI,UAAU,IAAK,CACf,sBACI,sCACJ,eAAgB,+BACnB,CAAC,CAEF,EAAI,IAAI,EAAS,UAAU,CAAC,EAC9B,EACJ,CAGN,MAAM,MAAO,CACT,MAAM,IAAI,QAAS,GAAO,KAAK,OAAO,MAAM,EAAG,CAAC,CAEhD,QAAQ,MAAM,IAIZ,KAAK"}
@@ -1,2 +1 @@
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);var m=class{static createCalendar(e){let t=(0,d.default)({name:"Fitness First",prodId:{company:"sebbo.net",product:"fitness-first-ical-proxy"},ttl:21600});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({end:p,floating:!0,id:i.id,location:i.club,start:l,summary:i.title,url:i.url})})})}),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={category:"Aqua",club:"Berlin - Gendarmenmarkt",id:`kinderschwimmen-${o}`,time:{from:"09:00:00",to:"12:15:00"},title:"Kinderschwimmen",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={category:"Aqua",club:"Berlin - Gendarmenmarkt",id:`kinderschwimmen-${o}`,time:{from:"15:00:00",to:"17:15:00"},title:"Kinderschwimmen",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 paramToString(e){return typeof e=="string"?e:typeof e>"u"||e.length===0?"all":e.map(t=>t.toString()).join("-")}static async request(e){let t=await this.getCourses(e);return this.createCalendar(t)}};
2
- //# sourceMappingURL=index.cjs.map
1
+ const e=require(`../lib-abJH8to_.cjs`);module.exports=e.t;
@@ -1,35 +1,37 @@
1
- import { ICalCalendar } from 'ical-generator';
1
+ import { ICalCalendar } from "ical-generator";
2
2
 
3
+ //#region src/lib/types.d.ts
3
4
  interface RequestParams {
4
- category_id?: number[] | string | string[];
5
- class_id?: number[] | string;
6
- club_id?: number[] | string | string[];
7
- daytime_id?: string | string[];
5
+ category_id?: number[] | string | string[];
6
+ class_id?: number[] | string;
7
+ club_id?: number[] | string | string[];
8
+ daytime_id?: string | string[];
8
9
  }
9
10
  interface ResponseClasses {
10
- [key: string]: [] | ResponseDay;
11
+ [key: string]: [] | ResponseDay;
11
12
  }
12
13
  interface ResponseCourse {
13
- category: string;
14
- club: string;
15
- id: string;
16
- time: ResponseCourseTime;
17
- title: string;
18
- url: null | string;
14
+ category: string;
15
+ club: string;
16
+ id: string;
17
+ time: ResponseCourseTime;
18
+ title: string;
19
+ url: null | string;
19
20
  }
20
21
  interface ResponseCourseTime {
21
- from: string;
22
- to: string;
22
+ from: string;
23
+ to: string;
23
24
  }
24
25
  interface ResponseDay {
25
- [key: string]: ResponseCourse[];
26
+ [key: string]: ResponseCourse[];
26
27
  }
27
-
28
+ //#endregion
29
+ //#region src/lib/index.d.ts
28
30
  declare class FitnessFirstIcalProxy {
29
- static createCalendar(courses: ResponseClasses): ICalCalendar;
30
- static getCourses(params: RequestParams): Promise<ResponseClasses>;
31
- static paramToString(value: Array<number | string> | string | undefined): string;
32
- static request(params: RequestParams): Promise<ICalCalendar>;
31
+ static createCalendar(courses: ResponseClasses): ICalCalendar;
32
+ static getCourses(params: RequestParams): Promise<ResponseClasses>;
33
+ static paramToString(value: Array<number | string> | string | undefined): string;
34
+ static request(params: RequestParams): Promise<ICalCalendar>;
33
35
  }
34
-
35
- export { FitnessFirstIcalProxy as default };
36
+ export = FitnessFirstIcalProxy;
37
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1,38 @@
1
+ import { ICalCalendar } from "ical-generator";
2
+
3
+ //#region src/lib/types.d.ts
4
+ interface RequestParams {
5
+ category_id?: number[] | string | string[];
6
+ class_id?: number[] | string;
7
+ club_id?: number[] | string | string[];
8
+ daytime_id?: string | string[];
9
+ }
10
+ interface ResponseClasses {
11
+ [key: string]: [] | ResponseDay;
12
+ }
13
+ interface ResponseCourse {
14
+ category: string;
15
+ club: string;
16
+ id: string;
17
+ time: ResponseCourseTime;
18
+ title: string;
19
+ url: null | string;
20
+ }
21
+ interface ResponseCourseTime {
22
+ from: string;
23
+ to: string;
24
+ }
25
+ interface ResponseDay {
26
+ [key: string]: ResponseCourse[];
27
+ }
28
+ //#endregion
29
+ //#region src/lib/index.d.ts
30
+ declare class FitnessFirstIcalProxy {
31
+ static createCalendar(courses: ResponseClasses): ICalCalendar;
32
+ static getCourses(params: RequestParams): Promise<ResponseClasses>;
33
+ static paramToString(value: Array<number | string> | string | undefined): string;
34
+ static request(params: RequestParams): Promise<ICalCalendar>;
35
+ }
36
+ //#endregion
37
+ export { FitnessFirstIcalProxy as default };
38
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1,2 @@
1
+ import e from"ical-generator";var t=class{static createCalendar(t){let n=e({name:`Fitness First`,prodId:{company:`sebbo.net`,product:`fitness-first-ical-proxy`},ttl:3600*6});return Object.entries(t).forEach(([e,t])=>{let r=e.split(`_`)[0];(Array.isArray(t)?t:Object.values(t)).forEach(e=>{e.forEach(e=>{let t=new Date(r+`T`+e.time.from+`Z`),i=new Date(r+`T`+e.time.to+`Z`);n.createEvent({end:i,floating:!0,id:e.id,location:e.club,start:t,summary:e.title,url:e.url})})})}),n}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(([e,t])=>{if(e.split(`_`,2)[1]===`sa`){let r={category:`Aqua`,club:`Berlin - Gendarmenmarkt`,id:`kinderschwimmen-${e}`,time:{from:`09:00:00`,to:`12:15:00`},title:`Kinderschwimmen`,url:`https://www.fitnessfirst.de/news/kinderschwimmen-1635593849`};Array.isArray(t)?n.classes[e]={before_noon:[r]}:(t.before_noon=t.before_noon||[],t.before_noon.push(r))}if(e.split(`_`,2)[1]===`th`){let r={category:`Aqua`,club:`Berlin - Gendarmenmarkt`,id:`kinderschwimmen-${e}`,time:{from:`15:00:00`,to:`17:15:00`},title:`Kinderschwimmen`,url:`https://www.fitnessfirst.de/news/kinderschwimmen-1635593849`};Array.isArray(t)?n.classes[e]={before_noon:[r]}:(t.before_noon=t.before_noon||[],t.before_noon.push(r))}}),n.classes}static paramToString(e){return typeof e==`string`?e:e===void 0||e.length===0?`all`:e.map(e=>e.toString()).join(`-`)}static async request(e){let t=await this.getCourses(e);return this.createCalendar(t)}};export{t as default};
2
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../src/lib/index.ts"],"sourcesContent":["import type { ICalCalendar } from 'ical-generator';\n\nimport ical from 'ical-generator';\n\nimport {\n type RequestParams,\n type ResponseClasses,\n type ResponseCourse,\n type ResponseData,\n} from './types.js';\n\nexport default class FitnessFirstIcalProxy {\n static createCalendar(courses: ResponseClasses): ICalCalendar {\n const cal = ical({\n name: 'Fitness First',\n prodId: {\n company: 'sebbo.net',\n product: 'fitness-first-ical-proxy',\n },\n ttl: 60 * 60 * 6,\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(\n (courses) => {\n courses.forEach((course: ResponseCourse) => {\n const start = new Date(\n day + 'T' + course.time.from + 'Z',\n );\n const end = new Date(day + 'T' + course.time.to + 'Z');\n\n cal.createEvent({\n end,\n floating: true,\n id: course.id,\n location: course.club,\n start,\n summary: course.title,\n url: course.url,\n });\n });\n },\n );\n });\n\n return cal;\n }\n\n static async getCourses(params: RequestParams): Promise<ResponseClasses> {\n const url =\n 'https://www.fitnessfirst.de/magicline/api/class-shedule/' +\n this.paramToString(params.club_id) +\n '/' +\n this.paramToString(params.category_id) +\n '/' +\n this.paramToString(params.class_id) +\n '/' +\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 (\n params.club_id === '96' &&\n (params.category_id === 'aqua' || !params.category_id)\n ) {\n Object.entries(response.classes).forEach(([key, classes]) => {\n if (key.split('_', 2)[1] === 'sa') {\n const event = {\n category: 'Aqua',\n club: 'Berlin - Gendarmenmarkt',\n id: `kinderschwimmen-${key}`,\n time: {\n from: '09:00:00',\n to: '12:15:00',\n },\n title: 'Kinderschwimmen',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',\n };\n\n if (Array.isArray(classes)) {\n response.classes[key] = {\n before_noon: [event],\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 category: 'Aqua',\n club: 'Berlin - Gendarmenmarkt',\n id: `kinderschwimmen-${key}`,\n time: {\n from: '15:00:00',\n to: '17:15:00',\n },\n title: 'Kinderschwimmen',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',\n };\n\n if (Array.isArray(classes)) {\n response.classes[key] = {\n before_noon: [event],\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 paramToString(\n value: Array<number | string> | string | undefined,\n ): 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.map((v) => v.toString()).join('-');\n }\n\n static async request(params: RequestParams): Promise<ICalCalendar> {\n const courses = await this.getCourses(params);\n return this.createCalendar(courses);\n }\n}\n"],"mappings":"8BAWA,IAAqB,EAArB,KAA2C,CACvC,OAAO,eAAe,EAAwC,CAC1D,IAAM,EAAM,EAAK,CACb,KAAM,gBACN,OAAQ,CACJ,QAAS,YACT,QAAS,2BACZ,CACD,IAAK,KAAU,EAClB,CAAC,CA2BF,OAzBA,OAAO,QAAQ,EAAQ,CAAC,SAAS,CAAC,EAAK,KAAa,CAChD,IAAM,EAAM,EAAI,MAAM,IAAI,CAAC,IAE1B,MAAM,QAAQ,EAAQ,CAAG,EAAU,OAAO,OAAO,EAAQ,EAAE,QACvD,GAAY,CACT,EAAQ,QAAS,GAA2B,CACxC,IAAM,EAAQ,IAAI,KACd,EAAM,IAAM,EAAO,KAAK,KAAO,IAClC,CACK,EAAM,IAAI,KAAK,EAAM,IAAM,EAAO,KAAK,GAAK,IAAI,CAEtD,EAAI,YAAY,CACZ,MACA,SAAU,GACV,GAAI,EAAO,GACX,SAAU,EAAO,KACjB,QACA,QAAS,EAAO,MAChB,IAAK,EAAO,IACf,CAAC,EACJ,EAET,EACH,CAEK,EAGX,aAAa,WAAW,EAAiD,CACrE,IAAM,EACF,2DACA,KAAK,cAAc,EAAO,QAAQ,CAClC,IACA,KAAK,cAAc,EAAO,YAAY,CACtC,IACA,KAAK,cAAc,EAAO,SAAS,CACnC,IACA,KAAK,cAAc,EAAO,WAAW,CAGnC,EAAY,MADN,MAAM,MAAM,EAAI,EACA,MAAM,CAuDlC,OAnDI,EAAO,UAAY,OAClB,EAAO,cAAgB,QAAU,CAAC,EAAO,cAE1C,OAAO,QAAQ,EAAS,QAAQ,CAAC,SAAS,CAAC,EAAK,KAAa,CACzD,GAAI,EAAI,MAAM,IAAK,EAAE,CAAC,KAAO,KAAM,CAC/B,IAAM,EAAQ,CACV,SAAU,OACV,KAAM,0BACN,GAAI,mBAAmB,IACvB,KAAM,CACF,KAAM,WACN,GAAI,WACP,CACD,MAAO,kBACP,IAAK,8DACR,CAEG,MAAM,QAAQ,EAAQ,CACtB,EAAS,QAAQ,GAAO,CACpB,YAAa,CAAC,EAAM,CACvB,EAED,EAAQ,YAAc,EAAQ,aAAe,EAAE,CAC/C,EAAQ,YAAY,KAAK,EAAM,EAGvC,GAAI,EAAI,MAAM,IAAK,EAAE,CAAC,KAAO,KAAM,CAC/B,IAAM,EAAQ,CACV,SAAU,OACV,KAAM,0BACN,GAAI,mBAAmB,IACvB,KAAM,CACF,KAAM,WACN,GAAI,WACP,CACD,MAAO,kBACP,IAAK,8DACR,CAEG,MAAM,QAAQ,EAAQ,CACtB,EAAS,QAAQ,GAAO,CACpB,YAAa,CAAC,EAAM,CACvB,EAED,EAAQ,YAAc,EAAQ,aAAe,EAAE,CAC/C,EAAQ,YAAY,KAAK,EAAM,IAGzC,CAGC,EAAS,QAGpB,OAAO,cACH,EACM,CAQN,OAPI,OAAO,GAAU,SACV,EAEA,IAAU,QAAe,EAAM,SAAW,EAC1C,MAGJ,EAAM,IAAK,GAAM,EAAE,UAAU,CAAC,CAAC,KAAK,IAAI,CAGnD,aAAa,QAAQ,EAA8C,CAC/D,IAAM,EAAU,MAAM,KAAK,WAAW,EAAO,CAC7C,OAAO,KAAK,eAAe,EAAQ"}
@@ -0,0 +1,2 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`ical-generator`);c=s(c,1);var l=class{static createCalendar(e){let t=(0,c.default)({name:`Fitness First`,prodId:{company:`sebbo.net`,product:`fitness-first-ical-proxy`},ttl:3600*6});return Object.entries(e).forEach(([e,n])=>{let r=e.split(`_`)[0];(Array.isArray(n)?n:Object.values(n)).forEach(e=>{e.forEach(e=>{let n=new Date(r+`T`+e.time.from+`Z`),i=new Date(r+`T`+e.time.to+`Z`);t.createEvent({end:i,floating:!0,id:e.id,location:e.club,start:n,summary:e.title,url:e.url})})})}),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(([e,t])=>{if(e.split(`_`,2)[1]===`sa`){let r={category:`Aqua`,club:`Berlin - Gendarmenmarkt`,id:`kinderschwimmen-${e}`,time:{from:`09:00:00`,to:`12:15:00`},title:`Kinderschwimmen`,url:`https://www.fitnessfirst.de/news/kinderschwimmen-1635593849`};Array.isArray(t)?n.classes[e]={before_noon:[r]}:(t.before_noon=t.before_noon||[],t.before_noon.push(r))}if(e.split(`_`,2)[1]===`th`){let r={category:`Aqua`,club:`Berlin - Gendarmenmarkt`,id:`kinderschwimmen-${e}`,time:{from:`15:00:00`,to:`17:15:00`},title:`Kinderschwimmen`,url:`https://www.fitnessfirst.de/news/kinderschwimmen-1635593849`};Array.isArray(t)?n.classes[e]={before_noon:[r]}:(t.before_noon=t.before_noon||[],t.before_noon.push(r))}}),n.classes}static paramToString(e){return typeof e==`string`?e:e===void 0||e.length===0?`all`:e.map(e=>e.toString()).join(`-`)}static async request(e){let t=await this.getCourses(e);return this.createCalendar(t)}};Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return l}});
2
+ //# sourceMappingURL=lib-abJH8to_.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib-abJH8to_.cjs","names":[],"sources":["../src/lib/index.ts"],"sourcesContent":["import type { ICalCalendar } from 'ical-generator';\n\nimport ical from 'ical-generator';\n\nimport {\n type RequestParams,\n type ResponseClasses,\n type ResponseCourse,\n type ResponseData,\n} from './types.js';\n\nexport default class FitnessFirstIcalProxy {\n static createCalendar(courses: ResponseClasses): ICalCalendar {\n const cal = ical({\n name: 'Fitness First',\n prodId: {\n company: 'sebbo.net',\n product: 'fitness-first-ical-proxy',\n },\n ttl: 60 * 60 * 6,\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(\n (courses) => {\n courses.forEach((course: ResponseCourse) => {\n const start = new Date(\n day + 'T' + course.time.from + 'Z',\n );\n const end = new Date(day + 'T' + course.time.to + 'Z');\n\n cal.createEvent({\n end,\n floating: true,\n id: course.id,\n location: course.club,\n start,\n summary: course.title,\n url: course.url,\n });\n });\n },\n );\n });\n\n return cal;\n }\n\n static async getCourses(params: RequestParams): Promise<ResponseClasses> {\n const url =\n 'https://www.fitnessfirst.de/magicline/api/class-shedule/' +\n this.paramToString(params.club_id) +\n '/' +\n this.paramToString(params.category_id) +\n '/' +\n this.paramToString(params.class_id) +\n '/' +\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 (\n params.club_id === '96' &&\n (params.category_id === 'aqua' || !params.category_id)\n ) {\n Object.entries(response.classes).forEach(([key, classes]) => {\n if (key.split('_', 2)[1] === 'sa') {\n const event = {\n category: 'Aqua',\n club: 'Berlin - Gendarmenmarkt',\n id: `kinderschwimmen-${key}`,\n time: {\n from: '09:00:00',\n to: '12:15:00',\n },\n title: 'Kinderschwimmen',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',\n };\n\n if (Array.isArray(classes)) {\n response.classes[key] = {\n before_noon: [event],\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 category: 'Aqua',\n club: 'Berlin - Gendarmenmarkt',\n id: `kinderschwimmen-${key}`,\n time: {\n from: '15:00:00',\n to: '17:15:00',\n },\n title: 'Kinderschwimmen',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',\n };\n\n if (Array.isArray(classes)) {\n response.classes[key] = {\n before_noon: [event],\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 paramToString(\n value: Array<number | string> | string | undefined,\n ): 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.map((v) => v.toString()).join('-');\n }\n\n static async request(params: RequestParams): Promise<ICalCalendar> {\n const courses = await this.getCourses(params);\n return this.createCalendar(courses);\n }\n}\n"],"mappings":"ugBAWA,IAAqB,EAArB,KAA2C,CACvC,OAAO,eAAe,EAAwC,CAC1D,IAAM,GAAA,EAAA,EAAA,SAAW,CACb,KAAM,gBACN,OAAQ,CACJ,QAAS,YACT,QAAS,2BACZ,CACD,IAAK,KAAU,EAClB,CAAC,CA2BF,OAzBA,OAAO,QAAQ,EAAQ,CAAC,SAAS,CAAC,EAAK,KAAa,CAChD,IAAM,EAAM,EAAI,MAAM,IAAI,CAAC,IAE1B,MAAM,QAAQ,EAAQ,CAAG,EAAU,OAAO,OAAO,EAAQ,EAAE,QACvD,GAAY,CACT,EAAQ,QAAS,GAA2B,CACxC,IAAM,EAAQ,IAAI,KACd,EAAM,IAAM,EAAO,KAAK,KAAO,IAClC,CACK,EAAM,IAAI,KAAK,EAAM,IAAM,EAAO,KAAK,GAAK,IAAI,CAEtD,EAAI,YAAY,CACZ,MACA,SAAU,GACV,GAAI,EAAO,GACX,SAAU,EAAO,KACjB,QACA,QAAS,EAAO,MAChB,IAAK,EAAO,IACf,CAAC,EACJ,EAET,EACH,CAEK,EAGX,aAAa,WAAW,EAAiD,CACrE,IAAM,EACF,2DACA,KAAK,cAAc,EAAO,QAAQ,CAClC,IACA,KAAK,cAAc,EAAO,YAAY,CACtC,IACA,KAAK,cAAc,EAAO,SAAS,CACnC,IACA,KAAK,cAAc,EAAO,WAAW,CAGnC,EAAY,MADN,MAAM,MAAM,EAAI,EACA,MAAM,CAuDlC,OAnDI,EAAO,UAAY,OAClB,EAAO,cAAgB,QAAU,CAAC,EAAO,cAE1C,OAAO,QAAQ,EAAS,QAAQ,CAAC,SAAS,CAAC,EAAK,KAAa,CACzD,GAAI,EAAI,MAAM,IAAK,EAAE,CAAC,KAAO,KAAM,CAC/B,IAAM,EAAQ,CACV,SAAU,OACV,KAAM,0BACN,GAAI,mBAAmB,IACvB,KAAM,CACF,KAAM,WACN,GAAI,WACP,CACD,MAAO,kBACP,IAAK,8DACR,CAEG,MAAM,QAAQ,EAAQ,CACtB,EAAS,QAAQ,GAAO,CACpB,YAAa,CAAC,EAAM,CACvB,EAED,EAAQ,YAAc,EAAQ,aAAe,EAAE,CAC/C,EAAQ,YAAY,KAAK,EAAM,EAGvC,GAAI,EAAI,MAAM,IAAK,EAAE,CAAC,KAAO,KAAM,CAC/B,IAAM,EAAQ,CACV,SAAU,OACV,KAAM,0BACN,GAAI,mBAAmB,IACvB,KAAM,CACF,KAAM,WACN,GAAI,WACP,CACD,MAAO,kBACP,IAAK,8DACR,CAEG,MAAM,QAAQ,EAAQ,CACtB,EAAS,QAAQ,GAAO,CACpB,YAAa,CAAC,EAAM,CACvB,EAED,EAAQ,YAAc,EAAQ,aAAe,EAAE,CAC/C,EAAQ,YAAY,KAAK,EAAM,IAGzC,CAGC,EAAS,QAGpB,OAAO,cACH,EACM,CAQN,OAPI,OAAO,GAAU,SACV,EAEA,IAAU,QAAe,EAAM,SAAW,EAC1C,MAGJ,EAAM,IAAK,GAAM,EAAE,UAAU,CAAC,CAAC,KAAK,IAAI,CAGnD,aAAa,QAAQ,EAA8C,CAC/D,IAAM,EAAU,MAAM,KAAK,WAAW,EAAO,CAC7C,OAAO,KAAK,eAAe,EAAQ"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "author": "Sebastian Pekarek <mail@sebbo.net>",
3
3
  "bin": {
4
- "fitness-first-ical-proxy": "./dist/bin/start.js"
4
+ "fitness-first-ical-proxy": "./dist/bin/start.mjs"
5
5
  },
6
6
  "bugs": {
7
7
  "url": "https://github.com/sebbo2002/fitness-first-ical-proxy/issues"
@@ -22,10 +22,10 @@
22
22
  "@types/mocha": "^10.0.10",
23
23
  "@types/node": "^25.5.0",
24
24
  "c8": "^11.0.0",
25
- "eslint": "^10.0.2",
25
+ "eslint": "^10.1.0",
26
26
  "eslint-config-prettier": "^10.1.8",
27
- "eslint-plugin-jsonc": "^3.1.1",
28
- "eslint-plugin-perfectionist": "^5.6.0",
27
+ "eslint-plugin-jsonc": "^3.1.2",
28
+ "eslint-plugin-perfectionist": "^5.8.0",
29
29
  "esm": "^3.2.25",
30
30
  "globals": "^17.4.0",
31
31
  "husky": "^9.1.7",
@@ -37,17 +37,17 @@
37
37
  "semantic-release": "^25.0.3",
38
38
  "semantic-release-license": "^1.0.3",
39
39
  "source-map-support": "^0.5.21",
40
- "tsup": "^8.5.1",
40
+ "tsdown": "^0.21.9",
41
41
  "tsx": "^4.21.0",
42
- "typedoc": "^0.28.17",
43
- "typescript": "^5.9.3",
44
- "typescript-eslint": "^8.56.0"
42
+ "typedoc": "^0.28.19",
43
+ "typescript": "^6.0.2",
44
+ "typescript-eslint": "^8.58.2"
45
45
  },
46
46
  "engines": {
47
47
  "node": "20 || >=22.0.0"
48
48
  },
49
49
  "exports": {
50
- "import": "./dist/lib/index.js",
50
+ "import": "./dist/lib/index.mjs",
51
51
  "require": "./dist/lib/index.cjs"
52
52
  },
53
53
  "files": [
@@ -56,22 +56,22 @@
56
56
  "homepage": "https://github.com/sebbo2002/fitness-first-ical-proxy#readme",
57
57
  "license": "MIT",
58
58
  "main": "./dist/lib/index.cjs",
59
- "module": "./dist/lib/index.js",
59
+ "module": "./dist/lib/index.mjs",
60
60
  "name": "@sebbo2002/fitness-first-ical-proxy",
61
61
  "repository": {
62
62
  "type": "git",
63
63
  "url": "git+https://github.com/sebbo2002/fitness-first-ical-proxy.git"
64
64
  },
65
65
  "scripts": {
66
- "build": "tsup && cp ./dist/lib/index.d.ts ./dist/lib/index.d.cts",
66
+ "build": "tsdown",
67
67
  "build-all": "./.github/workflows/build.sh",
68
68
  "coverage": "c8 mocha",
69
69
  "develop": "tsx src/bin/start.ts",
70
70
  "license-check": "license-checker --production --summary",
71
71
  "lint": "npx eslint . --fix && npx prettier . --write",
72
- "start": "node ./dist/bin/start.js",
72
+ "start": "node ./dist/bin/start.mjs",
73
73
  "test": "mocha"
74
74
  },
75
75
  "type": "module",
76
- "version": "7.0.4"
76
+ "version": "8.0.0-develop.2"
77
77
  }
@@ -1 +0,0 @@
1
- #!/usr/bin/env node
package/dist/bin/start.js DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- import{a as r}from"../chunk-MSMAVS6L.js";import n from"express";var t=class 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())}static run(){new i}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-Disposition":'attachment; filename="calendar.ics"',"Content-Type":"text/calendar; charset=utf-8"}),s.end(p.toString())})})}async stop(){await new Promise(e=>this.server.close(e)),process.exit()}};t.run();
3
- //# sourceMappingURL=start.js.map
@@ -1 +0,0 @@
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';\n\nimport FitnessFirstIcalProxy from '../lib/index.js';\n\nclass AppServer {\n private app: Express;\n\n private server: Server;\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 static run() {\n new AppServer();\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).then((calendar) => {\n res.writeHead(200, {\n 'Content-Disposition':\n 'attachment; filename=\"calendar.ics\"',\n 'Content-Type': 'text/calendar; charset=utf-8',\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,MAA+B,UAKtC,IAAMC,EAAN,MAAMC,CAAU,CACJ,IAEA,OACR,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,OAAO,KAAM,CACT,IAAID,CACR,CAEA,aAAc,CACV,KAAK,IAAI,IAAI,QAAS,CAACE,EAAKC,IAAQ,CAChCA,EAAI,KAAK,MAAM,CACnB,CAAC,EAED,KAAK,IAAI,IAAI,QAAS,CAACD,EAAKC,IAAQ,CAChCC,EAAsB,QAAQF,EAAI,KAAK,EAAE,KAAMG,GAAa,CACxDF,EAAI,UAAU,IAAK,CACf,sBACI,sCACJ,eAAgB,8BACpB,CAAC,EAEDA,EAAI,IAAIE,EAAS,SAAS,CAAC,CAC/B,CAAC,CACL,CAAC,CACL,CAEA,MAAM,MAAO,CACT,MAAM,IAAI,QAASC,GAAO,KAAK,OAAO,MAAMA,CAAE,CAAC,EAE/C,QAAQ,KAAK,CACjB,CACJ,EAEAP,EAAU,IAAI","names":["express","AppServer","_AppServer","express","req","res","FitnessFirstIcalProxy","calendar","cb"]}
@@ -1,2 +0,0 @@
1
- import f from"ical-generator";var o=class{static createCalendar(e){let i=f({name:"Fitness First",prodId:{company:"sebbo.net",product:"fitness-first-ical-proxy"},ttl:21600});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({end:m,floating:!0,id:t.id,location:t.club,start:c,summary:t.title,url:t.url})})})}),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={category:"Aqua",club:"Berlin - Gendarmenmarkt",id:`kinderschwimmen-${n}`,time:{from:"09:00:00",to:"12:15:00"},title:"Kinderschwimmen",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={category:"Aqua",club:"Berlin - Gendarmenmarkt",id:`kinderschwimmen-${n}`,time:{from:"15:00:00",to:"17:15:00"},title:"Kinderschwimmen",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 paramToString(e){return typeof e=="string"?e:typeof e>"u"||e.length===0?"all":e.map(i=>i.toString()).join("-")}static async request(e){let i=await this.getCourses(e);return this.createCalendar(i)}};export{o as a};
2
- //# sourceMappingURL=chunk-MSMAVS6L.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/index.ts"],"sourcesContent":["import type { ICalCalendar } from 'ical-generator';\n\nimport ical from 'ical-generator';\n\nimport {\n type RequestParams,\n type ResponseClasses,\n type ResponseCourse,\n type ResponseData,\n} from './types.js';\n\nexport default class FitnessFirstIcalProxy {\n static createCalendar(courses: ResponseClasses): ICalCalendar {\n const cal = ical({\n name: 'Fitness First',\n prodId: {\n company: 'sebbo.net',\n product: 'fitness-first-ical-proxy',\n },\n ttl: 60 * 60 * 6,\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(\n (courses) => {\n courses.forEach((course: ResponseCourse) => {\n const start = new Date(\n day + 'T' + course.time.from + 'Z',\n );\n const end = new Date(day + 'T' + course.time.to + 'Z');\n\n cal.createEvent({\n end,\n floating: true,\n id: course.id,\n location: course.club,\n start,\n summary: course.title,\n url: course.url,\n });\n });\n },\n );\n });\n\n return cal;\n }\n\n static async getCourses(params: RequestParams): Promise<ResponseClasses> {\n const url =\n 'https://www.fitnessfirst.de/magicline/api/class-shedule/' +\n this.paramToString(params.club_id) +\n '/' +\n this.paramToString(params.category_id) +\n '/' +\n this.paramToString(params.class_id) +\n '/' +\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 (\n params.club_id === '96' &&\n (params.category_id === 'aqua' || !params.category_id)\n ) {\n Object.entries(response.classes).forEach(([key, classes]) => {\n if (key.split('_', 2)[1] === 'sa') {\n const event = {\n category: 'Aqua',\n club: 'Berlin - Gendarmenmarkt',\n id: `kinderschwimmen-${key}`,\n time: {\n from: '09:00:00',\n to: '12:15:00',\n },\n title: 'Kinderschwimmen',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',\n };\n\n if (Array.isArray(classes)) {\n response.classes[key] = {\n before_noon: [event],\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 category: 'Aqua',\n club: 'Berlin - Gendarmenmarkt',\n id: `kinderschwimmen-${key}`,\n time: {\n from: '15:00:00',\n to: '17:15:00',\n },\n title: 'Kinderschwimmen',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',\n };\n\n if (Array.isArray(classes)) {\n response.classes[key] = {\n before_noon: [event],\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 paramToString(\n value: Array<number | string> | string | undefined,\n ): 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.map((v) => v.toString()).join('-');\n }\n\n static async request(params: RequestParams): Promise<ICalCalendar> {\n const courses = await this.getCourses(params);\n return this.createCalendar(courses);\n }\n}\n"],"mappings":"AAEA,OAAOA,MAAU,iBASjB,IAAqBC,EAArB,KAA2C,CACvC,OAAO,eAAeC,EAAwC,CAC1D,IAAMC,EAAMC,EAAK,CACb,KAAM,gBACN,OAAQ,CACJ,QAAS,YACT,QAAS,0BACb,EACA,IAAK,KACT,CAAC,EAED,cAAO,QAAQF,CAAO,EAAE,QAAQ,CAAC,CAACG,EAAKC,CAAO,IAAM,CAChD,IAAMC,EAAMF,EAAI,MAAM,GAAG,EAAE,CAAC,GAE3B,MAAM,QAAQC,CAAO,EAAIA,EAAU,OAAO,OAAOA,CAAO,GAAG,QACvDJ,GAAY,CACTA,EAAQ,QAASM,GAA2B,CACxC,IAAMC,EAAQ,IAAI,KACdF,EAAM,IAAMC,EAAO,KAAK,KAAO,GACnC,EACME,EAAM,IAAI,KAAKH,EAAM,IAAMC,EAAO,KAAK,GAAK,GAAG,EAErDL,EAAI,YAAY,CACZ,IAAAO,EACA,SAAU,GACV,GAAIF,EAAO,GACX,SAAUA,EAAO,KACjB,MAAAC,EACA,QAASD,EAAO,MAChB,IAAKA,EAAO,GAChB,CAAC,CACL,CAAC,CACL,CACJ,CACJ,CAAC,EAEML,CACX,CAEA,aAAa,WAAWQ,EAAiD,CACrE,IAAMC,EACF,2DACA,KAAK,cAAcD,EAAO,OAAO,EACjC,IACA,KAAK,cAAcA,EAAO,WAAW,EACrC,IACA,KAAK,cAAcA,EAAO,QAAQ,EAClC,IACA,KAAK,cAAcA,EAAO,UAAU,EAGlCE,EAAY,MADN,MAAM,MAAMD,CAAG,GACC,KAAK,EAGjC,OACID,EAAO,UAAY,OAClBA,EAAO,cAAgB,QAAU,CAACA,EAAO,cAE1C,OAAO,QAAQE,EAAS,OAAO,EAAE,QAAQ,CAAC,CAACR,EAAKC,CAAO,IAAM,CACzD,GAAID,EAAI,MAAM,IAAK,CAAC,EAAE,CAAC,IAAM,KAAM,CAC/B,IAAMS,EAAQ,CACV,SAAU,OACV,KAAM,0BACN,GAAI,mBAAmBT,CAAG,GAC1B,KAAM,CACF,KAAM,WACN,GAAI,UACR,EACA,MAAO,kBACP,IAAK,6DACT,EAEI,MAAM,QAAQC,CAAO,EACrBO,EAAS,QAAQR,CAAG,EAAI,CACpB,YAAa,CAACS,CAAK,CACvB,GAEAR,EAAQ,YAAcA,EAAQ,aAAe,CAAC,EAC9CA,EAAQ,YAAY,KAAKQ,CAAK,EAEtC,CACA,GAAIT,EAAI,MAAM,IAAK,CAAC,EAAE,CAAC,IAAM,KAAM,CAC/B,IAAMS,EAAQ,CACV,SAAU,OACV,KAAM,0BACN,GAAI,mBAAmBT,CAAG,GAC1B,KAAM,CACF,KAAM,WACN,GAAI,UACR,EACA,MAAO,kBACP,IAAK,6DACT,EAEI,MAAM,QAAQC,CAAO,EACrBO,EAAS,QAAQR,CAAG,EAAI,CACpB,YAAa,CAACS,CAAK,CACvB,GAEAR,EAAQ,YAAcA,EAAQ,aAAe,CAAC,EAC9CA,EAAQ,YAAY,KAAKQ,CAAK,EAEtC,CACJ,CAAC,EAGED,EAAS,OACpB,CAEA,OAAO,cACHE,EACM,CACN,OAAI,OAAOA,GAAU,SACVA,EAEP,OAAOA,EAAU,KAAeA,EAAM,SAAW,EAC1C,MAGJA,EAAM,IAAKC,GAAMA,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,CAClD,CAEA,aAAa,QAAQL,EAA8C,CAC/D,IAAMT,EAAU,MAAM,KAAK,WAAWS,CAAM,EAC5C,OAAO,KAAK,eAAeT,CAAO,CACtC,CACJ","names":["ical","FitnessFirstIcalProxy","courses","cal","ical","key","classes","day","course","start","end","params","url","response","event","value","v"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/lib/index.ts"],"sourcesContent":["import type { ICalCalendar } from 'ical-generator';\n\nimport ical from 'ical-generator';\n\nimport {\n type RequestParams,\n type ResponseClasses,\n type ResponseCourse,\n type ResponseData,\n} from './types.js';\n\nexport default class FitnessFirstIcalProxy {\n static createCalendar(courses: ResponseClasses): ICalCalendar {\n const cal = ical({\n name: 'Fitness First',\n prodId: {\n company: 'sebbo.net',\n product: 'fitness-first-ical-proxy',\n },\n ttl: 60 * 60 * 6,\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(\n (courses) => {\n courses.forEach((course: ResponseCourse) => {\n const start = new Date(\n day + 'T' + course.time.from + 'Z',\n );\n const end = new Date(day + 'T' + course.time.to + 'Z');\n\n cal.createEvent({\n end,\n floating: true,\n id: course.id,\n location: course.club,\n start,\n summary: course.title,\n url: course.url,\n });\n });\n },\n );\n });\n\n return cal;\n }\n\n static async getCourses(params: RequestParams): Promise<ResponseClasses> {\n const url =\n 'https://www.fitnessfirst.de/magicline/api/class-shedule/' +\n this.paramToString(params.club_id) +\n '/' +\n this.paramToString(params.category_id) +\n '/' +\n this.paramToString(params.class_id) +\n '/' +\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 (\n params.club_id === '96' &&\n (params.category_id === 'aqua' || !params.category_id)\n ) {\n Object.entries(response.classes).forEach(([key, classes]) => {\n if (key.split('_', 2)[1] === 'sa') {\n const event = {\n category: 'Aqua',\n club: 'Berlin - Gendarmenmarkt',\n id: `kinderschwimmen-${key}`,\n time: {\n from: '09:00:00',\n to: '12:15:00',\n },\n title: 'Kinderschwimmen',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',\n };\n\n if (Array.isArray(classes)) {\n response.classes[key] = {\n before_noon: [event],\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 category: 'Aqua',\n club: 'Berlin - Gendarmenmarkt',\n id: `kinderschwimmen-${key}`,\n time: {\n from: '15:00:00',\n to: '17:15:00',\n },\n title: 'Kinderschwimmen',\n url: 'https://www.fitnessfirst.de/news/kinderschwimmen-1635593849',\n };\n\n if (Array.isArray(classes)) {\n response.classes[key] = {\n before_noon: [event],\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 paramToString(\n value: Array<number | string> | string | undefined,\n ): 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.map((v) => v.toString()).join('-');\n }\n\n static async request(params: RequestParams): Promise<ICalCalendar> {\n const courses = await this.getCourses(params);\n return this.createCalendar(courses);\n }\n}\n"],"mappings":"0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,IAAA,eAAAC,EAAAH,GAEA,IAAAI,EAAiB,+BASjB,IAAqBC,EAArB,KAA2C,CACvC,OAAO,eAAeC,EAAwC,CAC1D,IAAMC,KAAM,EAAAC,SAAK,CACb,KAAM,gBACN,OAAQ,CACJ,QAAS,YACT,QAAS,0BACb,EACA,IAAK,KACT,CAAC,EAED,cAAO,QAAQF,CAAO,EAAE,QAAQ,CAAC,CAACG,EAAKC,CAAO,IAAM,CAChD,IAAMC,EAAMF,EAAI,MAAM,GAAG,EAAE,CAAC,GAE3B,MAAM,QAAQC,CAAO,EAAIA,EAAU,OAAO,OAAOA,CAAO,GAAG,QACvDJ,GAAY,CACTA,EAAQ,QAASM,GAA2B,CACxC,IAAMC,EAAQ,IAAI,KACdF,EAAM,IAAMC,EAAO,KAAK,KAAO,GACnC,EACME,EAAM,IAAI,KAAKH,EAAM,IAAMC,EAAO,KAAK,GAAK,GAAG,EAErDL,EAAI,YAAY,CACZ,IAAAO,EACA,SAAU,GACV,GAAIF,EAAO,GACX,SAAUA,EAAO,KACjB,MAAAC,EACA,QAASD,EAAO,MAChB,IAAKA,EAAO,GAChB,CAAC,CACL,CAAC,CACL,CACJ,CACJ,CAAC,EAEML,CACX,CAEA,aAAa,WAAWQ,EAAiD,CACrE,IAAMC,EACF,2DACA,KAAK,cAAcD,EAAO,OAAO,EACjC,IACA,KAAK,cAAcA,EAAO,WAAW,EACrC,IACA,KAAK,cAAcA,EAAO,QAAQ,EAClC,IACA,KAAK,cAAcA,EAAO,UAAU,EAGlCE,EAAY,MADN,MAAM,MAAMD,CAAG,GACC,KAAK,EAGjC,OACID,EAAO,UAAY,OAClBA,EAAO,cAAgB,QAAU,CAACA,EAAO,cAE1C,OAAO,QAAQE,EAAS,OAAO,EAAE,QAAQ,CAAC,CAACR,EAAKC,CAAO,IAAM,CACzD,GAAID,EAAI,MAAM,IAAK,CAAC,EAAE,CAAC,IAAM,KAAM,CAC/B,IAAMS,EAAQ,CACV,SAAU,OACV,KAAM,0BACN,GAAI,mBAAmBT,CAAG,GAC1B,KAAM,CACF,KAAM,WACN,GAAI,UACR,EACA,MAAO,kBACP,IAAK,6DACT,EAEI,MAAM,QAAQC,CAAO,EACrBO,EAAS,QAAQR,CAAG,EAAI,CACpB,YAAa,CAACS,CAAK,CACvB,GAEAR,EAAQ,YAAcA,EAAQ,aAAe,CAAC,EAC9CA,EAAQ,YAAY,KAAKQ,CAAK,EAEtC,CACA,GAAIT,EAAI,MAAM,IAAK,CAAC,EAAE,CAAC,IAAM,KAAM,CAC/B,IAAMS,EAAQ,CACV,SAAU,OACV,KAAM,0BACN,GAAI,mBAAmBT,CAAG,GAC1B,KAAM,CACF,KAAM,WACN,GAAI,UACR,EACA,MAAO,kBACP,IAAK,6DACT,EAEI,MAAM,QAAQC,CAAO,EACrBO,EAAS,QAAQR,CAAG,EAAI,CACpB,YAAa,CAACS,CAAK,CACvB,GAEAR,EAAQ,YAAcA,EAAQ,aAAe,CAAC,EAC9CA,EAAQ,YAAY,KAAKQ,CAAK,EAEtC,CACJ,CAAC,EAGED,EAAS,OACpB,CAEA,OAAO,cACHE,EACM,CACN,OAAI,OAAOA,GAAU,SACVA,EAEP,OAAOA,EAAU,KAAeA,EAAM,SAAW,EAC1C,MAGJA,EAAM,IAAKC,GAAMA,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,CAClD,CAEA,aAAa,QAAQL,EAA8C,CAC/D,IAAMT,EAAU,MAAM,KAAK,WAAWS,CAAM,EAC5C,OAAO,KAAK,eAAeT,CAAO,CACtC,CACJ","names":["lib_exports","__export","FitnessFirstIcalProxy","__toCommonJS","import_ical_generator","FitnessFirstIcalProxy","courses","cal","ical","key","classes","day","course","start","end","params","url","response","event","value","v"]}
@@ -1,35 +0,0 @@
1
- import { ICalCalendar } from 'ical-generator';
2
-
3
- interface RequestParams {
4
- category_id?: number[] | string | string[];
5
- class_id?: number[] | string;
6
- club_id?: number[] | string | string[];
7
- daytime_id?: string | string[];
8
- }
9
- interface ResponseClasses {
10
- [key: string]: [] | ResponseDay;
11
- }
12
- interface ResponseCourse {
13
- category: string;
14
- club: string;
15
- id: string;
16
- time: ResponseCourseTime;
17
- title: string;
18
- url: null | string;
19
- }
20
- interface ResponseCourseTime {
21
- from: string;
22
- to: string;
23
- }
24
- interface ResponseDay {
25
- [key: string]: ResponseCourse[];
26
- }
27
-
28
- declare class FitnessFirstIcalProxy {
29
- static createCalendar(courses: ResponseClasses): ICalCalendar;
30
- static getCourses(params: RequestParams): Promise<ResponseClasses>;
31
- static paramToString(value: Array<number | string> | string | undefined): string;
32
- static request(params: RequestParams): Promise<ICalCalendar>;
33
- }
34
-
35
- export { FitnessFirstIcalProxy as default };
package/dist/lib/index.js DELETED
@@ -1,2 +0,0 @@
1
- import{a}from"../chunk-MSMAVS6L.js";export{a as default};
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}