summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/endpoints/sponsors.ts
diff options
context:
space:
mode:
authorMar0xy <marie@kaifa.ch>2023-10-14 01:59:09 +0200
committerMar0xy <marie@kaifa.ch>2023-10-14 01:59:09 +0200
commit2d31c189d89900cf4ce48b85cf3ef0fccd4aa9f3 (patch)
treed99e5e87837f4d38f6abcc660008d1c839ae8528 /packages/backend/src/server/api/endpoints/sponsors.ts
parentupd: change unrenote function (diff)
downloadsharkey-2d31c189d89900cf4ce48b85cf3ef0fccd4aa9f3.tar.gz
sharkey-2d31c189d89900cf4ce48b85cf3ef0fccd4aa9f3.tar.bz2
sharkey-2d31c189d89900cf4ce48b85cf3ef0fccd4aa9f3.zip
add: sponsors
Diffstat (limited to 'packages/backend/src/server/api/endpoints/sponsors.ts')
-rw-r--r--packages/backend/src/server/api/endpoints/sponsors.ts46
1 files changed, 46 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/endpoints/sponsors.ts b/packages/backend/src/server/api/endpoints/sponsors.ts
new file mode 100644
index 0000000000..6923fdb418
--- /dev/null
+++ b/packages/backend/src/server/api/endpoints/sponsors.ts
@@ -0,0 +1,46 @@
+import { Inject, Injectable } from '@nestjs/common';
+import { Endpoint } from '@/server/api/endpoint-base.js';
+import { DI } from '@/di-symbols.js';
+import * as Redis from 'ioredis';
+
+export const meta = {
+ tags: ["meta"],
+ description: "Get Sharkey GH Sponsors",
+
+ requireCredential: false,
+ requireCredentialPrivateMode: false,
+} as const;
+
+export const paramDef = {
+ type: "object",
+ properties: {
+ forceUpdate: { type: "boolean", default: false },
+ },
+ required: [],
+} as const;
+
+@Injectable()
+export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-disable-line import/no-default-export
+ constructor(
+ @Inject(DI.redis) private redisClient: Redis.Redis,
+ ) {
+ super(meta, paramDef, async (ps, me) => {
+ let sponsors;
+ const cachedSponsors = await this.redisClient.get("sponsors");
+ if (!ps.forceUpdate && cachedSponsors) {
+ sponsors = JSON.parse(cachedSponsors);
+ } else {
+ AbortSignal.timeout ??= function timeout(ms) {
+ const ctrl = new AbortController();
+ setTimeout(() => ctrl.abort(), ms);
+ return ctrl.signal;
+ };
+
+ sponsors = await fetch("https://kaifa.ch/transfem-sponsors.json",{ signal: AbortSignal.timeout(2000) })
+ .then((response) => response.json());
+ await this.redisClient.set("sponsors", JSON.stringify(sponsors), "EX", 3600);
+ }
+ return { sponsor_data: sponsors['sponsors'] };
+ })
+ }
+}