From 921c67503b68e46d504ac1c72fb1372cda633006 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20P=C3=B6ttker?= Date: Thu, 21 May 2026 21:20:20 +0200 Subject: [PATCH] Include build output for git installs --- .gitignore | 1 - dist/AgrarmonitorConnector.d.ts | 40 +++ dist/AgrarmonitorConnector.d.ts.map | 1 + dist/AgrarmonitorConnector.js | 301 +++++++++++++++++++ dist/AgrarmonitorConnector.js.map | 1 + dist/cookie-store/FileCookieStore.d.ts | 20 ++ dist/cookie-store/FileCookieStore.d.ts.map | 1 + dist/cookie-store/FileCookieStore.js | 129 ++++++++ dist/cookie-store/FileCookieStore.js.map | 1 + dist/cookie-store/MemoryCookieStore.d.ts | 9 + dist/cookie-store/MemoryCookieStore.d.ts.map | 1 + dist/cookie-store/MemoryCookieStore.js | 18 ++ dist/cookie-store/MemoryCookieStore.js.map | 1 + dist/createAgrarmonitorClient.d.ts | 3 + dist/createAgrarmonitorClient.d.ts.map | 1 + dist/createAgrarmonitorClient.js | 10 + dist/createAgrarmonitorClient.js.map | 1 + dist/crypto/AesGcmCookieEncryptor.d.ts | 8 + dist/crypto/AesGcmCookieEncryptor.d.ts.map | 1 + dist/crypto/AesGcmCookieEncryptor.js | 69 +++++ dist/crypto/AesGcmCookieEncryptor.js.map | 1 + dist/index.d.ts | 7 + dist/index.d.ts.map | 1 + dist/index.js | 14 + dist/index.js.map | 1 + dist/types.d.ts | 87 ++++++ dist/types.d.ts.map | 1 + dist/types.js | 3 + dist/types.js.map | 1 + package.json | 1 + 30 files changed, 733 insertions(+), 1 deletion(-) create mode 100644 dist/AgrarmonitorConnector.d.ts create mode 100644 dist/AgrarmonitorConnector.d.ts.map create mode 100644 dist/AgrarmonitorConnector.js create mode 100644 dist/AgrarmonitorConnector.js.map create mode 100644 dist/cookie-store/FileCookieStore.d.ts create mode 100644 dist/cookie-store/FileCookieStore.d.ts.map create mode 100644 dist/cookie-store/FileCookieStore.js create mode 100644 dist/cookie-store/FileCookieStore.js.map create mode 100644 dist/cookie-store/MemoryCookieStore.d.ts create mode 100644 dist/cookie-store/MemoryCookieStore.d.ts.map create mode 100644 dist/cookie-store/MemoryCookieStore.js create mode 100644 dist/cookie-store/MemoryCookieStore.js.map create mode 100644 dist/createAgrarmonitorClient.d.ts create mode 100644 dist/createAgrarmonitorClient.d.ts.map create mode 100644 dist/createAgrarmonitorClient.js create mode 100644 dist/createAgrarmonitorClient.js.map create mode 100644 dist/crypto/AesGcmCookieEncryptor.d.ts create mode 100644 dist/crypto/AesGcmCookieEncryptor.d.ts.map create mode 100644 dist/crypto/AesGcmCookieEncryptor.js create mode 100644 dist/crypto/AesGcmCookieEncryptor.js.map create mode 100644 dist/index.d.ts create mode 100644 dist/index.d.ts.map create mode 100644 dist/index.js create mode 100644 dist/index.js.map create mode 100644 dist/types.d.ts create mode 100644 dist/types.d.ts.map create mode 100644 dist/types.js create mode 100644 dist/types.js.map diff --git a/.gitignore b/.gitignore index 36634f3..bb8d383 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ node_modules/ -dist/ data/ *.log .DS_Store diff --git a/dist/AgrarmonitorConnector.d.ts b/dist/AgrarmonitorConnector.d.ts new file mode 100644 index 0000000..a6a15c3 --- /dev/null +++ b/dist/AgrarmonitorConnector.d.ts @@ -0,0 +1,40 @@ +import { type AxiosInstance } from 'axios'; +import type { AgrarmonitorApiCustomer, AgrarmonitorConnectorOptions, AgrarmonitorConnectorResult, AgrarmonitorDeviceRegistrationOptions, AgrarmonitorDeviceRegistrationResult, AgrarmonitorFetchCustomersOptions, AgrarmonitorFreischaltungStatus, AgrarmonitorRegistrierungStatus } from './types'; +export declare class AgrarmonitorConnector implements AgrarmonitorConnectorResult { + private readonly options; + http: AxiosInstance; + private readonly baseUrl; + private readonly apiBaseUrl; + private readonly timeoutMs; + private readonly autoLogin; + private readonly autoRetry; + private readonly loginStrategy; + private readonly logger?; + private cookieJar; + private loginInProgress; + constructor(options: AgrarmonitorConnectorOptions); + init(): Promise; + login(): Promise; + clearSession(): Promise; + saveSession(): Promise; + getCookieCount(url?: string): Promise; + checkFreigeschaltet(): Promise; + checkRegistriert(): Promise; + registerDevice(registration: AgrarmonitorDeviceRegistrationOptions): Promise; + fetchCustomers(options?: AgrarmonitorFetchCustomersOptions): Promise; + private createHttpClient; + private performLogin; + private performAutoLogin; + private performAuthLogin; + private performLegacyLogin; + private isSessionValid; + private isLoginRequiredResponse; + private retryAfterLogin; + private getResponseUrl; + private getHeader; + private isFreischaltungUrl; + private isLoginPageText; + private extractNonce; + private maskNonce; +} +//# sourceMappingURL=AgrarmonitorConnector.d.ts.map \ No newline at end of file diff --git a/dist/AgrarmonitorConnector.d.ts.map b/dist/AgrarmonitorConnector.d.ts.map new file mode 100644 index 0000000..9fdccd8 --- /dev/null +++ b/dist/AgrarmonitorConnector.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"AgrarmonitorConnector.d.ts","sourceRoot":"","sources":["../src/AgrarmonitorConnector.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,aAAa,EAA+C,MAAM,OAAO,CAAC;AAI/F,OAAO,KAAK,EACV,uBAAuB,EACvB,4BAA4B,EAC5B,2BAA2B,EAC3B,qCAAqC,EACrC,oCAAoC,EACpC,iCAAiC,EACjC,+BAA+B,EAE/B,+BAA+B,EAEhC,MAAM,SAAS,CAAC;AAMjB,qBAAa,qBAAsB,YAAW,2BAA2B;IAa3D,OAAO,CAAC,QAAQ,CAAC,OAAO;IAZ7B,IAAI,EAAG,aAAa,CAAC;IAE5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4B;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,eAAe,CAA8B;gBAExB,OAAO,EAAE,4BAA4B;IAU5D,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAerB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAYtB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAM7B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,cAAc,CAAC,GAAG,SAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAInD,mBAAmB,IAAI,OAAO,CAAC,+BAA+B,CAAC;IAqB/D,gBAAgB,IAAI,OAAO,CAAC,+BAA+B,CAAC;IAoB5D,cAAc,CAClB,YAAY,EAAE,qCAAqC,GAClD,OAAO,CAAC,oCAAoC,CAAC;IA6C1C,cAAc,CAAC,OAAO,GAAE,iCAAsC,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAyBzG,OAAO,CAAC,gBAAgB;YAwCV,YAAY;YAmBZ,gBAAgB;YAShB,gBAAgB;YAsBhB,kBAAkB;YA4BlB,cAAc;IAS5B,OAAO,CAAC,uBAAuB;YAejB,eAAe;IAa7B,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,SAAS;CAGlB"} \ No newline at end of file diff --git a/dist/AgrarmonitorConnector.js b/dist/AgrarmonitorConnector.js new file mode 100644 index 0000000..6110933 --- /dev/null +++ b/dist/AgrarmonitorConnector.js @@ -0,0 +1,301 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AgrarmonitorConnector = void 0; +const axios_1 = __importDefault(require("axios")); +const axios_cookiejar_support_1 = require("axios-cookiejar-support"); +const jsdom_1 = require("jsdom"); +const tough_cookie_1 = require("tough-cookie"); +class AgrarmonitorConnector { + options; + http; + baseUrl; + apiBaseUrl; + timeoutMs; + autoLogin; + autoRetry; + loginStrategy; + logger; + cookieJar; + loginInProgress = null; + constructor(options) { + this.options = options; + this.baseUrl = options.baseUrl ?? 'https://admin7.agrarmonitor.de'; + this.apiBaseUrl = options.apiBaseUrl ?? 'https://api.agrarmonitor.de'; + this.timeoutMs = options.timeoutMs ?? 15000; + this.autoLogin = options.autoLogin ?? true; + this.autoRetry = options.autoRetry ?? true; + this.loginStrategy = options.loginStrategy ?? 'auto'; + this.logger = options.logger; + } + async init() { + this.cookieJar = await this.options.cookieStore.load(); + this.http = this.createHttpClient(); + if (this.autoLogin) { + const valid = await this.isSessionValid(); + if (!valid) { + await this.login(); + } + } + return this; + } + async login() { + if (this.loginInProgress) { + return this.loginInProgress; + } + this.loginInProgress = this.performLogin().finally(() => { + this.loginInProgress = null; + }); + return this.loginInProgress; + } + async clearSession() { + this.cookieJar = new tough_cookie_1.CookieJar(); + await this.options.cookieStore.clear(); + this.http = this.createHttpClient(); + } + async saveSession() { + await this.options.cookieStore.save(this.cookieJar); + } + async getCookieCount(url = this.baseUrl) { + return this.cookieJar.getCookiesSync(url).length; + } + async checkFreigeschaltet() { + const response = await this.http.get('/', { + maxRedirects: 0, + validateStatus: status => status >= 200 && status < 400, + }); + await this.saveSession(); + const redirectLocation = this.getHeader(response, 'location'); + const redirected = response.status >= 300 && response.status < 400 && this.isFreischaltungUrl(redirectLocation); + return { + freigeschaltet: !redirected, + status: response.status, + redirected, + redirectLocation, + timestamp: new Date().toISOString(), + cookies: await this.getCookieCount(), + }; + } + async checkRegistriert() { + const response = await this.http.get('/', { + maxRedirects: 5, + validateStatus: status => status >= 200 && status < 500, + }); + await this.saveSession(); + const pageContent = typeof response.data === 'string' ? response.data : ''; + const hasRegistrationText = pageContent.includes('Neues Gerät registrieren'); + return { + registriert: !hasRegistrationText, + status: response.status, + hasRegistrationText, + timestamp: new Date().toISOString(), + cookies: await this.getCookieCount(), + }; + } + async registerDevice(registration) { + const agrarmonitorId = registration.agrarmonitorId.trim(); + const pcName = registration.pcName.trim(); + if (!agrarmonitorId || !pcName) { + throw new Error('AgrarmonitorID und PC-Name sind erforderlich'); + } + const freischaltungResponse = await this.http.get('/freischaltung/'); + const responseContent = typeof freischaltungResponse.data === 'string' ? freischaltungResponse.data : ''; + const nonce = this.extractNonce(responseContent, '#nonce, input[name="nonce"]'); + const registerResponse = await this.http.post('/freischaltung/api/register.php', { + firma: agrarmonitorId, + name: pcName, + nonce, + }, { + headers: { + 'Content-Type': 'application/json', + }, + validateStatus: status => status >= 200 && status < 500, + }); + await this.saveSession(); + const success = registerResponse.status >= 200 && registerResponse.status < 300; + return { + success, + status: registerResponse.status, + message: success ? 'Registrierung erfolgreich' : 'Registrierung fehlgeschlagen', + data: { + agrarmonitorId, + pcName, + nonce: this.maskNonce(nonce), + }, + timestamp: new Date().toISOString(), + cookies: await this.getCookieCount(), + }; + } + async fetchCustomers(options = {}) { + const apiToken = options.apiToken ?? this.options.apiToken; + if (!apiToken) { + throw new Error('Agrarmonitor API-Token nicht konfiguriert'); + } + const response = await this.http.get(`${this.apiBaseUrl}/v1/kunden`, { + params: { + per_page: options.perPage ?? 99999, + api_token: apiToken, + }, + }); + await this.saveSession(); + const responseData = response.data; + if (!responseData || !Array.isArray(responseData.data)) { + throw new Error('Ungueltige Agrarmonitor API-Antwort'); + } + return responseData.data; + } + createHttpClient() { + const client = (0, axios_cookiejar_support_1.wrapper)(axios_1.default.create({ + baseURL: this.baseUrl, + jar: this.cookieJar, + withCredentials: true, + timeout: this.timeoutMs, + headers: { + 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', + }, + maxRedirects: 5, + validateStatus: status => status >= 200 && status < 400, + })); + client.interceptors.response.use(async (response) => { + await this.options.cookieStore.save(this.cookieJar); + if (this.autoRetry && this.isLoginRequiredResponse(response)) { + return this.retryAfterLogin(response.config); + } + return response; + }, async (error) => { + const response = error.response; + if (this.autoRetry && response && this.isLoginRequiredResponse(response)) { + return this.retryAfterLogin(error.config); + } + throw error; + }); + return client; + } + async performLogin() { + if (!this.options.username || !this.options.password) { + throw new Error('Agrarmonitor-Credentials nicht konfiguriert'); + } + this.logger?.info?.('Fuehre Agrarmonitor-Login durch'); + if (this.loginStrategy === 'auth') { + await this.performAuthLogin(); + } + else if (this.loginStrategy === 'legacy') { + await this.performLegacyLogin(); + } + else { + await this.performAutoLogin(); + } + await this.options.cookieStore.save(this.cookieJar); + this.logger?.info?.('Agrarmonitor-Login erfolgreich'); + } + async performAutoLogin() { + try { + await this.performAuthLogin(); + } + catch (authError) { + this.logger?.warn?.('Agrarmonitor-Login via /auth/login fehlgeschlagen, versuche Legacy-Login', authError); + await this.performLegacyLogin(); + } + } + async performAuthLogin() { + await this.http.get('/auth/login'); + const loginData = new URLSearchParams({ + email: this.options.username, + password: this.options.password, + remember: 'on', + }); + const response = await this.http.post('/auth/login', loginData, { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + }); + const responseText = typeof response.data === 'string' ? response.data : ''; + if (responseText.includes('Anmeldung fehlgeschlagen')) { + throw new Error('Agrarmonitor-Login fehlgeschlagen'); + } + } + async performLegacyLogin() { + const loginPageResponse = await this.http.get('/'); + const loginPageText = typeof loginPageResponse.data === 'string' ? loginPageResponse.data : ''; + if (!this.isLoginPageText(loginPageText)) { + return; + } + const nonce = this.extractNonce(loginPageText, 'input[name="nonce"]'); + const loginData = new URLSearchParams({ + username: this.options.username, + passwort: this.options.password, + nonce, + }); + const response = await this.http.post('/redirect.php?id=benutzerverwaltung&action=login', loginData, { + headers: { + 'Content-Type': 'application/x-www-form-urlencoded', + }, + }); + const responseText = typeof response.data === 'string' ? response.data : ''; + if (this.isLoginPageText(responseText)) { + throw new Error('Agrarmonitor-Legacy-Login fehlgeschlagen'); + } + } + async isSessionValid() { + try { + const response = await this.http.get('/'); + return !this.isLoginRequiredResponse(response); + } + catch { + return false; + } + } + isLoginRequiredResponse(response) { + const responseUrl = this.getResponseUrl(response); + const responseText = typeof response.data === 'string' ? response.data : ''; + return (response.status === 401 || + response.status === 403 || + responseUrl.includes('/auth/login') || + responseText.includes('/auth/login') || + this.isLoginPageText(responseText) || + responseText.includes('Anmeldung') || + responseText.includes('Einloggen')); + } + async retryAfterLogin(config) { + if (config._agrarmonitorRetry) { + throw new Error('Agrarmonitor-Request nach erneutem Login weiterhin nicht autorisiert'); + } + config._agrarmonitorRetry = true; + this.logger?.info?.('Agrarmonitor-Session abgelaufen, erneuter Login wird ausgefuehrt'); + await this.login(); + return this.http.request(config); + } + getResponseUrl(response) { + const request = response.request; + return request?.res?.responseUrl ?? ''; + } + getHeader(response, header) { + const value = response.headers[header.toLowerCase()]; + if (Array.isArray(value)) { + return value[0] ?? null; + } + return typeof value === 'string' ? value : null; + } + isFreischaltungUrl(value) { + return Boolean(value?.includes('freischaltung')); + } + isLoginPageText(responseText) { + return responseText.includes('Anmeldung - AGRARMONITOR'); + } + extractNonce(html, selector) { + const dom = new jsdom_1.JSDOM(html); + const element = dom.window.document.querySelector(selector); + const nonce = element?.getAttribute('value') ?? element?.value ?? ''; + if (!nonce) { + throw new Error('Nonce-Element nicht gefunden oder leer'); + } + return nonce; + } + maskNonce(nonce) { + return nonce.length <= 10 ? nonce : `${nonce.slice(0, 10)}...`; + } +} +exports.AgrarmonitorConnector = AgrarmonitorConnector; +//# sourceMappingURL=AgrarmonitorConnector.js.map \ No newline at end of file diff --git a/dist/AgrarmonitorConnector.js.map b/dist/AgrarmonitorConnector.js.map new file mode 100644 index 0000000..62774ee --- /dev/null +++ b/dist/AgrarmonitorConnector.js.map @@ -0,0 +1 @@ +{"version":3,"file":"AgrarmonitorConnector.js","sourceRoot":"","sources":["../src/AgrarmonitorConnector.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA+F;AAC/F,qEAAkD;AAClD,iCAA8B;AAC9B,+CAAyC;AAkBzC,MAAa,qBAAqB;IAaH;IAZtB,IAAI,CAAiB;IAEX,OAAO,CAAS;IAChB,UAAU,CAAS;IACnB,SAAS,CAAS;IAClB,SAAS,CAAU;IACnB,SAAS,CAAU;IACnB,aAAa,CAA4B;IACzC,MAAM,CAAU;IACzB,SAAS,CAAa;IACtB,eAAe,GAAyB,IAAI,CAAC;IAErD,YAA6B,OAAqC;QAArC,YAAO,GAAP,OAAO,CAA8B;QAChE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,gCAAgC,CAAC;QACnE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,6BAA6B,CAAC;QACtE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,MAAM,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEpC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAE1C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,eAAe,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YACtD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,IAAI,CAAC,SAAS,GAAG,IAAI,wBAAS,EAAE,CAAC;QACjC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO;QACrC,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;YACxC,YAAY,EAAE,CAAC;YACf,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;SACxD,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC9D,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;QAEhH,OAAO;YACL,cAAc,EAAE,CAAC,UAAU;YAC3B,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,UAAU;YACV,gBAAgB;YAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,MAAM,IAAI,CAAC,cAAc,EAAE;SACrC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE;YACxC,YAAY,EAAE,CAAC;YACf,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;SACxD,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,WAAW,GAAG,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,MAAM,mBAAmB,GAAG,WAAW,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;QAE7E,OAAO;YACL,WAAW,EAAE,CAAC,mBAAmB;YACjC,MAAM,EAAE,QAAQ,CAAC,MAAM;YACvB,mBAAmB;YACnB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,MAAM,IAAI,CAAC,cAAc,EAAE;SACrC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,YAAmD;QAEnD,MAAM,cAAc,GAAG,YAAY,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAE1C,IAAI,CAAC,cAAc,IAAI,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,MAAM,qBAAqB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACrE,MAAM,eAAe,GAAG,OAAO,qBAAqB,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACzG,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,6BAA6B,CAAC,CAAC;QAEhF,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAC3C,iCAAiC,EACjC;YACE,KAAK,EAAE,cAAc;YACrB,IAAI,EAAE,MAAM;YACZ,KAAK;SACN,EACD;YACE,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;SACxD,CACF,CAAC;QAEF,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,IAAI,GAAG,IAAI,gBAAgB,CAAC,MAAM,GAAG,GAAG,CAAC;QAEhF,OAAO;YACL,OAAO;YACP,MAAM,EAAE,gBAAgB,CAAC,MAAM;YAC/B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,8BAA8B;YAC/E,IAAI,EAAE;gBACJ,cAAc;gBACd,MAAM;gBACN,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;aAC7B;YACD,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,MAAM,IAAI,CAAC,cAAc,EAAE;SACrC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,UAA6C,EAAE;QAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QAE3D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,YAAY,EAAE;YACnE,MAAM,EAAE;gBACN,QAAQ,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;gBAClC,SAAS,EAAE,QAAQ;aACpB;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAEzB,MAAM,YAAY,GAAG,QAAQ,CAAC,IAA0B,CAAC;QAEzD,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QAED,OAAO,YAAY,CAAC,IAAiC,CAAC;IACxD,CAAC;IAEO,gBAAgB;QACtB,MAAM,MAAM,GAAG,IAAA,iCAAO,EACpB,eAAK,CAAC,MAAM,CAAC;YACX,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,GAAG,EAAE,IAAI,CAAC,SAAS;YACnB,eAAe,EAAE,IAAI;YACrB,OAAO,EAAE,IAAI,CAAC,SAAS;YACvB,OAAO,EAAE;gBACP,YAAY,EACV,qHAAqH;aACxH;YACD,YAAY,EAAE,CAAC;YACf,cAAc,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;SACxD,CAAC,CACH,CAAC;QAEF,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAC9B,KAAK,EAAC,QAAQ,EAAC,EAAE;YACf,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEpD,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC7D,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC/C,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC,EACD,KAAK,EAAC,KAAK,EAAC,EAAE;YACZ,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAqC,CAAC;YAE7D,IAAI,IAAI,CAAC,SAAS,IAAI,QAAQ,IAAI,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzE,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC5C,CAAC;YAED,MAAM,KAAK,CAAC;QACd,CAAC,CACF,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,iCAAiC,CAAC,CAAC;QAEvD,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;YAClC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAChC,CAAC;aAAM,IAAI,IAAI,CAAC,aAAa,KAAK,QAAQ,EAAE,CAAC;YAC3C,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAChC,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,gCAAgC,CAAC,CAAC;IACxD,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAChC,CAAC;QAAC,OAAO,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,0EAA0E,EAAE,SAAS,CAAC,CAAC;YAC3G,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAEnC,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC;YACpC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC5B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,EAAE;YAC9D,OAAO,EAAE;gBACP,cAAc,EAAE,mCAAmC;aACpD;SACF,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAE5E,IAAI,YAAY,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,kBAAkB;QAC9B,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,aAAa,GAAG,OAAO,iBAAiB,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAE/F,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC;YACzC,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;QACtE,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC;YACpC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,KAAK;SACN,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,kDAAkD,EAAE,SAAS,EAAE;YACnG,OAAO,EAAE;gBACP,cAAc,EAAE,mCAAmC;aACpD;SACF,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAE5E,IAAI,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc;QAC1B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1C,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,uBAAuB,CAAC,QAAuB;QACrD,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAE5E,OAAO,CACL,QAAQ,CAAC,MAAM,KAAK,GAAG;YACvB,QAAQ,CAAC,MAAM,KAAK,GAAG;YACvB,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC;YACnC,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC;YACpC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC;YAClC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC;YAClC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CACnC,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,MAAmC;QAC/D,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;QAC1F,CAAC;QAED,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAEjC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,kEAAkE,CAAC,CAAC;QACxF,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAEnB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAEO,cAAc,CAAC,QAAuB;QAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAyD,CAAC;QACnF,OAAO,OAAO,EAAE,GAAG,EAAE,WAAW,IAAI,EAAE,CAAC;IACzC,CAAC;IAEO,SAAS,CAAC,QAAuB,EAAE,MAAc;QACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAErD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAC1B,CAAC;QAED,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,CAAC;IAEO,kBAAkB,CAAC,KAAoB;QAC7C,OAAO,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;IACnD,CAAC;IAEO,eAAe,CAAC,YAAoB;QAC1C,OAAO,YAAY,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;IAC3D,CAAC;IAEO,YAAY,CAAC,IAAY,EAAE,QAAgB;QACjD,MAAM,GAAG,GAAG,IAAI,aAAK,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAmB,QAAQ,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAG,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;QAErE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,SAAS,CAAC,KAAa;QAC7B,OAAO,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC;IACjE,CAAC;CACF;AAlXD,sDAkXC"} \ No newline at end of file diff --git a/dist/cookie-store/FileCookieStore.d.ts b/dist/cookie-store/FileCookieStore.d.ts new file mode 100644 index 0000000..cbb63b9 --- /dev/null +++ b/dist/cookie-store/FileCookieStore.d.ts @@ -0,0 +1,20 @@ +import { CookieJar } from 'tough-cookie'; +import type { CookieEncryptor, CookieStore, Logger } from '../types'; +interface FileCookieStoreOptions { + encryptor?: CookieEncryptor; + logger?: Logger; +} +export declare class FileCookieStore implements CookieStore { + private readonly filePath; + private readonly options; + private static readonly sharedJars; + constructor(filePath: string, options?: FileCookieStoreOptions); + load(): Promise; + save(cookieJar: CookieJar): Promise; + clear(): Promise; + private isEncryptedCookieFile; + private cookieJarFromJson; + private remember; +} +export {}; +//# sourceMappingURL=FileCookieStore.d.ts.map \ No newline at end of file diff --git a/dist/cookie-store/FileCookieStore.d.ts.map b/dist/cookie-store/FileCookieStore.d.ts.map new file mode 100644 index 0000000..f82dab8 --- /dev/null +++ b/dist/cookie-store/FileCookieStore.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"FileCookieStore.d.ts","sourceRoot":"","sources":["../../src/cookie-store/FileCookieStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAU,SAAS,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAErE,UAAU,sBAAsB;IAC9B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAWD,qBAAa,eAAgB,YAAW,WAAW;IAI/C,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ1B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAgC;gBAG/C,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,sBAA2B;IAGjD,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC;IAgC1B,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ5B,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,QAAQ;CAIjB"} \ No newline at end of file diff --git a/dist/cookie-store/FileCookieStore.js b/dist/cookie-store/FileCookieStore.js new file mode 100644 index 0000000..3a33137 --- /dev/null +++ b/dist/cookie-store/FileCookieStore.js @@ -0,0 +1,129 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || (function () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FileCookieStore = void 0; +const fs = __importStar(require("fs")); +const path = __importStar(require("path")); +const tough_cookie_1 = require("tough-cookie"); +class FileCookieStore { + filePath; + options; + static sharedJars = new Map(); + constructor(filePath, options = {}) { + this.filePath = filePath; + this.options = options; + } + async load() { + const sharedJar = FileCookieStore.sharedJars.get(this.filePath); + if (sharedJar) { + return sharedJar; + } + try { + if (!fs.existsSync(this.filePath)) { + this.options.logger?.info?.('Neuer Cookie-Store wird erstellt'); + return this.remember(new tough_cookie_1.CookieJar()); + } + const raw = fs.readFileSync(this.filePath, 'utf8'); + const parsed = JSON.parse(raw); + if (this.isEncryptedCookieFile(parsed)) { + if (!this.options.encryptor) { + throw new Error('Cookie-Datei ist verschluesselt, aber kein Encryptor wurde konfiguriert'); + } + const decrypted = this.options.encryptor.decrypt(parsed.data); + const cookieJson = JSON.parse(decrypted); + return this.remember(this.cookieJarFromJson(cookieJson)); + } + return this.remember(this.cookieJarFromJson(parsed)); + } + catch (error) { + this.options.logger?.warn?.('Cookies konnten nicht geladen werden, neuer Cookie-Store wird erstellt', error); + return this.remember(new tough_cookie_1.CookieJar()); + } + } + async save(cookieJar) { + FileCookieStore.sharedJars.set(this.filePath, cookieJar); + fs.mkdirSync(path.dirname(this.filePath), { recursive: true }); + const cookieJson = cookieJar.toJSON(); + let fileContent; + if (this.options.encryptor) { + fileContent = JSON.stringify({ + encrypted: true, + algorithm: 'aes-256-gcm', + data: this.options.encryptor.encrypt(JSON.stringify(cookieJson)), + updatedAt: new Date().toISOString(), + }, null, 2); + } + else { + fileContent = JSON.stringify(cookieJson, null, 2); + } + fs.writeFileSync(this.filePath, fileContent, { + mode: 0o600, + }); + } + async clear() { + FileCookieStore.sharedJars.set(this.filePath, new tough_cookie_1.CookieJar()); + if (fs.existsSync(this.filePath)) { + fs.unlinkSync(this.filePath); + } + } + isEncryptedCookieFile(value) { + return (typeof value === 'object' && + value !== null && + value.encrypted === true && + value.algorithm === 'aes-256-gcm' && + typeof value.data === 'string'); + } + cookieJarFromJson(value) { + if (Array.isArray(value)) { + const cookieJar = new tough_cookie_1.CookieJar(); + for (const cookieData of value) { + const cookie = tough_cookie_1.Cookie.fromJSON(cookieData); + if (cookie) { + const domain = cookie.domain ?? 'admin7.agrarmonitor.de'; + const url = domain.startsWith('http') ? domain : `https://${domain}`; + cookieJar.setCookieSync(cookie, url); + } + } + return cookieJar; + } + return tough_cookie_1.CookieJar.fromJSON(JSON.stringify(value)); + } + remember(cookieJar) { + FileCookieStore.sharedJars.set(this.filePath, cookieJar); + return cookieJar; + } +} +exports.FileCookieStore = FileCookieStore; +//# sourceMappingURL=FileCookieStore.js.map \ No newline at end of file diff --git a/dist/cookie-store/FileCookieStore.js.map b/dist/cookie-store/FileCookieStore.js.map new file mode 100644 index 0000000..e191ce5 --- /dev/null +++ b/dist/cookie-store/FileCookieStore.js.map @@ -0,0 +1 @@ +{"version":3,"file":"FileCookieStore.js","sourceRoot":"","sources":["../../src/cookie-store/FileCookieStore.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/cookie-store/MemoryCookieStore.d.ts b/dist/cookie-store/MemoryCookieStore.d.ts new file mode 100644 index 0000000..1704085 --- /dev/null +++ b/dist/cookie-store/MemoryCookieStore.d.ts @@ -0,0 +1,9 @@ +import { CookieJar } from 'tough-cookie'; +import type { CookieStore } from '../types'; +export declare class MemoryCookieStore implements CookieStore { + private cookieJar; + load(): Promise; + save(cookieJar: CookieJar): Promise; + clear(): Promise; +} +//# sourceMappingURL=MemoryCookieStore.d.ts.map \ No newline at end of file diff --git a/dist/cookie-store/MemoryCookieStore.d.ts.map b/dist/cookie-store/MemoryCookieStore.d.ts.map new file mode 100644 index 0000000..534a3da --- /dev/null +++ b/dist/cookie-store/MemoryCookieStore.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"MemoryCookieStore.d.ts","sourceRoot":"","sources":["../../src/cookie-store/MemoryCookieStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,SAAS,CAAmB;IAE9B,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC;IAI1B,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"} \ No newline at end of file diff --git a/dist/cookie-store/MemoryCookieStore.js b/dist/cookie-store/MemoryCookieStore.js new file mode 100644 index 0000000..5f8dbf8 --- /dev/null +++ b/dist/cookie-store/MemoryCookieStore.js @@ -0,0 +1,18 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.MemoryCookieStore = void 0; +const tough_cookie_1 = require("tough-cookie"); +class MemoryCookieStore { + cookieJar = new tough_cookie_1.CookieJar(); + async load() { + return this.cookieJar; + } + async save(cookieJar) { + this.cookieJar = cookieJar; + } + async clear() { + this.cookieJar = new tough_cookie_1.CookieJar(); + } +} +exports.MemoryCookieStore = MemoryCookieStore; +//# sourceMappingURL=MemoryCookieStore.js.map \ No newline at end of file diff --git a/dist/cookie-store/MemoryCookieStore.js.map b/dist/cookie-store/MemoryCookieStore.js.map new file mode 100644 index 0000000..03bb03c --- /dev/null +++ b/dist/cookie-store/MemoryCookieStore.js.map @@ -0,0 +1 @@ +{"version":3,"file":"MemoryCookieStore.js","sourceRoot":"","sources":["../../src/cookie-store/MemoryCookieStore.ts"],"names":[],"mappings":";;;AAAA,+CAAyC;AAGzC,MAAa,iBAAiB;IACpB,SAAS,GAAG,IAAI,wBAAS,EAAE,CAAC;IAEpC,KAAK,CAAC,IAAI;QACR,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAoB;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,SAAS,GAAG,IAAI,wBAAS,EAAE,CAAC;IACnC,CAAC;CACF;AAdD,8CAcC"} \ No newline at end of file diff --git a/dist/createAgrarmonitorClient.d.ts b/dist/createAgrarmonitorClient.d.ts new file mode 100644 index 0000000..fdbdd6c --- /dev/null +++ b/dist/createAgrarmonitorClient.d.ts @@ -0,0 +1,3 @@ +import type { AgrarmonitorConnectorOptions, AgrarmonitorConnectorResult } from './types'; +export declare function createAgrarmonitorClient(options: AgrarmonitorConnectorOptions): Promise; +//# sourceMappingURL=createAgrarmonitorClient.d.ts.map \ No newline at end of file diff --git a/dist/createAgrarmonitorClient.d.ts.map b/dist/createAgrarmonitorClient.d.ts.map new file mode 100644 index 0000000..d51428f --- /dev/null +++ b/dist/createAgrarmonitorClient.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"createAgrarmonitorClient.d.ts","sourceRoot":"","sources":["../src/createAgrarmonitorClient.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,4BAA4B,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAEzF,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,2BAA2B,CAAC,CAItC"} \ No newline at end of file diff --git a/dist/createAgrarmonitorClient.js b/dist/createAgrarmonitorClient.js new file mode 100644 index 0000000..614f1aa --- /dev/null +++ b/dist/createAgrarmonitorClient.js @@ -0,0 +1,10 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createAgrarmonitorClient = createAgrarmonitorClient; +const AgrarmonitorConnector_1 = require("./AgrarmonitorConnector"); +async function createAgrarmonitorClient(options) { + const connector = new AgrarmonitorConnector_1.AgrarmonitorConnector(options); + await connector.init(); + return connector; +} +//# sourceMappingURL=createAgrarmonitorClient.js.map \ No newline at end of file diff --git a/dist/createAgrarmonitorClient.js.map b/dist/createAgrarmonitorClient.js.map new file mode 100644 index 0000000..2591db3 --- /dev/null +++ b/dist/createAgrarmonitorClient.js.map @@ -0,0 +1 @@ +{"version":3,"file":"createAgrarmonitorClient.js","sourceRoot":"","sources":["../src/createAgrarmonitorClient.ts"],"names":[],"mappings":";;AAGA,4DAMC;AATD,mEAAgE;AAGzD,KAAK,UAAU,wBAAwB,CAC5C,OAAqC;IAErC,MAAM,SAAS,GAAG,IAAI,6CAAqB,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC;IACvB,OAAO,SAAS,CAAC;AACnB,CAAC"} \ No newline at end of file diff --git a/dist/crypto/AesGcmCookieEncryptor.d.ts b/dist/crypto/AesGcmCookieEncryptor.d.ts new file mode 100644 index 0000000..1167eb7 --- /dev/null +++ b/dist/crypto/AesGcmCookieEncryptor.d.ts @@ -0,0 +1,8 @@ +import type { CookieEncryptor } from '../types'; +export declare class AesGcmCookieEncryptor implements CookieEncryptor { + private readonly key; + constructor(secret: string); + encrypt(text: string): string; + decrypt(encryptedText: string): string; +} +//# sourceMappingURL=AesGcmCookieEncryptor.d.ts.map \ No newline at end of file diff --git a/dist/crypto/AesGcmCookieEncryptor.d.ts.map b/dist/crypto/AesGcmCookieEncryptor.d.ts.map new file mode 100644 index 0000000..cb86640 --- /dev/null +++ b/dist/crypto/AesGcmCookieEncryptor.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"AesGcmCookieEncryptor.d.ts","sourceRoot":"","sources":["../../src/crypto/AesGcmCookieEncryptor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAEhD,qBAAa,qBAAsB,YAAW,eAAe;IAC3D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;gBAEjB,MAAM,EAAE,MAAM;IAQ1B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAY7B,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM;CAkBvC"} \ No newline at end of file diff --git a/dist/crypto/AesGcmCookieEncryptor.js b/dist/crypto/AesGcmCookieEncryptor.js new file mode 100644 index 0000000..534378b --- /dev/null +++ b/dist/crypto/AesGcmCookieEncryptor.js @@ -0,0 +1,69 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || (function () { + var ownKeys = function(o) { + ownKeys = Object.getOwnPropertyNames || function (o) { + var ar = []; + for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; + return ar; + }; + return ownKeys(o); + }; + return function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); + __setModuleDefault(result, mod); + return result; + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +exports.AesGcmCookieEncryptor = void 0; +const crypto = __importStar(require("crypto")); +class AesGcmCookieEncryptor { + key; + constructor(secret) { + if (!secret || secret.trim().length < 16) { + throw new Error('Cookie encryption secret muss mindestens 16 Zeichen lang sein'); + } + this.key = crypto.createHash('sha256').update(secret).digest(); + } + encrypt(text) { + const iv = crypto.randomBytes(12); + const cipher = crypto.createCipheriv('aes-256-gcm', this.key, iv); + let encrypted = cipher.update(text, 'utf8', 'hex'); + encrypted += cipher.final('hex'); + const authTag = cipher.getAuthTag(); + return `${iv.toString('hex')}:${authTag.toString('hex')}:${encrypted}`; + } + decrypt(encryptedText) { + const [ivHex, authTagHex, encrypted] = encryptedText.split(':'); + if (!ivHex || !authTagHex || !encrypted) { + throw new Error('Ungueltiges verschluesseltes Cookie-Format'); + } + const iv = Buffer.from(ivHex, 'hex'); + const authTag = Buffer.from(authTagHex, 'hex'); + const decipher = crypto.createDecipheriv('aes-256-gcm', this.key, iv); + decipher.setAuthTag(authTag); + let decrypted = decipher.update(encrypted, 'hex', 'utf8'); + decrypted += decipher.final('utf8'); + return decrypted; + } +} +exports.AesGcmCookieEncryptor = AesGcmCookieEncryptor; +//# sourceMappingURL=AesGcmCookieEncryptor.js.map \ No newline at end of file diff --git a/dist/crypto/AesGcmCookieEncryptor.js.map b/dist/crypto/AesGcmCookieEncryptor.js.map new file mode 100644 index 0000000..1355161 --- /dev/null +++ b/dist/crypto/AesGcmCookieEncryptor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"AesGcmCookieEncryptor.js","sourceRoot":"","sources":["../../src/crypto/AesGcmCookieEncryptor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAGjC,MAAa,qBAAqB;IACf,GAAG,CAAS;IAE7B,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC;IACjE,CAAC;IAED,OAAO,CAAC,IAAY;QAClB,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAElE,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACnD,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEjC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAEpC,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;IACzE,CAAC;IAED,OAAO,CAAC,aAAqB;QAC3B,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAEhE,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAE/C,MAAM,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACtE,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAE7B,IAAI,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1D,SAAS,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAEpC,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAzCD,sDAyCC"} \ No newline at end of file diff --git a/dist/index.d.ts b/dist/index.d.ts new file mode 100644 index 0000000..4029d1f --- /dev/null +++ b/dist/index.d.ts @@ -0,0 +1,7 @@ +export { AesGcmCookieEncryptor } from './crypto/AesGcmCookieEncryptor'; +export { FileCookieStore } from './cookie-store/FileCookieStore'; +export { MemoryCookieStore } from './cookie-store/MemoryCookieStore'; +export { AgrarmonitorConnector } from './AgrarmonitorConnector'; +export { createAgrarmonitorClient } from './createAgrarmonitorClient'; +export type { AgrarmonitorConnectorOptions, AgrarmonitorConnectorResult, CookieEncryptor, CookieStore, Logger, } from './types'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/dist/index.d.ts.map b/dist/index.d.ts.map new file mode 100644 index 0000000..f62e8d4 --- /dev/null +++ b/dist/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EACV,4BAA4B,EAC5B,2BAA2B,EAC3B,eAAe,EACf,WAAW,EACX,MAAM,GACP,MAAM,SAAS,CAAC"} \ No newline at end of file diff --git a/dist/index.js b/dist/index.js new file mode 100644 index 0000000..c9f7ebe --- /dev/null +++ b/dist/index.js @@ -0,0 +1,14 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createAgrarmonitorClient = exports.AgrarmonitorConnector = exports.MemoryCookieStore = exports.FileCookieStore = exports.AesGcmCookieEncryptor = void 0; +var AesGcmCookieEncryptor_1 = require("./crypto/AesGcmCookieEncryptor"); +Object.defineProperty(exports, "AesGcmCookieEncryptor", { enumerable: true, get: function () { return AesGcmCookieEncryptor_1.AesGcmCookieEncryptor; } }); +var FileCookieStore_1 = require("./cookie-store/FileCookieStore"); +Object.defineProperty(exports, "FileCookieStore", { enumerable: true, get: function () { return FileCookieStore_1.FileCookieStore; } }); +var MemoryCookieStore_1 = require("./cookie-store/MemoryCookieStore"); +Object.defineProperty(exports, "MemoryCookieStore", { enumerable: true, get: function () { return MemoryCookieStore_1.MemoryCookieStore; } }); +var AgrarmonitorConnector_1 = require("./AgrarmonitorConnector"); +Object.defineProperty(exports, "AgrarmonitorConnector", { enumerable: true, get: function () { return AgrarmonitorConnector_1.AgrarmonitorConnector; } }); +var createAgrarmonitorClient_1 = require("./createAgrarmonitorClient"); +Object.defineProperty(exports, "createAgrarmonitorClient", { enumerable: true, get: function () { return createAgrarmonitorClient_1.createAgrarmonitorClient; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/index.js.map b/dist/index.js.map new file mode 100644 index 0000000..7fff402 --- /dev/null +++ b/dist/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,wEAAuE;AAA9D,8HAAA,qBAAqB,OAAA;AAC9B,kEAAiE;AAAxD,kHAAA,eAAe,OAAA;AACxB,sEAAqE;AAA5D,sHAAA,iBAAiB,OAAA;AAC1B,iEAAgE;AAAvD,8HAAA,qBAAqB,OAAA;AAC9B,uEAAsE;AAA7D,oIAAA,wBAAwB,OAAA"} \ No newline at end of file diff --git a/dist/types.d.ts b/dist/types.d.ts new file mode 100644 index 0000000..8249114 --- /dev/null +++ b/dist/types.d.ts @@ -0,0 +1,87 @@ +import type { AxiosInstance } from 'axios'; +import type { CookieJar } from 'tough-cookie'; +export interface Logger { + debug?(message: string, meta?: unknown): void; + info?(message: string, meta?: unknown): void; + warn?(message: string, meta?: unknown): void; + error?(message: string, meta?: unknown): void; +} +export interface CookieEncryptor { + encrypt(text: string): string; + decrypt(encryptedText: string): string; +} +export interface CookieStore { + load(): Promise; + save(cookieJar: CookieJar): Promise; + clear(): Promise; +} +export type AgrarmonitorLoginStrategy = 'auto' | 'auth' | 'legacy'; +export interface AgrarmonitorConnectorOptions { + baseUrl?: string; + apiBaseUrl?: string; + apiToken?: string; + username: string; + password: string; + cookieStore: CookieStore; + timeoutMs?: number; + autoLogin?: boolean; + autoRetry?: boolean; + loginStrategy?: AgrarmonitorLoginStrategy; + logger?: Logger; +} +export interface AgrarmonitorConnectorResult { + http: AxiosInstance; + login(): Promise; + clearSession(): Promise; + saveSession(): Promise; + getCookieCount(url?: string): Promise; + checkFreigeschaltet(): Promise; + checkRegistriert(): Promise; + registerDevice(options: AgrarmonitorDeviceRegistrationOptions): Promise; + fetchCustomers(options?: AgrarmonitorFetchCustomersOptions): Promise; +} +export interface AgrarmonitorFreischaltungStatus { + freigeschaltet: boolean; + status: number; + redirected: boolean; + redirectLocation: string | null; + timestamp: string; + cookies: number; +} +export interface AgrarmonitorRegistrierungStatus { + registriert: boolean; + status: number; + hasRegistrationText: boolean; + timestamp: string; + cookies: number; +} +export interface AgrarmonitorDeviceRegistrationOptions { + agrarmonitorId: string; + pcName: string; +} +export interface AgrarmonitorDeviceRegistrationResult { + success: boolean; + status: number; + message: string; + data: { + agrarmonitorId: string; + pcName: string; + nonce: string; + }; + timestamp: string; + cookies: number; +} +export interface AgrarmonitorFetchCustomersOptions { + perPage?: number; + apiToken?: string; +} +export interface AgrarmonitorApiCustomer { + id: string | number; + vorname?: string; + nachname?: string; + firma?: string; + ist_aktiv?: number | boolean; + bearbeitet_am?: string | number; + [key: string]: unknown; +} +//# sourceMappingURL=types.d.ts.map \ No newline at end of file diff --git a/dist/types.d.ts.map b/dist/types.d.ts.map new file mode 100644 index 0000000..bffee1b --- /dev/null +++ b/dist/types.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9C,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7C,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,OAAO,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAAC;CACxC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3B,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEnE,MAAM,WAAW,4BAA4B;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,yBAAyB,CAAC;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,mBAAmB,IAAI,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAChE,gBAAgB,IAAI,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAC7D,cAAc,CAAC,OAAO,EAAE,qCAAqC,GAAG,OAAO,CAAC,oCAAoC,CAAC,CAAC;IAC9G,cAAc,CAAC,OAAO,CAAC,EAAE,iCAAiC,GAAG,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;CACjG;AAED,MAAM,WAAW,+BAA+B;IAC9C,cAAc,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,+BAA+B;IAC9C,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,OAAO,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,qCAAqC;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oCAAoC;IACnD,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,cAAc,EAAE,MAAM,CAAC;QACvB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iCAAiC;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"} \ No newline at end of file diff --git a/dist/types.js b/dist/types.js new file mode 100644 index 0000000..11e638d --- /dev/null +++ b/dist/types.js @@ -0,0 +1,3 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=types.js.map \ No newline at end of file diff --git a/dist/types.js.map b/dist/types.js.map new file mode 100644 index 0000000..c768b79 --- /dev/null +++ b/dist/types.js.map @@ -0,0 +1 @@ +{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/package.json b/package.json index 73e2ffa..46f60c6 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "scripts": { "build": "tsc -p tsconfig.json", "clean": "rm -rf dist", + "prepare": "npm run build", "typecheck": "tsc -p tsconfig.json --noEmit" }, "keywords": [