mirror of
https://github.com/Second-Hand-Friends/kleinanzeigen-bot.git
synced 2026-03-12 02:31:45 +01:00
## ℹ️ Description - Link to the related issue(s): N/A - Add a CI guard that fails when generated artifacts are out of sync, motivated by preventing missing schema updates and keeping generated reference files current. - Add a committed `docs/config.default.yaml` as a user-facing default configuration reference. ## 📋 Changes Summary - Add `scripts/check_generated_artifacts.py` to regenerate schema artifacts and compare tracked outputs (`schemas/*.json` and `docs/config.default.yaml`) against generated content. - Run the new artifact consistency check in CI via `.github/workflows/build.yml`. - Add `pdm run generate-config` and `pdm run generate-artifacts` tasks, with a cross-platform-safe delete in `generate-config`. - Add generated `docs/config.default.yaml` and document it in `docs/CONFIGURATION.md`. - Update `schemas/config.schema.json` with the `diagnostics.timing_collection` property generated from the model. ### ⚙️ Type of Change Select the type(s) of change(s) included in this pull request: - [ ] 🐞 Bug fix (non-breaking change which fixes an issue) - [x] ✨ New feature (adds new functionality without breaking existing usage) - [ ] 💥 Breaking change (changes that might break existing user setups, scripts, or configurations) ## ✅ Checklist Before requesting a review, confirm the following: - [x] I have reviewed my changes to ensure they meet the project's standards. - [x] I have tested my changes and ensured that all tests pass (`pdm run test`). - [x] I have formatted the code (`pdm run format`). - [x] I have verified that linting passes (`pdm run lint`). - [x] I have updated documentation where necessary. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added a reference link to the default configuration snapshot for easier access to baseline settings. * **Chores** * Added a CI build-time check that validates generated schemas and the default config and alerts when regeneration is needed. * Added scripts to generate the default config and to sequence artifact generation. * Added a utility to produce standardized schema content and compare generated artifacts. * Minor tweak to schema generation success messaging. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
818 lines
24 KiB
JSON
818 lines
24 KiB
JSON
{
|
|
"$defs": {
|
|
"AdDefaults": {
|
|
"properties": {
|
|
"active": {
|
|
"default": true,
|
|
"description": "whether the ad should be published (false = skip this ad)",
|
|
"title": "Active",
|
|
"type": "boolean"
|
|
},
|
|
"type": {
|
|
"default": "OFFER",
|
|
"description": "type of the ad listing",
|
|
"enum": [
|
|
"OFFER",
|
|
"WANTED"
|
|
],
|
|
"examples": [
|
|
"OFFER",
|
|
"WANTED"
|
|
],
|
|
"title": "Type",
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/$defs/DescriptionAffixes"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "DEPRECATED: Use description_prefix/description_suffix instead"
|
|
},
|
|
"description_prefix": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": "",
|
|
"description": "text to prepend to each ad (optional)",
|
|
"title": "Description Prefix"
|
|
},
|
|
"description_suffix": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": "",
|
|
"description": "text to append to each ad (optional)",
|
|
"title": "Description Suffix"
|
|
},
|
|
"price_type": {
|
|
"default": "NEGOTIABLE",
|
|
"description": "pricing strategy for the listing",
|
|
"enum": [
|
|
"FIXED",
|
|
"NEGOTIABLE",
|
|
"GIVE_AWAY",
|
|
"NOT_APPLICABLE"
|
|
],
|
|
"examples": [
|
|
"FIXED",
|
|
"NEGOTIABLE",
|
|
"GIVE_AWAY",
|
|
"NOT_APPLICABLE"
|
|
],
|
|
"title": "Price Type",
|
|
"type": "string"
|
|
},
|
|
"auto_price_reduction": {
|
|
"$ref": "#/$defs/AutoPriceReductionConfig",
|
|
"description": "automatic price reduction configuration for reposted ads"
|
|
},
|
|
"shipping_type": {
|
|
"default": "SHIPPING",
|
|
"description": "shipping method for the item",
|
|
"enum": [
|
|
"PICKUP",
|
|
"SHIPPING",
|
|
"NOT_APPLICABLE"
|
|
],
|
|
"examples": [
|
|
"PICKUP",
|
|
"SHIPPING",
|
|
"NOT_APPLICABLE"
|
|
],
|
|
"title": "Shipping Type",
|
|
"type": "string"
|
|
},
|
|
"sell_directly": {
|
|
"default": false,
|
|
"description": "enable direct purchase option (only works when shipping_type is SHIPPING)",
|
|
"title": "Sell Directly",
|
|
"type": "boolean"
|
|
},
|
|
"images": {
|
|
"anyOf": [
|
|
{
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"description": "default image glob patterns (optional). Leave empty for no default images",
|
|
"examples": [
|
|
"\"images/*.jpg\"",
|
|
"\"photos/*.{png,jpg}\""
|
|
],
|
|
"title": "Images"
|
|
},
|
|
"contact": {
|
|
"$ref": "#/$defs/ContactDefaults",
|
|
"description": "default contact information for ads"
|
|
},
|
|
"republication_interval": {
|
|
"default": 7,
|
|
"description": "number of days between automatic republication of ads",
|
|
"title": "Republication Interval",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"title": "AdDefaults",
|
|
"type": "object"
|
|
},
|
|
"AutoPriceReductionConfig": {
|
|
"properties": {
|
|
"enabled": {
|
|
"default": false,
|
|
"description": "automatically lower the price of reposted ads",
|
|
"title": "Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"strategy": {
|
|
"anyOf": [
|
|
{
|
|
"enum": [
|
|
"FIXED",
|
|
"PERCENTAGE"
|
|
],
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "reduction strategy (required when enabled: true). PERCENTAGE = % of price, FIXED = absolute amount",
|
|
"examples": [
|
|
"PERCENTAGE",
|
|
"FIXED"
|
|
],
|
|
"title": "Strategy"
|
|
},
|
|
"amount": {
|
|
"anyOf": [
|
|
{
|
|
"exclusiveMinimum": 0,
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "reduction amount (required when enabled: true). For PERCENTAGE: use percent value (e.g., 10 = 10%%). For FIXED: use currency amount",
|
|
"examples": [
|
|
10.0,
|
|
5.0,
|
|
20.0
|
|
],
|
|
"title": "Amount"
|
|
},
|
|
"min_price": {
|
|
"anyOf": [
|
|
{
|
|
"minimum": 0,
|
|
"type": "number"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "minimum price floor (required when enabled: true). Use 0 for no minimum",
|
|
"examples": [
|
|
1.0,
|
|
5.0,
|
|
10.0
|
|
],
|
|
"title": "Min Price"
|
|
},
|
|
"delay_reposts": {
|
|
"default": 0,
|
|
"description": "number of reposts to wait before applying the first automatic price reduction",
|
|
"minimum": 0,
|
|
"title": "Delay Reposts",
|
|
"type": "integer"
|
|
},
|
|
"delay_days": {
|
|
"default": 0,
|
|
"description": "number of days to wait after publication before applying automatic price reductions",
|
|
"minimum": 0,
|
|
"title": "Delay Days",
|
|
"type": "integer"
|
|
}
|
|
},
|
|
"title": "AutoPriceReductionConfig",
|
|
"type": "object"
|
|
},
|
|
"BrowserConfig": {
|
|
"properties": {
|
|
"arguments": {
|
|
"description": "additional Chromium command line switches (optional). Leave as [] for default behavior. See https://peter.sh/experiments/chromium-command-line-switches/ Common: --headless (no GUI), --disable-dev-shm-usage (Docker fix), --user-data-dir=/path",
|
|
"examples": [
|
|
"\"--headless\"",
|
|
"\"--disable-dev-shm-usage\"",
|
|
"\"--user-data-dir=/path/to/profile\""
|
|
],
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Arguments",
|
|
"type": "array"
|
|
},
|
|
"binary_location": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": "",
|
|
"description": "path to custom browser executable (optional). Leave empty to use system default",
|
|
"title": "Binary Location"
|
|
},
|
|
"extensions": {
|
|
"description": "Chrome extensions to load (optional). Leave as [] for no extensions. Add .crx file paths relative to config file",
|
|
"examples": [
|
|
"\"extensions/adblock.crx\"",
|
|
"\"/absolute/path/to/extension.crx\""
|
|
],
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Extensions",
|
|
"type": "array"
|
|
},
|
|
"use_private_window": {
|
|
"default": true,
|
|
"description": "open browser in private/incognito mode (recommended to avoid cookie conflicts)",
|
|
"title": "Use Private Window",
|
|
"type": "boolean"
|
|
},
|
|
"user_data_dir": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": "",
|
|
"description": "custom browser profile directory (optional). Leave empty for auto-configured default",
|
|
"title": "User Data Dir"
|
|
},
|
|
"profile_name": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": "",
|
|
"description": "browser profile name (optional). Leave empty for default profile",
|
|
"examples": [
|
|
"\"Profile 1\""
|
|
],
|
|
"title": "Profile Name"
|
|
}
|
|
},
|
|
"title": "BrowserConfig",
|
|
"type": "object"
|
|
},
|
|
"CaptchaConfig": {
|
|
"properties": {
|
|
"auto_restart": {
|
|
"default": false,
|
|
"description": "if true, abort when captcha is detected and auto-retry after restart_delay (if false, wait for manual solving)",
|
|
"title": "Auto Restart",
|
|
"type": "boolean"
|
|
},
|
|
"restart_delay": {
|
|
"default": "6h",
|
|
"description": "duration to wait before retrying after captcha detection (e.g., 1h30m, 6h, 30m)",
|
|
"examples": [
|
|
"6h",
|
|
"1h30m",
|
|
"30m"
|
|
],
|
|
"title": "Restart Delay",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"title": "CaptchaConfig",
|
|
"type": "object"
|
|
},
|
|
"CaptureOnConfig": {
|
|
"description": "Configuration for which operations should trigger diagnostics capture.",
|
|
"properties": {
|
|
"login_detection": {
|
|
"default": false,
|
|
"description": "Capture screenshot and HTML when login state detection fails",
|
|
"title": "Login Detection",
|
|
"type": "boolean"
|
|
},
|
|
"publish": {
|
|
"default": false,
|
|
"description": "Capture screenshot, HTML, and JSON on publish failures",
|
|
"title": "Publish",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"title": "CaptureOnConfig",
|
|
"type": "object"
|
|
},
|
|
"ContactDefaults": {
|
|
"properties": {
|
|
"name": {
|
|
"default": "",
|
|
"description": "contact name displayed on the ad",
|
|
"title": "Name",
|
|
"type": "string"
|
|
},
|
|
"street": {
|
|
"default": "",
|
|
"description": "street address for the listing",
|
|
"title": "Street",
|
|
"type": "string"
|
|
},
|
|
"zipcode": {
|
|
"anyOf": [
|
|
{
|
|
"type": "integer"
|
|
},
|
|
{
|
|
"type": "string"
|
|
}
|
|
],
|
|
"default": "",
|
|
"description": "postal/ZIP code for the listing location",
|
|
"title": "Zipcode"
|
|
},
|
|
"location": {
|
|
"default": "",
|
|
"description": "city or locality of the listing (can include multiple districts)",
|
|
"examples": [
|
|
"Sample Town - District One"
|
|
],
|
|
"title": "Location",
|
|
"type": "string"
|
|
},
|
|
"phone": {
|
|
"default": "",
|
|
"description": "phone number for contact - only available for commercial accounts, personal accounts no longer support this",
|
|
"examples": [
|
|
"\"01234 567890\""
|
|
],
|
|
"title": "Phone",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"title": "ContactDefaults",
|
|
"type": "object"
|
|
},
|
|
"DescriptionAffixes": {
|
|
"deprecated": true,
|
|
"properties": {
|
|
"prefix": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "text to prepend to the ad description (deprecated, use description_prefix)",
|
|
"title": "Prefix"
|
|
},
|
|
"suffix": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "text to append to the ad description (deprecated, use description_suffix)",
|
|
"title": "Suffix"
|
|
}
|
|
},
|
|
"title": "DescriptionAffixes",
|
|
"type": "object"
|
|
},
|
|
"DiagnosticsConfig": {
|
|
"properties": {
|
|
"capture_on": {
|
|
"$ref": "#/$defs/CaptureOnConfig",
|
|
"description": "Enable diagnostics capture for specific operations."
|
|
},
|
|
"capture_log_copy": {
|
|
"default": false,
|
|
"description": "If true, copy the entire bot log file when diagnostics are captured (may duplicate log content).",
|
|
"title": "Capture Log Copy",
|
|
"type": "boolean"
|
|
},
|
|
"pause_on_login_detection_failure": {
|
|
"default": false,
|
|
"description": "If true, pause (interactive runs only) after capturing login detection diagnostics so that user can inspect the browser. Requires capture_on.login_detection to be enabled.",
|
|
"title": "Pause On Login Detection Failure",
|
|
"type": "boolean"
|
|
},
|
|
"output_dir": {
|
|
"anyOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": null,
|
|
"description": "Optional output directory for diagnostics artifacts. If omitted, a safe default is used based on installation mode.",
|
|
"title": "Output Dir"
|
|
},
|
|
"timing_collection": {
|
|
"default": true,
|
|
"description": "If true, collect local timeout timing data and write it to diagnostics JSON for troubleshooting and tuning.",
|
|
"title": "Timing Collection",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"title": "DiagnosticsConfig",
|
|
"type": "object"
|
|
},
|
|
"DownloadConfig": {
|
|
"properties": {
|
|
"include_all_matching_shipping_options": {
|
|
"default": false,
|
|
"description": "if true, all shipping options matching the package size will be included",
|
|
"title": "Include All Matching Shipping Options",
|
|
"type": "boolean"
|
|
},
|
|
"excluded_shipping_options": {
|
|
"description": "shipping options to exclude (optional). Leave as [] to include all. Add items like 'DHL_2' to exclude specific carriers",
|
|
"examples": [
|
|
"\"DHL_2\"",
|
|
"\"DHL_5\"",
|
|
"\"Hermes\""
|
|
],
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"title": "Excluded Shipping Options",
|
|
"type": "array"
|
|
},
|
|
"folder_name_max_length": {
|
|
"default": 100,
|
|
"description": "maximum length for folder names when downloading ads (default: 100)",
|
|
"maximum": 255,
|
|
"minimum": 10,
|
|
"title": "Folder Name Max Length",
|
|
"type": "integer"
|
|
},
|
|
"rename_existing_folders": {
|
|
"default": false,
|
|
"description": "if true, rename existing folders without titles to include titles (default: false)",
|
|
"title": "Rename Existing Folders",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"title": "DownloadConfig",
|
|
"type": "object"
|
|
},
|
|
"LoginConfig": {
|
|
"properties": {
|
|
"username": {
|
|
"description": "kleinanzeigen.de login email or username",
|
|
"minLength": 1,
|
|
"title": "Username",
|
|
"type": "string"
|
|
},
|
|
"password": {
|
|
"description": "kleinanzeigen.de login password",
|
|
"minLength": 1,
|
|
"title": "Password",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"username",
|
|
"password"
|
|
],
|
|
"title": "LoginConfig",
|
|
"type": "object"
|
|
},
|
|
"PublishingConfig": {
|
|
"properties": {
|
|
"delete_old_ads": {
|
|
"anyOf": [
|
|
{
|
|
"enum": [
|
|
"BEFORE_PUBLISH",
|
|
"AFTER_PUBLISH",
|
|
"NEVER"
|
|
],
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"default": "AFTER_PUBLISH",
|
|
"description": "when to delete old versions of republished ads",
|
|
"examples": [
|
|
"BEFORE_PUBLISH",
|
|
"AFTER_PUBLISH",
|
|
"NEVER"
|
|
],
|
|
"title": "Delete Old Ads"
|
|
},
|
|
"delete_old_ads_by_title": {
|
|
"default": true,
|
|
"description": "match old ads by title when deleting (only works with BEFORE_PUBLISH)",
|
|
"title": "Delete Old Ads By Title",
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"title": "PublishingConfig",
|
|
"type": "object"
|
|
},
|
|
"TimeoutConfig": {
|
|
"properties": {
|
|
"multiplier": {
|
|
"default": 1.0,
|
|
"description": "Global multiplier applied to all timeout values.",
|
|
"minimum": 0.1,
|
|
"title": "Multiplier",
|
|
"type": "number"
|
|
},
|
|
"default": {
|
|
"type": "number",
|
|
"minimum": 0.0,
|
|
"default": 5.0,
|
|
"description": "Baseline timeout for DOM interactions.",
|
|
"title": "Default"
|
|
},
|
|
"page_load": {
|
|
"default": 15.0,
|
|
"description": "Page load timeout for web_open.",
|
|
"minimum": 1.0,
|
|
"title": "Page Load",
|
|
"type": "number"
|
|
},
|
|
"captcha_detection": {
|
|
"default": 2.0,
|
|
"description": "Timeout for captcha iframe detection.",
|
|
"minimum": 0.1,
|
|
"title": "Captcha Detection",
|
|
"type": "number"
|
|
},
|
|
"sms_verification": {
|
|
"default": 4.0,
|
|
"description": "Timeout for SMS verification prompts.",
|
|
"minimum": 0.1,
|
|
"title": "Sms Verification",
|
|
"type": "number"
|
|
},
|
|
"email_verification": {
|
|
"default": 4.0,
|
|
"description": "Timeout for email verification prompts.",
|
|
"minimum": 0.1,
|
|
"title": "Email Verification",
|
|
"type": "number"
|
|
},
|
|
"gdpr_prompt": {
|
|
"default": 10.0,
|
|
"description": "Timeout for GDPR/consent dialogs.",
|
|
"minimum": 1.0,
|
|
"title": "Gdpr Prompt",
|
|
"type": "number"
|
|
},
|
|
"login_detection": {
|
|
"default": 10.0,
|
|
"description": "Timeout for detecting existing login session via DOM elements.",
|
|
"minimum": 1.0,
|
|
"title": "Login Detection",
|
|
"type": "number"
|
|
},
|
|
"publishing_result": {
|
|
"default": 300.0,
|
|
"description": "Timeout for publishing result checks.",
|
|
"minimum": 10.0,
|
|
"title": "Publishing Result",
|
|
"type": "number"
|
|
},
|
|
"publishing_confirmation": {
|
|
"default": 20.0,
|
|
"description": "Timeout for publish confirmation redirect.",
|
|
"minimum": 1.0,
|
|
"title": "Publishing Confirmation",
|
|
"type": "number"
|
|
},
|
|
"image_upload": {
|
|
"default": 30.0,
|
|
"description": "Timeout for image upload and server-side processing.",
|
|
"minimum": 5.0,
|
|
"title": "Image Upload",
|
|
"type": "number"
|
|
},
|
|
"pagination_initial": {
|
|
"default": 10.0,
|
|
"description": "Timeout for initial pagination lookup.",
|
|
"minimum": 1.0,
|
|
"title": "Pagination Initial",
|
|
"type": "number"
|
|
},
|
|
"pagination_follow_up": {
|
|
"default": 5.0,
|
|
"description": "Timeout for subsequent pagination navigation.",
|
|
"minimum": 1.0,
|
|
"title": "Pagination Follow Up",
|
|
"type": "number"
|
|
},
|
|
"quick_dom": {
|
|
"default": 2.0,
|
|
"description": "Generic short timeout for transient UI.",
|
|
"minimum": 0.1,
|
|
"title": "Quick Dom",
|
|
"type": "number"
|
|
},
|
|
"update_check": {
|
|
"default": 10.0,
|
|
"description": "Timeout for GitHub update checks.",
|
|
"minimum": 1.0,
|
|
"title": "Update Check",
|
|
"type": "number"
|
|
},
|
|
"chrome_remote_probe": {
|
|
"default": 2.0,
|
|
"description": "Timeout for local remote-debugging probes.",
|
|
"minimum": 0.1,
|
|
"title": "Chrome Remote Probe",
|
|
"type": "number"
|
|
},
|
|
"chrome_remote_debugging": {
|
|
"default": 5.0,
|
|
"description": "Timeout for remote debugging API calls.",
|
|
"minimum": 1.0,
|
|
"title": "Chrome Remote Debugging",
|
|
"type": "number"
|
|
},
|
|
"chrome_binary_detection": {
|
|
"default": 10.0,
|
|
"description": "Timeout for chrome --version subprocesses.",
|
|
"minimum": 1.0,
|
|
"title": "Chrome Binary Detection",
|
|
"type": "number"
|
|
},
|
|
"retry_enabled": {
|
|
"default": true,
|
|
"description": "Enable built-in retry/backoff for DOM operations.",
|
|
"title": "Retry Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"retry_max_attempts": {
|
|
"default": 2,
|
|
"description": "Max retry attempts when retry is enabled.",
|
|
"minimum": 1,
|
|
"title": "Retry Max Attempts",
|
|
"type": "integer"
|
|
},
|
|
"retry_backoff_factor": {
|
|
"default": 1.5,
|
|
"description": "Exponential factor applied per retry attempt.",
|
|
"minimum": 1.0,
|
|
"title": "Retry Backoff Factor",
|
|
"type": "number"
|
|
}
|
|
},
|
|
"title": "TimeoutConfig",
|
|
"type": "object"
|
|
},
|
|
"UpdateCheckConfig": {
|
|
"properties": {
|
|
"enabled": {
|
|
"default": true,
|
|
"description": "whether to check for updates on startup",
|
|
"title": "Enabled",
|
|
"type": "boolean"
|
|
},
|
|
"channel": {
|
|
"default": "latest",
|
|
"description": "which release channel to check (latest = stable, preview = prereleases)",
|
|
"enum": [
|
|
"latest",
|
|
"preview"
|
|
],
|
|
"examples": [
|
|
"latest",
|
|
"preview"
|
|
],
|
|
"title": "Channel",
|
|
"type": "string"
|
|
},
|
|
"interval": {
|
|
"default": "7d",
|
|
"description": "how often to check for updates (e.g., 7d, 1d). If invalid, too short (<1d), or too long (>30d), uses defaults: 1d for 'preview' channel, 7d for 'latest' channel",
|
|
"examples": [
|
|
"7d",
|
|
"1d",
|
|
"14d"
|
|
],
|
|
"title": "Interval",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"title": "UpdateCheckConfig",
|
|
"type": "object"
|
|
}
|
|
},
|
|
"properties": {
|
|
"ad_files": {
|
|
"default": [
|
|
"./**/ad_*.{json,yml,yaml}"
|
|
],
|
|
"description": "\nglob (wildcard) patterns to select ad configuration files\nif relative paths are specified, then they are relative to this configuration file\n",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"minItems": 1,
|
|
"title": "Ad Files",
|
|
"type": "array"
|
|
},
|
|
"ad_defaults": {
|
|
"$ref": "#/$defs/AdDefaults",
|
|
"description": "Default values for ads, can be overwritten in each ad configuration file"
|
|
},
|
|
"categories": {
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
},
|
|
"description": "additional name to category ID mappings (optional). Leave as {} if not needed. See full list at: https://github.com/Second-Hand-Friends/kleinanzeigen-bot/blob/main/src/kleinanzeigen_bot/resources/categories.yaml To add: use format 'Category > Subcategory': 'ID'",
|
|
"examples": [
|
|
"\"Elektronik > Notebooks\": \"161/278\"",
|
|
"\"Jobs > Praktika\": \"102/125\""
|
|
],
|
|
"title": "Categories",
|
|
"type": "object"
|
|
},
|
|
"download": {
|
|
"$ref": "#/$defs/DownloadConfig"
|
|
},
|
|
"publishing": {
|
|
"$ref": "#/$defs/PublishingConfig"
|
|
},
|
|
"browser": {
|
|
"$ref": "#/$defs/BrowserConfig",
|
|
"description": "Browser configuration"
|
|
},
|
|
"login": {
|
|
"$ref": "#/$defs/LoginConfig",
|
|
"description": "Login credentials"
|
|
},
|
|
"captcha": {
|
|
"$ref": "#/$defs/CaptchaConfig"
|
|
},
|
|
"update_check": {
|
|
"$ref": "#/$defs/UpdateCheckConfig",
|
|
"description": "Update check configuration"
|
|
},
|
|
"timeouts": {
|
|
"$ref": "#/$defs/TimeoutConfig",
|
|
"description": "Centralized timeout configuration."
|
|
},
|
|
"diagnostics": {
|
|
"$ref": "#/$defs/DiagnosticsConfig",
|
|
"description": "diagnostics capture configuration for troubleshooting"
|
|
}
|
|
},
|
|
"title": "Config",
|
|
"type": "object",
|
|
"description": "Auto-generated JSON Schema for Config"
|
|
}
|