Commit Graph

159 Commits

Author SHA1 Message Date
cyph3rasi 17baf8e4f0 Fix repost state drift and document workflow 2026-03-07 19:47:49 -08:00
cyph3rasi 76ca21e14f Prompt for upload re-auth on demand 2026-03-07 18:29:18 -08:00
cyph3rasi 28eb46d653 Make user media uploads session-backed 2026-03-07 18:14:02 -08:00
cyph3rasi 70e6b6fdf6 Remove shared storage and restore user-owned uploads 2026-03-07 17:03:50 -08:00
cyph3rasi ae2c34df6c Add installer, CI, ARM build and test updates
Introduce a one‑line Docker installer and environment examples, add CI and docker validation workflows, and update docs and tests.

Key changes:
- Add docker/install.sh installer that bootstraps /opt/synapsis, downloads compose files, optionally installs Docker, and generates secrets.
- Add top-level .env.example and docker/.env.example entries for shared storage and local development.
- Add GitHub Actions CI (ci.yml) with type checks, targeted vitest runs, build and docker-compose validation.
- Update existing docker workflow to set up QEMU and build multi‑arch images (amd64, arm64).
- Update README and docker/README to use the installer, point to the new repo, adjust local setup instructions, and note shared S3 env vars.
- Update docker-compose comments and include shared S3 env variables and defaults.
- Update .gitignore to ignore site-work mirrors.
- Tests: expand supported bot source types (add brave_news, youtube), increase POST_MAX_LENGTH from 400 to 600, add minimal user handle in mention handler tests, and add mocks & test adjustments in scheduler tests to keep them unit-scoped.

These changes simplify installation, add CI coverage (including Docker config validation), enable multi‑arch builds, and align tests with expanded bot source/validation behavior.
2026-03-07 16:11:37 -08:00
Christomatt a686db38b0 Docker hardening + first-run fixes 2026-02-05 02:49:34 +01:00
Christomatt 38ddbf8bc1 feat: Introduce runtime configuration for domain and enhance S3 storage settings with public base URL and Contabo support. 2026-02-03 01:27:46 +01:00
Christomatt 90dfd62434 feat: store node logo/favicon in postgres instead of S3
- Add logoData and faviconData columns to nodes table
- Create /api/admin/node/upload endpoint for direct DB storage
- Create /api/node/logo and /api/node/favicon endpoints to serve images
- Update admin page to use new upload endpoint
- Remove dependency on admin's personal S3 storage for node assets
2026-02-01 16:29:39 +01:00
Christomatt 0cea2e9e1f fix: type cast for storageEndpoint 2026-02-01 05:04:30 +01:00
Christomatt c0d077e587 fix: use nullish coalescing for storageEndpoint 2026-02-01 04:33:02 +01:00
Christomatt 265d7dba66 fix: update generateAndUploadAvatarToUserStorage signature to accept undefined 2026-02-01 04:28:15 +01:00
Christomatt 88a46ea441 chore: remove unused ipfs.ts file (conflicting function names) 2026-02-01 04:24:00 +01:00
Christomatt 13b38f0a7b fix: bot avatar generation - decrypt credentials before passing to S3 2026-02-01 04:16:42 +01:00
Christomatt 3bf56cca82 feat: show node feed explainer even when empty 2026-02-01 04:07:48 +01:00
Christomatt daa40dc1ac feat: add explainer card to users tab on explore page 2026-02-01 04:06:47 +01:00
Christomatt 4323ae90f8 chore: remove outdated install wizard 2026-02-01 03:26:03 +01:00
Christomatt 8ea7fb75eb fix: type error - storageEndpoint null to undefined 2026-02-01 02:58:29 +01:00
Christomatt 1f171e127f fix: remove duplicate owner variable in botManager 2026-02-01 02:55:48 +01:00
Christomatt f55dec9a60 feat: user-owned S3-compatible storage with credential verification 2026-02-01 02:51:52 +01:00
Christomatt df5b61f42a Add Docker deployment setup with health check endpoint
- Add multi-stage Dockerfile with standalone Next.js output
- Add docker-compose.yml with Caddy reverse proxy
- Add nginx configs for local and SSL setups
- Add Caddyfile for automatic HTTPS
- Add docker-entrypoint.sh for runtime config
- Add .env.example and .dockerignore
- Add comprehensive Docker README
- Add /api/health endpoint for container health checks
- Configure next.config.ts for standalone output
2026-01-31 03:53:19 +01:00
Clawd Deploy Bot 50355b740a Security fixes: swarm signature verification and error handling 2026-01-30 16:50:49 +01:00
Christomatt 495a037eb1 feat: Add optional publicKey field to interaction type. 2026-01-30 08:47:26 +01:00
Christomatt 374bfadc74 feat: Add public key to user profiles in API responses and update user caching logic to store and manage it. 2026-01-30 05:16:49 +01:00
Christomatt 10a54a0ea9 feat: Implement identity lock screen for sensitive user actions and introduce avatar generation. 2026-01-30 04:44:57 +01:00
Christomatt 4c9afa42fe feat: Improve user resolution for chat conversations by handling local domain suffixes and pre-fetching message sender details. 2026-01-29 12:15:13 +01:00
Christomatt 705e7cd23f feat: Add debug logging and enhance error messages for remote chat delivery failures. 2026-01-29 11:17:26 +01:00
Christomatt 1f115d569f feat: Use X-Swarm-Source-Domain header to identify the sender's node domain in chat messages. 2026-01-29 06:58:17 +01:00
Christomatt 645e9a6670 fixed build error 2026-01-29 01:03:03 +01:00
Christomatt 9710a16f83 feat: Implement remote user profile caching and enhance chat conversation list display with updated styling. 2026-01-29 01:00:22 +01:00
Christomatt 491eb07fea fix: Validate user object before accessing DID and clarify error message for missing identity. 2026-01-29 00:08:29 +01:00
Christomatt c47b0141f5 feat: Remove chat key management and debug endpoints, simplify chat message handling, and enhance migration page with DM and bot export capabilities. 2026-01-29 00:04:22 +01:00
Christopher 9cd23081ed fixed modal 2026-01-28 13:18:26 -08:00
Christopher ceae76d58f Refactor chat system to remove E2EE and simplify messaging
Removed all E2EE chat endpoints, crypto logic, and related API routes, transitioning chat to plain text storage and transport. Updated chat send/receive endpoints to use signed actions and enforce DM privacy settings. Cleaned up Swarm chat inbox, key management, and related debug endpoints. Updated user profile to support DM privacy, improved search for handle queries, and refactored conversation/message logic to support the new model. Migrated bot settings and privacy settings to new locations.
2026-01-28 13:05:34 -08:00
Christopher b52b3f9804 Remove lastSeenAt from handle update in chat API
The lastSeenAt field is no longer set when updating the handle in the chat receive API route. This may be due to a change in how user activity is tracked or to simplify the update payload.
2026-01-28 07:55:38 -08:00
Christopher ced2b958ed Upsert sender into HandleRegistry on message receive
Adds logic to upsert the sender's handle, DID, and node domain into the HandleRegistry when a chat message is received. This ensures the sender's information is available for future replies or key retrieval.
2026-01-28 07:53:23 -08:00
Christopher 558c1aecdf Ensure chat key fetches bypass cache
Added `{ cache: 'no-store' }` to fetch requests for chat keys in both the chat page and useSodiumChat hook to prevent stale key data. Also updated the chat key query to order by `lastSeenAt` descending, ensuring the most recent bundle is retrieved.
2026-01-28 07:48:10 -08:00
Christopher 28f561f689 Sync chat public key to users table and fix handle formatting
The chat public key is now also updated in the users table during key publishing for profile discovery. Additionally, sender handles in chat receive are now fully qualified with domain when necessary to ensure consistency in conversation and message storage.
2026-01-28 07:43:05 -08:00
Christopher 93a587f185 Refactor chat page useEffect organization and improve compose intent handling
Reorganizes useEffect hooks in chat/page.tsx to follow a helper-functions-first structure, improving readability and maintainability. Adds error handling and user feedback for compose intent, preventing UI flash while processing. In send/route.ts, ensures remote user handles are fully qualified and adds debug logging. Temporarily disables key caching in keys/route.ts to address development key mismatches.
2026-01-28 07:37:27 -08:00
Christopher a21af87144 Implement federated chat message sending and receiving
Adds /api/chat/receive endpoint to accept federated chat messages from remote nodes and store them for local users. Updates /api/chat/send to support sending messages to remote nodes by resolving recipient domains, posting to their /api/chat/receive endpoint, and storing a local copy of the sent message. Enables basic cross-node chat federation.
2026-01-28 07:27:44 -08:00
Christopher 70b86244a7 Refactor Base64 variant handling in tryDecodeBase64
Simplifies and clarifies the logic for selecting Base64 variants by using a Set to ensure uniqueness and order. This change improves maintainability and robustness when decoding Base64 strings with different variants.
2026-01-28 07:22:11 -08:00
Christopher f678f1f87e Refactor handle registry updates and improve key decoding
Removed 'healing' logic and authoritative update propagation from handle registry and gossip code, simplifying handle upserts to only update on strictly newer timestamps. Enhanced sodium-chat key handling with robust base64 decoding and key repair logic. Added scripts for key inspection and crypto testing. Deleted unused healing module.
2026-01-28 07:16:15 -08:00
Christopher 36f653d500 Improve handle registry healing and gossip propagation
Added healing utilities to update the handle registry when a user profile is found at a new node domain. Enhanced upsertHandleEntries to accept a sourceDomain parameter, allowing authoritative updates from the owning node. Updated gossip logic to pass sender/target domains for proper trust handling during handle propagation. Integrated healing logic into chat key lookup to keep the registry accurate.
2026-01-28 06:55:13 -08:00
Christopher 213dcc8095 Enhance chat key lookup with remote and cache fallback
The GET /api/chat/keys endpoint now checks a remote identity cache and, if necessary, fetches keys from remote nodes or Swarm user profiles when a local key is not found. Results from remote lookups are cached for 24 hours to improve performance and reliability.
2026-01-28 06:45:28 -08:00
Christopher 4ab464bcaa Fix crypto_generichash usage in useUserIdentity
Adds the missing third argument (null) to sodium.crypto_generichash to ensure correct hashing behavior when generating the salt for storage key derivation.
2026-01-28 06:16:35 -08:00
Christopher 015d4ecbd8 Add check for user DID before key verification
Throws an error if the user DID is not available before attempting to verify the key on the server, preventing potential runtime errors.
2026-01-28 06:12:51 -08:00
Christopher a87977241c Refactor chat encryption to use sodium, update API
Replaces legacy chat encryption modules with new sodium-based implementation. Adds and updates API routes for chat key management and debugging, introduces new hooks and scripts for sodium chat, and updates related database schema and configuration. Removes old crypto modules and updates dependencies accordingly.
2026-01-28 06:07:03 -08:00
Christopher 222f1c6d8a Add sender DID resolution and self-decryption for chat messages
The messages API now resolves and includes sender DIDs for received messages, enabling proper decryption in the chat UI. The chat page adds logic to decrypt self-encrypted messages for sent items and improves V2 envelope handling, while useChatEncryption now serializes ratchet state before storage.
2026-01-27 22:06:47 -08:00
Christopher c8e4dedd61 Add sender_did to chat messages and new chat tables
Introduces a migration to add a sender_did column to the chat_messages table and creates new tables for chat_device_bundles, chat_inbox, and chat_one_time_keys. Updates related API routes and adds a script for sender DID migration. These changes support device-based messaging and improved chat security.
2026-01-27 21:57:33 -08:00
Christopher 3c7937312d Add self-encryption for sent chat messages
Introduces helper functions to encrypt and decrypt a copy of sent messages for the sender using AES-GCM with a key derived from the identity public key. Updates message sending to include a self-encrypted payload, and modifies message reading logic to allow the sender to decrypt their own messages on any device.
2026-01-27 21:46:48 -08:00
Christopher d460139ede Store chat messages locally for sender and recipient
Messages sent to remote users are now stored locally for the sender, and incoming remote messages are stored for the recipient, ensuring both parties see their message history in the UI. The implementation creates or updates conversations as needed and marks messages as delivered when appropriate.
2026-01-27 21:33:11 -08:00