diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..71b49b25 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,37 @@ +--- +name: Bug report +about: Report a reproducible problem in Sync Web +title: "" +labels: bug +assignees: "" +--- + +## What happened? + +Describe the problem clearly. + +## Expected behavior + +What did you expect to happen? + +## Steps to reproduce + +1. +2. +3. + +## Environment + +- Sync Web version / image tag / commit SHA: +- Deployment mode: general Compose / ledger binary / local test compose / other +- Runtime and OS: Docker / Podman / macOS / Linux / Windows / other +- Affected area: journal / records / gateway / explorer / WebDAV file-system / ledger / agent-recorder / docs / other +- Was an existing journal database updated with `JOURNAL_UPDATE=1`? yes / no / unknown + +## Logs or output + +Paste relevant logs, command output, or screenshots. Redact secrets, tokens, private keys, and private journal data. + +## Security note + +If this report may involve a vulnerability or sensitive data exposure, do not file a public issue. Follow `SECURITY.md` instead. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..d1cd0d51 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,37 @@ +--- +name: Feature request +about: Suggest a Sync Web improvement +title: "" +labels: enhancement +assignees: "" +--- + +## Problem or use case + +What problem should this solve? Who is it for? + +## Proposed behavior + +Describe the desired behavior or interface. + +## Affected areas + +Check or list the areas likely involved: + +- [ ] records / Scheme object layer +- [ ] journal / Rust SDK +- [ ] gateway / API +- [ ] explorer / UI +- [ ] WebDAV file-system +- [ ] ledger binary / deployment +- [ ] agent-recorder +- [ ] docs +- [ ] other: + +## Compatibility and deployment concerns + +Does this affect existing data, public APIs, record updates, container deployment, release artifacts, or bridge behavior? + +## Alternatives considered + +Describe any alternatives or workarounds. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..f7b1fdd3 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,44 @@ +## Summary + +- +- +- + +## Testing + +- [ ] `node scripts/sync-platform-package-versions.js` +- [ ] Records tests, if records changed: `./records/tests/test.sh ./journal/target/debug/journal-sdk` +- [ ] Explorer tests/build, if Explorer changed: `cd services/explorer && npm test -- --watchAll=false && npm run build` +- [ ] Gateway tests, if Gateway changed: `cd services/gateway && npm test -- --runInBand` +- [ ] Docs build, if docs changed: `cd docs/info && npm run build` +- [ ] Agent recorder tests, if agent-recorder changed: `cd tools/agent-recorder && cargo test` + +Other checks run: + +```text + +``` + +## Versioning + +- [ ] Root `VERSION` bumped, or not needed because: +- [ ] Package versions synced with `node scripts/sync-platform-package-versions.js --write`, or not needed because: +- [ ] `journal/Cargo.toml` version changed only if the journal-sdk crate changed, or not applicable +- [ ] `tools/agent-recorder/Cargo.toml` version bumped for Agent Recorder-only release-worthy changes, or not applicable + +## Deployment / records impact + +- [ ] No record changes, or existing deployments require `JOURNAL_UPDATE=1` +- [ ] No runtime-managed admin/config state will be reset by updates +- [ ] Public deployment variables and defaults remain safe (`ORIGIN`, `INTERFACE`, `JOURNAL_NAME`, secrets) +- [ ] No destructive volume/data commands are added or documented without explicit warnings + +## Security / release notes + +- [ ] No secrets, private data, local databases, generated caches, or runtime artifacts committed +- [ ] Release/container/binary artifact implications considered +- [ ] Security-sensitive changes are described here or handled privately via `SECURITY.md` + +## Notes / risks + +- diff --git a/CHANGELOG.md b/CHANGELOG.md index ad59e278..6a46c003 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,32 @@ # Changelog +## 1.4.3 + +### Changed + +- **Journal interface defaults** — General Compose now derives the raw journal interface endpoint from `ORIGIN` instead of ever falling back to `SECRET`, and passes `ORIGIN`, `INTERFACE`, and `JOURNAL_NAME` into the journal container. +- **Admin update behavior** — `JOURNAL_UPDATE=1` preserves the existing runtime-managed admin list instead of reseeding it from `INTERFACE_ADMINS`. +- **Bridge admin UI polish** — Shortened the bridge creation button to “Create” and aligned selected Push/Pull/None segment color with the page’s primary button color. + +## 1.4.2 + +### Added + +- **Bridge admin controls** — Added Explorer admin controls for subscribing to peers and publishing to peers, including endpoint editing, delete actions, and Push/Pull/None policy selection. +- **Bridge delete operations** — Added explicit incoming bridge and outgoing subscriber delete operations through the interface and gateway. +- **Version-driven ledger releases** — Ledger and journal-sdk release artifacts are now published from main `VERSION` changes, using `VERSION` as the release source of truth. + +### Changed + +- **Bridge configuration** — Disabled bridge and subscriber entries are preserved as `none` tombstones, while delete removes the config entry. +- **Bridge identity defaults** — Ledger public config now stores the journal name so Explorer can autofill the remote name when creating publishing relationships. +- **Idea docs** — Consolidated current cross-journal data-flow notes and removed stale/superseded idea documents. + +### Fixed + +- **Stale bridge endpoints** — Explorer now prefers authoritative bridge interface config over legacy local registration snapshots. +- **Bridge sync loop** — Incoming bridges with negotiated `none` policy are skipped during periodic bridge synchronization. + ## 1.4.1 ### Added diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..91fa40fb --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,55 @@ +# Contributing + +This repository is the Synchronic Web monorepo. Prefer small, focused pull requests with clear testing notes. + +## Versioning and releases + +- Pull requests that change the platform/runtime should bump the root `VERSION`. +- Agent Recorder-only release-worthy changes should bump `tools/agent-recorder/Cargo.toml` instead of the root `VERSION`. +- After changing root `VERSION`, run: + ```sh + node scripts/sync-platform-package-versions.js --write + ``` + and commit the resulting package metadata updates. +- Only bump `journal/Cargo.toml` when the `journal-sdk` crate itself changes. +- Root `VERSION` is the source of truth for platform container tags and ledger binary releases. Agent Recorder has its own release/version stream. Do not mutate existing release assets; publish a new patch version instead. + +## Testing + +Run the checks relevant to your change and list them in the PR body. Common checks: + +```sh +./records/tests/test.sh ./journal/target/debug/journal-sdk +node scripts/sync-platform-package-versions.js +cd services/explorer && npm test -- --watchAll=false && npm run build +cd services/gateway && npm test -- --runInBand +cd docs/info && npm run build +cd tools/agent-recorder && cargo test +``` + +Use `~/.cargo/bin/cargo` if `cargo` is not on your local `PATH`. + +## Records and Scheme changes + +- Read `records/LANGUAGE.md` before changing `records/lisp/*.scm`. +- Preserve public method names, argument shapes, return shapes, and sentinel behavior unless the change is intentionally breaking. +- Keep durable semantic state in sync-node object state, not only in live Scheme bindings. +- Mutating a live object does not persist it into a parent/root automatically; persist the returned object node where needed. +- Add or update `records/tests` for public method changes, state-layout changes, authorization changes, bridge behavior, and persistence-sensitive mutations. + +## Deployment-sensitive changes + +- Treat `deploy/compose/general/` as a production path, not just local scaffolding. +- Avoid documenting or scripting `down -v` casually; it destroys deployment data. +- Existing journal databases require `JOURNAL_UPDATE=1` to load updated mounted record code. Use it intentionally and turn it back off after the update. +- Runtime-managed admin state must not be reset by record updates; environment admin lists are seed inputs for fresh installs. +- Public deployments should set `ORIGIN`, and may set `INTERFACE` and `JOURNAL_NAME`; never derive public identity fields from secrets. +- Preserve both Docker and Podman/Compose-compatible workflows where practical. + +## Pull request notes + +A useful PR body includes: + +- **Summary** — what changed and why. +- **Testing** — commands run, or `Not run` with reason. +- **Notes/Risks** — deployment, migration, compatibility, security, or follow-up concerns. diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..7887ab45 --- /dev/null +++ b/LICENSE @@ -0,0 +1,24 @@ +MIT License + +Copyright (c) 2024 National Technology & Engineering Solutions of +Sandia, LLC (NTESS). Under the terms of Contract DE-NA0003525 with +NTESS, the U.S. Government retains certain rights in this software. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..c5579c92 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,26 @@ +# Security Policy + +Please do not open public issues for suspected vulnerabilities. + +Use GitHub private vulnerability reporting if it is enabled for this repository. If it is not available, contact the project maintainers through an appropriate private channel and include enough detail to reproduce or assess the issue. + +## Scope + +Security-relevant reports include, but are not limited to: + +- authentication, session, or API-token bypasses +- journal/interface authorization bugs +- bridge trust, proof, signature, or synchronization integrity issues +- secret exposure in configuration, logs, release artifacts, documentation, or public APIs +- deployment defaults that expose privileged operations unintentionally +- vulnerabilities in release, container, or binary distribution workflows + +Dependency scanner findings are most useful when accompanied by exploitability or reachability context for this project. + +## Supported versions + +Unless otherwise stated, security fixes target the current `main` branch and latest published release. + +## Handling sensitive material + +Do not include real secrets, private keys, access tokens, private journal data, database dumps, or production logs containing sensitive content in public reports. Redact secrets from command output and logs. Coordinate privately before sharing sensitive artifacts. diff --git a/SUPPORT.md b/SUPPORT.md new file mode 100644 index 00000000..6de6f31b --- /dev/null +++ b/SUPPORT.md @@ -0,0 +1,25 @@ +# Support + +Use GitHub Issues for ordinary bug reports, feature requests, and questions. + +For suspected vulnerabilities or sensitive security concerns, do not open a public issue. Follow `SECURITY.md` instead. + +## Helpful information for bug reports + +Include the details that apply: + +- Sync Web version from `VERSION`, image tags, release tag, or commit SHA +- deployment mode: general Compose stack, ledger binary, local test compose, or another setup +- container runtime and host OS, for example Docker, Podman, Linux, macOS, or Windows +- affected service or area, such as journal, records, gateway, explorer, WebDAV file-system, ledger binary, or agent-recorder +- commands run and observed output +- relevant logs with secrets and private data redacted +- whether an existing journal database was updated with `JOURNAL_UPDATE=1` + +## Useful references + +- Records/Scheme object language: `records/LANGUAGE.md` +- General Compose deployment: `deploy/compose/general/README.md` +- Ledger binary deployment: `deploy/bin/ledger/README.md` +- Agent recorder: `tools/agent-recorder/README.md` +- Project contribution guidelines: `CONTRIBUTING.md` diff --git a/VERSION b/VERSION index 9df886c4..428b770e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.4.2 +1.4.3 diff --git a/deploy/compose/general/.env.example b/deploy/compose/general/.env.example index b5267888..f223ed23 100644 --- a/deploy/compose/general/.env.example +++ b/deploy/compose/general/.env.example @@ -6,7 +6,7 @@ SECRET= # Port is stripped automatically for cookie domain config. # DOMAIN=example.com KRATOS_COOKIE_SECRET=changeme-32-chars-minimum-here -SYNC_WEB_VERSION=1.0.0 +SYNC_WEB_VERSION=1.4.3 PORT=8192 HTTPS_PORT=443 PERIOD=2 @@ -14,6 +14,12 @@ WINDOW=1024 RUST_LOG=INFO REQUEST_TIMEOUT_MS=30000 +# Public journal endpoint and name advertised to bridge peers. +# INTERFACE defaults to ORIGIN/api/v1/journal/interface. +# JOURNAL_NAME defaults to INTERFACE. +# INTERFACE=https://example.com/api/v1/journal/interface +# JOURNAL_NAME=example + # Admin seeding — defaults: username=admin, password=SECRET # ADMIN_USERNAME=admin # ADMIN_PASSWORD= # defaults to SECRET if unset diff --git a/deploy/compose/general/README.md b/deploy/compose/general/README.md index e2215156..0ab2fe70 100644 --- a/deploy/compose/general/README.md +++ b/deploy/compose/general/README.md @@ -56,7 +56,9 @@ podman-compose -f deploy/compose/general/compose.yaml up -d - `SECRET` (required): authentication secret for restricted journal/gateway operations - `HTTP_PORT` (default `8192`): host HTTP port exposed by router - `HTTPS_PORT` (default `8193`): host TLS port exposed by router -- `ORIGIN` (default `http://localhost:8192`): public origin used by the identity provider; set this explicitly when using non-default/public ports or hostnames +- `ORIGIN` (default `http://localhost:8192`): public origin used by the identity provider and as the default base for the raw journal interface URL; set this explicitly when using non-default/public ports or hostnames +- `INTERFACE` (default `${ORIGIN}/api/v1/journal/interface`): public raw journal interface endpoint advertised to bridge peers +- `JOURNAL_NAME` (default `INTERFACE`): public journal display/peer name advertised to bridge peers - `PERIOD` (default `2`): journal periodicity exponent - `WINDOW` (default `1024`): retained historical state window - `JOURNAL_UPDATE` (default empty): set to `1` to update an existing journal database from the mounted Lisp files before serving @@ -65,7 +67,7 @@ podman-compose -f deploy/compose/general/compose.yaml up -d - `ACME_WEBROOT_HOST_PATH` (default `./acme-challenge`): host directory mounted at `/var/www/acme-challenge` for HTTP-01 challenge files - `TLS_CERT_FILE` (default `/etc/nginx/certs/tls.crt`): in-container certificate path used by router - `TLS_KEY_FILE` (default `/etc/nginx/certs/tls.key`): in-container key path used by router -- `FILE_SYSTEM_IMAGE` (default `ghcr.io/sandialabs/sync-web/file-system:1.4.1`): image used by the `file-system` service +- `FILE_SYSTEM_IMAGE` (default `ghcr.io/sandialabs/sync-web/file-system:1.4.3`): image used by the `file-system` service - `SYNC_FS_MAX_OBJECT_BYTES` (default `1048576`): maximum WebDAV object size Gateway note: diff --git a/deploy/compose/general/compose.yaml b/deploy/compose/general/compose.yaml index 44644093..2866a7e2 100644 --- a/deploy/compose/general/compose.yaml +++ b/deploy/compose/general/compose.yaml @@ -4,7 +4,7 @@ networks: services: journal: - image: ghcr.io/sandialabs/sync-web/journal-sdk:${SYNC_WEB_VERSION:-1.4.1} + image: ghcr.io/sandialabs/sync-web/journal-sdk:${SYNC_WEB_VERSION:-1.4.3} container_name: ${COMPOSE_PROJECT_NAME:-sync}-journal working_dir: /srv entrypoint: ["/bin/sh", "/srv/run.sh"] @@ -17,6 +17,9 @@ services: RUST_LOG: ${RUST_LOG:-INFO} JOURNAL_UPDATE: ${JOURNAL_UPDATE:-} INTERFACE_ADMINS: ${INTERFACE_ADMINS:-admin} + ORIGIN: ${ORIGIN:-http://localhost:8192} + INTERFACE: ${INTERFACE:-} + JOURNAL_NAME: ${JOURNAL_NAME:-} LISP_DIR: /srv/lisp volumes: - database:/srv/database @@ -30,7 +33,7 @@ services: start_period: 20s explorer: - image: ghcr.io/sandialabs/sync-web/explorer:${SYNC_WEB_VERSION:-1.4.1} + image: ghcr.io/sandialabs/sync-web/explorer:${SYNC_WEB_VERSION:-1.4.3} container_name: ${COMPOSE_PROJECT_NAME:-sync}-explorer networks: - sync-net @@ -44,7 +47,7 @@ services: start_period: 10s workbench: - image: ghcr.io/sandialabs/sync-web/workbench:${SYNC_WEB_VERSION:-1.4.1} + image: ghcr.io/sandialabs/sync-web/workbench:${SYNC_WEB_VERSION:-1.4.3} container_name: ${COMPOSE_PROJECT_NAME:-sync}-workbench networks: - sync-net @@ -58,7 +61,7 @@ services: start_period: 10s gateway: - image: ghcr.io/sandialabs/sync-web/gateway:${SYNC_WEB_VERSION:-1.4.1} + image: ghcr.io/sandialabs/sync-web/gateway:${SYNC_WEB_VERSION:-1.4.3} container_name: ${COMPOSE_PROJECT_NAME:-sync}-gateway networks: - sync-net @@ -83,7 +86,7 @@ services: start_period: 10s identity-provider: - image: ghcr.io/sandialabs/sync-web/identity-provider:${SYNC_WEB_VERSION:-1.4.1} + image: ghcr.io/sandialabs/sync-web/identity-provider:${SYNC_WEB_VERSION:-1.4.3} container_name: ${COMPOSE_PROJECT_NAME:-sync}-identity-provider networks: - sync-net @@ -104,7 +107,7 @@ services: start_period: 20s router: - image: ghcr.io/sandialabs/sync-web/router:${SYNC_WEB_VERSION:-1.4.1} + image: ghcr.io/sandialabs/sync-web/router:${SYNC_WEB_VERSION:-1.4.3} container_name: ${COMPOSE_PROJECT_NAME:-sync}-router environment: TLS_CERT_FILE: ${TLS_CERT_FILE:-/etc/nginx/certs/tls.crt} @@ -133,7 +136,7 @@ services: start_period: 20s file-system: - image: ${FILE_SYSTEM_IMAGE:-ghcr.io/sandialabs/sync-web/file-system:1.4.1} + image: ${FILE_SYSTEM_IMAGE:-ghcr.io/sandialabs/sync-web/file-system:1.4.3} container_name: ${COMPOSE_PROJECT_NAME:-sync}-file-system depends_on: - gateway diff --git a/deploy/compose/general/run.sh b/deploy/compose/general/run.sh index c4db7e2a..121ae370 100755 --- a/deploy/compose/general/run.sh +++ b/deploy/compose/general/run.sh @@ -54,7 +54,8 @@ run_startup() { document=$( cat "$(resolve_lisp_file document.scm)" ) interface=$( cat "$(resolve_lisp_file interface.scm)" ) admins=$( build_admins_list ) - interface_url="${INTERFACE:-$SECRET}" + origin="${ORIGIN:-http://localhost:8192}" + interface_url="${INTERFACE:-$origin/api/v1/journal/interface}" journal_name="${JOURNAL_NAME:-$interface_url}" bridge_publish="${BRIDGE_PUBLISH:-push}" bridge_subscribe="${BRIDGE_SUBSCRIBE:-pull}" diff --git a/deploy/compose/ledger/compose.yaml b/deploy/compose/ledger/compose.yaml index a4de26f0..4037af22 100644 --- a/deploy/compose/ledger/compose.yaml +++ b/deploy/compose/ledger/compose.yaml @@ -4,7 +4,7 @@ networks: services: journal: - image: ghcr.io/sandialabs/sync-web/journal-sdk:${SYNC_WEB_VERSION:-1.4.1} + image: ghcr.io/sandialabs/sync-web/journal-sdk:${SYNC_WEB_VERSION:-1.4.3} container_name: ${COMPOSE_PROJECT_NAME:-ledger}-journal working_dir: /srv entrypoint: ["/bin/sh", "/srv/run.sh"] diff --git a/docs/info/package-lock.json b/docs/info/package-lock.json index 54a71a39..6088e216 100644 --- a/docs/info/package-lock.json +++ b/docs/info/package-lock.json @@ -1,12 +1,12 @@ { "name": "sync-web-info", - "version": "1.4.2", + "version": "1.4.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sync-web-info", - "version": "1.4.2", + "version": "1.4.3", "devDependencies": { "@astrojs/mdx": "^4.0.8", "@astrojs/starlight": "^0.35.0", diff --git a/docs/info/package.json b/docs/info/package.json index 71c03224..6ec36faa 100644 --- a/docs/info/package.json +++ b/docs/info/package.json @@ -1,7 +1,7 @@ { "name": "sync-web-info", "private": true, - "version": "1.4.2", + "version": "1.4.3", "description": "Synchronic Web documentation site (Astro + Starlight).", "scripts": { "dev": "astro dev", diff --git a/records/lisp/interface.scm b/records/lisp/interface.scm index d3ab25ff..02949bad 100644 --- a/records/lisp/interface.scm +++ b/records/lisp/interface.scm @@ -90,7 +90,8 @@ ;; define secret store and admin list (call `(lambda (root) ((root 'set!) '(interface secret) (sync-hash (expression->byte-vector ,(config-ref 'interface-secret)))) - ((root 'set!) '(interface admins) ,(config-ref 'admins)) + (if ,(config-ref 'clear?) + ((root 'set!) '(interface admins) ,(config-ref 'admins))) ((root 'set!) '(interface endpoint) ,(config-ref 'interface)) ((root 'set!) '(interface name) ,(config-ref 'name)) ((root 'set!) '(interface push-enabled?) ,(config-ref 'push-enabled?)))) diff --git a/records/tests/test-interface.scm b/records/tests/test-interface.scm index e1e587a4..316eac45 100644 --- a/records/tests/test-interface.scm +++ b/records/tests/test-interface.scm @@ -33,6 +33,12 @@ ',standard-src ',chain-src ',tree-src ',ledger-src ',document-src) #t journal)) + (define (journal-update journal admin-secret interface-secret admins) + (sync-call `(*eval* ,admin-secret + (,interface-src ,(interface-config #f admin-secret interface-secret admins 4) + ',standard-src ',chain-src ',tree-src ',ledger-src ',document-src)) + #t journal)) + (define (journal-query journal query) (sync-call query #t journal)) @@ -362,6 +368,11 @@ (let ((query '((function *admins-get*)))) (assert (interface-query journal-1 interface-1 query 'alice) '(alice))) + ; updating installed code/config does not reset the runtime-managed admin list + (assert (journal-update journal-1 "pass-1" interface-1 '(bob)) "Installed interface") + (let ((query '((function *admins-get*)))) + (assert (interface-query journal-1 interface-1 query 'alice) '(alice))) + ; admins can update the public window through the interface-level admin operation (let ((query '((function *window-set*) (arguments ((value 3)))))) (assert (interface-query journal-1 interface-1 query 'alice) #t)) diff --git a/services/explorer/package-lock.json b/services/explorer/package-lock.json index 472e7bf9..ed3f5337 100644 --- a/services/explorer/package-lock.json +++ b/services/explorer/package-lock.json @@ -1,12 +1,12 @@ { "name": "synchronic-web-explorer", - "version": "1.4.2", + "version": "1.4.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "synchronic-web-explorer", - "version": "1.4.2", + "version": "1.4.3", "dependencies": { "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^13.4.0", diff --git a/services/explorer/package.json b/services/explorer/package.json index 9d8ae7e8..fde2e105 100644 --- a/services/explorer/package.json +++ b/services/explorer/package.json @@ -1,6 +1,6 @@ { "name": "synchronic-web-explorer", - "version": "1.4.2", + "version": "1.4.3", "description": "UI front-end for exploring a synchronic web journal", "private": true, "homepage": "/explorer", diff --git a/services/explorer/src/components/AdminPanel.css b/services/explorer/src/components/AdminPanel.css index d236aedf..fa118fb7 100644 --- a/services/explorer/src/components/AdminPanel.css +++ b/services/explorer/src/components/AdminPanel.css @@ -135,7 +135,7 @@ } .segmented-option.active { - background: var(--accent-color, #2563eb); + background: var(--blue); color: #ffffff; font-weight: 700; box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.08); diff --git a/services/explorer/src/components/AdminPanel.test.tsx b/services/explorer/src/components/AdminPanel.test.tsx index c94136c0..a823bc8f 100644 --- a/services/explorer/src/components/AdminPanel.test.tsx +++ b/services/explorer/src/components/AdminPanel.test.tsx @@ -37,7 +37,7 @@ describe('AdminPanel', () => { expect(screen.getByPlaceholderText('Remote name')).toHaveValue('journal-0'); - fireEvent.click(screen.getByRole('button', { name: 'Create bridge' })); + fireEvent.click(screen.getByRole('button', { name: 'Create' })); await waitFor(() => { expect(journalService.saveBridge).toHaveBeenCalledWith({ @@ -60,7 +60,7 @@ describe('AdminPanel', () => { fireEvent.change(screen.getByPlaceholderText('Remote endpoint'), { target: { value: 'ftp://beagle.sync-web.org/api/v1/journal/interface' }, }); - fireEvent.click(screen.getByRole('button', { name: 'Create bridge' })); + fireEvent.click(screen.getByRole('button', { name: 'Create' })); expect(await screen.findByText('Remote endpoint must be an http:// or https:// URL.')).toBeInTheDocument(); expect(journalService.saveBridge).not.toHaveBeenCalled(); diff --git a/services/explorer/src/components/AdminPanel.tsx b/services/explorer/src/components/AdminPanel.tsx index 1c9d4437..f65a5b82 100644 --- a/services/explorer/src/components/AdminPanel.tsx +++ b/services/explorer/src/components/AdminPanel.tsx @@ -445,7 +445,7 @@ const AdminPanel: React.FC = ({ journalService, currentUser, re type="submit" disabled={isSaving || !bridgeName.trim() || !bridgeEndpoint.trim()} > - Create bridge + Create diff --git a/services/gateway/package-lock.json b/services/gateway/package-lock.json index 179c7519..d2cd8d27 100644 --- a/services/gateway/package-lock.json +++ b/services/gateway/package-lock.json @@ -1,12 +1,12 @@ { "name": "synchronic-gateway", - "version": "1.4.2", + "version": "1.4.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "synchronic-gateway", - "version": "1.4.2", + "version": "1.4.3", "dependencies": { "@fastify/static": "^9.1.3", "@fastify/swagger": "^9.5.1", diff --git a/services/gateway/package.json b/services/gateway/package.json index 8a03e238..8eaf7b3a 100644 --- a/services/gateway/package.json +++ b/services/gateway/package.json @@ -1,6 +1,6 @@ { "name": "synchronic-gateway", - "version": "1.4.2", + "version": "1.4.3", "private": true, "description": "Web-facing API gateway for the Synchronic Web general API.", "scripts": { diff --git a/services/gateway/ui/package-lock.json b/services/gateway/ui/package-lock.json index d45e0bf8..354d6702 100644 --- a/services/gateway/ui/package-lock.json +++ b/services/gateway/ui/package-lock.json @@ -1,12 +1,12 @@ { "name": "sync-web-auth-ui", - "version": "1.4.2", + "version": "1.4.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sync-web-auth-ui", - "version": "1.4.2", + "version": "1.4.3", "dependencies": { "@ory/client-fetch": "^1.22.37", "@ory/elements": "^0.9.0", diff --git a/services/gateway/ui/package.json b/services/gateway/ui/package.json index b8a8239e..cabbf38f 100644 --- a/services/gateway/ui/package.json +++ b/services/gateway/ui/package.json @@ -1,6 +1,6 @@ { "name": "sync-web-auth-ui", - "version": "1.4.2", + "version": "1.4.3", "private": true, "scripts": { "dev": "vite", diff --git a/services/workbench/package-lock.json b/services/workbench/package-lock.json index 01eb03d2..787c45fc 100644 --- a/services/workbench/package-lock.json +++ b/services/workbench/package-lock.json @@ -1,12 +1,12 @@ { "name": "synchronic-workbench", - "version": "1.4.2", + "version": "1.4.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "synchronic-workbench", - "version": "1.4.2", + "version": "1.4.3", "dependencies": { "@codemirror/lang-json": "^6.0.1", "@codemirror/language": "^6.10.3", diff --git a/services/workbench/package.json b/services/workbench/package.json index 5ce37201..b6327eae 100644 --- a/services/workbench/package.json +++ b/services/workbench/package.json @@ -1,6 +1,6 @@ { "name": "synchronic-workbench", - "version": "1.4.2", + "version": "1.4.3", "private": true, "homepage": "/workbench", "dependencies": {