@privos_ai/app-server 0.7.3 → 0.8.0
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 +39 -6
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/relay/relay-client.d.ts +80 -20
- package/dist/relay/relay-client.d.ts.map +1 -1
- package/dist/relay/relay-client.js +342 -59
- package/dist/relay/relay-client.js.map +1 -1
- package/dist/relay/standalone-identity.d.ts +43 -0
- package/dist/relay/standalone-identity.d.ts.map +1 -1
- package/dist/relay/standalone-identity.js +120 -0
- package/dist/relay/standalone-identity.js.map +1 -1
- package/package.json +11 -12
package/README.md
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
Business-agnostic PrivOS MCP App server runtime for **Direct HTTP** and **Relay WebSocket**.
|
|
4
4
|
|
|
5
|
+
> **0.8.0 breaking change.** `PairingResult` is now a discriminated union
|
|
6
|
+
> (`legacy-complete` / `pending-approval` / `complete`) with a required `state`
|
|
7
|
+
> field, and `resumeStandalonePairing()` is added for durable app-announced
|
|
8
|
+
> manifest pairing. Callers that read `pairing.trust`/`pairing.pairingVersion`
|
|
9
|
+
> directly must branch on `pairing.state` first. Apps that only use `serveApp`
|
|
10
|
+
> are unaffected. See [Standalone production mode](#standalone-production-mode-relay-pairing).
|
|
11
|
+
|
|
5
12
|
## Install
|
|
6
13
|
|
|
7
14
|
```bash
|
|
@@ -367,18 +374,44 @@ a one-time Relay WebSocket URL and run in production against a paired, persisted
|
|
|
367
374
|
identity — no secret ever lives in a world-readable `.env`.
|
|
368
375
|
|
|
369
376
|
```ts
|
|
370
|
-
import { pairOverWebSocket } from '@privos_ai/app-server';
|
|
377
|
+
import { pairOverWebSocket, resumeStandalonePairing } from '@privos_ai/app-server';
|
|
371
378
|
|
|
372
379
|
// Prints the Hub fingerprint (SSH-host-key style) and, by default, persists
|
|
373
380
|
// ./privos-standalone-identity.json at mode 0600 (override with
|
|
374
381
|
// PRIVOS_STANDALONE_IDENTITY_FILE).
|
|
375
|
-
await pairOverWebSocket(pairingUrl, {
|
|
382
|
+
const pairing = await pairOverWebSocket(pairingUrl, {
|
|
383
|
+
name: publisherManifest.title,
|
|
384
|
+
version: publisherManifest.version,
|
|
385
|
+
manifest: publisherManifest, // the exact published schema-v3 document
|
|
386
|
+
});
|
|
387
|
+
|
|
388
|
+
if (pairing.state === 'pending-approval') {
|
|
389
|
+
// Run once after the Hub owner approves. This works after process restart:
|
|
390
|
+
// the pending OAuth/app/manifest binding is stored separately at mode 0600.
|
|
391
|
+
const completed = await resumeStandalonePairing();
|
|
392
|
+
if (completed.state !== 'complete') throw new Error('Still awaiting approval');
|
|
393
|
+
}
|
|
376
394
|
```
|
|
377
395
|
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
396
|
+
If the initial socket closes after the Hub durably registers the app but before
|
|
397
|
+
the result reaches this process, call `pairOverWebSocket` again explicitly with
|
|
398
|
+
the **same pairing URL and exact published manifest**. A compatible Hub recovers
|
|
399
|
+
the already-persisted app, pairing, OAuth client, client secret, manifest,
|
|
400
|
+
permission contract, declared ceiling, and Hub-key identity for up to 24 hours;
|
|
401
|
+
it never creates or rotates another credential. The SDK deliberately does not
|
|
402
|
+
retry or poll on its own. A changed URL, manifest, app identity, creator,
|
|
403
|
+
permission contract, OAuth binding, ceiling, or Hub key fails closed.
|
|
404
|
+
|
|
405
|
+
A Hub that replies with pairing payload v2 (`pairingVersion: 2`) uses a
|
|
406
|
+
discriminated `pending-approval` / `complete` contract. Pending state persists
|
|
407
|
+
the exact app id, OAuth client, pairing id, manifest digest, permission-contract
|
|
408
|
+
hash, declared ceiling, and Hub fingerprint in a separate owner-only file, but
|
|
409
|
+
contains no dispatch trust and can never satisfy production readiness. Approval
|
|
410
|
+
activates that same OAuth/app identity; `resumeStandalonePairing()` verifies all
|
|
411
|
+
affinities, the approved ceiling, and Hub trust before atomically writing the
|
|
412
|
+
final identity and consuming the pending file. A v1 Hub returns
|
|
413
|
+
`state: 'legacy-complete'` and remains non-persistent. Load the final identity
|
|
414
|
+
and run the app with `resolveRuntimeMode()` picking the transport:
|
|
382
415
|
|
|
383
416
|
```ts
|
|
384
417
|
import {
|
package/dist/index.d.ts
CHANGED
|
@@ -18,13 +18,13 @@ export { createDirectRouter } from './direct/express-router.js';
|
|
|
18
18
|
export type { DirectRouterOptions } from './direct/express-router.js';
|
|
19
19
|
export { createHttpIngressApp, startHttpIngress, resolveHttpIngressListen, } from './direct/http-ingress.js';
|
|
20
20
|
export type { HttpIngressAppOptions, HttpIngressListenOptions, HttpIngressHandle, ReadinessCheckResult, ResolveHttpIngressListenOptions, } from './direct/http-ingress.js';
|
|
21
|
-
export { pairOverWebSocket, pairAndAwaitApproval, pairFromDescriptor, connectRelay, } from './relay/relay-client.js';
|
|
22
|
-
export type { PairAppMeta, PairingResult, PairOverWebSocketOptions, RelayClientOptions, RelayHandle, } from './relay/relay-client.js';
|
|
21
|
+
export { pairOverWebSocket, pairAndAwaitApproval, resumeStandalonePairing, pairFromDescriptor, connectRelay, } from './relay/relay-client.js';
|
|
22
|
+
export type { PairAppMeta, PairingResult, LegacyPairingResult, PendingPairingResult, CompletedPairingResult, PairOverWebSocketOptions, ResumeStandalonePairingOptions, RelayClientOptions, RelayHandle, } from './relay/relay-client.js';
|
|
23
23
|
export { rawDataToText, MessageTooLargeError } from './relay/message-adapter.js';
|
|
24
24
|
export { DEFAULT_HUB_USER_TOKEN_JWKS_PATH, buildHubUserTokenAuthOptions, extractRelayUserTokenCredential, validateHubUserTokenOrigin, } from './relay/hub-user-token-actor.js';
|
|
25
25
|
export type { HubUserTokenAuthOptions } from './relay/hub-user-token-actor.js';
|
|
26
|
-
export { DEFAULT_STANDALONE_IDENTITY_FILE, StandaloneIdentityError, loadStandaloneIdentity, saveStandaloneIdentity, rotateStandaloneIdentity, standaloneIdentityFileExists, standaloneHubFingerprint, assertStandaloneIdentityShape, } from './relay/standalone-identity.js';
|
|
27
|
-
export type { StandaloneIdentityV2, LoadedStandaloneIdentity, StandaloneIdentityErrorCode, } from './relay/standalone-identity.js';
|
|
26
|
+
export { DEFAULT_STANDALONE_IDENTITY_FILE, DEFAULT_STANDALONE_PENDING_IDENTITY_FILE, StandaloneIdentityError, loadStandaloneIdentity, loadStandalonePendingIdentity, saveStandaloneIdentity, saveStandalonePendingIdentity, consumeStandalonePendingIdentity, rotateStandaloneIdentity, standaloneIdentityFileExists, standaloneHubFingerprint, assertStandaloneIdentityShape, assertStandalonePendingIdentityShape, resolveStandalonePendingIdentityFilePath, } from './relay/standalone-identity.js';
|
|
27
|
+
export type { StandaloneIdentityV2, StandalonePendingIdentityV2, LoadedStandaloneIdentity, LoadedStandalonePendingIdentity, StandaloneIdentityErrorCode, } from './relay/standalone-identity.js';
|
|
28
28
|
export { STANDALONE_SECRET_ROTATE_METHOD, STANDALONE_TRUST_ROTATE_METHOD, STANDALONE_CAPABILITIES_CHANGED_METHOD, STANDALONE_AGENT_BOT_CREDENTIAL_METHOD, StandaloneControlError, isStandaloneControlMethod, createStandaloneRelayIdentityController, loadStandaloneRelayIdentityController, } from './relay/standalone-control.js';
|
|
29
29
|
export type { StandaloneEffectiveCapabilities, StandaloneRelayIdentityController, StandaloneRelayIdentityControllerOptions, } from './relay/standalone-control.js';
|
|
30
30
|
export { checkManifestDigestDrift, createStandaloneReadinessCheck, } from './relay/standalone-readiness.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -9,10 +9,10 @@ export { parseJsonRpcMessage, parseJsonText, isMcpNotificationMethod, } from './
|
|
|
9
9
|
export { AppServerRuntime, DEFAULT_MAX_MESSAGE_BYTES, DEFAULT_MAX_BUFFERED_BYTES, encodeInFlightId, extractDirectCallerCredential, relayCallerAuthSurface, resolveCallerCredential, ephemeralSessionScope, } from './runtime.js';
|
|
10
10
|
export { createDirectRouter } from './direct/express-router.js';
|
|
11
11
|
export { createHttpIngressApp, startHttpIngress, resolveHttpIngressListen, } from './direct/http-ingress.js';
|
|
12
|
-
export { pairOverWebSocket, pairAndAwaitApproval, pairFromDescriptor, connectRelay, } from './relay/relay-client.js';
|
|
12
|
+
export { pairOverWebSocket, pairAndAwaitApproval, resumeStandalonePairing, pairFromDescriptor, connectRelay, } from './relay/relay-client.js';
|
|
13
13
|
export { rawDataToText, MessageTooLargeError } from './relay/message-adapter.js';
|
|
14
14
|
export { DEFAULT_HUB_USER_TOKEN_JWKS_PATH, buildHubUserTokenAuthOptions, extractRelayUserTokenCredential, validateHubUserTokenOrigin, } from './relay/hub-user-token-actor.js';
|
|
15
|
-
export { DEFAULT_STANDALONE_IDENTITY_FILE, StandaloneIdentityError, loadStandaloneIdentity, saveStandaloneIdentity, rotateStandaloneIdentity, standaloneIdentityFileExists, standaloneHubFingerprint, assertStandaloneIdentityShape, } from './relay/standalone-identity.js';
|
|
15
|
+
export { DEFAULT_STANDALONE_IDENTITY_FILE, DEFAULT_STANDALONE_PENDING_IDENTITY_FILE, StandaloneIdentityError, loadStandaloneIdentity, loadStandalonePendingIdentity, saveStandaloneIdentity, saveStandalonePendingIdentity, consumeStandalonePendingIdentity, rotateStandaloneIdentity, standaloneIdentityFileExists, standaloneHubFingerprint, assertStandaloneIdentityShape, assertStandalonePendingIdentityShape, resolveStandalonePendingIdentityFilePath, } from './relay/standalone-identity.js';
|
|
16
16
|
export { STANDALONE_SECRET_ROTATE_METHOD, STANDALONE_TRUST_ROTATE_METHOD, STANDALONE_CAPABILITIES_CHANGED_METHOD, STANDALONE_AGENT_BOT_CREDENTIAL_METHOD, StandaloneControlError, isStandaloneControlMethod, createStandaloneRelayIdentityController, loadStandaloneRelayIdentityController, } from './relay/standalone-control.js';
|
|
17
17
|
export { checkManifestDigestDrift, createStandaloneReadinessCheck, } from './relay/standalone-readiness.js';
|
|
18
18
|
export { AGENT_BOT_CREDENTIAL_ENV_KEY, AGENT_BOT_USER_ID_ENV_KEY, AGENT_BOT_CREDENTIAL_OPERATOR_INSTRUCTION, readAgentBotCredential, getAgentBotCredentialState, setAdoptedAgentBotCredential, markAgentBotCredentialLive, markAgentBotCredentialRejected, resetAgentBotCredentialOutcomeForTests, } from './relay/agent-bot-credential.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQxE,OAAO,EACN,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,8BAA8B,EAC9B,6BAA6B,GAC7B,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAEjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EACN,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,GAC1B,MAAM,kCAAkC,CAAC;AAO1C,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,cAAc,GACd,MAAM,sBAAsB,CAAC;AAW9B,OAAO,EACN,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,WAAW,EACX,YAAY,EACZ,oBAAoB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,mBAAmB,EACnB,aAAa,EACb,uBAAuB,GACvB,MAAM,wBAAwB,CAAC;AAahC,OAAO,EACN,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAC1B,gBAAgB,EAChB,6BAA6B,EAC7B,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EACN,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,GACxB,MAAM,0BAA0B,CAAC;AASlC,OAAO,EACN,iBAAiB,EACjB,oBAAoB,EACpB,kBAAkB,EAClB,YAAY,GACZ,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQxE,OAAO,EACN,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,8BAA8B,EAC9B,6BAA6B,GAC7B,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAEjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EACN,sBAAsB,EACtB,oBAAoB,EACpB,0BAA0B,GAC1B,MAAM,kCAAkC,CAAC;AAO1C,OAAO,EACN,eAAe,EACf,gBAAgB,EAChB,cAAc,GACd,MAAM,sBAAsB,CAAC;AAW9B,OAAO,EACN,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,cAAc,EACd,WAAW,EACX,YAAY,EACZ,oBAAoB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,mBAAmB,EACnB,aAAa,EACb,uBAAuB,GACvB,MAAM,wBAAwB,CAAC;AAahC,OAAO,EACN,gBAAgB,EAChB,yBAAyB,EACzB,0BAA0B,EAC1B,gBAAgB,EAChB,6BAA6B,EAC7B,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,GACrB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAEhE,OAAO,EACN,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,GACxB,MAAM,0BAA0B,CAAC;AASlC,OAAO,EACN,iBAAiB,EACjB,oBAAoB,EACpB,uBAAuB,EACvB,kBAAkB,EAClB,YAAY,GACZ,MAAM,yBAAyB,CAAC;AAYjC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACjF,OAAO,EACN,gCAAgC,EAChC,4BAA4B,EAC5B,+BAA+B,EAC/B,0BAA0B,GAC1B,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EACN,gCAAgC,EAChC,wCAAwC,EACxC,uBAAuB,EACvB,sBAAsB,EACtB,6BAA6B,EAC7B,sBAAsB,EACtB,6BAA6B,EAC7B,gCAAgC,EAChC,wBAAwB,EACxB,4BAA4B,EAC5B,wBAAwB,EACxB,6BAA6B,EAC7B,oCAAoC,EACpC,wCAAwC,GACxC,MAAM,gCAAgC,CAAC;AAQxC,OAAO,EACN,+BAA+B,EAC/B,8BAA8B,EAC9B,sCAAsC,EACtC,sCAAsC,EACtC,sBAAsB,EACtB,yBAAyB,EACzB,uCAAuC,EACvC,qCAAqC,GACrC,MAAM,+BAA+B,CAAC;AAMvC,OAAO,EACN,wBAAwB,EACxB,8BAA8B,GAC9B,MAAM,iCAAiC,CAAC;AAOzC,OAAO,EACN,4BAA4B,EAC5B,yBAAyB,EACzB,yCAAyC,EACzC,sBAAsB,EACtB,0BAA0B,EAC1B,4BAA4B,EAC5B,0BAA0B,EAC1B,8BAA8B,EAC9B,sCAAsC,GACtC,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EACN,uBAAuB,EACvB,2CAA2C,EAC3C,oCAAoC,EACpC,6BAA6B,EAC7B,2BAA2B,GAC3B,MAAM,mCAAmC,CAAC;AAO3C,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AASlE,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAQzE,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,uBAAuB,EACvB,yBAAyB,GACzB,MAAM,iCAAiC,CAAC;AAWzC,OAAO,EACN,sCAAsC,EACtC,oCAAoC,EACpC,yCAAyC,EACzC,qCAAqC,EACrC,4BAA4B,EAC5B,+BAA+B,EAC/B,+BAA+B,EAC/B,2BAA2B,EAC3B,gCAAgC,EAChC,uBAAuB,EACvB,gCAAgC,GAChC,MAAM,kCAAkC,CAAC;AAkB1C,OAAO,EACN,gCAAgC,EAChC,+CAA+C,EAC/C,6CAA6C,GAC7C,MAAM,uCAAuC,CAAC;AAc/C,OAAO,EACN,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,kCAAkC,GAClC,MAAM,qBAAqB,CAAC"}
|
|
@@ -12,34 +12,72 @@ export interface PairAppMeta {
|
|
|
12
12
|
scopes?: string[];
|
|
13
13
|
permissions?: AppPermissionDescriptor[];
|
|
14
14
|
/**
|
|
15
|
-
* The app's own `privos-app.json`, announced at
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
15
|
+
* The app's own exact published schema-v3 `privos-app.json`, announced at
|
|
16
|
+
* pairing so no admin ever handles the file — sent verbatim, never
|
|
17
|
+
* synthesized from metadata. A Hub that accepts it registers a v3 app
|
|
18
|
+
* carrying this contract, declared but unapproved: the app holds
|
|
19
|
+
* credentials and no grant until an admin approves a ceiling, and no
|
|
20
|
+
* dispatch trust until the pairing completes against the approved app.
|
|
21
|
+
* Omit it to register a legacy relay app.
|
|
20
22
|
*/
|
|
21
|
-
manifest?: unknown
|
|
23
|
+
manifest?: Record<string, unknown>;
|
|
22
24
|
}
|
|
23
|
-
export
|
|
25
|
+
export type PairingResult = LegacyPairingResult | PendingPairingResult | CompletedPairingResult;
|
|
26
|
+
export interface LegacyPairingResult {
|
|
27
|
+
state: 'legacy-complete';
|
|
24
28
|
privosUrl: string;
|
|
25
29
|
clientId: string;
|
|
26
30
|
clientSecret: string;
|
|
27
31
|
mcpAppId?: string;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
fingerprint?: string;
|
|
33
|
-
/** Absolute path the standalone identity file was written to, when persisted. */
|
|
34
|
-
identityFilePath?: string;
|
|
32
|
+
pairingVersion?: undefined;
|
|
33
|
+
trust?: undefined;
|
|
34
|
+
fingerprint?: undefined;
|
|
35
|
+
identityFilePath?: undefined;
|
|
35
36
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* but the app is granted nothing and carries no dispatch trust
|
|
39
|
-
*
|
|
37
|
+
* Set when a Hub generation that predates the discriminated pending
|
|
38
|
+
* contract acknowledged a manifest-announced registration: credentials are
|
|
39
|
+
* real, but the app is granted nothing and carries no dispatch trust until
|
|
40
|
+
* an admin approves a ceiling — poll with `pairAndAwaitApproval` or pair
|
|
41
|
+
* again once approved.
|
|
40
42
|
*/
|
|
41
43
|
awaitingApproval?: boolean;
|
|
42
44
|
}
|
|
45
|
+
export interface PendingPairingResult {
|
|
46
|
+
state: 'pending-approval';
|
|
47
|
+
privosUrl: string;
|
|
48
|
+
clientId: string;
|
|
49
|
+
clientSecret: string;
|
|
50
|
+
mcpAppId: string;
|
|
51
|
+
pairingVersion: 2;
|
|
52
|
+
pairingId: string;
|
|
53
|
+
oauthClientId: string;
|
|
54
|
+
manifestDigest: string;
|
|
55
|
+
permissionContractHash: string;
|
|
56
|
+
declaredPermissionCeiling: readonly string[];
|
|
57
|
+
hubKid: string;
|
|
58
|
+
fingerprint: string;
|
|
59
|
+
pendingIdentityFilePath?: string;
|
|
60
|
+
trust?: undefined;
|
|
61
|
+
identityFilePath?: undefined;
|
|
62
|
+
/** Always true: this registration awaits an admin-approved permission ceiling. */
|
|
63
|
+
awaitingApproval: true;
|
|
64
|
+
}
|
|
65
|
+
export interface CompletedPairingResult {
|
|
66
|
+
state: 'complete';
|
|
67
|
+
privosUrl: string;
|
|
68
|
+
clientId: string;
|
|
69
|
+
clientSecret: string;
|
|
70
|
+
mcpAppId: string;
|
|
71
|
+
pairingVersion: 2;
|
|
72
|
+
trust: RuntimeDispatchTrustV3;
|
|
73
|
+
/** `SHA256:<hubKid>` — print/compare out-of-band, SSH-host-key style. */
|
|
74
|
+
fingerprint: string;
|
|
75
|
+
manifestDigest: string;
|
|
76
|
+
approvedPermissionCeiling?: readonly string[];
|
|
77
|
+
/** Absolute path the standalone identity file was written to, when persisted. */
|
|
78
|
+
identityFilePath?: string;
|
|
79
|
+
awaitingApproval?: undefined;
|
|
80
|
+
}
|
|
43
81
|
export interface PairOverWebSocketOptions {
|
|
44
82
|
timeoutMs?: number;
|
|
45
83
|
/**
|
|
@@ -49,6 +87,8 @@ export interface PairOverWebSocketOptions {
|
|
|
49
87
|
persistIdentityFile?: boolean;
|
|
50
88
|
/** Overrides `PRIVOS_STANDALONE_IDENTITY_FILE` / the SDK default. */
|
|
51
89
|
identityFilePath?: string;
|
|
90
|
+
/** Overrides the separate non-dispatchable pending credential file. */
|
|
91
|
+
pendingIdentityFilePath?: string;
|
|
52
92
|
/** Receives the fingerprint line for out-of-band operator verification; defaults to `console.log`. */
|
|
53
93
|
onFingerprint?: (fingerprint: string) => void;
|
|
54
94
|
/** `fetch` used by `pairAndAwaitApproval` to poll for approval. Defaults to the global. */
|
|
@@ -60,6 +100,11 @@ export interface PairOverWebSocketOptions {
|
|
|
60
100
|
/** Called on each poll while still awaiting approval (e.g. to print a heartbeat). */
|
|
61
101
|
onAwaitingApproval?: () => void;
|
|
62
102
|
}
|
|
103
|
+
export interface ResumeStandalonePairingOptions extends PairOverWebSocketOptions {
|
|
104
|
+
fetchImpl?: typeof fetch;
|
|
105
|
+
WebSocketImpl?: typeof WebSocket;
|
|
106
|
+
oauthTimeoutMs?: number;
|
|
107
|
+
}
|
|
63
108
|
export interface RelayClientOptions {
|
|
64
109
|
privosUrl: string;
|
|
65
110
|
/**
|
|
@@ -134,12 +179,20 @@ export interface RelayHandle {
|
|
|
134
179
|
* create — same discipline as the Hub's own identity file), then prints the
|
|
135
180
|
* Hub fingerprint for out-of-band operator verification. Set
|
|
136
181
|
* `persistIdentityFile: false` to opt out and handle persistence yourself.
|
|
182
|
+
*
|
|
183
|
+
* If the socket closes after the Hub has persisted registration but before
|
|
184
|
+
* this function receives the result, the caller may explicitly invoke this
|
|
185
|
+
* function again with the same pairing URL and byte-semantically identical
|
|
186
|
+
* published manifest during the Hub's bounded recovery window. There is no
|
|
187
|
+
* automatic retry or polling loop: a changed URL, manifest, or authority must
|
|
188
|
+
* fail at the Hub rather than being hidden by client-side retry behavior.
|
|
137
189
|
*/
|
|
138
190
|
export declare function pairOverWebSocket(pairUrl: string, appMeta: PairAppMeta, WebSocketImpl?: typeof WebSocket, options?: PairOverWebSocketOptions): Promise<PairingResult>;
|
|
139
191
|
/**
|
|
140
192
|
* One-command pairing (device-authorization flow). Registers exactly like
|
|
141
|
-
* {@link pairOverWebSocket};
|
|
142
|
-
*
|
|
193
|
+
* {@link pairOverWebSocket}; while the registration awaits an admin's approval
|
|
194
|
+
* (`pending-approval` state, or a legacy-shaped `awaitingApproval` response),
|
|
195
|
+
* this POLLS the Hub with the SAME pairing token until the admin approves the
|
|
143
196
|
* permission ceiling, receives the pairing-v2 trust payload, and writes the
|
|
144
197
|
* standalone identity file — no second pairing URL. A Hub that returns trust
|
|
145
198
|
* immediately (already-approved linked pairing, or a v1 Hub) is passed straight
|
|
@@ -147,6 +200,13 @@ export declare function pairOverWebSocket(pairUrl: string, appMeta: PairAppMeta,
|
|
|
147
200
|
* and the out-of-band fingerprint check still fires on first identity write.
|
|
148
201
|
*/
|
|
149
202
|
export declare function pairAndAwaitApproval(pairUrl: string, appMeta: PairAppMeta, WebSocketImpl?: typeof WebSocket, options?: PairOverWebSocketOptions): Promise<PairingResult>;
|
|
203
|
+
/**
|
|
204
|
+
* Explicitly resumes one durable app-announced-manifest pairing. This is a
|
|
205
|
+
* single operator/app action, not a polling loop: a pending Hub replies
|
|
206
|
+
* pending; an approved Hub returns trust for the same OAuth/app/pairing
|
|
207
|
+
* identity and the SDK atomically promotes it to the production identity.
|
|
208
|
+
*/
|
|
209
|
+
export declare function resumeStandalonePairing(options?: ResumeStandalonePairingOptions): Promise<PendingPairingResult | CompletedPairingResult>;
|
|
150
210
|
export declare function pairFromDescriptor(pairUrl: string, descriptor: AppDescriptor, WebSocketImpl?: typeof WebSocket, options?: PairOverWebSocketOptions): Promise<PairingResult>;
|
|
151
211
|
/**
|
|
152
212
|
* Connect to PrivOS relay WebSocket with exponential backoff, token refresh,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay-client.d.ts","sourceRoot":"","sources":["../../src/relay/relay-client.ts"],"names":[],"mappings":"AAAA,OAAO,SAA2B,MAAM,IAAI,CAAC;AAE7C,OAAO,EAEN,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAWzD,OAAO,EACN,gBAAgB,EAIhB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,kBAAkB,EACvB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAEN,KAAK,iCAAiC,EACtC,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"relay-client.d.ts","sourceRoot":"","sources":["../../src/relay/relay-client.ts"],"names":[],"mappings":"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"}
|