Include build output for git installs

This commit is contained in:
2026-05-21 21:20:20 +02:00
parent b47cbc00a8
commit 921c67503b
30 changed files with 733 additions and 1 deletions
-1
View File
@@ -1,5 +1,4 @@
node_modules/
dist/
data/
*.log
.DS_Store
+40
View File
@@ -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<this>;
login(): Promise<void>;
clearSession(): Promise<void>;
saveSession(): Promise<void>;
getCookieCount(url?: string): Promise<number>;
checkFreigeschaltet(): Promise<AgrarmonitorFreischaltungStatus>;
checkRegistriert(): Promise<AgrarmonitorRegistrierungStatus>;
registerDevice(registration: AgrarmonitorDeviceRegistrationOptions): Promise<AgrarmonitorDeviceRegistrationResult>;
fetchCustomers(options?: AgrarmonitorFetchCustomersOptions): Promise<AgrarmonitorApiCustomer[]>;
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
+1
View File
@@ -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"}
+301
View File
@@ -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
File diff suppressed because one or more lines are too long
+20
View File
@@ -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<CookieJar>;
save(cookieJar: CookieJar): Promise<void>;
clear(): Promise<void>;
private isEncryptedCookieFile;
private cookieJarFromJson;
private remember;
}
export {};
//# sourceMappingURL=FileCookieStore.d.ts.map
+1
View File
@@ -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"}
+129
View File
@@ -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
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"FileCookieStore.js","sourceRoot":"","sources":["../../src/cookie-store/FileCookieStore.ts"],"names":[],"mappings":"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"}
+9
View File
@@ -0,0 +1,9 @@
import { CookieJar } from 'tough-cookie';
import type { CookieStore } from '../types';
export declare class MemoryCookieStore implements CookieStore {
private cookieJar;
load(): Promise<CookieJar>;
save(cookieJar: CookieJar): Promise<void>;
clear(): Promise<void>;
}
//# sourceMappingURL=MemoryCookieStore.d.ts.map
+1
View File
@@ -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"}
+18
View File
@@ -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
+1
View File
@@ -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"}
+3
View File
@@ -0,0 +1,3 @@
import type { AgrarmonitorConnectorOptions, AgrarmonitorConnectorResult } from './types';
export declare function createAgrarmonitorClient(options: AgrarmonitorConnectorOptions): Promise<AgrarmonitorConnectorResult>;
//# sourceMappingURL=createAgrarmonitorClient.d.ts.map
+1
View File
@@ -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"}
+10
View File
@@ -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
+1
View File
@@ -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"}
+8
View File
@@ -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
+1
View File
@@ -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"}
+69
View File
@@ -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
+1
View File
@@ -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"}
+7
View File
@@ -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
+1
View File
@@ -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"}
+14
View File
@@ -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
+1
View File
@@ -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"}
+87
View File
@@ -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<CookieJar>;
save(cookieJar: CookieJar): Promise<void>;
clear(): Promise<void>;
}
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<void>;
clearSession(): Promise<void>;
saveSession(): Promise<void>;
getCookieCount(url?: string): Promise<number>;
checkFreigeschaltet(): Promise<AgrarmonitorFreischaltungStatus>;
checkRegistriert(): Promise<AgrarmonitorRegistrierungStatus>;
registerDevice(options: AgrarmonitorDeviceRegistrationOptions): Promise<AgrarmonitorDeviceRegistrationResult>;
fetchCustomers(options?: AgrarmonitorFetchCustomersOptions): Promise<AgrarmonitorApiCustomer[]>;
}
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
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
+3
View File
@@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=types.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
+1
View File
@@ -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": [