Files
Shade/scripts/publish-shade.sh
Sterister f5f42fe557 release(v4.3.0): browser persistence via @shade/storage-indexeddb
Ship an official IndexedDB-backed StorageProvider so browser-based Shade
consumers persist identity, prekeys, sessions, retired identities,
peer-verification state and stream-resume rows across tab refresh and
browser restart. Closes the gap that forced browser apps onto
storage:"memory" (regenerated identity each load, orphaned device
records server-side).

- New package @shade/storage-indexeddb (4.3.0): full StorageProvider
  conformance, schema v1, idb-backed; bumpPeerIdentityVersion is wrapped
  in a single readwrite IDB transaction (atomic, vs SQLite's
  read-then-upsert race).
- @shade/sdk resolveStorage() accepts { type: 'indexeddb', dbName? } via
  dynamic import (lazy, optional dep — same pattern as
  @shade/storage-postgres). Named StorageSpec type now reused by
  ResolvedConfig.
- Tests: 16 new tests in shade-storage-indexeddb (StorageProvider
  surface + peer-verifications + full E2EE conversation surviving a
  simulated tab reload). Run on fake-indexeddb.
- Lockstep version bump 4.2.1 → 4.3.0 across all 25 packages.
- Publish scripts updated to include the new package.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-05 17:35:02 +02:00

138 lines
3.5 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
SHADE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
BASHRC="$HOME/.bashrc"
REGISTRY="https://gt.zyon.no"
GITEA_USER="Stian"
PACKAGES=(
core
proto
crypto-web
observability
keychain
key-transparency
storage-sqlite
storage-postgres
storage-indexeddb
storage-encrypted
streams
transport
transport-bridge
transport-webrtc
server
inbox-server
inbox
transfer
files
recovery
observer
dashboard
sdk
widgets
cli
)
echo "Shade publish-script — kjører fra $SHADE_DIR"
echo
FORCE_NEW_TOKEN=0
if [ "${1:-}" = "--new-token" ]; then
FORCE_NEW_TOKEN=1
fi
if [ -n "${GITEA_TOKEN:-}" ] && [ $FORCE_NEW_TOKEN -eq 0 ]; then
TOKEN="$GITEA_TOKEN"
echo "Bruker lagret GITEA_TOKEN (starter med ${TOKEN:0:8}…)"
echo "(Kjør med --new-token for å bytte token)"
else
echo "Lim inn GITEA_TOKEN og trykk Enter:"
read -r TOKEN
if [ -z "${TOKEN:-}" ]; then
echo "Tomt token, avbryter."
exit 1
fi
echo "Token-lengde: ${#TOKEN} tegn"
echo "Token starter med: ${TOKEN:0:8}"
fi
echo "Sjekker at tokenet ikke er ugyldig ..."
HTTP_STATUS=$(curl -sS -o /dev/null -w "%{http_code}" \
-H "Authorization: token $TOKEN" \
"$REGISTRY/api/v1/user")
if [ "$HTTP_STATUS" = "401" ]; then
echo "401: tokenet er ugyldig eller utløpt. Lag et nytt i Gitea."
exit 1
fi
echo "Token akseptert av server (HTTP $HTTP_STATUS)."
FIRST_PKG_JSON="$SHADE_DIR/packages/shade-core/package.json"
if [ ! -f "$FIRST_PKG_JSON" ]; then
echo "Fant ikke $FIRST_PKG_JSON"
exit 1
fi
CURRENT_VERSION=$(grep -oP '"version"\s*:\s*"\K[^"]+' "$FIRST_PKG_JSON" | head -1)
echo
echo "Nåværende versjon i package.json: $CURRENT_VERSION"
echo "Sjekker om $CURRENT_VERSION allerede finnes i registry ..."
CONFLICT_FOUND=0
for pkg in "${PACKAGES[@]}"; do
body=$(curl -sS -H "Authorization: token $TOKEN" \
"$REGISTRY/api/packages/$GITEA_USER/npm/@shade/$pkg" 2>/dev/null || true)
if echo "$body" | grep -q "\"$CURRENT_VERSION\":[[:space:]]*{"; then
CONFLICT_FOUND=1
echo " konflikt: @shade/$pkg@$CURRENT_VERSION finnes allerede"
fi
done
if [ $CONFLICT_FOUND -eq 1 ]; then
echo
echo "Versjon $CURRENT_VERSION er allerede publisert."
echo "Skriv inn ny versjon (f.eks. 0.1.1) og trykk Enter:"
read -r NEW_VERSION
if [ -z "${NEW_VERSION:-}" ]; then
echo "Tom versjon, avbryter."
exit 1
fi
if [ "$NEW_VERSION" = "$CURRENT_VERSION" ]; then
echo "Ny versjon er lik nåværende, avbryter."
exit 1
fi
echo "Oppdaterer alle pakker til $NEW_VERSION ..."
for pkg in "${PACKAGES[@]}"; do
pkg_dir="$SHADE_DIR/packages/shade-$pkg"
if [ -f "$pkg_dir/package.json" ]; then
(cd "$pkg_dir" && npm pkg set version="$NEW_VERSION" >/dev/null)
echo " shade-$pkg$NEW_VERSION"
fi
done
else
echo "Ingen konflikter — bruker eksisterende versjon $CURRENT_VERSION."
fi
EXISTING_LINE=$(grep '^export GITEA_TOKEN=' "$BASHRC" 2>/dev/null || true)
if [ "$EXISTING_LINE" != "export GITEA_TOKEN=$TOKEN" ]; then
if [ -n "$EXISTING_LINE" ]; then
sed -i '/^export GITEA_TOKEN=/d' "$BASHRC"
fi
echo "export GITEA_TOKEN=$TOKEN" >> "$BASHRC"
echo "Lagret GITEA_TOKEN i $BASHRC"
fi
export GITEA_TOKEN="$TOKEN"
cd "$SHADE_DIR"
echo
echo "Type-check (strict TS) før publish ..."
echo "----------------------------------------"
bun run scripts/typecheck-all.ts
echo
echo "Kjører scripts/publish-all.ts i $SHADE_DIR"
echo "----------------------------------------"
bun run scripts/publish-all.ts