Include build output for git installs
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
node_modules/
|
||||
dist/
|
||||
data/
|
||||
*.log
|
||||
.DS_Store
|
||||
|
||||
Vendored
+40
@@ -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
|
||||
Vendored
+1
@@ -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"}
|
||||
Vendored
+301
@@ -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
|
||||
Vendored
+1
File diff suppressed because one or more lines are too long
+20
@@ -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
@@ -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"}
|
||||
Vendored
+129
@@ -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
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"FileCookieStore.js","sourceRoot":"","sources":["../../src/cookie-store/FileCookieStore.ts"],"names":[],"mappings":"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"}
|
||||
+9
@@ -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
|
||||
@@ -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
@@ -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
@@ -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"}
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
import type { AgrarmonitorConnectorOptions, AgrarmonitorConnectorResult } from './types';
|
||||
export declare function createAgrarmonitorClient(options: AgrarmonitorConnectorOptions): Promise<AgrarmonitorConnectorResult>;
|
||||
//# sourceMappingURL=createAgrarmonitorClient.d.ts.map
|
||||
+1
@@ -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"}
|
||||
Vendored
+10
@@ -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
|
||||
Vendored
+1
@@ -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
@@ -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
@@ -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"}
|
||||
Vendored
+69
@@ -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
@@ -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"}
|
||||
Vendored
+7
@@ -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
|
||||
Vendored
+1
@@ -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"}
|
||||
Vendored
+14
@@ -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
|
||||
Vendored
+1
@@ -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"}
|
||||
Vendored
+87
@@ -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
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
//# sourceMappingURL=types.js.map
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
||||
@@ -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": [
|
||||
|
||||
Reference in New Issue
Block a user