Releases: hideyukiMORI/nene2-node
Releases · hideyukiMORI/nene2-node
v0.3.0
Added
RedisLockStorage(src/concurrency/redis-lock-storage.ts) — a cross-instance
distributed-lock backend using atomicSET … NX EX.RedisKeyValueClientgains
delandsetIfAbsent.
Changed
LockStoragenow exposes an atomicputIfAbsent(record, ttlMs)(plus
get/put/delete);createLockManageracquires via it, giving real
mutual exclusion across instances (Experimental surface — see ADR 0004 gate 3).
Storage owns expiry. The distributed-lock cluster is promoted to Stable;
RedisLockStoragestays Experimental for one cycle.
v0.2.0
Removed
- BREAKING:
openApiFileExistsandDEFAULT_OPENAPI_RELATIVEare no longer
public exports (internal path helpers). UseresolveOpenApiPathor pass an
absolute path. (ADR 0005 item 1)
Changed
- BREAKING: minimum runtime raised to Node 24 LTS / npm 11 (
engines).
node:sqliteis stable on 24 (no--experimental-sqlite). CI and the release
workflow run on Node 24. (ADR 0005 item 3) - BREAKING:
Nene2AppDatabase.executorrenamed toqueryExecutor
(aligns withDatabaseQueryExecutor, disambiguates fromreadExecutor).
Migration:nene2.database.executor→nene2.database.queryExecutor. (ADR 0005 item 2) - BREAKING:
TokenVerifier.verifynow always returns
Promise<Readonly<Record<string, unknown>>>— the synchronous return was
dropped.LocalBearerTokenVerifier.verifyis nowasync(await it, or catch a
rejection instead of a synchronous throw).bearerTokenMiddlewarealready
awaited it, so no change there. (ADR 0005 item 4)
v0.1.26
Ships the FT178–187 deep-FT phase — 11 new framework helpers. npm jumps 0.1.23 → 0.1.26 (the earlier v0.1.24/v0.1.25 tags were never published).
Added
- ETag / conditional requests —
computeETag,checkNotModified(304),checkPreconditions(412/428) (FT178) parseSortQuery— allowlistORDER BYvalidation, ReDoS-immune (FT179)createCircuitBreaker— three-state resilience primitive (FT180)createLockManager— leased distributed lock, owner-verified + TTL (FT181)createValidationCollector— nested/indexed error paths in one 422 (FT182)applyMergePatch— RFC 7396 PATCH with immutable/allowed guards (FT183)validateTextField/countCodePoints— Unicode-safe text validation (FT184)checkUrlSafety— SSRF guard (private/loopback/obfuscated IPs, DNS-rebind hook) (FT185)assertTenantScope+ResourceNotFoundError— multi-tenant isolation, 404-not-403 (FT186)escapeLikePattern— LIKE wildcard-injection defence (FT187)
431 tests; type-check / lint / format / build green. Full notes in CHANGELOG [0.1.26].
v0.1.23
What's new
Tests
tests/integration/redis-integration.test.ts— 7 integration tests against real Redis:createRedisKeyValueClientFromUrl,RedisRateLimitStorage,RedisIdempotencyStorage; skips gracefully whenNENE2_NODE_TEST_REDIS_URLis unset
CI
redis-integrationjob with Redis 7 service container — same structure as existing MySQL/PostgreSQL jobs
Full changelog: CHANGELOG.md
v0.1.22
What's new
Tests
- Unit tests for
createDatabaseRuntimeMySQL and PostgreSQL branches (10 tests, mocked pools — no real DB required)
CI
npm audit --audit-level=highadded to thecheckjob (currently 0 vulnerabilities)
Docs
docs/milestones/semver-0.2.0-breaking-inventory.md— candidate breaking-change list for a future 0.2.0 release
Full changelog: CHANGELOG.md
v0.1.21
v0.1.20
v0.1.19
Changed
- Example note/tag UseCases enforce row ownership via
assertResourceOwner(BOLA, FT146) /examples/notesand/examples/tagsrequire Bearer auth when examples are enabled- Repositories persist
owner_id; list queries scoped to JWTsub
Added
createResourceAccessDeniedHandlerwired into example module- Cross-user access returns 403 (not 200 leak)
Closes #98
v0.1.18
v0.1.17
UseCase 90% coverage gate
- Note/tag update & delete not-found tests
- Per-file 90% threshold (nene2-python parity)
See CHANGELOG.md.