Shuttle Docs

updateWallet

Apply an explicit change set: name, rights and policy assignments.

GroupWallet authority and policy applicability
RuntimesTypeScript browser/server, React client adapter, Python/Go server
Updated2026-09-15

Status

Proposed target SDK behavior for implementation. It is not an available SDK or evidence of backend support.

Business action#

Atomically request a wallet metadata and authority change: rename it, grant or revoke a right, or assign or remove a policy from its effective scope.

Proposed call#

updateWallet(
  input: UpdateWalletInput,
  options?: CallOptions,
): Promise<Operation<UpdateWalletResult>>

TypeScript uses requestId, walletId, expectedVersion, changes, actor and optional authorization. changes is a non-empty array of explicit discriminated actions; undefined omits optional data and null never clears a field implicitly.

Go uses RequestID, WalletID, ExpectedVersion, Changes, Actor and optional Authorization, each with the stable JSON name. Change variants make clear/set/remove behavior explicit; zero values and nil do not request a destructive change.

Required input:

The change set distinguishes:

Removing a restrictive policy is not the same action as revoking an actor's right. The SDK must preserve that distinction in inputs, results and audit identity.

Control mode and controlling embedded-owner/server-service identity are immutable in this base surface. Granting ordinary rights cannot transfer ownership, service control or mode; any migration requires a separate accepted contract.

Result and effects#

Success returns the next wallet version, mode, controlling identity, grants, limits and effective policy assignments. Requested changes commit as one backend-defined atomic outcome or none do.

For revocation, committing the next wallet version and denying new authorization by the revoked actor are one atomic effect. An operation not yet at an irreversible signing, export-disclosure or network-submission boundary must pass an execution authorization check and is denied after revocation even if previously staged or durably approved. A signature, export disclosure or submitted transaction already produced before the boundary cannot be clawed back; its in-flight result remains visible for reconciliation.

Same-ID/same-material replay converges; changed material conflicts. Unknown outcomes are recovered through getOperation(requestId). Denial, expiry or insufficient agreement creates no partial grant, revocation, assignment or removal.

Authorization#

Existing authority may complete the call. Otherwise the SDK either uses the application handler and submits its response once or returns requiresAction for explicit continuation; it cannot do both. Proof binds the exact actor, wallet, request ID, expected version and full change set and is accumulated separately from immutable operation material.

A browser session supplies identity only. Embedded changes require owner/admin authority; server-wallet changes require service/admin authority and cannot be granted by end-user login. A session or UI role cannot elevate itself.

Acceptance#

See getWallet, createPolicy, and getOperation.