mirror of
https://github.com/profullstack/logicsrc.git
synced 2026-08-14 06:47:28 +00:00
feat(credential-sharing): end-to-end-encrypted team credential sharing
Adds a `team` credential provider + team/member management so teammates can share secrets by email instead of passing .env files over chat. Fully E2E: the server only ever stores ciphertext, per-member sealed vault keys, and public keys — it never sees a plaintext value or the vault DEK. Plugin (@logicsrc/plugin-credential-sharing) - crypto.ts: X25519 identity keys, per-vault DEK (secretbox), DEK sealed to each member's pubkey (crypto_box_seal), value encrypt/decrypt (libsodium) - identity.ts: local ~/.logicsrc/identity.json (0600) holding the device key + API token; never uploads the secret key - client.ts: typed /api/credshare client - providers/team.ts: `team:<slug>/<vault>` CredentialProvider (inspect, readValues=decrypt, write=encrypt, rollback); fingerprints match env so env<->team diffs line up - fixes latent libsodium-wrappers ESM load bug (createRequire) here + in github-secrets Server (commandboard-api /api/credshare) - zero-knowledge router: email-code auth, keys, teams, members, invites, vaults, sealed grants, ciphertext secrets, audit; membership authz in app - CredShareStore abstraction: in-memory (dev/tests) + Supabase (prod) - Resend email transport for login codes + invites (no-op -> echoes locally) - supabase migration: credshare_* tables, deny-by-default RLS CLI - real `logicsrc login` (email code -> token + key upload) - `logicsrc teams create/list/invite/accept/members/vaults/grant/push/pull` Web (logicsrc.com/teams + /teams/accept) - management surface only (browser holds no private key, never decrypts): login, view teams/members/vaults, invite, accept Tests: crypto round-trip, server contract (invite->accept->push->grant->pull + authz boundaries), and a real HTTP+client+crypto E2E asserting the server never holds plaintext. Full workspace build + tests green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
257d581331
commit
f057589d66
28 changed files with 2869 additions and 17 deletions
|
|
@ -53,9 +53,44 @@ export {
|
|||
dopplerProvider,
|
||||
railwayProvider,
|
||||
githubSecretsProvider,
|
||||
teamProvider,
|
||||
parseEnv,
|
||||
applyEnv
|
||||
} from "./providers/index.js";
|
||||
export {
|
||||
TeamClient,
|
||||
TeamApiError,
|
||||
type TeamClientOptions,
|
||||
type RemoteUser,
|
||||
type RemoteTeam,
|
||||
type RemoteMember,
|
||||
type RemoteVault,
|
||||
type RemoteSecret,
|
||||
type RemoteGrantRow
|
||||
} from "./client.js";
|
||||
export {
|
||||
generateIdentityKeyPair,
|
||||
generateVaultKey,
|
||||
wrapVaultKey,
|
||||
unwrapVaultKey,
|
||||
encryptValue,
|
||||
decryptValue,
|
||||
publicKeyForSecret,
|
||||
type IdentityKeyPair,
|
||||
type SealedValue
|
||||
} from "./crypto.js";
|
||||
export {
|
||||
loadOrCreateIdentity,
|
||||
readIdentity,
|
||||
saveIdentity,
|
||||
updateIdentity,
|
||||
requireAuth,
|
||||
verifyIdentityIntegrity,
|
||||
identityPath,
|
||||
logicsrcHome,
|
||||
defaultApiUrl,
|
||||
type LocalIdentity
|
||||
} from "./identity.js";
|
||||
export {
|
||||
createFileCredentialStore,
|
||||
createMemoryCredentialStore,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue