The
libs/demeter/area: twenty-seven Nx libraries that make up the domain logic of Demeter, the home-gardening platform — from the Drizzle/Zod data core and a typed REST client up through plant knowledge, garden planning, growing-system math, post-harvest preservation, social features, and a local-first garden-intelligence layer.
What this area is#
Every library here is a scope:demeter, layer:domain, type:lib Nx project
(see any libs/demeter/*/project.json) published under the @demeter/* npm
scope — 27 of them, all real implementations, none empty scaffolds. Together
they are the reusable brains of a consumer gardening product: the apps that ship
them live outside this directory (apps/demeter/api, apps/demeter/web,
apps/demeter/mobile, plus a clients/demeter-python SDK). The libraries hold
the domain algorithms and data; the apps hold the wiring, persistence, UI, and
native device access.
The area has a deliberate dependency floor. @demeter/core owns the data
contracts — Zod validation schemas (src/schemas.ts), a Drizzle ORM PostgreSQL
schema of ~29 demeter_* tables (src/db-schema.ts), and seed data
(src/db-seed.ts) — and is the one library that pulls runtime dependencies
(drizzle-orm, zod). Almost everything else is intentionally pure and
dependency-free: the docstrings on @demeter/biodynamic,
@demeter/soil-test, @demeter/light-meter, @demeter/water-analytics,
@demeter/pollinators, @demeter/i18n, @demeter/monetization,
@demeter/household, @demeter/data-portability, @demeter/accessibility,
@demeter/gamification, and @demeter/webhooks all describe themselves that
way, and their package.json files declare no runtime deps. The few that touch
@demeter/core (e.g. @demeter/sensors imports SensorType) do so only for
its types.
A consistent architectural seam runs through the area: domain math and
decision logic live in the library; I/O lives in the app. The libraries that
talk to the outside world expose typed interfaces and pure builders/parsers
rather than performing the network or hardware calls themselves.
@demeter/sensors defines a ProtocolAdapter interface for
MQTT/Zigbee/BLE/LoRa but leaves the transport to the host; @demeter/weather
and @demeter/intelligence model providers (weather APIs, PlantNet, Google
Vision, TFLite, LLMs) as URL builders + response parsers + config types so the
actual fetch is injected by the caller. The one library that does own the wire
is @demeter/api-client, which uses an injectable fetch to implement the two
real Demeter auth modes. This is the same "validate/compute here, fetch there"
boundary the rest of Oshun favours, applied per gardening concern.
The libraries cluster by gardening workflow: a knowledge tier (plants,
biodynamic, pollinators); planning and scheduling (planner, tasks);
growing systems and their telemetry (hydroponics, sensors, automation,
light-meter); agronomy and environment (soil-test, water-analytics,
weather); the harvest-and-after tier (inventory, preservation, journal,
analytics); a local-first AI tier (intelligence); social and engagement
(community, household, gamification); and cross-cutting platform concerns
(accessibility, i18n, monetization, data-portability, webhooks,
api-client, core).
How it fits the wider system#
The consumers are the Demeter applications. apps/demeter/api composes the
domain logic over @demeter/core's Drizzle schema and exposes the REST surface;
apps/demeter/web and apps/demeter/mobile consume the same libraries plus
@demeter/api-client to talk to that API; clients/demeter-python is a
separate SDK over the same wire. Because the heavy logic is pure and lives in
libraries, it runs identically on the server (Node) and, where useful, on the
client/offline — which is why @demeter/intelligence is built around a local
knowledge base and feature-matching, and @demeter/biodynamic /
@demeter/light-meter derive everything from a date or a raw sensor read.
The boundaries are crisp. These are product-domain libraries, not platform
contracts: they depend downward on @demeter/core (and on nothing else in the
Oshun graph beyond it), and the app layer depends on them. Anything that needs
credentials, hardware, binary decoding, or live third-party data — store
receipts, EXIF bytes, MQTT sockets, weather/vision/LLM HTTP — is explicitly left
to the app or native layer, with the library providing the typed seam and the
math on either side of it. Walk the "used by" edges on any node below to see
exactly which apps and siblings consume it.
Entity catalog (27)#
The 27 tracked Nx projects in demeter, each a code-linked entity node — package, type, source path, declared targets, and its internal dependency graph (depends-on / used-by, resolved from the package manifests, §6/§8), read from the project graph. Grouped by architectural layer; walk the dependency links to travel the system. 27 of these carry an authored deep-dive (what / why / how it fits); the rest are generated scaffolds awaiting one.
domain (27)#
Color-accessibility utilities (libs/demeter/accessibility/src), pure and
dependency-free. color.ts provides WCAG contrast math (sRGB↔linear, relative
luminance, contrastRatio, meetsContrast) for high-contrast modes; cvd.ts
implements Machado-2009 color-vision-deficiency simulation matrices
(CVD_MATRICES, simulateCvd) and perceptual distance/distinguishability;
palette.ts ships the Okabe–Ito colorblind-safe palette and CVD-safety
verification. The UI modes themselves (themes, large text, haptics) are app/CSS
layers that consume this color logic.
hexToRgb11rgbToHex11srgbToLinear11linearToSrgb11relativeLuminance11contrastRatio11meetsContrast11Rgb11WcagLevel11CVD_MATRICES23simulateCvd23colorDistance23rceivedDistance23distinguishableUnderCvd23 +5 moreCross-cutting gardening analytics (libs/demeter/analytics/src, ~9k LOC).
Modules compute yield analytics (yield-analytics.ts), cost analysis
(cost-analysis.ts), resource optimization (resource-analytics.ts),
environmental impact (environmental-impact.ts), time management
(time-analytics.ts), success metrics (success-metrics.ts), and a composed
dashboard (dashboard.ts). It turns the records other libraries accumulate
(harvests, water, tasks, costs) into reportable metrics.
A small, dependency-free, typed client for the Demeter REST API
(libs/demeter/api-client/src/client.ts). DemeterClient uses an injectable
fetch (fetchImpl) and implements the two real auth modes — Bearer JWT with
transparent one-shot refresh-token rotation (on a 401 it calls
POST /<v>/auth/refresh once, stores the rotated pair, fires
onTokensRefreshed, retries, and throws on a second 401) and machine API keys —
surfacing non-2xx responses as a typed DemeterApiError. It exposes typed
resource namespaces (gardens, readings) over the types.ts models and is what
the web/mobile apps use to reach apps/demeter/api.
A rule-based garden automation engine (libs/demeter/automation/src, ~7k LOC).
Modules implement the rules engine (rules.ts), smart irrigation control
(irrigation.ts), greenhouse climate-control (climate-control.ts), an
alerts system (alerts.ts), scenes for grouped device states
(scenes.ts), and execution history (history.ts). It is the decision
layer that turns sensor readings and conditions into automation actions, paired
with @demeter/sensors for input and the app layer for actuation.
A pure, dependency-free biodynamic & lunar gardening calendar
(libs/demeter/biodynamic/src). It implements faithful Meeus solar/lunar
astronomy (astronomy.ts: julianDay, sunEclipticLongitude,
moonEclipticLongitude, lunarPhase), the Maria Thun Root/Leaf/Flower/Fruit
day-type scheme from the Moon's sidereal constellation including an ayanamsa
correction and ascending/descending-Moon logic (biodynamic.ts), the
Steiner/Thun PREPARATIONS (preparations.ts), and activity scheduling with an
explicit scientific⇄biodynamic mode toggle (scheduling.ts). Everything derives
from a date, so results are reproducible.
julianDay11julianCenturies11norm36011sunEclipticLongitude11moonEclipticLongitude11lunarPhase11LunarPhase11PhaseName11ZODIAC22SIGN_ELEMENT22ELEMENT_DAY_TYPE22ayanamsa22moonSiderealLongitude22signForLongitude22 +20 moreA social gardening platform (libs/demeter/community/src, ~12k LOC). It is a
broad in-process reference implementation backed by module-level Map stores
(e.g. profileStore/badgeStore in profiles.ts, with resetProfileStores
and siblings for test isolation), spanning gardener profiles with badges/
milestones and haversine-based nearby search (profiles.ts), a seed/plant
exchange marketplace with reputation and wishlists (exchange.ts), groups and
community gardens with plots/events/polls (groups.ts), an expert network with
Q&A, bookings, workshops, and articles (experts.ts), content sharing and
moderation (content.ts), and a local-resources business directory
(local-resources.ts). The persistent store is the app's concern; this owns the
domain rules.
BADGE_DATABASE38MILESTONE_DATABASE38resetProfileStores38validateProfile38createProfile38getProfile38updateProfile38deleteProfile38listProfiles38createPhotoMeta38setAvatar38setCoverPhoto38getBadge38getBadgesByCategory38 +255 moreThe data foundation of the platform (libs/demeter/core/src). It exports three
things from src/index.ts: Zod domain/validation schemas (schemas.ts), a
Drizzle ORM PostgreSQL schema (db-schema.ts) defining ~29 demeter_*
tables — gardens, plants, plantings, harvests, tasks, observations, sensors and
readings, alerts, users, auth (refresh tokens, magic links, API keys, sessions),
membership, and the community/social tables — with pgEnum types and Drizzle
relations, plus seed data (db-seed.ts). It is the only library in the
area with runtime dependencies (drizzle-orm, zod) and the type/source-of-
truth that the API service and several sibling libraries build on.
Import, export, and an open garden-profile format
(libs/demeter/data-portability/src), pure and dependency-free. format.ts
defines a versioned PORTABLE_FORMAT with serialize/parse; import.ts provides
a CSV parser and field-mapped importers for Gardenize/Planta/Garden Planner and
nursery lists (FIELD_MAPS); photos.ts does EXIF-based photo dating;
lifecycle.ts assembles GDPR full-exports, handles account transfer, and runs a
confirmation-gated deletion flow. The import-wizard UI and binary EXIF
extraction are app/native layers over this logic.
PORTABLE_FORMAT11PORTABLE_FORMAT_VERSION11serializeProfile11arseProfile11PortableGarden11PortableBed11PortablePlanting11PortableHarvest11PortableProfile11arseCsv23csvToObjects23importWithFieldMap23importFromCsv23importFromGardenize23 +17 moreGardening progression, achievements, and rewards
(libs/demeter/gamification/src), pure and dependency-free. It implements
XP/leveling with rank titles (leveling.ts), daily-care streaks (streaks.ts),
a BADGES achievement system (badges.ts), skill trees (skill-trees.ts),
seasonal challenges and quests (challenges.ts), a virtual-currency ledger with
InsufficientFundsError (currency.ts), tiered leaderboards
(leaderboard.ts), share payloads (sharing.ts), and a composed progress
dashboard (stats.ts). Every function derives from a player's real
stats/activity, so results are reproducible.
XP_AWARDS14MAX_LEVEL14xpForActivity14cumulativeXpForLevel14levelForXp14levelProgress14LevelProgress14RANKS14rankForLevel14nextRank14Rank14computeStreak28streakBonusXp28StreakResult28 +51 moreMulti-user / family logic for a shared garden (libs/demeter/household/src),
pure and dependency-free. It implements role-based permissions over
ROLE_PERMISSIONS (owner/caretaker/viewer/kid) with can/assertCan
(roles.ts), shared task assignment with role validation (assignments.ts),
vacation-mode caretaker handoff (vacation.ts), a merged activity feed
(feed.ts), per-member contribution stats (contributions.ts), and preference-
aware notification routing (notifications.ts). It mirrors the roles on
demeter_garden_members from @demeter/core.
ROLE_PERMISSIONS11can11assertCan11allowedActions11isSimplifiedRole11PermissionError11Role11Action11defaultPrefs22isOnVacation22HouseholdMember22NotificationPrefs22assignTask29reassignTask29 +18 moreA comprehensive advanced-growing-systems library
(libs/demeter/hydroponics/src, ~11k LOC) for hydroponic, aquaponic, indoor,
microgreen, and mushroom growing. Each module is a real domain calculator plus
curated data: systems.ts (SYSTEM_TEMPLATES, power/cost estimates,
NFT/DWC/EbbFlow/Drip/Aeroponic/Kratky configs), nutrients.ts (EC/TDS
conversion, pH adjustment, nutrient-lockout and deficiency diagnosis, mixing
recipes), reservoir.ts (dosing commands, evaporation and water-usage math,
anomaly detection), aquaponics.ts (fish/ plant ratios, feed-conversion,
nitrogen-cycle assessment), indoor-growing.ts (VPD/DLI/PPFD math, CO₂
supplementation, electricity cost), microgreens.ts, and mushrooms.ts
(biological-efficiency, substrate recipes, contamination ID).
SYSTEM_TEMPLATES35SETUP_GUIDES35getSystemTemplate35getTemplatesByType35getTemplatesByDifficulty35getTemplatesByBudget35getPassiveTemplates35getSetupGuide35createSystemFromTemplate35calculateSetupCost35getMaintenanceDue35calculateUtilization35validateSystemConfig35getRecommendedCrops35 +123 moreInternationalization and localization (libs/demeter/i18n/src), pure and
dependency-free. It provides a message-catalog translator with {var}
interpolation, Intl plural selection, and locale fallback (core.ts,
catalogs.ts) with real en/es/fr/de/pt/ja/zh translations; Intl-based number/
date formatting and metric⇄imperial unit conversion/formatting (format.ts);
RTL detection and locale negotiation (locale.ts); and region→climate-zone/
units/locale profiles (regions.ts), which tie localization to gardening
context.
SUPPORTED_LOCALES11DEFAULT_LOCALE11CATALOGS11Locale11Catalog11Message11PluralMessage11createI18n21interpolate21fallbackChain21isSupportedLocale21I18n21Vars21formatNumber30 +25 moreThe local-first garden AI/ML layer (libs/demeter/intelligence/src, ~22k LOC,
the largest in the area). It pairs real local algorithms with typed seams
for remote models: plant identification implements a local text-feature
matcher (identifyFromDescription over PLANT_PROFILES) alongside PlantNet/
Google Vision/TFLite endpoint builders and response parsers
(plant-identification.ts); the NLP interface answers from a 50+-entry local
KNOWLEDGE_BASE via intent detection and token similarity, with an LLMConfig
seam (provider: openai | anthropic | local) and buildLLMPrompt/
buildLLMRequest/parseLLMResponse for an optional hosted model
(nlp-interface.ts). It also covers disease/pest detection, growth prediction,
recommendations, anomaly detection, and a model-registry/A-B-test/versioning
layer (model-management.ts). The library performs no network calls itself —
remote inference is wired by the app via these seams.
Seed and supply management (libs/demeter/inventory/src). It tracks seed lots
with viability/germination estimation over a SEED_VIABILITY_TABLE
(seeds.ts), supplier catalogs, ratings, price comparison and order generation
(suppliers.ts), seed-saving batches with isolation-distance and minimum-
population math (seed-saving.ts), a live plant inventory with hardening-off
schedules and propagation tracking (plant-inventory.ts), and garden supplies/
tools with reorder, usage-rate, and maintenance logic (supplies.ts).
SEED_VIABILITY_TABLE24createSeedLot24useSeed24calculateViability24stimateGerminationRate24getExpiringSoon24calculateSeedsNeeded24generateSeedShoppingList24rackSeedCost24searchInventory24POPULAR_SUPPLIERS49addSupplier49rateSupplier49rackGerminationBySupplier49 +34 moreGarden journaling and observations (libs/demeter/journal/src). It records
observations (observations.ts), manages photos (photos.ts), tracks growth
(growth-tracking.ts), logs harvests (harvest-log.ts), provides entry search
(search.ts), and generates insights (insights.ts). It is the longitudinal-
record layer; its data feeds analytics and the intelligence library.
Phone-based light measurement and horticultural-lighting math
(libs/demeter/light-meter/src), pure and dependency-free. photometry.ts
converts camera exposure → lux and lux ⇄ PPFD (per light source) and computes
DLI; logging.ts integrates PPFD time-series into daily/seasonal DLI rollups;
placement.ts recommends plant placement and compares spots against
REQUIREMENT_MIN_DLI/REQUIREMENT_MAX_DLI; sunpath.ts provides clear-sky
solar-declination/day-length/DLI references to validate measurements. The native
layer supplies raw sensor reads; every conversion lives here.
LUX_CALIBRATION_C11LUX_PER_PPFD11luxFromExposure11fdFromLux11luxFromPpfd11dli11LightSource11integratePpfd21summarizeLocation21dliByMonth21LightReading21LocationSummary21DailyDli21REQUIREMENT_MIN_DLI30 +14 moreFreemium entitlement, trials, promo codes, and family sharing
(libs/demeter/monetization/src), pure and dependency-free. tiers.ts holds
the free/Premium/Pro entitlement matrix (FEATURE_MIN_TIER, TIER_PRICING,
hasFeature, yearlySavings); trial.ts is a deterministic free-trial clock
with reminder timing; promo.ts validates promo codes and computes discounts;
subscription.ts resolves cross-device entitlement and manages family seats
with a SeatLimitError. Store/IAP receipt plumbing is the native layer; the
entitlement and pricing decisions live here.
TIER_RANK11TIER_PRICING11FEATURE_MIN_TIER11ONE_TIME_UNLOCKS11hasFeature11featuresForTier11requiredTier11arlySavings11Tier11BillingPeriod11TierPricing11Feature11OneTimeUnlock11DEFAULT_TRIAL_DAYS27 +21 moreThe garden planning and design engine (libs/demeter/planner/src), the largest
planning library. Modules cover a layout engine with an UndoRedoHistory and
grid snapping (layout.ts), plant placement including square-foot grids,
companion checks, and mature-size overlap (placement.ts), sun/shadow analysis
with sun-position/sunrise/sunset math, structure/tree shadow casting, DLI, and
light-zone heatmaps (sun-analysis.ts), crop-rotation planning with 4-year
validation and nitrogen-balance tracking over ROTATION_GROUPS (rotation.ts),
succession planting (succession.ts), a TEMPLATE_LIBRARY of garden templates
(templates.ts), and export/list generation — shopping lists, calendars, bed
labels, JSON import/export (export.ts).
UndoRedoHistory29createCanvas29addElement29removeElement29moveElement29rotateElement29resizeElement29snapToGrid29copyElement29getLayerElements29calculateTotalArea29calculateBedArea29createSquareFootGrid56assignPlantToCell56 +57 moreThe plant encyclopedia and knowledge base (libs/demeter/plants/src). Real
curated databases (VEGETABLE_DATABASE, HERB_DATABASE, FRUIT_DATABASE,
FLOWER_DATABASE in database.ts) plus domain logic across species.ts,
companion.ts (companion-planting scoring, three-sisters layout, guild
suggestions over a COMPANION_DATABASE), pests.ts (pest/disease databases and
an IPM planner), climate.ts (USDA/Köppen/AHS zone systems, growing-degree-day
and chill-hour math, hardiness checks), calendar.ts (seasonal planting/seed-
start/transplant/succession schedules and moon-phase advice), and search.ts
(faceted/fuzzy search and recommender helpers). It is the shared reference data
many planning and intelligence libraries reason over.
createPlantSpecies25getSpeciesById25searchSpeciesByName25getSpeciesByType25getSpeciesByFamily25COMPANION_DATABASE42getCompanions42getBeneficialCompanions42getDetrimentalCompanions42scoreCompanionPairing42suggestGuildPlanting42generateThreeSistersLayout42checkBedCompatibility42generateCompanionChart42 +47 moreNative-plants and pollinator-habitat logic (libs/demeter/pollinators/src).
Curated datasets (data.ts: POLLINATOR_SPECIES, NATIVE_PLANTS,
INVASIVE_BY_REGION, NATIVE_SEED_SOURCES, MONARCH_WAYSTATION_CRITERIA)
drive an ecoregion/region native-plant finder (finder.ts), a bloom-continuity
calendar and scoring (bloom.ts), a pollinator-friendliness score (score.ts),
and habitat-certification evaluation — Monarch Waystation and NWF wildlife-
habitat checks, bird-friendly scoring, and region invasive alerts
(habitat.ts). It is pure; precise lat/lon→ecoregion GIS and live invasive
feeds are explicitly left to external layers.
MONTHS12POLLINATOR_SPECIES12NATIVE_PLANTS12INVASIVE_BY_REGION12NATIVE_SEED_SOURCES12MONARCH_WAYSTATION_CRITERIA12HABITAT_ELEMENTS12Month12Ecoregion12PollinatorType12PollinatorSpecies12NativePlant12SeedSource12HabitatElement12 +18 morePost-harvest preservation (libs/demeter/preservation/src, ~11k LOC), with
food- safety data following USDA/NCHFP guidance. Modules cover harvest planning
and forecasting over a CROP_YIELD_DATABASE (harvest-planning.ts);
canning with altitude-adjusted processing times/pressures, acid-addition and
botulism- risk logic (canning.ts); freezing guides, FIFO and energy cost
(freezing.ts); dehydrating (dehydrating.ts); fermentation with
brine- salt math and pH-safety assessment (fermentation.ts); root-cellar
storage (storage.ts); and recipe integration (recipes.ts).
index.ts aliases the several modules' colliding getRecipe/scaleRecipe
exports.
CROP_YIELD_DATABASE29PRESERVATION_DURATION_HOURS29PRESERVATION_CONVERSION29getCropYield29stimateYield29createHarvestForecast29redictPeakHarvest29assessPreservationNeeds29schedulePreservationSessions29calculateContainerNeeds29generatePrepChecklist29rackAllocation29lanSurplus29generateHarvestCalendar29 +108 moreThe IoT sensor-integration library (libs/demeter/sensors/src). It provides
device-lifecycle management (devices.ts), a protocol-agnostic adapter layer
(protocols.ts) defining a ProtocolAdapter interface and typed configs for
MQTT/Zigbee/BLE/LoRa, reading collection and validation (readings.ts), time-
series analytics (timeseries.ts), calibration (calibration.ts), and
commercial-platform integrations (integrations.ts). It depends only on
@demeter/core types (e.g. SensorType); the actual radio/socket transport is
an app-layer implementation of the adapter interface, not bundled here.
Soil-test interpretation and amendment guidance (libs/demeter/soil-test/src),
pure agronomy. It classifies USDA soil texture and drainage (texture.ts),
interprets pH and NPK against NUTRIENT_RANGES with deficiency alerts
(nutrients.ts), recommends lime/sulfur and other amendments toward a
target pH (amendments.ts), suggests cover crops (cover-crops.ts), and
tracks improvement across multiple tests (history.ts). External soil-kit/lab
APIs and PDF parsing feed the SoilTestResult this library reasons over.
classifyTexture11xtureDrainage11SoilTexture11NUTRIENT_RANGES13nutrientLevels13deficiencyAlerts13classifyPh13hAdjustment13SoilTestResult13NutrientLevel13NutrientLevels13DeficiencyAlert13PhClass13PhAdjustment13 +8 moreGarden task and schedule management (libs/demeter/tasks/src). It composes
scheduling, automated task generation from garden state, smart
prioritization, iCal calendar integration (calendar-integration.ts),
notifications, and task performance analytics — each its own module
re-exported from index.ts. It turns the plans and conditions other libraries
produce into a concrete, prioritized, calendar-exportable to-do stream.
Water usage, harvesting, cost, and conservation math
(libs/demeter/water-analytics/src), pure and dependency-free. usage.ts
aggregates litres per plant/bed/garden and by source and tracks budget;
rainwater.ts computes rainwater-harvest potential (metric and imperial) and
tiered/flat water cost; conservation.ts scores drought tolerance and produces
greywater guidance and water-saving recommendations; restrictions.ts is a
municipal watering-restriction rule engine (canWaterAt). Dashboards and live
municipal data are app/integration layers over these numbers.
otalLiters11litersPerGarden11litersPerBed11litersPerPlanting11litersBySource11budgetStatus11WateringEvent11BudgetStatus11DEFAULT_RUNOFF_COEFFICIENT22rainwaterHarvestLiters22rainwaterHarvestGallons22waterCost22flatRate22RateTier22 +10 moreThe weather-integration library (libs/demeter/weather/src, ~16k LOC). It
defines a unified weather data model with multi-provider abstractions, fallback
chains, caching, and normalization (data-sources.ts), then layers analysis on
top: current-conditions interpretation, forecasting, alerts, historical data,
growing-degree-day tracking (growing-degree-days.ts), and garden-specific
weather integration (garden-weather.ts). It has no runtime dependencies — the
provider modules are typed seams and normalizers, and the actual weather-API
fetch is the app layer's responsibility.
Signed event delivery for third-party integrations
(libs/demeter/webhooks/src). signing.ts implements HMAC-SHA256 payload
signing and replay-protected verification (signPayload, verifySignature,
DEFAULT_TOLERANCE_SECONDS); events.ts defines the WEBHOOK_EVENT_TYPES
catalog and endpoint-subscription matching with wildcards
(subscriptionsForEvent); delivery.ts is a deterministic retry/backoff policy
(nextRetryDelaySeconds, shouldRetry, isRetryableStatus). The HTTP
dispatcher that actually POSTs to endpoints is the app layer; this owns the
security and routing logic.
DEFAULT_TOLERANCE_SECONDS10computeSignature10signPayload10arseSignatureHeader10verifySignature10VerifyOptions10VerifyResult10WEBHOOK_EVENT_TYPES20atternMatches20subscriptionMatches20subscriptionsForEvent20WebhookEventType20WebhookEvent20WebhookSubscription20 +7 more