tering-serieuze-sdk 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -223,6 +223,9 @@ var JingleModule = class extends BaseModule {
223
223
  console.log(`Playing jingle ${playJingleDto.folder}/${playJingleDto.file}`);
224
224
  return this.api.post("jingle/play", playJingleDto);
225
225
  }
226
+ async getBigBrotherData() {
227
+ return this.api.get("jingle/bigbrother");
228
+ }
226
229
  };
227
230
 
228
231
  // src/api/user.ts
@@ -244,35 +247,19 @@ var UserModule = class extends BaseModule {
244
247
  };
245
248
 
246
249
  // src/index.ts
247
- import {
248
- BadRequestException,
249
- ForbiddenException,
250
- NotFoundException,
251
- UnauthorizedException,
252
- UnprocessableEntityException,
253
- InternalServerErrorException,
254
- GatewayTimeoutException,
255
- BadGatewayException,
256
- ConflictException,
257
- GoneException,
258
- HttpVersionNotSupportedException,
259
- ImATeapotException,
260
- MethodNotAllowedException,
261
- MisdirectedException,
262
- NotAcceptableException,
263
- NotImplementedException,
264
- PayloadTooLargeException,
265
- PreconditionFailedException,
266
- RequestTimeoutException,
267
- ServiceUnavailableException,
268
- UnsupportedMediaTypeException
269
- } from "@nestjs/common";
270
250
  var CacheType = /* @__PURE__ */ ((CacheType2) => {
271
251
  CacheType2["jingle"] = "jingle";
272
252
  CacheType2["auth"] = "auth";
273
253
  CacheType2["user"] = "user";
274
254
  return CacheType2;
275
255
  })(CacheType || {});
256
+ var ErrorResponse = class extends Error {
257
+ constructor(status, message) {
258
+ super();
259
+ this.status = status;
260
+ this.message = message;
261
+ }
262
+ };
276
263
  var TssApi = class {
277
264
  constructor(apiConfiguration, cacheConfiguration) {
278
265
  this.apiConfiguration = apiConfiguration;
@@ -300,54 +287,11 @@ var TssApi = class {
300
287
  try {
301
288
  response = await fetch(fullUrl, config);
302
289
  } catch (e) {
303
- throw new GatewayTimeoutException("API erg dood");
290
+ throw new ErrorResponse(503, "API erg dood");
304
291
  }
305
292
  if (response.status >= 400) {
306
293
  const error = await response.json();
307
- switch (response.status) {
308
- case 400:
309
- throw new BadRequestException(error);
310
- case 401:
311
- throw new UnauthorizedException(error);
312
- case 403:
313
- throw new ForbiddenException(error);
314
- case 404:
315
- throw new NotFoundException(error);
316
- case 405:
317
- throw new MethodNotAllowedException(error);
318
- case 406:
319
- throw new NotAcceptableException(error);
320
- case 408:
321
- throw new RequestTimeoutException(error);
322
- case 409:
323
- throw new ConflictException(error);
324
- case 410:
325
- throw new GoneException(error);
326
- case 412:
327
- throw new PreconditionFailedException(error);
328
- case 413:
329
- throw new PayloadTooLargeException(error);
330
- case 415:
331
- throw new UnsupportedMediaTypeException(error);
332
- case 418:
333
- throw new ImATeapotException(error);
334
- case 421:
335
- throw new MisdirectedException(error);
336
- case 422:
337
- throw new UnprocessableEntityException(error);
338
- case 500:
339
- throw new InternalServerErrorException(error);
340
- case 501:
341
- throw new NotImplementedException(error);
342
- case 502:
343
- throw new BadGatewayException(error);
344
- case 503:
345
- throw new ServiceUnavailableException(error);
346
- case 504:
347
- throw new GatewayTimeoutException(error);
348
- case 505:
349
- throw new HttpVersionNotSupportedException(error);
350
- }
294
+ throw new ErrorResponse(error.statusCode, error.message ?? error.error);
351
295
  }
352
296
  return response;
353
297
  }
@@ -378,6 +322,7 @@ export {
378
322
  CacheLifetime,
379
323
  CacheType,
380
324
  CookieCache,
325
+ ErrorResponse,
381
326
  FilesystemCache,
382
327
  JingleModule,
383
328
  NullCache,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/cache/abstractCache.ts", "../src/cache/cookieCache.ts", "../src/cache/filesystemCache.ts", "../src/cache/nullCache.ts", "../src/cache/onePasswordCache.ts", "../src/api/base.ts", "../src/api/auth.ts", "../src/api/jingle.ts", "../src/api/user.ts", "../src/index.ts"],
4
- "sourcesContent": ["import { get } from \"stack-trace\";\n\nexport enum CacheLifetime {\n Day = 60 * 60 * 24,\n Week = 60 * 60 * 24 * 7,\n}\n\nexport abstract class AbstractCache {\n constructor(protected cacheName: string) {}\n\n public abstract cacheOrGet<T>(callbackWhenEmpty: () => Promise<T>, key?: string, lifetime?: number): Promise<T>;\n\n public abstract get<T>(key: string): Promise<T | undefined>;\n\n public abstract set<T>(key: string, value: T, lifetime?: number): void;\n\n public abstract remove(key: string): void;\n\n public abstract clear(): void;\n\n public getCacheKey(): string {\n const errorMessage = \"Could not determine cache key. Please provide a key manually.\";\n const trace = get();\n if (trace.length < 3) {\n throw new Error(errorMessage);\n }\n\n const functionName = get()[2].getFunctionName();\n if (!functionName) {\n throw new Error(errorMessage);\n }\n\n return functionName;\n }\n}\n", "import { AbstractCache } from \"./abstractCache\";\n\nexport class CookieCache extends AbstractCache {\n public cacheOrGet<T>(callbackWhenEmpty: () => Promise<T>, key?: string, lifetime?: number): Promise<T> {\n throw new Error(\"Not implemented, use get() and set()\");\n }\n\n public async get<T>(key: string): Promise<T | undefined> {\n if (document.cookie.includes(`${key}=`)) {\n return document.cookie.split(`${key}=`)[1]?.split(\";\")[0] as T;\n }\n\n return undefined;\n }\n\n public set<T>(key: string, value: T, lifetime?: number): void {\n const expires = lifetime ? new Date(Date.now() + lifetime).toUTCString() : \"\";\n document.cookie = `${key}=${value}; expires=${expires}; path=/; samesite=strict; secure`;\n }\n\n public remove(key: string): void {\n document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;\n }\n\n public clear(): void {\n throw new Error(\"Not implemented, use remove()\");\n }\n}\n", "import { AbstractCache } from \"./abstractCache\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport os from \"os\";\n\ntype CacheItem = {\n value: any;\n expiresAt?: number;\n};\n\nexport class FilesystemCache extends AbstractCache {\n protected initialized = false;\n\n protected state: { [key: string]: CacheItem } = {};\n\n public async cacheOrGet<T>(callbackWhenEmpty: () => Promise<T>, key?: string, lifetime?: number): Promise<T> {\n key = key ?? this.getCacheKey();\n\n const cachedValue = await this.get<T>(key);\n if (cachedValue) {\n return cachedValue;\n }\n\n const result = await callbackWhenEmpty();\n this.set(key, result, lifetime);\n return result;\n }\n\n public async get<T>(key: string): Promise<T | undefined> {\n if (!this.initialized) {\n await this._initialize();\n }\n\n const expires = this.state[key]?.expiresAt;\n if (Object.keys(this.state).includes(key) && (expires === undefined || expires > Date.now())) {\n return this.state[key].value;\n }\n\n return undefined;\n }\n\n public set<T>(key: string, value: T, lifetime?: number): void {\n const expiresAt = lifetime ? Date.now() + lifetime : undefined;\n const content: CacheItem = { value };\n if (expiresAt) {\n content.expiresAt = expiresAt;\n }\n this.state[key] = content;\n this.writeState();\n }\n\n public remove(key: string): void {\n delete this.state[key];\n this.writeState();\n }\n\n public clear(): void {\n this.state = {};\n fs.unlinkSync(this.getFilePath());\n }\n\n public getFilePath() {\n return path.join(os.homedir(), \".tss\", `${this.cacheName}.json`);\n }\n\n protected _initialize() {\n this.initialized = true;\n if (fs.existsSync(this.getFilePath())) {\n this.state = JSON.parse(fs.readFileSync(this.getFilePath(), \"utf8\"));\n }\n }\n\n protected writeState() {\n if (!fs.existsSync(path.dirname(this.getFilePath()))) {\n fs.mkdirSync(path.dirname(this.getFilePath()));\n }\n\n fs.writeFileSync(this.getFilePath(), JSON.stringify(this.state));\n }\n}\n", "import { AbstractCache } from \"./abstractCache\";\n\nexport class NullCache extends AbstractCache {\n public cacheOrGet<T>(callbackWhenEmpty: () => Promise<T>, key?: string, lifetime?: number): Promise<T> {\n return callbackWhenEmpty();\n }\n\n public async get<T>(key: string): Promise<T | undefined> {\n return undefined;\n }\n\n public set<T>(key: string, value: T, lifetime?: number): void {}\n\n public remove(key: string): void {}\n\n public clear(): void {}\n}\n", "import { AbstractCache } from \"./abstractCache\";\nimport util from \"util\";\nimport child_process from \"child_process\";\n\n// TODO error handling en lifetime\nexport class OnePasswordCache extends AbstractCache {\n protected asyncExec = util.promisify(child_process.exec);\n\n public cacheOrGet<T>(callbackWhenEmpty: () => Promise<T>, key?: string, lifetime?: number): Promise<T> {\n throw new Error(\"Not implemented, use get() and set()\");\n }\n\n public async get<T>(key: string): Promise<T | undefined> {\n const { stdout, stderr } = await this.asyncExec(`op item get \"${key}\" --fields label=credential --format json`);\n\n if (stderr) {\n console.log(stderr);\n throw new Error(\"ERROR\");\n }\n\n return JSON.parse(stdout).value;\n }\n\n public async set<T>(key: string, value: T, lifetime?: number): Promise<void> {\n let action = `op item edit '${key}' 'credential=${value}'`;\n\n try {\n const t = await this.get(key);\n } catch (e) {\n action = `op item create --category=\"API Credential\" --title ${key} 'credential=${value}'`;\n }\n\n const { stdout, stderr } = await this.asyncExec(action);\n\n if (stderr) {\n console.log(stderr);\n throw new Error(\"ERROR\");\n }\n }\n\n public async remove(key: string): Promise<void> {\n await this.asyncExec(`op item delete '${key}'`);\n }\n\n public clear(): void {\n // Loopje maken en heel 1password leeg maken?\n }\n}\n", "import { AbstractCache } from \"../cache\";\nimport { TssApi } from \"../index\";\n\nexport class BaseModule {\n constructor(protected api: TssApi, protected cache: AbstractCache) {}\n\n public getCache() {\n return this.cache;\n }\n\n public setCache(cache: AbstractCache) {\n this.cache = cache;\n }\n}\n", "import { BaseModule } from \"./base\";\n\nexport class AuthModule extends BaseModule {\n public static cacheKey = \"TSS-TOKEN\";\n\n async getToken(): Promise<string | undefined> {\n return this.cache.get(AuthModule.cacheKey);\n }\n\n async setToken(token: string, lifetime?: number) {\n return this.cache.set(AuthModule.cacheKey, token, lifetime);\n }\n\n async setCode(code: string) {\n // TODO any ?!\n const { accessToken } = await this.api.post<any>(`auth/setCode?code=${code}`, {});\n return accessToken;\n }\n\n async removeToken() {\n return this.cache.remove(AuthModule.cacheKey);\n }\n}\n", "import { JingleFolder, Jingle, PlayJingleDto } from \"tering-serieuze-types\";\nimport { BaseModule } from \"./base\";\nimport { CacheLifetime } from \"../cache\";\n\nexport class JingleModule extends BaseModule {\n async getGrouped() {\n return this.cache.cacheOrGet(\n () => {\n return this.api.get<JingleFolder[]>(\"jingle/grouped\");\n },\n \"getGrouped\",\n CacheLifetime.Week\n );\n }\n\n async getAll() {\n return this.cache.cacheOrGet(\n () => {\n return this.api.get<Jingle[]>(\"jingle\");\n },\n \"getAll\",\n CacheLifetime.Week\n );\n }\n\n async play(playJingleDto: PlayJingleDto) {\n console.log(`Playing jingle ${playJingleDto.folder}/${playJingleDto.file}`);\n return this.api.post(\"jingle/play\", playJingleDto);\n }\n}\n", "import { BaseModule } from \"./base\";\nimport { SetWindowStateDto, User } from \"tering-serieuze-types\";\n\nexport class UserModule extends BaseModule {\n async get(userId?: string) {\n return this.cache.cacheOrGet(() => {\n const userIdParam = userId ? `/${userId}` : \"\";\n return this.api.get<User>(`user${userIdParam}`);\n });\n }\n\n async getAll() {\n return this.cache.cacheOrGet(() => {\n return this.api.get<User[]>(\"user/all\");\n });\n }\n\n async setWindowState(setWindowStateDto: SetWindowStateDto) {\n return this.api.put(\"user/windowState\", setWindowStateDto);\n }\n}\n", "import { AbstractCache, NullCache } from \"./cache\";\nimport { AuthModule, JingleModule, UserModule } from \"./api\";\nimport {\n BadRequestException,\n ForbiddenException,\n NotFoundException,\n UnauthorizedException,\n UnprocessableEntityException,\n InternalServerErrorException,\n GatewayTimeoutException,\n BadGatewayException,\n ConflictException,\n GoneException,\n HttpVersionNotSupportedException,\n ImATeapotException,\n MethodNotAllowedException,\n MisdirectedException,\n NotAcceptableException,\n NotImplementedException,\n PayloadTooLargeException,\n PreconditionFailedException,\n RequestTimeoutException,\n ServiceUnavailableException,\n UnsupportedMediaTypeException,\n} from \"@nestjs/common\";\nimport { Dto } from \"tering-serieuze-types\";\n\nexport * from \"./api\";\nexport * from \"./cache\";\n\nexport type HttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\";\n\nexport interface SDKRequestInit extends RequestInit {\n method?: HttpMethod;\n}\n\nexport enum CacheType {\n jingle = \"jingle\",\n auth = \"auth\",\n user = \"user\",\n}\n\nexport type ApiConfiguration = {\n API_URL: string;\n};\n\nexport type CacheConfiguration = {\n [key in keyof typeof CacheType]?: AbstractCache;\n};\n\nexport class TssApi {\n auth: AuthModule;\n\n jingle: JingleModule;\n\n user: UserModule;\n\n constructor(protected readonly apiConfiguration: ApiConfiguration, cacheConfiguration?: CacheConfiguration) {\n this.jingle = new JingleModule(this, cacheConfiguration?.jingle ?? new NullCache(\"jingle\"));\n this.auth = new AuthModule(this, cacheConfiguration?.auth ?? new NullCache(\"auth\"));\n this.user = new UserModule(this, cacheConfiguration?.user ?? new NullCache(\"user\"));\n }\n\n async fetch(url: string, config: SDKRequestInit = {}) {\n config.method = config.method ?? \"GET\";\n config.headers = {\n ...config.headers,\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await this.auth.getToken()}`,\n };\n\n const apiPrefix = this.apiConfiguration.API_URL;\n\n if (apiPrefix.match(/^https?:\\/\\/localhost/) !== null && typeof process !== \"undefined\" && process.env) {\n process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0;\n }\n\n const fullUrl = `${apiPrefix}/api/${url}`;\n console.log(\"Fetching url\", fullUrl);\n\n let response;\n try {\n response = await fetch(fullUrl, config);\n } catch (e) {\n throw new GatewayTimeoutException(\"API erg dood\");\n }\n\n if (response.status >= 400) {\n const error = await response.json();\n switch (response.status) {\n case 400:\n throw new BadRequestException(error);\n case 401:\n throw new UnauthorizedException(error);\n case 403:\n throw new ForbiddenException(error);\n case 404:\n throw new NotFoundException(error);\n case 405:\n throw new MethodNotAllowedException(error);\n case 406:\n throw new NotAcceptableException(error);\n case 408:\n throw new RequestTimeoutException(error);\n case 409:\n throw new ConflictException(error);\n case 410:\n throw new GoneException(error);\n case 412:\n throw new PreconditionFailedException(error);\n case 413:\n throw new PayloadTooLargeException(error);\n case 415:\n throw new UnsupportedMediaTypeException(error);\n case 418:\n throw new ImATeapotException(error);\n case 421:\n throw new MisdirectedException(error);\n case 422:\n throw new UnprocessableEntityException(error);\n case 500:\n throw new InternalServerErrorException(error);\n case 501:\n throw new NotImplementedException(error);\n case 502:\n throw new BadGatewayException(error);\n case 503:\n throw new ServiceUnavailableException(error);\n case 504:\n throw new GatewayTimeoutException(error);\n case 505:\n throw new HttpVersionNotSupportedException(error);\n }\n }\n\n return response;\n }\n\n protected async fetchPossibleEmptyResponse<T>(method: HttpMethod, url: string, dto: Dto) {\n const response = await this.fetch(url, {\n method,\n body: JSON.stringify(dto),\n });\n\n if (response.status === 204) {\n return;\n }\n\n return response.json() as Promise<T>;\n }\n\n async get<T>(url: string) {\n const response = await this.fetch(url);\n return response.json() as Promise<T>;\n }\n\n async post<T>(url: string, dto: Dto) {\n return this.fetchPossibleEmptyResponse<T>(\"POST\", url, dto);\n }\n\n async put<T>(url: string, dto: Dto) {\n return this.fetchPossibleEmptyResponse<T>(\"PUT\", url, dto);\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { get } from \"stack-trace\";\n\nexport enum CacheLifetime {\n Day = 60 * 60 * 24,\n Week = 60 * 60 * 24 * 7,\n}\n\nexport abstract class AbstractCache {\n constructor(protected cacheName: string) {}\n\n public abstract cacheOrGet<T>(callbackWhenEmpty: () => Promise<T>, key?: string, lifetime?: number): Promise<T>;\n\n public abstract get<T>(key: string): Promise<T | undefined>;\n\n public abstract set<T>(key: string, value: T, lifetime?: number): void;\n\n public abstract remove(key: string): void;\n\n public abstract clear(): void;\n\n public getCacheKey(): string {\n const errorMessage = \"Could not determine cache key. Please provide a key manually.\";\n const trace = get();\n if (trace.length < 3) {\n throw new Error(errorMessage);\n }\n\n const functionName = get()[2].getFunctionName();\n if (!functionName) {\n throw new Error(errorMessage);\n }\n\n return functionName;\n }\n}\n", "import { AbstractCache } from \"./abstractCache\";\n\nexport class CookieCache extends AbstractCache {\n public cacheOrGet<T>(callbackWhenEmpty: () => Promise<T>, key?: string, lifetime?: number): Promise<T> {\n throw new Error(\"Not implemented, use get() and set()\");\n }\n\n public async get<T>(key: string): Promise<T | undefined> {\n if (document.cookie.includes(`${key}=`)) {\n return document.cookie.split(`${key}=`)[1]?.split(\";\")[0] as T;\n }\n\n return undefined;\n }\n\n public set<T>(key: string, value: T, lifetime?: number): void {\n const expires = lifetime ? new Date(Date.now() + lifetime).toUTCString() : \"\";\n document.cookie = `${key}=${value}; expires=${expires}; path=/; samesite=strict; secure`;\n }\n\n public remove(key: string): void {\n document.cookie = `${key}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;`;\n }\n\n public clear(): void {\n throw new Error(\"Not implemented, use remove()\");\n }\n}\n", "import { AbstractCache } from \"./abstractCache\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport os from \"os\";\n\ntype CacheItem = {\n value: any;\n expiresAt?: number;\n};\n\nexport class FilesystemCache extends AbstractCache {\n protected initialized = false;\n\n protected state: { [key: string]: CacheItem } = {};\n\n public async cacheOrGet<T>(callbackWhenEmpty: () => Promise<T>, key?: string, lifetime?: number): Promise<T> {\n key = key ?? this.getCacheKey();\n\n const cachedValue = await this.get<T>(key);\n if (cachedValue) {\n return cachedValue;\n }\n\n const result = await callbackWhenEmpty();\n this.set(key, result, lifetime);\n return result;\n }\n\n public async get<T>(key: string): Promise<T | undefined> {\n if (!this.initialized) {\n await this._initialize();\n }\n\n const expires = this.state[key]?.expiresAt;\n if (Object.keys(this.state).includes(key) && (expires === undefined || expires > Date.now())) {\n return this.state[key].value;\n }\n\n return undefined;\n }\n\n public set<T>(key: string, value: T, lifetime?: number): void {\n const expiresAt = lifetime ? Date.now() + lifetime : undefined;\n const content: CacheItem = { value };\n if (expiresAt) {\n content.expiresAt = expiresAt;\n }\n this.state[key] = content;\n this.writeState();\n }\n\n public remove(key: string): void {\n delete this.state[key];\n this.writeState();\n }\n\n public clear(): void {\n this.state = {};\n fs.unlinkSync(this.getFilePath());\n }\n\n public getFilePath() {\n return path.join(os.homedir(), \".tss\", `${this.cacheName}.json`);\n }\n\n protected _initialize() {\n this.initialized = true;\n if (fs.existsSync(this.getFilePath())) {\n this.state = JSON.parse(fs.readFileSync(this.getFilePath(), \"utf8\"));\n }\n }\n\n protected writeState() {\n if (!fs.existsSync(path.dirname(this.getFilePath()))) {\n fs.mkdirSync(path.dirname(this.getFilePath()));\n }\n\n fs.writeFileSync(this.getFilePath(), JSON.stringify(this.state));\n }\n}\n", "import { AbstractCache } from \"./abstractCache\";\n\nexport class NullCache extends AbstractCache {\n public cacheOrGet<T>(callbackWhenEmpty: () => Promise<T>, key?: string, lifetime?: number): Promise<T> {\n return callbackWhenEmpty();\n }\n\n public async get<T>(key: string): Promise<T | undefined> {\n return undefined;\n }\n\n public set<T>(key: string, value: T, lifetime?: number): void {}\n\n public remove(key: string): void {}\n\n public clear(): void {}\n}\n", "import { AbstractCache } from \"./abstractCache\";\nimport util from \"util\";\nimport child_process from \"child_process\";\n\n// TODO error handling en lifetime\nexport class OnePasswordCache extends AbstractCache {\n protected asyncExec = util.promisify(child_process.exec);\n\n public cacheOrGet<T>(callbackWhenEmpty: () => Promise<T>, key?: string, lifetime?: number): Promise<T> {\n throw new Error(\"Not implemented, use get() and set()\");\n }\n\n public async get<T>(key: string): Promise<T | undefined> {\n const { stdout, stderr } = await this.asyncExec(`op item get \"${key}\" --fields label=credential --format json`);\n\n if (stderr) {\n console.log(stderr);\n throw new Error(\"ERROR\");\n }\n\n return JSON.parse(stdout).value;\n }\n\n public async set<T>(key: string, value: T, lifetime?: number): Promise<void> {\n let action = `op item edit '${key}' 'credential=${value}'`;\n\n try {\n const t = await this.get(key);\n } catch (e) {\n action = `op item create --category=\"API Credential\" --title ${key} 'credential=${value}'`;\n }\n\n const { stdout, stderr } = await this.asyncExec(action);\n\n if (stderr) {\n console.log(stderr);\n throw new Error(\"ERROR\");\n }\n }\n\n public async remove(key: string): Promise<void> {\n await this.asyncExec(`op item delete '${key}'`);\n }\n\n public clear(): void {\n // Loopje maken en heel 1password leeg maken?\n }\n}\n", "import { AbstractCache } from \"../cache\";\nimport { TssApi } from \"../index\";\n\nexport class BaseModule {\n constructor(protected api: TssApi, protected cache: AbstractCache) {}\n\n public getCache() {\n return this.cache;\n }\n\n public setCache(cache: AbstractCache) {\n this.cache = cache;\n }\n}\n", "import { BaseModule } from \"./base\";\n\nexport class AuthModule extends BaseModule {\n public static cacheKey = \"TSS-TOKEN\";\n\n async getToken(): Promise<string | undefined> {\n return this.cache.get(AuthModule.cacheKey);\n }\n\n async setToken(token: string, lifetime?: number) {\n return this.cache.set(AuthModule.cacheKey, token, lifetime);\n }\n\n async setCode(code: string) {\n // TODO any ?!\n const { accessToken } = await this.api.post<any>(`auth/setCode?code=${code}`, {});\n return accessToken;\n }\n\n async removeToken() {\n return this.cache.remove(AuthModule.cacheKey);\n }\n}\n", "import type { JingleFolder, Jingle, PlayJingleDto, BigBrotherItem } from \"tering-serieuze-types\";\nimport { BaseModule } from \"./base\";\nimport { CacheLifetime } from \"../cache\";\n\nexport class JingleModule extends BaseModule {\n async getGrouped() {\n return this.cache.cacheOrGet(\n () => {\n return this.api.get<JingleFolder[]>(\"jingle/grouped\");\n },\n \"getGrouped\",\n CacheLifetime.Week\n );\n }\n\n async getAll() {\n return this.cache.cacheOrGet(\n () => {\n return this.api.get<Jingle[]>(\"jingle\");\n },\n \"getAll\",\n CacheLifetime.Week\n );\n }\n\n async play(playJingleDto: PlayJingleDto) {\n console.log(`Playing jingle ${playJingleDto.folder}/${playJingleDto.file}`);\n return this.api.post(\"jingle/play\", playJingleDto);\n }\n\n async getBigBrotherData() {\n return this.api.get<BigBrotherItem[]>(\"jingle/bigbrother\");\n }\n}\n", "import { BaseModule } from \"./base\";\nimport type { SetWindowStateDto, User } from \"tering-serieuze-types\";\n\nexport class UserModule extends BaseModule {\n async get(userId?: string) {\n return this.cache.cacheOrGet(() => {\n const userIdParam = userId ? `/${userId}` : \"\";\n return this.api.get<User>(`user${userIdParam}`);\n });\n }\n\n async getAll() {\n return this.cache.cacheOrGet(() => {\n return this.api.get<User[]>(\"user/all\");\n });\n }\n\n async setWindowState(setWindowStateDto: SetWindowStateDto) {\n return this.api.put(\"user/windowState\", setWindowStateDto);\n }\n}\n", "import { AbstractCache, NullCache } from \"./cache\";\nimport { AuthModule, JingleModule, UserModule } from \"./api\";\nimport type { Dto } from \"tering-serieuze-types\";\n\nexport * from \"./api\";\nexport * from \"./cache\";\n\nexport type HttpMethod = \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\";\n\nexport interface SDKRequestInit extends RequestInit {\n method?: HttpMethod;\n}\n\nexport enum CacheType {\n jingle = \"jingle\",\n auth = \"auth\",\n user = \"user\",\n}\n\nexport type ApiConfiguration = {\n API_URL: string;\n};\n\nexport type CacheConfiguration = {\n [key in keyof typeof CacheType]?: AbstractCache;\n};\n\nexport class ErrorResponse extends Error {\n constructor(public readonly status: number, public readonly message: string) {\n super();\n }\n}\n\nexport class TssApi {\n auth: AuthModule;\n\n jingle: JingleModule;\n\n user: UserModule;\n\n constructor(protected readonly apiConfiguration: ApiConfiguration, cacheConfiguration?: CacheConfiguration) {\n this.jingle = new JingleModule(this, cacheConfiguration?.jingle ?? new NullCache(\"jingle\"));\n this.auth = new AuthModule(this, cacheConfiguration?.auth ?? new NullCache(\"auth\"));\n this.user = new UserModule(this, cacheConfiguration?.user ?? new NullCache(\"user\"));\n }\n\n async fetch(url: string, config: SDKRequestInit = {}) {\n config.method = config.method ?? \"GET\";\n config.headers = {\n ...config.headers,\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${await this.auth.getToken()}`,\n };\n\n const apiPrefix = this.apiConfiguration.API_URL;\n\n if (apiPrefix.match(/^https?:\\/\\/localhost/) !== null && typeof process !== \"undefined\" && process.env) {\n process.env.NODE_TLS_REJECT_UNAUTHORIZED = 0;\n }\n\n const fullUrl = `${apiPrefix}/api/${url}`;\n console.log(\"Fetching url\", fullUrl);\n\n let response;\n try {\n response = await fetch(fullUrl, config);\n } catch (e) {\n throw new ErrorResponse(503, \"API erg dood\");\n }\n\n if (response.status >= 400) {\n const error = await response.json();\n throw new ErrorResponse(error.statusCode, error.message ?? error.error);\n }\n\n return response;\n }\n\n protected async fetchPossibleEmptyResponse<T>(method: HttpMethod, url: string, dto: Dto) {\n const response = await this.fetch(url, {\n method,\n body: JSON.stringify(dto),\n });\n\n if (response.status === 204) {\n return;\n }\n\n return response.json() as Promise<T>;\n }\n\n async get<T>(url: string) {\n const response = await this.fetch(url);\n return response.json() as Promise<T>;\n }\n\n async post<T>(url: string, dto: Dto) {\n return this.fetchPossibleEmptyResponse<T>(\"POST\", url, dto);\n }\n\n async put<T>(url: string, dto: Dto) {\n return this.fetchPossibleEmptyResponse<T>(\"PUT\", url, dto);\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["CacheLifetime", "CacheType"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tering-serieuze-sdk",
3
- "version": "2.0.1",
3
+ "version": "2.1.0",
4
4
  "description": "Teringserieuze sdk",
5
5
  "author": "Frank",
6
6
  "main": "dist/index.mjs",
@@ -23,9 +23,7 @@
23
23
  },
24
24
  "homepage": "https://gitlab.com/tering-serieuze-shit/tering-serieuze-sdk#readme",
25
25
  "dependencies": {
26
- "@nestjs/common": "^9.3.9",
27
- "stack-trace": "^1.0.0-pre2",
28
- "tering-serieuze-types": "^1.9.0"
26
+ "stack-trace": "^1.0.0-pre2"
29
27
  },
30
28
  "devDependencies": {
31
29
  "@types/node": "^18.15.3",
@@ -33,6 +31,7 @@
33
31
  "@vitest/coverage-c8": "^0.28.5",
34
32
  "esbuild": "^0.17.12",
35
33
  "prettier": "^2.8.1",
34
+ "tering-serieuze-types": "^1.11.0",
36
35
  "vitest": "^0.28.5"
37
36
  }
38
37
  }
package/src/api/jingle.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { JingleFolder, Jingle, PlayJingleDto } from "tering-serieuze-types";
1
+ import type { JingleFolder, Jingle, PlayJingleDto, BigBrotherItem } from "tering-serieuze-types";
2
2
  import { BaseModule } from "./base";
3
3
  import { CacheLifetime } from "../cache";
4
4
 
@@ -27,4 +27,8 @@ export class JingleModule extends BaseModule {
27
27
  console.log(`Playing jingle ${playJingleDto.folder}/${playJingleDto.file}`);
28
28
  return this.api.post("jingle/play", playJingleDto);
29
29
  }
30
+
31
+ async getBigBrotherData() {
32
+ return this.api.get<BigBrotherItem[]>("jingle/bigbrother");
33
+ }
30
34
  }
package/src/api/user.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { BaseModule } from "./base";
2
- import { SetWindowStateDto, User } from "tering-serieuze-types";
2
+ import type { SetWindowStateDto, User } from "tering-serieuze-types";
3
3
 
4
4
  export class UserModule extends BaseModule {
5
5
  async get(userId?: string) {
package/src/index.ts CHANGED
@@ -1,29 +1,6 @@
1
1
  import { AbstractCache, NullCache } from "./cache";
2
2
  import { AuthModule, JingleModule, UserModule } from "./api";
3
- import {
4
- BadRequestException,
5
- ForbiddenException,
6
- NotFoundException,
7
- UnauthorizedException,
8
- UnprocessableEntityException,
9
- InternalServerErrorException,
10
- GatewayTimeoutException,
11
- BadGatewayException,
12
- ConflictException,
13
- GoneException,
14
- HttpVersionNotSupportedException,
15
- ImATeapotException,
16
- MethodNotAllowedException,
17
- MisdirectedException,
18
- NotAcceptableException,
19
- NotImplementedException,
20
- PayloadTooLargeException,
21
- PreconditionFailedException,
22
- RequestTimeoutException,
23
- ServiceUnavailableException,
24
- UnsupportedMediaTypeException,
25
- } from "@nestjs/common";
26
- import { Dto } from "tering-serieuze-types";
3
+ import type { Dto } from "tering-serieuze-types";
27
4
 
28
5
  export * from "./api";
29
6
  export * from "./cache";
@@ -48,6 +25,12 @@ export type CacheConfiguration = {
48
25
  [key in keyof typeof CacheType]?: AbstractCache;
49
26
  };
50
27
 
28
+ export class ErrorResponse extends Error {
29
+ constructor(public readonly status: number, public readonly message: string) {
30
+ super();
31
+ }
32
+ }
33
+
51
34
  export class TssApi {
52
35
  auth: AuthModule;
53
36
 
@@ -82,55 +65,12 @@ export class TssApi {
82
65
  try {
83
66
  response = await fetch(fullUrl, config);
84
67
  } catch (e) {
85
- throw new GatewayTimeoutException("API erg dood");
68
+ throw new ErrorResponse(503, "API erg dood");
86
69
  }
87
70
 
88
71
  if (response.status >= 400) {
89
72
  const error = await response.json();
90
- switch (response.status) {
91
- case 400:
92
- throw new BadRequestException(error);
93
- case 401:
94
- throw new UnauthorizedException(error);
95
- case 403:
96
- throw new ForbiddenException(error);
97
- case 404:
98
- throw new NotFoundException(error);
99
- case 405:
100
- throw new MethodNotAllowedException(error);
101
- case 406:
102
- throw new NotAcceptableException(error);
103
- case 408:
104
- throw new RequestTimeoutException(error);
105
- case 409:
106
- throw new ConflictException(error);
107
- case 410:
108
- throw new GoneException(error);
109
- case 412:
110
- throw new PreconditionFailedException(error);
111
- case 413:
112
- throw new PayloadTooLargeException(error);
113
- case 415:
114
- throw new UnsupportedMediaTypeException(error);
115
- case 418:
116
- throw new ImATeapotException(error);
117
- case 421:
118
- throw new MisdirectedException(error);
119
- case 422:
120
- throw new UnprocessableEntityException(error);
121
- case 500:
122
- throw new InternalServerErrorException(error);
123
- case 501:
124
- throw new NotImplementedException(error);
125
- case 502:
126
- throw new BadGatewayException(error);
127
- case 503:
128
- throw new ServiceUnavailableException(error);
129
- case 504:
130
- throw new GatewayTimeoutException(error);
131
- case 505:
132
- throw new HttpVersionNotSupportedException(error);
133
- }
73
+ throw new ErrorResponse(error.statusCode, error.message ?? error.error);
134
74
  }
135
75
 
136
76
  return response;