Commit Graph

66 Commits

Author SHA1 Message Date
a2bdf11139 Add DB constraints for binary identifier lengths 2026-03-18 16:00:07 +01:00
bc66dfcbbe Upgrade NIP-50 search to ranked Postgres FTS 2026-03-18 15:56:45 +01:00
f732d9cf24 Implement full NIP-43 relay access flow 2026-03-18 15:28:15 +01:00
f2856d000e Implement NIP-66 relay discovery publishing 2026-03-18 14:50:25 +01:00
dc5f0c1e5d Add first-class listener connection caps 2026-03-18 14:21:43 +01:00
b56925f413 Decouple publish fanout and use ETS ingest counters
Some checks failed
CI / Test (OTP 27.2 / Elixir 1.18.2) (push) Failing after 0s
CI / Test (OTP 28.4 / Elixir 1.19.4 + Marmot E2E) (push) Failing after 0s
2026-03-18 14:10:32 +01:00
05718d4b91 Prevent NIP-98 token replay 2026-03-18 14:05:38 +01:00
1fef184f50 Add relay-wide event ingest limiter 2026-03-18 14:05:27 +01:00
57fdb4ed85 Add configurable tag guardrails 2026-03-18 14:05:09 +01:00
7b2d92b714 fix: Sandbox owner checks in DB connection before exiting
Some checks failed
CI / Test (OTP 27.2 / Elixir 1.18.2) (push) Failing after 0s
CI / Test (OTP 28.4 / Elixir 1.19.4 + Marmot E2E) (push) Failing after 0s
The shared sandbox owner process exited without releasing its Postgrex
connection, causing intermittent "client exited" error logs on CI. The
owner now calls Sandbox.checkin before exiting, and on_exit waits for
the owner to finish before switching to manual mode.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 20:11:31 +01:00
a19b7d97f0 fix: Subscription workers restart strategy, sandbox ownership race condition
Some checks failed
CI / Test (OTP 27.2 / Elixir 1.18.2) (push) Failing after 0s
CI / Test (OTP 28.4 / Elixir 1.19.4 + Marmot E2E) (push) Failing after 0s
Clear OTP SSL PEM cache between listener terminate/restart so reloaded
certs are read from disk instead of serving stale cached data. Make
reconcile_worker idempotent to prevent unnecessary worker churn when
put_server is followed by start_server. Add request timeouts to
RelayInfoClient to prevent hanging connections.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-17 19:42:18 +01:00
65b47ec191 fix: Subscription workers restart strategy, sandbox ownership race condition
Some checks failed
CI / Test (OTP 27.2 / Elixir 1.18.2) (push) Failing after 0s
CI / Test (OTP 28.4 / Elixir 1.19.4 + Marmot E2E) (push) Failing after 0s
2026-03-17 18:49:50 +01:00
e13c08fd5a Strengthening the TLS reload test 2026-03-17 12:42:08 +01:00
101ded43cb Stabilize TLS and sync worker tests
Some checks failed
CI / Test (OTP 27.2 / Elixir 1.18.2) (push) Failing after 0s
CI / Test (OTP 28.4 / Elixir 1.19.4 + Marmot E2E) (push) Failing after 0s
2026-03-17 12:17:29 +01:00
f4d94c9fcb Refactor test runtime ownership
Some checks failed
CI / Test (OTP 27.2 / Elixir 1.18.2) (push) Failing after 0s
CI / Test (OTP 28.4 / Elixir 1.19.4 + Marmot E2E) (push) Failing after 0s
2026-03-17 12:06:32 +01:00
35c8d50db0 Stabilize TLS listener reload e2e
Some checks failed
CI / Test (OTP 27.2 / Elixir 1.18.2) (push) Failing after 1s
CI / Test (OTP 28.4 / Elixir 1.19.4 + Marmot E2E) (push) Failing after 1s
2026-03-17 04:12:42 +01:00
4d169c23ae Harden CI-sensitive integration tests
Some checks failed
CI / Test (OTP 27.2 / Elixir 1.18.2) (push) Failing after 1s
CI / Test (OTP 28.4 / Elixir 1.19.4 + Marmot E2E) (push) Failing after 1s
2026-03-17 03:55:49 +01:00
a1a8b30d12 Stabilize test harness and node sync e2e
Some checks failed
CI / Test (OTP 27.2 / Elixir 1.18.2) (push) Failing after 1s
CI / Test (OTP 28.4 / Elixir 1.19.4 + Marmot E2E) (push) Failing after 1s
2026-03-17 03:46:58 +01:00
e557eba437 Fix connection test harness startup assumptions
Some checks failed
CI / Test (OTP 27.2 / Elixir 1.18.2) (push) Failing after 1s
CI / Test (OTP 28.4 / Elixir 1.19.4 + Marmot E2E) (push) Failing after 1s
Release / Release Gate (push) Failing after 1s
Release / Build and publish image (push) Has been skipped
2026-03-17 03:13:45 +01:00
f518a25cab Add node sync e2e harness and bump 0.5.0
Some checks failed
CI / Test (OTP 27.2 / Elixir 1.18.2) (push) Failing after 1s
CI / Test (OTP 28.4 / Elixir 1.19.4 + Marmot E2E) (push) Failing after 1s
2026-03-17 02:47:42 +01:00
02f2584757 Align websocket and admin APIs with shared surfaces 2026-03-17 01:08:41 +01:00
e8fd6c7328 Add listener TLS support and pinning tests 2026-03-17 00:48:48 +01:00
1f608ee2bd Refactor ingress to listener-based configuration 2026-03-16 23:47:17 +01:00
5f4f086d28 Add outbound sync worker runtime 2026-03-16 21:55:03 +01:00
9be3b6ca52 Add sync control plane API 2026-03-16 21:23:39 +01:00
769177a63e Add shared auth and identity APIs 2026-03-16 21:07:26 +01:00
d119d21d99 Extract API events and stream layers
Some checks failed
CI / Test (OTP 27.2 / Elixir 1.18.2) (push) Failing after 1s
CI / Test (OTP 28.4 / Elixir 1.19.4 + Marmot E2E) (push) Failing after 1s
2026-03-16 20:21:58 +01:00
5d4d181d00 Add trusted proxy IP enforcement tests 2026-03-16 19:09:27 +01:00
fd17026c32 Implement ACL runtime enforcement and management API 2026-03-16 17:49:16 +01:00
39dbc069a7 feat: NIF-77 negentropy sync 2026-03-16 16:00:15 +01:00
5c2fadc28e Rename archiver to partitions and drop archive SQL helper 2026-03-14 18:31:12 +01:00
7faf8c84c8 Align event_tags partition lifecycle with events 2026-03-14 18:23:21 +01:00
889d630c12 Add monthly partition maintenance and retention pruning 2026-03-14 18:11:40 +01:00
19664ac56c build: Default port to 4413 2026-03-14 17:37:37 +01:00
708e26e4f4 buid/test/docs: Docker image, Darwin fix, logo 2026-03-14 17:08:07 +01:00
bfdb06b203 Restrict metrics access and add optional dedicated metrics listener 2026-03-14 04:56:45 +01:00
36365710a8 Harden NEG session handling and gate feature wiring 2026-03-14 04:56:45 +01:00
e12085af2f Add signature verification and lossless event tag storage 2026-03-14 04:20:42 +01:00
18e429e05a Fix medium findings: deletion coords, count SQL, cache startup 2026-03-14 04:15:37 +01:00
c7a9f152f9 Harden ingress limits, AUTH validation, and search escaping 2026-03-14 04:09:02 +01:00
9616383e19 Add generic E2E harness and Marmot TS relay test suite 2026-03-14 00:32:34 +01:00
1199369dd9 test: NAME:
nak - the nostr army knife command-line tool

USAGE:
   nak [global options] [command [command options]]

VERSION:
   0.17.3

COMMANDS:
   event    generates an encoded event and either prints it or sends it to a set of relays
   req      generates encoded REQ messages and optionally use them to talk to relays
   filter   applies an event filter to an event to see if it matches.
   fetch    fetches events related to the given nip19 or nip05 code from the included relay hints or the author's outbox relays.
   count    generates encoded COUNT messages and optionally use them to talk to relays
   decode   decodes nip19, nip21, nip05 or hex entities
   encode   encodes notes and other stuff to nip19 entities
   key      operations on secret keys: generate, derive, encrypt, decrypt
   verify   checks the hash and signature of an event given through stdin or as the first argument
   relay    gets the relay information document for the given relay, as JSON
   admin    manage relays using the relay management API
   bunker   starts a nip46 signer daemon with the given --sec key
   serve    starts an in-memory relay for testing purposes
   blossom  an army knife for blossom things
   dekey    handles NIP-4E decoupled encryption keys
   encrypt  encrypts a string with nip44 (or nip04 if specified using a flag) and returns the resulting ciphertext as base64
   decrypt  decrypts a base64 nip44 ciphertext (or nip04 if specified using a flag) and returns the resulting plaintext
   gift     gift-wraps (or unwraps) an event according to NIP-59
   outbox   manage outbox relay hints database
   wallet   displays the current wallet balance
   mcp      pander to the AI gods
   curl     calls curl but with a nip98 header
   fs       mount a FUSE filesystem that exposes Nostr events as files.
   publish  publishes a note with content from stdin
   git      git-related operations
   nip      list NIPs or get the description of a NIP from its number
   sync     sync events between two relays using negentropy
   spell    downloads a spell event and executes its REQ request
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --quiet, -q    do not print logs and info messages to stderr, use -qq to also not print anything to stdout (default: false)
   --verbose, -v  print more stuff than normally (default: false)
   --help, -h     show help
   --version      prints the version (default: false) based E2E tests
2026-03-14 00:15:06 +01:00
cc9c18b38c docs+nix: add deployment README and align release packaging 2026-03-13 22:54:18 +01:00
f2a6ab5150 Implement M7 Marmot hardening telemetry and ops checks 2026-03-13 22:40:36 +01:00
99983bbb32 Remove legacy nip_ee_mls feature-gating code 2026-03-13 22:33:48 +01:00
c1bebd5553 Implement M6 push notification policy guards and replay tests 2026-03-13 22:27:34 +01:00
a42c2b656e Implement M5 media metadata policy hooks and query coverage 2026-03-13 22:21:28 +01:00
619c1a0bdf Implement M4 Marmot group envelope and fanout hardening 2026-03-13 22:12:45 +01:00
1547d00215 Harden M3 giftwrap recipient gating in storage adapters 2026-03-13 22:07:39 +01:00
3bf1b22103 Complete MIP-02 recipient-gated welcome conformance tests 2026-03-13 22:04:49 +01:00