{"locator":"npm:@open-mercato/webhooks","path":"@open-mercato/webhooks","npm":"@open-mercato/webhooks","github":null,"repoPath":"open-mercato/open-mercato#main/packages/webhooks","kind":"module","type":"official","enterprise":false,"title":"Webhooks","summary":"Standard Webhooks delivery of platform events: signed payloads, retries, delivery logs, test sends and inbound receive.","whenToUse":"Use when an external system must learn about changes in the app as they happen, without polling the API.","whenNotToUse":null,"category":"integrations-sync","tags":["webhooks","events","integrations"],"providers":[],"moduleIds":["webhooks"],"requires":[],"replaces":[],"slotConflicts":[],"renamedFrom":[],"supersededBy":null,"alternatives":[],"status":"active","listed":true,"featured":false,"license":{"spdx":"MIT","kind":"osi","mismatch":false},"version":{"latest":"0.9.0","preview":null,"publishedAt":"2026-10-09","integrity":"sha512-nDE/oaLzHQieWUjQQsJv2P9v1gKPYf1odfgsSOWPwD2A6hFbhd3SgcP9wxafQo7GWoxoZN7Zw0ec+rTw9C310Q==","installableFrom":"2026-10-09","gitRef":null,"recommended":{"0.9":null,"0.8":null,"next":null}},"identity":{"builtFrom":"verified","claimed":false,"source":"npm"},"compat":{"builtFor":{"range":"0.9.0","kind":"exact-pin","lines":["0.8","0.9"],"ranges":{"0.9":"0.9.0","0.8":"0.8.0"}},"lines":{},"verifiedOn":[],"inPresets":["0.8","0.9","next"],"ships":{"0.9":"0.9.0","0.8":"0.8.0","next":"0.10.1-develop.7701.1.87b1ad4224"}},"anatomy":{"version":"0.9.0","coverage":"full","counts":{"entities":5,"tables":5,"migrations":3,"routes":24,"publicRoutes":1,"aclFeatures":4,"eventsEmitted":12,"eventsConsumed":2,"backendPages":3,"frontendPages":0,"widgets":0,"workers":2,"cli":0,"aiTools":0,"aiAgents":0,"extends":3},"lists":{"aclFeatures":["webhooks.view","webhooks.manage","webhooks.secrets","webhooks.test"],"eventsEmitted":["webhooks.webhook.created","webhooks.webhook.updated","webhooks.webhook.deleted","webhooks.delivery.enqueued","webhooks.delivery.succeeded","webhooks.delivery.failed","webhooks.delivery.exhausted","webhooks.webhook.disabled","webhooks.inbound.received","webhooks.inbound.processed","webhooks.inbound.handler_failed","webhooks.secret.rotated"],"eventsConsumed":["webhooks.delivery.exhausted","webhooks.inbound.received"],"env":["WEBHOOK_QUEUE_CONCURRENCY","QUEUE_STRATEGY","WEBHOOK_INBOUND_QUEUE_CONCURRENCY","OM_WEBHOOKS_SUBSCRIPTION_CACHE_TTL_MS","OM_WEBHOOKS_ALLOW_PRIVATE_URLS"],"hosts":[],"tables":["webhooks","webhook_deliveries","webhook_inbound_receipts","webhook_ingestions","webhook_inbound_configs"],"publicRoutes":["POST /api/webhooks/inbound/[endpointId]"],"credentials":[{"key":"notifyOnFailedDelivery","type":"boolean","required":false}],"sdks":["svix"],"backendPages":["/backend/webhooks","/backend/webhooks/[id]","/backend/webhooks/create"]},"callout":"ADDS 5 TABLES · 24 ROUTES (1 PUBLIC) · 4 PERMISSIONS · EMITS 12 EVENTS","diff":{"from":"0.8.0","added":{"tables":0,"routes":0,"publicRoutes":0,"aclFeatures":0,"env":["OM_WEBHOOKS_SUBSCRIPTION_CACHE_TTL_MS"],"hosts":[]},"removed":{"tables":0,"routes":0,"aclFeatures":0}}},"signals":{"receipt":{"0.9":"untested","0.8":"untested","next":"untested"},"fit":{"0.9":"ok","0.8":"drift","next":"unknown"},"anatomy":"full","supplyChain":{"status":"ok","reasons":[]},"hygiene":{"status":"warn","failing":["invalid-identifier","peer-exact-pin"]},"maintenance":{"status":"current","lastRelease":"2026-10-09","catchUpDays":null},"declaredVsObserved":{"status":"mismatch","notes":["Built for 0.8, 0.9; verified on no line."]}},"tier":"listed","quality":null,"agentPolicy":{"0.9":{"decision":"ask","reasons":[{"code":"NOT_VERIFIED","text":"Not yet tested in a new app on 0.9."},{"code":"IN_PRESET","text":"Nothing to install: a new app already registers webhooks in src/modules.ts."}]},"0.8":{"decision":"ask","reasons":[{"code":"NOT_VERIFIED","text":"Not yet tested in a new app on 0.8."},{"code":"IN_PRESET","text":"Nothing to install: a new app already registers webhooks in src/modules.ts."}]},"next":{"decision":"ask","reasons":[{"code":"NOT_VERIFIED","text":"Not yet tested in a new app on next."},{"code":"IN_PRESET","text":"Nothing to install: a new app already registers webhooks in src/modules.ts."}]}},"install":{"cli":"yarn mercato module add @open-mercato/webhooks@0.9.0","cmm":"npx create-mercato-module install @open-mercato/webhooks@0.9.0","needsAllowThirdParty":false,"moduleFlag":null},"stats":{"downloads30d":40940,"stars":null},"sigil":{"glyph":"2323202","phase":159,"publicRoutes":true},"links":{"page":"https://modules.openmercato.com/m/@open-mercato/webhooks","md":"https://modules.openmercato.com/m/@open-mercato/webhooks.md","json":"https://modules.openmercato.com/m/@open-mercato/webhooks.json","facts":"https://modules.openmercato.com/m/@open-mercato/webhooks/v/0.9.0/facts.json","npm":"https://www.npmjs.com/package/@open-mercato/webhooks","repo":"https://github.com/open-mercato/open-mercato","docs":"https://docs.openmercato.com/user-guide/webhooks"},"addedAt":"2026-10-23","updatedAt":"2026-10-29T13:11:45Z","_meta":{"com.openmercato.modules/installable":{"0.9":"0.9.0","0.8":"0.8.0","next":"0.9.0"}},"screenshots":[{"src":"/shots/@open-mercato/webhooks-1.webp","alt":"Create webhook form with endpoint URL, HTTP method, event subscription and delivery settings."}],"facts":{"factsVersion":1,"extractor":{"engine":"@open-mercato/cli@0.9.0 extractModuleFacts","factsContractVersion":2,"catalog":"om-modules rentgen 1","durationMs":217},"package":{"locator":"npm:@open-mercato/webhooks","name":"@open-mercato/webhooks","version":"0.9.0","integrity":"sha512-nDE/oaLzHQieWUjQQsJv2P9v1gKPYf1odfgsSOWPwD2A6hFbhd3SgcP9wxafQo7GWoxoZN7Zw0ec+rTw9C310Q==","source":"npm-tarball","gitRef":null},"gate":{"installable":true,"needsModuleFlag":false,"reason":null,"modules":[{"id":"webhooks","src":true,"dist":true}]},"kind":"module","license":{"value":"MIT","kind":"osi","mismatch":false,"sources":{"packageJson":"MIT","licenseFile":null,"moduleInfo":"MIT","integrationTs":"MIT"}},"omPeers":{"@open-mercato/shared":"0.9.0"},"dependencies":{"@open-mercato/cache":"0.9.0","@open-mercato/core":"0.9.0","@open-mercato/queue":"0.9.0","@open-mercato/ui":"0.9.0","svix":"^1.99.1"},"agentsMd":true,"readmeExcerpt":null,"modules":[{"id":"webhooks","title":"Webhooks","description":"Standard Webhooks compliant outbound webhook delivery for platform events.","requires":[],"ejectable":null,"data":{"entities":[{"id":"webhooks:webhook_entity","table":"webhooks","src":{"file":"src/modules/webhooks/data/entities.ts","line":7}},{"id":"webhooks:webhook_delivery_entity","table":"webhook_deliveries","src":{"file":"src/modules/webhooks/data/entities.ts","line":92}},{"id":"webhooks:webhook_inbound_receipt_entity","table":"webhook_inbound_receipts","src":{"file":"src/modules/webhooks/data/entities.ts","line":163}},{"id":"webhooks:webhook_ingestion_entity","table":"webhook_ingestions","src":{"file":"src/modules/webhooks/data/entities.ts","line":193}},{"id":"webhooks:inbound_endpoint_config_entity","table":"webhook_inbound_configs","src":{"file":"src/modules/webhooks/data/entities.ts","line":246}}],"migrations":{"count":3,"first":"2026-03-18","last":"2026-06-17"},"customEntities":0},"http":{"routes":[{"method":"GET","path":"/api/webhooks","requireAuth":true,"requireFeatures":["webhooks.view"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/route.ts","line":9}},{"method":"POST","path":"/api/webhooks","requireAuth":true,"requireFeatures":["webhooks.manage"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/route.ts","line":9}},{"method":"GET","path":"/api/webhooks/[id]","requireAuth":true,"requireFeatures":["webhooks.view"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/[id]/route.ts","line":1}},{"method":"PUT","path":"/api/webhooks/[id]","requireAuth":true,"requireFeatures":["webhooks.manage"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/[id]/route.ts","line":1}},{"method":"DELETE","path":"/api/webhooks/[id]","requireAuth":true,"requireFeatures":["webhooks.manage"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/[id]/route.ts","line":1}},{"method":"POST","path":"/api/webhooks/[id]/rotate-secret","requireAuth":true,"requireFeatures":["webhooks.secrets"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/[id]/rotate-secret/route.ts","line":1}},{"method":"POST","path":"/api/webhooks/[id]/test","requireAuth":true,"requireFeatures":["webhooks.test"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/[id]/test/route.ts","line":1}},{"method":"GET","path":"/api/webhooks/deliveries","requireAuth":true,"requireFeatures":["webhooks.view"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/deliveries/route.ts","line":1}},{"method":"GET","path":"/api/webhooks/deliveries/[id]","requireAuth":true,"requireFeatures":["webhooks.view"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/deliveries/[id]/route.ts","line":1}},{"method":"POST","path":"/api/webhooks/deliveries/[id]/retry","requireAuth":true,"requireFeatures":["webhooks.manage"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/deliveries/[id]/retry/route.ts","line":1}},{"method":"GET","path":"/api/webhooks/events","requireAuth":true,"requireFeatures":["webhooks.view"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/events/route.ts","line":25}},{"method":"POST","path":"/api/webhooks/inbound/[endpointId]","requireAuth":false,"requireFeatures":[],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/inbound/[endpointId]/route.ts","line":59}},{"method":"GET","path":"/api/webhooks/webhook-deliveries","requireAuth":true,"requireFeatures":["webhooks.view"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/webhook-deliveries/route.ts","line":123}},{"method":"GET","path":"/api/webhooks/webhook-deliveries/[id]","requireAuth":true,"requireFeatures":["webhooks.view"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/webhook-deliveries/[id]/route.ts","line":38}},{"method":"POST","path":"/api/webhooks/webhook-deliveries/[id]/retry","requireAuth":true,"requireFeatures":["webhooks.manage"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/webhook-deliveries/[id]/retry/route.ts","line":43}},{"method":"GET","path":"/api/webhooks/webhooks","requireAuth":true,"requireFeatures":["webhooks.view"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/webhooks/route.ts","line":258}},{"method":"POST","path":"/api/webhooks/webhooks","requireAuth":true,"requireFeatures":["webhooks.manage"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/webhooks/route.ts","line":259}},{"method":"PUT","path":"/api/webhooks/webhooks","requireAuth":true,"requireFeatures":["webhooks.manage"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/webhooks/route.ts","line":260}},{"method":"DELETE","path":"/api/webhooks/webhooks","requireAuth":true,"requireFeatures":["webhooks.manage"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/webhooks/route.ts","line":261}},{"method":"GET","path":"/api/webhooks/webhooks/[id]","requireAuth":true,"requireFeatures":["webhooks.view"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/webhooks/[id]/route.ts","line":49}},{"method":"PUT","path":"/api/webhooks/webhooks/[id]","requireAuth":true,"requireFeatures":["webhooks.manage"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/webhooks/[id]/route.ts","line":63}},{"method":"DELETE","path":"/api/webhooks/webhooks/[id]","requireAuth":true,"requireFeatures":["webhooks.manage"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/webhooks/[id]/route.ts","line":121}},{"method":"POST","path":"/api/webhooks/webhooks/[id]/rotate-secret","requireAuth":true,"requireFeatures":["webhooks.secrets"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/webhooks/[id]/rotate-secret/route.ts","line":23}},{"method":"POST","path":"/api/webhooks/webhooks/[id]/test","requireAuth":true,"requireFeatures":["webhooks.test"],"hasOpenApi":true,"src":{"file":"src/modules/webhooks/api/webhooks/[id]/test/route.ts","line":48}}],"legacyRouteFiles":0,"authResolved":1},"security":{"aclFeatures":["webhooks.view","webhooks.manage","webhooks.secrets","webhooks.test"],"setupDefaultRoleFeatures":true},"events":{"emits":[{"id":"webhooks.webhook.created","src":{"file":"src/modules/webhooks/events.ts","line":4}},{"id":"webhooks.webhook.updated","src":{"file":"src/modules/webhooks/events.ts","line":5}},{"id":"webhooks.webhook.deleted","src":{"file":"src/modules/webhooks/events.ts","line":6}},{"id":"webhooks.delivery.enqueued","src":{"file":"src/modules/webhooks/events.ts","line":7}},{"id":"webhooks.delivery.succeeded","src":{"file":"src/modules/webhooks/events.ts","line":8}},{"id":"webhooks.delivery.failed","src":{"file":"src/modules/webhooks/events.ts","line":9}},{"id":"webhooks.delivery.exhausted","src":{"file":"src/modules/webhooks/events.ts","line":10}},{"id":"webhooks.webhook.disabled","src":{"file":"src/modules/webhooks/events.ts","line":11}},{"id":"webhooks.inbound.received","src":{"file":"src/modules/webhooks/events.ts","line":12}},{"id":"webhooks.inbound.processed","src":{"file":"src/modules/webhooks/events.ts","line":13}},{"id":"webhooks.inbound.handler_failed","src":{"file":"src/modules/webhooks/events.ts","line":14}},{"id":"webhooks.secret.rotated","src":{"file":"src/modules/webhooks/events.ts","line":15}}],"subscribes":[{"event":"webhooks.delivery.exhausted","src":{"file":"src/modules/webhooks/subscribers/failed-delivery-notification.ts","line":13}},{"event":"webhooks.inbound.received","src":{"file":"src/modules/webhooks/subscribers/inbound-process.ts","line":7}}]},"ui":{"backendPages":[{"path":"/backend/webhooks","requireFeatures":["webhooks.view"]},{"path":"/backend/webhooks/[id]","requireFeatures":["webhooks.view"]},{"path":"/backend/webhooks/create","requireFeatures":["webhooks.manage"]}],"frontendPages":[],"widgets":0,"extensionHosts":47},"background":{"workers":[{"queue":"webhook-deliveries"},{"queue":"webhook-inbound-dispatch"}],"cli":[]},"ai":{"tools":[],"agents":[]},"config":{"credentials":[{"key":"notifyOnFailedDelivery","type":"boolean","required":false}],"env":[{"name":"WEBHOOK_QUEUE_CONCURRENCY","src":{"file":"src/modules/webhooks/lib/queue.ts","line":21}},{"name":"QUEUE_STRATEGY","src":{"file":"src/modules/webhooks/lib/queue.ts","line":29}},{"name":"WEBHOOK_INBOUND_QUEUE_CONCURRENCY","src":{"file":"src/modules/webhooks/lib/queue.ts","line":75}},{"name":"OM_WEBHOOKS_SUBSCRIPTION_CACHE_TTL_MS","src":{"file":"src/modules/webhooks/lib/subscription-cache.ts","line":49}},{"name":"OM_WEBHOOKS_ALLOW_PRIVATE_URLS","src":{"file":"src/modules/webhooks/lib/url-safety.ts","line":56}}]},"network":{"hosts":[],"undeclared":[]},"extends":[{"kind":"specialized-registry","target":"integration:webhook_custom"},{"kind":"specialized-registry","target":"notification:webhooks.delivery.failed"},{"kind":"subscriber","target":"*"}],"omImports":{"@open-mercato/cache":{".":["CacheStrategy","runWithCacheTenant"]},"@open-mercato/core":{"modules/directory/utils/organizationScope":["resolveOrganizationScopeForRequest"],"modules/integrations/lib/credentials-service":["CredentialsService"],"modules/integrations/lib/state-service":["createIntegrationStateService"],"modules/notifications/lib/notificationBuilder":["buildFeatureNotificationFromType"],"modules/notifications/lib/notificationService":["resolveNotificationService"]},"@open-mercato/events":{"types":["SubscriberContext"]},"@open-mercato/queue":{".":["Queue","createModuleQueue"]},"@open-mercato/shared":{"lib/auth/organizationScope":["resolveSingleOrganizationIdOrDeny"],"lib/auth/server":["getAuthFromRequest"],"lib/boolean":["parseBooleanToken","parseBooleanWithDefault"],"lib/crud/errors":["isCrudHttpError"],"lib/crud/factory":["CrudCtx","makeCrudRoute"],"lib/crud/optimistic-lock-command":["enforceCommandOptimisticLockWithGuards"],"lib/db/escapeLikePattern":["escapeLikePattern"],"lib/di/container":["(dynamic)","createRequestContainer"],"lib/encryption/find":["findOneWithDecryption","findWithDecryption"],"lib/events/patterns":["matchAnyWebhookEventPattern","matchWebhookEventPattern"],"lib/frontend/useOrganizationScope":["useOrganizationScopeVersion"],"lib/i18n/context":["TranslateFn","useT"],"lib/i18n/server":["resolveTranslations"],"lib/logger":["createLogger"],"lib/network":["isPrivateIpAddress"],"lib/number":["parseNumberWithDefault"],"lib/openapi":["OpenApiRouteDoc"],"lib/openapi/crud":["createCrudOpenApiFactory"],"lib/ratelimit/helpers":["RATE_LIMIT_ERROR_FALLBACK","RATE_LIMIT_ERROR_KEY","checkRateLimit","getClientIp"],"lib/ratelimit/service":["RateLimiterService"],"lib/url-safety":["HostLookup","SafeOutboundFetchOptions","UrlSafetyReason","assertSafeOutboundUrl","assertStaticallySafeOutboundUrl","parseOutboundUrl","safeOutboundFetch"],"lib/webhooks":["InboundWebhookRequest","WEBHOOK_SIGNATURE_TOLERANCE_SECONDS","WebhookBodyTooLargeError","WebhookHandlerContext","WebhookHandlerPayload","WebhookHandlerRegistryEntry","WebhookHandlerResult","WebhookIngestionStatus","WebhookSourceConfig","buildWebhookHeaders","generateMessageId","generateWebhookSecret","isWebhookTimestampWithinTolerance","readBoundedRequestBody"],"modules/encryption":["ModuleEncryptionMap"],"modules/events":["createModuleEvents","getDeclaredEvents"],"modules/generators":["GeneratorPlugin"],"modules/integrations/types":["IntegrationBundle","IntegrationDefinition","IntegrationScope","buildIntegrationDetailWidgetSpotId"],"modules/notifications/types":["NotificationTypeDefinition"],"modules/registry":["ModuleInfo"],"modules/setup":["ModuleSetupConfig"],"modules/widgets/extension-points":["dataTableExtensionHost","defineModuleExtensionPoints"],"modules/widgets/injection":["InjectionWidgetComponentProps","InjectionWidgetModule","ModuleInjectionTable"],"security/features":["hasFeature"]},"@open-mercato/ui":{"backend/CrudForm":["CrudCustomFieldRenderProps","CrudField","CrudFieldOption","CrudForm","CrudFormGroup"],"backend/DataTable":["DataTable"],"backend/FilterBar":["FilterDef","FilterValues"],"backend/FlashMessages":["flash"],"backend/JsonBuilder":["JsonBuilder"],"backend/JsonDisplay":["JsonDisplay"],"backend/Page":["Page","PageBody"],"backend/RowActions":["RowActions"],"backend/confirm-dialog":["useConfirmDialog"],"backend/conflicts":["surfaceRecordConflict"],"backend/detail":["ErrorMessage","LoadingMessage","RecordNotFoundState"],"backend/filters/ListEmptyState":["ListEmptyState"],"backend/forms":["FormHeader"],"backend/injection/useAppEvent":["useAppEvent"],"backend/utils/apiCall":["apiCall"],"backend/utils/crud":["createCrud","deleteCrud","updateCrud"],"backend/utils/optimisticLock":["buildOptimisticLockHeader"],"backend/utils/serverErrors":["createCrudFormError"],"primitives/alert":["Alert","AlertDescription","AlertTitle"],"primitives/badge":["Badge"],"primitives/button":["Button"],"primitives/spinner":["Spinner"],"primitives/switch":["Switch"]},"@open-mercato/webhooks":{"modules/webhooks/extension-points":["extensionPoints"]}},"collisionKeys":{"moduleId":"webhooks","tables":["webhooks","webhook_deliveries","webhook_inbound_receipts","webhook_ingestions","webhook_inbound_configs"],"aclFeatures":["webhooks.view","webhooks.manage","webhooks.secrets","webhooks.test"],"eventIds":["webhooks.webhook.created","webhooks.webhook.updated","webhooks.webhook.deleted","webhooks.delivery.enqueued","webhooks.delivery.succeeded","webhooks.delivery.failed","webhooks.delivery.exhausted","webhooks.webhook.disabled","webhooks.inbound.received","webhooks.inbound.processed","webhooks.inbound.handler_failed","webhooks.secret.rotated"],"backendRoutes":["/backend/webhooks","/backend/webhooks/[id]","/backend/webhooks/create"]},"publicRoutes":1,"glyph":"2323202","lint":[{"code":"invalid-identifier","severity":"warn","message":"Rejected 1 subscribed event ID that failed the catalog pattern.","anchor":null,"src":{"file":"src/modules/webhooks/subscribers/outbound-dispatch.ts","line":23}},{"code":"peer-exact-pin","severity":"warn","message":"Peer dependencies pin Open Mercato exactly (@open-mercato/shared 0.9.0). Use a range.","anchor":"i2 §1.4","src":null},{"code":"public-routes","severity":"info","message":"1 of 24 routes do not require authentication.","anchor":null,"src":{"file":"src/modules/webhooks/api/inbound/[endpointId]/route.ts","line":59}},{"code":"ships-tests","severity":"info","message":"The tarball ships test files.","anchor":null,"src":null},{"code":"version-drift","severity":"info","message":"integration.ts says 1.0.0, package.json says 0.9.0.","anchor":null,"src":{"file":"src/modules/webhooks/integration.ts","line":6}}]}],"coverage":{"routesAuthResolved":1,"integrationTs":"expanded"},"diagnostics":[]},"receipts":[],"rules":[{"id":"LST-1","pass":true,"detail":"Descriptor is valid."},{"id":"LST-2","pass":true,"detail":"Stable version exists and is not deprecated."},{"id":"LST-3","pass":true,"detail":"src/modules and dist/modules pair found."},{"id":"LST-4","pass":true,"detail":"License: MIT."},{"id":"LST-5","pass":true,"detail":"No known malware or open critical advisory."},{"id":"LST-6","pass":true,"detail":"Name reviewed at merge."},{"id":"VER-1","pass":false,"detail":"Not yet tested in a new app on 0.9."},{"id":"VER-2","pass":true,"detail":"Fits statically on 0.9: ok."},{"id":"VER-3","pass":true,"detail":"Supply chain: ok."},{"id":"VER-4","pass":true,"detail":"No lint errors."},{"id":"VER-5","pass":true,"detail":"No repository in the descriptor to compare."}],"maintainers":["pat-lewczuk","patryk.andrzejewski","piotrkarwatka"]}
