You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .actor/actor.json
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -3,7 +3,7 @@
3
3
"name": "webhook-debugger-logger",
4
4
"title": "Webhook Debugger, Logger & API Mocking Suite",
5
5
"description": "Enterprise-grade tool to test, debug, and mock webhooks. Features real-time SSE streaming, request replay, HTTP forwarding, and JSON schema validation. Perfect for Stripe, GitHub, and Shopify integrations.",
Copy file name to clipboardExpand all lines: .actor/web_server_schema.json
+4-3Lines changed: 4 additions & 3 deletions
Original file line number
Diff line number
Diff line change
@@ -3,7 +3,7 @@
3
3
"info": {
4
4
"title": "Webhook Debugger & Logger API",
5
5
"description": "OpenAPI description for the Webhook Debugger & Logger Actor web server. Authentication is configuration-driven: when authKey is configured, management routes require either a bearer token or the key query parameter; when authKey is unset, those routes remain accessible without credentials.",
-`app-utils.js`: `setupTestApp()` - Initialize app + supertest for integration tests
82
+
-`app-utils.js`: `setupTestApp()` - Initialize app + supertest for integration tests; teardown also removes transient Actor listeners and process signal handlers registered during boot. Suites that use it must keep `mkdtemp()` real or provide a real mock implementation.
Use the harness teardown instead of manually removing process or Actor listeners inside individual integration suites.
246
+
247
+
Do not enable `setupCommonMocks({ fs: true })` in suites that call `setupTestApp()` or `startIntegrationApp()` unless you explicitly wire `fsPromisesMock.mkdtemp` to a real temp-directory implementation. The harness relies on a unique `APIFY_LOCAL_STORAGE_DIR` per boot and now throws if `mkdtemp()` returns an empty or invalid path.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+19Lines changed: 19 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -3,6 +3,25 @@
3
3
All notable changes to this project will be documented in this file.
4
4
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
5
5
6
+
## [3.0.5] - 2026-04-21
7
+
8
+
### Fixed (3.0.5)
9
+
10
+
-**Latency Metrics**: Make `processingTime` consistently represent server-side processing time only, excluding any configured `responseDelayMs` simulation from persisted log data.
11
+
-**Performance**: Cache compiled JSON Schema validators so repeated requests and stable hot-reload configurations do not trigger unnecessary recompilation on the webhook path.
12
+
-**Lifecycle**: Reset webhook-manager singleton state during test teardown and recreate the sync-service limiter after shutdown so repeated initialize/stop/start flows remain stable.
13
+
-**Lifecycle**: Cache the active `SyncService` limiter stop promise so disconnect cleanup can be retried safely after a partial stop failure, and so a later `start()` drains stale limiter cleanup before creating a replacement scheduler.
14
+
-**Shutdown Ordering**: Drain the HTTP listener before stopping `SyncService` and closing DuckDB so in-flight requests and readiness probes do not race read-model teardown.
15
+
-**DuckDB Lifecycle**: Drain both pooled and in-use DuckDB connections before resetting the singleton so repeated DB teardown and rebuild flows do not leave stale handles behind.
16
+
-**DuckDB Reset Coordination**: Keep the reset gate for new DuckDB callers while allowing already-queued writes and transactions to drain first, preventing reset deadlocks in the serialized write path.
17
+
-**DuckDB Init Invalidation**: Prevent an in-flight DuckDB initializer from republishing a stale singleton after `resetDbInstance()` clears teardown state, and allow clean reinitialization even when that late initializer ultimately fails.
18
+
-**Contracts & Docs**: Align dataset, output, OpenAPI, README, architecture, and API reference documentation with the finalized `processingTime` semantics and response-delay behavior.
19
+
-**Worker Cleanup**: Remove the custom script executor's `void` cleanup chaining and keep message/error/exit settlement deterministic even when worker listener cleanup throws.
20
+
-**Tests**: Add regression coverage for latency semantics, validator-cache reuse and memoized schema cache keys, DuckDB reset coordination with active reads plus queued write/transaction drain paths, malformed JSON sanitation persistence, restart-safe integration harness cleanup, shutdown-only sync error suppression, and spawned-process close-path resilience.
21
+
-**Tests**: Add focused regression coverage for `SyncService` stop/start retry paths and custom-script worker cleanup failure handling, and drive the touched files to 100% focused unit coverage before rerunning the stress suite.
22
+
-**Tests**: Make `setupTestApp()` fail fast when `node:fs/promises.mkdtemp()` is mocked incorrectly, and keep in-process integration suites on a real temp-directory implementation so `APIFY_LOCAL_STORAGE_DIR` isolation stays intact.
23
+
-**Tooling**: Remove the unused `cross-env` dependency and keep `npm run test:stress` on a direct Node + Jest invocation with `--expose-gc`, which works after a native Windows dependency install regenerates the local toolchain.
0 commit comments