@mobvibe/cli 0.1.7 → 0.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,42 +1,64 @@
1
1
  # @mobvibe/cli
2
2
 
3
- CLI daemon for remote-claude (mobvibe) - connects ACP-compatible agents to the gateway.
3
+ CLI daemon for mobvibe connects ACP-compatible agents to the gateway with end-to-end encryption.
4
4
 
5
5
  ## Installation
6
6
 
7
+ Requires [Bun](https://bun.sh/) 1.0+.
8
+
7
9
  ```bash
8
10
  npm install -g @mobvibe/cli
9
11
  ```
10
12
 
11
- ## Usage
12
-
13
- ### Login (first time)
13
+ ## Quick Start
14
14
 
15
15
  ```bash
16
+ # 1. Authenticate and generate E2EE master secret
16
17
  mobvibe login
18
+
19
+ # 2. Start the daemon
20
+ mobvibe start
17
21
  ```
18
22
 
19
- Opens browser for authentication, registers your machine.
23
+ After login, copy the displayed master secret and paste it into WebUI Settings > End-to-End Encryption > Pair.
20
24
 
21
- ### Start daemon
25
+ ## Commands
22
26
 
23
- ```bash
24
- mobvibe start
25
- ```
27
+ | Command | Description |
28
+ |---------|-------------|
29
+ | `mobvibe login` | Authenticate with email/password, generate master secret, register device |
30
+ | `mobvibe logout` | Remove stored credentials |
31
+ | `mobvibe auth-status` | Show authentication and key status |
32
+ | `mobvibe start [--gateway <url>]` | Start daemon |
33
+ | `mobvibe stop` | Stop daemon |
34
+ | `mobvibe status` | Show daemon status |
35
+ | `mobvibe logs [-f] [-n <lines>]` | View daemon logs |
36
+ | `mobvibe e2ee show` | Display master secret for WebUI pairing |
37
+ | `mobvibe e2ee status` | Show E2EE key status (public key fingerprints) |
38
+ | `mobvibe compact [--session <id>]` | Compact WAL database |
26
39
 
27
- ### Check status
40
+ ## E2EE
28
41
 
29
- ```bash
30
- mobvibe status
31
- ```
42
+ All session content is encrypted on the CLI before sending to the gateway. The gateway routes events but cannot read their content.
32
43
 
33
- ### Stop daemon
44
+ **Login flow:**
45
+ 1. `mobvibe login` prompts for email and password (password masked)
46
+ 2. Authenticates via Better Auth session cookie
47
+ 3. Generates a 32-byte master secret and derives an Ed25519 keypair
48
+ 4. Registers the device public key with the gateway
49
+ 5. Saves the master secret to `~/.mobvibe/credentials.json` (mode 0600)
50
+ 6. Displays the master secret (base64) for WebUI pairing
34
51
 
35
- ```bash
36
- mobvibe stop
37
- ```
52
+ **Runtime encryption:**
53
+ - Each session gets a random DEK (data encryption key)
54
+ - Events are encrypted with `crypto_secretbox` (XSalsa20-Poly1305)
55
+ - DEKs are wrapped with `crypto_box_seal` so only paired devices can unwrap them
56
+ - CLI authenticates to the gateway with Ed25519 signed tokens (no stored API keys)
38
57
 
39
58
  ## Environment Variables
40
59
 
41
- - `MOBVIBE_GATEWAY_URL` - Gateway server URL (default: from login)
42
- - `ANTHROPIC_AUTH_TOKEN` - Required for Claude Code backend
60
+ | Variable | Description |
61
+ |----------|-------------|
62
+ | `MOBVIBE_GATEWAY_URL` | Gateway server URL (default: production) |
63
+ | `MOBVIBE_HOME` | CLI home directory (default: `~/.mobvibe`) |
64
+ | `MOBVIBE_MASTER_SECRET` | Override master secret (base64, instead of credentials file) |
package/bin/mobvibe.mjs CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env bun
2
2
  import { dirname, join } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
 
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,98 @@
1
+ import { type ContentBlock, type CreateTerminalRequest, type CreateTerminalResponse, type Implementation, type KillTerminalCommandRequest, type KillTerminalCommandResponse, type LoadSessionResponse, type NewSessionResponse, type PromptResponse, type ReleaseTerminalRequest, type ReleaseTerminalResponse, type RequestPermissionRequest, type RequestPermissionResponse, type SessionInfo, type SessionNotification, type TerminalOutputRequest, type TerminalOutputResponse, type WaitForTerminalExitRequest, type WaitForTerminalExitResponse } from "@agentclientprotocol/sdk";
2
+ import { type AcpConnectionState, type AgentSessionCapabilities, type ErrorDetail, type TerminalOutputEvent } from "@mobvibe/shared";
3
+ import type { AcpBackendConfig } from "../config.js";
4
+ type ClientInfo = {
5
+ name: string;
6
+ version: string;
7
+ };
8
+ export type AcpBackendStatus = {
9
+ backendId: string;
10
+ backendLabel: string;
11
+ state: AcpConnectionState;
12
+ command: string;
13
+ args: string[];
14
+ connectedAt?: string;
15
+ error?: ErrorDetail;
16
+ sessionId?: string;
17
+ pid?: number;
18
+ };
19
+ type SessionUpdateListener = (notification: SessionNotification) => void;
20
+ export declare class AcpConnection {
21
+ private readonly options;
22
+ private connection?;
23
+ private process?;
24
+ private closedPromise?;
25
+ private state;
26
+ private connectedAt?;
27
+ private error?;
28
+ private sessionId?;
29
+ private agentInfo?;
30
+ private agentCapabilities?;
31
+ private readonly sessionUpdateEmitter;
32
+ private readonly statusEmitter;
33
+ private readonly terminalOutputEmitter;
34
+ private permissionHandler?;
35
+ private terminals;
36
+ constructor(options: {
37
+ backend: AcpBackendConfig;
38
+ client: ClientInfo;
39
+ });
40
+ getStatus(): AcpBackendStatus;
41
+ getAgentInfo(): Implementation | undefined;
42
+ /**
43
+ * Get the agent's session capabilities.
44
+ */
45
+ getSessionCapabilities(): AgentSessionCapabilities;
46
+ /**
47
+ * Check if the agent supports session/list.
48
+ */
49
+ supportsSessionList(): boolean;
50
+ /**
51
+ * Check if the agent supports session/load.
52
+ */
53
+ supportsSessionLoad(): boolean;
54
+ /**
55
+ * List sessions from the agent (session/list).
56
+ * @param params Optional filter parameters
57
+ * @returns List of session info from the agent
58
+ */
59
+ listSessions(params?: {
60
+ cursor?: string;
61
+ cwd?: string;
62
+ }): Promise<{
63
+ sessions: SessionInfo[];
64
+ nextCursor?: string;
65
+ }>;
66
+ /**
67
+ * Load a historical session with message history replay (session/load).
68
+ * @param sessionId The session ID to load
69
+ * @param cwd The working directory
70
+ * @returns Load session response with modes/models state
71
+ */
72
+ loadSession(sessionId: string, cwd: string): Promise<LoadSessionResponse>;
73
+ setPermissionHandler(handler?: (params: RequestPermissionRequest) => Promise<RequestPermissionResponse>): void;
74
+ onTerminalOutput(listener: (payload: TerminalOutputEvent) => void): () => void;
75
+ onSessionUpdate(listener: SessionUpdateListener): () => void;
76
+ onStatusChange(listener: (status: AcpBackendStatus) => void): () => void;
77
+ private updateStatus;
78
+ connect(): Promise<void>;
79
+ createSession(options?: {
80
+ cwd?: string;
81
+ }): Promise<NewSessionResponse>;
82
+ prompt(sessionId: string, prompt: ContentBlock[]): Promise<PromptResponse>;
83
+ cancel(sessionId: string): Promise<void>;
84
+ setSessionMode(sessionId: string, modeId: string): Promise<void>;
85
+ setSessionModel(sessionId: string, modelId: string): Promise<void>;
86
+ createTerminal(params: CreateTerminalRequest): Promise<CreateTerminalResponse>;
87
+ getTerminalOutput(params: TerminalOutputRequest): Promise<TerminalOutputResponse>;
88
+ waitForTerminalExit(params: WaitForTerminalExitRequest): Promise<WaitForTerminalExitResponse>;
89
+ killTerminal(params: KillTerminalCommandRequest): Promise<KillTerminalCommandResponse>;
90
+ releaseTerminal(params: ReleaseTerminalRequest): Promise<ReleaseTerminalResponse>;
91
+ disconnect(): Promise<void>;
92
+ private ensureReady;
93
+ private createSessionInternal;
94
+ private emitSessionUpdate;
95
+ private handlePermissionRequest;
96
+ private stopProcess;
97
+ }
98
+ export {};
@@ -0,0 +1,178 @@
1
+ import type { AvailableCommand, RequestPermissionResponse } from "@agentclientprotocol/sdk";
2
+ import { type AcpSessionInfo, type DiscoverSessionsRpcResult, type PermissionDecisionPayload, type PermissionRequestPayload, type SessionEvent, type SessionEventsParams, type SessionEventsResponse, type SessionSummary, type SessionsChangedPayload, type StopReason } from "@mobvibe/shared";
3
+ import type { AcpBackendConfig, CliConfig } from "../config.js";
4
+ import type { CliCryptoService } from "../e2ee/crypto-service.js";
5
+ import { AcpConnection } from "./acp-connection.js";
6
+ type SessionRecord = {
7
+ sessionId: string;
8
+ title: string;
9
+ backendId: string;
10
+ backendLabel: string;
11
+ connection: AcpConnection;
12
+ createdAt: Date;
13
+ updatedAt: Date;
14
+ cwd?: string;
15
+ agentName?: string;
16
+ modelId?: string;
17
+ modelName?: string;
18
+ modeId?: string;
19
+ modeName?: string;
20
+ availableModes?: Array<{
21
+ id: string;
22
+ name: string;
23
+ }>;
24
+ availableModels?: Array<{
25
+ id: string;
26
+ name: string;
27
+ description?: string | null;
28
+ }>;
29
+ availableCommands?: AvailableCommand[];
30
+ unsubscribe?: () => void;
31
+ unsubscribeTerminal?: () => void;
32
+ isAttached?: boolean;
33
+ attachedAt?: Date;
34
+ /** Current WAL revision for this session */
35
+ revision: number;
36
+ };
37
+ export declare class SessionManager {
38
+ private readonly config;
39
+ private sessions;
40
+ private discoveredSessions;
41
+ private backendById;
42
+ private permissionRequests;
43
+ private readonly permissionRequestEmitter;
44
+ private readonly permissionResultEmitter;
45
+ private readonly sessionsChangedEmitter;
46
+ private readonly sessionAttachedEmitter;
47
+ private readonly sessionDetachedEmitter;
48
+ private readonly sessionEventEmitter;
49
+ private readonly walStore;
50
+ private readonly cryptoService?;
51
+ constructor(config: CliConfig, cryptoService?: CliCryptoService);
52
+ createConnection(backend: AcpBackendConfig): AcpConnection;
53
+ listSessions(): SessionSummary[];
54
+ /**
55
+ * List all sessions: active sessions merged with persisted discovered sessions.
56
+ * Used for the gateway heartbeat so that `sessions:list` sends the
57
+ * complete set, allowing the gateway to replace its cache.
58
+ */
59
+ listAllSessions(): SessionSummary[];
60
+ getSession(sessionId: string): SessionRecord | undefined;
61
+ /**
62
+ * Get the current WAL revision for a session.
63
+ */
64
+ getSessionRevision(sessionId: string): number | undefined;
65
+ onPermissionRequest(listener: (payload: PermissionRequestPayload) => void): () => void;
66
+ onPermissionResult(listener: (payload: PermissionDecisionPayload) => void): () => void;
67
+ onSessionsChanged(listener: (payload: SessionsChangedPayload) => void): () => void;
68
+ onSessionAttached(listener: (payload: {
69
+ sessionId: string;
70
+ machineId: string;
71
+ attachedAt: string;
72
+ }) => void): () => void;
73
+ onSessionDetached(listener: (payload: {
74
+ sessionId: string;
75
+ machineId: string;
76
+ detachedAt: string;
77
+ reason: "agent_exit" | "cli_disconnect" | "gateway_disconnect" | "unknown";
78
+ }) => void): () => void;
79
+ /**
80
+ * Listen for session events (WAL-persisted events with seq/revision).
81
+ */
82
+ onSessionEvent(listener: (event: SessionEvent) => void): () => void;
83
+ /**
84
+ * Query session events from the WAL.
85
+ */
86
+ getSessionEvents(params: SessionEventsParams): SessionEventsResponse;
87
+ /**
88
+ * Get unacked events for a session/revision (for reconnection replay).
89
+ */
90
+ getUnackedEvents(sessionId: string, revision: number): SessionEvent[];
91
+ /**
92
+ * Acknowledge events up to a given sequence.
93
+ */
94
+ ackEvents(sessionId: string, revision: number, upToSeq: number): void;
95
+ recordTurnEnd(sessionId: string, stopReason: StopReason): void;
96
+ /**
97
+ * Write an event to the WAL and emit it.
98
+ */
99
+ private writeAndEmitEvent;
100
+ private emitSessionsChanged;
101
+ private emitSessionAttached;
102
+ private emitSessionDetached;
103
+ listPendingPermissions(sessionId: string): PermissionRequestPayload[];
104
+ resolvePermissionRequest(sessionId: string, requestId: string, outcome: RequestPermissionResponse["outcome"]): PermissionDecisionPayload;
105
+ private resolveBackend;
106
+ createSession(options: {
107
+ cwd?: string;
108
+ title?: string;
109
+ backendId: string;
110
+ }): Promise<SessionSummary>;
111
+ private buildPermissionRequestPayload;
112
+ private handlePermissionRequest;
113
+ private cancelPermissionRequests;
114
+ updateTitle(sessionId: string, title: string): SessionSummary;
115
+ touchSession(sessionId: string): void;
116
+ setSessionMode(sessionId: string, modeId: string): Promise<SessionSummary>;
117
+ setSessionModel(sessionId: string, modelId: string): Promise<SessionSummary>;
118
+ cancelSession(sessionId: string): Promise<boolean>;
119
+ closeSession(sessionId: string): Promise<boolean>;
120
+ closeAll(): Promise<void>;
121
+ /**
122
+ * Archive a session: close if active, delete WAL messages, mark as archived.
123
+ */
124
+ archiveSession(sessionId: string): Promise<void>;
125
+ /**
126
+ * Archive multiple sessions at once.
127
+ */
128
+ bulkArchiveSessions(sessionIds: string[]): Promise<{
129
+ archivedCount: number;
130
+ }>;
131
+ /**
132
+ * Shutdown the session manager and close resources.
133
+ */
134
+ shutdown(): Promise<void>;
135
+ /**
136
+ * Get previously discovered sessions from WAL storage.
137
+ * Filters out sessions that are already loaded.
138
+ * @param backendId Optional backend ID to filter by
139
+ * @returns List of discovered sessions not currently loaded
140
+ */
141
+ getPersistedDiscoveredSessions(backendId?: string): AcpSessionInfo[];
142
+ /**
143
+ * Discover sessions persisted by the ACP agent.
144
+ * Creates a temporary connection to query sessions.
145
+ * @param options Optional parameters for discovery
146
+ * @returns List of discovered sessions and agent capabilities
147
+ */
148
+ discoverSessions(options: {
149
+ cwd?: string;
150
+ backendId: string;
151
+ cursor?: string;
152
+ }): Promise<DiscoverSessionsRpcResult>;
153
+ /**
154
+ * Load a historical session from the ACP agent.
155
+ * This will replay the session's message history.
156
+ * @param sessionId The session ID to load
157
+ * @param cwd The working directory
158
+ * @param backendId Optional backend ID
159
+ * @returns The loaded session summary
160
+ */
161
+ loadSession(sessionId: string, cwd: string, backendId: string): Promise<SessionSummary>;
162
+ /**
163
+ * Reload a historical session from the ACP agent.
164
+ * Replays session history even if the session is already loaded.
165
+ */
166
+ reloadSession(sessionId: string, cwd: string, backendId: string): Promise<SessionSummary>;
167
+ private applySessionUpdateToRecord;
168
+ /**
169
+ * Map a SessionNotification to WAL event kind and write to WAL.
170
+ */
171
+ private writeSessionUpdateToWal;
172
+ /**
173
+ * Set up event subscriptions for a session record.
174
+ */
175
+ private setupSessionSubscriptions;
176
+ private buildSummary;
177
+ }
178
+ export {};
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Credentials management for CLI authentication.
3
+ * Stores API key in ~/.mobvibe/credentials.json
4
+ */
5
+ export interface Credentials {
6
+ /** Base64-encoded master secret (32 bytes) — the single root credential */
7
+ masterSecret: string;
8
+ /** When the credentials were created */
9
+ createdAt: number;
10
+ /** Optional: custom gateway URL (user can manually set this) */
11
+ gatewayUrl?: string;
12
+ }
13
+ /**
14
+ * Load credentials from the credentials file.
15
+ * Returns null if no credentials exist.
16
+ */
17
+ export declare function loadCredentials(): Promise<Credentials | null>;
18
+ /**
19
+ * Save credentials to the credentials file.
20
+ */
21
+ export declare function saveCredentials(credentials: Credentials): Promise<void>;
22
+ /**
23
+ * Delete the credentials file.
24
+ */
25
+ export declare function deleteCredentials(): Promise<void>;
26
+ /**
27
+ * Check if credentials exist.
28
+ */
29
+ export declare function hasCredentials(): Promise<boolean>;
30
+ /**
31
+ * Get the master secret from credentials.
32
+ * Also checks MOBVIBE_MASTER_SECRET env var as override.
33
+ * Returns base64-encoded string.
34
+ */
35
+ export declare function getMasterSecret(): Promise<string | undefined>;
36
+ /**
37
+ * Get the gateway URL with the following priority:
38
+ * 1. MOBVIBE_GATEWAY_URL env var
39
+ * 2. gatewayUrl in credentials file
40
+ * 3. Default production URL
41
+ */
42
+ export declare function getGatewayUrl(): Promise<string>;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Login command for CLI authentication.
3
+ * Generates a master secret, authenticates via email/password,
4
+ * and registers the device public key with the gateway.
5
+ */
6
+ export interface LoginResult {
7
+ success: boolean;
8
+ error?: string;
9
+ }
10
+ export declare function login(): Promise<LoginResult>;
11
+ /**
12
+ * Logout - delete stored credentials.
13
+ */
14
+ export declare function logout(): Promise<void>;
15
+ /**
16
+ * Show current login status.
17
+ */
18
+ export declare function loginStatus(): Promise<void>;
@@ -0,0 +1,7 @@
1
+ import type { MobvibeUserConfig } from "@mobvibe/shared";
2
+ export type ConfigLoadResult = {
3
+ config: MobvibeUserConfig | null;
4
+ errors: string[];
5
+ path: string;
6
+ };
7
+ export declare const loadUserConfig: (homePath: string) => Promise<ConfigLoadResult>;
@@ -0,0 +1,40 @@
1
+ import type { AcpBackendId } from "@mobvibe/shared";
2
+ export type AcpBackendConfig = {
3
+ id: AcpBackendId;
4
+ label: string;
5
+ command: string;
6
+ args: string[];
7
+ envOverrides?: Record<string, string>;
8
+ };
9
+ export type CompactionConfig = {
10
+ /** Enable automatic compaction */
11
+ enabled: boolean;
12
+ /** Keep acked events for this many days (default: 7) */
13
+ ackedEventRetentionDays: number;
14
+ /** Always keep this many latest revisions (default: 2) */
15
+ keepLatestRevisionsCount: number;
16
+ /** Run compaction on daemon startup (default: false) */
17
+ runOnStartup: boolean;
18
+ /** Run compaction every N hours (default: 24) */
19
+ runIntervalHours: number;
20
+ /** Safety: minimum events to keep per session (default: 1000) */
21
+ minEventsToKeep: number;
22
+ };
23
+ export declare const DEFAULT_COMPACTION_CONFIG: CompactionConfig;
24
+ export type CliConfig = {
25
+ gatewayUrl: string;
26
+ acpBackends: AcpBackendConfig[];
27
+ clientName: string;
28
+ clientVersion: string;
29
+ homePath: string;
30
+ logPath: string;
31
+ pidFile: string;
32
+ walDbPath: string;
33
+ machineId: string;
34
+ hostname: string;
35
+ platform: string;
36
+ userConfigPath?: string;
37
+ userConfigErrors?: string[];
38
+ compaction: CompactionConfig;
39
+ };
40
+ export declare const getCliConfig: () => Promise<CliConfig>;
@@ -0,0 +1,27 @@
1
+ import type { CliConfig } from "../config.js";
2
+ type DaemonStatus = {
3
+ running: boolean;
4
+ pid?: number;
5
+ connected?: boolean;
6
+ sessionCount?: number;
7
+ };
8
+ export declare class DaemonManager {
9
+ private readonly config;
10
+ constructor(config: CliConfig);
11
+ ensureHomeDirectory(): Promise<void>;
12
+ getPid(): Promise<number | null>;
13
+ writePidFile(pid: number): Promise<void>;
14
+ removePidFile(): Promise<void>;
15
+ status(): Promise<DaemonStatus>;
16
+ start(options?: {
17
+ foreground?: boolean;
18
+ }): Promise<void>;
19
+ stop(): Promise<void>;
20
+ private spawnBackground;
21
+ runForeground(): Promise<void>;
22
+ logs(options?: {
23
+ follow?: boolean;
24
+ lines?: number;
25
+ }): Promise<void>;
26
+ }
27
+ export {};
@@ -0,0 +1,36 @@
1
+ import { EventEmitter } from "node:events";
2
+ import type { SessionManager } from "../acp/session-manager.js";
3
+ import type { CliConfig } from "../config.js";
4
+ import type { CliCryptoService } from "../e2ee/crypto-service.js";
5
+ type SocketClientOptions = {
6
+ config: CliConfig;
7
+ sessionManager: SessionManager;
8
+ /** Crypto service for E2EE */
9
+ cryptoService: CliCryptoService;
10
+ };
11
+ export declare class SocketClient extends EventEmitter {
12
+ private readonly options;
13
+ private socket;
14
+ private connected;
15
+ private reconnectAttempts;
16
+ private heartbeatInterval?;
17
+ constructor(options: SocketClientOptions);
18
+ private setupEventHandlers;
19
+ private setupRpcHandlers;
20
+ private setupSessionManagerListeners;
21
+ private listSessionResources;
22
+ private listAllFiles;
23
+ private sendRpcResponse;
24
+ private sendRpcError;
25
+ private register;
26
+ private startHeartbeat;
27
+ private stopHeartbeat;
28
+ /**
29
+ * Replay unacked events for all active sessions after reconnection.
30
+ */
31
+ private replayUnackedEvents;
32
+ connect(): void;
33
+ disconnect(): void;
34
+ isConnected(): boolean;
35
+ }
36
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ import type { CryptoKeyPair, SessionEvent } from "@mobvibe/shared";
2
+ export declare class CliCryptoService {
3
+ readonly authKeyPair: CryptoKeyPair;
4
+ private contentKeyPair;
5
+ private sessionDeks;
6
+ private wrappedDekCache;
7
+ constructor(masterSecret: Uint8Array);
8
+ /**
9
+ * Initialize a DEK for a session. Generates a random DEK and wraps it
10
+ * with the content public key.
11
+ */
12
+ initSessionDek(sessionId: string): {
13
+ dek: Uint8Array;
14
+ wrappedDek: string;
15
+ };
16
+ /**
17
+ * Set an existing DEK for a session (e.g., loaded from WAL).
18
+ */
19
+ setSessionDek(sessionId: string, dek: Uint8Array): void;
20
+ /**
21
+ * Encrypt a session event's payload in place.
22
+ * Returns a new event with the payload replaced by an EncryptedPayload.
23
+ */
24
+ encryptEvent(event: SessionEvent): SessionEvent;
25
+ /**
26
+ * Get the wrapped DEK for a session, or null if not initialized.
27
+ */
28
+ getWrappedDek(sessionId: string): string | null;
29
+ /**
30
+ * Get the base64-encoded auth public key.
31
+ */
32
+ getAuthPublicKeyBase64(): string;
33
+ }
package/dist/index.d.ts CHANGED
@@ -1,3 +1 @@
1
- declare function run(): Promise<void>;
2
-
3
- export { run };
1
+ export declare function run(): Promise<void>;