Skip to content

@keymaster/connect / KeymasterConnectClient

Class: KeymasterConnectClient

Official browser client for Keymaster Connect V1.

One client owns one reusable Session Window. It validates both the exact message origin and the source window, correlates concurrent requests by id, supports protocol cancellation through AbortSignal, and keeps persistent Connect sessions separate from the window transport lifecycle.

Examples

Direct popup login

ts
const keymaster = new KeymasterConnectClient({
  targetOrigin: keymasterDeploymentOrigin
});

const session = await keymaster.login({
  text: "Sign in to Example",
  claims: ["profile.name"]
});

appView launch

ts
const keymaster = new KeymasterConnectClient({
  targetOrigin: sessionWindowOrigin,
  mode: "appView"
});

await keymaster.connect();
const session = await keymaster.launch({ launchToken, appIdentity });

Connect

Create, restore, revoke, or launch a persistent Connect session.

login()

login(params, options?): Promise<ConnectLoginResult>

Calls connect.login to create a persistent Connect session.

Parameters

params

ConnectLoginParams

options?

KeymasterRequestOptions

Returns

Promise<ConnectLoginResult>


resume()

resume(connectSessionId, options?): Promise<ConnectResumeResult>

Calls connect.resume to restore the unlock runtime for a persistent session.

Parameters

connectSessionId

string

options?

KeymasterRequestOptions

Returns

Promise<ConnectResumeResult>


logout()

logout(connectSessionId, options?): Promise<ConnectLogoutResult>

Calls connect.logout to revoke a persistent Connect session.

Parameters

connectSessionId

string

options?

KeymasterRequestOptions

Returns

Promise<ConnectLogoutResult>


launch()

launch(params, options?): Promise<ConnectLaunchResult>

Calls connect.launch to consume the one-time launch token of an appView session.

Parameters

params

ConnectLaunchParams

options?

KeymasterRequestOptions

Returns

Promise<ConnectLaunchResult>

Identity

Read signed identity claims or sign an application intent.

identityGet()

identityGet(params, options?): Promise<IdentityGetResult>

Calls identity.get to return signed identity claims for the session owner.

Parameters

params

IdentityGetParams

options?

KeymasterRequestOptions

Returns

Promise<IdentityGetResult>


intentSign()

intentSign(params, options?): Promise<IntentSignResult>

Calls intent.sign to sign caller-provided bytes with a human-readable intent.

Parameters

params

IntentSignParams

options?

KeymasterRequestOptions

Returns

Promise<IntentSignResult>

Cipher

Encrypt and decrypt origin-bound application data.

cipherEncrypt()

cipherEncrypt(params, options?): Promise<CipherEncryptResult>

Calls cipher.encrypt to encrypt origin-bound application data.

Parameters

params

CipherEncryptParams

options?

KeymasterRequestOptions

Returns

Promise<CipherEncryptResult>


cipherDecrypt()

cipherDecrypt(params, options?): Promise<CipherDecryptResult>

Calls cipher.decrypt to decrypt data previously returned by cipher.encrypt.

Parameters

params

CipherDecryptParams

options?

KeymasterRequestOptions

Returns

Promise<CipherDecryptResult>

Transfer

Transfer BSV or negotiate a fee-pool operation.

p2pkhTransfer()

p2pkhTransfer(params, options?): Promise<P2pkhTransferResult>

Calls p2pkh.transfer to request a controlled mainnet BSV transfer.

Parameters

params

P2pkhTransferParams

options?

KeymasterRequestOptions

Returns

Promise<P2pkhTransferResult>


feepoolPrepare()

feepoolPrepare(params, options?): Promise<FeepoolPrepareResult>

Calls feepool.prepare to prepare the next fee-pool operation.

Parameters

params

FeepoolPrepareParams

options?

KeymasterRequestOptions

Returns

Promise<FeepoolPrepareResult>


feepoolCommit()

feepoolCommit(params, options?): Promise<FeepoolCommitResult>

Calls feepool.commit to verify counterparty signatures and commit a prepared fee-pool operation.

Parameters

params

FeepoolCommitParams

options?

KeymasterRequestOptions

Returns

Promise<FeepoolCommitResult>

AppMsg

Send and query private application messages. Incoming messages arrive as appmsg.message_received through KeymasterConnectOptions.onEvent.

appmsgSend()

appmsgSend(params, options?): Promise<AppMsgSendResult>

Calls appmsg.send to send an end-to-end sealed application message.

Parameters

params

AppMsgSendParams

options?

KeymasterRequestOptions

Returns

Promise<AppMsgSendResult>


appmsgList()

appmsgList(params, options?): Promise<AppMsgListResult>

Calls appmsg.list to incrementally list messages visible to the session.

Parameters

params

AppMsgListParams

options?

KeymasterRequestOptions

Returns

Promise<AppMsgListResult>


appmsgGet()

appmsgGet(params, options?): Promise<AppMsgGetResult>

Calls appmsg.get to fetch one message visible to the session.

Parameters

params

AppMsgGetParams

options?

KeymasterRequestOptions

Returns

Promise<AppMsgGetResult>

Broadcast

Publish broadcasts and manage subscriptions. Incoming broadcasts arrive as broadcast.message_received through KeymasterConnectOptions.onEvent.

broadcastPublish()

broadcastPublish(params, options?): Promise<BroadcastPublishResult>

Calls broadcast.publish to publish a message signed by the session owner.

Parameters

params

BroadcastPublishParams

options?

KeymasterRequestOptions

Returns

Promise<BroadcastPublishResult>


broadcastSubscriptionSet()

broadcastSubscriptionSet(params, options?): Promise<BroadcastSubscriptionSetResult>

Calls broadcast.subscription_set to replace the caller's channel set.

Parameters

params

BroadcastSubscriptionSetParams

options?

KeymasterRequestOptions

Returns

Promise<BroadcastSubscriptionSetResult>


broadcastSubscriptionList()

broadcastSubscriptionList(params, options?): Promise<BroadcastSubscriptionListResult>

Calls broadcast.subscription_list to read the caller's channel set.

Parameters

params

BroadcastSubscriptionListParams

options?

KeymasterRequestOptions

Returns

Promise<BroadcastSubscriptionListResult>

Storage

Manage app-scoped directories, objects, and multipart uploads.

storageList()

storageList(params, options?): Promise<StorageListResult>

Calls storage.list to list paths in the verified application's namespace.

Parameters

params

StorageListParams

options?

KeymasterRequestOptions

Returns

Promise<StorageListResult>


storageDirectoryCreate()

storageDirectoryCreate(params, options?): Promise<StorageDirectoryResult>

Calls storage.directory.create to create an app-scoped directory.

Parameters

params

StorageDirectoryParams

options?

KeymasterRequestOptions

Returns

Promise<StorageDirectoryResult>


storageDirectoryDelete()

storageDirectoryDelete(params, options?): Promise<StorageDirectoryResult>

Calls storage.directory.delete to delete an app-scoped directory.

Parameters

params

StorageDirectoryParams

options?

KeymasterRequestOptions

Returns

Promise<StorageDirectoryResult>


storagePut()

storagePut(params, options?): Promise<StoragePutResult>

Calls storage.put to write an app-scoped object.

Parameters

params

StoragePutParams

options?

KeymasterRequestOptions

Returns

Promise<StoragePutResult>


storageGet()

storageGet(params, options?): Promise<StorageGetResult>

Calls storage.get to read an app-scoped object.

Parameters

params

StorageGetParams

options?

KeymasterRequestOptions

Returns

Promise<StorageGetResult>


storageDelete()

storageDelete(params, options?): Promise<StorageDeleteResult>

Calls storage.delete to delete an app-scoped object.

Parameters

params

StorageDeleteParams

options?

KeymasterRequestOptions

Returns

Promise<StorageDeleteResult>


storageUploadBegin()

storageUploadBegin(params, options?): Promise<StorageUploadBeginResult>

Calls storage.upload.begin to start a multipart object upload.

Parameters

params

StorageUploadBeginParams

options?

KeymasterRequestOptions

Returns

Promise<StorageUploadBeginResult>


storageUploadPart()

storageUploadPart(params, options?): Promise<StorageUploadPartResult>

Calls storage.upload.part to append one part to a multipart upload.

Parameters

params

StorageUploadPartParams

options?

KeymasterRequestOptions

Returns

Promise<StorageUploadPartResult>


storageUploadComplete()

storageUploadComplete(params, options?): Promise<StoragePutResult>

Calls storage.upload.complete to finalize a multipart upload.

Parameters

params

StorageUploadCompleteParams

options?

KeymasterRequestOptions

Returns

Promise<StoragePutResult>


storageUploadAbort()

storageUploadAbort(params, options?): Promise<StorageUploadAbortResult>

Calls storage.upload.abort to discard a multipart upload.

Parameters

params

StorageUploadAbortParams

options?

KeymasterRequestOptions

Returns

Promise<StorageUploadAbortResult>

Transport

Manage the Session Window and send lower-level protocol requests.

state

Get Signature

get state(): KeymasterConnectState

Current browser transport state.

Returns

KeymasterConnectState


connect()

connect(): Promise<void>

Establishes the browser transport.

Popup mode opens the Session Window and waits for ready. appView mode adopts window.opener, installs the listener, and sends the child ready message without ever opening a fallback popup.

Returns

Promise<void>


request()

request<M>(method, params, options?): Promise<MethodResult<M>>

Sends any public Connect method with compile-time parameter and result inference.

Type Parameters

M

M extends "identity.get" | "intent.sign" | "cipher.encrypt" | "cipher.decrypt" | "p2pkh.transfer" | "feepool.prepare" | "feepool.commit" | "connect.login" | "connect.resume" | "connect.logout" | "connect.launch" | "appmsg.send" | "appmsg.list" | "appmsg.get" | "broadcast.publish" | "broadcast.subscription_set" | "broadcast.subscription_list" | "storage.list" | "storage.directory.create" | "storage.directory.delete" | "storage.put" | "storage.get" | "storage.delete" | "storage.upload.begin" | "storage.upload.part" | "storage.upload.complete" | "storage.upload.abort"

Parameters

method

M

params

MethodParams<M>

options?

KeymasterRequestOptions = {}

Returns

Promise<MethodResult<M>>


cancel()

cancel(requestId, reason?): boolean

Cancels a locally pending request. Keymaster only cancels work that has not entered execution; cancellation is therefore best-effort remotely.

Parameters

requestId

string

reason?

unknown = ...

Returns

boolean


close()

close(): void

Tears down the local transport. This does not revoke persistent Connect sessions; call logout before closing when revocation is required.

Returns

void

Constructors

Constructor

new KeymasterConnectClient(options): KeymasterConnectClient

Parameters

options

KeymasterConnectOptions

Returns

KeymasterConnectClient

Capability access without key custody.