@privos_ai/app-server 0.5.0 → 0.6.2

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.
Files changed (64) hide show
  1. package/README.md +169 -2
  2. package/dist/app-descriptor.d.ts.map +1 -1
  3. package/dist/app-descriptor.js +2 -0
  4. package/dist/app-descriptor.js.map +1 -1
  5. package/dist/auth/user-token.d.ts.map +1 -1
  6. package/dist/auth/user-token.js +21 -3
  7. package/dist/auth/user-token.js.map +1 -1
  8. package/dist/context/tool-call-context.d.ts +15 -2
  9. package/dist/context/tool-call-context.d.ts.map +1 -1
  10. package/dist/direct/express-router.d.ts +3 -0
  11. package/dist/direct/express-router.d.ts.map +1 -1
  12. package/dist/direct/express-router.js +70 -10
  13. package/dist/direct/express-router.js.map +1 -1
  14. package/dist/direct/http-ingress.js +1 -1
  15. package/dist/direct/http-ingress.js.map +1 -1
  16. package/dist/index.d.ts +16 -6
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +7 -2
  19. package/dist/index.js.map +1 -1
  20. package/dist/relay/hub-user-token-actor.d.ts +62 -0
  21. package/dist/relay/hub-user-token-actor.d.ts.map +1 -0
  22. package/dist/relay/hub-user-token-actor.js +81 -0
  23. package/dist/relay/hub-user-token-actor.js.map +1 -0
  24. package/dist/relay/relay-client.d.ts +81 -11
  25. package/dist/relay/relay-client.d.ts.map +1 -1
  26. package/dist/relay/relay-client.js +139 -15
  27. package/dist/relay/relay-client.js.map +1 -1
  28. package/dist/relay/standalone-control.d.ts +45 -0
  29. package/dist/relay/standalone-control.d.ts.map +1 -0
  30. package/dist/relay/standalone-control.js +338 -0
  31. package/dist/relay/standalone-control.js.map +1 -0
  32. package/dist/relay/standalone-identity.d.ts +69 -0
  33. package/dist/relay/standalone-identity.d.ts.map +1 -0
  34. package/dist/relay/standalone-identity.js +204 -0
  35. package/dist/relay/standalone-identity.js.map +1 -0
  36. package/dist/relay/standalone-readiness.d.ts +33 -0
  37. package/dist/relay/standalone-readiness.d.ts.map +1 -0
  38. package/dist/relay/standalone-readiness.js +80 -0
  39. package/dist/relay/standalone-readiness.js.map +1 -0
  40. package/dist/runtime-mode.d.ts +25 -0
  41. package/dist/runtime-mode.d.ts.map +1 -0
  42. package/dist/runtime-mode.js +72 -0
  43. package/dist/runtime-mode.js.map +1 -0
  44. package/dist/runtime.d.ts +9 -5
  45. package/dist/runtime.d.ts.map +1 -1
  46. package/dist/runtime.js +9 -7
  47. package/dist/runtime.js.map +1 -1
  48. package/dist/workload/dispatch-assertion.d.ts +20 -8
  49. package/dist/workload/dispatch-assertion.d.ts.map +1 -1
  50. package/dist/workload/dispatch-assertion.js +30 -23
  51. package/dist/workload/dispatch-assertion.js.map +1 -1
  52. package/dist/workload/index.d.ts +3 -3
  53. package/dist/workload/index.d.ts.map +1 -1
  54. package/dist/workload/index.js +1 -1
  55. package/dist/workload/index.js.map +1 -1
  56. package/dist/workload/managed-ingress-authority.d.ts +26 -0
  57. package/dist/workload/managed-ingress-authority.d.ts.map +1 -0
  58. package/dist/workload/managed-ingress-authority.js +45 -0
  59. package/dist/workload/managed-ingress-authority.js.map +1 -0
  60. package/dist/workload/workload-identity.d.ts +26 -2
  61. package/dist/workload/workload-identity.d.ts.map +1 -1
  62. package/dist/workload/workload-identity.js +377 -19
  63. package/dist/workload/workload-identity.js.map +1 -1
  64. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { MCP_PROTOCOL_VERSION, MCP_UI_MIME } from './app-descriptor.js';
2
2
  export type { AppDescriptor, AppPermissionDescriptor, AppPermissionRequirement, AppPermissionContext, AppPermissionExecutionContext, } from './app-descriptor.js';
3
3
  export { buildInitializeResult, buildManifestJson, buildPairingMetadata, validateDescriptorCapabilities, validateDescriptorPermissions, } from './app-descriptor.js';
4
- export type { VerifiedActor, IdentityState, ToolCallContext, } from './context/tool-call-context.js';
4
+ export type { VerifiedActor, VerifiedActorProvenance, IdentityState, ToolCallContext, } from './context/tool-call-context.js';
5
5
  export type { AppAccessMode, PlatformContext } from './context/platform-context.js';
6
6
  export { getPlatformContext, publicUrlFor } from './context/platform-context.js';
7
7
  export type { IdentityEnforcementMode } from './context/identity-mode.js';
@@ -19,12 +19,22 @@ 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
21
  export { pairOverWebSocket, pairFromDescriptor, connectRelay, } from './relay/relay-client.js';
22
- export type { PairAppMeta, PairingResult, RelayClientOptions, RelayHandle, } from './relay/relay-client.js';
22
+ export type { PairAppMeta, PairingResult, PairOverWebSocketOptions, RelayClientOptions, RelayHandle, } from './relay/relay-client.js';
23
23
  export { rawDataToText, MessageTooLargeError } from './relay/message-adapter.js';
24
- export { DEFAULT_WORKLOAD_SOCKET, WorkloadIdentityClient, WorkloadIdentityError, WorkloadPermissionDeniedError, getWorkloadIdentityClient, } from './workload/workload-identity.js';
25
- export type { EffectiveCapabilities, WorkloadBinding, WorkloadBrokerContext, WorkloadBrokerResponse, WorkloadFetchInit, WorkloadIdentityClientOptions, WorkloadIdentityErrorCode, } from './workload/workload-identity.js';
26
- export { BoundedRuntimeDispatchReplayConsumerV3, assertRuntimeDispatchRelayAffinityV3, assertRuntimeDispatchTrustConfigurationV3, extractRuntimeDispatchRelayEnvelopeV3, isExactRuntimeReadinessRpcV3, isUnsignedRuntimeReadinessRpcV3, parseRuntimeDispatchTrustV3Json, sha256RuntimeDispatchBodyV3, verifyDispatchAssertion, verifyRuntimeDispatchAssertionV3, } from './workload/dispatch-assertion.js';
27
- export type { RuntimeDispatchAffinityV3, RuntimeDispatchExecutionModeV3, RuntimeDispatchRelayAuthorizationV3, RuntimeDispatchRelayEnvelopeV3, RuntimeDispatchReplayConsumerV3, RuntimeDispatchReplayInputV3, RuntimeDispatchSecurityV3, RuntimeDispatchTrustHintV3, RuntimeDispatchTrustResolverV3, RuntimeDispatchTrustV3, VerifiedDispatchActor, VerifiedDispatchAssertion, VerifiedRuntimeDispatchAssertionV3, } from './workload/dispatch-assertion.js';
24
+ export { DEFAULT_HUB_USER_TOKEN_JWKS_PATH, buildHubUserTokenAuthOptions, extractRelayUserTokenCredential, validateHubUserTokenOrigin, } from './relay/hub-user-token-actor.js';
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';
28
+ export { STANDALONE_SECRET_ROTATE_METHOD, STANDALONE_TRUST_ROTATE_METHOD, STANDALONE_CAPABILITIES_CHANGED_METHOD, StandaloneControlError, isStandaloneControlMethod, createStandaloneRelayIdentityController, loadStandaloneRelayIdentityController, } from './relay/standalone-control.js';
29
+ export type { StandaloneEffectiveCapabilities, StandaloneRelayIdentityController, StandaloneRelayIdentityControllerOptions, } from './relay/standalone-control.js';
30
+ export { checkManifestDigestDrift, createStandaloneReadinessCheck, } from './relay/standalone-readiness.js';
31
+ export type { StandaloneReadinessCheckOptions, StandaloneReadinessReason, StandaloneReadinessResult, } from './relay/standalone-readiness.js';
32
+ export { resolveRuntimeMode, RuntimeModeError } from './runtime-mode.js';
33
+ export type { RuntimeMode, RuntimeModeResolution, RuntimeModeErrorCode, ResolveRuntimeModeOptions, } from './runtime-mode.js';
34
+ export { DEFAULT_WORKLOAD_SOCKET, WorkloadIdentityClient, WorkloadIdentityError, WorkloadPermissionDeniedError, RoomBoundWorkloadClient, getWorkloadIdentityClient, } from './workload/workload-identity.js';
35
+ export type { EffectiveCapabilities, WorkloadBinding, WorkloadBrokerContext, WorkloadBrokerResponse, WorkloadFetchInit, RoomBoundWorkloadFetchInit, WorkloadIdentityClientOptions, WorkloadIdentityErrorCode, } from './workload/workload-identity.js';
36
+ export { BoundedRuntimeDispatchReplayConsumerV3, assertRuntimeDispatchRelayAffinityV3, assertRuntimeDispatchTrustConfigurationV3, extractRuntimeDispatchRelayEnvelopeV3, isExactRuntimeReadinessRpcV3, isUnsignedRuntimeReadinessRpcV3, parseRuntimeDispatchTrustV3Json, sha256RuntimeDispatchBodyV3, verifyClusterDispatchAssertionV3, verifyDispatchAssertion, verifyRuntimeDispatchAssertionV3, } from './workload/dispatch-assertion.js';
37
+ export type { RuntimeDispatchAffinityV3, RuntimeDispatchExecutionModeV3, RuntimeDispatchRelayAuthorizationV3, RuntimeDispatchRelayEnvelopeV3, RuntimeDispatchReplayConsumerV3, RuntimeDispatchReplayInputV3, RuntimeDispatchSecurityV3, RuntimeDispatchTrustHintV3, RuntimeDispatchTrustResolverV3, RuntimeDispatchTrustV3, VerifiedClusterDispatchAssertionV3, VerifiedDispatchActor, VerifiedDispatchAssertion, VerifiedRuntimeDispatchAssertionV3, VerifiedRuntimeAuthorizationV3, } from './workload/dispatch-assertion.js';
28
38
  export { createPinnedPortalJwksResolverV3, createPublisherRuntimeTrustProvisioningRouterV3, SingleProcessFilePublisherRuntimeTrustStoreV3, } from './workload/publisher-runtime-trust.js';
29
39
  export type { PublisherPortalJwksResolutionV3, PublisherPortalJwksResolverV3, PublisherRuntimeTrustActiveEvidenceV3, PublisherRuntimeTrustDurableStoreV3, PublisherRuntimeTrustEvidenceV3, PublisherRuntimeTrustOperationV3, PublisherRuntimeTrustPreparedEvidenceV3, PublisherRuntimeTrustProvisioningRequestV3, PublisherRuntimeTrustProvisioningRouterOptionsV3, PublisherRuntimeTrustStoreMutationV3, } from './workload/publisher-runtime-trust.js';
30
40
  export { canonicalJson, canonicalJsonValue, lintManifest, lintManifestV2, sha256CanonicalJson, SUPPORTED_MANIFEST_SCHEMA_VERSIONS, } from './manifest-tools.js';
@@ -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
@@ -11,8 +11,13 @@ export { createDirectRouter } from './direct/express-router.js';
11
11
  export { createHttpIngressApp, startHttpIngress, resolveHttpIngressListen, } from './direct/http-ingress.js';
12
12
  export { pairOverWebSocket, pairFromDescriptor, connectRelay, } from './relay/relay-client.js';
13
13
  export { rawDataToText, MessageTooLargeError } from './relay/message-adapter.js';
14
- export { DEFAULT_WORKLOAD_SOCKET, WorkloadIdentityClient, WorkloadIdentityError, WorkloadPermissionDeniedError, getWorkloadIdentityClient, } from './workload/workload-identity.js';
15
- export { BoundedRuntimeDispatchReplayConsumerV3, assertRuntimeDispatchRelayAffinityV3, assertRuntimeDispatchTrustConfigurationV3, extractRuntimeDispatchRelayEnvelopeV3, isExactRuntimeReadinessRpcV3, isUnsignedRuntimeReadinessRpcV3, parseRuntimeDispatchTrustV3Json, sha256RuntimeDispatchBodyV3, verifyDispatchAssertion, verifyRuntimeDispatchAssertionV3, } from './workload/dispatch-assertion.js';
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';
16
+ export { STANDALONE_SECRET_ROTATE_METHOD, STANDALONE_TRUST_ROTATE_METHOD, STANDALONE_CAPABILITIES_CHANGED_METHOD, StandaloneControlError, isStandaloneControlMethod, createStandaloneRelayIdentityController, loadStandaloneRelayIdentityController, } from './relay/standalone-control.js';
17
+ export { checkManifestDigestDrift, createStandaloneReadinessCheck, } from './relay/standalone-readiness.js';
18
+ export { resolveRuntimeMode, RuntimeModeError } from './runtime-mode.js';
19
+ export { DEFAULT_WORKLOAD_SOCKET, WorkloadIdentityClient, WorkloadIdentityError, WorkloadPermissionDeniedError, RoomBoundWorkloadClient, getWorkloadIdentityClient, } from './workload/workload-identity.js';
20
+ export { BoundedRuntimeDispatchReplayConsumerV3, assertRuntimeDispatchRelayAffinityV3, assertRuntimeDispatchTrustConfigurationV3, extractRuntimeDispatchRelayEnvelopeV3, isExactRuntimeReadinessRpcV3, isUnsignedRuntimeReadinessRpcV3, parseRuntimeDispatchTrustV3Json, sha256RuntimeDispatchBodyV3, verifyClusterDispatchAssertionV3, verifyDispatchAssertion, verifyRuntimeDispatchAssertionV3, } from './workload/dispatch-assertion.js';
16
21
  export { createPinnedPortalJwksResolverV3, createPublisherRuntimeTrustProvisioningRouterV3, SingleProcessFilePublisherRuntimeTrustStoreV3, } from './workload/publisher-runtime-trust.js';
17
22
  export { canonicalJson, canonicalJsonValue, lintManifest, lintManifestV2, sha256CanonicalJson, SUPPORTED_MANIFEST_SCHEMA_VERSIONS, } from './manifest-tools.js';
18
23
  //# sourceMappingURL=index.js.map
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;AAQ7B,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,kBAAkB,EAClB,YAAY,GACZ,MAAM,yBAAyB,CAAC;AAOjC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEjF,OAAO,EACN,uBAAuB,EACvB,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,yBAAyB,GACzB,MAAM,iCAAiC,CAAC;AAUzC,OAAO,EACN,sCAAsC,EACtC,oCAAoC,EACpC,yCAAyC,EACzC,qCAAqC,EACrC,4BAA4B,EAC5B,+BAA+B,EAC/B,+BAA+B,EAC/B,2BAA2B,EAC3B,uBAAuB,EACvB,gCAAgC,GAChC,MAAM,kCAAkC,CAAC;AAgB1C,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"}
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,kBAAkB,EAClB,YAAY,GACZ,MAAM,yBAAyB,CAAC;AAQjC,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,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC5B,wBAAwB,EACxB,6BAA6B,GAC7B,MAAM,gCAAgC,CAAC;AAMxC,OAAO,EACN,+BAA+B,EAC/B,8BAA8B,EAC9B,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,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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Hub-signed RS256 user token verification for the Relay transport.
3
+ *
4
+ * Protocol-v3 runtime dispatch (`SELF_HOSTED_LOCAL` / `PUBLISHER_HOSTED`) has
5
+ * no room for an `actor` claim inside the signed dispatch assertion — only
6
+ * the managed-Cluster assertion variant carries one
7
+ * (`dispatch-assertion.ts` `CLUSTER_DISPATCH_V3_OPTIONAL_KEYS`). Instead, the
8
+ * Hub sends caller identity for these apps as a SEPARATE short-lived RS256
9
+ * JWT at `params._meta.privosUser.userToken`, verifiable against the Hub's
10
+ * published JWKS (`/.well-known/mcp-apps/jwks.json`).
11
+ *
12
+ * The plain `userId` / `username` / `roomId` fields that ride alongside the
13
+ * token are NOT proof of anything — only the signed token is. This module
14
+ * never builds a `VerifiedActor` from those plain fields; `userId` is passed
15
+ * through only as `assertedUserId`, which `verifyUserToken` cross-checks
16
+ * against the verified token's `sub` and REJECTS on mismatch — it never
17
+ * substitutes for verification.
18
+ */
19
+ import type { AuthOptions, CallerCredential } from '../auth/user-token.js';
20
+ import type { RelayCallerAuthSurface } from '../runtime.js';
21
+ /** Path the Hub serves its MCP-app user-token JWKS at (`mcp-user-token-jwks.ts`). */
22
+ export declare const DEFAULT_HUB_USER_TOKEN_JWKS_PATH = "/.well-known/mcp-apps/jwks.json";
23
+ /**
24
+ * Validate and normalize a Hub origin used only for user-token JWKS
25
+ * verification. Always a caller-supplied, config-time value (Relay
26
+ * `RelayClientOptions.privosUrl`, or a Direct/Cluster workload broker's
27
+ * `hubOrigin`) — an inbound WebSocket/HTTP message field must never reach
28
+ * this function.
29
+ */
30
+ export declare function validateHubUserTokenOrigin(origin: string): string;
31
+ export interface HubUserTokenAuthOptions {
32
+ /** Config-time Hub origin — see {@link validateHubUserTokenOrigin}. */
33
+ hubOrigin: string;
34
+ /** This app's own `mcpAppId` — checked against the token's `aud` claim. */
35
+ audience: string | readonly string[] | (() => string | readonly string[]);
36
+ /** Default {@link DEFAULT_HUB_USER_TOKEN_JWKS_PATH}. */
37
+ jwksPath?: string;
38
+ issuer?: string | readonly string[];
39
+ clockToleranceSeconds?: number;
40
+ jwksCacheTtlMs?: number;
41
+ fetchTimeoutMs?: number;
42
+ }
43
+ /**
44
+ * Builds `AuthOptions` for verifying a Hub-signed user token against the Hub
45
+ * JWKS. Production-plaintext-HTTP refusal, JWKS-fetch timeout bounding, and
46
+ * unknown-`kid` refetch-once-then-fail all live in the shared
47
+ * `auth/user-token.ts` verifier this feeds — this function only assembles
48
+ * the pointer at the correct, trusted origin.
49
+ */
50
+ export declare function buildHubUserTokenAuthOptions(input: HubUserTokenAuthOptions): AuthOptions;
51
+ /**
52
+ * Built-in Relay `CallerCredentialExtractor` for the Hub-signed user token.
53
+ * Reads only the signed `userToken`; `userId` rides along as
54
+ * `assertedUserId`, cross-checked (never trusted on its own) by
55
+ * `verifyUserToken` against the token's verified `sub`.
56
+ *
57
+ * Returns `undefined` — never throws — when `_meta.privosUser` is absent or
58
+ * malformed, so a caller with no usable token degrades to
59
+ * `identityState: 'missing'` (fail closed) rather than failing dispatch.
60
+ */
61
+ export declare function extractRelayUserTokenCredential(surface: RelayCallerAuthSurface): CallerCredential | undefined;
62
+ //# sourceMappingURL=hub-user-token-actor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub-user-token-actor.d.ts","sourceRoot":"","sources":["../../src/relay/hub-user-token-actor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE5D,qFAAqF;AACrF,eAAO,MAAM,gCAAgC,oCAAoC,CAAC;AAelF;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAWjE;AAED,MAAM,WAAW,uBAAuB;IACvC,uEAAuE;IACvE,SAAS,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,CAAC,MAAM,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC;IAC1E,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACpC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,uBAAuB,GAAG,WAAW,CAWxF;AAMD;;;;;;;;;GASG;AACH,wBAAgB,+BAA+B,CAC9C,OAAO,EAAE,sBAAsB,GAC7B,gBAAgB,GAAG,SAAS,CAgB9B"}
@@ -0,0 +1,81 @@
1
+ /** Path the Hub serves its MCP-app user-token JWKS at (`mcp-user-token-jwks.ts`). */
2
+ export const DEFAULT_HUB_USER_TOKEN_JWKS_PATH = '/.well-known/mcp-apps/jwks.json';
3
+ /** Mirrors the Hub JWKS route's own `Cache-Control: max-age=300`. */
4
+ const DEFAULT_JWKS_CACHE_TTL_MS = 5 * 60 * 1000;
5
+ /**
6
+ * The Hub mints these tokens with a 5-minute TTL and no built-in future-skew
7
+ * budget beyond clock drift — 5s mirrors the dispatch-assertion verifier's
8
+ * own default skew (`dispatch-assertion.ts` `clockSkewSeconds`), not the
9
+ * generic 30s default `verifyUserToken` uses for other callers.
10
+ */
11
+ const DEFAULT_CLOCK_TOLERANCE_SECONDS = 5;
12
+ const DEFAULT_FETCH_TIMEOUT_MS = 5_000;
13
+ /**
14
+ * Validate and normalize a Hub origin used only for user-token JWKS
15
+ * verification. Always a caller-supplied, config-time value (Relay
16
+ * `RelayClientOptions.privosUrl`, or a Direct/Cluster workload broker's
17
+ * `hubOrigin`) — an inbound WebSocket/HTTP message field must never reach
18
+ * this function.
19
+ */
20
+ export function validateHubUserTokenOrigin(origin) {
21
+ let url;
22
+ try {
23
+ url = new URL(origin);
24
+ }
25
+ catch {
26
+ throw new Error('Invalid Hub origin for user-token JWKS verification.');
27
+ }
28
+ if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password || url.search || url.hash) {
29
+ throw new Error('Invalid Hub origin for user-token JWKS verification.');
30
+ }
31
+ return url.origin;
32
+ }
33
+ /**
34
+ * Builds `AuthOptions` for verifying a Hub-signed user token against the Hub
35
+ * JWKS. Production-plaintext-HTTP refusal, JWKS-fetch timeout bounding, and
36
+ * unknown-`kid` refetch-once-then-fail all live in the shared
37
+ * `auth/user-token.ts` verifier this feeds — this function only assembles
38
+ * the pointer at the correct, trusted origin.
39
+ */
40
+ export function buildHubUserTokenAuthOptions(input) {
41
+ const origin = validateHubUserTokenOrigin(input.hubOrigin);
42
+ const jwksUrl = new URL(input.jwksPath ?? DEFAULT_HUB_USER_TOKEN_JWKS_PATH, origin);
43
+ return {
44
+ jwksUrl,
45
+ audience: input.audience,
46
+ ...(input.issuer !== undefined ? { issuer: input.issuer } : {}),
47
+ clockToleranceSeconds: input.clockToleranceSeconds ?? DEFAULT_CLOCK_TOLERANCE_SECONDS,
48
+ jwksCacheTtlMs: input.jwksCacheTtlMs ?? DEFAULT_JWKS_CACHE_TTL_MS,
49
+ fetchTimeoutMs: input.fetchTimeoutMs ?? DEFAULT_FETCH_TIMEOUT_MS,
50
+ };
51
+ }
52
+ function isRecord(value) {
53
+ return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
54
+ }
55
+ /**
56
+ * Built-in Relay `CallerCredentialExtractor` for the Hub-signed user token.
57
+ * Reads only the signed `userToken`; `userId` rides along as
58
+ * `assertedUserId`, cross-checked (never trusted on its own) by
59
+ * `verifyUserToken` against the token's verified `sub`.
60
+ *
61
+ * Returns `undefined` — never throws — when `_meta.privosUser` is absent or
62
+ * malformed, so a caller with no usable token degrades to
63
+ * `identityState: 'missing'` (fail closed) rather than failing dispatch.
64
+ */
65
+ export function extractRelayUserTokenCredential(surface) {
66
+ const meta = surface._meta;
67
+ if (!isRecord(meta) || !Object.prototype.hasOwnProperty.call(meta, 'privosUser')) {
68
+ return undefined;
69
+ }
70
+ const privosUser = meta.privosUser;
71
+ if (!isRecord(privosUser) || typeof privosUser.userToken !== 'string' || !privosUser.userToken) {
72
+ return undefined;
73
+ }
74
+ const assertedUserId = typeof privosUser.userId === 'string' && privosUser.userId ? privosUser.userId : undefined;
75
+ return {
76
+ token: privosUser.userToken,
77
+ ...(assertedUserId !== undefined ? { assertedUserId } : {}),
78
+ source: 'relay-metadata',
79
+ };
80
+ }
81
+ //# sourceMappingURL=hub-user-token-actor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hub-user-token-actor.js","sourceRoot":"","sources":["../../src/relay/hub-user-token-actor.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,8 @@ import WebSocket from 'ws';
2
2
  import { type AppDescriptor, type AppPermissionDescriptor } from '../app-descriptor.js';
3
3
  import type { AuthOptions } from '../auth/user-token.js';
4
4
  import { AppServerRuntime, type AppErrorMapper, type AppMcpHandler, type AppServerRuntimeOptions, type CallerCredentialExtractor, type RelayCallerAuthSurface, type RuntimeLimits, type UiResourceProvider } from '../runtime.js';
5
- import { type RuntimeDispatchSecurityV3 } from '../workload/dispatch-assertion.js';
5
+ import { type StandaloneRelayIdentityController } from './standalone-control.js';
6
+ import { type RuntimeDispatchSecurityV3, type RuntimeDispatchTrustV3 } from '../workload/dispatch-assertion.js';
6
7
  export interface PairAppMeta {
7
8
  name: string;
8
9
  description?: string;
@@ -10,17 +11,56 @@ export interface PairAppMeta {
10
11
  icon?: string;
11
12
  scopes?: string[];
12
13
  permissions?: AppPermissionDescriptor[];
14
+ /**
15
+ * The app's own `privos-app.json`, announced at pairing so no admin ever
16
+ * handles the file. A Hub that accepts it registers a v3 app carrying this
17
+ * contract, declared but unapproved: the app holds credentials and no grant
18
+ * until an admin approves a ceiling, and no dispatch trust until it pairs
19
+ * again against the approved app. Omit it to register a legacy relay app.
20
+ */
21
+ manifest?: unknown;
13
22
  }
14
23
  export interface PairingResult {
15
24
  privosUrl: string;
16
25
  clientId: string;
17
26
  clientSecret: string;
18
27
  mcpAppId?: string;
28
+ /** Present only when the Hub replied with pairing payload v2 (Hub dispatch trust bootstrap). */
29
+ pairingVersion?: 2;
30
+ trust?: RuntimeDispatchTrustV3;
31
+ /** `SHA256:<hubKid>` — print/compare out-of-band, SSH-host-key style. */
32
+ fingerprint?: string;
33
+ /** Absolute path the standalone identity file was written to, when persisted. */
34
+ identityFilePath?: string;
35
+ /**
36
+ * The Hub registered this app from its announced manifest and is waiting for
37
+ * an admin to approve a permission ceiling. The credentials above are real,
38
+ * but the app is granted nothing and carries no dispatch trust yet — pair
39
+ * again once approved to receive it.
40
+ */
41
+ awaitingApproval?: boolean;
42
+ }
43
+ export interface PairOverWebSocketOptions {
44
+ timeoutMs?: number;
45
+ /**
46
+ * Persist a v2 pairing result as a standalone identity file. Default `true`
47
+ * — set `false` only when the caller manages persistence itself.
48
+ */
49
+ persistIdentityFile?: boolean;
50
+ /** Overrides `PRIVOS_STANDALONE_IDENTITY_FILE` / the SDK default. */
51
+ identityFilePath?: string;
52
+ /** Receives the fingerprint line for out-of-band operator verification; defaults to `console.log`. */
53
+ onFingerprint?: (fingerprint: string) => void;
19
54
  }
20
55
  export interface RelayClientOptions {
21
56
  privosUrl: string;
22
- clientId: string;
23
- clientSecret: string;
57
+ /**
58
+ * Required unless `standaloneIdentity` is given, in which case live
59
+ * credentials are read from the controller on every token request
60
+ * (rotation-safe) and these are ignored.
61
+ */
62
+ clientId?: string;
63
+ clientSecret?: string;
24
64
  descriptor: AppDescriptor | (() => AppDescriptor | Promise<AppDescriptor>);
25
65
  handler: AppMcpHandler;
26
66
  ui?: UiResourceProvider;
@@ -40,25 +80,55 @@ export interface RelayClientOptions {
40
80
  fetchImpl?: typeof fetch;
41
81
  WebSocketImpl?: typeof WebSocket;
42
82
  runtime?: AppServerRuntime;
43
- /** Explicit required final-boundary authorization for protocol-v3 publisher Relay traffic. */
83
+ /**
84
+ * Explicit required final-boundary authorization for protocol-v3 publisher
85
+ * Relay traffic. Ignored when `standaloneIdentity` is given — its pinned
86
+ * trust is used instead, kept live across trust rotation.
87
+ */
44
88
  runtimeDispatchV3?: RuntimeDispatchSecurityV3;
89
+ /**
90
+ * Standalone-production identity source (phase 3 pairing). When set, this
91
+ * is the sole source of Relay OAuth credentials and dispatch trust —
92
+ * `clientId` / `clientSecret` / `runtimeDispatchV3` are ignored — and
93
+ * `notifications/privos.standalone*` control messages (secret rotation,
94
+ * trust rotation, capabilities push) are handled automatically.
95
+ */
96
+ standaloneIdentity?: StandaloneRelayIdentityController;
97
+ /**
98
+ * Verify the Hub-signed RS256 user token carried at `_meta.privosUser` and
99
+ * populate `context.actor` for protocol-v3 runtime dispatch
100
+ * (`SELF_HOSTED_LOCAL` / `PUBLISHER_HOSTED`) — the assertion itself has no
101
+ * `actor` claim on this path, so this is the only signed source of caller
102
+ * identity Relay apps have. Default `'auto'`: wired in automatically using
103
+ * `privosUrl` as the Hub origin and this app's own `mcpAppId` as audience
104
+ * whenever `standaloneIdentity` is set, or `runtimeDispatchV3.trust` is a
105
+ * static (non-resolver) trust record — and only when the caller has not
106
+ * already supplied `auth` / `extractCallerCredential`. Set `'disabled'` to
107
+ * opt out entirely.
108
+ */
109
+ hubUserTokenAuth?: 'auto' | 'disabled';
45
110
  }
46
111
  export interface RelayHandle {
47
112
  /** Stop reconnecting and close the active socket. */
48
113
  stop(): Promise<void>;
49
114
  /** Resolves when the first successful connection opens (or rejects if stopped first). */
50
115
  whenConnected(): Promise<void>;
116
+ /** True only while the current WebSocket is open past the authenticated handshake. */
117
+ isConnected(): boolean;
51
118
  }
52
119
  /**
53
120
  * Pair with Privos using a one-time pairing URL.
54
- * Does not persist credentials — caller is responsible for saving them.
121
+ *
122
+ * A v1 Hub response (no `pairingVersion`) behaves exactly as before: credentials
123
+ * are returned only, and the caller is responsible for saving them. A v2 Hub
124
+ * response additionally carries Hub dispatch trust; by default this function
125
+ * validates it and persists ONE standalone identity file (mode `0600`, `wx` on
126
+ * create — same discipline as the Hub's own identity file), then prints the
127
+ * Hub fingerprint for out-of-band operator verification. Set
128
+ * `persistIdentityFile: false` to opt out and handle persistence yourself.
55
129
  */
56
- export declare function pairOverWebSocket(pairUrl: string, appMeta: PairAppMeta, WebSocketImpl?: typeof WebSocket, options?: {
57
- timeoutMs?: number;
58
- }): Promise<PairingResult>;
59
- export declare function pairFromDescriptor(pairUrl: string, descriptor: AppDescriptor, WebSocketImpl?: typeof WebSocket, options?: {
60
- timeoutMs?: number;
61
- }): Promise<PairingResult>;
130
+ export declare function pairOverWebSocket(pairUrl: string, appMeta: PairAppMeta, WebSocketImpl?: typeof WebSocket, options?: PairOverWebSocketOptions): Promise<PairingResult>;
131
+ export declare function pairFromDescriptor(pairUrl: string, descriptor: AppDescriptor, WebSocketImpl?: typeof WebSocket, options?: PairOverWebSocketOptions): Promise<PairingResult>;
62
132
  /**
63
133
  * Connect to PrivOS relay WebSocket with exponential backoff, token refresh,
64
134
  * single reconnect timer, and explicit stop().
@@ -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;AAOzD,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,EAGN,KAAK,yBAAyB,EAE9B,MAAM,mCAAmC,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,CAAC,EAAE,uBAAuB,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,aAAa;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAOD,MAAM,WAAW,kBAAkB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,aAAa,GAAG,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3E,OAAO,EAAE,aAAa,CAAC;IACvB,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACxB,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,uBAAuB,CAAC,QAAQ,CAAC,CAAC;IAC3C;;;OAGG;IACH,uBAAuB,CAAC,EAAE,yBAAyB,CAAC,sBAAsB,CAAC,CAAC;IAC5E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,uEAAuE;IACvE,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,0BAA0B;IAC1B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,SAAS,CAAC;IACjC,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,8FAA8F;IAC9F,iBAAiB,CAAC,EAAE,yBAAyB,CAAC;CAC9C;AAED,MAAM,WAAW,WAAW;IAC3B,qDAAqD;IACrD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,yFAAyF;IACzF,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,WAAW,EACpB,aAAa,GAAE,OAAO,SAAqB,EAC3C,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,OAAO,CAAC,aAAa,CAAC,CAgHxB;AAED,wBAAsB,kBAAkB,CACvC,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,aAAa,EACzB,aAAa,CAAC,EAAE,OAAO,SAAS,EAChC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,OAAO,CAAC,aAAa,CAAC,CAOxB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,kBAAkB,GAAG,WAAW,CAyZlE"}
1
+ {"version":3,"file":"relay-client.d.ts","sourceRoot":"","sources":["../../src/relay/relay-client.ts"],"names":[],"mappings":"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"}